@embeddable.com/remarkable-ui 0.1.31 → 0.1.33

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 (88) 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/{BaseButton-Bf7IgH4E.js → BaseButton-D3Nh2VwK.js} +2 -2
  8. package/dist/{BaseButton-Bf7IgH4E.js.map → BaseButton-D3Nh2VwK.js.map} +1 -1
  9. package/dist/{ChartCard-CACbKXZ7.js → ChartCard-BMfUGlQC.js} +13 -13
  10. package/dist/{ChartCard-CACbKXZ7.js.map → ChartCard-BMfUGlQC.js.map} +1 -1
  11. package/dist/{ComparisonPeriod.type.emb-Q_A2MmQY.js → ComparisonPeriod.type.emb-9nwxR9Tl.js} +2 -2
  12. package/dist/{ComparisonPeriod.type.emb-Q_A2MmQY.js.map → ComparisonPeriod.type.emb-9nwxR9Tl.js.map} +1 -1
  13. package/dist/ComparisonPeriodSelectFieldPro.js +4 -4
  14. package/dist/DateRangeSelectFieldPro.js +2 -2
  15. package/dist/DonutChartPro.js +2 -2
  16. package/dist/DonutLabelChartPro.js +2 -2
  17. package/dist/{EditorCard-CNU8sUaR.js → EditorCard-tBhUO9qV.js} +9 -9
  18. package/dist/{EditorCard-CNU8sUaR.js.map → EditorCard-tBhUO9qV.js.map} +1 -1
  19. package/dist/{KpiChart-C-SmtMQp.js → KpiChart-CqS9-4MK.js} +2 -2
  20. package/dist/{KpiChart-C-SmtMQp.js.map → KpiChart-CqS9-4MK.js.map} +1 -1
  21. package/dist/KpiChartNumberComparisonPro.js +39 -39
  22. package/dist/KpiChartNumberComparisonPro.js.map +1 -1
  23. package/dist/KpiChartNumberPro.js +4 -4
  24. package/dist/LineChartComparisonDefaultPro.js +5 -5
  25. package/dist/LineChartDefaultPro.js +3 -3
  26. package/dist/LineChartGroupedPro.js +3 -3
  27. package/dist/MultiSelectFieldPro.js +2 -2
  28. package/dist/PieChartPro.js +2 -2
  29. package/dist/SingleSelectField-BwQahxL2.js +96 -0
  30. package/dist/SingleSelectField-BwQahxL2.js.map +1 -0
  31. package/dist/SingleSelectFieldPro.js +2 -2
  32. package/dist/{bars.utils-BaxcPPid.js → bars.utils-BS6hyz6a.js} +4 -4
  33. package/dist/{bars.utils-BaxcPPid.js.map → bars.utils-BS6hyz6a.js.map} +1 -1
  34. package/dist/{charts.utils-CQtEx-IN.js → charts.utils-CtjnpTZZ.js} +3 -3
  35. package/dist/{charts.utils-CQtEx-IN.js.map → charts.utils-CtjnpTZZ.js.map} +1 -1
  36. package/dist/{component.constants-B1QqUi2G.js → component.constants-BtSbiLSA.js} +1676 -1659
  37. package/dist/component.constants-BtSbiLSA.js.map +1 -0
  38. package/dist/embeddable-components.json +12 -12
  39. package/dist/{formatter.utils-B3HZzPUm.js → formatter.utils-DsSqaQLy.js} +2 -2
  40. package/dist/{formatter.utils-B3HZzPUm.js.map → formatter.utils-DsSqaQLy.js.map} +1 -1
  41. package/dist/index-0EU9wBvd.js +210 -0
  42. package/dist/index-0EU9wBvd.js.map +1 -0
  43. package/dist/{index-DyMUkLDE.js → index-BFMal406.js} +8 -8
  44. package/dist/{index-DyMUkLDE.js.map → index-BFMal406.js.map} +1 -1
  45. package/dist/{index-Fs7N8msy.js → index-Bgt_jnmA.js} +13 -13
  46. package/dist/{index-Fs7N8msy.js.map → index-Bgt_jnmA.js.map} +1 -1
  47. package/dist/{index-SdQVlaEz.js → index-CVNg2zPD.js} +11 -11
  48. package/dist/{index-SdQVlaEz.js.map → index-CVNg2zPD.js.map} +1 -1
  49. package/dist/{index-Dye21BCa.js → index-CuyqPNAk.js} +5 -5
  50. package/dist/{index-Dye21BCa.js.map → index-CuyqPNAk.js.map} +1 -1
  51. package/dist/{index-DXHlr-gm.js → index-Fhr_BPX0.js} +4 -4
  52. package/dist/{index-DXHlr-gm.js.map → index-Fhr_BPX0.js.map} +1 -1
  53. package/dist/index.js +100 -99
  54. package/dist/{pies.utils-CPE4fxFn.js → pies.utils-DCRmuFgI.js} +4 -4
  55. package/dist/{pies.utils-CPE4fxFn.js.map → pies.utils-DCRmuFgI.js.map} +1 -1
  56. package/dist/remarkable-ui/editors/InputField/InputField.d.ts +4 -0
  57. package/dist/remarkable-ui/editors/InputField/InputField.d.ts.map +1 -1
  58. package/dist/remarkable-ui/editors/NumberField/NumberField.d.ts +2 -0
  59. package/dist/remarkable-ui/editors/NumberField/NumberField.d.ts.map +1 -1
  60. package/dist/remarkable-ui/editors/NumberField/NumberField.stories.d.ts +4 -0
  61. package/dist/remarkable-ui/editors/NumberField/NumberField.stories.d.ts.map +1 -1
  62. package/dist/remarkable-ui/editors/TextField/TextField.d.ts +2 -0
  63. package/dist/remarkable-ui/editors/TextField/TextField.d.ts.map +1 -1
  64. package/dist/remarkable-ui/editors/TextField/TextField.stories.d.ts +5 -0
  65. package/dist/remarkable-ui/editors/TextField/TextField.stories.d.ts.map +1 -1
  66. package/dist/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.d.ts +2 -0
  67. package/dist/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.d.ts.map +1 -1
  68. package/dist/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.stories.d.ts +2 -0
  69. package/dist/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.stories.d.ts.map +1 -1
  70. package/dist/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.d.ts +2 -0
  71. package/dist/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.d.ts.map +1 -1
  72. package/dist/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.stories.d.ts +2 -0
  73. package/dist/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.stories.d.ts.map +1 -1
  74. package/dist/remarkable-ui/editors/select/shared/SelectButton/SelectButton.d.ts +1 -0
  75. package/dist/remarkable-ui/editors/select/shared/SelectButton/SelectButton.d.ts.map +1 -1
  76. package/dist/remarkable-ui/index.d.ts +1 -0
  77. package/dist/remarkable-ui/index.d.ts.map +1 -1
  78. package/dist/remarkable-ui/shared/FieldErrorMessage/FieldErrorMessage.d.ts +5 -0
  79. package/dist/remarkable-ui/shared/FieldErrorMessage/FieldErrorMessage.d.ts.map +1 -0
  80. package/dist/remarkable-ui.css +1 -1
  81. package/dist/{timeRange.utils-C0iy3N-l.js → timeRange.utils-CWIlCcfG.js} +2 -2
  82. package/dist/{timeRange.utils-C0iy3N-l.js.map → timeRange.utils-CWIlCcfG.js.map} +1 -1
  83. package/package.json +1 -1
  84. package/dist/SingleSelectField-AZ79m6bQ.js +0 -88
  85. package/dist/SingleSelectField-AZ79m6bQ.js.map +0 -1
  86. package/dist/component.constants-B1QqUi2G.js.map +0 -1
  87. package/dist/index-BcXLOYYi.js +0 -203
  88. package/dist/index-BcXLOYYi.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"KpiChartNumberComparisonPro.js","sources":["../src/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/index.tsx","../src/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/KpiChartNumberComparisonPro.emb.ts"],"sourcesContent":["import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Measure, TimeRange } from '@embeddable.com/core';\nimport { i18n, i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { KpiChart } from '../../../../../remarkable-ui';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { useEffect } from 'react';\nimport {\n getComparisonPeriodDateRange,\n getComparisonPeriodLabel,\n} from '../../../utils/timeRange.utils';\n\ntype KpiChartNumberComparisonProProp = {\n changeFontSize: number;\n comparisonPeriod?: string;\n description: string;\n displayChangeAsPercentage?: boolean;\n fontSize: number;\n measure: Measure;\n primaryDateRange: TimeRange;\n results: DataResponse;\n resultsComparison: DataResponse | undefined;\n reversePositiveNegativeColors?: boolean;\n title: string;\n percentageDecimalPlaces: number;\n comparisonDateRange: TimeRange;\n setComparisonDateRange: (dateRange: TimeRange) => void;\n};\n\nconst KpiChartNumberComparisonPro = (props: KpiChartNumberComparisonProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description } = resolveI18nProps(props);\n const {\n changeFontSize,\n comparisonPeriod,\n comparisonDateRange,\n displayChangeAsPercentage,\n fontSize,\n measure,\n primaryDateRange,\n results,\n resultsComparison,\n reversePositiveNegativeColors,\n percentageDecimalPlaces,\n setComparisonDateRange,\n } = props;\n\n useEffect(() => {\n const newComparisonDateRange = getComparisonPeriodDateRange(\n primaryDateRange,\n comparisonPeriod,\n theme,\n );\n setComparisonDateRange(newComparisonDateRange);\n }, [comparisonPeriod, JSON.stringify(primaryDateRange), theme]);\n\n const value: number = results.data?.[0]?.[measure.name];\n const comparisonValue = comparisonDateRange\n ? resultsComparison?.data?.[0]?.[measure.name]\n : undefined;\n\n const themeFormatter = getThemeFormatter(theme);\n const valueFormatter = (valueToFormat: number) => themeFormatter.data(measure, valueToFormat);\n const comparisonLabel = `vs ${getComparisonPeriodLabel(comparisonPeriod, theme).toLowerCase()}`;\n\n const resultsCombined: DataResponse = {\n isLoading: Boolean(results.isLoading || resultsComparison?.isLoading),\n data:\n !results?.data && !resultsComparison?.data\n ? undefined\n : [\n ...(results.data?.length\n ? [{ label: i18n.t('charts.primaryPeriod'), ...results.data[0] }]\n : []),\n ...(resultsComparison?.data?.length\n ? [{ label: i18n.t('charts.comparisonPeriod'), ...resultsComparison.data[0] }]\n : []),\n ],\n };\n\n return (\n <ChartCard\n data={resultsCombined}\n dimensionsAndMeasures={[\n // Add a label dimension to distinguish primary and comparison periods in exports\n {\n name: 'label',\n title: i18n.t('charts.label'),\n nativeType: 'string',\n __type__: 'dimension',\n },\n measure,\n ]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <KpiChart\n value={value}\n comparisonValue={comparisonValue}\n valueFormatter={valueFormatter}\n valueFontSize={fontSize}\n changeFontSize={changeFontSize}\n invertChangeColors={reversePositiveNegativeColors}\n showChangeAsPercentage={displayChangeAsPercentage}\n comparisonLabel={comparisonLabel}\n percentageDecimalPlaces={percentageDecimalPlaces}\n />\n </ChartCard>\n );\n};\n\nexport default KpiChartNumberComparisonPro;\n","import { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport {\n dataset,\n description,\n dimensionTime,\n genericBoolean,\n genericNumber,\n genericTimeRange,\n measure,\n title,\n} from '../../../component.constants';\nimport KpiChartNumberComparisonPro from './index';\nimport { loadData, TimeRange } from '@embeddable.com/core';\nimport ComparisonPeriodType from '../../../types/ComparisonPeriod.type.emb';\n\nexport const meta = {\n name: 'KpiChartNumberComparisonPro',\n label: 'Kpi Chart - Number Comparison',\n category: 'Kpi Charts',\n inputs: [\n dataset,\n measure,\n { ...dimensionTime, name: 'timeProperty', label: 'Time Property' },\n {\n ...genericTimeRange,\n name: 'primaryDateRange',\n label: 'Primary Date Range',\n description: 'You can also connect this to a date range selector using its variable',\n category: 'Component Data',\n },\n {\n name: 'comparisonPeriod',\n type: ComparisonPeriodType,\n label: 'Comparison Period',\n description: 'You can also connect this to a comparison period selector using its variable',\n category: 'Component Data',\n },\n title,\n description,\n {\n ...genericBoolean,\n name: 'displayChangeAsPercentage',\n label: 'Display Change as %',\n defaultValue: false,\n },\n {\n ...genericNumber,\n name: 'percentageDecimalPlaces',\n label: 'Percentage Decimal Places',\n defaultValue: 1,\n },\n {\n ...genericBoolean,\n name: 'reversePositiveNegativeColors',\n label: 'Reverse Positive/Negative Colors',\n defaultValue: false,\n },\n { ...genericNumber, name: 'fontSize', label: 'Font Size', defaultValue: 44, required: true },\n {\n ...genericNumber,\n name: 'changeFontSize',\n label: 'Change Font Size',\n defaultValue: 16,\n required: true,\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\ntype KpiChartNumberComparisonProState = {\n comparisonDateRange: TimeRange;\n};\n\nexport default defineComponent(KpiChartNumberComparisonPro, meta, {\n /* @ts-expect-error - to be fixed in @embeddable.com/react */\n props: (\n inputs: Inputs<typeof meta>,\n [state, setState]: [\n KpiChartNumberComparisonProState,\n (state: KpiChartNumberComparisonProState) => void,\n ],\n ) => {\n return {\n ...inputs,\n comparisonDateRange: state?.comparisonDateRange,\n setComparisonDateRange: (comparisonDateRange: TimeRange) => setState({ comparisonDateRange }),\n results: loadData({\n from: inputs.dataset,\n select: [inputs.measure],\n limit: 1,\n filters:\n inputs.primaryDateRange && inputs.timeProperty\n ? [\n {\n property: inputs.timeProperty,\n operator: 'inDateRange',\n value: inputs.primaryDateRange,\n },\n ]\n : undefined,\n }),\n resultsComparison:\n inputs.primaryDateRange && inputs.timeProperty && state?.comparisonDateRange\n ? loadData({\n from: inputs.dataset,\n select: [inputs.measure],\n limit: 1,\n filters: [\n {\n property: inputs.timeProperty,\n operator: 'inDateRange',\n value: state.comparisonDateRange,\n },\n ],\n })\n : undefined,\n };\n },\n});\n"],"names":["KpiChartNumberComparisonPro","props","theme","useTheme","i18nSetup","title","description","resolveI18nProps","changeFontSize","comparisonPeriod","comparisonDateRange","displayChangeAsPercentage","fontSize","measure","primaryDateRange","results","resultsComparison","reversePositiveNegativeColors","percentageDecimalPlaces","setComparisonDateRange","useEffect","newComparisonDateRange","getComparisonPeriodDateRange","value","_b","_a","comparisonValue","_d","_c","themeFormatter","getThemeFormatter","valueFormatter","valueToFormat","comparisonLabel","getComparisonPeriodLabel","resultsCombined","_e","i18n","_f","jsx","ChartCard","KpiChart","meta","dataset","dimensionTime","genericTimeRange","ComparisonPeriodType","genericBoolean","genericNumber","KpiChartNumberComparisonPro_emb","defineComponent","inputs","state","setState","loadData"],"mappings":"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"}
