@embeddable.com/remarkable-pro 0.0.18 → 0.0.20

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 (142) hide show
  1. package/dist/BarChartDefaultHorizontalPro.js +4 -4
  2. package/dist/BarChartDefaultHorizontalPro.js.map +1 -1
  3. package/dist/BarChartDefaultPro.js +4 -4
  4. package/dist/BarChartDefaultPro.js.map +1 -1
  5. package/dist/BarChartGroupedHorizontalPro.js +7 -7
  6. package/dist/BarChartGroupedHorizontalPro.js.map +1 -1
  7. package/dist/BarChartGroupedPro.js +7 -7
  8. package/dist/BarChartGroupedPro.js.map +1 -1
  9. package/dist/BarChartStackedHorizontalPro.js +5 -5
  10. package/dist/BarChartStackedHorizontalPro.js.map +1 -1
  11. package/dist/BarChartStackedPro.js +5 -5
  12. package/dist/BarChartStackedPro.js.map +1 -1
  13. package/dist/{ChartCard-DWm_d8Zt.js → ChartCard-B5IaBBTs.js} +27 -27
  14. package/dist/ChartCard-B5IaBBTs.js.map +1 -0
  15. package/dist/{Color.type.emb-BKd2NgB4.js → Color.type.emb-C4VcPjfM.js} +83 -82
  16. package/dist/Color.type.emb-C4VcPjfM.js.map +1 -0
  17. package/dist/ColorEditor.js +4 -4
  18. package/dist/ColorEditor.js.map +1 -1
  19. package/dist/ComparisonPeriodSelectFieldPro.js +7 -7
  20. package/dist/ComparisonPeriodSelectFieldPro.js.map +1 -1
  21. package/dist/DateRangePickerCustomPro.js +18 -18
  22. package/dist/DateRangePickerCustomPro.js.map +1 -1
  23. package/dist/DateRangeSelectFieldPro.js +6 -6
  24. package/dist/DateRangeSelectFieldPro.js.map +1 -1
  25. package/dist/DonutChartPro.js +4 -4
  26. package/dist/DonutChartPro.js.map +1 -1
  27. package/dist/DonutLabelChartPro.js +6 -6
  28. package/dist/DonutLabelChartPro.js.map +1 -1
  29. package/dist/{EditorCard-DjnvkPrk.js → EditorCard-CcsUaHcd.js} +5 -5
  30. package/dist/{EditorCard-DjnvkPrk.js.map → EditorCard-CcsUaHcd.js.map} +1 -1
  31. package/dist/GranularitySelectFieldPro.js +169 -0
  32. package/dist/GranularitySelectFieldPro.js.map +1 -0
  33. package/dist/HeatMapPro.js +5 -5
  34. package/dist/HeatMapPro.js.map +1 -1
  35. package/dist/KpiChartNumberComparisonPro.js +9 -10
  36. package/dist/KpiChartNumberComparisonPro.js.map +1 -1
  37. package/dist/KpiChartNumberPro.js +3 -3
  38. package/dist/LineChartComparisonDefaultPro.js +5 -5
  39. package/dist/LineChartComparisonDefaultPro.js.map +1 -1
  40. package/dist/LineChartDefaultPro.js +4 -4
  41. package/dist/LineChartDefaultPro.js.map +1 -1
  42. package/dist/LineChartGroupedPro.js +5 -5
  43. package/dist/LineChartGroupedPro.js.map +1 -1
  44. package/dist/MultiSelectFieldPro.js +8 -8
  45. package/dist/MultiSelectFieldPro.js.map +1 -1
  46. package/dist/PieChartPro.js +4 -4
  47. package/dist/PieChartPro.js.map +1 -1
  48. package/dist/PivotTablePro.js +13 -13
  49. package/dist/PivotTablePro.js.map +1 -1
  50. package/dist/SingleSelectFieldPro.js +6 -6
  51. package/dist/SingleSelectFieldPro.js.map +1 -1
  52. package/dist/TableChartPaginated.js +8 -8
  53. package/dist/TableChartPaginated.js.map +1 -1
  54. package/dist/TableScrollable.js +36 -36
  55. package/dist/TableScrollable.js.map +1 -1
  56. package/dist/{bars.utils-UMmKPcFA.js → bars.utils-Ck1w7NOo.js} +35 -35
  57. package/dist/bars.utils-Ck1w7NOo.js.map +1 -0
  58. package/dist/charts.fillGaps.hooks-C7KsWcZb.js +67 -0
  59. package/dist/charts.fillGaps.hooks-C7KsWcZb.js.map +1 -0
  60. package/dist/{charts.utils-CczkrS7C.js → charts.utils-g6NE_Jo3.js} +338 -318
  61. package/dist/charts.utils-g6NE_Jo3.js.map +1 -0
  62. package/dist/{component.inputs.constants-DvrG0Pd4.js → component.inputs.constants-DN1efWXx.js} +271 -252
  63. package/dist/component.inputs.constants-DN1efWXx.js.map +1 -0
  64. package/dist/components/charts/bars/bars.utils.d.ts.map +1 -1
  65. package/dist/components/charts/charts.fillGaps.hooks.d.ts.map +1 -1
  66. package/dist/components/component.inputs.constants.d.ts +33 -22
  67. package/dist/components/component.inputs.constants.d.ts.map +1 -1
  68. package/dist/components/component.subinputs.constants.d.ts +2 -2
  69. package/dist/components/editors/GranularitySelectFieldPro/GranularitySelectFieldPro.utils.d.ts +14 -0
  70. package/dist/components/editors/GranularitySelectFieldPro/GranularitySelectFieldPro.utils.d.ts.map +1 -0
  71. package/dist/components/editors/GranularitySelectFieldPro/index.d.ts +14 -0
  72. package/dist/components/editors/GranularitySelectFieldPro/index.d.ts.map +1 -0
  73. package/dist/embeddable-components.json +17 -15
  74. package/dist/embeddable-theme-0137e.js +226 -198
  75. package/dist/embeddable-types-fa6d0.js +1 -1
  76. package/dist/embeddable-types.js.map +1 -1
  77. package/dist/{formatter.utils-DhYAAdix.js → formatter.utils-pzrkapRL.js} +2 -2
  78. package/dist/{formatter.utils-DhYAAdix.js.map → formatter.utils-pzrkapRL.js.map} +1 -1
  79. package/dist/{index-CNfKPgoS.js → index-1mMgdK6h.js} +5 -5
  80. package/dist/{index-CNfKPgoS.js.map → index-1mMgdK6h.js.map} +1 -1
  81. package/dist/{index-Ch8RmqGo.js → index-4mTCN1nI.js} +6 -6
  82. package/dist/{index-Ch8RmqGo.js.map → index-4mTCN1nI.js.map} +1 -1
  83. package/dist/{index-B67vIicG.js → index-53w_cRnE.js} +5 -5
  84. package/dist/{index-B67vIicG.js.map → index-53w_cRnE.js.map} +1 -1
  85. package/dist/{index-DTQefWw3.js → index-7Vgn0Xsn.js} +6 -6
  86. package/dist/{index-DTQefWw3.js.map → index-7Vgn0Xsn.js.map} +1 -1
  87. package/dist/{index-B8nyN_rk.js → index-B6z6eyJE.js} +5 -5
  88. package/dist/{index-B8nyN_rk.js.map → index-B6z6eyJE.js.map} +1 -1
  89. package/dist/{index-BWXo1H8L.js → index-BEYR5f2d.js} +6 -6
  90. package/dist/{index-BWXo1H8L.js.map → index-BEYR5f2d.js.map} +1 -1
  91. package/dist/{index-CrwZXvMM.js → index-BUWTt_8s.js} +6 -6
  92. package/dist/{index-CrwZXvMM.js.map → index-BUWTt_8s.js.map} +1 -1
  93. package/dist/{index-0v8ZD5Px.js → index-BjuvAqGb.js} +6 -6
  94. package/dist/index-BjuvAqGb.js.map +1 -0
  95. package/dist/{index-BtDrBn-k.js → index-Brl5KgVS.js} +6 -6
  96. package/dist/{index-BtDrBn-k.js.map → index-Brl5KgVS.js.map} +1 -1
  97. package/dist/{index-CKp5i6mg.js → index-C_ExmNre.js} +6 -6
  98. package/dist/{index-CKp5i6mg.js.map → index-C_ExmNre.js.map} +1 -1
  99. package/dist/{index-DER6yAdV.js → index-Cdu6WHsa.js} +5 -5
  100. package/dist/{index-DER6yAdV.js.map → index-Cdu6WHsa.js.map} +1 -1
  101. package/dist/{index-B50xzMzX.js → index-Cr68Ha2O.js} +6 -6
  102. package/dist/{index-B50xzMzX.js.map → index-Cr68Ha2O.js.map} +1 -1
  103. package/dist/{index-BkRLZw0F.js → index-DCVqVqS5.js} +6 -6
  104. package/dist/{index-BkRLZw0F.js.map → index-DCVqVqS5.js.map} +1 -1
  105. package/dist/{index-Ym6OQLII.js → index-DG77FUkS.js} +5 -5
  106. package/dist/{index-Ym6OQLII.js.map → index-DG77FUkS.js.map} +1 -1
  107. package/dist/{index-Bp0gl65w.js → index-DHYMtecu.js} +6 -6
  108. package/dist/{index-Bp0gl65w.js.map → index-DHYMtecu.js.map} +1 -1
  109. package/dist/{index-ClD6BYE7.js → index-DXVl7yqM.js} +6 -6
  110. package/dist/{index-ClD6BYE7.js.map → index-DXVl7yqM.js.map} +1 -1
  111. package/dist/{index-CAgVPB3g.js → index-DXkwaXvx.js} +7 -7
  112. package/dist/{index-CAgVPB3g.js.map → index-DXkwaXvx.js.map} +1 -1
  113. package/dist/{index-BIwjj2og.js → index-Dy4jGo4x.js} +6 -6
  114. package/dist/{index-BIwjj2og.js.map → index-Dy4jGo4x.js.map} +1 -1
  115. package/dist/{index-BVukmtai.js → index-JiDnk-OU.js} +5 -5
  116. package/dist/{index-BVukmtai.js.map → index-JiDnk-OU.js.map} +1 -1
  117. package/dist/{index-BAmKVmpn.js → index-T15Mxwpw.js} +6 -6
  118. package/dist/{index-BAmKVmpn.js.map → index-T15Mxwpw.js.map} +1 -1
  119. package/dist/{index-CChmPG5w.js → index-t3j3ZF8E.js} +5 -5
  120. package/dist/{index-CChmPG5w.js.map → index-t3j3ZF8E.js.map} +1 -1
  121. package/dist/index.d.ts +3 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +83 -83
  124. package/dist/{pies.utils-CBGxudxq.js → pies.utils-dB2uJu3l.js} +5 -5
  125. package/dist/{pies.utils-CBGxudxq.js.map → pies.utils-dB2uJu3l.js.map} +1 -1
  126. package/dist/{tables.utils-CQdtEdns.js → tables.utils-B8IT-c8T.js} +4 -4
  127. package/dist/{tables.utils-CQdtEdns.js.map → tables.utils-B8IT-c8T.js.map} +1 -1
  128. package/dist/theme/defaults/defaults.GranularityOptions.constants.d.ts +15 -0
  129. package/dist/theme/defaults/defaults.GranularityOptions.constants.d.ts.map +1 -0
  130. package/dist/theme/i18n/translations/de.d.ts.map +1 -1
  131. package/dist/theme/i18n/translations/en.d.ts.map +1 -1
  132. package/dist/{timeRange.utils-BaqbWNuX.js → timeRange.utils-DIFMUM1C.js} +2 -2
  133. package/dist/{timeRange.utils-BaqbWNuX.js.map → timeRange.utils-DIFMUM1C.js.map} +1 -1
  134. package/package.json +1 -1
  135. package/dist/ChartCard-DWm_d8Zt.js.map +0 -1
  136. package/dist/Color.type.emb-BKd2NgB4.js.map +0 -1
  137. package/dist/bars.utils-UMmKPcFA.js.map +0 -1
  138. package/dist/charts.fillGaps.hooks-DPso1ZUh.js +0 -66
  139. package/dist/charts.fillGaps.hooks-DPso1ZUh.js.map +0 -1
  140. package/dist/charts.utils-CczkrS7C.js.map +0 -1
  141. package/dist/component.inputs.constants-DvrG0Pd4.js.map +0 -1
  142. package/dist/index-0v8ZD5Px.js.map +0 -1
