tp-react-elements 1.3.1 → 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.
Files changed (33) hide show
  1. package/dist/_virtual/index.esm4.js +2 -2
  2. package/dist/_virtual/index.esm5.js +2 -2
  3. package/dist/_virtual/index.esm6.js +2 -2
  4. package/dist/_virtual/index.esm7.js +2 -2
  5. package/dist/components/DateRangePicker/DateRangePicker.d.ts +0 -3
  6. package/dist/components/DateRangePicker/DateRangePicker.esm.js +4 -0
  7. package/dist/components/Form/FormRender.esm.js +4 -0
  8. package/dist/components/FormComponents/Select/SearchableSelect.d.ts +6 -0
  9. package/dist/components/FormComponents/Select/SearchableSelect.esm.js +78 -0
  10. package/dist/components/FormComponents/index.d.ts +1 -0
  11. package/dist/components/FormComponents/index.esm.js +1 -0
  12. package/dist/components/PaginatedGrid/DynamicFilterBar.d.ts +85 -0
  13. package/dist/components/PaginatedGrid/DynamicFilterBar.esm.js +324 -0
  14. package/dist/components/PaginatedGrid/GenericPaginatedGrid.d.ts +40 -0
  15. package/dist/components/PaginatedGrid/GenericPaginatedGrid.esm.js +240 -0
  16. package/dist/components/PaginatedGrid/InvoiceGrid.d.ts +2 -0
  17. package/dist/components/PaginatedGrid/columns.d.ts +22 -0
  18. package/dist/components/PaginatedGrid/helpers.d.ts +3 -0
  19. package/dist/components/PaginatedGrid/index.d.ts +4 -0
  20. package/dist/components/PaginatedGrid/index.esm.js +2 -0
  21. package/dist/components/PaginatedGrid/invoiceApi.d.ts +2 -0
  22. package/dist/components/PaginatedGrid/types.d.ts +48 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.esm.css +1 -1
  25. package/dist/index.esm.js +2 -0
  26. package/dist/node_modules/react-date-range/dist/components/Calendar/index.esm.js +1 -1
  27. package/dist/node_modules/react-date-range/dist/components/DateRange/index.esm.js +1 -1
  28. package/dist/node_modules/react-date-range/dist/components/DateRangePicker/index.esm.js +1 -1
  29. package/dist/node_modules/react-date-range/dist/components/DefinedRange/index.esm.js +1 -1
  30. package/dist/utils/Interface/FormInterface.d.ts +1 -1
  31. package/dist/utils/rdrStyles.d.ts +12 -0
  32. package/dist/utils/rdrStyles.esm.js +180 -0
  33. package/package.json +6 -1
