venice-ui 3.0.55 → 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.
@@ -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, pageSize, onPageChange, onPageSizeChange, availableValues = [10, 20, 50], label = config_2.wordbook.pagination.dropdownLabel, zIndex }) => {
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: flex-end;
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
@@ -45,17 +45,17 @@ const Pagination_1 = require("../Pagination");
45
45
  const HeaderCell_1 = require("./HeaderCell");
46
46
  const Cell_1 = require("./Cell");
47
47
  const SearchInput_1 = require("../SearchInput");
48
+ const PageSize_1 = require("../PageSize");
48
49
  const Table = ({ theme, themeVariant = 'default', headers, elements, hover = true, selectable = true, filtrable = false, pagination = false, sortable = true, sort = {
49
50
  name: '',
50
51
  order: 'none',
51
- }, pageSize = 20, moreActions = [], onRowClick, filterLabels, paginationCounters, tableHeight, tableWrapperHeight, paginationLabel, calendarLabels, calendarLocaleLabels, paginationZIndex, headerExtraContent, searchable = true, searchInputPlaceholder = config_2.wordbook.searchInput.placeholder, }) => {
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, }) => {
52
53
  const resolvedThemeData = (0, config_1.resolveThemeWithComponentsConfig)({
53
54
  theme,
54
55
  themeVariant,
55
56
  });
56
57
  const resolvedTheme = resolvedThemeData.resolvedTheme;
57
58
  const { componentsConfig } = resolvedThemeData;
58
- const [searchValue, setSearchValue] = (0, react_1.useState)('');
59
59
  const tableConfig = componentsConfig.table;
60
60
  const tableHeaders = (0, react_1.useMemo)(() => {
61
61
  const nextHeaders = [...headers];
@@ -79,87 +79,116 @@ const Table = ({ theme, themeVariant = 'default', headers, elements, hover = tru
79
79
  const [currentPageSize, setCurrentPageSize] = (0, react_1.useState)(pageSize || 10);
80
80
  const [noResultsMessage, setNoResultsMessage] = (0, react_1.useState)(null);
81
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]);
82
124
  (0, react_1.useEffect)(() => {
83
- setTableElementsState(fullElements);
84
125
  setCurrentPage(1);
85
- setNoResultsMessage(null);
86
- }, [fullElements]);
87
- const handleRowClick = (id) => {
126
+ }, [currentPageSize]);
127
+ const handleRowClick = (0, react_1.useCallback)((id) => {
88
128
  if (selectable) {
89
129
  setSelectedRow(id);
90
130
  }
91
131
  onRowClick?.(id);
92
- };
93
- const handleHeaderCellClick = (targetValue, order) => {
132
+ }, [selectable, onRowClick]);
133
+ const handleHeaderCellClick = (0, react_1.useCallback)((targetValue, order) => {
94
134
  if (!sortable) {
95
135
  return;
96
136
  }
97
137
  const newSort = (0, tableHelper_1.setSortParams)(targetValue, order, tableSort);
98
138
  setTableSort(newSort);
99
139
  setTableElementsState((prev) => (0, tableHelper_1.applySort)(newSort, prev));
100
- };
101
- const handleApplyFilters = (0, react_1.useCallback)((filteredElements) => {
102
- setTableElementsState(filteredElements);
103
- setCurrentPage(1);
104
- setNoResultsMessage(filteredElements && filteredElements.length === 0
105
- ? config_2.wordbook.table.filterEmptyState
106
- : null);
107
- }, []);
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]);
108
148
  const handleClearFilters = (0, react_1.useCallback)(() => {
109
- setFiltersClearSignal((s) => s + 1);
110
- setTableElementsState(fullElements.slice());
111
- setCurrentPage(1);
112
- setNoResultsMessage(null);
113
- }, [fullElements]);
114
- (0, react_1.useEffect)(() => {
115
- setCurrentPage(1);
116
- }, [currentPageSize]);
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]);
117
165
  const totalPages = Math.ceil(tableElementsState.length / currentPageSize);
