@embeddable.com/remarkable-pro 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) 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-CVL4wTx4.js → ChartCard-uZBftDKk.js} +4 -4
  8. package/dist/{ChartCard-CVL4wTx4.js.map → ChartCard-uZBftDKk.js.map} +1 -1
  9. package/dist/{Color.type.emb-2eHKigos.js → Color.type.emb-BPT7WKyR.js} +2 -2
  10. package/dist/{Color.type.emb-2eHKigos.js.map → Color.type.emb-BPT7WKyR.js.map} +1 -1
  11. package/dist/ColorEditor.js +2 -2
  12. package/dist/{ComparisonPeriod.type.emb-0_NLUHUG.js → ComparisonPeriod.type.emb-Bq4r1RbE.js} +2 -2
  13. package/dist/{ComparisonPeriod.type.emb-0_NLUHUG.js.map → ComparisonPeriod.type.emb-Bq4r1RbE.js.map} +1 -1
  14. package/dist/ComparisonPeriodSelectFieldPro.js +4 -4
  15. package/dist/DateRangeSelectFieldPro.js +3 -3
  16. package/dist/DonutChartPro.js +3 -3
  17. package/dist/DonutLabelChartPro.js +3 -3
  18. package/dist/{EditorCard-CBM5lBf4.js → EditorCard-B95YC3pz.js} +3 -3
  19. package/dist/{EditorCard-CBM5lBf4.js.map → EditorCard-B95YC3pz.js.map} +1 -1
  20. package/dist/HeatMapPro.js +4 -4
  21. package/dist/KpiChartNumberComparisonPro.js +4 -4
  22. package/dist/KpiChartNumberPro.js +3 -3
  23. package/dist/LineChartComparisonDefaultPro.js +5 -5
  24. package/dist/LineChartDefaultPro.js +4 -4
  25. package/dist/LineChartGroupedPro.js +3 -3
  26. package/dist/MultiSelectFieldPro.js +3 -3
  27. package/dist/PieChartPro.js +3 -3
  28. package/dist/PivotTablePro.js +3 -3
  29. package/dist/SingleSelectFieldPro.js +3 -3
  30. package/dist/TableChartPaginated.js +3 -3
  31. package/dist/{bars.utils-B1Hz3hDV.js → bars.utils-BHrcAtuH.js} +4 -4
  32. package/dist/{bars.utils-B1Hz3hDV.js.map → bars.utils-BHrcAtuH.js.map} +1 -1
  33. package/dist/{charts.utils-Iko6Kzy0.js → charts.utils-DtFuEHDp.js} +4 -4
  34. package/dist/{charts.utils-Iko6Kzy0.js.map → charts.utils-DtFuEHDp.js.map} +1 -1
  35. package/dist/{component.constants-DgkJze23.js → component.constants-DmK3uQGY.js} +3 -3
  36. package/dist/{component.constants-DgkJze23.js.map → component.constants-DmK3uQGY.js.map} +1 -1
  37. package/dist/embeddable-components.json +11 -11
  38. package/dist/{formatter.utils-XQ213825.js → formatter.utils-DCDukEZ9.js} +2 -2
  39. package/dist/{formatter.utils-XQ213825.js.map → formatter.utils-DCDukEZ9.js.map} +1 -1
  40. package/dist/{index-lWf11Upm.js → index-B92AHN8Y.js} +5 -5
  41. package/dist/{index-lWf11Upm.js.map → index-B92AHN8Y.js.map} +1 -1
  42. package/dist/{index-ExZUonHQ.js → index-BEM0olHp.js} +5 -5
  43. package/dist/{index-ExZUonHQ.js.map → index-BEM0olHp.js.map} +1 -1
  44. package/dist/{index-Btb4t3Wv.js → index-Bk1YIZZf.js} +5 -5
  45. package/dist/{index-Btb4t3Wv.js.map → index-Bk1YIZZf.js.map} +1 -1
  46. package/dist/{index-DxyqvM1n.js → index-BuBPj3by.js} +5 -5
  47. package/dist/{index-DxyqvM1n.js.map → index-BuBPj3by.js.map} +1 -1
  48. package/dist/{index-CQjWaAI1.js → index-C23J5jXR.js} +5 -5
  49. package/dist/{index-CQjWaAI1.js.map → index-C23J5jXR.js.map} +1 -1
  50. package/dist/{index-B6pLTirY.js → index-C6oyYlMu.js} +5 -5
  51. package/dist/{index-B6pLTirY.js.map → index-C6oyYlMu.js.map} +1 -1
  52. package/dist/{index-D-uIQw1c.js → index-C7mz7pKQ.js} +5 -5
  53. package/dist/{index-D-uIQw1c.js.map → index-C7mz7pKQ.js.map} +1 -1
  54. package/dist/{index-SXB_nz9V.js → index-CFoVL8LS.js} +6 -6
  55. package/dist/{index-SXB_nz9V.js.map → index-CFoVL8LS.js.map} +1 -1
  56. package/dist/{index-Dz2RZAKI.js → index-CbWn6WMr.js} +5 -5
  57. package/dist/{index-Dz2RZAKI.js.map → index-CbWn6WMr.js.map} +1 -1
  58. package/dist/{index-D9xys6rW.js → index-Cj6xdAWZ.js} +6 -6
  59. package/dist/{index-D9xys6rW.js.map → index-Cj6xdAWZ.js.map} +1 -1
  60. package/dist/{index-B_h9tbkR.js → index-CmYz5k0C.js} +5 -5
  61. package/dist/{index-B_h9tbkR.js.map → index-CmYz5k0C.js.map} +1 -1
  62. package/dist/{index-D1f77vvz.js → index-DSk9EA7t.js} +5 -5
  63. package/dist/{index-D1f77vvz.js.map → index-DSk9EA7t.js.map} +1 -1
  64. package/dist/{index-DQy1VR_1.js → index-D_-Nl-64.js} +6 -6
  65. package/dist/{index-DQy1VR_1.js.map → index-D_-Nl-64.js.map} +1 -1
  66. package/dist/{index-gNSOwkrE.js → index-Dbg-T-ST.js} +5 -5
  67. package/dist/{index-gNSOwkrE.js.map → index-Dbg-T-ST.js.map} +1 -1
  68. package/dist/{index-DYXWHe8m.js → index-Dfh1KgI5.js} +5 -5
  69. package/dist/{index-DYXWHe8m.js.map → index-Dfh1KgI5.js.map} +1 -1
  70. package/dist/{index-D9A89MpZ.js → index-DjwSlZQY.js} +21 -19
  71. package/dist/{index-D9A89MpZ.js.map → index-DjwSlZQY.js.map} +1 -1
  72. package/dist/{index-CUL62EI3.js → index-GhU7CFw0.js} +5 -5
  73. package/dist/{index-CUL62EI3.js.map → index-GhU7CFw0.js.map} +1 -1
  74. package/dist/{index-BvcyKJye.js → index-O8I3E36E.js} +5 -5
  75. package/dist/{index-BvcyKJye.js.map → index-O8I3E36E.js.map} +1 -1
  76. package/dist/{index-Djb7UU1L.js → index-SIEfd0gp.js} +5 -5
  77. package/dist/{index-Djb7UU1L.js.map → index-SIEfd0gp.js.map} +1 -1
  78. package/dist/{index-KmzIpbK7.js → index-jqEl3LLC.js} +5 -5
  79. package/dist/{index-KmzIpbK7.js.map → index-jqEl3LLC.js.map} +1 -1
  80. package/dist/{index-CEnzeG60.js → index-mp4eyizO.js} +5 -5
  81. package/dist/{index-CEnzeG60.js.map → index-mp4eyizO.js.map} +1 -1
  82. package/dist/{index-IIIoCbBX.js → index-sJkPi8Q_.js} +5 -5
  83. package/dist/{index-IIIoCbBX.js.map → index-sJkPi8Q_.js.map} +1 -1
  84. package/dist/index.js +29 -29
  85. package/dist/{pies.utils-4gWRjv-L.js → pies.utils-Zw1lwwC4.js} +5 -5
  86. package/dist/{pies.utils-4gWRjv-L.js.map → pies.utils-Zw1lwwC4.js.map} +1 -1
  87. package/dist/{timeRange.utils-CgoON1yQ.js → timeRange.utils-C96Hp2HD.js} +2 -2
  88. package/dist/{timeRange.utils-CgoON1yQ.js.map → timeRange.utils-C96Hp2HD.js.map} +1 -1
  89. package/package.json +2 -2
@@ -1,8 +1,8 @@
1
- import { j as u, H as A } from "./index-D9A89MpZ.js";
1
+ import { j as u, H as A } from "./index-DjwSlZQY.js";
2
2
  import { useTheme as G } from "@embeddable.com/react";
3
- import { a as R, r as _ } from "./component.constants-DgkJze23.js";
4
- import { C as P } from "./ChartCard-CVL4wTx4.js";
5
- import { g as c } from "./formatter.utils-XQ213825.js";
3
+ import { a as R, r as _ } from "./component.constants-DmK3uQGY.js";
4
+ import { C as P } from "./ChartCard-uZBftDKk.js";
5
+ import { g as c } from "./formatter.utils-DCDukEZ9.js";
6
6
  import { u as d } from "./charts.fillGaps.hooks-Dd-VYdOE.js";
7
7
  import { u as k } from "./tables.hooks-BQdyUxau.js";