@@ -0,0 +1,240 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useState, useMemo } from 'react';
3
+ import { useMaterialReactTable, MaterialReactTable } from 'material-react-table';
4
+ import { useQuery, keepPreviousData } from '@tanstack/react-query';
5
+ import { Box, Tooltip, IconButton, Button, GlobalStyles, Typography, Select, MenuItem, CircularProgress } from '@mui/material';
6
+ import RefreshIcon from '@mui/icons-material/Refresh';
7
+ import FileDownloadIcon from '@mui/icons-material/FileDownload';
8
+ import FirstPageIcon from '@mui/icons-material/FirstPage';
9
+ import LastPageIcon from '@mui/icons-material/LastPage';
10
+ import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
11
+ import ChevronRightIcon from '@mui/icons-material/ChevronRight';
12
+ import DynamicFilterBar from './DynamicFilterBar.esm.js';
13
+
14
+ // ─── Internal: overlay loader ─────────────────────────────────────────────────
15
+ const OverlayLoader = ({ message }) => (jsxs(Box, { sx: {
16
+ position: 'absolute', inset: 0,
17
+ display: 'flex', flexDirection: 'column',
18
+ alignItems: 'center', justifyContent: 'center',
19
+ bgcolor: 'rgba(255,255,255,0.80)', backdropFilter: 'blur(2px)',
20
+ zIndex: 10, gap: 1.5,
21
+ }, children: [jsx(CircularProgress, { size: 50, thickness: 4 }), jsx(Typography, { variant: "body2", color: "text.secondary", fontWeight: 500, children: message })] }));
22
+ const PaginationFooter = ({ pageIndex, pageSize, totalRecords, isFetching, isLoading, canPrev, canNext, onFirst, onPrev, onNext, onLast, onPageSizeChange, pageSizeOptions, }) => {
23
+ const startRow = totalRecords === 0 ? 0 : pageIndex * pageSize + 1;
24
+ const endRow = Math.min((pageIndex + 1) * pageSize, totalRecords);
25
+ return (jsxs(Box, { sx: {
26
+ display: 'flex', alignItems: 'center', justifyContent: 'flex-end',
27
+ gap: { xs: 1.5, md: 3 }, px: 2, py: 0.75,
28
+ borderTop: '1px solid', borderColor: 'divider',
29
+ bgcolor: 'background.paper', flexWrap: 'wrap', minHeight: 48,
30
+ }, children: [jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: [jsx(Typography, { variant: "body2", color: "text.secondary", noWrap: true, children: "Rows per page:" }), jsx(Select, { value: pageSize, onChange: (e) => onPageSizeChange(Number(e.target.value)), size: "small", variant: "outlined", sx: {
31
+ height: 28, fontSize: 13, minWidth: 80,
32
+ '.MuiSelect-select': { py: '3px !important' },
33
+ '.MuiOutlinedInput-notchedOutline': { borderColor: 'divider' },
34
+ }, children: pageSizeOptions.map((opt) => (jsx(MenuItem, { value: opt, sx: { fontSize: 13 }, children: opt.toLocaleString() }, opt))) })] }), jsx(Typography, { variant: "body2", color: "text.secondary", noWrap: true, children: isLoading || (isFetching && totalRecords === 0)
35
+ ? 'Loading…'
36
+ : totalRecords === 0
37
+ ? 'No records'
38
+ : `${startRow.toLocaleString()}–${endRow.toLocaleString()} of ${totalRecords.toLocaleString()}` }), jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 0.25 }, children: [jsx(Tooltip, { title: "First page", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: onFirst, disabled: !canPrev, children: jsx(FirstPageIcon, { sx: { fontSize: 20 } }) }) }) }), jsx(Tooltip, { title: "Previous page", children: jsx("span", { children: jsx(IconButton, { size: "small", onClick: onPrev, disabled: !canPrev, children: jsx(ChevronLeftIcon, { sx: { fontSize: 20 } }) }) }) }), jsx(Typography, { variant: "body2", fontWeight: 600, sx: {
39
+ mx: 0.5, minWidth: 28, height: 28,
40
+ display: 'flex', alignItems: 'center', justifyContent: 'center',
41
+ borderRadius: 1, border: '1px solid', borderColor: 'primary.main',
42
+ color: 'primary.main', bgcolor: 'rgba(25,118,210,0.07)', fontSize: 13,
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
+ };
45
+ // ─── GenericPaginatedGrid ─────────────────────────────────────────────────────
46
+ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', tableHeight = '60vh', pageSizeOptions = [1000, 5000, 10000], headerBgColor, }) {
47
+ const defaultVisible = defaultVisibleFilterIds
48
+ ?? (serverFilterDefs.length > 0 ? [serverFilterDefs[0].id] : []);
49
+ // ── State ──────────────────────────────────────────────────────────────────
50
+ const [filterValues, setFilterValues] = useState(defaultFilters);
51
+ const [visibleFilterIds, setVisibleFilterIds] = useState(defaultVisible);
52
+ const [pagination, setPagination] = useState({
53
+ pageIndex: 0,
54
+ pageSize: batchSize,
55
+ });
56
+ const [sorting, setSorting] = useState([]);
57
+ const [columnFilters, setColumnFilters] = useState([]);
58
+ const [globalFilter, setGlobalFilter] = useState('');
59
+ const [columnPinning, setColumnPinning] = useState({});
60
+ // ── Data fetching ──────────────────────────────────────────────────────────
61
+ const { data, isLoading, isError, isFetching, refetch } = useQuery({
62
+ queryKey: [...queryKey, filterValues, pagination.pageIndex],
63
+ queryFn: () => fetchPage(filterValues, pagination.pageIndex),
64
+ placeholderData: keepPreviousData,
65
+ staleTime: 30000,
66
+ });
67
+ const rows = data?.data ?? [];
68
+ const totalRecords = data?.totalRecords ?? 0;
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.
77
+ const availableColumns = useMemo(() => {
78
+ const serverManagedColKeys = new Set(serverFilterDefs
79
+ .filter((d) => d.type === 'date')
80
+ .map((d) => d.columnKey));
81
+ return columns
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
+ }));
96
+ }, [columns, serverFilterDefs]);
97
+ // ── Handlers ───────────────────────────────────────────────────────────────
98
+ const handleFilterValuesChange = (newValues) => {
99
+ setFilterValues(newValues);
100
+ setPagination((p) => ({ ...p, pageIndex: 0 }));
101
+ };
102
+ const handleToggleFilter = (id) => setVisibleFilterIds((prev) => prev.includes(id) ? prev.filter((v) => v !== id) : [...prev, id]);
103
+ const handleClearAll = () => {
104
+ setFilterValues(defaultFilters);
105
+ setColumnFilters([]);
106
+ setVisibleFilterIds(defaultVisible);
107
+ setPagination((p) => ({ ...p, pageIndex: 0 }));
108
+ };
109
+ const handleExport = () => {
110
+ const headers = columns.map((c) => c.header).join(',');
111
+ const csvRows = rows.map((row) => columns
112
+ .map((c) => {
113
+ const key = c.accessorKey ?? '';
114
+ const val = row[key] ?? '';
115
+ return `"${String(val).replace(/"/g, '""')}"`;
116
+ })
117
+ .join(','));
118
+ const blob = new Blob([[headers, ...csvRows].join('\n')], { type: 'text/csv' });
119
+ const url = URL.createObjectURL(blob);
120
+ const a = document.createElement('a');
121
+ a.href = url;
122
+ a.download = `${exportFilename}-page${pagination.pageIndex + 1}.csv`;
123
+ a.click();
124
+ URL.revokeObjectURL(url);
125
+ };
126
+ const hasAnyValue = Object.values(filterValues).some(Boolean) ||
127
+ columnFilters.some((f) => f.value);
128
+ // ── Table instance ─────────────────────────────────────────────────────────
129
+ const table = useMaterialReactTable({
130
+ columns,
131
+ data: rows,
132
+ manualPagination: true,
133
+ rowCount: totalRecords,
134
+ manualSorting: false,
135
+ manualFiltering: false,
136
+ state: {
137
+ pagination,
138
+ sorting,
139
+ columnFilters,
140
+ globalFilter,
141
+ columnPinning,
142
+ showAlertBanner: isError,
143
+ showProgressBars: false,
144
+ },
145
+ onPaginationChange: setPagination,
146
+ onSortingChange: setSorting,
147
+ onColumnFiltersChange: setColumnFilters,
148
+ onGlobalFilterChange: setGlobalFilter,
149
+ onColumnPinningChange: (updater) => {
150
+ setColumnPinning((prev) => {
151
+ const next = typeof updater === 'function' ? updater(prev) : updater;
152
+ return { ...next, right: [] };
153
+ });
154
+ },
155
+ enableColumnResizing: true,
156
+ enableColumnOrdering: true,
157
+ enableColumnActions: false,
158
+ enableColumnPinning: true,
159
+ columnResizeMode: 'onChange',
160
+ enableFilters: false,
161
+ enableGlobalFilter: true,
162
+ enableDensityToggle: true,
163
+ enableFullScreenToggle: true,
164
+ enableHiding: true,
165
+ enableStickyHeader: true,
166
+ enableRowVirtualization: true,
167
+ muiTableContainerProps: { sx: { maxHeight: tableHeight } },
168
+ muiTopToolbarProps: {
169
+ sx: {
170
+ alignItems: 'center',
171
+ flexWrap: 'nowrap',
172
+ },
173
+ },
174
+ muiTableHeadCellProps: ({ column }) => {
175
+ const colProps = column.columnDef.muiTableHeadCellProps;
176
+ const align = colProps && typeof colProps !== 'function'
177
+ ? colProps.align
178
+ : undefined;
179
+ const justifyContent = align === 'right' ? 'flex-start'
180
+ : align === 'center' ? 'center'
181
+ : 'flex-end';
182
+ return {
183
+ align: (align ?? 'left'),
184
+ sx: {
185
+ ...(headerBgColor ? { backgroundColor: headerBgColor } : {}),
186
+ verticalAlign: 'bottom',
187
+ whiteSpace: 'normal',
188
+ borderRight: '1px solid rgba(224,224,224,1)',
189
+ borderBottom: '2px solid rgba(0,0,0,0.15)',
190
+ '& button[aria-label="Move"]': { display: 'none' },
191
+ '& .MuiTableSortLabel-icon': { display: 'none' },
192
+ '& .Mui-TableHeadCell-ResizeHandle-Wrapper': {
193
+ height: '100%',
194
+ top: 0,
195
+ },
196
+ '& .Mui-TableHeadCell-ResizeHandle-Divider': {
197
+ borderRight: 'none',
198
+ },
199
+ '& .Mui-TableHeadCell-Content': {
200
+ alignItems: 'flex-end',
201
+ justifyContent,
202
+ },
203
+ '& .Mui-TableHeadCell-Content-Labels': {
204
+ flexWrap: 'wrap',
205
+ whiteSpace: 'normal',
206
+ overflowWrap: 'normal',
207
+ lineHeight: 1.3,
208
+ justifyContent,
209
+ },
210
+ '& .Mui-TableHeadCell-Content-Wrapper': {
211
+ whiteSpace: 'normal',
212
+ overflow: 'visible',
213
+ },
214
+ },
215
+ };
216
+ },
217
+ muiTableBodyCellProps: {
218
+ sx: {
219
+ whiteSpace: 'nowrap',
220
+ borderRight: '1px solid rgba(224,224,224,1)',
221
+ },
222
+ },
223
+ muiToolbarAlertBannerProps: isError
224
+ ? { color: 'error', children: 'Failed to load data. Please try again.' }
225
+ : undefined,
226
+ 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: {
227
+ flexShrink: 0,
228
+ textTransform: 'none',
229
+ fontSize: 12,
230
+ color: 'error.main',
231
+ minWidth: 'auto',
232
+ px: 1,
233
+ '&:hover': { bgcolor: 'rgba(211,47,47,0.06)' },
234
+ }, children: "Clear All" }))] })),
235
+ 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 })),
236
+ });
237
+ return (jsxs(Box, { sx: { position: 'relative' }, children: [jsx(GlobalStyles, { styles: { 'button[aria-label="Pin to right"]': { display: 'none' } } }), isLoading && jsx(OverlayLoader, { message: "Loading data\u2026" }), !isLoading && isFetching && jsx(OverlayLoader, { message: "Updating data\u2026" }), jsx(MaterialReactTable, { table: table })] }));
238
+ }
239
+
240
+ export { GenericPaginatedGrid as default };
@@ -0,0 +1,2 @@
1
+ declare const InvoiceGrid: () => import("react/jsx-runtime").JSX.Element;
2
+ export default InvoiceGrid;
@@ -0,0 +1,22 @@
1
+ import type { MRT_ColumnDef } from 'material-react-table';
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
+ }
22
+ export declare const invoiceColumns: MRT_ColumnDef<InvoiceDetail>[];
@@ -0,0 +1,3 @@
1
+ export declare const formatDate: (dateString: string) => string;
2
+ export declare const formatINR: (value: number) => string;
3
+ export declare const formatNumber: (value: number, decimals?: number) => string;
@@ -0,0 +1,4 @@
1
+ export { default as GenericPaginatedGrid } from './GenericPaginatedGrid';
2
+ export type { GenericPaginatedGridProps, PagedResult } from './GenericPaginatedGrid';
3
+ export { default as DynamicFilterBar } from './DynamicFilterBar';
4
+ export type { ServerFilterDef } from './DynamicFilterBar';
@@ -0,0 +1,2 @@
1
+ export { default as GenericPaginatedGrid } from './GenericPaginatedGrid.esm.js';
2
+ export { default as DynamicFilterBar } from './DynamicFilterBar.esm.js';
@@ -0,0 +1,2 @@
1
+ import type { InvoiceRequest, InvoiceApiResponse } from './types';
2
+ export declare const fetchInvoiceDetails: (request: InvoiceRequest) => Promise<InvoiceApiResponse>;
@@ -0,0 +1,48 @@
1
+ export interface InvoiceDetail {
2
+ Data_from: string;
3
+ FINYEAR: string;
4
+ Div_Code: string;
5
+ Depo_Code: string;
6
+ Customer: string;
7
+ category: string;
8
+ Dist_Chan: string;
9
+ InvoiceNo: number;
10
+ BillItem: string;
11
+ InvoiceDate: string;
12
+ Prod_ID: number;
13
+ Batch: string;
14
+ Allocated_Qty: number;
15
+ free_qty: number;
16
+ Nettrate: number;
17
+ fld_ed_diff: number;
18
+ disc_val: number;
19
+ Net_val: number;
20
+ Nett_ed_value: number;
21
+ Tax_amt_value: number;
22
+ Act_Division: string;
23
+ MRP: number;
24
+ Inv_time: string;
25
+ status: string;
26
+ createdate: string;
27
+ RetType: string;
28
+ Mkt_nett: number;
29
+ changeddate: string;
30
+ SHIP_TO_PARTY: string;
31
+ }
32
+ export interface InvoiceRequest {
33
+ FromDate: string;
34
+ ToDate: string;
35
+ Division: string;
36
+ Customer: string;
37
+ DC: string;
38
+ ProductCode: string;
39
+ PageNumber: number;
40
+ }
41
+ export interface InvoiceApiResponse {
42
+ PageNumber: number;
43
+ PageSize: number;
44
+ TotalRecords: number;
45
+ TotalPages: number;
46
+ HasNextPage: boolean;
47
+ Data: InvoiceDetail[];
48
+ }
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@ export { default as DeleteField } from './components/DeleteComponent/DeleteField
5
5
  export { default as SessionTimeoutField } from './components/SessionTimeOut/SessionTimeOut';