118
166
  const paginatedElements = (0, react_1.useMemo)(() => {
119
167
  return tableElementsState.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
120
168
  }, [tableElementsState, currentPage, currentPageSize]);
121
- const handleSearchChange = (value) => {
122
- setSearchValue(value);
123
- };
124
- const getVisableElements = () => {
125
- const visable = pagination ? paginatedElements : tableElementsState;
126
- if (searchValue) {
127
- const searchValueLower = searchValue.toLowerCase();
128
- return visable.filter((item) => {
129
- return tableHeaders.some((header) => {
130
- const value = item[header.valueSource];
131
- if (value && typeof value === 'string') {
132
- return value.toLowerCase().includes(searchValueLower);
133
- }
134
- else if (value && typeof value === 'number') {
135
- return value.toString().toLowerCase().includes(searchValueLower);
136
- }
137
- return false;
138
- });
139
- });
140
- }
141
- return visable;
142
- };
143
- const visibleElements = getVisableElements();
169
+ const visibleElements = pagination ? paginatedElements : tableElementsState;
144
170
  return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: resolvedTheme },
145
171
  react_1.default.createElement(Table_styles_1.TableRoot, { theme: resolvedTheme, config: tableConfig, componentHeight: tableWrapperHeight },
146
172
  react_1.default.createElement(react_1.default.Fragment, null,
147
- (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 },
148
174
  react_1.default.createElement(react_1.default.Fragment, null,
149
- (filtrable || headerExtraContent) && (react_1.default.createElement(Table_styles_1.HeaderSection, null,
150
- 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 })),
151
- headerExtraContent && (react_1.default.createElement(Table_styles_1.HeaderSection, null, headerExtraContent)))),
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))))),
152
179
  (pagination || searchable) && (react_1.default.createElement(Table_styles_1.HeaderSection, { right: true },
153
180
  searchable && (react_1.default.createElement(Table_styles_1.TableSearch, { theme: resolvedTheme, config: tableConfig },
154
181
  react_1.default.createElement(SearchInput_1.SearchInput, { placeholder: searchInputPlaceholder, handleSearch: handleSearchChange }))),
155
- pagination && (react_1.default.createElement(Pagination_1.Pagination, { currentPage: currentPage, totalPages: totalPages, pageSize: currentPageSize, onPageChange: setCurrentPage, onPageSizeChange: setCurrentPageSize, label: paginationLabel?.label, availableValues: paginationCounters, zIndex: paginationZIndex }))))))),
182
+ pagination && (react_1.default.createElement(PageSize_1.PageSize, { label: paginationLabel?.label, zIndex: paginationZIndex, onPageSizeChange: setCurrentPageSize, availableValues: pageSizeAvailableValues, pageSize: currentPageSize }))))))),
156
183
  react_1.default.createElement(Table_styles_1.TableContentWrapper, { componentHeight: tableHeight },
157
- 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 },
158
185
  react_1.default.createElement(Table_styles_1.TableHead, null,
159
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' }))))),
160
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
161
188
  ? () => handleRowClick(item.id)
162
- : 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 }))))))))),
163
- noResultsMessage && (react_1.default.createElement("div", { style: { padding: '8px 12px', textAlign: 'center' } }, noResultsMessage))))));
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))))));
164
193
  };
165
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.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;
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
- // justify-content: ${({ right }) => (right ? 'flex-end' : 'flex-start')};
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,6 +28,7 @@ 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;
@@ -41,8 +41,8 @@ exports.TableContent = styled_components_1.default.table `
41
41
  box-sizing: border-box;
42
42
  display: block;
43
43
  width: 100%;
44
- overflow-x: auto;
45
- overflow-y: auto;
44
+ overflow-x: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
45
+ overflow-y: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
46
46
  height: 100%;
47
47
  border-radius: ${({ theme, config }) => config.size.common.borderRadius}px;
48
48
  border-collapse: separate;
@@ -202,7 +202,30 @@ exports.TableSearch = styled_components_1.default.div `
202
202
  box-sizing: border-box;
