@embeddable.com/remarkable-pro 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -17
- package/dist/BarChartDefaultHorizontalPro.js +4 -4
- package/dist/BarChartDefaultPro.js +4 -4
- package/dist/BarChartGroupedHorizontalPro.js +4 -4
- package/dist/BarChartGroupedPro.js +4 -4
- package/dist/BarChartStackedHorizontalPro.js +4 -4
- package/dist/BarChartStackedPro.js +4 -4
- package/dist/{ChartCard-CsKQOusx.js → ChartCard-C7c2rTst.js} +3 -3
- package/dist/{ChartCard-CsKQOusx.js.map → ChartCard-C7c2rTst.js.map} +1 -1
- package/dist/{Color.type.emb-9H0O-uuD.js → Color.type.emb-CSPAaucR.js} +2 -2
- package/dist/{Color.type.emb-9H0O-uuD.js.map → Color.type.emb-CSPAaucR.js.map} +1 -1
- package/dist/ColorEditor.js +2 -2
- package/dist/{ComparisonPeriod.type.emb-C3XjaFoD.js → ComparisonPeriod.type.emb-DOpJ1iWj.js} +2 -2
- package/dist/{ComparisonPeriod.type.emb-C3XjaFoD.js.map → ComparisonPeriod.type.emb-DOpJ1iWj.js.map} +1 -1
- package/dist/ComparisonPeriodSelectFieldPro.js +4 -4
- package/dist/DateRangeSelectFieldPro.js +3 -3
- package/dist/DonutChartPro.js +3 -3
- package/dist/DonutLabelChartPro.js +3 -3
- package/dist/{EditorCard-BMEwnQuU.js → EditorCard-BtlvgP9q.js} +3 -3
- package/dist/{EditorCard-BMEwnQuU.js.map → EditorCard-BtlvgP9q.js.map} +1 -1
- package/dist/HeatMapPro.js +5 -5
- package/dist/KpiChartNumberComparisonPro.js +6 -6
- package/dist/KpiChartNumberPro.js +4 -4
- package/dist/LineChartComparisonDefaultPro.js +7 -7
- package/dist/LineChartDefaultPro.js +5 -5
- package/dist/LineChartGroupedPro.js +4 -4
- package/dist/MultiSelectFieldPro.js +3 -3
- package/dist/PieChartPro.js +3 -3
- package/dist/PivotTablePro.js +128 -69
- package/dist/PivotTablePro.js.map +1 -1
- package/dist/SingleSelectFieldPro.js +3 -3
- package/dist/TableChartPaginated.js +4 -4
- package/dist/{bars.utils-BU_k5fia.js → bars.utils-JRnFN04m.js} +4 -4
- package/dist/{bars.utils-BU_k5fia.js.map → bars.utils-JRnFN04m.js.map} +1 -1
- package/dist/{charts.utils-rO92wRxO.js → charts.utils-DAkS2VK1.js} +4 -4
- package/dist/{charts.utils-rO92wRxO.js.map → charts.utils-DAkS2VK1.js.map} +1 -1
- package/dist/{component.constants-uP1WYyUb.js → component.constants-h6et83ck.js} +2 -2
- package/dist/{component.constants-uP1WYyUb.js.map → component.constants-h6et83ck.js.map} +1 -1
- package/dist/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts +4 -1
- package/dist/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts.map +1 -1
- package/dist/components/charts/tables/PivotTablePro/index.d.ts.map +1 -1
- package/dist/embeddable-components.json +16 -16
- package/dist/{formatter.utils-CeEdL8uQ.js → formatter.utils-DXzI4Hz_.js} +2 -2
- package/dist/{formatter.utils-CeEdL8uQ.js.map → formatter.utils-DXzI4Hz_.js.map} +1 -1
- package/dist/{index-DLFOG9Ar.js → index-B4S34Z5S.js} +6 -6
- package/dist/{index-DLFOG9Ar.js.map → index-B4S34Z5S.js.map} +1 -1
- package/dist/{index-DedIqjbn.js → index-BR6dp5RX.js} +6 -7
- package/dist/{index-DedIqjbn.js.map → index-BR6dp5RX.js.map} +1 -1
- package/dist/{index-B8bT85NR.js → index-C8O2asSv.js} +5 -5
- package/dist/{index-B8bT85NR.js.map → index-C8O2asSv.js.map} +1 -1
- package/dist/{index-Brb617sy.js → index-CWYH2gE2.js} +5 -5
- package/dist/{index-Brb617sy.js.map → index-CWYH2gE2.js.map} +1 -1
- package/dist/{index-BWpUwKTH.js → index-Czj-HZH9.js} +5 -5
- package/dist/{index-BWpUwKTH.js.map → index-Czj-HZH9.js.map} +1 -1
- package/dist/{index-DrosyYQD.js → index-DF-AuKua.js} +4 -4
- package/dist/{index-DrosyYQD.js.map → index-DF-AuKua.js.map} +1 -1
- package/dist/{index-Dwl9clc9.js → index-QOVQo6ZK.js} +5 -5
- package/dist/{index-Dwl9clc9.js.map → index-QOVQo6ZK.js.map} +1 -1
- package/dist/index.js +13 -13
- package/dist/{pies.utils-Dap7Duqb.js → pies.utils-Bl8jquyV.js} +5 -5
- package/dist/{pies.utils-Dap7Duqb.js.map → pies.utils-Bl8jquyV.js.map} +1 -1
- package/dist/remarkable-pro.css +1 -446
- package/dist/{timeRange.utils-J3a4XL64.js → timeRange.utils-CslTQiVA.js} +2 -2
- package/dist/{timeRange.utils-J3a4XL64.js.map → timeRange.utils-CslTQiVA.js.map} +1 -1
- package/package.json +4 -6
package/dist/PivotTablePro.js
CHANGED
|
@@ -1,93 +1,152 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { useTheme as
|
|
3
|
-
import { a as
|
|
4
|
-
import { C as
|
|
5
|
-
import { useRef as
|
|
6
|
-
import { u as
|
|
7
|
-
import { g as
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
return e.measures.map((
|
|
11
|
-
var
|
|
1
|
+
import { j as A, n as x, l as G } from "./index-BR6dp5RX.js";
|
|
2
|
+
import { useTheme as N, defineComponent as j } from "@embeddable.com/react";
|
|
3
|
+
import { a as O, r as k, i as E, v as I, E as F, k as v, z as y, F as V, G as q, d as z, c as D, H } from "./component.constants-h6et83ck.js";
|
|
4
|
+
import { C as L } from "./ChartCard-C7c2rTst.js";
|
|
5
|
+
import { useMemo as _, useRef as J } from "react";
|
|
6
|
+
import { u as M } from "./charts.fillGaps.hooks-YayOXVmt.js";
|
|
7
|
+
import { g as W } from "./formatter.utils-DXzI4Hz_.js";
|
|
8
|
+
const K = (e, t) => {
|
|
9
|
+
const n = W(t);
|
|
10
|
+
return e.measures.map((o) => {
|
|
11
|
+
var s, a;
|
|
12
12
|
return {
|
|
13
|
-
key:
|
|
14
|
-
label:
|
|
15
|
-
showAsPercentage: !!((
|
|
16
|
-
percentageDecimalPlaces: ((a =
|
|
17
|
-
accessor: (
|
|
13
|
+
key: o.name,
|
|
14
|
+
label: n.dimensionOrMeasureTitle(o),
|
|
15
|
+
showAsPercentage: !!((s = o.inputs) != null && s.showAsPercentage),
|
|
16
|
+
percentageDecimalPlaces: ((a = o.inputs) == null ? void 0 : a.decimalPlaces) ?? 1,
|
|
17
|
+
accessor: (r) => r[o.name] == null ? e.displayNullAs : n.data(o, r[o.name])
|
|
18
18
|
};
|
|
19
19
|
});
|
|
20
|
-
},
|
|
21
|
-
const
|
|
20
|
+
}, S = (e, t) => {
|
|
21
|
+
const n = W(t);
|
|
22
22
|
return {
|
|
23
23
|
key: e.dimension.name,
|
|
24
|
-
label:
|
|
25
|
-
formatValue: (
|
|
24
|
+
label: n.dimensionOrMeasureTitle(e.dimension),
|
|
25
|
+
formatValue: (o) => n.data(e.dimension, o)
|
|
26
26
|
};
|
|
27
|
-
},
|
|
28
|
-
var
|
|
29
|
-
return (
|
|
30
|
-
}).map((
|
|
31
|
-
var
|
|
32
|
-
return (
|
|
33
|
-
}).map((
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
}, Q = (e) => e.filter((t) => {
|
|
28
|
+
var n;
|
|
29
|
+
return (n = t.inputs) == null ? void 0 : n.showColumnTotal;
|
|
30
|
+
}).map((t) => t.name), U = (e) => e.filter((t) => {
|
|
31
|
+
var n;
|
|
32
|
+
return (n = t.inputs) == null ? void 0 : n.showRowTotal;
|
|
33
|
+
}).map((t) => t.name);
|
|
34
|
+
function X(e) {
|
|
35
|
+
let t = 0, n = 0;
|
|
36
|
+
for (let o = 0; o < e.length - 1; o++) {
|
|
37
|
+
const s = e[o], a = e[o + 1];
|
|
38
|
+
s == null || a == null || (s < a ? t++ : s > a && n++);
|
|
39
|
+
}
|
|
40
|
+
return t > n ? "asc" : n > t ? "desc" : "equal";
|
|
41
|
+
}
|
|
42
|
+
function C(e) {
|
|
43
|
+
let t = 0, n = 0;
|
|
44
|
+
for (let o = 0; o < e.length - 1; o++) {
|
|
45
|
+
const s = e[o], a = e[o + 1];
|
|
46
|
+
s == null || a == null || (s < a ? t++ : s > a && n++);
|
|
47
|
+
}
|
|
48
|
+
return t > 0 && n > 0;
|
|
49
|
+
}
|
|
50
|
+
const Y = (e) => (t, n) => e === "asc" ? t < n ? -1 : t > n ? 1 : 0 : e === "desc" ? t > n ? -1 : t < n ? 1 : 0 : 0, Z = (e, t, n, o, s, a) => {
|
|
51
|
+
const r = e.data ?? [], c = r[0];
|
|
52
|
+
if (!c) return [];
|
|
53
|
+
const b = () => a.reduce((l, i) => (l[i.name] = void 0, l), {}), f = (l, i, d) => {
|
|
54
|
+
if (!C(l))
|
|
55
|
+
return r;
|
|
56
|
+
const h = X(l), p = [...l].sort(Y(h)).map((m) => {
|
|
57
|
+
const u = r.find(
|
|
58
|
+
(w) => w[i.name] === m && w[d.name] === c[d.name]
|
|
59
|
+
);
|
|
60
|
+
return u || {
|
|
61
|
+
...c,
|
|
62
|
+
[i.name]: m,
|
|
63
|
+
...b()
|
|
64
|
+
};
|
|
65
|
+
}), T = r.filter(
|
|
66
|
+
(m) => !p.some(
|
|
67
|
+
(u) => u[i.name] === m[i.name] && u[d.name] === m[d.name]
|
|
68
|
+
)
|
|
69
|
+
);
|
|
70
|
+
return [...p, ...T];
|
|
71
|
+
};
|
|
72
|
+
return C(t) ? f(t, o, s) : C(n) ? f(n, s, o) : r;
|
|
73
|
+
}, $ = (e) => {
|
|
74
|
+
var R;
|
|
75
|
+
const t = N();
|
|
76
|
+
O(t);
|
|
77
|
+
const { description: n, title: o } = k(e), { measures: s, rowDimension: a, columnDimension: r, displayNullAs: c, columnWidth: b, firstColumnWidth: f } = e, l = Array.from(
|
|
78
|
+
new Set((e.results.data ?? []).filter(Boolean).map((g) => g[r.name]))
|
|
79
|
+
), i = Array.from(
|
|
80
|
+
new Set((e.results.data ?? []).filter(Boolean).map((g) => g[a.name]))
|
|
81
|
+
), d = M({
|
|
37
82
|
results: e.results,
|
|
38
|
-
dimension:
|
|
39
|
-
}),
|
|
40
|
-
results:
|
|
83
|
+
dimension: r
|
|
84
|
+
}), h = M({
|
|
85
|
+
results: d,
|
|
41
86
|
dimension: a
|
|
42
|
-
}),
|
|
43
|
-
|
|
44
|
-
|
|
87
|
+
}), P = _(() => Z(
|
|
88
|
+
h,
|
|
89
|
+
l,
|
|
90
|
+
i,
|
|
91
|
+
r,
|
|
92
|
+
a,
|
|
93
|
+
s
|
|
94
|
+
), [
|
|
95
|
+
h,
|
|
96
|
+
l,
|
|
97
|
+
i,
|
|
98
|
+
r,
|
|
99
|
+
a,
|
|
100
|
+
s
|
|
101
|
+
]), p = J(null), T = K({ measures: s, displayNullAs: c }, t), m = S({ dimension: a }, t), u = S({ dimension: r }, t), w = Q(s), B = U(s);
|
|
102
|
+
return /* @__PURE__ */ A.jsx(
|
|
103
|
+
L,
|
|
45
104
|
{
|
|
46
|
-
ref:
|
|
47
|
-
title:
|
|
48
|
-
subtitle:
|
|
105
|
+
ref: p,
|
|
106
|
+
title: o,
|
|
107
|
+
subtitle: n,
|
|
49
108
|
data: e.results,
|
|
50
|
-
dimensionsAndMeasures: [a,
|
|
51
|
-
errorMessage:
|
|
52
|
-
children: /* @__PURE__ */
|
|
109
|
+
dimensionsAndMeasures: [a, r, ...s],
|
|
110
|
+
errorMessage: (R = e.results) == null ? void 0 : R.error,
|
|
111
|
+
children: /* @__PURE__ */ A.jsx(
|
|
53
112
|
x,
|
|
54
113
|
{
|
|
55
114
|
firstColumnWidth: f,
|
|
56
|
-
columnWidth:
|
|
57
|
-
totalLabel:
|
|
58
|
-
data:
|
|
59
|
-
measures:
|
|
60
|
-
rowDimension:
|
|
61
|
-
columnDimension:
|
|
62
|
-
columnTotalsFor:
|
|
63
|
-
rowTotalsFor:
|
|
115
|
+
columnWidth: b,
|
|
116
|
+
totalLabel: E.t("charts.pivotTable.total"),
|
|
117
|
+
data: P,
|
|
118
|
+
measures: T,
|
|
119
|
+
rowDimension: m,
|
|
120
|
+
columnDimension: u,
|
|
121
|
+
columnTotalsFor: w,
|
|
122
|
+
rowTotalsFor: B
|
|
64
123
|
}
|
|
65
124
|
)
|
|
66
125
|
}
|
|
67
126
|
);
|
|
68
|
-
},
|
|
127
|
+
}, ee = {
|
|
69
128
|
name: "PivotTablePro",
|
|
70
129
|
label: "Pivot Table",
|
|
71
130
|
category: "Table Charts",
|
|
72
131
|
inputs: [
|
|
73
|
-
|
|
132
|
+
I,
|
|
74
133
|
{
|
|
75
|
-
...
|
|
134
|
+
...F,
|
|
76
135
|
label: "Measures To Display",
|
|
77
136
|
inputs: [
|
|
78
|
-
...
|
|
137
|
+
...F.inputs,
|
|
79
138
|
{
|
|
80
|
-
...
|
|
139
|
+
...v,
|
|
81
140
|
name: "showColumnTotal",
|
|
82
141
|
label: "Show Column Total"
|
|
83
142
|
},
|
|
84
143
|
{
|
|
85
|
-
...
|
|
144
|
+
...v,
|
|
86
145
|
name: "showRowTotal",
|
|
87
146
|
label: "Show Row Total"
|
|
88
147
|
},
|
|
89
148
|
{
|
|
90
|
-
...
|
|
149
|
+
...v,
|
|
91
150
|
name: "showAsPercentage",
|
|
92
151
|
label: "Show As Percentage",
|
|
93
152
|
description: "If turned on, other measures may be ignored",
|
|
@@ -96,36 +155,36 @@ const V = (e, o) => {
|
|
|
96
155
|
]
|
|
97
156
|
},
|
|
98
157
|
{
|
|
99
|
-
...
|
|
158
|
+
...y,
|
|
100
159
|
label: "Row Dimension",
|
|
101
160
|
name: "rowDimension"
|
|
102
161
|
},
|
|
103
162
|
{
|
|
104
|
-
...
|
|
163
|
+
...y,
|
|
105
164
|
label: "Column Dimension",
|
|
106
165
|
name: "columnDimension"
|
|
107
166
|
},
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
{ ...
|
|
167
|
+
V,
|
|
168
|
+
q,
|
|
169
|
+
{ ...z, name: "displayNullAs", label: "Display Null As" },
|
|
111
170
|
{
|
|
112
|
-
...
|
|
171
|
+
...D,
|
|
113
172
|
name: "firstColumnWidth",
|
|
114
173
|
label: "First Column Width",
|
|
115
174
|
description: "Set the width in px (e.g. 200)"
|
|
116
175
|
},
|
|
117
176
|
{
|
|
118
|
-
...
|
|
177
|
+
...D,
|
|
119
178
|
name: "columnWidth",
|
|
120
179
|
label: "Column Width",
|
|
121
180
|
description: "Set the width in px (e.g. 200)"
|
|
122
181
|
},
|
|
123
|
-
|
|
182
|
+
H
|
|
124
183
|
]
|
|
125
|
-
},
|
|
184
|
+
}, ie = j($, ee, {
|
|
126
185
|
props: (e) => ({
|
|
127
186
|
...e,
|
|
128
|
-
results:
|
|
187
|
+
results: G({
|
|
129
188
|
from: e.dataset,
|
|
130
189
|
select: [e.rowDimension, e.columnDimension, ...e.measures],
|
|
131
190
|
limit: e.maxResults,
|
|
@@ -134,7 +193,7 @@ const V = (e, o) => {
|
|
|
134
193
|
})
|
|
135
194
|
});
|
|
136
195
|
export {
|
|
137
|
-
|
|
138
|
-
|
|
196
|
+
ie as default,
|
|
197
|
+
ee as meta
|
|
139
198
|
};
|
|
140
199
|
//# sourceMappingURL=PivotTablePro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotTablePro.js","sources":["../src/components/charts/tables/PivotTablePro/PivotPro.utils.ts","../src/components/charts/tables/PivotTablePro/index.tsx","../src/components/charts/tables/PivotTablePro/PivotTablePro.emb.ts"],"sourcesContent":["import { Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { PivotTableProps } from '@embeddable.com/remarkable-ui';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const getPivotMeasures = (\n props: { measures: Measure[]; displayNullAs?: string },\n theme: Theme,\n): PivotTableProps<any>['measures'] => {\n const themeFormatter = getThemeFormatter(theme);\n\n return props.measures.map((measure) => {\n return {\n key: measure.name,\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n showAsPercentage: Boolean(measure.inputs?.showAsPercentage),\n percentageDecimalPlaces: measure.inputs?.decimalPlaces ?? 1,\n accessor: (row) => {\n const value = row[measure.name];\n\n return value == null\n ? props.displayNullAs\n : themeFormatter.data(measure, row[measure.name]);\n },\n };\n });\n};\n\nexport const getPivotDimension = (\n props: { dimension: Dimension },\n theme: Theme,\n): PivotTableProps<any>['rowDimension' | 'columnDimension'] => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n key: props.dimension.name,\n label: themeFormatter.dimensionOrMeasureTitle(props.dimension),\n formatValue: (value: string) => themeFormatter.data(props.dimension, value),\n };\n};\n\nexport const getPivotColumnTotalsFor = (\n measures: Measure[],\n): PivotTableProps<any>['columnTotalsFor'] | undefined => {\n return measures.filter((m) => m.inputs?.showColumnTotal).map((m) => m.name);\n};\n\nexport const getPivotRowTotalsFor = (\n measures: Measure[],\n): PivotTableProps<any>['rowTotalsFor'] | undefined => {\n return measures.filter((m) => m.inputs?.showRowTotal).map((m) => m.name);\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18n, i18nSetup } from '../../../../theme/i18n/i18n';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { PivotTable } from '@embeddable.com/remarkable-ui';\nimport { useRef } from 'react';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport {\n getPivotColumnTotalsFor,\n getPivotDimension,\n getPivotMeasures,\n getPivotRowTotalsFor,\n} from './PivotPro.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype PivotTableProProps = {\n title: string;\n description: string;\n results: DataResponse;\n measures: Measure[];\n rowDimension: Dimension;\n columnDimension: Dimension;\n displayNullAs?: string;\n columnWidth?: number;\n firstColumnWidth?: number;\n};\n\nconst PivotTablePro = (props: PivotTableProProps) => {\n const theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { description, title } = resolveI18nProps(props);\n const { measures, rowDimension, columnDimension, displayNullAs, columnWidth, firstColumnWidth } =\n props;\n\n // Fill gaps for the column dimension\n const resultsColumnDimensionFillGaps = useFillGaps({\n results: props.results,\n dimension: columnDimension,\n });\n\n // Fill gaps for the row dimension\n const results = useFillGaps({\n results: resultsColumnDimensionFillGaps,\n dimension: rowDimension,\n });\n\n const cardContentRef = useRef<HTMLDivElement>(null);\n\n const pivotMeasures = getPivotMeasures({ measures, displayNullAs }, theme);\n const pivotRowDimension = getPivotDimension({ dimension: rowDimension }, theme);\n const pivotColumnDimension = getPivotDimension({ dimension: columnDimension }, theme);\n const pivotColumnTotalsFor = getPivotColumnTotalsFor(measures);\n const pivotRowTotalsFor = getPivotRowTotalsFor(measures);\n\n return (\n <ChartCard\n ref={cardContentRef}\n title={title}\n subtitle={description}\n data={props.results}\n dimensionsAndMeasures={[rowDimension, columnDimension, ...measures]}\n errorMessage={results?.error}\n >\n <PivotTable\n firstColumnWidth={firstColumnWidth}\n columnWidth={columnWidth}\n totalLabel={i18n.t('charts.pivotTable.total')}\n data={results.data ?? []}\n measures={pivotMeasures}\n rowDimension={pivotRowDimension}\n columnDimension={pivotColumnDimension}\n columnTotalsFor={pivotColumnTotalsFor}\n rowTotalsFor={pivotRowTotalsFor}\n />\n </ChartCard>\n );\n};\n\nexport default PivotTablePro;\n","import { loadData } from '@embeddable.com/core';\nimport { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport PivotTablePro from './index';\nimport {\n dataset,\n description,\n title,\n maxResults,\n measures,\n subInputGenericBoolean,\n genericString,\n dimensionWithDateBounds,\n genericNumber,\n} from '../../../component.constants';\n\nexport const meta = {\n name: 'PivotTablePro',\n label: 'Pivot Table',\n category: 'Table Charts',\n inputs: [\n dataset,\n {\n ...measures,\n label: 'Measures To Display',\n inputs: [\n ...measures.inputs,\n {\n ...subInputGenericBoolean,\n name: 'showColumnTotal',\n label: 'Show Column Total',\n },\n {\n ...subInputGenericBoolean,\n name: 'showRowTotal',\n label: 'Show Row Total',\n },\n {\n ...subInputGenericBoolean,\n name: 'showAsPercentage',\n label: 'Show As Percentage',\n description: 'If turned on, other measures may be ignored',\n defaultValue: false,\n },\n ],\n },\n {\n ...dimensionWithDateBounds,\n label: 'Row Dimension',\n name: 'rowDimension',\n },\n {\n ...dimensionWithDateBounds,\n label: 'Column Dimension',\n name: 'columnDimension',\n },\n title,\n description,\n { ...genericString, name: 'displayNullAs', label: 'Display Null As' },\n {\n ...genericNumber,\n name: 'firstColumnWidth',\n label: 'First Column Width',\n description: 'Set the width in px (e.g. 200)',\n },\n {\n ...genericNumber,\n name: 'columnWidth',\n label: 'Column Width',\n description: 'Set the width in px (e.g. 200)',\n },\n\n maxResults,\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(PivotTablePro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n\n results: loadData({\n from: inputs.dataset,\n select: [inputs.rowDimension, inputs.columnDimension, ...inputs.measures],\n limit: inputs.maxResults,\n countRows: true,\n }),\n };\n },\n});\n"],"names":["getPivotMeasures","props","theme","themeFormatter","getThemeFormatter","measure","_a","_b","row","getPivotDimension","value","getPivotColumnTotalsFor","measures","m","getPivotRowTotalsFor","PivotTablePro","useTheme","i18nSetup","description","title","resolveI18nProps","rowDimension","columnDimension","displayNullAs","columnWidth","firstColumnWidth","resultsColumnDimensionFillGaps","useFillGaps","results","cardContentRef","useRef","pivotMeasures","pivotRowDimension","pivotColumnDimension","pivotColumnTotalsFor","pivotRowTotalsFor","jsx","ChartCard","PivotTable","i18n","meta","dataset","subInputGenericBoolean","dimensionWithDateBounds","genericString","genericNumber","maxResults","PivotTablePro_emb","defineComponent","inputs","loadData"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PivotTablePro.js","sources":["../src/components/charts/tables/PivotTablePro/PivotPro.utils.ts","../src/components/charts/tables/PivotTablePro/index.tsx","../src/components/charts/tables/PivotTablePro/PivotTablePro.emb.ts"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { PivotTableProps } from '@embeddable.com/remarkable-ui';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport const getPivotMeasures = (\n props: { measures: Measure[]; displayNullAs?: string },\n theme: Theme,\n): PivotTableProps<any>['measures'] => {\n const themeFormatter = getThemeFormatter(theme);\n\n return props.measures.map((measure) => {\n return {\n key: measure.name,\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n showAsPercentage: Boolean(measure.inputs?.showAsPercentage),\n percentageDecimalPlaces: measure.inputs?.decimalPlaces ?? 1,\n accessor: (row) => {\n const value = row[measure.name];\n\n return value == null\n ? props.displayNullAs\n : themeFormatter.data(measure, row[measure.name]);\n },\n };\n });\n};\n\nexport const getPivotDimension = (\n props: { dimension: Dimension },\n theme: Theme,\n): PivotTableProps<any>['rowDimension' | 'columnDimension'] => {\n const themeFormatter = getThemeFormatter(theme);\n\n return {\n key: props.dimension.name,\n label: themeFormatter.dimensionOrMeasureTitle(props.dimension),\n formatValue: (value: string) => themeFormatter.data(props.dimension, value),\n };\n};\n\nexport const getPivotColumnTotalsFor = (\n measures: Measure[],\n): PivotTableProps<any>['columnTotalsFor'] | undefined => {\n return measures.filter((m) => m.inputs?.showColumnTotal).map((m) => m.name);\n};\n\nexport const getPivotRowTotalsFor = (\n measures: Measure[],\n): PivotTableProps<any>['rowTotalsFor'] | undefined => {\n return measures.filter((m) => m.inputs?.showRowTotal).map((m) => m.name);\n};\n\ntype Order = 'asc' | 'desc' | 'equal';\n\nfunction predominantOrder(arr: (string | number | boolean)[]): Order {\n let asc = 0;\n let desc = 0;\n\n for (let i = 0; i < arr.length - 1; i++) {\n const a = arr[i];\n const b = arr[i + 1];\n\n if (a == null || b == null) continue;\n\n if (a < b) asc++;\n else if (a > b) desc++;\n }\n\n if (asc > desc) return 'asc';\n if (desc > asc) return 'desc';\n return 'equal';\n}\n\nfunction isOrderMixed(arr: (string | number | boolean)[]): boolean {\n let asc = 0;\n let desc = 0;\n\n for (let i = 0; i < arr.length - 1; i++) {\n const a = arr[i];\n const b = arr[i + 1];\n\n if (a == null || b == null) continue;\n\n if (a < b) asc++;\n else if (a > b) desc++;\n }\n\n return asc > 0 && desc > 0;\n}\n\nconst getSortComparator = (order: Order) => {\n return <T>(a: T, b: T) => {\n if (order === 'asc') {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n if (order === 'desc') {\n return a > b ? -1 : a < b ? 1 : 0;\n }\n return 0;\n };\n};\n\nexport const getPivotTableRows = (\n results: DataResponse,\n columnOrder: (string | number | boolean)[],\n rowOrder: (string | number | boolean)[],\n columnDimension: Dimension,\n rowDimension: Dimension,\n measures: Measure[],\n) => {\n const data = results.data ?? [];\n const firstRow = data[0];\n\n if (!firstRow) return [];\n\n const buildEmptyMeasures = () =>\n measures.reduce<Record<string, unknown>>((acc, measure) => {\n acc[measure.name] = undefined;\n return acc;\n }, {});\n\n const reorderByAxis = (\n axisOrder: (string | number | boolean)[],\n axisDimension: Dimension,\n fixedDimension: Dimension,\n ) => {\n if (!isOrderMixed(axisOrder)) {\n return data;\n }\n\n const order = predominantOrder(axisOrder);\n const sortedAxisOrder = [...axisOrder].sort(getSortComparator(order));\n\n // “Leader” rows: one per value in the axis order, at the fixed dimension’s first value\n const leaderRows = sortedAxisOrder.map((value) => {\n const existing = data.find(\n (x) =>\n x[axisDimension.name] === value &&\n x[fixedDimension.name] === firstRow[fixedDimension.name],\n );\n\n if (existing) return existing;\n\n return {\n ...firstRow,\n [axisDimension.name]: value,\n ...buildEmptyMeasures(),\n };\n });\n\n // Remove rows that are already covered by leaderRows (same [axis, fixed] tuple)\n const restResults = data.filter(\n (resultRow) =>\n !leaderRows.some(\n (leaderRow) =>\n leaderRow[axisDimension.name] === resultRow[axisDimension.name] &&\n leaderRow[fixedDimension.name] === resultRow[fixedDimension.name],\n ),\n );\n\n return [...leaderRows, ...restResults];\n };\n\n // Preserve original behavior: fix columns if mixed, otherwise rows if mixed\n if (isOrderMixed(columnOrder)) {\n return reorderByAxis(columnOrder, columnDimension, rowDimension);\n }\n\n if (isOrderMixed(rowOrder)) {\n return reorderByAxis(rowOrder, rowDimension, columnDimension);\n }\n\n return data;\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { i18n, i18nSetup } from '../../../../theme/i18n/i18n';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { PivotTable } from '@embeddable.com/remarkable-ui';\nimport { useMemo, useRef } from 'react';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport {\n getPivotColumnTotalsFor,\n getPivotDimension,\n getPivotMeasures,\n getPivotRowTotalsFor,\n getPivotTableRows,\n} from './PivotPro.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\ntype PivotTableProProps = {\n title: string;\n description: string;\n results: DataResponse;\n measures: Measure[];\n rowDimension: Dimension;\n columnDimension: Dimension;\n displayNullAs?: string;\n columnWidth?: number;\n firstColumnWidth?: number;\n};\n\nconst PivotTablePro = (props: PivotTableProProps) => {\n const theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { description, title } = resolveI18nProps(props);\n const { measures, rowDimension, columnDimension, displayNullAs, columnWidth, firstColumnWidth } =\n props;\n\n const colOrder = Array.from(\n new Set((props.results.data ?? []).filter(Boolean).map((d) => d[columnDimension.name])),\n );\n\n const rowOrder = Array.from(\n new Set((props.results.data ?? []).filter(Boolean).map((d) => d[rowDimension.name])),\n );\n\n // Fill gaps for the column dimension\n const resultsColumnDimensionFillGaps = useFillGaps({\n results: props.results,\n dimension: columnDimension,\n });\n\n // Fill gaps for the row dimension\n const resultsRowColumnDimensionFillGaps = useFillGaps({\n results: resultsColumnDimensionFillGaps,\n dimension: rowDimension,\n });\n\n const results = useMemo(() => {\n return getPivotTableRows(\n resultsRowColumnDimensionFillGaps,\n colOrder,\n rowOrder,\n columnDimension,\n rowDimension,\n measures,\n );\n }, [\n resultsRowColumnDimensionFillGaps,\n colOrder,\n rowOrder,\n columnDimension,\n rowDimension,\n measures,\n ]);\n\n const cardContentRef = useRef<HTMLDivElement>(null);\n\n const pivotMeasures = getPivotMeasures({ measures, displayNullAs }, theme);\n const pivotRowDimension = getPivotDimension({ dimension: rowDimension }, theme);\n const pivotColumnDimension = getPivotDimension({ dimension: columnDimension }, theme);\n const pivotColumnTotalsFor = getPivotColumnTotalsFor(measures);\n const pivotRowTotalsFor = getPivotRowTotalsFor(measures);\n return (\n <ChartCard\n ref={cardContentRef}\n title={title}\n subtitle={description}\n data={props.results}\n dimensionsAndMeasures={[rowDimension, columnDimension, ...measures]}\n errorMessage={props.results?.error}\n >\n <PivotTable\n firstColumnWidth={firstColumnWidth}\n columnWidth={columnWidth}\n totalLabel={i18n.t('charts.pivotTable.total')}\n data={results}\n measures={pivotMeasures}\n rowDimension={pivotRowDimension}\n columnDimension={pivotColumnDimension}\n columnTotalsFor={pivotColumnTotalsFor}\n rowTotalsFor={pivotRowTotalsFor}\n />\n </ChartCard>\n );\n};\n\nexport default PivotTablePro;\n","import { loadData } from '@embeddable.com/core';\nimport { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport PivotTablePro from './index';\nimport {\n dataset,\n description,\n title,\n maxResults,\n measures,\n subInputGenericBoolean,\n genericString,\n dimensionWithDateBounds,\n genericNumber,\n} from '../../../component.constants';\n\nexport const meta = {\n name: 'PivotTablePro',\n label: 'Pivot Table',\n category: 'Table Charts',\n inputs: [\n dataset,\n {\n ...measures,\n label: 'Measures To Display',\n inputs: [\n ...measures.inputs,\n {\n ...subInputGenericBoolean,\n name: 'showColumnTotal',\n label: 'Show Column Total',\n },\n {\n ...subInputGenericBoolean,\n name: 'showRowTotal',\n label: 'Show Row Total',\n },\n {\n ...subInputGenericBoolean,\n name: 'showAsPercentage',\n label: 'Show As Percentage',\n description: 'If turned on, other measures may be ignored',\n defaultValue: false,\n },\n ],\n },\n {\n ...dimensionWithDateBounds,\n label: 'Row Dimension',\n name: 'rowDimension',\n },\n {\n ...dimensionWithDateBounds,\n label: 'Column Dimension',\n name: 'columnDimension',\n },\n title,\n description,\n { ...genericString, name: 'displayNullAs', label: 'Display Null As' },\n {\n ...genericNumber,\n name: 'firstColumnWidth',\n label: 'First Column Width',\n description: 'Set the width in px (e.g. 200)',\n },\n {\n ...genericNumber,\n name: 'columnWidth',\n label: 'Column Width',\n description: 'Set the width in px (e.g. 200)',\n },\n\n maxResults,\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(PivotTablePro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n\n results: loadData({\n from: inputs.dataset,\n select: [inputs.rowDimension, inputs.columnDimension, ...inputs.measures],\n limit: inputs.maxResults,\n countRows: true,\n }),\n };\n },\n});\n"],"names":["getPivotMeasures","props","theme","themeFormatter","getThemeFormatter","measure","_a","_b","row","getPivotDimension","value","getPivotColumnTotalsFor","measures","m","getPivotRowTotalsFor","predominantOrder","arr","asc","desc","i","a","b","isOrderMixed","getSortComparator","order","getPivotTableRows","results","columnOrder","rowOrder","columnDimension","rowDimension","data","firstRow","buildEmptyMeasures","acc","reorderByAxis","axisOrder","axisDimension","fixedDimension","leaderRows","existing","x","restResults","resultRow","leaderRow","PivotTablePro","useTheme","i18nSetup","description","title","resolveI18nProps","displayNullAs","columnWidth","firstColumnWidth","colOrder","d","resultsColumnDimensionFillGaps","useFillGaps","resultsRowColumnDimensionFillGaps","useMemo","cardContentRef","useRef","pivotMeasures","pivotRowDimension","pivotColumnDimension","pivotColumnTotalsFor","pivotRowTotalsFor","jsx","ChartCard","PivotTable","i18n","meta","dataset","subInputGenericBoolean","dimensionWithDateBounds","genericString","genericNumber","maxResults","PivotTablePro_emb","defineComponent","inputs","loadData"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent as i } from "@embeddable.com/react";
|
|
2
|
-
import { V as n, l as r } from "./index-
|
|
3
|
-
import { v as s, w as d, F as m, G as c, _ as p } from "./component.constants-
|
|
4
|
-
import { M as u, S as g } from "./index-
|
|
2
|
+
import { V as n, l as r } from "./index-BR6dp5RX.js";
|
|
3
|
+
import { v as s, w as d, F as m, G as c, _ as p } from "./component.constants-h6et83ck.js";
|
|
4
|
+
import { M as u, S as g } from "./index-QOVQo6ZK.js";
|
|
5
5
|
const f = {
|
|
6
6
|
name: "SingleSelectFieldPro",
|
|
7
7
|
label: "Single Select Field",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { T as I, h as r, u as W, o as G, p as q, j as y, q as B, r as U, V as _, l as P, m as J } from "./index-
|
|
1
|
+
import { T as I, h as r, u as W, o as G, p as q, j as y, q as B, r as U, V as _, l as P, m as J } from "./index-BR6dp5RX.js";
|
|
2
2
|
import { useTheme as K, defineComponent as Q } from "@embeddable.com/react";
|
|
3
|
-
import { a as X, r as Y, i as Z, v as $, C as T, s as O, e as ee, F as ne, G as ae, g as te, d as ie, H as se, x as oe } from "./component.constants-
|
|
4
|
-
import { C as le } from "./ChartCard-
|
|
3
|
+
import { a as X, r as Y, i as Z, v as $, C as T, s as O, e as ee, F as ne, G as ae, g as te, d as ie, H as se, x as oe } from "./component.constants-h6et83ck.js";
|
|
4
|
+
import { C as le } from "./ChartCard-C7c2rTst.js";
|
|
5
5
|
import { useState as S, useRef as re, useCallback as ce, useEffect as g } from "react";
|
|
6
|
-
import { g as de } from "./formatter.utils-
|
|
6
|
+
import { g as de } from "./formatter.utils-DXzI4Hz_.js";
|
|
7
7
|
const me = (n) => {
|
|
8
8
|
var a;
|
|
9
9
|
const e = (a = n.inputs) == null ? void 0 : a.align;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as F, g as P } from "./charts.utils-
|
|
2
|
-
import { g as h } from "./formatter.utils-
|
|
1
|
+
import { r as F, g as P } from "./charts.utils-DAkS2VK1.js";
|
|
2
|
+
import { g as h } from "./formatter.utils-DXzI4Hz_.js";
|
|
3
3
|
import { g as p, a as g } from "./object.utils-D_Zzon-H.js";
|
|
4
|
-
import { g as T, a as v } from "./index-
|
|
4
|
+
import { g as T, a as v } from "./index-BR6dp5RX.js";
|
|
5
5
|
const B = (l, c) => {
|
|
6
6
|
var b;
|
|
7
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) => {
|
|
@@ -142,4 +142,4 @@ export {
|
|
|
142
142
|
B as b,
|
|
143
143
|
L as g
|
|
144
144
|
};
|
|
145
|
-
//# sourceMappingURL=bars.utils-
|
|
145
|
+
//# sourceMappingURL=bars.utils-JRnFN04m.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bars.utils-BU_k5fia.js","sources":["../src/components/charts/bars/bars.utils.ts"],"sourcesContent":["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 { 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.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","_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":"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"}
|
|
1
|
+
{"version":3,"file":"bars.utils-JRnFN04m.js","sources":["../src/components/charts/bars/bars.utils.ts"],"sourcesContent":["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 { 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.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","_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":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { E as is } from "./index-
|
|
2
|
-
import { a as ni, i as cn } from "./component.constants-
|
|
1
|
+
import { E as is } from "./index-BR6dp5RX.js";
|
|
2
|
+
import { a as ni, i as cn } from "./component.constants-h6et83ck.js";
|
|
3
3
|
import { d as Ee, u as ai, g as ss } from "./utc-B2gCnkBk.js";
|
|
4
4
|
import { i as ii, q as si } from "./quarterOfYear-wgcl4CRi.js";
|
|
5
|
-
import { g as os } from "./formatter.utils-
|
|
5
|
+
import { g as os } from "./formatter.utils-DXzI4Hz_.js";
|
|
6
6
|
var fs = {
|
|
7
7
|
"--em-core-border-radius--000": "0px",
|
|
8
8
|
"--em-core-border-radius--050": "2px",
|
|
@@ -17211,4 +17211,4 @@ export {
|
|
|
17211
17211
|
zm as g,
|
|
17212
17212
|
Hm as r
|
|
17213
17213
|
};
|
|
17214
|
-
//# sourceMappingURL=charts.utils-
|
|
17214
|
+
//# sourceMappingURL=charts.utils-DAkS2VK1.js.map
|