@@ -1,29 +1,29 @@
1
- import { r as F, g as P } from "./charts.utils-CczkrS7C.js";
2
- import { g as h } from "./formatter.utils-DhYAAdix.js";
1
+ import { a as N, C as P, b as v } from "./Color.type.emb-C4VcPjfM.js";
2
+ import { r as x, g as F } from "./charts.utils-g6NE_Jo3.js";
3
+ import { g as h } from "./formatter.utils-pzrkapRL.js";
3
4
  import { g as p, a as g } from "./object.utils-D_Zzon-H.js";
4
- import { a as T, b as v } from "./Color.type.emb-BKd2NgB4.js";
5
- const B = (l, c) => {
5
+ const I = (c, d) => {
6
6
  var b;
7
- const m = h(c), { data: o = [], dimension: i, groupDimension: d, measure: t } = l, r = [...new Set(o.map((n) => n[i.name]).filter((n) => n != null))].sort(), a = `${d.name}${(b = d.inputs) != null && b.granularity ? `.${d.inputs.granularity}` : ""}`, e = [...new Set(o.map((n) => n[a]))].filter((n) => n != null), s = p(c), u = v(), C = e.map((n, k) => {
7
+ const m = h(d), { data: o = [], dimension: i, groupDimension: l, measure: t } = c, r = [...new Set(o.map((n) => n[i.name]).filter((n) => n != null))].sort(), a = `${l.name}${l.nativeType === P && ((b = l.inputs) != null && b.granularity) ? `.${l.inputs.granularity}` : ""}`, e = [...new Set(o.map((n) => n[a]))].filter((n) => n != null), s = p(d), u = v(), C = e.map((n, k) => {
8
8
  const D = g(
9
9
  `${s}.charts.backgroundColors`,
10
- `${d.name}.${n}`,
11
- c.charts.backgroundColors ?? u,
10
+ `${l.name}.${n}`,
11
+ d.charts.backgroundColors ?? u,
12
12
  k
13
- ), w = g(
13
+ ), T = g(
14
14
  `${s}.charts.borderColors`,
15
- `${d.name}.${n}`,
16
- c.charts.borderColors ?? u,
15
+ `${l.name}.${n}`,
16
+ d.charts.borderColors ?? u,
17
17
  k
18
18
  );
19
19
  return {
20
- label: m.data(d, n),
20
+ label: m.data(l, n),
21
21
  rawLabel: n,
22
22
  backgroundColor: D,
23
- borderColor: w,
24
- data: r.map((x) => {
23
+ borderColor: T,
24
+ data: r.map((w) => {
25
25
  const f = o.find(
26
- ($) => $[a] === n && $[i.name] === x
26
+ ($) => $[a] === n && $[i.name] === w
27
27
  );
28
28
  return f ? Number(f[t.name]) : 0;
29
29
  })
@@ -33,25 +33,25 @@ const B = (l, c) => {
33
33
  labels: r,
34
34
  datasets: C
35
35
  };
36
- }, L = (l, c = F) => {
37
- if (!l.data)
36
+ }, B = (c, d = x) => {
37
+ if (!c.data)
38
38
  return {
39
39
  labels: [],
40
40
  datasets: [{ data: [] }]
41
41
  };
42
- const m = h(c), o = p(c), i = P(l.data, l.dimension, l.measures, l.maxItems), d = T();
42
+ const m = h(d), o = p(d), i = F(c.data, c.dimension, c.measures, c.maxItems), l = N();
43
43
  return {
44
- labels: i.map((t) => t[l.dimension.name]),
45
- datasets: l.measures.map((t, r) => {
44
+ labels: i.map((t) => t[c.dimension.name]),
45
+ datasets: c.measures.map((t, r) => {
46
46
  const a = g(
47
47
  `${o}.charts.backgroundColors`,
48
48
  t.name,
49
- c.charts.backgroundColors ?? d,
49
+ d.charts.backgroundColors ?? l,
50
50
  r
51
51
  ), e = g(
52
52
  `${o}.charts.borderColors`,
53
53
  t.name,
54
- c.charts.borderColors ?? d,
54
+ d.charts.borderColors ?? l,
55
55
  r
56
56
  );
57
57
  return {
@@ -62,21 +62,21 @@ const B = (l, c) => {
62
62
  };
63
63
  })
64
64
  };
65
- }, N = (l, c) => {
66
- const { datasets: m } = l.chart.data, o = l.dataIndex, i = m.reduce((d, t) => {
65
+ }, O = (c, d) => {
66
+ const { datasets: m } = c.chart.data, o = c.dataIndex, i = m.reduce((l, t) => {
67
67
  const r = t.data[o];
68
- return d + (r || 0);
68
+ return l + (r || 0);
69
69
  }, 0);
70
- return c(i);
71
- }, V = (l, c) => {
72
- const { onBarClicked: m, measures: o, dimension: i, horizontal: d, data: t } = l, r = h(c);
70
+ return d(i);
71
+ }, K = (c, d) => {
72
+ const { onBarClicked: m, measures: o, dimension: i, horizontal: l, data: t } = c, r = h(d);
73
73
  return {
74
74
  plugins: {
75
- legend: { position: c.charts.legendPosition ?? "bottom" },
75
+ legend: { position: d.charts.legendPosition ?? "bottom" },
76
76
  datalabels: {
77
77
  labels: {
78
78
  total: {
79
- formatter: (a, e) => N(
79
+ formatter: (a, e) => O(
80
80
  e,
81
81
  (s) => r.data(o[0], s)
82
82
  )
@@ -107,7 +107,7 @@ const B = (l, c) => {
107
107
  x: {
108
108
  ticks: {
109
109
  callback: (a) => {
110
- if (d)
110
+ if (l)
111
111
  return r.data(o[0], a);
112
112
  if (!t || !t.labels) return;
113
113
  const e = t.labels[Number(a)];
@@ -118,7 +118,7 @@ const B = (l, c) => {
118
118
  y: {
119
119
  ticks: {
120
120
  callback: (a) => {
121
- if (!d)
121
+ if (!l)
122
122
  return r.data(o[0], a);
123
123
  if (!t || !t.labels) return;
124
124
  const e = t.labels[Number(a)];
@@ -138,8 +138,8 @@ const B = (l, c) => {
138
138
  };
139
139
  };
140
140
  export {
141
- L as a,
142
- V as b,
143
- B as g
141
+ B as a,
142
+ K as b,
143
+ I as g
144
144
  };
145
- //# sourceMappingURL=bars.utils-UMmKPcFA.js.map
145
+ //# sourceMappingURL=bars.utils-Ck1w7NOo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bars.utils-Ck1w7NOo.js","sources":["../src/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { CUBE_DIMENSION_TYPE_TIME, 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 { getChartColors, getChartContrastColors } from '@embeddable.com/remarkable-ui';\nimport { getObjectStableKey } from '../../../utils.ts/object.utils';\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((d) => d != null))].sort();\n const groupDimensionName = `${groupDimension.name}${groupDimension.nativeType === CUBE_DIMENSION_TYPE_TIME && groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter((d) => d != null);\n\n const themeKey = getObjectStableKey(theme);\n const chartContrastColors = getChartContrastColors();\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 const chartColors = getChartColors();\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":["getBarStackedChartProData","props","theme","themeFormatter","getThemeFormatter","data","dimension","groupDimension","measure","axis","d","groupDimensionName","CUBE_DIMENSION_TYPE_TIME","_a","groupBy","themeKey","getObjectStableKey","chartContrastColors","getChartContrastColors","datasets","groupByItem","index","backgroundColor","getColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","chartColors","getChartColors","item","getBarChartProDatalabelTotalFormatter","context","formatter","i","total","sum","ds","val","getBarChartProOptions","options","onBarClicked","measures","horizontal","_value","value","label","raw","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":";;;;AAWO,MAAMA,IAA4B,CACvCC,GAMAC,MACqB;;AACrB,QAAMC,IAAiBC,EAAkBF,CAAK,GACxC,EAAE,MAAAG,IAAO,CAAA,GAAI,WAAAC,GAAW,gBAAAC,GAAgB,SAAAC,MAAYP,GAEpDQ,IAAO,CAAC,GAAG,IAAI,IAAIJ,EAAK,IAAI,CAACK,MAAMA,EAAEJ,EAAU,IAAI,CAAC,EAAE,OAAO,CAACI,MAAMA,KAAK,IAAI,CAAC,CAAC,EAAE,KAAA,GACjFC,IAAqB,GAAGJ,EAAe,IAAI,GAAGA,EAAe,eAAeK,OAA4BC,IAAAN,EAAe,WAAf,QAAAM,EAAuB,eAAc,IAAIN,EAAe,OAAO,WAAW,KAAK,EAAE,IACzLO,IAAU,CAAC,GAAG,IAAI,IAAIT,EAAK,IAAI,CAACK,MAAMA,EAAEC,CAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAACD,MAAMA,KAAK,IAAI,GAEtFK,IAAWC,EAAmBd,CAAK,GACnCe,IAAsBC,EAAA,GACtBC,IAAWL,EAAQ,IAAI,CAACM,GAAaC,MAAU;AACnD,UAAMC,IAAkBC;AAAA,MACtB,GAAGR,CAAQ;AAAA,MACX,GAAGR,EAAe,IAAI,IAAIa,CAAW;AAAA,MACrClB,EAAM,OAAO,oBAAoBe;AAAA,MACjCI;AAAA,IAAA,GAGIG,IAAcD;AAAA,MAClB,GAAGR,CAAQ;AAAA,MACX,GAAGR,EAAe,IAAI,IAAIa,CAAW;AAAA,MACrClB,EAAM,OAAO,gBAAgBe;AAAA,MAC7BI;AAAA,IAAA;AAGF,WAAO;AAAA,MACL,OAAOlB,EAAe,KAAKI,GAAgBa,CAAW;AAAA,MACtD,UAAUA;AAAA,MACV,iBAAAE;AAAA,MACA,aAAAE;AAAA,MACA,MAAMf,EAAK,IAAI,CAACgB,MAAa;AAC3B,cAAMC,IAASrB,EAAK;AAAA,UAClB,CAACK,MAAMA,EAAEC,CAAkB,MAAMS,KAAeV,EAAEJ,EAAU,IAAI,MAAMmB;AAAA,QAAA;AAExE,eAAOC,IAAS,OAAOA,EAAOlB,EAAQ,IAAI,CAAC,IAAI;AAAA,MACjD,CAAC;AAAA,IAAA;AAAA,EAEL,CAAC;AAED,SAAO;AAAA,IACL,QAAQC;AAAA,IACR,UAAAU;AAAA,EAAA;AAEJ,GAEaQ,IAAqB,CAChC1B,GAMAC,IAAe0B,MACM;AACrB,MAAI,CAAC3B,EAAM;AACT,WAAO;AAAA,MACL,QAAQ,CAAA;AAAA,MACR,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,IAAA;AAI3B,QAAME,IAAiBC,EAAkBF,CAAK,GACxCa,IAAWC,EAAmBd,CAAK,GACnC2B,IAAcC,EAAiB7B,EAAM,MAAMA,EAAM,WAAWA,EAAM,UAAUA,EAAM,QAAQ,GAC1F8B,IAAcC,EAAA;AAEpB,SAAO;AAAA,IACL,QAAQH,EAAY,IAAI,CAACI,MAChBA,EAAKhC,EAAM,UAAU,IAAI,CACjC;AAAA,IACD,UAAUA,EAAM,SAAS,IAAI,CAACO,GAASa,MAAU;AAC/C,YAAMC,IAAkBC;AAAA,QACtB,GAAGR,CAAQ;AAAA,QACXP,EAAQ;AAAA,QACRN,EAAM,OAAO,oBAAoB6B;AAAA,QACjCV;AAAA,MAAA,GAGIG,IAAcD;AAAA,QAClB,GAAGR,CAAQ;AAAA,QACXP,EAAQ;AAAA,QACRN,EAAM,OAAO,gBAAgB6B;AAAA,QAC7BV;AAAA,MAAA;AAGF,aAAO;AAAA,QACL,OAAOlB,EAAe,wBAAwBK,CAAO;AAAA,QACrD,MAAMqB,EAAY,IAAI,CAACI,MAASA,EAAKzB,EAAQ,IAAI,KAAK,CAAC;AAAA,QACvD,iBAAAc;AAAA,QACA,aAAAE;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EAAA;AAEL,GAEMU,IAAwC,CAC5CC,GACAC,MACG;AACH,QAAM,EAAE,UAAAjB,EAAA,IAAagB,EAAQ,MAAM,MAC7BE,IAAIF,EAAQ,WAEZG,IAAQnB,EAAS,OAAO,CAACoB,GAAKC,MAAO;AACzC,UAAMC,IAAMD,EAAG,KAAKH,CAAC;AACrB,WAAOE,KAAOE,KAAO;AAAA,EACvB,GAAG,CAAC;AAEJ,SAAOL,EAAUE,CAAK;AACxB,GAEaI,IAAwB,CACnCC,GAUAzC,MACiC;AACjC,QAAM,EAAE,cAAA0C,GAAc,UAAAC,GAAU,WAAAvC,GAAW,YAAAwC,GAAY,MAAAzC,MAASsC,GAE1DxC,IAAiBC,EAAkBF,CAAK;AAC9C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,QAAQ,EAAE,UAAUA,EAAM,OAAO,kBAAkB,SAAA;AAAA,MACnD,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,WAAW,CAAC6C,GAAyBZ,MACnCD;AAAA,cAAsCC;AAAA,cAAS,CAACa,MAC9C7C,EAAe,KAAK0C,EAAS,CAAC,GAAIG,CAAK;AAAA,YAAA;AAAA,UACzC;AAAA,UAEJ,OAAO;AAAA,YACL,WAAW,CAACA,GAAwBb,MAAY;AAC9C,oBAAM3B,IAAUqC,EAASV,EAAQ,eAAeU,EAAS,MAAM;AAC/D,qBAAO1C,EAAe,KAAKK,GAASwC,CAAK;AAAA,YAC3C;AAAA,UAAA;AAAA,QACF;AAAA,MACF;AAAA,MAEF,SAAS;AAAA,QACP,WAAW;AAAA,UACT,OAAO,CAACb,MAAY;;AAClB,kBAAMc,KAAQpC,IAAAsB,EAAQ,CAAC,MAAT,gBAAAtB,EAAY;AAC1B,mBAAOV,EAAe,KAAKG,GAAW2C,CAAK;AAAA,UAC7C;AAAA,UACA,OAAO,CAACd,MAAY;AAClB,kBAAM3B,IAAUqC,EAASV,EAAQ,eAAeU,EAAS,MAAM,GACzDK,IAAMf,EAAQ;AACpB,mBAAO,GAAGhC,EAAe,KAAKG,GAAW6B,EAAQ,QAAQ,KAAK,KAAK,EAAE,KAAKhC,EAAe,KAAKK,GAAS0C,CAAG,CAAC;AAAA,UAC7G;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,IAEF,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACF,MAAU;AACnB,gBAAIF;AACF,qBAAO3C,EAAe,KAAK0C,EAAS,CAAC,GAAIG,CAAK;AAGhD,gBAAI,CAAC3C,KAAQ,CAACA,EAAK,OAAQ;AAE3B,kBAAM4C,IAAQ5C,EAAK,OAAO,OAAO2C,CAAK,CAAC;AAEvC,mBAAO7C,EAAe,KAAKG,GAAW2C,CAAK;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACD,MAAU;AACnB,gBAAI,CAACF;AACH,qBAAO3C,EAAe,KAAK0C,EAAS,CAAC,GAAIG,CAAK;AAEhD,gBAAI,CAAC3C,KAAQ,CAACA,EAAK,OAAQ;AAC3B,kBAAM4C,IAAQ5C,EAAK,OAAO,OAAO2C,CAAK,CAAC;AACvC,mBAAO7C,EAAe,KAAKG,GAAW2C,CAAK;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,IAEF,SAAS,CAACE,GAAQC,GAAUC,MAAU;;AACpC,YAAMC,IAAUF,EAAS,CAAC,GACpBG,IAAsBD,IAAUD,EAAM,KAAK,OAAQC,EAAQ,KAAK,IAAI,MAGpEE,IACJF,KACKzC,IAAAwC,EAAM,KAAK,SAASC,EAAQ,YAAY,MAAxC,gBAAAzC,EAA4E,WAC7E;AAGN,MAAA+B,EAAa;AAAA,QACX,oBAAAW;AAAA,QACA,wBAAAC;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,67 @@
1
+ import { d as n, u as B } from "./utc-ZJfc90oL.js";
2
+ import { i as E, q as F } from "./quarterOfYear-Dy3NbBBT.js";
3
+ import { g as M } from "./_commonjsHelpers-C6fGbg64.js";
4
+ import { useTheme as W } from "@embeddable.com/react";
5
+ import { useMemo as Z } from "react";
6
+ var S = { exports: {} }, b = S.exports, j;
7
+ function C() {
8
+ return j || (j = 1, (function(O, h) {
9
+ (function(e, t) {
10
+ O.exports = t();
11
+ })(b, (function() {
12
+ return function(e, t) {
13
+ t.prototype.isSameOrBefore = function(f, o) {
14
+ return this.isSame(f, o) || this.isBefore(f, o);
15
+ };
16
+ };
17
+ }));
18
+ })(S)), S.exports;
19
+ }
20
+ var G = C();
21
+ const L = /* @__PURE__ */ M(G);
22
+ n.extend(B);
23
+ n.extend(E);
24
+ n.extend(L);
25
+ n.extend(F);
26
+ function H(O) {
27
+ const h = W(), { results: e, dimension: t, orderDirection: f = "asc", externalDateBounds: o } = O;
28
+ return Z(() => {
29
+ var k, q, I, R, V, w, $;
30
+ const p = (k = t.inputs) == null ? void 0 : k.granularity, s = t.name, a = (q = t.inputs) == null ? void 0 : q.dateBounds;
31
+ if (!p || !s || !e || e.isLoading || ((I = e.data) == null ? void 0 : I.length) === 0)
32
+ return e;
33
+ const c = a != null && a.relativeTimeString ? (R = h.defaults.dateRangesOptions.find((r) => r.value === (a == null ? void 0 : a.relativeTimeString))) == null ? void 0 : R.getRange() : a;
34
+ if (t.nativeType !== "time") return e;
35
+ const u = [...(e == null ? void 0 : e.data) ?? []].sort((r, i) => {
36
+ const l = r[s], m = i[s];
37
+ return l == null ? 1 : m == null ? -1 : n.utc(l).diff(n.utc(m));
38
+ }), x = n.utc(
39
+ (o == null ? void 0 : o.from) ?? (c == null ? void 0 : c.from) ?? ((V = u[0]) == null ? void 0 : V[s])
40
+ ), y = n.utc(
41
+ (o == null ? void 0 : o.to) ?? (c == null ? void 0 : c.to) ?? ((w = u[u.length - 1]) == null ? void 0 : w[s]) ?? (($ = [...u].reverse().find((r) => (r == null ? void 0 : r[s]) != null)) == null ? void 0 : $[s])
42
+ );
43
+ if (!x.isValid() || !y.isValid())
44
+ return { ...e, data: [] };
45
+ const v = /* @__PURE__ */ new Map();
46
+ for (const r of u) {
47
+ const i = r[s];
48
+ if (i == null) continue;
49
+ const l = n.utc(i).toISOString().split("Z")[0], m = v.get(l) ?? [];
50
+ m.push(r), v.set(l, m);
51
+ }
52
+ const d = [];
53
+ let g = x.startOf(p === "week" ? "isoWeek" : p);
54
+ for (; g.isSameOrBefore(y); ) {
55
+ const r = g.toISOString().split("Z")[0], i = v.get(r);
56
+ i && i.length > 0 ? d.push(...i) : d.push({ [s]: r }), g = g.add(1, p);
57
+ }
58
+ return f === "desc" && d.reverse(), {
59
+ ...e,
60
+ data: d
61
+ };
62
+ }, [e, t, f, h]);
63
+ }
64
+ export {
65
+ H as u
66
+ };
67
+ //# sourceMappingURL=charts.fillGaps.hooks-C7KsWcZb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts.fillGaps.hooks-C7KsWcZb.js","sources":["../node_modules/dayjs/plugin/isSameOrBefore.js","../src/components/charts/charts.fillGaps.hooks.ts"],"sourcesContent":["!function(e,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrBefore=i()}(this,(function(){\"use strict\";return function(e,i){i.prototype.isSameOrBefore=function(e,i){return this.isSame(e,i)||this.isBefore(e,i)}}}));","import { DataResponse, Dimension, TimeRange } from '@embeddable.com/core';\nimport dayjs, { QUnitType } from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek.js';\nimport utc from 'dayjs/plugin/utc.js';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore.js';\nimport { Theme } from '../../theme/theme.types';\nimport { useTheme } from '@embeddable.com/react';\nimport { useMemo } from 'react';\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear.js';\n\ndayjs.extend(utc);\ndayjs.extend(isoWeek);\ndayjs.extend(isSameOrBefore);\ndayjs.extend(quarterOfYear);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype DataRecord = { [key: string]: any };\n\ntype UseFillGapsProps = {\n results: DataResponse | undefined;\n dimension: Dimension;\n orderDirection?: 'asc' | 'desc';\n externalDateBounds?: TimeRange;\n};\n\nexport function useFillGaps(props: UseFillGapsProps): DataResponse {\n const theme = useTheme() as Theme;\n const { results, dimension, orderDirection = 'asc', externalDateBounds } = props;\n\n const processed = useMemo(() => {\n const granularity = dimension.inputs?.granularity;\n const dimensionName = dimension.name;\n const dateBoundsTmp: TimeRange = dimension.inputs?.dateBounds;\n\n if (\n !granularity ||\n !dimensionName ||\n !results ||\n results.isLoading ||\n results.data?.length === 0\n ) {\n return results;\n }\n\n const dateBounds = dateBoundsTmp?.relativeTimeString\n ? theme.defaults.dateRangesOptions\n .find((option) => option.value === dateBoundsTmp?.relativeTimeString)\n ?.getRange()\n : dateBoundsTmp;\n\n if (dimension.nativeType !== 'time') return results;\n\n const sortedResults = [...(results?.data ?? [])].sort((a, b) => {\n const aVal = a[dimensionName];\n const bVal = b[dimensionName];\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n return dayjs.utc(aVal).diff(dayjs.utc(bVal));\n });\n\n // Determine the full date range even if data is empty\n const from = dayjs.utc(\n externalDateBounds?.from ?? dateBounds?.from ?? sortedResults[0]?.[dimensionName],\n );\n\n const to = dayjs.utc(\n externalDateBounds?.to ??\n dateBounds?.to ??\n sortedResults[sortedResults.length - 1]?.[dimensionName] ??\n [...sortedResults].reverse().find((item) => item?.[dimensionName] != null)?.[dimensionName],\n );\n\n // If we *still* don’t have valid date bounds, bail out safely\n if (!from.isValid() || !to.isValid()) {\n return { ...results, data: [] };\n }\n\n const recordsByDate = new Map<string, DataRecord[]>();\n for (const record of sortedResults) {\n const value = record[dimensionName];\n if (value == null) continue;\n const key = dayjs.utc(value).toISOString().split('Z')[0]!;\n const arr = recordsByDate.get(key) ?? [];\n arr.push(record);\n recordsByDate.set(key, arr);\n }\n\n const filled: DataRecord[] = [];\n let current = from.startOf((granularity === 'week' ? 'isoWeek' : granularity) as QUnitType);\n\n while (current.isSameOrBefore(to)) {\n const key = current.toISOString().split('Z')[0]!;\n const records = recordsByDate.get(key);\n\n if (records && records.length > 0) {\n filled.push(...records);\n } else {\n filled.push({ [dimensionName]: key });\n }\n\n current = current.add(1, granularity as QUnitType);\n }\n\n if (orderDirection === 'desc') {\n filled.reverse();\n }\n\n return {\n ...results,\n data: filled,\n };\n }, [results, dimension, orderDirection, theme]);\n\n return processed as DataResponse;\n}\n"],"names":["i","module","this","e","dayjs","utc","isoWeek","isSameOrBefore","quarterOfYear","useFillGaps","props","theme","useTheme","results","dimension","orderDirection","externalDateBounds","useMemo","granularity","_a","dimensionName","dateBoundsTmp","_b","_c","dateBounds","_d","option","sortedResults","a","b","aVal","bVal","from","_e","to","_f","_g","item","recordsByDate","record","value","key","arr","filled","current","records"],"mappings":"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","x_google_ignoreList":[0]}