203
203
  :hover {
204
204
  border-color: ${({ theme, config }) => config.color.hover.searchInput.border};
205
+ }
205
206
  &:focus-within {
206
207
  border-color: ${({ theme, config }) => config.color.active.searchInput.border};
207
208
  }
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.xl3,
1279
- width: exports.measurements.space.xl3,
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.md,
1284
- lineHeight: exports.measurements.font.lineHeight.md,
1283
+ fontSize: exports.measurements.font.size.xs,
1284
+ lineHeight: exports.measurements.font.lineHeight.xs,
1285
1285
  },
1286
1286
  color: {
1287
1287
  default: {
@@ -68,6 +68,7 @@ exports.wordbook = {
68
68
  },
69
69
  table: {
70
70
  filterEmptyState: 'No results found.',
71
+ emptyState: 'No data available.',
71
72
  }
72
73
  };
73
74
  //ToDo zaaktualizować stories dla Lable
@@ -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, pageSize, onPageChange, onPageSizeChange, availableValues = [10, 20, 50], label = wordbook.pagination.dropdownLabel, zIndex }) => {
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: flex-end;
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,25 +1,25 @@
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, TableSearch, } 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
11
  import { SearchInput } from '../SearchInput';
12
+ import { PageSize } from '../PageSize';
12
13
  export const Table = ({ theme, themeVariant = 'default', headers, elements, hover = true, selectable = true, filtrable = false, pagination = false, sortable = true, sort = {
13
14
  name: '',
14
15
  order: 'none',
15
- }, pageSize = 20, moreActions = [], onRowClick, filterLabels, paginationCounters, tableHeight, tableWrapperHeight, paginationLabel, calendarLabels, calendarLocaleLabels, paginationZIndex, headerExtraContent, searchable = true, searchInputPlaceholder = wordbook.searchInput.placeholder, }) => {
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, }) => {
16
17
  const resolvedThemeData = resolveThemeWithComponentsConfig({
17
18
  theme,
18
19
  themeVariant,
19
20
  });
20
21
  const resolvedTheme = resolvedThemeData.resolvedTheme;
21
22
  const { componentsConfig } = resolvedThemeData;
22
- const [searchValue, setSearchValue] = useState('');
23
23
  const tableConfig = componentsConfig.table;
24
24
  const tableHeaders = useMemo(() => {
25
25
  const nextHeaders = [...headers];
@@ -43,86 +43,115 @@ export const Table = ({ theme, themeVariant = 'default', headers, elements, hove
43
43
  const [currentPageSize, setCurrentPageSize] = useState(pageSize || 10);
44
44
  const [noResultsMessage, setNoResultsMessage] = useState(null);
45
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]);
46
88
  useEffect(() => {
47
- setTableElementsState(fullElements);
48
89
  setCurrentPage(1);
49
- setNoResultsMessage(null);
50
- }, [fullElements]);
51
- const handleRowClick = (id) => {
90
+ }, [currentPageSize]);
91
+ const handleRowClick = useCallback((id) => {
52
92
  if (selectable) {
53
93
  setSelectedRow(id);
54
94
  }
55
95
  onRowClick?.(id);
56
- };
57
- const handleHeaderCellClick = (targetValue, order) => {
96
+ }, [selectable, onRowClick]);
97
+ const handleHeaderCellClick = useCallback((targetValue, order) => {
58
98
  if (!sortable) {
59
99
  return;
60
100
  }
61
101
  const newSort = setSortParams(targetValue, order, tableSort);
62
102
  setTableSort(newSort);
63
103
  setTableElementsState((prev) => applySort(newSort, prev));
64
- };
65
- const handleApplyFilters = useCallback((filteredElements) => {
66
- setTableElementsState(filteredElements);
67
- setCurrentPage(1);
68
- setNoResultsMessage(filteredElements && filteredElements.length === 0
69
- ? wordbook.table.filterEmptyState
70
- : null);
71
- }, []);
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]);
72
112
  const handleClearFilters = useCallback(() => {
73
- setFiltersClearSignal((s) => s + 1);
74
- setTableElementsState(fullElements.slice());
75
- setCurrentPage(1);
76
- setNoResultsMessage(null);
77
- }, [fullElements]);
78
- useEffect(() => {
79
- setCurrentPage(1);
80
- }, [currentPageSize]);
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]);
81
129
  const totalPages = Math.ceil(tableElementsState.length / currentPageSize);
