@embeddable.com/remarkable-ui 0.1.39 → 0.1.41

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.
Files changed (62) hide show
  1. package/dist/BarChartDefaultHorizontalPro.js +3 -3
  2. package/dist/BarChartDefaultPro.js +3 -3
  3. package/dist/BarChartGroupedHorizontalPro.js +3 -3
  4. package/dist/BarChartGroupedPro.js +3 -3
  5. package/dist/BarChartStackedHorizontalPro.js +3 -3
  6. package/dist/BarChartStackedPro.js +3 -3
  7. package/dist/{ChartCard-t-ie7CyA.js → ChartCard-CsgyAnzC.js} +2 -2
  8. package/dist/{ChartCard-t-ie7CyA.js.map → ChartCard-CsgyAnzC.js.map} +1 -1
  9. package/dist/{ComparisonPeriod.type.emb-DAJ28BEm.js → ComparisonPeriod.type.emb-ZjbGbiV1.js} +2 -2
  10. package/dist/{ComparisonPeriod.type.emb-DAJ28BEm.js.map → ComparisonPeriod.type.emb-ZjbGbiV1.js.map} +1 -1
  11. package/dist/ComparisonPeriodSelectFieldPro.js +4 -4
  12. package/dist/DateRangeSelectFieldPro.js +2 -2
  13. package/dist/DonutChartPro.js +2 -2
  14. package/dist/DonutLabelChartPro.js +2 -2
  15. package/dist/{EditorCard-CFwSMjsm.js → EditorCard-DAwqwoAp.js} +2 -2
  16. package/dist/{EditorCard-CFwSMjsm.js.map → EditorCard-DAwqwoAp.js.map} +1 -1
  17. package/dist/{KpiChart-CraGm3UZ.js → KpiChart-DKyxH3oh.js} +21 -21
  18. package/dist/{KpiChart-CraGm3UZ.js.map → KpiChart-DKyxH3oh.js.map} +1 -1
  19. package/dist/KpiChartNumberComparisonPro.js +6 -6
  20. package/dist/KpiChartNumberPro.js +4 -4
  21. package/dist/LineChartComparisonDefaultPro.js +33 -30
  22. package/dist/LineChartComparisonDefaultPro.js.map +1 -1
  23. package/dist/LineChartDefaultPro.js +34 -32
  24. package/dist/LineChartDefaultPro.js.map +1 -1
  25. package/dist/LineChartGroupedPro.js +3 -3
  26. package/dist/MultiSelectFieldPro.js +2 -2
  27. package/dist/PieChartPro.js +2 -2
  28. package/dist/{PivotTable-DOQvwsPJ.js → PivotTable-DCJT9sa0.js} +2 -2
  29. package/dist/{PivotTable-DOQvwsPJ.js.map → PivotTable-DCJT9sa0.js.map} +1 -1
  30. package/dist/PivotTablePro.js +4 -4
  31. package/dist/{SingleSelectField-C5CvaWcl.js → SingleSelectField-CMzbI0wG.js} +3 -3
  32. package/dist/{SingleSelectField-C5CvaWcl.js.map → SingleSelectField-CMzbI0wG.js.map} +1 -1
  33. package/dist/SingleSelectFieldPro.js +2 -2
  34. package/dist/TableChartPaginated.js +3 -3
  35. package/dist/{bars.utils-9JzdTZTY.js → bars.utils-DIunU5Xf.js} +4 -4
  36. package/dist/{bars.utils-9JzdTZTY.js.map → bars.utils-DIunU5Xf.js.map} +1 -1
  37. package/dist/{charts.utils-BCbFzrS3.js → charts.utils-9h6uemzB.js} +3 -3
  38. package/dist/{charts.utils-BCbFzrS3.js.map → charts.utils-9h6uemzB.js.map} +1 -1
  39. package/dist/{component.constants-CeRyckoA.js → component.constants-6DERKpeq.js} +2 -2
  40. package/dist/{component.constants-CeRyckoA.js.map → component.constants-6DERKpeq.js.map} +1 -1
  41. package/dist/embeddable-components.json +8 -8
  42. package/dist/{formatter.utils-CRniOO_L.js → formatter.utils-R5zIrZIA.js} +2 -2
  43. package/dist/{formatter.utils-CRniOO_L.js.map → formatter.utils-R5zIrZIA.js.map} +1 -1
  44. package/dist/{index-Bn9eEnFY.js → index-CLkczqL_.js} +4 -4
  45. package/dist/{index-Bn9eEnFY.js.map → index-CLkczqL_.js.map} +1 -1
  46. package/dist/{index-DWGU4X7I.js → index-Cj5wpig9.js} +4 -4
  47. package/dist/{index-DWGU4X7I.js.map → index-Cj5wpig9.js.map} +1 -1
  48. package/dist/{index-8bDe4KZU.js → index-Dfbt_iT7.js} +5 -5
  49. package/dist/{index-8bDe4KZU.js.map → index-Dfbt_iT7.js.map} +1 -1
  50. package/dist/{index-UTT7Qsiq.js → index-DfnO1U7b.js} +4 -4
  51. package/dist/{index-UTT7Qsiq.js.map → index-DfnO1U7b.js.map} +1 -1
  52. package/dist/{index-DpnU1wNV.js → index-YRGaBl06.js} +4 -4
  53. package/dist/{index-DpnU1wNV.js.map → index-YRGaBl06.js.map} +1 -1
  54. package/dist/{index-JjqlON15.js → index-hua9dsBD.js} +5 -5
  55. package/dist/{index-JjqlON15.js.map → index-hua9dsBD.js.map} +1 -1
  56. package/dist/index.js +18 -18
  57. package/dist/{pies.utils-CuMFaK2u.js → pies.utils-BHep0bTK.js} +4 -4
  58. package/dist/{pies.utils-CuMFaK2u.js.map → pies.utils-BHep0bTK.js.map} +1 -1
  59. package/dist/remarkable-ui.css +1 -1
  60. package/dist/{timeRange.utils-D8QUTull.js → timeRange.utils-C61mst0e.js} +2 -2
  61. package/dist/{timeRange.utils-D8QUTull.js.map → timeRange.utils-C61mst0e.js.map} +1 -1
  62. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
