@embeddable.com/remarkable-ui 2.0.10 → 2.0.11
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 +6 -2
- package/dist/index.js +53 -44
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -467,6 +467,10 @@ declare const getStyleNumber: (variableName: StylesKeys, fallbackValue?: string)
|
|
|
467
467
|
|
|
468
468
|
declare function useDebounce<T extends (...args: any[]) => void>(fn: T, delay?: number): (...args: Parameters<T>) => void;
|
|
469
469
|
|
|
470
|
-
|
|
470
|
+
type Size = {
|
|
471
|
+
width: number;
|
|
472
|
+
height: number;
|
|
473
|
+
};
|
|
474
|
+
declare const useResizeObserver: <T extends HTMLElement>(elRef: React.RefObject<T | null>, timeout?: number) => Size;
|
|
471
475
|
|
|
472
|
-
export { ActionIcon, BarChart, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DonutChart, Dropdown, FieldFeedback, FieldHeader, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, MultiSelectField, NumberField, Overlay, PieChart, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, SingleSelectField, Skeleton, Switch, TableHeaderAlign, type TableHeaderCell, type TableHeaderItem, type TableHeaderItemAlign, TablePaginated, type TablePaginatedProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, getBarChartData, getBarChartOptions, getChartColors, getChartContrastColors, getChartjsAxisOptions, getChartjsAxisOptionsPlugins, getChartjsAxisOptionsScales, getChartjsAxisOptionsScalesGrid, getChartjsAxisOptionsScalesGridColor, getChartjsAxisOptionsScalesTicksDefault, getChartjsAxisOptionsScalesTicksMuted, getChartjsAxisOptionsScalesTitle, getDonutChartOptions, getLineChartData, getLineChartOptions, getPieChartData, getPieChartOptions, getStyle, getStyleNumber, getTableTotalPages, useDebounce,
|
|
476
|
+
export { ActionIcon, BarChart, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DonutChart, Dropdown, FieldFeedback, FieldHeader, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, MultiSelectField, NumberField, Overlay, PieChart, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, SingleSelectField, Skeleton, Switch, TableHeaderAlign, type TableHeaderCell, type TableHeaderItem, type TableHeaderItemAlign, TablePaginated, type TablePaginatedProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, getBarChartData, getBarChartOptions, getChartColors, getChartContrastColors, getChartjsAxisOptions, getChartjsAxisOptionsPlugins, getChartjsAxisOptionsScales, getChartjsAxisOptionsScalesGrid, getChartjsAxisOptionsScalesGridColor, getChartjsAxisOptionsScalesTicksDefault, getChartjsAxisOptionsScalesTicksMuted, getChartjsAxisOptionsScalesTitle, getDonutChartOptions, getLineChartData, getLineChartOptions, getPieChartData, getPieChartOptions, getStyle, getStyleNumber, getTableTotalPages, useDebounce, useResizeObserver, useTableGetRowsPerPage };
|
package/dist/index.js
CHANGED
|
@@ -1561,7 +1561,7 @@ var KpiChart = ({
|
|
|
1561
1561
|
};
|
|
1562
1562
|
|
|
1563
1563
|
// src/components/charts/pies/DonutChart/DonutChart.tsx
|
|
1564
|
-
import { useRef as
|
|
1564
|
+
import { useRef as useRef8 } from "react";
|
|
1565
1565
|
import { Pie } from "react-chartjs-2";
|
|
1566
1566
|
import { ArcElement, Chart as ChartJS3, Legend as Legend3, Tooltip as Tooltip3 } from "chart.js";
|
|
1567
1567
|
import ChartDataLabels3 from "chartjs-plugin-datalabels";
|
|
@@ -1641,7 +1641,44 @@ var getDonutChartOptions = (options) => {
|
|
|
1641
1641
|
// src/components/charts/pies/DonutChart/DonutChart.tsx
|
|
1642
1642
|
import { mergician as mergician7 } from "mergician";
|
|
1643
1643
|
import styles24 from "./charts.module-YNKCWRLU.module.css";
|
|
1644
|
+
|
|
1645
|
+
// src/hooks/useResizeObserver.hook.ts
|
|
1646
|
+
import { useLayoutEffect, useRef as useRef7, useState as useState4 } from "react";
|
|
1647
|
+
var useResizeObserver = (elRef, timeout = 100) => {
|
|
1648
|
+
const [size, setSize] = useState4({ width: 0, height: 0 });
|
|
1649
|
+
const timeoutRef = useRef7(void 0);
|
|
1650
|
+
useLayoutEffect(() => {
|
|
1651
|
+
const el = elRef.current;
|
|
1652
|
+
if (!el) return;
|
|
1653
|
+
const updateSize = (rect) => {
|
|
1654
|
+
setSize({
|
|
1655
|
+
width: Math.max(0, rect.width),
|
|
1656
|
+
height: Math.max(0, rect.height)
|
|
1657
|
+
});
|
|
1658
|
+
};
|
|
1659
|
+
const ro = new ResizeObserver((entries) => {
|
|
1660
|
+
const entry = entries[0];
|
|
1661
|
+
if (!entry) return;
|
|
1662
|
+
if (timeoutRef.current) {
|
|
1663
|
+
clearTimeout(timeoutRef.current);
|
|
1664
|
+
}
|
|
1665
|
+
timeoutRef.current = window.setTimeout(() => {
|
|
1666
|
+
updateSize(entry.contentRect);
|
|
1667
|
+
}, timeout);
|
|
1668
|
+
});
|
|
1669
|
+
ro.observe(el);
|
|
1670
|
+
updateSize(el.getBoundingClientRect());
|
|
1671
|
+
return () => {
|
|
1672
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
1673
|
+
ro.disconnect();
|
|
1674
|
+
};
|
|
1675
|
+
}, [elRef, timeout]);
|
|
1676
|
+
return size;
|
|
1677
|
+
};
|
|
1678
|
+
|
|
1679
|
+
// src/components/charts/pies/DonutChart/DonutChart.tsx
|
|
1644
1680
|
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
1681
|
+
var MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;
|
|
1645
1682
|
ChartJS3.register(ArcElement, Tooltip3, Legend3, ChartDataLabels3, AnnotationPlugin2);
|
|
1646
1683
|
var DonutChart = ({
|
|
1647
1684
|
label,
|
|
@@ -1653,7 +1690,8 @@ var DonutChart = ({
|
|
|
1653
1690
|
showTooltips = true,
|
|
1654
1691
|
showValueLabels = true
|
|
1655
1692
|
}) => {
|
|
1656
|
-
const
|
|
1693
|
+
const containerRef = useRef8(null);
|
|
1694
|
+
const chartRef = useRef8(null);
|
|
1657
1695
|
const donutLabelOptions = mergician7(
|
|
1658
1696
|
getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),
|
|
1659
1697
|
options
|
|
@@ -1662,7 +1700,9 @@ var DonutChart = ({
|
|
|
1662
1700
|
const indexClicked = getSegmentIndexClicked(event, chartRef);
|
|
1663
1701
|
onSegmentClick?.(indexClicked);
|
|
1664
1702
|
};
|
|
1665
|
-
|
|
1703
|
+
const { height, width } = useResizeObserver(containerRef, 0);
|
|
1704
|
+
const hideChart = height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;
|
|
1705
|
+
return /* @__PURE__ */ jsx27("div", { className: styles24.chartContainer, ref: containerRef, children: hideChart ? null : /* @__PURE__ */ jsx27(
|
|
1666
1706
|
Pie,
|
|
1667
1707
|
{
|
|
1668
1708
|
ref: chartRef,
|
|
@@ -1674,7 +1714,7 @@ var DonutChart = ({
|
|
|
1674
1714
|
};
|
|
1675
1715
|
|
|
1676
1716
|
// src/components/charts/pies/PieChart/PieChart.tsx
|
|
1677
|
-
import { useRef as
|
|
1717
|
+
import { useRef as useRef9 } from "react";
|
|
1678
1718
|
import { Pie as Pie2 } from "react-chartjs-2";
|
|
1679
1719
|
import { ArcElement as ArcElement2, Chart as ChartJS4, Legend as Legend4, Tooltip as Tooltip4 } from "chart.js";
|
|
1680
1720
|
import ChartDataLabels4 from "chartjs-plugin-datalabels";
|
|
@@ -1691,7 +1731,7 @@ var PieChart = ({
|
|
|
1691
1731
|
showTooltips = true,
|
|
1692
1732
|
showValueLabels = true
|
|
1693
1733
|
}) => {
|
|
1694
|
-
const chartRef =
|
|
1734
|
+
const chartRef = useRef9(null);
|
|
1695
1735
|
const pieOptions = mergician8(
|
|
1696
1736
|
getPieChartOptions({
|
|
1697
1737
|
showLegend,
|
|
@@ -1887,7 +1927,7 @@ var TableHeader = ({
|
|
|
1887
1927
|
import styles28 from "./TableBody.module-ARNVVKDL.module.css";
|
|
1888
1928
|
import clsx18 from "clsx";
|
|
1889
1929
|
import { IconCopy, IconCopyCheckFilled } from "@tabler/icons-react";
|
|
1890
|
-
import { useState as
|
|
1930
|
+
import { useState as useState5 } from "react";
|
|
1891
1931
|
import tableStyles2 from "./tables.module-GNDYDW3Z.module.css";
|
|
1892
1932
|
import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1893
1933
|
var TableBody = ({
|
|
@@ -1921,7 +1961,7 @@ var TableBody = ({
|
|
|
1921
1961
|
)) });
|
|
1922
1962
|
};
|
|
1923
1963
|
var TableBodyCell = ({ header, row, rowIndex, cellIndex }) => {
|
|
1924
|
-
const [isPressedCopy, setIsPressedCopy] =
|
|
1964
|
+
const [isPressedCopy, setIsPressedCopy] = useState5(false);
|
|
1925
1965
|
const value = header.accessor !== void 0 ? header.accessor(row) : header.id !== void 0 ? (
|
|
1926
1966
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1927
1967
|
row[header.id]
|
|
@@ -2020,7 +2060,7 @@ var TablePaginated = React2.forwardRef(
|
|
|
2020
2060
|
TablePaginated.displayName = "TablePaginated";
|
|
2021
2061
|
|
|
2022
2062
|
// src/components/charts/tables/PivotTable/PivotTable.tsx
|
|
2023
|
-
import { useEffect as useEffect7, useMemo as useMemo3, useState as
|
|
2063
|
+
import { useEffect as useEffect7, useMemo as useMemo3, useState as useState6 } from "react";
|
|
2024
2064
|
import tableStyles3 from "./tables.module-GNDYDW3Z.module.css";
|
|
2025
2065
|
import clsx20 from "clsx";
|
|
2026
2066
|
|
|
@@ -2126,7 +2166,7 @@ var PivotTable = ({
|
|
|
2126
2166
|
}
|
|
2127
2167
|
return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };
|
|
2128
2168
|
}, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);
|
|
2129
|
-
const [visibleCount, setVisibleCount] =
|
|
2169
|
+
const [visibleCount, setVisibleCount] = useState6(
|
|
2130
2170
|
() => progressive ? Math.min(batchSize, rowValues.length) : rowValues.length
|
|
2131
2171
|
);
|
|
2132
2172
|
useEffect7(() => {
|
|
@@ -2642,10 +2682,10 @@ var useTableGetRowsPerPage = ({
|
|
|
2642
2682
|
}, [availableHeight, headerHeight, rowHeight, footerHeight]);
|
|
2643
2683
|
|
|
2644
2684
|
// src/hooks/useDebounce.hook.ts
|
|
2645
|
-
import { useRef as
|
|
2685
|
+
import { useRef as useRef10, useEffect as useEffect8, useCallback as useCallback2 } from "react";
|
|
2646
2686
|
function useDebounce(fn, delay = 300) {
|
|
2647
|
-
const timerRef =
|
|
2648
|
-
const fnRef =
|
|
2687
|
+
const timerRef = useRef10(null);
|
|
2688
|
+
const fnRef = useRef10(fn);
|
|
2649
2689
|
useEffect8(() => {
|
|
2650
2690
|
fnRef.current = fn;
|
|
2651
2691
|
}, [fn]);
|
|
@@ -2667,37 +2707,6 @@ function useDebounce(fn, delay = 300) {
|
|
|
2667
2707
|
}, []);
|
|
2668
2708
|
return debouncedFn;
|
|
2669
2709
|
}
|
|
2670
|
-
|
|
2671
|
-
// src/hooks/useObserverHeight.hook.ts
|
|
2672
|
-
import { useLayoutEffect, useRef as useRef10, useState as useState6 } from "react";
|
|
2673
|
-
var useObserverHeight = (elRef) => {
|
|
2674
|
-
const [height, setHeight] = useState6(0);
|
|
2675
|
-
const timeoutRef = useRef10(void 0);
|
|
2676
|
-
useLayoutEffect(() => {
|
|
2677
|
-
const el = elRef.current;
|
|
2678
|
-
if (!el) return;
|
|
2679
|
-
const updateHeight = (newHeight) => {
|
|
2680
|
-
setHeight(Math.max(0, newHeight));
|
|
2681
|
-
};
|
|
2682
|
-
const ro = new ResizeObserver((entries) => {
|
|
2683
|
-
const entry = entries[0];
|
|
2684
|
-
if (!entry) return;
|
|
2685
|
-
if (timeoutRef.current) {
|
|
2686
|
-
clearTimeout(timeoutRef.current);
|
|
2687
|
-
}
|
|
2688
|
-
timeoutRef.current = window.setTimeout(() => {
|
|
2689
|
-
updateHeight(entry.contentRect.height);
|
|
2690
|
-
}, 100);
|
|
2691
|
-
});
|
|
2692
|
-
ro.observe(el);
|
|
2693
|
-
updateHeight(el.getBoundingClientRect().height || 0);
|
|
2694
|
-
return () => {
|
|
2695
|
-
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
2696
|
-
ro.disconnect();
|
|
2697
|
-
};
|
|
2698
|
-
}, [elRef]);
|
|
2699
|
-
return height;
|
|
2700
|
-
};
|
|
2701
2710
|
export {
|
|
2702
2711
|
ActionIcon,
|
|
2703
2712
|
BarChart,
|
|
@@ -2755,7 +2764,7 @@ export {
|
|
|
2755
2764
|
getStyleNumber,
|
|
2756
2765
|
getTableTotalPages,
|
|
2757
2766
|
useDebounce,
|
|
2758
|
-
|
|
2767
|
+
useResizeObserver,
|
|
2759
2768
|
useTableGetRowsPerPage
|
|
2760
2769
|
};
|
|
2761
2770
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/Typography/Typography.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.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/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/utils/debounce.utils.ts","../src/components/editors/Switch/Switch.tsx","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../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/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/Table/TablePaginated.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/Table/Table.hooks.ts","../src/hooks/useDebounce.hook.ts","../src/hooks/useObserverHeight.hook.ts"],"sourcesContent":["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 './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 rightContent?: React.ReactNode;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle, rightContent }) => {\n if (!title && !subtitle && !rightContent) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n <div className={styles.leftContent}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n {rightContent}\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 { TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: TablerIcon;\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 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","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: TablerIcon;\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 React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: TablerIcon;\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 * 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 * 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 { TablerIcon } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\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 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 { 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 { IconSearch, IconSquare, IconSquareCheckFilled, TablerIcon } 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?: TablerIcon;\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 styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconX, TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: TablerIcon;\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};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\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 ref={containerRef} tabIndex={-1} className={clsx(styles.selectFieldContent, className)}>\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 {\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","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 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 { 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 { IconX, TablerIcon } 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?: TablerIcon;\n endIcon?: TablerIcon;\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","// 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 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 { 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 { IconSearch, TablerIcon } 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?: TablerIcon;\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 { 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 { 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--4'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--10'),\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 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, useEffect, useRef, useState } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n changeFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n valueFormatter,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [fontSize, setFontSize] = useState(20);\n\n useEffect(() => {\n const container = containerRef.current!;\n\n const updateFont = () => {\n const w = container.offsetWidth;\n const h = container.offsetHeight;\n\n // proportional to the smaller dimension\n const newSize = Math.min(w, h) * 0.3; // 40% of the smaller dimension\n setFontSize(newSize);\n };\n\n const observer = new ResizeObserver(updateFont);\n observer.observe(container);\n\n updateFont(); // initial run\n\n return () => observer.disconnect();\n }, []);\n\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n return (\n <div className={styles.kpiChartContainer} ref={containerRef}>\n <div className={styles.kpiChartCenter}>\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize ?? fontSize,\n }}\n >\n {displayValue}\n </h2>\n <div className={styles.kpiComparisonContainer} style={{ fontSize: changeFontSize }}>\n {hasComparisonValue && (\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n changeFontSize={changeFontSize}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n />\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 className,\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 = comparisonValue === 0 ? 0 : (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 return (\n <div className={clsx(className, styles.kpiChartChangeContainer)}>\n {!equalComparison && (\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </div>\n );\n};\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';\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 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 return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\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 { 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 * as React from 'react';\nimport styles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { TablePagination } from './components/TablePagination/TablePagination';\nimport { TableHeader } from './components/TableHeader/TableHeader';\nimport { TableBody } from './components/TableBody/TableBody';\nimport { TablePaginatedProps } from './table.types';\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 {\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 '../../table.types';\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 { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TablePaginatedProps, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\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 getSortIcon = (header: TableHeaderItem<T>) => {\n if (!sort) return <IconCaretUpDownFilled />;\n\n if (sort.id === header.id) {\n if (sort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (sort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleSort = (id: keyof T) => {\n if (!onSortChange) return;\n\n if (!sort) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n if (sort) {\n // New sort\n if (sort.id !== id) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n // Toggle sort direction\n if (sort.direction === TableSortDirection.ASC) {\n return onSortChange({ id, direction: TableSortDirection.DESC });\n } else if (sort.direction === TableSortDirection.DESC) {\n return onSortChange(undefined); // Remove sort after DESC\n }\n }\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={() => handleSort(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 { 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 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};\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","import styles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TablePaginatedProps } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'pageSize' | 'page' | 'onRowIndexClick'\n>;\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n}: TableBodyProps<T>) => {\n return (\n <tbody className={styles.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 {pageSize * page + 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 </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, rowIndex, cellIndex }: TableBodyCellProps<T>) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const value =\n header.accessor !== undefined\n ? header.accessor(row)\n : header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: styles.tableBodyCell });\n }\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 key={`${rowIndex}-${cellIndex}`}\n title={value}\n style={{ textAlign: header.align }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n styles.copyButton,\n header.align === TableHeaderAlign.RIGHT && styles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {value}\n </td>\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","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 { 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 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","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 { 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 { useLayoutEffect, useRef, useState } from 'react';\n\nexport const useObserverHeight = (elRef: React.RefObject<HTMLDivElement | null>): number => {\n const [height, setHeight] = useState(0);\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateHeight = (newHeight: number) => {\n setHeight(Math.max(0, newHeight));\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n // clear previous debounce\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // wait 100ms before updating\n timeoutRef.current = window.setTimeout(() => {\n updateHeight(entry.contentRect.height);\n }, 100);\n });\n\n ro.observe(el);\n // initial height\n updateHeight(el.getBoundingClientRect().height || 0);\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef]);\n\n return height;\n};\n"],"mappings":"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","names":["styles","jsx","clsx","styles","jsx","jsxs","styles","clsx","jsx","clsx","styles","jsx","clsx","styles","jsx","jsx","jsxs","DropdownMenu","styles","clsx","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","Fragment","useEffect","useRef","styles","clsx","jsx","jsxs","styles","clsx","jsx","styles","useEffect","styles","jsx","clsx","styles","jsx","clsx","styles","jsx","jsxs","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","jsxs","forwardRef","jsx","jsxs","useRef","useEffect","styles","Fragment","clsx","styles","jsx","jsxs","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","forwardRef","jsx","forwardRef","value","useRef","mergician","mergician","styles","mergician","jsx","useRef","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","useEffect","useRef","useState","styles","styles","clsx","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","jsx","ChartJS","Tooltip","Legend","ChartDataLabels","AnnotationPlugin","useRef","useRef","Pie","ArcElement","ChartJS","Legend","Tooltip","ChartDataLabels","mergician","styles","AnnotationPlugin","jsx","ChartJS","ArcElement","Tooltip","Legend","ChartDataLabels","useRef","Pie","React","styles","clsx","styles","useEffect","jsx","jsxs","IconCaretDownFilled","styles","clsx","jsx","jsxs","IconCaretDownFilled","styles","styles","clsx","useState","tableStyles","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","useEffect","useMemo","useState","tableStyles","clsx","jsx","jsxs","useMemo","useState","useEffect","clsx","tableStyles","useMemo","tableStyles","clsx","hex","jsx","jsxs","useMemo","clsx","tableStyles","useMemo","useRef","useEffect","useCallback","useRef","useState"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/Typography/Typography.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.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/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/utils/debounce.utils.ts","../src/components/editors/Switch/Switch.tsx","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../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/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/Table/TablePaginated.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/Table/Table.hooks.ts","../src/hooks/useDebounce.hook.ts"],"sourcesContent":["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 './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 rightContent?: React.ReactNode;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle, rightContent }) => {\n if (!title && !subtitle && !rightContent) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n <div className={styles.leftContent}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n {rightContent}\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 { TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: TablerIcon;\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 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","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: TablerIcon;\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 React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: TablerIcon;\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 * 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 * 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 { TablerIcon } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\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 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 { 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 { IconSearch, IconSquare, IconSquareCheckFilled, TablerIcon } 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?: TablerIcon;\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 styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconX, TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: TablerIcon;\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};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\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 ref={containerRef} tabIndex={-1} className={clsx(styles.selectFieldContent, className)}>\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 {\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","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 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 { 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 { IconX, TablerIcon } 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?: TablerIcon;\n endIcon?: TablerIcon;\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","// 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 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 { 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 { IconSearch, TablerIcon } 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?: TablerIcon;\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 { 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 { 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--4'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--10'),\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 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, useEffect, useRef, useState } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n changeFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n valueFormatter,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [fontSize, setFontSize] = useState(20);\n\n useEffect(() => {\n const container = containerRef.current!;\n\n const updateFont = () => {\n const w = container.offsetWidth;\n const h = container.offsetHeight;\n\n // proportional to the smaller dimension\n const newSize = Math.min(w, h) * 0.3; // 40% of the smaller dimension\n setFontSize(newSize);\n };\n\n const observer = new ResizeObserver(updateFont);\n observer.observe(container);\n\n updateFont(); // initial run\n\n return () => observer.disconnect();\n }, []);\n\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n return (\n <div className={styles.kpiChartContainer} ref={containerRef}>\n <div className={styles.kpiChartCenter}>\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize ?? fontSize,\n }}\n >\n {displayValue}\n </h2>\n <div className={styles.kpiComparisonContainer} style={{ fontSize: changeFontSize }}>\n {hasComparisonValue && (\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n changeFontSize={changeFontSize}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n />\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 className,\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 = comparisonValue === 0 ? 0 : (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 return (\n <div className={clsx(className, styles.kpiChartChangeContainer)}>\n {!equalComparison && (\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </div>\n );\n};\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 * as React from 'react';\nimport styles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { TablePagination } from './components/TablePagination/TablePagination';\nimport { TableHeader } from './components/TableHeader/TableHeader';\nimport { TableBody } from './components/TableBody/TableBody';\nimport { TablePaginatedProps } from './table.types';\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 {\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 '../../table.types';\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 { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TablePaginatedProps, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\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 getSortIcon = (header: TableHeaderItem<T>) => {\n if (!sort) return <IconCaretUpDownFilled />;\n\n if (sort.id === header.id) {\n if (sort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (sort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleSort = (id: keyof T) => {\n if (!onSortChange) return;\n\n if (!sort) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n if (sort) {\n // New sort\n if (sort.id !== id) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n // Toggle sort direction\n if (sort.direction === TableSortDirection.ASC) {\n return onSortChange({ id, direction: TableSortDirection.DESC });\n } else if (sort.direction === TableSortDirection.DESC) {\n return onSortChange(undefined); // Remove sort after DESC\n }\n }\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={() => handleSort(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 { 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 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};\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","import styles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TablePaginatedProps } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'pageSize' | 'page' | 'onRowIndexClick'\n>;\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n}: TableBodyProps<T>) => {\n return (\n <tbody className={styles.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 {pageSize * page + 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 </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, rowIndex, cellIndex }: TableBodyCellProps<T>) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const value =\n header.accessor !== undefined\n ? header.accessor(row)\n : header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: styles.tableBodyCell });\n }\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 key={`${rowIndex}-${cellIndex}`}\n title={value}\n style={{ textAlign: header.align }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n styles.copyButton,\n header.align === TableHeaderAlign.RIGHT && styles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {value}\n </td>\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","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 { 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 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","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 { 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"],"mappings":";;;AAAA,OAAO,YAAY;AAGV;AADF,IAAM,WAAW,MAAM;AAC5B,SAAO,oBAAC,SAAI,WAAW,OAAO,UAAU;AAC1C;;;ACJA,OAAO,WAAW;AAClB,OAAOA,aAAY;AACnB,OAAO,UAAU;AASX,gBAAAC,MAsBA,YAtBA;AAHC,IAAM,OAAO,MAAM;AAAA,EACxB,CAAC,EAAE,UAAU,WAAW,GAAG,MAAM,GAAG,QAAQ;AAC1C,WACE,gBAAAA,KAAC,SAAI,WAAW,KAAKD,QAAO,MAAM,SAAS,GAAG,KAAW,GAAG,OACzD,UACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;AAQZ,IAAM,aAAwC,CAAC,EAAE,OAAO,UAAU,aAAa,MAAM;AAC1F,MAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc;AACxC,WAAO;AAAA,EACT;AAEA,SACE,qBAAC,SAAI,WAAWA,QAAO,YACrB;AAAA,yBAAC,SAAI,WAAWA,QAAO,aACpB;AAAA,eAAS,gBAAAC,KAAC,QAAI,iBAAM;AAAA,MACpB,YAAY,gBAAAA,KAAC,OAAG,oBAAS;AAAA,OAC5B;AAAA,IACC;AAAA,KACH;AAEJ;AAMO,IAAM,cAAc,MAAM;AAAA,EAC/B,CAAC,EAAE,SAAS,GAAG,QAAQ;AACrB,WACE,gBAAAA,KAAC,SAAI,WAAWD,QAAO,aAAa,KACjC,UACH;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;;;ACvD1B,OAAOE,WAAU;AACjB,OAAOC,aAAY;AAkBf,SACW,OAAAC,MADX,QAAAC,aAAA;AARG,IAAM,eAA4C,CAAC;AAAA,EACxD,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AACZ,MAAM;AACJ,SACE,gBAAAA,MAAC,SAAI,WAAWH,MAAKC,QAAO,UAAUA,QAAO,OAAO,GAAG,SAAS,GAC7D;AAAA,YAAQ,gBAAAC,KAAC,QAAK;AAAA,IACf,gBAAAA,KAAC,QAAI,iBAAM;AAAA,IACX,gBAAAA,KAAC,OAAG,mBAAQ;AAAA,KACd;AAEJ;;;ACzBA,OAAOE,aAAY;AACnB,OAAOC,WAAU;AAoBb,gBAAAC,YAAA;AARG,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,IAAI,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,SACE,gBAAAA,KAAC,aAAU,OAAc,WAAWD,MAAKD,QAAO,YAAY,SAAS,GAAG,OACrE,UACH;AAEJ;;;AC1BA,OAAOG,WAAU;AAEjB,OAAOC,aAAY;AAWb,gBAAAC,YAAA;AAHC,IAAM,aAAwC,CAAC,EAAE,MAAM,MAAM,WAAW,GAAG,MAAM,MAAM;AAC5F,SACE,gBAAAA,KAAC,YAAO,WAAWF,MAAKC,QAAO,YAAY,SAAS,GAAI,GAAG,OACzD,0BAAAC,KAAC,QAAK,WAAWD,QAAO,MAAM,GAChC;AAEJ;;;ACfA,OAAOE,WAAU;AACjB,OAAOC,aAAY;AAqBb,gBAAAC,YAAA;AAZC,IAAM,aAAwC,CAAC;AAAA,EACpD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWF,MAAKC,QAAO,YAAYA,QAAO,OAAO,GAAGA,QAAO,IAAI,GAAG,SAAS;AAAA,MAC1E,GAAG;AAAA,MAEJ,0BAAAC,KAAC,QAAK;AAAA;AAAA,EACR;AAEJ;;;AC1BA,YAAY,kBAAkB;AAuB1B,SACE,OAAAC,MADF,QAAAC,aAAA;AAVG,IAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,SACE,gBAAAA,MAAc,mBAAb,EAAkB,MAAY,cAC7B;AAAA,oBAAAD,KAAc,sBAAb,EAAqB,SAAO,MAAC,UAC3B,4BACH;AAAA,IACA,gBAAAA,KAAc,sBAAb,EAAqB,MAAY,OAAc,OAAO,EAAE,QAAQ,EAAE,GAChE,UACH;AAAA,KACF;AAEJ;;;AChCA,YAAYE,mBAAkB;AAE9B,OAAOC,aAAY;AACnB,OAAOC,WAAU;AAwCX,SAEE,OAAAC,MAFF,QAAAC,aAAA;AApBC,IAAM,mBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,gBAAAA;AAAA,IAAc;AAAA,IAAb;AAAA,MACC,WAAWF;AAAA,QACTD,QAAO;AAAA,QACP,YAAYA,QAAO;AAAA,QACnB,cAAcA,QAAO;AAAA,MACvB;AAAA,MACA,cAAY;AAAA,MACX,GAAG;AAAA,MAEJ;AAAA,wBAAAG,MAAC,UAAK,WAAWH,QAAO,aACrB;AAAA;AAAA,UACD,gBAAAE,KAAC,UAAK,OAAO,OAAQ,iBAAM;AAAA,WAC7B;AAAA,QACA,gBAAAC,MAAC,UAAK,WAAWH,QAAO,cACtB;AAAA,0BAAAE,KAAC,UAAK,OAAO,YAAa,sBAAW;AAAA,UACpC;AAAA,WACH;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACpDA,OAAOE,aAAY;AACnB,OAAOC,WAAU;AAoBb,SACgB,OAAAC,MADhB,QAAAC,aAAA;AAVG,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AAAA,EACT;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,gBAAAA,MAAC,YAAO,WAAWF,MAAKD,QAAO,QAAQA,QAAO,OAAO,GAAGA,QAAO,IAAI,GAAG,SAAS,GAAI,GAAG,OACnF;AAAA,iBAAa,gBAAAE,KAAC,aAAU;AAAA,IACzB,gBAAAA,KAAC,UAAM,UAAS;AAAA,IACf,WAAW,gBAAAA,KAAC,WAAQ;AAAA,KACvB;AAEJ;;;AC1BA,OAAOE,WAAU;AACjB,OAAOC,aAAY;AAef,SACgB,OAAAC,OADhB,QAAAC,aAAA;AARG,IAAM,cAA0C,CAAC;AAAA,EACtD,WAAW;AAAA,EACX,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,SACE,gBAAAA,MAAC,YAAO,WAAWH,MAAKC,QAAO,aAAa,SAAS,GAAI,GAAG,OACzD;AAAA,iBAAa,gBAAAC,MAAC,aAAU;AAAA,IACzB,gBAAAA,MAAC,UAAM,UAAS;AAAA,IACf,WAAW,gBAAAA,MAAC,WAAQ;AAAA,KACvB;AAEJ;;;ACxBA,OAAOE,WAAU;AACjB,OAAOC,cAAY;AASV,gBAAAC,aAAA;AADF,IAAM,UAA4B,CAAC,EAAE,WAAW,SAAS,MAAM;AACpE,SAAO,gBAAAA,MAAC,SAAI,WAAWF,MAAKC,SAAO,SAAS,SAAS,GAAI,UAAS;AACpE;;;ACXA,SAAa,YAAAE,WAAU,aAAAC,YAAW,SAAS,UAAAC,SAAQ,gBAAgB;;;ACAnE,OAAOC,cAAY;AACnB,SAAS,qBAAqB,aAAa,aAAyB;AACpE,OAAOC,YAAU;AACjB,SAAS,kBAAkB;AAqCrB,SASgB,OAAAC,OAThB,QAAAC,aAAA;AAzBC,IAAM,qBAAqB;AAAA,EAChC,CACE;AAAA,IACE,WAAW;AAAA,IACX;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,eAAe,cAAc;AAEnC,UAAM,kBAAkB,cAAc;AAEtC,UAAM,cAAc,CAAC,MAAwB;AAC3C,QAAE,gBAAgB;AAClB,QAAE,eAAe;AACjB,gBAAU;AAAA,IACZ;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAWF;AAAA,UACTD,SAAO;AAAA,UACP,cAAcA,SAAO;AAAA,UACrB,SAASA,SAAO;AAAA,QAClB;AAAA,QACC,GAAG;AAAA,QAEH;AAAA,uBAAa,gBAAAE,MAAC,aAAU;AAAA,UACzB,gBAAAA,MAAC,UAAM,wBAAa;AAAA,UACnB,mBAAmB,gBAAAA,MAAC,SAAM,eAAe,aAAa;AAAA,UACtD,YAAY,gBAAAA,MAAC,eAAY,WAAWF,SAAO,SAAS,IAAK,gBAAAE,MAAC,uBAAoB;AAAA;AAAA;AAAA,IACjF;AAAA,EAEJ;AACF;AAEA,mBAAmB,cAAc;;;AC1DjC,SAAa,WAAW,cAAyB;AACjD,OAAOE,cAAY;AACnB,OAAOC,YAAU;AAoEb,gBAAAC,aAAA;AA5DG,IAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,eAAe,OAAO,CAAC;AAE7B,YAAU,MAAM;AACd,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,UAAW;AAEhB,UAAM,QAAQ,MAAM;AAAA,MAClB,UAAU,iBAAiB,+CAA+C;AAAA,IAC5E;AAEA,UAAM,YAAY,CAAC,UAAkB;AACnC,UAAI,SAAS,KAAK,QAAQ,MAAM,QAAQ;AACtC,cAAM,KAAK,GAAG,MAAM;AACpB,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,YAAY,CAAC,MAAqB;AACtC,UAAI,MAAM,WAAW,EAAG;AACxB,cAAQ,EAAE,KAAK;AAAA,QACb,KAAK;AACH,YAAE,eAAe;AACjB,qBAAW,aAAa,UAAU,KAAK,MAAM,MAAM;AACnD;AAAA,QACF,KAAK;AACH,YAAE,eAAe;AACjB,qBAAW,aAAa,UAAU,IAAI,MAAM,UAAU,MAAM,MAAM;AAClE;AAAA,QACF,KAAK;AACH,YAAE,eAAe;AACjB,oBAAU,CAAC;AACX;AAAA,QACF,KAAK;AACH,YAAE,eAAe;AACjB,oBAAU,MAAM,SAAS,CAAC;AAC1B;AAAA,MACJ;AAAA,IACF;AAEA,cAAU,iBAAiB,WAAW,SAAS;AAE/C,QAAI,WAAW;AACb,iBAAW,MAAM;AACf,qBAAa,UAAU;AACvB,kBAAU,CAAC;AAAA,MACb,GAAG,CAAC;AAAA,IACN;AAEA,WAAO,MAAM;AACX,gBAAU,oBAAoB,WAAW,SAAS;AAAA,IACpD;AAAA,EACF,GAAG,CAAC,WAAW,QAAQ,CAAC;AAExB,SACE,gBAAAA,MAAC,SAAI,KAAK,cAAc,UAAU,IAAI,WAAWD,OAAKD,SAAO,oBAAoB,SAAS,GACvF,UACH;AAEJ;AASO,IAAM,yBAA0D,CAAC,EAAE,UAAU,SAAS,MAAM;AACjG,SACE,gBAAAE,MAAC,SAAI,WAAWD,OAAKD,SAAO,wBAAwB,YAAYA,SAAO,QAAQ,GAC5E,UACH;AAEJ;;;AChFO,IAAM,yBAAyB,CACpC,YAC0B;AAC1B,QAAM,SAAS,QAAQ,OAAuB,CAAC,KAAK,WAAW;AAC7D,QAAI,cAAc,UAAU,OAAO,UAAU;AAC3C,YAAM,WAAW,OAAO;AACxB,UAAI,CAAC,IAAI,QAAQ,GAAG;AAClB,YAAI,QAAQ,IAAI,CAAC;AAAA,MACnB;AACA,UAAI,QAAQ,EAAE,KAAK,MAAM;AAAA,IAC3B;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAGL,SAAO,OAAO,KAAK,MAAM,EAAE,WAAW,IAAI,OAAO;AACnD;;;AHZA,SAAS,YAAY,YAAY,6BAAyC;AAE1E,OAAOG,cAAY;;;AIfnB,SAAS,aAAAC,kBAAiB;AAEnB,IAAM,uBAAuB,CAClC,QACA,mBACG;AACH,EAAAA,WAAU,MAAM;AACd,QAAI,QAAQ;AACV,iBAAW,MAAM;AACf,QAAC,eAAe,SAAyC,MAAM;AAAA,MACjE,GAAG,GAAG;AAAA,IACR;AAAA,EACF,GAAG,CAAC,QAAQ,cAAc,CAAC;AAC7B;;;ACZA,OAAOC,cAAY;AAOV,gBAAAC,aAAA;AADF,IAAM,sBAAoD,CAAC,EAAE,MAAM,MAAM;AAC9E,SAAO,gBAAAA,MAAC,UAAK,WAAWD,SAAO,qBAAsB,iBAAM;AAC7D;;;ACTA,OAAOE,YAAU;AACjB,OAAOC,cAAY;AAWf,gBAAAC,aAAA;AAFG,IAAM,gBAAwC,CAAC,EAAE,SAAS,SAAS,UAAU,MAAM;AACxF,SACE,gBAAAA,MAAC,OAAE,WAAWF,OAAKC,SAAO,eAAe,WAAWA,SAAO,OAAO,GAAG,SAAS,GAAI,mBAAQ;AAE9F;;;ACdA,OAAOE,YAAU;AACjB,OAAOC,cAAY;AAoBf,SAEe,OAAAC,OAFf,QAAAC,aAAA;AAXG,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB;AACF,MAAwB;AACtB,MAAI,CAAC,SAAS,CAAC,UAAU;AACvB,WAAO;AAAA,EACT;AAEA,SACE,gBAAAA,MAAC,WAAM,WAAWH,OAAKC,SAAO,aAAa,SAAS,GACjD;AAAA;AAAA,IACA,YAAY,gBAAAC,MAAC,UAAM,yBAAc;AAAA,KACpC;AAEJ;;;AC1BA,SAAS,cAAAE,mBAAkB;;;ACA3B,SAAS,SAAAC,cAAyB;AAClC,OAAOC,cAAY;AACnB,OAAOC,YAAU;AACjB,SAAS,cAAAC,mBAAkB;AAyCnB,gBAAAC,OACA,QAAAC,aADA;AA1BD,IAAM,aAAaC;AAAA,EACxB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,kBAAkB,SAAS;AACjC,UAAM,WAAW,SAAS;AAC1B,WACE,gBAAAD,MAAC,SAAI,WACH;AAAA,sBAAAD,MAAC,eAAY,OAAc,UAAoB,eAA8B;AAAA,MAC7E,gBAAAC,MAAC,SAAI,WAAWE,OAAKC,SAAO,OAAO,YAAYA,SAAO,KAAK,GACxD;AAAA,qBAAa,gBAAAJ,MAAC,aAAU;AAAA,QACzB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,YACxC;AAAA,YACC,GAAG;AAAA;AAAA,QACN;AAAA,QACA,gBAAAA;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,WAAWF,OAAKC,SAAO,WAAW,mBAAmBA,SAAO,gBAAgB;AAAA,YAC5E,SAAS,MAAM,SAAS,EAAE;AAAA;AAAA,QAC5B;AAAA,QACC,WAAW,gBAAAJ,MAAC,WAAQ;AAAA,SACvB;AAAA,MACC,gBAAgB,gBAAAA,MAAC,iBAAc,SAAQ,SAAQ,SAAS,cAAc;AAAA,OACzE;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;;;AD/DnB,mBACE,OAAAM,OADF,QAAAC,cAAA;AAHC,IAAM,YAAYC;AAAA,EACvB,CAAC,EAAE,QAAQ,IAAI,cAAc,cAAc,WAAW,OAAO,cAAc,GAAG,MAAM,GAAG,QAAQ;AAC7F,WACE,gBAAAD,OAAA,YACE;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAS;AAAA,UACT;AAAA,UACA;AAAA,UACC,GAAG;AAAA;AAAA,MACN;AAAA,MACC,aAAa,gBAAAA,MAAC,iBAAc,SAAS,GAAG,OAAO,MAAM,IAAI,SAAS,eAAe;AAAA,OACpF;AAAA,EAEJ;AACF;AAEA,UAAU,cAAc;;;AEvBjB,SAAS,SACd,IACA,QAAQ,KAC0B;AAClC,MAAI;AACJ,SAAO,IAAI,SAAwB;AACjC,iBAAa,KAAK;AAClB,YAAQ,WAAW,MAAM;AACvB,SAAG,GAAG,IAAI;AAAA,IACZ,GAAG,KAAK;AAAA,EACV;AACF;;;AVgIM,gBAAAG,OAoCY,QAAAC,cApCZ;AApGC,IAAM,mBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,CAAC,aAAa,cAAc,IAAI,SAAiB,EAAE;AACzD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAmB,MAAM;AAC3D,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAiB,EAAE;AAE7D,QAAM,iBAAiBC,QAAyB,IAAI;AACpD,uBAAqB,QAAQ,cAAc;AAE3C,EAAAC,WAAU,MAAM;AACd,iBAAa,MAAM;AAAA,EAErB,GAAG,CAAC,KAAK,UAAU,MAAM,CAAC,CAAC;AAE3B,EAAAA,WAAU,MAAM;AACd,QAAI,WAAW;AACb;AAAA,IACF;AAEA,QAAI,CAAC,UAAU,OAAO,WAAW,GAAG;AAClC,uBAAiB,EAAE;AACnB;AAAA,IACF;AACA,UAAM,kBAAkB,OAAO;AAAA,MAC7B,CAAC,UAAU,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,GAAG,SAAS;AAAA,IAC9D;AAEA,QAAI,gBAAgB,SAAS,GAAG;AAC9B,YAAM,WAAW,gBAAgB,KAAK,IAAI;AAC1C,uBAAiB,IAAI,gBAAgB,MAAM,KAAK,QAAQ,EAAE;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,SAAS,CAAC;AAE/B,QAAM,kBAAkB,QAAQ,MAAO,WAAW,SAAS,QAAQ,IAAI,QAAY,CAAC,QAAQ,CAAC;AAE7F,QAAM,iBACJ,gBAAgB,CAAC,WACb,QAAQ,OAAO,CAAC,WAAW,OAAO,MAAM,YAAY,EAAE,SAAS,YAAY,YAAY,CAAC,CAAC,IACzF;AAEN,QAAM,iBAAiB,QAAQ,MAAM,uBAAuB,cAAc,GAAG,CAAC,cAAc,CAAC;AAE7F,QAAM,mBACJ,UAAU,MAAM,CAAC,aAAa,OAAO,SAAS,QAAQ,CAAC,KACvD,OAAO,MAAM,CAAC,UAAU,UAAU,SAAS,KAAK,CAAC;AAEnD,QAAM,qBAAqB,CACzB,GACA,aACG;AACH,MAAE,eAAe;AAEjB,QAAI,CAAC,SAAU;AAEf,QAAI,UAAU,SAAS,QAAQ,GAAG;AAChC,mBAAa,UAAU,OAAO,CAAC,MAAM,MAAM,QAAQ,CAAC;AAAA,IACtD,OAAO;AACL,mBAAa,CAAC,GAAG,WAAW,QAAQ,CAAC;AAAA,IACvC;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,cAAsB;AAC1C,mBAAe,SAAS;AACxB,sBAAkB,SAAS;AAAA,EAC7B;AAEA,QAAM,aAAa,CAAC,cAAwB;AAC1C,aAAS,SAAS;AAClB,cAAU,KAAK;AACf,mBAAe,EAAE;AACjB,eAAW,EAAE;AAAA,EACf;AAEA,QAAM,iBAAiB,MAAM;AAC3B,mBAAe,EAAE;AACjB,eAAW,EAAE;AACb,aAAS,CAAC,CAAC;AAAA,EACb;AAEA,QAAM,WAAW,SAAS,CAAC,CAAC;AAE5B,SACE,gBAAAF,OAAC,SACC;AAAA,oBAAAD,MAAC,eAAY,OAAc,UAAoB;AAAA,IAC/C,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,cAAc;AAAA,QACd;AAAA,QACA,kBACE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,cAAW;AAAA,YACX;AAAA,YACA;AAAA,YACA,YAAY;AAAA,YACZ,SAAS;AAAA,YACT;AAAA,YACA;AAAA,YACA,OAAO;AAAA;AAAA,QACT;AAAA,QAGF,0BAAAC,OAAC,sBACE;AAAA,0BACC,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,WAAW;AAAA,cACX,cAAW;AAAA,cACX,aAAY;AAAA,cACZ,MAAK;AAAA,cACL,OAAO;AAAA,cACP,WAAW,CAAC,MAAM,EAAE,gBAAgB;AAAA,cACpC,UAAU;AAAA,cACV,WAAWI,SAAO;AAAA;AAAA,UACpB;AAAA,UAEF,gBAAAH,OAAC,0BAAuB,UAAU,WAC/B;AAAA,6BACG,OAAO,QAAQ,cAAc,EAAE,IAAI,CAAC,CAAC,UAAU,eAAe,MAC5D,gBAAAA,OAACI,WAAA,EACC;AAAA,8BAAAL,MAAC,uBAAoB,OAAO,UAAU;AAAA,cACrC,gBAAgB,IAAI,CAAC,WACpB,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBAEC,SAAS,CAAC,MAAM,mBAAmB,GAAG,OAAO,KAAK;AAAA,kBAClD,WACE,UAAU,SAAS,OAAO,KAAM,IAC9B,gBAAAA,MAAC,yBAAsB,IAEvB,gBAAAA,MAAC,cAAW;AAAA,kBAGf,GAAG;AAAA;AAAA,gBATC,QAAQ,SAAS,OAAO;AAAA,cAU/B,CACD;AAAA,iBAfY,QAgBf,CACD,IACD,eAAe,IAAI,CAAC,WAClB,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,SAAS,CAAC,MAAM,mBAAmB,GAAG,OAAO,KAAK;AAAA,gBAClD,WACE,UAAU,SAAS,OAAO,KAAM,IAAI,gBAAAA,MAAC,yBAAsB,IAAK,gBAAAA,MAAC,cAAW;AAAA,gBAE7E,GAAG;AAAA;AAAA,cALC,QAAQ,SAAS,OAAO;AAAA,YAM/B,CACD;AAAA,YACJ,oBAAoB,eAAe,WAAW,KAC7C,gBAAAA,MAAC,oBAAiB,UAAQ,MAAC,OAAM,SAAQ,OAAO,kBAAkB;AAAA,aAEtE;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAWI,SAAO;AAAA,cAClB,UAAU,oBAAoB;AAAA,cAC9B,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS,MAAM,WAAW,SAAS;AAAA,cACnC,MAAK;AAAA,cAEJ;AAAA;AAAA,UACH;AAAA,WACF;AAAA;AAAA,IACF;AAAA,IACC,gBAAgB,gBAAAJ,MAAC,iBAAc,SAAS,cAAc,SAAQ,SAAQ;AAAA,KACzE;AAEJ;;;AW9NA,OAAOM,YAAU;AACjB,OAAOC,cAAY;AA+Bf,SAQE,OAAAC,OARF,QAAAC,cAAA;AAtBG,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,eAAe,CAAC,UAA+C;AACnE,QAAI,CAAC,YAAY,UAAU;AACzB,eAAS,MAAM,OAAO,OAAO;AAAA,IAC/B;AAAA,EACF;AAGA,MAAI,CAAC,MAAM,YAAY,GAAG;AACxB,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWH;AAAA,QACT;AAAA,QACAC,SAAO;AAAA,QACP,WAAWA,SAAO;AAAA,QAClB,YAAYA,SAAO;AAAA,MACrB;AAAA,MAEA;AAAA,wBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL;AAAA,YACA,UAAU;AAAA,YACV;AAAA,YACA,MAAK;AAAA,YACL,gBAAc;AAAA,YACd,iBAAe;AAAA,YACd,GAAG;AAAA;AAAA,QACN;AAAA,QACA,gBAAAA,MAAC,UAAK,WAAWD,SAAO,aAAa,eAAY,QAC/C,0BAAAC,MAAC,UAAK,WAAWD,SAAO,aAAa,eAAY,QAAO,GAC1D;AAAA,QACC,SAAS,gBAAAC,MAAC,UAAK,WAAWF,OAAKC,SAAO,WAAW,GAAI,iBAAM;AAAA;AAAA;AAAA,EAC9D;AAEJ;;;ACzDA,SAAa,YAAAG,WAAU,aAAAC,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AAcnE,SAAS,cAAAC,mBAA8B;AAGvC,OAAOC,cAAY;AAwFb,gBAAAC,OAoCY,QAAAC,cApCZ;AAnEC,IAAM,oBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AACF,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAS,KAAK;AAC1C,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAiB,EAAE;AACzD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAiB,KAAK;AAEhE,QAAM,iBAAiBC,QAAyB,IAAI;AACpD,uBAAqB,QAAQ,cAAc;AAE3C,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,OAAO;AACV,uBAAiB,EAAE;AACnB;AAAA,IACF;AAEA,UAAM,SAAS,QAAQ,KAAK,CAAC,QAAQ,IAAI,UAAU,KAAK;AACxD,QAAI,QAAQ;AACV,uBAAiB,OAAO,KAAK;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,OAAO,OAAO,CAAC;AAEnB,QAAM,kBAAkBC,SAAQ,MAAO,WAAW,SAAS,QAAQ,IAAI,QAAY,CAAC,QAAQ,CAAC;AAE7F,QAAM,iBACJ,cAAc,CAAC,WACX,QAAQ,OAAO,CAAC,WAAW,OAAO,MAAM,YAAY,EAAE,SAAS,YAAY,YAAY,CAAC,CAAC,IACzF;AAEN,QAAM,iBAAiBA,SAAQ,MAAM,uBAAuB,cAAc,GAAG,CAAC,cAAc,CAAC;AAE7F,QAAM,eAAe,CAAC,aAAsB;AAC1C,mBAAe,EAAE;AACjB,aAAS,YAAY,EAAE;AACvB,eAAW,EAAE;AAEb,QAAI,aAAa,IAAI;AACnB,uBAAiB,EAAE;AAAA,IACrB,OAAO;AACL,YAAM,SAAS,QAAQ,KAAK,CAAC,QAAQ,IAAI,UAAU,QAAQ;AAC3D,UAAI,OAAQ,kBAAiB,OAAO,KAAK;AAAA,IAC3C;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,cAAsB;AAC1C,mBAAe,SAAS;AACxB,sBAAkB,SAAS;AAAA,EAC7B;AAEA,QAAM,WAAW,SAAS,CAAC,CAAC;AAE5B,SACE,gBAAAJ,OAAC,SACC;AAAA,oBAAAD,MAAC,eAAY,OAAc,UAAoB;AAAA,IAC/C,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,cAAc;AAAA,QACd;AAAA,QACA,kBACE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,cAAW;AAAA,YACX;AAAA,YACA;AAAA,YACA,YAAY;AAAA,YACZ,SAAS,MAAM,aAAa,EAAE;AAAA,YAC9B,aAAa;AAAA,YACb;AAAA,YACA,OAAO;AAAA;AAAA,QACT;AAAA,QAGF,0BAAAC,OAAC,sBACE;AAAA,wBACC,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,WAAWM;AAAA,cACX,cAAW;AAAA,cACX,aAAY;AAAA,cACZ,MAAK;AAAA,cACL,OAAO;AAAA,cACP,WAAW,CAAC,MAAM,EAAE,gBAAgB;AAAA,cACpC,UAAU;AAAA,cACV,WAAWC,SAAO;AAAA;AAAA,UACpB;AAAA,UAEF,gBAAAN,OAAC,0BAAuB,UAAU,WAC/B;AAAA,6BACG,OAAO,QAAQ,cAAc,EAAE,IAAI,CAAC,CAAC,UAAU,eAAe,MAC5D,gBAAAA,OAACO,WAAA,EACC;AAAA,8BAAAR,MAAC,uBAAoB,OAAO,UAAU;AAAA,cACrC,gBAAgB,IAAI,CAAC,WACpB,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBAEC,SAAS,MAAM,aAAa,QAAQ,KAAK;AAAA,kBACzC,YAAY,OAAO,UAAU;AAAA,kBAC5B,GAAG;AAAA;AAAA,gBAHC,QAAQ,SAAS,OAAO;AAAA,cAI/B,CACD;AAAA,iBATY,QAUf,CACD,IACD,eAAe,IAAI,CAAC,WAClB,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,SAAS,MAAM,aAAa,QAAQ,KAAK;AAAA,gBACzC,YAAY,OAAO,UAAU;AAAA,gBAC5B,GAAG;AAAA;AAAA,cAHC,QAAQ,SAAS,OAAO;AAAA,YAI/B,CACD;AAAA,YACJ,QAAQ,WAAW,KAClB,gBAAAA,MAAC,oBAAiB,UAAQ,MAAC,OAAM,SAAQ,OAAO,kBAAkB;AAAA,aAEtE;AAAA,WACF;AAAA;AAAA,IACF;AAAA,IACC,gBAAgB,gBAAAA,MAAC,iBAAc,SAAS,cAAc,SAAQ,SAAQ;AAAA,KACzE;AAEJ;;;AC1KA,SAAS,cAAAS,mBAAkB;AAqCrB,gBAAAC,aAAA;AA1BC,IAAM,cAAcC;AAAA,EACzB,CACE;AAAA,IACE,QAAQ;AAAA,IACR,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,eAAe,CAACC,WAAkB;AACtC,UAAIA,WAAU,IAAI;AAChB,mBAAW,IAAI;AACf;AAAA,MACF;AAEA,YAAM,eAAe,OAAOA,MAAK;AACjC,UAAI,CAAC,MAAM,YAAY,KAAK,SAAS,YAAY,GAAG;AAClD,mBAAW,YAAY;AAAA,MACzB;AAAA,IACF;AAEA,WACE,gBAAAF;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,OAAO,OAAO,SAAS,KAAK;AAAA,QAC5B;AAAA,QACA,UAAU;AAAA,QACV,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;;;ACpD1B,SAAa,UAAAG,eAAc;AAC3B,SAAS,WAAW;AACpB;AAAA,EACE,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACTA,IAAM,yBAAyB,CACpC,OACA,aACuB;AACvB,QAAM,QAAQ,SAAS;AAEvB,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,SAAS,MAAM;AAAA,IACnB,MAAM;AAAA,IACN;AAAA,IACA,EAAE,WAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,OAAO,CAAC,GAAG;AACpB;;;ACLA,IAAM,eAAe;AAErB,IAAM,gBAAgB,CAAC,iBAAqC;AAC1D,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa,YAAa,QAAO;AAC7E,QAAM,gBAAgB,iBAAiB,SAAS,eAAe;AAC/D,SAAO,cAAc,iBAAiB,YAAY,EAAE,KAAK;AAC3D;AAEO,IAAM,WAAW,CAAC,cAA0B,kBAAmC;AACpF,QAAM,WAAW,cAAc,YAAY;AAC3C,MAAI,CAAC,SAAU,QAAO,iBAAiB;AAGvC,QAAM,YAAY,SAAS,OAAO,CAAC;AACnC,MAAI,cAAc,OAAO,SAAS,WAAW,MAAM,KAAK,SAAS,WAAW,OAAO,GAAG;AACpF,WAAO;AAAA,EACT;AAGA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAC5B,cACA,kBACuB;AACvB,QAAM,WAAW,cAAc,YAAY,KAAK;AAEhD,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,eAAe,WAAW,QAAQ;AACxC,QAAM,eAAe,WAAW,iBAAiB,SAAS,eAAe,EAAE,QAAQ;AAGnF,MAAI,SAAS,MAAM,EAAE,MAAM,MAAM;AAC/B,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,SAAS,MAAM,EAAE;AAC/B,MAAI,UAAU,OAAO;AACnB,WAAO,eAAe;AAAA,EACxB;AAGA,MAAI,aAAa,KAAK,QAAQ,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AC5DO,IAAM,iBAAiB,MAAgB;AAAA,EAC5C,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,0BAA0B;AACrC;AAEO,IAAM,yBAAyB,MAAgB;AAAA,EACpD,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,yBAAyB;AAAA,EAClC,SAAS,0BAA0B;AACrC;;;ACjBA,SAAS,aAAAC,kBAAiB;;;ACD1B,SAAS,iBAAiB;;;ACCnB,IAAM,2BAA2B,OAAyC;AAAA,EAC/E,YAAY;AAAA,IACV,iBAAiB,SAAS,+BAA+B,MAAM;AAAA,IAC/D,cAAc,eAAe,kCAAkC,aAAa;AAAA,IAC5E,SAAS;AAAA,MACP,KAAK,eAAe,uCAAuC,UAAU;AAAA,MACrE,QAAQ,eAAe,uCAAuC,UAAU;AAAA,MACxE,OAAO,eAAe,uCAAuC,SAAS;AAAA,MACtE,MAAM,eAAe,uCAAuC,SAAS;AAAA,IACvE;AAAA,IAEA,OAAO,SAAS,0BAA0B,SAAS;AAAA,IACnD,MAAM;AAAA,MACJ,MAAM,eAAe,8BAA8B,SAAS;AAAA,MAC5D,QAAQ,eAAe,gCAAgC,KAAK;AAAA,MAC5D,QAAQ,SAAS,gCAAgC,YAAY;AAAA,IAC/D;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,MACN,UAAU,eAAe,4BAA4B,SAAS,IAAK;AAAA,MACnE,WAAW,eAAe,4BAA4B,SAAS,IAAK;AAAA,MACpE,eAAe;AAAA,MACf,OAAO,SAAS,6BAA6B,SAAS;AAAA,MACtD,SAAS,eAAe,gCAAgC,MAAM;AAAA,MAC9D,MAAM;AAAA,QACJ,QAAQ,SAAS,mCAAmC,YAAY;AAAA,QAChE,MAAM,eAAe,iCAAiC,SAAS;AAAA,QAC/D,QAAQ,eAAe,mCAAmC,KAAK;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,eAAe;AAAA,IACf,WAAW;AAAA,IACX,SAAS;AAAA,IACT,iBAAiB,SAAS,iCAAiC,SAAS;AAAA,IACpE,cAAc,eAAe,oCAAoC,SAAS;AAAA,IAC1E,SAAS,eAAe,8BAA8B,MAAM;AAAA,IAC5D,eAAe;AAAA,IACf,WAAW,SAAS,kCAAkC,MAAM;AAAA,IAC5D,WAAW;AAAA,IACX,YAAY,eAAe,2BAA2B,SAAS;AAAA,IAC/D,UAAU;AAAA,MACR,MAAM,eAAe,iCAAiC,SAAS;AAAA,MAC/D,QAAQ,eAAe,mCAAmC,KAAK;AAAA,MAC/D,QAAQ,SAAS,6BAA6B,YAAY;AAAA,IAC5D;AAAA,IACA,YAAY;AAAA,IACZ,YAAY,SAAS,kCAAkC,MAAM;AAAA,IAC7D,WAAW;AAAA,MACT,MAAM,eAAe,sCAAsC,UAAU;AAAA,MACrE,QAAQ,eAAe,wCAAwC,KAAK;AAAA,MACpE,QAAQ,SAAS,6BAA6B,YAAY;AAAA,IAC5D;AAAA,EACF;AACF;AAeO,IAAM,oBAAoB,OAA8B;AAAA,EAC7D,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,SAAS,yBAAyB;AACpC;;;AD1EO,IAAM,+BAA+B,OAAyC;AAAA,EACnF,YAAY;AAAA,IACV,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,QAAQ,CAAC,YAAY;AACnB,gBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,iBAAO,SAAS,IAAI,QAAQ;AAAA,QAC9B;AAAA,QACA,OAAO,CAAC,YAAY;AAClB,gBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,iBAAO,SAAS,IAAI,QAAQ;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,QAAQ,CAAC,YAAY;AACnB,gBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,iBAAO,SAAS,IAAI,QAAQ;AAAA,QAC9B;AAAA,QACA,OAAO,CAAC,YAAY;AAClB,gBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,iBAAO,SAAS,IAAI,QAAQ;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,0CAA0C,OAAsC;AAAA,EAC3F,SAAS;AAAA,EACT,OAAO,SAAS,+BAA+B,SAAS;AAAA,EACxD,MAAM;AAAA,IACJ,MAAM,eAAe,mCAAmC,SAAS;AAAA,IACjE,QAAQ,SAAS,+BAA+B,YAAY;AAAA,IAC5D,QAAQ,eAAe,qCAAqC,KAAK;AAAA,EACnE;AACF;AAEO,IAAM,wCAAwC,OAAsC;AAAA,EACzF,SAAS;AAAA,EACT,OAAO,SAAS,sCAAsC,SAAS;AAAA,EAC/D,MAAM;AAAA,IACJ,MAAM,eAAe,mCAAmC,SAAS;AAAA,IACjE,QAAQ,SAAS,+BAA+B,YAAY;AAAA,IAC5D,QAAQ,eAAe,qCAAqC,KAAK;AAAA,EACnE;AACF;AAGO,IAAM,mCAAmC,OAAY;AAAA,EAC1D,OAAO,SAAS,+BAA+B,SAAS;AAAA,EACxD,MAAM;AAAA,IACJ,MAAM,eAAe,mCAAmC,UAAU;AAAA,IAClE,QAAQ,eAAe,qCAAqC,KAAK;AAAA,IACjE,QAAQ,SAAS,+BAA+B,YAAY;AAAA,EAC9D;AACF;AAEO,IAAM,kCAAkC,OAAiC;AAAA,EAC9E,OAAO,SAAS,qCAAqC,SAAS;AAAA,EAC9D,WAAW,eAAe,oCAAoC,WAAW;AAC3E;AAEO,IAAM,8BAA8B,OAAwC;AAAA,EACjF,GAAG;AAAA,IACD,MAAM,gCAAgC;AAAA,IACtC,OAAO,iCAAiC;AAAA,IACxC,OAAO,wCAAwC;AAAA,EACjD;AAAA,EACA,GAAG;AAAA,IACD,MAAM,gCAAgC;AAAA,IACtC,OAAO,iCAAiC;AAAA,IACxC,OAAO,sCAAsC;AAAA,EAC/C;AACF;AAEO,IAAM,wBAAwB,MACnC,UAAU,kBAAkB,GAAG;AAAA,EAC7B,SAAS,6BAA6B;AAAA,EACtC,QAAQ,4BAA4B;AACtC,CAAC;AAEI,IAAM,kCAA0C;AAEvD,SAAS,cAAc,QAA2B;AAChD,QAAM,SAAS,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC;AACvC,QAAM,SAAS,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC;AACvC,SAAO,UAAU;AACnB;AAGO,IAAM,uCAAuC,CAAC,QAAa;AAChE,MAAI,IAAI,KAAK,UAAU,GAAG;AACxB,UAAM,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,EAAE;AAC1C,QAAI,cAAc,MAAM,GAAG;AACzB,aAAO,SAAS,8BAA8B,SAAS;AAAA,IACzD;AACA,WAAO,SAAS,sCAAsC,SAAS;AAAA,EACjE;AACA,SAAO,SAAS,qCAAqC,SAAS;AAChE;;;AD1FO,IAAM,kBAAkB,CAAC,SAA6C;AAC3E,QAAM,sBAAsB,uBAAuB;AACnD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,KAAK,UAAU,IAAI,CAAC,SAAS,UAAU;AAC/C,YAAM,SAAS,oBAAoB,QAAQ,oBAAoB,MAAM;AACrE,YAAM,iBAAiB;AAAA,QACrB,GAAG;AAAA,QACH,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACf;AAEA,aAAOC,WAAU,gBAAgB,OAAO;AAAA,IAC1C,CAAC;AAAA,EACH;AACF;AAEA,IAAM,2BAA2B,CAAC,SAAkB,oBAClD,mBAAmB,QAAQ,iBAAiB,QAAQ,MAAM,KAAK,SAAS,SAAS,IAC7E,SACA;AAGN,IAAM,6BAA6B,CAAC,QAAa,YAAqB;AACpE,QAAM,EAAE,SAAS,IAAI,QAAQ,MAAM;AACnC,QAAM,IAAI,QAAQ;AAElB,QAAM,QAAQ,SAAS,OAAO,CAAC,KAAK,OAAO;AACzC,UAAM,MAAM,GAAG,KAAK,CAAC;AACrB,WAAO,OAAO,OAAO;AAAA,EACvB,GAAG,CAAC;AAEJ,SAAO,QAAQ,IAAI,QAAQ;AAC7B;AAEA,IAAM,6BAA6B,CACjC,WACiC;AACjC,SAAO;AAAA,IACL,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,SAAS;AAAA,QACP,MAAM,OAAO,UAAU,OAAO,kBAAkB,OAAO,mBACnD,kCACA;AAAA,MACN;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,OAAO,CAAC,YAAY;AAClB,oBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,qBAAO,SAAS,IAAI,QAAQ;AAAA,YAC9B;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,OAAO,CAAC,YAAY;AAClB,kBAAI,OAAO,SAAS;AAClB,uBAAO;AAAA,cACT;AACA,oBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,qBAAO,SAAS,IAAI,QAAQ;AAAA,YAC9B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,MAAM,EAAE,SAAS,MAAM;AAAA,QACvB,QAAQ;AAAA,UACN,SAAS;AAAA,QACX;AAAA,QACA,OAAO,wCAAwC;AAAA,QAC/C,SAAS,OAAO;AAAA,MAClB;AAAA,MACA,GAAG;AAAA,QACD,aAAa;AAAA,QACb,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,OAAO;AAAA,QACT;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,QACX;AAAA,QACA,OAAO,sCAAsC;AAAA,QAC7C,KAAK,OAAO;AAAA,QACZ,KAAK,OAAO;AAAA,QACZ,MAAM,OAAO,uBAAuB,gBAAgB;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,+BAA+B,CACnC,WACiC;AACjC,SAAO;AAAA,IACL,WAAW;AAAA,IACX,QAAQ;AAAA,MACN,SAAS;AAAA,QACP,QAAQ,OAAO,UAAU,OAAO,kBAAkB,OAAO,mBACrD,kCACA;AAAA,MACN;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,OAAO,CAAC,YAAY;AAClB,oBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,qBAAO,SAAS,IAAI,UAAU;AAAA,YAChC;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,OAAO,CAAC,YAAY;AAClB,kBAAI,OAAO,SAAS;AAClB,uBAAO;AAAA,cACT;AACA,oBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,qBAAO,SAAS,IAAI,UAAU;AAAA,YAChC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,MAAM,EAAE,SAAS,MAAM,OAAO,qCAAqC;AAAA,QACnE,QAAQ,EAAE,SAAS,MAAM;AAAA,QACzB,OAAO,sCAAsC;AAAA,QAC7C,KAAK,OAAO;AAAA,QACZ,KAAK,OAAO;AAAA,QACZ,MAAM,OAAO,uBAAuB,gBAAgB;AAAA,MACtD;AAAA,MACA,GAAG;AAAA,QACD,MAAM,EAAE,SAAS,MAAM;AAAA,QACvB,QAAQ;AAAA,UACN,SAAS;AAAA,QACX;AAAA,QACA,OAAO,wCAAwC;AAAA,QAC/C,SAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,qBAAqB,CAChC,YACiC;AACjC,QAAM,sBAAoD;AAAA,IACxD,UAAU;AAAA,MACR,KAAK;AAAA,QACH,cAAc,eAAe,+BAA+B,UAAU;AAAA,MACxE;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,QAAQ,EAAE,SAAS,QAAQ,WAAW;AAAA,MACtC,SAAS;AAAA,QACP,SAAS,QAAQ;AAAA,MACnB;AAAA,MACA,YAAY;AAAA,QACV,SAAS,CAAC,YAAY;AACpB,iBAAO,QAAQ,mBAAmB,QAAQ,QAAQ,KAAK,QAAQ,SAAS,MAAM,IAC1E,SACA;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,SAAS,CAAC,YAAY,yBAAyB,SAAS,QAAQ,eAAe;AAAA,YAC/E,WAAW;AAAA,YACX,QAAQ,CAAC,YAAY;AACnB,oBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,qBAAO,SAAS,IAAI,QAAQ;AAAA,YAC9B;AAAA,UACF;AAAA,UACA,OAAO;AAAA,YACL,QAAQ,CAAC,YAAY;AACnB,kBAAI,QAAQ,SAAS;AACnB,uBAAO;AAAA,cACT;AACA,oBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,qBAAO,SAAS,IAAI,QAAQ;AAAA,YAC9B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,SAAS,QAAQ,QAAQ,OAAO;AAAA,QAChC,OAAO;AAAA,UACL,SAAS,QAAQ,QAAQ,UAAU;AAAA,UACnC,MAAM,QAAQ,cAAc;AAAA,QAC9B;AAAA,QACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACzB;AAAA,MACA,GAAG;AAAA,QACD,SAAS,QAAQ,QAAQ,OAAO;AAAA,QAChC,OAAO;AAAA,UACL,SAAS,QAAQ,QAAQ,UAAU;AAAA,UACnC,MAAM,QAAQ,cAAc;AAAA,QAC9B;AAAA,QACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,+BAA+B,QAAQ,aACzC,+BACA;AAEJ,QAAM,4BAA4B,6BAA6B,OAAO;AAEtE,SAAOA,WAAU,sBAAsB,GAAG,qBAAqB,yBAAyB;AAC1F;;;AJxNA,OAAOC,cAAY;AACnB,SAAS,aAAAC,kBAAiB;AAC1B,OAAO,qBAAqB;AA2BtB,gBAAAC,aAAA;AAzBN,QAAQ;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,WAA8B,CAAC,EAAE,MAAM,gBAAgB,UAAU,CAAC,GAAG,GAAG,MAAM,MAAM;AAC/F,QAAM,WAAWC,QAAO,IAAI;AAE5B,QAAM,kBAAkBF,WAAU,mBAAmB,KAAK,GAAG,OAAO;AAEpE,QAAM,qBAAqB,CAAC,UAA+C;AACzE,UAAM,eAAe,uBAAuB,OAAO,QAAQ;AAC3D,qBAAiB,YAAY;AAAA,EAC/B;AAEA,SACE,gBAAAC,MAAC,SAAI,WAAWF,SAAO,gBACrB,0BAAAE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAM,gBAAgB,IAAI;AAAA,MAC1B,SAAS;AAAA,MACT,SAAS;AAAA;AAAA,EACX,GACF;AAEJ;;;AOpDA;AAAA,EACE,SAASE;AAAA,EACT,iBAAAC;AAAA,EACA,eAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,oBAAAC;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAY;AACrB,OAAOC,cAAY;AACnB,SAAa,UAAAC,eAAc;AAC3B,SAAS,aAAAC,kBAAiB;;;ACb1B,SAAS,aAAAC,kBAAiB;AAWnB,IAAM,mBAAmB,CAAC,SAA4B;AAC3D,QAAM,sBAAsB,uBAAuB;AACnD,QAAM,aAAmD;AAAA,IACvD,GAAG;AAAA,IACH,UACE,KAAK,UAAU,IAAI,CAAC,SAAS,UAAU;AACrC,YAAM,SAAS,oBAAoB,QAAQ,oBAAoB,MAAM;AACrE,YAAM,iBAAiE;AAAA,QACrE,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACf;AACA,YAAM,SAASC,WAAU,gBAAgB,OAAO;AAChD,aAAO;AAAA,IACT,CAAC,KAAK,CAAC;AAAA,EACX;AACA,SAAO;AACT;AAEO,IAAM,sBAAsB,CACjC,YACkC;AAClC,QAAM,aAA4C;AAAA,IAChD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,WAAW;AAAA,IACb;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,QACL,QAAQ,eAAe,6BAA6B,QAAQ,IAAK;AAAA,QACjE,aAAa,eAAe,oCAAoC,SAAS,IAAK;AAAA,MAChF;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,aAAa,eAAe,6BAA6B,UAAU;AAAA,MACrE;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,QACP,KAAK,QAAQ,kBAAkB,kCAAkC;AAAA,MACnE;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,YAAY;AAAA,QACV,SAAS,CAAC,YAAY;AACpB,cAAI,CAAC,QAAQ,gBAAiB,QAAO;AACrC,gBAAM,QAA4B,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AAGxE,gBAAM,SAAS,QAAQ,MAAM,OAAO;AACpC,iBAAO,UAAU,UAAa,UAAU,SAAS,OAAO,OAAO,SAAS,OAAO,MAC3E,SACA;AAAA,QACN;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,SAAS,QAAQ;AAAA,MACnB;AAAA,MACA,SAAS;AAAA,QACP,SAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,MAAM,EAAE,SAAS,MAAM;AAAA,QACvB,QAAQ;AAAA,UACN,SAAS;AAAA,QACX;AAAA,QACA,OAAO,wCAAwC;AAAA,QAC/C,OAAO;AAAA,UACL,SAAS,QAAQ,QAAQ,UAAU;AAAA,UACnC,MAAM,QAAQ;AAAA,QAChB;AAAA,QACA,SAAS,QAAQ;AAAA,MACnB;AAAA,MACA,GAAG;AAAA,QACD,aAAa;AAAA,QACb,OAAO,sCAAsC;AAAA,QAC7C,MAAM,EAAE,SAAS,MAAM,OAAO,qCAAqC;AAAA,QACnE,QAAQ;AAAA,UACN,SAAS;AAAA,QACX;AAAA,QACA,MAAM,QAAQ,uBAAuB,gBAAgB;AAAA,QACrD,OAAO;AAAA,UACL,SAAS,QAAQ,QAAQ,UAAU;AAAA,UACnC,MAAM,QAAQ;AAAA,QAChB;AAAA,QACA,KAAK,QAAQ;AAAA,QACb,KAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAEA,SAAOA,WAAU,sBAAsB,GAAG,UAAU;AACtD;;;ADxFA,OAAOC,sBAAqB;AAE5B,OAAO,sBAAsB;AA8BvB,gBAAAC,aAAA;AA5BNC,SAAQ;AAAA,EACNC;AAAA,EACAC;AAAA,EACA;AAAA,EACA;AAAA,EACAC;AAAA,EACA;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AAAA,EACA;AACF;AAIO,IAAM,YAAgC,CAAC,EAAE,UAAU,CAAC,GAAG,MAAM,gBAAgB,GAAG,MAAM,MAAM;AACjG,QAAM,WAAWC,QAAO,IAAI;AAE5B,QAAM,aAAaC,WAAU,oBAAoB,KAAK,GAAG,OAAO;AAEhE,QAAM,qBAAqB,CAAC,UAA+C;AACzE,UAAM,eAAe,uBAAuB,OAAO,QAAQ;AAC3D,qBAAiB,YAAY;AAAA,EAC/B;AAEA,SACE,gBAAAV,MAAC,SAAI,WAAWW,SAAO,gBACrB,0BAAAX;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAM,iBAAiB,IAAI;AAAA,MAC3B,SAAS;AAAA,MACT,SAAS;AAAA;AAAA,EACX,GACF;AAEJ;;;AE1DA,SAAa,aAAAY,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AAChD,OAAOC,cAAY;;;ACAnB,OAAOC,cAAY;AACnB,OAAOC,YAAU;AACjB,SAAS,kBAAkB,sBAAsB;AA0CzC,SAGE,OAAAC,OAHF,QAAAC,cAAA;AAvCR,IAAM,iBAAiB,CAAC,YAAqB,uBAAgC;AAC3E,MAAI,WAAY,QAAO,qBAAqBH,SAAO,WAAWA,SAAO;AACrE,SAAO,qBAAqBA,SAAO,WAAWA,SAAO;AACvD;AAIO,IAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA,0BAA0B;AAAA,EAC1B;AAAA,EACA;AACF,MAAM;AACJ,QAAM,kBAAkB,oBAAoB;AAE5C,QAAM,aAAa,QAAQ;AAC3B,QAAM,aAAa,aAAa;AAEhC,MAAI;AAEJ,MAAI,wBAAwB;AAC1B,UAAM,aAAa,oBAAoB,IAAI,IAAK,aAAa,kBAAmB;AAChF,sBAAkB,GAAG,WAAW,QAAQ,uBAAuB,CAAC;AAAA,EAClE,OAAO;AACL,sBAAkB,iBAAiB,eAAe,UAAU,IAAI,WAAW,SAAS;AAAA,EACtF;AAEA,QAAM,eAAe,GAAG,aAAa,MAAM,EAAE,GAAG,eAAe;AAE/D,QAAM,OAAO,aAAa,iBAAiB;AAE3C,SACE,gBAAAG,OAAC,SAAI,WAAWF,OAAK,WAAWD,SAAO,uBAAuB,GAC3D;AAAA,KAAC,mBACA,gBAAAG;AAAA,MAAC;AAAA;AAAA,QACC,WAAWF,OAAKD,SAAO,gBAAgB,eAAe,YAAY,kBAAkB,CAAC;AAAA,QAErF;AAAA,0BAAAE,MAAC,QAAK;AAAA,UACN,gBAAAA,MAAC,UAAM,wBAAa;AAAA;AAAA;AAAA,IACtB;AAAA,IAGF,gBAAAA,MAAC,UAAK,WAAWF,SAAO,oBACrB,4BAAmB,wBAAwB,kBAAmB,iBACjE;AAAA,KACF;AAEJ;;;ADZM,SACE,OAAAI,OADF,QAAAC,cAAA;AAzCC,IAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,0BAA0B;AAAA,EAC1B,uBAAuB;AAAA,EACvB;AACF,MAAM;AACJ,QAAM,eAAeC,QAAuB,IAAI;AAChD,QAAM,CAAC,UAAU,WAAW,IAAIC,UAAS,EAAE;AAE3C,EAAAC,WAAU,MAAM;AACd,UAAM,YAAY,aAAa;AAE/B,UAAM,aAAa,MAAM;AACvB,YAAM,IAAI,UAAU;AACpB,YAAM,IAAI,UAAU;AAGpB,YAAM,UAAU,KAAK,IAAI,GAAG,CAAC,IAAI;AACjC,kBAAY,OAAO;AAAA,IACrB;AAEA,UAAM,WAAW,IAAI,eAAe,UAAU;AAC9C,aAAS,QAAQ,SAAS;AAE1B,eAAW;AAEX,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAqB,oBAAoB;AAE/C,QAAM,eAAe,UAAU,SAAY,KAAK,iBAAiB,eAAe,KAAK,IAAI;AAEzF,SACE,gBAAAJ,MAAC,SAAI,WAAWK,SAAO,mBAAmB,KAAK,cAC7C,0BAAAJ,OAAC,SAAI,WAAWI,SAAO,gBACrB;AAAA,oBAAAL;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,aAAa,SAAS;AAAA,QAC7B,OAAO;AAAA,UACL,UAAU,iBAAiB;AAAA,QAC7B;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IACA,gBAAAA,MAAC,SAAI,WAAWK,SAAO,wBAAwB,OAAO,EAAE,UAAU,eAAe,GAC9E,gCACC,gBAAAL;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,GAEJ;AAAA,KACF,GACF;AAEJ;;;AEzEA,SAAa,UAAAM,eAAc;AAC3B,SAAS,WAAW;AACpB,SAAS,YAAY,SAASC,UAAS,UAAAC,SAAQ,WAAAC,gBAAe;AAC9D,OAAOC,sBAAqB;AAC5B,OAAOC,uBAAsB;;;ACH7B,SAAS,aAAAC,kBAAiB;AAOnB,IAAM,kBAAkB,CAAC,SAA2B;AACzD,QAAM,cAAc,eAAe;AACnC,QAAM,aAAkD;AAAA,IACtD,GAAG;AAAA,IACH,UACE,KAAK,UAAU,IAAI,CAAC,YAAY;AAC9B,YAAM,SAAS,QAAQ,KAAK,IAAI,CAAC,QAAQ,UAAU,YAAY,QAAQ,YAAY,MAAM,CAAC;AAC1F,YAAM,iBAAiB;AAAA,QACrB,iBAAiB;AAAA,QACjB,aAAa;AAAA,MACf;AACA,YAAM,SAASC,WAAU,gBAAgB,OAAO;AAChD,aAAO;AAAA,IACT,CAAC,KAAK,CAAC;AAAA,EACX;AACA,SAAO;AACT;AAEO,IAAM,qBAAqB,CAChC,YACiC;AACjC,QAAM,kBAAgD;AAAA,IACpD,SAAS;AAAA,MACP,QAAQ,EAAE,SAAS,QAAQ,WAAW;AAAA,MACtC,YAAY;AAAA,QACV,SAAS,QAAQ,kBAAkB,SAAS;AAAA,MAC9C;AAAA,MACA,SAAS;AAAA,QACP,SAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACA,SAAOA,WAAU,kBAAkB,GAAG,eAAe;AACvD;AAEO,IAAM,uBAAuB,CAClC,YACiC;AACjC,QAAM,oBAAkD;AAAA,IACtD,QAAQ;AAAA,IACR,UAAU;AAAA,MACR,KAAK;AAAA,QACH,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,YAAY;AAAA,QACV,aAAa;AAAA,UACX,YAAY;AAAA,YACV,SAAS,CAAC,QAAQ,OAAO,QAAQ,QAAQ,EAAE,OAAO,OAAO;AAAA,YACzD,MAAM;AAAA,YACN,MAAM;AAAA,cACJ;AAAA,gBACE,MAAM,eAAe,0CAA0C,UAAU;AAAA,gBACzE,QAAQ,eAAe,0CAA0C,KAAK;AAAA,gBACtE,QAAQ,eAAe,0CAA0C,UAAU;AAAA,gBAC3E,QAAQ,SAAS,6BAA6B,YAAY;AAAA,cAC5D;AAAA,cACA;AAAA,gBACE,MAAM,eAAe,uCAAuC,MAAM;AAAA,gBAClE,QAAQ,eAAe,yCAAyC,KAAK;AAAA,gBACrE,QAAQ,eAAe,yCAAyC,MAAM;AAAA,gBACtE,QAAQ,SAAS,6BAA6B,YAAY;AAAA,cAC5D;AAAA,YACF;AAAA,YACA,OAAO,CAAC,SAAS,6BAA6B,SAAS,CAAC;AAAA,UAC1D;AAAA;AAAA;AAAA,QAGF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAOA,WAAU,mBAAmB,OAAO,GAAG,iBAAiB;AACjE;;;AD3EA,SAAS,aAAAC,kBAAiB;AAE1B,OAAOC,cAAY;;;AETnB,SAAS,iBAAiB,UAAAC,SAAQ,YAAAC,iBAAgB;AAO3C,IAAM,oBAAoB,CAC/B,OACA,UAAU,QACD;AACT,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAe,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC9D,QAAM,aAAaD,QAA2B,MAAS;AAEvD,kBAAgB,MAAM;AACpB,UAAM,KAAK,MAAM;AACjB,QAAI,CAAC,GAAI;AAET,UAAM,aAAa,CAAC,SAAoC;AACtD,cAAQ;AAAA,QACN,OAAO,KAAK,IAAI,GAAG,KAAK,KAAK;AAAA,QAC7B,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,UAAM,KAAK,IAAI,eAAe,CAAC,YAAY;AACzC,YAAM,QAAQ,QAAQ,CAAC;AACvB,UAAI,CAAC,MAAO;AAEZ,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAEA,iBAAW,UAAU,OAAO,WAAW,MAAM;AAC3C,mBAAW,MAAM,WAAW;AAAA,MAC9B,GAAG,OAAO;AAAA,IACZ,CAAC;AAED,OAAG,QAAQ,EAAE;AAGb,eAAW,GAAG,sBAAsB,CAAC;AAErC,WAAO,MAAM;AACX,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AACvD,SAAG,WAAW;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,OAAO,OAAO,CAAC;AAEnB,SAAO;AACT;;;AFDQ,gBAAAE,aAAA;AArCR,IAAM,iCAAiC;AAEvCC,SAAQ,SAAS,YAAYC,UAASC,SAAQC,kBAAiBC,iBAAgB;AAIxE,IAAM,aAAuC,CAAC;AAAA,EACnD;AAAA,EACA;AAAA,EACA,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,eAAe;AAAA,EACf,kBAAkB;AACpB,MAAM;AACJ,QAAM,eAAeC,QAAO,IAAI;AAChC,QAAM,WAAWA,QAAO,IAAI;AAE5B,QAAM,oBAAoBC;AAAA,IACxB,qBAAqB,EAAE,YAAY,cAAc,iBAAiB,OAAO,SAAS,CAAC;AAAA,IACnF;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC,UAA+C;AACzE,UAAM,eAAe,uBAAuB,OAAO,QAAQ;AAC3D,qBAAiB,YAAY;AAAA,EAC/B;AAEA,QAAM,EAAE,QAAQ,MAAM,IAAI,kBAAkB,cAAc,CAAC;AAE3D,QAAM,YACJ,SAAS,kCAAkC,QAAQ;AAErD,SACE,gBAAAP,MAAC,SAAI,WAAWQ,SAAO,gBAAgB,KAAK,cACzC,sBAAY,OACX,gBAAAR;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAM,gBAAgB,IAAI;AAAA,MAC1B,SAAS;AAAA,MACT,SAAS;AAAA;AAAA,EACX,GAEJ;AAEJ;;;AG1DA,SAAa,UAAAS,eAAc;AAC3B,SAAS,OAAAC,YAAW;AACpB,SAAS,cAAAC,aAAY,SAASC,UAAS,UAAAC,SAAQ,WAAAC,gBAAe;AAE9D,OAAOC,sBAAqB;AAE5B,SAAS,aAAAC,kBAAiB;AAE1B,OAAOC,cAAY;AACnB,OAAOC,uBAAsB;AAgCvB,gBAAAC,aAAA;AA9BNC,SAAQ,SAASC,aAAYC,UAASC,SAAQC,kBAAiBN,iBAAgB;AAIxE,IAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA,UAAU,CAAC;AAAA,EACX;AAAA,EACA,aAAa;AAAA,EACb,eAAe;AAAA,EACf,kBAAkB;AACpB,MAAM;AACJ,QAAM,WAAWO,QAAO,IAAI;AAE5B,QAAM,aAAaT;AAAA,IACjB,mBAAmB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC,UAA+C;AACzE,UAAM,eAAe,uBAAuB,OAAO,QAAQ;AAC3D,qBAAiB,YAAY;AAAA,EAC/B;AAEA,SACE,gBAAAG,MAAC,SAAI,WAAWF,SAAO,gBACrB,0BAAAE;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAM,gBAAgB,IAAI;AAAA,MAC1B,SAAS;AAAA,MACT,SAAS;AAAA;AAAA,EACX,GACF;AAEJ;;;ACjDA,YAAYC,YAAW;AACvB,OAAOC,cAAY;AACnB,OAAOC,YAAU;;;ACFjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,OAAOC,cAAY;AACnB,SAAa,aAAAC,kBAAiB;AAoCtB,SACE,OAAAC,OADF,QAAAC,cAAA;AA5BD,IAAM,qBAAqB,CAChC,OACA,aACuB;AACvB,SAAO,QAAQ,KAAK,KAAK,QAAQ,QAAQ,IAAI;AAC/C;AAEO,IAAM,kBAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,aAAa,mBAAmB,OAAO,QAAQ;AAErD,QAAM,eAAe,QAAQ;AAC7B,QAAM,eAAe,CAAC,cAAc,QAAQ,aAAa;AAEzD,EAAAF,WAAU,MAAM;AACd,QAAI,cAAc,QAAQ,YAAY;AACpC,mBAAa,CAAC;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,YAAY,IAAI,CAAC;AAErB,SACE,gBAAAC,MAAC,SAAI,WAAWF,SAAO,iBAAiB,cAAW,6BACjD,0BAAAG,OAAC,SAAI,WAAWH,SAAO,wBACrB;AAAA,oBAAAG,OAAC,SAAI,WAAWH,SAAO,+BACrB;AAAA,sBAAAE;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM;AACb,yBAAa,CAAC;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,UACV,cAAW;AAAA;AAAA,MACb;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM;AACb,yBAAa,OAAO,CAAC;AAAA,UACvB;AAAA,UACA,UAAU;AAAA,UACV,cAAW;AAAA;AAAA,MACb;AAAA,OACF;AAAA,IACA,gBAAAA,MAAC,UAAM,6BAAmB,QAAQ,OAAO,CAAC,OAAO,cAAc,GAAG,IAAG;AAAA,IACrE,gBAAAC,OAAC,SAAI,WAAWH,SAAO,+BACrB;AAAA,sBAAAE;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM;AACb,yBAAa,OAAO,CAAC;AAAA,UACvB;AAAA,UACA,UAAU;AAAA,UACV,cAAW;AAAA;AAAA,MACb;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,cAAc,aAAa,aAAa,CAAC;AAAA,UACxD,UAAU;AAAA,UACV,cAAW;AAAA;AAAA,MACb;AAAA,OACF;AAAA,KACF,GACF;AAEJ;;;AClFA,SAAS,uBAAAE,sBAAqB,uBAAuB,yBAAyB;AAC9E,OAAOC,cAAY;;;ACCZ,IAAM,qBAAqB;AAAA,EAChC,KAAK;AAAA,EACL,MAAM;AACR;AAMO,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT;;;ADZA,OAAO,iBAAiB;AACxB,OAAOC,YAAU;AA+BK,gBAAAC,OAgDV,QAAAC,cAhDU;AAxBtB,IAAM,oBAAoB,CACxB,MACA,WACG;AACH,SAAO,MAAM,OAAO,OAAO,KAAM,KAAK,cAAc,QAAQ,cAAc,eAAgB;AAC5F;AAEA,IAAM,qBAAqB,CACzB,MACA,WACG;AACH,SAAO,MAAM,OAAO,OAAO,KACvB,KAAK,cAAc,QACjB,WAAW,OAAO,KAAK,wDACvB,WAAW,OAAO,KAAK,wDACzB,WAAW,OAAO,KAAK;AAC7B;AACO,IAAM,cAAc,CAAK;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA2B;AACzB,QAAM,cAAc,CAAC,WAA+B;AAClD,QAAI,CAAC,KAAM,QAAO,gBAAAD,MAAC,yBAAsB;AAEzC,QAAI,KAAK,OAAO,OAAO,IAAI;AACzB,UAAI,KAAK,cAAc,mBAAmB,KAAK;AAC7C,eAAO,gBAAAA,MAAC,qBAAkB;AAAA,MAC5B,WAAW,KAAK,cAAc,mBAAmB,MAAM;AACrD,eAAO,gBAAAA,MAACE,sBAAA,EAAoB;AAAA,MAC9B;AAAA,IACF;AACA,WAAO,gBAAAF,MAAC,yBAAsB;AAAA,EAChC;AAEA,QAAM,aAAa,CAAC,OAAgB;AAClC,QAAI,CAAC,aAAc;AAEnB,QAAI,CAAC,MAAM;AACT,aAAO,aAAa,EAAE,IAAI,WAAW,mBAAmB,IAAI,CAAC;AAAA,IAC/D;AAEA,QAAI,MAAM;AAER,UAAI,KAAK,OAAO,IAAI;AAClB,eAAO,aAAa,EAAE,IAAI,WAAW,mBAAmB,IAAI,CAAC;AAAA,MAC/D;AAGA,UAAI,KAAK,cAAc,mBAAmB,KAAK;AAC7C,eAAO,aAAa,EAAE,IAAI,WAAW,mBAAmB,KAAK,CAAC;AAAA,MAChE,WAAW,KAAK,cAAc,mBAAmB,MAAM;AACrD,eAAO,aAAa,MAAS;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAEA,SACE,gBAAAA,MAAC,WAAM,WAAWG,SAAO,aACvB,0BAAAF,OAAC,QACE;AAAA,iBACC,gBAAAD,MAAC,QAAG,WAAWD,OAAK,YAAY,WAAW,YAAY,iBAAiB,GAAG,eAAC;AAAA,IAE7E,QAAQ,IAAI,CAAC,WACZ,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAWG,SAAO;AAAA,QAElB,OAAO,EAAE,UAAU,OAAO,SAAS;AAAA,QACnC,OAAM;AAAA,QACN,aAAW,kBAAkB,MAAM,MAAM;AAAA,QAEzC,0BAAAF;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,MAAM,WAAW,OAAO,EAAE;AAAA,YACnC,cAAY,mBAAmB,MAAM,MAAM;AAAA,YAE1C;AAAA,qBAAO;AAAA,cACP,YAAY,MAAM;AAAA;AAAA;AAAA,QACrB;AAAA;AAAA,MAXK,OAAO;AAAA,IAYd,CACD;AAAA,KACH,GACF;AAEJ;;;AE/FA,OAAOG,cAAY;AAEnB,OAAOC,YAAU;AAEjB,SAAS,UAAU,2BAA2B;AAC9C,SAAS,YAAAC,iBAAgB;AACzB,OAAOC,kBAAiB;AAkBhB,SAMI,OAAAC,OANJ,QAAAC,cAAA;AAXD,IAAM,YAAY,CAAK;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACvB,SACE,gBAAAD,MAAC,WAAM,WAAWE,SAAO,WACtB,eAAK,IAAI,CAAC,KAAK,aACd,gBAAAD;AAAA,IAAC;AAAA;AAAA,MAEC,SAAS,MAAM,kBAAkB,QAAQ;AAAA,MACzC,WAAWE,OAAK,aAAa,KAAK,SAAS,KAAKJ,aAAY,YAAY;AAAA,MAEvE;AAAA,qBACC,gBAAAC,MAAC,QAAG,WAAWG,OAAKJ,aAAY,WAAWA,aAAY,iBAAiB,GACrE,qBAAW,OAAO,WAAW,GAChC;AAAA,QAED,QAAQ,IAAI,CAAC,QAAQ,cACpB,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UAJK;AAAA,QAKP,CACD;AAAA;AAAA;AAAA,IAjBI;AAAA,EAkBP,CACD,GACH;AAEJ;AASA,IAAM,gBAAgB,CAAK,EAAE,QAAQ,KAAK,UAAU,UAAU,MAA6B;AACzF,QAAM,CAAC,eAAe,gBAAgB,IAAIF,UAAS,KAAK;AAExD,QAAM,QACJ,OAAO,aAAa,SAChB,OAAO,SAAS,GAAG,IACnB,OAAO,OAAO;AAAA;AAAA,IAEX,IAAY,OAAO,EAAE;AAAA,MACtB;AAGR,MAAI,OAAO,MAAM;AACf,WAAO,OAAO,KAAK,EAAE,OAAO,WAAWI,SAAO,cAAc,CAAC;AAAA,EAC/D;AAEA,QAAM,aAAa,MAAM;AACvB,qBAAiB,IAAI;AACrB,QAAI,UAAU,QAAW;AACvB,gBAAU,UAAU,UAAU,OAAO,KAAK,CAAC;AAAA,IAC7C;AAAA,EACF;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MAEC,OAAO;AAAA,MACP,OAAO,EAAE,WAAW,OAAO,MAAM;AAAA,MACjC,cAAc,MAAM,iBAAiB,KAAK;AAAA,MAE1C;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,SAAS,OAAO,KAAK,CAAC;AAAA,YAC7B,aAAa;AAAA,YACb,MAAM,gBAAgB,sBAAsB;AAAA,YAC5C,WAAWG;AAAA,cACTD,SAAO;AAAA,cACP,OAAO,UAAU,iBAAiB,SAASA,SAAO;AAAA,YACpD;AAAA,YACA,SAAS;AAAA;AAAA,QACX;AAAA,QACC;AAAA;AAAA;AAAA,IAfI,GAAG,QAAQ,IAAI,SAAS;AAAA,EAgB/B;AAEJ;;;AJlEU,SACE,OAAAE,OADF,QAAAC,cAAA;AAxBH,IAAM,iBAAuB;AAAA;AAAA,EAElC,CACE,OACA,QACsB;AACtB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,WACE,gBAAAA,OAAC,SAAI,KAAU,WAAWC,OAAKC,SAAO,gBAAgB,SAAS,GAC7D;AAAA,sBAAAH,MAAC,SAAI,WAAWG,SAAO,sBACrB,0BAAAF,OAAC,WAAM,WAAWE,SAAO,OACvB;AAAA,wBAAAH;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,SACF,GACF;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,eAAe,cAAc;;;AK9D7B,SAAa,aAAAI,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AACjD,OAAOC,kBAAiB;AACxB,OAAOC,YAAU;;;ACFV,IAAM,yBAAyB,CAAC,UAA8B;AACnE,SAAO;AAAA,IACL,UAAU,QAAQ,GAAG,KAAK,OAAO;AAAA,IACjC,UAAU,QAAQ,GAAG,KAAK,OAAO;AAAA,IACjC,OAAO,QAAQ,GAAG,KAAK,OAAO;AAAA,EAChC;AACF;;;ADwJY,SACE,OAAAC,OADF,QAAAC,cAAA;AAtJZ,IAAM,WAAW,CAAC,MAAW,OAAO,MAAM,YAAY,CAAC,OAAO,MAAM,CAAC;AAErE,IAAM,uBAAuB,CAAC,YAAoB,4BAAoC;AACpF,SAAO,GAAG,WAAW,QAAQ,uBAAuB,CAAC;AACvD;AAEO,IAAM,aAAuC,CAAC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe,CAAC;AAAA,EAChB,kBAAkB,CAAC;AAAA,EACnB,aAAa;AAAA,EACb;AACF,MAAM;AACJ,QAAM,YAAYC,SAAQ,MAAM;AAC9B,UAAM,IAAI,oBAAI,IAAY;AAC1B,eAAW,KAAK,MAAM;AACpB,YAAM,WAAW,EAAE,aAAa,GAAG;AACnC,UAAI,YAAY,KAAM,GAAE,IAAI,QAAQ;AAAA,IACtC;AACA,WAAO,MAAM,KAAK,CAAC;AAAA,EACrB,GAAG,CAAC,MAAM,aAAa,GAAG,CAAC;AAE3B,QAAM,eAAeA,SAAQ,MAAM;AACjC,UAAM,IAAI,oBAAI,IAAY;AAC1B,eAAW,KAAK,MAAM;AACpB,YAAM,cAAc,EAAE,gBAAgB,GAAG;AACzC,UAAI,eAAe,KAAM,GAAE,IAAI,WAAqB;AAAA,IACtD;AACA,WAAO,MAAM,KAAK,CAAC;AAAA,EACrB,GAAG,CAAC,MAAM,gBAAgB,GAAG,CAAC;AAE9B,QAAM,UAAUA,SAAQ,MAAM;AAC5B,UAAM,MAAM,oBAAI,IAA8C;AAC9D,eAAW,KAAK,MAAM;AACpB,YAAM,IAAI,OAAO,EAAE,aAAa,GAAG,CAAC;AACpC,YAAM,IAAI,OAAO,EAAE,gBAAgB,GAAG,CAAC;AACvC,UAAI,CAAC,IAAI,IAAI,CAAC,EAAG,KAAI,IAAI,GAAG,oBAAI,IAAI,CAAC;AACrC,UAAI,IAAI,CAAC,EAAG,IAAI,GAAG,CAAwB;AAAA,IAC7C;AACA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,aAAa,KAAK,gBAAgB,GAAG,CAAC;AAEhD,QAAM,eAAeA,SAAQ,MAAM,IAAI,IAAY,YAAY,GAAG,CAAC,YAAY,CAAC;AAChF,QAAM,kBAAkBA,SAAQ,MAAM,IAAI,IAAY,eAAe,GAAG,CAAC,eAAe,CAAC;AACzF,QAAM,eAAe,aAAa,OAAO;AACzC,QAAM,kBAAkB,gBAAgB,OAAO;AAE/C,QAAM,oBAAoBA,SAAQ,MAAM;AACtC,UAAM,MAAM,oBAAI,IAAoB;AACpC,aAAS,QAAQ,CAAC,GAAG,MAAM,IAAI,IAAI,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC;AACpD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,EAAE,WAAW,WAAW,YAAY,IAAIA,SAAQ,MAAM;AAC1D,UAAM,UAAU,oBAAI,IAAsB;AAC1C,UAAM,UAAU,oBAAI,IAAsB;AAC1C,UAAM,UAAU,SAAS,IAAI,MAAM,CAAC;AAEpC,eAAW,KAAK,MAAM;AACpB,YAAM,IAAI,OAAO,EAAE,aAAa,GAAG,CAAC;AACpC,YAAM,IAAI,OAAO,EAAE,gBAAgB,GAAG,CAAC;AACvC,YAAM,OAAO,QAAQ,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC;AACnD,YAAM,OAAO,QAAQ,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC;AAEnD,eAAS,QAAQ,CAAC,GAAG,MAAM;AACzB,cAAM,MAAO,IAAY,EAAE,GAAG;AAC9B,cAAM,IAAI,OAAO,GAAG;AACpB,YAAI,CAAC,OAAO,MAAM,CAAC,GAAG;AACpB,eAAK,CAAC,KAAM;AACZ,eAAK,CAAC,KAAM;AACZ,kBAAQ,CAAC,KAAM;AAAA,QACjB;AAAA,MACF,CAAC;AAED,cAAQ,IAAI,GAAG,IAAI;AACnB,cAAQ,IAAI,GAAG,IAAI;AAAA,IACrB;AAEA,eAAW,KAAK,cAAc;AAC5B,UAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AACxB,gBAAQ;AAAA,UACN,OAAO,CAAC;AAAA,UACR,SAAS,IAAI,MAAM,CAAC;AAAA,QACtB;AAAA,IACJ;AACA,eAAW,KAAK,WAAW;AACzB,UAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AACxB,gBAAQ;AAAA,UACN,OAAO,CAAC;AAAA,UACR,SAAS,IAAI,MAAM,CAAC;AAAA,QACtB;AAAA,IACJ;AAEA,WAAO,EAAE,WAAW,SAAS,WAAW,SAAS,aAAa,QAAQ;AAAA,EACxE,GAAG,CAAC,MAAM,UAAU,aAAa,KAAK,gBAAgB,KAAK,cAAc,SAAS,CAAC;AAEnF,QAAM,CAAC,cAAc,eAAe,IAAIC;AAAA,IAAS,MAC/C,cAAc,KAAK,IAAI,WAAW,UAAU,MAAM,IAAI,UAAU;AAAA,EAClE;AAEA,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,aAAa;AAChB,sBAAgB,UAAU,MAAM;AAChC;AAAA,IACF;AACA,QAAI,YAAY;AAChB,QAAI,IAAmB;AACvB,oBAAgB,CAAC;AAEjB,UAAM,OAAO,MAAM;AACjB,sBAAgB,CAAC,SAAS;AACxB,cAAM,OAAO,KAAK,IAAI,OAAO,WAAW,UAAU,MAAM;AACxD,YAAI,OAAO,UAAU,UAAU,CAAC,WAAW;AACzC,cAAI,OAAO,WAAW,MAAM,YAAY;AAAA,QAC1C;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,QAAI,OAAO,WAAW,MAAM,YAAY;AAExC,WAAO,MAAM;AACX,kBAAY;AACZ,UAAI,MAAM,KAAM,QAAO,aAAa,CAAC;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,aAAa,WAAW,cAAc,UAAU,QAAQ,IAAI,CAAC;AAEjE,QAAM,cAAc,cAAc,UAAU,MAAM,GAAG,YAAY,IAAI;AAErE,SACE,gBAAAJ,MAAC,SAAI,WAAWK,OAAKC,aAAY,oBAAoB,SAAS,GAC5D,0BAAAN;AAAA,IAAC;AAAA;AAAA,MACC,WAAWK;AAAA,QACTC,aAAY;AAAA,SACX,CAAC,eAAe,CAAC,qBAAqBA,aAAY;AAAA,MACrD;AAAA,MAEA,0BAAAL;AAAA,QAAC;AAAA;AAAA,UACC,WAAWK,aAAY;AAAA,UACvB,cAAY,GAAG,aAAa,KAAK,OAAO,gBAAgB,KAAK;AAAA,UAE7D;AAAA,4BAAAL,OAAC,WACC;AAAA,8BAAAA,OAAC,QACC;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS;AAAA,oBACT,OAAO,gBAAgB;AAAA,oBACvB,WAAWM,aAAY;AAAA,oBAEtB,0BAAgB;AAAA;AAAA,gBACnB;AAAA,gBACC,aAAa,IAAI,CAAC,gBAAgB;AACjC,wBAAM,qBAAqB,gBAAgB,cACvC,gBAAgB,YAAY,WAAW,IACvC;AACJ,yBACE,gBAAAN;AAAA,oBAAC;AAAA;AAAA,sBAEC,OAAM;AAAA,sBACN,SAAS,SAAS;AAAA,sBAClB,OAAO;AAAA,sBAEN;AAAA;AAAA,oBALI,OAAO,WAAW;AAAA,kBAMzB;AAAA,gBAEJ,CAAC;AAAA,gBACA,gBACC,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBAEC,OAAM;AAAA,oBACN,SAAS,MAAM,KAAK,YAAY,EAAE;AAAA,oBAClC,WAAWM,aAAY;AAAA,oBACvB,OAAO;AAAA,oBAEN;AAAA;AAAA,kBANG;AAAA,gBAON;AAAA,iBAEJ;AAAA,cACA,gBAAAL,OAAC,QACC;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,SAAS;AAAA,oBACT,OAAO,aAAa;AAAA,oBACpB,WAAWM,aAAY;AAAA,oBACvB,OAAO,uBAAuB,gBAAgB;AAAA,oBAE7C,uBAAa;AAAA;AAAA,gBAChB;AAAA,gBACC,aAAa;AAAA,kBAAQ,CAAC,QACrB,SAAS,IAAI,CAAC,SAAS,QACrB,gBAAAN;AAAA,oBAAC;AAAA;AAAA,sBAEC,OAAM;AAAA,sBACN,OAAO,QAAQ;AAAA,sBACf,OAAO,uBAAuB,WAAW;AAAA,sBAExC,kBAAQ;AAAA;AAAA,oBALJ,OAAO,OAAO,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,GAAG;AAAA,kBAM/C,CACD;AAAA,gBACH;AAAA,gBACC,gBACC,SACG,OAAO,CAAC,YAAY,aAAa,IAAI,QAAQ,GAAG,CAAC,EACjD,IAAI,CAAC,SAAS,QACb,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBAEC,OAAM;AAAA,oBACN,WAAWM,aAAY;AAAA,oBACvB,OAAO,QAAQ;AAAA,oBACf,OAAO,uBAAuB,WAAW;AAAA,oBAExC,kBAAQ;AAAA;AAAA,kBANJ,aAAa,QAAQ,GAAG,IAAI,GAAG;AAAA,gBAOtC,CACD;AAAA,iBACP;AAAA,eACF;AAAA,YACA,gBAAAL,OAAC,WACE;AAAA,0BAAY,IAAI,CAAC,QAAQ;AACxB,sBAAM,oBAAoB,aAAa,cACnC,aAAa,YAAY,GAAG,IAC5B;AACJ,uBACE,gBAAAA,OAAC,QACC;AAAA,kCAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAM;AAAA,sBACN,OAAO;AAAA,sBACP,WAAWM,aAAY;AAAA,sBAEtB;AAAA;AAAA,kBACH;AAAA,kBAEC,aAAa;AAAA,oBAAQ,CAAC,gBACrB,SAAS,IAAI,CAAC,SAAS,QAAQ;AAC7B,4BAAM,SAAS,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,OAAO,WAAW,CAAC,KAAK,CAAC;AACtE,4BAAM,QAAQ,SAAS,QAAQ,GAAG;AAElC,4BAAM,MAAM,QAAQ,GAAG,IAAI,WAAW,IAAI,QAAQ,GAAG,IAAI,GAAG;AAC5D,4BAAM,kBAAkB,MAAM;AAC5B,4BAAI,QAAQ,kBAAkB;AAC5B,gCAAM,KAAK,kBAAkB,IAAI,OAAO,QAAQ,GAAG,CAAC,KAAK;AACzD,gCAAM,eACJ,UAAU,IAAI,OAAO,WAAW,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC;AAC5D,gCAAM,WAAW,MAAM,IAAK,aAAa,EAAE,KAAK,IAAK;AAErD,gCAAM,gBACJ,QAAQ,oBACR,SAAS,OAAO,KAAK,CAAC,KACtB,SAAS,QAAQ,KACjB,WAAW;AAEb,8BAAI,eAAe;AACjB,kCAAM,aAAc,QAAQ,WAAY;AACxC,mCAAO,GAAG,WAAW,QAAQ,QAAQ,2BAA2B,CAAC,CAAC;AAAA,0BACpE;AAAA,wBACF;AAEA,+BAAO,QAAQ,WAAW,QAAQ,SAAS,MAAM,IAAI;AAAA,sBACvD;AAEA,4BAAM,qBAAqB,gBAAgB;AAE3C,6BACE,gBAAAN,MAAC,QAAa,OAAO,oBAClB,gCADM,GAET;AAAA,oBAEJ,CAAC;AAAA,kBACH;AAAA,kBAEC,gBACC,SACG,OAAO,CAAC,YAAY,aAAa,IAAI,QAAQ,GAAG,CAAC,EACjD,IAAI,CAAC,SAAS,QAAQ;AACrB,0BAAM,eAAe,UAAU,IAAI,OAAO,GAAG,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC;AACvE,0BAAM,eAAe,kBAAkB,IAAI,QAAQ,GAAG,KAAK;AAC3D,0BAAM,MAAM,aAAa,OAAO,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,GAAG;AAC1D,0BAAM,QACJ,gBAAgB,IAAK,aAAa,YAAY,KAAK,IAAK;AAC1D,wBAAI,eAAoB;AAExB,wBAAI,QAAQ,kBAAkB;AAC5B,qCAAe;AAAA,wBACZ,SAAS,YAAY,YAAY,KAAK,KAAM;AAAA,wBAC7C,QAAQ,2BAA2B;AAAA,sBACrC;AAAA,oBACF,WAAW,QAAQ,UAAU;AAC3B,qCAAe,QAAQ,SAAS,EAAE,CAAC,QAAQ,GAAG,GAAG,MAAM,CAAC;AAAA,oBAC1D;AAEA,2BACE,gBAAAA,MAAC,QAAa,WAAWM,aAAY,UAAU,OAAO,cACnD,0BADM,GAET;AAAA,kBAEJ,CAAC;AAAA,qBAxEE,OAAO,GAAG,EAyEnB;AAAA,cAEJ,CAAC;AAAA,cACA,mBACC,gBAAAL,OAAC,QAAoB,WAAWK,aAAY,eAC1C;AAAA,gCAAAN;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,WAAWK,OAAKC,aAAY,mBAAmBA,aAAY,QAAQ;AAAA,oBACnE,OAAO;AAAA,oBAEN;AAAA;AAAA,gBACH;AAAA,gBAEC,aAAa;AAAA,kBAAQ,CAAC,gBACrB,SAAS,IAAI,CAAC,SAAS,QAAQ;AAC7B,0BAAM,OAAO,gBAAgB,IAAI,OAAO,QAAQ,GAAG,CAAC;AACpD,0BAAM,eACJ,UAAU,IAAI,OAAO,WAAW,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC;AAC5D,0BAAM,KAAK,SAAS,UAAU,CAAC,OAAO,OAAO,GAAG,GAAG,MAAM,OAAO,QAAQ,GAAG,CAAC;AAC5E,0BAAM,MAAM,aAAa,OAAO,WAAW,CAAC,IAAI,QAAQ,GAAG,IAAI,GAAG;AAClE,0BAAM,QAAgB,aAAa,EAAE,KAAK;AAC1C,wBAAI,eAAoB;AAExB,wBAAI,QAAQ,kBAAkB;AAC5B,qCAAe;AAAA,wBACb;AAAA,wBACA,QAAQ,2BAA2B;AAAA,sBACrC;AAAA,oBACF,WAAW,QAAQ,UAAU;AAC3B,qCAAe,QAAQ,SAAS,EAAE,CAAC,QAAQ,GAAG,GAAG,MAAM,CAAC;AAAA,oBAC1D;AACA,0BAAM,qBAAqB,OAAO,eAAe;AAEjD,2BACE,gBAAAN,MAAC,QAAa,WAAWM,aAAY,UAAU,OAAO,oBACnD,gCADM,GAET;AAAA,kBAEJ,CAAC;AAAA,gBACH;AAAA,gBAEC,gBACC,SACG,OAAO,CAAC,YAAY,aAAa,IAAI,QAAQ,GAAG,CAAC,EACjD,IAAI,CAAC,SAAS,QAAQ;AACrB,wBAAM,eAAe,SAAS,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,MAAM,QAAQ,GAAG;AAC5E,wBAAM,MAAM,eAAe,QAAQ,GAAG,IAAI,GAAG;AAC7C,wBAAM,QAAgB,YAAY,YAAY,KAAK;AACnD,sBAAI,eAAoB;AAExB,sBAAI,QAAQ,kBAAkB;AAC5B,mCAAe;AAAA,sBACb;AAAA,sBACA,QAAQ,2BAA2B;AAAA,oBACrC;AAAA,kBACF,WAAW,QAAQ,UAAU;AAC3B,mCAAe,QAAQ,SAAS,EAAE,CAAC,QAAQ,GAAG,GAAG,MAAM,CAAC;AAAA,kBAC1D;AAEA,yBACE,gBAAAN,MAAC,QAAa,WAAWM,aAAY,UAAU,OAAO,cACnD,0BADM,GAET;AAAA,gBAEJ,CAAC;AAAA,mBA5DC,YA6DR;AAAA,eAEJ;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF,GACF;AAEJ;;;AE/XA,SAAS,WAAAC,UAAS,mBAAmB;AACrC,OAAOC,kBAAiB;AACxB,OAAOC,YAAU;;;ACKjB,IAAM,UAAU,CAAC,MAAe,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AACxD,IAAM,cAAc,CAAC,MAAc,KAAK,IAAI,MAAM,IAAI;AACtD,IAAM,OAAO,CAAC,GAAW,GAAW,MAAc,KAAK,IAAI,KAAK;AAGhE,IAAM,qBAAqB;AAE3B,IAAM,qBAAqB;AAC3B,IAAM,sBAAsB;AAErB,IAAM,OAAO,CAAC,MAAe,OAAO,KAAK,EAAE;AAQlD,IAAM,gBAAgB;AACtB,IAAM,cAAc,oBAAI,IAAoB;AAG5C,IAAM,eAAe,CAAC,QAAgB;AACpC,MAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAK,QAAO;AACnC,QAAM,IAAI,IAAI,MAAM,CAAC,EAAE,YAAY;AACnC,MAAI,EAAE,WAAW,EAAG,QAAO,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACtE,MAAI,EAAE,WAAW,EAAG,QAAO,IAAI,CAAC;AAChC,SAAO,IAAI,YAAY;AACzB;AAMA,IAAM,uBAAuB,CAAC,UAA0B;AACtD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,SAAS,YAAY,IAAI,KAAK;AACpC,MAAI,OAAQ,QAAO;AAGnB,MAAI,MAAM,WAAW,GAAG,GAAG;AACzB,UAAMC,OAAM,aAAa,KAAK;AAC9B,gBAAY,IAAI,OAAOA,IAAG;AAC1B,WAAOA;AAAA,EACT;AAEA,MAAI,OAAO,aAAa,aAAa;AAEnC,WAAO;AAAA,EACT;AAGA,QAAM,KAAK,SAAS,cAAc,MAAM;AACxC,KAAG,MAAM,QAAQ;AACjB,WAAS,KAAK,YAAY,EAAE;AAC5B,QAAM,WAAW,iBAAiB,EAAE,EAAE,SAAS;AAC/C,KAAG,OAAO;AAGV,QAAM,IAAI,SAAS,MAAM,aAAa;AACtC,MAAI,CAAC,EAAG,QAAO;AAEf,QAAM,CAAC,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI;AACtC,QAAM,QAAQ,CAAC,MAAc,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AACnE,QAAM,MAAM,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,YAAY;AAC7D,cAAY,IAAI,OAAO,GAAG;AAC1B,SAAO;AACT;AAEA,IAAM,WAAW,CAAC,UAAkB;AAClC,QAAM,MAAM,aAAa,qBAAqB,KAAK,CAAC,EAAE,MAAM,CAAC;AAE7D,MAAI,IAAI,WAAW,EAAG,QAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAChD,QAAM,IAAI,SAAS,KAAK,EAAE;AAC1B,SAAO,EAAE,GAAI,KAAK,KAAM,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,IAAI,IAAI;AAC7D;AAEA,IAAM,WAAW,CAAC,GAAW,GAAW,MAAc;AACpD,QAAM,KAAK,CAAC,MAAc,KAAK,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AACpE,SAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAClC;AAGO,IAAM,YAAY,CAAC,GAAW,GAAW,MAAc;AAC5D,QAAM,IAAI,SAAS,CAAC;AACpB,QAAM,IAAI,SAAS,CAAC;AACpB,SAAO,SAAS,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACzE;AAGA,IAAM,gBAAgB,CAAC,UAAkB;AACvC,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,KAAK;AAClC,UAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AACzC;AAGO,IAAM,eAAe,CAAC,oBAA4B;AACvD,SAAO,cAAc,eAAe,IAAI,MAAM,YAAY;AAC5D;AAOA,IAAM,gBAAgB,CAAC,MAAc,MAAc,MAAc,WAAW,QAAQ;AAClF,QAAM,IAAI,QAAQ,QAAQ;AAC1B,SAAO,CAAC,MAAc;AACpB,UAAM,IAAI,QAAQ,CAAC;AACnB,WAAO,KAAK,IACR,UAAU,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC,IACzC,UAAU,MAAM,OAAO,IAAI,MAAM,IAAI,EAAE;AAAA,EAC7C;AACF;AAGA,IAAM,qBAAqB,CAAC,MAA6B;AACvD,QAAM,IAAI,EAAE,KAAK;AACjB,MAAI,CAAC,EAAE,SAAS,GAAG,EAAG,QAAO;AAC7B,QAAM,IAAI,OAAO,WAAW,EAAE,MAAM,GAAG,EAAE,CAAC;AAC1C,SAAO,OAAO,SAAS,CAAC,IAAI,QAAQ,IAAI,GAAG,IAAI;AACjD;AAQO,IAAM,iBAAiB,CAC5B,GACA,QACA,QACA,aACW;AACX,MAAI,KAAK,KAAM,QAAO;AACtB,MAAI,OAAO,MAAM,YAAY,OAAO,SAAS,CAAC,EAAG,QAAO;AACxD,QAAM,QAAQ,OAAO,MAAM,WAAW,mBAAmB,CAAC,IAAI;AAC9D,MAAI,SAAS,KAAM,QAAO,SAAS,SAAS,SAAS;AAGrD,QAAM,QAAQ,OAAO,CAAsB;AAC3C,SAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAMA,IAAM,iBAAiB,CAAC,MAAgE;AACtF,MAAI,KAAK,KAAM,QAAO;AACtB,QAAM,IAAI,OAAO,CAAC;AAClB,SAAO,OAAO,SAAS,CAAC,IAAI,IAAI;AAClC;AAQO,IAAM,eAAe,CAE1B,OACA,kBACgC;AAChC,QAAM,WACJ,iBAAiB,OAAO,SAAS,OAAO,aAAa,CAAC,IAAI,OAAO,aAAa,IAAI;AACpF,SAAO,eAAe,SAAS,QAAQ;AACzC;AAGO,IAAM,oBAAoB,CAC/B,OACA,kBACW;AACX,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK;AACrD,WAAO,SAAS,mCAAmC,MAAM;AAC3D,SAAO,cAAc,KAAK;AAC5B;AAGO,IAAM,sBAAsB,CACjC,OACA,YAEA,YACG;AACH,MAAI,CAAC,WAAY,QAAO;AACxB,MAAI,OAAO,UAAU,YAAY,SAAS,QAAQ,OAAO,MAAM,KAAe,EAAG,QAAO;AACxF,SAAO,SAAS,SAAS,QAAQ,OAAO,OAAO,KAAK,CAAC,IAAI;AAC3D;AAOA,IAAM,cAAc,CAAC,WAAmB,cAAsB;AAC5D,QAAM,QAAQ,YAAY;AAC1B,MAAI,UAAU,EAAG,QAAO;AACxB,WAAS,YAAY,aAAa,IAAI,aAAa;AACrD;AAWO,IAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQM;AACJ,QAAM,WAAW,YAAY,WAAW,SAAS;AACjD,QAAM,QAAQ,cAAc,UAAU,UAAU,UAAU,QAAQ;AAElE,QAAM,cAAc,KAAK,IAAI,MAAM,YAAY,MAAM;AACrD,QAAM,eAAe,KAAK,IAAI,MAAM,SAAS,SAAS;AACtD,QAAM,WAAW,YAAY;AAE7B,MAAI,aAAa,GAAG;AAElB,UAAM,MAAM,MAAM,GAAG;AAErB,WAAO,CAAC,OAAe;AAAA,EACzB;AAEA,SAAO,CAAC,MAAc;AACpB,QAAI,CAAC,OAAO,SAAS,CAAC,EAAG,QAAO,MAAM,GAAG;AAEzC,UAAM,KAAK,IAAI,aAAa;AAE5B,QAAI,KAAK,GAAG;AACV,YAAM,OAAO,KAAK,IAAI,GAAG,YAAY,CAAC,IAAI;AAC1C,YAAM,WAAW,YAAY,QAAQ,IAAI,CAAC,IAAI;AAC9C,aAAO,WAAW,IAAI,UAAU,UAAU,qBAAqB,QAAQ,IAAI;AAAA,IAC7E;AAEA,QAAI,KAAK,GAAG;AACV,YAAM,OAAO,KAAK,IAAI,GAAG,IAAI,SAAS,IAAI;AAC1C,YAAM,WAAW,YAAY,QAAQ,IAAI,CAAC,IAAI;AAC9C,aAAO,WAAW,IAAI,UAAU,UAAU,oBAAoB,QAAQ,IAAI;AAAA,IAC5E;AAEA,WAAO,MAAM,CAAC;AAAA,EAChB;AACF;;;ADrJY,SACE,OAAAC,OADF,QAAAC,cAAA;AAzGL,IAAM,UAAU,CAAoC;AAAA,EACzD;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW,SAAS,iCAAiC,SAAS;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AAErB,QAAM,EAAE,QAAQ,OAAO,IAAIC,SAAQ,MAAM;AACvC,QAAI,MAAM;AACV,QAAI,MAAM;AACV,eAAW,KAAK,MAAM;AACpB,YAAM,QAAQ,aAAa,EAAE,QAAQ,GAAG,GAAG,aAAa;AAExD,UAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG;AACxE,YAAI,QAAQ,IAAK,OAAM;AACvB,YAAI,QAAQ,IAAK,OAAM;AAAA,MACzB;AAAA,IACF;AACA,QAAI,CAAC,OAAO,SAAS,GAAG,KAAK,CAAC,OAAO,SAAS,GAAG,EAAG,QAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE;AAClF,WAAO,EAAE,QAAQ,KAAK,QAAQ,IAAI;AAAA,EACpC,GAAG,CAAC,MAAM,QAAQ,KAAK,aAAa,CAAC;AAGrC,QAAM,EAAE,WAAW,UAAU,IAAIA,SAAQ,MAAM;AAC7C,UAAM,SAAS,eAAe,cAAc,QAAQ,QAAQ,MAAM;AAClE,UAAM,SAAS,eAAe,cAAc,QAAQ,QAAQ,MAAM;AAClE,WAAO,UAAU,SACb,EAAE,WAAW,QAAQ,WAAW,OAAO,IACvC,EAAE,WAAW,QAAQ,WAAW,OAAO;AAAA,EAC7C,GAAG,CAAC,cAAc,cAAc,QAAQ,MAAM,CAAC;AAE/C,QAAM,eAAeA;AAAA,IACnB,MACE,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,KACG,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,CAAC,EACjC,OAAO,CAAC,MAAM,KAAK,IAAI,EACvB,IAAI,IAAI;AAAA,MACb;AAAA,IACF;AAAA,IACF,CAAC,MAAM,gBAAgB,GAAG;AAAA,EAC5B;AAEA,QAAM,YAAYA;AAAA,IAChB,MACE,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,KACG,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,EAC9B,OAAO,CAAC,MAAM,KAAK,IAAI,EACvB,IAAI,IAAI;AAAA,MACb;AAAA,IACF;AAAA,IACF,CAAC,MAAM,aAAa,GAAG;AAAA,EACzB;AAGA,QAAM,UAAUA,SAAQ,MAAM;AAC5B,UAAM,MAAM,oBAAI,IAAkD;AAClE,eAAW,KAAK,MAAM;AACpB,YAAM,IAAI,KAAK,EAAE,aAAa,GAAG,CAAC;AAClC,YAAM,IAAI,KAAK,EAAE,gBAAgB,GAAG,CAAC;AACrC,UAAI,CAAC,IAAI,IAAI,CAAC,EAAG,KAAI,IAAI,GAAG,oBAAI,IAAI,CAAC;AACrC,UAAI,IAAI,CAAC,EAAG,IAAI,GAAG,CAA4B;AAAA,IACjD;AACA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,aAAa,KAAK,gBAAgB,GAAG,CAAC;AAGhD,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAAc;AACb,aAAO,oBAAoB;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC,EAAE,CAAC;AAAA,IACN;AAAA,IACA,CAAC,WAAW,WAAW,QAAQ,QAAQ,UAAU,UAAU,QAAQ;AAAA,EACrE;AAEA,SACE,gBAAAF,MAAC,SAAI,WAAWG,OAAKC,aAAY,oBAAoB,SAAS,GAC5D,0BAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,WAAWG;AAAA,QACTC,aAAY;AAAA,SACX,CAAC,eAAe,CAAC,qBAAqBA,aAAY;AAAA,MACrD;AAAA,MAEA,0BAAAH,OAAC,WAAM,WAAWG,aAAY,OAAO,cAAW,YAC9C;AAAA,wBAAAJ,MAAC,WACC,0BAAAC,OAAC,QACC;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAWI,aAAY;AAAA,cACvB,OAAO,uBAAuB,gBAAgB;AAAA,cAE7C,kBAAQ;AAAA;AAAA,UACX;AAAA,UACC,aAAa,IAAI,CAAC,IAAI,UACrB,gBAAAJ,MAAC,QAA8B,OAAO,uBAAuB,WAAW,GACrE,0BAAgB,SAAS,gBAAgB,OAAO,EAAE,IAAI,MADhD,OAAO,EAAE,IAAI,KAAK,EAE3B,CACD;AAAA,WACH,GACF;AAAA,QAEA,gBAAAA,MAAC,WACE,oBAAU,IAAI,CAAC,OACd,gBAAAC,OAAC,QACC;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,WAAWI,aAAY;AAAA,cACvB,OAAO,uBAAuB,gBAAgB;AAAA,cAE7C,uBAAa,SAAS,aAAa,OAAO,EAAE,IAAI;AAAA;AAAA,UACnD;AAAA,UAEC,aAAa,IAAI,CAAC,OAAO;AACxB,kBAAM,MAAM,QAAQ,IAAI,EAAE,GAAG,IAAI,EAAE;AACnC,kBAAM,QAAQ,aAAa,MAAM,QAAQ,GAAG,GAAG,aAAa;AAC5D,kBAAM,aAAa,kBAAkB,OAAO,aAAa;AACzD,kBAAM,QAAQ,aAAa,UAAU;AAErC,mBACE,gBAAAJ;AAAA,cAAC;AAAA;AAAA,gBAEC,OAAO;AAAA,kBACL;AAAA,kBACA;AAAA,kBACA,GAAG,uBAAuB,WAAW;AAAA,gBACvC;AAAA,gBAEC,8BAAoB,OAAO,YAAY,OAAO;AAAA;AAAA,cAP1C,QAAQ,EAAE,IAAI,EAAE;AAAA,YAQvB;AAAA,UAEJ,CAAC;AAAA,aA3BM,OAAO,EAAE,EA4BlB,CACD,GACH;AAAA,SACF;AAAA;AAAA,EACF,GACF;AAEJ;;;AE7KA,SAAS,WAAAK,gBAAe;AAQjB,IAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,MACEA,SAAQ,MAAM;AACZ,QAAM,IAAI;AACV,MAAI,CAAC,EAAG,QAAO;AAGf,MAAI,YAAY,IAAI,eAAe;AACnC,MAAI,YAAY,EAAG,aAAY;AAG/B,QAAM,OAAO,KAAK,MAAM,YAAY,SAAS;AAC7C,SAAO,KAAK,IAAI,GAAG,IAAI;AACzB,GAAG,CAAC,iBAAiB,cAAc,WAAW,YAAY,CAAC;;;ACzB7D,SAAS,UAAAC,UAAQ,aAAAC,YAAW,eAAAC,oBAAmB;AAGxC,SAAS,YACd,IACA,QAAQ,KAC0B;AAClC,QAAM,WAAWF,SAAuB,IAAI;AAC5C,QAAM,QAAQA,SAAO,EAAE;AAGvB,EAAAC,WAAU,MAAM;AACd,UAAM,UAAU;AAAA,EAClB,GAAG,CAAC,EAAE,CAAC;AAEP,QAAM,cAAcC;AAAA,IAClB,IAAI,SAAwB;AAC1B,UAAI,SAAS,SAAS;AACpB,qBAAa,SAAS,OAAO;AAAA,MAC/B;AACA,eAAS,UAAU,WAAW,MAAM;AAClC,cAAM,QAAQ,GAAG,IAAI;AAAA,MACvB,GAAG,KAAK;AAAA,IACV;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAGA,EAAAD,WAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,SAAS,QAAS,cAAa,SAAS,OAAO;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;","names":["styles","jsx","clsx","styles","jsx","jsxs","styles","clsx","jsx","clsx","styles","jsx","clsx","styles","jsx","jsx","jsxs","DropdownMenu","styles","clsx","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","Fragment","useEffect","useRef","styles","clsx","jsx","jsxs","styles","clsx","jsx","styles","useEffect","styles","jsx","clsx","styles","jsx","clsx","styles","jsx","jsxs","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","jsxs","forwardRef","jsx","jsxs","useRef","useEffect","styles","Fragment","clsx","styles","jsx","jsxs","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","forwardRef","jsx","forwardRef","value","useRef","mergician","mergician","styles","mergician","jsx","useRef","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","useEffect","useRef","useState","styles","styles","clsx","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","useRef","useState","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","React","styles","clsx","styles","useEffect","jsx","jsxs","IconCaretDownFilled","styles","clsx","jsx","jsxs","IconCaretDownFilled","styles","styles","clsx","useState","tableStyles","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","useEffect","useMemo","useState","tableStyles","clsx","jsx","jsxs","useMemo","useState","useEffect","clsx","tableStyles","useMemo","tableStyles","clsx","hex","jsx","jsxs","useMemo","clsx","tableStyles","useMemo","useRef","useEffect","useCallback"]}
|