tp-react-elements 1.3.4 → 1.3.7
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/_virtual/index.esm10.js +2 -2
- package/dist/_virtual/index.esm12.js +2 -2
- package/dist/_virtual/index.esm13.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/_virtual/index.esm9.js +2 -2
- package/dist/components/Form/FormRender.esm.js +2 -2
- package/dist/components/FormComponents/index.esm.js +5 -5
- package/dist/components/PaginatedGrid/DynamicFilterBar.d.ts +3 -1
- package/dist/components/PaginatedGrid/DynamicFilterBar.esm.js +67 -46
- package/dist/components/PaginatedGrid/GenericPaginatedGrid.d.ts +14 -2
- package/dist/components/PaginatedGrid/GenericPaginatedGrid.esm.js +69 -8
- package/dist/node_modules/prop-types/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/accessibility/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/Calendar/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/DateInput/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/Month/index.esm.js +1 -1
- package/dist/utils/rdrStyles.esm.js +116 -116
- package/package.json +1 -1
- package/scripts/install-deps.js +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var propTypes = {exports: {}};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { propTypes as __module };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var DateInput = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { DateInput 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 Calendar = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { Calendar 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 DateRangePicker = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { DateRangePicker as __exports };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var accessibility = {};
|
|
2
2
|
|
|
3
|
-
export {
|
|
3
|
+
export { accessibility as __exports };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import React__default, { lazy, Suspense } from 'react';
|
|
3
|
+
import FormCheckBox from '../FormComponents/FormCheckBox/FormCheckBox.esm.js';
|
|
4
|
+
import FormCheckBoxGroup from '../FormComponents/FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
|
|
3
5
|
import SingleSelect from '../FormComponents/Select/SingleSelect.esm.js';
|
|
4
6
|
import MultiSelectAutocomplete from '../FormComponents/Select/MultiSelectAutocomplete.esm.js';
|
|
5
7
|
import SingleSelectNonAutoComplete from '../FormComponents/Select/SingleSelectNonAutoComplete.esm.js';
|
|
@@ -11,9 +13,7 @@ import RichTextEditorWrapper from '../FormComponents/RichTextEditor/RichTextEdit
|
|
|
11
13
|
import SingleSelectSearchApi from '../FormComponents/Select/SingleSelectSearchApi.esm.js';
|
|
12
14
|
import DatetimepickerWrapper from '../FormComponents/DatePicker/DatetimepickerWrapper.esm.js';
|
|
13
15
|
import FormTextAreaField from '../FormComponents/FormTextAreaField/FormTextAreaField.esm.js';
|
|
14
|
-
import FormCheckBox from '../FormComponents/FormCheckBox/FormCheckBox.esm.js';
|
|
15
16
|
import FormRadioGroup from '../FormComponents/FormRadioGroup/FormRadioGroup.esm.js';
|
|
16
|
-
import FormCheckBoxGroup from '../FormComponents/FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
|
|
17
17
|
import FormNumberFieldDecimal from '../FormComponents/FormNumberField/FormNumberFieldDecimal.esm.js';
|
|
18
18
|
import FormNumberField from '../FormComponents/FormNumberField/FormNumberField.esm.js';
|
|
19
19
|
import PasswordField from '../FormComponents/PasswordField/PasswordField.esm.js';
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
export { default as FormCheckBox } from './FormCheckBox/FormCheckBox.esm.js';
|
|
1
2
|
export { default as SingleSelect } from './Select/SingleSelect.esm.js';
|
|
2
3
|
export { default as SingleSelectNonAutoComplete } from './Select/SingleSelectNonAutoComplete.esm.js';
|
|
3
4
|
export { default as SingleSelectSearchApi } from './Select/SingleSelectSearchApi.esm.js';
|
|
4
5
|
export { default as MultiSelectV1 } from './Select/MultiSelectv1.esm.js';
|
|
5
6
|
export { default as MultiSelectTable } from './Select/MultiSelectTable.esm.js';
|
|
6
7
|
export { default as SearchableSelect } from './Select/SearchableSelect.esm.js';
|
|
8
|
+
export { default as FormCheckBoxGroup } from './FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
|
|
7
9
|
export { default as DatepickerWrapperV2 } from './DatePicker/DatepickerWrapperV2.esm.js';
|
|
10
|
+
export { default as Monthpickerrender } from './DatePicker/Monthpickerrender.esm.js';
|
|
11
|
+
export { default as YearPickerField } from './YearPickerField/YearPickerField.esm.js';
|
|
8
12
|
export { default as FormBottomField } from './FormBottomField/FormBottomField.esm.js';
|
|
9
|
-
export { default as FormCheckBox } from './FormCheckBox/FormCheckBox.esm.js';
|
|
10
|
-
export { default as FormCheckBoxGroup } from './FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
|
|
11
13
|
export { default as FormErrorField } from './FormErrorField/FormErrorField.esm.js';
|
|
14
|
+
export { default as HelperText } from './HelperText/HelperText.esm.js';
|
|
12
15
|
export { default as FormNumberField } from './FormNumberField/FormNumberField.esm.js';
|
|
13
16
|
export { default as FormNumberFieldDecimal } from './FormNumberField/FormNumberFieldDecimal.esm.js';
|
|
14
17
|
export { default as FormRadioGroup } from './FormRadioGroup/FormRadioGroup.esm.js';
|
|
@@ -16,10 +19,7 @@ export { default as FormRenderFileUpload } from './FileUpload/FormRenderFileUplo
|
|
|
16
19
|
export { default as FormRenderMultiFileUpload } from './FileUpload/FormRenderMultiFileUpload.esm.js';
|
|
17
20
|
export { default as FormTextAreaField } from './FormTextAreaField/FormTextAreaField.esm.js';
|
|
18
21
|
export { default as FormTextField } from './FormTextField/FormTextField.esm.js';
|
|
19
|
-
export { default as HelperText } from './HelperText/HelperText.esm.js';
|
|
20
|
-
export { default as Monthpickerrender } from './DatePicker/Monthpickerrender.esm.js';
|
|
21
22
|
export { default as PasswordField } from './PasswordField/PasswordField.esm.js';
|
|
22
23
|
export { default as RichTextEditor } from './RichTextEditor/RichTextEditor.esm.js';
|
|
23
24
|
export { default as RichTextEditorWrapper } from './RichTextEditor/RichTextEditorWrapper.esm.js';
|
|
24
25
|
export { default as TimePicker } from './TimePicker/TimePicker.esm.js';
|
|
25
|
-
export { default as YearPickerField } from './YearPickerField/YearPickerField.esm.js';
|
|
@@ -80,6 +80,8 @@ export interface DynamicFilterBarProps {
|
|
|
80
80
|
columnFilters: MRT_ColumnFiltersState;
|
|
81
81
|
onColumnFilterChange: (f: MRT_ColumnFiltersState) => void;
|
|
82
82
|
availableColumns: AvailableColumn[];
|
|
83
|
+
/** Maximum number of chips that may be visible at once. Default: 4. */
|
|
84
|
+
maxVisibleFilters?: number;
|
|
83
85
|
}
|
|
84
|
-
declare const DynamicFilterBar: ({ serverFilterDefs, visibleFilterIds, onToggleFilter, filterValues, onFilterValuesChange, columnFilters, onColumnFilterChange, availableColumns, }: DynamicFilterBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
86
|
+
declare const DynamicFilterBar: ({ serverFilterDefs, visibleFilterIds, onToggleFilter, filterValues, onFilterValuesChange, columnFilters, onColumnFilterChange, availableColumns, maxVisibleFilters, }: DynamicFilterBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
85
87
|
export default DynamicFilterBar;
|
|
@@ -9,7 +9,7 @@ import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
|
|
9
9
|
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
|
10
10
|
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
11
11
|
import SingleSelectNonAutoComplete from '../FormComponents/Select/SingleSelectNonAutoComplete.esm.js';
|
|
12
|
-
import { Box, Typography, Button, Popover, TextField, Stack, InputAdornment, List, ListItemButton, ListItemText,
|
|
12
|
+
import { Box, Typography, Tooltip, Button, Popover, TextField, Stack, InputAdornment, List, ListItemButton, ListItemText, Divider } from '@mui/material';
|
|
13
13
|
import CalendarTodayIcon from '@mui/icons-material/CalendarToday';
|
|
14
14
|
import TuneIcon from '@mui/icons-material/Tune';
|
|
15
15
|
import CloseIcon from '@mui/icons-material/Close';
|
|
@@ -50,8 +50,24 @@ const chipSx = (active) => ({
|
|
|
50
50
|
whiteSpace: 'nowrap',
|
|
51
51
|
px: 1.5,
|
|
52
52
|
minHeight: 30,
|
|
53
|
+
// Cap chip width so long option labels don't break the filter bar layout
|
|
54
|
+
maxWidth: 260,
|
|
55
|
+
overflow: 'hidden',
|
|
53
56
|
'&:hover': { borderColor: 'primary.main', bgcolor: 'rgba(25,118,210,0.08)' },
|
|
54
57
|
});
|
|
58
|
+
// ─── ChipLabel — renders button text with ellipsis when it overflows ──────────
|
|
59
|
+
//
|
|
60
|
+
// MUI Button is a flex container: the text child must have `min-width: 0`
|
|
61
|
+
// (overrides the default `min-width: auto`) so it can shrink past its natural
|
|
62
|
+
// size and trigger `text-overflow: ellipsis`.
|
|
63
|
+
const ChipLabel = ({ text }) => (jsx(Box, { component: "span", sx: {
|
|
64
|
+
overflow: 'hidden',
|
|
65
|
+
textOverflow: 'ellipsis',
|
|
66
|
+
whiteSpace: 'nowrap',
|
|
67
|
+
display: 'block',
|
|
68
|
+
minWidth: 0,
|
|
69
|
+
flex: '1 1 0',
|
|
70
|
+
}, children: text }));
|
|
55
71
|
// ─── Date helper ──────────────────────────────────────────────────────────────
|
|
56
72
|
const fmtDate = (iso) => {
|
|
57
73
|
if (!iso)
|
|
@@ -104,13 +120,14 @@ const DateRangeChip = ({ label, fromDate, toDate, onApply, onRemove }) => {
|
|
|
104
120
|
setAnchor(null);
|
|
105
121
|
}
|
|
106
122
|
};
|
|
107
|
-
return (jsxs(Fragment, { children: [jsx(Button, { variant: "outlined", size: "small", onClick: openPicker, startIcon: jsx(CalendarTodayIcon, { sx: { fontSize: 13 } }), endIcon: jsx(CloseIcon, { sx: { fontSize: '12px !important' }, onClick: (e) => { e.stopPropagation(); onRemove(); } }), sx: chipSx(active), children: chipLabel }), jsxs(Popover, { open: Boolean(anchor), anchorEl: anchor, onClose: () => setAnchor(null), anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: { sx: { mt: 0.75, borderRadius: 2, boxShadow: 6, overflow: 'hidden' } }, children: [jsx(distExports.DateRange, { editableDateInputs: false, onChange: handleRangeChange, moveRangeOnFirstSelection: false, ranges: selRange, months: 2, direction: "horizontal", showDateDisplay: false, dateDisplayFormat: "dd/MM/yyyy", rangeColors: ['#1976d2'] }), active && (jsx(Box, { sx: { display: 'flex', justifyContent: 'flex-end', px: 2, pb: 1.5 }, children: jsx(Button, { size: "small", color: "inherit", onClick: () => { onApply('', ''); setAnchor(null); }, children: "Clear" }) }))] })] }));
|
|
123
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: active ? chipLabel : '', placement: "top", arrow: true, children: jsx(Button, { variant: "outlined", size: "small", onClick: openPicker, startIcon: jsx(CalendarTodayIcon, { sx: { fontSize: 13 } }), endIcon: jsx(CloseIcon, { sx: { fontSize: '12px !important' }, onClick: (e) => { e.stopPropagation(); onRemove(); } }), sx: chipSx(active), children: jsx(ChipLabel, { text: chipLabel }) }) }), jsxs(Popover, { open: Boolean(anchor), anchorEl: anchor, onClose: () => setAnchor(null), anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: { sx: { mt: 0.75, borderRadius: 2, boxShadow: 6, overflow: 'hidden' } }, children: [jsx(distExports.DateRange, { editableDateInputs: false, onChange: handleRangeChange, moveRangeOnFirstSelection: false, ranges: selRange, months: 2, direction: "horizontal", showDateDisplay: false, dateDisplayFormat: "dd/MM/yyyy", rangeColors: ['#1976d2'] }), active && (jsx(Box, { sx: { display: 'flex', justifyContent: 'flex-end', px: 2, pb: 1.5 }, children: jsx(Button, { size: "small", color: "inherit", onClick: () => { onApply('', ''); setAnchor(null); }, children: "Clear" }) }))] })] }));
|
|
108
124
|
};
|
|
109
125
|
const TextFilterChip = ({ label, value, onApply, onRemove, placeholder }) => {
|
|
110
126
|
const [anchor, setAnchor] = useState(null);
|
|
111
127
|
const [draft, setDraft] = useState('');
|
|
112
128
|
const active = Boolean(value);
|
|
113
|
-
|
|
129
|
+
const chipText = active ? `${label}: ${value}` : label;
|
|
130
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: active ? chipText : '', placement: "top", arrow: true, children: jsx(Button, { variant: "outlined", size: "small", onClick: (e) => { setDraft(value); setAnchor(e.currentTarget); }, endIcon: jsx(CloseIcon, { sx: { fontSize: '12px !important' }, onClick: (e) => { e.stopPropagation(); onRemove(); } }), sx: chipSx(active), children: jsx(ChipLabel, { text: chipText }) }) }), jsx(Popover, { open: Boolean(anchor), anchorEl: anchor, onClose: () => setAnchor(null), anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: { sx: { mt: 0.75, borderRadius: 2, boxShadow: 6, minWidth: 240 } }, children: jsxs(Box, { sx: { p: 2 }, children: [jsx(Typography, { variant: "caption", fontWeight: 600, color: "text.secondary", display: "block", mb: 1.5, children: label }), jsx(TextField, { value: draft, onChange: (e) => setDraft(e.target.value), placeholder: placeholder, size: "small", fullWidth: true, autoFocus: true, onKeyDown: (e) => {
|
|
114
131
|
if (e.key === 'Enter') {
|
|
115
132
|
onApply(draft);
|
|
116
133
|
setAnchor(null);
|
|
@@ -138,11 +155,12 @@ const DatePickerChip = ({ label, value, onApply, onRemove }) => {
|
|
|
138
155
|
}
|
|
139
156
|
setOpen(false);
|
|
140
157
|
};
|
|
158
|
+
const chipText = active ? `${label}: ${fmtDate(value)}` : label;
|
|
141
159
|
return (
|
|
142
160
|
// LocalizationProvider must wrap DatePicker — scoped here so it only
|
|
143
161
|
// loads when the chip is actually used (DatePickerChip is tree-shaken
|
|
144
162
|
// if the 'date' filter type is never included in serverFilterDefs).
|
|
145
|
-
jsxs(LocalizationProvider, { dateAdapter: AdapterDayjs, children: [jsx(Button, { variant: "outlined", size: "small", onClick: handleChipClick, startIcon: jsx(CalendarTodayIcon, { sx: { fontSize: 13 } }), endIcon: jsx(CloseIcon, { sx: { fontSize: '12px !important' }, onClick: (e) => { e.stopPropagation(); onRemove(); } }), sx: chipSx(active), children:
|
|
163
|
+
jsxs(LocalizationProvider, { dateAdapter: AdapterDayjs, children: [jsx(Tooltip, { title: active ? chipText : '', placement: "top", arrow: true, children: jsx(Button, { variant: "outlined", size: "small", onClick: handleChipClick, startIcon: jsx(CalendarTodayIcon, { sx: { fontSize: 13 } }), endIcon: jsx(CloseIcon, { sx: { fontSize: '12px !important' }, onClick: (e) => { e.stopPropagation(); onRemove(); } }), sx: chipSx(active), children: jsx(ChipLabel, { text: chipText }) }) }), jsx(DatePicker, { value: dayjsValue, open: open, onClose: () => setOpen(false), onChange: handleChange, slotProps: {
|
|
146
164
|
textField: { sx: { display: 'none' }, size: 'small' },
|
|
147
165
|
popper: {
|
|
148
166
|
anchorEl,
|
|
@@ -180,7 +198,8 @@ const DropdownFilterChip = ({ label, value, options, onApply, onRemove }) => {
|
|
|
180
198
|
...options.map((o) => ({ label: o.label, value: o.value })),
|
|
181
199
|
],
|
|
182
200
|
};
|
|
183
|
-
|
|
201
|
+
const chipText = active ? `${label}: ${selectedLabel}` : label;
|
|
202
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: active ? chipText : '', placement: "top", arrow: true, children: jsx(Button, { variant: "outlined", size: "small", onClick: (e) => setAnchor(e.currentTarget), startIcon: jsx(ArrowDropDownIcon, { sx: { fontSize: '15px !important', mr: -0.5 } }), endIcon: jsx(CloseIcon, { sx: { fontSize: '12px !important' }, onClick: (e) => { e.stopPropagation(); onRemove(); } }), sx: chipSx(active), children: jsx(ChipLabel, { text: chipText }) }) }), jsx(Popover, { open: Boolean(anchor), anchorEl: anchor, onClose: () => setAnchor(null), anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: { sx: { mt: 0.75, borderRadius: 2, boxShadow: 6, p: 1.5, minWidth: 240 } }, children: jsx(SingleSelectNonAutoComplete, { props: {
|
|
184
203
|
item,
|
|
185
204
|
register,
|
|
186
205
|
control,
|
|
@@ -208,7 +227,8 @@ const SearchableSelectChip = ({ label, value, options, onApply, onRemove, placeh
|
|
|
208
227
|
const filtered = search
|
|
209
228
|
? options.filter((o) => o.label.toLowerCase().includes(search.toLowerCase()))
|
|
210
229
|
: options;
|
|
211
|
-
|
|
230
|
+
const chipText = active ? `${label}: ${selectedLabel}` : label;
|
|
231
|
+
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: active ? chipText : '', placement: "top", arrow: true, children: jsx(Button, { variant: "outlined", size: "small", onClick: open, startIcon: jsx(SearchIcon, { sx: { fontSize: '14px !important', mr: -0.25 } }), endIcon: jsx(CloseIcon, { sx: { fontSize: '12px !important' }, onClick: (e) => { e.stopPropagation(); onRemove(); } }), sx: chipSx(active), children: jsx(ChipLabel, { text: chipText }) }) }), jsxs(Popover, { open: Boolean(anchor), anchorEl: anchor, onClose: () => setAnchor(null), anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: {
|
|
212
232
|
sx: { mt: 0.75, borderRadius: 2, boxShadow: 6, width: 280, display: 'flex', flexDirection: 'column' },
|
|
213
233
|
}, children: [jsx(Box, { sx: { px: 1.5, pt: 1.5, pb: 0.75 }, children: jsx(TextField, { size: "small", fullWidth: true, autoFocus: true, placeholder: placeholder, value: search, onChange: (e) => setSearch(e.target.value), onKeyDown: (e) => { if (e.key === 'Escape')
|
|
214
234
|
setAnchor(null); }, InputProps: {
|
|
@@ -226,52 +246,53 @@ const SearchableSelectChip = ({ label, value, options, onApply, onRemove, placeh
|
|
|
226
246
|
} }), isSelected && (jsx(CheckIcon, { sx: { fontSize: 15, color: 'primary.main', flexShrink: 0 } }))] }, opt.value));
|
|
227
247
|
}))] })] })] }));
|
|
228
248
|
};
|
|
229
|
-
const ManageFiltersButton = ({ serverFilterDefs, visibleIds, availableColumns, onToggle, }) => {
|
|
249
|
+
const ManageFiltersButton = ({ serverFilterDefs, visibleIds, availableColumns, onToggle, maxVisible = 4, }) => {
|
|
230
250
|
const [anchor, setAnchor] = useState(null);
|
|
251
|
+
const atLimit = visibleIds.length >= maxVisible;
|
|
252
|
+
// Shared pill box renderer
|
|
253
|
+
const PillBox = ({ bg, color, label }) => (jsx(Box, { component: "span", sx: {
|
|
254
|
+
mr: 1.25, flexShrink: 0,
|
|
255
|
+
fontSize: 10, fontWeight: 700,
|
|
256
|
+
px: 0.75, py: '2px',
|
|
257
|
+
borderRadius: '4px',
|
|
258
|
+
bgcolor: bg,
|
|
259
|
+
color,
|
|
260
|
+
textTransform: 'uppercase',
|
|
261
|
+
letterSpacing: 0.4,
|
|
262
|
+
lineHeight: 1.6,
|
|
263
|
+
}, children: label }));
|
|
231
264
|
return (jsxs(Fragment, { children: [jsx(Tooltip, { title: "Add or remove filter chips", children: jsx(Button, { size: "small", variant: "outlined", startIcon: jsx(TuneIcon, { sx: { fontSize: 14 } }), onClick: (e) => setAnchor(e.currentTarget), sx: {
|
|
232
265
|
borderRadius: 5, textTransform: 'none', fontSize: 12,
|
|
233
266
|
borderColor: 'divider', color: 'text.secondary',
|
|
234
267
|
px: 1.5, minHeight: 30,
|
|
235
268
|
'&:hover': { borderColor: 'primary.main', color: 'primary.main' },
|
|
236
|
-
}, children: "Manage Filters" }) }),
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
px: 0.75, py: '2px',
|
|
262
|
-
borderRadius: '4px',
|
|
263
|
-
bgcolor: pill.bg,
|
|
264
|
-
color: pill.color,
|
|
265
|
-
textTransform: 'uppercase',
|
|
266
|
-
letterSpacing: 0.4,
|
|
267
|
-
lineHeight: 1.6,
|
|
268
|
-
}, children: pill.label }), jsx(ListItemText, { primary: col.label, primaryTypographyProps: {
|
|
269
|
-
fontSize: 13,
|
|
270
|
-
color: selected ? 'primary.main' : 'text.primary',
|
|
271
|
-
} }), selected && jsx(CheckIcon, { sx: { fontSize: 16, color: 'primary.main', flexShrink: 0 } })] }, col.id));
|
|
272
|
-
}) })] }))] }) })] }));
|
|
269
|
+
}, children: "Manage Filters" }) }), jsxs(Popover, { open: Boolean(anchor), anchorEl: anchor, onClose: () => setAnchor(null), anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: { sx: { mt: 0.75, borderRadius: 2, boxShadow: 6, width: 280 } }, children: [atLimit && (jsx(Box, { sx: {
|
|
270
|
+
px: 2, py: 0.75,
|
|
271
|
+
bgcolor: 'rgba(25,118,210,0.07)',
|
|
272
|
+
borderBottom: '1px solid rgba(25,118,210,0.2)',
|
|
273
|
+
display: 'flex',
|
|
274
|
+
alignItems: 'center',
|
|
275
|
+
gap: 0.75,
|
|
276
|
+
}, children: jsxs(Typography, { sx: { fontSize: 11, color: 'primary.main', fontWeight: 600, lineHeight: 1.4 }, children: [visibleIds.length, "/", maxVisible, " filters active \u2014 remove one to add another"] }) })), jsxs(Box, { sx: { py: 1 }, children: [serverFilterDefs.length > 0 && (jsxs(Fragment, { children: [jsx(Typography, { variant: "caption", fontWeight: 700, color: "text.disabled", sx: { px: 2, pb: 0.5, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }, children: "Server Filters" }), jsx(List, { dense: true, disablePadding: true, children: serverFilterDefs.map((def) => {
|
|
277
|
+
const selected = visibleIds.includes(def.id);
|
|
278
|
+
const blocked = atLimit && !selected; // at cap and not yet shown → disabled
|
|
279
|
+
const pill = TYPE_PILL[def.type];
|
|
280
|
+
return (jsx(Tooltip, { title: blocked ? `Maximum ${maxVisible} filters allowed` : '', placement: "right", arrow: true, children: jsx("span", { style: { display: 'block' }, children: jsxs(ListItemButton, { onClick: () => !blocked && onToggle(def.id), disabled: blocked, sx: { px: 2, py: 0.5, opacity: blocked ? 0.45 : 1 }, children: [jsx(PillBox, { bg: pill.bg, color: pill.color, label: pill.label }), jsx(ListItemText, { primary: def.label, primaryTypographyProps: {
|
|
281
|
+
fontSize: 13,
|
|
282
|
+
color: selected ? 'primary.main' : 'text.primary',
|
|
283
|
+
} }), selected && jsx(CheckIcon, { sx: { fontSize: 16, color: 'primary.main', flexShrink: 0 } })] }) }) }, def.id));
|
|
284
|
+
}) })] })), availableColumns.length > 0 && (jsxs(Fragment, { children: [jsx(Divider, { sx: { my: 1 } }), jsx(Typography, { variant: "caption", fontWeight: 700, color: "text.disabled", sx: { px: 2, pb: 0.5, display: 'block', textTransform: 'uppercase', letterSpacing: 0.5 }, children: "Column Filters" }), jsx(List, { dense: true, disablePadding: true, children: availableColumns.map((col) => {
|
|
285
|
+
const selected = visibleIds.includes(col.id);
|
|
286
|
+
const blocked = atLimit && !selected;
|
|
287
|
+
const pill = COLUMN_TYPE_PILL[col.filterType ?? 'text'] ??
|
|
288
|
+
COLUMN_TYPE_PILL.text;
|
|
289
|
+
return (jsx(Tooltip, { title: blocked ? `Maximum ${maxVisible} filters allowed` : '', placement: "right", arrow: true, children: jsx("span", { style: { display: 'block' }, children: jsxs(ListItemButton, { onClick: () => !blocked && onToggle(col.id), disabled: blocked, sx: { px: 2, py: 0.4, opacity: blocked ? 0.45 : 1 }, children: [jsx(PillBox, { bg: pill.bg, color: pill.color, label: pill.label }), jsx(ListItemText, { primary: col.label, primaryTypographyProps: {
|
|
290
|
+
fontSize: 13,
|
|
291
|
+
color: selected ? 'primary.main' : 'text.primary',
|
|
292
|
+
} }), selected && jsx(CheckIcon, { sx: { fontSize: 16, color: 'primary.main', flexShrink: 0 } })] }) }) }, col.id));
|
|
293
|
+
}) })] }))] })] })] }));
|
|
273
294
|
};
|
|
274
|
-
const DynamicFilterBar = ({ serverFilterDefs, visibleFilterIds, onToggleFilter, filterValues, onFilterValuesChange, columnFilters, onColumnFilterChange, availableColumns, }) => {
|
|
295
|
+
const DynamicFilterBar = ({ serverFilterDefs, visibleFilterIds, onToggleFilter, filterValues, onFilterValuesChange, columnFilters, onColumnFilterChange, availableColumns, maxVisibleFilters = 4, }) => {
|
|
275
296
|
const getColValue = (id) => columnFilters.find((f) => f.id === id)?.value ?? '';
|
|
276
297
|
const applyColFilter = (id, value) => {
|
|
277
298
|
const rest = columnFilters.filter((f) => f.id !== id);
|
|
@@ -324,7 +345,7 @@ const DynamicFilterBar = ({ serverFilterDefs, visibleFilterIds, onToggleFilter,
|
|
|
324
345
|
}
|
|
325
346
|
// Default: free-text input
|
|
326
347
|
return (jsx(TextFilterChip, { label: col.label, value: getColValue(id), onApply: (v) => applyColFilter(id, v), onRemove: () => removeFilter(id), placeholder: `Filter by ${col.label}` }, id));
|
|
327
|
-
}), jsx(ManageFiltersButton, { serverFilterDefs: serverFilterDefs, visibleIds: visibleFilterIds, availableColumns: availableColumns, onToggle: onToggleFilter })] }));
|
|
348
|
+
}), jsx(ManageFiltersButton, { serverFilterDefs: serverFilterDefs, visibleIds: visibleFilterIds, availableColumns: availableColumns, onToggle: onToggleFilter, maxVisible: maxVisibleFilters })] }));
|
|
328
349
|
};
|
|
329
350
|
|
|
330
351
|
export { DynamicFilterBar as default };
|
|
@@ -33,7 +33,13 @@ export interface GenericPaginatedGridProps<TData extends object> {
|
|
|
33
33
|
batchSize?: number;
|
|
34
34
|
/** CSV file name prefix. Default: "export". */
|
|
35
35
|
exportFilename?: string;
|
|
36
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Height of the entire grid component.
|
|
38
|
+
* When omitted (default) the grid auto-sizes to fill the remaining viewport
|
|
39
|
+
* height from its top position — the page never needs to scroll.
|
|
40
|
+
* Pass an explicit CSS value only when you need to override
|
|
41
|
+
* (e.g. "600px", "calc(100vh - 300px)").
|
|
42
|
+
*/
|
|
37
43
|
tableHeight?: string;
|
|
38
44
|
/** Choices shown in the "Rows per page" footer dropdown. Default: [1 000, 5 000, 10 000]. */
|
|
39
45
|
pageSizeOptions?: number[];
|
|
@@ -42,6 +48,12 @@ export interface GenericPaginatedGridProps<TData extends object> {
|
|
|
42
48
|
* Accepts any valid CSS colour string.
|
|
43
49
|
*/
|
|
44
50
|
headerBgColor?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Maximum number of filter chips that can be visible at once.
|
|
53
|
+
* Prevents the filter bar from wrapping to a second row on typical screens.
|
|
54
|
+
* Default: 4.
|
|
55
|
+
*/
|
|
56
|
+
maxVisibleFilters?: number;
|
|
45
57
|
}
|
|
46
|
-
declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, tableHeight, pageSizeOptions, headerBgColor, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, tableHeight, pageSizeOptions, headerBgColor, maxVisibleFilters, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
47
59
|
export default GenericPaginatedGrid;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, useMemo } from 'react';
|
|
2
|
+
import { useState, useRef, useLayoutEffect, useMemo } from 'react';
|
|
3
3
|
import { useMaterialReactTable, MaterialReactTable } from 'material-react-table';
|
|
4
4
|
import { useQuery, keepPreviousData } from '@tanstack/react-query';
|
|
5
5
|
import { Box, Tooltip, IconButton, Button, GlobalStyles, Typography, Select, MenuItem, CircularProgress } from '@mui/material';
|
|
@@ -43,7 +43,7 @@ const PaginationFooter = ({ pageIndex, pageSize, totalRecords, isFetching, isLoa
|
|
|
43
43
|
}, children: pageIndex + 1 }), jsx(Tooltip, { title: "Next page", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: onNext, disabled: !canNext, children: jsx(ChevronRightIcon, { sx: { fontSize: 20 } }) }) }) }), jsx(Tooltip, { title: "Last page", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: onLast, disabled: !canNext, children: jsx(LastPageIcon, { sx: { fontSize: 20 } }) }) }) })] })] }));
|
|
44
44
|
};
|
|
45
45
|
// ─── GenericPaginatedGrid ─────────────────────────────────────────────────────
|
|
46
|
-
function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', tableHeight
|
|
46
|
+
function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', tableHeight, pageSizeOptions = [1000, 5000, 10000], headerBgColor, maxVisibleFilters = 4, }) {
|
|
47
47
|
const defaultVisible = defaultVisibleFilterIds
|
|
48
48
|
?? (serverFilterDefs.length > 0 ? [serverFilterDefs[0].id] : []);
|
|
49
49
|
// ── State ──────────────────────────────────────────────────────────────────
|
|
@@ -57,6 +57,35 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
57
57
|
const [columnFilters, setColumnFilters] = useState([]);
|
|
58
58
|
const [globalFilter, setGlobalFilter] = useState('');
|
|
59
59
|
const [columnPinning, setColumnPinning] = useState({});
|
|
60
|
+
// ── Viewport-fill: measure this component's top offset and derive height ──────
|
|
61
|
+
//
|
|
62
|
+
// When tableHeight is not provided, we measure how far the wrapper sits from
|
|
63
|
+
// the top of the viewport and set height = 100vh − topOffset − 8px (tiny
|
|
64
|
+
// bottom margin). A ResizeObserver on <html> keeps the value in sync if the
|
|
65
|
+
// layout shifts (sidebar collapses, font loads, etc.).
|
|
66
|
+
//
|
|
67
|
+
// The MRT Paper + TableContainer flex chain distributes that height between
|
|
68
|
+
// the toolbar, sticky column headers, scrollable rows, and pagination footer —
|
|
69
|
+
// so the grid fills the window exactly and the page never needs to scroll.
|
|
70
|
+
const containerRef = useRef(null);
|
|
71
|
+
const [autoHeight, setAutoHeight] = useState('');
|
|
72
|
+
useLayoutEffect(() => {
|
|
73
|
+
if (tableHeight)
|
|
74
|
+
return; // explicit prop — skip auto calculation
|
|
75
|
+
const el = containerRef.current;
|
|
76
|
+
if (!el)
|
|
77
|
+
return;
|
|
78
|
+
const update = () => {
|
|
79
|
+
const top = el.getBoundingClientRect().top;
|
|
80
|
+
setAutoHeight(`calc(100vh - ${Math.ceil(top) + 8}px)`);
|
|
81
|
+
};
|
|
82
|
+
update();
|
|
83
|
+
const ro = new ResizeObserver(update);
|
|
84
|
+
ro.observe(document.documentElement);
|
|
85
|
+
return () => ro.disconnect();
|
|
86
|
+
}, [tableHeight]);
|
|
87
|
+
// Resolved height: explicit prop › auto-calculated › safe fallback
|
|
88
|
+
const resolvedHeight = tableHeight || autoHeight || '60vh';
|
|
60
89
|
// ── Data fetching ──────────────────────────────────────────────────────────
|
|
61
90
|
const { data, isLoading, isError, isFetching, refetch } = useQuery({
|
|
62
91
|
queryKey: [...queryKey, filterValues, pagination.pageIndex],
|
|
@@ -125,7 +154,13 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
125
154
|
setFilterValues(newValues);
|
|
126
155
|
setPagination((p) => ({ ...p, pageIndex: 0 }));
|
|
127
156
|
};
|
|
128
|
-
const handleToggleFilter = (id) => setVisibleFilterIds((prev) =>
|
|
157
|
+
const handleToggleFilter = (id) => setVisibleFilterIds((prev) => {
|
|
158
|
+
if (prev.includes(id))
|
|
159
|
+
return prev.filter((v) => v !== id); // always allow remove
|
|
160
|
+
if (prev.length >= maxVisibleFilters)
|
|
161
|
+
return prev; // cap reached — ignore add
|
|
162
|
+
return [...prev, id];
|
|
163
|
+
});
|
|
129
164
|
const handleClearAll = () => {
|
|
130
165
|
setFilterValues(defaultFilters);
|
|
131
166
|
setColumnFilters([]);
|
|
@@ -190,7 +225,24 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
190
225
|
enableHiding: true,
|
|
191
226
|
enableStickyHeader: true,
|
|
192
227
|
enableRowVirtualization: true,
|
|
193
|
-
|
|
228
|
+
// The container fills whatever height is left after the top toolbar and
|
|
229
|
+
// pagination footer. min-height: 0 is required so the flex child can
|
|
230
|
+
// shrink below its natural content height and scroll its rows instead.
|
|
231
|
+
muiTableContainerProps: {
|
|
232
|
+
sx: {
|
|
233
|
+
flex: '1 1 0',
|
|
234
|
+
minHeight: 0,
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
// Paper fills the wrapper Box height and acts as the flex column host for
|
|
238
|
+
// toolbar → table-container → pagination.
|
|
239
|
+
muiTablePaperProps: {
|
|
240
|
+
sx: {
|
|
241
|
+
height: '100%',
|
|
242
|
+
display: 'flex',
|
|
243
|
+
flexDirection: 'column',
|
|
244
|
+
},
|
|
245
|
+
},
|
|
194
246
|
muiTopToolbarProps: {
|
|
195
247
|
sx: {
|
|
196
248
|
alignItems: 'center',
|
|
@@ -213,8 +265,8 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
213
265
|
whiteSpace: 'normal',
|
|
214
266
|
borderRight: '1px solid rgba(224,224,224,1)',
|
|
215
267
|
borderBottom: '2px solid rgba(0,0,0,0.15)',
|
|
216
|
-
'& button[aria-label="Move"]': { display: 'none' },
|
|
217
|
-
'& .MuiTableSortLabel-icon': { display: 'none' },
|
|
268
|
+
'& button[aria-label="Move"]': { display: 'none !important' },
|
|
269
|
+
'& .MuiTableSortLabel-icon': { display: 'none !important' },
|
|
218
270
|
'& .Mui-TableHeadCell-ResizeHandle-Wrapper': {
|
|
219
271
|
height: '100%',
|
|
220
272
|
top: 0,
|
|
@@ -249,7 +301,7 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
249
301
|
muiToolbarAlertBannerProps: isError
|
|
250
302
|
? { color: 'error', children: 'Failed to load data. Please try again.' }
|
|
251
303
|
: undefined,
|
|
252
|
-
renderTopToolbarCustomActions: () => (jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flex: 1, minWidth: 0, pr: 1, gap: 0.5 }, children: [jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flexShrink: 0, gap: 0.25 }, children: [jsx(Tooltip, { title: "Refresh current batch", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: () => refetch(), disabled: isFetching, children: jsx(RefreshIcon, { fontSize: "small" }) }) }) }), jsx(Tooltip, { title: "Export batch as CSV", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: handleExport, disabled: rows.length === 0 || isFetching, children: jsx(FileDownloadIcon, { fontSize: "small" }) }) }) })] }), jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: jsx(DynamicFilterBar, { serverFilterDefs: serverFilterDefs, visibleFilterIds: visibleFilterIds, onToggleFilter: handleToggleFilter, filterValues: filterValues, onFilterValuesChange: handleFilterValuesChange, columnFilters: columnFilters, onColumnFilterChange: setColumnFilters, availableColumns: availableColumns }) }), hasAnyValue && (jsx(Button, { size: "small", onClick: handleClearAll, sx: {
|
|
304
|
+
renderTopToolbarCustomActions: () => (jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flex: 1, minWidth: 0, pr: 1, gap: 0.5 }, children: [jsxs(Box, { sx: { display: 'flex', alignItems: 'center', flexShrink: 0, gap: 0.25 }, children: [jsx(Tooltip, { title: "Refresh current batch", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: () => refetch(), disabled: isFetching, children: jsx(RefreshIcon, { fontSize: "small" }) }) }) }), jsx(Tooltip, { title: "Export batch as CSV", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: handleExport, disabled: rows.length === 0 || isFetching, children: jsx(FileDownloadIcon, { fontSize: "small" }) }) }) })] }), jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: jsx(DynamicFilterBar, { serverFilterDefs: serverFilterDefs, visibleFilterIds: visibleFilterIds, onToggleFilter: handleToggleFilter, filterValues: filterValues, onFilterValuesChange: handleFilterValuesChange, columnFilters: columnFilters, onColumnFilterChange: setColumnFilters, availableColumns: availableColumns, maxVisibleFilters: maxVisibleFilters }) }), hasAnyValue && (jsx(Button, { size: "small", onClick: handleClearAll, sx: {
|
|
253
305
|
flexShrink: 0,
|
|
254
306
|
textTransform: 'none',
|
|
255
307
|
fontSize: 12,
|
|
@@ -260,7 +312,16 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
260
312
|
}, children: "Clear All" }))] })),
|
|
261
313
|
renderBottomToolbar: ({ table: t }) => (jsx(PaginationFooter, { pageIndex: t.getState().pagination.pageIndex, pageSize: t.getState().pagination.pageSize, totalRecords: totalRecords, isFetching: isFetching, isLoading: isLoading, canPrev: t.getCanPreviousPage() && !isFetching, canNext: t.getCanNextPage() && !isFetching, onFirst: () => t.firstPage(), onPrev: () => t.previousPage(), onNext: () => t.nextPage(), onLast: () => t.lastPage(), onPageSizeChange: (s) => t.setPageSize(s), pageSizeOptions: pageSizeOptions })),
|
|
262
314
|
});
|
|
263
|
-
return (jsxs(Box, {
|
|
315
|
+
return (jsxs(Box, { ref: containerRef, className: "tp-gpg-root", sx: {
|
|
316
|
+
position: 'relative',
|
|
317
|
+
height: resolvedHeight,
|
|
318
|
+
display: 'flex',
|
|
319
|
+
flexDirection: 'column',
|
|
320
|
+
}, children: [jsx(GlobalStyles, { styles: {
|
|
321
|
+
'button[aria-label="Pin to right"]': { display: 'none' },
|
|
322
|
+
'.tp-gpg-root .MuiTableSortLabel-icon': { display: 'none !important' },
|
|
323
|
+
'.tp-gpg-root button[aria-label="Move"]': { display: 'none !important' },
|
|
324
|
+
} }), isLoading && jsx(OverlayLoader, { message: "Loading data\u2026" }), !isLoading && isFetching && jsx(OverlayLoader, { message: "Updating data\u2026" }), jsx(MaterialReactTable, { table: table })] }));
|
|
264
325
|
}
|
|
265
326
|
|
|
266
327
|
export { GenericPaginatedGrid as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __module as propTypes } from '../../_virtual/index.
|
|
1
|
+
import { __module as propTypes } from '../../_virtual/index.esm10.js';
|
|
2
2
|
import { __require as requireReactIs } from './node_modules/react-is/index.esm.js';
|
|
3
3
|
import { __require as requireFactoryWithTypeCheckers } from './factoryWithTypeCheckers.esm.js';
|
|
4
4
|
import { __require as requireFactoryWithThrowingShims } from './factoryWithThrowingShims.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as accessibility } from '../../../../_virtual/index.
|
|
1
|
+
import { __exports as accessibility } from '../../../../_virtual/index.esm9.js';
|
|
2
2
|
import { __require as requirePropTypes } from '../../../prop-types/index.esm.js';
|
|
3
3
|
|
|
4
4
|
var hasRequiredAccessibility;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as Calendar } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as Calendar } 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 requireDayCell } from '../DayCell/index.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as DateInput } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as DateInput } 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
|
import { __require as requireClassnames } from '../../../../classnames/index.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as DateRange } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as DateRange } 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 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.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 requireDateRange } from '../DateRange/index.esm.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as Month } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as Month } from '../../../../../_virtual/index.esm13.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';
|
|
@@ -26,122 +26,122 @@ import { useEffect } from 'react';
|
|
|
26
26
|
const STYLE_ID = 'tp-rdr-styles';
|
|
27
27
|
/* ─── Combined CSS from react-date-range ──────────────────────────────────── */
|
|
28
28
|
/* Source: react-date-range/dist/styles.css + theme/default.css v2.0.1 */
|
|
29
|
-
const RDR_CSS = `
|
|
30
|
-
/* ── react-date-range/dist/styles.css ── */
|
|
31
|
-
.rdrCalendarWrapper{box-sizing:border-box;background:#ffffff;display:inline-flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;user-select:none}
|
|
32
|
-
.rdrDateDisplay{display:flex;justify-content:space-between}
|
|
33
|
-
.rdrDateDisplayItem{flex:1 1;width:0;text-align:center;color:inherit}
|
|
34
|
-
.rdrDateDisplayItem+.rdrDateDisplayItem{margin-left:.833em}
|
|
35
|
-
.rdrDateDisplayItem input{text-align:inherit}
|
|
36
|
-
.rdrDateDisplayItem input:disabled{cursor:default}
|
|
37
|
-
.rdrDateDisplayItemActive{}
|
|
38
|
-
.rdrMonthAndYearWrapper{box-sizing:inherit;display:flex;justify-content:space-between}
|
|
39
|
-
.rdrMonthAndYearPickers{flex:1 1 auto;display:flex;justify-content:center;align-items:center}
|
|
40
|
-
.rdrMonthPicker{}
|
|
41
|
-
.rdrYearPicker{}
|
|
42
|
-
.rdrNextPrevButton{box-sizing:inherit;cursor:pointer;outline:none}
|
|
43
|
-
.rdrPprevButton{}
|
|
44
|
-
.rdrNextButton{}
|
|
45
|
-
.rdrMonths{display:flex}
|
|
46
|
-
.rdrMonthsVertical{flex-direction:column}
|
|
47
|
-
.rdrMonthsHorizontal>div>div>div{display:flex;flex-direction:row}
|
|
48
|
-
.rdrMonth{width:27.667em}
|
|
49
|
-
.rdrWeekDays{display:flex}
|
|
50
|
-
.rdrWeekDay{flex-basis:calc(100% / 7);box-sizing:inherit;text-align:center}
|
|
51
|
-
.rdrDays{display:flex;flex-wrap:wrap}
|
|
52
|
-
.rdrDateDisplayWrapper{}
|
|
53
|
-
.rdrMonthName{}
|
|
54
|
-
.rdrInfiniteMonths{overflow:auto}
|
|
55
|
-
.rdrDateRangeWrapper{-webkit-user-select:none;-moz-user-select:none;user-select:none}
|
|
56
|
-
.rdrDateInput{position:relative}
|
|
57
|
-
.rdrDateInput input{outline:none}
|
|
58
|
-
.rdrDateInput .rdrWarning{position:absolute;font-size:1.6em;line-height:1.6em;top:0;right:.25em;color:#FF0000}
|
|
59
|
-
.rdrDay{box-sizing:inherit;width:calc(100% / 7);position:relative;font:inherit;cursor:pointer}
|
|
60
|
-
.rdrDayNumber{display:block;position:relative}
|
|
61
|
-
.rdrDayNumber span{color:#1d2429}
|
|
62
|
-
.rdrDayDisabled{cursor:not-allowed}
|
|
63
|
-
@supports (-ms-ime-align:auto){.rdrDay{flex-basis:14.285% !important}}
|
|
64
|
-
.rdrSelected,.rdrInRange,.rdrStartEdge,.rdrEndEdge{pointer-events:none}
|
|
65
|
-
.rdrInRange{}
|
|
66
|
-
.rdrDayStartPreview,.rdrDayInPreview,.rdrDayEndPreview{pointer-events:none}
|
|
67
|
-
.rdrDayHovered{}
|
|
68
|
-
.rdrDayActive{}
|
|
69
|
-
.rdrDateRangePickerWrapper{display:inline-flex;-webkit-user-select:none;-moz-user-select:none;user-select:none}
|
|
70
|
-
.rdrDefinedRangesWrapper{}
|
|
71
|
-
.rdrStaticRanges{display:flex;flex-direction:column}
|
|
72
|
-
.rdrStaticRange{font-size:inherit}
|
|
73
|
-
.rdrStaticRangeLabel{}
|
|
74
|
-
.rdrInputRanges{}
|
|
75
|
-
.rdrInputRange{display:flex}
|
|
76
|
-
.rdrInputRangeInput{}
|
|
77
|
-
|
|
78
|
-
/* ── react-date-range/dist/theme/default.css ── */
|
|
79
|
-
.rdrCalendarWrapper{color:#000000;font-size:12px}
|
|
80
|
-
.rdrDateDisplayWrapper{background-color:rgb(239,242,247)}
|
|
81
|
-
.rdrDateDisplay{margin:.833em}
|
|
82
|
-
.rdrDateDisplayItem{border-radius:4px;background-color:rgb(255,255,255);box-shadow:0 1px 2px 0 rgba(35,57,66,.21);border:1px solid transparent}
|
|
83
|
-
.rdrDateDisplayItem input{cursor:pointer;height:2.5em;line-height:2.5em;border:0;background:transparent;width:100%;color:#849095}
|
|
84
|
-
.rdrDateDisplayItemActive{border-color:currentColor}
|
|
85
|
-
.rdrDateDisplayItemActive input{color:#7d888d}
|
|
86
|
-
.rdrMonthAndYearWrapper{align-items:center;height:60px;padding-top:10px}
|
|
87
|
-
.rdrMonthAndYearPickers{font-weight:600}
|
|
88
|
-
.rdrMonthAndYearPickers select{-moz-appearance:none;appearance:none;-webkit-appearance:none;border:0;background:transparent;padding:10px 30px 10px 10px;border-radius:4px;outline:0;color:#3e484f;background:url("data:image/svg+xml;utf8,<svg width='9px' height='6px' viewBox='0 0 9 6' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><g id='Artboard' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' transform='translate(-636.000000, -171.000000)' fill-opacity='0.368716033'><g id='input' transform='translate(172.000000, 37.000000)' fill='%230E242F' fill-rule='nonzero'><g id='Group-9' transform='translate(323.000000, 127.000000)'><path d='M142.280245,7.23952813 C141.987305,6.92353472 141.512432,6.92361662 141.219585,7.23971106 C140.926739,7.5558055 140.926815,8.06821394 141.219755,8.38420735 L145.498801,13 L149.780245,8.38162071 C150.073185,8.0656273 150.073261,7.55321886 149.780415,7.23712442 C149.487568,6.92102998 149.012695,6.92094808 148.719755,7.23694149 L145.498801,10.7113732 L142.280245,7.23952813 Z' id='arrow'></path></g></g></g></svg>") no-repeat;background-position:right 8px center;cursor:pointer;text-align:center}
|
|
89
|
-
.rdrMonthAndYearPickers select:hover{background-color:rgba(0,0,0,.07)}
|
|
90
|
-
.rdrMonthPicker,.rdrYearPicker{margin:0 5px}
|
|
91
|
-
.rdrNextPrevButton{display:block;width:24px;height:24px;margin:0 .833em;padding:0;border:0;border-radius:5px;background:#EFF2F7}
|
|
92
|
-
.rdrNextPrevButton:hover{background:#E1E7F0}
|
|
93
|
-
.rdrNextPrevButton i{display:block;width:0;height:0;padding:0;text-align:center;border-style:solid;margin:auto;transform:translate(-3px,0)}
|
|
94
|
-
.rdrPprevButton i{border-width:4px 6px 4px 4px;border-color:transparent rgb(52,73,94) transparent transparent;transform:translate(-3px,0)}
|
|
95
|
-
.rdrNextButton i{margin:0 0 0 7px;border-width:4px 4px 4px 6px;border-color:transparent transparent transparent rgb(52,73,94);transform:translate(3px,0)}
|
|
96
|
-
.rdrWeekDays{padding:0 .833em}
|
|
97
|
-
.rdrMonth{padding:0 .833em 1.666em .833em}
|
|
98
|
-
.rdrMonth .rdrWeekDays{padding:0}
|
|
99
|
-
.rdrMonths.rdrMonthsVertical .rdrMonth:first-child .rdrMonthName{display:none}
|
|
100
|
-
.rdrWeekDay{font-weight:400;line-height:2.667em;color:rgb(132,144,149)}
|
|
101
|
-
.rdrDay{background:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:0;padding:0;line-height:3em;height:3em;text-align:center;color:#1d2429}
|
|
102
|
-
.rdrDay:focus{outline:0}
|
|
103
|
-
.rdrDayNumber{outline:0;font-weight:300;position:absolute;left:0;right:0;top:5px;bottom:5px;display:flex;align-items:center;justify-content:center}
|
|
104
|
-
.rdrDayToday .rdrDayNumber span{font-weight:500}
|
|
105
|
-
.rdrDayToday .rdrDayNumber span:after{content:'';position:absolute;bottom:4px;left:50%;transform:translate(-50%,0);width:18px;height:2px;border-radius:2px;background:#3d91ff}
|
|
106
|
-
.rdrDayToday:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span:after{background:#fff}
|
|
107
|
-
.rdrDay:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span{color:rgba(255,255,255,.85)}
|
|
108
|
-
.rdrSelected,.rdrInRange,.rdrStartEdge,.rdrEndEdge{background:currentColor;position:absolute;top:5px;left:0;right:0;bottom:5px}
|
|
109
|
-
.rdrSelected{left:2px;right:2px}
|
|
110
|
-
.rdrInRange{}
|
|
111
|
-
.rdrStartEdge{border-top-left-radius:1.042em;border-bottom-left-radius:1.042em;left:2px}
|
|
112
|
-
.rdrEndEdge{border-top-right-radius:1.042em;border-bottom-right-radius:1.042em;right:2px}
|
|
113
|
-
.rdrSelected{border-radius:1.042em}
|
|
114
|
-
.rdrDayStartOfMonth .rdrInRange,.rdrDayStartOfMonth .rdrEndEdge,.rdrDayStartOfWeek .rdrInRange,.rdrDayStartOfWeek .rdrEndEdge{border-top-left-radius:1.042em;border-bottom-left-radius:1.042em;left:2px}
|
|
115
|
-
.rdrDayEndOfMonth .rdrInRange,.rdrDayEndOfMonth .rdrStartEdge,.rdrDayEndOfWeek .rdrInRange,.rdrDayEndOfWeek .rdrStartEdge{border-top-right-radius:1.042em;border-bottom-right-radius:1.042em;right:2px}
|
|
116
|
-
.rdrDayStartOfMonth .rdrDayInPreview,.rdrDayStartOfMonth .rdrDayEndPreview,.rdrDayStartOfWeek .rdrDayInPreview,.rdrDayStartOfWeek .rdrDayEndPreview{border-top-left-radius:1.333em;border-bottom-left-radius:1.333em;border-left-width:1px;left:0}
|
|
117
|
-
.rdrDayEndOfMonth .rdrDayInPreview,.rdrDayEndOfMonth .rdrDayStartPreview,.rdrDayEndOfWeek .rdrDayInPreview,.rdrDayEndOfWeek .rdrDayStartPreview{border-top-right-radius:1.333em;border-bottom-right-radius:1.333em;border-right-width:1px;right:0}
|
|
118
|
-
.rdrDayStartPreview,.rdrDayInPreview,.rdrDayEndPreview{background:rgba(255,255,255,.09);position:absolute;top:3px;left:0;right:0;bottom:3px;pointer-events:none;border:0 solid currentColor;z-index:1}
|
|
119
|
-
.rdrDayStartPreview{border-top-width:1px;border-left-width:1px;border-bottom-width:1px;border-top-left-radius:1.333em;border-bottom-left-radius:1.333em;left:0}
|
|
120
|
-
.rdrDayInPreview{border-top-width:1px;border-bottom-width:1px}
|
|
121
|
-
.rdrDayEndPreview{border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-top-right-radius:1.333em;border-bottom-right-radius:1.333em;right:0}
|
|
122
|
-
.rdrDefinedRangesWrapper{font-size:12px;width:226px;border-right:solid 1px #eff2f7;background:#fff}
|
|
123
|
-
.rdrDefinedRangesWrapper .rdrStaticRangeSelected{color:currentColor;font-weight:600}
|
|
124
|
-
.rdrStaticRange{border:0;cursor:pointer;display:block;outline:0;border-bottom:1px solid #eff2f7;padding:0;background:#fff}
|
|
125
|
-
.rdrStaticRange:hover .rdrStaticRangeLabel,.rdrStaticRange:focus .rdrStaticRangeLabel{background:#eff2f7}
|
|
126
|
-
.rdrStaticRangeLabel{display:block;outline:0;line-height:18px;padding:10px 20px;text-align:left}
|
|
127
|
-
.rdrInputRanges{padding:10px 0}
|
|
128
|
-
.rdrInputRange{align-items:center;padding:5px 20px}
|
|
129
|
-
.rdrInputRangeInput{width:30px;height:30px;line-height:30px;border-radius:4px;text-align:center;border:solid 1px rgb(222,231,235);margin-right:10px;color:rgb(108,118,122)}
|
|
130
|
-
.rdrInputRangeInput:focus,.rdrInputRangeInput:hover{border-color:rgb(180,191,196);outline:0;color:#333}
|
|
131
|
-
.rdrCalendarWrapper:not(.rdrDateRangeWrapper) .rdrDayHovered .rdrDayNumber:after{content:'';border:1px solid currentColor;border-radius:1.333em;position:absolute;top:-2px;bottom:-2px;left:0;right:0;background:transparent}
|
|
132
|
-
.rdrDayPassive{pointer-events:none}
|
|
133
|
-
.rdrDayPassive .rdrDayNumber span{color:#d5dce0}
|
|
134
|
-
.rdrDayPassive .rdrInRange,.rdrDayPassive .rdrStartEdge,.rdrDayPassive .rdrEndEdge,.rdrDayPassive .rdrSelected,.rdrDayPassive .rdrDayStartPreview,.rdrDayPassive .rdrDayInPreview,.rdrDayPassive .rdrDayEndPreview{display:none}
|
|
135
|
-
.rdrDayDisabled{background-color:rgb(248,248,248)}
|
|
136
|
-
.rdrDayDisabled .rdrDayNumber span{color:#aeb9bf}
|
|
137
|
-
.rdrDayDisabled .rdrInRange,.rdrDayDisabled .rdrStartEdge,.rdrDayDisabled .rdrEndEdge,.rdrDayDisabled .rdrSelected,.rdrDayDisabled .rdrDayStartPreview,.rdrDayDisabled .rdrDayInPreview,.rdrDayDisabled .rdrDayEndPreview{filter:grayscale(100%) opacity(60%)}
|
|
138
|
-
.rdrMonthName{text-align:left;font-weight:600;color:#849095;padding:.833em}
|
|
139
|
-
|
|
140
|
-
/* ── DateRangePicker.scss override (compiled) ── */
|
|
141
|
-
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span,
|
|
142
|
-
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span,
|
|
143
|
-
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span,
|
|
144
|
-
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span{color:#fff !important}
|
|
29
|
+
const RDR_CSS = `
|
|
30
|
+
/* ── react-date-range/dist/styles.css ── */
|
|
31
|
+
.rdrCalendarWrapper{box-sizing:border-box;background:#ffffff;display:inline-flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;user-select:none}
|
|
32
|
+
.rdrDateDisplay{display:flex;justify-content:space-between}
|
|
33
|
+
.rdrDateDisplayItem{flex:1 1;width:0;text-align:center;color:inherit}
|
|
34
|
+
.rdrDateDisplayItem+.rdrDateDisplayItem{margin-left:.833em}
|
|
35
|
+
.rdrDateDisplayItem input{text-align:inherit}
|
|
36
|
+
.rdrDateDisplayItem input:disabled{cursor:default}
|
|
37
|
+
.rdrDateDisplayItemActive{}
|
|
38
|
+
.rdrMonthAndYearWrapper{box-sizing:inherit;display:flex;justify-content:space-between}
|
|
39
|
+
.rdrMonthAndYearPickers{flex:1 1 auto;display:flex;justify-content:center;align-items:center}
|
|
40
|
+
.rdrMonthPicker{}
|
|
41
|
+
.rdrYearPicker{}
|
|
42
|
+
.rdrNextPrevButton{box-sizing:inherit;cursor:pointer;outline:none}
|
|
43
|
+
.rdrPprevButton{}
|
|
44
|
+
.rdrNextButton{}
|
|
45
|
+
.rdrMonths{display:flex}
|
|
46
|
+
.rdrMonthsVertical{flex-direction:column}
|
|
47
|
+
.rdrMonthsHorizontal>div>div>div{display:flex;flex-direction:row}
|
|
48
|
+
.rdrMonth{width:27.667em}
|
|
49
|
+
.rdrWeekDays{display:flex}
|
|
50
|
+
.rdrWeekDay{flex-basis:calc(100% / 7);box-sizing:inherit;text-align:center}
|
|
51
|
+
.rdrDays{display:flex;flex-wrap:wrap}
|
|
52
|
+
.rdrDateDisplayWrapper{}
|
|
53
|
+
.rdrMonthName{}
|
|
54
|
+
.rdrInfiniteMonths{overflow:auto}
|
|
55
|
+
.rdrDateRangeWrapper{-webkit-user-select:none;-moz-user-select:none;user-select:none}
|
|
56
|
+
.rdrDateInput{position:relative}
|
|
57
|
+
.rdrDateInput input{outline:none}
|
|
58
|
+
.rdrDateInput .rdrWarning{position:absolute;font-size:1.6em;line-height:1.6em;top:0;right:.25em;color:#FF0000}
|
|
59
|
+
.rdrDay{box-sizing:inherit;width:calc(100% / 7);position:relative;font:inherit;cursor:pointer}
|
|
60
|
+
.rdrDayNumber{display:block;position:relative}
|
|
61
|
+
.rdrDayNumber span{color:#1d2429}
|
|
62
|
+
.rdrDayDisabled{cursor:not-allowed}
|
|
63
|
+
@supports (-ms-ime-align:auto){.rdrDay{flex-basis:14.285% !important}}
|
|
64
|
+
.rdrSelected,.rdrInRange,.rdrStartEdge,.rdrEndEdge{pointer-events:none}
|
|
65
|
+
.rdrInRange{}
|
|
66
|
+
.rdrDayStartPreview,.rdrDayInPreview,.rdrDayEndPreview{pointer-events:none}
|
|
67
|
+
.rdrDayHovered{}
|
|
68
|
+
.rdrDayActive{}
|
|
69
|
+
.rdrDateRangePickerWrapper{display:inline-flex;-webkit-user-select:none;-moz-user-select:none;user-select:none}
|
|
70
|
+
.rdrDefinedRangesWrapper{}
|
|
71
|
+
.rdrStaticRanges{display:flex;flex-direction:column}
|
|
72
|
+
.rdrStaticRange{font-size:inherit}
|
|
73
|
+
.rdrStaticRangeLabel{}
|
|
74
|
+
.rdrInputRanges{}
|
|
75
|
+
.rdrInputRange{display:flex}
|
|
76
|
+
.rdrInputRangeInput{}
|
|
77
|
+
|
|
78
|
+
/* ── react-date-range/dist/theme/default.css ── */
|
|
79
|
+
.rdrCalendarWrapper{color:#000000;font-size:12px}
|
|
80
|
+
.rdrDateDisplayWrapper{background-color:rgb(239,242,247)}
|
|
81
|
+
.rdrDateDisplay{margin:.833em}
|
|
82
|
+
.rdrDateDisplayItem{border-radius:4px;background-color:rgb(255,255,255);box-shadow:0 1px 2px 0 rgba(35,57,66,.21);border:1px solid transparent}
|
|
83
|
+
.rdrDateDisplayItem input{cursor:pointer;height:2.5em;line-height:2.5em;border:0;background:transparent;width:100%;color:#849095}
|
|
84
|
+
.rdrDateDisplayItemActive{border-color:currentColor}
|
|
85
|
+
.rdrDateDisplayItemActive input{color:#7d888d}
|
|
86
|
+
.rdrMonthAndYearWrapper{align-items:center;height:60px;padding-top:10px}
|
|
87
|
+
.rdrMonthAndYearPickers{font-weight:600}
|
|
88
|
+
.rdrMonthAndYearPickers select{-moz-appearance:none;appearance:none;-webkit-appearance:none;border:0;background:transparent;padding:10px 30px 10px 10px;border-radius:4px;outline:0;color:#3e484f;background:url("data:image/svg+xml;utf8,<svg width='9px' height='6px' viewBox='0 0 9 6' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><g id='Artboard' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' transform='translate(-636.000000, -171.000000)' fill-opacity='0.368716033'><g id='input' transform='translate(172.000000, 37.000000)' fill='%230E242F' fill-rule='nonzero'><g id='Group-9' transform='translate(323.000000, 127.000000)'><path d='M142.280245,7.23952813 C141.987305,6.92353472 141.512432,6.92361662 141.219585,7.23971106 C140.926739,7.5558055 140.926815,8.06821394 141.219755,8.38420735 L145.498801,13 L149.780245,8.38162071 C150.073185,8.0656273 150.073261,7.55321886 149.780415,7.23712442 C149.487568,6.92102998 149.012695,6.92094808 148.719755,7.23694149 L145.498801,10.7113732 L142.280245,7.23952813 Z' id='arrow'></path></g></g></g></svg>") no-repeat;background-position:right 8px center;cursor:pointer;text-align:center}
|
|
89
|
+
.rdrMonthAndYearPickers select:hover{background-color:rgba(0,0,0,.07)}
|
|
90
|
+
.rdrMonthPicker,.rdrYearPicker{margin:0 5px}
|
|
91
|
+
.rdrNextPrevButton{display:block;width:24px;height:24px;margin:0 .833em;padding:0;border:0;border-radius:5px;background:#EFF2F7}
|
|
92
|
+
.rdrNextPrevButton:hover{background:#E1E7F0}
|
|
93
|
+
.rdrNextPrevButton i{display:block;width:0;height:0;padding:0;text-align:center;border-style:solid;margin:auto;transform:translate(-3px,0)}
|
|
94
|
+
.rdrPprevButton i{border-width:4px 6px 4px 4px;border-color:transparent rgb(52,73,94) transparent transparent;transform:translate(-3px,0)}
|
|
95
|
+
.rdrNextButton i{margin:0 0 0 7px;border-width:4px 4px 4px 6px;border-color:transparent transparent transparent rgb(52,73,94);transform:translate(3px,0)}
|
|
96
|
+
.rdrWeekDays{padding:0 .833em}
|
|
97
|
+
.rdrMonth{padding:0 .833em 1.666em .833em}
|
|
98
|
+
.rdrMonth .rdrWeekDays{padding:0}
|
|
99
|
+
.rdrMonths.rdrMonthsVertical .rdrMonth:first-child .rdrMonthName{display:none}
|
|
100
|
+
.rdrWeekDay{font-weight:400;line-height:2.667em;color:rgb(132,144,149)}
|
|
101
|
+
.rdrDay{background:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:0;padding:0;line-height:3em;height:3em;text-align:center;color:#1d2429}
|
|
102
|
+
.rdrDay:focus{outline:0}
|
|
103
|
+
.rdrDayNumber{outline:0;font-weight:300;position:absolute;left:0;right:0;top:5px;bottom:5px;display:flex;align-items:center;justify-content:center}
|
|
104
|
+
.rdrDayToday .rdrDayNumber span{font-weight:500}
|
|
105
|
+
.rdrDayToday .rdrDayNumber span:after{content:'';position:absolute;bottom:4px;left:50%;transform:translate(-50%,0);width:18px;height:2px;border-radius:2px;background:#3d91ff}
|
|
106
|
+
.rdrDayToday:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span:after{background:#fff}
|
|
107
|
+
.rdrDay:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span{color:rgba(255,255,255,.85)}
|
|
108
|
+
.rdrSelected,.rdrInRange,.rdrStartEdge,.rdrEndEdge{background:currentColor;position:absolute;top:5px;left:0;right:0;bottom:5px}
|
|
109
|
+
.rdrSelected{left:2px;right:2px}
|
|
110
|
+
.rdrInRange{}
|
|
111
|
+
.rdrStartEdge{border-top-left-radius:1.042em;border-bottom-left-radius:1.042em;left:2px}
|
|
112
|
+
.rdrEndEdge{border-top-right-radius:1.042em;border-bottom-right-radius:1.042em;right:2px}
|
|
113
|
+
.rdrSelected{border-radius:1.042em}
|
|
114
|
+
.rdrDayStartOfMonth .rdrInRange,.rdrDayStartOfMonth .rdrEndEdge,.rdrDayStartOfWeek .rdrInRange,.rdrDayStartOfWeek .rdrEndEdge{border-top-left-radius:1.042em;border-bottom-left-radius:1.042em;left:2px}
|
|
115
|
+
.rdrDayEndOfMonth .rdrInRange,.rdrDayEndOfMonth .rdrStartEdge,.rdrDayEndOfWeek .rdrInRange,.rdrDayEndOfWeek .rdrStartEdge{border-top-right-radius:1.042em;border-bottom-right-radius:1.042em;right:2px}
|
|
116
|
+
.rdrDayStartOfMonth .rdrDayInPreview,.rdrDayStartOfMonth .rdrDayEndPreview,.rdrDayStartOfWeek .rdrDayInPreview,.rdrDayStartOfWeek .rdrDayEndPreview{border-top-left-radius:1.333em;border-bottom-left-radius:1.333em;border-left-width:1px;left:0}
|
|
117
|
+
.rdrDayEndOfMonth .rdrDayInPreview,.rdrDayEndOfMonth .rdrDayStartPreview,.rdrDayEndOfWeek .rdrDayInPreview,.rdrDayEndOfWeek .rdrDayStartPreview{border-top-right-radius:1.333em;border-bottom-right-radius:1.333em;border-right-width:1px;right:0}
|
|
118
|
+
.rdrDayStartPreview,.rdrDayInPreview,.rdrDayEndPreview{background:rgba(255,255,255,.09);position:absolute;top:3px;left:0;right:0;bottom:3px;pointer-events:none;border:0 solid currentColor;z-index:1}
|
|
119
|
+
.rdrDayStartPreview{border-top-width:1px;border-left-width:1px;border-bottom-width:1px;border-top-left-radius:1.333em;border-bottom-left-radius:1.333em;left:0}
|
|
120
|
+
.rdrDayInPreview{border-top-width:1px;border-bottom-width:1px}
|
|
121
|
+
.rdrDayEndPreview{border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-top-right-radius:1.333em;border-bottom-right-radius:1.333em;right:0}
|
|
122
|
+
.rdrDefinedRangesWrapper{font-size:12px;width:226px;border-right:solid 1px #eff2f7;background:#fff}
|
|
123
|
+
.rdrDefinedRangesWrapper .rdrStaticRangeSelected{color:currentColor;font-weight:600}
|
|
124
|
+
.rdrStaticRange{border:0;cursor:pointer;display:block;outline:0;border-bottom:1px solid #eff2f7;padding:0;background:#fff}
|
|
125
|
+
.rdrStaticRange:hover .rdrStaticRangeLabel,.rdrStaticRange:focus .rdrStaticRangeLabel{background:#eff2f7}
|
|
126
|
+
.rdrStaticRangeLabel{display:block;outline:0;line-height:18px;padding:10px 20px;text-align:left}
|
|
127
|
+
.rdrInputRanges{padding:10px 0}
|
|
128
|
+
.rdrInputRange{align-items:center;padding:5px 20px}
|
|
129
|
+
.rdrInputRangeInput{width:30px;height:30px;line-height:30px;border-radius:4px;text-align:center;border:solid 1px rgb(222,231,235);margin-right:10px;color:rgb(108,118,122)}
|
|
130
|
+
.rdrInputRangeInput:focus,.rdrInputRangeInput:hover{border-color:rgb(180,191,196);outline:0;color:#333}
|
|
131
|
+
.rdrCalendarWrapper:not(.rdrDateRangeWrapper) .rdrDayHovered .rdrDayNumber:after{content:'';border:1px solid currentColor;border-radius:1.333em;position:absolute;top:-2px;bottom:-2px;left:0;right:0;background:transparent}
|
|
132
|
+
.rdrDayPassive{pointer-events:none}
|
|
133
|
+
.rdrDayPassive .rdrDayNumber span{color:#d5dce0}
|
|
134
|
+
.rdrDayPassive .rdrInRange,.rdrDayPassive .rdrStartEdge,.rdrDayPassive .rdrEndEdge,.rdrDayPassive .rdrSelected,.rdrDayPassive .rdrDayStartPreview,.rdrDayPassive .rdrDayInPreview,.rdrDayPassive .rdrDayEndPreview{display:none}
|
|
135
|
+
.rdrDayDisabled{background-color:rgb(248,248,248)}
|
|
136
|
+
.rdrDayDisabled .rdrDayNumber span{color:#aeb9bf}
|
|
137
|
+
.rdrDayDisabled .rdrInRange,.rdrDayDisabled .rdrStartEdge,.rdrDayDisabled .rdrEndEdge,.rdrDayDisabled .rdrSelected,.rdrDayDisabled .rdrDayStartPreview,.rdrDayDisabled .rdrDayInPreview,.rdrDayDisabled .rdrDayEndPreview{filter:grayscale(100%) opacity(60%)}
|
|
138
|
+
.rdrMonthName{text-align:left;font-weight:600;color:#849095;padding:.833em}
|
|
139
|
+
|
|
140
|
+
/* ── DateRangePicker.scss override (compiled) ── */
|
|
141
|
+
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span,
|
|
142
|
+
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span,
|
|
143
|
+
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span,
|
|
144
|
+
.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span{color:#fff !important}
|
|
145
145
|
`;
|
|
146
146
|
/* ─── Singleton injection ─────────────────────────────────────────────────── */
|
|
147
147
|
let _injected = false;
|
package/package.json
CHANGED
package/scripts/install-deps.js
CHANGED