@embeddable.com/remarkable-ui 2.0.10 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -467,6 +467,10 @@ declare const getStyleNumber: (variableName: StylesKeys, fallbackValue?: string)
467
467
 
468
468
  declare function useDebounce<T extends (...args: any[]) => void>(fn: T, delay?: number): (...args: Parameters<T>) => void;
469
469
 
470
- declare const useObserverHeight: (elRef: React.RefObject<HTMLDivElement | null>) => number;
470
+ type Size = {
471
+ width: number;
472
+ height: number;
473
+ };
474
+ declare const useResizeObserver: <T extends HTMLElement>(elRef: React.RefObject<T | null>, timeout?: number) => Size;
471
475
 
472
- export { ActionIcon, BarChart, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DonutChart, Dropdown, FieldFeedback, FieldHeader, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, MultiSelectField, NumberField, Overlay, PieChart, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, SingleSelectField, Skeleton, Switch, TableHeaderAlign, type TableHeaderCell, type TableHeaderItem, type TableHeaderItemAlign, TablePaginated, type TablePaginatedProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, getBarChartData, getBarChartOptions, getChartColors, getChartContrastColors, getChartjsAxisOptions, getChartjsAxisOptionsPlugins, getChartjsAxisOptionsScales, getChartjsAxisOptionsScalesGrid, getChartjsAxisOptionsScalesGridColor, getChartjsAxisOptionsScalesTicksDefault, getChartjsAxisOptionsScalesTicksMuted, getChartjsAxisOptionsScalesTitle, getDonutChartOptions, getLineChartData, getLineChartOptions, getPieChartData, getPieChartOptions, getStyle, getStyleNumber, getTableTotalPages, useDebounce, useObserverHeight, useTableGetRowsPerPage };
476
+ export { ActionIcon, BarChart, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DonutChart, Dropdown, FieldFeedback, FieldHeader, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, MultiSelectField, NumberField, Overlay, PieChart, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, SingleSelectField, Skeleton, Switch, TableHeaderAlign, type TableHeaderCell, type TableHeaderItem, type TableHeaderItemAlign, TablePaginated, type TablePaginatedProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, getBarChartData, getBarChartOptions, getChartColors, getChartContrastColors, getChartjsAxisOptions, getChartjsAxisOptionsPlugins, getChartjsAxisOptionsScales, getChartjsAxisOptionsScalesGrid, getChartjsAxisOptionsScalesGridColor, getChartjsAxisOptionsScalesTicksDefault, getChartjsAxisOptionsScalesTicksMuted, getChartjsAxisOptionsScalesTitle, getDonutChartOptions, getLineChartData, getLineChartOptions, getPieChartData, getPieChartOptions, getStyle, getStyleNumber, getTableTotalPages, useDebounce, useResizeObserver, useTableGetRowsPerPage };
package/dist/index.js CHANGED
@@ -1561,7 +1561,7 @@ var KpiChart = ({
1561
1561
  };
1562
1562
 
1563
1563
  // src/components/charts/pies/DonutChart/DonutChart.tsx
1564
- import { useRef as useRef7 } from "react";
1564
+ import { useRef as useRef8 } from "react";
1565
1565
  import { Pie } from "react-chartjs-2";
1566
1566
  import { ArcElement, Chart as ChartJS3, Legend as Legend3, Tooltip as Tooltip3 } from "chart.js";
1567
1567
  import ChartDataLabels3 from "chartjs-plugin-datalabels";
@@ -1641,7 +1641,44 @@ var getDonutChartOptions = (options) => {
1641
1641
  // src/components/charts/pies/DonutChart/DonutChart.tsx
1642
1642
  import { mergician as mergician7 } from "mergician";
1643
1643
  import styles24 from "./charts.module-YNKCWRLU.module.css";
1644
+
1645
+ // src/hooks/useResizeObserver.hook.ts
1646
+ import { useLayoutEffect, useRef as useRef7, useState as useState4 } from "react";
1647
+ var useResizeObserver = (elRef, timeout = 100) => {
1648
+ const [size, setSize] = useState4({ width: 0, height: 0 });
1649
+ const timeoutRef = useRef7(void 0);
1650
+ useLayoutEffect(() => {
1651
+ const el = elRef.current;
1652
+ if (!el) return;
1653
+ const updateSize = (rect) => {
1654
+ setSize({
1655
+ width: Math.max(0, rect.width),
1656
+ height: Math.max(0, rect.height)
1657
+ });
1658
+ };
1659
+ const ro = new ResizeObserver((entries) => {
1660
+ const entry = entries[0];
1661
+ if (!entry) return;
1662
+ if (timeoutRef.current) {
1663
+ clearTimeout(timeoutRef.current);
1664
+ }
1665
+ timeoutRef.current = window.setTimeout(() => {
1666
+ updateSize(entry.contentRect);
1667
+ }, timeout);
1668
+ });
1669
+ ro.observe(el);
1670
+ updateSize(el.getBoundingClientRect());
1671
+ return () => {
1672
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
1673
+ ro.disconnect();
1674
+ };
1675
+ }, [elRef, timeout]);
1676
+ return size;
1677
+ };
1678
+
1679
+ // src/components/charts/pies/DonutChart/DonutChart.tsx
1644
1680
  import { jsx as jsx27 } from "react/jsx-runtime";
1681
+ var MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;
1645
1682
  ChartJS3.register(ArcElement, Tooltip3, Legend3, ChartDataLabels3, AnnotationPlugin2);
1646
1683
  var DonutChart = ({
1647
1684
  label,
@@ -1653,7 +1690,8 @@ var DonutChart = ({
1653
1690
  showTooltips = true,
1654
1691
  showValueLabels = true
1655
1692
  }) => {
1656
- const chartRef = useRef7(null);
1693
+ const containerRef = useRef8(null);
1694
+ const chartRef = useRef8(null);
1657
1695
  const donutLabelOptions = mergician7(
1658
1696
  getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),
1659
1697
  options
@@ -1662,7 +1700,9 @@ var DonutChart = ({
1662
1700
  const indexClicked = getSegmentIndexClicked(event, chartRef);
1663
1701
  onSegmentClick?.(indexClicked);
1664
1702
  };
1665
- return /* @__PURE__ */ jsx27("div", { className: styles24.chartContainer, children: /* @__PURE__ */ jsx27(
1703
+ const { height, width } = useResizeObserver(containerRef, 0);
1704
+ const hideChart = height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;
1705
+ return /* @__PURE__ */ jsx27("div", { className: styles24.chartContainer, ref: containerRef, children: hideChart ? null : /* @__PURE__ */ jsx27(
1666
1706
  Pie,
1667
1707
  {
1668
1708
  ref: chartRef,
@@ -1674,7 +1714,7 @@ var DonutChart = ({
1674
1714
  };
1675
1715
 
1676
1716
  // src/components/charts/pies/PieChart/PieChart.tsx
1677
- import { useRef as useRef8 } from "react";
1717
+ import { useRef as useRef9 } from "react";
1678
1718
  import { Pie as Pie2 } from "react-chartjs-2";
1679
1719
  import { ArcElement as ArcElement2, Chart as ChartJS4, Legend as Legend4, Tooltip as Tooltip4 } from "chart.js";
1680
1720
  import ChartDataLabels4 from "chartjs-plugin-datalabels";
@@ -1691,7 +1731,7 @@ var PieChart = ({
1691
1731
  showTooltips = true,
1692
1732
  showValueLabels = true
1693
1733
  }) => {
1694
- const chartRef = useRef8(null);
1734
+ const chartRef = useRef9(null);
1695
1735
  const pieOptions = mergician8(
1696
1736
  getPieChartOptions({
1697
1737
  showLegend,
@@ -1887,7 +1927,7 @@ var TableHeader = ({
1887
1927
  import styles28 from "./TableBody.module-ARNVVKDL.module.css";
1888
1928
  import clsx18 from "clsx";
1889
1929
  import { IconCopy, IconCopyCheckFilled } from "@tabler/icons-react";
1890
- import { useState as useState4 } from "react";
1930
+ import { useState as useState5 } from "react";
1891
1931
  import tableStyles2 from "./tables.module-GNDYDW3Z.module.css";
1892
1932
  import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
1893
1933
  var TableBody = ({
@@ -1921,7 +1961,7 @@ var TableBody = ({
1921
1961
  )) });
1922
1962
  };
1923
1963
  var TableBodyCell = ({ header, row, rowIndex, cellIndex }) => {
1924
- const [isPressedCopy, setIsPressedCopy] = useState4(false);
1964
+ const [isPressedCopy, setIsPressedCopy] = useState5(false);
1925
1965
  const value = header.accessor !== void 0 ? header.accessor(row) : header.id !== void 0 ? (
1926
1966
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1927
1967
  row[header.id]
@@ -2020,7 +2060,7 @@ var TablePaginated = React2.forwardRef(
2020
2060
  TablePaginated.displayName = "TablePaginated";
2021
2061
 
2022
2062
  // src/components/charts/tables/PivotTable/PivotTable.tsx
2023
- import { useEffect as useEffect7, useMemo as useMemo3, useState as useState5 } from "react";
2063
+ import { useEffect as useEffect7, useMemo as useMemo3, useState as useState6 } from "react";
2024
2064
  import tableStyles3 from "./tables.module-GNDYDW3Z.module.css";
2025
2065
  import clsx20 from "clsx";
2026
2066
 
@@ -2126,7 +2166,7 @@ var PivotTable = ({
2126
2166
  }
2127
2167
  return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };
2128
2168
  }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);
2129
- const [visibleCount, setVisibleCount] = useState5(
2169
+ const [visibleCount, setVisibleCount] = useState6(
2130
2170
  () => progressive ? Math.min(batchSize, rowValues.length) : rowValues.length
2131
2171
  );
2132
2172
  useEffect7(() => {
@@ -2642,10 +2682,10 @@ var useTableGetRowsPerPage = ({
2642
2682
  }, [availableHeight, headerHeight, rowHeight, footerHeight]);
2643
2683
 
2644
2684
  // src/hooks/useDebounce.hook.ts
2645
- import { useRef as useRef9, useEffect as useEffect8, useCallback as useCallback2 } from "react";
2685
+ import { useRef as useRef10, useEffect as useEffect8, useCallback as useCallback2 } from "react";
2646
2686
  function useDebounce(fn, delay = 300) {
2647
- const timerRef = useRef9(null);
2648
- const fnRef = useRef9(fn);
2687
+ const timerRef = useRef10(null);
2688
+ const fnRef = useRef10(fn);
2649
2689
  useEffect8(() => {
2650
2690
  fnRef.current = fn;
2651
2691
  }, [fn]);
@@ -2667,37 +2707,6 @@ function useDebounce(fn, delay = 300) {
2667
2707
  }, []);
2668
2708
  return debouncedFn;
2669
2709
  }
2670
-
2671
- // src/hooks/useObserverHeight.hook.ts
2672
- import { useLayoutEffect, useRef as useRef10, useState as useState6 } from "react";
2673
- var useObserverHeight = (elRef) => {
2674
- const [height, setHeight] = useState6(0);
2675
- const timeoutRef = useRef10(void 0);
2676
- useLayoutEffect(() => {
2677
- const el = elRef.current;
2678
- if (!el) return;
2679
- const updateHeight = (newHeight) => {
2680
- setHeight(Math.max(0, newHeight));
2681
- };
2682
- const ro = new ResizeObserver((entries) => {
2683
- const entry = entries[0];
2684
- if (!entry) return;
2685
- if (timeoutRef.current) {
2686
- clearTimeout(timeoutRef.current);
2687
- }
2688
- timeoutRef.current = window.setTimeout(() => {
2689
- updateHeight(entry.contentRect.height);
2690
- }, 100);
2691
- });
2692
- ro.observe(el);
2693
- updateHeight(el.getBoundingClientRect().height || 0);
2694
- return () => {
2695
- if (timeoutRef.current) clearTimeout(timeoutRef.current);
2696
- ro.disconnect();
2697
- };
2698
- }, [elRef]);
2699
- return height;
2700
- };
2701
2710
  export {
2702
2711
  ActionIcon,
2703
2712
  BarChart,
@@ -2755,7 +2764,7 @@ export {
2755
2764
  getStyleNumber,
2756
2765
  getTableTotalPages,
2757
2766
  useDebounce,
2758
- useObserverHeight,
2767
+ useResizeObserver,
2759
2768
  useTableGetRowsPerPage
2760
2769
  };
2761
2770
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/Typography/Typography.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.ts","../src/components/editors/selects/shared/useSelectSearchFocus.hook.ts","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.tsx","../src/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/utils/debounce.utils.ts","../src/components/editors/Switch/Switch.tsx","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/Table/TablePaginated.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/Table/Table.hooks.ts","../src/hooks/useDebounce.hook.ts","../src/hooks/useObserverHeight.hook.ts"],"sourcesContent":["import styles from './Skeleton.module.css';\n\nexport const Skeleton = () => {\n return <div className={styles.skeleton} />;\n};\n","import React from 'react';\nimport styles from './Card.module.css';\nimport clsx from 'clsx';\n\ntype CardProps = React.HTMLAttributes<HTMLDivElement> & {\n children?: React.ReactNode;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div className={clsx(styles.card, className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCard.displayName = 'Card';\n\ntype CardHeaderProps = {\n title?: string;\n subtitle?: string;\n rightContent?: React.ReactNode;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle, rightContent }) => {\n if (!title && !subtitle && !rightContent) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n <div className={styles.leftContent}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n {rightContent}\n </div>\n );\n};\n\ntype CardContentProps = {\n children: React.ReactNode;\n};\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ children }, ref) => {\n return (\n <div className={styles.cardContent} ref={ref}>\n {children}\n </div>\n );\n },\n);\n\nCardContent.displayName = 'CardContent';\n","import { TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: TablerIcon;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport styles from './Typography.module.css';\nimport clsx from 'clsx';\n\ntype TypographyElement = 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'div';\n\ntype TypographyProps = {\n children: React.ReactNode;\n as?: TypographyElement;\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n};\n\nexport function Typography({\n children,\n as: Component = 'p',\n className,\n style,\n title,\n}: TypographyProps): React.JSX.Element {\n return (\n <Component title={title} className={clsx(styles.typography, className)} style={style}>\n {children}\n </Component>\n );\n}\n","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: TablerIcon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: TablerIcon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC } from 'react';\n\nexport type DropdownProps = {\n triggerComponent: React.ReactNode;\n children: React.ReactNode;\n disabled?: boolean;\n open?: boolean;\n side?: React.ComponentProps<typeof DropdownMenu.Content>['side'];\n align?: React.ComponentProps<typeof DropdownMenu.Content>['align'];\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n triggerComponent,\n children,\n disabled,\n open,\n side = 'bottom',\n align = 'start',\n onOpenChange,\n}) => {\n return (\n <DropdownMenu.Root open={open} onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger asChild disabled={disabled}>\n {triggerComponent}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content side={side} align={align} style={{ zIndex: 5 }}>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC, ImgHTMLAttributes, SVGProps } from 'react';\nimport styles from './SelectFieldOption.module.css';\nimport clsx from 'clsx';\n\ntype SelectListOptionIcon =\n | React.ReactElement<SVGProps<SVGSVGElement>>\n | React.ReactElement<ImgHTMLAttributes<HTMLImageElement>>;\n\nexport type SelectListOptionProps = {\n value?: string;\n isSelected?: boolean;\n label: string;\n rightLabel?: string;\n startIcon?: SelectListOptionIcon;\n endIcon?: SelectListOptionIcon;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n};\nexport type SelectListOptionPropsWithCategory = SelectListOptionProps & {\n category: string;\n};\n\nexport const SelectListOption: FC<SelectListOptionProps> = ({\n value,\n isSelected,\n label,\n rightLabel,\n startIcon,\n endIcon,\n disabled,\n ...props\n}) => {\n return (\n <DropdownMenu.Item\n className={clsx(\n styles.selectFieldOption,\n disabled && styles.disabled,\n isSelected && styles.selected,\n )}\n data-value={value}\n {...props}\n >\n <span className={styles.leftContent}>\n {startIcon}\n <span title={label}>{label}</span>\n </span>\n <span className={styles.rightContent}>\n <span title={rightLabel}>{rightLabel}</span>\n {endIcon}\n </span>\n </DropdownMenu.Item>\n );\n};\n","import { TablerIcon } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import React from 'react';\nimport { Icon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './GhostButton.module.css';\n\ntype GhostButtonProps = {\n startIcon?: Icon;\n endIcon?: Icon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const GhostButton: React.FC<GhostButtonProps> = ({\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.ghostButton, className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import clsx from 'clsx';\nimport styles from './Overlay.module.css';\nimport { FC, ReactNode } from 'react';\n\ntype OverlayProps = {\n className?: string;\n children?: ReactNode;\n};\n\nexport const Overlay: FC<OverlayProps> = ({ className, children }) => {\n return <div className={clsx(styles.overlay, className)}>{children}</div>;\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconSearch, IconSquare, IconSquareCheckFilled, TablerIcon } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: TablerIcon;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconX, TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: TablerIcon;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div ref={containerRef} tabIndex={-1} className={clsx(styles.selectFieldContent, className)}>\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import {\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from './SelectFieldOptions/SelectFieldOption/SelectFieldOption';\n\ntype GroupedOptions = {\n [category: string]: SelectListOptionPropsWithCategory[];\n};\n\nexport const groupOptionsByCategory = (\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[],\n): GroupedOptions | null => {\n const result = options.reduce<GroupedOptions>((acc, option) => {\n if ('category' in option && option.category) {\n const category = option.category;\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(option);\n }\n return acc;\n }, {});\n\n // Return null if no categories were found\n return Object.keys(result).length === 0 ? null : result;\n};\n","import { useEffect } from 'react';\n\nexport const useSelectSearchFocus = (\n isOpen: boolean,\n searchFieldRef: React.RefObject<HTMLInputElement | null>,\n) => {\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n (searchFieldRef.current as unknown as HTMLInputElement)?.focus();\n }, 100);\n }\n }, [isOpen, searchFieldRef]);\n};\n","import { FC } from 'react';\nimport styles from './SelectFieldCategory.module.css';\n\ntype SelectFieldCategoryProps = {\n label: string;\n};\n\nexport const SelectFieldCategory: FC<SelectFieldCategoryProps> = ({ label }) => {\n return <span className={styles.selectFieldCategory}>{label}</span>;\n};\n","import clsx from 'clsx';\nimport styles from './FieldFeedback.module.css';\nimport { FC } from 'react';\n\nexport type FieldFeedbackProps = {\n message: string;\n variant?: 'error';\n className?: string;\n};\n\nexport const FieldFeedback: FC<FieldFeedbackProps> = ({ message, variant, className }) => {\n return (\n <p className={clsx(styles.fieldFeedback, variant && styles[variant], className)}>{message}</p>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldHeader.module.css';\n\nexport type FieldHeaderProps = {\n className?: string;\n label?: string;\n required?: boolean;\n requiredLabel?: string;\n};\n\nexport const FieldHeader = ({\n label,\n required,\n requiredLabel = 'Required',\n className,\n}: FieldHeaderProps) => {\n if (!label && !required) {\n return null;\n }\n\n return (\n <label className={clsx(styles.fieldHeader, className)}>\n {label}\n {required && <span>{requiredLabel}</span>}\n </label>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n ({ value = '', placeholder = 'Enter text', maxLength, error, errorMessage, ...props }, ref) => {\n return (\n <>\n <InputField\n value={value}\n placeholder={placeholder}\n ref={ref}\n maxLength={maxLength}\n clearable\n error={error}\n errorMessage={errorMessage}\n {...props}\n />\n {maxLength && <FieldFeedback message={`${value?.length}/${maxLength} Characters`} />}\n </>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import { IconX, TablerIcon } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n let timer: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './Switch.module.css';\n\ntype SwitchProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n label?: string;\n};\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked,\n onChange,\n disabled = false,\n className,\n label,\n ...props\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled && onChange) {\n onChange(event.target.checked);\n }\n };\n\n // Ensure accessibility: either aria-label must be provided\n if (!props['aria-label']) {\n console.warn(\n 'Switch component requires either a label prop or aria-label prop for accessibility',\n );\n }\n\n return (\n <label\n className={clsx(\n className,\n styles.switch,\n checked && styles.checked,\n disabled && styles.disabled,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n {...props}\n />\n <span className={styles.switchTrack} aria-hidden=\"true\">\n <span className={styles.switchThumb} aria-hidden=\"true\" />\n </span>\n {label && <span className={clsx(styles.switchLabel)}>{label}</span>}\n </label>\n );\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\n\ntype NumberFieldProps = Omit<InputFieldProps, 'value' | 'onChange'> & {\n value?: number | null;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (value: number | null) => void;\n};\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (\n {\n value = null,\n placeholder = 'Enter number',\n onChange,\n error,\n errorMessage,\n clearable,\n ...props\n },\n ref,\n ) => {\n const handleChange = (value: string) => {\n if (value === '') {\n onChange?.(null);\n return;\n }\n\n const numericValue = Number(value);\n if (!isNaN(numericValue) && isFinite(numericValue)) {\n onChange?.(numericValue);\n }\n };\n\n return (\n <InputField\n {...props}\n value={value?.toString() || ''}\n placeholder={placeholder}\n onChange={handleChange}\n type=\"number\"\n clearable={clearable}\n error={error}\n errorMessage={errorMessage}\n ref={ref}\n />\n );\n },\n);\n\nNumberField.displayName = 'NumberField';\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartJSOrUndefined } from 'react-chartjs-2/dist/types';\n\nexport const getSegmentIndexClicked = (\n event: React.MouseEvent<HTMLCanvasElement>,\n chartRef: React.RefObject<ChartJSOrUndefined | null>,\n): number | undefined => {\n const chart = chartRef.current;\n\n if (!chart) return undefined;\n\n const points = chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false,\n );\n\n return points[0]?.index;\n};\n","import { StylesKeys } from './styles.constants';\n\n/**\n * Attempts to interpret a CSS variable as a number (for lengths)\n * or a string (for colors, etc.).\n *\n * Examples:\n * --var: 2rem -> returns number (px)\n * --var: 16px -> returns number\n * --var: 3 -> returns number (parsed float)\n * --var: #3498db -> returns string\n * --var: rgba(52, 152, 219, 0.8) -> returns string\n */\nconst numericRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst getStyleValue = (variableName: StylesKeys): string => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n const computedStyle = getComputedStyle(document.documentElement);\n return computedStyle.getPropertyValue(variableName).trim();\n};\n\nexport const getStyle = (variableName: StylesKeys, fallbackValue?: string): string => {\n const rawValue = getStyleValue(variableName);\n if (!rawValue) return fallbackValue ?? rawValue;\n\n // Colors\n const firstChar = rawValue.charAt(0);\n if (firstChar === '#' || rawValue.startsWith('rgb(') || rawValue.startsWith('rgba(')) {\n return rawValue;\n }\n\n // Others like font-family\n return rawValue;\n};\n\nexport const getStyleNumber = (\n variableName: StylesKeys,\n fallbackValue?: string,\n): number | undefined => {\n const rawValue = getStyleValue(variableName) || fallbackValue;\n\n if (!rawValue) return undefined;\n\n const numericValue = parseFloat(rawValue);\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n // Px\n if (rawValue.slice(-2) === 'px') {\n return numericValue;\n }\n\n // Rem/Em\n const unit3 = rawValue.slice(-3);\n if (unit3 === 'rem') {\n return numericValue * rootFontSize;\n }\n\n // Pure number\n if (numericRegex.test(rawValue)) {\n return numericValue;\n }\n return undefined;\n};\n","import { getStyle } from '../../styles/styles.utils';\n\nexport const getChartColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--5'),\n getStyle('--em-sem-chart-color--6'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--8'),\n getStyle('--em-sem-chart-color--9'),\n getStyle('--em-sem-chart-color--10'),\n];\n\nexport const getChartContrastColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--10'),\n];\n","import { ChartData, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptions,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n const chartContrastColors = getChartContrastColors();\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n grid: {\n display: true,\n color: getChartjsAxisOptionsScalesGridColor,\n },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: { display: false },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-barchart-border-radius', '0.375rem'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(getChartjsAxisOptions(), baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { CartesianTickOptions, ChartOptions, GridLineOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { getChartjsOptions } from './chartjs.constants';\n\nexport const getChartjsAxisOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n labels: {\n total: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n value: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksDefault = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksMuted = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color--muted', '#5C5C66'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesTitle = (): any => ({\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-grid-title-font-weight', '700'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesGrid = (): Partial<GridLineOptions> => ({\n color: getStyle('--em-chart-grid-line-color--light', '#EDEDF1'),\n lineWidth: getStyleNumber('--em-chart-grid-line-width--thin', '0.0625rem'),\n});\n\nexport const getChartjsAxisOptionsScales = (): Partial<ChartOptions['scales']> => ({\n x: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n },\n y: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n },\n});\n\nexport const getChartjsAxisOptions = (): Partial<ChartOptions> =>\n mergician(getChartjsOptions(), {\n plugins: getChartjsAxisOptionsPlugins(),\n scales: getChartjsAxisOptionsScales(),\n });\n\nexport const chartjsAxisOptionsLayoutPadding: number = 30;\n\nfunction isMixedValues(values: number[]): boolean {\n const hasPos = values.some((v) => v > 0);\n const hasNeg = values.some((v) => v < 0);\n return hasPos && hasNeg;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesGridColor = (ctx: any) => {\n if (ctx.tick.value === 0) {\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartContrastColors = getChartContrastColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC, useEffect, useRef, useState } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n changeFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n valueFormatter,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [fontSize, setFontSize] = useState(20);\n\n useEffect(() => {\n const container = containerRef.current!;\n\n const updateFont = () => {\n const w = container.offsetWidth;\n const h = container.offsetHeight;\n\n // proportional to the smaller dimension\n const newSize = Math.min(w, h) * 0.3; // 40% of the smaller dimension\n setFontSize(newSize);\n };\n\n const observer = new ResizeObserver(updateFont);\n observer.observe(container);\n\n updateFont(); // initial run\n\n return () => observer.disconnect();\n }, []);\n\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n return (\n <div className={styles.kpiChartContainer} ref={containerRef}>\n <div className={styles.kpiChartCenter}>\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize ?? fontSize,\n }}\n >\n {displayValue}\n </h2>\n <div className={styles.kpiComparisonContainer} style={{ fontSize: changeFontSize }}>\n {hasComparisonValue && (\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n changeFontSize={changeFontSize}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n className,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = comparisonValue === 0 ? 0 : (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n return (\n <div className={clsx(className, styles.kpiChartChangeContainer)}>\n {!equalComparison && (\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </div>\n );\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import * as React from 'react';\nimport styles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { TablePagination } from './components/TablePagination/TablePagination';\nimport { TableHeader } from './components/TableHeader/TableHeader';\nimport { TableBody } from './components/TableBody/TableBody';\nimport { TablePaginatedProps } from './table.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TablePaginated = React.forwardRef<HTMLDivElement, TablePaginatedProps<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <T extends Record<string, any>>(\n props: TablePaginatedProps<T>,\n ref: React.Ref<HTMLDivElement>,\n ): React.JSX.Element => {\n const {\n headers,\n rows,\n className,\n total,\n page,\n pageSize,\n paginationLabel,\n sort,\n showIndex = false,\n onRowIndexClick,\n onPageChange,\n onSortChange,\n } = props;\n\n return (\n <div ref={ref} className={clsx(styles.tableContainer, className)}>\n <div className={styles.tableContainerScroll}>\n <table className={styles.table}>\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n <TableBody\n onRowIndexClick={onRowIndexClick}\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n page={page}\n pageSize={pageSize}\n />\n </table>\n </div>\n <TablePagination\n page={page}\n pageSize={pageSize}\n paginationLabel={paginationLabel}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n },\n);\n\nTablePaginated.displayName = 'TablePaginated';\n","import {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n} from '@tabler/icons-react';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport styles from './TablePagination.module.css';\nimport { FC, useEffect } from 'react';\nimport { TablePaginatedProps } from '../../table.types';\n\nexport type TablePaginationProps = Pick<\n TablePaginatedProps<unknown>,\n 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'\n>;\n\nexport const getTableTotalPages = (\n total: number | undefined,\n pageSize: number,\n): number | undefined => {\n return total ? Math.ceil(total / pageSize) : undefined;\n};\n\nexport const TablePagination: FC<TablePaginationProps> = ({\n page,\n pageSize,\n paginationLabel,\n total,\n onPageChange,\n}) => {\n const totalPages = getTableTotalPages(total, pageSize);\n\n const disabledPrev = page <= 0;\n const disabledNext = !totalPages || page >= totalPages - 1;\n\n useEffect(() => {\n if (totalPages && page >= totalPages) {\n onPageChange(0);\n }\n }, [totalPages, page]);\n\n return (\n <div className={styles.tablePagination} aria-label=\"Table pagination controls\">\n <div className={styles.tablePaginationCentral}>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronsLeft}\n onClick={() => {\n onPageChange(0);\n }}\n disabled={disabledPrev}\n aria-label=\"First page\"\n />\n <ActionIcon\n icon={IconChevronLeft}\n onClick={() => {\n onPageChange(page - 1);\n }}\n disabled={disabledPrev}\n aria-label=\"Previous page\"\n />\n </div>\n <span>{paginationLabel ?? `Page ${page + 1} of ${totalPages ?? '?'}`}</span>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronRight}\n onClick={() => {\n onPageChange(page + 1);\n }}\n disabled={disabledNext}\n aria-label=\"Next page\"\n />\n <ActionIcon\n icon={IconChevronsRight}\n onClick={() => totalPages && onPageChange(totalPages - 1)}\n disabled={disabledNext}\n aria-label=\"Last page\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TablePaginatedProps, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\n\nexport type TableHeaderProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'sort' | 'onSortChange'\n>;\n\nconst getHeaderAriaSort = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id ? (sort.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n};\n\nconst getHeaderAriaLabel = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id\n ? sort.direction === 'asc'\n ? `Sort by ${header.title}, currently ascending. Activate to sort descending.`\n : `Sort by ${header.title}, currently descending. Activate to sort ascending.`\n : `Sort by ${header.title}. Activate to sort ascending.`;\n};\nexport const TableHeader = <T,>({\n headers,\n sort,\n showIndex,\n onSortChange,\n}: TableHeaderProps<T>) => {\n const getSortIcon = (header: TableHeaderItem<T>) => {\n if (!sort) return <IconCaretUpDownFilled />;\n\n if (sort.id === header.id) {\n if (sort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (sort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleSort = (id: keyof T) => {\n if (!onSortChange) return;\n\n if (!sort) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n if (sort) {\n // New sort\n if (sort.id !== id) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n // Toggle sort direction\n if (sort.direction === TableSortDirection.ASC) {\n return onSortChange({ id, direction: TableSortDirection.DESC });\n } else if (sort.direction === TableSortDirection.DESC) {\n return onSortChange(undefined); // Remove sort after DESC\n }\n }\n };\n\n return (\n <thead className={styles.tableHeader}>\n <tr>\n {showIndex && (\n <th className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>#</th>\n )}\n {headers.map((header) => (\n <th\n className={styles.tableHeaderCell}\n key={header.id as string}\n style={{ minWidth: header.minWidth }}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(sort, header)}\n >\n <button\n onClick={() => handleSort(header.id)}\n aria-label={getHeaderAriaLabel(sort, header)}\n >\n {header.title}\n {getSortIcon(header)}\n </button>\n </th>\n ))}\n </tr>\n </thead>\n );\n};\n","import { CssSize } from '../../../../types/css.types';\n\nexport const TableSortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\nexport type TableSort<T> = {\n id: keyof T;\n direction: (typeof TableSortDirection)[keyof typeof TableSortDirection];\n};\nexport const TableHeaderAlign = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\n\nexport type TableHeaderItemAlign = (typeof TableHeaderAlign)[keyof typeof TableHeaderAlign];\n\nexport type TableHeaderCell = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => React.ReactElement<HTMLTableCellElement>;\n\nexport type TableHeaderItem<T> = {\n id: keyof T;\n title: React.ReactNode;\n align?: TableHeaderItemAlign;\n field?: keyof T;\n minWidth?: CssSize;\n sort?: TableSort<T>;\n accessor?: (row: T) => React.ReactNode;\n cell?: TableHeaderCell;\n};\n\nexport type TablePaginatedProps<T> = {\n showIndex?: boolean;\n className?: string;\n headers: TableHeaderItem<T>[];\n rows: T[];\n page: number;\n pageSize: number;\n paginationLabel?: string;\n total?: number;\n sort?: TableSort<T>;\n onRowIndexClick?: (rowIndex: number) => void;\n onPageChange: (page: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n","import styles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TablePaginatedProps } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'pageSize' | 'page' | 'onRowIndexClick'\n>;\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n}: TableBodyProps<T>) => {\n return (\n <tbody className={styles.tableBody}>\n {rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n onClick={() => onRowIndexClick?.(rowIndex)}\n className={clsx(rowIndex === rows.length - 1 && tableStyles.tableLastRow)}\n >\n {showIndex && (\n <td className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>\n {pageSize * page + rowIndex + 1}\n </td>\n )}\n {headers.map((header, cellIndex) => (\n <TableBodyCell\n key={cellIndex}\n header={header}\n row={row}\n rowIndex={rowIndex}\n cellIndex={cellIndex}\n />\n ))}\n </tr>\n ))}\n </tbody>\n );\n};\n\ntype TableBodyCellProps<T> = {\n header: TableHeaderItem<T>;\n row: T;\n rowIndex: number;\n cellIndex: number;\n};\n\nconst TableBodyCell = <T,>({ header, row, rowIndex, cellIndex }: TableBodyCellProps<T>) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const value =\n header.accessor !== undefined\n ? header.accessor(row)\n : header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: styles.tableBodyCell });\n }\n\n const handleCopy = () => {\n setIsPressedCopy(true);\n if (value !== undefined) {\n navigator.clipboard.writeText(String(value));\n }\n };\n\n return (\n <td\n key={`${rowIndex}-${cellIndex}`}\n title={value}\n style={{ textAlign: header.align }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n styles.copyButton,\n header.align === TableHeaderAlign.RIGHT && styles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {value}\n </td>\n );\n};\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue != null) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue != null) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(String(row))?.get(String(columnValue)) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(String(row)) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","export const getTableCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : 'unset',\n maxWidth: width ? `${width}px` : 'unset',\n width: width ? `${width}px` : 'unset',\n };\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import { getStyle } from '../../../../styles/styles.utils';\nimport { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value))\n return getStyle('--em-tablechart-cell-background', '#fff');\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor: string;\n midColor: string;\n maxColor: string;\n}) => {\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","import { useMemo } from 'react';\n\ntype UseTableGetRowsPerPageProps = {\n availableHeight: number;\n headerHeight: number;\n rowHeight: number;\n footerHeight?: number;\n};\nexport const useTableGetRowsPerPage = ({\n availableHeight,\n headerHeight,\n rowHeight,\n footerHeight = 0,\n}: UseTableGetRowsPerPageProps): number =>\n useMemo(() => {\n const h = availableHeight;\n if (!h) return 0;\n\n // Available vertical space for BODY rows only\n let available = h - headerHeight - footerHeight;\n if (available < 0) available = 0;\n\n // DO NOT show partial rows: floor only\n const rows = Math.floor(available / rowHeight);\n return Math.max(0, rows);\n }, [availableHeight, headerHeight, rowHeight, footerHeight]);\n","import { useRef, useEffect, useCallback } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout>(null);\n const fnRef = useRef(fn);\n\n // Always keep fn up to date without resetting timer\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n fnRef.current(...args);\n }, delay);\n },\n [delay],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return debouncedFn;\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\n\nexport const useObserverHeight = (elRef: React.RefObject<HTMLDivElement | null>): number => {\n const [height, setHeight] = useState(0);\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateHeight = (newHeight: number) => {\n setHeight(Math.max(0, newHeight));\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n // clear previous debounce\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // wait 100ms before updating\n timeoutRef.current = window.setTimeout(() => {\n updateHeight(entry.contentRect.height);\n }, 100);\n });\n\n ro.observe(el);\n // initial height\n updateHeight(el.getBoundingClientRect().height || 0);\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef]);\n\n return height;\n};\n"],"mappings":"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","names":["styles","jsx","clsx","styles","jsx","jsxs","styles","clsx","jsx","clsx","styles","jsx","clsx","styles","jsx","jsx","jsxs","DropdownMenu","styles","clsx","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","Fragment","useEffect","useRef","styles","clsx","jsx","jsxs","styles","clsx","jsx","styles","useEffect","styles","jsx","clsx","styles","jsx","clsx","styles","jsx","jsxs","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","jsxs","forwardRef","jsx","jsxs","useRef","useEffect","styles","Fragment","clsx","styles","jsx","jsxs","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","forwardRef","jsx","forwardRef","value","useRef","mergician","mergician","styles","mergician","jsx","useRef","ChartJS","CategoryScale","LinearScale","Title","Tooltip","Legend","LogarithmicScale","styles","useRef","mergician","mergician","mergician","ChartDataLabels","jsx","ChartJS","CategoryScale","LinearScale","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","useRef","mergician","styles","useEffect","useRef","useState","styles","styles","clsx","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","jsx","ChartJS","Tooltip","Legend","ChartDataLabels","AnnotationPlugin","useRef","useRef","Pie","ArcElement","ChartJS","Legend","Tooltip","ChartDataLabels","mergician","styles","AnnotationPlugin","jsx","ChartJS","ArcElement","Tooltip","Legend","ChartDataLabels","useRef","Pie","React","styles","clsx","styles","useEffect","jsx","jsxs","IconCaretDownFilled","styles","clsx","jsx","jsxs","IconCaretDownFilled","styles","styles","clsx","useState","tableStyles","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","useEffect","useMemo","useState","tableStyles","clsx","jsx","jsxs","useMemo","useState","useEffect","clsx","tableStyles","useMemo","tableStyles","clsx","hex","jsx","jsxs","useMemo","clsx","tableStyles","useMemo","useRef","useEffect","useCallback","useRef","useState"]}
1
+ {"version":3,"sources":["../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/Typography/Typography.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.ts","../src/components/editors/selects/shared/useSelectSearchFocus.hook.ts","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.tsx","../src/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/utils/debounce.utils.ts","../src/components/editors/Switch/Switch.tsx","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/hooks/useResizeObserver.hook.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/Table/TablePaginated.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/Table/Table.hooks.ts","../src/hooks/useDebounce.hook.ts"],"sourcesContent":["import styles from './Skeleton.module.css';\n\nexport const Skeleton = () => {\n return <div className={styles.skeleton} />;\n};\n","import React from 'react';\nimport styles from './Card.module.css';\nimport clsx from 'clsx';\n\ntype CardProps = React.HTMLAttributes<HTMLDivElement> & {\n children?: React.ReactNode;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div className={clsx(styles.card, className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCard.displayName = 'Card';\n\ntype CardHeaderProps = {\n title?: string;\n subtitle?: string;\n rightContent?: React.ReactNode;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle, rightContent }) => {\n if (!title && !subtitle && !rightContent) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n <div className={styles.leftContent}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n {rightContent}\n </div>\n );\n};\n\ntype CardContentProps = {\n children: React.ReactNode;\n};\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ children }, ref) => {\n return (\n <div className={styles.cardContent} ref={ref}>\n {children}\n </div>\n );\n },\n);\n\nCardContent.displayName = 'CardContent';\n","import { TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: TablerIcon;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport styles from './Typography.module.css';\nimport clsx from 'clsx';\n\ntype TypographyElement = 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'div';\n\ntype TypographyProps = {\n children: React.ReactNode;\n as?: TypographyElement;\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n};\n\nexport function Typography({\n children,\n as: Component = 'p',\n className,\n style,\n title,\n}: TypographyProps): React.JSX.Element {\n return (\n <Component title={title} className={clsx(styles.typography, className)} style={style}>\n {children}\n </Component>\n );\n}\n","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: TablerIcon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { TablerIcon } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: TablerIcon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC } from 'react';\n\nexport type DropdownProps = {\n triggerComponent: React.ReactNode;\n children: React.ReactNode;\n disabled?: boolean;\n open?: boolean;\n side?: React.ComponentProps<typeof DropdownMenu.Content>['side'];\n align?: React.ComponentProps<typeof DropdownMenu.Content>['align'];\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n triggerComponent,\n children,\n disabled,\n open,\n side = 'bottom',\n align = 'start',\n onOpenChange,\n}) => {\n return (\n <DropdownMenu.Root open={open} onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger asChild disabled={disabled}>\n {triggerComponent}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content side={side} align={align} style={{ zIndex: 5 }}>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC, ImgHTMLAttributes, SVGProps } from 'react';\nimport styles from './SelectFieldOption.module.css';\nimport clsx from 'clsx';\n\ntype SelectListOptionIcon =\n | React.ReactElement<SVGProps<SVGSVGElement>>\n | React.ReactElement<ImgHTMLAttributes<HTMLImageElement>>;\n\nexport type SelectListOptionProps = {\n value?: string;\n isSelected?: boolean;\n label: string;\n rightLabel?: string;\n startIcon?: SelectListOptionIcon;\n endIcon?: SelectListOptionIcon;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n};\nexport type SelectListOptionPropsWithCategory = SelectListOptionProps & {\n category: string;\n};\n\nexport const SelectListOption: FC<SelectListOptionProps> = ({\n value,\n isSelected,\n label,\n rightLabel,\n startIcon,\n endIcon,\n disabled,\n ...props\n}) => {\n return (\n <DropdownMenu.Item\n className={clsx(\n styles.selectFieldOption,\n disabled && styles.disabled,\n isSelected && styles.selected,\n )}\n data-value={value}\n {...props}\n >\n <span className={styles.leftContent}>\n {startIcon}\n <span title={label}>{label}</span>\n </span>\n <span className={styles.rightContent}>\n <span title={rightLabel}>{rightLabel}</span>\n {endIcon}\n </span>\n </DropdownMenu.Item>\n );\n};\n","import { TablerIcon } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import React from 'react';\nimport { Icon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './GhostButton.module.css';\n\ntype GhostButtonProps = {\n startIcon?: Icon;\n endIcon?: Icon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const GhostButton: React.FC<GhostButtonProps> = ({\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.ghostButton, className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import clsx from 'clsx';\nimport styles from './Overlay.module.css';\nimport { FC, ReactNode } from 'react';\n\ntype OverlayProps = {\n className?: string;\n children?: ReactNode;\n};\n\nexport const Overlay: FC<OverlayProps> = ({ className, children }) => {\n return <div className={clsx(styles.overlay, className)}>{children}</div>;\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconSearch, IconSquare, IconSquareCheckFilled, TablerIcon } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: TablerIcon;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconX, TablerIcon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: TablerIcon;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div ref={containerRef} tabIndex={-1} className={clsx(styles.selectFieldContent, className)}>\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import {\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from './SelectFieldOptions/SelectFieldOption/SelectFieldOption';\n\ntype GroupedOptions = {\n [category: string]: SelectListOptionPropsWithCategory[];\n};\n\nexport const groupOptionsByCategory = (\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[],\n): GroupedOptions | null => {\n const result = options.reduce<GroupedOptions>((acc, option) => {\n if ('category' in option && option.category) {\n const category = option.category;\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(option);\n }\n return acc;\n }, {});\n\n // Return null if no categories were found\n return Object.keys(result).length === 0 ? null : result;\n};\n","import { useEffect } from 'react';\n\nexport const useSelectSearchFocus = (\n isOpen: boolean,\n searchFieldRef: React.RefObject<HTMLInputElement | null>,\n) => {\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n (searchFieldRef.current as unknown as HTMLInputElement)?.focus();\n }, 100);\n }\n }, [isOpen, searchFieldRef]);\n};\n","import { FC } from 'react';\nimport styles from './SelectFieldCategory.module.css';\n\ntype SelectFieldCategoryProps = {\n label: string;\n};\n\nexport const SelectFieldCategory: FC<SelectFieldCategoryProps> = ({ label }) => {\n return <span className={styles.selectFieldCategory}>{label}</span>;\n};\n","import clsx from 'clsx';\nimport styles from './FieldFeedback.module.css';\nimport { FC } from 'react';\n\nexport type FieldFeedbackProps = {\n message: string;\n variant?: 'error';\n className?: string;\n};\n\nexport const FieldFeedback: FC<FieldFeedbackProps> = ({ message, variant, className }) => {\n return (\n <p className={clsx(styles.fieldFeedback, variant && styles[variant], className)}>{message}</p>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldHeader.module.css';\n\nexport type FieldHeaderProps = {\n className?: string;\n label?: string;\n required?: boolean;\n requiredLabel?: string;\n};\n\nexport const FieldHeader = ({\n label,\n required,\n requiredLabel = 'Required',\n className,\n}: FieldHeaderProps) => {\n if (!label && !required) {\n return null;\n }\n\n return (\n <label className={clsx(styles.fieldHeader, className)}>\n {label}\n {required && <span>{requiredLabel}</span>}\n </label>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n ({ value = '', placeholder = 'Enter text', maxLength, error, errorMessage, ...props }, ref) => {\n return (\n <>\n <InputField\n value={value}\n placeholder={placeholder}\n ref={ref}\n maxLength={maxLength}\n clearable\n error={error}\n errorMessage={errorMessage}\n {...props}\n />\n {maxLength && <FieldFeedback message={`${value?.length}/${maxLength} Characters`} />}\n </>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import { IconX, TablerIcon } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n let timer: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './Switch.module.css';\n\ntype SwitchProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n label?: string;\n};\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked,\n onChange,\n disabled = false,\n className,\n label,\n ...props\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled && onChange) {\n onChange(event.target.checked);\n }\n };\n\n // Ensure accessibility: either aria-label must be provided\n if (!props['aria-label']) {\n console.warn(\n 'Switch component requires either a label prop or aria-label prop for accessibility',\n );\n }\n\n return (\n <label\n className={clsx(\n className,\n styles.switch,\n checked && styles.checked,\n disabled && styles.disabled,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n {...props}\n />\n <span className={styles.switchTrack} aria-hidden=\"true\">\n <span className={styles.switchThumb} aria-hidden=\"true\" />\n </span>\n {label && <span className={clsx(styles.switchLabel)}>{label}</span>}\n </label>\n );\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\n\ntype NumberFieldProps = Omit<InputFieldProps, 'value' | 'onChange'> & {\n value?: number | null;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (value: number | null) => void;\n};\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (\n {\n value = null,\n placeholder = 'Enter number',\n onChange,\n error,\n errorMessage,\n clearable,\n ...props\n },\n ref,\n ) => {\n const handleChange = (value: string) => {\n if (value === '') {\n onChange?.(null);\n return;\n }\n\n const numericValue = Number(value);\n if (!isNaN(numericValue) && isFinite(numericValue)) {\n onChange?.(numericValue);\n }\n };\n\n return (\n <InputField\n {...props}\n value={value?.toString() || ''}\n placeholder={placeholder}\n onChange={handleChange}\n type=\"number\"\n clearable={clearable}\n error={error}\n errorMessage={errorMessage}\n ref={ref}\n />\n );\n },\n);\n\nNumberField.displayName = 'NumberField';\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartJSOrUndefined } from 'react-chartjs-2/dist/types';\n\nexport const getSegmentIndexClicked = (\n event: React.MouseEvent<HTMLCanvasElement>,\n chartRef: React.RefObject<ChartJSOrUndefined | null>,\n): number | undefined => {\n const chart = chartRef.current;\n\n if (!chart) return undefined;\n\n const points = chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false,\n );\n\n return points[0]?.index;\n};\n","import { StylesKeys } from './styles.constants';\n\n/**\n * Attempts to interpret a CSS variable as a number (for lengths)\n * or a string (for colors, etc.).\n *\n * Examples:\n * --var: 2rem -> returns number (px)\n * --var: 16px -> returns number\n * --var: 3 -> returns number (parsed float)\n * --var: #3498db -> returns string\n * --var: rgba(52, 152, 219, 0.8) -> returns string\n */\nconst numericRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst getStyleValue = (variableName: StylesKeys): string => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n const computedStyle = getComputedStyle(document.documentElement);\n return computedStyle.getPropertyValue(variableName).trim();\n};\n\nexport const getStyle = (variableName: StylesKeys, fallbackValue?: string): string => {\n const rawValue = getStyleValue(variableName);\n if (!rawValue) return fallbackValue ?? rawValue;\n\n // Colors\n const firstChar = rawValue.charAt(0);\n if (firstChar === '#' || rawValue.startsWith('rgb(') || rawValue.startsWith('rgba(')) {\n return rawValue;\n }\n\n // Others like font-family\n return rawValue;\n};\n\nexport const getStyleNumber = (\n variableName: StylesKeys,\n fallbackValue?: string,\n): number | undefined => {\n const rawValue = getStyleValue(variableName) || fallbackValue;\n\n if (!rawValue) return undefined;\n\n const numericValue = parseFloat(rawValue);\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n // Px\n if (rawValue.slice(-2) === 'px') {\n return numericValue;\n }\n\n // Rem/Em\n const unit3 = rawValue.slice(-3);\n if (unit3 === 'rem') {\n return numericValue * rootFontSize;\n }\n\n // Pure number\n if (numericRegex.test(rawValue)) {\n return numericValue;\n }\n return undefined;\n};\n","import { getStyle } from '../../styles/styles.utils';\n\nexport const getChartColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--5'),\n getStyle('--em-sem-chart-color--6'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--8'),\n getStyle('--em-sem-chart-color--9'),\n getStyle('--em-sem-chart-color--10'),\n];\n\nexport const getChartContrastColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--10'),\n];\n","import { ChartData, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptions,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n const chartContrastColors = getChartContrastColors();\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n grid: {\n display: true,\n color: getChartjsAxisOptionsScalesGridColor,\n },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: { display: false },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-barchart-border-radius', '0.375rem'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(getChartjsAxisOptions(), baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { CartesianTickOptions, ChartOptions, GridLineOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { getChartjsOptions } from './chartjs.constants';\n\nexport const getChartjsAxisOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n labels: {\n total: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n value: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksDefault = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksMuted = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color--muted', '#5C5C66'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesTitle = (): any => ({\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-grid-title-font-weight', '700'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesGrid = (): Partial<GridLineOptions> => ({\n color: getStyle('--em-chart-grid-line-color--light', '#EDEDF1'),\n lineWidth: getStyleNumber('--em-chart-grid-line-width--thin', '0.0625rem'),\n});\n\nexport const getChartjsAxisOptionsScales = (): Partial<ChartOptions['scales']> => ({\n x: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n },\n y: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n },\n});\n\nexport const getChartjsAxisOptions = (): Partial<ChartOptions> =>\n mergician(getChartjsOptions(), {\n plugins: getChartjsAxisOptionsPlugins(),\n scales: getChartjsAxisOptionsScales(),\n });\n\nexport const chartjsAxisOptionsLayoutPadding: number = 30;\n\nfunction isMixedValues(values: number[]): boolean {\n const hasPos = values.some((v) => v > 0);\n const hasNeg = values.some((v) => v < 0);\n return hasPos && hasNeg;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesGridColor = (ctx: any) => {\n if (ctx.tick.value === 0) {\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartContrastColors = getChartContrastColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC, useEffect, useRef, useState } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n changeFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n valueFormatter,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [fontSize, setFontSize] = useState(20);\n\n useEffect(() => {\n const container = containerRef.current!;\n\n const updateFont = () => {\n const w = container.offsetWidth;\n const h = container.offsetHeight;\n\n // proportional to the smaller dimension\n const newSize = Math.min(w, h) * 0.3; // 40% of the smaller dimension\n setFontSize(newSize);\n };\n\n const observer = new ResizeObserver(updateFont);\n observer.observe(container);\n\n updateFont(); // initial run\n\n return () => observer.disconnect();\n }, []);\n\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n return (\n <div className={styles.kpiChartContainer} ref={containerRef}>\n <div className={styles.kpiChartCenter}>\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize ?? fontSize,\n }}\n >\n {displayValue}\n </h2>\n <div className={styles.kpiComparisonContainer} style={{ fontSize: changeFontSize }}>\n {hasComparisonValue && (\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n changeFontSize={changeFontSize}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n className,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = comparisonValue === 0 ? 0 : (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n return (\n <div className={clsx(className, styles.kpiChartChangeContainer)}>\n {!equalComparison && (\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </div>\n );\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport { useResizeObserver } from '../../../../hooks/useResizeObserver.hook';\n\nconst MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const containerRef = useRef(null);\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n const { height, width } = useResizeObserver(containerRef, 0);\n\n const hideChart =\n height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;\n\n return (\n <div className={styles.chartContainer} ref={containerRef}>\n {hideChart ? null : (\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n )}\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(\n elRef: React.RefObject<T | null>,\n timeout = 100,\n): Size => {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateSize = (rect: DOMRectReadOnly | DOMRect) => {\n setSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n });\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n updateSize(entry.contentRect);\n }, timeout);\n });\n\n ro.observe(el);\n\n // initial size\n updateSize(el.getBoundingClientRect());\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef, timeout]);\n\n return size;\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import * as React from 'react';\nimport styles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { TablePagination } from './components/TablePagination/TablePagination';\nimport { TableHeader } from './components/TableHeader/TableHeader';\nimport { TableBody } from './components/TableBody/TableBody';\nimport { TablePaginatedProps } from './table.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TablePaginated = React.forwardRef<HTMLDivElement, TablePaginatedProps<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <T extends Record<string, any>>(\n props: TablePaginatedProps<T>,\n ref: React.Ref<HTMLDivElement>,\n ): React.JSX.Element => {\n const {\n headers,\n rows,\n className,\n total,\n page,\n pageSize,\n paginationLabel,\n sort,\n showIndex = false,\n onRowIndexClick,\n onPageChange,\n onSortChange,\n } = props;\n\n return (\n <div ref={ref} className={clsx(styles.tableContainer, className)}>\n <div className={styles.tableContainerScroll}>\n <table className={styles.table}>\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n <TableBody\n onRowIndexClick={onRowIndexClick}\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n page={page}\n pageSize={pageSize}\n />\n </table>\n </div>\n <TablePagination\n page={page}\n pageSize={pageSize}\n paginationLabel={paginationLabel}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n },\n);\n\nTablePaginated.displayName = 'TablePaginated';\n","import {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n} from '@tabler/icons-react';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport styles from './TablePagination.module.css';\nimport { FC, useEffect } from 'react';\nimport { TablePaginatedProps } from '../../table.types';\n\nexport type TablePaginationProps = Pick<\n TablePaginatedProps<unknown>,\n 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'\n>;\n\nexport const getTableTotalPages = (\n total: number | undefined,\n pageSize: number,\n): number | undefined => {\n return total ? Math.ceil(total / pageSize) : undefined;\n};\n\nexport const TablePagination: FC<TablePaginationProps> = ({\n page,\n pageSize,\n paginationLabel,\n total,\n onPageChange,\n}) => {\n const totalPages = getTableTotalPages(total, pageSize);\n\n const disabledPrev = page <= 0;\n const disabledNext = !totalPages || page >= totalPages - 1;\n\n useEffect(() => {\n if (totalPages && page >= totalPages) {\n onPageChange(0);\n }\n }, [totalPages, page]);\n\n return (\n <div className={styles.tablePagination} aria-label=\"Table pagination controls\">\n <div className={styles.tablePaginationCentral}>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronsLeft}\n onClick={() => {\n onPageChange(0);\n }}\n disabled={disabledPrev}\n aria-label=\"First page\"\n />\n <ActionIcon\n icon={IconChevronLeft}\n onClick={() => {\n onPageChange(page - 1);\n }}\n disabled={disabledPrev}\n aria-label=\"Previous page\"\n />\n </div>\n <span>{paginationLabel ?? `Page ${page + 1} of ${totalPages ?? '?'}`}</span>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronRight}\n onClick={() => {\n onPageChange(page + 1);\n }}\n disabled={disabledNext}\n aria-label=\"Next page\"\n />\n <ActionIcon\n icon={IconChevronsRight}\n onClick={() => totalPages && onPageChange(totalPages - 1)}\n disabled={disabledNext}\n aria-label=\"Last page\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TablePaginatedProps, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\n\nexport type TableHeaderProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'sort' | 'onSortChange'\n>;\n\nconst getHeaderAriaSort = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id ? (sort.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n};\n\nconst getHeaderAriaLabel = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id\n ? sort.direction === 'asc'\n ? `Sort by ${header.title}, currently ascending. Activate to sort descending.`\n : `Sort by ${header.title}, currently descending. Activate to sort ascending.`\n : `Sort by ${header.title}. Activate to sort ascending.`;\n};\nexport const TableHeader = <T,>({\n headers,\n sort,\n showIndex,\n onSortChange,\n}: TableHeaderProps<T>) => {\n const getSortIcon = (header: TableHeaderItem<T>) => {\n if (!sort) return <IconCaretUpDownFilled />;\n\n if (sort.id === header.id) {\n if (sort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (sort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleSort = (id: keyof T) => {\n if (!onSortChange) return;\n\n if (!sort) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n if (sort) {\n // New sort\n if (sort.id !== id) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n // Toggle sort direction\n if (sort.direction === TableSortDirection.ASC) {\n return onSortChange({ id, direction: TableSortDirection.DESC });\n } else if (sort.direction === TableSortDirection.DESC) {\n return onSortChange(undefined); // Remove sort after DESC\n }\n }\n };\n\n return (\n <thead className={styles.tableHeader}>\n <tr>\n {showIndex && (\n <th className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>#</th>\n )}\n {headers.map((header) => (\n <th\n className={styles.tableHeaderCell}\n key={header.id as string}\n style={{ minWidth: header.minWidth }}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(sort, header)}\n >\n <button\n onClick={() => handleSort(header.id)}\n aria-label={getHeaderAriaLabel(sort, header)}\n >\n {header.title}\n {getSortIcon(header)}\n </button>\n </th>\n ))}\n </tr>\n </thead>\n );\n};\n","import { CssSize } from '../../../../types/css.types';\n\nexport const TableSortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\nexport type TableSort<T> = {\n id: keyof T;\n direction: (typeof TableSortDirection)[keyof typeof TableSortDirection];\n};\nexport const TableHeaderAlign = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\n\nexport type TableHeaderItemAlign = (typeof TableHeaderAlign)[keyof typeof TableHeaderAlign];\n\nexport type TableHeaderCell = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => React.ReactElement<HTMLTableCellElement>;\n\nexport type TableHeaderItem<T> = {\n id: keyof T;\n title: React.ReactNode;\n align?: TableHeaderItemAlign;\n field?: keyof T;\n minWidth?: CssSize;\n sort?: TableSort<T>;\n accessor?: (row: T) => React.ReactNode;\n cell?: TableHeaderCell;\n};\n\nexport type TablePaginatedProps<T> = {\n showIndex?: boolean;\n className?: string;\n headers: TableHeaderItem<T>[];\n rows: T[];\n page: number;\n pageSize: number;\n paginationLabel?: string;\n total?: number;\n sort?: TableSort<T>;\n onRowIndexClick?: (rowIndex: number) => void;\n onPageChange: (page: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n","import styles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TablePaginatedProps } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'pageSize' | 'page' | 'onRowIndexClick'\n>;\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n}: TableBodyProps<T>) => {\n return (\n <tbody className={styles.tableBody}>\n {rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n onClick={() => onRowIndexClick?.(rowIndex)}\n className={clsx(rowIndex === rows.length - 1 && tableStyles.tableLastRow)}\n >\n {showIndex && (\n <td className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>\n {pageSize * page + rowIndex + 1}\n </td>\n )}\n {headers.map((header, cellIndex) => (\n <TableBodyCell\n key={cellIndex}\n header={header}\n row={row}\n rowIndex={rowIndex}\n cellIndex={cellIndex}\n />\n ))}\n </tr>\n ))}\n </tbody>\n );\n};\n\ntype TableBodyCellProps<T> = {\n header: TableHeaderItem<T>;\n row: T;\n rowIndex: number;\n cellIndex: number;\n};\n\nconst TableBodyCell = <T,>({ header, row, rowIndex, cellIndex }: TableBodyCellProps<T>) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const value =\n header.accessor !== undefined\n ? header.accessor(row)\n : header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: styles.tableBodyCell });\n }\n\n const handleCopy = () => {\n setIsPressedCopy(true);\n if (value !== undefined) {\n navigator.clipboard.writeText(String(value));\n }\n };\n\n return (\n <td\n key={`${rowIndex}-${cellIndex}`}\n title={value}\n style={{ textAlign: header.align }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n styles.copyButton,\n header.align === TableHeaderAlign.RIGHT && styles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {value}\n </td>\n );\n};\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue != null) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue != null) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(String(row))?.get(String(columnValue)) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(String(row)) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","export const getTableCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : 'unset',\n maxWidth: width ? `${width}px` : 'unset',\n width: width ? `${width}px` : 'unset',\n };\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import { getStyle } from '../../../../styles/styles.utils';\nimport { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value))\n return getStyle('--em-tablechart-cell-background', '#fff');\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor: string;\n midColor: string;\n maxColor: string;\n}) => {\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","import { useMemo } from 'react';\n\ntype UseTableGetRowsPerPageProps = {\n availableHeight: number;\n headerHeight: number;\n rowHeight: number;\n footerHeight?: number;\n};\nexport const useTableGetRowsPerPage = ({\n availableHeight,\n headerHeight,\n rowHeight,\n footerHeight = 0,\n}: UseTableGetRowsPerPageProps): number =>\n useMemo(() => {\n const h = availableHeight;\n if (!h) return 0;\n\n // Available vertical space for BODY rows only\n let available = h - headerHeight - footerHeight;\n if (available < 0) available = 0;\n\n // DO NOT show partial rows: floor only\n const rows = Math.floor(available / rowHeight);\n return Math.max(0, rows);\n }, [availableHeight, headerHeight, rowHeight, footerHeight]);\n","import { useRef, useEffect, useCallback } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout>(null);\n const fnRef = useRef(fn);\n\n // Always keep fn up to date without resetting timer\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n fnRef.current(...args);\n }, delay);\n },\n [delay],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return debouncedFn;\n}\n"],"mappings":"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","names":["styles","jsx","clsx","styles","jsx","jsxs","styles","clsx","jsx","clsx","styles","jsx","clsx","styles","jsx","jsx","jsxs","DropdownMenu","styles","clsx","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","Fragment","useEffect","useRef","styles","clsx","jsx","jsxs","styles","clsx","jsx","styles","useEffect","styles","jsx","clsx","styles","jsx","clsx","styles","jsx","jsxs","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","jsxs","forwardRef","jsx","jsxs","useRef","useEffect","styles","Fragment","clsx","styles","jsx","jsxs","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","forwardRef","jsx","forwardRef","value","useRef","mergician","mergician","styles","mergician","jsx","useRef","ChartJS","CategoryScale","LinearScale","Title","Tooltip","Legend","LogarithmicScale","styles","useRef","mergician","mergician","mergician","ChartDataLabels","jsx","ChartJS","CategoryScale","LinearScale","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","useRef","mergician","styles","useEffect","useRef","useState","styles","styles","clsx","jsx","jsxs","jsx","jsxs","useRef","useState","useEffect","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embeddable.com/remarkable-ui",
3
- "version": "2.0.10",
3
+ "version": "2.0.11",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/embeddable-hq/remarkable-ui"