@embeddable.com/remarkable-ui 2.0.28 → 2.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5 -2
- package/dist/index.js +22 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -286,7 +286,6 @@ declare const getTableTotalPages: (total: number | undefined, pageSize: number)
|
|
|
286
286
|
declare const TablePagination: FC<TablePaginationProps>;
|
|
287
287
|
|
|
288
288
|
declare const getChartColors: () => string[];
|
|
289
|
-
declare const getChartContrastColors: () => string[];
|
|
290
289
|
|
|
291
290
|
declare const getChartjsAxisOptionsPlugins: () => Partial<ChartOptions["plugins"]>;
|
|
292
291
|
declare const getChartjsAxisOptionsScalesTicksDefault: () => Partial<CartesianTickOptions>;
|
|
@@ -324,6 +323,7 @@ type DateRangePickerFieldProps = {
|
|
|
324
323
|
clearable?: boolean;
|
|
325
324
|
onChange: (dateRange: DateRange | undefined) => void;
|
|
326
325
|
submitLabel?: string;
|
|
326
|
+
avoidCollisions?: boolean;
|
|
327
327
|
} & FieldHeaderProps & DateRangePickerProps;
|
|
328
328
|
declare const DateRangePickerField: FC<DateRangePickerFieldProps>;
|
|
329
329
|
|
|
@@ -384,6 +384,7 @@ type MultiSelectFieldProps = {
|
|
|
384
384
|
placeholder?: string;
|
|
385
385
|
submitLabel?: string;
|
|
386
386
|
values?: string[];
|
|
387
|
+
avoidCollisions?: boolean;
|
|
387
388
|
onChange: (value: string[]) => void;
|
|
388
389
|
onSearch?: (search: string) => void;
|
|
389
390
|
error?: boolean;
|
|
@@ -405,6 +406,7 @@ type SingleSelectFieldProps = {
|
|
|
405
406
|
onSearch?: (search: string) => void;
|
|
406
407
|
error?: boolean;
|
|
407
408
|
errorMessage?: string;
|
|
409
|
+
avoidCollisions?: boolean;
|
|
408
410
|
} & FieldHeaderProps;
|
|
409
411
|
declare const SingleSelectField: FC<SingleSelectFieldProps>;
|
|
410
412
|
|
|
@@ -505,6 +507,7 @@ type DropdownProps = {
|
|
|
505
507
|
open?: boolean;
|
|
506
508
|
side?: React.ComponentProps<typeof DropdownMenu.Content>['side'];
|
|
507
509
|
align?: React.ComponentProps<typeof DropdownMenu.Content>['align'];
|
|
510
|
+
avoidCollisions?: boolean;
|
|
508
511
|
onOpenChange?: (open: boolean) => void;
|
|
509
512
|
};
|
|
510
513
|
declare const Dropdown: FC<DropdownProps>;
|
|
@@ -549,4 +552,4 @@ declare const endOfDayUTC: (date: Date) => Date;
|
|
|
549
552
|
|
|
550
553
|
declare const shallowEqual: (object1: any, object2: any) => boolean;
|
|
551
554
|
|
|
552
|
-
export { ActionIcon, BarChart, type BarChartProps, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DateRangePicker, DateRangePickerField, type DateRangePickerProps, DonutChart, type DonutLabelChartProps, Dropdown, type DropdownProps, FieldFeedback, type FieldFeedbackProps, FieldHeader, type FieldHeaderProps, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, type LineChartProps, MultiSelectField, type MultiSelectFieldProps, NumberField, Overlay, PieChart, type PieChartProps, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, type SelectListOptionPropsWithCategory, SingleSelectField, type SingleSelectFieldProps, Skeleton, StylesKeys, Switch, TableBody, TableBodyCellWithCopy, type TableBodyProps, TableHeader, TableHeaderAlign, type TableHeaderCell, type TableHeaderCellStyle, type TableHeaderItem, type TableHeaderItemAlign, type TableHeaderProps, TablePaginated, type TablePaginatedProps, TablePagination, type TablePaginationProps, TableScrollable, type TableScrollableHandle, type TableScrollableProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, endOfDayUTC, getBarChartData, getBarChartOptions, getChartColors,
|
|
555
|
+
export { ActionIcon, BarChart, type BarChartProps, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DateRangePicker, DateRangePickerField, type DateRangePickerProps, DonutChart, type DonutLabelChartProps, Dropdown, type DropdownProps, FieldFeedback, type FieldFeedbackProps, FieldHeader, type FieldHeaderProps, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, type LineChartProps, MultiSelectField, type MultiSelectFieldProps, NumberField, Overlay, PieChart, type PieChartProps, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, type SelectListOptionPropsWithCategory, SingleSelectField, type SingleSelectFieldProps, Skeleton, StylesKeys, Switch, TableBody, TableBodyCellWithCopy, type TableBodyProps, TableHeader, TableHeaderAlign, type TableHeaderCell, type TableHeaderCellStyle, type TableHeaderItem, type TableHeaderItemAlign, type TableHeaderProps, TablePaginated, type TablePaginatedProps, TablePagination, type TablePaginationProps, TableScrollable, type TableScrollableHandle, type TableScrollableProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, endOfDayUTC, getBarChartData, getBarChartOptions, getChartColors, getChartjsAxisOptions, getChartjsAxisOptionsPlugins, getChartjsAxisOptionsScales, getChartjsAxisOptionsScalesGrid, getChartjsAxisOptionsScalesGridColor, getChartjsAxisOptionsScalesTicksDefault, getChartjsAxisOptionsScalesTicksMuted, getChartjsAxisOptionsScalesTitle, getDonutChartOptions, getLineChartData, getLineChartOptions, getPieChartData, getPieChartOptions, getStyle, getStyleNumber, getTableTotalPages, isSameDate, isSameDateRange, shallowEqual, useDebounce, useResizeObserver, useTableGetRowsPerPage };
|
package/dist/index.js
CHANGED
|
@@ -76,12 +76,6 @@ var getChartColors = () => [
|
|
|
76
76
|
getStyle("--em-sem-chart-color--9"),
|
|
77
77
|
getStyle("--em-sem-chart-color--10")
|
|
78
78
|
];
|
|
79
|
-
var getChartContrastColors = () => [
|
|
80
|
-
getStyle("--em-sem-chart-color--1"),
|
|
81
|
-
getStyle("--em-sem-chart-color--2"),
|
|
82
|
-
getStyle("--em-sem-chart-color--3"),
|
|
83
|
-
getStyle("--em-sem-chart-color--5")
|
|
84
|
-
];
|
|
85
79
|
|
|
86
80
|
// src/components/charts/bars/bars.utils.ts
|
|
87
81
|
import { mergician as mergician2 } from "mergician";
|
|
@@ -248,11 +242,11 @@ var getChartjsAxisOptionsScalesGridColor = (ctx) => {
|
|
|
248
242
|
|
|
249
243
|
// src/components/charts/bars/bars.utils.ts
|
|
250
244
|
var getBarChartData = (data) => {
|
|
251
|
-
const
|
|
245
|
+
const chartColors = getChartColors();
|
|
252
246
|
return {
|
|
253
247
|
...data,
|
|
254
248
|
datasets: data.datasets?.map((dataset, index) => {
|
|
255
|
-
const colors =
|
|
249
|
+
const colors = chartColors[index % chartColors.length];
|
|
256
250
|
const defaultDataset = {
|
|
257
251
|
...dataset,
|
|
258
252
|
backgroundColor: colors,
|
|
@@ -491,11 +485,11 @@ import { mergician as mergician5 } from "mergician";
|
|
|
491
485
|
// src/components/charts/lines/lines.utils.ts
|
|
492
486
|
import { mergician as mergician4 } from "mergician";
|
|
493
487
|
var getLineChartData = (data) => {
|
|
494
|
-
const
|
|
488
|
+
const chartColors = getChartColors();
|
|
495
489
|
const mergedData = {
|
|
496
490
|
...data,
|
|
497
491
|
datasets: data.datasets?.map((dataset, index) => {
|
|
498
|
-
const colors =
|
|
492
|
+
const colors = chartColors[index % chartColors.length];
|
|
499
493
|
const defaultDataset = {
|
|
500
494
|
backgroundColor: colors,
|
|
501
495
|
borderColor: colors
|
|
@@ -2150,11 +2144,21 @@ var Dropdown = ({
|
|
|
2150
2144
|
open,
|
|
2151
2145
|
side = "bottom",
|
|
2152
2146
|
align = "start",
|
|
2147
|
+
avoidCollisions = true,
|
|
2153
2148
|
onOpenChange
|
|
2154
2149
|
}) => {
|
|
2155
|
-
return /* @__PURE__ */ jsxs11(DropdownMenu.Root, { open, onOpenChange, children: [
|
|
2150
|
+
return /* @__PURE__ */ jsxs11(DropdownMenu.Root, { open, onOpenChange, modal: false, children: [
|
|
2156
2151
|
/* @__PURE__ */ jsx19(DropdownMenu.Trigger, { asChild: true, disabled, children: triggerComponent }),
|
|
2157
|
-
/* @__PURE__ */ jsx19(
|
|
2152
|
+
/* @__PURE__ */ jsx19(
|
|
2153
|
+
DropdownMenu.Content,
|
|
2154
|
+
{
|
|
2155
|
+
side,
|
|
2156
|
+
align,
|
|
2157
|
+
style: { zIndex: 5 },
|
|
2158
|
+
avoidCollisions,
|
|
2159
|
+
children
|
|
2160
|
+
}
|
|
2161
|
+
)
|
|
2158
2162
|
] });
|
|
2159
2163
|
};
|
|
2160
2164
|
|
|
@@ -2329,6 +2333,7 @@ var DateRangePickerField = ({
|
|
|
2329
2333
|
clearable,
|
|
2330
2334
|
numberOfMonths = 1,
|
|
2331
2335
|
submitLabel = "Apply",
|
|
2336
|
+
avoidCollisions,
|
|
2332
2337
|
onChange
|
|
2333
2338
|
}) => {
|
|
2334
2339
|
const [isOpen, setIsOpen] = useState6(false);
|
|
@@ -2360,6 +2365,7 @@ var DateRangePickerField = ({
|
|
|
2360
2365
|
open: isOpen,
|
|
2361
2366
|
onOpenChange: handleOpenChange,
|
|
2362
2367
|
disabled,
|
|
2368
|
+
avoidCollisions,
|
|
2363
2369
|
triggerComponent: /* @__PURE__ */ jsx24(
|
|
2364
2370
|
SelectFieldTrigger,
|
|
2365
2371
|
{
|
|
@@ -2634,6 +2640,7 @@ var MultiSelectField = ({
|
|
|
2634
2640
|
placeholder,
|
|
2635
2641
|
submitLabel = "Apply",
|
|
2636
2642
|
values = [],
|
|
2643
|
+
avoidCollisions,
|
|
2637
2644
|
onChange,
|
|
2638
2645
|
onSearch,
|
|
2639
2646
|
error = false,
|
|
@@ -2701,6 +2708,7 @@ var MultiSelectField = ({
|
|
|
2701
2708
|
open: isOpen,
|
|
2702
2709
|
onOpenChange: setIsOpen,
|
|
2703
2710
|
disabled,
|
|
2711
|
+
avoidCollisions,
|
|
2704
2712
|
triggerComponent: /* @__PURE__ */ jsx30(
|
|
2705
2713
|
SelectFieldTrigger,
|
|
2706
2714
|
{
|
|
@@ -2788,6 +2796,7 @@ var SingleSelectField = ({
|
|
|
2788
2796
|
searchable,
|
|
2789
2797
|
clearable,
|
|
2790
2798
|
isLoading,
|
|
2799
|
+
avoidCollisions,
|
|
2791
2800
|
noOptionsMessage = "No options available",
|
|
2792
2801
|
onChange,
|
|
2793
2802
|
onSearch,
|
|
@@ -2836,6 +2845,7 @@ var SingleSelectField = ({
|
|
|
2836
2845
|
open: isOpen,
|
|
2837
2846
|
onOpenChange: setIsOpen,
|
|
2838
2847
|
disabled,
|
|
2848
|
+
avoidCollisions,
|
|
2839
2849
|
triggerComponent: /* @__PURE__ */ jsx31(
|
|
2840
2850
|
SelectFieldTrigger,
|
|
2841
2851
|
{
|
|
@@ -3121,7 +3131,6 @@ export {
|
|
|
3121
3131
|
getBarChartData,
|
|
3122
3132
|
getBarChartOptions,
|
|
3123
3133
|
getChartColors,
|
|
3124
|
-
getChartContrastColors,
|
|
3125
3134
|
getChartjsAxisOptions,
|
|
3126
3135
|
getChartjsAxisOptionsPlugins,
|
|
3127
3136
|
getChartjsAxisOptionsScales,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/shared/ConditionalWrapper/ConditionalWrapper.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/hooks/useResizeObserver.hook.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/Table/TablePaginated/TablePaginated.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/hooks/useDebounce.hook.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/TablePaginated/TablePaginated.hooks.ts","../src/components/charts/tables/Table/TableScrollable/TableScrollable.tsx","../src/components/charts/tables/Table/TableScrollable/TableScrollable.hooks.ts","../src/components/editors/dates/DateRangePicker/DateRangePicker.tsx","../src/components/editors/dates/DateRangePicker/DateRangePickerChevron.tsx","../src/utils/date.utils.ts","../src/components/editors/dates/DateRangePickerField/DateRangePickerField.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.tsx","../src/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Button/Button.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.ts","../src/components/editors/selects/shared/useSelectSearchFocus.hook.ts","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.tsx","../src/utils/debounce.utils.ts","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/Switch/Switch.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Typography/Typography.tsx","../src/utils/object.utils.ts"],"sourcesContent":["import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartJSOrUndefined } from 'react-chartjs-2/dist/types';\n\nexport const getSegmentIndexClicked = (\n event: React.MouseEvent<HTMLCanvasElement>,\n chartRef: React.RefObject<ChartJSOrUndefined | null>,\n): number | undefined => {\n const chart = chartRef.current;\n\n if (!chart) return undefined;\n\n const points = chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false,\n );\n\n return points[0]?.index;\n};\n","import { StylesKeys } from './styles.constants';\n\n/**\n * Attempts to interpret a CSS variable as a number (for lengths)\n * or a string (for colors, etc.).\n *\n * Examples:\n * --var: 2rem -> returns number (px)\n * --var: 16px -> returns number\n * --var: 3 -> returns number (parsed float)\n * --var: #3498db -> returns string\n * --var: rgba(52, 152, 219, 0.8) -> returns string\n */\nconst numericRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst getStyleValue = (variableName: StylesKeys): string => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n const computedStyle = getComputedStyle(document.documentElement);\n return computedStyle.getPropertyValue(variableName).trim();\n};\n\nexport const getStyle = (variableName: StylesKeys, fallbackValue?: string): string => {\n const rawValue = getStyleValue(variableName);\n if (!rawValue) return fallbackValue ?? rawValue;\n\n // Colors\n const firstChar = rawValue.charAt(0);\n if (firstChar === '#' || rawValue.startsWith('rgb(') || rawValue.startsWith('rgba(')) {\n return rawValue;\n }\n\n // Others like font-family\n return rawValue;\n};\n\nexport const getStyleNumber = (\n variableName: StylesKeys,\n fallbackValue?: string,\n): number | undefined => {\n const rawValue = getStyleValue(variableName) || fallbackValue;\n\n if (!rawValue) return undefined;\n\n const numericValue = parseFloat(rawValue);\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n // Px\n if (rawValue.slice(-2) === 'px') {\n return numericValue;\n }\n\n // Rem/Em\n const unit3 = rawValue.slice(-3);\n if (unit3 === 'rem') {\n return numericValue * rootFontSize;\n }\n\n // Pure number\n if (numericRegex.test(rawValue)) {\n return numericValue;\n }\n return undefined;\n};\n","import { getStyle } from '../../styles/styles.utils';\n\nexport const getChartColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--5'),\n getStyle('--em-sem-chart-color--6'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--8'),\n getStyle('--em-sem-chart-color--9'),\n getStyle('--em-sem-chart-color--10'),\n];\n\nexport const getChartContrastColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--5'),\n];\n","import { ChartData, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptions,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n const chartContrastColors = getChartContrastColors();\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n grid: {\n display: true,\n color: getChartjsAxisOptionsScalesGridColor,\n },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: { display: false },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-barchart-border-radius', '0.375rem'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(getChartjsAxisOptions(), baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { CartesianTickOptions, ChartOptions, GridLineOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { getChartjsOptions } from './chartjs.constants';\n\nexport const getChartjsAxisOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n labels: {\n total: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n value: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksDefault = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksMuted = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color--muted', '#5C5C66'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesTitle = (): any => ({\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-grid-title-font-weight', '700'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesGrid = (): Partial<GridLineOptions> => ({\n color: getStyle('--em-chart-grid-line-color--light', '#EDEDF1'),\n lineWidth: getStyleNumber('--em-chart-grid-line-width--thin', '0.0625rem'),\n});\n\nexport const getChartjsAxisOptionsScales = (): Partial<ChartOptions['scales']> => ({\n x: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n },\n y: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n },\n});\n\nexport const getChartjsAxisOptions = (): Partial<ChartOptions> =>\n mergician(getChartjsOptions(), {\n plugins: getChartjsAxisOptionsPlugins(),\n scales: getChartjsAxisOptionsScales(),\n });\n\nexport const chartjsAxisOptionsLayoutPadding: number = 30;\n\nfunction isMixedValues(values: number[]): boolean {\n const hasPos = values.some((v) => v > 0);\n const hasNeg = values.some((v) => v < 0);\n return hasPos && hasNeg;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesGridColor = (ctx: any) => {\n if (ctx.tick.value === 0) {\n if (ctx.chart.data.datasets.length === 0) {\n return undefined;\n }\n\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartContrastColors = getChartContrastColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\nimport { AutoTextSize } from 'auto-text-size';\nimport ConditionalWrapper from '../../shared/ConditionalWrapper/ConditionalWrapper';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n trendFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n noPreviousDataLabel = 'No previous data',\n valueFormatter,\n}) => {\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n const autoResizeValueFontSize = !valueFontSize;\n return (\n <div className={styles.kpiChartContainer}>\n <div className={styles.kpiChartValueContainer}>\n <ConditionalWrapper\n condition={autoResizeValueFontSize}\n wrapper={(children) => (\n <AutoTextSize mode=\"boxoneline\" minFontSizePx={1} maxFontSizePx={999}>\n {children}\n </AutoTextSize>\n )}\n >\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize,\n }}\n >\n {displayValue}\n </h2>\n </ConditionalWrapper>\n </div>\n\n <div className={styles.kpiComparisonContainer} style={{ fontSize: trendFontSize }}>\n <div style={{ visibility: hasComparisonValue ? 'visible' : 'hidden' }}>\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n noPreviousDataLabel={noPreviousDataLabel}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n noPreviousDataLabel,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n const showNoPreviousData = showChangeAsPercentage && Number(comparisonValue) === 0;\n\n return (\n <div className={styles.kpiChangeContainerSizeGuide}>\n {/* This is responsible to setting the size of the container */}\n <div className={clsx(styles.kpiChartChangeContainer, styles.hidden)}>\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n <span className={styles.kpiComparisonLabel}>{comparisonLabel}</span>\n </div>\n {/* This is responsible for displaying the content on the available size of the container */}\n <div className={styles.kpiAbsoluteContainer}>\n <div className={styles.kpiChartChangeContainer}>\n {showNoPreviousData ? (\n <span className={styles.kpiComparisonLabel}>{noPreviousDataLabel}</span>\n ) : (\n <>\n {!equalComparison && (\n <span\n className={clsx(\n styles.kpiChangeBadge,\n getChangeClass(isPositive, invertChangeColors),\n )}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n","type ConditionalWrapperProps = {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n};\n\nconst ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : <>{children}</>;\n\nexport default ConditionalWrapper;\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport { useResizeObserver } from '../../../../hooks/useResizeObserver.hook';\n\nconst MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const containerRef = useRef(null);\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n const { height, width } = useResizeObserver(containerRef, 0);\n\n const hideChart =\n height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;\n\n return (\n <div className={styles.chartContainer} ref={containerRef}>\n {hideChart ? null : (\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n )}\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(\n elRef: React.RefObject<T | null>,\n timeout = 100,\n): Size => {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateSize = (rect: DOMRectReadOnly | DOMRect) => {\n setSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n });\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n updateSize(entry.contentRect);\n }, timeout);\n });\n\n ro.observe(el);\n\n // initial size\n updateSize(el.getBoundingClientRect());\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef, timeout]);\n\n return size;\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import { getStyle } from '../../../../styles/styles.utils';\nimport { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value))\n return getStyle('--em-tablechart-cell-background', '#fff');\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor?: string;\n midColor: string;\n maxColor?: string;\n}) => {\n minColor = minColor ?? lerpColor(midColor, LERP_LIGHTEST_COLOR, 0.5);\n maxColor = maxColor ?? lerpColor(midColor, LERP_DARKEST_COLOR, 0.5);\n\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","export const getTableCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : 'unset',\n maxWidth: width ? `${width}px` : 'unset',\n width: width ? `${width}px` : 'unset',\n };\n};\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue != null) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue != null) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(String(row))?.get(String(columnValue)) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(String(row)) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import * as React from 'react';\nimport styles from '../../tables.module.css';\nimport clsx from 'clsx';\nimport { TableHeaderItem, TableSort } from '../table.types';\nimport { TableHeader } from '../components/TableHeader/TableHeader';\nimport { TableBody } from '../components/TableBody/TableBody';\nimport { TablePagination } from '../components/TablePagination/TablePagination';\n\nexport type TablePaginatedProps<T> = {\n showIndex?: boolean;\n className?: string;\n headers: TableHeaderItem<T>[];\n rows: T[];\n page: number;\n pageSize: number;\n paginationLabel?: string;\n total?: number;\n sort?: TableSort<T>;\n onRowIndexClick?: (rowIndex: number) => void;\n onPageChange: (page: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TablePaginated = React.forwardRef<HTMLDivElement, TablePaginatedProps<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <T extends Record<string, any>>(\n props: TablePaginatedProps<T>,\n ref: React.Ref<HTMLDivElement>,\n ): React.JSX.Element => {\n const {\n headers,\n rows,\n className,\n total,\n page,\n pageSize,\n paginationLabel,\n sort,\n showIndex = false,\n onRowIndexClick,\n onPageChange,\n onSortChange,\n } = props;\n\n return (\n <div ref={ref} className={clsx(styles.tableContainer, className)}>\n <div className={styles.tableContainerScroll}>\n <table className={styles.table}>\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n <TableBody\n onRowIndexClick={onRowIndexClick}\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n page={page}\n pageSize={pageSize}\n />\n </table>\n </div>\n <TablePagination\n page={page}\n pageSize={pageSize}\n paginationLabel={paginationLabel}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n },\n);\n\nTablePaginated.displayName = 'TablePaginated';\n","import { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\nimport { useEffect, useState } from 'react';\nimport { useDebounce } from '../../../../../../hooks/useDebounce.hook';\nimport { TablePaginatedProps } from '../../TablePaginated/TablePaginated';\n\nexport type TableHeaderProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'sort' | 'onSortChange'\n>;\n\nconst getHeaderAriaSort = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id ? (sort.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n};\n\nconst getHeaderAriaLabel = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id\n ? sort.direction === 'asc'\n ? `Sort by ${header.title}, currently ascending. Activate to sort descending.`\n : `Sort by ${header.title}, currently descending. Activate to sort ascending.`\n : `Sort by ${header.title}. Activate to sort ascending.`;\n};\nexport const TableHeader = <T,>({\n headers,\n sort,\n showIndex,\n onSortChange,\n}: TableHeaderProps<T>) => {\n const [currentSort, setCurrentSort] = useState(sort);\n\n const debouncedUpdateState = useDebounce((value) => {\n if (value === undefined && value === sort) {\n return;\n }\n if (value?.id === sort?.id && value?.direction === sort?.direction) {\n return;\n }\n\n onSortChange?.(value);\n });\n\n useEffect(() => {\n debouncedUpdateState(currentSort);\n }, [currentSort, debouncedUpdateState]);\n\n const getSortIcon = (header: TableHeaderItem<T>) => {\n if (!currentSort) return <IconCaretUpDownFilled />;\n\n if (currentSort.id === header.id) {\n if (currentSort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (currentSort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleNewSortClick = (clickedHeader: keyof T | undefined) => {\n // Un-select sort\n if (!clickedHeader) return setCurrentSort(undefined);\n\n // New sort\n if (currentSort?.id !== clickedHeader)\n return setCurrentSort({ id: clickedHeader, direction: TableSortDirection.ASC });\n\n // Change current sort direction\n if (currentSort?.direction === undefined)\n return setCurrentSort({ id: clickedHeader, direction: TableSortDirection.ASC });\n if (currentSort?.direction === TableSortDirection.ASC)\n return setCurrentSort({ id: clickedHeader, direction: TableSortDirection.DESC });\n\n // Remove sort\n return setCurrentSort(undefined);\n };\n\n return (\n <thead className={styles.tableHeader}>\n <tr>\n {showIndex && (\n <th className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>#</th>\n )}\n {headers.map((header) => (\n <th\n className={styles.tableHeaderCell}\n key={header.id as string}\n style={{ minWidth: header.minWidth }}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(sort, header)}\n >\n <button\n onClick={() => handleNewSortClick(header.id)}\n aria-label={getHeaderAriaLabel(sort, header)}\n >\n {header.title}\n {getSortIcon(header)}\n </button>\n </th>\n ))}\n </tr>\n </thead>\n );\n};\n","import { CSSProperties } from 'react';\nimport { CssSize } from '../../../../types/css.types';\n\nexport const TableSortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\nexport type TableSort<T> = {\n id: keyof T;\n direction: (typeof TableSortDirection)[keyof typeof TableSortDirection];\n};\nexport const TableHeaderAlign = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\n\nexport type TableHeaderItemAlign = (typeof TableHeaderAlign)[keyof typeof TableHeaderAlign];\n\nexport type TableHeaderCell = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => React.ReactElement<HTMLTableCellElement>;\n\nexport type TableHeaderCellStyle = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => CSSProperties | undefined;\n\nexport type TableHeaderItem<T> = {\n id: keyof T;\n title: React.ReactNode;\n align?: TableHeaderItemAlign;\n field?: keyof T;\n minWidth?: CssSize;\n sort?: TableSort<T>;\n accessor?: (row: T) => React.ReactNode;\n cell?: TableHeaderCell;\n cellStyle?: TableHeaderCellStyle;\n};\n","import { useRef, useEffect, useCallback } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout>(null);\n const fnRef = useRef(fn);\n\n // Always keep fn up to date without resetting timer\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n fnRef.current(...args);\n }, delay);\n },\n [delay],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return debouncedFn;\n}\n","import tableBodyStyles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TableHeaderItemAlign } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { CSSProperties, FC, RefObject, useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\nimport { TablePaginatedProps } from '../../TablePaginated/TablePaginated';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'onRowIndexClick'\n> & {\n pageSize?: number;\n page?: number;\n bottomRef?: RefObject<HTMLDivElement | null>;\n isLoading?: boolean;\n hasMoreData?: boolean;\n};\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n bottomRef,\n isLoading,\n hasMoreData,\n}: TableBodyProps<T>) => {\n const hasPaginatedIndex = pageSize !== undefined && page !== undefined;\n const showBottomRef = !isLoading && hasMoreData && bottomRef !== undefined;\n\n return (\n <tbody className={tableBodyStyles.tableBody}>\n {rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n onClick={() => onRowIndexClick?.(rowIndex)}\n className={clsx(rowIndex === rows.length - 1 && tableStyles.tableLastRow)}\n >\n {showIndex && (\n <td className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>\n {hasPaginatedIndex ? pageSize * page + rowIndex + 1 : rowIndex + 1}\n </td>\n )}\n {headers.map((header, cellIndex) => (\n <TableBodyCell\n key={cellIndex}\n header={header}\n row={row}\n rowIndex={rowIndex}\n cellIndex={cellIndex}\n />\n ))}\n </tr>\n ))}\n {showBottomRef && (\n <tr>\n <td colSpan={(showIndex ? 1 : 0) + headers.length} className={tableStyles.bottomRefCell}>\n <div ref={bottomRef} style={{ height: 1 }} />\n </td>\n </tr>\n )}\n </tbody>\n );\n};\n\ntype TableBodyCellProps<T> = {\n header: TableHeaderItem<T>;\n row: T;\n rowIndex: number;\n cellIndex: number;\n};\n\nconst TableBodyCell = <T,>({ header, row }: TableBodyCellProps<T>) => {\n const rawValue =\n header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n const value = header.accessor !== undefined ? header.accessor(row) : rawValue;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: tableBodyStyles.tableBodyCell });\n }\n\n return (\n <TableBodyCellWithCopy align={header.align} value={value} style={header.cellStyle?.(rawValue)}>\n {value}\n </TableBodyCellWithCopy>\n );\n};\n\ntype TableBodyCellWithCopyProps = {\n value: string;\n align?: TableHeaderItemAlign;\n children: React.ReactNode;\n style?: CSSProperties | undefined;\n};\nexport const TableBodyCellWithCopy: FC<TableBodyCellWithCopyProps> = ({\n value,\n align = 'left',\n children,\n style,\n}) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const handleCopy = () => {\n setIsPressedCopy(true);\n if (value !== undefined) {\n navigator.clipboard.writeText(String(value));\n }\n };\n\n return (\n <td\n title={value}\n style={{ textAlign: align, ...style }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n tableBodyStyles.copyButton,\n align === TableHeaderAlign.RIGHT && tableBodyStyles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {children}\n </td>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n} from '@tabler/icons-react';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport styles from './TablePagination.module.css';\nimport { FC, useEffect } from 'react';\nimport { TablePaginatedProps } from '../../TablePaginated/TablePaginated';\n\nexport type TablePaginationProps = Pick<\n TablePaginatedProps<unknown>,\n 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'\n>;\n\nexport const getTableTotalPages = (\n total: number | undefined,\n pageSize: number,\n): number | undefined => {\n return total ? Math.ceil(total / pageSize) : undefined;\n};\n\nexport const TablePagination: FC<TablePaginationProps> = ({\n page,\n pageSize,\n paginationLabel,\n total,\n onPageChange,\n}) => {\n const totalPages = getTableTotalPages(total, pageSize);\n\n const disabledPrev = page <= 0;\n const disabledNext = !totalPages || page >= totalPages - 1;\n\n useEffect(() => {\n if (totalPages && page >= totalPages) {\n onPageChange(0);\n }\n }, [totalPages, page]);\n\n return (\n <div className={styles.tablePagination} aria-label=\"Table pagination controls\">\n <div className={styles.tablePaginationCentral}>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronsLeft}\n onClick={() => {\n onPageChange(0);\n }}\n disabled={disabledPrev}\n aria-label=\"First page\"\n />\n <ActionIcon\n icon={IconChevronLeft}\n onClick={() => {\n onPageChange(page - 1);\n }}\n disabled={disabledPrev}\n aria-label=\"Previous page\"\n />\n </div>\n <span>{paginationLabel ?? `Page ${page + 1} of ${totalPages ?? '?'}`}</span>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronRight}\n onClick={() => {\n onPageChange(page + 1);\n }}\n disabled={disabledNext}\n aria-label=\"Next page\"\n />\n <ActionIcon\n icon={IconChevronsRight}\n onClick={() => totalPages && onPageChange(totalPages - 1)}\n disabled={disabledNext}\n aria-label=\"Last page\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import { useMemo } from 'react';\n\ntype UseTableGetRowsPerPageProps = {\n availableHeight: number;\n headerHeight: number;\n rowHeight: number;\n footerHeight?: number;\n};\nexport const useTableGetRowsPerPage = ({\n availableHeight,\n headerHeight,\n rowHeight,\n footerHeight = 0,\n}: UseTableGetRowsPerPageProps): number =>\n useMemo(() => {\n const h = availableHeight;\n if (!h) return 0;\n\n // Available vertical space for BODY rows only\n let available = h - headerHeight - footerHeight;\n if (available < 0) available = 0;\n\n // DO NOT show partial rows: floor only\n const rows = Math.floor(available / rowHeight);\n return Math.max(0, rows);\n }, [availableHeight, headerHeight, rowHeight, footerHeight]);\n","import clsx from 'clsx';\nimport tableStyles from '../../tables.module.css';\nimport { TableHeaderItem, TableSort } from '../table.types';\nimport { TableHeader } from '../components/TableHeader/TableHeader';\nimport { TableBody } from '../components/TableBody/TableBody';\nimport { useInfiniteScroll } from './TableScrollable.hooks';\nimport { forwardRef, useImperativeHandle, useRef } from 'react';\n\nexport type TableScrollableHandle = {\n scrollToTop: (behavior?: ScrollBehavior) => void;\n getScrollElement: () => HTMLDivElement | null;\n};\n\nexport type TableScrollableProps<T> = {\n bottomDistanceToPrefetch?: number;\n className?: string;\n hasMoreData?: boolean;\n headers: TableHeaderItem<T>[];\n isLoading?: boolean;\n loadingLabel?: string;\n rows: T[];\n showIndex?: boolean;\n sort?: TableSort<T>;\n onNextPage: () => void;\n onRowIndexClick?: (rowIndex: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableScrollable = forwardRef<TableScrollableHandle, TableScrollableProps<any>>(\n (\n {\n sort,\n onSortChange,\n showIndex,\n headers,\n rows,\n onNextPage,\n hasMoreData = true,\n className,\n onRowIndexClick,\n isLoading = false,\n loadingLabel = 'Loading...',\n bottomDistanceToPrefetch,\n },\n ref,\n ) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n\n // Expose imperative API to parent\n useImperativeHandle(\n ref,\n () => ({\n scrollToTop: (behavior: ScrollBehavior = 'auto') => {\n scrollRef.current?.scrollTo({ top: 0, behavior });\n },\n getScrollElement: () => scrollRef.current,\n }),\n [],\n );\n\n useInfiniteScroll({\n rootRef: scrollRef,\n enabled: hasMoreData && !isLoading,\n onPrefetch: onNextPage,\n bottomDistanceToPrefetch,\n });\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n ref={scrollRef}\n className={clsx(tableStyles.tableAdjustedContainer, tableStyles.fullWidth)}\n >\n <table\n className={clsx(tableStyles.table, tableStyles.cellWrap)}\n aria-label=\"Scrollable table\"\n >\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n\n <TableBody\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n onRowIndexClick={onRowIndexClick}\n bottomRef={sentinelRef}\n isLoading={isLoading}\n hasMoreData={hasMoreData}\n />\n </table>\n {isLoading && <div className={tableStyles.loadingIndicator}>{loadingLabel}</div>}\n </div>\n </div>\n );\n },\n);\n\nTableScrollable.displayName = 'TableScrollable';\n","import { useEffect, useRef } from 'react';\n\nexport function useInfiniteScroll({\n rootRef,\n enabled = true,\n onPrefetch,\n bottomDistanceToPrefetch = 750,\n}: {\n rootRef: React.RefObject<HTMLElement | null>;\n enabled?: boolean;\n onPrefetch: () => void;\n bottomDistanceToPrefetch?: number;\n}) {\n const loadingRef = useRef(false);\n\n useEffect(() => {\n if (!enabled) return;\n\n const el = rootRef.current;\n if (!el) return;\n\n const onScroll = () => {\n if (!enabled) return;\n if (loadingRef.current) return;\n\n const { scrollTop, clientHeight, scrollHeight } = el;\n\n const distanceFromBottom = scrollHeight - (scrollTop + clientHeight);\n\n if (distanceFromBottom <= bottomDistanceToPrefetch) {\n loadingRef.current = true;\n onPrefetch();\n }\n };\n\n onScroll(); // When is near to bottom\n el.addEventListener('scroll', onScroll, { passive: true });\n return () => el.removeEventListener('scroll', onScroll);\n }, [enabled, onPrefetch, rootRef, bottomDistanceToPrefetch]);\n\n useEffect(() => {\n if (enabled) loadingRef.current = false;\n }, [enabled]);\n}\n","import React, { useState } from 'react';\nimport { DateRange, DayPicker } from 'react-day-picker';\nimport './DateRangePicker.css';\nimport { DateRangePickerChevron } from './DateRangePickerChevron';\nimport { endOfDayUTC } from '../../../../utils/date.utils';\nimport * as rdpLocales from 'react-day-picker/locale';\n\nexport type DateRangePickerProps = {\n numberOfMonths?: number;\n locale?: string;\n value?: DateRange;\n onChange: (dateRange: DateRange | undefined) => void;\n};\n\nexport const DateRangePicker: React.FC<DateRangePickerProps> = ({\n value,\n numberOfMonths = 1,\n locale = 'en',\n onChange,\n}) => {\n const [month, setMonth] = useState<Date>(value?.from ?? new Date());\n\n const handleChange = (range: DateRange | undefined) => {\n if (range?.to) {\n range.to = endOfDayUTC(range.to);\n }\n onChange(range);\n };\n\n const now = new Date();\n const endMonth = new Date(now.getFullYear() + 2, now.getMonth());\n\n return (\n <DayPicker\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={numberOfMonths}\n components={{ Chevron: DateRangePickerChevron }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n locale={(rdpLocales as Record<string, any>)[locale]}\n mode=\"range\"\n navLayout=\"around\"\n onSelect={handleChange}\n selected={value}\n timeZone=\"UTC\"\n showOutsideDays\n captionLayout=\"dropdown-years\"\n endMonth={endMonth}\n animate\n />\n );\n};\n","import { IconCaretDownFilled } from '@tabler/icons-react';\nimport styles from './DateRangePickerChevron.module.css';\nimport clsx from 'clsx';\n\ntype DateRangePickerChevronProps = {\n className?: string;\n orientation?: 'up' | 'down' | 'left' | 'right';\n size?: number;\n};\n\nconst SMALL_SIZE = 18;\n\nexport const DateRangePickerChevron = ({\n orientation,\n size,\n}: DateRangePickerChevronProps): React.JSX.Element => {\n const rotation =\n orientation === 'left'\n ? 'rotate(90deg)'\n : orientation === 'right'\n ? 'rotate(-90deg)'\n : undefined;\n\n const isSmallChevron = size === SMALL_SIZE;\n\n return (\n <button\n className={clsx(styles.chevron, isSmallChevron && styles.small)}\n style={{\n transform: rotation,\n }}\n >\n <IconCaretDownFilled />\n </button>\n );\n};\n","import { DateRange } from 'react-day-picker';\n\nexport const isSameDate = (a?: Date, b?: Date) => a?.getTime() === b?.getTime();\n\nexport const isSameDateRange = (a?: DateRange, b?: DateRange) =>\n isSameDate(a?.from, b?.from) && isSameDate(a?.to, b?.to);\n\nexport const endOfDayUTC = (date: Date) => {\n const d = new Date(date);\n d.setUTCHours(23, 59, 59, 999);\n return d;\n};\n","import { FC, useState } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../../selects/shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { IconProps } from '@tabler/icons-react';\nimport { SelectFieldContent } from '../../selects/shared/SelectFieldContent/SelectFieldContent';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { DateRangePicker, DateRangePickerProps } from '../DateRangePicker/DateRangePicker';\nimport { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './DateRangePickerField.module.css';\nimport { isSameDateRange } from '../../../../utils/date.utils';\n\ntype DateRangePickerFieldProps = {\n displayValue?: string;\n startIcon?: React.ComponentType<IconProps>;\n placeholder?: string;\n disabled?: boolean;\n error?: boolean;\n errorMessage?: string;\n clearable?: boolean;\n onChange: (dateRange: DateRange | undefined) => void;\n submitLabel?: string;\n} & FieldHeaderProps &\n DateRangePickerProps;\n\nconst getDateRangePickerLabel = (\n dateRange: DateRange | undefined,\n displayValue?: string,\n): string | undefined => {\n if (!dateRange) return undefined;\n\n if (displayValue || displayValue === '') return displayValue;\n\n const { from, to } = dateRange;\n\n if (!from || !to) return undefined;\n\n return `${from ? from.toLocaleDateString() : ''} - ${to ? to.toLocaleDateString() : ''}`;\n};\n\nexport const DateRangePickerField: FC<DateRangePickerFieldProps> = ({\n locale,\n displayValue,\n value,\n startIcon,\n label,\n disabled,\n placeholder,\n required,\n error,\n errorMessage,\n clearable,\n numberOfMonths = 1,\n submitLabel = 'Apply',\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [currentDateRange, setCurrentDateRange] = useState<DateRange | undefined>(value);\n\n const valueLabel = getDateRangePickerLabel(value, displayValue);\n const hasError = error || !!errorMessage;\n\n const handleChange = () => {\n onChange(currentDateRange);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setCurrentDateRange(undefined);\n onChange(undefined);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setIsOpen(true);\n return;\n }\n setCurrentDateRange(value);\n setIsOpen(false);\n };\n\n const isSubmitDisabled = isSameDateRange(currentDateRange, value);\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={valueLabel}\n onClear={handleClear}\n isClearable={clearable}\n error={hasError}\n />\n }\n >\n <SelectFieldContent fitContent>\n <DateRangePicker\n locale={locale}\n numberOfMonths={numberOfMonths}\n value={currentDateRange}\n onChange={setCurrentDateRange}\n />\n <Button\n size=\"small\"\n className={styles.submitButton}\n onClick={handleChange}\n disabled={isSubmitDisabled}\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldHeader.module.css';\n\nexport type FieldHeaderProps = {\n className?: string;\n label?: string;\n required?: boolean;\n requiredLabel?: string;\n};\n\nexport const FieldHeader = ({\n label,\n required,\n requiredLabel = 'Required',\n className,\n}: FieldHeaderProps) => {\n if (!label && !required) {\n return null;\n }\n\n return (\n <label className={clsx(styles.fieldHeader, className)}>\n {label}\n {required && <span>{requiredLabel}</span>}\n </label>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC } from 'react';\n\nexport type DropdownProps = {\n triggerComponent: React.ReactNode;\n children: React.ReactNode;\n disabled?: boolean;\n open?: boolean;\n side?: React.ComponentProps<typeof DropdownMenu.Content>['side'];\n align?: React.ComponentProps<typeof DropdownMenu.Content>['align'];\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n triggerComponent,\n children,\n disabled,\n open,\n side = 'bottom',\n align = 'start',\n onOpenChange,\n}) => {\n return (\n <DropdownMenu.Root open={open} onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger asChild disabled={disabled}>\n {triggerComponent}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content side={side} align={align} style={{ zIndex: 5 }}>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconProps, IconX } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: React.ComponentType<IconProps>;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n fitContent?: boolean;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n fitContent = false,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div\n ref={containerRef}\n tabIndex={-1}\n className={clsx(styles.selectFieldContent, fitContent && styles.fitContent, className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldFeedback.module.css';\nimport { FC } from 'react';\n\nexport type FieldFeedbackProps = {\n message: string;\n variant?: 'error';\n className?: string;\n};\n\nexport const FieldFeedback: FC<FieldFeedbackProps> = ({ message, variant, className }) => {\n return (\n <p className={clsx(styles.fieldFeedback, variant && styles[variant], className)}>{message}</p>\n );\n};\n","import { IconProps } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\n\ntype NumberFieldProps = Omit<InputFieldProps, 'value' | 'onChange'> & {\n value?: number | null;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (value: number | null) => void;\n};\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (\n {\n value = null,\n placeholder = 'Enter number',\n onChange,\n error,\n errorMessage,\n clearable,\n ...props\n },\n ref,\n ) => {\n const handleChange = (value: string) => {\n if (value === '') {\n onChange?.(null);\n return;\n }\n\n const numericValue = Number(value);\n if (!isNaN(numericValue) && isFinite(numericValue)) {\n onChange?.(numericValue);\n }\n };\n\n return (\n <InputField\n {...props}\n value={value?.toString() || ''}\n placeholder={placeholder}\n onChange={handleChange}\n type=\"number\"\n clearable={clearable}\n error={error}\n errorMessage={errorMessage}\n ref={ref}\n />\n );\n },\n);\n\nNumberField.displayName = 'NumberField';\n","import { IconProps, IconX } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n ({ value = '', placeholder = 'Enter text', maxLength, error, errorMessage, ...props }, ref) => {\n return (\n <>\n <InputField\n value={value}\n placeholder={placeholder}\n ref={ref}\n maxLength={maxLength}\n clearable\n error={error}\n errorMessage={errorMessage}\n {...props}\n />\n {maxLength && <FieldFeedback message={`${value?.length}/${maxLength} Characters`} />}\n </>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: React.ComponentType<IconProps>;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC, ImgHTMLAttributes, SVGProps } from 'react';\nimport styles from './SelectFieldOption.module.css';\nimport clsx from 'clsx';\n\ntype SelectListOptionIcon =\n | React.ReactElement<SVGProps<SVGSVGElement>>\n | React.ReactElement<ImgHTMLAttributes<HTMLImageElement>>;\n\nexport type SelectListOptionProps = {\n value?: string;\n isSelected?: boolean;\n label: string;\n rightLabel?: string;\n startIcon?: SelectListOptionIcon;\n endIcon?: SelectListOptionIcon;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n};\nexport type SelectListOptionPropsWithCategory = SelectListOptionProps & {\n category: string;\n};\n\nexport const SelectListOption: FC<SelectListOptionProps> = ({\n value,\n isSelected,\n label,\n rightLabel,\n startIcon,\n endIcon,\n disabled,\n ...props\n}) => {\n return (\n <DropdownMenu.Item\n className={clsx(\n styles.selectFieldOption,\n disabled && styles.disabled,\n isSelected && styles.selected,\n )}\n data-value={value}\n {...props}\n >\n <span className={styles.leftContent}>\n {startIcon}\n <span title={label}>{label}</span>\n </span>\n <span className={styles.rightContent}>\n <span title={rightLabel}>{rightLabel}</span>\n {endIcon}\n </span>\n </DropdownMenu.Item>\n );\n};\n","import {\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from './SelectFieldOptions/SelectFieldOption/SelectFieldOption';\n\ntype GroupedOptions = {\n [category: string]: SelectListOptionPropsWithCategory[];\n};\n\nexport const groupOptionsByCategory = (\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[],\n): GroupedOptions | null => {\n const result = options.reduce<GroupedOptions>((acc, option) => {\n if ('category' in option && option.category) {\n const category = option.category;\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(option);\n }\n return acc;\n }, {});\n\n // Return null if no categories were found\n return Object.keys(result).length === 0 ? null : result;\n};\n","import { useEffect } from 'react';\n\nexport const useSelectSearchFocus = (\n isOpen: boolean,\n searchFieldRef: React.RefObject<HTMLInputElement | null>,\n) => {\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n (searchFieldRef.current as unknown as HTMLInputElement)?.focus();\n }, 100);\n }\n }, [isOpen, searchFieldRef]);\n};\n","import { FC } from 'react';\nimport styles from './SelectFieldCategory.module.css';\n\ntype SelectFieldCategoryProps = {\n label: string;\n};\n\nexport const SelectFieldCategory: FC<SelectFieldCategoryProps> = ({ label }) => {\n return <span className={styles.selectFieldCategory}>{label}</span>;\n};\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n let timer: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n}\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: React.ComponentType<IconProps>;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './Switch.module.css';\n\ntype SwitchProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n label?: string;\n};\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked,\n onChange,\n disabled = false,\n className,\n label,\n ...props\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled && onChange) {\n onChange(event.target.checked);\n }\n };\n\n // Ensure accessibility: either aria-label must be provided\n if (!props['aria-label']) {\n console.warn(\n 'Switch component requires either a label prop or aria-label prop for accessibility',\n );\n }\n\n return (\n <label\n className={clsx(\n className,\n styles.switch,\n checked && styles.checked,\n disabled && styles.disabled,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n {...props}\n />\n <span className={styles.switchTrack} aria-hidden=\"true\">\n <span className={styles.switchThumb} aria-hidden=\"true\" />\n </span>\n {label && <span className={clsx(styles.switchLabel)}>{label}</span>}\n </label>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import React from 'react';\nimport styles from './Card.module.css';\nimport clsx from 'clsx';\n\ntype CardProps = React.HTMLAttributes<HTMLDivElement> & {\n children?: React.ReactNode;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div className={clsx(styles.card, className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCard.displayName = 'Card';\n\ntype CardHeaderProps = {\n title?: string;\n subtitle?: string;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle }) => {\n if (!title && !subtitle) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n );\n};\n\ntype CardContentProps = {\n children: React.ReactNode;\n};\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ children }, ref) => {\n return (\n <div className={styles.cardContent} ref={ref}>\n {children}\n </div>\n );\n },\n);\n\nCardContent.displayName = 'CardContent';\n","import { IconProps } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: React.ComponentType<IconProps>;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport { Icon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './GhostButton.module.css';\n\ntype GhostButtonProps = {\n startIcon?: Icon;\n endIcon?: Icon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const GhostButton: React.FC<GhostButtonProps> = ({\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.ghostButton, className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import clsx from 'clsx';\nimport styles from './Overlay.module.css';\nimport { FC, ReactNode } from 'react';\n\ntype OverlayProps = {\n className?: string;\n children?: ReactNode;\n};\n\nexport const Overlay: FC<OverlayProps> = ({ className, children }) => {\n return <div className={clsx(styles.overlay, className)}>{children}</div>;\n};\n","import styles from './Skeleton.module.css';\n\nexport const Skeleton = () => {\n return <div className={styles.skeleton} />;\n};\n","import React from 'react';\nimport styles from './Typography.module.css';\nimport clsx from 'clsx';\n\ntype TypographyElement = 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'div';\n\ntype TypographyProps = {\n children: React.ReactNode;\n as?: TypographyElement;\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n};\n\nexport function Typography({\n children,\n as: Component = 'p',\n className,\n style,\n title,\n}: TypographyProps): React.JSX.Element {\n return (\n <Component title={title} className={clsx(styles.typography, className)} style={style}>\n {children}\n </Component>\n );\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const shallowEqual = (object1: any, object2: any): boolean => {\n const keys1 = Object.keys(object1 ?? {});\n const keys2 = Object.keys(object2 ?? {});\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (object1[key]?.toString() !== object2[key]?.toString()) {\n return false;\n }\n }\n\n return true;\n};\n"],"mappings":"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","names":["mergician","mergician","styles","mergician","ChartJS","CategoryScale","LinearScale","Title","Tooltip","Legend","LogarithmicScale","styles","useRef","mergician","mergician","mergician","ChartDataLabels","jsx","ChartJS","CategoryScale","LinearScale","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","useRef","mergician","styles","styles","styles","jsx","Fragment","jsx","jsx","jsxs","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","useRef","jsx","ChartJS","Tooltip","Legend","ChartDataLabels","AnnotationPlugin","useRef","mergician","styles","useRef","Pie","ArcElement","ChartJS","Legend","Tooltip","ChartDataLabels","mergician","styles","AnnotationPlugin","jsx","ChartJS","ArcElement","Tooltip","Legend","ChartDataLabels","useRef","Pie","clsx","hex","jsx","jsxs","clsx","useMemo","useState","tableStyles","clsx","jsx","jsxs","useMemo","useState","clsx","tableStyles","styles","clsx","styles","tableStyles","clsx","useEffect","useState","useRef","useEffect","useCallback","jsx","jsxs","useState","useEffect","styles","clsx","tableStyles","clsx","clsx","styles","jsx","useState","tableStyles","jsx","jsxs","clsx","styles","useEffect","jsx","jsxs","jsx","jsxs","clsx","styles","useMemo","clsx","tableStyles","useEffect","useRef","forwardRef","useRef","jsx","jsxs","clsx","tableStyles","useState","IconCaretDownFilled","styles","clsx","jsx","jsx","useState","useState","clsx","styles","jsx","jsxs","jsx","jsxs","styles","IconCaretDownFilled","clsx","forwardRef","jsx","jsxs","useEffect","useRef","styles","clsx","jsx","clsx","styles","jsx","styles","clsx","jsx","jsxs","styles","jsx","jsxs","useState","styles","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","forwardRef","value","forwardRef","Fragment","jsx","jsxs","forwardRef","Fragment","useEffect","useMemo","useRef","useState","DropdownMenu","styles","clsx","jsx","jsxs","styles","useEffect","styles","jsx","jsx","jsxs","useState","useRef","useEffect","useMemo","styles","Fragment","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","clsx","styles","jsx","jsxs","clsx","styles","jsx","React","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","styles","jsx","styles","clsx","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/shared/ConditionalWrapper/ConditionalWrapper.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/hooks/useResizeObserver.hook.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/Table/TablePaginated/TablePaginated.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/hooks/useDebounce.hook.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/TablePaginated/TablePaginated.hooks.ts","../src/components/charts/tables/Table/TableScrollable/TableScrollable.tsx","../src/components/charts/tables/Table/TableScrollable/TableScrollable.hooks.ts","../src/components/editors/dates/DateRangePicker/DateRangePicker.tsx","../src/components/editors/dates/DateRangePicker/DateRangePickerChevron.tsx","../src/utils/date.utils.ts","../src/components/editors/dates/DateRangePickerField/DateRangePickerField.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.tsx","../src/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Button/Button.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.ts","../src/components/editors/selects/shared/useSelectSearchFocus.hook.ts","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.tsx","../src/utils/debounce.utils.ts","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/Switch/Switch.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Typography/Typography.tsx","../src/utils/object.utils.ts"],"sourcesContent":["import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartJSOrUndefined } from 'react-chartjs-2/dist/types';\n\nexport const getSegmentIndexClicked = (\n event: React.MouseEvent<HTMLCanvasElement>,\n chartRef: React.RefObject<ChartJSOrUndefined | null>,\n): number | undefined => {\n const chart = chartRef.current;\n\n if (!chart) return undefined;\n\n const points = chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false,\n );\n\n return points[0]?.index;\n};\n","import { StylesKeys } from './styles.constants';\n\n/**\n * Attempts to interpret a CSS variable as a number (for lengths)\n * or a string (for colors, etc.).\n *\n * Examples:\n * --var: 2rem -> returns number (px)\n * --var: 16px -> returns number\n * --var: 3 -> returns number (parsed float)\n * --var: #3498db -> returns string\n * --var: rgba(52, 152, 219, 0.8) -> returns string\n */\nconst numericRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst getStyleValue = (variableName: StylesKeys): string => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n const computedStyle = getComputedStyle(document.documentElement);\n return computedStyle.getPropertyValue(variableName).trim();\n};\n\nexport const getStyle = (variableName: StylesKeys, fallbackValue?: string): string => {\n const rawValue = getStyleValue(variableName);\n if (!rawValue) return fallbackValue ?? rawValue;\n\n // Colors\n const firstChar = rawValue.charAt(0);\n if (firstChar === '#' || rawValue.startsWith('rgb(') || rawValue.startsWith('rgba(')) {\n return rawValue;\n }\n\n // Others like font-family\n return rawValue;\n};\n\nexport const getStyleNumber = (\n variableName: StylesKeys,\n fallbackValue?: string,\n): number | undefined => {\n const rawValue = getStyleValue(variableName) || fallbackValue;\n\n if (!rawValue) return undefined;\n\n const numericValue = parseFloat(rawValue);\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n // Px\n if (rawValue.slice(-2) === 'px') {\n return numericValue;\n }\n\n // Rem/Em\n const unit3 = rawValue.slice(-3);\n if (unit3 === 'rem') {\n return numericValue * rootFontSize;\n }\n\n // Pure number\n if (numericRegex.test(rawValue)) {\n return numericValue;\n }\n return undefined;\n};\n","import { getStyle } from '../../styles/styles.utils';\n\nexport const getChartColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--5'),\n getStyle('--em-sem-chart-color--6'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--8'),\n getStyle('--em-sem-chart-color--9'),\n getStyle('--em-sem-chart-color--10'),\n];\n","import { ChartData, ChartOptions } from 'chart.js';\nimport { getChartColors } from '../charts.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptions,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n const chartColors = getChartColors();\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartColors[index % chartColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n grid: {\n display: true,\n color: getChartjsAxisOptionsScalesGridColor,\n },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: { display: false },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-barchart-border-radius', '0.375rem'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(getChartjsAxisOptions(), baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { CartesianTickOptions, ChartOptions, GridLineOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { getChartjsOptions } from './chartjs.constants';\n\nexport const getChartjsAxisOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n labels: {\n total: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n value: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksDefault = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksMuted = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color--muted', '#5C5C66'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesTitle = (): any => ({\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-grid-title-font-weight', '700'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesGrid = (): Partial<GridLineOptions> => ({\n color: getStyle('--em-chart-grid-line-color--light', '#EDEDF1'),\n lineWidth: getStyleNumber('--em-chart-grid-line-width--thin', '0.0625rem'),\n});\n\nexport const getChartjsAxisOptionsScales = (): Partial<ChartOptions['scales']> => ({\n x: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n },\n y: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n },\n});\n\nexport const getChartjsAxisOptions = (): Partial<ChartOptions> =>\n mergician(getChartjsOptions(), {\n plugins: getChartjsAxisOptionsPlugins(),\n scales: getChartjsAxisOptionsScales(),\n });\n\nexport const chartjsAxisOptionsLayoutPadding: number = 30;\n\nfunction isMixedValues(values: number[]): boolean {\n const hasPos = values.some((v) => v > 0);\n const hasNeg = values.some((v) => v < 0);\n return hasPos && hasNeg;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesGridColor = (ctx: any) => {\n if (ctx.tick.value === 0) {\n if (ctx.chart.data.datasets.length === 0) {\n return undefined;\n }\n\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartColors[index % chartColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\nimport { AutoTextSize } from 'auto-text-size';\nimport ConditionalWrapper from '../../shared/ConditionalWrapper/ConditionalWrapper';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n trendFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n noPreviousDataLabel = 'No previous data',\n valueFormatter,\n}) => {\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n const autoResizeValueFontSize = !valueFontSize;\n return (\n <div className={styles.kpiChartContainer}>\n <div className={styles.kpiChartValueContainer}>\n <ConditionalWrapper\n condition={autoResizeValueFontSize}\n wrapper={(children) => (\n <AutoTextSize mode=\"boxoneline\" minFontSizePx={1} maxFontSizePx={999}>\n {children}\n </AutoTextSize>\n )}\n >\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize,\n }}\n >\n {displayValue}\n </h2>\n </ConditionalWrapper>\n </div>\n\n <div className={styles.kpiComparisonContainer} style={{ fontSize: trendFontSize }}>\n <div style={{ visibility: hasComparisonValue ? 'visible' : 'hidden' }}>\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n noPreviousDataLabel={noPreviousDataLabel}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n noPreviousDataLabel,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n const showNoPreviousData = showChangeAsPercentage && Number(comparisonValue) === 0;\n\n return (\n <div className={styles.kpiChangeContainerSizeGuide}>\n {/* This is responsible to setting the size of the container */}\n <div className={clsx(styles.kpiChartChangeContainer, styles.hidden)}>\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n <span className={styles.kpiComparisonLabel}>{comparisonLabel}</span>\n </div>\n {/* This is responsible for displaying the content on the available size of the container */}\n <div className={styles.kpiAbsoluteContainer}>\n <div className={styles.kpiChartChangeContainer}>\n {showNoPreviousData ? (\n <span className={styles.kpiComparisonLabel}>{noPreviousDataLabel}</span>\n ) : (\n <>\n {!equalComparison && (\n <span\n className={clsx(\n styles.kpiChangeBadge,\n getChangeClass(isPositive, invertChangeColors),\n )}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n","type ConditionalWrapperProps = {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n};\n\nconst ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : <>{children}</>;\n\nexport default ConditionalWrapper;\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport { useResizeObserver } from '../../../../hooks/useResizeObserver.hook';\n\nconst MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const containerRef = useRef(null);\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n const { height, width } = useResizeObserver(containerRef, 0);\n\n const hideChart =\n height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;\n\n return (\n <div className={styles.chartContainer} ref={containerRef}>\n {hideChart ? null : (\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n )}\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(\n elRef: React.RefObject<T | null>,\n timeout = 100,\n): Size => {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateSize = (rect: DOMRectReadOnly | DOMRect) => {\n setSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n });\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n updateSize(entry.contentRect);\n }, timeout);\n });\n\n ro.observe(el);\n\n // initial size\n updateSize(el.getBoundingClientRect());\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef, timeout]);\n\n return size;\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import { getStyle } from '../../../../styles/styles.utils';\nimport { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value))\n return getStyle('--em-tablechart-cell-background', '#fff');\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor?: string;\n midColor: string;\n maxColor?: string;\n}) => {\n minColor = minColor ?? lerpColor(midColor, LERP_LIGHTEST_COLOR, 0.5);\n maxColor = maxColor ?? lerpColor(midColor, LERP_DARKEST_COLOR, 0.5);\n\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","export const getTableCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : 'unset',\n maxWidth: width ? `${width}px` : 'unset',\n width: width ? `${width}px` : 'unset',\n };\n};\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue != null) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue != null) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(String(row))?.get(String(columnValue)) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(String(row)) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import * as React from 'react';\nimport styles from '../../tables.module.css';\nimport clsx from 'clsx';\nimport { TableHeaderItem, TableSort } from '../table.types';\nimport { TableHeader } from '../components/TableHeader/TableHeader';\nimport { TableBody } from '../components/TableBody/TableBody';\nimport { TablePagination } from '../components/TablePagination/TablePagination';\n\nexport type TablePaginatedProps<T> = {\n showIndex?: boolean;\n className?: string;\n headers: TableHeaderItem<T>[];\n rows: T[];\n page: number;\n pageSize: number;\n paginationLabel?: string;\n total?: number;\n sort?: TableSort<T>;\n onRowIndexClick?: (rowIndex: number) => void;\n onPageChange: (page: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TablePaginated = React.forwardRef<HTMLDivElement, TablePaginatedProps<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <T extends Record<string, any>>(\n props: TablePaginatedProps<T>,\n ref: React.Ref<HTMLDivElement>,\n ): React.JSX.Element => {\n const {\n headers,\n rows,\n className,\n total,\n page,\n pageSize,\n paginationLabel,\n sort,\n showIndex = false,\n onRowIndexClick,\n onPageChange,\n onSortChange,\n } = props;\n\n return (\n <div ref={ref} className={clsx(styles.tableContainer, className)}>\n <div className={styles.tableContainerScroll}>\n <table className={styles.table}>\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n <TableBody\n onRowIndexClick={onRowIndexClick}\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n page={page}\n pageSize={pageSize}\n />\n </table>\n </div>\n <TablePagination\n page={page}\n pageSize={pageSize}\n paginationLabel={paginationLabel}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n },\n);\n\nTablePaginated.displayName = 'TablePaginated';\n","import { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\nimport { useEffect, useState } from 'react';\nimport { useDebounce } from '../../../../../../hooks/useDebounce.hook';\nimport { TablePaginatedProps } from '../../TablePaginated/TablePaginated';\n\nexport type TableHeaderProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'sort' | 'onSortChange'\n>;\n\nconst getHeaderAriaSort = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id ? (sort.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n};\n\nconst getHeaderAriaLabel = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id\n ? sort.direction === 'asc'\n ? `Sort by ${header.title}, currently ascending. Activate to sort descending.`\n : `Sort by ${header.title}, currently descending. Activate to sort ascending.`\n : `Sort by ${header.title}. Activate to sort ascending.`;\n};\nexport const TableHeader = <T,>({\n headers,\n sort,\n showIndex,\n onSortChange,\n}: TableHeaderProps<T>) => {\n const [currentSort, setCurrentSort] = useState(sort);\n\n const debouncedUpdateState = useDebounce((value) => {\n if (value === undefined && value === sort) {\n return;\n }\n if (value?.id === sort?.id && value?.direction === sort?.direction) {\n return;\n }\n\n onSortChange?.(value);\n });\n\n useEffect(() => {\n debouncedUpdateState(currentSort);\n }, [currentSort, debouncedUpdateState]);\n\n const getSortIcon = (header: TableHeaderItem<T>) => {\n if (!currentSort) return <IconCaretUpDownFilled />;\n\n if (currentSort.id === header.id) {\n if (currentSort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (currentSort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleNewSortClick = (clickedHeader: keyof T | undefined) => {\n // Un-select sort\n if (!clickedHeader) return setCurrentSort(undefined);\n\n // New sort\n if (currentSort?.id !== clickedHeader)\n return setCurrentSort({ id: clickedHeader, direction: TableSortDirection.ASC });\n\n // Change current sort direction\n if (currentSort?.direction === undefined)\n return setCurrentSort({ id: clickedHeader, direction: TableSortDirection.ASC });\n if (currentSort?.direction === TableSortDirection.ASC)\n return setCurrentSort({ id: clickedHeader, direction: TableSortDirection.DESC });\n\n // Remove sort\n return setCurrentSort(undefined);\n };\n\n return (\n <thead className={styles.tableHeader}>\n <tr>\n {showIndex && (\n <th className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>#</th>\n )}\n {headers.map((header) => (\n <th\n className={styles.tableHeaderCell}\n key={header.id as string}\n style={{ minWidth: header.minWidth }}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(sort, header)}\n >\n <button\n onClick={() => handleNewSortClick(header.id)}\n aria-label={getHeaderAriaLabel(sort, header)}\n >\n {header.title}\n {getSortIcon(header)}\n </button>\n </th>\n ))}\n </tr>\n </thead>\n );\n};\n","import { CSSProperties } from 'react';\nimport { CssSize } from '../../../../types/css.types';\n\nexport const TableSortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\nexport type TableSort<T> = {\n id: keyof T;\n direction: (typeof TableSortDirection)[keyof typeof TableSortDirection];\n};\nexport const TableHeaderAlign = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\n\nexport type TableHeaderItemAlign = (typeof TableHeaderAlign)[keyof typeof TableHeaderAlign];\n\nexport type TableHeaderCell = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => React.ReactElement<HTMLTableCellElement>;\n\nexport type TableHeaderCellStyle = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => CSSProperties | undefined;\n\nexport type TableHeaderItem<T> = {\n id: keyof T;\n title: React.ReactNode;\n align?: TableHeaderItemAlign;\n field?: keyof T;\n minWidth?: CssSize;\n sort?: TableSort<T>;\n accessor?: (row: T) => React.ReactNode;\n cell?: TableHeaderCell;\n cellStyle?: TableHeaderCellStyle;\n};\n","import { useRef, useEffect, useCallback } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout>(null);\n const fnRef = useRef(fn);\n\n // Always keep fn up to date without resetting timer\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n fnRef.current(...args);\n }, delay);\n },\n [delay],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return debouncedFn;\n}\n","import tableBodyStyles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TableHeaderItemAlign } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { CSSProperties, FC, RefObject, useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\nimport { TablePaginatedProps } from '../../TablePaginated/TablePaginated';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'onRowIndexClick'\n> & {\n pageSize?: number;\n page?: number;\n bottomRef?: RefObject<HTMLDivElement | null>;\n isLoading?: boolean;\n hasMoreData?: boolean;\n};\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n bottomRef,\n isLoading,\n hasMoreData,\n}: TableBodyProps<T>) => {\n const hasPaginatedIndex = pageSize !== undefined && page !== undefined;\n const showBottomRef = !isLoading && hasMoreData && bottomRef !== undefined;\n\n return (\n <tbody className={tableBodyStyles.tableBody}>\n {rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n onClick={() => onRowIndexClick?.(rowIndex)}\n className={clsx(rowIndex === rows.length - 1 && tableStyles.tableLastRow)}\n >\n {showIndex && (\n <td className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>\n {hasPaginatedIndex ? pageSize * page + rowIndex + 1 : rowIndex + 1}\n </td>\n )}\n {headers.map((header, cellIndex) => (\n <TableBodyCell\n key={cellIndex}\n header={header}\n row={row}\n rowIndex={rowIndex}\n cellIndex={cellIndex}\n />\n ))}\n </tr>\n ))}\n {showBottomRef && (\n <tr>\n <td colSpan={(showIndex ? 1 : 0) + headers.length} className={tableStyles.bottomRefCell}>\n <div ref={bottomRef} style={{ height: 1 }} />\n </td>\n </tr>\n )}\n </tbody>\n );\n};\n\ntype TableBodyCellProps<T> = {\n header: TableHeaderItem<T>;\n row: T;\n rowIndex: number;\n cellIndex: number;\n};\n\nconst TableBodyCell = <T,>({ header, row }: TableBodyCellProps<T>) => {\n const rawValue =\n header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n const value = header.accessor !== undefined ? header.accessor(row) : rawValue;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: tableBodyStyles.tableBodyCell });\n }\n\n return (\n <TableBodyCellWithCopy align={header.align} value={value} style={header.cellStyle?.(rawValue)}>\n {value}\n </TableBodyCellWithCopy>\n );\n};\n\ntype TableBodyCellWithCopyProps = {\n value: string;\n align?: TableHeaderItemAlign;\n children: React.ReactNode;\n style?: CSSProperties | undefined;\n};\nexport const TableBodyCellWithCopy: FC<TableBodyCellWithCopyProps> = ({\n value,\n align = 'left',\n children,\n style,\n}) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const handleCopy = () => {\n setIsPressedCopy(true);\n if (value !== undefined) {\n navigator.clipboard.writeText(String(value));\n }\n };\n\n return (\n <td\n title={value}\n style={{ textAlign: align, ...style }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n tableBodyStyles.copyButton,\n align === TableHeaderAlign.RIGHT && tableBodyStyles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {children}\n </td>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n} from '@tabler/icons-react';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport styles from './TablePagination.module.css';\nimport { FC, useEffect } from 'react';\nimport { TablePaginatedProps } from '../../TablePaginated/TablePaginated';\n\nexport type TablePaginationProps = Pick<\n TablePaginatedProps<unknown>,\n 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'\n>;\n\nexport const getTableTotalPages = (\n total: number | undefined,\n pageSize: number,\n): number | undefined => {\n return total ? Math.ceil(total / pageSize) : undefined;\n};\n\nexport const TablePagination: FC<TablePaginationProps> = ({\n page,\n pageSize,\n paginationLabel,\n total,\n onPageChange,\n}) => {\n const totalPages = getTableTotalPages(total, pageSize);\n\n const disabledPrev = page <= 0;\n const disabledNext = !totalPages || page >= totalPages - 1;\n\n useEffect(() => {\n if (totalPages && page >= totalPages) {\n onPageChange(0);\n }\n }, [totalPages, page]);\n\n return (\n <div className={styles.tablePagination} aria-label=\"Table pagination controls\">\n <div className={styles.tablePaginationCentral}>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronsLeft}\n onClick={() => {\n onPageChange(0);\n }}\n disabled={disabledPrev}\n aria-label=\"First page\"\n />\n <ActionIcon\n icon={IconChevronLeft}\n onClick={() => {\n onPageChange(page - 1);\n }}\n disabled={disabledPrev}\n aria-label=\"Previous page\"\n />\n </div>\n <span>{paginationLabel ?? `Page ${page + 1} of ${totalPages ?? '?'}`}</span>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronRight}\n onClick={() => {\n onPageChange(page + 1);\n }}\n disabled={disabledNext}\n aria-label=\"Next page\"\n />\n <ActionIcon\n icon={IconChevronsRight}\n onClick={() => totalPages && onPageChange(totalPages - 1)}\n disabled={disabledNext}\n aria-label=\"Last page\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import { useMemo } from 'react';\n\ntype UseTableGetRowsPerPageProps = {\n availableHeight: number;\n headerHeight: number;\n rowHeight: number;\n footerHeight?: number;\n};\nexport const useTableGetRowsPerPage = ({\n availableHeight,\n headerHeight,\n rowHeight,\n footerHeight = 0,\n}: UseTableGetRowsPerPageProps): number =>\n useMemo(() => {\n const h = availableHeight;\n if (!h) return 0;\n\n // Available vertical space for BODY rows only\n let available = h - headerHeight - footerHeight;\n if (available < 0) available = 0;\n\n // DO NOT show partial rows: floor only\n const rows = Math.floor(available / rowHeight);\n return Math.max(0, rows);\n }, [availableHeight, headerHeight, rowHeight, footerHeight]);\n","import clsx from 'clsx';\nimport tableStyles from '../../tables.module.css';\nimport { TableHeaderItem, TableSort } from '../table.types';\nimport { TableHeader } from '../components/TableHeader/TableHeader';\nimport { TableBody } from '../components/TableBody/TableBody';\nimport { useInfiniteScroll } from './TableScrollable.hooks';\nimport { forwardRef, useImperativeHandle, useRef } from 'react';\n\nexport type TableScrollableHandle = {\n scrollToTop: (behavior?: ScrollBehavior) => void;\n getScrollElement: () => HTMLDivElement | null;\n};\n\nexport type TableScrollableProps<T> = {\n bottomDistanceToPrefetch?: number;\n className?: string;\n hasMoreData?: boolean;\n headers: TableHeaderItem<T>[];\n isLoading?: boolean;\n loadingLabel?: string;\n rows: T[];\n showIndex?: boolean;\n sort?: TableSort<T>;\n onNextPage: () => void;\n onRowIndexClick?: (rowIndex: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TableScrollable = forwardRef<TableScrollableHandle, TableScrollableProps<any>>(\n (\n {\n sort,\n onSortChange,\n showIndex,\n headers,\n rows,\n onNextPage,\n hasMoreData = true,\n className,\n onRowIndexClick,\n isLoading = false,\n loadingLabel = 'Loading...',\n bottomDistanceToPrefetch,\n },\n ref,\n ) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n\n // Expose imperative API to parent\n useImperativeHandle(\n ref,\n () => ({\n scrollToTop: (behavior: ScrollBehavior = 'auto') => {\n scrollRef.current?.scrollTo({ top: 0, behavior });\n },\n getScrollElement: () => scrollRef.current,\n }),\n [],\n );\n\n useInfiniteScroll({\n rootRef: scrollRef,\n enabled: hasMoreData && !isLoading,\n onPrefetch: onNextPage,\n bottomDistanceToPrefetch,\n });\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n ref={scrollRef}\n className={clsx(tableStyles.tableAdjustedContainer, tableStyles.fullWidth)}\n >\n <table\n className={clsx(tableStyles.table, tableStyles.cellWrap)}\n aria-label=\"Scrollable table\"\n >\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n\n <TableBody\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n onRowIndexClick={onRowIndexClick}\n bottomRef={sentinelRef}\n isLoading={isLoading}\n hasMoreData={hasMoreData}\n />\n </table>\n {isLoading && <div className={tableStyles.loadingIndicator}>{loadingLabel}</div>}\n </div>\n </div>\n );\n },\n);\n\nTableScrollable.displayName = 'TableScrollable';\n","import { useEffect, useRef } from 'react';\n\nexport function useInfiniteScroll({\n rootRef,\n enabled = true,\n onPrefetch,\n bottomDistanceToPrefetch = 750,\n}: {\n rootRef: React.RefObject<HTMLElement | null>;\n enabled?: boolean;\n onPrefetch: () => void;\n bottomDistanceToPrefetch?: number;\n}) {\n const loadingRef = useRef(false);\n\n useEffect(() => {\n if (!enabled) return;\n\n const el = rootRef.current;\n if (!el) return;\n\n const onScroll = () => {\n if (!enabled) return;\n if (loadingRef.current) return;\n\n const { scrollTop, clientHeight, scrollHeight } = el;\n\n const distanceFromBottom = scrollHeight - (scrollTop + clientHeight);\n\n if (distanceFromBottom <= bottomDistanceToPrefetch) {\n loadingRef.current = true;\n onPrefetch();\n }\n };\n\n onScroll(); // When is near to bottom\n el.addEventListener('scroll', onScroll, { passive: true });\n return () => el.removeEventListener('scroll', onScroll);\n }, [enabled, onPrefetch, rootRef, bottomDistanceToPrefetch]);\n\n useEffect(() => {\n if (enabled) loadingRef.current = false;\n }, [enabled]);\n}\n","import React, { useState } from 'react';\nimport { DateRange, DayPicker } from 'react-day-picker';\nimport './DateRangePicker.css';\nimport { DateRangePickerChevron } from './DateRangePickerChevron';\nimport { endOfDayUTC } from '../../../../utils/date.utils';\nimport * as rdpLocales from 'react-day-picker/locale';\n\nexport type DateRangePickerProps = {\n numberOfMonths?: number;\n locale?: string;\n value?: DateRange;\n onChange: (dateRange: DateRange | undefined) => void;\n};\n\nexport const DateRangePicker: React.FC<DateRangePickerProps> = ({\n value,\n numberOfMonths = 1,\n locale = 'en',\n onChange,\n}) => {\n const [month, setMonth] = useState<Date>(value?.from ?? new Date());\n\n const handleChange = (range: DateRange | undefined) => {\n if (range?.to) {\n range.to = endOfDayUTC(range.to);\n }\n onChange(range);\n };\n\n const now = new Date();\n const endMonth = new Date(now.getFullYear() + 2, now.getMonth());\n\n return (\n <DayPicker\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={numberOfMonths}\n components={{ Chevron: DateRangePickerChevron }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n locale={(rdpLocales as Record<string, any>)[locale]}\n mode=\"range\"\n navLayout=\"around\"\n onSelect={handleChange}\n selected={value}\n timeZone=\"UTC\"\n showOutsideDays\n captionLayout=\"dropdown-years\"\n endMonth={endMonth}\n animate\n />\n );\n};\n","import { IconCaretDownFilled } from '@tabler/icons-react';\nimport styles from './DateRangePickerChevron.module.css';\nimport clsx from 'clsx';\n\ntype DateRangePickerChevronProps = {\n className?: string;\n orientation?: 'up' | 'down' | 'left' | 'right';\n size?: number;\n};\n\nconst SMALL_SIZE = 18;\n\nexport const DateRangePickerChevron = ({\n orientation,\n size,\n}: DateRangePickerChevronProps): React.JSX.Element => {\n const rotation =\n orientation === 'left'\n ? 'rotate(90deg)'\n : orientation === 'right'\n ? 'rotate(-90deg)'\n : undefined;\n\n const isSmallChevron = size === SMALL_SIZE;\n\n return (\n <button\n className={clsx(styles.chevron, isSmallChevron && styles.small)}\n style={{\n transform: rotation,\n }}\n >\n <IconCaretDownFilled />\n </button>\n );\n};\n","import { DateRange } from 'react-day-picker';\n\nexport const isSameDate = (a?: Date, b?: Date) => a?.getTime() === b?.getTime();\n\nexport const isSameDateRange = (a?: DateRange, b?: DateRange) =>\n isSameDate(a?.from, b?.from) && isSameDate(a?.to, b?.to);\n\nexport const endOfDayUTC = (date: Date) => {\n const d = new Date(date);\n d.setUTCHours(23, 59, 59, 999);\n return d;\n};\n","import { FC, useState } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../../selects/shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { IconProps } from '@tabler/icons-react';\nimport { SelectFieldContent } from '../../selects/shared/SelectFieldContent/SelectFieldContent';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { DateRangePicker, DateRangePickerProps } from '../DateRangePicker/DateRangePicker';\nimport { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './DateRangePickerField.module.css';\nimport { isSameDateRange } from '../../../../utils/date.utils';\n\ntype DateRangePickerFieldProps = {\n displayValue?: string;\n startIcon?: React.ComponentType<IconProps>;\n placeholder?: string;\n disabled?: boolean;\n error?: boolean;\n errorMessage?: string;\n clearable?: boolean;\n onChange: (dateRange: DateRange | undefined) => void;\n submitLabel?: string;\n avoidCollisions?: boolean;\n} & FieldHeaderProps &\n DateRangePickerProps;\n\nconst getDateRangePickerLabel = (\n dateRange: DateRange | undefined,\n displayValue?: string,\n): string | undefined => {\n if (!dateRange) return undefined;\n\n if (displayValue || displayValue === '') return displayValue;\n\n const { from, to } = dateRange;\n\n if (!from || !to) return undefined;\n\n return `${from ? from.toLocaleDateString() : ''} - ${to ? to.toLocaleDateString() : ''}`;\n};\n\nexport const DateRangePickerField: FC<DateRangePickerFieldProps> = ({\n locale,\n displayValue,\n value,\n startIcon,\n label,\n disabled,\n placeholder,\n required,\n error,\n errorMessage,\n clearable,\n numberOfMonths = 1,\n submitLabel = 'Apply',\n avoidCollisions,\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [currentDateRange, setCurrentDateRange] = useState<DateRange | undefined>(value);\n\n const valueLabel = getDateRangePickerLabel(value, displayValue);\n const hasError = error || !!errorMessage;\n\n const handleChange = () => {\n onChange(currentDateRange);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setCurrentDateRange(undefined);\n onChange(undefined);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setIsOpen(true);\n return;\n }\n setCurrentDateRange(value);\n setIsOpen(false);\n };\n\n const isSubmitDisabled = isSameDateRange(currentDateRange, value);\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n disabled={disabled}\n avoidCollisions={avoidCollisions}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={valueLabel}\n onClear={handleClear}\n isClearable={clearable}\n error={hasError}\n />\n }\n >\n <SelectFieldContent fitContent>\n <DateRangePicker\n locale={locale}\n numberOfMonths={numberOfMonths}\n value={currentDateRange}\n onChange={setCurrentDateRange}\n />\n <Button\n size=\"small\"\n className={styles.submitButton}\n onClick={handleChange}\n disabled={isSubmitDisabled}\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldHeader.module.css';\n\nexport type FieldHeaderProps = {\n className?: string;\n label?: string;\n required?: boolean;\n requiredLabel?: string;\n};\n\nexport const FieldHeader = ({\n label,\n required,\n requiredLabel = 'Required',\n className,\n}: FieldHeaderProps) => {\n if (!label && !required) {\n return null;\n }\n\n return (\n <label className={clsx(styles.fieldHeader, className)}>\n {label}\n {required && <span>{requiredLabel}</span>}\n </label>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC } from 'react';\n\nexport type DropdownProps = {\n triggerComponent: React.ReactNode;\n children: React.ReactNode;\n disabled?: boolean;\n open?: boolean;\n side?: React.ComponentProps<typeof DropdownMenu.Content>['side'];\n align?: React.ComponentProps<typeof DropdownMenu.Content>['align'];\n avoidCollisions?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n triggerComponent,\n children,\n disabled,\n open,\n side = 'bottom',\n align = 'start',\n avoidCollisions = true,\n onOpenChange,\n}) => {\n return (\n <DropdownMenu.Root open={open} onOpenChange={onOpenChange} modal={false}>\n <DropdownMenu.Trigger asChild disabled={disabled}>\n {triggerComponent}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n side={side}\n align={align}\n style={{ zIndex: 5 }}\n avoidCollisions={avoidCollisions}\n >\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconProps, IconX } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: React.ComponentType<IconProps>;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n fitContent?: boolean;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n fitContent = false,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div\n ref={containerRef}\n tabIndex={-1}\n className={clsx(styles.selectFieldContent, fitContent && styles.fitContent, className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldFeedback.module.css';\nimport { FC } from 'react';\n\nexport type FieldFeedbackProps = {\n message: string;\n variant?: 'error';\n className?: string;\n};\n\nexport const FieldFeedback: FC<FieldFeedbackProps> = ({ message, variant, className }) => {\n return (\n <p className={clsx(styles.fieldFeedback, variant && styles[variant], className)}>{message}</p>\n );\n};\n","import { IconProps } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\n\ntype NumberFieldProps = Omit<InputFieldProps, 'value' | 'onChange'> & {\n value?: number | null;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (value: number | null) => void;\n};\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (\n {\n value = null,\n placeholder = 'Enter number',\n onChange,\n error,\n errorMessage,\n clearable,\n ...props\n },\n ref,\n ) => {\n const handleChange = (value: string) => {\n if (value === '') {\n onChange?.(null);\n return;\n }\n\n const numericValue = Number(value);\n if (!isNaN(numericValue) && isFinite(numericValue)) {\n onChange?.(numericValue);\n }\n };\n\n return (\n <InputField\n {...props}\n value={value?.toString() || ''}\n placeholder={placeholder}\n onChange={handleChange}\n type=\"number\"\n clearable={clearable}\n error={error}\n errorMessage={errorMessage}\n ref={ref}\n />\n );\n },\n);\n\nNumberField.displayName = 'NumberField';\n","import { IconProps, IconX } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n ({ value = '', placeholder = 'Enter text', maxLength, error, errorMessage, ...props }, ref) => {\n return (\n <>\n <InputField\n value={value}\n placeholder={placeholder}\n ref={ref}\n maxLength={maxLength}\n clearable\n error={error}\n errorMessage={errorMessage}\n {...props}\n />\n {maxLength && <FieldFeedback message={`${value?.length}/${maxLength} Characters`} />}\n </>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: React.ComponentType<IconProps>;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n avoidCollisions?: boolean;\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n avoidCollisions,\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n avoidCollisions={avoidCollisions}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC, ImgHTMLAttributes, SVGProps } from 'react';\nimport styles from './SelectFieldOption.module.css';\nimport clsx from 'clsx';\n\ntype SelectListOptionIcon =\n | React.ReactElement<SVGProps<SVGSVGElement>>\n | React.ReactElement<ImgHTMLAttributes<HTMLImageElement>>;\n\nexport type SelectListOptionProps = {\n value?: string;\n isSelected?: boolean;\n label: string;\n rightLabel?: string;\n startIcon?: SelectListOptionIcon;\n endIcon?: SelectListOptionIcon;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n};\nexport type SelectListOptionPropsWithCategory = SelectListOptionProps & {\n category: string;\n};\n\nexport const SelectListOption: FC<SelectListOptionProps> = ({\n value,\n isSelected,\n label,\n rightLabel,\n startIcon,\n endIcon,\n disabled,\n ...props\n}) => {\n return (\n <DropdownMenu.Item\n className={clsx(\n styles.selectFieldOption,\n disabled && styles.disabled,\n isSelected && styles.selected,\n )}\n data-value={value}\n {...props}\n >\n <span className={styles.leftContent}>\n {startIcon}\n <span title={label}>{label}</span>\n </span>\n <span className={styles.rightContent}>\n <span title={rightLabel}>{rightLabel}</span>\n {endIcon}\n </span>\n </DropdownMenu.Item>\n );\n};\n","import {\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from './SelectFieldOptions/SelectFieldOption/SelectFieldOption';\n\ntype GroupedOptions = {\n [category: string]: SelectListOptionPropsWithCategory[];\n};\n\nexport const groupOptionsByCategory = (\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[],\n): GroupedOptions | null => {\n const result = options.reduce<GroupedOptions>((acc, option) => {\n if ('category' in option && option.category) {\n const category = option.category;\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(option);\n }\n return acc;\n }, {});\n\n // Return null if no categories were found\n return Object.keys(result).length === 0 ? null : result;\n};\n","import { useEffect } from 'react';\n\nexport const useSelectSearchFocus = (\n isOpen: boolean,\n searchFieldRef: React.RefObject<HTMLInputElement | null>,\n) => {\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n (searchFieldRef.current as unknown as HTMLInputElement)?.focus();\n }, 100);\n }\n }, [isOpen, searchFieldRef]);\n};\n","import { FC } from 'react';\nimport styles from './SelectFieldCategory.module.css';\n\ntype SelectFieldCategoryProps = {\n label: string;\n};\n\nexport const SelectFieldCategory: FC<SelectFieldCategoryProps> = ({ label }) => {\n return <span className={styles.selectFieldCategory}>{label}</span>;\n};\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n let timer: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n}\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: React.ComponentType<IconProps>;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n avoidCollisions?: boolean;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n avoidCollisions,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n avoidCollisions={avoidCollisions}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './Switch.module.css';\n\ntype SwitchProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n label?: string;\n};\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked,\n onChange,\n disabled = false,\n className,\n label,\n ...props\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled && onChange) {\n onChange(event.target.checked);\n }\n };\n\n // Ensure accessibility: either aria-label must be provided\n if (!props['aria-label']) {\n console.warn(\n 'Switch component requires either a label prop or aria-label prop for accessibility',\n );\n }\n\n return (\n <label\n className={clsx(\n className,\n styles.switch,\n checked && styles.checked,\n disabled && styles.disabled,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n {...props}\n />\n <span className={styles.switchTrack} aria-hidden=\"true\">\n <span className={styles.switchThumb} aria-hidden=\"true\" />\n </span>\n {label && <span className={clsx(styles.switchLabel)}>{label}</span>}\n </label>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import React from 'react';\nimport styles from './Card.module.css';\nimport clsx from 'clsx';\n\ntype CardProps = React.HTMLAttributes<HTMLDivElement> & {\n children?: React.ReactNode;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div className={clsx(styles.card, className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCard.displayName = 'Card';\n\ntype CardHeaderProps = {\n title?: string;\n subtitle?: string;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle }) => {\n if (!title && !subtitle) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n );\n};\n\ntype CardContentProps = {\n children: React.ReactNode;\n};\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ children }, ref) => {\n return (\n <div className={styles.cardContent} ref={ref}>\n {children}\n </div>\n );\n },\n);\n\nCardContent.displayName = 'CardContent';\n","import { IconProps } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: React.ComponentType<IconProps>;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport { Icon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './GhostButton.module.css';\n\ntype GhostButtonProps = {\n startIcon?: Icon;\n endIcon?: Icon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const GhostButton: React.FC<GhostButtonProps> = ({\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.ghostButton, className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import clsx from 'clsx';\nimport styles from './Overlay.module.css';\nimport { FC, ReactNode } from 'react';\n\ntype OverlayProps = {\n className?: string;\n children?: ReactNode;\n};\n\nexport const Overlay: FC<OverlayProps> = ({ className, children }) => {\n return <div className={clsx(styles.overlay, className)}>{children}</div>;\n};\n","import styles from './Skeleton.module.css';\n\nexport const Skeleton = () => {\n return <div className={styles.skeleton} />;\n};\n","import React from 'react';\nimport styles from './Typography.module.css';\nimport clsx from 'clsx';\n\ntype TypographyElement = 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'div';\n\ntype TypographyProps = {\n children: React.ReactNode;\n as?: TypographyElement;\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n};\n\nexport function Typography({\n children,\n as: Component = 'p',\n className,\n style,\n title,\n}: TypographyProps): React.JSX.Element {\n return (\n <Component title={title} className={clsx(styles.typography, className)} style={style}>\n {children}\n </Component>\n );\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const shallowEqual = (object1: any, object2: any): boolean => {\n const keys1 = Object.keys(object1 ?? {});\n const keys2 = Object.keys(object2 ?? {});\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (object1[key]?.toString() !== object2[key]?.toString()) {\n return false;\n }\n }\n\n return true;\n};\n"],"mappings":"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","names":["mergician","mergician","styles","mergician","ChartJS","CategoryScale","LinearScale","Title","Tooltip","Legend","LogarithmicScale","styles","useRef","mergician","mergician","mergician","ChartDataLabels","jsx","ChartJS","CategoryScale","LinearScale","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","useRef","mergician","styles","styles","styles","jsx","Fragment","jsx","jsx","jsxs","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","useRef","jsx","ChartJS","Tooltip","Legend","ChartDataLabels","AnnotationPlugin","useRef","mergician","styles","useRef","Pie","ArcElement","ChartJS","Legend","Tooltip","ChartDataLabels","mergician","styles","AnnotationPlugin","jsx","ChartJS","ArcElement","Tooltip","Legend","ChartDataLabels","useRef","Pie","clsx","hex","jsx","jsxs","clsx","useMemo","useState","tableStyles","clsx","jsx","jsxs","useMemo","useState","clsx","tableStyles","styles","clsx","styles","tableStyles","clsx","useEffect","useState","useRef","useEffect","useCallback","jsx","jsxs","useState","useEffect","styles","clsx","tableStyles","clsx","clsx","styles","jsx","useState","tableStyles","jsx","jsxs","clsx","styles","useEffect","jsx","jsxs","jsx","jsxs","clsx","styles","useMemo","clsx","tableStyles","useEffect","useRef","forwardRef","useRef","jsx","jsxs","clsx","tableStyles","useState","IconCaretDownFilled","styles","clsx","jsx","jsx","useState","useState","clsx","styles","jsx","jsxs","jsx","jsxs","styles","IconCaretDownFilled","clsx","forwardRef","jsx","jsxs","useEffect","useRef","styles","clsx","jsx","clsx","styles","jsx","styles","clsx","jsx","jsxs","styles","jsx","jsxs","useState","styles","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","forwardRef","value","forwardRef","Fragment","jsx","jsxs","forwardRef","Fragment","useEffect","useMemo","useRef","useState","DropdownMenu","styles","clsx","jsx","jsxs","styles","useEffect","styles","jsx","jsx","jsxs","useState","useRef","useEffect","useMemo","styles","Fragment","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","clsx","styles","jsx","jsxs","clsx","styles","jsx","React","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","styles","jsx","styles","clsx","jsx"]}
|