- import { d as r, z as s, t as d, c as u, ae as m, V as t, o as c } from "./component.constants-CeRyckoA.js";
3
- import { M as p, a as f } from "./index-DWGU4X7I.js";
2
+ import { d as r, z as s, t as d, c as u, ae as m, V as t, o as c } from "./component.constants-6DERKpeq.js";
3
+ import { M as p, a as f } from "./index-Cj5wpig9.js";
4
4
  const g = {
5
5
  name: "MultiSelectFieldPro",
6
6
  label: "Multi Select Field",
@@ -1,6 +1,6 @@
1
- import { d as a, w as s, z as t, t as o, c as n, s as i, a3 as r, e as m, f as l, V as d, o as c } from "./component.constants-CeRyckoA.js";
1
+ import { d as a, w as s, z as t, t as o, c as n, s as i, a3 as r, e as m, f as l, V as d, o as c } from "./component.constants-6DERKpeq.js";
2
2
  import { defineComponent as p } from "@embeddable.com/react";
3
- import { P as u } from "./index-Bn9eEnFY.js";
3
+ import { P as u } from "./index-CLkczqL_.js";
4
4
  const C = {
5
5
  name: "PieChartPro",
6
6
  label: "Pie Chart",
@@ -1,4 +1,4 @@
1
- import { j as c, ag as h, ah as p } from "./component.constants-CeRyckoA.js";
1
+ import { j as c, ag as h, ah as p } from "./component.constants-6DERKpeq.js";
2
2
  import { useMemo as $, useState as X, useEffect as Y } from "react";
3
3
  const Z = "_tableContainer_2e613_3", L = "_table_2e613_3", D = "_cell_2e613_78", m = "_header_2e613_106", tt = "_bold_2e613_111", o = {
4
4
  tableContainer: Z,
@@ -250,4 +250,4 @@ const Z = "_tableContainer_2e613_3", L = "_table_2e613_3", D = "_cell_2e613_78",
250
250
  export {
251
251
  ot as P
252
252
  };
253
- //# sourceMappingURL=PivotTable-DOQvwsPJ.js.map
253
+ //# sourceMappingURL=PivotTable-DCJT9sa0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PivotTable-DOQvwsPJ.js","sources":["../src/remarkable-ui/charts/tables/PivotTable/PivotTable.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport styles from './PivotTable.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { Typography } from '../../../shared/Typography/Typography';\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\nconst getCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : undefined,\n width: width ? `${width}px` : undefined,\n maxWidth: width ? `${width}px` : undefined,\n };\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}) => {\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) 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) 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={styles.tableContainer}>\n <table\n className={styles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n className={clsx(styles.cell, styles.header)}\n title={columnDimension.label}\n >\n <Typography>{columnDimension.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={columnValueDisplay}\n >\n <Typography>{columnValueDisplay}</Typography>\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={clsx(styles.cell, styles.bold)}\n title={totalLabel}\n >\n <Typography>{totalLabel}</Typography>\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n className={clsx(styles.cell, styles.header)}\n title={rowDimension.label}\n style={getCellWidthStyle(firstColumnWidth)}\n >\n <Typography>{rowDimension.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={measure.label}\n style={getCellWidthStyle(columnWidth)}\n >\n <Typography>{measure.label}</Typography>\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={clsx(styles.cell, styles.bold)}\n title={measure.label}\n style={getCellWidthStyle(columnWidth)}\n >\n <Typography>{measure.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={rowDimensionValue}\n >\n <Typography>{rowDimensionValue}</Typography>\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(row)?.get(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} className={clsx(styles.cell)} title={columnValueDisplay}>\n <Typography>{columnValueDisplay}</Typography>\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(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\n key={key}\n className={clsx(styles.cell, styles.bold)}\n title={displayValue}\n >\n <Typography>{displayValue}</Typography>\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n {hasColumnTotals && (\n <tr key=\"totals-row\">\n <th scope=\"row\" className={clsx(styles.cell, styles.bold)} title={totalLabel}>\n <Typography>{totalLabel}</Typography>\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol = 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(100, measure.percentageDecimalPlaces ?? 0);\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td\n key={key}\n className={clsx(styles.cell, styles.bold)}\n title={columnValueDisplay}\n >\n <Typography>{columnValueDisplay}</Typography>\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={clsx(styles.cell, styles.bold)} title={displayValue}>\n <Typography>{displayValue}</Typography>\n </td>\n );\n })}\n </tr>\n )}\n </tfoot>\n </table>\n </div>\n );\n};\n"],"names":["isNumber","v","getPercentageDisplay","percentage","percentageDecimalPlaces","getCellWidthStyle","width","PivotTable","columnWidth","firstColumnWidth","data","measures","rowDimension","columnDimension","progressive","batchSize","batchDelayMs","rowTotalsFor","columnTotalsFor","totalLabel","rowValues","useMemo","s","d","rowValue","columnValues","columnValue","cellMap","map","r","c","rowTotalsSet","columnTotalsSet","hasRowTotals","hasColumnTotals","measureIndexByKey","m","i","colTotals","rowTotals","grandTotals","cTotals","rTotals","gTotals","cArr","rArr","raw","visibleCount","setVisibleCount","useState","useEffect","cancelled","t","tick","prev","next","visibleRows","jsx","styles","jsxs","clsx","Typography","columnValueDisplay","col","measure","idx","row","rowDimensionValue","object","_a","value","key","mi","totalsForCol","colTotal","totalsForRow","measureIndex","displayValue","show","mm"],"mappings":"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"}
1
+ {"version":3,"file":"PivotTable-DCJT9sa0.js","sources":["../src/remarkable-ui/charts/tables/PivotTable/PivotTable.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport styles from './PivotTable.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { Typography } from '../../../shared/Typography/Typography';\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\nconst getCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : undefined,\n width: width ? `${width}px` : undefined,\n maxWidth: width ? `${width}px` : undefined,\n };\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}) => {\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) 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) 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={styles.tableContainer}>\n <table\n className={styles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n className={clsx(styles.cell, styles.header)}\n title={columnDimension.label}\n >\n <Typography>{columnDimension.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={columnValueDisplay}\n >\n <Typography>{columnValueDisplay}</Typography>\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={clsx(styles.cell, styles.bold)}\n title={totalLabel}\n >\n <Typography>{totalLabel}</Typography>\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n className={clsx(styles.cell, styles.header)}\n title={rowDimension.label}\n style={getCellWidthStyle(firstColumnWidth)}\n >\n <Typography>{rowDimension.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={measure.label}\n style={getCellWidthStyle(columnWidth)}\n >\n <Typography>{measure.label}</Typography>\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={clsx(styles.cell, styles.bold)}\n title={measure.label}\n style={getCellWidthStyle(columnWidth)}\n >\n <Typography>{measure.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={rowDimensionValue}\n >\n <Typography>{rowDimensionValue}</Typography>\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(row)?.get(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} className={clsx(styles.cell)} title={columnValueDisplay}>\n <Typography>{columnValueDisplay}</Typography>\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(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\n key={key}\n className={clsx(styles.cell, styles.bold)}\n title={displayValue}\n >\n <Typography>{displayValue}</Typography>\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n {hasColumnTotals && (\n <tr key=\"totals-row\">\n <th scope=\"row\" className={clsx(styles.cell, styles.bold)} title={totalLabel}>\n <Typography>{totalLabel}</Typography>\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol = 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(100, measure.percentageDecimalPlaces ?? 0);\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td\n key={key}\n className={clsx(styles.cell, styles.bold)}\n title={columnValueDisplay}\n >\n <Typography>{columnValueDisplay}</Typography>\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={clsx(styles.cell, styles.bold)} title={displayValue}>\n <Typography>{displayValue}</Typography>\n </td>\n );\n })}\n </tr>\n )}\n </tfoot>\n </table>\n </div>\n );\n};\n"],"names":["isNumber","v","getPercentageDisplay","percentage","percentageDecimalPlaces","getCellWidthStyle","width","PivotTable","columnWidth","firstColumnWidth","data","measures","rowDimension","columnDimension","progressive","batchSize","batchDelayMs","rowTotalsFor","columnTotalsFor","totalLabel","rowValues","useMemo","s","d","rowValue","columnValues","columnValue","cellMap","map","r","c","rowTotalsSet","columnTotalsSet","hasRowTotals","hasColumnTotals","measureIndexByKey","m","i","colTotals","rowTotals","grandTotals","cTotals","rTotals","gTotals","cArr","rArr","raw","visibleCount","setVisibleCount","useState","useEffect","cancelled","t","tick","prev","next","visibleRows","jsx","styles","jsxs","clsx","Typography","columnValueDisplay","col","measure","idx","row","rowDimensionValue","object","_a","value","key","mi","totalsForCol","colTotal","totalsForRow","measureIndex","displayValue","show","mm"],"mappings":";;;;;;;;GAQMA,IAAW,CAACC,MAAW,OAAOA,KAAM,YAAY,CAAC,OAAO,MAAMA,CAAC,GAE/DC,IAAuB,CAACC,GAAoBC,MACzC,GAAGD,EAAW,QAAQC,CAAuB,CAAC,KAGjDC,IAAoB,CAACC,OAClB;AAAA,EACL,UAAUA,IAAQ,GAAGA,CAAK,OAAO;AAAA,EACjC,OAAOA,IAAQ,GAAGA,CAAK,OAAO;AAAA,EAC9B,UAAUA,IAAQ,GAAGA,CAAK,OAAO;AAAA,IAIxBC,KAAuC,CAAC;AAAA,EACnD,aAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,cAAAC,IAAe;AAAA,EACf,cAAAC,IAAe,CAAA;AAAA,EACf,iBAAAC,IAAkB,CAAA;AAAA,EAClB,YAAAC,IAAa;AACf,MAAM;AACJ,QAAMC,IAAYC,EAAQ,MAAM;AAC9B,UAAMC,wBAAQ,IAAA;AACd,eAAWC,KAAKb,GAAM;AACpB,YAAMc,IAAWD,EAAEX,EAAa,GAAG;AACnC,MAAIY,KAAUF,EAAE,IAAIE,CAAQ;AAAA,IAC9B;AACA,WAAO,MAAM,KAAKF,CAAC;AAAA,EACrB,GAAG,CAACZ,GAAME,EAAa,GAAG,CAAC,GAErBa,IAAeJ,EAAQ,MAAM;AACjC,UAAMC,wBAAQ,IAAA;AACd,eAAWC,KAAKb,GAAM;AACpB,YAAMgB,IAAcH,EAAEV,EAAgB,GAAG;AACzC,MAAIa,KAAaJ,EAAE,IAAII,CAAqB;AAAA,IAC9C;AACA,WAAO,MAAM,KAAKJ,CAAC;AAAA,EACrB,GAAG,CAACZ,GAAMG,EAAgB,GAAG,CAAC,GAExBc,IAAUN,EAAQ,MAAM;AAC5B,UAAMO,wBAAU,IAAA;AAChB,eAAWL,KAAKb,GAAM;AACpB,YAAMmB,IAAI,OAAON,EAAEX,EAAa,GAAG,CAAC,GAC9BkB,IAAI,OAAOP,EAAEV,EAAgB,GAAG,CAAC;AACvC,MAAKe,EAAI,IAAIC,CAAC,OAAO,IAAIA,GAAG,oBAAI,KAAK,GACrCD,EAAI,IAAIC,CAAC,EAAG,IAAIC,GAAGP,CAAwB;AAAA,IAC7C;AACA,WAAOK;AAAA,EACT,GAAG,CAAClB,GAAME,EAAa,KAAKC,EAAgB,GAAG,CAAC,GAE1CkB,IAAeV,EAAQ,MAAM,IAAI,IAAYJ,CAAY,GAAG,CAACA,CAAY,CAAC,GAC1Ee,IAAkBX,EAAQ,MAAM,IAAI,IAAYH,CAAe,GAAG,CAACA,CAAe,CAAC,GACnFe,IAAeF,EAAa,OAAO,GACnCG,IAAkBF,EAAgB,OAAO,GAEzCG,IAAoBd,EAAQ,MAAM;AACtC,UAAMO,wBAAU,IAAA;AAChB,WAAAjB,EAAS,QAAQ,CAACyB,GAAGC,MAAMT,EAAI,IAAI,OAAOQ,EAAE,GAAG,GAAGC,CAAC,CAAC,GAC7CT;AAAA,EACT,GAAG,CAACjB,CAAQ,CAAC,GAEP,EAAE,WAAA2B,GAAW,WAAAC,GAAW,aAAAC,EAAA,IAAgBnB,EAAQ,MAAM;AAC1D,UAAMoB,wBAAc,IAAA,GACdC,wBAAc,IAAA,GACdC,IAAUhC,EAAS,IAAI,MAAM,CAAC;AAEpC,eAAWY,KAAKb,GAAM;AACpB,YAAMmB,IAAI,OAAON,EAAEX,EAAa,GAAG,CAAC,GAC9BkB,IAAI,OAAOP,EAAEV,EAAgB,GAAG,CAAC,GACjC+B,IAAOH,EAAQ,IAAIX,CAAC,KAAKnB,EAAS,IAAI,MAAM,CAAC,GAC7CkC,IAAOH,EAAQ,IAAIb,CAAC,KAAKlB,EAAS,IAAI,MAAM,CAAC;AAEnD,MAAAA,EAAS,QAAQ,CAACyB,GAAGC,MAAM;AACzB,cAAMS,IAAOvB,KAAA,gBAAAA,EAAYa,EAAE,MACrBnC,IAAI,OAAO6C,CAAG;AACpB,QAAK,OAAO,MAAM7C,CAAC,MACjB2C,EAAKP,CAAC,KAAMpC,GACZ4C,EAAKR,CAAC,KAAMpC,GACZ0C,EAAQN,CAAC,KAAMpC;AAAA,MAEnB,CAAC,GAEDwC,EAAQ,IAAIX,GAAGc,CAAI,GACnBF,EAAQ,IAAIb,GAAGgB,CAAI;AAAA,IACrB;AAEA,eAAWf,KAAKL;AACd,MAAKgB,EAAQ,IAAI,OAAOX,CAAC,CAAC,KACxBW,EAAQ;AAAA,QACN,OAAOX,CAAC;AAAA,QACRnB,EAAS,IAAI,MAAM,CAAC;AAAA,MAAA;AAG1B,eAAWkB,KAAKT;AACd,MAAKsB,EAAQ,IAAI,OAAOb,CAAC,CAAC,KACxBa,EAAQ;AAAA,QACN,OAAOb,CAAC;AAAA,QACRlB,EAAS,IAAI,MAAM,CAAC;AAAA,MAAA;AAI1B,WAAO,EAAE,WAAW8B,GAAS,WAAWC,GAAS,aAAaC,EAAA;AAAA,EAChE,GAAG,CAACjC,GAAMC,GAAUC,EAAa,KAAKC,EAAgB,KAAKY,GAAcL,CAAS,CAAC,GAE7E,CAAC2B,GAAcC,CAAe,IAAIC;AAAA,IAAS,MAC/CnC,IAAc,KAAK,IAAIC,GAAWK,EAAU,MAAM,IAAIA,EAAU;AAAA,EAAA;AAGlE,EAAA8B,EAAU,MAAM;AACd,QAAI,CAACpC,GAAa;AAChB,MAAAkC,EAAgB5B,EAAU,MAAM;AAChC;AAAA,IACF;AACA,QAAI+B,IAAY,IACZC,IAAmB;AACvB,IAAAJ,EAAgB,CAAC;AAEjB,UAAMK,IAAO,MAAM;AACjB,MAAAL,EAAgB,CAACM,MAAS;AACxB,cAAMC,IAAO,KAAK,IAAID,IAAOvC,GAAWK,EAAU,MAAM;AACxD,eAAImC,IAAOnC,EAAU,UAAU,CAAC+B,MAC9BC,IAAI,OAAO,WAAWC,GAAMrC,CAAY,IAEnCuC;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAAH,IAAI,OAAO,WAAWC,GAAMrC,CAAY,GAEjC,MAAM;AACX,MAAAmC,IAAY,IACRC,MAAM,QAAM,OAAO,aAAaA,CAAC;AAAA,IACvC;AAAA,EACF,GAAG,CAACtC,GAAaC,GAAWC,GAAcI,EAAU,QAAQV,CAAI,CAAC;AAEjE,QAAM8C,IAAc1C,IAAcM,EAAU,MAAM,GAAG2B,CAAY,IAAI3B;AAErE,SACEqC,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAWC,EAAO,gBACrB,UAAAC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWD,EAAO;AAAA,MAClB,cAAY,GAAG9C,EAAa,KAAK,OAAOC,EAAgB,KAAK;AAAA,MAE7D,UAAA;AAAA,QAAA8C,gBAAAA,OAAC,SAAA,EACC,UAAA;AAAA,UAAAA,gBAAAA,OAAC,MAAA,EACC,UAAA;AAAA,YAAAF,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAS;AAAA,gBACT,WAAWG,EAAKF,EAAO,MAAMA,EAAO,MAAM;AAAA,gBAC1C,OAAO7C,EAAgB;AAAA,gBAEvB,UAAA4C,gBAAAA,EAAAA,IAACI,GAAA,EAAY,UAAAhD,EAAgB,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,YAEpCY,EAAa,IAAI,CAACC,MAAgB;AACjC,oBAAMoC,IAAqBjD,EAAgB,cACvCA,EAAgB,YAAYa,CAAW,IACvCA;AACJ,qBACE+B,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,OAAM;AAAA,kBACN,SAAS9C,EAAS;AAAA,kBAClB,WAAWiD,EAAKF,EAAO,MAAMA,EAAO,MAAM;AAAA,kBAC1C,OAAOI;AAAA,kBAEP,UAAAL,gBAAAA,EAAAA,IAACI,KAAY,UAAAC,EAAA,CAAmB;AAAA,gBAAA;AAAA,gBAN3B,OAAOpC,CAAW;AAAA,cAAA;AAAA,YAS7B,CAAC;AAAA,YACAO,KACCwB,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAM;AAAA,gBACN,SAAS,MAAM,KAAK1B,CAAY,EAAE;AAAA,gBAClC,WAAW6B,EAAKF,EAAO,MAAMA,EAAO,IAAI;AAAA,gBACxC,OAAOvC;AAAA,gBAEP,UAAAsC,gBAAAA,EAAAA,IAACI,KAAY,UAAA1C,EAAA,CAAW;AAAA,cAAA;AAAA,cANpB;AAAA,YAAA;AAAA,UAON,GAEJ;AAAA,iCACC,MAAA,EACC,UAAA;AAAA,YAAAsC,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAS;AAAA,gBACT,WAAWG,EAAKF,EAAO,MAAMA,EAAO,MAAM;AAAA,gBAC1C,OAAO9C,EAAa;AAAA,gBACpB,OAAOP,EAAkBI,CAAgB;AAAA,gBAEzC,UAAAgD,gBAAAA,EAAAA,IAACI,GAAA,EAAY,UAAAjD,EAAa,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,YAEjCa,EAAa;AAAA,cAAQ,CAACsC,MACrBpD,EAAS,IAAI,CAACqD,GAASC,MACrBR,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,OAAM;AAAA,kBACN,WAAWG,EAAKF,EAAO,MAAMA,EAAO,MAAM;AAAA,kBAC1C,OAAOM,EAAQ;AAAA,kBACf,OAAO3D,EAAkBG,CAAW;AAAA,kBAEpC,UAAAiD,gBAAAA,EAAAA,IAACI,GAAA,EAAY,UAAAG,EAAQ,MAAA,CAAM;AAAA,gBAAA;AAAA,gBANtB,OAAO,OAAOD,CAAG,CAAC,IAAIC,EAAQ,GAAG,IAAIC,CAAG;AAAA,cAAA,CAQhD;AAAA,YAAA;AAAA,YAEFhC,KACCtB,EACG,OAAO,CAACqD,MAAYjC,EAAa,IAAIiC,EAAQ,GAAG,CAAC,EACjD,IAAI,CAACA,GAASC,MACbR,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAM;AAAA,gBACN,WAAWG,EAAKF,EAAO,MAAMA,EAAO,IAAI;AAAA,gBACxC,OAAOM,EAAQ;AAAA,gBACf,OAAO3D,EAAkBG,CAAW;AAAA,gBAEpC,UAAAiD,gBAAAA,EAAAA,IAACI,GAAA,EAAY,UAAAG,EAAQ,MAAA,CAAM;AAAA,cAAA;AAAA,cANtB,aAAaA,EAAQ,GAAG,IAAIC,CAAG;AAAA,YAAA,CAQvC;AAAA,UAAA,EAAA,CACP;AAAA,QAAA,GACF;AAAA,QACAR,gBAAAA,EAAAA,IAAC,SAAA,EACE,UAAAD,EAAY,IAAI,CAACU,MAAQ;AACxB,gBAAMC,IAAoBvD,EAAa,cACnCA,EAAa,YAAYsD,CAAG,IAC5BA;AACJ,wCACG,MAAA,EACC,UAAA;AAAA,YAAAT,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,WAAWG,EAAKF,EAAO,MAAMA,EAAO,MAAM;AAAA,gBAC1C,OAAOS;AAAA,gBAEP,UAAAV,gBAAAA,EAAAA,IAACI,KAAY,UAAAM,EAAA,CAAkB;AAAA,cAAA;AAAA,YAAA;AAAA,YAGhC1C,EAAa;AAAA,cAAQ,CAACC,MACrBf,EAAS,IAAI,CAACqD,GAASC,MAAQ;;AAC7B,sBAAMG,MAASC,IAAA1C,EAAQ,IAAIuC,CAAG,MAAf,gBAAAG,EAAkB,IAAI3C,OAAgB,CAAA,GAC/C4C,IAAQF,KAAA,gBAAAA,EAASJ,EAAQ,MAEzBO,IAAM,QAAQL,CAAG,IAAIxC,CAAW,IAAIsC,EAAQ,GAAG,IAAIC,CAAG,IAuBtDH,KAtBkB,MAAM;AAC5B,sBAAIE,EAAQ,kBAAkB;AAC5B,0BAAMQ,IAAKrC,EAAkB,IAAI,OAAO6B,EAAQ,GAAG,CAAC,KAAK,IACnDS,IACJnC,EAAU,IAAI,OAAOZ,CAAW,CAAC,KAAKf,EAAS,IAAI,MAAM,CAAC,GACtD+D,IAAWF,KAAM,IAAKC,EAAaD,CAAE,KAAK,IAAK;AAQrD,wBALER,EAAQ,oBACRhE,EAAS,OAAOsE,CAAK,CAAC,KACtBtE,EAAS0E,CAAQ,KACjBA,IAAW;AAIX,6BAAO,IADaJ,IAAQI,IAAY,KACnB,QAAQV,EAAQ,2BAA2B,CAAC,CAAC;AAAA,kBAEtE;AAEA,yBAAOA,EAAQ,WAAWA,EAAQ,SAASI,CAAM,IAAIE;AAAA,gBACvD,GAE2B;AAE3B,uBACEb,gBAAAA,EAAAA,IAAC,MAAA,EAAa,WAAWG,EAAKF,EAAO,IAAI,GAAG,OAAOI,GACjD,UAAAL,gBAAAA,EAAAA,IAACI,GAAA,EAAY,UAAAC,EAAA,CAAmB,KADzBS,CAET;AAAA,cAEJ,CAAC;AAAA,YAAA;AAAA,YAGFtC,KACCtB,EACG,OAAO,CAACqD,MAAYjC,EAAa,IAAIiC,EAAQ,GAAG,CAAC,EACjD,IAAI,CAACA,GAASC,MAAQ;AACrB,oBAAMU,IAAepC,EAAU,IAAI2B,CAAG,KAAKvD,EAAS,IAAI,MAAM,CAAC,GACzDiE,IAAezC,EAAkB,IAAI6B,EAAQ,GAAG,KAAK,IACrDO,IAAM,aAAa,OAAOL,CAAG,CAAC,IAAIF,EAAQ,GAAG,IAAIC,CAAG,IACpDK,IACJM,KAAgB,IAAKD,EAAaC,CAAY,KAAK,IAAK;AAC1D,kBAAIC,IAAoBP;AAExB,qBAAIN,EAAQ,mBACVa,IAAe3E;AAAA,gBACZoE,KAAS9B,EAAYoC,CAAY,KAAK,KAAM;AAAA,gBAC7CZ,EAAQ,2BAA2B;AAAA,cAAA,IAE5BA,EAAQ,aACjBa,IAAeb,EAAQ,SAAS,EAAE,CAACA,EAAQ,GAAG,GAAGM,GAAO,IAIxDb,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAWG,EAAKF,EAAO,MAAMA,EAAO,IAAI;AAAA,kBACxC,OAAOmB;AAAA,kBAEP,UAAApB,gBAAAA,EAAAA,IAACI,KAAY,UAAAgB,EAAA,CAAa;AAAA,gBAAA;AAAA,gBAJrBN;AAAA,cAAA;AAAA,YAOX,CAAC;AAAA,UAAA,EAAA,GA5EE,OAAOL,CAAG,EA6EnB;AAAA,QAEJ,CAAC,EAAA,CACH;AAAA,QACAT,gBAAAA,EAAAA,IAAC,SAAA,EACE,UAAAvB,KACCyB,gBAAAA,OAAC,MAAA,EACC,UAAA;AAAA,UAAAF,gBAAAA,MAAC,MAAA,EAAG,OAAM,OAAM,WAAWG,EAAKF,EAAO,MAAMA,EAAO,IAAI,GAAG,OAAOvC,GAChE,UAAAsC,gBAAAA,EAAAA,IAACI,GAAA,EAAY,aAAW,GAC1B;AAAA,UAECpC,EAAa;AAAA,YAAQ,CAACC,MACrBf,EAAS,IAAI,CAACqD,GAASC,MAAQ;AAC7B,oBAAMa,IAAO9C,EAAgB,IAAI,OAAOgC,EAAQ,GAAG,CAAC,GAC9CS,IAAenC,EAAU,IAAI,OAAOZ,CAAW,CAAC,KAAKf,EAAS,IAAI,MAAM,CAAC,GACzE6D,IAAK7D,EAAS,UAAU,CAACoE,MAAO,OAAOA,EAAG,GAAG,MAAM,OAAOf,EAAQ,GAAG,CAAC,GACtEO,IAAM,aAAa,OAAO7C,CAAW,CAAC,IAAIsC,EAAQ,GAAG,IAAIC,CAAG,IAC5DK,IAAgBG,EAAaD,CAAE,KAAK;AAC1C,kBAAIK,IAAoBP;AAExB,cAAIN,EAAQ,mBACVa,IAAe3E,EAAqB,KAAK8D,EAAQ,2BAA2B,CAAC,IACpEA,EAAQ,aACjBa,IAAeb,EAAQ,SAAS,EAAE,CAACA,EAAQ,GAAG,GAAGM,GAAO;AAE1D,oBAAMR,IAAqBgB,IAAOD,IAAe;AAEjD,qBACEpB,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAWG,EAAKF,EAAO,MAAMA,EAAO,IAAI;AAAA,kBACxC,OAAOI;AAAA,kBAEP,UAAAL,gBAAAA,EAAAA,IAACI,KAAY,UAAAC,EAAA,CAAmB;AAAA,gBAAA;AAAA,gBAJ3BS;AAAA,cAAA;AAAA,YAOX,CAAC;AAAA,UAAA;AAAA,UAGFtC,KACCtB,EACG,OAAO,CAACqD,MAAYjC,EAAa,IAAIiC,EAAQ,GAAG,CAAC,EACjD,IAAI,CAACA,GAASC,MAAQ;AACrB,kBAAMW,IAAejE,EAAS,UAAU,CAACyB,MAAM,OAAOA,EAAE,GAAG,MAAM4B,EAAQ,GAAG,GACtEO,IAAM,eAAeP,EAAQ,GAAG,IAAIC,CAAG,IACvCK,IAAgB9B,EAAYoC,CAAY,KAAK;AACnD,gBAAIC,IAAoBP;AAExB,mBAAIN,EAAQ,mBACVa,IAAe3E;AAAA,cACb;AAAA,cACA8D,EAAQ,2BAA2B;AAAA,YAAA,IAE5BA,EAAQ,aACjBa,IAAeb,EAAQ,SAAS,EAAE,CAACA,EAAQ,GAAG,GAAGM,GAAO,IAIxDb,gBAAAA,EAAAA,IAAC,MAAA,EAAa,WAAWG,EAAKF,EAAO,MAAMA,EAAO,IAAI,GAAG,OAAOmB,GAC9D,UAAApB,gBAAAA,EAAAA,IAACI,GAAA,EAAY,UAAAgB,EAAA,CAAa,KADnBN,CAET;AAAA,UAEJ,CAAC;AAAA,QAAA,EAAA,GAxDC,YAyDR,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -1,10 +1,10 @@
1
- import { i as y, r as M, j as m, U as W, d as N, a as u, a4 as c, b as d, t as S, c as j, Y as B, a5 as G, Z as p, A as I, o as Y } from "./component.constants-CeRyckoA.js";
1
+ import { i as y, r as M, j as m, U as W, d as N, a as u, a4 as c, b as d, t as S, c as j, Y as B, a5 as G, Z as p, A as I, o as Y } from "./component.constants-6DERKpeq.js";
2
2
  import { useTheme as k, defineComponent as O } from "@embeddable.com/react";
3
- import { C as V } from "./ChartCard-t-ie7CyA.js";
3
+ import { C as V } from "./ChartCard-CsgyAnzC.js";
4
4
  import { useRef as E } from "react";
5
- import { P as L } from "./PivotTable-DOQvwsPJ.js";
5
+ import { P as L } from "./PivotTable-DCJT9sa0.js";
6
6
  import { u as b } from "./charts.newFillGaps.hooks-CEXFxNVs.js";
7
- import { g as T } from "./formatter.utils-CRniOO_L.js";
7
+ import { g as T } from "./formatter.utils-R5zIrZIA.js";
8
8
  const U = (e, o) => {
9
9
  const n = T(o);
10
10
  return e.measures.map((s) => {
@@ -1,6 +1,6 @@
1
- import { j as s, ap as D, as as N, at as q, aq as x, ar as w, ao as K } from "./component.constants-CeRyckoA.js";
1
+ import { j as s, ap as D, as as N, at as q, aq as x, ar as w, ao as K } from "./component.constants-6DERKpeq.js";
2
2
  import { useState as b, useRef as P, useEffect as T, useMemo as O } from "react";
3
- import { u as z, d as A, g as G, I as H, S as J, a as M } from "./EditorCard-CFwSMjsm.js";
3
+ import { u as z, d as A, g as G, I as H, S as J, a as M } from "./EditorCard-DAwqwoAp.js";
4
4
  const Q = "_selectField_73cni_1", U = {
5
5
  selectField: Q
6
6
  }, Y = ({
@@ -104,4 +104,4 @@ const Q = "_selectField_73cni_1", U = {
104
104
  export {
105
105
  Y as S
106
106
  };
107
- //# sourceMappingURL=SingleSelectField-C5CvaWcl.js.map
107
+ //# sourceMappingURL=SingleSelectField-CMzbI0wG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SingleSelectField-C5CvaWcl.js","sources":["../src/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { SelectListCategory } from '../shared/SelectList/SelectListOptions/SelectListCategory/SelectListCategory';\nimport { groupOptionsByCategory } from '../shared/SelectList/selectList.utils';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport styles from './SingleSelectField.module.css';\nimport { FieldErrorMessage } from '../../../shared/FieldErrorMessage/FieldErrorMessage';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n isSearchable?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n};\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n isSearchable,\n isClearable,\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 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 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 className={styles.selectField}>\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectList>\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 />\n )}\n <SelectListOptions disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <div key={category}>\n <SelectListCategory 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 </div>\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 </SelectListOptions>\n </SelectList>\n </Dropdown>\n {errorMessage && <FieldErrorMessage message={errorMessage} />}\n </div>\n );\n};\n"],"names":["SingleSelectField","value","startIcon","options","disabled","placeholder","isSearchable","isClearable","isLoading","noOptionsMessage","onChange","onSearch","error","errorMessage","isOpen","setIsOpen","useState","searchValue","setSearchValue","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","option","opt","debouncedSearch","useMemo","debounce","displayOptions","groupedOptions","groupOptionsByCategory","handleChange","newValue","handleSearch","newSearch","hasError","jsxs","styles","jsx","Dropdown","SelectButton","SelectList","TextField","IconSearch","SelectListOptions","category","categoryOptions","SelectListCategory","SelectListOption","FieldErrorMessage"],"mappings":"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"}
1
+ {"version":3,"file":"SingleSelectField-CMzbI0wG.js","sources":["../src/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { SelectListCategory } from '../shared/SelectList/SelectListOptions/SelectListCategory/SelectListCategory';\nimport { groupOptionsByCategory } from '../shared/SelectList/selectList.utils';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport styles from './SingleSelectField.module.css';\nimport { FieldErrorMessage } from '../../../shared/FieldErrorMessage/FieldErrorMessage';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n isSearchable?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n};\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n isSearchable,\n isClearable,\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 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 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 className={styles.selectField}>\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectList>\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 />\n )}\n <SelectListOptions disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <div key={category}>\n <SelectListCategory 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 </div>\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 </SelectListOptions>\n </SelectList>\n </Dropdown>\n {errorMessage && <FieldErrorMessage message={errorMessage} />}\n </div>\n );\n};\n"],"names":["SingleSelectField","value","startIcon","options","disabled","placeholder","isSearchable","isClearable","isLoading","noOptionsMessage","onChange","onSearch","error","errorMessage","isOpen","setIsOpen","useState","searchValue","setSearchValue","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","option","opt","debouncedSearch","useMemo","debounce","displayOptions","groupedOptions","groupOptionsByCategory","handleChange","newValue","handleSearch","newSearch","hasError","jsxs","styles","jsx","Dropdown","SelectButton","SelectList","TextField","IconSearch","SelectListOptions","category","categoryOptions","SelectListCategory","SelectListOption","FieldErrorMessage"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
- import { d as s, z as r, t as d, c as m, ae as c, V as n, o as u } from "./component.constants-CeRyckoA.js";
3
- import { M as p, S as g } from "./index-JjqlON15.js";
2
+ import { d as s, z as r, t as d, c as m, ae as c, V as n, o as u } from "./component.constants-6DERKpeq.js";
3
+ import { M as p, S as g } from "./index-hua9dsBD.js";
4
4
  const f = {
5
5
  name: "SingleSelectFieldPro",
6
6
  label: "Single Select Field",
@@ -1,8 +1,8 @@
1
- import { a6 as y, C as m, i as B, r as U, j as I, a7 as G, U as q, a8 as Y, d as J, a9 as P, aa as K, ab as Q, t as X, c as Z, Y as $, a5 as O, A as ee, ac as ne, V as te, o as M, m as ae } from "./component.constants-CeRyckoA.js";
1
+ import { a6 as y, C as m, i as B, r as U, j as I, a7 as G, U as q, a8 as Y, d as J, a9 as P, aa as K, ab as Q, t as X, c as Z, Y as $, a5 as O, A as ee, ac as ne, V as te, o as M, m as ae } from "./component.constants-6DERKpeq.js";
2
2
  import { useTheme as ie, defineComponent as oe } from "@embeddable.com/react";
3
- import { C as se } from "./ChartCard-t-ie7CyA.js";
3
+ import { C as se } from "./ChartCard-CsgyAnzC.js";
4
4
  import { useState as D, useRef as R, useLayoutEffect as re, useMemo as le, useEffect as u, useCallback as z } from "react";
5
- import { g as ce } from "./formatter.utils-CRniOO_L.js";
5
+ import { g as ce } from "./formatter.utils-R5zIrZIA.js";
6
6
  const de = (e) => {
7
7
  const [n, t] = D(0), a = R(void 0);
8
8
  return re(() => {
@@ -1,7 +1,7 @@
1
- import { C as $, m as C, D as I, E as h, F as x, G as B, H as T, I as S, L as R, J as V, K as j, M as F, N, O as P, P as z, j as f, Q as M, R as _, S as H, T as L } from "./component.constants-CeRyckoA.js";
1
+ import { C as $, m as C, D as I, E as h, F as x, G as B, H as T, I as S, L as R, J as V, K as j, M as F, N, O as P, P as z, j as f, Q as M, R as _, S as H, T as L } from "./component.constants-6DERKpeq.js";
2
2
  import { useRef as K } from "react";
3
- import { r as E, g as G } from "./charts.utils-BCbFzrS3.js";
4
- import { g as y } from "./formatter.utils-CRniOO_L.js";
3
+ import { r as E, g as G } from "./charts.utils-9h6uemzB.js";
4
+ import { g as y } from "./formatter.utils-R5zIrZIA.js";
5
5
  import { g as w, a as p } from "./object.utils-D_Zzon-H.js";
6
6
  const J = (a) => {
7
7
  var t;
@@ -308,4 +308,4 @@ export {
308
308
  la as b,
309
309
  oa as g
310
310
  };
311
- //# sourceMappingURL=bars.utils-9JzdTZTY.js.map
311
+ //# sourceMappingURL=bars.utils-DIunU5Xf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bars.utils-9JzdTZTY.js","sources":["../src/remarkable-ui/charts/bars/bars.utils.ts","../src/remarkable-ui/charts/bars/BarChart.tsx","../src/remarkable-pro/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { ChartData, ChartOptions } from 'chart.js';\nimport { chartContrastColors } from '../charts.constants';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\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 ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseXAxis,\n },\n y: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\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 },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\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-chart-style-border-radius-default'),\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(chartjsAxisOptions, baseBarChartOptions, verticalHorizontalOptions);\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 { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { groupTailAsOther } from '../charts.utils';\nimport { getColor } from '../../../theme/styles/styles.utils';\nimport { chartColors } from '../../../../remarkable-ui';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\nimport { chartContrastColors } from '../../../../remarkable-ui/charts/charts.constants';\nimport { Context } from 'chartjs-plugin-datalabels';\n\nexport const getBarStackedChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n },\n theme: Theme,\n): ChartData<'bar'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter(Boolean))].sort();\n const groupDimensionName = `${groupDimension.name}${groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter(Boolean);\n\n const themeKey = getObjectStableKey(theme);\n\n const datasets = groupBy.map((groupByItem, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n return {\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor,\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimensionName] === groupByItem && d[dimension.name] === axisItem,\n );\n return record ? Number(record[measure.name]) : 0;\n }),\n };\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getBarChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n maxItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'bar'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n const themeKey = getObjectStableKey(theme);\n const groupedData = groupTailAsOther(props.data, props.dimension, props.measures, props.maxItems);\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n measure.name,\n theme.charts.backgroundColors ?? chartColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n measure.name,\n theme.charts.borderColors ?? chartColors,\n index,\n );\n\n return {\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: groupedData.map((item) => item[measure.name] ?? 0),\n backgroundColor,\n borderColor,\n };\n }),\n };\n};\n\nconst getBarChartProDatalabelTotalFormatter = (\n context: Context,\n formatter: (value: number) => string,\n) => {\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 formatter(total);\n};\n\nexport const getBarChartProOptions = (\n options: {\n onBarClicked: (args: {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n }) => void;\n measures: Measure[];\n dimension: Dimension;\n horizontal: boolean;\n data: ChartData<'bar'>;\n },\n theme: Theme,\n): Partial<ChartOptions<'bar'>> => {\n const { onBarClicked, measures, dimension, horizontal, data } = options;\n\n const themeFormatter = getThemeFormatter(theme);\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n labels: {\n total: {\n formatter: (_value: string | number, context: Context) =>\n getBarChartProDatalabelTotalFormatter(context, (value: number) =>\n themeFormatter.data(measures[0]!, value),\n ),\n },\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n label: (context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n const raw = context.raw as number;\n return `${themeFormatter.data(dimension, context.dataset.label) || ''}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n if (!horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n if (!data || !data.labels) return undefined;\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n const element = elements[0];\n const axisDimensionValue = (element ? chart.data.labels![element.index] : null) as\n | string\n | null;\n const groupingDimensionValue = (\n element\n ? (chart.data.datasets[element.datasetIndex] as { rawLabel?: string | null })?.rawLabel\n : null\n ) as string | null;\n\n onBarClicked({\n axisDimensionValue,\n groupingDimensionValue,\n });\n },\n };\n};\n"],"names":["getBarChartData","data","_a","dataset","index","colors","chartContrastColors","defaultDataset","mergician","getDatalabelTotalDisplay","context","showTotalLabels","getDatalabelTotalFormatter","_value","datasets","i","total","sum","ds","val","getBarVerticalChartOptions","config","chartjsAxisOptionsLayoutPadding","getStyle","getBarHorizontalChartOptions","getBarChartOptions","options","baseBarChartOptions","getStyleNumber","verticalHorizontalOptions","chartjsAxisOptions","ChartJS","CategoryScale","LinearScale","BarElement","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","BarChart","onSegmentClick","props","chartRef","useRef","barChartOptions","handleSegmentClick","event","indexClicked","getSegmentIndexClicked","jsx","styles","Bar","getBarStackedChartProData","theme","themeFormatter","getThemeFormatter","dimension","groupDimension","measure","axis","d","groupDimensionName","groupBy","themeKey","getObjectStableKey","groupByItem","backgroundColor","getColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","item","chartColors","getBarChartProDatalabelTotalFormatter","formatter","getBarChartProOptions","onBarClicked","measures","horizontal","value","label","raw","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":"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"}
1
+ {"version":3,"file":"bars.utils-DIunU5Xf.js","sources":["../src/remarkable-ui/charts/bars/bars.utils.ts","../src/remarkable-ui/charts/bars/BarChart.tsx","../src/remarkable-pro/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { ChartData, ChartOptions } from 'chart.js';\nimport { chartContrastColors } from '../charts.constants';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\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 ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseXAxis,\n },\n y: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\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 },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\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-chart-style-border-radius-default'),\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(chartjsAxisOptions, baseBarChartOptions, verticalHorizontalOptions);\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 { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { groupTailAsOther } from '../charts.utils';\nimport { getColor } from '../../../theme/styles/styles.utils';\nimport { chartColors } from '../../../../remarkable-ui';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\nimport { chartContrastColors } from '../../../../remarkable-ui/charts/charts.constants';\nimport { Context } from 'chartjs-plugin-datalabels';\n\nexport const getBarStackedChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n },\n theme: Theme,\n): ChartData<'bar'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter(Boolean))].sort();\n const groupDimensionName = `${groupDimension.name}${groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter(Boolean);\n\n const themeKey = getObjectStableKey(theme);\n\n const datasets = groupBy.map((groupByItem, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n return {\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor,\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimensionName] === groupByItem && d[dimension.name] === axisItem,\n );\n return record ? Number(record[measure.name]) : 0;\n }),\n };\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getBarChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n maxItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'bar'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n const themeKey = getObjectStableKey(theme);\n const groupedData = groupTailAsOther(props.data, props.dimension, props.measures, props.maxItems);\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n measure.name,\n theme.charts.backgroundColors ?? chartColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n measure.name,\n theme.charts.borderColors ?? chartColors,\n index,\n );\n\n return {\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: groupedData.map((item) => item[measure.name] ?? 0),\n backgroundColor,\n borderColor,\n };\n }),\n };\n};\n\nconst getBarChartProDatalabelTotalFormatter = (\n context: Context,\n formatter: (value: number) => string,\n) => {\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 formatter(total);\n};\n\nexport const getBarChartProOptions = (\n options: {\n onBarClicked: (args: {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n }) => void;\n measures: Measure[];\n dimension: Dimension;\n horizontal: boolean;\n data: ChartData<'bar'>;\n },\n theme: Theme,\n): Partial<ChartOptions<'bar'>> => {\n const { onBarClicked, measures, dimension, horizontal, data } = options;\n\n const themeFormatter = getThemeFormatter(theme);\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n labels: {\n total: {\n formatter: (_value: string | number, context: Context) =>\n getBarChartProDatalabelTotalFormatter(context, (value: number) =>\n themeFormatter.data(measures[0]!, value),\n ),\n },\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n label: (context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n const raw = context.raw as number;\n return `${themeFormatter.data(dimension, context.dataset.label) || ''}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n if (!horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n if (!data || !data.labels) return undefined;\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n const element = elements[0];\n const axisDimensionValue = (element ? chart.data.labels![element.index] : null) as\n | string\n | null;\n const groupingDimensionValue = (\n element\n ? (chart.data.datasets[element.datasetIndex] as { rawLabel?: string | null })?.rawLabel\n : null\n ) as string | null;\n\n onBarClicked({\n axisDimensionValue,\n groupingDimensionValue,\n });\n },\n };\n};\n"],"names":["getBarChartData","data","_a","dataset","index","colors","chartContrastColors","defaultDataset","mergician","getDatalabelTotalDisplay","context","showTotalLabels","getDatalabelTotalFormatter","_value","datasets","i","total","sum","ds","val","getBarVerticalChartOptions","config","chartjsAxisOptionsLayoutPadding","getStyle","getBarHorizontalChartOptions","getBarChartOptions","options","baseBarChartOptions","getStyleNumber","verticalHorizontalOptions","chartjsAxisOptions","ChartJS","CategoryScale","LinearScale","BarElement","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","BarChart","onSegmentClick","props","chartRef","useRef","barChartOptions","handleSegmentClick","event","indexClicked","getSegmentIndexClicked","jsx","styles","Bar","getBarStackedChartProData","theme","themeFormatter","getThemeFormatter","dimension","groupDimension","measure","axis","d","groupDimensionName","groupBy","themeKey","getObjectStableKey","groupByItem","backgroundColor","getColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","item","chartColors","getBarChartProDatalabelTotalFormatter","formatter","getBarChartProOptions","onBarClicked","measures","horizontal","value","label","raw","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { i as ni, aO as is, U as cn } from "./component.constants-CeRyckoA.js";
1
+ import { i as ni, aO as is, U as cn } from "./component.constants-6DERKpeq.js";
2
2
  import { g as ss, d as Ee, u as ai } from "./utc-B2gCnkBk.js";
3
- import { g as os } from "./formatter.utils-CRniOO_L.js";
3
+ import { g as os } from "./formatter.utils-R5zIrZIA.js";
4
4
  import { i as ii, q as si } from "./quarterOfYear-C0maIilJ.js";
5
5
  const fs = {
6
6
  "--em-gray-0": "rgb(255 255 255)",
@@ -17359,4 +17359,4 @@ export {
17359
17359
  Vd as r,
17360
17360
  ms as s
17361
17361
  };
17362
- //# sourceMappingURL=charts.utils-BCbFzrS3.js.map
17362
+ //# sourceMappingURL=charts.utils-9h6uemzB.js.map