1
+ {"version":3,"file":"KpiChartNumberComparisonPro.js","sources":["../src/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/index.tsx","../src/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/KpiChartNumberComparisonPro.emb.ts"],"sourcesContent":["import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Measure, TimeRange } from '@embeddable.com/core';\nimport { i18n, i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { KpiChart } from '../../../../../remarkable-ui';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { useEffect } from 'react';\nimport {\n getComparisonPeriodDateRange,\n getComparisonPeriodLabel,\n} from '../../../utils/timeRange.utils';\n\ntype KpiChartNumberComparisonProProp = {\n changeFontSize: number;\n comparisonPeriod?: string;\n description: string;\n displayChangeAsPercentage?: boolean;\n fontSize: number;\n measure: Measure;\n primaryDateRange: TimeRange;\n results: DataResponse;\n resultsComparison: DataResponse | undefined;\n reversePositiveNegativeColors?: boolean;\n title: string;\n percentageDecimalPlaces: number;\n comparisonDateRange: TimeRange;\n setComparisonDateRange: (dateRange: TimeRange) => void;\n};\n\nconst KpiChartNumberComparisonPro = (props: KpiChartNumberComparisonProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description } = resolveI18nProps(props);\n const {\n changeFontSize,\n comparisonPeriod,\n comparisonDateRange,\n displayChangeAsPercentage,\n fontSize,\n measure,\n primaryDateRange,\n results,\n resultsComparison,\n reversePositiveNegativeColors,\n percentageDecimalPlaces,\n setComparisonDateRange,\n } = props;\n\n useEffect(() => {\n const newComparisonDateRange = getComparisonPeriodDateRange(\n primaryDateRange,\n comparisonPeriod,\n theme,\n );\n setComparisonDateRange(newComparisonDateRange);\n }, [comparisonPeriod, JSON.stringify(primaryDateRange), theme]);\n\n const value: number = results.data?.[0]?.[measure.name];\n const comparisonValue = comparisonDateRange\n ? resultsComparison?.data?.[0]?.[measure.name]\n : undefined;\n\n const themeFormatter = getThemeFormatter(theme);\n const valueFormatter = (valueToFormat: number) => themeFormatter.data(measure, valueToFormat);\n const comparisonLabel = `vs ${getComparisonPeriodLabel(comparisonPeriod, theme).toLowerCase()}`;\n\n const resultsCombined: DataResponse = {\n isLoading: Boolean(results.isLoading || resultsComparison?.isLoading),\n data:\n !results?.data && !resultsComparison?.data\n ? undefined\n : [\n ...(results.data?.length\n ? [{ label: i18n.t('charts.primaryPeriod'), ...results.data[0] }]\n : []),\n ...(resultsComparison?.data?.length\n ? [{ label: i18n.t('charts.comparisonPeriod'), ...resultsComparison.data[0] }]\n : []),\n ],\n };\n\n return (\n <ChartCard\n data={resultsCombined}\n dimensionsAndMeasures={[\n // Add a label dimension to distinguish primary and comparison periods in exports\n {\n name: 'label',\n title: i18n.t('charts.label'),\n nativeType: 'string',\n __type__: 'dimension',\n },\n measure,\n ]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <KpiChart\n value={value}\n comparisonValue={resultsCombined.isLoading ? undefined : comparisonValue}\n valueFormatter={valueFormatter}\n valueFontSize={fontSize}\n changeFontSize={changeFontSize}\n invertChangeColors={reversePositiveNegativeColors}\n showChangeAsPercentage={displayChangeAsPercentage}\n comparisonLabel={comparisonLabel}\n percentageDecimalPlaces={percentageDecimalPlaces}\n />\n </ChartCard>\n );\n};\n\nexport default KpiChartNumberComparisonPro;\n","import { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport {\n dataset,\n description,\n dimensionTime,\n genericBoolean,\n genericNumber,\n genericTimeRange,\n measure,\n title,\n} from '../../../component.constants';\nimport KpiChartNumberComparisonPro from './index';\nimport { loadData, TimeRange } from '@embeddable.com/core';\nimport ComparisonPeriodType from '../../../types/ComparisonPeriod.type.emb';\n\nexport const meta = {\n name: 'KpiChartNumberComparisonPro',\n label: 'Kpi Chart - Number Comparison',\n category: 'Kpi Charts',\n inputs: [\n dataset,\n measure,\n { ...dimensionTime, name: 'timeProperty', label: 'Time Property' },\n {\n ...genericTimeRange,\n name: 'primaryDateRange',\n label: 'Primary Date Range',\n description: 'You can also connect this to a date range selector using its variable',\n category: 'Component Data',\n },\n {\n name: 'comparisonPeriod',\n type: ComparisonPeriodType,\n label: 'Comparison Period',\n description: 'You can also connect this to a comparison period selector using its variable',\n category: 'Component Data',\n },\n title,\n description,\n {\n ...genericBoolean,\n name: 'displayChangeAsPercentage',\n label: 'Display Change as %',\n defaultValue: false,\n },\n {\n ...genericNumber,\n name: 'percentageDecimalPlaces',\n label: 'Percentage Decimal Places',\n defaultValue: 1,\n },\n {\n ...genericBoolean,\n name: 'reversePositiveNegativeColors',\n label: 'Reverse Positive/Negative Colors',\n defaultValue: false,\n },\n { ...genericNumber, name: 'fontSize', label: 'Font Size', defaultValue: 44, required: true },\n {\n ...genericNumber,\n name: 'changeFontSize',\n label: 'Change Font Size',\n defaultValue: 16,\n required: true,\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\ntype KpiChartNumberComparisonProState = {\n comparisonDateRange: TimeRange;\n};\n\nexport default defineComponent(KpiChartNumberComparisonPro, meta, {\n /* @ts-expect-error - to be fixed in @embeddable.com/react */\n props: (\n inputs: Inputs<typeof meta>,\n [state, setState]: [\n KpiChartNumberComparisonProState,\n (state: KpiChartNumberComparisonProState) => void,\n ],\n ) => {\n return {\n ...inputs,\n comparisonDateRange: state?.comparisonDateRange,\n setComparisonDateRange: (comparisonDateRange: TimeRange) => setState({ comparisonDateRange }),\n results: loadData({\n from: inputs.dataset,\n select: [inputs.measure],\n limit: 1,\n filters:\n inputs.primaryDateRange && inputs.timeProperty\n ? [\n {\n property: inputs.timeProperty,\n operator: 'inDateRange',\n value: inputs.primaryDateRange,\n },\n ]\n : undefined,\n }),\n resultsComparison:\n inputs.primaryDateRange && inputs.timeProperty && state?.comparisonDateRange\n ? loadData({\n from: inputs.dataset,\n select: [inputs.measure],\n limit: 1,\n filters: [\n {\n property: inputs.timeProperty,\n operator: 'inDateRange',\n value: state.comparisonDateRange,\n },\n ],\n })\n : undefined,\n };\n },\n});\n"],"names":["KpiChartNumberComparisonPro","props","theme","useTheme","i18nSetup","title","description","resolveI18nProps","changeFontSize","comparisonPeriod","comparisonDateRange","displayChangeAsPercentage","fontSize","measure","primaryDateRange","results","resultsComparison","reversePositiveNegativeColors","percentageDecimalPlaces","setComparisonDateRange","useEffect","newComparisonDateRange","getComparisonPeriodDateRange","value","_b","_a","comparisonValue","_d","_c","themeFormatter","getThemeFormatter","valueFormatter","valueToFormat","comparisonLabel","getComparisonPeriodLabel","resultsCombined","_e","i18n","_f","jsx","ChartCard","KpiChart","meta","dataset","dimensionTime","genericTimeRange","ComparisonPeriodType","genericBoolean","genericNumber","KpiChartNumberComparisonPro_emb","defineComponent","inputs","state","setState","loadData"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { useTheme as h, defineComponent as f } from "@embeddable.com/react";
2
- import { i as C, r as b, j as m, d as K, w as g, t as x, c as F, Z as N, o as S } from "./component.constants-B1QqUi2G.js";
3
- import { C as j } from "./ChartCard-CACbKXZ7.js";
2
+ import { i as C, r as b, j as m, d as K, w as g, t as x, c as F, Z as N, o as S } from "./component.constants-BtSbiLSA.js";
3
+ import { C as j } from "./ChartCard-BMfUGlQC.js";
4
4
  import "react";
5
- import { K as v } from "./KpiChart-C-SmtMQp.js";
6
- import { g as z } from "./formatter.utils-B3HZzPUm.js";
5
+ import { K as v } from "./KpiChart-CqS9-4MK.js";
6
+ import { g as z } from "./formatter.utils-DsSqaQLy.js";
7
7
  const P = (e) => {
8
8
  var s, o;
9
9
  const a = h();
@@ -1,14 +1,14 @@
1
1
  import { useTheme as Y, defineComponent as _ } from "@embeddable.com/react";
2
- import { m as E, E as G, C as w, U, _ as I, $ as O, i as q, r as z, j as V, a0 as K, d as J, a as S, Y as A, a1 as B, z as W, X as H, W as Q, t as Z, c as ee, s as ae, e as se, f as ne, g as te, x as oe, y as ie, p as re, q as le, u as me, V as de, o as F } from "./component.constants-B1QqUi2G.js";
3
- import { C as ce } from "./ChartCard-CACbKXZ7.js";
2
+ import { m as E, E as G, C as w, U, _ as I, $ as O, i as q, r as z, j as V, a0 as K, d as J, a as S, Y as A, a1 as B, z as W, X as H, W as Q, t as Z, c as ee, s as ae, e as se, f as ne, g as te, x as oe, y as ie, p as re, q as le, u as me, V as de, o as F } from "./component.constants-BtSbiLSA.js";
3
+ import { C as ce } from "./ChartCard-BMfUGlQC.js";
4
4
  import { useEffect as pe } from "react";
5
- import { g as ue } from "./timeRange.utils-C0iy3N-l.js";
6
- import { g as M } from "./formatter.utils-B3HZzPUm.js";
5
+ import { g as ue } from "./timeRange.utils-CWIlCcfG.js";
6
+ import { g as M } from "./formatter.utils-DsSqaQLy.js";
7
7
  import { g as ge, a as he } from "./object.utils-BNKDL7Y9.js";
8
8
  import { i as be, s as xe } from "./color.utils-CVyp-fGP.js";
9
9
  import { g as Ce } from "./lines.utils-CFEUUo4k.js";
10
10
  import { u as N } from "./charts.newFillGaps.hooks-8oF8pYjr.js";
11
- import { C as fe } from "./ComparisonPeriod.type.emb-Q_A2MmQY.js";
11
+ import { C as fe } from "./ComparisonPeriod.type.emb-9nwxR9Tl.js";
12
12
  const P = "mainAxis", k = "comparisonAxis", $ = (a, t) => {
13
13
  var v, R, x, g;
14
14
  const { data: n, measure: o, dimension: s, index: c, isPreviousPeriod: r, hasMinMaxYAxisRange: b, labels: e } = a, p = n == null ? void 0 : n.map((C) => C[s.name]), l = !!((v = o.inputs) != null && v.connectGaps), u = e ? e.map((C) => {
@@ -1,7 +1,7 @@
1
1
  import { useTheme as v, defineComponent as w } from "@embeddable.com/react";
2
- import { E as f, C as g, m as F, i as P, r as R, j as A, a0 as B, d as j, a as k, Y as x, a1 as O, b as S, t as T, c as I, s as $, e as G, f as X, g as Y, x as E, y as K, p as N, q as U, u as _, V as q, o as z } from "./component.constants-B1QqUi2G.js";
3
- import { C as W } from "./ChartCard-CACbKXZ7.js";
4
- import { g as V } from "./formatter.utils-B3HZzPUm.js";
2
+ import { E as f, C as g, m as F, i as P, r as R, j as A, a0 as B, d as j, a as k, Y as x, a1 as O, b as S, t as T, c as I, s as $, e as G, f as X, g as Y, x as E, y as K, p as N, q as U, u as _, V as q, o as z } from "./component.constants-BtSbiLSA.js";
3
+ import { C as W } from "./ChartCard-BMfUGlQC.js";
4
+ import { g as V } from "./formatter.utils-DsSqaQLy.js";
5
5
  import { g as H, a as y } from "./object.utils-BNKDL7Y9.js";
6
6
  import "react";
7
7
  import { i as D, s as J } from "./color.utils-CVyp-fGP.js";
@@ -1,7 +1,7 @@
1
1
  import { useTheme as R, defineComponent as P } from "@embeddable.com/react";
2
- import { E as k, C as $, m as F, i as S, r as v, j as y, a0 as B, d as j, w, Y as V, b as O, z as T, t as X, c as Y, A as E, s as K, e as N, f as U, g as q, x as z, y as W, p as _, q as H, u as J, V as D, o as Q } from "./component.constants-B1QqUi2G.js";
3
- import { C as Z } from "./ChartCard-CACbKXZ7.js";
4
- import { g as M } from "./formatter.utils-B3HZzPUm.js";
2
+ import { E as k, C as $, m as F, i as S, r as v, j as y, a0 as B, d as j, w, Y as V, b as O, z as T, t as X, c as Y, A as E, s as K, e as N, f as U, g as q, x as z, y as W, p as _, q as H, u as J, V as D, o as Q } from "./component.constants-BtSbiLSA.js";
3
+ import { C as Z } from "./ChartCard-BMfUGlQC.js";
4
+ import { g as M } from "./formatter.utils-DsSqaQLy.js";
5
5
  import { g as I, a as G } from "./object.utils-BNKDL7Y9.js";
6
6
  import { s as ee } from "./color.utils-CVyp-fGP.js";
7
7
  import "react";
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
- import { d as r, z as s, t as d, c as u, a5 as m, V as t, o as c } from "./component.constants-B1QqUi2G.js";
3
- import { M as p, a as f } from "./index-BcXLOYYi.js";
2
+ import { d as r, z as s, t as d, c as u, a5 as m, V as t, o as c } from "./component.constants-BtSbiLSA.js";
3
+ import { M as p, a as f } from "./index-0EU9wBvd.js";
4
4
  const g = {
5
5
  name: "MultiSelectFieldPro",
6
6
  label: "Multi Select Field",
@@ -1,6 +1,6 @@
1
- import { d as a, w as s, z as t, t as o, c as n, s as i, a3 as r, e as m, f as l, V as d, o as c } from "./component.constants-B1QqUi2G.js";
1
+ import { d as a, w as s, z as t, t as o, c as n, s as i, a3 as r, e as m, f as l, V as d, o as c } from "./component.constants-BtSbiLSA.js";
2
2
  import { defineComponent as p } from "@embeddable.com/react";
3
- import { P as u } from "./index-SdQVlaEz.js";
3
+ import { P as u } from "./index-CVNg2zPD.js";
4
4
  const C = {
5
5
  name: "PieChartPro",
6
6
  label: "Pie Chart",
@@ -0,0 +1,96 @@
1
+ import { j as s, ae as D, ah as N, ai as k, af as F, ag as w, ad as B } from "./component.constants-BtSbiLSA.js";
2
+ import { useState as d, useRef as K, useEffect as P, useMemo as T } from "react";
3
+ import { u as q, d as z, I as A, S as G } from "./EditorCard-tBhUO9qV.js";
4
+ const H = "_selectField_73cni_1", J = {
5
+ selectField: H
6
+ }, V = ({
7
+ value: t = "",
8
+ startIcon: g,
9
+ options: a,
10
+ disabled: o,
11
+ placeholder: p,
12
+ isSearchable: f,
13
+ isClearable: C,
14
+ isLoading: u,
15
+ noOptionsMessage: S = "No options available",
16
+ onChange: v,
17
+ onSearch: l,
18
+ error: L = !1,
19
+ errorMessage: i
20
+ }) => {
21
+ const [x, O] = d(!1), [m, b] = d(""), [y, c] = d(t), h = K(null);
22
+ q(x, h), P(() => {
23
+ if (!t) {
24
+ c("");
25
+ return;
26
+ }
27
+ const e = a.find((r) => r.value === t);
28
+ e && c(e.label);
29
+ }, [t, a]);
30
+ const n = T(() => l ? z(l) : void 0, [l]), E = f && !l ? a.filter((e) => e.label.toLowerCase().includes(m.toLowerCase())) : a, j = (e) => {
31
+ if (b(""), v(e ?? ""), l == null || l(""), e === "")
32
+ c("");
33
+ else {
34
+ const r = a.find((_) => _.value === e);
35
+ r && c(r.label);
36
+ }
37
+ }, I = (e) => {
38
+ b(e), n == null || n(e);
39
+ }, R = L || !!i;
40
+ return /* @__PURE__ */ s.jsxs("div", { className: J.selectField, children: [
41
+ /* @__PURE__ */ s.jsx(
42
+ D,
43
+ {
44
+ open: x,
45
+ onOpenChange: O,
46
+ disabled: o,
47
+ triggerComponent: /* @__PURE__ */ s.jsx(
48
+ w,
49
+ {
50
+ startIcon: g,
51
+ "aria-label": "Select option",
52
+ placeholder: p,
53
+ disabled: o,
54
+ valueLabel: y,
55
+ onClear: () => j(""),
56
+ isClearable: C,
57
+ isLoading: u,
58
+ error: R
59
+ }
60
+ ),
61
+ children: /* @__PURE__ */ s.jsxs(N, { children: [
62
+ f && /* @__PURE__ */ s.jsx(
63
+ k,
64
+ {
65
+ ref: h,
66
+ startIcon: A,
67
+ "aria-label": "Search options",
68
+ placeholder: "Search…",
69
+ role: "searchbox",
70
+ value: m,
71
+ onKeyDown: (e) => e.stopPropagation(),
72
+ onChange: I
73
+ }
74
+ ),
75
+ /* @__PURE__ */ s.jsxs(G, { disabled: u, children: [
76
+ E.map((e) => /* @__PURE__ */ s.jsx(
77
+ F,
78
+ {
79
+ onClick: () => j(e == null ? void 0 : e.value),
80
+ isSelected: e.value === t,
81
+ ...e
82
+ },
83
+ (e == null ? void 0 : e.value) ?? e.label
84
+ )),
85
+ a.length === 0 && /* @__PURE__ */ s.jsx(F, { disabled: !0, value: "empty", label: S })
86
+ ] })
87
+ ] })
88
+ }
89
+ ),
90
+ i && /* @__PURE__ */ s.jsx(B, { message: i })
91
+ ] });
92
+ };
93
+ export {
94
+ V as S
95
+ };
96
+ //# sourceMappingURL=SingleSelectField-BwQahxL2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleSelectField-BwQahxL2.js","sources":["../src/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport {\n SelectListOption,\n SelectListOptionProps,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport styles from './SingleSelectField.module.css';\nimport { FieldErrorMessage } from '../../../shared/FieldErrorMessage/FieldErrorMessage';\n\nexport type SingleSelectFieldProps = {\n options: SelectListOptionProps[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n isSearchable?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n};\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n isSearchable,\n isClearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div className={styles.selectField}>\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectList>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n />\n )}\n <SelectListOptions disabled={isLoading}>\n {displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectListOptions>\n </SelectList>\n </Dropdown>\n {errorMessage && <FieldErrorMessage message={errorMessage} />}\n </div>\n );\n};\n"],"names":["SingleSelectField","value","startIcon","options","disabled","placeholder","isSearchable","isClearable","isLoading","noOptionsMessage","onChange","onSearch","error","errorMessage","isOpen","setIsOpen","useState","searchValue","setSearchValue","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","option","opt","debouncedSearch","useMemo","debounce","displayOptions","handleChange","newValue","handleSearch","newSearch","hasError","jsxs","styles","jsx","Dropdown","SelectButton","SelectList","TextField","IconSearch","SelectListOptions","SelectListOption","FieldErrorMessage"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
- import { d as s, z as r, t as d, c as m, a5 as c, V as n, o as u } from "./component.constants-B1QqUi2G.js";
3
- import { M as p, S as g } from "./index-Dye21BCa.js";
2
+ import { d as s, z as r, t as d, c as m, a5 as c, V as n, o as u } from "./component.constants-BtSbiLSA.js";
3
+ import { M as p, S as g } from "./index-CuyqPNAk.js";
4
4
  const f = {
5
5
  name: "SingleSelectFieldPro",
6
6
  label: "Single Select Field",
@@ -1,7 +1,7 @@
1
- import { C as $, m as C, D as I, E as h, F as x, G as B, H as T, I as S, L as R, J as V, K as j, M as F, N, O as P, P as z, j as f, Q as M, R as _, S as H, T as L } from "./component.constants-B1QqUi2G.js";
1
+ import { C as $, m as C, D as I, E as h, F as x, G as B, H as T, I as S, L as R, J as V, K as j, M as F, N, O as P, P as z, j as f, Q as M, R as _, S as H, T as L } from "./component.constants-BtSbiLSA.js";
2
2
  import { useRef as K } from "react";
3
- import { r as E, g as G } from "./charts.utils-CQtEx-IN.js";
4
- import { g as y } from "./formatter.utils-B3HZzPUm.js";
3
+ import { r as E, g as G } from "./charts.utils-CtjnpTZZ.js";
4
+ import { g as y } from "./formatter.utils-DsSqaQLy.js";
5
5
  import { g as w, a as p } from "./object.utils-BNKDL7Y9.js";
6
6
  const J = (a) => {
7
7
  var t;
@@ -308,4 +308,4 @@ export {
308
308
  la as b,
309
309
  oa as g
310
310
  };
311
- //# sourceMappingURL=bars.utils-BaxcPPid.js.map
311
+ //# sourceMappingURL=bars.utils-BS6hyz6a.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bars.utils-BaxcPPid.js","sources":["../src/remarkable-ui/charts/bars/bars.utils.ts","../src/remarkable-ui/charts/bars/BarChart.tsx","../src/remarkable-pro/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { ChartData, ChartOptions } from 'chart.js';\nimport { chartContrastColors } from '../charts.constants';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseXAxis,\n },\n y: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-chart-style-border-radius-default'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(chartjsAxisOptions, baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { groupTailAsOther } from '../charts.utils';\nimport { getColor } from '../../../theme/styles/styles.utils';\nimport { chartColors } from '../../../../remarkable-ui';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\nimport { chartContrastColors } from '../../../../remarkable-ui/charts/charts.constants';\nimport { Context } from 'chartjs-plugin-datalabels';\n\nexport const getBarStackedChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n },\n theme: Theme,\n): ChartData<'bar'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter(Boolean))].sort();\n const groupDimensionName = `${groupDimension.name}${groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter(Boolean);\n\n const themeKey = getObjectStableKey(theme);\n\n const datasets = groupBy.map((groupByItem, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n return {\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor,\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimensionName] === groupByItem && d[dimension.name] === axisItem,\n );\n return record ? Number(record[measure.name]) : 0;\n }),\n };\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getBarChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n maxItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'bar'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n const themeKey = getObjectStableKey(theme);\n const groupedData = groupTailAsOther(props.data, props.dimension, props.measures, props.maxItems);\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n measure.name,\n theme.charts.backgroundColors ?? chartColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n measure.name,\n theme.charts.borderColors ?? chartColors,\n index,\n );\n\n return {\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: groupedData.map((item) => item[measure.name] ?? 0),\n backgroundColor,\n borderColor,\n };\n }),\n };\n};\n\nconst getBarChartProDatalabelTotalFormatter = (\n context: Context,\n formatter: (value: number) => string,\n) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return formatter(total);\n};\n\nexport const getBarChartProOptions = (\n options: {\n onBarClicked: (args: {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n }) => void;\n measures: Measure[];\n dimension: Dimension;\n horizontal: boolean;\n data: ChartData<'bar'>;\n },\n theme: Theme,\n): Partial<ChartOptions<'bar'>> => {\n const { onBarClicked, measures, dimension, horizontal, data } = options;\n\n const themeFormatter = getThemeFormatter(theme);\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n labels: {\n total: {\n formatter: (_value: string | number, context: Context) =>\n getBarChartProDatalabelTotalFormatter(context, (value: number) =>\n themeFormatter.data(measures[0]!, value),\n ),\n },\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n label: (context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n const raw = context.raw as number;\n return `${themeFormatter.data(dimension, context.dataset.label) || ''}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n if (!horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n if (!data || !data.labels) return undefined;\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n const element = elements[0];\n const axisDimensionValue = (element ? chart.data.labels![element.index] : null) as\n | string\n | null;\n const groupingDimensionValue = (\n element\n ? (chart.data.datasets[element.datasetIndex] as { rawLabel?: string | null })?.rawLabel\n : null\n ) as string | null;\n\n onBarClicked({\n axisDimensionValue,\n groupingDimensionValue,\n });\n },\n };\n};\n"],"names":["getBarChartData","data","_a","dataset","index","colors","chartContrastColors","defaultDataset","mergician","getDatalabelTotalDisplay","context","showTotalLabels","getDatalabelTotalFormatter","_value","datasets","i","total","sum","ds","val","getBarVerticalChartOptions","config","chartjsAxisOptionsLayoutPadding","getStyle","getBarHorizontalChartOptions","getBarChartOptions","options","baseBarChartOptions","getStyleNumber","verticalHorizontalOptions","chartjsAxisOptions","ChartJS","CategoryScale","LinearScale","BarElement","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","BarChart","onSegmentClick","props","chartRef","useRef","barChartOptions","handleSegmentClick","event","indexClicked","getSegmentIndexClicked","jsx","styles","Bar","getBarStackedChartProData","theme","themeFormatter","getThemeFormatter","dimension","groupDimension","measure","axis","d","groupDimensionName","groupBy","themeKey","getObjectStableKey","groupByItem","backgroundColor","getColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","item","chartColors","getBarChartProDatalabelTotalFormatter","formatter","getBarChartProOptions","onBarClicked","measures","horizontal","value","label","raw","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":"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"}
1
+ {"version":3,"file":"bars.utils-BS6hyz6a.js","sources":["../src/remarkable-ui/charts/bars/bars.utils.ts","../src/remarkable-ui/charts/bars/BarChart.tsx","../src/remarkable-pro/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { ChartData, ChartOptions } from 'chart.js';\nimport { chartContrastColors } from '../charts.constants';\nimport { getStyle, getStyleNumber } from '../../styles/styles.utils';\nimport { mergician } from 'mergician';\nimport { BarChartConfigurationProps, BarChartHorizontalConfigurationProps } from './bars.types';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport {\n chartjsAxisOptions,\n chartjsAxisOptionsLayoutPadding,\n} from '../chartjs.cartesian.constants';\n\nexport const getBarChartData = (data: ChartData<'bar'>): ChartData<'bar'> => {\n return {\n ...data,\n datasets: data.datasets?.map((dataset, index) => {\n const colors = chartContrastColors[index % chartContrastColors.length];\n const defaultDataset = {\n ...dataset,\n backgroundColor: colors,\n borderColor: colors,\n };\n\n return mergician(defaultDataset, dataset) as typeof dataset;\n }),\n };\n};\n\nconst getDatalabelTotalDisplay = (context: Context, showTotalLabels: boolean | undefined) =>\n showTotalLabels && context.datasetIndex === context.chart.data.datasets.length - 1\n ? 'auto'\n : false;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDatalabelTotalFormatter = (_value: any, context: Context) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return total > 0 ? total : '';\n};\n\nconst getBarVerticalChartOptions = (\n config: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'x',\n layout: {\n padding: {\n top: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'top' : 'bottom';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseXAxis,\n },\n y: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.yAxisRangeMin,\n max: config.yAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n },\n };\n};\n\nconst getBarHorizontalChartOptions = (\n config: BarChartHorizontalConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n return {\n indexAxis: 'y',\n layout: {\n padding: {\n right: (config.stacked ? config.showTotalLabels : config.showValueLabels)\n ? chartjsAxisOptionsLayoutPadding\n : 0,\n },\n },\n plugins: {\n datalabels: {\n labels: {\n total: {\n align: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n value: {\n align: (context) => {\n if (config.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'right' : 'left';\n },\n },\n },\n },\n },\n scales: {\n x: {\n grid: { display: true },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-muted'),\n },\n min: config.xAxisRangeMin,\n max: config.xAxisRangeMax,\n type: config.showLogarithmicScale ? 'logarithmic' : 'linear',\n },\n y: {\n grid: { display: false },\n ticks: {\n color: getStyle('--em-chart-grid-font-color-default'),\n },\n reverse: config.reverseYAxis,\n },\n },\n };\n};\n\nexport const getBarChartOptions = (\n options: BarChartConfigurationProps,\n): Partial<ChartOptions<'bar'>> => {\n const baseBarChartOptions: Partial<ChartOptions<'bar'>> = {\n elements: {\n bar: {\n borderRadius: getStyleNumber('--em-chart-style-border-radius-default'),\n },\n },\n plugins: {\n legend: { display: options.showLegend },\n tooltip: {\n enabled: options.showTooltips,\n },\n datalabels: {\n display: (context) => {\n return options.showValueLabels && context.dataset.data[context.dataIndex] !== 0\n ? 'auto'\n : false;\n },\n labels: {\n total: {\n display: (context) => getDatalabelTotalDisplay(context, options.showTotalLabels),\n formatter: getDatalabelTotalFormatter,\n anchor: (context) => {\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n value: {\n anchor: (context) => {\n if (options.stacked) {\n return 'center';\n }\n const value = context.dataset.data[context.dataIndex] as number;\n return value >= 0 ? 'end' : 'start';\n },\n },\n },\n },\n },\n scales: {\n x: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.xAxisLabel),\n text: options.xAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n y: {\n stacked: Boolean(options.stacked),\n title: {\n display: Boolean(options.yAxisLabel),\n text: options.yAxisLabel ?? '',\n },\n ticks: { display: true },\n },\n },\n };\n\n const getVerticalHorizontalOptions = options.horizontal\n ? getBarHorizontalChartOptions\n : getBarVerticalChartOptions;\n\n const verticalHorizontalOptions = getVerticalHorizontalOptions(options);\n\n return mergician(chartjsAxisOptions, baseBarChartOptions, verticalHorizontalOptions);\n};\n","import { FC, useRef } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n LogarithmicScale,\n} from 'chart.js';\nimport { BaseBarChartProps } from './bars.types';\nimport { getSegmentIndexClicked } from '../chartjs.utils';\nimport { getBarChartData, getBarChartOptions } from './bars.utils';\nimport styles from '../charts.module.css';\nimport { mergician } from 'mergician';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n LogarithmicScale,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels,\n);\n\nexport type BarChartProps = BaseBarChartProps;\n\nexport const BarChart: FC<BarChartProps> = ({ data, onSegmentClick, options = {}, ...props }) => {\n const chartRef = useRef(null);\n\n const barChartOptions = mergician(getBarChartOptions(props), options);\n\n const handleSegmentClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const indexClicked = getSegmentIndexClicked(event, chartRef);\n onSegmentClick?.(indexClicked);\n };\n\n return (\n <div className={styles.chartContainer}>\n <Bar\n ref={chartRef}\n data={getBarChartData(data)}\n options={barChartOptions}\n onClick={handleSegmentClick}\n />\n </div>\n );\n};\n","import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { groupTailAsOther } from '../charts.utils';\nimport { getColor } from '../../../theme/styles/styles.utils';\nimport { chartColors } from '../../../../remarkable-ui';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\nimport { chartContrastColors } from '../../../../remarkable-ui/charts/charts.constants';\nimport { Context } from 'chartjs-plugin-datalabels';\n\nexport const getBarStackedChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n },\n theme: Theme,\n): ChartData<'bar'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter(Boolean))].sort();\n const groupDimensionName = `${groupDimension.name}${groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter(Boolean);\n\n const themeKey = getObjectStableKey(theme);\n\n const datasets = groupBy.map((groupByItem, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n return {\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor,\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimensionName] === groupByItem && d[dimension.name] === axisItem,\n );\n return record ? Number(record[measure.name]) : 0;\n }),\n };\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getBarChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n maxItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'bar'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n const themeKey = getObjectStableKey(theme);\n const groupedData = groupTailAsOther(props.data, props.dimension, props.measures, props.maxItems);\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n measure.name,\n theme.charts.backgroundColors ?? chartColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n measure.name,\n theme.charts.borderColors ?? chartColors,\n index,\n );\n\n return {\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: groupedData.map((item) => item[measure.name] ?? 0),\n backgroundColor,\n borderColor,\n };\n }),\n };\n};\n\nconst getBarChartProDatalabelTotalFormatter = (\n context: Context,\n formatter: (value: number) => string,\n) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return formatter(total);\n};\n\nexport const getBarChartProOptions = (\n options: {\n onBarClicked: (args: {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n }) => void;\n measures: Measure[];\n dimension: Dimension;\n horizontal: boolean;\n data: ChartData<'bar'>;\n },\n theme: Theme,\n): Partial<ChartOptions<'bar'>> => {\n const { onBarClicked, measures, dimension, horizontal, data } = options;\n\n const themeFormatter = getThemeFormatter(theme);\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n labels: {\n total: {\n formatter: (_value: string | number, context: Context) =>\n getBarChartProDatalabelTotalFormatter(context, (value: number) =>\n themeFormatter.data(measures[0]!, value),\n ),\n },\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n label: (context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n const raw = context.raw as number;\n return `${themeFormatter.data(dimension, context.dataset.label) || ''}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n if (!horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n if (!data || !data.labels) return undefined;\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n const element = elements[0];\n const axisDimensionValue = (element ? chart.data.labels![element.index] : null) as\n | string\n | null;\n const groupingDimensionValue = (\n element\n ? (chart.data.datasets[element.datasetIndex] as { rawLabel?: string | null })?.rawLabel\n : null\n ) as string | null;\n\n onBarClicked({\n axisDimensionValue,\n groupingDimensionValue,\n });\n },\n };\n};\n"],"names":["getBarChartData","data","_a","dataset","index","colors","chartContrastColors","defaultDataset","mergician","getDatalabelTotalDisplay","context","showTotalLabels","getDatalabelTotalFormatter","_value","datasets","i","total","sum","ds","val","getBarVerticalChartOptions","config","chartjsAxisOptionsLayoutPadding","getStyle","getBarHorizontalChartOptions","getBarChartOptions","options","baseBarChartOptions","getStyleNumber","verticalHorizontalOptions","chartjsAxisOptions","ChartJS","CategoryScale","LinearScale","BarElement","LogarithmicScale","Title","Tooltip","Legend","ChartDataLabels","BarChart","onSegmentClick","props","chartRef","useRef","barChartOptions","handleSegmentClick","event","indexClicked","getSegmentIndexClicked","jsx","styles","Bar","getBarStackedChartProData","theme","themeFormatter","getThemeFormatter","dimension","groupDimension","measure","axis","d","groupDimensionName","groupBy","themeKey","getObjectStableKey","groupByItem","backgroundColor","getColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","item","chartColors","getBarChartProDatalabelTotalFormatter","formatter","getBarChartProOptions","onBarClicked","measures","horizontal","value","label","raw","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { i as ii, aA as fo, U as un } from "./component.constants-B1QqUi2G.js";
1
+ import { i as ii, aB as fo, U as un } from "./component.constants-BtSbiLSA.js";
2
2
  import { g as oi, d as Ee, u as si } from "./utc-B2gCnkBk.js";
3
- import { g as lo } from "./formatter.utils-B3HZzPUm.js";
3
+ import { g as lo } from "./formatter.utils-DsSqaQLy.js";
4
4
  import { i as fi } from "./object.utils-BNKDL7Y9.js";
5
5
  const co = {
6
6
  "--em-gray-0": "rgb(255 255 255)",
@@ -17354,4 +17354,4 @@ export {
17354
17354
  Kd as r,
17355
17355
  vo as s
17356
17356
  };
17357
- //# sourceMappingURL=charts.utils-CQtEx-IN.js.map
17357
+ //# sourceMappingURL=charts.utils-CtjnpTZZ.js.map