82
130
  const paginatedElements = useMemo(() => {
83
131
  return tableElementsState.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
84
132
  }, [tableElementsState, currentPage, currentPageSize]);
85
- const handleSearchChange = (value) => {
86
- setSearchValue(value);
87
- };
88
- const getVisableElements = () => {
89
- const visable = pagination ? paginatedElements : tableElementsState;
90
- if (searchValue) {
91
- const searchValueLower = searchValue.toLowerCase();
92
- return visable.filter((item) => {
93
- return tableHeaders.some((header) => {
94
- const value = item[header.valueSource];
95
- if (value && typeof value === 'string') {
96
- return value.toLowerCase().includes(searchValueLower);
97
- }
98
- else if (value && typeof value === 'number') {
99
- return value.toString().toLowerCase().includes(searchValueLower);
100
- }
101
- return false;
102
- });
103
- });
104
- }
105
- return visable;
106
- };
107
- const visibleElements = getVisableElements();
133
+ const visibleElements = pagination ? paginatedElements : tableElementsState;
108
134
  return (React.createElement(ThemeProvider, { theme: resolvedTheme },
109
135
  React.createElement(TableRoot, { theme: resolvedTheme, config: tableConfig, componentHeight: tableWrapperHeight },
110
136
  React.createElement(React.Fragment, null,
111
- (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 },
112
138
  React.createElement(React.Fragment, null,
113
- (filtrable || headerExtraContent) && (React.createElement(HeaderSection, null,
114
- filtrable && (React.createElement(Filters, { labels: filterLabels, headers: headers, elements: fullElements, fullElements: fullElements, handleSubmitFilters: handleApplyFilters, externalClearSignal: filtersClearSignal, onClear: handleClearFilters, calendarLabels: calendarLabels, calendarLocaleLabels: calendarLocaleLabels })),
115
- headerExtraContent && (React.createElement(HeaderSection, null, headerExtraContent)))),
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))))),
116
143
  (pagination || searchable) && (React.createElement(HeaderSection, { right: true },
117
144
  searchable && (React.createElement(TableSearch, { theme: resolvedTheme, config: tableConfig },
118
145
  React.createElement(SearchInput, { placeholder: searchInputPlaceholder, handleSearch: handleSearchChange }))),
119
- pagination && (React.createElement(Pagination, { currentPage: currentPage, totalPages: totalPages, pageSize: currentPageSize, onPageChange: setCurrentPage, onPageSizeChange: setCurrentPageSize, label: paginationLabel?.label, availableValues: paginationCounters, zIndex: paginationZIndex }))))))),
146
+ pagination && (React.createElement(PageSize, { label: paginationLabel?.label, zIndex: paginationZIndex, onPageSizeChange: setCurrentPageSize, availableValues: pageSizeAvailableValues, pageSize: currentPageSize }))))))),
120
147
  React.createElement(TableContentWrapper, { componentHeight: tableHeight },
121
- 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 },
122
149
  React.createElement(TableHead, null,
123
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' }))))),
124
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
125
152
  ? () => handleRowClick(item.id)
126
- : 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 }))))))))),
127
- noResultsMessage && (React.createElement("div", { style: { padding: '8px 12px', textAlign: 'center' } }, noResultsMessage))))));
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))))));
128
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
- // justify-content: ${({ right }) => (right ? 'flex-end' : 'flex-start')};
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,6 +22,7 @@ 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;
@@ -35,8 +35,8 @@ export const TableContent = styled.table `
35
35
  box-sizing: border-box;
36
36
  display: block;
37
37
  width: 100%;
38
- overflow-x: auto;
39
- overflow-y: auto;
38
+ overflow-x: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
39
+ overflow-y: ${({ isEmpty }) => (isEmpty ? 'hidden' : 'auto')};
40
40
  height: 100%;
41
41
  border-radius: ${({ theme, config }) => config.size.common.borderRadius}px;
42
42
  border-collapse: separate;
@@ -196,7 +196,30 @@ export const TableSearch = styled.div `
196
196
  box-sizing: border-box;
