@embeddable.com/remarkable-ui 2.0.16 → 2.0.17

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
@@ -472,11 +472,13 @@ type UseTableGetRowsPerPageProps = {
472
472
  };
473
473
  declare const useTableGetRowsPerPage: ({ availableHeight, headerHeight, rowHeight, footerHeight, }: UseTableGetRowsPerPageProps) => number;
474
474
 
475
- declare const getTableTotalPages: (total: number | undefined, pageSize: number) => number | undefined;
476
-
477
475
  declare const getChartColors: () => string[];
478
476
  declare const getChartContrastColors: () => string[];
479
477
 
478
+ type TablePaginationProps = Pick<TablePaginatedProps<unknown>, 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'>;
479
+ declare const getTableTotalPages: (total: number | undefined, pageSize: number) => number | undefined;
480
+ declare const TablePagination: FC<TablePaginationProps>;
481
+
480
482
  declare const getChartjsAxisOptionsPlugins: () => Partial<ChartOptions["plugins"]>;
481
483
  declare const getChartjsAxisOptionsScalesTicksDefault: () => Partial<CartesianTickOptions>;
482
484
  declare const getChartjsAxisOptionsScalesTicksMuted: () => Partial<CartesianTickOptions>;
@@ -494,6 +496,8 @@ declare const isSameDate: (a?: Date, b?: Date) => boolean;
494
496
  declare const isSameDateRange: (a?: DateRange, b?: DateRange) => boolean;
495
497
  declare const endOfDayUTC: (date: Date) => Date;
496
498
 
499
+ declare const shallowEqual: (object1: any, object2: any) => boolean;
500
+
497
501
  declare function useDebounce<T extends (...args: any[]) => void>(fn: T, delay?: number): (...args: Parameters<T>) => void;
498
502
 
