tp-react-elements 1.3.11 → 1.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -5
- package/dist/_virtual/index.esm12.js +2 -2
- package/dist/_virtual/index.esm14.js +2 -2
- package/dist/_virtual/index.esm4.js +2 -2
- package/dist/_virtual/index.esm5.js +2 -2
- package/dist/_virtual/index.esm6.js +2 -2
- package/dist/_virtual/index.esm7.js +2 -2
- package/dist/components/PaginatedGrid/GenericPaginatedGrid.d.ts +15 -1
- package/dist/components/PaginatedGrid/GenericPaginatedGrid.esm.js +57 -12
- package/dist/node_modules/react-date-range/dist/components/Calendar/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/DateRange/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/DateRangePicker/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/DefinedRange/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/InputRangeField/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/Month/index.esm.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -175,23 +175,41 @@ Refer to our Storybook documentation for detailed API documentation and examples
|
|
|
175
175
|
npm run storybook
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
-
- **Docs → Paginated Grid** —
|
|
179
|
-
- **Components → PaginatedGrid → Sample Grids** — mock grids (no API): header wrap
|
|
178
|
+
- **Docs → Paginated Grid** — API reference plus **four copy-paste examples** (embedded panel, wrapped headers, typography, invoice filters)
|
|
179
|
+
- **Components → PaginatedGrid → Sample Grids** — mock grids (no API): header wrap, compact layout, viewport fill
|
|
180
180
|
- **Components → PaginatedGrid → Example Grid** — live invoice API demo
|
|
181
181
|
|
|
182
|
-
Example
|
|
182
|
+
**Example — compact embedded grid with smaller fonts:**
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
<GenericPaginatedGrid
|
|
186
|
+
tableHeight="calc(100vh - 240px)"
|
|
187
|
+
autoFillViewport={false}
|
|
188
|
+
uiDensity="compact"
|
|
189
|
+
headerBgColor="#f5f5f5"
|
|
190
|
+
headerMaxHeight={64}
|
|
191
|
+
headerFontSize={11}
|
|
192
|
+
bodyFontSize={10}
|
|
193
|
+
{...gridProps}
|
|
194
|
+
/>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Example — wrapped header “Department / Business Unit”:**
|
|
183
198
|
|
|
184
199
|
```tsx
|
|
185
200
|
<GenericPaginatedGrid
|
|
186
201
|
headerBgColor="#e8eaf6"
|
|
187
202
|
headerMinHeight="48px"
|
|
188
203
|
headerMaxHeight="96px"
|
|
189
|
-
|
|
190
|
-
|
|
204
|
+
headerFontSize={12}
|
|
205
|
+
bodyFontSize={12}
|
|
206
|
+
layoutMode="grid"
|
|
191
207
|
{...gridProps}
|
|
192
208
|
/>
|
|
193
209
|
```
|
|
194
210
|
|
|
211
|
+
Full examples: Storybook **Docs → Paginated Grid → Examples**.
|
|
212
|
+
|
|
195
213
|
## 🏗️ Best Practices for Code Structure and Organization
|
|
196
214
|
|
|
197
215
|
### Component Organization
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var InputRangeField = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { InputRangeField as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Month = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { Month as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var DateRange = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { DateRange as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var DefinedRange = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { DefinedRange as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var DateRangePicker = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { DateRangePicker as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Calendar = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { Calendar as __exports };
|
|
@@ -19,6 +19,10 @@ export interface GridUiDensityOptions {
|
|
|
19
19
|
filterChipMinHeight?: number;
|
|
20
20
|
filterLabelFontSize?: number;
|
|
21
21
|
toolbarIconFontSize?: number | string;
|
|
22
|
+
/** Header column title font size (px number). */
|
|
23
|
+
headerFontSize?: number;
|
|
24
|
+
/** Body cell data font size (px number). */
|
|
25
|
+
bodyFontSize?: number;
|
|
22
26
|
/** MRT built-in toolbar control density (show/hide columns, density toggle, etc.). */
|
|
23
27
|
mrtDensity?: 'comfortable' | 'compact' | 'spacious';
|
|
24
28
|
}
|
|
@@ -102,6 +106,16 @@ export interface GenericPaginatedGridProps<TData extends object> {
|
|
|
102
106
|
* Omit to allow text to use the full `headerMaxHeight` (recommended for tall headers).
|
|
103
107
|
*/
|
|
104
108
|
headerMaxLines?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Font size for header column titles (CSS length or px number).
|
|
111
|
+
* Default: `12px` (`11px` when `uiDensity="compact"`). Overridden by `uiDensityOptions.headerFontSize`.
|
|
112
|
+
*/
|
|
113
|
+
headerFontSize?: string | number;
|
|
114
|
+
/**
|
|
115
|
+
* Font size for body/data cells (CSS length or px number).
|
|
116
|
+
* Default: `12px` (`11px` compact). Overridden by `uiDensityOptions.bodyFontSize`.
|
|
117
|
+
*/
|
|
118
|
+
bodyFontSize?: string | number;
|
|
105
119
|
/**
|
|
106
120
|
* Maximum number of filter chips that can be visible at once.
|
|
107
121
|
* Prevents the filter bar from wrapping to a second row on typical screens.
|
|
@@ -109,5 +123,5 @@ export interface GenericPaginatedGridProps<TData extends object> {
|
|
|
109
123
|
*/
|
|
110
124
|
maxVisibleFilters?: number;
|
|
111
125
|
}
|
|
112
|
-
declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, tableHeight, tableMinHeight, tableMaxHeight, autoFillViewport, layoutMode, uiDensity, uiDensityOptions, pageSizeOptions, headerBgColor, headerMinHeight, headerMaxHeight, headerMaxLines, maxVisibleFilters, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
126
|
+
declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, tableHeight, tableMinHeight, tableMaxHeight, autoFillViewport, layoutMode, uiDensity, uiDensityOptions, pageSizeOptions, headerBgColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
113
127
|
export default GenericPaginatedGrid;
|
|
@@ -21,6 +21,8 @@ const UI_DENSITY_PRESETS = {
|
|
|
21
21
|
filterChipMinHeight: 30,
|
|
22
22
|
filterLabelFontSize: 12,
|
|
23
23
|
toolbarIconFontSize: 'small',
|
|
24
|
+
headerFontSize: 12,
|
|
25
|
+
bodyFontSize: 12,
|
|
24
26
|
mrtDensity: 'comfortable',
|
|
25
27
|
},
|
|
26
28
|
compact: {
|
|
@@ -32,6 +34,8 @@ const UI_DENSITY_PRESETS = {
|
|
|
32
34
|
filterChipMinHeight: 26,
|
|
33
35
|
filterLabelFontSize: 11,
|
|
34
36
|
toolbarIconFontSize: 'inherit',
|
|
37
|
+
headerFontSize: 11,
|
|
38
|
+
bodyFontSize: 11,
|
|
35
39
|
mrtDensity: 'compact',
|
|
36
40
|
},
|
|
37
41
|
};
|
|
@@ -44,7 +48,13 @@ const toCssSize = (value, fallback) => {
|
|
|
44
48
|
* Header overrides applied via GlobalStyles (literal prop values).
|
|
45
49
|
* MRT sets `backgroundColor: 'inherit'` and fixed density padding — must use !important.
|
|
46
50
|
*/
|
|
47
|
-
const
|
|
51
|
+
const buildBodyGlobalStyles = (bodyFont) => ({
|
|
52
|
+
'.tp-gpg-root .MuiTableBody-root .MuiTableCell-root': {
|
|
53
|
+
fontSize: `${bodyFont} !important`,
|
|
54
|
+
lineHeight: 1.35,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const buildHeaderGlobalStyles = (headerMin, headerMax, headerFont, headerBgColor) => {
|
|
48
58
|
const headCell = {
|
|
49
59
|
height: `${headerMax} !important`,
|
|
50
60
|
minHeight: `${headerMin} !important`,
|
|
@@ -69,7 +79,10 @@ const buildHeaderGlobalStyles = (headerMin, headerMax, headerBgColor) => {
|
|
|
69
79
|
alignItems: 'stretch !important',
|
|
70
80
|
...(headerBgColor ? { backgroundColor: headerBgColor } : {}),
|
|
71
81
|
},
|
|
72
|
-
'.tp-gpg-root .MuiTableHead-root .MuiTableCell-head':
|
|
82
|
+
'.tp-gpg-root .MuiTableHead-root .MuiTableCell-head': {
|
|
83
|
+
...headCell,
|
|
84
|
+
fontSize: `${headerFont} !important`,
|
|
85
|
+
},
|
|
73
86
|
'.tp-gpg-root .MuiTableHead-root .Mui-TableHeadCell-Content': {
|
|
74
87
|
height: '100% !important',
|
|
75
88
|
width: '100% !important',
|
|
@@ -92,6 +105,7 @@ const buildHeaderGlobalStyles = (headerMin, headerMax, headerBgColor) => {
|
|
|
92
105
|
overflowWrap: 'anywhere !important',
|
|
93
106
|
width: '100% !important',
|
|
94
107
|
maxWidth: '100% !important',
|
|
108
|
+
fontSize: `${headerFont} !important`,
|
|
95
109
|
display: 'block !important',
|
|
96
110
|
WebkitLineClamp: 'unset !important',
|
|
97
111
|
WebkitBoxOrient: 'unset !important',
|
|
@@ -101,11 +115,12 @@ const buildHeaderGlobalStyles = (headerMin, headerMax, headerBgColor) => {
|
|
|
101
115
|
wordBreak: 'break-word !important',
|
|
102
116
|
overflowWrap: 'anywhere !important',
|
|
103
117
|
width: '100% !important',
|
|
118
|
+
fontSize: `${headerFont} !important`,
|
|
104
119
|
},
|
|
105
120
|
};
|
|
106
121
|
};
|
|
107
122
|
/** Per-cell sx merged into MRT (via muiTableHeadCellProps). */
|
|
108
|
-
const buildHeaderCellSx = (align, headerMin, headerMax, headerBgColor, headerMaxLines) => {
|
|
123
|
+
const buildHeaderCellSx = (align, headerMin, headerMax, headerFont, headerBgColor, headerMaxLines) => {
|
|
109
124
|
const textAlign = align;
|
|
110
125
|
const flexJustify = align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start';
|
|
111
126
|
const wrapperClamp = headerMaxLines != null && headerMaxLines > 0
|
|
@@ -127,6 +142,7 @@ const buildHeaderCellSx = (align, headerMin, headerMax, headerBgColor, headerMax
|
|
|
127
142
|
height: `${headerMax} !important`,
|
|
128
143
|
minHeight: `${headerMin} !important`,
|
|
129
144
|
maxHeight: `${headerMax} !important`,
|
|
145
|
+
fontSize: headerFont,
|
|
130
146
|
boxSizing: 'border-box',
|
|
131
147
|
borderRight: '1px solid rgba(224,224,224,1)',
|
|
132
148
|
borderBottom: '2px solid rgba(0,0,0,0.15)',
|
|
@@ -153,6 +169,7 @@ const buildHeaderCellSx = (align, headerMin, headerMax, headerBgColor, headerMax
|
|
|
153
169
|
wordBreak: 'break-word',
|
|
154
170
|
overflowWrap: 'anywhere',
|
|
155
171
|
lineHeight: 1.25,
|
|
172
|
+
fontSize: headerFont,
|
|
156
173
|
width: '100%',
|
|
157
174
|
textAlign,
|
|
158
175
|
...wrapperClamp,
|
|
@@ -160,6 +177,7 @@ const buildHeaderCellSx = (align, headerMin, headerMax, headerBgColor, headerMax
|
|
|
160
177
|
'& .MuiTableSortLabel-root': {
|
|
161
178
|
whiteSpace: 'normal',
|
|
162
179
|
wordBreak: 'break-word',
|
|
180
|
+
fontSize: headerFont,
|
|
163
181
|
width: '100%',
|
|
164
182
|
margin: 0,
|
|
165
183
|
},
|
|
@@ -203,11 +221,22 @@ const PaginationFooter = ({ pageIndex, pageSize, totalRecords, isFetching, isLoa
|
|
|
203
221
|
}, children: pageIndex + 1 }), jsx(Tooltip, { title: "Next page", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: onNext, disabled: !canNext, sx: { p: 0.5 }, children: jsx(ChevronRightIcon, { sx: { fontSize: density.footerIconSize } }) }) }) }), jsx(Tooltip, { title: "Last page", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: onLast, disabled: !canNext, sx: { p: 0.5 }, children: jsx(LastPageIcon, { sx: { fontSize: density.footerIconSize } }) }) }) })] })] }));
|
|
204
222
|
};
|
|
205
223
|
// ─── GenericPaginatedGrid ─────────────────────────────────────────────────────
|
|
206
|
-
function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', tableHeight, tableMinHeight = '300px', tableMaxHeight, autoFillViewport = true, layoutMode = 'grid', uiDensity = 'default', uiDensityOptions, pageSizeOptions = [1000, 5000, 10000], headerBgColor, headerMinHeight, headerMaxHeight, headerMaxLines, maxVisibleFilters = 4, }) {
|
|
224
|
+
function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', tableHeight, tableMinHeight = '300px', tableMaxHeight, autoFillViewport = true, layoutMode = 'grid', uiDensity = 'default', uiDensityOptions, pageSizeOptions = [1000, 5000, 10000], headerBgColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters = 4, }) {
|
|
207
225
|
const densityTokens = useMemo(() => ({ ...UI_DENSITY_PRESETS[uiDensity], ...uiDensityOptions }), [uiDensity, uiDensityOptions]);
|
|
208
226
|
const resolvedHeaderMinHeight = toCssSize(headerMinHeight, uiDensity === 'compact' ? '34px' : '40px');
|
|
209
227
|
const resolvedHeaderMaxHeight = toCssSize(headerMaxHeight, uiDensity === 'compact' ? '56px' : '72px');
|
|
210
|
-
const
|
|
228
|
+
const resolvedHeaderFontSize = toCssSize(headerFontSize ?? densityTokens.headerFontSize, uiDensity === 'compact' ? '11px' : '12px');
|
|
229
|
+
const resolvedBodyFontSize = toCssSize(bodyFontSize ?? densityTokens.bodyFontSize, uiDensity === 'compact' ? '11px' : '12px');
|
|
230
|
+
const tableStyleOverrides = useMemo(() => ({
|
|
231
|
+
...buildHeaderGlobalStyles(resolvedHeaderMinHeight, resolvedHeaderMaxHeight, resolvedHeaderFontSize, headerBgColor),
|
|
232
|
+
...buildBodyGlobalStyles(resolvedBodyFontSize),
|
|
233
|
+
}), [
|
|
234
|
+
resolvedHeaderMinHeight,
|
|
235
|
+
resolvedHeaderMaxHeight,
|
|
236
|
+
resolvedHeaderFontSize,
|
|
237
|
+
resolvedBodyFontSize,
|
|
238
|
+
headerBgColor,
|
|
239
|
+
]);
|
|
211
240
|
const defaultVisible = defaultVisibleFilterIds
|
|
212
241
|
?? (serverFilterDefs.length > 0 ? [serverFilterDefs[0].id] : []);
|
|
213
242
|
// ── State ──────────────────────────────────────────────────────────────────
|
|
@@ -474,16 +503,32 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
474
503
|
return {
|
|
475
504
|
align,
|
|
476
505
|
sx: [
|
|
477
|
-
buildHeaderCellSx(align, resolvedHeaderMinHeight, resolvedHeaderMaxHeight, headerBgColor, headerMaxLines),
|
|
506
|
+
buildHeaderCellSx(align, resolvedHeaderMinHeight, resolvedHeaderMaxHeight, resolvedHeaderFontSize, headerBgColor, headerMaxLines),
|
|
478
507
|
...(colSx ? [colSx] : []),
|
|
479
508
|
],
|
|
480
509
|
};
|
|
481
510
|
},
|
|
482
|
-
muiTableBodyCellProps: {
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
511
|
+
muiTableBodyCellProps: ({ column }) => {
|
|
512
|
+
const colProps = column.columnDef.muiTableBodyCellProps;
|
|
513
|
+
let colSx;
|
|
514
|
+
if (typeof colProps === 'function') {
|
|
515
|
+
const resolved = colProps({ column });
|
|
516
|
+
colSx = resolved?.sx;
|
|
517
|
+
}
|
|
518
|
+
else if (colProps) {
|
|
519
|
+
colSx = colProps.sx;
|
|
520
|
+
}
|
|
521
|
+
return {
|
|
522
|
+
sx: [
|
|
523
|
+
{
|
|
524
|
+
whiteSpace: 'nowrap',
|
|
525
|
+
fontSize: resolvedBodyFontSize,
|
|
526
|
+
lineHeight: 1.35,
|
|
527
|
+
borderRight: '1px solid rgba(224,224,224,1)',
|
|
528
|
+
},
|
|
529
|
+
...(colSx ? [colSx] : []),
|
|
530
|
+
],
|
|
531
|
+
};
|
|
487
532
|
},
|
|
488
533
|
muiToolbarAlertBannerProps: isError
|
|
489
534
|
? { color: 'error', children: 'Failed to load data. Please try again.' }
|
|
@@ -505,7 +550,7 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
505
550
|
'.tp-gpg-root button[aria-label="Move"]': { display: 'none !important' },
|
|
506
551
|
'.tp-gpg-root [data-column-id="mrt-row-spacer"]': { display: 'none !important' },
|
|
507
552
|
'.tp-gpg-root .Mui-TableHeadCell-ColumnSpacer': { display: 'none !important' },
|
|
508
|
-
...
|
|
553
|
+
...tableStyleOverrides,
|
|
509
554
|
} }), isLoading && jsx(OverlayLoader, { message: "Loading data\u2026" }), !isLoading && isFetching && jsx(OverlayLoader, { message: "Updating data\u2026" }), jsx(Box, { sx: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column', overflow: 'hidden' }, children: jsx(MaterialReactTable, { table: table }) })] }));
|
|
510
555
|
}
|
|
511
556
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as Calendar } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as Calendar } from '../../../../../_virtual/index.esm7.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
|
|
4
4
|
import { __require as requireDayCell } from '../DayCell/index.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as DateRange } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as DateRange } from '../../../../../_virtual/index.esm4.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
|
|
4
4
|
import { __require as requireCalendar } from '../Calendar/index.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as DateRangePicker } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as DateRangePicker } from '../../../../../_virtual/index.esm6.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
|
|
4
4
|
import { __require as requireDateRange } from '../DateRange/index.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as DefinedRange } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as DefinedRange } from '../../../../../_virtual/index.esm5.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
|
|
4
4
|
import { __require as requireStyles } from '../../styles.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as InputRangeField } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as InputRangeField } from '../../../../../_virtual/index.esm12.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as Month } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as Month } from '../../../../../_virtual/index.esm14.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
|
|
4
4
|
import { __require as requireDayCell } from '../DayCell/index.esm.js';
|