@pagamio/frontend-commons-lib 0.8.357 → 0.8.359
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/lib/components/ui/DateRangePickerWithPresets.js +12 -1
- package/lib/dashboard-visuals/v2/components/DashboardChartRow.js +1 -1
- package/lib/pagamio-table/data-table/ExportButton.d.ts +8 -1
- package/lib/pagamio-table/data-table/ExportButton.js +21 -2
- package/lib/pagamio-table/data-table/index.js +1 -1
- package/lib/pagamio-table/data-table/types.d.ts +23 -0
- package/lib/shared/hooks/usePagamioTable.js +8 -0
- package/lib/styles.css +78 -0
- package/package.json +1 -1
|
@@ -11,6 +11,12 @@ import { Popover, PopoverContent, PopoverTrigger } from './Popover';
|
|
|
11
11
|
// =============================================================================
|
|
12
12
|
// PRESET DEFINITIONS (used for display text + preset detection)
|
|
13
13
|
// =============================================================================
|
|
14
|
+
// "All Time" is intentionally not in PRESET_RANGES because it has no concrete
|
|
15
|
+
// date range — it represents the absence of a date filter. It is surfaced in
|
|
16
|
+
// the trigger label and the picker treats `selectedPreset === 'all_time'` as
|
|
17
|
+
// "no value", letting consumers pass empty startDate/endDate to the backend.
|
|
18
|
+
const ALL_TIME_PRESET_VALUE = 'all_time';
|
|
19
|
+
const ALL_TIME_PRESET_LABEL = 'All Time';
|
|
14
20
|
const PRESET_RANGES = [
|
|
15
21
|
{
|
|
16
22
|
label: 'Today',
|
|
@@ -113,6 +119,9 @@ const DateRangePickerWithPresets = ({ value, onChange, selectedPreset = 'last_7_
|
|
|
113
119
|
}
|
|
114
120
|
return format(value.from, dateFormat);
|
|
115
121
|
}
|
|
122
|
+
if (selectedPreset === ALL_TIME_PRESET_VALUE) {
|
|
123
|
+
return ALL_TIME_PRESET_LABEL;
|
|
124
|
+
}
|
|
116
125
|
if (selectedPreset && selectedPreset !== 'custom') {
|
|
117
126
|
const match = PRESET_RANGES.find((p) => p.value === selectedPreset);
|
|
118
127
|
if (match)
|
|
@@ -139,7 +148,9 @@ const DateRangePickerWithPresets = ({ value, onChange, selectedPreset = 'last_7_
|
|
|
139
148
|
e.stopPropagation();
|
|
140
149
|
onChange?.(undefined, undefined);
|
|
141
150
|
};
|
|
142
|
-
return (_jsxs(Popover, { open: isOpen, onOpenChange: setIsOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", disabled: disabled, className: cn('w-auto justify-start text-left font-normal', !value && 'text-muted-foreground', className), children: [_jsx(CalendarIcon, { className: "mr-2 h-4 w-4" }), _jsx("span", { children: displayText }), showClearButton && value?.from && (_jsx(X, { className: "ml-2 h-4 w-4 opacity-50 hover:opacity-100 cursor-pointer", onClick: handleClear }))] }) }),
|
|
151
|
+
return (_jsxs(Popover, { open: isOpen, onOpenChange: setIsOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", disabled: disabled, className: cn('w-auto justify-start text-left font-normal', !value && 'text-muted-foreground', className), children: [_jsx(CalendarIcon, { className: "mr-2 h-4 w-4" }), _jsx("span", { children: displayText }), showClearButton && value?.from && (_jsx(X, { className: "ml-2 h-4 w-4 opacity-50 hover:opacity-100 cursor-pointer", onClick: handleClear }))] }) }), _jsxs(PopoverContent, { className: "w-auto p-0 bg-popover text-popover-foreground border border-border shadow-lg", align: "start", sideOffset: 8, children: [_jsx("button", { type: "button", onClick: () => onChange?.(undefined, ALL_TIME_PRESET_VALUE), className: cn('w-full border-b border-border px-4 py-3 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground', selectedPreset === ALL_TIME_PRESET_VALUE && !value?.from
|
|
152
|
+
? 'bg-accent font-semibold text-accent-foreground'
|
|
153
|
+
: 'text-popover-foreground'), children: ALL_TIME_PRESET_LABEL }), _jsx(DateRangePicker, { ranges: [selectionRange], onChange: handleRangeChange, moveRangeOnFirstSelection: false, months: numberOfMonths, direction: "horizontal", showDateDisplay: false, showPreview: true, minDate: minDate, maxDate: maxDate, rangeColors: rangeColors, staticRanges: staticRanges, inputRanges: [] })] })] }));
|
|
143
154
|
};
|
|
144
155
|
DateRangePickerWithPresets.displayName = 'DateRangePickerWithPresets';
|
|
145
156
|
export default DateRangePickerWithPresets;
|
|
@@ -80,7 +80,7 @@ const ChartRenderer = ({ config, loading }) => {
|
|
|
80
80
|
case 'heatmap': {
|
|
81
81
|
// Heatmap expects series: { name, data: { x, y }[] }[]
|
|
82
82
|
const data = config.data;
|
|
83
|
-
return (_jsx(DashboardCard, { title: config.title, subtitle: config.subtitle, actions: config.action, footer: config.footer, className: config.cardClassName, children: _jsx(HeatmapChartV2, { series: data.series, height: chartHeight, colors: chartColors, className: config.chartClassName }) }));
|
|
83
|
+
return (_jsx(DashboardCard, { title: config.title, subtitle: config.subtitle, actions: config.action, footer: config.footer, className: config.cardClassName, children: _jsx(HeatmapChartV2, { series: data.series, height: chartHeight, colors: chartColors, options: config.options, className: config.chartClassName }) }));
|
|
84
84
|
}
|
|
85
85
|
default:
|
|
86
86
|
return (_jsx(DashboardCard, { title: config.title, subtitle: config.subtitle, className: config.cardClassName, children: _jsxs("div", { className: "flex items-center justify-center text-muted-foreground", style: { height: chartHeight }, children: ["Unsupported chart type: ", config.type] }) }));
|
|
@@ -52,10 +52,17 @@ type ExportDropdownProps<T extends Record<string, any>> = {
|
|
|
52
52
|
csvOptions?: CsvExportOptions;
|
|
53
53
|
exportAll?: boolean;
|
|
54
54
|
fetchData?: (params?: Record<string, string>, onProgress?: (fetched: number, total: number) => void) => Promise<T[]>;
|
|
55
|
+
asyncExport?: {
|
|
56
|
+
threshold: number;
|
|
57
|
+
totalRows: number;
|
|
58
|
+
requestExport: (format: 'csv' | 'xlsx' | 'pdf') => Promise<void>;
|
|
59
|
+
onQueued?: (message: string) => void;
|
|
60
|
+
onError?: (error: Error) => void;
|
|
61
|
+
};
|
|
55
62
|
enableEmailExport?: boolean;
|
|
56
63
|
emailExportApiUrl?: string;
|
|
57
64
|
onEmailExportSuccess?: (message: string) => void;
|
|
58
65
|
onEmailExportError?: (error: Error) => void;
|
|
59
66
|
};
|
|
60
|
-
declare const ExportDropdown: <T extends Record<string, any>>({ data, columns, containerClassName, buttonClassName, extraOptions, pdfOptions, xlsxOptions, csvOptions, exportAll, fetchData, enableEmailExport, emailExportApiUrl, onEmailExportSuccess, onEmailExportError, }: ExportDropdownProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
67
|
+
declare const ExportDropdown: <T extends Record<string, any>>({ data, columns, containerClassName, buttonClassName, extraOptions, pdfOptions, xlsxOptions, csvOptions, exportAll, fetchData, asyncExport, enableEmailExport, emailExportApiUrl, onEmailExportSuccess, onEmailExportError, }: ExportDropdownProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
61
68
|
export default ExportDropdown;
|
|
@@ -5,7 +5,7 @@ import { HiMail } from 'react-icons/hi';
|
|
|
5
5
|
import { useEffect, useRef, useState } from 'react';
|
|
6
6
|
import { Button, Modal, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../components';
|
|
7
7
|
import { exportToCsv, exportToPdf, exportToXlsx, generateExportAsFile, sendExportEmail } from './exportUtils';
|
|
8
|
-
const ExportDropdown = ({ data, columns, containerClassName, buttonClassName, extraOptions = [], pdfOptions, xlsxOptions, csvOptions, exportAll = false, fetchData, enableEmailExport = false, emailExportApiUrl, onEmailExportSuccess, onEmailExportError, }) => {
|
|
8
|
+
const ExportDropdown = ({ data, columns, containerClassName, buttonClassName, extraOptions = [], pdfOptions, xlsxOptions, csvOptions, exportAll = false, fetchData, asyncExport, enableEmailExport = false, emailExportApiUrl, onEmailExportSuccess, onEmailExportError, }) => {
|
|
9
9
|
const [exportType, setExportType] = useState(null);
|
|
10
10
|
const [excludedColumns, setExcludedColumns] = useState(['action']);
|
|
11
11
|
const [isExporting, setIsExporting] = useState(false);
|
|
@@ -114,11 +114,28 @@ const ExportDropdown = ({ data, columns, containerClassName, buttonClassName, ex
|
|
|
114
114
|
setPendingEmailFormat(null);
|
|
115
115
|
setIsExporting(false);
|
|
116
116
|
};
|
|
117
|
+
// When exporting all and the dataset is too large to pull into the browser,
|
|
118
|
+
// hand off to the async backend job instead of paging through it client-side.
|
|
119
|
+
const shouldQueueAsync = exportAllData && !!asyncExport && asyncExport.totalRows > asyncExport.threshold;
|
|
117
120
|
const handleContinue = async () => {
|
|
118
121
|
const includedColumns = getIncludedColumns();
|
|
119
122
|
setIsExporting(true);
|
|
120
123
|
setExportProgress(null);
|
|
121
124
|
try {
|
|
125
|
+
if (shouldQueueAsync && asyncExport) {
|
|
126
|
+
// Async path: server generates the file off the request path and
|
|
127
|
+
// delivers it via export history / email. Nothing to render here.
|
|
128
|
+
const format = (isEmailExport ? emailFormat : exportType);
|
|
129
|
+
try {
|
|
130
|
+
await asyncExport.requestExport(format);
|
|
131
|
+
asyncExport.onQueued?.('Your export is being prepared. It will appear in export history when ready.');
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
asyncExport.onError?.(err instanceof Error ? err : new Error('Export request failed'));
|
|
135
|
+
}
|
|
136
|
+
setExportType(null);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
122
139
|
const exportData = exportAllData && fetchData
|
|
123
140
|
? await fetchData({ exportAll: 'true' }, (fetched, total) => setExportProgress({ fetched, total }))
|
|
124
141
|
: data;
|
|
@@ -162,7 +179,9 @@ const ExportDropdown = ({ data, columns, containerClassName, buttonClassName, ex
|
|
|
162
179
|
};
|
|
163
180
|
// Show popover when exportType is set and Select is closed
|
|
164
181
|
const popoverOpened = exportType !== null && !selectOpen;
|
|
165
|
-
return (_jsxs("div", { className: `w-40 ${containerClassName ?? ''}`, children: [_jsxs(Select, { value: exportType ?? 'none', open: selectOpen, onOpenChange: setSelectOpen, onValueChange: (value) => handleExportChange(value === 'none' ? null : value), children: [_jsx(SelectTrigger, { className: `w-full ${buttonClassName ?? ''}`, children: _jsx(SelectValue, { placeholder: "Export Data" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "none", children: _jsx("span", { className: "text-muted-foreground", children: "Export Data As" }) }, "reset"), exportOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))), extraOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value)))] })] }, "export-dropdown"), popoverOpened && (_jsxs("div", { ref: popoverRef, className: "mt-2 bg-background rounded-md shadow-lg p-4 z-50 absolute w-45", children: [_jsx("div", { className: "text-sm text-muted-foreground pb-3", children: "Uncheck to exclude column from export" }), _jsxs("div", { className: "mb-4 p-3 bg-muted rounded-md", children: [_jsxs("div", { className: "flex items-center gap-x-2", children: [_jsx(Checkbox, { id: "export-all-data", checked: exportAllData, onChange: (event) => setExportAllData(event.currentTarget.checked), className: "checked:!bg-primary checked:!border-primary" }), _jsx(Label, { htmlFor: "export-all-data", className: "text-sm font-medium", children: "Export all data" })] }), _jsx("p", { className: "text-xs text-muted-foreground mt-1 ml-6", children:
|
|
182
|
+
return (_jsxs("div", { className: `w-40 ${containerClassName ?? ''}`, children: [_jsxs(Select, { value: exportType ?? 'none', open: selectOpen, onOpenChange: setSelectOpen, onValueChange: (value) => handleExportChange(value === 'none' ? null : value), children: [_jsx(SelectTrigger, { className: `w-full ${buttonClassName ?? ''}`, children: _jsx(SelectValue, { placeholder: "Export Data" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "none", children: _jsx("span", { className: "text-muted-foreground", children: "Export Data As" }) }, "reset"), exportOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))), extraOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value)))] })] }, "export-dropdown"), popoverOpened && (_jsxs("div", { ref: popoverRef, className: "mt-2 bg-background rounded-md shadow-lg p-4 z-50 absolute w-45", children: [_jsx("div", { className: "text-sm text-muted-foreground pb-3", children: "Uncheck to exclude column from export" }), _jsxs("div", { className: "mb-4 p-3 bg-muted rounded-md", children: [_jsxs("div", { className: "flex items-center gap-x-2", children: [_jsx(Checkbox, { id: "export-all-data", checked: exportAllData, onChange: (event) => setExportAllData(event.currentTarget.checked), className: "checked:!bg-primary checked:!border-primary" }), _jsx(Label, { htmlFor: "export-all-data", className: "text-sm font-medium", children: "Export all data" })] }), _jsx("p", { className: "text-xs text-muted-foreground mt-1 ml-6", children: shouldQueueAsync
|
|
183
|
+
? 'This dataset is large — it will be prepared in the background and appear in export history.'
|
|
184
|
+
: 'This will fetch all records for the table' })] }), _jsx(Stack, { children: columns.map((col) => {
|
|
166
185
|
if (col.accessorKey !== 'action') {
|
|
167
186
|
return (_jsxs("div", { className: "flex items-center gap-x-2", children: [_jsx(Checkbox, { id: col.header, checked: !excludedColumns.includes(col.accessorKey), onChange: (event) => handleCheckboxChange(col.accessorKey, !event.currentTarget.checked), className: "checked:!bg-primary checked:!border-primary" }), _jsx(Label, { htmlFor: "rememberMe", children: col.header })] }, col.accessorKey));
|
|
168
187
|
}
|
|
@@ -97,7 +97,7 @@ function CustomToolbar({ filters, appliedFilters, onFilterChange, onApply, onCle
|
|
|
97
97
|
else {
|
|
98
98
|
handleFilter(name, value);
|
|
99
99
|
}
|
|
100
|
-
}, handleApplyFilters: onApply, resetFilters: onClearFilters ?? (() => { }), showSearch: searchEnabled, searchQuery: searchQuery, onSearch: onSearch, isNarrow: isNarrow, children: _jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [exportConfig?.enabled && (_jsx(ExportDropdown, { containerClassName: isNarrow ? 'w-full' : undefined, columns: columns, data: data, buttonClassName: "h-10", extraOptions: exportConfig.extraOptions, pdfOptions: exportConfig.pdf, xlsxOptions: exportConfig.xlsx, csvOptions: exportConfig.csv, exportAll: !!exportConfig.fetchAllData, fetchData: exportConfig.fetchAllData, enableEmailExport: !!exportConfig.email, emailExportApiUrl: exportConfig.email?.apiUrl, onEmailExportSuccess: exportConfig.email?.onSuccess, onEmailExportError: exportConfig.email?.onError })), addButton &&
|
|
100
|
+
}, handleApplyFilters: onApply, resetFilters: onClearFilters ?? (() => { }), showSearch: searchEnabled, searchQuery: searchQuery, onSearch: onSearch, isNarrow: isNarrow, children: _jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [exportConfig?.enabled && (_jsx(ExportDropdown, { containerClassName: isNarrow ? 'w-full' : undefined, columns: columns, data: data, buttonClassName: "h-10", extraOptions: exportConfig.extraOptions, pdfOptions: exportConfig.pdf, xlsxOptions: exportConfig.xlsx, csvOptions: exportConfig.csv, exportAll: !!exportConfig.fetchAllData, fetchData: exportConfig.fetchAllData, asyncExport: exportConfig.asyncExport, enableEmailExport: !!exportConfig.email, emailExportApiUrl: exportConfig.email?.apiUrl, onEmailExportSuccess: exportConfig.email?.onSuccess, onEmailExportError: exportConfig.email?.onError })), addButton &&
|
|
101
101
|
(typeof addButton === 'boolean' ? (_jsx(IconButton, { onClick: onAdd ?? (() => { }), icon: HiPlusSm, label: "add-new-entry", className: cn('items-center text-nowrap', isNarrow ? 'w-full' : undefined), children: addText ?? 'Add New Entry' })) : (addButton))] }) }));
|
|
102
102
|
}
|
|
103
103
|
// ─── PagamioTable Component ──────────────────────────────────────────
|
|
@@ -95,6 +95,29 @@ export interface ExportConfig<T extends Record<string, any>> {
|
|
|
95
95
|
onSuccess?: (message: string) => void;
|
|
96
96
|
onError?: (error: Error) => void;
|
|
97
97
|
};
|
|
98
|
+
/**
|
|
99
|
+
* Async (queued) export for datasets too large to page through and render in
|
|
100
|
+
* the browser. When "Export all data" is checked and `totalRows > threshold`,
|
|
101
|
+
* the export button calls `requestExport(format)` instead of fetching the
|
|
102
|
+
* whole set client-side — the backend generates the file off the request path
|
|
103
|
+
* and delivers it via export history / email.
|
|
104
|
+
*
|
|
105
|
+
* `usePagamioTable` auto-wires `totalRows` from the table's row count; the
|
|
106
|
+
* consumer supplies `threshold` and `requestExport` (which POSTs to
|
|
107
|
+
* `/exports` with its `resourceKey` + current filters).
|
|
108
|
+
*/
|
|
109
|
+
asyncExport?: {
|
|
110
|
+
/** Row count above which export is queued instead of run client-side. */
|
|
111
|
+
threshold: number;
|
|
112
|
+
/** Current total server rows (auto-wired by the hook). */
|
|
113
|
+
totalRows: number;
|
|
114
|
+
/** Queue a server-side export of the full dataset in the chosen format. */
|
|
115
|
+
requestExport: (format: 'csv' | 'xlsx' | 'pdf') => Promise<void>;
|
|
116
|
+
/** Called after a successful queue request (e.g. to toast the user). */
|
|
117
|
+
onQueued?: (message: string) => void;
|
|
118
|
+
/** Called if the queue request fails. */
|
|
119
|
+
onError?: (error: Error) => void;
|
|
120
|
+
};
|
|
98
121
|
}
|
|
99
122
|
export interface ToolbarConfig<T extends Record<string, any>> {
|
|
100
123
|
filters?: BaseFilter[];
|
|
@@ -369,6 +369,14 @@ export const usePagamioTable = ({ queryKey, queryFn, enabled: queryEnabled = tru
|
|
|
369
369
|
export: {
|
|
370
370
|
...toolbar.export,
|
|
371
371
|
fetchAllData: toolbar.export.fetchAllData ?? fetchAllPages,
|
|
372
|
+
// Keep the async-export row count in sync with the live total so
|
|
373
|
+
// the consumer only has to supply `threshold` + `requestExport`.
|
|
374
|
+
...(toolbar.export.asyncExport && {
|
|
375
|
+
asyncExport: {
|
|
376
|
+
...toolbar.export.asyncExport,
|
|
377
|
+
totalRows: totalItems,
|
|
378
|
+
},
|
|
379
|
+
}),
|
|
372
380
|
},
|
|
373
381
|
}),
|
|
374
382
|
},
|
package/lib/styles.css
CHANGED
|
@@ -3936,6 +3936,84 @@ video {
|
|
|
3936
3936
|
width: auto !important;
|
|
3937
3937
|
min-width: 0 !important;
|
|
3938
3938
|
}
|
|
3939
|
+
|
|
3940
|
+
/* react-date-range ships a light-only theme. Re-skin its surfaces with our
|
|
3941
|
+
* popover / muted / border tokens so the date-range picker matches dark mode.
|
|
3942
|
+
* Selection highlight stays untouched — the component already drives that
|
|
3943
|
+
* via the `rangeColors` prop pulled from `--primary` at runtime.
|
|
3944
|
+
*/
|
|
3945
|
+
.dark .rdrCalendarWrapper,
|
|
3946
|
+
.dark .rdrDateRangeWrapper,
|
|
3947
|
+
.dark .rdrDefinedRangesWrapper {
|
|
3948
|
+
background: hsl(var(--popover)) !important;
|
|
3949
|
+
color: hsl(var(--popover-foreground)) !important;
|
|
3950
|
+
}
|
|
3951
|
+
.dark .rdrDefinedRangesWrapper {
|
|
3952
|
+
border-right: 1px solid hsl(var(--border)) !important;
|
|
3953
|
+
}
|
|
3954
|
+
.dark .rdrStaticRanges {
|
|
3955
|
+
background: transparent !important;
|
|
3956
|
+
}
|
|
3957
|
+
.dark .rdrStaticRange {
|
|
3958
|
+
background: transparent !important;
|
|
3959
|
+
border-bottom: 1px solid hsl(var(--border)) !important;
|
|
3960
|
+
}
|
|
3961
|
+
.dark .rdrStaticRange:hover .rdrStaticRangeLabel,
|
|
3962
|
+
.dark .rdrStaticRange:focus .rdrStaticRangeLabel {
|
|
3963
|
+
background: hsl(var(--accent)) !important;
|
|
3964
|
+
color: hsl(var(--accent-foreground)) !important;
|
|
3965
|
+
}
|
|
3966
|
+
.dark .rdrStaticRangeLabel {
|
|
3967
|
+
color: hsl(var(--popover-foreground)) !important;
|
|
3968
|
+
}
|
|
3969
|
+
.dark .rdrStaticRangeSelected .rdrStaticRangeLabel {
|
|
3970
|
+
color: hsl(var(--primary)) !important;
|
|
3971
|
+
font-weight: 600;
|
|
3972
|
+
}
|
|
3973
|
+
.dark .rdrMonthAndYearWrapper,
|
|
3974
|
+
.dark .rdrMonth {
|
|
3975
|
+
background: transparent !important;
|
|
3976
|
+
color: hsl(var(--popover-foreground)) !important;
|
|
3977
|
+
}
|
|
3978
|
+
.dark .rdrMonthName,
|
|
3979
|
+
.dark .rdrWeekDay {
|
|
3980
|
+
color: hsl(var(--muted-foreground)) !important;
|
|
3981
|
+
}
|
|
3982
|
+
.dark .rdrMonthAndYearPickers select {
|
|
3983
|
+
color: hsl(var(--popover-foreground)) !important;
|
|
3984
|
+
background-color: transparent !important;
|
|
3985
|
+
}
|
|
3986
|
+
.dark .rdrMonthAndYearPickers select:hover {
|
|
3987
|
+
background-color: hsl(var(--accent)) !important;
|
|
3988
|
+
}
|
|
3989
|
+
.dark .rdrNextPrevButton {
|
|
3990
|
+
background: hsl(var(--muted)) !important;
|
|
3991
|
+
}
|
|
3992
|
+
.dark .rdrNextPrevButton:hover {
|
|
3993
|
+
background: hsl(var(--accent)) !important;
|
|
3994
|
+
}
|
|
3995
|
+
.dark .rdrPprevButton i {
|
|
3996
|
+
border-color: transparent hsl(var(--popover-foreground)) transparent transparent !important;
|
|
3997
|
+
}
|
|
3998
|
+
.dark .rdrNextButton i {
|
|
3999
|
+
border-color: transparent transparent transparent hsl(var(--popover-foreground)) !important;
|
|
4000
|
+
}
|
|
4001
|
+
.dark .rdrDayNumber span {
|
|
4002
|
+
color: hsl(var(--popover-foreground)) !important;
|
|
4003
|
+
}
|
|
4004
|
+
.dark .rdrDayPassive .rdrDayNumber span {
|
|
4005
|
+
color: hsl(var(--muted-foreground)) !important;
|
|
4006
|
+
}
|
|
4007
|
+
.dark .rdrDayDisabled {
|
|
4008
|
+
background: transparent !important;
|
|
4009
|
+
}
|
|
4010
|
+
.dark .rdrDayDisabled .rdrDayNumber span {
|
|
4011
|
+
color: hsl(var(--muted-foreground)) !important;
|
|
4012
|
+
opacity: 0.5;
|
|
4013
|
+
}
|
|
4014
|
+
.dark .rdrDayToday .rdrDayNumber span:after {
|
|
4015
|
+
background: hsl(var(--primary)) !important;
|
|
4016
|
+
}
|
|
3939
4017
|
.file\:-ms-4::file-selector-button {
|
|
3940
4018
|
margin-inline-start: -1rem;
|
|
3941
4019
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pagamio/frontend-commons-lib",
|
|
3
3
|
"description": "Pagamio library for Frontend reusable components like the form engine and table container",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.359",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
7
7
|
"provenance": false
|