@embeddable.com/remarkable-ui 2.0.17 → 2.0.18
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.
|
@@ -203,6 +203,14 @@
|
|
|
203
203
|
align-items: center;
|
|
204
204
|
gap: var(--rdp-dropdown-gap);
|
|
205
205
|
}
|
|
206
|
+
|
|
207
|
+
.rdp-dropdowns span {
|
|
208
|
+
color: var(--em-daterangepicker-label-color, #212129);
|
|
209
|
+
font-family: var(--em-daterangepicker-label-font-family, sans-serif);
|
|
210
|
+
font-size: var(--em-daterangepicker-label-font-size, 0.875rem);
|
|
211
|
+
font-weight: var(--em-daterangepicker-label-font-weight, 500);
|
|
212
|
+
}
|
|
213
|
+
|
|
206
214
|
.rdp-dropdown {
|
|
207
215
|
z-index: 2;
|
|
208
216
|
|
|
@@ -24,3 +24,15 @@
|
|
|
24
24
|
.chevron:active {
|
|
25
25
|
background: var(--em-daterangepicker-chevron--active, #ededf1);
|
|
26
26
|
}
|
|
27
|
+
|
|
28
|
+
.chevron.small {
|
|
29
|
+
background: unset;
|
|
30
|
+
width: calc(var(--em-daterangepicker-chevron-size, 2rem) / 2);
|
|
31
|
+
height: calc(var(--em-daterangepicker-chevron-size, 2rem) / 2);
|
|
32
|
+
padding: calc(var(--em-daterangepicker-chevron-padding, 0.5rem) / 2);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.chevron.small svg {
|
|
36
|
+
width: calc(var(--em-daterangepicker-chevron-icon-size, 1rem) / 2);
|
|
37
|
+
height: calc(var(--em-daterangepicker-chevron-icon-size, 1rem) / 2);
|
|
38
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -860,20 +860,24 @@ NumberField.displayName = "NumberField";
|
|
|
860
860
|
// src/components/editors/dates/DateRangePicker/DateRangePicker.tsx
|
|
861
861
|
import { useState as useState3 } from "react";
|
|
862
862
|
import { DayPicker } from "react-day-picker";
|
|
863
|
-
import "./DateRangePicker-
|
|
863
|
+
import "./DateRangePicker-PLOUUN7Q.css";
|
|
864
864
|
|
|
865
865
|
// src/components/editors/dates/DateRangePicker/DateRangePickerChevron.tsx
|
|
866
866
|
import { IconCaretDownFilled as IconCaretDownFilled2 } from "@tabler/icons-react";
|
|
867
|
-
import styles21 from "./DateRangePickerChevron.module-
|
|
867
|
+
import styles21 from "./DateRangePickerChevron.module-XDPDMPIS.module.css";
|
|
868
|
+
import clsx16 from "clsx";
|
|
868
869
|
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
870
|
+
var SMALL_SIZE = 18;
|
|
869
871
|
var DateRangePickerChevron = ({
|
|
870
|
-
orientation
|
|
872
|
+
orientation,
|
|
873
|
+
size
|
|
871
874
|
}) => {
|
|
872
875
|
const rotation = orientation === "left" ? "rotate(90deg)" : orientation === "right" ? "rotate(-90deg)" : void 0;
|
|
876
|
+
const isSmallChevron = size === SMALL_SIZE;
|
|
873
877
|
return /* @__PURE__ */ jsx23(
|
|
874
878
|
"button",
|
|
875
879
|
{
|
|
876
|
-
className: styles21.chevron,
|
|
880
|
+
className: clsx16(styles21.chevron, isSmallChevron && styles21.small),
|
|
877
881
|
style: {
|
|
878
882
|
transform: rotation
|
|
879
883
|
},
|
|
@@ -907,6 +911,8 @@ var DateRangePicker = ({
|
|
|
907
911
|
}
|
|
908
912
|
onChange(range);
|
|
909
913
|
};
|
|
914
|
+
const now = /* @__PURE__ */ new Date();
|
|
915
|
+
const endMonth = new Date(now.getFullYear() + 2, now.getMonth());
|
|
910
916
|
return /* @__PURE__ */ jsx24(
|
|
911
917
|
DayPicker,
|
|
912
918
|
{
|
|
@@ -920,7 +926,10 @@ var DateRangePicker = ({
|
|
|
920
926
|
onSelect: handleChange,
|
|
921
927
|
selected: value,
|
|
922
928
|
timeZone: "UTC",
|
|
923
|
-
showOutsideDays: true
|
|
929
|
+
showOutsideDays: true,
|
|
930
|
+
captionLayout: "dropdown-years",
|
|
931
|
+
endMonth,
|
|
932
|
+
animate: true
|
|
924
933
|
}
|
|
925
934
|
);
|
|
926
935
|
};
|
|
@@ -1635,7 +1644,7 @@ import styles26 from "./KpiChart.module-2LUIN66C.module.css";
|
|
|
1635
1644
|
|
|
1636
1645
|
// src/components/charts/kpis/components/KpiChartChange.tsx
|
|
1637
1646
|
import styles25 from "./KpiChartChange.module-BAW7YCOW.module.css";
|
|
1638
|
-
import
|
|
1647
|
+
import clsx17 from "clsx";
|
|
1639
1648
|
import { IconTrendingDown, IconTrendingUp } from "@tabler/icons-react";
|
|
1640
1649
|
import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1641
1650
|
var getChangeClass = (isPositive, invertChangeColors) => {
|
|
@@ -1667,11 +1676,11 @@ var KpiChartChange = ({
|
|
|
1667
1676
|
const Icon = isPositive ? IconTrendingUp : IconTrendingDown;
|
|
1668
1677
|
const showNoPreviousData = showChangeAsPercentage && Number(comparisonValue) === 0;
|
|
1669
1678
|
return /* @__PURE__ */ jsxs15("div", { className: styles25.kpiChangeContainerSizeGuide, children: [
|
|
1670
|
-
/* @__PURE__ */ jsxs15("div", { className:
|
|
1679
|
+
/* @__PURE__ */ jsxs15("div", { className: clsx17(styles25.kpiChartChangeContainer, styles25.hidden), children: [
|
|
1671
1680
|
/* @__PURE__ */ jsxs15(
|
|
1672
1681
|
"span",
|
|
1673
1682
|
{
|
|
1674
|
-
className:
|
|
1683
|
+
className: clsx17(styles25.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors)),
|
|
1675
1684
|
children: [
|
|
1676
1685
|
/* @__PURE__ */ jsx28(Icon, {}),
|
|
1677
1686
|
/* @__PURE__ */ jsx28("span", { children: displayValue })
|
|
@@ -1684,7 +1693,7 @@ var KpiChartChange = ({
|
|
|
1684
1693
|
!equalComparison && /* @__PURE__ */ jsxs15(
|
|
1685
1694
|
"span",
|
|
1686
1695
|
{
|
|
1687
|
-
className:
|
|
1696
|
+
className: clsx17(
|
|
1688
1697
|
styles25.kpiChangeBadge,
|
|
1689
1698
|
getChangeClass(isPositive, invertChangeColors)
|
|
1690
1699
|
),
|
|
@@ -1958,7 +1967,7 @@ var PieChart = ({
|
|
|
1958
1967
|
// src/components/charts/tables/Table/TablePaginated.tsx
|
|
1959
1968
|
import * as React3 from "react";
|
|
1960
1969
|
import styles32 from "./tables.module-GNDYDW3Z.module.css";
|
|
1961
|
-
import
|
|
1970
|
+
import clsx20 from "clsx";
|
|
1962
1971
|
|
|
1963
1972
|
// src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx
|
|
1964
1973
|
import {
|
|
@@ -2056,7 +2065,7 @@ var TableHeaderAlign = {
|
|
|
2056
2065
|
|
|
2057
2066
|
// src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx
|
|
2058
2067
|
import tableStyles from "./tables.module-GNDYDW3Z.module.css";
|
|
2059
|
-
import
|
|
2068
|
+
import clsx18 from "clsx";
|
|
2060
2069
|
import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2061
2070
|
var getHeaderAriaSort = (sort, header) => {
|
|
2062
2071
|
return sort?.id === header.id ? sort.direction === "asc" ? "ascending" : "descending" : "none";
|
|
@@ -2098,7 +2107,7 @@ var TableHeader = ({
|
|
|
2098
2107
|
}
|
|
2099
2108
|
};
|
|
2100
2109
|
return /* @__PURE__ */ jsx34("thead", { className: styles30.tableHeader, children: /* @__PURE__ */ jsxs18("tr", { children: [
|
|
2101
|
-
showIndex && /* @__PURE__ */ jsx34("th", { className:
|
|
2110
|
+
showIndex && /* @__PURE__ */ jsx34("th", { className: clsx18(tableStyles.mutedCell, tableStyles.stickyFirstColumn), children: "#" }),
|
|
2102
2111
|
headers.map((header) => /* @__PURE__ */ jsx34(
|
|
2103
2112
|
"th",
|
|
2104
2113
|
{
|
|
@@ -2125,7 +2134,7 @@ var TableHeader = ({
|
|
|
2125
2134
|
|
|
2126
2135
|
// src/components/charts/tables/Table/components/TableBody/TableBody.tsx
|
|
2127
2136
|
import styles31 from "./TableBody.module-ARNVVKDL.module.css";
|
|
2128
|
-
import
|
|
2137
|
+
import clsx19 from "clsx";
|
|
2129
2138
|
import { IconCopy, IconCopyCheckFilled } from "@tabler/icons-react";
|
|
2130
2139
|
import { useState as useState6 } from "react";
|
|
2131
2140
|
import tableStyles2 from "./tables.module-GNDYDW3Z.module.css";
|
|
@@ -2142,9 +2151,9 @@ var TableBody = ({
|
|
|
2142
2151
|
"tr",
|
|
2143
2152
|
{
|
|
2144
2153
|
onClick: () => onRowIndexClick?.(rowIndex),
|
|
2145
|
-
className:
|
|
2154
|
+
className: clsx19(rowIndex === rows.length - 1 && tableStyles2.tableLastRow),
|
|
2146
2155
|
children: [
|
|
2147
|
-
showIndex && /* @__PURE__ */ jsx35("td", { className:
|
|
2156
|
+
showIndex && /* @__PURE__ */ jsx35("td", { className: clsx19(tableStyles2.mutedCell, tableStyles2.stickyFirstColumn), children: pageSize * page + rowIndex + 1 }),
|
|
2148
2157
|
headers.map((header, cellIndex) => /* @__PURE__ */ jsx35(
|
|
2149
2158
|
TableBodyCell,
|
|
2150
2159
|
{
|
|
@@ -2188,7 +2197,7 @@ var TableBodyCell = ({ header, row, rowIndex, cellIndex }) => {
|
|
|
2188
2197
|
title: `Copy: ${String(value)}`,
|
|
2189
2198
|
onMouseDown: handleCopy,
|
|
2190
2199
|
icon: isPressedCopy ? IconCopyCheckFilled : IconCopy,
|
|
2191
|
-
className:
|
|
2200
|
+
className: clsx19(
|
|
2192
2201
|
styles31.copyButton,
|
|
2193
2202
|
header.align === TableHeaderAlign.RIGHT && styles31.leftAlign
|
|
2194
2203
|
),
|
|
@@ -2221,7 +2230,7 @@ var TablePaginated = React3.forwardRef(
|
|
|
2221
2230
|
onPageChange,
|
|
2222
2231
|
onSortChange
|
|
2223
2232
|
} = props;
|
|
2224
|
-
return /* @__PURE__ */ jsxs20("div", { ref, className:
|
|
2233
|
+
return /* @__PURE__ */ jsxs20("div", { ref, className: clsx20(styles32.tableContainer, className), children: [
|
|
2225
2234
|
/* @__PURE__ */ jsx36("div", { className: styles32.tableContainerScroll, children: /* @__PURE__ */ jsxs20("table", { className: styles32.table, children: [
|
|
2226
2235
|
/* @__PURE__ */ jsx36(
|
|
2227
2236
|
TableHeader,
|
|
@@ -2262,7 +2271,7 @@ TablePaginated.displayName = "TablePaginated";
|
|
|
2262
2271
|
// src/components/charts/tables/PivotTable/PivotTable.tsx
|
|
2263
2272
|
import { useEffect as useEffect6, useMemo as useMemo3, useState as useState7 } from "react";
|
|
2264
2273
|
import tableStyles3 from "./tables.module-GNDYDW3Z.module.css";
|
|
2265
|
-
import
|
|
2274
|
+
import clsx21 from "clsx";
|
|
2266
2275
|
|
|
2267
2276
|
// src/components/charts/tables/tables.utils.ts
|
|
2268
2277
|
var getTableCellWidthStyle = (width) => {
|
|
@@ -2393,10 +2402,10 @@ var PivotTable = ({
|
|
|
2393
2402
|
};
|
|
2394
2403
|
}, [progressive, batchSize, batchDelayMs, rowValues.length, data]);
|
|
2395
2404
|
const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;
|
|
2396
|
-
return /* @__PURE__ */ jsx37("div", { className:
|
|
2405
|
+
return /* @__PURE__ */ jsx37("div", { className: clsx21(tableStyles3.tableFullContainer, className), children: /* @__PURE__ */ jsx37(
|
|
2397
2406
|
"div",
|
|
2398
2407
|
{
|
|
2399
|
-
className:
|
|
2408
|
+
className: clsx21(
|
|
2400
2409
|
tableStyles3.tableAdjustedContainer,
|
|
2401
2410
|
(!columnWidth || !firstColumnWidth) && tableStyles3.fullWidth
|
|
2402
2411
|
),
|
|
@@ -2538,7 +2547,7 @@ var PivotTable = ({
|
|
|
2538
2547
|
"th",
|
|
2539
2548
|
{
|
|
2540
2549
|
scope: "row",
|
|
2541
|
-
className:
|
|
2550
|
+
className: clsx21(tableStyles3.stickyFirstColumn, tableStyles3.boltCell),
|
|
2542
2551
|
title: totalLabel,
|
|
2543
2552
|
children: totalLabel
|
|
2544
2553
|
}
|
|
@@ -2590,7 +2599,7 @@ var PivotTable = ({
|
|
|
2590
2599
|
// src/components/charts/tables/HeatMap/HeatMap.tsx
|
|
2591
2600
|
import { useMemo as useMemo4, useCallback } from "react";
|
|
2592
2601
|
import tableStyles4 from "./tables.module-GNDYDW3Z.module.css";
|
|
2593
|
-
import
|
|
2602
|
+
import clsx22 from "clsx";
|
|
2594
2603
|
|
|
2595
2604
|
// src/components/charts/tables/HeatMap/HeatMap.utils.ts
|
|
2596
2605
|
var clamp01 = (x) => x < 0 ? 0 : x > 1 ? 1 : x;
|
|
@@ -2812,10 +2821,10 @@ var HeatMap = ({
|
|
|
2812
2821
|
},
|
|
2813
2822
|
[domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor]
|
|
2814
2823
|
);
|
|
2815
|
-
return /* @__PURE__ */ jsx38("div", { className:
|
|
2824
|
+
return /* @__PURE__ */ jsx38("div", { className: clsx22(tableStyles4.tableFullContainer, className), children: /* @__PURE__ */ jsx38(
|
|
2816
2825
|
"div",
|
|
2817
2826
|
{
|
|
2818
|
-
className:
|
|
2827
|
+
className: clsx22(
|
|
2819
2828
|
tableStyles4.tableAdjustedContainer,
|
|
2820
2829
|
(!columnWidth || !firstColumnWidth) && tableStyles4.fullWidth
|
|
2821
2830
|
),
|
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/editors/dates/DateRangePicker/DateRangePicker.tsx","../src/components/editors/dates/DateRangePicker/DateRangePickerChevron.tsx","../src/utils/date.utils.ts","../src/components/editors/dates/DateRangePickerField/DateRangePickerField.tsx","../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/shared/ConditionalWrapper/ConditionalWrapper.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/hooks/useResizeObserver.hook.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/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/utils/object.utils.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 { IconProps } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: React.ComponentType<IconProps>;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport 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 { IconProps } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import * 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 { IconProps } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import 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 { IconProps, IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: React.ComponentType<IconProps>;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconProps, IconX } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: React.ComponentType<IconProps>;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n fitContent?: boolean;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n fitContent = false,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div\n ref={containerRef}\n tabIndex={-1}\n className={clsx(styles.selectFieldContent, fitContent && styles.fitContent, className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import {\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 { IconProps, IconX } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","// 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 { IconProps, IconSearch } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: React.ComponentType<IconProps>;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { 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 React, { useState } from 'react';\nimport { DateRange, DayPicker } from 'react-day-picker';\nimport './DateRangePicker.css';\nimport { DateRangePickerChevron } from './DateRangePickerChevron';\nimport { endOfDayUTC } from '../../../../utils/date.utils';\nimport * as rdpLocales from 'react-day-picker/locale';\n\nexport type DateRangePickerProps = {\n numberOfMonths?: number;\n locale?: string;\n value?: DateRange;\n onChange: (dateRange: DateRange | undefined) => void;\n};\n\nexport const DateRangePicker: React.FC<DateRangePickerProps> = ({\n value,\n numberOfMonths = 1,\n locale = 'en',\n onChange,\n}) => {\n const [month, setMonth] = useState<Date>(value?.from ?? new Date());\n\n const handleChange = (range: DateRange | undefined) => {\n if (range?.to) {\n range.to = endOfDayUTC(range.to);\n }\n onChange(range);\n };\n\n return (\n <DayPicker\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={numberOfMonths}\n components={{ Chevron: DateRangePickerChevron }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n locale={(rdpLocales as Record<string, any>)[locale]}\n mode=\"range\"\n navLayout=\"around\"\n onSelect={handleChange}\n selected={value}\n timeZone=\"UTC\"\n showOutsideDays\n />\n );\n};\n","import { IconCaretDownFilled } from '@tabler/icons-react';\nimport styles from './DateRangePickerChevron.module.css';\n\ntype DateRangePickerChevronProps = {\n className?: string;\n orientation?: 'up' | 'down' | 'left' | 'right';\n};\n\nexport const DateRangePickerChevron = ({\n orientation,\n}: DateRangePickerChevronProps): React.JSX.Element => {\n const rotation =\n orientation === 'left'\n ? 'rotate(90deg)'\n : orientation === 'right'\n ? 'rotate(-90deg)'\n : undefined;\n\n return (\n <button\n className={styles.chevron}\n style={{\n transform: rotation,\n }}\n >\n <IconCaretDownFilled />\n </button>\n );\n};\n","import { DateRange } from 'react-day-picker';\n\nexport const isSameDate = (a?: Date, b?: Date) => a?.getTime() === b?.getTime();\n\nexport const isSameDateRange = (a?: DateRange, b?: DateRange) =>\n isSameDate(a?.from, b?.from) && isSameDate(a?.to, b?.to);\n\nexport const endOfDayUTC = (date: Date) => {\n const d = new Date(date);\n d.setUTCHours(23, 59, 59, 999);\n return d;\n};\n","import { FC, useState } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../../selects/shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { IconProps } from '@tabler/icons-react';\nimport { SelectFieldContent } from '../../selects/shared/SelectFieldContent/SelectFieldContent';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { DateRangePicker, DateRangePickerProps } from '../DateRangePicker/DateRangePicker';\nimport { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './DateRangePickerField.module.css';\nimport { isSameDateRange } from '../../../../utils/date.utils';\n\ntype DateRangePickerFieldProps = {\n displayValue?: string;\n startIcon?: React.ComponentType<IconProps>;\n placeholder?: string;\n disabled?: boolean;\n error?: boolean;\n errorMessage?: string;\n clearable?: boolean;\n onChange: (dateRange: DateRange | undefined) => void;\n submitLabel?: string;\n} & FieldHeaderProps &\n DateRangePickerProps;\n\nconst getDateRangePickerLabel = (\n dateRange: DateRange | undefined,\n displayValue?: string,\n): string | undefined => {\n if (!dateRange) return undefined;\n\n if (displayValue || displayValue === '') return displayValue;\n\n const { from, to } = dateRange;\n\n if (!from || !to) return undefined;\n\n return `${from ? from.toLocaleDateString() : ''} - ${to ? to.toLocaleDateString() : ''}`;\n};\n\nexport const DateRangePickerField: FC<DateRangePickerFieldProps> = ({\n locale,\n displayValue,\n value,\n startIcon,\n label,\n disabled,\n placeholder,\n required,\n error,\n errorMessage,\n clearable,\n numberOfMonths = 1,\n submitLabel = 'Apply',\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [currentDateRange, setCurrentDateRange] = useState<DateRange | undefined>(value);\n\n const valueLabel = getDateRangePickerLabel(value, displayValue);\n const hasError = error || !!errorMessage;\n\n const handleChange = () => {\n onChange(currentDateRange);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setCurrentDateRange(undefined);\n onChange(undefined);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setIsOpen(true);\n return;\n }\n setCurrentDateRange(value);\n setIsOpen(false);\n };\n\n const isSubmitDisabled = isSameDateRange(currentDateRange, value);\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={valueLabel}\n onClear={handleClear}\n isClearable={clearable}\n error={hasError}\n />\n }\n >\n <SelectFieldContent fitContent>\n <DateRangePicker\n locale={locale}\n numberOfMonths={numberOfMonths}\n value={currentDateRange}\n onChange={setCurrentDateRange}\n />\n <Button\n size=\"small\"\n className={styles.submitButton}\n onClick={handleChange}\n disabled={isSubmitDisabled}\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { 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 if (ctx.chart.data.datasets.length === 0) {\n return undefined;\n }\n\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartContrastColors = getChartContrastColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\nimport { AutoTextSize } from 'auto-text-size';\nimport ConditionalWrapper from '../../shared/ConditionalWrapper/ConditionalWrapper';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n trendFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n noPreviousDataLabel = 'No previous data',\n valueFormatter,\n}) => {\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n const autoResizeValueFontSize = !valueFontSize;\n return (\n <div className={styles.kpiChartContainer}>\n <div className={styles.kpiChartValueContainer}>\n <ConditionalWrapper\n condition={autoResizeValueFontSize}\n wrapper={(children) => (\n <AutoTextSize mode=\"boxoneline\" minFontSizePx={1} maxFontSizePx={999}>\n {children}\n </AutoTextSize>\n )}\n >\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize,\n }}\n >\n {displayValue}\n </h2>\n </ConditionalWrapper>\n </div>\n\n <div className={styles.kpiComparisonContainer} style={{ fontSize: trendFontSize }}>\n <div style={{ visibility: hasComparisonValue ? 'visible' : 'hidden' }}>\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n noPreviousDataLabel={noPreviousDataLabel}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n noPreviousDataLabel,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n const showNoPreviousData = showChangeAsPercentage && Number(comparisonValue) === 0;\n\n return (\n <div className={styles.kpiChangeContainerSizeGuide}>\n {/* This is responsible to setting the size of the container */}\n <div className={clsx(styles.kpiChartChangeContainer, styles.hidden)}>\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n <span className={styles.kpiComparisonLabel}>{comparisonLabel}</span>\n </div>\n {/* This is responsible for displaying the content on the available size of the container */}\n <div className={styles.kpiAbsoluteContainer}>\n <div className={styles.kpiChartChangeContainer}>\n {showNoPreviousData ? (\n <span className={styles.kpiComparisonLabel}>{noPreviousDataLabel}</span>\n ) : (\n <>\n {!equalComparison && (\n <span\n className={clsx(\n styles.kpiChangeBadge,\n getChangeClass(isPositive, invertChangeColors),\n )}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n","type ConditionalWrapperProps = {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n};\n\nconst ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : <>{children}</>;\n\nexport default ConditionalWrapper;\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport { useResizeObserver } from '../../../../hooks/useResizeObserver.hook';\n\nconst MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const containerRef = useRef(null);\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n const { height, width } = useResizeObserver(containerRef, 0);\n\n const hideChart =\n height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;\n\n return (\n <div className={styles.chartContainer} ref={containerRef}>\n {hideChart ? null : (\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n )}\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(\n elRef: React.RefObject<T | null>,\n timeout = 100,\n): Size => {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateSize = (rect: DOMRectReadOnly | DOMRect) => {\n setSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n });\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n updateSize(entry.contentRect);\n }, timeout);\n });\n\n ro.observe(el);\n\n // initial size\n updateSize(el.getBoundingClientRect());\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef, timeout]);\n\n return size;\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import * 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","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const shallowEqual = (object1: any, object2: any): boolean => {\n const keys1 = Object.keys(object1 ?? {});\n const keys2 = Object.keys(object2 ?? {});\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (object1[key]?.toString() !== object2[key]?.toString()) {\n return false;\n }\n }\n\n return true;\n};\n","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":"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","names":["styles","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","useState","IconCaretDownFilled","styles","jsx","jsx","useState","useState","styles","jsx","jsxs","useState","styles","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","styles","styles","clsx","Fragment","jsx","jsxs","Fragment","jsx","jsx","jsxs","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"]}
|
|
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/editors/dates/DateRangePicker/DateRangePicker.tsx","../src/components/editors/dates/DateRangePicker/DateRangePickerChevron.tsx","../src/utils/date.utils.ts","../src/components/editors/dates/DateRangePickerField/DateRangePickerField.tsx","../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/shared/ConditionalWrapper/ConditionalWrapper.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/hooks/useResizeObserver.hook.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/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/utils/object.utils.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 { IconProps } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: React.ComponentType<IconProps>;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport 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 { IconProps } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import * 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 { IconProps } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import 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 { IconProps, IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: React.ComponentType<IconProps>;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconProps, IconX } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: React.ComponentType<IconProps>;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n fitContent?: boolean;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n fitContent = false,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div\n ref={containerRef}\n tabIndex={-1}\n className={clsx(styles.selectFieldContent, fitContent && styles.fitContent, className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import {\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 { IconProps, IconX } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","// 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 { IconProps, IconSearch } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: React.ComponentType<IconProps>;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { 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 React, { useState } from 'react';\nimport { DateRange, DayPicker } from 'react-day-picker';\nimport './DateRangePicker.css';\nimport { DateRangePickerChevron } from './DateRangePickerChevron';\nimport { endOfDayUTC } from '../../../../utils/date.utils';\nimport * as rdpLocales from 'react-day-picker/locale';\n\nexport type DateRangePickerProps = {\n numberOfMonths?: number;\n locale?: string;\n value?: DateRange;\n onChange: (dateRange: DateRange | undefined) => void;\n};\n\nexport const DateRangePicker: React.FC<DateRangePickerProps> = ({\n value,\n numberOfMonths = 1,\n locale = 'en',\n onChange,\n}) => {\n const [month, setMonth] = useState<Date>(value?.from ?? new Date());\n\n const handleChange = (range: DateRange | undefined) => {\n if (range?.to) {\n range.to = endOfDayUTC(range.to);\n }\n onChange(range);\n };\n\n const now = new Date();\n const endMonth = new Date(now.getFullYear() + 2, now.getMonth());\n\n return (\n <DayPicker\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={numberOfMonths}\n components={{ Chevron: DateRangePickerChevron }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n locale={(rdpLocales as Record<string, any>)[locale]}\n mode=\"range\"\n navLayout=\"around\"\n onSelect={handleChange}\n selected={value}\n timeZone=\"UTC\"\n showOutsideDays\n captionLayout=\"dropdown-years\"\n endMonth={endMonth}\n animate\n />\n );\n};\n","import { IconCaretDownFilled } from '@tabler/icons-react';\nimport styles from './DateRangePickerChevron.module.css';\nimport clsx from 'clsx';\n\ntype DateRangePickerChevronProps = {\n className?: string;\n orientation?: 'up' | 'down' | 'left' | 'right';\n size?: number;\n};\n\nconst SMALL_SIZE = 18;\n\nexport const DateRangePickerChevron = ({\n orientation,\n size,\n}: DateRangePickerChevronProps): React.JSX.Element => {\n const rotation =\n orientation === 'left'\n ? 'rotate(90deg)'\n : orientation === 'right'\n ? 'rotate(-90deg)'\n : undefined;\n\n const isSmallChevron = size === SMALL_SIZE;\n\n return (\n <button\n className={clsx(styles.chevron, isSmallChevron && styles.small)}\n style={{\n transform: rotation,\n }}\n >\n <IconCaretDownFilled />\n </button>\n );\n};\n","import { DateRange } from 'react-day-picker';\n\nexport const isSameDate = (a?: Date, b?: Date) => a?.getTime() === b?.getTime();\n\nexport const isSameDateRange = (a?: DateRange, b?: DateRange) =>\n isSameDate(a?.from, b?.from) && isSameDate(a?.to, b?.to);\n\nexport const endOfDayUTC = (date: Date) => {\n const d = new Date(date);\n d.setUTCHours(23, 59, 59, 999);\n return d;\n};\n","import { FC, useState } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../../selects/shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { IconProps } from '@tabler/icons-react';\nimport { SelectFieldContent } from '../../selects/shared/SelectFieldContent/SelectFieldContent';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { DateRangePicker, DateRangePickerProps } from '../DateRangePicker/DateRangePicker';\nimport { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './DateRangePickerField.module.css';\nimport { isSameDateRange } from '../../../../utils/date.utils';\n\ntype DateRangePickerFieldProps = {\n displayValue?: string;\n startIcon?: React.ComponentType<IconProps>;\n placeholder?: string;\n disabled?: boolean;\n error?: boolean;\n errorMessage?: string;\n clearable?: boolean;\n onChange: (dateRange: DateRange | undefined) => void;\n submitLabel?: string;\n} & FieldHeaderProps &\n DateRangePickerProps;\n\nconst getDateRangePickerLabel = (\n dateRange: DateRange | undefined,\n displayValue?: string,\n): string | undefined => {\n if (!dateRange) return undefined;\n\n if (displayValue || displayValue === '') return displayValue;\n\n const { from, to } = dateRange;\n\n if (!from || !to) return undefined;\n\n return `${from ? from.toLocaleDateString() : ''} - ${to ? to.toLocaleDateString() : ''}`;\n};\n\nexport const DateRangePickerField: FC<DateRangePickerFieldProps> = ({\n locale,\n displayValue,\n value,\n startIcon,\n label,\n disabled,\n placeholder,\n required,\n error,\n errorMessage,\n clearable,\n numberOfMonths = 1,\n submitLabel = 'Apply',\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [currentDateRange, setCurrentDateRange] = useState<DateRange | undefined>(value);\n\n const valueLabel = getDateRangePickerLabel(value, displayValue);\n const hasError = error || !!errorMessage;\n\n const handleChange = () => {\n onChange(currentDateRange);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setCurrentDateRange(undefined);\n onChange(undefined);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setIsOpen(true);\n return;\n }\n setCurrentDateRange(value);\n setIsOpen(false);\n };\n\n const isSubmitDisabled = isSameDateRange(currentDateRange, value);\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={valueLabel}\n onClear={handleClear}\n isClearable={clearable}\n error={hasError}\n />\n }\n >\n <SelectFieldContent fitContent>\n <DateRangePicker\n locale={locale}\n numberOfMonths={numberOfMonths}\n value={currentDateRange}\n onChange={setCurrentDateRange}\n />\n <Button\n size=\"small\"\n className={styles.submitButton}\n onClick={handleChange}\n disabled={isSubmitDisabled}\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { 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 if (ctx.chart.data.datasets.length === 0) {\n return undefined;\n }\n\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartContrastColors = getChartContrastColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\nimport { AutoTextSize } from 'auto-text-size';\nimport ConditionalWrapper from '../../shared/ConditionalWrapper/ConditionalWrapper';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n trendFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n noPreviousDataLabel = 'No previous data',\n valueFormatter,\n}) => {\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n const autoResizeValueFontSize = !valueFontSize;\n return (\n <div className={styles.kpiChartContainer}>\n <div className={styles.kpiChartValueContainer}>\n <ConditionalWrapper\n condition={autoResizeValueFontSize}\n wrapper={(children) => (\n <AutoTextSize mode=\"boxoneline\" minFontSizePx={1} maxFontSizePx={999}>\n {children}\n </AutoTextSize>\n )}\n >\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize,\n }}\n >\n {displayValue}\n </h2>\n </ConditionalWrapper>\n </div>\n\n <div className={styles.kpiComparisonContainer} style={{ fontSize: trendFontSize }}>\n <div style={{ visibility: hasComparisonValue ? 'visible' : 'hidden' }}>\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n noPreviousDataLabel={noPreviousDataLabel}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n noPreviousDataLabel,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n const showNoPreviousData = showChangeAsPercentage && Number(comparisonValue) === 0;\n\n return (\n <div className={styles.kpiChangeContainerSizeGuide}>\n {/* This is responsible to setting the size of the container */}\n <div className={clsx(styles.kpiChartChangeContainer, styles.hidden)}>\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n <span className={styles.kpiComparisonLabel}>{comparisonLabel}</span>\n </div>\n {/* This is responsible for displaying the content on the available size of the container */}\n <div className={styles.kpiAbsoluteContainer}>\n <div className={styles.kpiChartChangeContainer}>\n {showNoPreviousData ? (\n <span className={styles.kpiComparisonLabel}>{noPreviousDataLabel}</span>\n ) : (\n <>\n {!equalComparison && (\n <span\n className={clsx(\n styles.kpiChangeBadge,\n getChangeClass(isPositive, invertChangeColors),\n )}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n","type ConditionalWrapperProps = {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n};\n\nconst ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : <>{children}</>;\n\nexport default ConditionalWrapper;\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport { useResizeObserver } from '../../../../hooks/useResizeObserver.hook';\n\nconst MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const containerRef = useRef(null);\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n const { height, width } = useResizeObserver(containerRef, 0);\n\n const hideChart =\n height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;\n\n return (\n <div className={styles.chartContainer} ref={containerRef}>\n {hideChart ? null : (\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n )}\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(\n elRef: React.RefObject<T | null>,\n timeout = 100,\n): Size => {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateSize = (rect: DOMRectReadOnly | DOMRect) => {\n setSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n });\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n updateSize(entry.contentRect);\n }, timeout);\n });\n\n ro.observe(el);\n\n // initial size\n updateSize(el.getBoundingClientRect());\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef, timeout]);\n\n return size;\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import * 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","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const shallowEqual = (object1: any, object2: any): boolean => {\n const keys1 = Object.keys(object1 ?? {});\n const keys2 = Object.keys(object2 ?? {});\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (object1[key]?.toString() !== object2[key]?.toString()) {\n return false;\n }\n }\n\n return true;\n};\n","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":"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","names":["styles","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","useState","IconCaretDownFilled","styles","clsx","jsx","jsx","useState","useState","styles","jsx","jsxs","useState","styles","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","styles","styles","clsx","Fragment","jsx","jsxs","Fragment","jsx","jsx","jsxs","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"]}
|