197
197
  :hover {
198
198
  border-color: ${({ theme, config }) => config.color.hover.searchInput.border};
199
+ }
199
200
  &:focus-within {
200
201
  border-color: ${({ theme, config }) => config.color.active.searchInput.border};
201
202
  }
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.xl3,
1274
- width: measurements.space.xl3,
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.md,
1279
- lineHeight: measurements.font.lineHeight.md,
1278
+ fontSize: measurements.font.size.xs,
1279
+ lineHeight: measurements.font.lineHeight.xs,
1280
1280
  },
1281
1281
  color: {
1282
1282
  default: {
@@ -65,6 +65,7 @@ export const wordbook = {
65
65
  },
66
66
  table: {
67
67
  filterEmptyState: 'No results found.',
68
+ emptyState: 'No data available.',
68
69
  }
69
70
  };
70
71
  //ToDo zaaktualizować stories dla Lable
@@ -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
- paginationCounters?: number[];
18
+ pageSizeAvailableValues?: number[];
19
19
  tableHeight?: string;
20
20
  tableWrapperHeight?: string;
21
21
  filterLabels?: IFilterLabels;
@@ -26,6 +26,8 @@ interface ITableProps {
26
26
  headerExtraContent?: React.ReactNode;
27
27
  searchable?: boolean;
28
28
  searchInputPlaceholder?: string;
29
+ noResultsText?: string;
30
+ emptyStateText?: string;
29
31
  }
30
32
  export interface ITableHeaderProps {
31
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>;
@@ -85,4 +86,10 @@ interface ITableSearchProps {
85
86
  config: any;
86
87
  }
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>;
88
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: 28;
1317
- width: 28;
1316
+ height: 24;
1317
+ width: 24;
1318
1318
  itemGap: 8;
1319
1319
  elementGap: 16;
1320
1320
  borderRadius: 8;
1321
- fontSize: 14;
1322
- lineHeight: 20;
1321
+ fontSize: 12;
1322
+ lineHeight: 16;
1323
1323
  };
1324
1324
  color: {
1325
1325
  default: {
@@ -2677,13 +2677,13 @@ export declare const componentsConfig: {
2677
2677
  pagination: {
2678
2678
  size: {
2679
2679
  paginationHeight: 32;
2680
- height: 28;
2681
- width: 28;
2680
+ height: 24;
2681
+ width: 24;
2682
2682
  itemGap: 8;
2683
2683
  elementGap: 16;
2684
2684
  borderRadius: 8;
2685
- fontSize: 14;
2686
- lineHeight: 20;
2685
+ fontSize: 12;
2686
+ lineHeight: 16;
2687
2687
  };
2688
2688
  color: {
2689
2689
  default: {
@@ -4186,13 +4186,13 @@ export declare const createConfig: (theme?: ThemeName | AppTheme) => {
4186
4186
  pagination: {
4187
4187
  size: {
4188
4188
  paginationHeight: 32;
4189
- height: 28;
4190
- width: 28;
4189
+ height: 24;
4190
+ width: 24;
4191
4191
  itemGap: 8;
4192
4192
  elementGap: 16;
4193
4193
  borderRadius: 8;
4194
- fontSize: 14;
4195
- lineHeight: 20;
4194
+ fontSize: 12;
4195
+ lineHeight: 16;
4196
4196
  };
4197
4197
  color: {
4198
4198
  default: {
@@ -52,5 +52,6 @@ export declare const wordbook: {
52
52
  };
53
53
  table: {
54
54
  filterEmptyState: string;
55
+ emptyState: string;
55
56
  };
56
57
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "venice-ui",
3
- "version": "3.0.55",
3
+ "version": "3.0.56",
4
4
  "description": "Component library",
5
5
  "main": "index.js",
6
6
  "module": "./dist/esm/index.js",