499
503
  type Size = {
@@ -502,4 +506,4 @@ type Size = {
502
506
  };
503
507
  declare const useResizeObserver: <T extends HTMLElement>(elRef: React.RefObject<T | null>, timeout?: number) => Size;
504
508
 
505
- export { ActionIcon, BarChart, type BarChartProps, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DateRangePicker, DateRangePickerField, type DateRangePickerProps, DonutChart, type DonutLabelChartProps, Dropdown, type DropdownProps, FieldFeedback, type FieldFeedbackProps, FieldHeader, type FieldHeaderProps, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, type LineChartProps, MultiSelectField, type MultiSelectFieldProps, NumberField, Overlay, PieChart, type PieChartProps, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, type SelectListOptionPropsWithCategory, SingleSelectField, type SingleSelectFieldProps, Skeleton, StylesKeys, Switch, TableHeaderAlign, type TableHeaderCell, type TableHeaderItem, type TableHeaderItemAlign, TablePaginated, type TablePaginatedProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, endOfDayUTC, getBarChartData, getBarChartOptions, getChartColors, getChartContrastColors, getChartjsAxisOptions, getChartjsAxisOptionsPlugins, getChartjsAxisOptionsScales, getChartjsAxisOptionsScalesGrid, getChartjsAxisOptionsScalesGridColor, getChartjsAxisOptionsScalesTicksDefault, getChartjsAxisOptionsScalesTicksMuted, getChartjsAxisOptionsScalesTitle, getDonutChartOptions, getLineChartData, getLineChartOptions, getPieChartData, getPieChartOptions, getStyle, getStyleNumber, getTableTotalPages, isSameDate, isSameDateRange, useDebounce, useResizeObserver, useTableGetRowsPerPage };
509
+ export { ActionIcon, BarChart, type BarChartProps, Button, ButtonIcon, Card, CardContent, CardFeedback, CardHeader, type CssSize, DateRangePicker, DateRangePickerField, type DateRangePickerProps, DonutChart, type DonutLabelChartProps, Dropdown, type DropdownProps, FieldFeedback, type FieldFeedbackProps, FieldHeader, type FieldHeaderProps, GhostButton, HeatMap, type HeatMapProps, type HeatMapPropsDimension, type HeatMapPropsMeasure, type HeatMapPropsThreshold, KpiChart, LineChart, type LineChartProps, MultiSelectField, type MultiSelectFieldProps, NumberField, Overlay, PieChart, type PieChartProps, PivotTable, type PivotTableProps, type PivotTablePropsColumnDimension, type PivotTablePropsMeasure, type PivotTablePropsRowDimension, SelectFieldCategory, SelectFieldContent, SelectFieldContentList, SelectFieldTrigger, SelectListOption, type SelectListOptionProps, type SelectListOptionPropsWithCategory, SingleSelectField, type SingleSelectFieldProps, Skeleton, StylesKeys, Switch, TableHeaderAlign, type TableHeaderCell, type TableHeaderItem, type TableHeaderItemAlign, TablePaginated, type TablePaginatedProps, TablePagination, type TablePaginationProps, type TableSort, TableSortDirection, TextField, Typography, chartjsAxisOptionsLayoutPadding, endOfDayUTC, getBarChartData, getBarChartOptions, getChartColors, getChartContrastColors, getChartjsAxisOptions, getChartjsAxisOptionsPlugins, getChartjsAxisOptionsScales, getChartjsAxisOptionsScalesGrid, getChartjsAxisOptionsScalesGridColor, getChartjsAxisOptionsScalesTicksDefault, getChartjsAxisOptionsScalesTicksMuted, getChartjsAxisOptionsScalesTitle, getDonutChartOptions, getLineChartData, getLineChartOptions, getPieChartData, getPieChartOptions, getStyle, getStyleNumber, getTableTotalPages, isSameDate, isSameDateRange, shallowEqual, useDebounce, useResizeObserver, useTableGetRowsPerPage };
package/dist/index.js CHANGED
@@ -930,8 +930,8 @@ import { useState as useState4 } from "react";
930
930
  import styles22 from "./DateRangePickerField.module-CURG3KIS.module.css";
931
931
  import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
932
932
  var getDateRangePickerLabel = (dateRange, displayValue) => {
933
- if (dateRange === void 0) return void 0;
934
- if (displayValue) return displayValue;
933
+ if (!dateRange) return void 0;
934
+ if (displayValue || displayValue === "") return displayValue;
935
935
  const { from, to } = dateRange;
936
936
  if (!from || !to) return void 0;
937
937
  return `${from ? from.toLocaleDateString() : ""} - ${to ? to.toLocaleDateString() : ""}`;
@@ -2881,6 +2881,21 @@ var useTableGetRowsPerPage = ({
2881
2881
  return Math.max(0, rows);
2882
2882
  }, [availableHeight, headerHeight, rowHeight, footerHeight]);
2883
2883
 
2884
+ // src/utils/object.utils.ts
2885
+ var shallowEqual = (object1, object2) => {
2886
+ const keys1 = Object.keys(object1 ?? {});
2887
+ const keys2 = Object.keys(object2 ?? {});
2888
+ if (keys1.length !== keys2.length) {
2889
+ return false;
2890
+ }
2891
+ for (const key of keys1) {
2892
+ if (object1[key]?.toString() !== object2[key]?.toString()) {
2893
+ return false;
2894
+ }
2895
+ }
2896
+ return true;
2897
+ };
2898
+
2884
2899
  // src/hooks/useDebounce.hook.ts
2885
2900
  import { useRef as useRef9, useEffect as useEffect7, useCallback as useCallback2 } from "react";
2886
2901
  function useDebounce(fn, delay = 300) {
@@ -2941,6 +2956,7 @@ export {
2941
2956
  Switch,
2942
2957
  TableHeaderAlign,
2943
2958
  TablePaginated,
2959
+ TablePagination,
2944
2960
  TableSortDirection,
2945
2961
  TextField,
2946
2962
  Typography,
@@ -2968,6 +2984,7 @@ export {
2968
2984
  getTableTotalPages,
2969
2985
  isSameDate,
2970
2986
  isSameDateRange,
2987
+ shallowEqual,
2971
2988
  styles,
2972
2989
  useDebounce,
2973
2990
  useResizeObserver,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/Typography/Typography.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.ts","../src/components/editors/selects/shared/useSelectSearchFocus.hook.ts","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.tsx","../src/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/utils/debounce.utils.ts","../src/components/editors/Switch/Switch.tsx","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../src/components/editors/dates/DateRangePicker/DateRangePicker.tsx","../src/components/editors/dates/DateRangePicker/DateRangePickerChevron.tsx","../src/utils/date.utils.ts","../src/components/editors/dates/DateRangePickerField/DateRangePickerField.tsx","../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/shared/ConditionalWrapper/ConditionalWrapper.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/hooks/useResizeObserver.hook.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/Table/TablePaginated.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/Table/Table.hooks.ts","../src/hooks/useDebounce.hook.ts"],"sourcesContent":["import styles from './Skeleton.module.css';\n\nexport const Skeleton = () => {\n return <div className={styles.skeleton} />;\n};\n","import React from 'react';\nimport styles from './Card.module.css';\nimport clsx from 'clsx';\n\ntype CardProps = React.HTMLAttributes<HTMLDivElement> & {\n children?: React.ReactNode;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div className={clsx(styles.card, className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCard.displayName = 'Card';\n\ntype CardHeaderProps = {\n title?: string;\n subtitle?: string;\n rightContent?: React.ReactNode;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle, rightContent }) => {\n if (!title && !subtitle && !rightContent) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n <div className={styles.leftContent}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n {rightContent}\n </div>\n );\n};\n\ntype CardContentProps = {\n children: React.ReactNode;\n};\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ children }, ref) => {\n return (\n <div className={styles.cardContent} ref={ref}>\n {children}\n </div>\n );\n },\n);\n\nCardContent.displayName = 'CardContent';\n","import { IconProps } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: React.ComponentType<IconProps>;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport styles from './Typography.module.css';\nimport clsx from 'clsx';\n\ntype TypographyElement = 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'div';\n\ntype TypographyProps = {\n children: React.ReactNode;\n as?: TypographyElement;\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n};\n\nexport function Typography({\n children,\n as: Component = 'p',\n className,\n style,\n title,\n}: TypographyProps): React.JSX.Element {\n return (\n <Component title={title} className={clsx(styles.typography, className)} style={style}>\n {children}\n </Component>\n );\n}\n","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC } from 'react';\n\nexport type DropdownProps = {\n triggerComponent: React.ReactNode;\n children: React.ReactNode;\n disabled?: boolean;\n open?: boolean;\n side?: React.ComponentProps<typeof DropdownMenu.Content>['side'];\n align?: React.ComponentProps<typeof DropdownMenu.Content>['align'];\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n triggerComponent,\n children,\n disabled,\n open,\n side = 'bottom',\n align = 'start',\n onOpenChange,\n}) => {\n return (\n <DropdownMenu.Root open={open} onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger asChild disabled={disabled}>\n {triggerComponent}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content side={side} align={align} style={{ zIndex: 5 }}>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC, ImgHTMLAttributes, SVGProps } from 'react';\nimport styles from './SelectFieldOption.module.css';\nimport clsx from 'clsx';\n\ntype SelectListOptionIcon =\n | React.ReactElement<SVGProps<SVGSVGElement>>\n | React.ReactElement<ImgHTMLAttributes<HTMLImageElement>>;\n\nexport type SelectListOptionProps = {\n value?: string;\n isSelected?: boolean;\n label: string;\n rightLabel?: string;\n startIcon?: SelectListOptionIcon;\n endIcon?: SelectListOptionIcon;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n};\nexport type SelectListOptionPropsWithCategory = SelectListOptionProps & {\n category: string;\n};\n\nexport const SelectListOption: FC<SelectListOptionProps> = ({\n value,\n isSelected,\n label,\n rightLabel,\n startIcon,\n endIcon,\n disabled,\n ...props\n}) => {\n return (\n <DropdownMenu.Item\n className={clsx(\n styles.selectFieldOption,\n disabled && styles.disabled,\n isSelected && styles.selected,\n )}\n data-value={value}\n {...props}\n >\n <span className={styles.leftContent}>\n {startIcon}\n <span title={label}>{label}</span>\n </span>\n <span className={styles.rightContent}>\n <span title={rightLabel}>{rightLabel}</span>\n {endIcon}\n </span>\n </DropdownMenu.Item>\n );\n};\n","import { IconProps } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import React from 'react';\nimport { Icon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './GhostButton.module.css';\n\ntype GhostButtonProps = {\n startIcon?: Icon;\n endIcon?: Icon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const GhostButton: React.FC<GhostButtonProps> = ({\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.ghostButton, className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import clsx from 'clsx';\nimport styles from './Overlay.module.css';\nimport { FC, ReactNode } from 'react';\n\ntype OverlayProps = {\n className?: string;\n children?: ReactNode;\n};\n\nexport const Overlay: FC<OverlayProps> = ({ className, children }) => {\n return <div className={clsx(styles.overlay, className)}>{children}</div>;\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: React.ComponentType<IconProps>;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconProps, IconX } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: React.ComponentType<IconProps>;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n fitContent?: boolean;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n fitContent = false,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div\n ref={containerRef}\n tabIndex={-1}\n className={clsx(styles.selectFieldContent, fitContent && styles.fitContent, className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import {\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from './SelectFieldOptions/SelectFieldOption/SelectFieldOption';\n\ntype GroupedOptions = {\n [category: string]: SelectListOptionPropsWithCategory[];\n};\n\nexport const groupOptionsByCategory = (\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[],\n): GroupedOptions | null => {\n const result = options.reduce<GroupedOptions>((acc, option) => {\n if ('category' in option && option.category) {\n const category = option.category;\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(option);\n }\n return acc;\n }, {});\n\n // Return null if no categories were found\n return Object.keys(result).length === 0 ? null : result;\n};\n","import { useEffect } from 'react';\n\nexport const useSelectSearchFocus = (\n isOpen: boolean,\n searchFieldRef: React.RefObject<HTMLInputElement | null>,\n) => {\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n (searchFieldRef.current as unknown as HTMLInputElement)?.focus();\n }, 100);\n }\n }, [isOpen, searchFieldRef]);\n};\n","import { FC } from 'react';\nimport styles from './SelectFieldCategory.module.css';\n\ntype SelectFieldCategoryProps = {\n label: string;\n};\n\nexport const SelectFieldCategory: FC<SelectFieldCategoryProps> = ({ label }) => {\n return <span className={styles.selectFieldCategory}>{label}</span>;\n};\n","import clsx from 'clsx';\nimport styles from './FieldFeedback.module.css';\nimport { FC } from 'react';\n\nexport type FieldFeedbackProps = {\n message: string;\n variant?: 'error';\n className?: string;\n};\n\nexport const FieldFeedback: FC<FieldFeedbackProps> = ({ message, variant, className }) => {\n return (\n <p className={clsx(styles.fieldFeedback, variant && styles[variant], className)}>{message}</p>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldHeader.module.css';\n\nexport type FieldHeaderProps = {\n className?: string;\n label?: string;\n required?: boolean;\n requiredLabel?: string;\n};\n\nexport const FieldHeader = ({\n label,\n required,\n requiredLabel = 'Required',\n className,\n}: FieldHeaderProps) => {\n if (!label && !required) {\n return null;\n }\n\n return (\n <label className={clsx(styles.fieldHeader, className)}>\n {label}\n {required && <span>{requiredLabel}</span>}\n </label>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n ({ value = '', placeholder = 'Enter text', maxLength, error, errorMessage, ...props }, ref) => {\n return (\n <>\n <InputField\n value={value}\n placeholder={placeholder}\n ref={ref}\n maxLength={maxLength}\n clearable\n error={error}\n errorMessage={errorMessage}\n {...props}\n />\n {maxLength && <FieldFeedback message={`${value?.length}/${maxLength} Characters`} />}\n </>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import { IconProps, IconX } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n let timer: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './Switch.module.css';\n\ntype SwitchProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n label?: string;\n};\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked,\n onChange,\n disabled = false,\n className,\n label,\n ...props\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled && onChange) {\n onChange(event.target.checked);\n }\n };\n\n // Ensure accessibility: either aria-label must be provided\n if (!props['aria-label']) {\n console.warn(\n 'Switch component requires either a label prop or aria-label prop for accessibility',\n );\n }\n\n return (\n <label\n className={clsx(\n className,\n styles.switch,\n checked && styles.checked,\n disabled && styles.disabled,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n {...props}\n />\n <span className={styles.switchTrack} aria-hidden=\"true\">\n <span className={styles.switchThumb} aria-hidden=\"true\" />\n </span>\n {label && <span className={clsx(styles.switchLabel)}>{label}</span>}\n </label>\n );\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: React.ComponentType<IconProps>;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\n\ntype NumberFieldProps = Omit<InputFieldProps, 'value' | 'onChange'> & {\n value?: number | null;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (value: number | null) => void;\n};\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (\n {\n value = null,\n placeholder = 'Enter number',\n onChange,\n error,\n errorMessage,\n clearable,\n ...props\n },\n ref,\n ) => {\n const handleChange = (value: string) => {\n if (value === '') {\n onChange?.(null);\n return;\n }\n\n const numericValue = Number(value);\n if (!isNaN(numericValue) && isFinite(numericValue)) {\n onChange?.(numericValue);\n }\n };\n\n return (\n <InputField\n {...props}\n value={value?.toString() || ''}\n placeholder={placeholder}\n onChange={handleChange}\n type=\"number\"\n clearable={clearable}\n error={error}\n errorMessage={errorMessage}\n ref={ref}\n />\n );\n },\n);\n\nNumberField.displayName = 'NumberField';\n","import React, { useState } from 'react';\nimport { DateRange, DayPicker } from 'react-day-picker';\nimport './DateRangePicker.css';\nimport { DateRangePickerChevron } from './DateRangePickerChevron';\nimport { endOfDayUTC } from '../../../../utils/date.utils';\nimport * as rdpLocales from 'react-day-picker/locale';\n\nexport type DateRangePickerProps = {\n numberOfMonths?: number;\n locale?: string;\n value?: DateRange;\n onChange: (dateRange: DateRange | undefined) => void;\n};\n\nexport const DateRangePicker: React.FC<DateRangePickerProps> = ({\n value,\n numberOfMonths = 1,\n locale = 'en',\n onChange,\n}) => {\n const [month, setMonth] = useState<Date>(value?.from ?? new Date());\n\n const handleChange = (range: DateRange | undefined) => {\n if (range?.to) {\n range.to = endOfDayUTC(range.to);\n }\n onChange(range);\n };\n\n return (\n <DayPicker\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={numberOfMonths}\n components={{ Chevron: DateRangePickerChevron }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n locale={(rdpLocales as Record<string, any>)[locale]}\n mode=\"range\"\n navLayout=\"around\"\n onSelect={handleChange}\n selected={value}\n timeZone=\"UTC\"\n showOutsideDays\n />\n );\n};\n","import { IconCaretDownFilled } from '@tabler/icons-react';\nimport styles from './DateRangePickerChevron.module.css';\n\ntype DateRangePickerChevronProps = {\n className?: string;\n orientation?: 'up' | 'down' | 'left' | 'right';\n};\n\nexport const DateRangePickerChevron = ({\n orientation,\n}: DateRangePickerChevronProps): React.JSX.Element => {\n const rotation =\n orientation === 'left'\n ? 'rotate(90deg)'\n : orientation === 'right'\n ? 'rotate(-90deg)'\n : undefined;\n\n return (\n <button\n className={styles.chevron}\n style={{\n transform: rotation,\n }}\n >\n <IconCaretDownFilled />\n </button>\n );\n};\n","import { DateRange } from 'react-day-picker';\n\nexport const isSameDate = (a?: Date, b?: Date) => a?.getTime() === b?.getTime();\n\nexport const isSameDateRange = (a?: DateRange, b?: DateRange) =>\n isSameDate(a?.from, b?.from) && isSameDate(a?.to, b?.to);\n\nexport const endOfDayUTC = (date: Date) => {\n const d = new Date(date);\n d.setUTCHours(23, 59, 59, 999);\n return d;\n};\n","import { FC, useState } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../../selects/shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { IconProps } from '@tabler/icons-react';\nimport { SelectFieldContent } from '../../selects/shared/SelectFieldContent/SelectFieldContent';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { DateRangePicker, DateRangePickerProps } from '../DateRangePicker/DateRangePicker';\nimport { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './DateRangePickerField.module.css';\nimport { isSameDateRange } from '../../../../utils/date.utils';\n\ntype DateRangePickerFieldProps = {\n displayValue?: string;\n startIcon?: React.ComponentType<IconProps>;\n placeholder?: string;\n disabled?: boolean;\n error?: boolean;\n errorMessage?: string;\n clearable?: boolean;\n onChange: (dateRange: DateRange | undefined) => void;\n submitLabel?: string;\n} & FieldHeaderProps &\n DateRangePickerProps;\n\nconst getDateRangePickerLabel = (dateRange: DateRange | undefined, displayValue?: string) => {\n if (dateRange === undefined) return undefined;\n\n if (displayValue) return displayValue;\n\n const { from, to } = dateRange;\n\n if (!from || !to) return undefined;\n\n return `${from ? from.toLocaleDateString() : ''} - ${to ? to.toLocaleDateString() : ''}`;\n};\n\nexport const DateRangePickerField: FC<DateRangePickerFieldProps> = ({\n locale,\n displayValue,\n value,\n startIcon,\n label,\n disabled,\n placeholder,\n required,\n error,\n errorMessage,\n clearable,\n numberOfMonths = 1,\n submitLabel = 'Apply',\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [currentDateRange, setCurrentDateRange] = useState<DateRange | undefined>(value);\n\n const valueLabel = getDateRangePickerLabel(value, displayValue);\n const hasError = error || !!errorMessage;\n\n const handleChange = () => {\n onChange(currentDateRange);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setCurrentDateRange(undefined);\n onChange(undefined);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setIsOpen(true);\n return;\n }\n setCurrentDateRange(value);\n setIsOpen(false);\n };\n\n const isSubmitDisabled = isSameDateRange(currentDateRange, value);\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={valueLabel}\n onClear={handleClear}\n isClearable={clearable}\n error={hasError}\n />\n }\n >\n <SelectFieldContent fitContent>\n <DateRangePicker\n locale={locale}\n numberOfMonths={numberOfMonths}\n value={currentDateRange}\n onChange={setCurrentDateRange}\n />\n <Button\n size=\"small\"\n className={styles.submitButton}\n onClick={handleChange}\n disabled={isSubmitDisabled}\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartJSOrUndefined } from 'react-chartjs-2/dist/types';\n\nexport const getSegmentIndexClicked = (\n event: React.MouseEvent<HTMLCanvasElement>,\n chartRef: React.RefObject<ChartJSOrUndefined | null>,\n): number | undefined => {\n const chart = chartRef.current;\n\n if (!chart) return undefined;\n\n const points = chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false,\n );\n\n return points[0]?.index;\n};\n","import { StylesKeys } from './styles.constants';\n\n/**\n * Attempts to interpret a CSS variable as a number (for lengths)\n * or a string (for colors, etc.).\n *\n * Examples:\n * --var: 2rem -> returns number (px)\n * --var: 16px -> returns number\n * --var: 3 -> returns number (parsed float)\n * --var: #3498db -> returns string\n * --var: rgba(52, 152, 219, 0.8) -> returns string\n */\nconst numericRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst getStyleValue = (variableName: StylesKeys): string => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n const computedStyle = getComputedStyle(document.documentElement);\n return computedStyle.getPropertyValue(variableName).trim();\n};\n\nexport const getStyle = (variableName: StylesKeys, fallbackValue?: string): string => {\n const rawValue = getStyleValue(variableName);\n if (!rawValue) return fallbackValue ?? rawValue;\n\n // Colors\n const firstChar = rawValue.charAt(0);\n if (firstChar === '#' || rawValue.startsWith('rgb(') || rawValue.startsWith('rgba(')) {\n return rawValue;\n }\n\n // Others like font-family\n return rawValue;\n};\n\nexport const getStyleNumber = (\n variableName: StylesKeys,\n fallbackValue?: string,\n): number | undefined => {\n const rawValue = getStyleValue(variableName) || fallbackValue;\n\n if (!rawValue) return undefined;\n\n const numericValue = parseFloat(rawValue);\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n // Px\n if (rawValue.slice(-2) === 'px') {\n return numericValue;\n }\n\n // Rem/Em\n const unit3 = rawValue.slice(-3);\n if (unit3 === 'rem') {\n return numericValue * rootFontSize;\n }\n\n // Pure number\n if (numericRegex.test(rawValue)) {\n return numericValue;\n }\n return undefined;\n};\n","import { getStyle } from '../../styles/styles.utils';\n\nexport const getChartColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--5'),\n getStyle('--em-sem-chart-color--6'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--8'),\n getStyle('--em-sem-chart-color--9'),\n getStyle('--em-sem-chart-color--10'),\n];\n\nexport const getChartContrastColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--10'),\n];\n","import { ChartData, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptions,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n const chartContrastColors = getChartContrastColors();\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n grid: {\n display: true,\n color: getChartjsAxisOptionsScalesGridColor,\n },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: { display: false },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-barchart-border-radius', '0.375rem'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(getChartjsAxisOptions(), baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { CartesianTickOptions, ChartOptions, GridLineOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { getChartjsOptions } from './chartjs.constants';\n\nexport const getChartjsAxisOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n labels: {\n total: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n value: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksDefault = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksMuted = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color--muted', '#5C5C66'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesTitle = (): any => ({\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-grid-title-font-weight', '700'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesGrid = (): Partial<GridLineOptions> => ({\n color: getStyle('--em-chart-grid-line-color--light', '#EDEDF1'),\n lineWidth: getStyleNumber('--em-chart-grid-line-width--thin', '0.0625rem'),\n});\n\nexport const getChartjsAxisOptionsScales = (): Partial<ChartOptions['scales']> => ({\n x: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n },\n y: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n },\n});\n\nexport const getChartjsAxisOptions = (): Partial<ChartOptions> =>\n mergician(getChartjsOptions(), {\n plugins: getChartjsAxisOptionsPlugins(),\n scales: getChartjsAxisOptionsScales(),\n });\n\nexport const chartjsAxisOptionsLayoutPadding: number = 30;\n\nfunction isMixedValues(values: number[]): boolean {\n const hasPos = values.some((v) => v > 0);\n const hasNeg = values.some((v) => v < 0);\n return hasPos && hasNeg;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesGridColor = (ctx: any) => {\n if (ctx.tick.value === 0) {\n if (ctx.chart.data.datasets.length === 0) {\n return undefined;\n }\n\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartContrastColors = getChartContrastColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\nimport { AutoTextSize } from 'auto-text-size';\nimport ConditionalWrapper from '../../shared/ConditionalWrapper/ConditionalWrapper';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n trendFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n noPreviousDataLabel = 'No previous data',\n valueFormatter,\n}) => {\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n const autoResizeValueFontSize = !valueFontSize;\n return (\n <div className={styles.kpiChartContainer}>\n <div className={styles.kpiChartValueContainer}>\n <ConditionalWrapper\n condition={autoResizeValueFontSize}\n wrapper={(children) => (\n <AutoTextSize mode=\"boxoneline\" minFontSizePx={1} maxFontSizePx={999}>\n {children}\n </AutoTextSize>\n )}\n >\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize,\n }}\n >\n {displayValue}\n </h2>\n </ConditionalWrapper>\n </div>\n\n <div className={styles.kpiComparisonContainer} style={{ fontSize: trendFontSize }}>\n <div style={{ visibility: hasComparisonValue ? 'visible' : 'hidden' }}>\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n noPreviousDataLabel={noPreviousDataLabel}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n noPreviousDataLabel,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n const showNoPreviousData = showChangeAsPercentage && Number(comparisonValue) === 0;\n\n return (\n <div className={styles.kpiChangeContainerSizeGuide}>\n {/* This is responsible to setting the size of the container */}\n <div className={clsx(styles.kpiChartChangeContainer, styles.hidden)}>\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n <span className={styles.kpiComparisonLabel}>{comparisonLabel}</span>\n </div>\n {/* This is responsible for displaying the content on the available size of the container */}\n <div className={styles.kpiAbsoluteContainer}>\n <div className={styles.kpiChartChangeContainer}>\n {showNoPreviousData ? (\n <span className={styles.kpiComparisonLabel}>{noPreviousDataLabel}</span>\n ) : (\n <>\n {!equalComparison && (\n <span\n className={clsx(\n styles.kpiChangeBadge,\n getChangeClass(isPositive, invertChangeColors),\n )}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n","type ConditionalWrapperProps = {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n};\n\nconst ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : <>{children}</>;\n\nexport default ConditionalWrapper;\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport { useResizeObserver } from '../../../../hooks/useResizeObserver.hook';\n\nconst MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const containerRef = useRef(null);\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n const { height, width } = useResizeObserver(containerRef, 0);\n\n const hideChart =\n height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;\n\n return (\n <div className={styles.chartContainer} ref={containerRef}>\n {hideChart ? null : (\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n )}\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(\n elRef: React.RefObject<T | null>,\n timeout = 100,\n): Size => {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateSize = (rect: DOMRectReadOnly | DOMRect) => {\n setSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n });\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n updateSize(entry.contentRect);\n }, timeout);\n });\n\n ro.observe(el);\n\n // initial size\n updateSize(el.getBoundingClientRect());\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef, timeout]);\n\n return size;\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import * as React from 'react';\nimport styles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { TablePagination } from './components/TablePagination/TablePagination';\nimport { TableHeader } from './components/TableHeader/TableHeader';\nimport { TableBody } from './components/TableBody/TableBody';\nimport { TablePaginatedProps } from './table.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TablePaginated = React.forwardRef<HTMLDivElement, TablePaginatedProps<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <T extends Record<string, any>>(\n props: TablePaginatedProps<T>,\n ref: React.Ref<HTMLDivElement>,\n ): React.JSX.Element => {\n const {\n headers,\n rows,\n className,\n total,\n page,\n pageSize,\n paginationLabel,\n sort,\n showIndex = false,\n onRowIndexClick,\n onPageChange,\n onSortChange,\n } = props;\n\n return (\n <div ref={ref} className={clsx(styles.tableContainer, className)}>\n <div className={styles.tableContainerScroll}>\n <table className={styles.table}>\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n <TableBody\n onRowIndexClick={onRowIndexClick}\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n page={page}\n pageSize={pageSize}\n />\n </table>\n </div>\n <TablePagination\n page={page}\n pageSize={pageSize}\n paginationLabel={paginationLabel}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n },\n);\n\nTablePaginated.displayName = 'TablePaginated';\n","import {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n} from '@tabler/icons-react';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport styles from './TablePagination.module.css';\nimport { FC, useEffect } from 'react';\nimport { TablePaginatedProps } from '../../table.types';\n\nexport type TablePaginationProps = Pick<\n TablePaginatedProps<unknown>,\n 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'\n>;\n\nexport const getTableTotalPages = (\n total: number | undefined,\n pageSize: number,\n): number | undefined => {\n return total ? Math.ceil(total / pageSize) : undefined;\n};\n\nexport const TablePagination: FC<TablePaginationProps> = ({\n page,\n pageSize,\n paginationLabel,\n total,\n onPageChange,\n}) => {\n const totalPages = getTableTotalPages(total, pageSize);\n\n const disabledPrev = page <= 0;\n const disabledNext = !totalPages || page >= totalPages - 1;\n\n useEffect(() => {\n if (totalPages && page >= totalPages) {\n onPageChange(0);\n }\n }, [totalPages, page]);\n\n return (\n <div className={styles.tablePagination} aria-label=\"Table pagination controls\">\n <div className={styles.tablePaginationCentral}>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronsLeft}\n onClick={() => {\n onPageChange(0);\n }}\n disabled={disabledPrev}\n aria-label=\"First page\"\n />\n <ActionIcon\n icon={IconChevronLeft}\n onClick={() => {\n onPageChange(page - 1);\n }}\n disabled={disabledPrev}\n aria-label=\"Previous page\"\n />\n </div>\n <span>{paginationLabel ?? `Page ${page + 1} of ${totalPages ?? '?'}`}</span>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronRight}\n onClick={() => {\n onPageChange(page + 1);\n }}\n disabled={disabledNext}\n aria-label=\"Next page\"\n />\n <ActionIcon\n icon={IconChevronsRight}\n onClick={() => totalPages && onPageChange(totalPages - 1)}\n disabled={disabledNext}\n aria-label=\"Last page\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TablePaginatedProps, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\n\nexport type TableHeaderProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'sort' | 'onSortChange'\n>;\n\nconst getHeaderAriaSort = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id ? (sort.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n};\n\nconst getHeaderAriaLabel = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id\n ? sort.direction === 'asc'\n ? `Sort by ${header.title}, currently ascending. Activate to sort descending.`\n : `Sort by ${header.title}, currently descending. Activate to sort ascending.`\n : `Sort by ${header.title}. Activate to sort ascending.`;\n};\nexport const TableHeader = <T,>({\n headers,\n sort,\n showIndex,\n onSortChange,\n}: TableHeaderProps<T>) => {\n const getSortIcon = (header: TableHeaderItem<T>) => {\n if (!sort) return <IconCaretUpDownFilled />;\n\n if (sort.id === header.id) {\n if (sort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (sort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleSort = (id: keyof T) => {\n if (!onSortChange) return;\n\n if (!sort) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n if (sort) {\n // New sort\n if (sort.id !== id) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n // Toggle sort direction\n if (sort.direction === TableSortDirection.ASC) {\n return onSortChange({ id, direction: TableSortDirection.DESC });\n } else if (sort.direction === TableSortDirection.DESC) {\n return onSortChange(undefined); // Remove sort after DESC\n }\n }\n };\n\n return (\n <thead className={styles.tableHeader}>\n <tr>\n {showIndex && (\n <th className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>#</th>\n )}\n {headers.map((header) => (\n <th\n className={styles.tableHeaderCell}\n key={header.id as string}\n style={{ minWidth: header.minWidth }}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(sort, header)}\n >\n <button\n onClick={() => handleSort(header.id)}\n aria-label={getHeaderAriaLabel(sort, header)}\n >\n {header.title}\n {getSortIcon(header)}\n </button>\n </th>\n ))}\n </tr>\n </thead>\n );\n};\n","import { CssSize } from '../../../../types/css.types';\n\nexport const TableSortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\nexport type TableSort<T> = {\n id: keyof T;\n direction: (typeof TableSortDirection)[keyof typeof TableSortDirection];\n};\nexport const TableHeaderAlign = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\n\nexport type TableHeaderItemAlign = (typeof TableHeaderAlign)[keyof typeof TableHeaderAlign];\n\nexport type TableHeaderCell = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => React.ReactElement<HTMLTableCellElement>;\n\nexport type TableHeaderItem<T> = {\n id: keyof T;\n title: React.ReactNode;\n align?: TableHeaderItemAlign;\n field?: keyof T;\n minWidth?: CssSize;\n sort?: TableSort<T>;\n accessor?: (row: T) => React.ReactNode;\n cell?: TableHeaderCell;\n};\n\nexport type TablePaginatedProps<T> = {\n showIndex?: boolean;\n className?: string;\n headers: TableHeaderItem<T>[];\n rows: T[];\n page: number;\n pageSize: number;\n paginationLabel?: string;\n total?: number;\n sort?: TableSort<T>;\n onRowIndexClick?: (rowIndex: number) => void;\n onPageChange: (page: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n","import styles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TablePaginatedProps } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'pageSize' | 'page' | 'onRowIndexClick'\n>;\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n}: TableBodyProps<T>) => {\n return (\n <tbody className={styles.tableBody}>\n {rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n onClick={() => onRowIndexClick?.(rowIndex)}\n className={clsx(rowIndex === rows.length - 1 && tableStyles.tableLastRow)}\n >\n {showIndex && (\n <td className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>\n {pageSize * page + rowIndex + 1}\n </td>\n )}\n {headers.map((header, cellIndex) => (\n <TableBodyCell\n key={cellIndex}\n header={header}\n row={row}\n rowIndex={rowIndex}\n cellIndex={cellIndex}\n />\n ))}\n </tr>\n ))}\n </tbody>\n );\n};\n\ntype TableBodyCellProps<T> = {\n header: TableHeaderItem<T>;\n row: T;\n rowIndex: number;\n cellIndex: number;\n};\n\nconst TableBodyCell = <T,>({ header, row, rowIndex, cellIndex }: TableBodyCellProps<T>) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const value =\n header.accessor !== undefined\n ? header.accessor(row)\n : header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: styles.tableBodyCell });\n }\n\n const handleCopy = () => {\n setIsPressedCopy(true);\n if (value !== undefined) {\n navigator.clipboard.writeText(String(value));\n }\n };\n\n return (\n <td\n key={`${rowIndex}-${cellIndex}`}\n title={value}\n style={{ textAlign: header.align }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n styles.copyButton,\n header.align === TableHeaderAlign.RIGHT && styles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {value}\n </td>\n );\n};\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue != null) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue != null) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(String(row))?.get(String(columnValue)) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(String(row)) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","export const getTableCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : 'unset',\n maxWidth: width ? `${width}px` : 'unset',\n width: width ? `${width}px` : 'unset',\n };\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import { getStyle } from '../../../../styles/styles.utils';\nimport { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value))\n return getStyle('--em-tablechart-cell-background', '#fff');\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor: string;\n midColor: string;\n maxColor: string;\n}) => {\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","import { useMemo } from 'react';\n\ntype UseTableGetRowsPerPageProps = {\n availableHeight: number;\n headerHeight: number;\n rowHeight: number;\n footerHeight?: number;\n};\nexport const useTableGetRowsPerPage = ({\n availableHeight,\n headerHeight,\n rowHeight,\n footerHeight = 0,\n}: UseTableGetRowsPerPageProps): number =>\n useMemo(() => {\n const h = availableHeight;\n if (!h) return 0;\n\n // Available vertical space for BODY rows only\n let available = h - headerHeight - footerHeight;\n if (available < 0) available = 0;\n\n // DO NOT show partial rows: floor only\n const rows = Math.floor(available / rowHeight);\n return Math.max(0, rows);\n }, [availableHeight, headerHeight, rowHeight, footerHeight]);\n","import { useRef, useEffect, useCallback } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout>(null);\n const fnRef = useRef(fn);\n\n // Always keep fn up to date without resetting timer\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n fnRef.current(...args);\n }, delay);\n },\n [delay],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return debouncedFn;\n}\n"],"mappings":"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","names":["styles","styles","jsx","clsx","styles","jsx","jsxs","styles","clsx","jsx","clsx","styles","jsx","clsx","styles","jsx","jsx","jsxs","DropdownMenu","styles","clsx","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","Fragment","useEffect","useRef","styles","clsx","jsx","jsxs","styles","clsx","jsx","styles","useEffect","styles","jsx","clsx","styles","jsx","clsx","styles","jsx","jsxs","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","jsxs","forwardRef","jsx","jsxs","useRef","useEffect","styles","Fragment","clsx","styles","jsx","jsxs","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","forwardRef","jsx","forwardRef","value","useState","IconCaretDownFilled","styles","jsx","jsx","useState","useState","styles","jsx","jsxs","useState","styles","useRef","mergician","mergician","styles","mergician","jsx","useRef","ChartJS","CategoryScale","LinearScale","Title","Tooltip","Legend","LogarithmicScale","styles","useRef","mergician","mergician","mergician","ChartDataLabels","jsx","ChartJS","CategoryScale","LinearScale","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","useRef","mergician","styles","styles","styles","clsx","Fragment","jsx","jsxs","Fragment","jsx","jsx","jsxs","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","useRef","useState","jsx","ChartJS","Tooltip","Legend","ChartDataLabels","AnnotationPlugin","useRef","mergician","styles","useRef","Pie","ArcElement","ChartJS","Legend","Tooltip","ChartDataLabels","mergician","styles","AnnotationPlugin","jsx","ChartJS","ArcElement","Tooltip","Legend","ChartDataLabels","useRef","Pie","React","styles","clsx","styles","useEffect","jsx","jsxs","IconCaretDownFilled","styles","clsx","jsx","jsxs","IconCaretDownFilled","styles","styles","clsx","useState","tableStyles","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","useEffect","useMemo","useState","tableStyles","clsx","jsx","jsxs","useMemo","useState","useEffect","clsx","tableStyles","useMemo","tableStyles","clsx","hex","jsx","jsxs","useMemo","clsx","tableStyles","useMemo","useRef","useEffect","useCallback"]}
1
+ {"version":3,"sources":["../src/components/shared/Skeleton/Skeleton.tsx","../src/components/shared/Card/Card.tsx","../src/components/shared/Card/CardFeedback/CardFeedback.tsx","../src/components/shared/Typography/Typography.tsx","../src/components/shared/ActionIcon/ActionIcon.tsx","../src/components/shared/ButtonIcon/ButtonIcon.tsx","../src/components/shared/Dropdown/Dropdown.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/GhostButton/GhostButton.tsx","../src/components/shared/Overlay/Overlay.tsx","../src/components/editors/selects/MultiSelectField/MultiSelectField.tsx","../src/components/editors/selects/shared/SelectFieldTrigger/SelectFieldTrigger.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.tsx","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.ts","../src/components/editors/selects/shared/useSelectSearchFocus.hook.ts","../src/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.tsx","../src/components/shared/Field/FieldFeedback.tsx","../src/components/shared/Field/FieldHeader.tsx","../src/components/editors/inputs/TextField/TextField.tsx","../src/components/editors/inputs/shared/InputField/InputField.tsx","../src/utils/debounce.utils.ts","../src/components/editors/Switch/Switch.tsx","../src/components/editors/selects/SingleSelectField/SingleSelectField.tsx","../src/components/editors/inputs/NumberField/NumberField.tsx","../src/components/editors/dates/DateRangePicker/DateRangePicker.tsx","../src/components/editors/dates/DateRangePicker/DateRangePickerChevron.tsx","../src/utils/date.utils.ts","../src/components/editors/dates/DateRangePickerField/DateRangePickerField.tsx","../src/components/charts/bars/BarChart.tsx","../src/components/charts/chartjs.utils.ts","../src/styles/styles.utils.ts","../src/components/charts/charts.constants.ts","../src/components/charts/bars/bars.utils.ts","../src/components/charts/chartjs.cartesian.constants.ts","../src/components/charts/chartjs.constants.ts","../src/components/charts/lines/LineChart.tsx","../src/components/charts/lines/lines.utils.ts","../src/components/charts/kpis/KpiChart.tsx","../src/components/charts/kpis/components/KpiChartChange.tsx","../src/components/shared/ConditionalWrapper/ConditionalWrapper.tsx","../src/components/charts/pies/DonutChart/DonutChart.tsx","../src/components/charts/pies/pies.utils.ts","../src/hooks/useResizeObserver.hook.ts","../src/components/charts/pies/PieChart/PieChart.tsx","../src/components/charts/tables/Table/TablePaginated.tsx","../src/components/charts/tables/Table/components/TablePagination/TablePagination.tsx","../src/components/charts/tables/Table/components/TableHeader/TableHeader.tsx","../src/components/charts/tables/Table/table.types.ts","../src/components/charts/tables/Table/components/TableBody/TableBody.tsx","../src/components/charts/tables/PivotTable/PivotTable.tsx","../src/components/charts/tables/tables.utils.ts","../src/components/charts/tables/HeatMap/HeatMap.tsx","../src/components/charts/tables/HeatMap/HeatMap.utils.ts","../src/components/charts/tables/Table/Table.hooks.ts","../src/utils/object.utils.ts","../src/hooks/useDebounce.hook.ts"],"sourcesContent":["import styles from './Skeleton.module.css';\n\nexport const Skeleton = () => {\n return <div className={styles.skeleton} />;\n};\n","import React from 'react';\nimport styles from './Card.module.css';\nimport clsx from 'clsx';\n\ntype CardProps = React.HTMLAttributes<HTMLDivElement> & {\n children?: React.ReactNode;\n};\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div className={clsx(styles.card, className)} ref={ref} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCard.displayName = 'Card';\n\ntype CardHeaderProps = {\n title?: string;\n subtitle?: string;\n rightContent?: React.ReactNode;\n};\n\nexport const CardHeader: React.FC<CardHeaderProps> = ({ title, subtitle, rightContent }) => {\n if (!title && !subtitle && !rightContent) {\n return null;\n }\n\n return (\n <div className={styles.cardHeader}>\n <div className={styles.leftContent}>\n {title && <h1>{title}</h1>}\n {subtitle && <p>{subtitle}</p>}\n </div>\n {rightContent}\n </div>\n );\n};\n\ntype CardContentProps = {\n children: React.ReactNode;\n};\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ children }, ref) => {\n return (\n <div className={styles.cardContent} ref={ref}>\n {children}\n </div>\n );\n },\n);\n\nCardContent.displayName = 'CardContent';\n","import { IconProps } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './CardFeedback.module.css';\n\ntype CardFeedbackProps = {\n className?: string;\n icon?: React.ComponentType<IconProps>;\n title: string;\n message: string;\n variant?: 'error' | 'info';\n};\n\nexport const CardFeedback: React.FC<CardFeedbackProps> = ({\n icon: Icon,\n title,\n message,\n className,\n variant = 'info',\n}) => {\n return (\n <div className={clsx(styles.feedback, styles[variant], className)}>\n {Icon && <Icon />}\n <h2>{title}</h2>\n <p>{message}</p>\n </div>\n );\n};\n","import React from 'react';\nimport styles from './Typography.module.css';\nimport clsx from 'clsx';\n\ntype TypographyElement = 'p' | 'span' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'label' | 'div';\n\ntype TypographyProps = {\n children: React.ReactNode;\n as?: TypographyElement;\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n};\n\nexport function Typography({\n children,\n as: Component = 'p',\n className,\n style,\n title,\n}: TypographyProps): React.JSX.Element {\n return (\n <Component title={title} className={clsx(styles.typography, className)} style={style}>\n {children}\n </Component>\n );\n}\n","import clsx from 'clsx';\nimport React from 'react';\nimport styles from './ActionIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ActionIconProps = {\n className?: string;\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ActionIcon: React.FC<ActionIconProps> = ({ icon: Icon, className, ...props }) => {\n return (\n <button className={clsx(styles.actionIcon, className)} {...props}>\n <Icon className={styles.icon} />\n </button>\n );\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './ButtonIcon.module.css';\nimport { IconProps } from '@tabler/icons-react';\n\ntype ButtonIconProps = {\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium';\n icon: React.ComponentType<IconProps>;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ButtonIcon: React.FC<ButtonIconProps> = ({\n icon: Icon,\n size = 'medium',\n variant = 'primary',\n className,\n ...props\n}) => {\n return (\n <button\n className={clsx(styles.buttonIcon, styles[variant], styles[size], className)}\n {...props}\n >\n <Icon />\n </button>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC } from 'react';\n\nexport type DropdownProps = {\n triggerComponent: React.ReactNode;\n children: React.ReactNode;\n disabled?: boolean;\n open?: boolean;\n side?: React.ComponentProps<typeof DropdownMenu.Content>['side'];\n align?: React.ComponentProps<typeof DropdownMenu.Content>['align'];\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n triggerComponent,\n children,\n disabled,\n open,\n side = 'bottom',\n align = 'start',\n onOpenChange,\n}) => {\n return (\n <DropdownMenu.Root open={open} onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger asChild disabled={disabled}>\n {triggerComponent}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content side={side} align={align} style={{ zIndex: 5 }}>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n","import * as DropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { FC, ImgHTMLAttributes, SVGProps } from 'react';\nimport styles from './SelectFieldOption.module.css';\nimport clsx from 'clsx';\n\ntype SelectListOptionIcon =\n | React.ReactElement<SVGProps<SVGSVGElement>>\n | React.ReactElement<ImgHTMLAttributes<HTMLImageElement>>;\n\nexport type SelectListOptionProps = {\n value?: string;\n isSelected?: boolean;\n label: string;\n rightLabel?: string;\n startIcon?: SelectListOptionIcon;\n endIcon?: SelectListOptionIcon;\n disabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n};\nexport type SelectListOptionPropsWithCategory = SelectListOptionProps & {\n category: string;\n};\n\nexport const SelectListOption: FC<SelectListOptionProps> = ({\n value,\n isSelected,\n label,\n rightLabel,\n startIcon,\n endIcon,\n disabled,\n ...props\n}) => {\n return (\n <DropdownMenu.Item\n className={clsx(\n styles.selectFieldOption,\n disabled && styles.disabled,\n isSelected && styles.selected,\n )}\n data-value={value}\n {...props}\n >\n <span className={styles.leftContent}>\n {startIcon}\n <span title={label}>{label}</span>\n </span>\n <span className={styles.rightContent}>\n <span title={rightLabel}>{rightLabel}</span>\n {endIcon}\n </span>\n </DropdownMenu.Item>\n );\n};\n","import { IconProps } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport clsx from 'clsx';\n\ntype ButtonProps = {\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n children: string;\n size?: 'small' | 'medium';\n variant?: 'primary' | 'secondary';\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n variant = 'primary',\n size = 'medium',\n startIcon: StartIcon,\n endIcon: EndIcon,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.button, styles[variant], styles[size], className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import React from 'react';\nimport { Icon } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport styles from './GhostButton.module.css';\n\ntype GhostButtonProps = {\n startIcon?: Icon;\n endIcon?: Icon;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const GhostButton: React.FC<GhostButtonProps> = ({\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n className,\n ...props\n}) => {\n return (\n <button className={clsx(styles.ghostButton, className)} {...props}>\n {StartIcon && <StartIcon />}\n <span>{children}</span>\n {EndIcon && <EndIcon />}\n </button>\n );\n};\n","import clsx from 'clsx';\nimport styles from './Overlay.module.css';\nimport { FC, ReactNode } from 'react';\n\ntype OverlayProps = {\n className?: string;\n children?: ReactNode;\n};\n\nexport const Overlay: FC<OverlayProps> = ({ className, children }) => {\n return <div className={clsx(styles.overlay, className)}>{children}</div>;\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from '../selects.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type MultiSelectFieldProps = {\n startIcon?: React.ComponentType<IconProps>;\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n startIcon,\n label,\n required,\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? (\n <IconSquareCheckFilled />\n ) : (\n <IconSquare />\n )\n }\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import styles from './SelectFieldTrigger.module.css';\nimport { IconCaretDownFilled, IconLoader2, IconProps, IconX } from '@tabler/icons-react';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\ntype SelectFieldTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n startIcon?: React.ComponentType<IconProps>;\n valueLabel?: string;\n placeholder?: string;\n isClearable?: boolean;\n isLoading?: boolean;\n onClear?: () => void;\n error?: boolean;\n};\n\nexport const SelectFieldTrigger = forwardRef<HTMLButtonElement, SelectFieldTriggerProps>(\n (\n {\n startIcon: StartIcon,\n valueLabel,\n placeholder = 'Select',\n isClearable,\n isLoading,\n onClear,\n error = false,\n ...props\n },\n ref,\n ) => {\n const displayValue = valueLabel || placeholder;\n\n const showClearButton = valueLabel && isClearable;\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onClear?.();\n };\n\n return (\n <button\n ref={ref}\n className={clsx(\n styles.selectFieldTrigger,\n valueLabel && styles.filled,\n error && styles.error,\n )}\n {...props}\n >\n {StartIcon && <StartIcon />}\n <span>{displayValue}</span>\n {showClearButton && <IconX onPointerDown={handleClear} />}\n {isLoading ? <IconLoader2 className={styles.loading} /> : <IconCaretDownFilled />}\n </button>\n );\n },\n);\n\nSelectFieldTrigger.displayName = 'SelectFieldTrigger';\n","import { FC, useEffect, useRef, ReactNode } from 'react';\nimport styles from './SelectFieldContent.module.css';\nimport clsx from 'clsx';\n\ntype SelectFieldContentProps = {\n children: ReactNode;\n autoFocus?: boolean;\n className?: string;\n fitContent?: boolean;\n};\n\nexport const SelectFieldContent: FC<SelectFieldContentProps> = ({\n children,\n autoFocus,\n className,\n fitContent = false,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const currentIndex = useRef(0);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const items = Array.from(\n container.querySelectorAll('[role=\"menuitem\"], [role=\"searchbox\"], button'),\n ) as HTMLElement[];\n\n const focusItem = (index: number) => {\n if (index >= 0 && index < items.length) {\n items[index]?.focus();\n currentIndex.current = index;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (items.length === 0) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n focusItem((currentIndex.current + 1) % items.length);\n break;\n case 'ArrowUp':\n e.preventDefault();\n focusItem((currentIndex.current - 1 + items.length) % items.length);\n break;\n case 'Home':\n e.preventDefault();\n focusItem(0);\n break;\n case 'End':\n e.preventDefault();\n focusItem(items.length - 1);\n break;\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n\n if (autoFocus) {\n setTimeout(() => {\n currentIndex.current = 0;\n focusItem(0);\n }, 0);\n }\n\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n };\n }, [autoFocus, children]);\n\n return (\n <div\n ref={containerRef}\n tabIndex={-1}\n className={clsx(styles.selectFieldContent, fitContent && styles.fitContent, className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n\ntype SelectFieldContentListProps = {\n children: React.ReactNode;\n autoFocus?: boolean;\n className?: string;\n disabled?: boolean;\n};\n\nexport const SelectFieldContentList: FC<SelectFieldContentListProps> = ({ children, disabled }) => {\n return (\n <div className={clsx(styles.selectFieldContentList, disabled && styles.disabled)}>\n {children}\n </div>\n );\n};\n","import {\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from './SelectFieldOptions/SelectFieldOption/SelectFieldOption';\n\ntype GroupedOptions = {\n [category: string]: SelectListOptionPropsWithCategory[];\n};\n\nexport const groupOptionsByCategory = (\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[],\n): GroupedOptions | null => {\n const result = options.reduce<GroupedOptions>((acc, option) => {\n if ('category' in option && option.category) {\n const category = option.category;\n if (!acc[category]) {\n acc[category] = [];\n }\n acc[category].push(option);\n }\n return acc;\n }, {});\n\n // Return null if no categories were found\n return Object.keys(result).length === 0 ? null : result;\n};\n","import { useEffect } from 'react';\n\nexport const useSelectSearchFocus = (\n isOpen: boolean,\n searchFieldRef: React.RefObject<HTMLInputElement | null>,\n) => {\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => {\n (searchFieldRef.current as unknown as HTMLInputElement)?.focus();\n }, 100);\n }\n }, [isOpen, searchFieldRef]);\n};\n","import { FC } from 'react';\nimport styles from './SelectFieldCategory.module.css';\n\ntype SelectFieldCategoryProps = {\n label: string;\n};\n\nexport const SelectFieldCategory: FC<SelectFieldCategoryProps> = ({ label }) => {\n return <span className={styles.selectFieldCategory}>{label}</span>;\n};\n","import clsx from 'clsx';\nimport styles from './FieldFeedback.module.css';\nimport { FC } from 'react';\n\nexport type FieldFeedbackProps = {\n message: string;\n variant?: 'error';\n className?: string;\n};\n\nexport const FieldFeedback: FC<FieldFeedbackProps> = ({ message, variant, className }) => {\n return (\n <p className={clsx(styles.fieldFeedback, variant && styles[variant], className)}>{message}</p>\n );\n};\n","import clsx from 'clsx';\nimport styles from './FieldHeader.module.css';\n\nexport type FieldHeaderProps = {\n className?: string;\n label?: string;\n required?: boolean;\n requiredLabel?: string;\n};\n\nexport const FieldHeader = ({\n label,\n required,\n requiredLabel = 'Required',\n className,\n}: FieldHeaderProps) => {\n if (!label && !required) {\n return null;\n }\n\n return (\n <label className={clsx(styles.fieldHeader, className)}>\n {label}\n {required && <span>{requiredLabel}</span>}\n </label>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\n\nexport const TextField = forwardRef<HTMLInputElement, InputFieldProps>(\n ({ value = '', placeholder = 'Enter text', maxLength, error, errorMessage, ...props }, ref) => {\n return (\n <>\n <InputField\n value={value}\n placeholder={placeholder}\n ref={ref}\n maxLength={maxLength}\n clearable\n error={error}\n errorMessage={errorMessage}\n {...props}\n />\n {maxLength && <FieldFeedback message={`${value?.length}/${maxLength} Characters`} />}\n </>\n );\n },\n);\n\nTextField.displayName = 'TextField';\n","import { IconProps, IconX } from '@tabler/icons-react';\nimport styles from './InputField.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../../shared/Field/FieldHeader';\nimport { FieldFeedback } from '../../../../shared/Field/FieldFeedback';\n\nexport type InputFieldProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n value?: string;\n placeholder?: string;\n startIcon?: React.ComponentType<IconProps>;\n endIcon?: React.ComponentType<IconProps>;\n onChange: (value: string) => void;\n clearable?: boolean;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n (\n {\n label,\n required,\n value = '',\n disabled,\n placeholder = 'Enter text',\n role,\n startIcon: StartIcon,\n endIcon: EndIcon,\n onChange,\n className,\n clearable = false,\n type = 'text',\n error = false,\n errorMessage,\n requiredLabel,\n ...props\n },\n ref,\n ) => {\n const showClearButton = value && clearable;\n const hasError = error || errorMessage;\n return (\n <div className={className}>\n <FieldHeader label={label} required={required} requiredLabel={requiredLabel} />\n <div className={clsx(styles.input, hasError && styles.error)}>\n {StartIcon && <StartIcon />}\n <input\n ref={ref}\n type={type}\n role={role}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n {...props}\n />\n <IconX\n className={clsx(styles.clearIcon, showClearButton && styles.clearIconVisible)}\n onClick={() => onChange('')}\n />\n {EndIcon && <EndIcon />}\n </div>\n {errorMessage && <FieldFeedback variant=\"error\" message={errorMessage} />}\n </div>\n );\n },\n);\n\nInputField.displayName = 'InputField';\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n let timer: NodeJS.Timeout;\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n fn(...args);\n }, delay);\n };\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport styles from './Switch.module.css';\n\ntype SwitchProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> & {\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n className?: string;\n label?: string;\n};\n\nexport const Switch: React.FC<SwitchProps> = ({\n checked,\n onChange,\n disabled = false,\n className,\n label,\n ...props\n}) => {\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!disabled && onChange) {\n onChange(event.target.checked);\n }\n };\n\n // Ensure accessibility: either aria-label must be provided\n if (!props['aria-label']) {\n console.warn(\n 'Switch component requires either a label prop or aria-label prop for accessibility',\n );\n }\n\n return (\n <label\n className={clsx(\n className,\n styles.switch,\n checked && styles.checked,\n disabled && styles.disabled,\n )}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n role=\"switch\"\n aria-checked={checked}\n aria-disabled={disabled}\n {...props}\n />\n <span className={styles.switchTrack} aria-hidden=\"true\">\n <span className={styles.switchThumb} aria-hidden=\"true\" />\n </span>\n {label && <span className={clsx(styles.switchLabel)}>{label}</span>}\n </label>\n );\n};\n","import { FC, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectFieldTrigger } from '../shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport {\n SelectFieldContent,\n SelectFieldContentList,\n} from '../shared/SelectFieldContent/SelectFieldContent';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption';\nimport { SelectFieldCategory } from '../shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory';\nimport { groupOptionsByCategory } from '../shared/SelectFieldContent/SelectFieldContent.utils';\nimport { IconProps, IconSearch } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport styles from '../selects.module.css';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { TextField } from '../../inputs/TextField/TextField';\nimport { debounce } from '../../../../utils/debounce.utils';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: React.ComponentType<IconProps>;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n searchable?: boolean;\n clearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n} & FieldHeaderProps;\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n label,\n required,\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n searchable,\n clearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n searchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={clearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectFieldContent>\n {searchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n className={styles.searchField}\n />\n )}\n <SelectFieldContentList disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <Fragment key={category}>\n <SelectFieldCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </Fragment>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectFieldContentList>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { forwardRef } from 'react';\nimport { InputField, InputFieldProps } from '../shared/InputField/InputField';\n\ntype NumberFieldProps = Omit<InputFieldProps, 'value' | 'onChange'> & {\n value?: number | null;\n step?: number;\n min?: number;\n max?: number;\n onChange?: (value: number | null) => void;\n};\n\nexport const NumberField = forwardRef<HTMLInputElement, NumberFieldProps>(\n (\n {\n value = null,\n placeholder = 'Enter number',\n onChange,\n error,\n errorMessage,\n clearable,\n ...props\n },\n ref,\n ) => {\n const handleChange = (value: string) => {\n if (value === '') {\n onChange?.(null);\n return;\n }\n\n const numericValue = Number(value);\n if (!isNaN(numericValue) && isFinite(numericValue)) {\n onChange?.(numericValue);\n }\n };\n\n return (\n <InputField\n {...props}\n value={value?.toString() || ''}\n placeholder={placeholder}\n onChange={handleChange}\n type=\"number\"\n clearable={clearable}\n error={error}\n errorMessage={errorMessage}\n ref={ref}\n />\n );\n },\n);\n\nNumberField.displayName = 'NumberField';\n","import React, { useState } from 'react';\nimport { DateRange, DayPicker } from 'react-day-picker';\nimport './DateRangePicker.css';\nimport { DateRangePickerChevron } from './DateRangePickerChevron';\nimport { endOfDayUTC } from '../../../../utils/date.utils';\nimport * as rdpLocales from 'react-day-picker/locale';\n\nexport type DateRangePickerProps = {\n numberOfMonths?: number;\n locale?: string;\n value?: DateRange;\n onChange: (dateRange: DateRange | undefined) => void;\n};\n\nexport const DateRangePicker: React.FC<DateRangePickerProps> = ({\n value,\n numberOfMonths = 1,\n locale = 'en',\n onChange,\n}) => {\n const [month, setMonth] = useState<Date>(value?.from ?? new Date());\n\n const handleChange = (range: DateRange | undefined) => {\n if (range?.to) {\n range.to = endOfDayUTC(range.to);\n }\n onChange(range);\n };\n\n return (\n <DayPicker\n month={month}\n onMonthChange={setMonth}\n numberOfMonths={numberOfMonths}\n components={{ Chevron: DateRangePickerChevron }}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n locale={(rdpLocales as Record<string, any>)[locale]}\n mode=\"range\"\n navLayout=\"around\"\n onSelect={handleChange}\n selected={value}\n timeZone=\"UTC\"\n showOutsideDays\n />\n );\n};\n","import { IconCaretDownFilled } from '@tabler/icons-react';\nimport styles from './DateRangePickerChevron.module.css';\n\ntype DateRangePickerChevronProps = {\n className?: string;\n orientation?: 'up' | 'down' | 'left' | 'right';\n};\n\nexport const DateRangePickerChevron = ({\n orientation,\n}: DateRangePickerChevronProps): React.JSX.Element => {\n const rotation =\n orientation === 'left'\n ? 'rotate(90deg)'\n : orientation === 'right'\n ? 'rotate(-90deg)'\n : undefined;\n\n return (\n <button\n className={styles.chevron}\n style={{\n transform: rotation,\n }}\n >\n <IconCaretDownFilled />\n </button>\n );\n};\n","import { DateRange } from 'react-day-picker';\n\nexport const isSameDate = (a?: Date, b?: Date) => a?.getTime() === b?.getTime();\n\nexport const isSameDateRange = (a?: DateRange, b?: DateRange) =>\n isSameDate(a?.from, b?.from) && isSameDate(a?.to, b?.to);\n\nexport const endOfDayUTC = (date: Date) => {\n const d = new Date(date);\n d.setUTCHours(23, 59, 59, 999);\n return d;\n};\n","import { FC, useState } from 'react';\nimport { FieldHeader, FieldHeaderProps } from '../../../shared/Field/FieldHeader';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectFieldTrigger } from '../../selects/shared/SelectFieldTrigger/SelectFieldTrigger';\nimport { IconProps } from '@tabler/icons-react';\nimport { SelectFieldContent } from '../../selects/shared/SelectFieldContent/SelectFieldContent';\nimport { FieldFeedback } from '../../../shared/Field/FieldFeedback';\nimport { DateRangePicker, DateRangePickerProps } from '../DateRangePicker/DateRangePicker';\nimport { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './DateRangePickerField.module.css';\nimport { isSameDateRange } from '../../../../utils/date.utils';\n\ntype DateRangePickerFieldProps = {\n displayValue?: string;\n startIcon?: React.ComponentType<IconProps>;\n placeholder?: string;\n disabled?: boolean;\n error?: boolean;\n errorMessage?: string;\n clearable?: boolean;\n onChange: (dateRange: DateRange | undefined) => void;\n submitLabel?: string;\n} & FieldHeaderProps &\n DateRangePickerProps;\n\nconst getDateRangePickerLabel = (\n dateRange: DateRange | undefined,\n displayValue?: string,\n): string | undefined => {\n if (!dateRange) return undefined;\n\n if (displayValue || displayValue === '') return displayValue;\n\n const { from, to } = dateRange;\n\n if (!from || !to) return undefined;\n\n return `${from ? from.toLocaleDateString() : ''} - ${to ? to.toLocaleDateString() : ''}`;\n};\n\nexport const DateRangePickerField: FC<DateRangePickerFieldProps> = ({\n locale,\n displayValue,\n value,\n startIcon,\n label,\n disabled,\n placeholder,\n required,\n error,\n errorMessage,\n clearable,\n numberOfMonths = 1,\n submitLabel = 'Apply',\n onChange,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [currentDateRange, setCurrentDateRange] = useState<DateRange | undefined>(value);\n\n const valueLabel = getDateRangePickerLabel(value, displayValue);\n const hasError = error || !!errorMessage;\n\n const handleChange = () => {\n onChange(currentDateRange);\n setIsOpen(false);\n };\n\n const handleClear = () => {\n setCurrentDateRange(undefined);\n onChange(undefined);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n setIsOpen(true);\n return;\n }\n setCurrentDateRange(value);\n setIsOpen(false);\n };\n\n const isSubmitDisabled = isSameDateRange(currentDateRange, value);\n\n return (\n <div>\n <FieldHeader label={label} required={required} />\n <Dropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n disabled={disabled}\n triggerComponent={\n <SelectFieldTrigger\n startIcon={startIcon}\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={valueLabel}\n onClear={handleClear}\n isClearable={clearable}\n error={hasError}\n />\n }\n >\n <SelectFieldContent fitContent>\n <DateRangePicker\n locale={locale}\n numberOfMonths={numberOfMonths}\n value={currentDateRange}\n onChange={setCurrentDateRange}\n />\n <Button\n size=\"small\"\n className={styles.submitButton}\n onClick={handleChange}\n disabled={isSubmitDisabled}\n >\n {submitLabel}\n </Button>\n </SelectFieldContent>\n </Dropdown>\n {errorMessage && <FieldFeedback message={errorMessage} variant=\"error\" />}\n </div>\n );\n};\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartJSOrUndefined } from 'react-chartjs-2/dist/types';\n\nexport const getSegmentIndexClicked = (\n event: React.MouseEvent<HTMLCanvasElement>,\n chartRef: React.RefObject<ChartJSOrUndefined | null>,\n): number | undefined => {\n const chart = chartRef.current;\n\n if (!chart) return undefined;\n\n const points = chart.getElementsAtEventForMode(\n event.nativeEvent,\n 'nearest',\n { intersect: true },\n false,\n );\n\n return points[0]?.index;\n};\n","import { StylesKeys } from './styles.constants';\n\n/**\n * Attempts to interpret a CSS variable as a number (for lengths)\n * or a string (for colors, etc.).\n *\n * Examples:\n * --var: 2rem -> returns number (px)\n * --var: 16px -> returns number\n * --var: 3 -> returns number (parsed float)\n * --var: #3498db -> returns string\n * --var: rgba(52, 152, 219, 0.8) -> returns string\n */\nconst numericRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst getStyleValue = (variableName: StylesKeys): string => {\n if (typeof window === 'undefined' || typeof document === 'undefined') return '';\n const computedStyle = getComputedStyle(document.documentElement);\n return computedStyle.getPropertyValue(variableName).trim();\n};\n\nexport const getStyle = (variableName: StylesKeys, fallbackValue?: string): string => {\n const rawValue = getStyleValue(variableName);\n if (!rawValue) return fallbackValue ?? rawValue;\n\n // Colors\n const firstChar = rawValue.charAt(0);\n if (firstChar === '#' || rawValue.startsWith('rgb(') || rawValue.startsWith('rgba(')) {\n return rawValue;\n }\n\n // Others like font-family\n return rawValue;\n};\n\nexport const getStyleNumber = (\n variableName: StylesKeys,\n fallbackValue?: string,\n): number | undefined => {\n const rawValue = getStyleValue(variableName) || fallbackValue;\n\n if (!rawValue) return undefined;\n\n const numericValue = parseFloat(rawValue);\n const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n // Px\n if (rawValue.slice(-2) === 'px') {\n return numericValue;\n }\n\n // Rem/Em\n const unit3 = rawValue.slice(-3);\n if (unit3 === 'rem') {\n return numericValue * rootFontSize;\n }\n\n // Pure number\n if (numericRegex.test(rawValue)) {\n return numericValue;\n }\n return undefined;\n};\n","import { getStyle } from '../../styles/styles.utils';\n\nexport const getChartColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--2'),\n getStyle('--em-sem-chart-color--3'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--5'),\n getStyle('--em-sem-chart-color--6'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--8'),\n getStyle('--em-sem-chart-color--9'),\n getStyle('--em-sem-chart-color--10'),\n];\n\nexport const getChartContrastColors = (): string[] => [\n getStyle('--em-sem-chart-color--1'),\n getStyle('--em-sem-chart-color--4'),\n getStyle('--em-sem-chart-color--7'),\n getStyle('--em-sem-chart-color--10'),\n];\n","import { ChartData, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptions,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n const chartContrastColors = getChartContrastColors();\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n grid: {\n display: true,\n color: getChartjsAxisOptionsScalesGridColor,\n },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: { display: false },\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-barchart-border-radius', '0.375rem'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(getChartjsAxisOptions(), baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { CartesianTickOptions, ChartOptions, GridLineOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { getChartjsOptions } from './chartjs.constants';\n\nexport const getChartjsAxisOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n labels: {\n total: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n value: {\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksDefault = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesTicksMuted = (): Partial<CartesianTickOptions> => ({\n display: true,\n color: getStyle('--em-chart-grid-label-color--muted', '#5C5C66'),\n font: {\n size: getStyleNumber('--em-chart-grid-label-font-size', '0.75rem'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n weight: getStyleNumber('--em-chart-grid-label-font-weight', '400'),\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesTitle = (): any => ({\n color: getStyle('--em-chart-grid-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-grid-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-grid-title-font-weight', '700'),\n family: getStyle('--em-chart-grid-font-family', 'sans-serif'),\n },\n});\n\nexport const getChartjsAxisOptionsScalesGrid = (): Partial<GridLineOptions> => ({\n color: getStyle('--em-chart-grid-line-color--light', '#EDEDF1'),\n lineWidth: getStyleNumber('--em-chart-grid-line-width--thin', '0.0625rem'),\n});\n\nexport const getChartjsAxisOptionsScales = (): Partial<ChartOptions['scales']> => ({\n x: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n },\n y: {\n grid: getChartjsAxisOptionsScalesGrid(),\n title: getChartjsAxisOptionsScalesTitle(),\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n },\n});\n\nexport const getChartjsAxisOptions = (): Partial<ChartOptions> =>\n mergician(getChartjsOptions(), {\n plugins: getChartjsAxisOptionsPlugins(),\n scales: getChartjsAxisOptionsScales(),\n });\n\nexport const chartjsAxisOptionsLayoutPadding: number = 30;\n\nfunction isMixedValues(values: number[]): boolean {\n const hasPos = values.some((v) => v > 0);\n const hasNeg = values.some((v) => v < 0);\n return hasPos && hasNeg;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const getChartjsAxisOptionsScalesGridColor = (ctx: any) => {\n if (ctx.tick.value === 0) {\n if (ctx.chart.data.datasets.length === 0) {\n return undefined;\n }\n\n const values = ctx.chart.data.datasets[0].data;\n if (isMixedValues(values)) {\n return getStyle('--em-chart-grid-line-color', '#212129');\n }\n return getStyle('--em-chart-grid-line-color--subtle', '#B8B8BD');\n }\n return getStyle('--em-chart-grid-line-color--light', '#EDEDF1');\n};\n","import { ChartOptions } from 'chart.js';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\n\nexport const getChartjsOptionsPlugins = (): Partial<ChartOptions['plugins']> => ({\n datalabels: {\n backgroundColor: getStyle('--em-chart-label-background', '#FFF'),\n borderRadius: getStyleNumber('--em-chart-label-border-radius', '624.9375rem'),\n padding: {\n top: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n bottom: getStyleNumber('--em-chart-label-padding-top-bottom', '0.125rem'),\n right: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n left: getStyleNumber('--em-chart-label-padding-left-right', '0.25rem'),\n },\n\n color: getStyle('--em-chart-label-color', '#212129'),\n font: {\n size: getStyleNumber('--em-chart-label-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-label-font-weight', '500'),\n family: getStyle('--em-chart-label-font-family', 'sans-serif'),\n },\n },\n legend: {\n position: 'bottom',\n labels: {\n boxWidth: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n boxHeight: getStyleNumber('--em-chart-category-size', '0.75rem')! / 2,\n usePointStyle: true,\n color: getStyle('--em-chart-category-color', '#5C5C66'),\n padding: getStyleNumber('--em-chart-category-list-gap', '1rem'),\n font: {\n family: getStyle('--em-chart-category-font-family', 'sans-serif'),\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n },\n },\n },\n tooltip: {\n usePointStyle: true,\n caretSize: 0,\n enabled: true,\n backgroundColor: getStyle('--em-chart-tooltip-background', '#212129'),\n cornerRadius: getStyleNumber('--em-chart-tooltip-border-radius', '0.75rem'),\n padding: getStyleNumber('--em-chart-tooltip-padding', '1rem'),\n displayColors: true,\n bodyColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n bodyAlign: 'left',\n boxPadding: getStyleNumber('--em-chart-category-gap', '0.25rem'),\n bodyFont: {\n size: getStyleNumber('--em-chart-category-font-size', '0.75rem'),\n weight: getStyleNumber('--em-chart-category-font-weight', '500'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n titleAlign: 'left',\n titleColor: getStyle('--em-chart-tooltip-title-color', '#FFF'),\n titleFont: {\n size: getStyleNumber('--em-chart-tooltip-title-font-size', '0.875rem'),\n weight: getStyleNumber('--em-chart-tooltip-title-font-weight', '700'),\n family: getStyle('--em-chart-tooltip-family', 'sans-serif'),\n },\n },\n});\n\nexport const chartjsOptionsScales: Partial<ChartOptions['scales']> = {\n x: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n y: {\n border: { display: false },\n grid: { display: false },\n ticks: { display: false },\n },\n};\n\nexport const getChartjsOptions = (): Partial<ChartOptions> => ({\n responsive: true,\n maintainAspectRatio: false,\n plugins: getChartjsOptionsPlugins(),\n});\n","import {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n Filler,\n} from 'chart.js';\nimport { Line } from 'react-chartjs-2';\nimport styles from '../charts.module.css';\nimport { FC, useRef } from 'react';\nimport { mergician } from 'mergician';\nimport { BaseLineChartProps } from './lines.types';\nimport { getLineChartData, getLineChartOptions } from './lines.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n LogarithmicScale,\n Filler,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n AnnotationPlugin,\n);\n\nexport type LineChartProps = BaseLineChartProps;\n\nexport const LineChart: FC<LineChartProps> = ({ options = {}, data, onSegmentClick, ...props }) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(getLineChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Line\n ref={chartRef}\n data={getLineChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { getChartContrastColors } from '../charts.constants';\nimport { mergician } from 'mergician';\nimport { LineChartConfigurationProps } from './lines.types';\nimport {\n getChartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n getChartjsAxisOptionsScalesGridColor,\n getChartjsAxisOptionsScalesTicksDefault,\n getChartjsAxisOptionsScalesTicksMuted,\n} from '../chartjs.cartesian.constants';\nimport { getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getLineChartData = (data: ChartData<'line'>) => {\n const chartContrastColors = getChartContrastColors();\n const mergedData: ChartData<'line', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset: Partial<ChartData<'line'>['datasets'][number]> = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'line', number[]>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getLineChartOptions = (\n options: LineChartConfigurationProps,\n): Partial<ChartOptions<'line'>> => {\n const newOptions: Partial<ChartOptions<'line'>> = {\n interaction: {\n mode: 'x',\n intersect: false,\n },\n elements: {\n point: {\n radius: getStyleNumber('--em-linechart-point-size', '0.5rem')! / 2,\n hoverRadius: getStyleNumber('--em-linechart-point-size--hover', '0.75rem')! / 2,\n },\n line: {\n tension: 0.2,\n borderWidth: getStyleNumber('--em-linechart-line-width', '0.125rem'),\n },\n },\n layout: {\n padding: {\n top: options.showValueLabels ? chartjsAxisOptionsLayoutPadding : 0,\n },\n },\n plugins: {\n datalabels: {\n display: (context) => {\n if (!options.showValueLabels) return false;\n const value: number | undefined = context.dataset.data[context.dataIndex] as\n | number\n | undefined;\n const yScale = context.chart.scales.y;\n return value !== undefined && yScale && value >= yScale.min && value <= yScale.max\n ? 'auto'\n : false;\n },\n },\n legend: {\n display: options.showLegend,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n scales: {\n x: {\n grid: { display: false },\n border: {\n display: false,\n },\n ticks: getChartjsAxisOptionsScalesTicksDefault(),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel,\n },\n reverse: options.reverseXAxis,\n },\n y: {\n beginAtZero: true,\n ticks: getChartjsAxisOptionsScalesTicksMuted(),\n grid: { display: true, color: getChartjsAxisOptionsScalesGridColor },\n border: {\n display: false,\n },\n type: options.showLogarithmicScale ? 'logarithmic' : 'linear',\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel,\n },\n min: options.yAxisRangeMin,\n max: options.yAxisRangeMax,\n },\n },\n };\n\n return mergician(getChartjsAxisOptions(), newOptions);\n};\n","import { FC } from 'react';\nimport styles from './KpiChart.module.css';\nimport { KpiChartChange } from './components/KpiChartChange';\nimport { KpiChartProps } from './KpiChart.types';\nimport { AutoTextSize } from 'auto-text-size';\nimport ConditionalWrapper from '../../shared/ConditionalWrapper/ConditionalWrapper';\n\nexport const KpiChart: FC<KpiChartProps> = ({\n value,\n valueFontSize,\n trendFontSize,\n comparisonValue,\n comparisonLabel,\n invertChangeColors,\n showChangeAsPercentage,\n percentageDecimalPlaces = 1,\n equalComparisonLabel = 'No change',\n noPreviousDataLabel = 'No previous data',\n valueFormatter,\n}) => {\n const hasComparisonValue = comparisonValue !== undefined;\n\n const displayValue = value === undefined ? '' : valueFormatter ? valueFormatter(value) : value;\n\n const autoResizeValueFontSize = !valueFontSize;\n return (\n <div className={styles.kpiChartContainer}>\n <div className={styles.kpiChartValueContainer}>\n <ConditionalWrapper\n condition={autoResizeValueFontSize}\n wrapper={(children) => (\n <AutoTextSize mode=\"boxoneline\" minFontSizePx={1} maxFontSizePx={999}>\n {children}\n </AutoTextSize>\n )}\n >\n <h2\n title={displayValue.toString()}\n style={{\n fontSize: valueFontSize,\n }}\n >\n {displayValue}\n </h2>\n </ConditionalWrapper>\n </div>\n\n <div className={styles.kpiComparisonContainer} style={{ fontSize: trendFontSize }}>\n <div style={{ visibility: hasComparisonValue ? 'visible' : 'hidden' }}>\n <KpiChartChange\n equalComparisonLabel={equalComparisonLabel}\n comparisonLabel={comparisonLabel}\n comparisonValue={comparisonValue}\n invertChangeColors={invertChangeColors}\n percentageDecimalPlaces={percentageDecimalPlaces}\n showChangeAsPercentage={showChangeAsPercentage}\n value={value}\n valueFormatter={valueFormatter}\n noPreviousDataLabel={noPreviousDataLabel}\n />\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from 'react';\nimport styles from './KpiChartChange.module.css';\nimport clsx from 'clsx';\nimport { IconTrendingDown, IconTrendingUp } from '@tabler/icons-react';\nimport { KpiChartProps } from '../KpiChart.types';\n\nconst getChangeClass = (isPositive: boolean, invertChangeColors: boolean) => {\n if (isPositive) return invertChangeColors ? styles.negative : styles.positive;\n return invertChangeColors ? styles.positive : styles.negative;\n};\n\ntype KpiChartChangeProps = KpiChartProps & { className?: string };\n\nexport const KpiChartChange: FC<KpiChartChangeProps> = ({\n value,\n comparisonValue = 0,\n showChangeAsPercentage,\n invertChangeColors = false,\n comparisonLabel,\n valueFormatter,\n percentageDecimalPlaces = 1,\n equalComparisonLabel,\n noPreviousDataLabel,\n}) => {\n const equalComparison = comparisonValue === value;\n\n const difference = value - comparisonValue;\n const isPositive = difference > 0;\n\n let differenceLabel: string;\n\n if (showChangeAsPercentage) {\n const percentage = (difference / comparisonValue) * 100;\n differenceLabel = `${percentage.toFixed(percentageDecimalPlaces)}%`;\n } else {\n differenceLabel = valueFormatter ? valueFormatter(difference) : difference.toString();\n }\n\n const displayValue = `${isPositive ? '+' : ''}${differenceLabel}`;\n\n const Icon = isPositive ? IconTrendingUp : IconTrendingDown;\n\n const showNoPreviousData = showChangeAsPercentage && Number(comparisonValue) === 0;\n\n return (\n <div className={styles.kpiChangeContainerSizeGuide}>\n {/* This is responsible to setting the size of the container */}\n <div className={clsx(styles.kpiChartChangeContainer, styles.hidden)}>\n <span\n className={clsx(styles.kpiChangeBadge, getChangeClass(isPositive, invertChangeColors))}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n <span className={styles.kpiComparisonLabel}>{comparisonLabel}</span>\n </div>\n {/* This is responsible for displaying the content on the available size of the container */}\n <div className={styles.kpiAbsoluteContainer}>\n <div className={styles.kpiChartChangeContainer}>\n {showNoPreviousData ? (\n <span className={styles.kpiComparisonLabel}>{noPreviousDataLabel}</span>\n ) : (\n <>\n {!equalComparison && (\n <span\n className={clsx(\n styles.kpiChangeBadge,\n getChangeClass(isPositive, invertChangeColors),\n )}\n >\n <Icon />\n <span>{displayValue}</span>\n </span>\n )}\n <span className={styles.kpiComparisonLabel}>\n {equalComparison ? (equalComparisonLabel ?? comparisonLabel) : comparisonLabel}\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n","type ConditionalWrapperProps = {\n condition: boolean;\n wrapper: (children: React.ReactNode) => React.ReactNode;\n children: React.ReactNode;\n};\n\nconst ConditionalWrapper: React.FC<ConditionalWrapperProps> = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : <>{children}</>;\n\nexport default ConditionalWrapper;\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\nimport { getDonutChartOptions, getPieChartData } from '../pies.utils';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport { useResizeObserver } from '../../../../hooks/useResizeObserver.hook';\n\nconst MIN_WIDTH_HEIGHT_TO_SHOW_CHART = 10;\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type DonutLabelChartProps = BasePieChartProps & { label?: string; subLabel?: string };\n\nexport const DonutChart: FC<DonutLabelChartProps> = ({\n label,\n subLabel,\n options = {},\n data,\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const containerRef = useRef(null);\n const chartRef = useRef(null);\n\n const donutLabelOptions = mergician(\n getDonutChartOptions({ showLegend, showTooltips, showValueLabels, label, subLabel }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n const { height, width } = useResizeObserver(containerRef, 0);\n\n const hideChart =\n height < MIN_WIDTH_HEIGHT_TO_SHOW_CHART || width < MIN_WIDTH_HEIGHT_TO_SHOW_CHART;\n\n return (\n <div className={styles.chartContainer} ref={containerRef}>\n {hideChart ? null : (\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={donutLabelOptions}\n onClick={handleSegmentClick}\n />\n )}\n </div>\n );\n};\n","import { ChartData, ChartDataset, ChartOptions } from 'chart.js';\nimport { mergician } from 'mergician';\nimport { getChartColors } from '../charts.constants';\nimport { getChartjsOptions } from '../chartjs.constants';\nimport { PieChartConfigurationProps } from './pies.types';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { getStyle, getStyleNumber } from '../../../styles/styles.utils';\n\nexport const getPieChartData = (data: ChartData<'pie'>) => {\n const chartColors = getChartColors();\n const mergedData: ChartData<'pie', number[], unknown> = {\n ...data,\n datasets:\n data.datasets?.map((dataset) => {\n const colors = dataset.data.map((_value, index) => chartColors[index % chartColors.length]);\n const defaultDataset = {\n backgroundColor: colors,\n borderColor: colors,\n };\n const merged = mergician(defaultDataset, dataset) as ChartDataset<'pie'>;\n return merged;\n }) || [],\n };\n return mergedData;\n};\n\nexport const getPieChartOptions = (\n options: PieChartConfigurationProps,\n): Partial<ChartOptions<'pie'>> => {\n const pieChartOptions: Partial<ChartOptions<'pie'>> = {\n plugins: {\n legend: { display: options.showLegend },\n datalabels: {\n display: options.showValueLabels ? 'auto' : false,\n },\n tooltip: {\n enabled: options.showTooltips,\n },\n },\n };\n return mergician(getChartjsOptions(), pieChartOptions);\n};\n\nexport const getDonutChartOptions = (\n options: PieChartConfigurationProps & { label?: string; subLabel?: string },\n): Partial<ChartOptions<'pie'>> => {\n const donutChartOptions: Partial<ChartOptions<'pie'>> = {\n cutout: '60%',\n elements: {\n arc: {\n borderWidth: 1,\n },\n },\n plugins: {\n annotation: {\n annotations: {\n innerlabel: {\n content: [options.label, options.subLabel].filter(Boolean),\n type: 'doughnutLabel',\n font: [\n {\n size: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n weight: getStyleNumber('--em-piechart-donut-number-font-weight', '700'),\n height: getStyleNumber('--em-piechart-donut-number-line-height', '2.375rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n {\n size: getStyleNumber('--em-piechart-donut-label-font-size', '1rem'),\n weight: getStyleNumber('--em-piechart-donut-label-font-weight', '500'),\n height: getStyleNumber('--em-piechart-donut-label-line-height', '1rem'),\n family: getStyle('--em-piechart-font-family', 'sans-serif'),\n },\n ],\n color: [getStyle('--em-piechart-donut-color', '#212129')],\n },\n // According to the last comment, a fix should be coming in the next release:\n // https://github.com/chartjs/chartjs-plugin-annotation/commit/1e95744fb98e6fe9426f8b6a7bd17b1fcdee2f42\n } as unknown as Record<string, AnnotationOptions>,\n },\n },\n };\n return mergician(getPieChartOptions(options), donutChartOptions);\n};\n","import { useLayoutEffect, useRef, useState } from 'react';\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(\n elRef: React.RefObject<T | null>,\n timeout = 100,\n): Size => {\n const [size, setSize] = useState<Size>({ width: 0, height: 0 });\n const timeoutRef = useRef<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const el = elRef.current;\n if (!el) return;\n\n const updateSize = (rect: DOMRectReadOnly | DOMRect) => {\n setSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n });\n };\n\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n updateSize(entry.contentRect);\n }, timeout);\n });\n\n ro.observe(el);\n\n // initial size\n updateSize(el.getBoundingClientRect());\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n ro.disconnect();\n };\n }, [elRef, timeout]);\n\n return size;\n};\n","import { FC, useRef } from 'react';\nimport { Pie } from 'react-chartjs-2';\nimport { ArcElement, Chart as ChartJS, Legend, Tooltip } from 'chart.js';\nimport { getPieChartData, getPieChartOptions } from '../pies.utils';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { getSegmentIndexClicked } from '../../chartjs.utils';\nimport { mergician } from 'mergician';\nimport { BasePieChartProps } from '../pies.types';\nimport styles from '../../charts.module.css';\nimport AnnotationPlugin from 'chartjs-plugin-annotation';\n\nChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels, AnnotationPlugin);\n\nexport type PieChartProps = BasePieChartProps;\n\nexport const PieChart: FC<PieChartProps> = ({\n data,\n options = {},\n onSegmentClick,\n showLegend = true,\n showTooltips = true,\n showValueLabels = true,\n}) => {\n const chartRef = useRef(null);\n\n const pieOptions = mergician(\n getPieChartOptions({\n showLegend,\n showTooltips,\n showValueLabels,\n }),\n options,\n );\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Pie\n ref={chartRef}\n data={getPieChartData(data)}\n options={pieOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import * as React from 'react';\nimport styles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { TablePagination } from './components/TablePagination/TablePagination';\nimport { TableHeader } from './components/TableHeader/TableHeader';\nimport { TableBody } from './components/TableBody/TableBody';\nimport { TablePaginatedProps } from './table.types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const TablePaginated = React.forwardRef<HTMLDivElement, TablePaginatedProps<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <T extends Record<string, any>>(\n props: TablePaginatedProps<T>,\n ref: React.Ref<HTMLDivElement>,\n ): React.JSX.Element => {\n const {\n headers,\n rows,\n className,\n total,\n page,\n pageSize,\n paginationLabel,\n sort,\n showIndex = false,\n onRowIndexClick,\n onPageChange,\n onSortChange,\n } = props;\n\n return (\n <div ref={ref} className={clsx(styles.tableContainer, className)}>\n <div className={styles.tableContainerScroll}>\n <table className={styles.table}>\n <TableHeader\n showIndex={showIndex}\n headers={headers}\n sort={sort}\n onSortChange={onSortChange}\n />\n <TableBody\n onRowIndexClick={onRowIndexClick}\n showIndex={showIndex}\n headers={headers}\n rows={rows}\n page={page}\n pageSize={pageSize}\n />\n </table>\n </div>\n <TablePagination\n page={page}\n pageSize={pageSize}\n paginationLabel={paginationLabel}\n total={total}\n onPageChange={onPageChange}\n />\n </div>\n );\n },\n);\n\nTablePaginated.displayName = 'TablePaginated';\n","import {\n IconChevronLeft,\n IconChevronRight,\n IconChevronsLeft,\n IconChevronsRight,\n} from '@tabler/icons-react';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport styles from './TablePagination.module.css';\nimport { FC, useEffect } from 'react';\nimport { TablePaginatedProps } from '../../table.types';\n\nexport type TablePaginationProps = Pick<\n TablePaginatedProps<unknown>,\n 'page' | 'pageSize' | 'paginationLabel' | 'total' | 'onPageChange'\n>;\n\nexport const getTableTotalPages = (\n total: number | undefined,\n pageSize: number,\n): number | undefined => {\n return total ? Math.ceil(total / pageSize) : undefined;\n};\n\nexport const TablePagination: FC<TablePaginationProps> = ({\n page,\n pageSize,\n paginationLabel,\n total,\n onPageChange,\n}) => {\n const totalPages = getTableTotalPages(total, pageSize);\n\n const disabledPrev = page <= 0;\n const disabledNext = !totalPages || page >= totalPages - 1;\n\n useEffect(() => {\n if (totalPages && page >= totalPages) {\n onPageChange(0);\n }\n }, [totalPages, page]);\n\n return (\n <div className={styles.tablePagination} aria-label=\"Table pagination controls\">\n <div className={styles.tablePaginationCentral}>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronsLeft}\n onClick={() => {\n onPageChange(0);\n }}\n disabled={disabledPrev}\n aria-label=\"First page\"\n />\n <ActionIcon\n icon={IconChevronLeft}\n onClick={() => {\n onPageChange(page - 1);\n }}\n disabled={disabledPrev}\n aria-label=\"Previous page\"\n />\n </div>\n <span>{paginationLabel ?? `Page ${page + 1} of ${totalPages ?? '?'}`}</span>\n <div className={styles.tablePaginationCentralButtons}>\n <ActionIcon\n icon={IconChevronRight}\n onClick={() => {\n onPageChange(page + 1);\n }}\n disabled={disabledNext}\n aria-label=\"Next page\"\n />\n <ActionIcon\n icon={IconChevronsRight}\n onClick={() => totalPages && onPageChange(totalPages - 1)}\n disabled={disabledNext}\n aria-label=\"Last page\"\n />\n </div>\n </div>\n </div>\n );\n};\n","import { IconCaretDownFilled, IconCaretUpDownFilled, IconCaretUpFilled } from '@tabler/icons-react';\nimport styles from './TableHeader.module.css';\nimport { TableHeaderItem, TablePaginatedProps, TableSortDirection } from '../../table.types';\nimport tableStyles from '../../../tables.module.css';\nimport clsx from 'clsx';\n\nexport type TableHeaderProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'sort' | 'onSortChange'\n>;\n\nconst getHeaderAriaSort = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id ? (sort.direction === 'asc' ? 'ascending' : 'descending') : 'none';\n};\n\nconst getHeaderAriaLabel = <T,>(\n sort: TablePaginatedProps<T>['sort'],\n header: TablePaginatedProps<T>['headers'][0],\n) => {\n return sort?.id === header.id\n ? sort.direction === 'asc'\n ? `Sort by ${header.title}, currently ascending. Activate to sort descending.`\n : `Sort by ${header.title}, currently descending. Activate to sort ascending.`\n : `Sort by ${header.title}. Activate to sort ascending.`;\n};\nexport const TableHeader = <T,>({\n headers,\n sort,\n showIndex,\n onSortChange,\n}: TableHeaderProps<T>) => {\n const getSortIcon = (header: TableHeaderItem<T>) => {\n if (!sort) return <IconCaretUpDownFilled />;\n\n if (sort.id === header.id) {\n if (sort.direction === TableSortDirection.ASC) {\n return <IconCaretUpFilled />;\n } else if (sort.direction === TableSortDirection.DESC) {\n return <IconCaretDownFilled />;\n }\n }\n return <IconCaretUpDownFilled />;\n };\n\n const handleSort = (id: keyof T) => {\n if (!onSortChange) return;\n\n if (!sort) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n if (sort) {\n // New sort\n if (sort.id !== id) {\n return onSortChange({ id, direction: TableSortDirection.ASC });\n }\n\n // Toggle sort direction\n if (sort.direction === TableSortDirection.ASC) {\n return onSortChange({ id, direction: TableSortDirection.DESC });\n } else if (sort.direction === TableSortDirection.DESC) {\n return onSortChange(undefined); // Remove sort after DESC\n }\n }\n };\n\n return (\n <thead className={styles.tableHeader}>\n <tr>\n {showIndex && (\n <th className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>#</th>\n )}\n {headers.map((header) => (\n <th\n className={styles.tableHeaderCell}\n key={header.id as string}\n style={{ minWidth: header.minWidth }}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(sort, header)}\n >\n <button\n onClick={() => handleSort(header.id)}\n aria-label={getHeaderAriaLabel(sort, header)}\n >\n {header.title}\n {getSortIcon(header)}\n </button>\n </th>\n ))}\n </tr>\n </thead>\n );\n};\n","import { CssSize } from '../../../../types/css.types';\n\nexport const TableSortDirection = {\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n\nexport type TableSort<T> = {\n id: keyof T;\n direction: (typeof TableSortDirection)[keyof typeof TableSortDirection];\n};\nexport const TableHeaderAlign = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right',\n} as const;\n\nexport type TableHeaderItemAlign = (typeof TableHeaderAlign)[keyof typeof TableHeaderAlign];\n\nexport type TableHeaderCell = (props: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n className?: string;\n}) => React.ReactElement<HTMLTableCellElement>;\n\nexport type TableHeaderItem<T> = {\n id: keyof T;\n title: React.ReactNode;\n align?: TableHeaderItemAlign;\n field?: keyof T;\n minWidth?: CssSize;\n sort?: TableSort<T>;\n accessor?: (row: T) => React.ReactNode;\n cell?: TableHeaderCell;\n};\n\nexport type TablePaginatedProps<T> = {\n showIndex?: boolean;\n className?: string;\n headers: TableHeaderItem<T>[];\n rows: T[];\n page: number;\n pageSize: number;\n paginationLabel?: string;\n total?: number;\n sort?: TableSort<T>;\n onRowIndexClick?: (rowIndex: number) => void;\n onPageChange: (page: number) => void;\n onSortChange?: (value: TableSort<T> | undefined) => void;\n};\n","import styles from './TableBody.module.css';\nimport { TableHeaderAlign, TableHeaderItem, TablePaginatedProps } from '../../table.types';\nimport clsx from 'clsx';\nimport { ActionIcon } from '../../../../../shared/ActionIcon/ActionIcon';\nimport { IconCopy, IconCopyCheckFilled } from '@tabler/icons-react';\nimport { useState } from 'react';\nimport tableStyles from '../../../tables.module.css';\n\nexport type TableBodyProps<T> = Pick<\n TablePaginatedProps<T>,\n 'showIndex' | 'headers' | 'rows' | 'pageSize' | 'page' | 'onRowIndexClick'\n>;\n\nexport const TableBody = <T,>({\n headers,\n rows,\n pageSize,\n page,\n showIndex,\n onRowIndexClick,\n}: TableBodyProps<T>) => {\n return (\n <tbody className={styles.tableBody}>\n {rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n onClick={() => onRowIndexClick?.(rowIndex)}\n className={clsx(rowIndex === rows.length - 1 && tableStyles.tableLastRow)}\n >\n {showIndex && (\n <td className={clsx(tableStyles.mutedCell, tableStyles.stickyFirstColumn)}>\n {pageSize * page + rowIndex + 1}\n </td>\n )}\n {headers.map((header, cellIndex) => (\n <TableBodyCell\n key={cellIndex}\n header={header}\n row={row}\n rowIndex={rowIndex}\n cellIndex={cellIndex}\n />\n ))}\n </tr>\n ))}\n </tbody>\n );\n};\n\ntype TableBodyCellProps<T> = {\n header: TableHeaderItem<T>;\n row: T;\n rowIndex: number;\n cellIndex: number;\n};\n\nconst TableBodyCell = <T,>({ header, row, rowIndex, cellIndex }: TableBodyCellProps<T>) => {\n const [isPressedCopy, setIsPressedCopy] = useState(false);\n\n const value =\n header.accessor !== undefined\n ? header.accessor(row)\n : header.id !== undefined\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (row as any)[header.id]\n : undefined;\n\n // Custom cell renderer\n if (header.cell) {\n return header.cell({ value, className: styles.tableBodyCell });\n }\n\n const handleCopy = () => {\n setIsPressedCopy(true);\n if (value !== undefined) {\n navigator.clipboard.writeText(String(value));\n }\n };\n\n return (\n <td\n key={`${rowIndex}-${cellIndex}`}\n title={value}\n style={{ textAlign: header.align }}\n onMouseLeave={() => setIsPressedCopy(false)}\n >\n <ActionIcon\n title={`Copy: ${String(value)}`}\n onMouseDown={handleCopy}\n icon={isPressedCopy ? IconCopyCheckFilled : IconCopy}\n className={clsx(\n styles.copyButton,\n header.align === TableHeaderAlign.RIGHT && styles.leftAlign,\n )}\n onClick={handleCopy}\n />\n {value}\n </td>\n );\n};\n","import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue != null) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue != null) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(String(row))?.get(String(columnValue)) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(String(row)) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","export const getTableCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : 'unset',\n maxWidth: width ? `${width}px` : 'unset',\n width: width ? `${width}px` : 'unset',\n };\n};\n","import { useMemo, useCallback } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { HeatMapProps } from './HeatMap.types';\nimport {\n createColorForValue,\n getCellBackground,\n getCellColor,\n getCellDisplayValue,\n getCellValue,\n idOf,\n thresholdToRaw,\n} from './HeatMap.utils';\nimport { getTableCellWidthStyle } from '../tables.utils';\nimport { getStyle } from '../../../../styles/styles.utils';\n\nexport const HeatMap = <T extends Record<string, unknown>>({\n data,\n showValues = false,\n className,\n columnDimension,\n rowDimension,\n measure,\n minThreshold,\n maxThreshold,\n minColor,\n midColor = getStyle('--em-tablechart-heatmap-color', '#FF5400'),\n maxColor,\n columnWidth,\n firstColumnWidth,\n displayNullAs,\n}: HeatMapProps<T>) => {\n // 1. Get raw min/max from data\n const { rawMin, rawMax } = useMemo(() => {\n let min = Infinity;\n let max = -Infinity;\n for (const d of data) {\n const value = getCellValue(d[measure.key], displayNullAs);\n\n if (value != null && typeof value === 'number' && Number.isFinite(value)) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return { rawMin: 0, rawMax: 0 };\n return { rawMin: min, rawMax: max };\n }, [data, measure.key, displayNullAs]);\n\n // 2. Resolve thresholds to a raw domain\n const { domainMin, domainMax } = useMemo(() => {\n const domMin = thresholdToRaw(minThreshold, rawMin, rawMax, rawMin);\n const domMax = thresholdToRaw(maxThreshold, rawMin, rawMax, rawMax);\n return domMin <= domMax\n ? { domainMin: domMin, domainMax: domMax }\n : { domainMin: domMax, domainMax: domMin };\n }, [minThreshold, maxThreshold, rawMin, rawMax]);\n\n const columnValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[columnDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, columnDimension.key],\n );\n\n const rowValues = useMemo(\n () =>\n Array.from(\n new Set(\n data\n .map((d) => d[rowDimension.key])\n .filter((v) => v != null)\n .map(idOf),\n ),\n ),\n [data, rowDimension.key],\n );\n\n // 3. Store data in a map for fast lookup\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, unknown>>>();\n for (const d of data) {\n const r = idOf(d[rowDimension.key]);\n const c = idOf(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, unknown>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n // 4. Create color scale function\n const colorForValue = useCallback(\n (v: number) => {\n return createColorForValue({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n })(v);\n },\n [domainMin, domainMax, rawMin, rawMax, minColor, midColor, maxColor],\n );\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table className={tableStyles.table} aria-label=\"Heat map\">\n <thead>\n <tr>\n <th\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {measure.label}\n </th>\n {columnValues.map((cv, index) => (\n <th key={`col-${cv}-${index}`} style={getTableCellWidthStyle(columnWidth)}>\n {columnDimension.format ? columnDimension.format(cv) : cv}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {rowValues.map((rv) => (\n <tr key={`row-${rv}`}>\n <th\n scope=\"row\"\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.format ? rowDimension.format(rv) : rv}\n </th>\n\n {columnValues.map((cv) => {\n const obj = cellMap.get(rv)?.get(cv);\n const value = getCellValue(obj?.[measure.key], displayNullAs);\n const background = getCellBackground(value, colorForValue);\n const color = getCellColor(background);\n\n return (\n <td\n key={`cell-${rv}-${cv}`}\n style={{\n background,\n color,\n ...getTableCellWidthStyle(columnWidth),\n }}\n >\n {getCellDisplayValue(value, showValues, measure)}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n","import { getStyle } from '../../../../styles/styles.utils';\nimport { HeatMapPropsMeasure, HeatMapPropsThreshold } from './HeatMap.types';\n\n/* -------------------------------------------------------------------------- */\n/* Core math + tiny helpers */\n/* -------------------------------------------------------------------------- */\n\nconst clamp01 = (x: number) => (x < 0 ? 0 : x > 1 ? 1 : x);\nconst easeOutQuad = (x: number) => 1 - (1 - x) * (1 - x);\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\n/** Max darkening applied for values outside the domain (0..1). Lower = lighter tails. */\nconst OUTSIDE_DARKEN_MAX = 0.35;\n/** Darkest color to lerp toward when outside domain (kept as const for tree-shakeability). */\nconst LERP_DARKEST_COLOR = '#000000';\nconst LERP_LIGHTEST_COLOR = '#FFFFFF';\n\nexport const idOf = (v: unknown) => String(v ?? '');\n\n/* -------------------------------------------------------------------------- */\n/* Color parsing / conversion */\n/* - Resolves hex/rgb/hsl/named/var(...) to a hex string (#rrggbb) */\n/* - Memoized to avoid repeated DOM work */\n/* -------------------------------------------------------------------------- */\n\nconst CSS_RGB_REGEX = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i;\nconst COLOR_CACHE = new Map<string, string>();\n\n/** Normalizes short or long hex to lowercase #rrggbb; returns input if not hex. */\nconst normalizeHex = (hex: string) => {\n if (!hex || hex[0] !== '#') return hex;\n const v = hex.slice(1).toLowerCase();\n if (v.length === 3) return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`;\n if (v.length === 6) return `#${v}`;\n return hex.toLowerCase();\n};\n\n/**\n * Resolves any CSS color (hex, rgb/rgba, hsl/hsla, named, var(--token)) into #rrggbb.\n * SSR-safe: returns input unchanged if `document` is not available.\n */\nconst resolveCssColorToHex = (input: string): string => {\n if (!input) return input;\n const cached = COLOR_CACHE.get(input);\n if (cached) return cached;\n\n // Quick-path for hex.\n if (input.startsWith('#')) {\n const hex = normalizeHex(input);\n COLOR_CACHE.set(input, hex);\n return hex;\n }\n\n if (typeof document === 'undefined') {\n // SSR: cannot resolve computed styles → return as-is (caller should accept).\n return input;\n }\n\n // Use the browser to compute final color (resolves var(...), named, hsl, etc.)\n const el = document.createElement('span');\n el.style.color = input;\n document.body.appendChild(el);\n const computed = getComputedStyle(el).color || '';\n el.remove();\n\n // Expect \"rgb(...)\" or \"rgba(...)\" now.\n const m = computed.match(CSS_RGB_REGEX);\n if (!m) return input;\n\n const [, r = '0', g = '0', b = '0'] = m;\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0');\n const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`.toLowerCase();\n COLOR_CACHE.set(input, hex);\n return hex;\n};\n\nconst hexToRgb = (color: string) => {\n const hex = normalizeHex(resolveCssColorToHex(color)).slice(1);\n // Guard against bad inputs\n if (hex.length !== 6) return { r: 0, g: 0, b: 0 };\n const i = parseInt(hex, 16);\n return { r: (i >> 16) & 255, g: (i >> 8) & 255, b: i & 255 };\n};\n\nconst rgbToHex = (r: number, g: number, b: number) => {\n const to = (x: number) => Math.round(x).toString(16).padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n};\n\n/** Linear interpolation between two colors (0..1). */\nexport const lerpColor = (a: string, b: string, t: number) => {\n const A = hexToRgb(a);\n const B = hexToRgb(b);\n return rgbToHex(lerp(A.r, B.r, t), lerp(A.g, B.g, t), lerp(A.b, B.b, t));\n};\n\n/** YIQ perceived brightness, used to pick white/black text. */\nconst getBrightness = (color: string) => {\n const { r, g, b } = hexToRgb(color);\n return (r * 299 + g * 587 + b * 114) / 1000;\n};\n\n/** Returns '#FFFFFF' for dark backgrounds, '#212129' for light ones. */\nexport const getCellColor = (backgroundColor: string) => {\n return getBrightness(backgroundColor) < 150 ? '#FFFFFF' : '#212129';\n};\n\n/* -------------------------------------------------------------------------- */\n/* Scales / thresholds */\n/* -------------------------------------------------------------------------- */\n\n/** Creates a diverging scale: t∈[0..1] → color blended across [min→mid→max]. */\nconst makeDiverging = (minC: string, midC: string, maxC: string, midpoint = 0.5) => {\n const m = clamp01(midpoint);\n return (t: number) => {\n const x = clamp01(t);\n return x <= m\n ? lerpColor(minC, midC, m === 0 ? 1 : x / m)\n : lerpColor(midC, maxC, (x - m) / (1 - m));\n };\n};\n\n/** Parses \"NN%\" → 0..1; otherwise null. */\nconst parsePercentString = (s: string): number | null => {\n const t = s.trim();\n if (!t.endsWith('%')) return null;\n const n = Number.parseFloat(t.slice(0, -1));\n return Number.isFinite(n) ? clamp01(n / 100) : null;\n};\n\n/**\n * Converts a flexible threshold into a RAW domain value.\n * - number → raw value\n * - \"NN%\" → percentage of [rawMin..rawMax]\n * - undefined/invalid → fallback\n */\nexport const thresholdToRaw = (\n t: HeatMapPropsThreshold,\n rawMin: number,\n rawMax: number,\n fallback: number,\n): number => {\n if (t == null) return fallback;\n if (typeof t === 'number' && Number.isFinite(t)) return t;\n const asPct = typeof t === 'string' ? parsePercentString(t) : null;\n if (asPct != null) return rawMin + asPct * (rawMax - rawMin);\n\n // Last-chance: numeric string without %\n const maybe = Number(t as unknown as string);\n return Number.isFinite(maybe) ? maybe : fallback;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Cell value helpers */\n/* -------------------------------------------------------------------------- */\n\nconst toFiniteOrSelf = (v: number | string | undefined): number | string | undefined => {\n if (v == null) return v;\n const n = Number(v);\n return Number.isFinite(n) ? n : v;\n};\n\n/**\n * Normalizes the raw cell value for display/compute:\n * - if nullish, uses `displayNullAs` (if numeric string, coerces to number)\n * - if numeric-like, returns as number\n * - otherwise returns original string\n */\nexport const getCellValue = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n displayNullAs: string | number | undefined,\n): string | number | undefined => {\n const fallback =\n displayNullAs && Number.isFinite(Number(displayNullAs)) ? Number(displayNullAs) : displayNullAs;\n return toFiniteOrSelf(value ?? fallback);\n};\n\n/** Returns the background color for a given cell value using a prepared mapper. */\nexport const getCellBackground = (\n value: number | string | undefined,\n colorForValue: (t: number) => string,\n): string => {\n if (typeof value !== 'number' || !Number.isFinite(value))\n return getStyle('--em-tablechart-cell-background', '#fff');\n return colorForValue(value);\n};\n\n/** Formats the cell’s display text (respects showValues & measure.format). */\nexport const getCellDisplayValue = (\n value: number | string | undefined,\n showValues: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n measure: HeatMapPropsMeasure<any>,\n) => {\n if (!showValues) return null;\n if (typeof value === 'string' || value == null || Number.isNaN(value as number)) return value;\n return measure?.format ? measure.format(Number(value)) : value;\n};\n\n/* -------------------------------------------------------------------------- */\n/* Color mapper factory */\n/* -------------------------------------------------------------------------- */\n\n/** Returns midpoint in [0..1] for the diverging scale given raw min/max. */\nconst getMidPoint = (domainMin: number, domainMax: number) => {\n const range = domainMax - domainMin;\n if (range === 0) return 0.5;\n return ((domainMin + domainMax) / 2 - domainMin) / range;\n};\n\n/**\n * Builds a fast `(value:number) => color` mapper.\n *\n * Behavior:\n * - Inside [domainMin..domainMax]: interpolate via diverging scale.\n * - Below domain: darken from `minColor` toward black, eased & capped.\n * - Above domain: darken from `maxColor` toward black, eased & capped.\n * - Degenerate domain: always returns mid color.\n */\nexport const createColorForValue = ({\n domainMin,\n domainMax,\n rawMin,\n rawMax,\n minColor,\n midColor,\n maxColor,\n}: {\n domainMin: number;\n domainMax: number;\n rawMin: number;\n rawMax: number;\n minColor: string;\n midColor: string;\n maxColor: string;\n}) => {\n const midPoint = getMidPoint(domainMin, domainMax);\n const scale = makeDiverging(minColor, midColor, maxColor, midPoint);\n\n const leftTailLen = Math.max(1e-6, domainMin - rawMin);\n const rightTailLen = Math.max(1e-6, rawMax - domainMax);\n const domRange = domainMax - domainMin;\n\n if (domRange === 0) {\n // Degenerate domain → fixed color\n const mid = scale(0.5);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_v: number) => mid;\n }\n\n return (v: number) => {\n if (!Number.isFinite(v)) return scale(0.5);\n\n const t = (v - domainMin) / domRange;\n\n if (t <= 0) {\n const dist = Math.max(0, domainMin - v) / leftTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(minColor, LERP_LIGHTEST_COLOR, strength) : minColor;\n }\n\n if (t >= 1) {\n const dist = Math.max(0, v - domainMax) / rightTailLen;\n const strength = easeOutQuad(clamp01(dist)) * OUTSIDE_DARKEN_MAX;\n return strength > 0 ? lerpColor(maxColor, LERP_DARKEST_COLOR, strength) : maxColor;\n }\n\n return scale(t);\n };\n};\n","import { useMemo } from 'react';\n\ntype UseTableGetRowsPerPageProps = {\n availableHeight: number;\n headerHeight: number;\n rowHeight: number;\n footerHeight?: number;\n};\nexport const useTableGetRowsPerPage = ({\n availableHeight,\n headerHeight,\n rowHeight,\n footerHeight = 0,\n}: UseTableGetRowsPerPageProps): number =>\n useMemo(() => {\n const h = availableHeight;\n if (!h) return 0;\n\n // Available vertical space for BODY rows only\n let available = h - headerHeight - footerHeight;\n if (available < 0) available = 0;\n\n // DO NOT show partial rows: floor only\n const rows = Math.floor(available / rowHeight);\n return Math.max(0, rows);\n }, [availableHeight, headerHeight, rowHeight, footerHeight]);\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const shallowEqual = (object1: any, object2: any): boolean => {\n const keys1 = Object.keys(object1 ?? {});\n const keys2 = Object.keys(object2 ?? {});\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (object1[key]?.toString() !== object2[key]?.toString()) {\n return false;\n }\n }\n\n return true;\n};\n","import { useRef, useEffect, useCallback } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebounce<T extends (...args: any[]) => void>(\n fn: T,\n delay = 300,\n): (...args: Parameters<T>) => void {\n const timerRef = useRef<NodeJS.Timeout>(null);\n const fnRef = useRef(fn);\n\n // Always keep fn up to date without resetting timer\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n fnRef.current(...args);\n }, delay);\n },\n [delay],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n return debouncedFn;\n}\n"],"mappings":"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","names":["styles","styles","jsx","clsx","styles","jsx","jsxs","styles","clsx","jsx","clsx","styles","jsx","clsx","styles","jsx","jsx","jsxs","DropdownMenu","styles","clsx","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","jsx","jsxs","clsx","styles","jsx","Fragment","useEffect","useRef","styles","clsx","jsx","jsxs","styles","clsx","jsx","styles","useEffect","styles","jsx","clsx","styles","jsx","clsx","styles","jsx","jsxs","forwardRef","IconX","styles","clsx","forwardRef","jsx","jsxs","forwardRef","clsx","styles","IconX","jsx","jsxs","forwardRef","jsx","jsxs","useRef","useEffect","styles","Fragment","clsx","styles","jsx","jsxs","Fragment","useEffect","useMemo","useRef","useState","IconSearch","styles","jsx","jsxs","useState","useRef","useEffect","useMemo","IconSearch","styles","Fragment","forwardRef","jsx","forwardRef","value","useState","IconCaretDownFilled","styles","jsx","jsx","useState","useState","styles","jsx","jsxs","useState","styles","useRef","mergician","mergician","styles","mergician","jsx","useRef","ChartJS","CategoryScale","LinearScale","Title","Tooltip","Legend","LogarithmicScale","styles","useRef","mergician","mergician","mergician","ChartDataLabels","jsx","ChartJS","CategoryScale","LinearScale","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","useRef","mergician","styles","styles","styles","clsx","Fragment","jsx","jsxs","Fragment","jsx","jsx","jsxs","styles","useRef","ChartJS","Legend","Tooltip","ChartDataLabels","AnnotationPlugin","mergician","mergician","mergician","styles","useRef","useState","jsx","ChartJS","Tooltip","Legend","ChartDataLabels","AnnotationPlugin","useRef","mergician","styles","useRef","Pie","ArcElement","ChartJS","Legend","Tooltip","ChartDataLabels","mergician","styles","AnnotationPlugin","jsx","ChartJS","ArcElement","Tooltip","Legend","ChartDataLabels","useRef","Pie","React","styles","clsx","styles","useEffect","jsx","jsxs","IconCaretDownFilled","styles","clsx","jsx","jsxs","IconCaretDownFilled","styles","styles","clsx","useState","tableStyles","jsx","jsxs","styles","clsx","jsx","jsxs","clsx","styles","useEffect","useMemo","useState","tableStyles","clsx","jsx","jsxs","useMemo","useState","useEffect","clsx","tableStyles","useMemo","tableStyles","clsx","hex","jsx","jsxs","useMemo","clsx","tableStyles","useMemo","useRef","useEffect","useCallback"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embeddable.com/remarkable-ui",
3
- "version": "2.0.16",
3
+ "version": "2.0.17",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/embeddable-hq/remarkable-ui"