8
8
  const f = (e, s) => {
@@ -92,4 +92,4 @@ export {
92
92
  B as H,
93
93
  J as i
94
94
  };
95
- //# sourceMappingURL=index-CUL62EI3.js.map
95
+ //# sourceMappingURL=index-GhU7CFw0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CUL62EI3.js","sources":["../src/components/charts/tables/HeatMapPro/index.tsx"],"sourcesContent":["import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { HeatMap, HeatMapPropsDimension, HeatMapPropsMeasure } from '@embeddable.com/remarkable-ui';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { useGetTableSortedResults } from '../tables.hooks';\n\ntype HeatMapProProps = {\n columnDimension: Dimension;\n columnWidth?: number;\n description: string;\n displayNullAs?: string;\n firstColumnWidth?: number;\n maxColor: string;\n maxThreshold?: string;\n measure: Measure;\n midColor: string;\n minColor: string;\n minThreshold?: string;\n results: DataResponse;\n rowDimension: Dimension;\n showValues?: boolean;\n title: string;\n};\n\nexport const getHeatMeasure = (\n props: { measure: Measure },\n theme: Theme,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): HeatMapPropsMeasure<any> => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n key: props.measure.name,\n label: themeFormatter.dimensionOrMeasureTitle(props.measure),\n format: (value) => {\n return themeFormatter.data(props.measure, value);\n },\n };\n};\n\nexport const getHeatDimension = (\n props: { dimension: Dimension },\n theme: Theme,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): HeatMapPropsDimension<any> => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n key: props.dimension.name,\n label: themeFormatter.dimensionOrMeasureTitle(props.dimension),\n format: (value: string) => themeFormatter.data(props.dimension, value),\n };\n};\n\nconst HeatMapPro = (props: HeatMapProProps) => {\n const theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { description, title } = resolveI18nProps(props);\n const {\n measure,\n rowDimension,\n columnDimension,\n maxColor,\n midColor,\n minColor,\n displayNullAs,\n columnWidth,\n firstColumnWidth,\n showValues,\n minThreshold,\n maxThreshold,\n } = props;\n\n const columnOrder = Array.from(\n new Set((props.results.data ?? []).filter(Boolean).map((d) => d[columnDimension.name])),\n );\n\n const rowOrder = Array.from(\n new Set((props.results.data ?? []).filter(Boolean).map((d) => d[rowDimension.name])),\n );\n\n // Fill gaps for the column dimension\n const resultsColumnDimensionFillGaps = useFillGaps({\n results: props.results,\n dimension: columnDimension,\n });\n\n // Fill gaps for the row dimension\n const resultsRowColumnDimensionFillGaps = useFillGaps({\n results: resultsColumnDimensionFillGaps,\n dimension: rowDimension,\n });\n\n const results = useGetTableSortedResults({\n results: resultsRowColumnDimensionFillGaps,\n columnOrder,\n rowOrder,\n columnDimension,\n rowDimension,\n measures: [measure],\n });\n\n const pivotMeasures = getHeatMeasure({ measure }, theme);\n const pivotRowDimension = getHeatDimension({ dimension: rowDimension }, theme);\n const pivotColumnDimension = getHeatDimension({ dimension: columnDimension }, theme);\n\n return (\n <ChartCard\n title={title}\n subtitle={description}\n data={props.results}\n dimensionsAndMeasures={[rowDimension, columnDimension, measure]}\n errorMessage={props.results?.error}\n >\n <HeatMap\n data={results}\n measure={pivotMeasures}\n rowDimension={pivotRowDimension}\n columnDimension={pivotColumnDimension}\n maxColor={maxColor}\n midColor={midColor}\n minColor={minColor}\n showValues={showValues}\n minThreshold={minThreshold}\n maxThreshold={maxThreshold}\n columnWidth={columnWidth}\n firstColumnWidth={firstColumnWidth}\n displayNullAs={displayNullAs}\n />\n </ChartCard>\n );\n};\n\nexport default HeatMapPro;\n"],"names":["getHeatMeasure","props","theme","themeFormatter","getThemeFormatter","value","getHeatDimension","HeatMapPro","useTheme","i18nSetup","description","title","resolveI18nProps","measure","rowDimension","columnDimension","maxColor","midColor","minColor","displayNullAs","columnWidth","firstColumnWidth","showValues","minThreshold","maxThreshold","columnOrder","d","rowOrder","resultsColumnDimensionFillGaps","useFillGaps","resultsRowColumnDimensionFillGaps","results","useGetTableSortedResults","pivotMeasures","pivotRowDimension","pivotColumnDimension","jsx","ChartCard","_a","HeatMap"],"mappings":";;;;;;;AA6BO,MAAMA,IAAiB,CAC5BC,GACAC,MAE6B;AAC7B,QAAMC,IAAiBC,EAAkBF,CAAK;AAE9C,SAAO;AAAA,IACL,KAAKD,EAAM,QAAQ;AAAA,IACnB,OAAOE,EAAe,wBAAwBF,EAAM,OAAO;AAAA,IAC3D,QAAQ,CAACI,MACAF,EAAe,KAAKF,EAAM,SAASI,CAAK;AAAA,EACjD;AAEJ,GAEaC,IAAmB,CAC9BL,GACAC,MAE+B;AAC/B,QAAMC,IAAiBC,EAAkBF,CAAK;AAE9C,SAAO;AAAA,IACL,KAAKD,EAAM,UAAU;AAAA,IACrB,OAAOE,EAAe,wBAAwBF,EAAM,SAAS;AAAA,IAC7D,QAAQ,CAACI,MAAkBF,EAAe,KAAKF,EAAM,WAAWI,CAAK;AAAA,EAAA;AAEzE,GAEME,IAAa,CAACN,MAA2B;;AAC7C,QAAMC,IAAQM,EAAA;AACd,EAAAC,EAAUP,CAAK;AAEf,QAAM,EAAE,aAAAQ,GAAa,OAAAC,MAAUC,EAAiBX,CAAK,GAC/C;AAAA,IACJ,SAAAY;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEvB,GAEEwB,IAAc,MAAM;AAAA,IACxB,IAAI,KAAKxB,EAAM,QAAQ,QAAQ,CAAA,GAAI,OAAO,OAAO,EAAE,IAAI,CAACyB,MAAMA,EAAEX,EAAgB,IAAI,CAAC,CAAC;AAAA,EAAA,GAGlFY,IAAW,MAAM;AAAA,IACrB,IAAI,KAAK1B,EAAM,QAAQ,QAAQ,CAAA,GAAI,OAAO,OAAO,EAAE,IAAI,CAACyB,MAAMA,EAAEZ,EAAa,IAAI,CAAC,CAAC;AAAA,EAAA,GAI/Ec,IAAiCC,EAAY;AAAA,IACjD,SAAS5B,EAAM;AAAA,IACf,WAAWc;AAAA,EAAA,CACZ,GAGKe,IAAoCD,EAAY;AAAA,IACpD,SAASD;AAAA,IACT,WAAWd;AAAA,EAAA,CACZ,GAEKiB,IAAUC,EAAyB;AAAA,IACvC,SAASF;AAAA,IACT,aAAAL;AAAA,IACA,UAAAE;AAAA,IACA,iBAAAZ;AAAA,IACA,cAAAD;AAAA,IACA,UAAU,CAACD,CAAO;AAAA,EAAA,CACnB,GAEKoB,IAAgBjC,EAAe,EAAE,SAAAa,EAAA,GAAWX,CAAK,GACjDgC,IAAoB5B,EAAiB,EAAE,WAAWQ,EAAA,GAAgBZ,CAAK,GACvEiC,IAAuB7B,EAAiB,EAAE,WAAWS,EAAA,GAAmBb,CAAK;AAEnF,SACEkC,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAA1B;AAAA,MACA,UAAUD;AAAA,MACV,MAAMT,EAAM;AAAA,MACZ,uBAAuB,CAACa,GAAcC,GAAiBF,CAAO;AAAA,MAC9D,eAAcyB,IAAArC,EAAM,YAAN,gBAAAqC,EAAe;AAAA,MAE7B,UAAAF,gBAAAA,EAAAA;AAAAA,QAACG;AAAA,QAAA;AAAA,UACC,MAAMR;AAAA,UACN,SAASE;AAAA,UACT,cAAcC;AAAA,UACd,iBAAiBC;AAAA,UACjB,UAAAnB;AAAA,UACA,UAAAC;AAAA,UACA,UAAAC;AAAA,UACA,YAAAI;AAAA,UACA,cAAAC;AAAA,UACA,cAAAC;AAAA,UACA,aAAAJ;AAAA,UACA,kBAAAC;AAAA,UACA,eAAAF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;;;;;;"}
1
+ {"version":3,"file":"index-GhU7CFw0.js","sources":["../src/components/charts/tables/HeatMapPro/index.tsx"],"sourcesContent":["import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { HeatMap, HeatMapPropsDimension, HeatMapPropsMeasure } from '@embeddable.com/remarkable-ui';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { useGetTableSortedResults } from '../tables.hooks';\n\ntype HeatMapProProps = {\n columnDimension: Dimension;\n columnWidth?: number;\n description: string;\n displayNullAs?: string;\n firstColumnWidth?: number;\n maxColor: string;\n maxThreshold?: string;\n measure: Measure;\n midColor: string;\n minColor: string;\n minThreshold?: string;\n results: DataResponse;\n rowDimension: Dimension;\n showValues?: boolean;\n title: string;\n};\n\nexport const getHeatMeasure = (\n props: { measure: Measure },\n theme: Theme,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): HeatMapPropsMeasure<any> => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n key: props.measure.name,\n label: themeFormatter.dimensionOrMeasureTitle(props.measure),\n format: (value) => {\n return themeFormatter.data(props.measure, value);\n },\n };\n};\n\nexport const getHeatDimension = (\n props: { dimension: Dimension },\n theme: Theme,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): HeatMapPropsDimension<any> => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n key: props.dimension.name,\n label: themeFormatter.dimensionOrMeasureTitle(props.dimension),\n format: (value: string) => themeFormatter.data(props.dimension, value),\n };\n};\n\nconst HeatMapPro = (props: HeatMapProProps) => {\n const theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { description, title } = resolveI18nProps(props);\n const {\n measure,\n rowDimension,\n columnDimension,\n maxColor,\n midColor,\n minColor,\n displayNullAs,\n columnWidth,\n firstColumnWidth,\n showValues,\n minThreshold,\n maxThreshold,\n } = props;\n\n const columnOrder = Array.from(\n new Set((props.results.data ?? []).filter(Boolean).map((d) => d[columnDimension.name])),\n );\n\n const rowOrder = Array.from(\n new Set((props.results.data ?? []).filter(Boolean).map((d) => d[rowDimension.name])),\n );\n\n // Fill gaps for the column dimension\n const resultsColumnDimensionFillGaps = useFillGaps({\n results: props.results,\n dimension: columnDimension,\n });\n\n // Fill gaps for the row dimension\n const resultsRowColumnDimensionFillGaps = useFillGaps({\n results: resultsColumnDimensionFillGaps,\n dimension: rowDimension,\n });\n\n const results = useGetTableSortedResults({\n results: resultsRowColumnDimensionFillGaps,\n columnOrder,\n rowOrder,\n columnDimension,\n rowDimension,\n measures: [measure],\n });\n\n const pivotMeasures = getHeatMeasure({ measure }, theme);\n const pivotRowDimension = getHeatDimension({ dimension: rowDimension }, theme);\n const pivotColumnDimension = getHeatDimension({ dimension: columnDimension }, theme);\n\n return (\n <ChartCard\n title={title}\n subtitle={description}\n data={props.results}\n dimensionsAndMeasures={[rowDimension, columnDimension, measure]}\n errorMessage={props.results?.error}\n >\n <HeatMap\n data={results}\n measure={pivotMeasures}\n rowDimension={pivotRowDimension}\n columnDimension={pivotColumnDimension}\n maxColor={maxColor}\n midColor={midColor}\n minColor={minColor}\n showValues={showValues}\n minThreshold={minThreshold}\n maxThreshold={maxThreshold}\n columnWidth={columnWidth}\n firstColumnWidth={firstColumnWidth}\n displayNullAs={displayNullAs}\n />\n </ChartCard>\n );\n};\n\nexport default HeatMapPro;\n"],"names":["getHeatMeasure","props","theme","themeFormatter","getThemeFormatter","value","getHeatDimension","HeatMapPro","useTheme","i18nSetup","description","title","resolveI18nProps","measure","rowDimension","columnDimension","maxColor","midColor","minColor","displayNullAs","columnWidth","firstColumnWidth","showValues","minThreshold","maxThreshold","columnOrder","d","rowOrder","resultsColumnDimensionFillGaps","useFillGaps","resultsRowColumnDimensionFillGaps","results","useGetTableSortedResults","pivotMeasures","pivotRowDimension","pivotColumnDimension","jsx","ChartCard","_a","HeatMap"],"mappings":";;;;;;;AA6BO,MAAMA,IAAiB,CAC5BC,GACAC,MAE6B;AAC7B,QAAMC,IAAiBC,EAAkBF,CAAK;AAE9C,SAAO;AAAA,IACL,KAAKD,EAAM,QAAQ;AAAA,IACnB,OAAOE,EAAe,wBAAwBF,EAAM,OAAO;AAAA,IAC3D,QAAQ,CAACI,MACAF,EAAe,KAAKF,EAAM,SAASI,CAAK;AAAA,EACjD;AAEJ,GAEaC,IAAmB,CAC9BL,GACAC,MAE+B;AAC/B,QAAMC,IAAiBC,EAAkBF,CAAK;AAE9C,SAAO;AAAA,IACL,KAAKD,EAAM,UAAU;AAAA,IACrB,OAAOE,EAAe,wBAAwBF,EAAM,SAAS;AAAA,IAC7D,QAAQ,CAACI,MAAkBF,EAAe,KAAKF,EAAM,WAAWI,CAAK;AAAA,EAAA;AAEzE,GAEME,IAAa,CAACN,MAA2B;;AAC7C,QAAMC,IAAQM,EAAA;AACd,EAAAC,EAAUP,CAAK;AAEf,QAAM,EAAE,aAAAQ,GAAa,OAAAC,MAAUC,EAAiBX,CAAK,GAC/C;AAAA,IACJ,SAAAY;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEvB,GAEEwB,IAAc,MAAM;AAAA,IACxB,IAAI,KAAKxB,EAAM,QAAQ,QAAQ,CAAA,GAAI,OAAO,OAAO,EAAE,IAAI,CAACyB,MAAMA,EAAEX,EAAgB,IAAI,CAAC,CAAC;AAAA,EAAA,GAGlFY,IAAW,MAAM;AAAA,IACrB,IAAI,KAAK1B,EAAM,QAAQ,QAAQ,CAAA,GAAI,OAAO,OAAO,EAAE,IAAI,CAACyB,MAAMA,EAAEZ,EAAa,IAAI,CAAC,CAAC;AAAA,EAAA,GAI/Ec,IAAiCC,EAAY;AAAA,IACjD,SAAS5B,EAAM;AAAA,IACf,WAAWc;AAAA,EAAA,CACZ,GAGKe,IAAoCD,EAAY;AAAA,IACpD,SAASD;AAAA,IACT,WAAWd;AAAA,EAAA,CACZ,GAEKiB,IAAUC,EAAyB;AAAA,IACvC,SAASF;AAAA,IACT,aAAAL;AAAA,IACA,UAAAE;AAAA,IACA,iBAAAZ;AAAA,IACA,cAAAD;AAAA,IACA,UAAU,CAACD,CAAO;AAAA,EAAA,CACnB,GAEKoB,IAAgBjC,EAAe,EAAE,SAAAa,EAAA,GAAWX,CAAK,GACjDgC,IAAoB5B,EAAiB,EAAE,WAAWQ,EAAA,GAAgBZ,CAAK,GACvEiC,IAAuB7B,EAAiB,EAAE,WAAWS,EAAA,GAAmBb,CAAK;AAEnF,SACEkC,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAA1B;AAAA,MACA,UAAUD;AAAA,MACV,MAAMT,EAAM;AAAA,MACZ,uBAAuB,CAACa,GAAcC,GAAiBF,CAAO;AAAA,MAC9D,eAAcyB,IAAArC,EAAM,YAAN,gBAAAqC,EAAe;AAAA,MAE7B,UAAAF,gBAAAA,EAAAA;AAAAA,QAACG;AAAA,QAAA;AAAA,UACC,MAAMR;AAAA,UACN,SAASE;AAAA,UACT,cAAcC;AAAA,UACd,iBAAiBC;AAAA,UACjB,UAAAnB;AAAA,UACA,UAAAC;AAAA,UACA,UAAAC;AAAA,UACA,YAAAI;AAAA,UACA,cAAAC;AAAA,UACA,cAAAC;AAAA,UACA,aAAAJ;AAAA,UACA,kBAAAC;AAAA,UACA,eAAAF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;;;;;;"}
@@ -1,8 +1,8 @@
1
- import { j as i, S as b } from "./index-D9A89MpZ.js";
2
- import { g as O } from "./formatter.utils-XQ213825.js";
1
+ import { j as i, S as b } from "./index-DjwSlZQY.js";
2
+ import { g as O } from "./formatter.utils-DCDukEZ9.js";
3
3
  import { useTheme as j } from "@embeddable.com/react";
4
- import { E as x } from "./EditorCard-CBM5lBf4.js";
5
- import { r as v, i as F } from "./component.constants-DgkJze23.js";
4
+ import { E as x } from "./EditorCard-B95YC3pz.js";
5
+ import { r as v, i as F } from "./component.constants-DmK3uQGY.js";
6
6
  const M = 200, _ = (l) => {
7
7
  var a, r;
8
8
  const m = j(), c = O(m), {
@@ -43,4 +43,4 @@ export {
43
43
  _ as S,
44
44
  I as i
45
45
  };
46
- //# sourceMappingURL=index-BvcyKJye.js.map
46
+ //# sourceMappingURL=index-O8I3E36E.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BvcyKJye.js","sources":["../src/components/editors/SingleSelectFieldPro/index.tsx"],"sourcesContent":["import { DataResponse, Dimension } from '@embeddable.com/core';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../theme/theme.types';\nimport { EditorCard } from '../shared/EditorCard/EditorCard';\nimport { resolveI18nProps } from '../../component.utils';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { SingleSelectField } from '@embeddable.com/remarkable-ui';\n\nexport const MAX_OPTIONS = 200;\n\ntype SingleSelectFieldProProps = {\n title?: string;\n description?: string;\n dimension: Dimension;\n optionalSecondDimension?: Dimension;\n placeholder?: string;\n results: DataResponse;\n selectedValue: string;\n maxOptions?: number;\n setSearchValue: (search: string) => void;\n onChange?: (selectedValue: string) => void;\n};\n\nconst SingleSelectFieldPro = (props: SingleSelectFieldProProps) => {\n const theme: Theme = useTheme() as Theme;\n const themeFormatter = getThemeFormatter(theme);\n\n const {\n title,\n description,\n dimension,\n optionalSecondDimension,\n placeholder,\n results,\n selectedValue,\n setSearchValue,\n onChange,\n } = resolveI18nProps(props);\n\n const options =\n results.data?.map((data) => {\n return {\n value: optionalSecondDimension ? data[optionalSecondDimension.name] : data[dimension.name],\n label: themeFormatter.data(dimension, data[dimension.name]),\n };\n }) ?? [];\n\n const showNoOptionsMessage = Boolean(!results.isLoading && (results.data?.length ?? 0) === 0);\n\n return (\n <EditorCard title={title} subtitle={description}>\n <SingleSelectField\n clearable\n searchable\n isLoading={results.isLoading}\n value={selectedValue}\n options={options}\n placeholder={placeholder}\n noOptionsMessage={showNoOptionsMessage ? i18n.t('common.noOptionsFound') : undefined}\n onChange={(newValue: string) => onChange?.(newValue)}\n onSearch={setSearchValue}\n />\n </EditorCard>\n );\n};\n\nexport default SingleSelectFieldPro;\n"],"names":["MAX_OPTIONS","SingleSelectFieldPro","props","theme","useTheme","themeFormatter","getThemeFormatter","title","description","dimension","optionalSecondDimension","placeholder","results","selectedValue","setSearchValue","onChange","resolveI18nProps","options","_a","data","showNoOptionsMessage","_b","jsx","EditorCard","SingleSelectField","i18n","newValue"],"mappings":";;;;;AASO,MAAMA,IAAc,KAerBC,IAAuB,CAACC,MAAqC;;AACjE,QAAMC,IAAeC,EAAA,GACfC,IAAiBC,EAAkBH,CAAK,GAExC;AAAA,IACJ,OAAAI;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,eAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,IACEC,EAAiBd,CAAK,GAEpBe,MACJC,IAAAN,EAAQ,SAAR,gBAAAM,EAAc,IAAI,CAACC,OACV;AAAA,IACL,OAAOT,IAA0BS,EAAKT,EAAwB,IAAI,IAAIS,EAAKV,EAAU,IAAI;AAAA,IACzF,OAAOJ,EAAe,KAAKI,GAAWU,EAAKV,EAAU,IAAI,CAAC;AAAA,EAAA,QAExD,CAAA,GAEFW,IAA+B,CAACR,EAAQ,gBAAcS,IAAAT,EAAQ,SAAR,gBAAAS,EAAc,WAAU,OAAO;AAE3F,SACEC,gBAAAA,EAAAA,IAACC,GAAA,EAAW,OAAAhB,GAAc,UAAUC,GAClC,UAAAc,gBAAAA,EAAAA;AAAAA,IAACE;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,YAAU;AAAA,MACV,WAAWZ,EAAQ;AAAA,MACnB,OAAOC;AAAA,MACP,SAAAI;AAAA,MACA,aAAAN;AAAA,MACA,kBAAkBS,IAAuBK,EAAK,EAAE,uBAAuB,IAAI;AAAA,MAC3E,UAAU,CAACC,MAAqBX,KAAA,gBAAAA,EAAWW;AAAA,MAC3C,UAAUZ;AAAA,IAAA;AAAA,EAAA,GAEd;AAEJ;;;;;"}
1
+ {"version":3,"file":"index-O8I3E36E.js","sources":["../src/components/editors/SingleSelectFieldPro/index.tsx"],"sourcesContent":["import { DataResponse, Dimension } from '@embeddable.com/core';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../theme/theme.types';\nimport { EditorCard } from '../shared/EditorCard/EditorCard';\nimport { resolveI18nProps } from '../../component.utils';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { SingleSelectField } from '@embeddable.com/remarkable-ui';\n\nexport const MAX_OPTIONS = 200;\n\ntype SingleSelectFieldProProps = {\n title?: string;\n description?: string;\n dimension: Dimension;\n optionalSecondDimension?: Dimension;\n placeholder?: string;\n results: DataResponse;\n selectedValue: string;\n maxOptions?: number;\n setSearchValue: (search: string) => void;\n onChange?: (selectedValue: string) => void;\n};\n\nconst SingleSelectFieldPro = (props: SingleSelectFieldProProps) => {\n const theme: Theme = useTheme() as Theme;\n const themeFormatter = getThemeFormatter(theme);\n\n const {\n title,\n description,\n dimension,\n optionalSecondDimension,\n placeholder,\n results,\n selectedValue,\n setSearchValue,\n onChange,\n } = resolveI18nProps(props);\n\n const options =\n results.data?.map((data) => {\n return {\n value: optionalSecondDimension ? data[optionalSecondDimension.name] : data[dimension.name],\n label: themeFormatter.data(dimension, data[dimension.name]),\n };\n }) ?? [];\n\n const showNoOptionsMessage = Boolean(!results.isLoading && (results.data?.length ?? 0) === 0);\n\n return (\n <EditorCard title={title} subtitle={description}>\n <SingleSelectField\n clearable\n searchable\n isLoading={results.isLoading}\n value={selectedValue}\n options={options}\n placeholder={placeholder}\n noOptionsMessage={showNoOptionsMessage ? i18n.t('common.noOptionsFound') : undefined}\n onChange={(newValue: string) => onChange?.(newValue)}\n onSearch={setSearchValue}\n />\n </EditorCard>\n );\n};\n\nexport default SingleSelectFieldPro;\n"],"names":["MAX_OPTIONS","SingleSelectFieldPro","props","theme","useTheme","themeFormatter","getThemeFormatter","title","description","dimension","optionalSecondDimension","placeholder","results","selectedValue","setSearchValue","onChange","resolveI18nProps","options","_a","data","showNoOptionsMessage","_b","jsx","EditorCard","SingleSelectField","i18n","newValue"],"mappings":";;;;;AASO,MAAMA,IAAc,KAerBC,IAAuB,CAACC,MAAqC;;AACjE,QAAMC,IAAeC,EAAA,GACfC,IAAiBC,EAAkBH,CAAK,GAExC;AAAA,IACJ,OAAAI;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,eAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,IACEC,EAAiBd,CAAK,GAEpBe,MACJC,IAAAN,EAAQ,SAAR,gBAAAM,EAAc,IAAI,CAACC,OACV;AAAA,IACL,OAAOT,IAA0BS,EAAKT,EAAwB,IAAI,IAAIS,EAAKV,EAAU,IAAI;AAAA,IACzF,OAAOJ,EAAe,KAAKI,GAAWU,EAAKV,EAAU,IAAI,CAAC;AAAA,EAAA,QAExD,CAAA,GAEFW,IAA+B,CAACR,EAAQ,gBAAcS,IAAAT,EAAQ,SAAR,gBAAAS,EAAc,WAAU,OAAO;AAE3F,SACEC,gBAAAA,EAAAA,IAACC,GAAA,EAAW,OAAAhB,GAAc,UAAUC,GAClC,UAAAc,gBAAAA,EAAAA;AAAAA,IAACE;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,YAAU;AAAA,MACV,WAAWZ,EAAQ;AAAA,MACnB,OAAOC;AAAA,MACP,SAAAI;AAAA,MACA,aAAAN;AAAA,MACA,kBAAkBS,IAAuBK,EAAK,EAAE,uBAAuB,IAAI;AAAA,MAC3E,UAAU,CAACC,MAAqBX,KAAA,gBAAAA,EAAWW;AAAA,MAC3C,UAAUZ;AAAA,IAAA;AAAA,EAAA,GAEd;AAEJ;;;;;"}
@@ -1,8 +1,8 @@
1
- import { a as j, m as P, j as w, L as S } from "./index-D9A89MpZ.js";
1
+ import { a as j, m as P, j as w, L as S } from "./index-DjwSlZQY.js";
2
2
  import { useTheme as y } from "@embeddable.com/react";
3
- import { a as G, r as O } from "./component.constants-DgkJze23.js";
4
- import { C as v } from "./ChartCard-CVL4wTx4.js";
5
- import { g as $ } from "./formatter.utils-XQ213825.js";
3
+ import { a as G, r as O } from "./component.constants-DmK3uQGY.js";
4
+ import { C as v } from "./ChartCard-uZBftDKk.js";
5
+ import { g as $ } from "./formatter.utils-DCDukEZ9.js";
6
6
  import { g as R, a as M } from "./object.utils-D_Zzon-H.js";
7
7
  import { s as F } from "./color.utils-BSg_DFOh.js";
8
8
  import { g as T } from "./lines.utils-CFEUUo4k.js";
@@ -156,4 +156,4 @@ export {
156
156
  D as g,
157
157
  J as i
158
158
  };
159
- //# sourceMappingURL=index-Djb7UU1L.js.map
159
+ //# sourceMappingURL=index-SIEfd0gp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-Djb7UU1L.js","sources":["../src/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.utils.ts","../src/components/charts/lines/LineChartGroupedPro/index.tsx"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { mergician } from 'mergician';\nimport { getObjectStableKey } from '../../../../utils.ts/object.utils';\nimport { getColor } from '../../../../theme/styles/styles.utils';\nimport { setColorAlpha } from '../../../../utils.ts/color.utils';\nimport { getChartContrastColors } from '@embeddable.com/remarkable-ui';\nimport { getLineChartProOptions, LineChartProOptionsClick } from '../lines.utils';\n\nexport const getLineChartGroupedProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n hasMinMaxYAxisRange: boolean;\n },\n theme: Theme,\n): ChartData<'line'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure, hasMinMaxYAxisRange } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter((d) => d != null))].sort();\n const groupBy = [...new Set(data.map((d) => d[groupDimension.name]))].filter((d) => d != null);\n\n const themeKey = getObjectStableKey(theme);\n const chartContrastColors = getChartContrastColors();\n const datasets: ChartData<'line'>['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 const dataset = {\n clip: hasMinMaxYAxisRange,\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor: setColorAlpha(backgroundColor, 0.5),\n pointBackgroundColor: backgroundColor,\n fill: measure.inputs?.['fillUnderLine'],\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimension.name] === groupByItem && d[dimension.name] === axisItem,\n );\n return record?.[measure.name] ?? (measure.inputs?.['connectGaps'] ? 0 : null);\n }),\n } as ChartData<'line'>['datasets'][number];\n\n return dataset;\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getLineChartGroupedProOptions = (\n options: {\n dimension: Dimension;\n measure: Measure;\n data: ChartData<'line'>;\n onLineClicked: LineChartProOptionsClick;\n },\n theme: Theme,\n): ChartOptions<'line'> => {\n const { dimension, data, measure, onLineClicked } = options;\n const themeFormatter = getThemeFormatter(theme);\n\n const lineChartOptions: ChartOptions<'line'> = {\n plugins: {\n datalabels: {\n labels: {\n value: {\n formatter: (value: string | number) => {\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 raw = context.raw as number;\n return `${context.dataset.label}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n };\n\n return mergician(\n getLineChartProOptions({ onLineClicked }),\n lineChartOptions,\n theme.charts?.lineChartGroupedPro?.options || {},\n );\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport {\n getLineChartGroupedProData,\n getLineChartGroupedProOptions,\n} from './LineChartGroupedPro.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { LineChartProOptionsClick } from '../lines.utils';\nimport { LineChart } from '@embeddable.com/remarkable-ui';\n\nexport type LineChartGroupedProPropsOnLineClicked = {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n};\n\ntype LineChartGroupedProProp = {\n description: string;\n xAxis: Dimension;\n groupBy: Dimension;\n measure: Measure;\n results: DataResponse;\n reverseXAxis: boolean;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n yAxisRangeMax?: number;\n yAxisRangeMin?: number;\n onLineClicked: LineChartProOptionsClick;\n};\n\nconst LineChartGroupedPro = (props: LineChartGroupedProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description, xAxisLabel, yAxisLabel } = resolveI18nProps(props);\n const {\n measure,\n xAxis,\n groupBy,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n yAxisRangeMax,\n yAxisRangeMin,\n onLineClicked,\n } = props;\n\n const results = useFillGaps({\n results: props.results,\n dimension: props.xAxis,\n });\n\n const data = getLineChartGroupedProData(\n {\n data: results.data,\n dimension: xAxis,\n groupDimension: groupBy,\n measure,\n hasMinMaxYAxisRange: Boolean(yAxisRangeMin != null || yAxisRangeMax != null),\n },\n\n theme,\n );\n const options = getLineChartGroupedProOptions(\n { data, dimension: xAxis, measure, onLineClicked },\n theme,\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[measure, xAxis, groupBy]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <LineChart\n data={data}\n reverseXAxis={reverseXAxis}\n showLegend={showLegend}\n showLogarithmicScale={showLogarithmicScale}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n yAxisRangeMax={yAxisRangeMax}\n yAxisRangeMin={yAxisRangeMin}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default LineChartGroupedPro;\n"],"names":["getLineChartGroupedProData","props","theme","themeFormatter","getThemeFormatter","data","dimension","groupDimension","measure","hasMinMaxYAxisRange","axis","d","groupBy","themeKey","getObjectStableKey","chartContrastColors","getChartContrastColors","datasets","groupByItem","index","backgroundColor","getColor","borderColor","setColorAlpha","_a","axisItem","record","getLineChartGroupedProOptions","options","onLineClicked","lineChartOptions","value","context","label","raw","mergician","getLineChartProOptions","_b","LineChartGroupedPro","useTheme","i18nSetup","title","description","xAxisLabel","yAxisLabel","resolveI18nProps","xAxis","reverseXAxis","showLegend","showLogarithmicScale","showTooltips","showValueLabels","yAxisRangeMax","yAxisRangeMin","results","useFillGaps","jsx","ChartCard","LineChart"],"mappings":"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"}
1
+ {"version":3,"file":"index-SIEfd0gp.js","sources":["../src/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.utils.ts","../src/components/charts/lines/LineChartGroupedPro/index.tsx"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { mergician } from 'mergician';\nimport { getObjectStableKey } from '../../../../utils.ts/object.utils';\nimport { getColor } from '../../../../theme/styles/styles.utils';\nimport { setColorAlpha } from '../../../../utils.ts/color.utils';\nimport { getChartContrastColors } from '@embeddable.com/remarkable-ui';\nimport { getLineChartProOptions, LineChartProOptionsClick } from '../lines.utils';\n\nexport const getLineChartGroupedProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n hasMinMaxYAxisRange: boolean;\n },\n theme: Theme,\n): ChartData<'line'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure, hasMinMaxYAxisRange } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter((d) => d != null))].sort();\n const groupBy = [...new Set(data.map((d) => d[groupDimension.name]))].filter((d) => d != null);\n\n const themeKey = getObjectStableKey(theme);\n const chartContrastColors = getChartContrastColors();\n const datasets: ChartData<'line'>['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 const dataset = {\n clip: hasMinMaxYAxisRange,\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor: setColorAlpha(backgroundColor, 0.5),\n pointBackgroundColor: backgroundColor,\n fill: measure.inputs?.['fillUnderLine'],\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimension.name] === groupByItem && d[dimension.name] === axisItem,\n );\n return record?.[measure.name] ?? (measure.inputs?.['connectGaps'] ? 0 : null);\n }),\n } as ChartData<'line'>['datasets'][number];\n\n return dataset;\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getLineChartGroupedProOptions = (\n options: {\n dimension: Dimension;\n measure: Measure;\n data: ChartData<'line'>;\n onLineClicked: LineChartProOptionsClick;\n },\n theme: Theme,\n): ChartOptions<'line'> => {\n const { dimension, data, measure, onLineClicked } = options;\n const themeFormatter = getThemeFormatter(theme);\n\n const lineChartOptions: ChartOptions<'line'> = {\n plugins: {\n datalabels: {\n labels: {\n value: {\n formatter: (value: string | number) => {\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 raw = context.raw as number;\n return `${context.dataset.label}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n };\n\n return mergician(\n getLineChartProOptions({ onLineClicked }),\n lineChartOptions,\n theme.charts?.lineChartGroupedPro?.options || {},\n );\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport {\n getLineChartGroupedProData,\n getLineChartGroupedProOptions,\n} from './LineChartGroupedPro.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { LineChartProOptionsClick } from '../lines.utils';\nimport { LineChart } from '@embeddable.com/remarkable-ui';\n\nexport type LineChartGroupedProPropsOnLineClicked = {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n};\n\ntype LineChartGroupedProProp = {\n description: string;\n xAxis: Dimension;\n groupBy: Dimension;\n measure: Measure;\n results: DataResponse;\n reverseXAxis: boolean;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n yAxisRangeMax?: number;\n yAxisRangeMin?: number;\n onLineClicked: LineChartProOptionsClick;\n};\n\nconst LineChartGroupedPro = (props: LineChartGroupedProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description, xAxisLabel, yAxisLabel } = resolveI18nProps(props);\n const {\n measure,\n xAxis,\n groupBy,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n yAxisRangeMax,\n yAxisRangeMin,\n onLineClicked,\n } = props;\n\n const results = useFillGaps({\n results: props.results,\n dimension: props.xAxis,\n });\n\n const data = getLineChartGroupedProData(\n {\n data: results.data,\n dimension: xAxis,\n groupDimension: groupBy,\n measure,\n hasMinMaxYAxisRange: Boolean(yAxisRangeMin != null || yAxisRangeMax != null),\n },\n\n theme,\n );\n const options = getLineChartGroupedProOptions(\n { data, dimension: xAxis, measure, onLineClicked },\n theme,\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[measure, xAxis, groupBy]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <LineChart\n data={data}\n reverseXAxis={reverseXAxis}\n showLegend={showLegend}\n showLogarithmicScale={showLogarithmicScale}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n yAxisRangeMax={yAxisRangeMax}\n yAxisRangeMin={yAxisRangeMin}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default LineChartGroupedPro;\n"],"names":["getLineChartGroupedProData","props","theme","themeFormatter","getThemeFormatter","data","dimension","groupDimension","measure","hasMinMaxYAxisRange","axis","d","groupBy","themeKey","getObjectStableKey","chartContrastColors","getChartContrastColors","datasets","groupByItem","index","backgroundColor","getColor","borderColor","setColorAlpha","_a","axisItem","record","getLineChartGroupedProOptions","options","onLineClicked","lineChartOptions","value","context","label","raw","mergician","getLineChartProOptions","_b","LineChartGroupedPro","useTheme","i18nSetup","title","description","xAxisLabel","yAxisLabel","resolveI18nProps","xAxis","reverseXAxis","showLegend","showLogarithmicScale","showTooltips","showValueLabels","yAxisRangeMax","yAxisRangeMin","results","useFillGaps","jsx","ChartCard","LineChart"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { m as M, j as l, B as P } from "./index-D9A89MpZ.js";
1
+ import { m as M, j as l, B as P } from "./index-DjwSlZQY.js";
2
2
  import { useTheme as y } from "@embeddable.com/react";
3
- import { a as L, r as w } from "./component.constants-DgkJze23.js";
4
- import { C as S } from "./ChartCard-CVL4wTx4.js";
5
- import { a as _, b as v } from "./bars.utils-B1Hz3hDV.js";
3
+ import { a as L, r as w } from "./component.constants-DmK3uQGY.js";
4
+ import { C as S } from "./ChartCard-uZBftDKk.js";
5
+ import { a as _, b as v } from "./bars.utils-BHrcAtuH.js";
6
6
  import { u as D } from "./charts.fillGaps.hooks-Dd-VYdOE.js";
7
7
  const I = (t) => {
8
8
  var i, n;
@@ -69,4 +69,4 @@ export {
69
69
  I as B,
70
70
  F as i
71
71
  };
72
- //# sourceMappingURL=index-KmzIpbK7.js.map
72
+ //# sourceMappingURL=index-jqEl3LLC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-KmzIpbK7.js","sources":["../src/components/charts/bars/BarChartDefaultPro/index.tsx"],"sourcesContent":["import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { BarChart } from '@embeddable.com/remarkable-ui';\nimport { getBarChartProData, getBarChartProOptions } from '../bars.utils';\nimport { mergician } from 'mergician';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\n\ntype BarChartDefaultProProps = {\n description: string;\n dimension: Dimension;\n measures: Measure[];\n results: DataResponse;\n title: string;\n xAxisLabel: string;\n xAxisMaxItems: number;\n yAxisLabel: string;\n yAxisRangeMin?: number;\n yAxisRangeMax?: number;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n reverseXAxis: boolean;\n onBarClicked: (args: { axisDimensionValue: string | null }) => void;\n};\n\nconst BarChartDefaultPro = (props: BarChartDefaultProProps) => {\n const theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const {\n description,\n dimension,\n measures,\n title,\n xAxisLabel,\n xAxisMaxItems,\n yAxisLabel,\n yAxisRangeMin,\n yAxisRangeMax,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n reverseXAxis,\n onBarClicked,\n } = resolveI18nProps(props);\n\n const results = useFillGaps({\n results: props.results,\n dimension,\n });\n\n const data = getBarChartProData(\n { data: results.data, dimension, measures, maxItems: xAxisMaxItems },\n theme,\n );\n\n const options = mergician(\n getBarChartProOptions({ measures, horizontal: false, onBarClicked, data, dimension }, theme), // Format Y axis based on first measure\n theme.charts?.barChartDefaultPro?.options || {},\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[dimension, ...measures]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <BarChart\n data={data}\n showLegend={showLegend}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n showLogarithmicScale={showLogarithmicScale}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n reverseXAxis={reverseXAxis}\n yAxisRangeMin={yAxisRangeMin}\n yAxisRangeMax={yAxisRangeMax}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default BarChartDefaultPro;\n"],"names":["BarChartDefaultPro","props","theme","useTheme","i18nSetup","description","dimension","measures","title","xAxisLabel","xAxisMaxItems","yAxisLabel","yAxisRangeMin","yAxisRangeMax","showLegend","showLogarithmicScale","showTooltips","showValueLabels","reverseXAxis","onBarClicked","resolveI18nProps","results","useFillGaps","data","getBarChartProData","options","mergician","getBarChartProOptions","_b","_a","jsx","ChartCard","BarChart"],"mappings":";;;;;;AA8BA,MAAMA,IAAqB,CAACC,MAAmC;;AAC7D,QAAMC,IAAQC,EAAA;AACd,EAAAC,EAAUF,CAAK;AAEf,QAAM;AAAA,IACJ,aAAAG;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,EAAiBnB,CAAK,GAEpBoB,IAAUC,EAAY;AAAA,IAC1B,SAASrB,EAAM;AAAA,IACf,WAAAK;AAAA,EAAA,CACD,GAEKiB,IAAOC;AAAA,IACX,EAAE,MAAMH,EAAQ,MAAM,WAAAf,GAAW,UAAAC,GAAU,UAAUG,EAAA;AAAA,IACrDR;AAAA,EAAA,GAGIuB,IAAUC;AAAA,IACdC,EAAsB,EAAE,UAAApB,GAAU,YAAY,IAAO,cAAAY,GAAc,MAAAI,GAAM,WAAAjB,EAAA,GAAaJ,CAAK;AAAA;AAAA,MAC3F0B,KAAAC,IAAA3B,EAAM,WAAN,gBAAA2B,EAAc,uBAAd,gBAAAD,EAAkC,YAAW,CAAA;AAAA,EAAC;AAGhD,SACEE,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMV;AAAA,MACN,uBAAuB,CAACf,GAAW,GAAGC,CAAQ;AAAA,MAC9C,cAAcc,EAAQ;AAAA,MACtB,UAAUhB;AAAA,MACV,OAAAG;AAAA,MAEA,UAAAsB,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAAT;AAAA,UACA,YAAAT;AAAA,UACA,cAAAE;AAAA,UACA,iBAAAC;AAAA,UACA,sBAAAF;AAAA,UACA,YAAAN;AAAA,UACA,YAAAE;AAAA,UACA,cAAAO;AAAA,UACA,eAAAN;AAAA,UACA,eAAAC;AAAA,UACA,SAAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;;;;"}
1
+ {"version":3,"file":"index-jqEl3LLC.js","sources":["../src/components/charts/bars/BarChartDefaultPro/index.tsx"],"sourcesContent":["import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { BarChart } from '@embeddable.com/remarkable-ui';\nimport { getBarChartProData, getBarChartProOptions } from '../bars.utils';\nimport { mergician } from 'mergician';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\n\ntype BarChartDefaultProProps = {\n description: string;\n dimension: Dimension;\n measures: Measure[];\n results: DataResponse;\n title: string;\n xAxisLabel: string;\n xAxisMaxItems: number;\n yAxisLabel: string;\n yAxisRangeMin?: number;\n yAxisRangeMax?: number;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n reverseXAxis: boolean;\n onBarClicked: (args: { axisDimensionValue: string | null }) => void;\n};\n\nconst BarChartDefaultPro = (props: BarChartDefaultProProps) => {\n const theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const {\n description,\n dimension,\n measures,\n title,\n xAxisLabel,\n xAxisMaxItems,\n yAxisLabel,\n yAxisRangeMin,\n yAxisRangeMax,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n reverseXAxis,\n onBarClicked,\n } = resolveI18nProps(props);\n\n const results = useFillGaps({\n results: props.results,\n dimension,\n });\n\n const data = getBarChartProData(\n { data: results.data, dimension, measures, maxItems: xAxisMaxItems },\n theme,\n );\n\n const options = mergician(\n getBarChartProOptions({ measures, horizontal: false, onBarClicked, data, dimension }, theme), // Format Y axis based on first measure\n theme.charts?.barChartDefaultPro?.options || {},\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[dimension, ...measures]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <BarChart\n data={data}\n showLegend={showLegend}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n showLogarithmicScale={showLogarithmicScale}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n reverseXAxis={reverseXAxis}\n yAxisRangeMin={yAxisRangeMin}\n yAxisRangeMax={yAxisRangeMax}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default BarChartDefaultPro;\n"],"names":["BarChartDefaultPro","props","theme","useTheme","i18nSetup","description","dimension","measures","title","xAxisLabel","xAxisMaxItems","yAxisLabel","yAxisRangeMin","yAxisRangeMax","showLegend","showLogarithmicScale","showTooltips","showValueLabels","reverseXAxis","onBarClicked","resolveI18nProps","results","useFillGaps","data","getBarChartProData","options","mergician","getBarChartProOptions","_b","_a","jsx","ChartCard","BarChart"],"mappings":";;;;;;AA8BA,MAAMA,IAAqB,CAACC,MAAmC;;AAC7D,QAAMC,IAAQC,EAAA;AACd,EAAAC,EAAUF,CAAK;AAEf,QAAM;AAAA,IACJ,aAAAG;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,EAAiBnB,CAAK,GAEpBoB,IAAUC,EAAY;AAAA,IAC1B,SAASrB,EAAM;AAAA,IACf,WAAAK;AAAA,EAAA,CACD,GAEKiB,IAAOC;AAAA,IACX,EAAE,MAAMH,EAAQ,MAAM,WAAAf,GAAW,UAAAC,GAAU,UAAUG,EAAA;AAAA,IACrDR;AAAA,EAAA,GAGIuB,IAAUC;AAAA,IACdC,EAAsB,EAAE,UAAApB,GAAU,YAAY,IAAO,cAAAY,GAAc,MAAAI,GAAM,WAAAjB,EAAA,GAAaJ,CAAK;AAAA;AAAA,MAC3F0B,KAAAC,IAAA3B,EAAM,WAAN,gBAAA2B,EAAc,uBAAd,gBAAAD,EAAkC,YAAW,CAAA;AAAA,EAAC;AAGhD,SACEE,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMV;AAAA,MACN,uBAAuB,CAACf,GAAW,GAAGC,CAAQ;AAAA,MAC9C,cAAcc,EAAQ;AAAA,MACtB,UAAUhB;AAAA,MACV,OAAAG;AAAA,MAEA,UAAAsB,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAAT;AAAA,UACA,YAAAT;AAAA,UACA,cAAAE;AAAA,UACA,iBAAAC;AAAA,UACA,sBAAAF;AAAA,UACA,YAAAN;AAAA,UACA,YAAAE;AAAA,UACA,cAAAO;AAAA,UACA,eAAAN;AAAA,UACA,eAAAC;AAAA,UACA,SAAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;;;;"}
@@ -1,11 +1,11 @@
1
- import { s as R, j as d, S as b } from "./index-D9A89MpZ.js";
1
+ import { s as R, j as d, S as b } from "./index-DjwSlZQY.js";
2
2
  import { useTheme as O } from "@embeddable.com/react";
3
3
  import { g as j, u as y } from "./editors.timeRange.utils-DTtRGaCo.js";
4
- import { $ as C, r as x, i as F } from "./component.constants-DgkJze23.js";
5
- import { E as T } from "./EditorCard-CBM5lBf4.js";
4
+ import { $ as C, r as x, i as F } from "./component.constants-DmK3uQGY.js";
5
+ import { E as T } from "./EditorCard-B95YC3pz.js";
6
6
  import { useState as _, useEffect as c } from "react";
7
7
  /**
8
- * @license @tabler/icons-react v3.35.0 - MIT
8
+ * @license @tabler/icons-react v3.36.0 - MIT
9
9
  *
10
10
  * This source code is licensed under the MIT license.
11
11
  * See the LICENSE file in the root directory of this source tree.
@@ -54,4 +54,4 @@ export {
54
54
  z as g,
55
55
  N as i
56
56
  };
57
- //# sourceMappingURL=index-CEnzeG60.js.map
57
+ //# sourceMappingURL=index-mp4eyizO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CEnzeG60.js","sources":["../node_modules/@tabler/icons-react/dist/esm/icons/IconCalendarFilled.mjs","../src/components/editors/DateRangeSelectFieldPro/DateRangeSelectFieldPro.utils.ts","../src/components/editors/DateRangeSelectFieldPro/index.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M16 2a1 1 0 0 1 .993 .883l.007 .117v1h1a3 3 0 0 1 2.995 2.824l.005 .176v12a3 3 0 0 1 -2.824 2.995l-.176 .005h-12a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-12a3 3 0 0 1 2.824 -2.995l.176 -.005h1v-1a1 1 0 0 1 1.993 -.117l.007 .117v1h6v-1a1 1 0 0 1 1 -1zm3 7h-14v9.625c0 .705 .386 1.286 .883 1.366l.117 .009h12c.513 0 .936 -.53 .993 -1.215l.007 -.16v-9.625z\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 12a1 1 0 0 1 .993 .883l.007 .117v3a1 1 0 0 1 -1.993 .117l-.007 -.117v-2a1 1 0 0 1 -.117 -1.993l.117 -.007h1z\", \"key\": \"svg-1\" }]];\nconst IconCalendarFilled = createReactComponent(\"filled\", \"calendar-filled\", \"CalendarFilled\", __iconNode);\n\nexport { __iconNode, IconCalendarFilled as default };\n//# sourceMappingURL=IconCalendarFilled.mjs.map\n","import { DateRangeSelectFieldProOption } from './DateRangeSelectFieldPro.types';\nimport { SelectListOptionProps } from '@embeddable.com/remarkable-ui';\nimport { getTimeRangeLabel } from '../editors.timeRange.utils';\nimport { resolveI18nString } from '../../component.utils';\n\nexport const getDateRangeSelectFieldProOptions = (\n dateRangeSelectFieldProOptions: DateRangeSelectFieldProOption[],\n): SelectListOptionProps[] => {\n return dateRangeSelectFieldProOptions.map((option) => {\n return {\n rightLabel: getTimeRangeLabel(option.getRange(), option.dateFormat),\n value: option.value,\n label: resolveI18nString(option.label),\n };\n });\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { SingleSelectField } from '@embeddable.com/remarkable-ui';\nimport { Theme } from '../../../theme/theme.types';\nimport { useLoadDayjsLocale } from '../../../utils.ts/date.utils';\nimport { getDateRangeSelectFieldProOptions } from './DateRangeSelectFieldPro.utils';\nimport { TimeRange } from '@embeddable.com/core';\nimport { resolveI18nProps } from '../../component.utils';\nimport { EditorCard } from '../shared/EditorCard/EditorCard';\nimport { IconCalendarFilled } from '@tabler/icons-react';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { useEffect, useState } from 'react';\n\ntype DateRangeSelectFieldProProps = {\n description?: string;\n onChange: (newDateRange: TimeRange) => void;\n placeholder?: string;\n selectedValue: TimeRange;\n title?: string;\n clearable?: boolean;\n};\n\nconst DateRangeSelectFieldPro = (props: DateRangeSelectFieldProProps) => {\n const theme: Theme = useTheme() as Theme;\n const { dayjsLocaleReady } = useLoadDayjsLocale();\n\n const { selectedValue, clearable, onChange } = props;\n const [internalValue, setInternalValue] = useState<string | undefined>(\n selectedValue?.relativeTimeString,\n );\n\n // When updation the selectedValue in the builder, the defined value value can:\n // 1. exist in the options: relativeTimeString converted into TimeRange and onChange is called with the TimeRange\n // 2. not exist in the options: onChange is called with undefined (resets)\n\n const dateRangeOptions = theme.defaults.dateRangesOptions;\n\n const selectedValueRelativeTimeString = selectedValue?.relativeTimeString;\n\n useEffect(() => {\n if (!selectedValueRelativeTimeString) return;\n\n const matchedOption = dateRangeOptions.find(\n (option) => option.value === selectedValueRelativeTimeString,\n );\n\n setInternalValue(matchedOption ? matchedOption.value : undefined);\n }, [selectedValueRelativeTimeString, dateRangeOptions]);\n\n useEffect(() => {\n if (!selectedValue && !internalValue) return;\n\n const matchedOption = dateRangeOptions.find((option) => option.value === internalValue);\n\n const newChangeValue = matchedOption ? matchedOption.getRange() : undefined;\n\n onChange(newChangeValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalValue, dateRangeOptions]);\n\n useEffect(() => {\n if (!selectedValue) {\n setInternalValue(undefined);\n }\n }, [selectedValue]);\n\n if (!dayjsLocaleReady) {\n return null;\n }\n\n const { description, placeholder, title } = resolveI18nProps(props);\n\n const options = getDateRangeSelectFieldProOptions(dateRangeOptions);\n\n return (\n <EditorCard title={title} subtitle={description}>\n <SingleSelectField\n startIcon={IconCalendarFilled}\n clearable={clearable}\n placeholder={placeholder}\n value={internalValue}\n onChange={(value) => setInternalValue(value || undefined)}\n options={options}\n noOptionsMessage={i18n.t('common.noOptionsAvailable')}\n />\n </EditorCard>\n );\n};\n\nexport default DateRangeSelectFieldPro;\n"],"names":["__iconNode","IconCalendarFilled","createReactComponent","getDateRangeSelectFieldProOptions","dateRangeSelectFieldProOptions","option","getTimeRangeLabel","resolveI18nString","DateRangeSelectFieldPro","props","theme","useTheme","dayjsLocaleReady","useLoadDayjsLocale","selectedValue","clearable","onChange","internalValue","setInternalValue","useState","dateRangeOptions","selectedValueRelativeTimeString","useEffect","matchedOption","newChangeValue","description","placeholder","title","resolveI18nProps","options","jsx","EditorCard","SingleSelectField","value","i18n"],"mappings":";;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa,CAAC,CAAC,QAAQ,EAAE,GAAK,iWAAiW,KAAO,QAAO,CAAE,GAAG,CAAC,QAAQ,EAAE,GAAK,oHAAoH,KAAO,QAAO,CAAE,CAAC,GACviBC,IAAqBC,EAAqB,UAAU,mBAAmB,kBAAkBF,CAAU,GCL5FG,IAAoC,CAC/CC,MAEOA,EAA+B,IAAI,CAACC,OAClC;AAAA,EACL,YAAYC,EAAkBD,EAAO,SAAA,GAAYA,EAAO,UAAU;AAAA,EAClE,OAAOA,EAAO;AAAA,EACd,OAAOE,EAAkBF,EAAO,KAAK;AAAA,EAExC,GCOGG,IAA0B,CAACC,MAAwC;AACvE,QAAMC,IAAeC,EAAA,GACf,EAAE,kBAAAC,EAAA,IAAqBC,EAAA,GAEvB,EAAE,eAAAC,GAAe,WAAAC,GAAW,UAAAC,EAAA,IAAaP,GACzC,CAACQ,GAAeC,CAAgB,IAAIC;AAAA,IACxCL,KAAA,gBAAAA,EAAe;AAAA,EAAA,GAOXM,IAAmBV,EAAM,SAAS,mBAElCW,IAAkCP,KAAA,gBAAAA,EAAe;AA6BvD,MA3BAQ,EAAU,MAAM;AACd,QAAI,CAACD,EAAiC;AAEtC,UAAME,IAAgBH,EAAiB;AAAA,MACrC,CAACf,MAAWA,EAAO,UAAUgB;AAAA,IAAA;AAG/B,IAAAH,EAAiBK,IAAgBA,EAAc,QAAQ,MAAS;AAAA,EAClE,GAAG,CAACF,GAAiCD,CAAgB,CAAC,GAEtDE,EAAU,MAAM;AACd,QAAI,CAACR,KAAiB,CAACG,EAAe;AAEtC,UAAMM,IAAgBH,EAAiB,KAAK,CAACf,MAAWA,EAAO,UAAUY,CAAa,GAEhFO,IAAiBD,IAAgBA,EAAc,SAAA,IAAa;AAElE,IAAAP,EAASQ,CAAc;AAAA,EAEzB,GAAG,CAACP,GAAeG,CAAgB,CAAC,GAEpCE,EAAU,MAAM;AACd,IAAKR,KACHI,EAAiB,MAAS;AAAA,EAE9B,GAAG,CAACJ,CAAa,CAAC,GAEd,CAACF;AACH,WAAO;AAGT,QAAM,EAAE,aAAAa,GAAa,aAAAC,GAAa,OAAAC,EAAA,IAAUC,EAAiBnB,CAAK,GAE5DoB,IAAU1B,EAAkCiB,CAAgB;AAElE,SACEU,gBAAAA,EAAAA,IAACC,GAAA,EAAW,OAAAJ,GAAc,UAAUF,GAClC,UAAAK,gBAAAA,EAAAA;AAAAA,IAACE;AAAA,IAAA;AAAA,MACC,WAAW/B;AAAA,MACX,WAAAc;AAAA,MACA,aAAAW;AAAA,MACA,OAAOT;AAAA,MACP,UAAU,CAACgB,MAAUf,EAAiBe,KAAS,MAAS;AAAA,MACxD,SAAAJ;AAAA,MACA,kBAAkBK,EAAK,EAAE,2BAA2B;AAAA,IAAA;AAAA,EAAA,GAExD;AAEJ;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index-mp4eyizO.js","sources":["../node_modules/@tabler/icons-react/dist/esm/icons/IconCalendarFilled.mjs","../src/components/editors/DateRangeSelectFieldPro/DateRangeSelectFieldPro.utils.ts","../src/components/editors/DateRangeSelectFieldPro/index.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.36.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M16 2a1 1 0 0 1 .993 .883l.007 .117v1h1a3 3 0 0 1 2.995 2.824l.005 .176v12a3 3 0 0 1 -2.824 2.995l-.176 .005h-12a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-12a3 3 0 0 1 2.824 -2.995l.176 -.005h1v-1a1 1 0 0 1 1.993 -.117l.007 .117v1h6v-1a1 1 0 0 1 1 -1zm3 7h-14v9.625c0 .705 .386 1.286 .883 1.366l.117 .009h12c.513 0 .936 -.53 .993 -1.215l.007 -.16v-9.625z\", \"key\": \"svg-0\" }], [\"path\", { \"d\": \"M12 12a1 1 0 0 1 .993 .883l.007 .117v3a1 1 0 0 1 -1.993 .117l-.007 -.117v-2a1 1 0 0 1 -.117 -1.993l.117 -.007h1z\", \"key\": \"svg-1\" }]];\nconst IconCalendarFilled = createReactComponent(\"filled\", \"calendar-filled\", \"CalendarFilled\", __iconNode);\n\nexport { __iconNode, IconCalendarFilled as default };\n//# sourceMappingURL=IconCalendarFilled.mjs.map\n","import { DateRangeSelectFieldProOption } from './DateRangeSelectFieldPro.types';\nimport { SelectListOptionProps } from '@embeddable.com/remarkable-ui';\nimport { getTimeRangeLabel } from '../editors.timeRange.utils';\nimport { resolveI18nString } from '../../component.utils';\n\nexport const getDateRangeSelectFieldProOptions = (\n dateRangeSelectFieldProOptions: DateRangeSelectFieldProOption[],\n): SelectListOptionProps[] => {\n return dateRangeSelectFieldProOptions.map((option) => {\n return {\n rightLabel: getTimeRangeLabel(option.getRange(), option.dateFormat),\n value: option.value,\n label: resolveI18nString(option.label),\n };\n });\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { SingleSelectField } from '@embeddable.com/remarkable-ui';\nimport { Theme } from '../../../theme/theme.types';\nimport { useLoadDayjsLocale } from '../../../utils.ts/date.utils';\nimport { getDateRangeSelectFieldProOptions } from './DateRangeSelectFieldPro.utils';\nimport { TimeRange } from '@embeddable.com/core';\nimport { resolveI18nProps } from '../../component.utils';\nimport { EditorCard } from '../shared/EditorCard/EditorCard';\nimport { IconCalendarFilled } from '@tabler/icons-react';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { useEffect, useState } from 'react';\n\ntype DateRangeSelectFieldProProps = {\n description?: string;\n onChange: (newDateRange: TimeRange) => void;\n placeholder?: string;\n selectedValue: TimeRange;\n title?: string;\n clearable?: boolean;\n};\n\nconst DateRangeSelectFieldPro = (props: DateRangeSelectFieldProProps) => {\n const theme: Theme = useTheme() as Theme;\n const { dayjsLocaleReady } = useLoadDayjsLocale();\n\n const { selectedValue, clearable, onChange } = props;\n const [internalValue, setInternalValue] = useState<string | undefined>(\n selectedValue?.relativeTimeString,\n );\n\n // When updation the selectedValue in the builder, the defined value value can:\n // 1. exist in the options: relativeTimeString converted into TimeRange and onChange is called with the TimeRange\n // 2. not exist in the options: onChange is called with undefined (resets)\n\n const dateRangeOptions = theme.defaults.dateRangesOptions;\n\n const selectedValueRelativeTimeString = selectedValue?.relativeTimeString;\n\n useEffect(() => {\n if (!selectedValueRelativeTimeString) return;\n\n const matchedOption = dateRangeOptions.find(\n (option) => option.value === selectedValueRelativeTimeString,\n );\n\n setInternalValue(matchedOption ? matchedOption.value : undefined);\n }, [selectedValueRelativeTimeString, dateRangeOptions]);\n\n useEffect(() => {\n if (!selectedValue && !internalValue) return;\n\n const matchedOption = dateRangeOptions.find((option) => option.value === internalValue);\n\n const newChangeValue = matchedOption ? matchedOption.getRange() : undefined;\n\n onChange(newChangeValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalValue, dateRangeOptions]);\n\n useEffect(() => {\n if (!selectedValue) {\n setInternalValue(undefined);\n }\n }, [selectedValue]);\n\n if (!dayjsLocaleReady) {\n return null;\n }\n\n const { description, placeholder, title } = resolveI18nProps(props);\n\n const options = getDateRangeSelectFieldProOptions(dateRangeOptions);\n\n return (\n <EditorCard title={title} subtitle={description}>\n <SingleSelectField\n startIcon={IconCalendarFilled}\n clearable={clearable}\n placeholder={placeholder}\n value={internalValue}\n onChange={(value) => setInternalValue(value || undefined)}\n options={options}\n noOptionsMessage={i18n.t('common.noOptionsAvailable')}\n />\n </EditorCard>\n );\n};\n\nexport default DateRangeSelectFieldPro;\n"],"names":["__iconNode","IconCalendarFilled","createReactComponent","getDateRangeSelectFieldProOptions","dateRangeSelectFieldProOptions","option","getTimeRangeLabel","resolveI18nString","DateRangeSelectFieldPro","props","theme","useTheme","dayjsLocaleReady","useLoadDayjsLocale","selectedValue","clearable","onChange","internalValue","setInternalValue","useState","dateRangeOptions","selectedValueRelativeTimeString","useEffect","matchedOption","newChangeValue","description","placeholder","title","resolveI18nProps","options","jsx","EditorCard","SingleSelectField","value","i18n"],"mappings":";;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa,CAAC,CAAC,QAAQ,EAAE,GAAK,iWAAiW,KAAO,QAAO,CAAE,GAAG,CAAC,QAAQ,EAAE,GAAK,oHAAoH,KAAO,QAAO,CAAE,CAAC,GACviBC,IAAqBC,EAAqB,UAAU,mBAAmB,kBAAkBF,CAAU,GCL5FG,IAAoC,CAC/CC,MAEOA,EAA+B,IAAI,CAACC,OAClC;AAAA,EACL,YAAYC,EAAkBD,EAAO,SAAA,GAAYA,EAAO,UAAU;AAAA,EAClE,OAAOA,EAAO;AAAA,EACd,OAAOE,EAAkBF,EAAO,KAAK;AAAA,EAExC,GCOGG,IAA0B,CAACC,MAAwC;AACvE,QAAMC,IAAeC,EAAA,GACf,EAAE,kBAAAC,EAAA,IAAqBC,EAAA,GAEvB,EAAE,eAAAC,GAAe,WAAAC,GAAW,UAAAC,EAAA,IAAaP,GACzC,CAACQ,GAAeC,CAAgB,IAAIC;AAAA,IACxCL,KAAA,gBAAAA,EAAe;AAAA,EAAA,GAOXM,IAAmBV,EAAM,SAAS,mBAElCW,IAAkCP,KAAA,gBAAAA,EAAe;AA6BvD,MA3BAQ,EAAU,MAAM;AACd,QAAI,CAACD,EAAiC;AAEtC,UAAME,IAAgBH,EAAiB;AAAA,MACrC,CAACf,MAAWA,EAAO,UAAUgB;AAAA,IAAA;AAG/B,IAAAH,EAAiBK,IAAgBA,EAAc,QAAQ,MAAS;AAAA,EAClE,GAAG,CAACF,GAAiCD,CAAgB,CAAC,GAEtDE,EAAU,MAAM;AACd,QAAI,CAACR,KAAiB,CAACG,EAAe;AAEtC,UAAMM,IAAgBH,EAAiB,KAAK,CAACf,MAAWA,EAAO,UAAUY,CAAa,GAEhFO,IAAiBD,IAAgBA,EAAc,SAAA,IAAa;AAElE,IAAAP,EAASQ,CAAc;AAAA,EAEzB,GAAG,CAACP,GAAeG,CAAgB,CAAC,GAEpCE,EAAU,MAAM;AACd,IAAKR,KACHI,EAAiB,MAAS;AAAA,EAE9B,GAAG,CAACJ,CAAa,CAAC,GAEd,CAACF;AACH,WAAO;AAGT,QAAM,EAAE,aAAAa,GAAa,aAAAC,GAAa,OAAAC,EAAA,IAAUC,EAAiBnB,CAAK,GAE5DoB,IAAU1B,EAAkCiB,CAAgB;AAElE,SACEU,gBAAAA,EAAAA,IAACC,GAAA,EAAW,OAAAJ,GAAc,UAAUF,GAClC,UAAAK,gBAAAA,EAAAA;AAAAA,IAACE;AAAA,IAAA;AAAA,MACC,WAAW/B;AAAA,MACX,WAAAc;AAAA,MACA,aAAAW;AAAA,MACA,OAAOT;AAAA,MACP,UAAU,CAACgB,MAAUf,EAAiBe,KAAS,MAAS;AAAA,MACxD,SAAAJ;AAAA,MACA,kBAAkBK,EAAK,EAAE,2BAA2B;AAAA,IAAA;AAAA,EAAA,GAExD;AAEJ;;;;","x_google_ignoreList":[0]}
@@ -1,8 +1,8 @@
1
- import { a as y, c as x, m as v, j as f, L as j } from "./index-D9A89MpZ.js";
1
+ import { a as y, c as x, m as v, j as f, L as j } from "./index-DjwSlZQY.js";
2
2
  import { useTheme as O } from "@embeddable.com/react";
3
- import { a as w, r as P } from "./component.constants-DgkJze23.js";
4
- import { C as S } from "./ChartCard-CVL4wTx4.js";
5
- import { g as A } from "./formatter.utils-XQ213825.js";
3
+ import { a as w, r as P } from "./component.constants-DmK3uQGY.js";
4
+ import { C as S } from "./ChartCard-uZBftDKk.js";
5
+ import { g as A } from "./formatter.utils-DCDukEZ9.js";
6
6
  import { g as F, a as L } from "./object.utils-D_Zzon-H.js";
7
7
  import { i as k, s as R } from "./color.utils-BSg_DFOh.js";
8
8
  import { u as T } from "./charts.fillGaps.hooks-Dd-VYdOE.js";
@@ -160,4 +160,4 @@ export {
160
160
  _ as g,
161
161
  E as i
162
162
  };
163
- //# sourceMappingURL=index-IIIoCbBX.js.map
163
+ //# sourceMappingURL=index-sJkPi8Q_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-IIIoCbBX.js","sources":["../src/components/charts/lines/LineChartDefaultPro/LineChartDefaultPro.utils.ts","../src/components/charts/lines/LineChartDefaultPro/index.tsx"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { getObjectStableKey } from '../../../../utils.ts/object.utils';\nimport { getChartContrastColors, getStyleNumber } from '@embeddable.com/remarkable-ui';\nimport { getColor } from '../../../../theme/styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { isColorValid, setColorAlpha } from '../../../../utils.ts/color.utils';\nimport { LineChartProOptionsClick } from '../lines.utils';\n\nexport const getLineChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n hasMinMaxYAxisRange: boolean;\n },\n theme: Theme,\n): ChartData<'line'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n\n const themeKey = getObjectStableKey(theme);\n const groupedData = props.data;\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const zeroFill = Boolean(measure.inputs?.['connectGaps']);\n const values = groupedData.map((item) => item[measure.name] ?? (zeroFill ? 0 : null));\n\n const lineColor = measure.inputs?.['lineColor'];\n const chartContrastColors = getChartContrastColors();\n const backgroundColor = isColorValid(lineColor)\n ? lineColor\n : getColor(\n `${themeKey}.charts.backgroundColors`,\n measure.name,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = isColorValid(lineColor)\n ? lineColor\n : getColor(\n `${themeKey}.charts.borderColors`,\n measure.name,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n return {\n clip: props.hasMinMaxYAxisRange,\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: values,\n backgroundColor: setColorAlpha(backgroundColor, 0.5),\n pointBackgroundColor: backgroundColor,\n borderDash: measure.inputs?.['dashedLine']\n ? [\n getStyleNumber('--em-linechart-line-dash', '0.25rem'),\n getStyleNumber('--em-linechart-line-gap', '0.25rem'),\n ]\n : undefined,\n borderColor,\n fill: Boolean(measure.inputs?.['fillUnderLine']),\n } as ChartData<'line'>['datasets'][number];\n }),\n };\n};\n\nexport const getLineChartProOptions = (\n options: {\n dimension: Dimension;\n measures: Measure[];\n data: ChartData<'line'>;\n onLineClicked: LineChartProOptionsClick;\n },\n theme: Theme,\n): ChartOptions<'line'> => {\n const { dimension, data, measures, onLineClicked } = options;\n const themeFormatter = getThemeFormatter(theme);\n\n const lineChartOptions: ChartOptions<'line'> = {\n plugins: {\n datalabels: {\n labels: {\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex]!;\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]!;\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 (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n return themeFormatter.data(measures[0]!, value);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n const element = elements[0];\n const dimensionValue = (element ? chart.data.labels![element.index] : null) as string | null;\n\n onLineClicked({\n dimensionValue,\n });\n },\n };\n\n return mergician(lineChartOptions, theme.charts?.lineChartDefaultPro?.options || {});\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { getLineChartProData, getLineChartProOptions } from './LineChartDefaultPro.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { LineChartProOptionsClick } from '../lines.utils';\nimport { LineChart } from '@embeddable.com/remarkable-ui';\n\nexport type LineChartProPropsOnLineClicked = { axisDimensionValue: string | null };\n\ntype LineChartProProp = {\n description: string;\n xAxis: Dimension;\n measures: Measure[];\n results: DataResponse;\n reverseXAxis: boolean;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n yAxisRangeMax?: number;\n yAxisRangeMin?: number;\n onLineClicked: LineChartProOptionsClick;\n};\n\nconst LineChartPro = (props: LineChartProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description, xAxisLabel, yAxisLabel } = resolveI18nProps(props);\n const {\n measures,\n xAxis,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n yAxisRangeMax,\n yAxisRangeMin,\n onLineClicked,\n } = props;\n\n const results = useFillGaps({\n results: props.results,\n dimension: xAxis,\n });\n\n const data = getLineChartProData(\n {\n data: results.data,\n dimension: xAxis,\n measures,\n hasMinMaxYAxisRange: Boolean(yAxisRangeMin != null || yAxisRangeMax != null),\n },\n theme,\n );\n const options = getLineChartProOptions(\n { data, dimension: xAxis, measures, onLineClicked },\n theme,\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[...measures, xAxis]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <LineChart\n data={data}\n reverseXAxis={reverseXAxis}\n showLegend={showLegend}\n showLogarithmicScale={showLogarithmicScale}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n yAxisRangeMax={yAxisRangeMax}\n yAxisRangeMin={yAxisRangeMin}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default LineChartPro;\n"],"names":["getLineChartProData","props","theme","themeFormatter","getThemeFormatter","themeKey","getObjectStableKey","groupedData","item","measure","index","zeroFill","_a","values","lineColor","_b","chartContrastColors","getChartContrastColors","backgroundColor","isColorValid","getColor","borderColor","setColorAlpha","_c","getStyleNumber","_d","getLineChartProOptions","options","dimension","data","measures","onLineClicked","mergician","value","context","label","raw","_event","elements","chart","element","dimensionValue","LineChartPro","useTheme","i18nSetup","title","description","xAxisLabel","yAxisLabel","resolveI18nProps","xAxis","reverseXAxis","showLegend","showLogarithmicScale","showTooltips","showValueLabels","yAxisRangeMax","yAxisRangeMin","results","useFillGaps","jsx","ChartCard","LineChart"],"mappings":"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"}
1
+ {"version":3,"file":"index-sJkPi8Q_.js","sources":["../src/components/charts/lines/LineChartDefaultPro/LineChartDefaultPro.utils.ts","../src/components/charts/lines/LineChartDefaultPro/index.tsx"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { getObjectStableKey } from '../../../../utils.ts/object.utils';\nimport { getChartContrastColors, getStyleNumber } from '@embeddable.com/remarkable-ui';\nimport { getColor } from '../../../../theme/styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { isColorValid, setColorAlpha } from '../../../../utils.ts/color.utils';\nimport { LineChartProOptionsClick } from '../lines.utils';\n\nexport const getLineChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n hasMinMaxYAxisRange: boolean;\n },\n theme: Theme,\n): ChartData<'line'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n\n const themeKey = getObjectStableKey(theme);\n const groupedData = props.data;\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const zeroFill = Boolean(measure.inputs?.['connectGaps']);\n const values = groupedData.map((item) => item[measure.name] ?? (zeroFill ? 0 : null));\n\n const lineColor = measure.inputs?.['lineColor'];\n const chartContrastColors = getChartContrastColors();\n const backgroundColor = isColorValid(lineColor)\n ? lineColor\n : getColor(\n `${themeKey}.charts.backgroundColors`,\n measure.name,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = isColorValid(lineColor)\n ? lineColor\n : getColor(\n `${themeKey}.charts.borderColors`,\n measure.name,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n return {\n clip: props.hasMinMaxYAxisRange,\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: values,\n backgroundColor: setColorAlpha(backgroundColor, 0.5),\n pointBackgroundColor: backgroundColor,\n borderDash: measure.inputs?.['dashedLine']\n ? [\n getStyleNumber('--em-linechart-line-dash', '0.25rem'),\n getStyleNumber('--em-linechart-line-gap', '0.25rem'),\n ]\n : undefined,\n borderColor,\n fill: Boolean(measure.inputs?.['fillUnderLine']),\n } as ChartData<'line'>['datasets'][number];\n }),\n };\n};\n\nexport const getLineChartProOptions = (\n options: {\n dimension: Dimension;\n measures: Measure[];\n data: ChartData<'line'>;\n onLineClicked: LineChartProOptionsClick;\n },\n theme: Theme,\n): ChartOptions<'line'> => {\n const { dimension, data, measures, onLineClicked } = options;\n const themeFormatter = getThemeFormatter(theme);\n\n const lineChartOptions: ChartOptions<'line'> = {\n plugins: {\n datalabels: {\n labels: {\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex]!;\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]!;\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 (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n return themeFormatter.data(measures[0]!, value);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n const element = elements[0];\n const dimensionValue = (element ? chart.data.labels![element.index] : null) as string | null;\n\n onLineClicked({\n dimensionValue,\n });\n },\n };\n\n return mergician(lineChartOptions, theme.charts?.lineChartDefaultPro?.options || {});\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { getLineChartProData, getLineChartProOptions } from './LineChartDefaultPro.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { LineChartProOptionsClick } from '../lines.utils';\nimport { LineChart } from '@embeddable.com/remarkable-ui';\n\nexport type LineChartProPropsOnLineClicked = { axisDimensionValue: string | null };\n\ntype LineChartProProp = {\n description: string;\n xAxis: Dimension;\n measures: Measure[];\n results: DataResponse;\n reverseXAxis: boolean;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n yAxisRangeMax?: number;\n yAxisRangeMin?: number;\n onLineClicked: LineChartProOptionsClick;\n};\n\nconst LineChartPro = (props: LineChartProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description, xAxisLabel, yAxisLabel } = resolveI18nProps(props);\n const {\n measures,\n xAxis,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n yAxisRangeMax,\n yAxisRangeMin,\n onLineClicked,\n } = props;\n\n const results = useFillGaps({\n results: props.results,\n dimension: xAxis,\n });\n\n const data = getLineChartProData(\n {\n data: results.data,\n dimension: xAxis,\n measures,\n hasMinMaxYAxisRange: Boolean(yAxisRangeMin != null || yAxisRangeMax != null),\n },\n theme,\n );\n const options = getLineChartProOptions(\n { data, dimension: xAxis, measures, onLineClicked },\n theme,\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[...measures, xAxis]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <LineChart\n data={data}\n reverseXAxis={reverseXAxis}\n showLegend={showLegend}\n showLogarithmicScale={showLogarithmicScale}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n yAxisRangeMax={yAxisRangeMax}\n yAxisRangeMin={yAxisRangeMin}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default LineChartPro;\n"],"names":["getLineChartProData","props","theme","themeFormatter","getThemeFormatter","themeKey","getObjectStableKey","groupedData","item","measure","index","zeroFill","_a","values","lineColor","_b","chartContrastColors","getChartContrastColors","backgroundColor","isColorValid","getColor","borderColor","setColorAlpha","_c","getStyleNumber","_d","getLineChartProOptions","options","dimension","data","measures","onLineClicked","mergician","value","context","label","raw","_event","elements","chart","element","dimensionValue","LineChartPro","useTheme","i18nSetup","title","description","xAxisLabel","yAxisLabel","resolveI18nProps","xAxis","reverseXAxis","showLegend","showLogarithmicScale","showTooltips","showValueLabels","yAxisRangeMax","yAxisRangeMin","results","useFillGaps","jsx","ChartCard","LineChart"],"mappings":";;;;;;;;AAWO,MAAMA,IAAsB,CACjCC,GAMAC,MACsB;AACtB,MAAI,CAACD,EAAM;AACT,WAAO;AAAA,MACL,QAAQ,CAAA;AAAA,MACR,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,IAAA;AAI3B,QAAME,IAAiBC,EAAkBF,CAAK,GAExCG,IAAWC,EAAmBJ,CAAK,GACnCK,IAAcN,EAAM;AAE1B,SAAO;AAAA,IACL,QAAQM,EAAY,IAAI,CAACC,MAChBA,EAAKP,EAAM,UAAU,IAAI,CACjC;AAAA,IACD,UAAUA,EAAM,SAAS,IAAI,CAACQ,GAASC,MAAU;;AAC/C,YAAMC,IAAW,IAAQC,IAAAH,EAAQ,WAAR,QAAAG,EAAiB,cACpCC,IAASN,EAAY,IAAI,CAACC,MAASA,EAAKC,EAAQ,IAAI,MAAME,IAAW,IAAI,KAAK,GAE9EG,KAAYC,IAAAN,EAAQ,WAAR,gBAAAM,EAAiB,WAC7BC,IAAsBC,EAAA,GACtBC,IAAkBC,EAAaL,CAAS,IAC1CA,IACAM;AAAA,QACE,GAAGf,CAAQ;AAAA,QACXI,EAAQ;AAAA,QACRP,EAAM,OAAO,oBAAoBc;AAAA,QACjCN;AAAA,MAAA,GAGAW,IAAcF,EAAaL,CAAS,IACtCA,IACAM;AAAA,QACE,GAAGf,CAAQ;AAAA,QACXI,EAAQ;AAAA,QACRP,EAAM,OAAO,gBAAgBc;AAAA,QAC7BN;AAAA,MAAA;AAGN,aAAO;AAAA,QACL,MAAMT,EAAM;AAAA,QACZ,OAAOE,EAAe,wBAAwBM,CAAO;AAAA,QACrD,MAAMI;AAAA,QACN,iBAAiBS,EAAcJ,GAAiB,GAAG;AAAA,QACnD,sBAAsBA;AAAA,QACtB,aAAYK,IAAAd,EAAQ,WAAR,QAAAc,EAAiB,aACzB;AAAA,UACEC,EAAe,4BAA4B,SAAS;AAAA,UACpDA,EAAe,2BAA2B,SAAS;AAAA,QAAA,IAErD;AAAA,QACJ,aAAAH;AAAA,QACA,MAAM,IAAQI,IAAAhB,EAAQ,WAAR,QAAAgB,EAAiB;AAAA,MAAgB;AAAA,IAEnD,CAAC;AAAA,EAAA;AAEL,GAEaC,IAAyB,CACpCC,GAMAzB,MACyB;;AACzB,QAAM,EAAE,WAAA0B,GAAW,MAAAC,GAAM,UAAAC,GAAU,eAAAC,MAAkBJ,GAC/CxB,IAAiBC,EAAkBF,CAAK;AAyD9C,SAAO8B,EAvDwC;AAAA,IAC7C,SAAS;AAAA,MACP,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,WAAW,CAACC,GAAwBC,MAAY;AAC9C,oBAAMzB,IAAUqB,EAASI,EAAQ,YAAY;AAC7C,qBAAO/B,EAAe,KAAKM,GAASwB,CAAK;AAAA,YAC3C;AAAA,UAAA;AAAA,QACF;AAAA,MACF;AAAA,MAEF,SAAS;AAAA,QACP,WAAW;AAAA,UACT,OAAO,CAACC,MAAY;;AAClB,kBAAMC,KAAQvB,IAAAsB,EAAQ,CAAC,MAAT,gBAAAtB,EAAY;AAC1B,mBAAOT,EAAe,KAAKyB,GAAWO,CAAK;AAAA,UAC7C;AAAA,UACA,OAAO,CAACD,MAAY;AAClB,kBAAMzB,IAAUqB,EAASI,EAAQ,YAAY,GACvCE,IAAMF,EAAQ;AACpB,mBAAO,GAAG/B,EAAe,KAAKyB,GAAWM,EAAQ,QAAQ,KAAK,KAAK,EAAE,KAAK/B,EAAe,KAAKM,GAAS2B,CAAG,CAAC;AAAA,UAC7G;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,IAEF,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACH,MAAU;AACnB,gBAAI,CAACJ,KAAQ,CAACA,EAAK,OAAQ;AAE3B,kBAAMM,IAAQN,EAAK,OAAO,OAAOI,CAAK,CAAC;AACvC,mBAAO9B,EAAe,KAAKyB,GAAWO,CAAK;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACF,MACF9B,EAAe,KAAK2B,EAAS,CAAC,GAAIG,CAAK;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAAA,IAEF,SAAS,CAACI,GAAQC,GAAUC,MAAU;AACpC,YAAMC,IAAUF,EAAS,CAAC,GACpBG,IAAkBD,IAAUD,EAAM,KAAK,OAAQC,EAAQ,KAAK,IAAI;AAEtE,MAAAT,EAAc;AAAA,QACZ,gBAAAU;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA,KAGiC1B,KAAAH,IAAAV,EAAM,WAAN,gBAAAU,EAAc,wBAAd,gBAAAG,EAAmC,YAAW,EAAE;AACrF,GCpHM2B,IAAe,CAACzC,MAA4B;AAChD,QAAMC,IAAeyC,EAAA;AACrB,EAAAC,EAAU1C,CAAK;AAEf,QAAM,EAAE,OAAA2C,GAAO,aAAAC,GAAa,YAAAC,GAAY,YAAAC,EAAA,IAAeC,EAAiBhD,CAAK,GACvE;AAAA,IACJ,UAAA6B;AAAA,IACA,OAAAoB;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAA1B;AAAA,EAAA,IACE9B,GAEEyD,IAAUC,EAAY;AAAA,IAC1B,SAAS1D,EAAM;AAAA,IACf,WAAWiD;AAAA,EAAA,CACZ,GAEKrB,IAAO7B;AAAA,IACX;AAAA,MACE,MAAM0D,EAAQ;AAAA,MACd,WAAWR;AAAA,MACX,UAAApB;AAAA,MACA,qBAA6B2B,KAAiB,QAAQD,KAAiB;AAAA,IAAI;AAAA,IAE7EtD;AAAA,EAAA,GAEIyB,IAAUD;AAAA,IACd,EAAE,MAAAG,GAAM,WAAWqB,GAAO,UAAApB,GAAU,eAAAC,EAAA;AAAA,IACpC7B;AAAA,EAAA;AAGF,SACE0D,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMH;AAAA,MACN,uBAAuB,CAAC,GAAG5B,GAAUoB,CAAK;AAAA,MAC1C,cAAcQ,EAAQ;AAAA,MACtB,UAAUZ;AAAA,MACV,OAAAD;AAAA,MAEA,UAAAe,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAAjC;AAAA,UACA,cAAAsB;AAAA,UACA,YAAAC;AAAA,UACA,sBAAAC;AAAA,UACA,cAAAC;AAAA,UACA,iBAAAC;AAAA,UACA,YAAAR;AAAA,UACA,YAAAC;AAAA,UACA,eAAAQ;AAAA,UACA,eAAAC;AAAA,UACA,SAAA9B;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;;;;"}
package/dist/index.js CHANGED
@@ -1,33 +1,33 @@
1
1
  import { g as r } from "./object.utils-D_Zzon-H.js";
2
- import { v as o, G as t, w as i, B as n, x as p, y as m, z as l, A as u, C as x, Q as g, g as P, c as d, d as C, b as h, i as b, a as f, Z as c, H as D, D as I, E as L, _ as S, r as A, P as T, R as B, I as M, M as y, J as O, Y as R, L as G, K as w, p as F, e as H, o as v, q as N, n as k, j as z, k as K, l as W, t as E, m as V, f as j, h as X, s as Y, u as q, F as J, N as Q, W as U, V as Z, U as _, O as $, X as aa, T as ea, S as ra } from "./component.constants-DgkJze23.js";
3
- import { r as oa } from "./charts.utils-Iko6Kzy0.js";
4
- import { g as ia } from "./formatter.utils-XQ213825.js";
5
- import { i as pa } from "./index-KmzIpbK7.js";
6
- import { i as la } from "./index-Dz2RZAKI.js";
7
- import { i as xa } from "./index-D1f77vvz.js";
8
- import { i as Pa } from "./index-DYXWHe8m.js";
9
- import { i as Ca } from "./index-ExZUonHQ.js";
10
- import { i as ba } from "./index-lWf11Upm.js";
11
- import { a as ca, b as Da, g as Ia } from "./bars.utils-B1Hz3hDV.js";
12
- import { i as Sa } from "./index-Btb4t3Wv.js";
13
- import { i as Ta } from "./index-D9xys6rW.js";
14
- import { i as Ma, g as ya, a as Oa } from "./index-IIIoCbBX.js";
15
- import { i as Ga, g as wa, a as Fa } from "./index-Djb7UU1L.js";
16
- import { i as va, g as Na, a as ka } from "./index-DQy1VR_1.js";
17
- import { i as Ka } from "./index-gNSOwkrE.js";
18
- import { i as Ea } from "./index-CQjWaAI1.js";
19
- import { i as ja } from "./index-SXB_nz9V.js";
20
- import { g as Ya, a as qa } from "./pies.utils-4gWRjv-L.js";
21
- import { i as Qa } from "./index-CUL62EI3.js";
22
- import { i as Za } from "./index-B_h9tbkR.js";
23
- import { i as $a, g as ae, a as ee, b as re, c as se } from "./index-B6pLTirY.js";
24
- import { C as te } from "./ChartCard-CVL4wTx4.js";
25
- import { i as ne, g as pe, a as me } from "./index-D-uIQw1c.js";
26
- import { i as ue, g as xe } from "./index-CEnzeG60.js";
27
- import { i as Pe } from "./index-DxyqvM1n.js";
28
- import { i as Ce } from "./index-BvcyKJye.js";
29
- import { E as be } from "./EditorCard-CBM5lBf4.js";
30
- import { C as ce } from "./ComparisonPeriod.type.emb-0_NLUHUG.js";
2
+ import { v as o, G as t, w as i, B as n, x as p, y as m, z as l, A as u, C as x, Q as g, g as P, c as d, d as C, b as h, i as b, a as f, Z as c, H as D, D as I, E as L, _ as S, r as A, P as T, R as B, I as M, M as y, J as O, Y as R, L as G, K as w, p as F, e as H, o as v, q as N, n as k, j as z, k as K, l as W, t as E, m as V, f as j, h as X, s as Y, u as q, F as J, N as Q, W as U, V as Z, U as _, O as $, X as aa, T as ea, S as ra } from "./component.constants-DmK3uQGY.js";
3
+ import { r as oa } from "./charts.utils-DtFuEHDp.js";
4
+ import { g as ia } from "./formatter.utils-DCDukEZ9.js";
5
+ import { i as pa } from "./index-jqEl3LLC.js";
6
+ import { i as la } from "./index-CbWn6WMr.js";
7
+ import { i as xa } from "./index-DSk9EA7t.js";
8
+ import { i as Pa } from "./index-Dfh1KgI5.js";
9
+ import { i as Ca } from "./index-BEM0olHp.js";
10
+ import { i as ba } from "./index-B92AHN8Y.js";
11
+ import { a as ca, b as Da, g as Ia } from "./bars.utils-BHrcAtuH.js";
12
+ import { i as Sa } from "./index-Bk1YIZZf.js";
13
+ import { i as Ta } from "./index-Cj6xdAWZ.js";
14
+ import { i as Ma, g as ya, a as Oa } from "./index-sJkPi8Q_.js";
15
+ import { i as Ga, g as wa, a as Fa } from "./index-SIEfd0gp.js";
16
+ import { i as va, g as Na, a as ka } from "./index-D_-Nl-64.js";
17
+ import { i as Ka } from "./index-Dbg-T-ST.js";
18
+ import { i as Ea } from "./index-C23J5jXR.js";
19
+ import { i as ja } from "./index-CFoVL8LS.js";
20
+ import { g as Ya, a as qa } from "./pies.utils-Zw1lwwC4.js";
21
+ import { i as Qa } from "./index-GhU7CFw0.js";
22
+ import { i as Za } from "./index-CmYz5k0C.js";
23
+ import { i as $a, g as ae, a as ee, b as re, c as se } from "./index-C6oyYlMu.js";
24
+ import { C as te } from "./ChartCard-uZBftDKk.js";
25
+ import { i as ne, g as pe, a as me } from "./index-C7mz7pKQ.js";
26
+ import { i as ue, g as xe } from "./index-mp4eyizO.js";
27
+ import { i as Pe } from "./index-BuBPj3by.js";
28
+ import { i as Ce } from "./index-O8I3E36E.js";
29
+ import { E as be } from "./EditorCard-B95YC3pz.js";
30
+ import { C as ce } from "./ComparisonPeriod.type.emb-Bq4r1RbE.js";
31
31
  import { i as Ie, s as Le } from "./color.utils-BSg_DFOh.js";
32
32
  export {
33
33
  Pa as BarChartDefaultHorizontalPro,
@@ -1,8 +1,8 @@
1
- import { r as g, g as b } from "./charts.utils-Iko6Kzy0.js";
2
- import { g as u } from "./formatter.utils-XQ213825.js";
1
+ import { r as g, g as b } from "./charts.utils-DtFuEHDp.js";
2
+ import { g as u } from "./formatter.utils-DCDukEZ9.js";
3
3
  import { g as h, a as c } from "./object.utils-D_Zzon-H.js";
4
- import { g as C } from "./index-D9A89MpZ.js";
5
- import { i as f } from "./component.constants-DgkJze23.js";
4
+ import { g as C } from "./index-DjwSlZQY.js";
5
+ import { i as f } from "./component.constants-DmK3uQGY.js";
6
6
  const T = (a, o = g) => {
7
7
  const s = u(o);
8
8
  if (!a.data)
@@ -70,4 +70,4 @@ export {
70
70
  w as a,
71
71
  T as g
72
72
  };
73
- //# sourceMappingURL=pies.utils-4gWRjv-L.js.map
73
+ //# sourceMappingURL=pies.utils-Zw1lwwC4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pies.utils-4gWRjv-L.js","sources":["../src/components/charts/pies/pies.utils.ts"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { groupTailAsOther } from '../charts.utils';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { getColor } from '../../../theme/styles/styles.utils';\nimport { getChartColors } from '@embeddable.com/remarkable-ui';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\n\nexport const getPieChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measure: Measure;\n maxLegendItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'pie'> => {\n const themeFormatter = getThemeFormatter(theme);\n\n if (!props.data)\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n\n const groupedData = groupTailAsOther(\n props.data,\n props.dimension,\n [props.measure],\n props.maxLegendItems,\n );\n\n const themeKey = getObjectStableKey(theme);\n const chartColors = getChartColors();\n const backgroundColor = groupedData.map((item, i) =>\n getColor(\n `${themeKey}.charts.backgroundColors`,\n `${props.dimension.name}.${item[props.dimension.name]}`,\n theme.charts.backgroundColors ?? chartColors,\n i,\n ),\n );\n\n const borderColor = groupedData.map((item, i) =>\n getColor(\n `${themeKey}.charts.borderColors`,\n `${props.dimension.name}.${item[props.dimension.name]}`,\n theme.charts.borderColors ?? chartColors,\n i,\n ),\n );\n\n return {\n labels: groupedData.map((item) => {\n const value = item[props.dimension.name];\n const formattedValue = themeFormatter.data(props.dimension, value);\n\n // If formatter did not work, try i18n translation\n if (value === formattedValue) {\n return i18n.t(value);\n }\n return formattedValue;\n }),\n datasets: [\n {\n data: groupedData.map((item) => item[props.measure.name]),\n backgroundColor,\n borderColor,\n },\n ],\n };\n};\n\nexport const getPieChartProOptions = (\n measure: Measure,\n theme: Theme = remarkableTheme,\n): Partial<ChartOptions<'pie'>> => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n formatter: (value: string | number) => themeFormatter.data(measure, value),\n },\n tooltip: {\n callbacks: {\n label(context) {\n const raw = context.raw as number;\n const total = context.dataset.data.reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (sum: number, v: any) => sum + parseFloat(v),\n 0,\n );\n const pct = Math.round((raw / total) * 100);\n return `${themeFormatter.data(measure, raw)} (${pct}%)`;\n },\n },\n },\n },\n };\n};\n"],"names":["getPieChartProData","props","theme","remarkableTheme","themeFormatter","getThemeFormatter","groupedData","groupTailAsOther","themeKey","getObjectStableKey","chartColors","getChartColors","backgroundColor","item","i","getColor","borderColor","value","formattedValue","i18n","getPieChartProOptions","measure","context","raw","total","sum","v","pct"],"mappings":";;;;;AAWO,MAAMA,IAAqB,CAChCC,GAMAC,IAAeC,MACM;AACrB,QAAMC,IAAiBC,EAAkBH,CAAK;AAE9C,MAAI,CAACD,EAAM;AACT,WAAO;AAAA,MACL,QAAQ,CAAA;AAAA,MACR,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,IAAA;AAG3B,QAAMK,IAAcC;AAAA,IAClBN,EAAM;AAAA,IACNA,EAAM;AAAA,IACN,CAACA,EAAM,OAAO;AAAA,IACdA,EAAM;AAAA,EAAA,GAGFO,IAAWC,EAAmBP,CAAK,GACnCQ,IAAcC,EAAA,GACdC,IAAkBN,EAAY;AAAA,IAAI,CAACO,GAAMC,MAC7CC;AAAA,MACE,GAAGP,CAAQ;AAAA,MACX,GAAGP,EAAM,UAAU,IAAI,IAAIY,EAAKZ,EAAM,UAAU,IAAI,CAAC;AAAA,MACrDC,EAAM,OAAO,oBAAoBQ;AAAA,MACjCI;AAAA,IAAA;AAAA,EACF,GAGIE,IAAcV,EAAY;AAAA,IAAI,CAACO,GAAMC,MACzCC;AAAA,MACE,GAAGP,CAAQ;AAAA,MACX,GAAGP,EAAM,UAAU,IAAI,IAAIY,EAAKZ,EAAM,UAAU,IAAI,CAAC;AAAA,MACrDC,EAAM,OAAO,gBAAgBQ;AAAA,MAC7BI;AAAA,IAAA;AAAA,EACF;AAGF,SAAO;AAAA,IACL,QAAQR,EAAY,IAAI,CAACO,MAAS;AAChC,YAAMI,IAAQJ,EAAKZ,EAAM,UAAU,IAAI,GACjCiB,IAAiBd,EAAe,KAAKH,EAAM,WAAWgB,CAAK;AAGjE,aAAIA,MAAUC,IACLC,EAAK,EAAEF,CAAK,IAEdC;AAAA,IACT,CAAC;AAAA,IACD,UAAU;AAAA,MACR;AAAA,QACE,MAAMZ,EAAY,IAAI,CAACO,MAASA,EAAKZ,EAAM,QAAQ,IAAI,CAAC;AAAA,QACxD,iBAAAW;AAAA,QACA,aAAAI;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ,GAEaI,IAAwB,CACnCC,GACAnB,IAAeC,MACkB;AACjC,QAAMC,IAAiBC,EAAkBH,CAAK;AAE9C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,QAAQ,EAAE,UAAUA,EAAM,OAAO,kBAAkB,SAAA;AAAA,MACnD,YAAY;AAAA,QACV,WAAW,CAACe,MAA2Bb,EAAe,KAAKiB,GAASJ,CAAK;AAAA,MAAA;AAAA,MAE3E,SAAS;AAAA,QACP,WAAW;AAAA,UACT,MAAMK,GAAS;AACb,kBAAMC,IAAMD,EAAQ,KACdE,IAAQF,EAAQ,QAAQ,KAAK;AAAA;AAAA,cAEjC,CAACG,GAAaC,MAAWD,IAAM,WAAWC,CAAC;AAAA,cAC3C;AAAA,YAAA,GAEIC,IAAM,KAAK,MAAOJ,IAAMC,IAAS,GAAG;AAC1C,mBAAO,GAAGpB,EAAe,KAAKiB,GAASE,CAAG,CAAC,KAAKI,CAAG;AAAA,UACrD;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"pies.utils-Zw1lwwC4.js","sources":["../src/components/charts/pies/pies.utils.ts"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { groupTailAsOther } from '../charts.utils';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { getColor } from '../../../theme/styles/styles.utils';\nimport { getChartColors } from '@embeddable.com/remarkable-ui';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\n\nexport const getPieChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measure: Measure;\n maxLegendItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'pie'> => {\n const themeFormatter = getThemeFormatter(theme);\n\n if (!props.data)\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n\n const groupedData = groupTailAsOther(\n props.data,\n props.dimension,\n [props.measure],\n props.maxLegendItems,\n );\n\n const themeKey = getObjectStableKey(theme);\n const chartColors = getChartColors();\n const backgroundColor = groupedData.map((item, i) =>\n getColor(\n `${themeKey}.charts.backgroundColors`,\n `${props.dimension.name}.${item[props.dimension.name]}`,\n theme.charts.backgroundColors ?? chartColors,\n i,\n ),\n );\n\n const borderColor = groupedData.map((item, i) =>\n getColor(\n `${themeKey}.charts.borderColors`,\n `${props.dimension.name}.${item[props.dimension.name]}`,\n theme.charts.borderColors ?? chartColors,\n i,\n ),\n );\n\n return {\n labels: groupedData.map((item) => {\n const value = item[props.dimension.name];\n const formattedValue = themeFormatter.data(props.dimension, value);\n\n // If formatter did not work, try i18n translation\n if (value === formattedValue) {\n return i18n.t(value);\n }\n return formattedValue;\n }),\n datasets: [\n {\n data: groupedData.map((item) => item[props.measure.name]),\n backgroundColor,\n borderColor,\n },\n ],\n };\n};\n\nexport const getPieChartProOptions = (\n measure: Measure,\n theme: Theme = remarkableTheme,\n): Partial<ChartOptions<'pie'>> => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n formatter: (value: string | number) => themeFormatter.data(measure, value),\n },\n tooltip: {\n callbacks: {\n label(context) {\n const raw = context.raw as number;\n const total = context.dataset.data.reduce(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (sum: number, v: any) => sum + parseFloat(v),\n 0,\n );\n const pct = Math.round((raw / total) * 100);\n return `${themeFormatter.data(measure, raw)} (${pct}%)`;\n },\n },\n },\n },\n };\n};\n"],"names":["getPieChartProData","props","theme","remarkableTheme","themeFormatter","getThemeFormatter","groupedData","groupTailAsOther","themeKey","getObjectStableKey","chartColors","getChartColors","backgroundColor","item","i","getColor","borderColor","value","formattedValue","i18n","getPieChartProOptions","measure","context","raw","total","sum","v","pct"],"mappings":";;;;;AAWO,MAAMA,IAAqB,CAChCC,GAMAC,IAAeC,MACM;AACrB,QAAMC,IAAiBC,EAAkBH,CAAK;AAE9C,MAAI,CAACD,EAAM;AACT,WAAO;AAAA,MACL,QAAQ,CAAA;AAAA,MACR,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,IAAA;AAG3B,QAAMK,IAAcC;AAAA,IAClBN,EAAM;AAAA,IACNA,EAAM;AAAA,IACN,CAACA,EAAM,OAAO;AAAA,IACdA,EAAM;AAAA,EAAA,GAGFO,IAAWC,EAAmBP,CAAK,GACnCQ,IAAcC,EAAA,GACdC,IAAkBN,EAAY;AAAA,IAAI,CAACO,GAAMC,MAC7CC;AAAA,MACE,GAAGP,CAAQ;AAAA,MACX,GAAGP,EAAM,UAAU,IAAI,IAAIY,EAAKZ,EAAM,UAAU,IAAI,CAAC;AAAA,MACrDC,EAAM,OAAO,oBAAoBQ;AAAA,MACjCI;AAAA,IAAA;AAAA,EACF,GAGIE,IAAcV,EAAY;AAAA,IAAI,CAACO,GAAMC,MACzCC;AAAA,MACE,GAAGP,CAAQ;AAAA,MACX,GAAGP,EAAM,UAAU,IAAI,IAAIY,EAAKZ,EAAM,UAAU,IAAI,CAAC;AAAA,MACrDC,EAAM,OAAO,gBAAgBQ;AAAA,MAC7BI;AAAA,IAAA;AAAA,EACF;AAGF,SAAO;AAAA,IACL,QAAQR,EAAY,IAAI,CAACO,MAAS;AAChC,YAAMI,IAAQJ,EAAKZ,EAAM,UAAU,IAAI,GACjCiB,IAAiBd,EAAe,KAAKH,EAAM,WAAWgB,CAAK;AAGjE,aAAIA,MAAUC,IACLC,EAAK,EAAEF,CAAK,IAEdC;AAAA,IACT,CAAC;AAAA,IACD,UAAU;AAAA,MACR;AAAA,QACE,MAAMZ,EAAY,IAAI,CAACO,MAASA,EAAKZ,EAAM,QAAQ,IAAI,CAAC;AAAA,QACxD,iBAAAW;AAAA,QACA,aAAAI;AAAA,MAAA;AAAA,IACF;AAAA,EACF;AAEJ,GAEaI,IAAwB,CACnCC,GACAnB,IAAeC,MACkB;AACjC,QAAMC,IAAiBC,EAAkBH,CAAK;AAE9C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,QAAQ,EAAE,UAAUA,EAAM,OAAO,kBAAkB,SAAA;AAAA,MACnD,YAAY;AAAA,QACV,WAAW,CAACe,MAA2Bb,EAAe,KAAKiB,GAASJ,CAAK;AAAA,MAAA;AAAA,MAE3E,SAAS;AAAA,QACP,WAAW;AAAA,UACT,MAAMK,GAAS;AACb,kBAAMC,IAAMD,EAAQ,KACdE,IAAQF,EAAQ,QAAQ,KAAK;AAAA;AAAA,cAEjC,CAACG,GAAaC,MAAWD,IAAM,WAAWC,CAAC;AAAA,cAC3C;AAAA,YAAA,GAEIC,IAAM,KAAK,MAAOJ,IAAMC,IAAS,GAAG;AAC1C,mBAAO,GAAGpB,EAAe,KAAKiB,GAASE,CAAG,CAAC,KAAKI,CAAG;AAAA,UACrD;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEJ;"}
@@ -1,4 +1,4 @@
1
- import { $ as i } from "./component.constants-DgkJze23.js";
1
+ import { $ as i } from "./component.constants-DmK3uQGY.js";
2
2
  const f = (o, t, s) => {
3
3
  var d;
4
4
  if (!o || !t)
@@ -17,4 +17,4 @@ export {
17
17
  v as a,
18
18
  f as g
19
19
  };
20
- //# sourceMappingURL=timeRange.utils-CgoON1yQ.js.map
20
+ //# sourceMappingURL=timeRange.utils-C96Hp2HD.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeRange.utils-CgoON1yQ.js","sources":["../src/components/utils/timeRange.utils.ts"],"sourcesContent":["import { TimeRange } from '@embeddable.com/core';\nimport { Theme } from '../../theme/theme.types';\nimport { resolveI18nString } from '../component.utils';\n\nexport const getComparisonPeriodDateRange = (\n primaryDateRange: TimeRange,\n comparisonPeriod: string | undefined,\n theme: Theme,\n): TimeRange => {\n if (!primaryDateRange || !comparisonPeriod) {\n return undefined;\n }\n\n const primaryDateRangeRange = primaryDateRange?.relativeTimeString\n ? theme.defaults.dateRangesOptions\n .find((option) => option.value === primaryDateRange?.relativeTimeString)\n ?.getRange()\n : primaryDateRange;\n\n const comparisonPeriodOption = theme.defaults.comparisonPeriodsOptions.find(\n (option) => option.value === comparisonPeriod,\n );\n\n return comparisonPeriodOption?.getRange(primaryDateRangeRange);\n};\n\nexport const getComparisonPeriodLabel = (\n comparisonPeriod: string | undefined,\n theme: Theme,\n): string => {\n const option = theme.defaults.comparisonPeriodsOptions.find(\n (option) => option.value === comparisonPeriod,\n );\n return option ? resolveI18nString(option.label) : '';\n};\n"],"names":["getComparisonPeriodDateRange","primaryDateRange","comparisonPeriod","theme","primaryDateRangeRange","_a","option","comparisonPeriodOption","getComparisonPeriodLabel","resolveI18nString"],"mappings":";AAIO,MAAMA,IAA+B,CAC1CC,GACAC,GACAC,MACc;;AACd,MAAI,CAACF,KAAoB,CAACC;AACxB;AAGF,QAAME,IAAwBH,KAAA,QAAAA,EAAkB,sBAC5CI,IAAAF,EAAM,SAAS,kBACZ,KAAK,CAACG,MAAWA,EAAO,WAAUL,KAAA,gBAAAA,EAAkB,mBAAkB,MADzE,gBAAAI,EAEI,aACJJ,GAEEM,IAAyBJ,EAAM,SAAS,yBAAyB;AAAA,IACrE,CAACG,MAAWA,EAAO,UAAUJ;AAAA,EAAA;AAG/B,SAAOK,KAAA,gBAAAA,EAAwB,SAASH;AAC1C,GAEaI,IAA2B,CACtCN,GACAC,MACW;AACX,QAAMG,IAASH,EAAM,SAAS,yBAAyB;AAAA,IACrD,CAACG,MAAWA,EAAO,UAAUJ;AAAA,EAAA;AAE/B,SAAOI,IAASG,EAAkBH,EAAO,KAAK,IAAI;AACpD;"}
1
+ {"version":3,"file":"timeRange.utils-C96Hp2HD.js","sources":["../src/components/utils/timeRange.utils.ts"],"sourcesContent":["import { TimeRange } from '@embeddable.com/core';\nimport { Theme } from '../../theme/theme.types';\nimport { resolveI18nString } from '../component.utils';\n\nexport const getComparisonPeriodDateRange = (\n primaryDateRange: TimeRange,\n comparisonPeriod: string | undefined,\n theme: Theme,\n): TimeRange => {\n if (!primaryDateRange || !comparisonPeriod) {\n return undefined;\n }\n\n const primaryDateRangeRange = primaryDateRange?.relativeTimeString\n ? theme.defaults.dateRangesOptions\n .find((option) => option.value === primaryDateRange?.relativeTimeString)\n ?.getRange()\n : primaryDateRange;\n\n const comparisonPeriodOption = theme.defaults.comparisonPeriodsOptions.find(\n (option) => option.value === comparisonPeriod,\n );\n\n return comparisonPeriodOption?.getRange(primaryDateRangeRange);\n};\n\nexport const getComparisonPeriodLabel = (\n comparisonPeriod: string | undefined,\n theme: Theme,\n): string => {\n const option = theme.defaults.comparisonPeriodsOptions.find(\n (option) => option.value === comparisonPeriod,\n );\n return option ? resolveI18nString(option.label) : '';\n};\n"],"names":["getComparisonPeriodDateRange","primaryDateRange","comparisonPeriod","theme","primaryDateRangeRange","_a","option","comparisonPeriodOption","getComparisonPeriodLabel","resolveI18nString"],"mappings":";AAIO,MAAMA,IAA+B,CAC1CC,GACAC,GACAC,MACc;;AACd,MAAI,CAACF,KAAoB,CAACC;AACxB;AAGF,QAAME,IAAwBH,KAAA,QAAAA,EAAkB,sBAC5CI,IAAAF,EAAM,SAAS,kBACZ,KAAK,CAACG,MAAWA,EAAO,WAAUL,KAAA,gBAAAA,EAAkB,mBAAkB,MADzE,gBAAAI,EAEI,aACJJ,GAEEM,IAAyBJ,EAAM,SAAS,yBAAyB;AAAA,IACrE,CAACG,MAAWA,EAAO,UAAUJ;AAAA,EAAA;AAG/B,SAAOK,KAAA,gBAAAA,EAAwB,SAASH;AAC1C,GAEaI,IAA2B,CACtCN,GACAC,MACW;AACX,QAAMG,IAASH,EAAM,SAAS,yBAAyB;AAAA,IACrD,CAACG,MAAWA,EAAO,UAAUJ;AAAA,EAAA;AAE/B,SAAOI,IAASG,EAAkBH,EAAO,KAAK,IAAI;AACpD;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@embeddable.com/remarkable-pro",
3
3
  "author": "embeddable (https://embeddable.com)",
4
- "version": "0.0.10",
4
+ "version": "0.0.11",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/embeddable-hq/remarkable-pro"
@@ -59,7 +59,7 @@
59
59
  "@changesets/cli": "^2.29.6",
60
60
  "@embeddable.com/core": "^2.13.2",
61
61
  "@embeddable.com/react": "^2.12.2",
62
- "@embeddable.com/remarkable-ui": "2.0.13",
62
+ "@embeddable.com/remarkable-ui": "2.0.14",
63
63
  "@tabler/icons-react": "^3.34.1",
64
64
  "chart.js": "^4.5.0",
65
65
  "chartjs-plugin-datalabels": "^2.2.0",