6
6
  export { default as useFormValidatingContext } from './components/Form/FormConstants';
7
7
  export { default as MultiSelectFieldComponent } from './components/SelectField/MultiSelectFieldComponent';
8
+ export { default as GenericPaginatedGrid } from './components/PaginatedGrid/GenericPaginatedGrid';
9
+ export { default as SearchableSelect } from './components/FormComponents/Select/SearchableSelect';
8
10
  export { TPElementsProvider } from './auth/authContext';
9
11
  export { calculateTotalArrayValueTotal, checkIsDateIsBefore, findMenuHierarchy, getDesiredDate, getFormattedDate, getInitials, getUsernameFromEmail, handleDownloadReactTableDataExcel, lightenColor, } from './utils';
10
12
  export * as Utils from './utils';
@@ -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
@@ -5,6 +5,8 @@ export { default as DeleteField } from './components/DeleteComponent/DeleteField
5
5
  export { default as SessionTimeoutField } from './components/SessionTimeOut/SessionTimeOut.esm.js';
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
+ export { default as GenericPaginatedGrid } from './components/PaginatedGrid/GenericPaginatedGrid.esm.js';
9
+ export { default as SearchableSelect } from './components/FormComponents/Select/SearchableSelect.esm.js';
8
10
  export { TPElementsProvider } from './auth/authContext.esm.js';
