react-restyle-components 0.4.62 → 0.4.64
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/src/core-components/src/components/Selection/single-select/single-select.component.d.ts +3 -1
- package/lib/src/core-components/src/components/Selection/single-select/single-select.component.js +6 -5
- package/lib/src/core-components/src/components/Table/Table.js +22 -4
- package/lib/src/core-components/src/components/Table/hooks.d.ts +14 -2
- package/lib/src/core-components/src/components/Table/hooks.js +433 -39
- package/lib/src/core-components/src/components/Table/types.d.ts +139 -1
- package/lib/src/core-components/src/tc.global.css +7 -0
- package/lib/src/core-components/src/tc.module.css +1 -1
- package/package.json +1 -1
package/lib/src/core-components/src/components/Selection/single-select/single-select.component.d.ts
CHANGED
|
@@ -35,6 +35,8 @@ interface SingleSelectProps {
|
|
|
35
35
|
options: Array<any>;
|
|
36
36
|
displayKey?: string;
|
|
37
37
|
displayValue?: string;
|
|
38
|
+
/** Placeholder text when no value is selected. Optional, defaults to "Select" */
|
|
39
|
+
placeholder?: string;
|
|
38
40
|
hasError?: boolean;
|
|
39
41
|
className?: string;
|
|
40
42
|
style?: React.CSSProperties;
|
|
@@ -44,5 +46,5 @@ interface SingleSelectProps {
|
|
|
44
46
|
styles?: SingleSelectStyles;
|
|
45
47
|
onSelect: (item: any) => any;
|
|
46
48
|
}
|
|
47
|
-
export declare const SingleSelect: ({ options, displayKey, displayValue, hasError, className, style, classNames, styles, onSelect, }: SingleSelectProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export declare const SingleSelect: ({ options, displayKey, displayValue, placeholder, hasError, className, style, classNames, styles, onSelect, }: SingleSelectProps) => import("react/jsx-runtime").JSX.Element;
|
|
48
50
|
export {};
|
package/lib/src/core-components/src/components/Selection/single-select/single-select.component.js
CHANGED
|
@@ -3,7 +3,8 @@ import { useState, useEffect, useRef } from 'react';
|
|
|
3
3
|
import { Icon } from '../../Icon/Icon';
|
|
4
4
|
import s from '../../../tc.module.css';
|
|
5
5
|
import { cn } from '../../../utils';
|
|
6
|
-
|
|
6
|
+
const getItemDisplay = (item, displayKey) => displayKey != null ? item[displayKey] : (typeof item === 'object' && item !== null ? JSON.stringify(item) : item);
|
|
7
|
+
export const SingleSelect = ({ options = [], displayKey, displayValue, placeholder = 'Select', hasError = false, className = '', style = {}, classNames = {}, styles = {}, onSelect, }) => {
|
|
7
8
|
const [value, setValue] = useState('');
|
|
8
9
|
const [isListOpen, setIsListOpen] = useState(false);
|
|
9
10
|
// Arrow navigation state
|
|
@@ -38,7 +39,7 @@ export const SingleSelect = ({ options = [], displayKey = 'title', displayValue
|
|
|
38
39
|
}
|
|
39
40
|
else if (e.key === 'Enter' && highlightedIndex >= 0) {
|
|
40
41
|
const item = options[highlightedIndex];
|
|
41
|
-
setValue(item
|
|
42
|
+
setValue(getItemDisplay(item, displayKey));
|
|
42
43
|
onSelect(item);
|
|
43
44
|
setIsListOpen(false);
|
|
44
45
|
}
|
|
@@ -63,7 +64,7 @@ export const SingleSelect = ({ options = [], displayKey = 'title', displayValue
|
|
|
63
64
|
[s['border-gray-300']]: !hasError,
|
|
64
65
|
}, className, classNames.container), ref: wrapperRef, style: { ...style, ...styles.container }, children: [_jsxs("span", { className: cn(s['p-2'], s['shadow-sm'], s['flex'], s['justify-between'], s['items-center'], classNames.trigger), onClick: () => {
|
|
65
66
|
setIsListOpen(!isListOpen);
|
|
66
|
-
}, tabIndex: 0, style: { cursor: 'pointer', ...styles.trigger }, children: [value ? value :
|
|
67
|
+
}, tabIndex: 0, style: { cursor: 'pointer', ...styles.trigger }, children: [value ? value : placeholder, _jsx("span", { className: classNames.icon, style: styles.icon, children: isListOpen ? (_jsx(Icon, { nameIcon: "FaChevronUp", propsIcon: { size: 16 } })) : (_jsx(Icon, { nameIcon: "FaChevronDown", propsIcon: { size: 16 } })) })] }), _jsx("div", { className: cn(s['flex'], { [s['show']]: isListOpen, [s['hidden']]: !isListOpen }, s['relative']), children: options
|
|
67
68
|
? options?.length > 0 && (_jsx("div", { className: cn(s['flex'], s['absolute'], s['rounded-sm'], s['w-full'], classNames.dropdown), style: {
|
|
68
69
|
zIndex: 999,
|
|
69
70
|
top: 'calc(100% + 0.5rem)',
|
|
@@ -79,9 +80,9 @@ export const SingleSelect = ({ options = [], displayKey = 'title', displayValue
|
|
|
79
80
|
background: highlightedIndex === index ? '#e0e7ff' : undefined,
|
|
80
81
|
...styles.listItem,
|
|
81
82
|
}, onClick: () => {
|
|
82
|
-
setValue(item
|
|
83
|
+
setValue(getItemDisplay(item, displayKey));
|
|
83
84
|
onSelect(item);
|
|
84
85
|
setIsListOpen(false);
|
|
85
|
-
}, onMouseEnter: () => setHighlightedIndex(index), children: _jsx("label", { className: cn(s['flex'], s['gap-2']), children: _jsx("span", { className: cn(s['flex'], s['h-4'], classNames.itemText), style: styles.itemText, children: item
|
|
86
|
+
}, onMouseEnter: () => setHighlightedIndex(index), children: _jsx("label", { className: cn(s['flex'], s['gap-2']), children: _jsx("span", { className: cn(s['flex'], s['h-4'], classNames.itemText), style: styles.itemText, children: getItemDisplay(item, displayKey) }) }) }, index))) }) }))
|
|
86
87
|
: null })] }) }));
|
|
87
88
|
};
|
|
@@ -55,7 +55,7 @@ const PrintIcon = () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stro
|
|
|
55
55
|
const ErrorIcon = () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 8v4M12 16h.01", strokeLinecap: "round", strokeLinejoin: "round" })] }));
|
|
56
56
|
const tableFilterCache = new Map();
|
|
57
57
|
export const Table = forwardRef(function TableComponent(props, ref) {
|
|
58
|
-
const { id, data, columns, keyField = '_id', loading = false, loadingIndicator, isLoading = false, pagination = true, paginationConfig, totalSize, remote = true, defaultSort, sort: controlledSort, filterable = false, defaultFilters, filters: controlledFilters, defaultShowFilters = true, showFilters: controlledShowFilters, onShowFiltersChange, showFilterToggle = true, searchable = true, searchPlaceholder = 'Search...', defaultSearchValue = '', searchValue: controlledSearchValue, searchDebounce = 300, rowSelection, expandable, editMode = 'dblclick', showEditIcon = false, onCellEdit, exportable = true, exportFileName = 'table_export', exportFormat = '
|
|
58
|
+
const { id, data, columns, keyField = '_id', loading = false, loadingIndicator, isLoading = false, pagination = true, paginationConfig, totalSize, remote = true, defaultSort, sort: controlledSort, filterable = false, defaultFilters, filters: controlledFilters, defaultShowFilters = true, showFilters: controlledShowFilters, onShowFiltersChange, showFilterToggle = true, searchable = true, searchPlaceholder = 'Search...', defaultSearchValue = '', searchValue: controlledSearchValue, searchDebounce = 300, rowSelection, expandable, editMode = 'dblclick', showEditIcon = false, onCellEdit, exportable = true, exportFileName = 'table_export', exportFormat = 'excel', exportSheetName, exportHeaderStyle, exportExtraSheets, exportSummaryRows, exportCharts, columnToggle = false, isFieldSelector = true, bordered = true, striped = false, hover = true, compact = false, cellPadding, stickyHeader = false, maxHeight, rowClassName, rowStyle, classNames = {}, styles = {}, className, style, emptyText = 'No data available', onChange, onPageChange, onSortChange, onFilterChange, onSearch, onRowClick, onRowDoubleClick, onClearFilters, toolbar, hideToolbar = false, showFooter = false, caption,
|
|
59
59
|
// Quick configuration props
|
|
60
60
|
isDelete = false, isEditModify, isUpdate, isExport, isSelectRow, isSelectSort = false, onSelectSort, selectionActions, selectionHeaderActions, getNonSelectableRows, nonSelectableStyle, isView = false, fileName, hideExcelSheet = false,
|
|
61
61
|
// Quick callbacks
|
|
@@ -943,7 +943,20 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
943
943
|
});
|
|
944
944
|
// Export based on format
|
|
945
945
|
if (exportFormat === 'excel') {
|
|
946
|
-
await exportToExcel(exportData, enhancedColumns, resolvedExportFileName
|
|
946
|
+
await exportToExcel(exportData, enhancedColumns, resolvedExportFileName, {
|
|
947
|
+
sheetName: exportSheetName,
|
|
948
|
+
headerStyle: {
|
|
949
|
+
fill: { color: exportHeaderStyle?.backgroundColor },
|
|
950
|
+
font: {
|
|
951
|
+
color: exportHeaderStyle?.color,
|
|
952
|
+
bold: exportHeaderStyle?.bold,
|
|
953
|
+
size: exportHeaderStyle?.fontSize,
|
|
954
|
+
},
|
|
955
|
+
},
|
|
956
|
+
summaryRows: exportSummaryRows,
|
|
957
|
+
charts: exportCharts,
|
|
958
|
+
extraSheets: exportExtraSheets,
|
|
959
|
+
});
|
|
947
960
|
}
|
|
948
961
|
else {
|
|
949
962
|
exportToCSV(exportData, enhancedColumns, resolvedExportFileName);
|
|
@@ -960,6 +973,11 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
960
973
|
resolvedExportFileName,
|
|
961
974
|
resolvedRemote,
|
|
962
975
|
exportFormat,
|
|
976
|
+
exportSheetName,
|
|
977
|
+
exportHeaderStyle,
|
|
978
|
+
exportSummaryRows,
|
|
979
|
+
exportExtraSheets,
|
|
980
|
+
exportCharts,
|
|
963
981
|
]);
|
|
964
982
|
// Handle checkbox change
|
|
965
983
|
const handleCheckboxChange = useCallback((row, e) => {
|
|
@@ -1396,7 +1414,7 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
1396
1414
|
top: '1rem',
|
|
1397
1415
|
right: '1rem',
|
|
1398
1416
|
zIndex: 20,
|
|
1399
|
-
}, children: _jsx(LoadingAnimateSpin, { width: "2rem", height: "2rem", borderWidth: "4px" }) })), renderToolbar(), _jsx(TableWrapper, { "$maxHeight": maxHeight, "$stickyHeader": stickyHeader, className: classNames.wrapper, style: styles.wrapper, children: _jsxs(StyledTable, { ref: tableRef, "$striped": striped, "$hover": hover, "$compact": compact, role: "grid", children: [caption && _jsx("caption", { className: "sr-only", children: caption }), _jsx(TableHeader, { "$sticky": stickyHeader, className: classNames.header, style: styles.header, children: _jsxs(HeaderRow, { className: classNames.headerRow, style: styles.headerRow, children: [resolvedRowSelection?.mode === 'checkbox' && (_jsx(HeaderCell, { "$align": "center", "$sortable": false, "$compact": compact, "$width": resolvedRowSelection.columnWidth || 40, children: !resolvedRowSelection.hideSelectAll && (_jsx(Checkbox, { checked: isAllSelected, ref: (el) => {
|
|
1417
|
+
}, children: _jsx(LoadingAnimateSpin, { width: "2rem", height: "2rem", borderWidth: "4px" }) })), renderToolbar(), _jsx(TableWrapper, { "$maxHeight": maxHeight, "$stickyHeader": stickyHeader, className: classNames.wrapper, style: styles.wrapper, children: _jsxs(StyledTable, { ref: tableRef, "$striped": striped, "$hover": hover, "$compact": compact, role: "grid", children: [caption && _jsx("caption", { className: "sr-only", children: caption }), _jsx(TableHeader, { "$sticky": stickyHeader, className: classNames.header, style: styles.header, children: _jsxs(HeaderRow, { className: classNames.headerRow, style: styles.headerRow, children: [resolvedRowSelection?.mode === 'checkbox' && (_jsx(HeaderCell, { "$align": "center", "$sortable": false, "$compact": compact, "$width": resolvedRowSelection.columnWidth || 40, "$pinned": "left", children: !resolvedRowSelection.hideSelectAll && (_jsx(Checkbox, { checked: isAllSelected, ref: (el) => {
|
|
1400
1418
|
if (el)
|
|
1401
1419
|
el.indeterminate = isIndeterminate;
|
|
1402
1420
|
}, onChange: handleSelectAllChange })) })), expandable && (_jsx(HeaderCell, { "$align": "center", "$sortable": false, "$compact": compact, "$width": expandable.columnWidth || 40 })), showRowNumber && (_jsx(HeaderCell, { "$align": "center", "$sortable": false, "$compact": compact, "$width": rowNumberWidth, children: rowNumberTitle })), renderColumns.map((column, colIndex) => {
|
|
@@ -1699,7 +1717,7 @@ export const Table = forwardRef(function TableComponent(props, ref) {
|
|
|
1699
1717
|
// Only trigger row-level double click if not handled by a cell
|
|
1700
1718
|
// Cells handle their own double-clicks for editing
|
|
1701
1719
|
onRowDoubleClick?.(row, rowIndex, e);
|
|
1702
|
-
}, role: "row", "aria-selected": rowSelected, children: [resolvedRowSelection?.mode === 'checkbox' && (_jsx(TableCell, { "$align": "center", "$compact": compact, "$padding": cellPadding, "$disabled": isRowDisabled, children: _jsx(Checkbox, { checked: rowSelected, disabled: checkboxProps?.disabled, onChange: (e) => handleCheckboxChange(row, e), onClick: (e) => e.stopPropagation() }) })), expandable && (_jsx(TableCell, { "$align": "center", "$compact": compact, "$padding": cellPadding, "$disabled": isRowDisabled, children: isExpandable && (_jsx(ExpandButton, { "$expanded": rowExpanded, onClick: (e) => handleExpandClick(row, e), children: expandable.expandIcon ? (expandable.expandIcon({
|
|
1720
|
+
}, role: "row", "aria-selected": rowSelected, children: [resolvedRowSelection?.mode === 'checkbox' && (_jsx(TableCell, { "$align": "center", "$compact": compact, "$padding": cellPadding, "$disabled": isRowDisabled, "$pinned": "left", children: _jsx(Checkbox, { checked: rowSelected, disabled: checkboxProps?.disabled, onChange: (e) => handleCheckboxChange(row, e), onClick: (e) => e.stopPropagation() }) })), expandable && (_jsx(TableCell, { "$align": "center", "$compact": compact, "$padding": cellPadding, "$disabled": isRowDisabled, children: isExpandable && (_jsx(ExpandButton, { "$expanded": rowExpanded, onClick: (e) => handleExpandClick(row, e), children: expandable.expandIcon ? (expandable.expandIcon({
|
|
1703
1721
|
expanded: rowExpanded,
|
|
1704
1722
|
row,
|
|
1705
1723
|
onExpand: () => toggleExpand(row),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { TableColumn, TableSortState, SortDirection, TableFilterState } from './types';
|
|
2
|
+
import { TableColumn, TableSortState, SortDirection, TableFilterState, ExportExtraSheet, ExportSummaryRow, ExportChart } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* Debounce function for table
|
|
5
5
|
*/
|
|
@@ -105,7 +105,13 @@ export declare function getNestedValue(obj: any, path: string): any;
|
|
|
105
105
|
*/
|
|
106
106
|
export declare function exportToCSV<T>(data: T[], columns: TableColumn<T>[], fileName: string): void;
|
|
107
107
|
/**
|
|
108
|
-
* Export data to Excel (.xlsx) - loads ExcelJS dynamically from CDN
|
|
108
|
+
* Export data to Excel (.xlsx) - loads ExcelJS dynamically from CDN.
|
|
109
|
+
*
|
|
110
|
+
* Supports:
|
|
111
|
+
* - Custom header styles
|
|
112
|
+
* - Summary rows at the bottom of the main sheet
|
|
113
|
+
* - Extra sheets (Sheet2, Sheet3 …) each with their own data / columns /
|
|
114
|
+
* header styles / summary rows
|
|
109
115
|
*/
|
|
110
116
|
export declare function exportToExcel<T>(data: T[], columns: TableColumn<T>[], fileName: string, options?: {
|
|
111
117
|
sheetName?: string;
|
|
@@ -119,4 +125,10 @@ export declare function exportToExcel<T>(data: T[], columns: TableColumn<T>[], f
|
|
|
119
125
|
color?: string;
|
|
120
126
|
};
|
|
121
127
|
};
|
|
128
|
+
/** Summary rows appended at the bottom of the main sheet */
|
|
129
|
+
summaryRows?: ExportSummaryRow[];
|
|
130
|
+
/** Charts embedded after data + summary rows on the main sheet */
|
|
131
|
+
charts?: ExportChart[];
|
|
132
|
+
/** Extra worksheets to add after the main sheet */
|
|
133
|
+
extraSheets?: ExportExtraSheet[];
|
|
122
134
|
}): Promise<void>;
|
|
@@ -467,55 +467,450 @@ async function loadExcelJS() {
|
|
|
467
467
|
document.head.appendChild(script);
|
|
468
468
|
});
|
|
469
469
|
}
|
|
470
|
+
// ---------------------------------------------------------------------------
|
|
471
|
+
// Internal helpers for ExcelJS styling
|
|
472
|
+
// ---------------------------------------------------------------------------
|
|
473
|
+
// ─── Canvas chart renderer (no external dependencies) ───────────────────────
|
|
474
|
+
const CHART_PALETTE = [
|
|
475
|
+
'#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6',
|
|
476
|
+
'#06b6d4', '#f97316', '#84cc16', '#ec4899', '#6366f1',
|
|
477
|
+
];
|
|
478
|
+
function resolveChartColor(colorProp, index) {
|
|
479
|
+
if (Array.isArray(colorProp)) {
|
|
480
|
+
return colorProp[index % colorProp.length] ?? CHART_PALETTE[index % CHART_PALETTE.length];
|
|
481
|
+
}
|
|
482
|
+
return colorProp ?? CHART_PALETTE[index % CHART_PALETTE.length];
|
|
483
|
+
}
|
|
484
|
+
/** Draw a horizontal legend row at the bottom of the canvas */
|
|
485
|
+
function drawChartLegend(ctx, labels, colors, canvasW, canvasH, legendAreaH) {
|
|
486
|
+
const boxSize = 10;
|
|
487
|
+
const colCount = Math.max(1, Math.floor(canvasW / 130));
|
|
488
|
+
const startX = 16;
|
|
489
|
+
const startY = canvasH - legendAreaH + 8;
|
|
490
|
+
ctx.font = '10px Arial, sans-serif';
|
|
491
|
+
labels.forEach((label, i) => {
|
|
492
|
+
const col = i % colCount;
|
|
493
|
+
const row = Math.floor(i / colCount);
|
|
494
|
+
const x = startX + col * Math.floor(canvasW / colCount);
|
|
495
|
+
const y = startY + row * 16;
|
|
496
|
+
ctx.fillStyle = colors[i] ?? CHART_PALETTE[i % CHART_PALETTE.length];
|
|
497
|
+
ctx.fillRect(x, y, boxSize, boxSize);
|
|
498
|
+
ctx.fillStyle = '#374151';
|
|
499
|
+
ctx.textAlign = 'left';
|
|
500
|
+
const txt = label.length > 15 ? label.slice(0, 14) + '…' : label;
|
|
501
|
+
ctx.fillText(txt, x + boxSize + 4, y + 9);
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
/** Y-axis grid lines + labels shared by bar and line charts */
|
|
505
|
+
function drawYGrid(ctx, ax, ay, aw, ah, maxV) {
|
|
506
|
+
ctx.font = '10px Arial, sans-serif';
|
|
507
|
+
for (let gi = 0; gi <= 5; gi++) {
|
|
508
|
+
const val = (maxV * gi) / 5;
|
|
509
|
+
const y = ay + ah - (val / maxV) * ah;
|
|
510
|
+
ctx.strokeStyle = '#e5e7eb';
|
|
511
|
+
ctx.lineWidth = 1;
|
|
512
|
+
ctx.setLineDash([3, 3]);
|
|
513
|
+
ctx.beginPath();
|
|
514
|
+
ctx.moveTo(ax, y);
|
|
515
|
+
ctx.lineTo(ax + aw, y);
|
|
516
|
+
ctx.stroke();
|
|
517
|
+
ctx.setLineDash([]);
|
|
518
|
+
ctx.fillStyle = '#6b7280';
|
|
519
|
+
ctx.textAlign = 'right';
|
|
520
|
+
const lbl = val >= 1000 ? `${(val / 1000).toFixed(1)}k` : val.toFixed(0);
|
|
521
|
+
ctx.fillText(lbl, ax - 6, y + 4);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
/** Draw the L-shaped axis lines */
|
|
525
|
+
function drawAxes(ctx, ax, ay, aw, ah) {
|
|
526
|
+
ctx.strokeStyle = '#9ca3af';
|
|
527
|
+
ctx.lineWidth = 1.5;
|
|
528
|
+
ctx.setLineDash([]);
|
|
529
|
+
ctx.beginPath();
|
|
530
|
+
ctx.moveTo(ax, ay);
|
|
531
|
+
ctx.lineTo(ax, ay + ah);
|
|
532
|
+
ctx.lineTo(ax + aw, ay + ah);
|
|
533
|
+
ctx.stroke();
|
|
534
|
+
}
|
|
535
|
+
function drawBarChart(ctx, W, H, chart, titleH) {
|
|
536
|
+
const legendH = 28;
|
|
537
|
+
const pd = { top: titleH + 10, right: 24, bottom: legendH + 42, left: 64 };
|
|
538
|
+
const ax = pd.left, ay = pd.top;
|
|
539
|
+
const aw = W - pd.left - pd.right;
|
|
540
|
+
const ah = H - pd.top - pd.bottom;
|
|
541
|
+
const { labels, datasets } = chart;
|
|
542
|
+
if (!labels.length || !datasets.length)
|
|
543
|
+
return;
|
|
544
|
+
const allVals = datasets.flatMap(d => d.values ?? []).filter(isFinite);
|
|
545
|
+
const maxV = Math.max(...allVals, 0) || 1;
|
|
546
|
+
const N = labels.length;
|
|
547
|
+
const D = datasets.length;
|
|
548
|
+
const gW = aw / N;
|
|
549
|
+
const bPad = gW * 0.12;
|
|
550
|
+
const bW = Math.max(4, (gW - bPad * 2) / D);
|
|
551
|
+
drawYGrid(ctx, ax, ay, aw, ah, maxV);
|
|
552
|
+
datasets.forEach((ds, di) => {
|
|
553
|
+
const color = resolveChartColor(ds.backgroundColor ?? ds.color, di);
|
|
554
|
+
(ds.values ?? []).forEach((val, li) => {
|
|
555
|
+
if (li >= N)
|
|
556
|
+
return;
|
|
557
|
+
const bH = Math.max(0, (val / maxV) * ah);
|
|
558
|
+
const x = ax + li * gW + bPad + di * bW;
|
|
559
|
+
const y = ay + ah - bH;
|
|
560
|
+
ctx.fillStyle = color;
|
|
561
|
+
ctx.fillRect(x, y, bW - 2, bH);
|
|
562
|
+
});
|
|
563
|
+
});
|
|
564
|
+
drawAxes(ctx, ax, ay, aw, ah);
|
|
565
|
+
ctx.fillStyle = '#374151';
|
|
566
|
+
ctx.font = '10px Arial, sans-serif';
|
|
567
|
+
ctx.textAlign = 'center';
|
|
568
|
+
labels.forEach((label, li) => {
|
|
569
|
+
const x = ax + li * gW + gW / 2;
|
|
570
|
+
const maxCh = Math.max(3, Math.floor(gW / 7));
|
|
571
|
+
const txt = label.length > maxCh ? label.slice(0, maxCh - 1) + '…' : label;
|
|
572
|
+
ctx.fillText(txt, x, ay + ah + 16);
|
|
573
|
+
});
|
|
574
|
+
drawChartLegend(ctx, datasets.map(d => d.label), datasets.map((ds, i) => resolveChartColor(ds.backgroundColor ?? ds.color, i)), W, H, legendH);
|
|
575
|
+
}
|
|
576
|
+
function drawLineChart(ctx, W, H, chart, titleH) {
|
|
577
|
+
const legendH = 28;
|
|
578
|
+
const pd = { top: titleH + 10, right: 24, bottom: legendH + 42, left: 64 };
|
|
579
|
+
const ax = pd.left, ay = pd.top;
|
|
580
|
+
const aw = W - pd.left - pd.right;
|
|
581
|
+
const ah = H - pd.top - pd.bottom;
|
|
582
|
+
const { labels, datasets } = chart;
|
|
583
|
+
if (!labels.length || !datasets.length)
|
|
584
|
+
return;
|
|
585
|
+
const allVals = datasets.flatMap(d => d.values ?? []).filter(isFinite);
|
|
586
|
+
const maxV = Math.max(...allVals, 0) || 1;
|
|
587
|
+
const N = labels.length;
|
|
588
|
+
const stepX = N > 1 ? aw / (N - 1) : aw;
|
|
589
|
+
drawYGrid(ctx, ax, ay, aw, ah, maxV);
|
|
590
|
+
datasets.forEach((ds, di) => {
|
|
591
|
+
const color = resolveChartColor(ds.color, di);
|
|
592
|
+
const pts = (ds.values ?? []).slice(0, N).map((val, li) => ({
|
|
593
|
+
x: ax + li * stepX,
|
|
594
|
+
y: ay + ah - (Math.max(0, val) / maxV) * ah,
|
|
595
|
+
}));
|
|
596
|
+
if (!pts.length)
|
|
597
|
+
return;
|
|
598
|
+
ctx.strokeStyle = color;
|
|
599
|
+
ctx.lineWidth = 2.5;
|
|
600
|
+
ctx.setLineDash([]);
|
|
601
|
+
ctx.beginPath();
|
|
602
|
+
pts.forEach((pt, i) => (i === 0 ? ctx.moveTo(pt.x, pt.y) : ctx.lineTo(pt.x, pt.y)));
|
|
603
|
+
ctx.stroke();
|
|
604
|
+
pts.forEach(pt => {
|
|
605
|
+
ctx.fillStyle = '#ffffff';
|
|
606
|
+
ctx.beginPath();
|
|
607
|
+
ctx.arc(pt.x, pt.y, 4.5, 0, Math.PI * 2);
|
|
608
|
+
ctx.fill();
|
|
609
|
+
ctx.fillStyle = color;
|
|
610
|
+
ctx.beginPath();
|
|
611
|
+
ctx.arc(pt.x, pt.y, 3, 0, Math.PI * 2);
|
|
612
|
+
ctx.fill();
|
|
613
|
+
});
|
|
614
|
+
});
|
|
615
|
+
drawAxes(ctx, ax, ay, aw, ah);
|
|
616
|
+
ctx.fillStyle = '#374151';
|
|
617
|
+
ctx.font = '10px Arial, sans-serif';
|
|
618
|
+
ctx.textAlign = 'center';
|
|
619
|
+
labels.forEach((label, li) => {
|
|
620
|
+
const x = ax + li * stepX;
|
|
621
|
+
const maxCh = Math.max(3, Math.floor(stepX / 7));
|
|
622
|
+
const txt = label.length > maxCh ? label.slice(0, maxCh - 1) + '…' : label;
|
|
623
|
+
ctx.fillText(txt, x, ay + ah + 16);
|
|
624
|
+
});
|
|
625
|
+
drawChartLegend(ctx, datasets.map(d => d.label), datasets.map((ds, i) => resolveChartColor(ds.color, i)), W, H, legendH);
|
|
626
|
+
}
|
|
627
|
+
function drawPieChart(ctx, W, H, chart, isDoughnut, titleH) {
|
|
628
|
+
const ds = chart.datasets[0];
|
|
629
|
+
const values = ds?.values ?? [];
|
|
630
|
+
const total = values.reduce((s, v) => s + v, 0);
|
|
631
|
+
if (!total)
|
|
632
|
+
return;
|
|
633
|
+
const cols = Math.min(values.length, 3);
|
|
634
|
+
const legendRows = Math.ceil(values.length / cols);
|
|
635
|
+
const legendAreaH = legendRows * 16 + 14;
|
|
636
|
+
const chartAreaH = H - titleH - legendAreaH;
|
|
637
|
+
const cx = W / 2;
|
|
638
|
+
const cy = titleH + chartAreaH / 2;
|
|
639
|
+
const R = Math.min(W * 0.38, chartAreaH * 0.46);
|
|
640
|
+
const innerR = isDoughnut ? R * 0.55 : 0;
|
|
641
|
+
const sliceColors = values.map((_, i) => CHART_PALETTE[i % CHART_PALETTE.length]);
|
|
642
|
+
let startAngle = -Math.PI / 2;
|
|
643
|
+
values.forEach((val, i) => {
|
|
644
|
+
const sweep = (val / total) * 2 * Math.PI;
|
|
645
|
+
ctx.fillStyle = sliceColors[i];
|
|
646
|
+
ctx.beginPath();
|
|
647
|
+
ctx.moveTo(cx, cy);
|
|
648
|
+
ctx.arc(cx, cy, R, startAngle, startAngle + sweep);
|
|
649
|
+
ctx.closePath();
|
|
650
|
+
ctx.fill();
|
|
651
|
+
ctx.strokeStyle = '#ffffff';
|
|
652
|
+
ctx.lineWidth = 2;
|
|
653
|
+
ctx.stroke();
|
|
654
|
+
startAngle += sweep;
|
|
655
|
+
});
|
|
656
|
+
if (isDoughnut) {
|
|
657
|
+
ctx.fillStyle = '#ffffff';
|
|
658
|
+
ctx.beginPath();
|
|
659
|
+
ctx.arc(cx, cy, innerR, 0, 2 * Math.PI);
|
|
660
|
+
ctx.fill();
|
|
661
|
+
ctx.fillStyle = '#374151';
|
|
662
|
+
ctx.textAlign = 'center';
|
|
663
|
+
ctx.font = 'bold 11px Arial, sans-serif';
|
|
664
|
+
ctx.fillText('Total', cx, cy - 5);
|
|
665
|
+
ctx.font = '11px Arial, sans-serif';
|
|
666
|
+
const totLabel = total >= 1000 ? `${(total / 1000).toFixed(1)}k` : String(total);
|
|
667
|
+
ctx.fillText(totLabel, cx, cy + 11);
|
|
668
|
+
}
|
|
669
|
+
// Legend
|
|
670
|
+
const startY = H - legendAreaH + 6;
|
|
671
|
+
const itemW = W / cols;
|
|
672
|
+
values.forEach((val, i) => {
|
|
673
|
+
const col = i % cols;
|
|
674
|
+
const row = Math.floor(i / cols);
|
|
675
|
+
const lx = col * itemW + 16;
|
|
676
|
+
const ly = startY + row * 16;
|
|
677
|
+
const pct = ((val / total) * 100).toFixed(1);
|
|
678
|
+
const rawLabel = chart.labels[i] ?? `Item ${i + 1}`;
|
|
679
|
+
const label = rawLabel.length > 16 ? rawLabel.slice(0, 15) + '…' : rawLabel;
|
|
680
|
+
ctx.fillStyle = sliceColors[i];
|
|
681
|
+
ctx.fillRect(lx, ly, 10, 10);
|
|
682
|
+
ctx.fillStyle = '#374151';
|
|
683
|
+
ctx.textAlign = 'left';
|
|
684
|
+
ctx.font = '10px Arial, sans-serif';
|
|
685
|
+
ctx.fillText(`${label}: ${pct}%`, lx + 14, ly + 9);
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* Render an ExportChart to a PNG base64 string using the browser Canvas API.
|
|
690
|
+
* Returns an empty string if called outside a browser (e.g. SSR).
|
|
691
|
+
*/
|
|
692
|
+
async function generateChartBase64(chart) {
|
|
693
|
+
if (typeof document === 'undefined')
|
|
694
|
+
return '';
|
|
695
|
+
const W = chart.width ?? 600;
|
|
696
|
+
const H = chart.height ?? 350;
|
|
697
|
+
const canvas = document.createElement('canvas');
|
|
698
|
+
canvas.width = W;
|
|
699
|
+
canvas.height = H;
|
|
700
|
+
const ctx = canvas.getContext('2d');
|
|
701
|
+
if (!ctx)
|
|
702
|
+
return '';
|
|
703
|
+
ctx.fillStyle = '#ffffff';
|
|
704
|
+
ctx.fillRect(0, 0, W, H);
|
|
705
|
+
ctx.strokeStyle = '#e5e7eb';
|
|
706
|
+
ctx.lineWidth = 1;
|
|
707
|
+
ctx.strokeRect(0.5, 0.5, W - 1, H - 1);
|
|
708
|
+
let titleH = 10;
|
|
709
|
+
if (chart.title) {
|
|
710
|
+
titleH = 34;
|
|
711
|
+
ctx.fillStyle = '#111827';
|
|
712
|
+
ctx.font = 'bold 14px Arial, sans-serif';
|
|
713
|
+
ctx.textAlign = 'center';
|
|
714
|
+
ctx.fillText(chart.title, W / 2, 22);
|
|
715
|
+
}
|
|
716
|
+
switch (chart.type) {
|
|
717
|
+
case 'bar':
|
|
718
|
+
drawBarChart(ctx, W, H, chart, titleH);
|
|
719
|
+
break;
|
|
720
|
+
case 'line':
|
|
721
|
+
drawLineChart(ctx, W, H, chart, titleH);
|
|
722
|
+
break;
|
|
723
|
+
case 'pie':
|
|
724
|
+
drawPieChart(ctx, W, H, chart, false, titleH);
|
|
725
|
+
break;
|
|
726
|
+
case 'doughnut':
|
|
727
|
+
drawPieChart(ctx, W, H, chart, true, titleH);
|
|
728
|
+
break;
|
|
729
|
+
}
|
|
730
|
+
return canvas.toDataURL('image/png').replace('data:image/png;base64,', '');
|
|
731
|
+
}
|
|
470
732
|
/**
|
|
471
|
-
*
|
|
733
|
+
* Embed ExportChart images into an ExcelJS worksheet below afterRowIndex.
|
|
734
|
+
* Charts are stacked vertically when multiple are provided.
|
|
735
|
+
*/
|
|
736
|
+
async function addChartsToWorksheet(workbook, worksheet, charts, afterRowIndex) {
|
|
737
|
+
let nextRow = afterRowIndex;
|
|
738
|
+
for (const chart of charts) {
|
|
739
|
+
const base64 = await generateChartBase64(chart);
|
|
740
|
+
if (!base64)
|
|
741
|
+
continue;
|
|
742
|
+
const imageId = workbook.addImage({ base64, extension: 'png' });
|
|
743
|
+
const startRow = nextRow + (chart.rowOffset ?? 2);
|
|
744
|
+
const startCol = chart.colOffset ?? 0;
|
|
745
|
+
const rowSpan = chart.rowSpan ?? 20;
|
|
746
|
+
const colSpan = chart.colSpan ?? 8;
|
|
747
|
+
worksheet.addImage(imageId, {
|
|
748
|
+
tl: { col: startCol, row: startRow },
|
|
749
|
+
br: { col: startCol + colSpan, row: startRow + rowSpan },
|
|
750
|
+
editAs: 'oneCell',
|
|
751
|
+
});
|
|
752
|
+
nextRow = startRow + rowSpan;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
function toArgb(hex, fallback) {
|
|
756
|
+
return `FF${(hex ?? fallback).replace('#', '').toUpperCase().padStart(6, '0')}`;
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Write a block of rows (data + column definitions) into an ExcelJS worksheet.
|
|
760
|
+
* Returns the 1-based index of the last written row.
|
|
761
|
+
*/
|
|
762
|
+
function writeSheetData(worksheet, exportColumns, data, headerStyle) {
|
|
763
|
+
const cols = exportColumns.filter((c) => c.csvExport !== false);
|
|
764
|
+
worksheet.columns = cols.map((col) => ({
|
|
765
|
+
header: col.text,
|
|
766
|
+
key: col.dataField,
|
|
767
|
+
width: Math.max(col.text.length + 5, 15),
|
|
768
|
+
}));
|
|
769
|
+
// Style the header row
|
|
770
|
+
const headerRow = worksheet.getRow(1);
|
|
771
|
+
headerRow.font = {
|
|
772
|
+
bold: headerStyle?.font?.bold ?? true,
|
|
773
|
+
size: headerStyle?.font?.size ?? 12,
|
|
774
|
+
color: { argb: toArgb(headerStyle?.font?.color, '#FFFFFF') },
|
|
775
|
+
};
|
|
776
|
+
headerRow.fill = {
|
|
777
|
+
type: 'pattern',
|
|
778
|
+
pattern: 'solid',
|
|
779
|
+
fgColor: { argb: toArgb(headerStyle?.fill?.color, '#6b7280') },
|
|
780
|
+
};
|
|
781
|
+
headerRow.commit();
|
|
782
|
+
// Write data rows
|
|
783
|
+
data.forEach((row, rowIndex) => {
|
|
784
|
+
const rowData = {};
|
|
785
|
+
cols.forEach((col) => {
|
|
786
|
+
const raw = getNestedValue(row, col.dataField);
|
|
787
|
+
const value = col.csvFormatter ? col.csvFormatter(raw, row, rowIndex) : raw;
|
|
788
|
+
if (value === null || value === undefined) {
|
|
789
|
+
rowData[col.dataField] = '';
|
|
790
|
+
}
|
|
791
|
+
else if (typeof value === 'object') {
|
|
792
|
+
rowData[col.dataField] = JSON.stringify(value);
|
|
793
|
+
}
|
|
794
|
+
else {
|
|
795
|
+
rowData[col.dataField] = value;
|
|
796
|
+
}
|
|
797
|
+
});
|
|
798
|
+
worksheet.addRow(rowData);
|
|
799
|
+
});
|
|
800
|
+
// Return index of last data row (1-indexed header + data rows)
|
|
801
|
+
return 1 + data.length;
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Append ExportSummaryRow entries after the last data row of a worksheet.
|
|
805
|
+
*/
|
|
806
|
+
function writeSummaryRows(worksheet, exportColumns, summaryRows, lastDataRowIndex) {
|
|
807
|
+
const cols = exportColumns.filter((c) => c.csvExport !== false);
|
|
808
|
+
summaryRows.forEach((summaryRow, si) => {
|
|
809
|
+
const rowData = {};
|
|
810
|
+
cols.forEach((col) => {
|
|
811
|
+
rowData[col.dataField] = summaryRow.values[col.dataField] ?? '';
|
|
812
|
+
});
|
|
813
|
+
const excelRow = worksheet.addRow(rowData);
|
|
814
|
+
const excelRowIndex = lastDataRowIndex + si + 1;
|
|
815
|
+
// Row-level styling defaults
|
|
816
|
+
const rowBg = summaryRow.backgroundColor;
|
|
817
|
+
const rowColor = summaryRow.color;
|
|
818
|
+
const rowBold = summaryRow.bold;
|
|
819
|
+
const rowFontSize = summaryRow.fontSize;
|
|
820
|
+
cols.forEach((col) => {
|
|
821
|
+
const cell = excelRow.getCell(col.dataField);
|
|
822
|
+
const cellOverride = summaryRow.cellStyles?.[col.dataField];
|
|
823
|
+
// Fill (background)
|
|
824
|
+
const bg = cellOverride?.backgroundColor ?? rowBg;
|
|
825
|
+
if (bg) {
|
|
826
|
+
cell.fill = {
|
|
827
|
+
type: 'pattern',
|
|
828
|
+
pattern: 'solid',
|
|
829
|
+
fgColor: { argb: toArgb(bg, bg) },
|
|
830
|
+
};
|
|
831
|
+
}
|
|
832
|
+
// Font
|
|
833
|
+
const fontColor = cellOverride?.color ?? rowColor;
|
|
834
|
+
const isBold = cellOverride?.bold ?? rowBold;
|
|
835
|
+
const fontSize = cellOverride?.fontSize ?? rowFontSize;
|
|
836
|
+
if (fontColor !== undefined || isBold !== undefined || fontSize !== undefined) {
|
|
837
|
+
cell.font = {
|
|
838
|
+
...(isBold !== undefined ? { bold: isBold } : {}),
|
|
839
|
+
...(fontSize !== undefined ? { size: fontSize } : {}),
|
|
840
|
+
...(fontColor ? { color: { argb: toArgb(fontColor, fontColor) } } : {}),
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
// Number format
|
|
844
|
+
if (cellOverride?.numFmt) {
|
|
845
|
+
cell.numFmt = cellOverride.numFmt;
|
|
846
|
+
}
|
|
847
|
+
// Alignment
|
|
848
|
+
const align = cellOverride?.align;
|
|
849
|
+
if (align) {
|
|
850
|
+
cell.alignment = { horizontal: align };
|
|
851
|
+
}
|
|
852
|
+
});
|
|
853
|
+
excelRow.commit();
|
|
854
|
+
void excelRowIndex; // suppress unused-var warning
|
|
855
|
+
});
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Export data to Excel (.xlsx) - loads ExcelJS dynamically from CDN.
|
|
859
|
+
*
|
|
860
|
+
* Supports:
|
|
861
|
+
* - Custom header styles
|
|
862
|
+
* - Summary rows at the bottom of the main sheet
|
|
863
|
+
* - Extra sheets (Sheet2, Sheet3 …) each with their own data / columns /
|
|
864
|
+
* header styles / summary rows
|
|
472
865
|
*/
|
|
473
866
|
export async function exportToExcel(data, columns, fileName, options) {
|
|
474
867
|
try {
|
|
475
868
|
const ExcelJS = await loadExcelJS();
|
|
476
869
|
const workbook = new ExcelJS.Workbook();
|
|
870
|
+
// -----------------------------------------------------------------------
|
|
871
|
+
// Main sheet
|
|
872
|
+
// -----------------------------------------------------------------------
|
|
477
873
|
const worksheet = workbook.addWorksheet(options?.sheetName || 'Sheet1');
|
|
478
|
-
const
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
width: Math.max(col.text.length + 5, 15),
|
|
484
|
-
}));
|
|
485
|
-
// Style header row
|
|
486
|
-
const headerRow = worksheet.getRow(1);
|
|
487
|
-
headerRow.font = {
|
|
488
|
-
bold: options?.headerStyle?.font?.bold ?? true,
|
|
489
|
-
size: options?.headerStyle?.font?.size ?? 12,
|
|
490
|
-
};
|
|
491
|
-
if (options?.headerStyle?.fill?.color) {
|
|
492
|
-
headerRow.fill = {
|
|
493
|
-
type: 'pattern',
|
|
494
|
-
pattern: 'solid',
|
|
495
|
-
fgColor: { argb: options.headerStyle.fill.color.replace('#', '') },
|
|
496
|
-
};
|
|
874
|
+
const lastDataRow = writeSheetData(worksheet, columns, data, options?.headerStyle);
|
|
875
|
+
let afterMainRow = lastDataRow;
|
|
876
|
+
if (options?.summaryRows?.length) {
|
|
877
|
+
writeSummaryRows(worksheet, columns, options.summaryRows, lastDataRow);
|
|
878
|
+
afterMainRow = lastDataRow + options.summaryRows.length;
|
|
497
879
|
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
880
|
+
if (options?.charts?.length) {
|
|
881
|
+
await addChartsToWorksheet(workbook, worksheet, options.charts, afterMainRow);
|
|
882
|
+
}
|
|
883
|
+
// -----------------------------------------------------------------------
|
|
884
|
+
// Extra sheets (for...of so each async chart render is awaited in order)
|
|
885
|
+
// -----------------------------------------------------------------------
|
|
886
|
+
if (options?.extraSheets?.length) {
|
|
887
|
+
for (const [idx, sheet] of options.extraSheets.entries()) {
|
|
888
|
+
const sheetName = sheet.name || `Sheet${idx + 2}`;
|
|
889
|
+
const extraWs = workbook.addWorksheet(sheetName);
|
|
890
|
+
const extraHeaderStyle = sheet.headerStyle
|
|
891
|
+
? {
|
|
892
|
+
font: {
|
|
893
|
+
bold: sheet.headerStyle.bold,
|
|
894
|
+
color: sheet.headerStyle.color,
|
|
895
|
+
size: sheet.headerStyle.fontSize,
|
|
896
|
+
},
|
|
897
|
+
fill: { color: sheet.headerStyle.backgroundColor },
|
|
898
|
+
}
|
|
899
|
+
: undefined;
|
|
900
|
+
const lastExtra = writeSheetData(extraWs, sheet.columns, sheet.data, extraHeaderStyle);
|
|
901
|
+
let afterExtra = lastExtra;
|
|
902
|
+
if (sheet.summaryRows?.length) {
|
|
903
|
+
writeSummaryRows(extraWs, sheet.columns, sheet.summaryRows, lastExtra);
|
|
904
|
+
afterExtra = lastExtra + sheet.summaryRows.length;
|
|
511
905
|
}
|
|
512
|
-
|
|
513
|
-
|
|
906
|
+
if (sheet.charts?.length) {
|
|
907
|
+
await addChartsToWorksheet(workbook, extraWs, sheet.charts, afterExtra);
|
|
514
908
|
}
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
// -----------------------------------------------------------------------
|
|
518
912
|
// Generate and download
|
|
913
|
+
// -----------------------------------------------------------------------
|
|
519
914
|
const buffer = await workbook.xlsx.writeBuffer();
|
|
520
915
|
const blob = new Blob([buffer], {
|
|
521
916
|
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
@@ -529,7 +924,6 @@ export async function exportToExcel(data, columns, fileName, options) {
|
|
|
529
924
|
}
|
|
530
925
|
catch (error) {
|
|
531
926
|
console.error('Excel export failed:', error);
|
|
532
|
-
// Fallback to CSV if Excel export fails
|
|
533
927
|
console.warn('Falling back to CSV export');
|
|
534
928
|
exportToCSV(data, columns, fileName);
|
|
535
929
|
}
|
|
@@ -1,6 +1,111 @@
|
|
|
1
1
|
import React, { CSSProperties } from 'react';
|
|
2
2
|
/** Sort direction */
|
|
3
3
|
export type SortDirection = 'asc' | 'desc' | null;
|
|
4
|
+
/**
|
|
5
|
+
* A summary row appended at the bottom of the main exported sheet.
|
|
6
|
+
* Values are keyed by column dataField. Optional per-cell and row-level
|
|
7
|
+
* style overrides are passed straight to ExcelJS.
|
|
8
|
+
*/
|
|
9
|
+
export interface ExportSummaryRow {
|
|
10
|
+
/** Cell values keyed by column dataField */
|
|
11
|
+
values: Record<string, any>;
|
|
12
|
+
/** Row-level fill color (hex, e.g. '#1e40af') */
|
|
13
|
+
backgroundColor?: string;
|
|
14
|
+
/** Row-level text color (hex) */
|
|
15
|
+
color?: string;
|
|
16
|
+
/** Row-level bold override */
|
|
17
|
+
bold?: boolean;
|
|
18
|
+
/** Row-level font size override */
|
|
19
|
+
fontSize?: number;
|
|
20
|
+
/** Per-cell style overrides, keyed by dataField */
|
|
21
|
+
cellStyles?: Record<string, {
|
|
22
|
+
backgroundColor?: string;
|
|
23
|
+
color?: string;
|
|
24
|
+
bold?: boolean;
|
|
25
|
+
fontSize?: number;
|
|
26
|
+
/** ExcelJS numFmt string, e.g. '#,##0.00' */
|
|
27
|
+
numFmt?: string;
|
|
28
|
+
/** Horizontal alignment */
|
|
29
|
+
align?: 'left' | 'center' | 'right';
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
/** A single data series inside an ExportChart */
|
|
33
|
+
export interface ExportChartDataset {
|
|
34
|
+
/** Legend label for this series */
|
|
35
|
+
label: string;
|
|
36
|
+
/** Numeric values — one per label */
|
|
37
|
+
values: number[];
|
|
38
|
+
/**
|
|
39
|
+
* Line / bar fill colour.
|
|
40
|
+
* Pass a single hex string for a uniform colour, or an array for per-bar /
|
|
41
|
+
* per-slice colours (most useful for pie / doughnut charts).
|
|
42
|
+
*/
|
|
43
|
+
color?: string | string[];
|
|
44
|
+
/** Alias for color — mirrors Chart.js naming */
|
|
45
|
+
backgroundColor?: string | string[];
|
|
46
|
+
}
|
|
47
|
+
export type ExportChartType = 'bar' | 'line' | 'pie' | 'doughnut';
|
|
48
|
+
/**
|
|
49
|
+
* A chart to embed in an exported Excel sheet.
|
|
50
|
+
* Rendered at export time via the browser Canvas 2D API — no extra
|
|
51
|
+
* dependencies are required.
|
|
52
|
+
*/
|
|
53
|
+
export interface ExportChart {
|
|
54
|
+
/** Chart variety */
|
|
55
|
+
type: ExportChartType;
|
|
56
|
+
/** Optional title drawn above the plot area */
|
|
57
|
+
title?: string;
|
|
58
|
+
/** X-axis tick labels (or pie / doughnut slice labels) */
|
|
59
|
+
labels: string[];
|
|
60
|
+
/** One or more data series */
|
|
61
|
+
datasets: ExportChartDataset[];
|
|
62
|
+
/** Canvas render width in pixels (default: 600) */
|
|
63
|
+
width?: number;
|
|
64
|
+
/** Canvas render height in pixels (default: 350) */
|
|
65
|
+
height?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Gap rows between the last data / summary row and the chart top-left.
|
|
68
|
+
* Default: 2
|
|
69
|
+
*/
|
|
70
|
+
rowOffset?: number;
|
|
71
|
+
/** 0-indexed column where the chart's left edge is anchored. Default: 0 */
|
|
72
|
+
colOffset?: number;
|
|
73
|
+
/** Number of Excel columns the chart spans. Default: 8 */
|
|
74
|
+
colSpan?: number;
|
|
75
|
+
/** Number of Excel rows the chart spans. Default: 20 */
|
|
76
|
+
rowSpan?: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* An additional worksheet to append to the exported Excel file at runtime.
|
|
80
|
+
* Sheet2, Sheet3, etc.
|
|
81
|
+
*/
|
|
82
|
+
export interface ExportExtraSheet<T = any> {
|
|
83
|
+
/** Sheet tab name */
|
|
84
|
+
name: string;
|
|
85
|
+
/** Rows of data to write */
|
|
86
|
+
data: T[];
|
|
87
|
+
/** Column definitions (subset of TableColumn) */
|
|
88
|
+
columns: Array<{
|
|
89
|
+
dataField: string;
|
|
90
|
+
text: string;
|
|
91
|
+
csvFormatter?: (cell: any, row: T, rowIndex: number) => string;
|
|
92
|
+
csvExport?: boolean;
|
|
93
|
+
}>;
|
|
94
|
+
/** Optional header style for this sheet */
|
|
95
|
+
headerStyle?: {
|
|
96
|
+
backgroundColor?: string;
|
|
97
|
+
color?: string;
|
|
98
|
+
bold?: boolean;
|
|
99
|
+
fontSize?: number;
|
|
100
|
+
};
|
|
101
|
+
/** Optional summary rows appended at the bottom of this extra sheet */
|
|
102
|
+
summaryRows?: ExportSummaryRow[];
|
|
103
|
+
/**
|
|
104
|
+
* Charts to embed in this sheet after the data table and summary rows.
|
|
105
|
+
* Rendered via the browser Canvas 2D API — bar, line, pie, or doughnut.
|
|
106
|
+
*/
|
|
107
|
+
charts?: ExportChart[];
|
|
108
|
+
}
|
|
4
109
|
/** Filter type */
|
|
5
110
|
export type FilterType = 'text' | 'number' | 'date' | 'dateRange' | 'select' | 'custom';
|
|
6
111
|
/** Row selection mode */
|
|
@@ -390,8 +495,41 @@ export interface TableProps<T = any> {
|
|
|
390
495
|
exportable?: boolean;
|
|
391
496
|
/** Export file name */
|
|
392
497
|
exportFileName?: string;
|
|
393
|
-
/** Export format: '
|
|
498
|
+
/** Export format: 'excel' (default) or 'csv' */
|
|
394
499
|
exportFormat?: 'csv' | 'excel';
|
|
500
|
+
/** Sheet name used when exporting to Excel */
|
|
501
|
+
exportSheetName?: string;
|
|
502
|
+
/**
|
|
503
|
+
* Style applied to the header row of the exported Excel file.
|
|
504
|
+
* Defaults: gray background (#6b7280), white text, bold, size 12.
|
|
505
|
+
*/
|
|
506
|
+
exportHeaderStyle?: {
|
|
507
|
+
/** Header cell background color (hex, e.g. '#1e40af') */
|
|
508
|
+
backgroundColor?: string;
|
|
509
|
+
/** Header cell text color (hex, e.g. '#ffffff') */
|
|
510
|
+
color?: string;
|
|
511
|
+
/** Bold header text (default: true) */
|
|
512
|
+
bold?: boolean;
|
|
513
|
+
/** Header font size (default: 12) */
|
|
514
|
+
fontSize?: number;
|
|
515
|
+
};
|
|
516
|
+
/**
|
|
517
|
+
* Extra worksheets to include in the exported Excel file (Sheet2, Sheet3 …).
|
|
518
|
+
* Each sheet can have its own data, columns, header style, and summary rows.
|
|
519
|
+
* Evaluated at export time so the caller can supply fresh data reactively.
|
|
520
|
+
*/
|
|
521
|
+
exportExtraSheets?: ExportExtraSheet[];
|
|
522
|
+
/**
|
|
523
|
+
* Summary rows appended at the bottom of the main data sheet.
|
|
524
|
+
* Useful for totals, averages, or any other aggregated values.
|
|
525
|
+
* Each row can carry per-cell and row-level style overrides.
|
|
526
|
+
*/
|
|
527
|
+
exportSummaryRows?: ExportSummaryRow[];
|
|
528
|
+
/**
|
|
529
|
+
* Charts to embed in the main exported sheet after data and summary rows.
|
|
530
|
+
* Rendered via the browser Canvas 2D API — bar, line, pie, or doughnut.
|
|
531
|
+
*/
|
|
532
|
+
exportCharts?: ExportChart[];
|
|
395
533
|
/** Enable column toggle */
|
|
396
534
|
columnToggle?: boolean;
|
|
397
535
|
/** Enable Show/Hide Columns (field selector) - controls column visibility panel (default: true) */
|
|
@@ -62,4 +62,11 @@
|
|
|
62
62
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
63
63
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
64
64
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
65
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
66
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
67
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
68
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
69
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
70
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
71
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
|
|
65
72
|
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/.\!filter,.backdrop-blur-sm,.blur,.ring,.ring-2,.shadow,.shadow-inner,body{font-family:Arima Regular;font-size:14px}.dark\:bg-black:is(.dark *),.dark\:border-gray-600:is(.dark *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/fieldset,legend{padding:0}.container{width:100%}@media (min-width:0px){.container{max-width:0}}@media (min-width:20rem){.container{max-width:20rem}}@media (min-width:23.4375rem){.container{max-width:23.4375rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:90rem){.container{max-width:90rem}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-input::-webkit-datetime-edit,.form-input::-webkit-datetime-edit-day-field,.form-input::-webkit-datetime-edit-hour-field,.form-input::-webkit-datetime-edit-meridiem-field,.form-input::-webkit-datetime-edit-millisecond-field,.form-input::-webkit-datetime-edit-minute-field,.form-input::-webkit-datetime-edit-month-field,.form-input::-webkit-datetime-edit-second-field,.form-input::placeholder,.form-input:focus,.form-multiselect,.form-multiselect:focus,.form-select,.form-select:focus,table{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}table:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}table tr:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}select:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.\!visible{visibility:visible!important}.top-1\/2{top:50%}.-translate-x-1\/2,.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.divide-teal-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(240 253 250/var(--tw-divide-opacity,1))}.bg-purple-900\/50{background-color:#581c8780}.p-0\.5{padding:.125rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.\!filter,.blur,.ring,.ring-2,.shadow,.shadow-inner,.backdrop-blur-sm,body{font-family:Arima Regular;font-size:14px}.hover\:bg-white\/20:hover{background-color:#fff3}.dark\:border-gray-600:is(.dark *),.dark\:bg-black:is(.dark *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.dark\:bg-boxdark:is(.dark *){--tw-bg-opacity:1;background-color:rgb(36 48 63/var(--tw-bg-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:text-black:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.dark\:ring-offset-gray-800:is(.dark *){--tw-ring-offset-color:#1f2937}.dark\:hover\:bg-blue-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:focus\:ring-blue-600:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}@font-face{font-family:ArimaRegular;src:url(library/assets/fonts/arima/arima-regular.ttf)}.container{width:100%}@media (min-width:0px){.container{max-width:0}}@media (min-width:20rem){.container{max-width:20rem}}@media (min-width:23.4375rem){.container{max-width:23.4375rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:90rem){.container{max-width:90rem}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-multiselect,.form-select,.form-input:focus,.form-multiselect:focus,.form-select:focus,.form-input::placeholder,.form-input::-webkit-datetime-edit,.form-input::-webkit-datetime-edit-day-field,.form-input::-webkit-datetime-edit-hour-field,.form-input::-webkit-datetime-edit-meridiem-field,.form-input::-webkit-datetime-edit-millisecond-field,.form-input::-webkit-datetime-edit-minute-field,.form-input::-webkit-datetime-edit-month-field,.form-input::-webkit-datetime-edit-second-field,table{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}table:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}table tr:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}select:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.\!visible{visibility:visible!important}.top-1\/2{top:50%}.flex-grow,.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}@keyframes pulse{50%{opacity:.5}}@keyframes spin{to{transform:rotate(1turn)}}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.divide-teal-50>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(240 253 250/var(--tw-divide-opacity,1))}.bg-purple-900\/50{background-color:#581c8780}.p-0\.5{padding:.125rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.shadow,.shadow-inner,.shadow-md,.ring,.ring-2,.blur,.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.backdrop-blur-sm,body{font-family:Arima Regular;font-size:14px}.menu ul{list-style:none;margin:0;padding:0}.menu li{border-bottom:1px solid #ddd;padding:10px}.menu li:last-child{border-bottom:none}.hover\:bg-white\/20:hover{background-color:#fff3}.focus\:ring-0:focus,.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:bg-black:is(.dark *){--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.dark\:bg-boxdark:is(.dark *){--tw-bg-opacity:1;background-color:rgb(36 48 63/var(--tw-bg-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:text-black:is(.dark *){--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.dark\:ring-offset-gray-800:is(.dark *){--tw-ring-offset-color:#1f2937}.dark\:hover\:bg-blue-900:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:focus\:ring-blue-600:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}@media (min-width:0px) and (max-width:767px){}
|
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
* var(--primary), var(--brand-theme-purple), var(--surface), etc.
|
|
6
6
|
*/
|
|
7
7
|
.flex-grow{--tw-translate-x:-50%}.shadow-md{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.focus\:ring-0:focus{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}
|
|
8
|
-
.form-textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.form-textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.form-textarea::placeholder{color:#6b7280;opacity:1}.form-input::-webkit-datetime-edit-fields-wrapper{padding:0}.form-input::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}.form-input::-webkit-datetime-edit{display:inline-flex}.form-input::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}.main{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{inset:0}.left-0{left:0}.right-2{right:.5rem}.right-3{right:.75rem}.top-full{top:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-99{z-index:99}.m-0{margin:0}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-auto{margin-left:auto;margin-right:auto}.my-5{margin-bottom:1.25rem;margin-top:1.25rem}.my-auto{margin-bottom:auto;margin-top:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-auto{height:auto}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.min-h-10{min-height:2.5rem}.w-1{width:.25rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-auto{width:auto}.w-fit{width:-webkit-fit-content;width:fit-content}.w-full{width:100%}.min-w-32{min-width:8rem}.max-w-32{max-width:8rem}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-spin{animation:spin 1s linear infinite}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;appearance:none}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-100px{border-radius:100px}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-b-md{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-none{border-style:none}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity,1))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity,1))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity,1))}.border-red{--tw-border-opacity:1;border-color:rgb(255 0 0/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity,1))}.border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity,1))}.border-transparent{border-color:#0000}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.bg-\[\#007BFF\]{--tw-bg-opacity:1;background-color:rgb(0 123 255/var(--tw-bg-opacity,1))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity,1))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-50{--tw-gradient-from:#eff6ff var(--tw-gradient-from-position);--tw-gradient-to:#eff6ff00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from:#06b6d4 var(--tw-gradient-from-position);--tw-gradient-to:#06b6d400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-green-400{--tw-gradient-from:#4ade80 var(--tw-gradient-from-position);--tw-gradient-to:#4ade8000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from:#6366f1 var(--tw-gradient-from-position);--tw-gradient-to:#6366f100 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from:#faf5ff var(--tw-gradient-from-position);--tw-gradient-to:#faf5ff00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:#a855f700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:#9333ea00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from:#14b8a6 var(--tw-gradient-from-position);--tw-gradient-to:#14b8a600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-violet-50{--tw-gradient-from:#f5f3ff var(--tw-gradient-from-position);--tw-gradient-to:#f5f3ff00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.to-emerald-500{--tw-gradient-to:#10b981 var(--tw-gradient-to-position)}.to-indigo-50{--tw-gradient-to:#eef2ff var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to:#fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to:#ec4899 var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to:#db2777 var(--tw-gradient-to-position)}.to-purple-50{--tw-gradient-to:#faf5ff var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to:#a855f7 var(--tw-gradient-to-position)}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-2{padding-bottom:.5rem}.pr-12{padding-right:3rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-center{text-align:center}.font-arimaRegular{font-family:ArimaRegular}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-4{line-height:1rem}.leading-none{line-height:1}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity,1))}.text-red{--tw-text-opacity:1;color:rgb(255 0 0/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity,1))}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity,1))}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.line-through{-webkit-text-decoration-line:line-through;text-decoration-line:line-through}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-purple-400::placeholder{--tw-placeholder-opacity:1;color:rgb(192 132 252/var(--tw-placeholder-opacity,1))}.accent-indigo-600{accent-color:#4f46e5}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 #0000000d;--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color)}.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity,1))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity,1))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px)}.drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-width{transition-duration:.15s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ps__rail-y{background:none!important}.scrollbar-container{width:97%!important}.dropdown-menu{min-width:3rem}.w-md-editor-show-live{height:800!important}.bg-orange1{background-color:"#EF4444"}.react-pdf__Page__canvas{max-width:100vw!important;min-height:100vh!important}.outer-box{border:2px solid #333;height:400px;overflow:hidden;position:relative;width:300px}.parent-container{background:#f0f0f0;padding:20px;position:relative}.menu{background:#fff;border:1px solid #ccc;box-shadow:0 4px 6px #0000001a;left:0;max-height:200px;overflow-y:auto;position:absolute;top:100%;width:100%}.border-t-2{border-top-width:2px}.border-b-2{border-bottom-width:2px}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.hover\:bg-\[\#007BFF\]:hover{--tw-bg-opacity:1;background-color:rgb(0 123 255/var(--tw-bg-opacity,1))}.hover\:bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.hover\:bg-indigo-50:hover{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.hover\:bg-purple-700:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\:bg-slate-600:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity,1))}.hover\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity,1))}.hover\:bg-violet-100:hover{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity,1))}.hover\:bg-violet-700:hover{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity,1))}.hover\:bg-opacity-10:hover{--tw-bg-opacity:0.1}.hover\:from-indigo-600:hover{--tw-gradient-from:#4f46e5 var(--tw-gradient-from-position);--tw-gradient-to:#4f46e500 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-purple-600:hover{--tw-gradient-to:#9333ea var(--tw-gradient-to-position)}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:ring-pink-500:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity,1))}.focus\:border-indigo-400:focus{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:ring-indigo-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity,1))}.focus\:ring-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(69 76 191/var(--tw-ring-opacity,1))}.focus\:ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity,1))}.focus\:ring-offset-1:focus{--tw-ring-offset-width:1px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.sm\:block{display:block}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}
|
|
8
|
+
.form-textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.form-textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.form-textarea::placeholder{color:#6b7280;opacity:1}.form-input::-webkit-datetime-edit-fields-wrapper{padding:0}.form-input::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}.form-input::-webkit-datetime-edit{display:inline-flex}.form-input::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}.main{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{inset:0}.left-0{left:0}.right-2{right:.5rem}.right-3{right:.75rem}.top-full{top:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-99{z-index:99}.m-0{margin:0}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-auto{margin-left:auto;margin-right:auto}.my-5{margin-bottom:1.25rem;margin-top:1.25rem}.my-auto{margin-bottom:auto;margin-top:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-auto{height:auto}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.min-h-10{min-height:2.5rem}.w-1{width:.25rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-auto{width:auto}.w-fit{width:-webkit-fit-content;width:fit-content}.w-full{width:100%}.min-w-32{min-width:8rem}.max-w-32{max-width:8rem}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-spin{animation:spin 1s linear infinite}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.select-none{-webkit-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;appearance:none}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-100px{border-radius:100px}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-b-md{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-b-xl{border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-none{border-style:none}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity,1))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity,1))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity,1))}.border-red{--tw-border-opacity:1;border-color:rgb(255 0 0/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity,1))}.border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity,1))}.border-transparent{border-color:#0000}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.bg-\[\#007BFF\]{--tw-bg-opacity:1;background-color:rgb(0 123 255/var(--tw-bg-opacity,1))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity,1))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-transparent{background-color:initial}.bg-violet-600{--tw-bg-opacity:1;background-color:rgb(124 58 237/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-blue-50{--tw-gradient-from:#eff6ff var(--tw-gradient-from-position);--tw-gradient-to:#eff6ff00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from:#06b6d4 var(--tw-gradient-from-position);--tw-gradient-to:#06b6d400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-green-400{--tw-gradient-from:#4ade80 var(--tw-gradient-from-position);--tw-gradient-to:#4ade8000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from:#6366f1 var(--tw-gradient-from-position);--tw-gradient-to:#6366f100 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from:#faf5ff var(--tw-gradient-from-position);--tw-gradient-to:#faf5ff00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:#a855f700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:#9333ea00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from:#14b8a6 var(--tw-gradient-from-position);--tw-gradient-to:#14b8a600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-violet-50{--tw-gradient-from:#f5f3ff var(--tw-gradient-from-position);--tw-gradient-to:#f5f3ff00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.to-emerald-500{--tw-gradient-to:#10b981 var(--tw-gradient-to-position)}.to-indigo-50{--tw-gradient-to:#eef2ff var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to:#fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to:#ec4899 var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to:#db2777 var(--tw-gradient-to-position)}.to-purple-50{--tw-gradient-to:#faf5ff var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to:#a855f7 var(--tw-gradient-to-position)}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-2{padding-bottom:.5rem}.pr-12{padding-right:3rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-center{text-align:center}.font-arimaRegular{font-family:ArimaRegular}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-4{line-height:1rem}.leading-none{line-height:1}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity,1))}.text-red{--tw-text-opacity:1;color:rgb(255 0 0/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-teal-500{--tw-text-opacity:1;color:rgb(20 184 166/var(--tw-text-opacity,1))}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity,1))}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.line-through{-webkit-text-decoration-line:line-through;text-decoration-line:line-through}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-purple-400::placeholder{--tw-placeholder-opacity:1;color:rgb(192 132 252/var(--tw-placeholder-opacity,1))}.accent-indigo-600{accent-color:#4f46e5}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 #0000000d;--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color)}.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity,1))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity,1))}.ring-white{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px)}.drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-width{transition-duration:.15s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ps__rail-y{background:none!important}.scrollbar-container{width:97%!important}.dropdown-menu{min-width:3rem}.w-md-editor-show-live{height:800!important}.bg-orange1{background-color:"#EF4444"}.react-pdf__Page__canvas{max-width:100vw!important;min-height:100vh!important}.outer-box{border:2px solid #333;height:400px;overflow:hidden;position:relative;width:300px}.parent-container{background:#f0f0f0;padding:20px;position:relative}.menu{background:#fff;border:1px solid #ccc;box-shadow:0 4px 6px #0000001a;left:0;max-height:200px;overflow-y:auto;position:absolute;top:100%;width:100%}.border-t-2{border-top-width:2px}.border-b-2{border-bottom-width:2px}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.hover\:bg-\[\#007BFF\]:hover{--tw-bg-opacity:1;background-color:rgb(0 123 255/var(--tw-bg-opacity,1))}.hover\:bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-blue-800:hover{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.hover\:bg-emerald-50:hover{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.hover\:bg-indigo-50:hover{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.hover\:bg-purple-700:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\:bg-slate-600:hover{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity,1))}.hover\:bg-teal-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity,1))}.hover\:bg-violet-100:hover{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity,1))}.hover\:bg-violet-700:hover{--tw-bg-opacity:1;background-color:rgb(109 40 217/var(--tw-bg-opacity,1))}.hover\:bg-opacity-10:hover{--tw-bg-opacity:0.1}.hover\:from-indigo-600:hover{--tw-gradient-from:#4f46e5 var(--tw-gradient-from-position);--tw-gradient-to:#4f46e500 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-purple-600:hover{--tw-gradient-to:#9333ea var(--tw-gradient-to-position)}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:ring-pink-500:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity,1))}.focus\:border-indigo-400:focus{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:ring-indigo-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity,1))}.focus\:ring-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(69 76 191/var(--tw-ring-opacity,1))}.focus\:ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity,1))}.focus\:ring-offset-1:focus{--tw-ring-offset-width:1px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.sm\:block{display:block}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}
|