venice-ui 3.0.54 → 3.0.56
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/dist/cjs/components/PageSize/PageSize.js +36 -0
- package/dist/cjs/components/PageSize/index.js +17 -0
- package/dist/cjs/components/Pagination/Pagination.js +2 -21
- package/dist/cjs/components/Pagination/Pagination.styles.js +3 -1
- package/dist/cjs/components/Table/Table.js +87 -32
- package/dist/cjs/components/Table/Table.styles.js +53 -6
- package/dist/cjs/config/config.js +23 -4
- package/dist/cjs/config/wordbook.js +1 -0
- package/dist/esm/components/PageSize/PageSize.js +29 -0
- package/dist/esm/components/PageSize/index.js +1 -0
- package/dist/esm/components/Pagination/Pagination.js +2 -21
- package/dist/esm/components/Pagination/Pagination.styles.js +3 -1
- package/dist/esm/components/Table/Table.js +89 -34
- package/dist/esm/components/Table/Table.styles.js +52 -5
- package/dist/esm/config/config.js +23 -4
- package/dist/esm/config/wordbook.js +1 -0
- package/dist/types/components/PageSize/PageSize.d.ts +13 -0
- package/dist/types/components/PageSize/index.d.ts +1 -0
- package/dist/types/components/Pagination/Pagination.d.ts +0 -5
- package/dist/types/components/Table/Table.d.ts +5 -1
- package/dist/types/components/Table/Table.styles.d.ts +12 -0
- package/dist/types/config/config.d.ts +69 -12
- package/dist/types/config/wordbook.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,36 @@
|
|
|
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.PageSize = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const Dropdown_1 = require("../Dropdown");
|
|
9
|
+
const styled_components_1 = require("styled-components");
|
|
10
|
+
const config_1 = require("../../config");
|
|
11
|
+
const PageSize = ({ theme, themeVariant = 'default', onPageSizeChange, label = config_1.wordbook.pagination.dropdownLabel, zIndex, availableValues = [10, 20, 50], pageSize, }) => {
|
|
12
|
+
const resolvedThemeData = (0, config_1.resolveThemeWithComponentsConfig)({
|
|
13
|
+
theme,
|
|
14
|
+
themeVariant,
|
|
15
|
+
});
|
|
16
|
+
const resolvedTheme = resolvedThemeData.resolvedTheme;
|
|
17
|
+
const pageSizeStr = !isNaN(pageSize) ? String(pageSize) : '10';
|
|
18
|
+
let dropdownOptions = availableValues.map((size) => ({
|
|
19
|
+
value: size.toString(),
|
|
20
|
+
label: size.toString(),
|
|
21
|
+
}));
|
|
22
|
+
if (!dropdownOptions.some((opt) => opt.value === pageSizeStr)) {
|
|
23
|
+
dropdownOptions = [
|
|
24
|
+
{ value: pageSizeStr, label: pageSizeStr },
|
|
25
|
+
...dropdownOptions,
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: resolvedTheme },
|
|
29
|
+
react_1.default.createElement(Dropdown_1.Dropdown, { size: "sm", label: label, labelPosition: "left", handleChange: (name, value) => {
|
|
30
|
+
const num = Number(value);
|
|
31
|
+
if (!isNaN(num) && num > 0) {
|
|
32
|
+
onPageSizeChange(num);
|
|
33
|
+
}
|
|
34
|
+
}, name: "pageSize", value: String(pageSize), options: dropdownOptions, width: "auto", componentWidth: "80px", zIndex: zIndex })));
|
|
35
|
+
};
|
|
36
|
+
exports.PageSize = PageSize;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./PageSize"), exports);
|
|
@@ -8,10 +8,8 @@ const config_1 = require("../../config");
|
|
|
8
8
|
const Pagination_styles_1 = require("./Pagination.styles");
|
|
9
9
|
const Icon_1 = require("../Icon");
|
|
10
10
|
const react_1 = __importDefault(require("react"));
|
|
11
|
-
const Dropdown_1 = require("../Dropdown");
|
|
12
|
-
const config_2 = require("../../config");
|
|
13
11
|
const styled_components_1 = require("styled-components");
|
|
14
|
-
const Pagination = ({ theme, themeVariant = 'default', currentPage, totalPages,
|
|
12
|
+
const Pagination = ({ theme, themeVariant = 'default', currentPage, totalPages, onPageChange, }) => {
|
|
15
13
|
const resolvedThemeData = (0, config_1.resolveThemeWithComponentsConfig)({
|
|
16
14
|
theme,
|
|
17
15
|
themeVariant,
|
|
@@ -39,28 +37,11 @@ const Pagination = ({ theme, themeVariant = 'default', currentPage, totalPages,
|
|
|
39
37
|
return pages;
|
|
40
38
|
};
|
|
41
39
|
const pageNumbers = getPageNumbers(currentPage, totalPages);
|
|
42
|
-
const pageSizeStr = !isNaN(pageSize) ? String(pageSize) : '10';
|
|
43
|
-
let dropdownOptions = availableValues.map((size) => ({
|
|
44
|
-
value: size.toString(),
|
|
45
|
-
label: size.toString(),
|
|
46
|
-
}));
|
|
47
|
-
if (!dropdownOptions.some((opt) => opt.value === pageSizeStr)) {
|
|
48
|
-
dropdownOptions = [
|
|
49
|
-
{ value: pageSizeStr, label: pageSizeStr },
|
|
50
|
-
...dropdownOptions,
|
|
51
|
-
];
|
|
52
|
-
}
|
|
53
40
|
return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: resolvedTheme },
|
|
54
41
|
react_1.default.createElement(Pagination_styles_1.PaginationRoot, { theme: resolvedTheme, config: paginationConfig },
|
|
55
42
|
react_1.default.createElement(Pagination_styles_1.PaginationItemWrapper, { theme: resolvedTheme, config: paginationConfig },
|
|
56
43
|
react_1.default.createElement(Icon_1.Icon, { name: 'back', size: "md", onClick: () => onPageChange(Math.max(1, currentPage - 1)), isDisabled: currentPage === 1 }),
|
|
57
44
|
pageNumbers.map((num, idx) => num === '...' ? (react_1.default.createElement("span", { key: `ellipsis-${idx}` }, "...")) : (react_1.default.createElement(Pagination_styles_1.PaginationItem, { key: num, onClick: () => onPageChange(Number(num)), isActive: num === currentPage, theme: resolvedTheme, config: paginationConfig }, num))),
|
|
58
|
-
react_1.default.createElement(Icon_1.Icon, { name: 'forward', size: "md", onClick: () => onPageChange(Math.min(totalPages, currentPage + 1)), isDisabled: currentPage === totalPages }))
|
|
59
|
-
react_1.default.createElement(Dropdown_1.Dropdown, { size: "sm", label: label, labelPosition: "left", handleChange: (name, value) => {
|
|
60
|
-
const num = Number(value);
|
|
61
|
-
if (!isNaN(num) && num > 0) {
|
|
62
|
-
onPageSizeChange(num);
|
|
63
|
-
}
|
|
64
|
-
}, name: "pageSize", value: String(pageSize), options: dropdownOptions, width: 'auto', componentWidth: '80px', zIndex: zIndex }))));
|
|
45
|
+
react_1.default.createElement(Icon_1.Icon, { name: 'forward', size: "md", onClick: () => onPageChange(Math.min(totalPages, currentPage + 1)), isDisabled: currentPage === totalPages })))));
|
|
65
46
|
};
|
|
66
47
|
exports.Pagination = Pagination;
|
|
@@ -7,7 +7,7 @@ exports.PaginationDropdownWrapper = exports.PaginationItem = exports.PaginationI
|
|
|
7
7
|
const styled_components_1 = __importDefault(require("styled-components"));
|
|
8
8
|
exports.PaginationRoot = styled_components_1.default.div `
|
|
9
9
|
display: flex;
|
|
10
|
-
justify-content:
|
|
10
|
+
justify-content: center;
|
|
11
11
|
align-items: center;
|
|
12
12
|
width: auto;
|
|
13
13
|
box-sizing: border-box;
|
|
@@ -27,6 +27,8 @@ exports.PaginationItem = styled_components_1.default.button `Ś
|
|
|
27
27
|
justify-content: center;
|
|
28
28
|
height: ${({ theme, config }) => config.size.height}px;
|
|
29
29
|
width: ${({ theme, config }) => config.size.width}px;
|
|
30
|
+
font-size: ${({ theme, config }) => config.size.fontSize}px;
|
|
31
|
+
line-height: ${({ theme, config }) => config.size.lineHeight}px;
|
|
30
32
|
background-color: ${({ theme, config, disabled, isActive }) => disabled
|
|
31
33
|
? config.color.disabled.background
|
|
32
34
|
: isActive
|
|
@@ -44,10 +44,12 @@ const Filters_1 = require("../Filters");
|
|
|
44
44
|
const Pagination_1 = require("../Pagination");
|
|
45
45
|
const HeaderCell_1 = require("./HeaderCell");
|
|
46
46
|
const Cell_1 = require("./Cell");
|
|
47
|
+
const SearchInput_1 = require("../SearchInput");
|
|
48
|
+
const PageSize_1 = require("../PageSize");
|
|
47
49
|
const Table = ({ theme, themeVariant = 'default', headers, elements, hover = true, selectable = true, filtrable = false, pagination = false, sortable = true, sort = {
|
|
48
50
|
name: '',
|
|
49
51
|
order: 'none',
|
|
50
|
-
}, pageSize = 20, moreActions = [], onRowClick, filterLabels,
|
|
52
|
+
}, pageSize = 20, moreActions = [], onRowClick, filterLabels, pageSizeAvailableValues, tableHeight, tableWrapperHeight, paginationLabel, calendarLabels, calendarLocaleLabels, paginationZIndex, headerExtraContent, searchable = true, searchInputPlaceholder = config_2.wordbook.searchInput.placeholder, noResultsText = config_2.wordbook.table.filterEmptyState, emptyStateText = config_2.wordbook.table.emptyState, }) => {
|
|
51
53
|
const resolvedThemeData = (0, config_1.resolveThemeWithComponentsConfig)({
|
|
52
54
|
theme,
|
|
53
55
|
themeVariant,
|
|
@@ -77,41 +79,89 @@ const Table = ({ theme, themeVariant = 'default', headers, elements, hover = tru
|
|
|
77
79
|
const [currentPageSize, setCurrentPageSize] = (0, react_1.useState)(pageSize || 10);
|
|
78
80
|
const [noResultsMessage, setNoResultsMessage] = (0, react_1.useState)(null);
|
|
79
81
|
const [filtersClearSignal, setFiltersClearSignal] = (0, react_1.useState)(0);
|
|
82
|
+
const searchRef = (0, react_1.useRef)('');
|
|
83
|
+
const filteredBaseRef = (0, react_1.useRef)(fullElements);
|
|
84
|
+
const setSearch = (0, react_1.useCallback)((value) => {
|
|
85
|
+
searchRef.current = value;
|
|
86
|
+
}, []);
|
|
87
|
+
const searchFiltering = (0, react_1.useCallback)((sourceElements, searchValue) => {
|
|
88
|
+
const normalizedSearchValue = searchValue.toLowerCase().trim();
|
|
89
|
+
if (!normalizedSearchValue) {
|
|
90
|
+
return sourceElements;
|
|
91
|
+
}
|
|
92
|
+
return sourceElements.filter((item) => {
|
|
93
|
+
return tableHeaders.some((header) => {
|
|
94
|
+
if (header.action) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const fieldValue = item[header.valueSource];
|
|
98
|
+
if (typeof fieldValue === 'string') {
|
|
99
|
+
return fieldValue.toLowerCase().includes(normalizedSearchValue);
|
|
100
|
+
}
|
|
101
|
+
if (typeof fieldValue === 'number') {
|
|
102
|
+
return fieldValue.toString().includes(normalizedSearchValue);
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}, [tableHeaders]);
|
|
108
|
+
const updateTableElements = (0, react_1.useCallback)((nextElements) => {
|
|
109
|
+
setTableElementsState(nextElements);
|
|
110
|
+
setCurrentPage(1);
|
|
111
|
+
setNoResultsMessage(nextElements.length === 0
|
|
112
|
+
? fullElements.length === 0
|
|
113
|
+
? emptyStateText
|
|
114
|
+
: noResultsText
|
|
115
|
+
: null);
|
|
116
|
+
}, []);
|
|
117
|
+
(0, react_1.useEffect)(() => {
|
|
118
|
+
filteredBaseRef.current = fullElements;
|
|
119
|
+
const nextElements = searchRef.current
|
|
120
|
+
? searchFiltering(fullElements, searchRef.current)
|
|
121
|
+
: fullElements;
|
|
122
|
+
updateTableElements(nextElements);
|
|
123
|
+
}, [fullElements, searchFiltering, updateTableElements]);
|
|
80
124
|
(0, react_1.useEffect)(() => {
|
|
81
|
-
setTableElementsState(fullElements);
|
|
82
125
|
setCurrentPage(1);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const handleRowClick = (id) => {
|
|
126
|
+
}, [currentPageSize]);
|
|
127
|
+
const handleRowClick = (0, react_1.useCallback)((id) => {
|
|
86
128
|
if (selectable) {
|
|
87
129
|
setSelectedRow(id);
|
|
88
130
|
}
|
|
89
131
|
onRowClick?.(id);
|
|
90
|
-
};
|
|
91
|
-
const handleHeaderCellClick = (targetValue, order) => {
|
|
132
|
+
}, [selectable, onRowClick]);
|
|
133
|
+
const handleHeaderCellClick = (0, react_1.useCallback)((targetValue, order) => {
|
|
92
134
|
if (!sortable) {
|
|
93
135
|
return;
|
|
94
136
|
}
|
|
95
137
|
const newSort = (0, tableHelper_1.setSortParams)(targetValue, order, tableSort);
|
|
96
138
|
setTableSort(newSort);
|
|
97
139
|
setTableElementsState((prev) => (0, tableHelper_1.applySort)(newSort, prev));
|
|
98
|
-
};
|
|
99
|
-
const handleApplyFilters = (0, react_1.useCallback)((
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}, []);
|
|
140
|
+
}, [sortable, tableSort]);
|
|
141
|
+
const handleApplyFilters = (0, react_1.useCallback)((filtered) => {
|
|
142
|
+
filteredBaseRef.current = filtered;
|
|
143
|
+
const nextElements = searchRef.current
|
|
144
|
+
? searchFiltering(filtered, searchRef.current)
|
|
145
|
+
: filtered;
|
|
146
|
+
updateTableElements(nextElements);
|
|
147
|
+
}, [searchFiltering, updateTableElements]);
|
|
106
148
|
const handleClearFilters = (0, react_1.useCallback)(() => {
|
|
107
|
-
setFiltersClearSignal((
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
149
|
+
setFiltersClearSignal((prev) => prev + 1);
|
|
150
|
+
filteredBaseRef.current = fullElements;
|
|
151
|
+
const nextElements = searchRef.current
|
|
152
|
+
? searchFiltering(fullElements, searchRef.current)
|
|
153
|
+
: fullElements;
|
|
154
|
+
updateTableElements(nextElements);
|
|
155
|
+
}, [fullElements, searchFiltering, updateTableElements]);
|
|
156
|
+
const handleSearchChange = (0, react_1.useCallback)((value) => {
|
|
157
|
+
const searchValue = value.toLowerCase().trim();
|
|
158
|
+
setSearch(searchValue);
|
|
159
|
+
const baseElements = filteredBaseRef.current;
|
|
160
|
+
const nextElements = searchValue
|
|
161
|
+
? searchFiltering(baseElements, searchValue)
|
|
162
|
+
: baseElements;
|
|
163
|
+
updateTableElements(nextElements);
|
|
164
|
+
}, [searchFiltering, setSearch, updateTableElements]);
|
|
115
165
|
const totalPages = Math.ceil(tableElementsState.length / currentPageSize);
|
|
116
166
|
const paginatedElements = (0, react_1.useMemo)(() => {
|
|
117
167
|
return tableElementsState.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
|
|
@@ -120,20 +170,25 @@ const Table = ({ theme, themeVariant = 'default', headers, elements, hover = tru
|
|
|
120
170
|
return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: resolvedTheme },
|
|
121
171
|
react_1.default.createElement(Table_styles_1.TableRoot, { theme: resolvedTheme, config: tableConfig, componentHeight: tableWrapperHeight },
|
|
122
172
|
react_1.default.createElement(react_1.default.Fragment, null,
|
|
123
|
-
(filtrable || pagination) && (react_1.default.createElement(Table_styles_1.TableHeader, { theme: resolvedTheme, config: tableConfig, right: pagination && !filtrable },
|
|
173
|
+
(filtrable || pagination || searchable || headerExtraContent) && (react_1.default.createElement(Table_styles_1.TableHeader, { theme: resolvedTheme, config: tableConfig, right: (pagination || searchable) && !filtrable },
|
|
124
174
|
react_1.default.createElement(react_1.default.Fragment, null,
|
|
125
|
-
filtrable && (react_1.default.createElement(
|
|
126
|
-
react_1.default.createElement(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
175
|
+
(filtrable || headerExtraContent) && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
176
|
+
react_1.default.createElement(Table_styles_1.HeaderSection, null,
|
|
177
|
+
filtrable && (react_1.default.createElement(Filters_1.Filters, { labels: filterLabels, headers: headers, elements: fullElements, fullElements: fullElements, handleSubmitFilters: handleApplyFilters, externalClearSignal: filtersClearSignal, onClear: handleClearFilters, calendarLabels: calendarLabels, calendarLocaleLabels: calendarLocaleLabels })),
|
|
178
|
+
headerExtraContent && (react_1.default.createElement(Table_styles_1.HeaderSection, null, headerExtraContent))))),
|
|
179
|
+
(pagination || searchable) && (react_1.default.createElement(Table_styles_1.HeaderSection, { right: true },
|
|
180
|
+
searchable && (react_1.default.createElement(Table_styles_1.TableSearch, { theme: resolvedTheme, config: tableConfig },
|
|
181
|
+
react_1.default.createElement(SearchInput_1.SearchInput, { placeholder: searchInputPlaceholder, handleSearch: handleSearchChange }))),
|
|
182
|
+
pagination && (react_1.default.createElement(PageSize_1.PageSize, { label: paginationLabel?.label, zIndex: paginationZIndex, onPageSizeChange: setCurrentPageSize, availableValues: pageSizeAvailableValues, pageSize: currentPageSize }))))))),
|
|
130
183
|
react_1.default.createElement(Table_styles_1.TableContentWrapper, { componentHeight: tableHeight },
|
|
131
|
-
react_1.default.createElement(Table_styles_1.TableContent, { theme: resolvedTheme, config: tableConfig, cellPadding: "0", cellSpacing: "0" },
|
|
184
|
+
react_1.default.createElement(Table_styles_1.TableContent, { theme: resolvedTheme, config: tableConfig, cellPadding: "0", cellSpacing: "0", isEmpty: visibleElements.length === 0 },
|
|
132
185
|
react_1.default.createElement(Table_styles_1.TableHead, null,
|
|
133
186
|
react_1.default.createElement(Table_styles_1.TableHeaderRow, { theme: resolvedTheme, config: tableConfig }, tableHeaders.map((header) => (react_1.default.createElement(HeaderCell_1.HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableSort, size: header.size || 'md' }))))),
|
|
134
187
|
react_1.default.createElement(Table_styles_1.TableBody, null, visibleElements.map((item) => (react_1.default.createElement(Table_styles_1.TableRow, { theme: resolvedTheme, config: tableConfig, key: `table_row_${item.id}`, hover: hover, isDisabled: item.disabled, active: selectedRow === item.id, selectable: selectable, onClick: !item.disabled
|
|
135
188
|
? () => handleRowClick(item.id)
|
|
136
|
-
: undefined }, tableHeaders.map((header, index) => (react_1.default.createElement(Cell_1.Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled }))))))))
|
|
137
|
-
|
|
189
|
+
: undefined }, tableHeaders.map((header, index) => (react_1.default.createElement(Cell_1.Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled })))))))),
|
|
190
|
+
pagination && totalPages > 1 && visibleElements.length > 0 && (react_1.default.createElement(Table_styles_1.TableFooter, null,
|
|
191
|
+
react_1.default.createElement(Pagination_1.Pagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: setCurrentPage })))),
|
|
192
|
+
noResultsMessage && (react_1.default.createElement(Table_styles_1.TableEmptyState, { theme: resolvedTheme, config: tableConfig }, noResultsMessage))))));
|
|
138
193
|
};
|
|
139
194
|
exports.Table = Table;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TableCellContent = exports.TableCell = exports.TableRow = exports.OptionTableCellWrapper = exports.OptionTableCell = exports.IconTableHeaderCell = exports.OptionTableHeaderCell = exports.HeaderCellContent = exports.TableHeaderCell = exports.TableHeaderRow = exports.TableBody = exports.TableHead = exports.TableContent = exports.HeaderSection = exports.TableContentWrapper = exports.TableHeader = exports.TableRoot = void 0;
|
|
6
|
+
exports.TableFooter = exports.TableEmptyState = exports.TableSearch = exports.TableCellContent = exports.TableCell = exports.TableRow = exports.OptionTableCellWrapper = exports.OptionTableCell = exports.IconTableHeaderCell = exports.OptionTableHeaderCell = exports.HeaderCellContent = exports.TableHeaderCell = exports.TableHeaderRow = exports.TableBody = exports.TableHead = exports.TableContent = exports.HeaderSection = exports.TableContentWrapper = exports.TableHeader = exports.TableRoot = void 0;
|
|
7
7
|
const styled_components_1 = __importDefault(require("styled-components"));
|
|
8
8
|
exports.TableRoot = styled_components_1.default.div `
|
|
9
9
|
display: flex;
|
|
@@ -15,8 +15,7 @@ exports.TableHeader = styled_components_1.default.div `
|
|
|
15
15
|
display: flex;
|
|
16
16
|
align-items: center;
|
|
17
17
|
flex-shrink: 0;
|
|
18
|
-
|
|
19
|
-
justify-content: space-between;
|
|
18
|
+
justify-content: ${({ right }) => (right ? 'flex-end' : 'space-between')};
|
|
20
19
|
height: ${({ theme, config }) => config.size.header.height}px;
|
|
21
20
|
`;
|
|
22
21
|
exports.TableContentWrapper = styled_components_1.default.div `
|
|
@@ -29,19 +28,21 @@ exports.TableContentWrapper = styled_components_1.default.div `
|
|
|
29
28
|
overflow-x: auto;
|
|
30
29
|
height: ${({ componentHeight }) => componentHeight || '100%'};
|
|
31
30
|
flex-shrink: 0;
|
|
31
|
+
flex-direction: column;
|
|
32
32
|
`;
|
|
33
33
|
exports.HeaderSection = styled_components_1.default.div `
|
|
34
34
|
display: flex;
|
|
35
35
|
align-items: center;
|
|
36
36
|
justify-content: ${({ right }) => (right ? 'flex-end' : 'flex-start')};
|
|
37
37
|
flex-shrink: 0;
|
|
38
|
+
gap: 8px;
|
|
38
39
|
`;
|
|
39
40
|
exports.TableContent = styled_components_1.default.table `
|
|
40
41
|
box-sizing: border-box;
|
|
41
42
|
display: block;
|
|
42
43
|
width: 100%;
|
|
43
|
-
overflow-x: auto;
|
|
44
|
-
overflow-y: auto;
|
|
44
|
+
overflow-x: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
|
|
45
|
+
overflow-y: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
|
|
45
46
|
height: 100%;
|
|
46
47
|
border-radius: ${({ theme, config }) => config.size.common.borderRadius}px;
|
|
47
48
|
border-collapse: separate;
|
|
@@ -59,7 +60,7 @@ exports.TableHead = styled_components_1.default.thead `
|
|
|
59
60
|
position: sticky;
|
|
60
61
|
top: 0;
|
|
61
62
|
z-index: 2;
|
|
62
|
-
}
|
|
63
|
+
}
|
|
63
64
|
flex-shrink: 0;
|
|
64
65
|
`;
|
|
65
66
|
exports.TableBody = styled_components_1.default.tbody `
|
|
@@ -182,3 +183,49 @@ exports.TableCellContent = styled_components_1.default.div `
|
|
|
182
183
|
color: ${({ theme, config, disabled }) => disabled ? config.color.disabled.text : config.color.default.header.text};
|
|
183
184
|
width: 100%;
|
|
184
185
|
`;
|
|
186
|
+
exports.TableSearch = styled_components_1.default.div `
|
|
187
|
+
width: 100%;
|
|
188
|
+
appearance: textfield;
|
|
189
|
+
padding: 0px ${({ config }) => config.size.searchInput.paddingX}px;
|
|
190
|
+
height: ${({ config }) => config.size.searchInput.height}px;
|
|
191
|
+
border-radius: ${({ config }) => config.size.searchInput.radius}px;
|
|
192
|
+
font-size: ${({ config }) => config.size.searchInput.fontSize}px;
|
|
193
|
+
line-height: ${({ config }) => config.size.searchInput.lineHeight}px;
|
|
194
|
+
flex-direction: row;
|
|
195
|
+
-webkit-box-align: center;
|
|
196
|
+
align-items: center;
|
|
197
|
+
overflow: hidden;
|
|
198
|
+
width: 100%;
|
|
199
|
+
color: ${({ theme, config }) => config.color.default.searchInput.text};
|
|
200
|
+
border: 1px solid ${({ theme, config }) => config.color.default.searchInput.border};
|
|
201
|
+
background: ${({ theme, config }) => config.color.default.searchInput.background};
|
|
202
|
+
box-sizing: border-box;
|
|
203
|
+
:hover {
|
|
204
|
+
border-color: ${({ theme, config }) => config.color.hover.searchInput.border};
|
|
205
|
+
}
|
|
206
|
+
&:focus-within {
|
|
207
|
+
border-color: ${({ theme, config }) => config.color.active.searchInput.border};
|
|
208
|
+
}
|
|
209
|
+
`;
|
|
210
|
+
exports.TableEmptyState = styled_components_1.default.div `
|
|
211
|
+
display: flex;
|
|
212
|
+
align-items: center;
|
|
213
|
+
justify-content: center;
|
|
214
|
+
width: 100%;
|
|
215
|
+
font-size: ${({ theme, config }) => config.size.header.fontSize}px;
|
|
216
|
+
line-height: ${({ theme, config }) => config.size.header.lineHeight}px;
|
|
217
|
+
color: ${({ theme, config }) => config.color.default.header.text};
|
|
218
|
+
padding: 0 ${({ theme, config }) => config.size.cell.common.paddingX}px;
|
|
219
|
+
background-color: ${({ theme, config }) => config.color.default.common.background};
|
|
220
|
+
height: ${({ theme, config }) => config.size.header.height}px;
|
|
221
|
+
border-bottom: 1px solid
|
|
222
|
+
${({ theme, config }) => config.color.default.common.border};
|
|
223
|
+
box-sizing: border-box;
|
|
224
|
+
`;
|
|
225
|
+
exports.TableFooter = styled_components_1.default.div `
|
|
226
|
+
display: flex;
|
|
227
|
+
padding: 8px 0;
|
|
228
|
+
width:100%;
|
|
229
|
+
justify-content: center;
|
|
230
|
+
|
|
231
|
+
`;
|
|
@@ -1275,13 +1275,13 @@ const createComponentsConfig = (theme = 'default') => {
|
|
|
1275
1275
|
pagination: {
|
|
1276
1276
|
size: {
|
|
1277
1277
|
paginationHeight: exports.measurements.space.xl4,
|
|
1278
|
-
height: exports.measurements.space.
|
|
1279
|
-
width: exports.measurements.space.
|
|
1278
|
+
height: exports.measurements.space.xl2,
|
|
1279
|
+
width: exports.measurements.space.xl2,
|
|
1280
1280
|
itemGap: exports.measurements.space.sm,
|
|
1281
1281
|
elementGap: exports.measurements.space.lg,
|
|
1282
1282
|
borderRadius: exports.measurements.size.radius.sm,
|
|
1283
|
-
fontSize: exports.measurements.font.size.
|
|
1284
|
-
lineHeight: exports.measurements.font.lineHeight.
|
|
1283
|
+
fontSize: exports.measurements.font.size.xs,
|
|
1284
|
+
lineHeight: exports.measurements.font.lineHeight.xs,
|
|
1285
1285
|
},
|
|
1286
1286
|
color: {
|
|
1287
1287
|
default: {
|
|
@@ -1420,6 +1420,13 @@ const createComponentsConfig = (theme = 'default') => {
|
|
|
1420
1420
|
},
|
|
1421
1421
|
},
|
|
1422
1422
|
},
|
|
1423
|
+
searchInput: {
|
|
1424
|
+
height: exports.measurements.space.xl4,
|
|
1425
|
+
paddingX: exports.measurements.space.sm,
|
|
1426
|
+
radius: exports.measurements.size.radius.sm,
|
|
1427
|
+
fontSize: exports.measurements.font.size.sm,
|
|
1428
|
+
lineHeight: exports.measurements.font.lineHeight.sm,
|
|
1429
|
+
}
|
|
1423
1430
|
},
|
|
1424
1431
|
color: {
|
|
1425
1432
|
default: {
|
|
@@ -1432,10 +1439,19 @@ const createComponentsConfig = (theme = 'default') => {
|
|
|
1432
1439
|
text: Theme.text.primary,
|
|
1433
1440
|
sortIcon: Theme.text.primary,
|
|
1434
1441
|
},
|
|
1442
|
+
searchInput: {
|
|
1443
|
+
background: Theme.surface.default,
|
|
1444
|
+
border: Theme.border.default,
|
|
1445
|
+
text: Theme.text.primary,
|
|
1446
|
+
placeholder: Theme.text.placeholder,
|
|
1447
|
+
}
|
|
1435
1448
|
},
|
|
1436
1449
|
hover: {
|
|
1437
1450
|
background: Theme.surface.hover,
|
|
1438
1451
|
activeBackground: Theme.action.primary.selectedHover,
|
|
1452
|
+
searchInput: {
|
|
1453
|
+
border: Theme.border.strong,
|
|
1454
|
+
}
|
|
1439
1455
|
},
|
|
1440
1456
|
active: {
|
|
1441
1457
|
background: Theme.action.primary.selected,
|
|
@@ -1443,6 +1459,9 @@ const createComponentsConfig = (theme = 'default') => {
|
|
|
1443
1459
|
textHeader: Theme.action.primary.default,
|
|
1444
1460
|
sortIcon: Theme.action.primary.default,
|
|
1445
1461
|
},
|
|
1462
|
+
searchInput: {
|
|
1463
|
+
border: Theme.border.focus,
|
|
1464
|
+
}
|
|
1446
1465
|
},
|
|
1447
1466
|
disabled: {
|
|
1448
1467
|
text: Theme.text.disabled,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Dropdown } from '../Dropdown';
|
|
3
|
+
import { ThemeProvider } from 'styled-components';
|
|
4
|
+
import { resolveThemeWithComponentsConfig, wordbook } from '../../config';
|
|
5
|
+
export const PageSize = ({ theme, themeVariant = 'default', onPageSizeChange, label = wordbook.pagination.dropdownLabel, zIndex, availableValues = [10, 20, 50], pageSize, }) => {
|
|
6
|
+
const resolvedThemeData = resolveThemeWithComponentsConfig({
|
|
7
|
+
theme,
|
|
8
|
+
themeVariant,
|
|
9
|
+
});
|
|
10
|
+
const resolvedTheme = resolvedThemeData.resolvedTheme;
|
|
11
|
+
const pageSizeStr = !isNaN(pageSize) ? String(pageSize) : '10';
|
|
12
|
+
let dropdownOptions = availableValues.map((size) => ({
|
|
13
|
+
value: size.toString(),
|
|
14
|
+
label: size.toString(),
|
|
15
|
+
}));
|
|
16
|
+
if (!dropdownOptions.some((opt) => opt.value === pageSizeStr)) {
|
|
17
|
+
dropdownOptions = [
|
|
18
|
+
{ value: pageSizeStr, label: pageSizeStr },
|
|
19
|
+
...dropdownOptions,
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
return (React.createElement(ThemeProvider, { theme: resolvedTheme },
|
|
23
|
+
React.createElement(Dropdown, { size: "sm", label: label, labelPosition: "left", handleChange: (name, value) => {
|
|
24
|
+
const num = Number(value);
|
|
25
|
+
if (!isNaN(num) && num > 0) {
|
|
26
|
+
onPageSizeChange(num);
|
|
27
|
+
}
|
|
28
|
+
}, name: "pageSize", value: String(pageSize), options: dropdownOptions, width: "auto", componentWidth: "80px", zIndex: zIndex })));
|
|
29
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './PageSize';
|
|
@@ -2,10 +2,8 @@ import { resolveThemeWithComponentsConfig } from '../../config';
|
|
|
2
2
|
import { PaginationItem, PaginationItemWrapper, PaginationRoot, } from './Pagination.styles';
|
|
3
3
|
import { Icon } from '../Icon';
|
|
4
4
|
import React from 'react';
|
|
5
|
-
import { Dropdown } from '../Dropdown';
|
|
6
|
-
import { wordbook } from '../../config';
|
|
7
5
|
import { ThemeProvider } from 'styled-components';
|
|
8
|
-
export const Pagination = ({ theme, themeVariant = 'default', currentPage, totalPages,
|
|
6
|
+
export const Pagination = ({ theme, themeVariant = 'default', currentPage, totalPages, onPageChange, }) => {
|
|
9
7
|
const resolvedThemeData = resolveThemeWithComponentsConfig({
|
|
10
8
|
theme,
|
|
11
9
|
themeVariant,
|
|
@@ -33,27 +31,10 @@ export const Pagination = ({ theme, themeVariant = 'default', currentPage, total
|
|
|
33
31
|
return pages;
|
|
34
32
|
};
|
|
35
33
|
const pageNumbers = getPageNumbers(currentPage, totalPages);
|
|
36
|
-
const pageSizeStr = !isNaN(pageSize) ? String(pageSize) : '10';
|
|
37
|
-
let dropdownOptions = availableValues.map((size) => ({
|
|
38
|
-
value: size.toString(),
|
|
39
|
-
label: size.toString(),
|
|
40
|
-
}));
|
|
41
|
-
if (!dropdownOptions.some((opt) => opt.value === pageSizeStr)) {
|
|
42
|
-
dropdownOptions = [
|
|
43
|
-
{ value: pageSizeStr, label: pageSizeStr },
|
|
44
|
-
...dropdownOptions,
|
|
45
|
-
];
|
|
46
|
-
}
|
|
47
34
|
return (React.createElement(ThemeProvider, { theme: resolvedTheme },
|
|
48
35
|
React.createElement(PaginationRoot, { theme: resolvedTheme, config: paginationConfig },
|
|
49
36
|
React.createElement(PaginationItemWrapper, { theme: resolvedTheme, config: paginationConfig },
|
|
50
37
|
React.createElement(Icon, { name: 'back', size: "md", onClick: () => onPageChange(Math.max(1, currentPage - 1)), isDisabled: currentPage === 1 }),
|
|
51
38
|
pageNumbers.map((num, idx) => num === '...' ? (React.createElement("span", { key: `ellipsis-${idx}` }, "...")) : (React.createElement(PaginationItem, { key: num, onClick: () => onPageChange(Number(num)), isActive: num === currentPage, theme: resolvedTheme, config: paginationConfig }, num))),
|
|
52
|
-
React.createElement(Icon, { name: 'forward', size: "md", onClick: () => onPageChange(Math.min(totalPages, currentPage + 1)), isDisabled: currentPage === totalPages }))
|
|
53
|
-
React.createElement(Dropdown, { size: "sm", label: label, labelPosition: "left", handleChange: (name, value) => {
|
|
54
|
-
const num = Number(value);
|
|
55
|
-
if (!isNaN(num) && num > 0) {
|
|
56
|
-
onPageSizeChange(num);
|
|
57
|
-
}
|
|
58
|
-
}, name: "pageSize", value: String(pageSize), options: dropdownOptions, width: 'auto', componentWidth: '80px', zIndex: zIndex }))));
|
|
39
|
+
React.createElement(Icon, { name: 'forward', size: "md", onClick: () => onPageChange(Math.min(totalPages, currentPage + 1)), isDisabled: currentPage === totalPages })))));
|
|
59
40
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styled from 'styled-components';
|
|
2
2
|
export const PaginationRoot = styled.div `
|
|
3
3
|
display: flex;
|
|
4
|
-
justify-content:
|
|
4
|
+
justify-content: center;
|
|
5
5
|
align-items: center;
|
|
6
6
|
width: auto;
|
|
7
7
|
box-sizing: border-box;
|
|
@@ -21,6 +21,8 @@ export const PaginationItem = styled.button `Ś
|
|
|
21
21
|
justify-content: center;
|
|
22
22
|
height: ${({ theme, config }) => config.size.height}px;
|
|
23
23
|
width: ${({ theme, config }) => config.size.width}px;
|
|
24
|
+
font-size: ${({ theme, config }) => config.size.fontSize}px;
|
|
25
|
+
line-height: ${({ theme, config }) => config.size.lineHeight}px;
|
|
24
26
|
background-color: ${({ theme, config, disabled, isActive }) => disabled
|
|
25
27
|
? config.color.disabled.background
|
|
26
28
|
: isActive
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { resolveThemeWithComponentsConfig } from '../../config';
|
|
2
|
-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
|
|
3
3
|
import { applySort, setSortParams } from './tableHelper';
|
|
4
4
|
import { wordbook } from '../../config';
|
|
5
5
|
import { ThemeProvider } from 'styled-components';
|
|
6
|
-
import { HeaderSection, TableBody, TableContent, TableContentWrapper, TableHead, TableHeader, TableHeaderRow, TableRoot, TableRow, } from './Table.styles';
|
|
6
|
+
import { HeaderSection, TableBody, TableContent, TableContentWrapper, TableEmptyState, TableFooter, TableHead, TableHeader, TableHeaderRow, TableRoot, TableRow, TableSearch, } from './Table.styles';
|
|
7
7
|
import { Filters } from '../Filters';
|
|
8
8
|
import { Pagination } from '../Pagination';
|
|
9
9
|
import { HeaderCell } from './HeaderCell';
|
|
10
10
|
import { Cell } from './Cell';
|
|
11
|
+
import { SearchInput } from '../SearchInput';
|
|
12
|
+
import { PageSize } from '../PageSize';
|
|
11
13
|
export const Table = ({ theme, themeVariant = 'default', headers, elements, hover = true, selectable = true, filtrable = false, pagination = false, sortable = true, sort = {
|
|
12
14
|
name: '',
|
|
13
15
|
order: 'none',
|
|
14
|
-
}, pageSize = 20, moreActions = [], onRowClick, filterLabels,
|
|
16
|
+
}, pageSize = 20, moreActions = [], onRowClick, filterLabels, pageSizeAvailableValues, tableHeight, tableWrapperHeight, paginationLabel, calendarLabels, calendarLocaleLabels, paginationZIndex, headerExtraContent, searchable = true, searchInputPlaceholder = wordbook.searchInput.placeholder, noResultsText = wordbook.table.filterEmptyState, emptyStateText = wordbook.table.emptyState, }) => {
|
|
15
17
|
const resolvedThemeData = resolveThemeWithComponentsConfig({
|
|
16
18
|
theme,
|
|
17
19
|
themeVariant,
|
|
@@ -41,41 +43,89 @@ export const Table = ({ theme, themeVariant = 'default', headers, elements, hove
|
|
|
41
43
|
const [currentPageSize, setCurrentPageSize] = useState(pageSize || 10);
|
|
42
44
|
const [noResultsMessage, setNoResultsMessage] = useState(null);
|
|
43
45
|
const [filtersClearSignal, setFiltersClearSignal] = useState(0);
|
|
46
|
+
const searchRef = useRef('');
|
|
47
|
+
const filteredBaseRef = useRef(fullElements);
|
|
48
|
+
const setSearch = useCallback((value) => {
|
|
49
|
+
searchRef.current = value;
|
|
50
|
+
}, []);
|
|
51
|
+
const searchFiltering = useCallback((sourceElements, searchValue) => {
|
|
52
|
+
const normalizedSearchValue = searchValue.toLowerCase().trim();
|
|
53
|
+
if (!normalizedSearchValue) {
|
|
54
|
+
return sourceElements;
|
|
55
|
+
}
|
|
56
|
+
return sourceElements.filter((item) => {
|
|
57
|
+
return tableHeaders.some((header) => {
|
|
58
|
+
if (header.action) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const fieldValue = item[header.valueSource];
|
|
62
|
+
if (typeof fieldValue === 'string') {
|
|
63
|
+
return fieldValue.toLowerCase().includes(normalizedSearchValue);
|
|
64
|
+
}
|
|
65
|
+
if (typeof fieldValue === 'number') {
|
|
66
|
+
return fieldValue.toString().includes(normalizedSearchValue);
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}, [tableHeaders]);
|
|
72
|
+
const updateTableElements = useCallback((nextElements) => {
|
|
73
|
+
setTableElementsState(nextElements);
|
|
74
|
+
setCurrentPage(1);
|
|
75
|
+
setNoResultsMessage(nextElements.length === 0
|
|
76
|
+
? fullElements.length === 0
|
|
77
|
+
? emptyStateText
|
|
78
|
+
: noResultsText
|
|
79
|
+
: null);
|
|
80
|
+
}, []);
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
filteredBaseRef.current = fullElements;
|
|
83
|
+
const nextElements = searchRef.current
|
|
84
|
+
? searchFiltering(fullElements, searchRef.current)
|
|
85
|
+
: fullElements;
|
|
86
|
+
updateTableElements(nextElements);
|
|
87
|
+
}, [fullElements, searchFiltering, updateTableElements]);
|
|
44
88
|
useEffect(() => {
|
|
45
|
-
setTableElementsState(fullElements);
|
|
46
89
|
setCurrentPage(1);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const handleRowClick = (id) => {
|
|
90
|
+
}, [currentPageSize]);
|
|
91
|
+
const handleRowClick = useCallback((id) => {
|
|
50
92
|
if (selectable) {
|
|
51
93
|
setSelectedRow(id);
|
|
52
94
|
}
|
|
53
95
|
onRowClick?.(id);
|
|
54
|
-
};
|
|
55
|
-
const handleHeaderCellClick = (targetValue, order) => {
|
|
96
|
+
}, [selectable, onRowClick]);
|
|
97
|
+
const handleHeaderCellClick = useCallback((targetValue, order) => {
|
|
56
98
|
if (!sortable) {
|
|
57
99
|
return;
|
|
58
100
|
}
|
|
59
101
|
const newSort = setSortParams(targetValue, order, tableSort);
|
|
60
102
|
setTableSort(newSort);
|
|
61
103
|
setTableElementsState((prev) => applySort(newSort, prev));
|
|
62
|
-
};
|
|
63
|
-
const handleApplyFilters = useCallback((
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}, []);
|
|
104
|
+
}, [sortable, tableSort]);
|
|
105
|
+
const handleApplyFilters = useCallback((filtered) => {
|
|
106
|
+
filteredBaseRef.current = filtered;
|
|
107
|
+
const nextElements = searchRef.current
|
|
108
|
+
? searchFiltering(filtered, searchRef.current)
|
|
109
|
+
: filtered;
|
|
110
|
+
updateTableElements(nextElements);
|
|
111
|
+
}, [searchFiltering, updateTableElements]);
|
|
70
112
|
const handleClearFilters = useCallback(() => {
|
|
71
|
-
setFiltersClearSignal((
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
113
|
+
setFiltersClearSignal((prev) => prev + 1);
|
|
114
|
+
filteredBaseRef.current = fullElements;
|
|
115
|
+
const nextElements = searchRef.current
|
|
116
|
+
? searchFiltering(fullElements, searchRef.current)
|
|
117
|
+
: fullElements;
|
|
118
|
+
updateTableElements(nextElements);
|
|
119
|
+
}, [fullElements, searchFiltering, updateTableElements]);
|
|
120
|
+
const handleSearchChange = useCallback((value) => {
|
|
121
|
+
const searchValue = value.toLowerCase().trim();
|
|
122
|
+
setSearch(searchValue);
|
|
123
|
+
const baseElements = filteredBaseRef.current;
|
|
124
|
+
const nextElements = searchValue
|
|
125
|
+
? searchFiltering(baseElements, searchValue)
|
|
126
|
+
: baseElements;
|
|
127
|
+
updateTableElements(nextElements);
|
|
128
|
+
}, [searchFiltering, setSearch, updateTableElements]);
|
|
79
129
|
const totalPages = Math.ceil(tableElementsState.length / currentPageSize);
|
|
80
130
|
const paginatedElements = useMemo(() => {
|
|
81
131
|
return tableElementsState.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
|
|
@@ -84,19 +134,24 @@ export const Table = ({ theme, themeVariant = 'default', headers, elements, hove
|
|
|
84
134
|
return (React.createElement(ThemeProvider, { theme: resolvedTheme },
|
|
85
135
|
React.createElement(TableRoot, { theme: resolvedTheme, config: tableConfig, componentHeight: tableWrapperHeight },
|
|
86
136
|
React.createElement(React.Fragment, null,
|
|
87
|
-
(filtrable || pagination) && (React.createElement(TableHeader, { theme: resolvedTheme, config: tableConfig, right: pagination && !filtrable },
|
|
137
|
+
(filtrable || pagination || searchable || headerExtraContent) && (React.createElement(TableHeader, { theme: resolvedTheme, config: tableConfig, right: (pagination || searchable) && !filtrable },
|
|
88
138
|
React.createElement(React.Fragment, null,
|
|
89
|
-
filtrable && (React.createElement(
|
|
90
|
-
React.createElement(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
139
|
+
(filtrable || headerExtraContent) && (React.createElement(React.Fragment, null,
|
|
140
|
+
React.createElement(HeaderSection, null,
|
|
141
|
+
filtrable && (React.createElement(Filters, { labels: filterLabels, headers: headers, elements: fullElements, fullElements: fullElements, handleSubmitFilters: handleApplyFilters, externalClearSignal: filtersClearSignal, onClear: handleClearFilters, calendarLabels: calendarLabels, calendarLocaleLabels: calendarLocaleLabels })),
|
|
142
|
+
headerExtraContent && (React.createElement(HeaderSection, null, headerExtraContent))))),
|
|
143
|
+
(pagination || searchable) && (React.createElement(HeaderSection, { right: true },
|
|
144
|
+
searchable && (React.createElement(TableSearch, { theme: resolvedTheme, config: tableConfig },
|
|
145
|
+
React.createElement(SearchInput, { placeholder: searchInputPlaceholder, handleSearch: handleSearchChange }))),
|
|
146
|
+
pagination && (React.createElement(PageSize, { label: paginationLabel?.label, zIndex: paginationZIndex, onPageSizeChange: setCurrentPageSize, availableValues: pageSizeAvailableValues, pageSize: currentPageSize }))))))),
|
|
94
147
|
React.createElement(TableContentWrapper, { componentHeight: tableHeight },
|
|
95
|
-
React.createElement(TableContent, { theme: resolvedTheme, config: tableConfig, cellPadding: "0", cellSpacing: "0" },
|
|
148
|
+
React.createElement(TableContent, { theme: resolvedTheme, config: tableConfig, cellPadding: "0", cellSpacing: "0", isEmpty: visibleElements.length === 0 },
|
|
96
149
|
React.createElement(TableHead, null,
|
|
97
150
|
React.createElement(TableHeaderRow, { theme: resolvedTheme, config: tableConfig }, tableHeaders.map((header) => (React.createElement(HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableSort, size: header.size || 'md' }))))),
|
|
98
151
|
React.createElement(TableBody, null, visibleElements.map((item) => (React.createElement(TableRow, { theme: resolvedTheme, config: tableConfig, key: `table_row_${item.id}`, hover: hover, isDisabled: item.disabled, active: selectedRow === item.id, selectable: selectable, onClick: !item.disabled
|
|
99
152
|
? () => handleRowClick(item.id)
|
|
100
|
-
: undefined }, tableHeaders.map((header, index) => (React.createElement(Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled }))))))))
|
|
101
|
-
|
|
153
|
+
: undefined }, tableHeaders.map((header, index) => (React.createElement(Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled })))))))),
|
|
154
|
+
pagination && totalPages > 1 && visibleElements.length > 0 && (React.createElement(TableFooter, null,
|
|
155
|
+
React.createElement(Pagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: setCurrentPage })))),
|
|
156
|
+
noResultsMessage && (React.createElement(TableEmptyState, { theme: resolvedTheme, config: tableConfig }, noResultsMessage))))));
|
|
102
157
|
};
|
|
@@ -9,8 +9,7 @@ export const TableHeader = styled.div `
|
|
|
9
9
|
display: flex;
|
|
10
10
|
align-items: center;
|
|
11
11
|
flex-shrink: 0;
|
|
12
|
-
|
|
13
|
-
justify-content: space-between;
|
|
12
|
+
justify-content: ${({ right }) => (right ? 'flex-end' : 'space-between')};
|
|
14
13
|
height: ${({ theme, config }) => config.size.header.height}px;
|
|
15
14
|
`;
|
|
16
15
|
export const TableContentWrapper = styled.div `
|
|
@@ -23,19 +22,21 @@ export const TableContentWrapper = styled.div `
|
|
|
23
22
|
overflow-x: auto;
|
|
24
23
|
height: ${({ componentHeight }) => componentHeight || '100%'};
|
|
25
24
|
flex-shrink: 0;
|
|
25
|
+
flex-direction: column;
|
|
26
26
|
`;
|
|
27
27
|
export const HeaderSection = styled.div `
|
|
28
28
|
display: flex;
|
|
29
29
|
align-items: center;
|
|
30
30
|
justify-content: ${({ right }) => (right ? 'flex-end' : 'flex-start')};
|
|
31
31
|
flex-shrink: 0;
|
|
32
|
+
gap: 8px;
|
|
32
33
|
`;
|
|
33
34
|
export const TableContent = styled.table `
|
|
34
35
|
box-sizing: border-box;
|
|
35
36
|
display: block;
|
|
36
37
|
width: 100%;
|
|
37
|
-
overflow-x: auto;
|
|
38
|
-
overflow-y: auto;
|
|
38
|
+
overflow-x: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
|
|
39
|
+
overflow-y: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
|
|
39
40
|
height: 100%;
|
|
40
41
|
border-radius: ${({ theme, config }) => config.size.common.borderRadius}px;
|
|
41
42
|
border-collapse: separate;
|
|
@@ -53,7 +54,7 @@ export const TableHead = styled.thead `
|
|
|
53
54
|
position: sticky;
|
|
54
55
|
top: 0;
|
|
55
56
|
z-index: 2;
|
|
56
|
-
}
|
|
57
|
+
}
|
|
57
58
|
flex-shrink: 0;
|
|
58
59
|
`;
|
|
59
60
|
export const TableBody = styled.tbody `
|
|
@@ -176,3 +177,49 @@ export const TableCellContent = styled.div `
|
|
|
176
177
|
color: ${({ theme, config, disabled }) => disabled ? config.color.disabled.text : config.color.default.header.text};
|
|
177
178
|
width: 100%;
|
|
178
179
|
`;
|
|
180
|
+
export const TableSearch = styled.div `
|
|
181
|
+
width: 100%;
|
|
182
|
+
appearance: textfield;
|
|
183
|
+
padding: 0px ${({ config }) => config.size.searchInput.paddingX}px;
|
|
184
|
+
height: ${({ config }) => config.size.searchInput.height}px;
|
|
185
|
+
border-radius: ${({ config }) => config.size.searchInput.radius}px;
|
|
186
|
+
font-size: ${({ config }) => config.size.searchInput.fontSize}px;
|
|
187
|
+
line-height: ${({ config }) => config.size.searchInput.lineHeight}px;
|
|
188
|
+
flex-direction: row;
|
|
189
|
+
-webkit-box-align: center;
|
|
190
|
+
align-items: center;
|
|
191
|
+
overflow: hidden;
|
|
192
|
+
width: 100%;
|
|
193
|
+
color: ${({ theme, config }) => config.color.default.searchInput.text};
|
|
194
|
+
border: 1px solid ${({ theme, config }) => config.color.default.searchInput.border};
|
|
195
|
+
background: ${({ theme, config }) => config.color.default.searchInput.background};
|
|
196
|
+
box-sizing: border-box;
|
|
197
|
+
:hover {
|
|
198
|
+
border-color: ${({ theme, config }) => config.color.hover.searchInput.border};
|
|
199
|
+
}
|
|
200
|
+
&:focus-within {
|
|
201
|
+
border-color: ${({ theme, config }) => config.color.active.searchInput.border};
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
export const TableEmptyState = styled.div `
|
|
205
|
+
display: flex;
|
|
206
|
+
align-items: center;
|
|
207
|
+
justify-content: center;
|
|
208
|
+
width: 100%;
|
|
209
|
+
font-size: ${({ theme, config }) => config.size.header.fontSize}px;
|
|
210
|
+
line-height: ${({ theme, config }) => config.size.header.lineHeight}px;
|
|
211
|
+
color: ${({ theme, config }) => config.color.default.header.text};
|
|
212
|
+
padding: 0 ${({ theme, config }) => config.size.cell.common.paddingX}px;
|
|
213
|
+
background-color: ${({ theme, config }) => config.color.default.common.background};
|
|
214
|
+
height: ${({ theme, config }) => config.size.header.height}px;
|
|
215
|
+
border-bottom: 1px solid
|
|
216
|
+
${({ theme, config }) => config.color.default.common.border};
|
|
217
|
+
box-sizing: border-box;
|
|
218
|
+
`;
|
|
219
|
+
export const TableFooter = styled.div `
|
|
220
|
+
display: flex;
|
|
221
|
+
padding: 8px 0;
|
|
222
|
+
width:100%;
|
|
223
|
+
justify-content: center;
|
|
224
|
+
|
|
225
|
+
`;
|
|
@@ -1270,13 +1270,13 @@ export const createComponentsConfig = (theme = 'default') => {
|
|
|
1270
1270
|
pagination: {
|
|
1271
1271
|
size: {
|
|
1272
1272
|
paginationHeight: measurements.space.xl4,
|
|
1273
|
-
height: measurements.space.
|
|
1274
|
-
width: measurements.space.
|
|
1273
|
+
height: measurements.space.xl2,
|
|
1274
|
+
width: measurements.space.xl2,
|
|
1275
1275
|
itemGap: measurements.space.sm,
|
|
1276
1276
|
elementGap: measurements.space.lg,
|
|
1277
1277
|
borderRadius: measurements.size.radius.sm,
|
|
1278
|
-
fontSize: measurements.font.size.
|
|
1279
|
-
lineHeight: measurements.font.lineHeight.
|
|
1278
|
+
fontSize: measurements.font.size.xs,
|
|
1279
|
+
lineHeight: measurements.font.lineHeight.xs,
|
|
1280
1280
|
},
|
|
1281
1281
|
color: {
|
|
1282
1282
|
default: {
|
|
@@ -1415,6 +1415,13 @@ export const createComponentsConfig = (theme = 'default') => {
|
|
|
1415
1415
|
},
|
|
1416
1416
|
},
|
|
1417
1417
|
},
|
|
1418
|
+
searchInput: {
|
|
1419
|
+
height: measurements.space.xl4,
|
|
1420
|
+
paddingX: measurements.space.sm,
|
|
1421
|
+
radius: measurements.size.radius.sm,
|
|
1422
|
+
fontSize: measurements.font.size.sm,
|
|
1423
|
+
lineHeight: measurements.font.lineHeight.sm,
|
|
1424
|
+
}
|
|
1418
1425
|
},
|
|
1419
1426
|
color: {
|
|
1420
1427
|
default: {
|
|
@@ -1427,10 +1434,19 @@ export const createComponentsConfig = (theme = 'default') => {
|
|
|
1427
1434
|
text: Theme.text.primary,
|
|
1428
1435
|
sortIcon: Theme.text.primary,
|
|
1429
1436
|
},
|
|
1437
|
+
searchInput: {
|
|
1438
|
+
background: Theme.surface.default,
|
|
1439
|
+
border: Theme.border.default,
|
|
1440
|
+
text: Theme.text.primary,
|
|
1441
|
+
placeholder: Theme.text.placeholder,
|
|
1442
|
+
}
|
|
1430
1443
|
},
|
|
1431
1444
|
hover: {
|
|
1432
1445
|
background: Theme.surface.hover,
|
|
1433
1446
|
activeBackground: Theme.action.primary.selectedHover,
|
|
1447
|
+
searchInput: {
|
|
1448
|
+
border: Theme.border.strong,
|
|
1449
|
+
}
|
|
1434
1450
|
},
|
|
1435
1451
|
active: {
|
|
1436
1452
|
background: Theme.action.primary.selected,
|
|
@@ -1438,6 +1454,9 @@ export const createComponentsConfig = (theme = 'default') => {
|
|
|
1438
1454
|
textHeader: Theme.action.primary.default,
|
|
1439
1455
|
sortIcon: Theme.action.primary.default,
|
|
1440
1456
|
},
|
|
1457
|
+
searchInput: {
|
|
1458
|
+
border: Theme.border.focus,
|
|
1459
|
+
}
|
|
1441
1460
|
},
|
|
1442
1461
|
disabled: {
|
|
1443
1462
|
text: Theme.text.disabled,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { AppTheme, ThemeName } from '../../config';
|
|
3
|
+
interface IPageSizeProps {
|
|
4
|
+
theme?: AppTheme;
|
|
5
|
+
themeVariant?: ThemeName;
|
|
6
|
+
label?: string;
|
|
7
|
+
zIndex?: number;
|
|
8
|
+
onPageSizeChange: (size: number) => void;
|
|
9
|
+
availableValues?: number[];
|
|
10
|
+
pageSize: number;
|
|
11
|
+
}
|
|
12
|
+
export declare const PageSize: FC<IPageSizeProps>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './PageSize';
|
|
@@ -5,12 +5,7 @@ interface IPaginationProps {
|
|
|
5
5
|
themeVariant?: ThemeName;
|
|
6
6
|
currentPage: number;
|
|
7
7
|
totalPages: number;
|
|
8
|
-
pageSize: number;
|
|
9
8
|
onPageChange: (page: number) => void;
|
|
10
|
-
onPageSizeChange: (size: number) => void;
|
|
11
|
-
availableValues?: number[];
|
|
12
|
-
label?: string;
|
|
13
|
-
zIndex?: number;
|
|
14
9
|
}
|
|
15
10
|
export declare const Pagination: FC<IPaginationProps>;
|
|
16
11
|
export {};
|
|
@@ -15,7 +15,7 @@ interface ITableProps {
|
|
|
15
15
|
pageSize?: number;
|
|
16
16
|
onRowClick?: (id: string) => void;
|
|
17
17
|
pagination?: boolean;
|
|
18
|
-
|
|
18
|
+
pageSizeAvailableValues?: number[];
|
|
19
19
|
tableHeight?: string;
|
|
20
20
|
tableWrapperHeight?: string;
|
|
21
21
|
filterLabels?: IFilterLabels;
|
|
@@ -24,6 +24,10 @@ interface ITableProps {
|
|
|
24
24
|
calendarLocaleLabels?: ICalendarLocaleLabels;
|
|
25
25
|
paginationZIndex?: number;
|
|
26
26
|
headerExtraContent?: React.ReactNode;
|
|
27
|
+
searchable?: boolean;
|
|
28
|
+
searchInputPlaceholder?: string;
|
|
29
|
+
noResultsText?: string;
|
|
30
|
+
emptyStateText?: string;
|
|
27
31
|
}
|
|
28
32
|
export interface ITableHeaderProps {
|
|
29
33
|
name: string;
|
|
@@ -23,6 +23,7 @@ export declare const HeaderSection: import("styled-components").StyledComponent<
|
|
|
23
23
|
interface ITableContentProps {
|
|
24
24
|
theme: AppTheme;
|
|
25
25
|
config: any;
|
|
26
|
+
isEmpty: boolean;
|
|
26
27
|
}
|
|
27
28
|
export declare const TableContent: import("styled-components").StyledComponent<"table", import("styled-components").DefaultTheme, ITableContentProps, never>;
|
|
28
29
|
export declare const TableHead: import("styled-components").StyledComponent<"thead", import("styled-components").DefaultTheme, {}, never>;
|
|
@@ -80,4 +81,15 @@ interface ITableCellContentProps {
|
|
|
80
81
|
disabled: boolean;
|
|
81
82
|
}
|
|
82
83
|
export declare const TableCellContent: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, ITableCellContentProps, never>;
|
|
84
|
+
interface ITableSearchProps {
|
|
85
|
+
theme: AppTheme;
|
|
86
|
+
config: any;
|
|
87
|
+
}
|
|
88
|
+
export declare const TableSearch: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, ITableSearchProps, never>;
|
|
89
|
+
interface ITableEmptyStateProps {
|
|
90
|
+
theme: AppTheme;
|
|
91
|
+
config: any;
|
|
92
|
+
}
|
|
93
|
+
export declare const TableEmptyState: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, ITableEmptyStateProps, never>;
|
|
94
|
+
export declare const TableFooter: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
83
95
|
export {};
|
|
@@ -1313,13 +1313,13 @@ export declare const createComponentsConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
1313
1313
|
pagination: {
|
|
1314
1314
|
size: {
|
|
1315
1315
|
paginationHeight: 32;
|
|
1316
|
-
height:
|
|
1317
|
-
width:
|
|
1316
|
+
height: 24;
|
|
1317
|
+
width: 24;
|
|
1318
1318
|
itemGap: 8;
|
|
1319
1319
|
elementGap: 16;
|
|
1320
1320
|
borderRadius: 8;
|
|
1321
|
-
fontSize:
|
|
1322
|
-
lineHeight:
|
|
1321
|
+
fontSize: 12;
|
|
1322
|
+
lineHeight: 16;
|
|
1323
1323
|
};
|
|
1324
1324
|
color: {
|
|
1325
1325
|
default: {
|
|
@@ -1458,6 +1458,13 @@ export declare const createComponentsConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
1458
1458
|
};
|
|
1459
1459
|
};
|
|
1460
1460
|
};
|
|
1461
|
+
searchInput: {
|
|
1462
|
+
height: 32;
|
|
1463
|
+
paddingX: 8;
|
|
1464
|
+
radius: 8;
|
|
1465
|
+
fontSize: 13;
|
|
1466
|
+
lineHeight: 18;
|
|
1467
|
+
};
|
|
1461
1468
|
};
|
|
1462
1469
|
color: {
|
|
1463
1470
|
default: {
|
|
@@ -1470,10 +1477,19 @@ export declare const createComponentsConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
1470
1477
|
text: "#111827";
|
|
1471
1478
|
sortIcon: "#111827";
|
|
1472
1479
|
};
|
|
1480
|
+
searchInput: {
|
|
1481
|
+
background: "#FFFFFF";
|
|
1482
|
+
border: "#E5E7EB";
|
|
1483
|
+
text: "#111827";
|
|
1484
|
+
placeholder: "#9CA3AF";
|
|
1485
|
+
};
|
|
1473
1486
|
};
|
|
1474
1487
|
hover: {
|
|
1475
1488
|
background: "#F2F8FD";
|
|
1476
1489
|
activeBackground: "#9FD0EC";
|
|
1490
|
+
searchInput: {
|
|
1491
|
+
border: "#D1D5DB";
|
|
1492
|
+
};
|
|
1477
1493
|
};
|
|
1478
1494
|
active: {
|
|
1479
1495
|
background: "#C7E3F5";
|
|
@@ -1481,6 +1497,9 @@ export declare const createComponentsConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
1481
1497
|
textHeader: "#3B90CB";
|
|
1482
1498
|
sortIcon: "#3B90CB";
|
|
1483
1499
|
};
|
|
1500
|
+
searchInput: {
|
|
1501
|
+
border: "#3B90CB";
|
|
1502
|
+
};
|
|
1484
1503
|
};
|
|
1485
1504
|
disabled: {
|
|
1486
1505
|
text: "#9CA3AF";
|
|
@@ -2658,13 +2677,13 @@ export declare const componentsConfig: {
|
|
|
2658
2677
|
pagination: {
|
|
2659
2678
|
size: {
|
|
2660
2679
|
paginationHeight: 32;
|
|
2661
|
-
height:
|
|
2662
|
-
width:
|
|
2680
|
+
height: 24;
|
|
2681
|
+
width: 24;
|
|
2663
2682
|
itemGap: 8;
|
|
2664
2683
|
elementGap: 16;
|
|
2665
2684
|
borderRadius: 8;
|
|
2666
|
-
fontSize:
|
|
2667
|
-
lineHeight:
|
|
2685
|
+
fontSize: 12;
|
|
2686
|
+
lineHeight: 16;
|
|
2668
2687
|
};
|
|
2669
2688
|
color: {
|
|
2670
2689
|
default: {
|
|
@@ -2803,6 +2822,13 @@ export declare const componentsConfig: {
|
|
|
2803
2822
|
};
|
|
2804
2823
|
};
|
|
2805
2824
|
};
|
|
2825
|
+
searchInput: {
|
|
2826
|
+
height: 32;
|
|
2827
|
+
paddingX: 8;
|
|
2828
|
+
radius: 8;
|
|
2829
|
+
fontSize: 13;
|
|
2830
|
+
lineHeight: 18;
|
|
2831
|
+
};
|
|
2806
2832
|
};
|
|
2807
2833
|
color: {
|
|
2808
2834
|
default: {
|
|
@@ -2815,10 +2841,19 @@ export declare const componentsConfig: {
|
|
|
2815
2841
|
text: "#111827";
|
|
2816
2842
|
sortIcon: "#111827";
|
|
2817
2843
|
};
|
|
2844
|
+
searchInput: {
|
|
2845
|
+
background: "#FFFFFF";
|
|
2846
|
+
border: "#E5E7EB";
|
|
2847
|
+
text: "#111827";
|
|
2848
|
+
placeholder: "#9CA3AF";
|
|
2849
|
+
};
|
|
2818
2850
|
};
|
|
2819
2851
|
hover: {
|
|
2820
2852
|
background: "#F2F8FD";
|
|
2821
2853
|
activeBackground: "#9FD0EC";
|
|
2854
|
+
searchInput: {
|
|
2855
|
+
border: "#D1D5DB";
|
|
2856
|
+
};
|
|
2822
2857
|
};
|
|
2823
2858
|
active: {
|
|
2824
2859
|
background: "#C7E3F5";
|
|
@@ -2826,6 +2861,9 @@ export declare const componentsConfig: {
|
|
|
2826
2861
|
textHeader: "#3B90CB";
|
|
2827
2862
|
sortIcon: "#3B90CB";
|
|
2828
2863
|
};
|
|
2864
|
+
searchInput: {
|
|
2865
|
+
border: "#3B90CB";
|
|
2866
|
+
};
|
|
2829
2867
|
};
|
|
2830
2868
|
disabled: {
|
|
2831
2869
|
text: "#9CA3AF";
|
|
@@ -4148,13 +4186,13 @@ export declare const createConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
4148
4186
|
pagination: {
|
|
4149
4187
|
size: {
|
|
4150
4188
|
paginationHeight: 32;
|
|
4151
|
-
height:
|
|
4152
|
-
width:
|
|
4189
|
+
height: 24;
|
|
4190
|
+
width: 24;
|
|
4153
4191
|
itemGap: 8;
|
|
4154
4192
|
elementGap: 16;
|
|
4155
4193
|
borderRadius: 8;
|
|
4156
|
-
fontSize:
|
|
4157
|
-
lineHeight:
|
|
4194
|
+
fontSize: 12;
|
|
4195
|
+
lineHeight: 16;
|
|
4158
4196
|
};
|
|
4159
4197
|
color: {
|
|
4160
4198
|
default: {
|
|
@@ -4293,6 +4331,13 @@ export declare const createConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
4293
4331
|
};
|
|
4294
4332
|
};
|
|
4295
4333
|
};
|
|
4334
|
+
searchInput: {
|
|
4335
|
+
height: 32;
|
|
4336
|
+
paddingX: 8;
|
|
4337
|
+
radius: 8;
|
|
4338
|
+
fontSize: 13;
|
|
4339
|
+
lineHeight: 18;
|
|
4340
|
+
};
|
|
4296
4341
|
};
|
|
4297
4342
|
color: {
|
|
4298
4343
|
default: {
|
|
@@ -4305,10 +4350,19 @@ export declare const createConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
4305
4350
|
text: "#111827";
|
|
4306
4351
|
sortIcon: "#111827";
|
|
4307
4352
|
};
|
|
4353
|
+
searchInput: {
|
|
4354
|
+
background: "#FFFFFF";
|
|
4355
|
+
border: "#E5E7EB";
|
|
4356
|
+
text: "#111827";
|
|
4357
|
+
placeholder: "#9CA3AF";
|
|
4358
|
+
};
|
|
4308
4359
|
};
|
|
4309
4360
|
hover: {
|
|
4310
4361
|
background: "#F2F8FD";
|
|
4311
4362
|
activeBackground: "#9FD0EC";
|
|
4363
|
+
searchInput: {
|
|
4364
|
+
border: "#D1D5DB";
|
|
4365
|
+
};
|
|
4312
4366
|
};
|
|
4313
4367
|
active: {
|
|
4314
4368
|
background: "#C7E3F5";
|
|
@@ -4316,6 +4370,9 @@ export declare const createConfig: (theme?: ThemeName | AppTheme) => {
|
|
|
4316
4370
|
textHeader: "#3B90CB";
|
|
4317
4371
|
sortIcon: "#3B90CB";
|
|
4318
4372
|
};
|
|
4373
|
+
searchInput: {
|
|
4374
|
+
border: "#3B90CB";
|
|
4375
|
+
};
|
|
4319
4376
|
};
|
|
4320
4377
|
disabled: {
|
|
4321
4378
|
text: "#9CA3AF";
|