9
11
  import * as index$1 from './utils/index.esm.js';
10
12
  export { index$1 as Utils };
@@ -1,4 +1,4 @@
1
- import { __exports as Calendar } from '../../../../../_virtual/index.esm5.js';
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 DateRange } from '../../../../../_virtual/index.esm4.js';
1
+ import { __exports as DateRange } 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 requireCalendar } from '../Calendar/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as DateRangePicker } from '../../../../../_virtual/index.esm6.js';
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 DefinedRange } from '../../../../../_virtual/index.esm7.js';
1
+ import { __exports as DefinedRange } 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 requireStyles } from '../../styles.esm.js';
@@ -11,7 +11,7 @@ export interface TextFieldInputProps {
11
11
  export interface FormSectionPropsItem {
12
12
  name: string;
13
13
  label: string;
14
- inputType: 'text' | 'password' | 'number' | 'select' | 'autocomplete-select' | 'autocomplete-multi-select' | 'single-select-search' | 'datepicker' | 'datetimepicker' | 'multiselect' | 'select-v2' | 'basic-select' | 'decimal' | 'alpha-numerical' | 'yearpicker' | 'dateRangePicker' | 'monthpicker' | 'multiselect' | 'file' | 'multifile' | 'multifile-with-preview' | 'textarea' | 'phoneNumber' | 'pincode' | 'email' | 'toggleSwitch' | 'rich-text-editor' | 'multiEmail' | 'timepicker' | 'checkbox-group' | 'radio-group' | 'checkbox' | 'custom' | 'input-select' | 'date-range-picker' | 'multiselect-table' | '';
14
+ inputType: 'text' | 'password' | 'number' | 'select' | 'autocomplete-select' | 'autocomplete-multi-select' | 'single-select-search' | 'datepicker' | 'datetimepicker' | 'multiselect' | 'select-v2' | 'basic-select' | 'searchable-select' | 'decimal' | 'alpha-numerical' | 'yearpicker' | 'dateRangePicker' | 'monthpicker' | 'multiselect' | 'file' | 'multifile' | 'multifile-with-preview' | 'textarea' | 'phoneNumber' | 'pincode' | 'email' | 'toggleSwitch' | 'rich-text-editor' | 'multiEmail' | 'timepicker' | 'checkbox-group' | 'radio-group' | 'checkbox' | 'custom' | 'input-select' | 'date-range-picker' | 'multiselect-table' | '';
15
15
  options?: OptionsProps[];
16
16
  required?: boolean;
17
17
  errorMessage?: string;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Call this hook at the top of any component that renders a `<DateRange />` calendar
3
+ * from `react-date-range`. The styles are injected once into `document.head` and
4
+ * never removed (the injection is idempotent — safe to call from multiple components).
5
+ *
6
+ * @example
7
+ * const MyCalendarChip = () => {
8
+ * useRdrStyles();
9
+ * return <DateRange ... />;
10
+ * };
11
+ */
12
+ export declare function useRdrStyles(): void;
@@ -0,0 +1,180 @@
1
+ import { useEffect } from 'react';
2
+
3
+ /**
4
+ * react-date-range CSS injected as a JavaScript string — NOT as a CSS import.
5
+ *
6
+ * WHY THIS FILE EXISTS
7
+ * --------------------
8
+ * Importing `react-date-range/dist/styles.css` and `theme/default.css` directly
9
+ * in the component source causes rollup-plugin-postcss (extract: true) to bundle
10
+ * those rules into the library's extracted `dist/index.css`. When a consumer
11
+ * app imports that CSS file they get the react-date-range rules applied globally,
12
+ * which can interfere with the consumer's own MUI dropdowns and date-pickers.
13
+ *
14
+ * Instead we ship the CSS as a JavaScript string and inject a single <style> tag
15
+ * the first time any DateRange calendar is rendered. This means:
16
+ * • The CSS is NOT in the extracted CSS bundle.
17
+ * • The CSS IS present at runtime (injected when the component mounts).
18
+ * • The CSS only affects elements with react-date-range's own `.rdr*` class names,
19
+ * so it cannot conflict with MUI or any other library.
20
+ *
21
+ * USAGE
22
+ * -----
23
+ * Call `useRdrStyles()` at the top of any component that renders <DateRange />.
24
+ * The injection is idempotent — subsequent calls are no-ops.
25
+ */
26
+ const STYLE_ID = 'tp-rdr-styles';
27
+ /* ─── Combined CSS from react-date-range ──────────────────────────────────── */
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}
145
+ `;
146
+ /* ─── Singleton injection ─────────────────────────────────────────────────── */
147
+ let _injected = false;
148
+ function injectRdrStyles() {
149
+ if (_injected)
150
+ return;
151
+ if (typeof document === 'undefined')
152
+ return;
153
+ if (document.getElementById(STYLE_ID)) {
154
+ _injected = true;
155
+ return;
156
+ }
157
+ const style = document.createElement('style');
158
+ style.id = STYLE_ID;
159
+ style.textContent = RDR_CSS;
160
+ document.head.appendChild(style);
161
+ _injected = true;
162
+ }
163
+ /**
164
+ * Call this hook at the top of any component that renders a `<DateRange />` calendar
165
+ * from `react-date-range`. The styles are injected once into `document.head` and
166
+ * never removed (the injection is idempotent — safe to call from multiple components).
167
+ *
168
+ * @example
169
+ * const MyCalendarChip = () => {
170
+ * useRdrStyles();
171
+ * return <DateRange ... />;
172
+ * };
173
+ */
174
+ function useRdrStyles() {
175
+ useEffect(() => {
176
+ injectRdrStyles();
177
+ }, []);
178
+ }
179
+
180
+ export { useRdrStyles };