tp-react-elements 1.3.2 → 1.3.3
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.esm12.js +2 -2
- package/dist/_virtual/index.esm13.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/DateRangePicker/DateRangePicker.d.ts +0 -3
- package/dist/components/DateRangePicker/DateRangePicker.esm.js +4 -0
- package/dist/components/Form/FormRender.esm.js +4 -0
- package/dist/components/FormComponents/Select/SearchableSelect.d.ts +6 -0
- package/dist/components/FormComponents/Select/SearchableSelect.esm.js +78 -0
- package/dist/components/FormComponents/index.d.ts +1 -0
- package/dist/components/FormComponents/index.esm.js +1 -0
- package/dist/components/PaginatedGrid/DynamicFilterBar.d.ts +33 -7
- package/dist/components/PaginatedGrid/DynamicFilterBar.esm.js +95 -40
- package/dist/components/PaginatedGrid/GenericPaginatedGrid.esm.js +22 -4
- package/dist/components/PaginatedGrid/columns.d.ts +19 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +1 -0
- 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/DefinedRange/index.esm.js +1 -1
- package/dist/node_modules/react-date-range/dist/components/Month/index.esm.js +1 -1
- package/dist/utils/Interface/FormInterface.d.ts +1 -1
- package/dist/utils/rdrStyles.d.ts +12 -0
- package/dist/utils/rdrStyles.esm.js +180 -0
- package/package.json +5 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/environmentManager.esm.js +0 -22
- package/dist/node_modules/@tanstack/query-core/build/modern/focusManager.esm.js +0 -65
- package/dist/node_modules/@tanstack/query-core/build/modern/notifyManager.esm.js +0 -83
- package/dist/node_modules/@tanstack/query-core/build/modern/onlineManager.esm.js +0 -55
- package/dist/node_modules/@tanstack/query-core/build/modern/query.esm.js +0 -16
- package/dist/node_modules/@tanstack/query-core/build/modern/queryObserver.esm.js +0 -463
- package/dist/node_modules/@tanstack/query-core/build/modern/retryer.esm.js +0 -8
- package/dist/node_modules/@tanstack/query-core/build/modern/subscribable.esm.js +0 -24
- package/dist/node_modules/@tanstack/query-core/build/modern/thenable.esm.js +0 -34
- package/dist/node_modules/@tanstack/query-core/build/modern/timeoutManager.esm.js +0 -66
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.esm.js +0 -115
- package/dist/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.esm.js +0 -7
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.esm.js +0 -15
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.esm.js +0 -21
- package/dist/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.esm.js +0 -27
- package/dist/node_modules/@tanstack/react-query/build/modern/suspense.esm.js +0 -22
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.esm.js +0 -94
- package/dist/node_modules/@tanstack/react-query/build/modern/useQuery.esm.js +0 -8
|
@@ -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 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,7 +1,4 @@
|
|
|
1
|
-
import 'react-date-range/dist/styles.css';
|
|
2
|
-
import 'react-date-range/dist/theme/default.css';
|
|
3
1
|
import { FormRenderProps, VariantProps } from '../../utils';
|
|
4
|
-
import './DateRangePicker.scss';
|
|
5
2
|
declare const DateRangePickerComponent: ({ item, control, watch, setValue, getValues, clearErrors, errors, register, variant, ...rest }: FormRenderProps & {
|
|
6
3
|
variant: VariantProps;
|
|
7
4
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -2,6 +2,7 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { Controller } from 'react-hook-form';
|
|
4
4
|
import { d as distExports } from '../../_virtual/index.esm.js';
|
|
5
|
+
import { useRdrStyles } from '../../utils/rdrStyles.esm.js';
|
|
5
6
|
import dayjs from 'dayjs';
|
|
6
7
|
import { renderLabel } from '../../utils/Constants/FormConstants.esm.js';
|
|
7
8
|
import FormBottomField from '../FormComponents/FormBottomField/FormBottomField.esm.js';
|
|
@@ -11,6 +12,9 @@ import { parse } from '../../node_modules/date-fns/parse.esm.js';
|
|
|
11
12
|
import { isValid } from '../../node_modules/date-fns/isValid.esm.js';
|
|
12
13
|
|
|
13
14
|
const DateRangePickerComponent = ({ item, control, watch, setValue, getValues, clearErrors, errors, register, variant, ...rest }) => {
|
|
15
|
+
// Inject react-date-range CSS via JS (not CSS import) to prevent it from being
|
|
16
|
+
// bundled into the library's extracted CSS file and leaking into consumer apps.
|
|
17
|
+
useRdrStyles();
|
|
14
18
|
// Using a generic type for anchorEl to avoid environment-specific linting issues.
|
|
15
19
|
// eslint-disable-next-line react/prop-types
|
|
16
20
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
@@ -11,6 +11,7 @@ import PasswordField from '../FormComponents/PasswordField/PasswordField.esm.js'
|
|
|
11
11
|
import SingleSelect from '../FormComponents/Select/SingleSelect.esm.js';
|
|
12
12
|
import MultiSelectAutocomplete from '../FormComponents/Select/MultiSelectAutocomplete.esm.js';
|
|
13
13
|
import SingleSelectNonAutoComplete from '../FormComponents/Select/SingleSelectNonAutoComplete.esm.js';
|
|
14
|
+
import SearchableSelect from '../FormComponents/Select/SearchableSelect.esm.js';
|
|
14
15
|
import FormActiveSwitch from './FormActiveSwitch.esm.js';
|
|
15
16
|
import FormTextFieldWithSelect from '../FormComponents/FormTextFieldWithSelect/FormTextFieldWithSelect.esm.js';
|
|
16
17
|
import DateRangePickerComponent from '../DateRangePicker/DateRangePicker.esm.js';
|
|
@@ -92,6 +93,9 @@ const RenderForm = (props) => {
|
|
|
92
93
|
case 'select-v2':
|
|
93
94
|
case 'basic-select': // new alias
|
|
94
95
|
return jsx(SingleSelectNonAutoComplete, { props: props, variant: variant });
|
|
96
|
+
// Searchable select — read-only TextField trigger + search-filtered Popover
|
|
97
|
+
case 'searchable-select':
|
|
98
|
+
return jsx(SearchableSelect, { props: props, variant: variant });
|
|
95
99
|
case 'input-select':
|
|
96
100
|
return jsx(FormTextFieldWithSelect, { props: props, variant: variant });
|
|
97
101
|
// Numeric inputs (integer, pincode, phone)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { FormControl, Box, TextField, InputAdornment, Popover, List, Typography, ListItemButton, ListItemText } from '@mui/material';
|
|
4
|
+
import SearchIcon from '@mui/icons-material/Search';
|
|
5
|
+
import CheckIcon from '@mui/icons-material/Check';
|
|
6
|
+
import { useWatch } from 'react-hook-form';
|
|
7
|
+
import FormBottomField from '../FormBottomField/FormBottomField.esm.js';
|
|
8
|
+
import 'dayjs';
|
|
9
|
+
import { renderLabel } from '../../../utils/Constants/FormConstants.esm.js';
|
|
10
|
+
|
|
11
|
+
const SearchableSelect = ({ props, variant, }) => {
|
|
12
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
13
|
+
const [search, setSearch] = useState('');
|
|
14
|
+
const value = useWatch({ control: props.control, name: props.item.name });
|
|
15
|
+
const isError = !!props.errors?.[props.item.name];
|
|
16
|
+
const options = props.item.options ?? [];
|
|
17
|
+
// Find the label that corresponds to the currently selected value
|
|
18
|
+
const selectedOption = options.find((o) => String(o.value) === String(value ?? ''));
|
|
19
|
+
const displayValue = selectedOption ? String(selectedOption.label) : '';
|
|
20
|
+
const handleOpen = (e) => {
|
|
21
|
+
if (props.item.disable)
|
|
22
|
+
return;
|
|
23
|
+
setSearch('');
|
|
24
|
+
setAnchorEl(e.currentTarget);
|
|
25
|
+
};
|
|
26
|
+
const handleClose = () => setAnchorEl(null);
|
|
27
|
+
const handleSelect = (val) => {
|
|
28
|
+
props.setValue(props.item.name, val);
|
|
29
|
+
props.item.onChangeFn && props.item.onChangeFn(val);
|
|
30
|
+
props.clearErrors && props.clearErrors(props.item.name);
|
|
31
|
+
handleClose();
|
|
32
|
+
};
|
|
33
|
+
// Case-insensitive substring filter across option labels
|
|
34
|
+
const filtered = search
|
|
35
|
+
? options.filter((o) => String(o.label).toLowerCase().includes(search.toLowerCase()))
|
|
36
|
+
: options;
|
|
37
|
+
// Label shown inside the MUI TextField (suppressed in 'standard' variant)
|
|
38
|
+
const muiLabel = variant !== 'standard'
|
|
39
|
+
? `${props.item.label}${props.item.required ? ' *' : ''}`
|
|
40
|
+
: '';
|
|
41
|
+
return (jsxs(FormControl, { fullWidth: true, sx: { position: 'relative' }, disabled: props.item.disable, children: [renderLabel(variant, props), jsx(Box, { onClick: handleOpen, sx: { cursor: props.item.disable ? 'default' : 'pointer' }, children: jsx(TextField, { fullWidth: true, value: displayValue, label: muiLabel, placeholder: props.item.placeholder || 'Select…', error: isError, size: "small", InputProps: {
|
|
42
|
+
readOnly: true,
|
|
43
|
+
endAdornment: (jsx(InputAdornment, { position: "end", children: jsx(SearchIcon, { sx: { fontSize: 16, color: 'text.disabled' } }) })),
|
|
44
|
+
sx: { cursor: 'inherit' },
|
|
45
|
+
}, inputProps: {
|
|
46
|
+
'aria-labelledby': `${props.item.name}-label`,
|
|
47
|
+
'aria-describedby': `${props.item.name}-helper ${props.item.name}-error`,
|
|
48
|
+
'aria-required': props.item.required ? true : undefined,
|
|
49
|
+
style: { cursor: 'inherit' },
|
|
50
|
+
}, sx: {
|
|
51
|
+
'& .MuiFormLabel-root': { top: -10 },
|
|
52
|
+
'& .MuiInputLabel-shrink': { top: 0 },
|
|
53
|
+
} }) }), jsxs(Popover, { open: Boolean(anchorEl), anchorEl: anchorEl, onClose: handleClose, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: {
|
|
54
|
+
sx: {
|
|
55
|
+
mt: 0.5,
|
|
56
|
+
borderRadius: 2,
|
|
57
|
+
boxShadow: 6,
|
|
58
|
+
// Match the width of the trigger field
|
|
59
|
+
width: anchorEl?.offsetWidth ?? 280,
|
|
60
|
+
display: 'flex',
|
|
61
|
+
flexDirection: 'column',
|
|
62
|
+
},
|
|
63
|
+
}, children: [jsx(Box, { sx: { px: 1.5, pt: 1.5, pb: 0.75 }, children: jsx(TextField, { size: "small", fullWidth: true, autoFocus: true, placeholder: "Search\u2026", value: search, onChange: (e) => setSearch(e.target.value), onKeyDown: (e) => {
|
|
64
|
+
if (e.key === 'Escape')
|
|
65
|
+
handleClose();
|
|
66
|
+
}, InputProps: {
|
|
67
|
+
startAdornment: (jsx(InputAdornment, { position: "start", children: jsx(SearchIcon, { sx: { fontSize: 16, color: 'text.disabled' } }) })),
|
|
68
|
+
}, sx: { '& .MuiOutlinedInput-root': { borderRadius: 2, fontSize: 13 } } }) }), jsx(List, { dense: true, disablePadding: true, sx: { maxHeight: 260, overflowY: 'auto', pb: 0.75 }, children: filtered.length === 0 ? (jsx(Box, { sx: { px: 2, py: 1.5 }, children: jsxs(Typography, { variant: "caption", color: "text.disabled", children: ["No options match \"", search, "\""] }) })) : (filtered.map((opt) => {
|
|
69
|
+
const isSelected = String(value ?? '') === String(opt.value);
|
|
70
|
+
return (jsxs(ListItemButton, { onClick: () => handleSelect(opt.value), selected: isSelected, disabled: opt.disable, sx: { px: 2, py: 0.5 }, children: [jsx(ListItemText, { primary: String(opt.label), primaryTypographyProps: {
|
|
71
|
+
fontSize: 13,
|
|
72
|
+
color: isSelected ? 'primary.main' : 'text.primary',
|
|
73
|
+
fontWeight: isSelected ? 600 : 400,
|
|
74
|
+
} }), isSelected && (jsx(CheckIcon, { sx: { fontSize: 15, color: 'primary.main', flexShrink: 0 } }))] }, String(opt.value)));
|
|
75
|
+
})) })] }), jsx(FormBottomField, { ...props })] }, props.item.name));
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export { SearchableSelect as default };
|
|
@@ -8,6 +8,7 @@ export { default as SingleSelectNonAutoComplete } from './Select/SingleSelectNon
|
|
|
8
8
|
export { default as SingleSelectSearchApi } from './Select/SingleSelectSearchApi';
|
|
9
9
|
export { default as MultiSelectV1 } from './Select/MultiSelectv1';
|
|
10
10
|
export { default as MultiSelectTable } from './Select/MultiSelectTable';
|
|
11
|
+
export { default as SearchableSelect } from './Select/SearchableSelect';
|
|
11
12
|
export { FormCheckBoxGroup } from '../CheckBoxGroup';
|
|
12
13
|
export { FormRadioGroup } from '../RadioGroup';
|
|
13
14
|
export { DatepickerWrapperV2, Monthpickerrender, YearPickerField, } from '../DatePicker';
|
|
@@ -9,6 +9,7 @@ export { default as SingleSelectNonAutoComplete } from './Select/SingleSelectNon
|
|
|
9
9
|
export { default as SingleSelectSearchApi } from './Select/SingleSelectSearchApi.esm.js';
|
|
10
10
|
export { default as MultiSelectV1 } from './Select/MultiSelectv1.esm.js';
|
|
11
11
|
export { default as MultiSelectTable } from './Select/MultiSelectTable.esm.js';
|
|
12
|
+
export { default as SearchableSelect } from './Select/SearchableSelect.esm.js';
|
|
12
13
|
export { default as FormCheckBoxGroup } from './FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
|
|
13
14
|
export { default as FormRadioGroup } from './FormRadioGroup/FormRadioGroup.esm.js';
|
|
14
15
|
export { default as DatepickerWrapperV2 } from './DatePicker/DatepickerWrapperV2.esm.js';
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import 'react-date-range/dist/styles.css';
|
|
2
|
-
import 'react-date-range/dist/theme/default.css';
|
|
3
1
|
import type { MRT_ColumnFiltersState } from 'material-react-table';
|
|
4
2
|
/**
|
|
5
3
|
* Describes one server-side filter chip.
|
|
6
4
|
*
|
|
7
|
-
* - `dateRange`
|
|
8
|
-
* - `text`
|
|
9
|
-
* - `dropdown`
|
|
10
|
-
*
|
|
11
|
-
* - `
|
|
5
|
+
* - `dateRange` — two-date popover. `fromKey` / `toKey` map to `filterValues`.
|
|
6
|
+
* - `text` — single text-input popover. `filterKey` maps to `filterValues`.
|
|
7
|
+
* - `dropdown` — single-select popover with a fixed list of `options`.
|
|
8
|
+
* `filterKey` maps to `filterValues`.
|
|
9
|
+
* - `searchableDropdown` — like `dropdown` but the popover has a search box so users can
|
|
10
|
+
* quickly filter long option lists. Same `filterKey` / `options`
|
|
11
|
+
* shape as `dropdown`.
|
|
12
|
+
* - `date` — single date-picker chip. Applied client-side via MRT `columnFilters`.
|
|
12
13
|
*/
|
|
13
14
|
export type ServerFilterDef = {
|
|
14
15
|
type: 'dateRange';
|
|
@@ -31,6 +32,20 @@ export type ServerFilterDef = {
|
|
|
31
32
|
label: string;
|
|
32
33
|
value: string;
|
|
33
34
|
}[];
|
|
35
|
+
} | {
|
|
36
|
+
/**
|
|
37
|
+
* Like `dropdown` but adds a search input at the top of the popover so users
|
|
38
|
+
* can filter through long option lists by typing.
|
|
39
|
+
*/
|
|
40
|
+
type: 'searchableDropdown';
|
|
41
|
+
id: string;
|
|
42
|
+
label: string;
|
|
43
|
+
filterKey: string;
|
|
44
|
+
options: {
|
|
45
|
+
label: string;
|
|
46
|
+
value: string;
|
|
47
|
+
}[];
|
|
48
|
+
placeholder?: string;
|
|
34
49
|
} | {
|
|
35
50
|
/**
|
|
36
51
|
* Single-date picker chip — applied client-side against the MRT column
|
|
@@ -44,6 +59,17 @@ export type ServerFilterDef = {
|
|
|
44
59
|
interface AvailableColumn {
|
|
45
60
|
id: string;
|
|
46
61
|
label: string;
|
|
62
|
+
/**
|
|
63
|
+
* Filter chip variant used in the "Column Filters" section of Manage Filters.
|
|
64
|
+
* Mirrors the `meta.filterType` declared on the column definition.
|
|
65
|
+
* Defaults to `'text'` when omitted.
|
|
66
|
+
*/
|
|
67
|
+
filterType?: 'text' | 'date' | 'searchableDropdown';
|
|
68
|
+
/** Options for the `'searchableDropdown'` chip variant. */
|
|
69
|
+
filterOptions?: {
|
|
70
|
+
label: string;
|
|
71
|
+
value: string;
|
|
72
|
+
}[];
|
|
47
73
|
}
|
|
48
74
|
export interface DynamicFilterBarProps {
|
|
49
75
|
serverFilterDefs: ServerFilterDef[];
|
|
@@ -4,15 +4,19 @@ import { useForm } from 'react-hook-form';
|
|
|
4
4
|
import dayjs from 'dayjs';
|
|
5
5
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
6
6
|
import { d as distExports } from '../../_virtual/index.esm.js';
|
|
7
|
-
import
|
|
7
|
+
import { useRdrStyles } from '../../utils/rdrStyles.esm.js';
|
|
8
|
+
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
|
9
|
+
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
|
10
|
+
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
8
11
|
import SingleSelectNonAutoComplete from '../FormComponents/Select/SingleSelectNonAutoComplete.esm.js';
|
|
9
|
-
import { Box, Typography, Button, Popover, TextField, Stack,
|
|
12
|
+
import { Box, Typography, Button, Popover, TextField, Stack, InputAdornment, List, ListItemButton, ListItemText, Tooltip, Divider } from '@mui/material';
|
|
10
13
|
import CalendarTodayIcon from '@mui/icons-material/CalendarToday';
|
|
11
14
|
import TuneIcon from '@mui/icons-material/Tune';
|
|
12
15
|
import CloseIcon from '@mui/icons-material/Close';
|
|
13
16
|
import FilterListIcon from '@mui/icons-material/FilterList';
|
|
14
17
|
import CheckIcon from '@mui/icons-material/Check';
|
|
15
18
|
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
|
|
19
|
+
import SearchIcon from '@mui/icons-material/Search';
|
|
16
20
|
|
|
17
21
|
// Enable strict-format parsing so dayjs can handle the DD/MM/YYYY strings
|
|
18
22
|
// that DatepickerWrapperV2 passes to onChangeFn
|
|
@@ -23,6 +27,7 @@ const TYPE_PILL = {
|
|
|
23
27
|
date: { label: 'Date', color: '#00695c', bg: '#e0f2f1' },
|
|
24
28
|
text: { label: 'Text', color: '#2e7d32', bg: '#e8f5e9' },
|
|
25
29
|
dropdown: { label: 'Select', color: '#6a1b9a', bg: '#f3e5f5' },
|
|
30
|
+
searchableDropdown: { label: 'Search', color: '#bf360c', bg: '#fbe9e7' },
|
|
26
31
|
};
|
|
27
32
|
// ─── Chip shared style ────────────────────────────────────────────────────────
|
|
28
33
|
const chipSx = (active) => ({
|
|
@@ -49,6 +54,9 @@ const fmtDate = (iso) => {
|
|
|
49
54
|
return `${Number(d)} ${months[Number(m) - 1]}${yearSuffix}`;
|
|
50
55
|
};
|
|
51
56
|
const DateRangeChip = ({ label, fromDate, toDate, onApply, onRemove }) => {
|
|
57
|
+
// Inject react-date-range CSS via JS (not CSS import) to prevent it from being
|
|
58
|
+
// bundled into the library's extracted CSS file and leaking into consumer apps.
|
|
59
|
+
useRdrStyles();
|
|
52
60
|
const [anchor, setAnchor] = useState(null);
|
|
53
61
|
const active = Boolean(fromDate || toDate);
|
|
54
62
|
const chipLabel = active ? `${fmtDate(fromDate)} – ${fmtDate(toDate)}` : label;
|
|
@@ -103,41 +111,35 @@ const TextFilterChip = ({ label, value, onApply, onRemove, placeholder }) => {
|
|
|
103
111
|
} }), jsxs(Stack, { direction: "row", spacing: 1, justifyContent: "flex-end", mt: 1.5, children: [active && (jsx(Button, { size: "small", color: "inherit", onClick: () => { onApply(''); setAnchor(null); }, children: "Clear" })), jsx(Button, { size: "small", variant: "contained", disableElevation: true, onClick: () => { onApply(draft); setAnchor(null); }, children: "Apply" })] })] }) })] }));
|
|
104
112
|
};
|
|
105
113
|
const DatePickerChip = ({ label, value, onApply, onRemove }) => {
|
|
106
|
-
const [
|
|
114
|
+
const [open, setOpen] = useState(false);
|
|
115
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
107
116
|
const active = Boolean(value);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
setValue('date', value || null);
|
|
114
|
-
}, [value, setValue]);
|
|
115
|
-
const item = {
|
|
116
|
-
name: 'date',
|
|
117
|
-
label,
|
|
118
|
-
inputType: 'datepicker',
|
|
119
|
-
onChangeFn: (val) => {
|
|
120
|
-
// DatepickerWrapperV2 calls onChangeFn with one of:
|
|
121
|
-
// • a dayjs-like object (has .format()) — use it directly
|
|
122
|
-
// • a "DD/MM/YYYY" formatted string — parse with strict mode
|
|
123
|
-
// • null / undefined — clear the filter
|
|
124
|
-
let iso = '';
|
|
125
|
-
if (!val) {
|
|
126
|
-
iso = '';
|
|
127
|
-
}
|
|
128
|
-
else if (typeof val.format === 'function') {
|
|
129
|
-
iso = val.format('YYYY-MM-DD');
|
|
130
|
-
}
|
|
131
|
-
else if (typeof val === 'string' && val.trim()) {
|
|
132
|
-
const parsed = dayjs(val.trim(), 'DD/MM/YYYY', true);
|
|
133
|
-
iso = parsed.isValid() ? parsed.format('YYYY-MM-DD') : '';
|
|
134
|
-
}
|
|
135
|
-
onApply(iso);
|
|
136
|
-
// Auto-close the popover as soon as a date is picked — no need to click "Done"
|
|
137
|
-
setAnchor(null);
|
|
138
|
-
},
|
|
117
|
+
// dayjs value expected by MUI X DatePicker (null = no selection)
|
|
118
|
+
const dayjsValue = value ? dayjs(value, 'YYYY-MM-DD') : null;
|
|
119
|
+
const handleChipClick = (e) => {
|
|
120
|
+
setAnchorEl(e.currentTarget);
|
|
121
|
+
setOpen(true);
|
|
139
122
|
};
|
|
140
|
-
|
|
123
|
+
const handleChange = (newVal) => {
|
|
124
|
+
if (newVal && dayjs.isDayjs(newVal) && newVal.isValid()) {
|
|
125
|
+
onApply(newVal.format('YYYY-MM-DD'));
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
onApply('');
|
|
129
|
+
}
|
|
130
|
+
setOpen(false);
|
|
131
|
+
};
|
|
132
|
+
return (
|
|
133
|
+
// LocalizationProvider must wrap DatePicker — scoped here so it only
|
|
134
|
+
// loads when the chip is actually used (DatePickerChip is tree-shaken
|
|
135
|
+
// if the 'date' filter type is never included in serverFilterDefs).
|
|
136
|
+
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: active ? `${label}: ${fmtDate(value)}` : label }), jsx(DatePicker, { value: dayjsValue, open: open, onClose: () => setOpen(false), onChange: handleChange, slotProps: {
|
|
137
|
+
textField: { sx: { display: 'none' }, size: 'small' },
|
|
138
|
+
popper: {
|
|
139
|
+
anchorEl,
|
|
140
|
+
placement: 'bottom-start',
|
|
141
|
+
},
|
|
142
|
+
} })] }));
|
|
141
143
|
};
|
|
142
144
|
const DropdownFilterChip = ({ label, value, options, onApply, onRemove }) => {
|
|
143
145
|
const [anchor, setAnchor] = useState(null);
|
|
@@ -180,6 +182,41 @@ const DropdownFilterChip = ({ label, value, options, onApply, onRemove }) => {
|
|
|
180
182
|
watch,
|
|
181
183
|
}, variant: "outlined" }) })] }));
|
|
182
184
|
};
|
|
185
|
+
const SearchableSelectChip = ({ label, value, options, onApply, onRemove, placeholder = 'Search…', }) => {
|
|
186
|
+
const [anchor, setAnchor] = useState(null);
|
|
187
|
+
const [search, setSearch] = useState('');
|
|
188
|
+
const active = Boolean(value);
|
|
189
|
+
const selectedLabel = options.find((o) => o.value === value)?.label ?? '';
|
|
190
|
+
const open = (e) => {
|
|
191
|
+
setSearch(''); // always start with all options visible
|
|
192
|
+
setAnchor(e.currentTarget);
|
|
193
|
+
};
|
|
194
|
+
const select = (val) => {
|
|
195
|
+
onApply(val);
|
|
196
|
+
setAnchor(null);
|
|
197
|
+
};
|
|
198
|
+
// Case-insensitive filter; always show "All" row on top
|
|
199
|
+
const filtered = search
|
|
200
|
+
? options.filter((o) => o.label.toLowerCase().includes(search.toLowerCase()))
|
|
201
|
+
: options;
|
|
202
|
+
return (jsxs(Fragment, { 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: active ? `${label}: ${selectedLabel}` : label }), jsxs(Popover, { open: Boolean(anchor), anchorEl: anchor, onClose: () => setAnchor(null), anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, PaperProps: {
|
|
203
|
+
sx: { mt: 0.75, borderRadius: 2, boxShadow: 6, width: 280, display: 'flex', flexDirection: 'column' },
|
|
204
|
+
}, 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')
|
|
205
|
+
setAnchor(null); }, InputProps: {
|
|
206
|
+
startAdornment: (jsx(InputAdornment, { position: "start", children: jsx(SearchIcon, { sx: { fontSize: 16, color: 'text.disabled' } }) })),
|
|
207
|
+
}, sx: { '& .MuiOutlinedInput-root': { borderRadius: 2, fontSize: 13 } } }) }), jsxs(List, { dense: true, disablePadding: true, sx: { maxHeight: 260, overflowY: 'auto', pb: 0.75 }, children: [!search && (jsxs(ListItemButton, { onClick: () => select(''), selected: !active, sx: { px: 2, py: 0.5 }, children: [jsx(ListItemText, { primary: "All", primaryTypographyProps: {
|
|
208
|
+
fontSize: 13,
|
|
209
|
+
color: !active ? 'primary.main' : 'text.secondary',
|
|
210
|
+
fontStyle: 'italic',
|
|
211
|
+
} }), !active && jsx(CheckIcon, { sx: { fontSize: 15, color: 'primary.main', flexShrink: 0 } })] })), filtered.length === 0 ? (jsx(Box, { sx: { px: 2, py: 1.5 }, children: jsxs(Typography, { variant: "caption", color: "text.disabled", children: ["No options match \"", search, "\""] }) })) : (filtered.map((opt) => {
|
|
212
|
+
const isSelected = value === opt.value;
|
|
213
|
+
return (jsxs(ListItemButton, { onClick: () => select(opt.value), selected: isSelected, sx: { px: 2, py: 0.5 }, children: [jsx(ListItemText, { primary: opt.label, primaryTypographyProps: {
|
|
214
|
+
fontSize: 13,
|
|
215
|
+
color: isSelected ? 'primary.main' : 'text.primary',
|
|
216
|
+
fontWeight: isSelected ? 600 : 400,
|
|
217
|
+
} }), isSelected && (jsx(CheckIcon, { sx: { fontSize: 15, color: 'primary.main', flexShrink: 0 } }))] }, opt.value));
|
|
218
|
+
}))] })] })] }));
|
|
219
|
+
};
|
|
183
220
|
const ManageFiltersButton = ({ serverFilterDefs, visibleIds, availableColumns, onToggle, }) => {
|
|
184
221
|
const [anchor, setAnchor] = useState(null);
|
|
185
222
|
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: {
|
|
@@ -206,17 +243,23 @@ const ManageFiltersButton = ({ serverFilterDefs, visibleIds, availableColumns, o
|
|
|
206
243
|
} }), selected && jsx(CheckIcon, { sx: { fontSize: 16, color: 'primary.main', flexShrink: 0 } })] }, def.id));
|
|
207
244
|
}) })] })), 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, sx: { maxHeight: 260, overflowY: 'auto' }, children: availableColumns.map((col) => {
|
|
208
245
|
const selected = visibleIds.includes(col.id);
|
|
246
|
+
// Pick the type pill based on the column's declared filter type
|
|
247
|
+
const pill = col.filterType === 'date'
|
|
248
|
+
? TYPE_PILL.date
|
|
249
|
+
: col.filterType === 'searchableDropdown'
|
|
250
|
+
? TYPE_PILL.searchableDropdown
|
|
251
|
+
: TYPE_PILL.text;
|
|
209
252
|
return (jsxs(ListItemButton, { onClick: () => onToggle(col.id), sx: { px: 2, py: 0.4 }, children: [jsx(Box, { component: "span", sx: {
|
|
210
253
|
mr: 1.25, flexShrink: 0,
|
|
211
254
|
fontSize: 10, fontWeight: 700,
|
|
212
255
|
px: 0.75, py: '2px',
|
|
213
256
|
borderRadius: '4px',
|
|
214
|
-
bgcolor:
|
|
215
|
-
color:
|
|
257
|
+
bgcolor: pill.bg,
|
|
258
|
+
color: pill.color,
|
|
216
259
|
textTransform: 'uppercase',
|
|
217
260
|
letterSpacing: 0.4,
|
|
218
261
|
lineHeight: 1.6,
|
|
219
|
-
}, children:
|
|
262
|
+
}, children: pill.label }), jsx(ListItemText, { primary: col.label, primaryTypographyProps: {
|
|
220
263
|
fontSize: 13,
|
|
221
264
|
color: selected ? 'primary.main' : 'text.primary',
|
|
222
265
|
} }), selected && jsx(CheckIcon, { sx: { fontSize: 16, color: 'primary.main', flexShrink: 0 } })] }, col.id));
|
|
@@ -233,7 +276,9 @@ const DynamicFilterBar = ({ serverFilterDefs, visibleFilterIds, onToggleFilter,
|
|
|
233
276
|
if (def?.type === 'dateRange') {
|
|
234
277
|
onFilterValuesChange({ ...filterValues, [def.fromKey]: '', [def.toKey]: '' });
|
|
235
278
|
}
|
|
236
|
-
else if (def?.type === 'text' ||
|
|
279
|
+
else if (def?.type === 'text' ||
|
|
280
|
+
def?.type === 'dropdown' ||
|
|
281
|
+
def?.type === 'searchableDropdown') {
|
|
237
282
|
onFilterValuesChange({ ...filterValues, [def.filterKey]: '' });
|
|
238
283
|
}
|
|
239
284
|
else if (def?.type === 'date') {
|
|
@@ -255,13 +300,23 @@ const DynamicFilterBar = ({ serverFilterDefs, visibleFilterIds, onToggleFilter,
|
|
|
255
300
|
if (def?.type === 'dropdown') {
|
|
256
301
|
return (jsx(DropdownFilterChip, { label: def.label, value: filterValues[def.filterKey] ?? '', options: def.options, onApply: (v) => onFilterValuesChange({ ...filterValues, [def.filterKey]: v }), onRemove: () => removeFilter(id) }, id));
|
|
257
302
|
}
|
|
303
|
+
if (def?.type === 'searchableDropdown') {
|
|
304
|
+
return (jsx(SearchableSelectChip, { label: def.label, value: filterValues[def.filterKey] ?? '', options: def.options, onApply: (v) => onFilterValuesChange({ ...filterValues, [def.filterKey]: v }), onRemove: () => removeFilter(id), placeholder: def.placeholder ?? 'Search…' }, id));
|
|
305
|
+
}
|
|
258
306
|
if (def?.type === 'date') {
|
|
259
307
|
return (jsx(DatePickerChip, { label: def.label, value: getColValue(def.columnKey), onApply: (v) => applyColFilter(def.columnKey, v), onRemove: () => removeFilter(id) }, id));
|
|
260
308
|
}
|
|
261
|
-
// Column filter chip
|
|
309
|
+
// Column filter chip — render the variant that matches the column's filterType
|
|
262
310
|
const col = availableColumns.find((c) => c.id === id);
|
|
263
311
|
if (!col)
|
|
264
312
|
return null;
|
|
313
|
+
if (col.filterType === 'date') {
|
|
314
|
+
return (jsx(DatePickerChip, { label: col.label, value: getColValue(id), onApply: (v) => applyColFilter(id, v), onRemove: () => removeFilter(id) }, id));
|
|
315
|
+
}
|
|
316
|
+
if (col.filterType === 'searchableDropdown') {
|
|
317
|
+
return (jsx(SearchableSelectChip, { label: col.label, value: getColValue(id), options: col.filterOptions ?? [], onApply: (v) => applyColFilter(id, v), onRemove: () => removeFilter(id) }, id));
|
|
318
|
+
}
|
|
319
|
+
// Default: free-text input
|
|
265
320
|
return (jsx(TextFilterChip, { label: col.label, value: getColValue(id), onApply: (v) => applyColFilter(id, v), onRemove: () => removeFilter(id), placeholder: `Filter by ${col.label}` }, id));
|
|
266
321
|
}), jsx(ManageFiltersButton, { serverFilterDefs: serverFilterDefs, visibleIds: visibleFilterIds, availableColumns: availableColumns, onToggle: onToggleFilter })] }));
|
|
267
322
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useMemo } from 'react';
|
|
3
3
|
import { useMaterialReactTable, MaterialReactTable } from 'material-react-table';
|
|
4
|
-
import { keepPreviousData } from '
|
|
5
|
-
import { useQuery } from '../../node_modules/@tanstack/react-query/build/modern/useQuery.esm.js';
|
|
4
|
+
import { useQuery, keepPreviousData } from '@tanstack/react-query';
|
|
6
5
|
import { Box, Tooltip, IconButton, Button, GlobalStyles, Typography, Select, MenuItem, CircularProgress } from '@mui/material';
|
|
7
6
|
import RefreshIcon from '@mui/icons-material/Refresh';
|
|
8
7
|
import FileDownloadIcon from '@mui/icons-material/FileDownload';
|
|
@@ -68,13 +67,32 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
|
|
|
68
67
|
const rows = data?.data ?? [];
|
|
69
68
|
const totalRecords = data?.totalRecords ?? 0;
|
|
70
69
|
// ── Derive column list for filter chip picker ──────────────────────────────
|
|
70
|
+
//
|
|
71
|
+
// A column is excluded from the "Column Filters" section of Manage Filters
|
|
72
|
+
// when ANY of the following are true:
|
|
73
|
+
// 1. It has no accessorKey (computed / display columns).
|
|
74
|
+
// 2. Its accessorKey is already handled by a server-side 'date' filter def.
|
|
75
|
+
// 3. Its MRT `enableColumnFilter` prop is explicitly set to `false` —
|
|
76
|
+
// this is the standard MRT opt-out flag for column-level filters.
|
|
71
77
|
const availableColumns = useMemo(() => {
|
|
72
78
|
const serverManagedColKeys = new Set(serverFilterDefs
|
|
73
79
|
.filter((d) => d.type === 'date')
|
|
74
80
|
.map((d) => d.columnKey));
|
|
75
81
|
return columns
|
|
76
|
-
.filter((c) => 'accessorKey' in c &&
|
|
77
|
-
|
|
82
|
+
.filter((c) => 'accessorKey' in c &&
|
|
83
|
+
c.accessorKey &&
|
|
84
|
+
!serverManagedColKeys.has(c.accessorKey) &&
|
|
85
|
+
// Honour the standard MRT opt-out flag: columns with
|
|
86
|
+
// enableColumnFilter: false should not appear in Manage Filters.
|
|
87
|
+
c.enableColumnFilter !== false)
|
|
88
|
+
.map((c) => ({
|
|
89
|
+
id: c.accessorKey,
|
|
90
|
+
label: c.header,
|
|
91
|
+
// Forward column-level filter type hints so DynamicFilterBar can render
|
|
92
|
+
// the right chip (text / date / searchableDropdown) for each column.
|
|
93
|
+
filterType: c.meta?.filterType,
|
|
94
|
+
filterOptions: c.meta?.filterOptions,
|
|
95
|
+
}));
|
|
78
96
|
}, [columns, serverFilterDefs]);
|
|
79
97
|
// ── Handlers ───────────────────────────────────────────────────────────────
|
|
80
98
|
const handleFilterValuesChange = (newValues) => {
|
|
@@ -1,3 +1,22 @@
|
|
|
1
1
|
import type { MRT_ColumnDef } from 'material-react-table';
|
|
2
2
|
import type { InvoiceDetail } from './types';
|
|
3
|
+
import type { RowData } from '@tanstack/table-core';
|
|
4
|
+
declare module '@tanstack/table-core' {
|
|
5
|
+
interface ColumnMeta<TData extends RowData, TValue> {
|
|
6
|
+
/**
|
|
7
|
+
* Which chip variant to render in the "Column Filters" section of
|
|
8
|
+
* Manage Filters. Defaults to `'text'` when omitted.
|
|
9
|
+
*
|
|
10
|
+
* 'text' → TextFilterChip (free-text input)
|
|
11
|
+
* 'date' → DatePickerChip (MUI X calendar)
|
|
12
|
+
* 'searchableDropdown' → SearchableSelectChip (search + options list)
|
|
13
|
+
*/
|
|
14
|
+
filterType?: 'text' | 'date' | 'searchableDropdown';
|
|
15
|
+
/** Option pairs for the `'searchableDropdown'` filter chip. */
|
|
16
|
+
filterOptions?: {
|
|
17
|
+
label: string;
|
|
18
|
+
value: string;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
3
22
|
export declare const invoiceColumns: MRT_ColumnDef<InvoiceDetail>[];
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export { default as SessionTimeoutField } from './components/SessionTimeOut/Sess
|
|
|
6
6
|
export { default as useFormValidatingContext } from './components/Form/FormConstants';
|
|
7
7
|
export { default as MultiSelectFieldComponent } from './components/SelectField/MultiSelectFieldComponent';
|
|
8
8
|
export { default as GenericPaginatedGrid } from './components/PaginatedGrid/GenericPaginatedGrid';
|
|
9
|
+
export { default as SearchableSelect } from './components/FormComponents/Select/SearchableSelect';
|
|
9
10
|
export { TPElementsProvider } from './auth/authContext';
|
|
10
11
|
export { calculateTotalArrayValueTotal, checkIsDateIsBefore, findMenuHierarchy, getDesiredDate, getFormattedDate, getInitials, getUsernameFromEmail, handleDownloadReactTableDataExcel, lightenColor, } from './utils';
|
|
11
12
|
export * as Utils from './utils';
|
package/dist/index.esm.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.m-form__input .prestashop-switch.switch{display:block;height:30px;position:relative;width:160px}.m-form__input .prestashop-switch.switch.stactv{display:block;height:30px;position:relative;width:162px}.prestashop-switch.switch{background-color:#eee;border:1px solid #ccc;border-radius:50px;-webkit-box-shadow:inset 0 1px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 1px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 1px 4px 1px rgba(0,0,0,.15);color:#333;text-align:center}.prestashop-switch.switch *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.m-form__input .prestashop-switch.switch *{outline:0!important}.m-form__input .prestashop-switch.switch input[type=radio]{line-height:normal;margin:4px 0 0;opacity:0;position:absolute}.m-form__input .prestashop-switch.switch label,.m-form__input .prestashop-switch.switch>span{display:inline-block;line-height:30px;max-width:100%;vertical-align:middle}.m-form__input .prestashop-switch.switch label{color:#bbb;cursor:pointer;float:left;font-size:11px;font-weight:400;height:100%;margin:0;position:relative;text-align:center;text-transform:uppercase;-webkit-transition:color .2s ease-out;-o-transition:color .2s ease-out;transition:color .2s ease-out;width:50%;z-index:2}.m-form__input .prestashop-switch.switch input:checked+label{color:#fff}.m-form__input .prestashop-switch.switch .slide-button{background-color:green;border:1px solid green;border-radius:50px;-webkit-box-shadow:inset -1px 0 green;-moz-box-shadow:inset 0 -1px 0 green;box-shadow:inset 0 -1px 0 green;color:#fff;display:block;height:100%;left:0;padding:0;position:absolute;top:0;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;width:50%;z-index:1}.m-form__input{align-items:center;display:flex}.m-form__input .prestashop-switch.switch input:last-of-type:checked~.slide-button{background-color:#ec5c29;border:1px solid #fb561c;-webkit-box-shadow:inset 0 -1px 0 #fb561c;-moz-box-shadow:inset 0 -1px 0 #fb561c;box-shadow:inset 0 -1px 0 #fb561c;left:50%}#list-component{background-color:#fff;max-height:200px;overflow:auto!important}#list-component #MuiScrol-listbox{max-height:none!important;overflow:visible}.css-k2lwa0,.css-svpvcz-MuiFormLabel-root-MuiInputLabel-root{background:#fff;font-size:14px!important}.rdrCalendarWrapper{background:#fff;box-sizing:border-box;display:inline-flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;user-select:none}.rdrDateDisplay{display:flex;justify-content:space-between}.rdrDateDisplayItem{color:inherit;flex:1 1;text-align:center;width:0}.rdrDateDisplayItem+.rdrDateDisplayItem{margin-left:.833em}.rdrDateDisplayItem input{text-align:inherit}.rdrDateDisplayItem input:disabled{cursor:default}.rdrMonthAndYearWrapper{box-sizing:inherit;display:flex;justify-content:space-between}.rdrMonthAndYearPickers{align-items:center;display:flex;flex:1 1 auto;justify-content:center}.rdrNextPrevButton{box-sizing:inherit;cursor:pointer;outline:none}.rdrMonths{display:flex}.rdrMonthsVertical{flex-direction:column}.rdrMonthsHorizontal>div>div>div{display:flex;flex-direction:row}.rdrMonth{width:27.667em}.rdrWeekDays{display:flex}.rdrWeekDay{box-sizing:inherit;flex-basis:14.28571%;text-align:center}.rdrDays{display:flex;flex-wrap:wrap}.rdrInfiniteMonths{overflow:auto}.rdrDateRangeWrapper{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rdrDateInput{position:relative}.rdrDateInput input{outline:none}.rdrDateInput .rdrWarning{color:red;font-size:1.6em;line-height:1.6em;position:absolute;right:.25em;top:0}.rdrDay{box-sizing:inherit;cursor:pointer;font:inherit;position:relative;width:14.28571%}.rdrDayNumber{display:block;position:relative}.rdrDayNumber span{color:#1d2429}.rdrDayDisabled{cursor:not-allowed}@supports (-ms-ime-align:auto){.rdrDay{flex-basis:14.285%!important}}.rdrEndEdge,.rdrInRange,.rdrSelected,.rdrStartEdge{pointer-events:none}.rdrDateRangePickerWrapper{display:inline-flex;-webkit-user-select:none;-moz-user-select:none;user-select:none}.rdrStaticRanges{display:flex;flex-direction:column}.rdrStaticRange{font-size:inherit}.rdrInputRange{display:flex}.rdrCalendarWrapper{color:#000;font-size:12px}.rdrDateDisplayWrapper{background-color:#eff2f7}.rdrDateDisplay{margin:.833em}.rdrDateDisplayItem{background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 2px 0 rgba(35,57,66,.21)}.rdrDateDisplayItem input{background:transparent;border:0;color:#849095;cursor:pointer;height:2.5em;line-height:2.5em;width:100%}.rdrDateDisplayItemActive{border-color:currentColor}.rdrDateDisplayItemActive input{color:#7d888d}.rdrMonthAndYearWrapper{align-items:center;height:60px;padding-top:10px}.rdrMonthAndYearPickers{font-weight:600}.rdrMonthAndYearPickers select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background:transparent;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;border:0;border-radius:4px;color:#3e484f;cursor:pointer;outline:0;padding:10px 30px 10px 10px;text-align:center}.rdrMonthAndYearPickers select:hover{background-color:rgba(0,0,0,.07)}.rdrMonthPicker,.rdrYearPicker{margin:0 5px}.rdrNextPrevButton{background:#eff2f7;border:0;border-radius:5px;display:block;height:24px;margin:0 .833em;padding:0;width:24px}.rdrNextPrevButton:hover{background:#e1e7f0}.rdrNextPrevButton i{border-style:solid;display:block;height:0;margin:auto;padding:0;text-align:center;transform:translate(-3px);width:0}.rdrPprevButton i{border-color:transparent #34495e transparent transparent;border-width:4px 6px 4px 4px;transform:translate(-3px)}.rdrNextButton i{border-color:transparent transparent transparent #34495e;border-width:4px 4px 4px 6px;margin:0 0 0 7px;transform:translate(3px)}.rdrWeekDays{padding:0 .833em}.rdrMonth{padding:0 .833em 1.666em}.rdrMonth .rdrWeekDays{padding:0}.rdrMonths.rdrMonthsVertical .rdrMonth:first-child .rdrMonthName{display:none}.rdrWeekDay{color:#849095;font-weight:400;line-height:2.667em}.rdrDay{background:transparent;border:0;color:#1d2429;height:3em;line-height:3em;padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.rdrDay:focus{outline:0}.rdrDayNumber{align-items:center;bottom:0;bottom:5px;display:flex;font-weight:300;justify-content:center;left:0;outline:0;position:absolute;right:0;top:0;top:5px}.rdrDayToday .rdrDayNumber span{font-weight:500}.rdrDayToday .rdrDayNumber span:after{background:#3d91ff;border-radius:2px;bottom:4px;content:"";height:2px;left:50%;position:absolute;transform:translate(-50%);width:18px}.rdrDayToday:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span:after,.rdrDayToday:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span:after{background:#fff}.rdrDay:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span,.rdrDay:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span{color:hsla(0,0%,100%,.85)}.rdrEndEdge,.rdrInRange,.rdrSelected,.rdrStartEdge{background:currentColor;bottom:5px;left:0;position:absolute;right:0;top:5px}.rdrSelected{left:2px;right:2px}.rdrStartEdge{border-bottom-left-radius:1.042em;border-top-left-radius:1.042em;left:2px}.rdrEndEdge{border-bottom-right-radius:1.042em;border-top-right-radius:1.042em;right:2px}.rdrSelected{border-radius:1.042em}.rdrDayStartOfMonth .rdrEndEdge,.rdrDayStartOfMonth .rdrInRange,.rdrDayStartOfWeek .rdrEndEdge,.rdrDayStartOfWeek .rdrInRange{border-bottom-left-radius:1.042em;border-top-left-radius:1.042em;left:2px}.rdrDayEndOfMonth .rdrInRange,.rdrDayEndOfMonth .rdrStartEdge,.rdrDayEndOfWeek .rdrInRange,.rdrDayEndOfWeek .rdrStartEdge{border-bottom-right-radius:1.042em;border-top-right-radius:1.042em;right:2px}.rdrDayStartOfMonth .rdrDayEndPreview,.rdrDayStartOfMonth .rdrDayInPreview,.rdrDayStartOfWeek .rdrDayEndPreview,.rdrDayStartOfWeek .rdrDayInPreview{border-bottom-left-radius:1.333em;border-left-width:1px;border-top-left-radius:1.333em;left:0}.rdrDayEndOfMonth .rdrDayInPreview,.rdrDayEndOfMonth .rdrDayStartPreview,.rdrDayEndOfWeek .rdrDayInPreview,.rdrDayEndOfWeek .rdrDayStartPreview{border-bottom-right-radius:1.333em;border-right-width:1px;border-top-right-radius:1.333em;right:0}.rdrDayEndPreview,.rdrDayInPreview,.rdrDayStartPreview{background:hsla(0,0%,100%,.09);border:0 solid;bottom:3px;left:0;pointer-events:none;position:absolute;right:0;top:3px;z-index:1}.rdrDayStartPreview{border-bottom-left-radius:1.333em;border-bottom-width:1px;border-left-width:1px;border-top-left-radius:1.333em;border-top-width:1px;left:0}.rdrDayInPreview{border-bottom-width:1px;border-top-width:1px}.rdrDayEndPreview{border-bottom-right-radius:1.333em;border-bottom-width:1px;border-right-width:1px;border-top-right-radius:1.333em;border-top-width:1px;right:2px;right:0}.rdrDefinedRangesWrapper{background:#fff;border-right:1px solid #eff2f7;font-size:12px;width:226px}.rdrDefinedRangesWrapper .rdrStaticRangeSelected{color:currentColor;font-weight:600}.rdrStaticRange{background:#fff;border:0;border-bottom:1px solid #eff2f7;cursor:pointer;display:block;outline:0;padding:0}.rdrStaticRange:focus .rdrStaticRangeLabel,.rdrStaticRange:hover .rdrStaticRangeLabel{background:#eff2f7}.rdrStaticRangeLabel{display:block;line-height:18px;outline:0;padding:10px 20px;text-align:left}.rdrInputRanges{padding:10px 0}.rdrInputRange{align-items:center;padding:5px 20px}.rdrInputRangeInput{border:1px solid #dee7eb;border-radius:4px;color:#6c767a;height:30px;line-height:30px;margin-right:10px;text-align:center;width:30px}.rdrInputRangeInput:focus,.rdrInputRangeInput:hover{border-color:#b4bfc4;color:#333;outline:0}.rdrCalendarWrapper:not(.rdrDateRangeWrapper) .rdrDayHovered .rdrDayNumber:after{background:transparent;border:1px solid;border-radius:1.333em;bottom:-2px;content:"";left:0;position:absolute;right:0;top:-2px}.rdrDayPassive{pointer-events:none}.rdrDayPassive .rdrDayNumber span{color:#d5dce0}.rdrDayPassive .rdrDayEndPreview,.rdrDayPassive .rdrDayInPreview,.rdrDayPassive .rdrDayStartPreview,.rdrDayPassive .rdrEndEdge,.rdrDayPassive .rdrInRange,.rdrDayPassive .rdrSelected,.rdrDayPassive .rdrStartEdge{display:none}.rdrDayDisabled{background-color:#f8f8f8}.rdrDayDisabled .rdrDayNumber span{color:#aeb9bf}.rdrDayDisabled .rdrDayEndPreview,.rdrDayDisabled .rdrDayInPreview,.rdrDayDisabled .rdrDayStartPreview,.rdrDayDisabled .rdrEndEdge,.rdrDayDisabled .rdrInRange,.rdrDayDisabled .rdrSelected,.rdrDayDisabled .rdrStartEdge{filter:grayscale(100%) opacity(60%)}.rdrMonthName{color:#849095;font-weight:600;padding:.833em;text-align:left}.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrEndEdge~.rdrDayNumber span,.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrInRange~.rdrDayNumber span,.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrSelected~.rdrDayNumber span,.rdrCalendarWrapper .rdrDay:not(.rdrDayPassive) .rdrStartEdge~.rdrDayNumber span{color:#fff!important}
|
|
1
|
+
.m-form__input .prestashop-switch.switch{display:block;height:30px;position:relative;width:160px}.m-form__input .prestashop-switch.switch.stactv{display:block;height:30px;position:relative;width:162px}.prestashop-switch.switch{background-color:#eee;border:1px solid #ccc;border-radius:50px;-webkit-box-shadow:inset 0 1px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 1px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 1px 4px 1px rgba(0,0,0,.15);color:#333;text-align:center}.prestashop-switch.switch *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.m-form__input .prestashop-switch.switch *{outline:0!important}.m-form__input .prestashop-switch.switch input[type=radio]{line-height:normal;margin:4px 0 0;opacity:0;position:absolute}.m-form__input .prestashop-switch.switch label,.m-form__input .prestashop-switch.switch>span{display:inline-block;line-height:30px;max-width:100%;vertical-align:middle}.m-form__input .prestashop-switch.switch label{color:#bbb;cursor:pointer;float:left;font-size:11px;font-weight:400;height:100%;margin:0;position:relative;text-align:center;text-transform:uppercase;-webkit-transition:color .2s ease-out;-o-transition:color .2s ease-out;transition:color .2s ease-out;width:50%;z-index:2}.m-form__input .prestashop-switch.switch input:checked+label{color:#fff}.m-form__input .prestashop-switch.switch .slide-button{background-color:green;border:1px solid green;border-radius:50px;-webkit-box-shadow:inset -1px 0 green;-moz-box-shadow:inset 0 -1px 0 green;box-shadow:inset 0 -1px 0 green;color:#fff;display:block;height:100%;left:0;padding:0;position:absolute;top:0;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;width:50%;z-index:1}.m-form__input{align-items:center;display:flex}.m-form__input .prestashop-switch.switch input:last-of-type:checked~.slide-button{background-color:#ec5c29;border:1px solid #fb561c;-webkit-box-shadow:inset 0 -1px 0 #fb561c;-moz-box-shadow:inset 0 -1px 0 #fb561c;box-shadow:inset 0 -1px 0 #fb561c;left:50%}#list-component{background-color:#fff;max-height:200px;overflow:auto!important}#list-component #MuiScrol-listbox{max-height:none!important;overflow:visible}
|
package/dist/index.esm.js
CHANGED
|
@@ -6,6 +6,7 @@ export { default as SessionTimeoutField } from './components/SessionTimeOut/Sess
|
|
|
6
6
|
export { default as useFormValidatingContext } from './components/Form/FormConstants.esm.js';
|
|
7
7
|
export { default as MultiSelectFieldComponent } from './components/SelectField/MultiSelectFieldComponent.esm.js';
|
|
8
8
|
export { default as GenericPaginatedGrid } from './components/PaginatedGrid/GenericPaginatedGrid.esm.js';
|
|
9
|
+
export { default as SearchableSelect } from './components/FormComponents/Select/SearchableSelect.esm.js';
|
|
9
10
|
export { TPElementsProvider } from './auth/authContext.esm.js';
|
|
10
11
|
import * as index$1 from './utils/index.esm.js';
|
|
11
12
|
export { index$1 as Utils };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as Calendar } from '../../../../../_virtual/index.
|
|
1
|
+
import { __exports as Calendar } 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 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';
|