@embeddable.com/remarkable-ui 1.0.4 → 1.0.6
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/dist/BarChartDefaultHorizontalPro.js +30 -29
- package/dist/BarChartDefaultHorizontalPro.js.map +1 -1
- package/dist/BarChartDefaultPro.js +35 -34
- package/dist/BarChartDefaultPro.js.map +1 -1
- package/dist/BarChartGroupedHorizontalPro.js +29 -28
- package/dist/BarChartGroupedHorizontalPro.js.map +1 -1
- package/dist/BarChartGroupedPro.js +40 -39
- package/dist/BarChartGroupedPro.js.map +1 -1
- package/dist/BarChartStackedHorizontalPro.js +28 -27
- package/dist/BarChartStackedHorizontalPro.js.map +1 -1
- package/dist/BarChartStackedPro.js +47 -46
- package/dist/BarChartStackedPro.js.map +1 -1
- package/dist/ChartCard-FOSghcoD.js +127 -0
- package/dist/ChartCard-FOSghcoD.js.map +1 -0
- package/dist/Color.type.emb-CTiA_AzI.js +9 -0
- package/dist/Color.type.emb-CTiA_AzI.js.map +1 -0
- package/dist/ColorEditor.js +38 -0
- package/dist/ColorEditor.js.map +1 -0
- package/dist/ComparisonPeriod.type.emb-CQ63PFtq.js +14 -0
- package/dist/{ComparisonPeriod.type.emb-Dlysd_iF.js.map → ComparisonPeriod.type.emb-CQ63PFtq.js.map} +1 -1
- package/dist/ComparisonPeriodSelectFieldPro.js +33 -32
- package/dist/ComparisonPeriodSelectFieldPro.js.map +1 -1
- package/dist/DateRangeSelectFieldPro.js +10 -8
- package/dist/DateRangeSelectFieldPro.js.map +1 -1
- package/dist/DonutChartPro.js +13 -12
- package/dist/DonutChartPro.js.map +1 -1
- package/dist/DonutLabelChartPro.js +16 -15
- package/dist/DonutLabelChartPro.js.map +1 -1
- package/dist/{EditorCard-ncOGVWah.js → EditorCard-CB-re8Qn.js} +24 -23
- package/dist/EditorCard-CB-re8Qn.js.map +1 -0
- package/dist/{HeatMap-DvjtDRTL.js → HeatMap-DwXoxYyu.js} +33 -33
- package/dist/{HeatMap-DvjtDRTL.js.map → HeatMap-DwXoxYyu.js.map} +1 -1
- package/dist/HeatMapPro.js +84 -60
- package/dist/HeatMapPro.js.map +1 -1
- package/dist/KpiChart-lEsVao_M.js +110 -0
- package/dist/KpiChart-lEsVao_M.js.map +1 -0
- package/dist/KpiChartNumberComparisonPro.js +55 -53
- package/dist/KpiChartNumberComparisonPro.js.map +1 -1
- package/dist/KpiChartNumberPro.js +12 -11
- package/dist/KpiChartNumberPro.js.map +1 -1
- package/dist/LineChartComparisonDefaultPro.js +120 -112
- package/dist/LineChartComparisonDefaultPro.js.map +1 -1
- package/dist/LineChartDefaultPro.js +87 -84
- package/dist/LineChartDefaultPro.js.map +1 -1
- package/dist/LineChartGroupedPro.js +52 -51
- package/dist/LineChartGroupedPro.js.map +1 -1
- package/dist/MultiSelectFieldPro.js +10 -9
- package/dist/MultiSelectFieldPro.js.map +1 -1
- package/dist/PieChartPro.js +14 -13
- package/dist/PieChartPro.js.map +1 -1
- package/dist/{PivotTable-UDo7378U.js → PivotTable-DlBkWU2O.js} +8 -8
- package/dist/{PivotTable-UDo7378U.js.map → PivotTable-DlBkWU2O.js.map} +1 -1
- package/dist/PivotTablePro.js +48 -48
- package/dist/PivotTablePro.js.map +1 -1
- package/dist/SingleSelectField-ammJ2Zc2.js +110 -0
- package/dist/SingleSelectField-ammJ2Zc2.js.map +1 -0
- package/dist/SingleSelectFieldPro.js +9 -8
- package/dist/SingleSelectFieldPro.js.map +1 -1
- package/dist/TableChartPaginated.js +73 -72
- package/dist/TableChartPaginated.js.map +1 -1
- package/dist/TablePaginated-pVrIngVd.js +12448 -0
- package/dist/TablePaginated-pVrIngVd.js.map +1 -0
- package/dist/{bars.utils-DLuq19zt.js → bars.utils-8ka9OKUG.js} +4 -4
- package/dist/{bars.utils-DLuq19zt.js.map → bars.utils-8ka9OKUG.js.map} +1 -1
- package/dist/{charts.utils-VLkuIHmS.js → charts.utils-Cbyzr0nO.js} +16149 -16144
- package/dist/charts.utils-Cbyzr0nO.js.map +1 -0
- package/dist/component.constants-VpbbPSIL.js +5452 -0
- package/dist/component.constants-VpbbPSIL.js.map +1 -0
- package/dist/embeddable-components.json +15 -13
- package/dist/embeddable-theme-2b917.js +16739 -16736
- package/dist/{embeddable-types-363c8.js → embeddable-types-df460.js} +21 -17
- package/dist/embeddable-types.js.map +1 -1
- package/dist/{formatter.utils-Dza9buQ8.js → formatter.utils-BLz3TSY0.js} +2 -2
- package/dist/{formatter.utils-Dza9buQ8.js.map → formatter.utils-BLz3TSY0.js.map} +1 -1
- package/dist/index-B7Pv2FEr.js +48 -0
- package/dist/{index-DTedizV6.js.map → index-B7Pv2FEr.js.map} +1 -1
- package/dist/index-BYbp2vA7.js +57 -0
- package/dist/index-BYbp2vA7.js.map +1 -0
- package/dist/{index-Bv_AzW89.js → index-CCJCuW1J.js} +37 -36
- package/dist/index-CCJCuW1J.js.map +1 -0
- package/dist/index-DcyTRz2V.js +63 -0
- package/dist/{index-Cvk5RTZT.js.map → index-DcyTRz2V.js.map} +1 -1
- package/dist/{index-DiSLIUsa.js → index-DtmAIOuh.js} +25 -24
- package/dist/{index-DiSLIUsa.js.map → index-DtmAIOuh.js.map} +1 -1
- package/dist/index-mMCdUsGD.js +63 -0
- package/dist/{index-CHbc8CTj.js.map → index-mMCdUsGD.js.map} +1 -1
- package/dist/index.js +187 -181
- package/dist/index.js.map +1 -1
- package/dist/{pies.utils-BZEnXtqg.js → pies.utils-Cr-a3NjZ.js} +15 -14
- package/dist/{pies.utils-BZEnXtqg.js.map → pies.utils-Cr-a3NjZ.js.map} +1 -1
- package/dist/remarkable-pro/components/charts/kpis/KpiChartNumberComparisonPro/index.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts +2 -2
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts +6 -2
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts +2 -3
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts +0 -1
- package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts.map +1 -1
- package/dist/remarkable-pro/components/charts/tables/TableChartPaginated/index.d.ts.map +1 -1
- package/dist/remarkable-pro/components/component.constants.d.ts +0 -14
- package/dist/remarkable-pro/components/component.constants.d.ts.map +1 -1
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts +1 -0
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.d.ts.map +1 -1
- package/dist/remarkable-pro/editors/ColorEditor/index.d.ts +8 -0
- package/dist/remarkable-pro/editors/ColorEditor/index.d.ts.map +1 -0
- package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts +17 -0
- package/dist/remarkable-pro/theme/defaults/defaults.ChartCardMenu.constants.d.ts.map +1 -0
- package/dist/remarkable-pro/theme/i18n/translations/de.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/i18n/translations/en.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/theme.constants.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/theme.types.d.ts +2 -4
- package/dist/remarkable-pro/theme/theme.types.d.ts.map +1 -1
- package/dist/remarkable-pro/theme/utils/export.utils.d.ts +4 -4
- package/dist/remarkable-pro/theme/utils/export.utils.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/chartjs.cartesian.constants.d.ts +5 -5
- package/dist/remarkable-ui/components/charts/chartjs.cartesian.constants.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/chartjs.constants.d.ts +1 -1
- package/dist/remarkable-ui/components/charts/chartjs.constants.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts +2 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.stories.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts +2 -1
- package/dist/remarkable-ui/components/charts/kpis/KpiChart.types.d.ts.map +1 -1
- package/dist/remarkable-ui/components/charts/kpis/components/KpiChartChange.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts +1 -1
- package/dist/remarkable-ui/components/editors/selects/MultiSelectField/MultiSelectField.stories.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts +3 -3
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts +3 -3
- package/dist/remarkable-ui/components/editors/selects/SingleSelectField/SingleSelectField.stories.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts +1 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldContent.utils.d.ts.map +1 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +1 -0
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectFieldOptions/SelectFieldOption/SelectFieldOption.d.ts.map +1 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts +8 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.d.ts.map +1 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts +10 -0
- package/dist/remarkable-ui/components/shared/Overlay/Overlay.stories.d.ts.map +1 -0
- package/dist/remarkable-ui/index.d.ts +4 -5
- package/dist/remarkable-ui/index.d.ts.map +1 -1
- package/dist/remarkable-ui.css +1 -1
- package/dist/{timeRange.utils-Yy_Z93Kv.js → timeRange.utils-AEhW9Gu4.js} +2 -2
- package/dist/{timeRange.utils-Yy_Z93Kv.js.map → timeRange.utils-AEhW9Gu4.js.map} +1 -1
- package/package.json +1 -1
- package/dist/ChartCard-DE8akLvk.js +0 -122
- package/dist/ChartCard-DE8akLvk.js.map +0 -1
- package/dist/ComparisonPeriod.type.emb-Dlysd_iF.js +0 -14
- package/dist/EditorCard-ncOGVWah.js.map +0 -1
- package/dist/KpiChart-B9tgnF4B.js +0 -105
- package/dist/KpiChart-B9tgnF4B.js.map +0 -1
- package/dist/SingleSelectField-BTpa_tLg.js +0 -109
- package/dist/SingleSelectField-BTpa_tLg.js.map +0 -1
- package/dist/charts.utils-VLkuIHmS.js.map +0 -1
- package/dist/component.constants-BfTb5vNm.js +0 -17898
- package/dist/component.constants-BfTb5vNm.js.map +0 -1
- package/dist/index-9-Jj7smT.js +0 -56
- package/dist/index-9-Jj7smT.js.map +0 -1
- package/dist/index-Bv_AzW89.js.map +0 -1
- package/dist/index-CHbc8CTj.js +0 -62
- package/dist/index-Cvk5RTZT.js +0 -62
- package/dist/index-DTedizV6.js +0 -47
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts +0 -20
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts +0 -3
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.constants.d.ts.map +0 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts +0 -16
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts +0 -16
- package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCardMenuPro/ChartCardMenuPro.types.d.ts.map +0 -1
- package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts +0 -12
- package/dist/remarkable-pro/components/editors/ComparisonPeriodSelectFieldPro/index.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts +0 -17
- package/dist/remarkable-pro/components/editors/DateRangeSelectFieldPro/index.stories.d.ts.map +0 -1
- package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts +0 -12
- package/dist/remarkable-pro/components/editors/shared/EditorCard/EditorCard.stories.d.ts.map +0 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldCategory/SelectFieldCategory.d.ts.map +0 -1
- package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/SelectListOptions/SelectFieldOption/SelectFieldOption.d.ts.map +0 -1
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts +0 -3
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.d.ts.map +0 -1
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts +0 -7
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.stories.d.ts.map +0 -1
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts +0 -7
- package/dist/remarkable-ui/components/shared/PageOverlay/PageOverlay.types.d.ts.map +0 -1
- /package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/{SelectListOptions → SelectFieldOptions}/SelectFieldCategory/SelectFieldCategory.d.ts +0 -0
- /package/dist/remarkable-ui/components/editors/selects/shared/SelectFieldContent/{SelectListOptions → SelectFieldOptions}/SelectFieldOption/SelectFieldOption.d.ts +0 -0
|
@@ -1,37 +1,38 @@
|
|
|
1
1
|
import { useTheme as R, defineComponent as P } from "@embeddable.com/react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { i as $, r as v, d as F, q as k, C as y, a as S, u as j, t as B, b as O, v as T, s as X, c as K, e as U, f as Y, x as q, y as E, l as N, n as W, o as _ } from "./component.constants-VpbbPSIL.js";
|
|
3
|
+
import { a as w, m as z, j as V, L as H, V as D, l as J } from "./TablePaginated-pVrIngVd.js";
|
|
4
|
+
import { C as Q } from "./ChartCard-FOSghcoD.js";
|
|
5
|
+
import { g as M } from "./formatter.utils-BLz3TSY0.js";
|
|
5
6
|
import { g as Z, a as G } from "./object.utils-D_Zzon-H.js";
|
|
6
7
|
import { s as I } from "./color.utils-CVyp-fGP.js";
|
|
7
8
|
import "react";
|
|
8
9
|
import { g as ee } from "./lines.utils-CFEUUo4k.js";
|
|
9
10
|
import { u as ae } from "./charts.fillGaps.hooks-5WclK2CD.js";
|
|
10
|
-
const se = (e,
|
|
11
|
-
const c = M(
|
|
11
|
+
const se = (e, o) => {
|
|
12
|
+
const c = M(o), { data: t = [], dimension: l, groupDimension: r, measure: n, hasMinMaxYAxisRange: u } = e, m = [...new Set(t.map((a) => a[l.name]).filter((a) => a != null))].sort(), d = [...new Set(t.map((a) => a[r.name]))].filter((a) => a != null), s = Z(o), i = d.map((a, x) => {
|
|
12
13
|
var p;
|
|
13
14
|
const b = G(
|
|
14
15
|
`${s}.charts.backgroundColors`,
|
|
15
16
|
`${r.name}.${a}`,
|
|
16
|
-
|
|
17
|
+
o.charts.backgroundColors ?? w,
|
|
17
18
|
x
|
|
18
19
|
), h = G(
|
|
19
20
|
`${s}.charts.borderColors`,
|
|
20
21
|
`${r.name}.${a}`,
|
|
21
|
-
|
|
22
|
+
o.charts.borderColors ?? w,
|
|
22
23
|
x
|
|
23
24
|
);
|
|
24
25
|
return {
|
|
25
|
-
clip:
|
|
26
|
+
clip: u,
|
|
26
27
|
label: c.data(r, a),
|
|
27
28
|
rawLabel: a,
|
|
28
29
|
backgroundColor: I(b, 0.5),
|
|
29
30
|
pointBackgroundColor: b,
|
|
30
31
|
fill: (p = n.inputs) == null ? void 0 : p.fillUnderLine,
|
|
31
32
|
borderColor: h,
|
|
32
|
-
data:
|
|
33
|
+
data: m.map((C) => {
|
|
33
34
|
var f;
|
|
34
|
-
const g =
|
|
35
|
+
const g = t.find(
|
|
35
36
|
(A) => A[r.name] === a && A[l.name] === C
|
|
36
37
|
);
|
|
37
38
|
return (g == null ? void 0 : g[n.name]) ?? ((f = n.inputs) != null && f.connectGaps ? 0 : null);
|
|
@@ -39,12 +40,12 @@ const se = (e, t) => {
|
|
|
39
40
|
};
|
|
40
41
|
});
|
|
41
42
|
return {
|
|
42
|
-
labels:
|
|
43
|
+
labels: m,
|
|
43
44
|
datasets: i
|
|
44
45
|
};
|
|
45
|
-
}, ne = (e,
|
|
46
|
-
var
|
|
47
|
-
const { dimension: c, data:
|
|
46
|
+
}, ne = (e, o) => {
|
|
47
|
+
var m, d;
|
|
48
|
+
const { dimension: c, data: t, measure: l, onLineClicked: r } = e, n = M(o), u = {
|
|
48
49
|
plugins: {
|
|
49
50
|
datalabels: {
|
|
50
51
|
labels: {
|
|
@@ -71,8 +72,8 @@ const se = (e, t) => {
|
|
|
71
72
|
x: {
|
|
72
73
|
ticks: {
|
|
73
74
|
callback: (s) => {
|
|
74
|
-
if (!
|
|
75
|
-
const i =
|
|
75
|
+
if (!t || !t.labels) return;
|
|
76
|
+
const i = t.labels[Number(s)];
|
|
76
77
|
return n.data(c, i);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -84,18 +85,18 @@ const se = (e, t) => {
|
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
};
|
|
87
|
-
return
|
|
88
|
+
return z(
|
|
88
89
|
ee({ onLineClicked: r }),
|
|
89
|
-
|
|
90
|
-
((d = (
|
|
90
|
+
u,
|
|
91
|
+
((d = (m = o.charts) == null ? void 0 : m.lineChartGroupedPro) == null ? void 0 : d.options) || {}
|
|
91
92
|
);
|
|
92
|
-
},
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
const { title: c, description:
|
|
93
|
+
}, oe = (e) => {
|
|
94
|
+
const o = R();
|
|
95
|
+
$(o);
|
|
96
|
+
const { title: c, description: t, xAxisLabel: l, yAxisLabel: r } = v(e), {
|
|
96
97
|
measure: n,
|
|
97
|
-
xAxis:
|
|
98
|
-
groupBy:
|
|
98
|
+
xAxis: u,
|
|
99
|
+
groupBy: m,
|
|
99
100
|
reverseXAxis: d,
|
|
100
101
|
showLegend: s,
|
|
101
102
|
showLogarithmicScale: i,
|
|
@@ -110,26 +111,26 @@ const se = (e, t) => {
|
|
|
110
111
|
}), C = se(
|
|
111
112
|
{
|
|
112
113
|
data: p.data,
|
|
113
|
-
dimension:
|
|
114
|
-
groupDimension:
|
|
114
|
+
dimension: u,
|
|
115
|
+
groupDimension: m,
|
|
115
116
|
measure: n,
|
|
116
117
|
hasMinMaxYAxisRange: h != null || b != null
|
|
117
118
|
},
|
|
118
|
-
|
|
119
|
+
o
|
|
119
120
|
), g = ne(
|
|
120
|
-
{ data: C, dimension:
|
|
121
|
-
|
|
121
|
+
{ data: C, dimension: u, measure: n, onLineClicked: L },
|
|
122
|
+
o
|
|
122
123
|
);
|
|
123
|
-
return /* @__PURE__ */
|
|
124
|
+
return /* @__PURE__ */ V.jsx(
|
|
124
125
|
Q,
|
|
125
126
|
{
|
|
126
127
|
data: p,
|
|
127
|
-
dimensionsAndMeasures: [n,
|
|
128
|
+
dimensionsAndMeasures: [n, u, m],
|
|
128
129
|
errorMessage: p.error,
|
|
129
|
-
subtitle:
|
|
130
|
+
subtitle: t,
|
|
130
131
|
title: c,
|
|
131
|
-
children: /* @__PURE__ */
|
|
132
|
-
|
|
132
|
+
children: /* @__PURE__ */ V.jsx(
|
|
133
|
+
H,
|
|
133
134
|
{
|
|
134
135
|
data: C,
|
|
135
136
|
reverseXAxis: d,
|
|
@@ -146,34 +147,34 @@ const se = (e, t) => {
|
|
|
146
147
|
)
|
|
147
148
|
}
|
|
148
149
|
);
|
|
149
|
-
},
|
|
150
|
+
}, te = {
|
|
150
151
|
name: "LineChartGroupedPro",
|
|
151
152
|
label: "Line Chart - Grouped",
|
|
152
153
|
category: "Line Charts",
|
|
153
154
|
inputs: [
|
|
154
|
-
|
|
155
|
+
F,
|
|
155
156
|
{
|
|
156
|
-
...
|
|
157
|
+
...k,
|
|
157
158
|
inputs: [
|
|
158
|
-
...
|
|
159
|
-
{ ...
|
|
160
|
-
{ ...
|
|
159
|
+
...k.inputs,
|
|
160
|
+
{ ...y, name: "fillUnderLine", label: "Fill under line" },
|
|
161
|
+
{ ...y, name: "connectGaps", label: "Connect gaps", defaultValue: !0 }
|
|
161
162
|
]
|
|
162
163
|
},
|
|
163
|
-
{ ...
|
|
164
|
-
{ ...
|
|
164
|
+
{ ...S, name: "xAxis", label: "X-axis" },
|
|
165
|
+
{ ...j, name: "groupBy", label: "Group by" },
|
|
166
|
+
B,
|
|
167
|
+
O,
|
|
165
168
|
T,
|
|
166
169
|
X,
|
|
167
|
-
E,
|
|
168
170
|
K,
|
|
169
|
-
N,
|
|
170
171
|
U,
|
|
171
172
|
Y,
|
|
172
173
|
q,
|
|
173
|
-
|
|
174
|
+
E,
|
|
175
|
+
N,
|
|
174
176
|
W,
|
|
175
|
-
_
|
|
176
|
-
H
|
|
177
|
+
_
|
|
177
178
|
],
|
|
178
179
|
events: [
|
|
179
180
|
{
|
|
@@ -193,7 +194,7 @@ const se = (e, t) => {
|
|
|
193
194
|
]
|
|
194
195
|
}
|
|
195
196
|
]
|
|
196
|
-
},
|
|
197
|
+
}, xe = P(oe, te, {
|
|
197
198
|
props: (e) => ({
|
|
198
199
|
...e,
|
|
199
200
|
results: J({
|
|
@@ -210,7 +211,7 @@ const se = (e, t) => {
|
|
|
210
211
|
}
|
|
211
212
|
});
|
|
212
213
|
export {
|
|
213
|
-
|
|
214
|
-
|
|
214
|
+
xe as default,
|
|
215
|
+
te as meta
|
|
215
216
|
};
|
|
216
217
|
//# sourceMappingURL=LineChartGroupedPro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineChartGroupedPro.js","sources":["../src/remarkable-pro/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.utils.ts","../src/remarkable-pro/components/charts/lines/LineChartGroupedPro/index.tsx","../src/remarkable-pro/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.emb.ts"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { mergician } from 'mergician';\nimport { getObjectStableKey } from '../../../../utils.ts/object.utils';\nimport { getColor } from '../../../../theme/styles/styles.utils';\nimport { setColorAlpha } from '../../../../utils.ts/color.utils';\nimport { chartContrastColors } from '../../../../../remarkable-ui';\nimport { getLineChartProOptions, LineChartProOptionsClick } from '../lines.utils';\n\nexport const getLineChartGroupedProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n hasMinMaxYAxisRange: boolean;\n },\n theme: Theme,\n): ChartData<'line'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure, hasMinMaxYAxisRange } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter((d) => d != null))].sort();\n const groupBy = [...new Set(data.map((d) => d[groupDimension.name]))].filter((d) => d != null);\n\n const themeKey = getObjectStableKey(theme);\n\n const datasets: ChartData<'line'>['datasets'] = groupBy.map((groupByItem, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n const dataset = {\n clip: hasMinMaxYAxisRange,\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor: setColorAlpha(backgroundColor, 0.5),\n pointBackgroundColor: backgroundColor,\n fill: measure.inputs?.['fillUnderLine'],\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimension.name] === groupByItem && d[dimension.name] === axisItem,\n );\n return record?.[measure.name] ?? (measure.inputs?.['connectGaps'] ? 0 : null);\n }),\n } as ChartData<'line'>['datasets'][number];\n\n return dataset;\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getLineChartGroupedProOptions = (\n options: {\n dimension: Dimension;\n measure: Measure;\n data: ChartData<'line'>;\n onLineClicked: LineChartProOptionsClick;\n },\n theme: Theme,\n): ChartOptions<'line'> => {\n const { dimension, data, measure, onLineClicked } = options;\n const themeFormatter = getThemeFormatter(theme);\n\n const lineChartOptions: ChartOptions<'line'> = {\n plugins: {\n datalabels: {\n labels: {\n value: {\n formatter: (value: string | number) => {\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n label: (context) => {\n const raw = context.raw as number;\n return `${context.dataset.label}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n };\n\n return mergician(\n getLineChartProOptions({ onLineClicked }),\n lineChartOptions,\n theme.charts?.lineChartGroupedPro?.options || {},\n );\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport {\n getLineChartGroupedProData,\n getLineChartGroupedProOptions,\n} from './LineChartGroupedPro.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { LineChartProOptionsClick } from '../lines.utils';\nimport { LineChart } from '../../../../../remarkable-ui';\n\nexport type LineChartGroupedProPropsOnLineClicked = {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n};\n\ntype LineChartGroupedProProp = {\n description: string;\n xAxis: Dimension;\n groupBy: Dimension;\n measure: Measure;\n results: DataResponse;\n reverseXAxis: boolean;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n yAxisRangeMax?: number;\n yAxisRangeMin?: number;\n onLineClicked: LineChartProOptionsClick;\n};\n\nconst LineChartGroupedPro = (props: LineChartGroupedProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description, xAxisLabel, yAxisLabel } = resolveI18nProps(props);\n const {\n measure,\n xAxis,\n groupBy,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n yAxisRangeMax,\n yAxisRangeMin,\n onLineClicked,\n } = props;\n\n const results = useFillGaps({\n results: props.results,\n dimension: props.xAxis,\n });\n\n const data = getLineChartGroupedProData(\n {\n data: results.data,\n dimension: xAxis,\n groupDimension: groupBy,\n measure,\n hasMinMaxYAxisRange: Boolean(yAxisRangeMin != null || yAxisRangeMax != null),\n },\n\n theme,\n );\n const options = getLineChartGroupedProOptions(\n { data, dimension: xAxis, measure, onLineClicked },\n theme,\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[measure, xAxis, groupBy]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <LineChart\n data={data}\n reverseXAxis={reverseXAxis}\n showLegend={showLegend}\n showLogarithmicScale={showLogarithmicScale}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n yAxisRangeMax={yAxisRangeMax}\n yAxisRangeMin={yAxisRangeMin}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default LineChartGroupedPro;\n","import { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport {\n dataset,\n description,\n dimension,\n dimensionWithDateBounds,\n genericBoolean,\n maxResults,\n measure,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n title,\n xAxisLabel,\n yAxisLabel,\n yAxisRangeMax,\n yAxisRangeMin,\n} from '../../../component.constants';\nimport LineChartGroupedPro from './index';\nimport { loadData, Value } from '@embeddable.com/core';\nimport { LineChartProOptionsClickArg } from '../lines.utils';\n\nexport const meta = {\n name: 'LineChartGroupedPro',\n label: 'Line Chart - Grouped',\n category: 'Line Charts',\n inputs: [\n dataset,\n {\n ...measure,\n inputs: [\n ...measure.inputs,\n { ...genericBoolean, name: 'fillUnderLine', label: 'Fill under line' },\n { ...genericBoolean, name: 'connectGaps', label: 'Connect gaps', defaultValue: true },\n ],\n },\n { ...dimensionWithDateBounds, name: 'xAxis', label: 'X-axis' },\n { ...dimension, name: 'groupBy', label: 'Group by' },\n title,\n description,\n maxResults,\n showLegend,\n showTooltips,\n showValueLabels,\n showLogarithmicScale,\n xAxisLabel,\n yAxisLabel,\n reverseXAxis,\n yAxisRangeMin,\n yAxisRangeMax,\n ],\n events: [\n {\n name: 'onLineClicked',\n label: 'A line is clicked',\n properties: [\n {\n name: 'axisDimensionValue',\n label: 'Clicked Axis Dimension Value',\n type: 'string',\n },\n {\n name: 'groupingDimensionValue',\n label: 'Clicked Grouping Dimension Value',\n type: 'string',\n },\n ],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(LineChartGroupedPro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n results: loadData({\n limit: inputs.maxResults,\n from: inputs.dataset,\n select: [inputs.xAxis, inputs.groupBy, inputs.measure],\n }),\n };\n },\n events: {\n onLineClicked: (value: LineChartProOptionsClickArg) => {\n return {\n axisDimensionValue: value.dimensionValue || Value.noFilter(),\n groupingDimensionValue: value.groupingDimensionValue || Value.noFilter(),\n };\n },\n },\n});\n"],"names":["getLineChartGroupedProData","props","theme","themeFormatter","getThemeFormatter","data","dimension","groupDimension","measure","hasMinMaxYAxisRange","axis","d","groupBy","themeKey","getObjectStableKey","datasets","groupByItem","index","backgroundColor","getColor","chartContrastColors","borderColor","setColorAlpha","_a","axisItem","record","getLineChartGroupedProOptions","options","onLineClicked","lineChartOptions","value","context","label","raw","mergician","getLineChartProOptions","_b","LineChartGroupedPro","useTheme","i18nSetup","title","description","xAxisLabel","yAxisLabel","resolveI18nProps","xAxis","reverseXAxis","showLegend","showLogarithmicScale","showTooltips","showValueLabels","yAxisRangeMax","yAxisRangeMin","results","useFillGaps","jsx","ChartCard","LineChart","meta","dataset","genericBoolean","dimensionWithDateBounds","maxResults","LineChartGroupedPro_emb","defineComponent","inputs","loadData","Value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LineChartGroupedPro.js","sources":["../src/remarkable-pro/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.utils.ts","../src/remarkable-pro/components/charts/lines/LineChartGroupedPro/index.tsx","../src/remarkable-pro/components/charts/lines/LineChartGroupedPro/LineChartGroupedPro.emb.ts"],"sourcesContent":["import { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../../theme/formatter/formatter.utils';\nimport { mergician } from 'mergician';\nimport { getObjectStableKey } from '../../../../utils.ts/object.utils';\nimport { getColor } from '../../../../theme/styles/styles.utils';\nimport { setColorAlpha } from '../../../../utils.ts/color.utils';\nimport { chartContrastColors } from '../../../../../remarkable-ui';\nimport { getLineChartProOptions, LineChartProOptionsClick } from '../lines.utils';\n\nexport const getLineChartGroupedProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n hasMinMaxYAxisRange: boolean;\n },\n theme: Theme,\n): ChartData<'line'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure, hasMinMaxYAxisRange } = props;\n\n const axis = [...new Set(data.map((d) => d[dimension.name]).filter((d) => d != null))].sort();\n const groupBy = [...new Set(data.map((d) => d[groupDimension.name]))].filter((d) => d != null);\n\n const themeKey = getObjectStableKey(theme);\n\n const datasets: ChartData<'line'>['datasets'] = groupBy.map((groupByItem, index) => {\n const backgroundColor = getColor(\n `${themeKey}.charts.backgroundColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.backgroundColors ?? chartContrastColors,\n index,\n );\n\n const borderColor = getColor(\n `${themeKey}.charts.borderColors`,\n `${groupDimension.name}.${groupByItem}`,\n theme.charts.borderColors ?? chartContrastColors,\n index,\n );\n\n const dataset = {\n clip: hasMinMaxYAxisRange,\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor: setColorAlpha(backgroundColor, 0.5),\n pointBackgroundColor: backgroundColor,\n fill: measure.inputs?.['fillUnderLine'],\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimension.name] === groupByItem && d[dimension.name] === axisItem,\n );\n return record?.[measure.name] ?? (measure.inputs?.['connectGaps'] ? 0 : null);\n }),\n } as ChartData<'line'>['datasets'][number];\n\n return dataset;\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getLineChartGroupedProOptions = (\n options: {\n dimension: Dimension;\n measure: Measure;\n data: ChartData<'line'>;\n onLineClicked: LineChartProOptionsClick;\n },\n theme: Theme,\n): ChartOptions<'line'> => {\n const { dimension, data, measure, onLineClicked } = options;\n const themeFormatter = getThemeFormatter(theme);\n\n const lineChartOptions: ChartOptions<'line'> = {\n plugins: {\n datalabels: {\n labels: {\n value: {\n formatter: (value: string | number) => {\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n label: (context) => {\n const raw = context.raw as number;\n return `${context.dataset.label}: ${themeFormatter.data(measure, raw)}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n };\n\n return mergician(\n getLineChartProOptions({ onLineClicked }),\n lineChartOptions,\n theme.charts?.lineChartGroupedPro?.options || {},\n );\n};\n","import { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../../theme/theme.types';\nimport { DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { i18nSetup } from '../../../../theme/i18n/i18n';\nimport { resolveI18nProps } from '../../../component.utils';\nimport { ChartCard } from '../../shared/ChartCard/ChartCard';\nimport {\n getLineChartGroupedProData,\n getLineChartGroupedProOptions,\n} from './LineChartGroupedPro.utils';\nimport { useFillGaps } from '../../charts.fillGaps.hooks';\nimport { LineChartProOptionsClick } from '../lines.utils';\nimport { LineChart } from '../../../../../remarkable-ui';\n\nexport type LineChartGroupedProPropsOnLineClicked = {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n};\n\ntype LineChartGroupedProProp = {\n description: string;\n xAxis: Dimension;\n groupBy: Dimension;\n measure: Measure;\n results: DataResponse;\n reverseXAxis: boolean;\n showLegend: boolean;\n showLogarithmicScale: boolean;\n showTooltips: boolean;\n showValueLabels: boolean;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n yAxisRangeMax?: number;\n yAxisRangeMin?: number;\n onLineClicked: LineChartProOptionsClick;\n};\n\nconst LineChartGroupedPro = (props: LineChartGroupedProProp) => {\n const theme: Theme = useTheme() as Theme;\n i18nSetup(theme);\n\n const { title, description, xAxisLabel, yAxisLabel } = resolveI18nProps(props);\n const {\n measure,\n xAxis,\n groupBy,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n yAxisRangeMax,\n yAxisRangeMin,\n onLineClicked,\n } = props;\n\n const results = useFillGaps({\n results: props.results,\n dimension: props.xAxis,\n });\n\n const data = getLineChartGroupedProData(\n {\n data: results.data,\n dimension: xAxis,\n groupDimension: groupBy,\n measure,\n hasMinMaxYAxisRange: Boolean(yAxisRangeMin != null || yAxisRangeMax != null),\n },\n\n theme,\n );\n const options = getLineChartGroupedProOptions(\n { data, dimension: xAxis, measure, onLineClicked },\n theme,\n );\n\n return (\n <ChartCard\n data={results}\n dimensionsAndMeasures={[measure, xAxis, groupBy]}\n errorMessage={results.error}\n subtitle={description}\n title={title}\n >\n <LineChart\n data={data}\n reverseXAxis={reverseXAxis}\n showLegend={showLegend}\n showLogarithmicScale={showLogarithmicScale}\n showTooltips={showTooltips}\n showValueLabels={showValueLabels}\n xAxisLabel={xAxisLabel}\n yAxisLabel={yAxisLabel}\n yAxisRangeMax={yAxisRangeMax}\n yAxisRangeMin={yAxisRangeMin}\n options={options}\n />\n </ChartCard>\n );\n};\n\nexport default LineChartGroupedPro;\n","import { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport {\n dataset,\n description,\n dimension,\n dimensionWithDateBounds,\n genericBoolean,\n maxResults,\n measure,\n reverseXAxis,\n showLegend,\n showLogarithmicScale,\n showTooltips,\n showValueLabels,\n title,\n xAxisLabel,\n yAxisLabel,\n yAxisRangeMax,\n yAxisRangeMin,\n} from '../../../component.constants';\nimport LineChartGroupedPro from './index';\nimport { loadData, Value } from '@embeddable.com/core';\nimport { LineChartProOptionsClickArg } from '../lines.utils';\n\nexport const meta = {\n name: 'LineChartGroupedPro',\n label: 'Line Chart - Grouped',\n category: 'Line Charts',\n inputs: [\n dataset,\n {\n ...measure,\n inputs: [\n ...measure.inputs,\n { ...genericBoolean, name: 'fillUnderLine', label: 'Fill under line' },\n { ...genericBoolean, name: 'connectGaps', label: 'Connect gaps', defaultValue: true },\n ],\n },\n { ...dimensionWithDateBounds, name: 'xAxis', label: 'X-axis' },\n { ...dimension, name: 'groupBy', label: 'Group by' },\n title,\n description,\n maxResults,\n showLegend,\n showTooltips,\n showValueLabels,\n showLogarithmicScale,\n xAxisLabel,\n yAxisLabel,\n reverseXAxis,\n yAxisRangeMin,\n yAxisRangeMax,\n ],\n events: [\n {\n name: 'onLineClicked',\n label: 'A line is clicked',\n properties: [\n {\n name: 'axisDimensionValue',\n label: 'Clicked Axis Dimension Value',\n type: 'string',\n },\n {\n name: 'groupingDimensionValue',\n label: 'Clicked Grouping Dimension Value',\n type: 'string',\n },\n ],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(LineChartGroupedPro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n results: loadData({\n limit: inputs.maxResults,\n from: inputs.dataset,\n select: [inputs.xAxis, inputs.groupBy, inputs.measure],\n }),\n };\n },\n events: {\n onLineClicked: (value: LineChartProOptionsClickArg) => {\n return {\n axisDimensionValue: value.dimensionValue || Value.noFilter(),\n groupingDimensionValue: value.groupingDimensionValue || Value.noFilter(),\n };\n },\n },\n});\n"],"names":["getLineChartGroupedProData","props","theme","themeFormatter","getThemeFormatter","data","dimension","groupDimension","measure","hasMinMaxYAxisRange","axis","d","groupBy","themeKey","getObjectStableKey","datasets","groupByItem","index","backgroundColor","getColor","chartContrastColors","borderColor","setColorAlpha","_a","axisItem","record","getLineChartGroupedProOptions","options","onLineClicked","lineChartOptions","value","context","label","raw","mergician","getLineChartProOptions","_b","LineChartGroupedPro","useTheme","i18nSetup","title","description","xAxisLabel","yAxisLabel","resolveI18nProps","xAxis","reverseXAxis","showLegend","showLogarithmicScale","showTooltips","showValueLabels","yAxisRangeMax","yAxisRangeMin","results","useFillGaps","jsx","ChartCard","LineChart","meta","dataset","genericBoolean","dimensionWithDateBounds","maxResults","LineChartGroupedPro_emb","defineComponent","inputs","loadData","Value"],"mappings":";;;;;;;;;;AAWO,MAAMA,KAA6B,CACxCC,GAOAC,MACsB;AACtB,QAAMC,IAAiBC,EAAkBF,CAAK,GACxC,EAAE,MAAAG,IAAO,IAAI,WAAAC,GAAW,gBAAAC,GAAgB,SAAAC,GAAS,qBAAAC,MAAwBR,GAEzES,IAAO,CAAC,GAAG,IAAI,IAAIL,EAAK,IAAI,CAACM,MAAMA,EAAEL,EAAU,IAAI,CAAC,EAAE,OAAO,CAACK,MAAMA,KAAK,IAAI,CAAC,CAAC,EAAE,KAAA,GACjFC,IAAU,CAAC,GAAG,IAAI,IAAIP,EAAK,IAAI,CAACM,MAAMA,EAAEJ,EAAe,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAACI,MAAMA,KAAK,IAAI,GAEvFE,IAAWC,EAAmBZ,CAAK,GAEnCa,IAA0CH,EAAQ,IAAI,CAACI,GAAaC,MAAU;;AAClF,UAAMC,IAAkBC;AAAA,MACtB,GAAGN,CAAQ;AAAA,MACX,GAAGN,EAAe,IAAI,IAAIS,CAAW;AAAA,MACrCd,EAAM,OAAO,oBAAoBkB;AAAA,MACjCH;AAAA,IAAA,GAGII,IAAcF;AAAA,MAClB,GAAGN,CAAQ;AAAA,MACX,GAAGN,EAAe,IAAI,IAAIS,CAAW;AAAA,MACrCd,EAAM,OAAO,gBAAgBkB;AAAA,MAC7BH;AAAA,IAAA;AAmBF,WAhBgB;AAAA,MACd,MAAMR;AAAA,MACN,OAAON,EAAe,KAAKI,GAAgBS,CAAW;AAAA,MACtD,UAAUA;AAAA,MACV,iBAAiBM,EAAcJ,GAAiB,GAAG;AAAA,MACnD,sBAAsBA;AAAA,MACtB,OAAMK,IAAAf,EAAQ,WAAR,gBAAAe,EAAiB;AAAA,MACvB,aAAAF;AAAA,MACA,MAAMX,EAAK,IAAI,CAACc,MAAa;;AAC3B,cAAMC,IAASpB,EAAK;AAAA,UAClB,CAACM,MAAMA,EAAEJ,EAAe,IAAI,MAAMS,KAAeL,EAAEL,EAAU,IAAI,MAAMkB;AAAA,QAAA;AAEzE,gBAAOC,KAAA,gBAAAA,EAASjB,EAAQ,YAAUe,IAAAf,EAAQ,WAAR,QAAAe,EAAiB,cAAiB,IAAI;AAAA,MAC1E,CAAC;AAAA,IAAA;AAAA,EAIL,CAAC;AAED,SAAO;AAAA,IACL,QAAQb;AAAA,IACR,UAAAK;AAAA,EAAA;AAEJ,GAEaW,KAAgC,CAC3CC,GAMAzB,MACyB;;AACzB,QAAM,EAAE,WAAAI,GAAW,MAAAD,GAAM,SAAAG,GAAS,eAAAoB,MAAkBD,GAC9CxB,IAAiBC,EAAkBF,CAAK,GAExC2B,IAAyC;AAAA,IAC7C,SAAS;AAAA,MACP,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,WAAW,CAACC,MACH3B,EAAe,KAAKK,GAASsB,CAAK;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AAAA,MAEF,SAAS;AAAA,QACP,WAAW;AAAA,UACT,OAAO,CAACC,MAAY;;AAClB,kBAAMC,KAAQT,IAAAQ,EAAQ,CAAC,MAAT,gBAAAR,EAAY;AAC1B,mBAAOpB,EAAe,KAAKG,GAAW0B,CAAK;AAAA,UAC7C;AAAA,UACA,OAAO,CAACD,MAAY;AAClB,kBAAME,IAAMF,EAAQ;AACpB,mBAAO,GAAGA,EAAQ,QAAQ,KAAK,KAAK5B,EAAe,KAAKK,GAASyB,CAAG,CAAC;AAAA,UACvE;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,IAEF,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACH,MAAU;AACnB,gBAAI,CAACzB,KAAQ,CAACA,EAAK,OAAQ;AAE3B,kBAAM2B,IAAQ3B,EAAK,OAAO,OAAOyB,CAAK,CAAC;AACvC,mBAAO3B,EAAe,KAAKG,GAAW0B,CAAK;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACF,MACF3B,EAAe,KAAKK,GAASsB,CAAK;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGF,SAAOI;AAAA,IACLC,GAAuB,EAAE,eAAAP,GAAe;AAAA,IACxCC;AAAA,MACAO,KAAAb,IAAArB,EAAM,WAAN,gBAAAqB,EAAc,wBAAd,gBAAAa,EAAmC,YAAW,CAAA;AAAA,EAAC;AAEnD,GC7FMC,KAAsB,CAACpC,MAAmC;AAC9D,QAAMC,IAAeoC,EAAA;AACrB,EAAAC,EAAUrC,CAAK;AAEf,QAAM,EAAE,OAAAsC,GAAO,aAAAC,GAAa,YAAAC,GAAY,YAAAC,EAAA,IAAeC,EAAiB3C,CAAK,GACvE;AAAA,IACJ,SAAAO;AAAA,IACA,OAAAqC;AAAA,IACA,SAAAjC;AAAA,IACA,cAAAkC;AAAA,IACA,YAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAC;AAAA,IACA,eAAAxB;AAAA,EAAA,IACE3B,GAEEoD,IAAUC,GAAY;AAAA,IAC1B,SAASrD,EAAM;AAAA,IACf,WAAWA,EAAM;AAAA,EAAA,CAClB,GAEKI,IAAOL;AAAA,IACX;AAAA,MACE,MAAMqD,EAAQ;AAAA,MACd,WAAWR;AAAA,MACX,gBAAgBjC;AAAA,MAChB,SAAAJ;AAAA,MACA,qBAA6B4C,KAAiB,QAAQD,KAAiB;AAAA,IAAI;AAAA,IAG7EjD;AAAA,EAAA,GAEIyB,IAAUD;AAAA,IACd,EAAE,MAAArB,GAAM,WAAWwC,GAAO,SAAArC,GAAS,eAAAoB,EAAA;AAAA,IACnC1B;AAAA,EAAA;AAGF,SACEqD,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMH;AAAA,MACN,uBAAuB,CAAC7C,GAASqC,GAAOjC,CAAO;AAAA,MAC/C,cAAcyC,EAAQ;AAAA,MACtB,UAAUZ;AAAA,MACV,OAAAD;AAAA,MAEA,UAAAe,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAApD;AAAA,UACA,cAAAyC;AAAA,UACA,YAAAC;AAAA,UACA,sBAAAC;AAAA,UACA,cAAAC;AAAA,UACA,iBAAAC;AAAA,UACA,YAAAR;AAAA,UACA,YAAAC;AAAA,UACA,eAAAQ;AAAA,UACA,eAAAC;AAAA,UACA,SAAAzB;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN,GC7Ea+B,KAAO;AAAA,EAClB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,IACNC;AAAA,IACA;AAAA,MACE,GAAGnD;AAAA,MACH,QAAQ;AAAA,QACN,GAAGA,EAAQ;AAAA,QACX,EAAE,GAAGoD,GAAgB,MAAM,iBAAiB,OAAO,kBAAA;AAAA,QACnD,EAAE,GAAGA,GAAgB,MAAM,eAAe,OAAO,gBAAgB,cAAc,GAAA;AAAA,MAAK;AAAA,IACtF;AAAA,IAEF,EAAE,GAAGC,GAAyB,MAAM,SAAS,OAAO,SAAA;AAAA,IACpD,EAAE,GAAGvD,GAAW,MAAM,WAAW,OAAO,WAAA;AAAA,IACxCkC;AAAA,IACAC;AAAA,IACAqB;AAAA,IACAf;AAAA,IACAE;AAAA,IACAC;AAAA,IACAF;AAAA,IACAN;AAAA,IACAC;AAAA,IACAG;AAAA,IACAM;AAAA,IACAD;AAAA,EAAA;AAAA,EAEF,QAAQ;AAAA,IACN;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,QAAA;AAAA,QAER;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEJ,GAEAY,KAAeC,EAAgB3B,IAAqBqB,IAAM;AAAA,EACxD,OAAO,CAACO,OACC;AAAA,IACL,GAAGA;AAAA,IACH,SAASC,EAAS;AAAA,MAChB,OAAOD,EAAO;AAAA,MACd,MAAMA,EAAO;AAAA,MACb,QAAQ,CAACA,EAAO,OAAOA,EAAO,SAASA,EAAO,OAAO;AAAA,IAAA,CACtD;AAAA,EAAA;AAAA,EAGL,QAAQ;AAAA,IACN,eAAe,CAACnC,OACP;AAAA,MACL,oBAAoBA,EAAM,kBAAkBqC,EAAM,SAAA;AAAA,MAClD,wBAAwBrC,EAAM,0BAA0BqC,EAAM,SAAA;AAAA,IAAS;AAAA,EAE3E;AAEJ,CAAC;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { defineComponent as i } from "@embeddable.com/react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { V as t, l as r } from "./TablePaginated-pVrIngVd.js";
|
|
3
|
+
import { d as s, u as d, t as u, b as m, M as c } from "./component.constants-VpbbPSIL.js";
|
|
4
|
+
import { M as p, a as f } from "./index-CCJCuW1J.js";
|
|
4
5
|
const g = {
|
|
5
6
|
name: "MultiSelectFieldPro",
|
|
6
7
|
label: "Multi Select Field",
|
|
@@ -8,11 +9,11 @@ const g = {
|
|
|
8
9
|
defaultWidth: 300,
|
|
9
10
|
defaultHeight: 120,
|
|
10
11
|
inputs: [
|
|
11
|
-
|
|
12
|
-
{ ...
|
|
13
|
-
d,
|
|
12
|
+
s,
|
|
13
|
+
{ ...d, label: "Dimension (to load Dropdown values)" },
|
|
14
14
|
u,
|
|
15
|
-
|
|
15
|
+
m,
|
|
16
|
+
{ ...c, defaultValue: "Select values..." },
|
|
16
17
|
{
|
|
17
18
|
name: "maxOptions",
|
|
18
19
|
type: "number",
|
|
@@ -63,13 +64,13 @@ const g = {
|
|
|
63
64
|
events: [{ name: "onChange", property: "value" }]
|
|
64
65
|
}
|
|
65
66
|
]
|
|
66
|
-
},
|
|
67
|
+
}, S = i(f, g, {
|
|
67
68
|
props: (e, [a, l]) => {
|
|
68
69
|
const n = e.dimension.nativeType === "string" ? "contains" : "equals";
|
|
69
70
|
return {
|
|
70
71
|
...e,
|
|
71
72
|
setSearchValue: (o) => l({ searchValue: o }),
|
|
72
|
-
results:
|
|
73
|
+
results: r({
|
|
73
74
|
limit: e.maxOptions,
|
|
74
75
|
from: e.dataset,
|
|
75
76
|
select: [e.dimension, e.optionalSecondDimension].filter(Boolean),
|
|
@@ -90,7 +91,7 @@ const g = {
|
|
|
90
91
|
}
|
|
91
92
|
});
|
|
92
93
|
export {
|
|
93
|
-
|
|
94
|
+
S as default,
|
|
94
95
|
g as meta
|
|
95
96
|
};
|
|
96
97
|
//# sourceMappingURL=MultiSelectFieldPro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectFieldPro.js","sources":["../src/remarkable-pro/components/editors/MultiSelectFieldPro/MultiSelectFieldPro.emb.ts"],"sourcesContent":["import { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport { Value, loadData } from '@embeddable.com/core';\nimport { dataset, description, dimension, placeholder, title } from '../../component.constants';\nimport MultiSelectFieldPro, { MAX_OPTIONS } from '.';\n\nexport const meta = {\n name: 'MultiSelectFieldPro',\n label: 'Multi Select Field',\n category: 'Dropdowns',\n defaultWidth: 300,\n defaultHeight: 120,\n inputs: [\n dataset,\n { ...dimension, label: 'Dimension (to load Dropdown values)' },\n title,\n description,\n { ...placeholder, defaultValue: 'Select values...' },\n {\n name: 'maxOptions',\n type: 'number',\n label: 'Maximum options',\n category: 'Component Settings',\n defaultValue: MAX_OPTIONS,\n },\n {\n name: 'selectedValues',\n type: 'string',\n array: true,\n label: 'Selected Values',\n category: 'Pre-configured Variables',\n },\n {\n type: 'dimension',\n config: {\n dataset: 'dataset',\n },\n required: false,\n name: 'optionalSecondDimension',\n label: 'Optional secondary dimension',\n category: 'Data Mapping for Interactions',\n description: 'Send a different dimension to embeddable when the user clicks. Must be unique.',\n },\n ],\n events: [\n {\n name: 'onChange',\n label: 'selected values updated',\n properties: [\n {\n name: 'value',\n label: 'selected values',\n type: 'string',\n array: true,\n },\n ],\n },\n ],\n variables: [\n {\n name: 'multi-select values',\n type: 'string',\n array: true,\n defaultValue: Value.noFilter(),\n inputs: ['selectedValues'],\n events: [{ name: 'onChange', property: 'value' }],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\ntype MultiSelectDropdownState = {\n searchValue?: string;\n};\n\nexport default defineComponent(MultiSelectFieldPro, meta, {\n props: (\n inputs: Inputs<typeof meta>,\n [state, setState]: [MultiSelectDropdownState, (state: MultiSelectDropdownState) => void],\n ) => {\n const operator = inputs.dimension.nativeType === 'string' ? 'contains' : 'equals';\n return {\n ...inputs,\n setSearchValue: (searchValue: string) => setState({ searchValue }),\n results: loadData({\n limit: inputs.maxOptions,\n from: inputs.dataset,\n select: [inputs.dimension, inputs.optionalSecondDimension].filter(Boolean),\n filters: state?.searchValue\n ? [\n {\n operator,\n property: inputs.dimension,\n value: state.searchValue,\n },\n ]\n : undefined,\n }),\n };\n },\n events: {\n onChange: (selectedValues: string[]) => {\n return {\n value: selectedValues.length ? selectedValues : Value.noFilter(),\n };\n },\n },\n});\n"],"names":["meta","dataset","dimension","title","description","placeholder","MAX_OPTIONS","Value","MultiSelectFieldPro_emb","defineComponent","MultiSelectFieldPro","inputs","state","setState","operator","searchValue","loadData","selectedValues"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MultiSelectFieldPro.js","sources":["../src/remarkable-pro/components/editors/MultiSelectFieldPro/MultiSelectFieldPro.emb.ts"],"sourcesContent":["import { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport { Value, loadData } from '@embeddable.com/core';\nimport { dataset, description, dimension, placeholder, title } from '../../component.constants';\nimport MultiSelectFieldPro, { MAX_OPTIONS } from '.';\n\nexport const meta = {\n name: 'MultiSelectFieldPro',\n label: 'Multi Select Field',\n category: 'Dropdowns',\n defaultWidth: 300,\n defaultHeight: 120,\n inputs: [\n dataset,\n { ...dimension, label: 'Dimension (to load Dropdown values)' },\n title,\n description,\n { ...placeholder, defaultValue: 'Select values...' },\n {\n name: 'maxOptions',\n type: 'number',\n label: 'Maximum options',\n category: 'Component Settings',\n defaultValue: MAX_OPTIONS,\n },\n {\n name: 'selectedValues',\n type: 'string',\n array: true,\n label: 'Selected Values',\n category: 'Pre-configured Variables',\n },\n {\n type: 'dimension',\n config: {\n dataset: 'dataset',\n },\n required: false,\n name: 'optionalSecondDimension',\n label: 'Optional secondary dimension',\n category: 'Data Mapping for Interactions',\n description: 'Send a different dimension to embeddable when the user clicks. Must be unique.',\n },\n ],\n events: [\n {\n name: 'onChange',\n label: 'selected values updated',\n properties: [\n {\n name: 'value',\n label: 'selected values',\n type: 'string',\n array: true,\n },\n ],\n },\n ],\n variables: [\n {\n name: 'multi-select values',\n type: 'string',\n array: true,\n defaultValue: Value.noFilter(),\n inputs: ['selectedValues'],\n events: [{ name: 'onChange', property: 'value' }],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\ntype MultiSelectDropdownState = {\n searchValue?: string;\n};\n\nexport default defineComponent(MultiSelectFieldPro, meta, {\n props: (\n inputs: Inputs<typeof meta>,\n [state, setState]: [MultiSelectDropdownState, (state: MultiSelectDropdownState) => void],\n ) => {\n const operator = inputs.dimension.nativeType === 'string' ? 'contains' : 'equals';\n return {\n ...inputs,\n setSearchValue: (searchValue: string) => setState({ searchValue }),\n results: loadData({\n limit: inputs.maxOptions,\n from: inputs.dataset,\n select: [inputs.dimension, inputs.optionalSecondDimension].filter(Boolean),\n filters: state?.searchValue\n ? [\n {\n operator,\n property: inputs.dimension,\n value: state.searchValue,\n },\n ]\n : undefined,\n }),\n };\n },\n events: {\n onChange: (selectedValues: string[]) => {\n return {\n value: selectedValues.length ? selectedValues : Value.noFilter(),\n };\n },\n },\n});\n"],"names":["meta","dataset","dimension","title","description","placeholder","MAX_OPTIONS","Value","MultiSelectFieldPro_emb","defineComponent","MultiSelectFieldPro","inputs","state","setState","operator","searchValue","loadData","selectedValues"],"mappings":";;;;AAKO,MAAMA,IAAO;AAAA,EAClB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAAA,EACd,eAAe;AAAA,EACf,QAAQ;AAAA,IACNC;AAAA,IACA,EAAE,GAAGC,GAAW,OAAO,sCAAA;AAAA,IACvBC;AAAA,IACAC;AAAA,IACA,EAAE,GAAGC,GAAa,cAAc,mBAAA;AAAA,IAChC;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,cAAcC;AAAA,IAAA;AAAA,IAEhB;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,IAAA;AAAA,IAEZ;AAAA,MACE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,SAAS;AAAA,MAAA;AAAA,MAEX,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa;AAAA,IAAA;AAAA,EACf;AAAA,EAEF,QAAQ;AAAA,IACN;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEF,WAAW;AAAA,IACT;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAcC,EAAM,SAAA;AAAA,MACpB,QAAQ,CAAC,gBAAgB;AAAA,MACzB,QAAQ,CAAC,EAAE,MAAM,YAAY,UAAU,SAAS;AAAA,IAAA;AAAA,EAClD;AAEJ,GAMAC,IAAeC,EAAgBC,GAAqBV,GAAM;AAAA,EACxD,OAAO,CACLW,GACA,CAACC,GAAOC,CAAQ,MACb;AACH,UAAMC,IAAWH,EAAO,UAAU,eAAe,WAAW,aAAa;AACzE,WAAO;AAAA,MACL,GAAGA;AAAA,MACH,gBAAgB,CAACI,MAAwBF,EAAS,EAAE,aAAAE,GAAa;AAAA,MACjE,SAASC,EAAS;AAAA,QAChB,OAAOL,EAAO;AAAA,QACd,MAAMA,EAAO;AAAA,QACb,QAAQ,CAACA,EAAO,WAAWA,EAAO,uBAAuB,EAAE,OAAO,OAAO;AAAA,QACzE,SAASC,KAAA,QAAAA,EAAO,cACZ;AAAA,UACE;AAAA,YACE,UAAAE;AAAA,YACA,UAAUH,EAAO;AAAA,YACjB,OAAOC,EAAM;AAAA,UAAA;AAAA,QACf,IAEF;AAAA,MAAA,CACL;AAAA,IAAA;AAAA,EAEL;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,CAACK,OACF;AAAA,MACL,OAAOA,EAAe,SAASA,IAAiBV,EAAM,SAAA;AAAA,IAAS;AAAA,EAEnE;AAEJ,CAAC;"}
|
package/dist/PieChartPro.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { defineComponent as
|
|
3
|
-
import { P as
|
|
1
|
+
import { V as a, l as s } from "./TablePaginated-pVrIngVd.js";
|
|
2
|
+
import { defineComponent as t } from "@embeddable.com/react";
|
|
3
|
+
import { P as o } from "./index-mMCdUsGD.js";
|
|
4
|
+
import { d as i, q as n, u as r, t as m, b as l, s as d, F as c, c as p, e as u } from "./component.constants-VpbbPSIL.js";
|
|
4
5
|
const C = {
|
|
5
6
|
name: "PieChartPro",
|
|
6
7
|
label: "Pie Chart",
|
|
7
8
|
category: "Pie Charts",
|
|
8
9
|
inputs: [
|
|
9
|
-
a,
|
|
10
|
-
s,
|
|
11
|
-
t,
|
|
12
|
-
o,
|
|
13
|
-
n,
|
|
14
10
|
i,
|
|
11
|
+
n,
|
|
15
12
|
r,
|
|
16
13
|
m,
|
|
17
|
-
l
|
|
14
|
+
l,
|
|
15
|
+
d,
|
|
16
|
+
c,
|
|
17
|
+
p,
|
|
18
|
+
u
|
|
18
19
|
],
|
|
19
20
|
events: [
|
|
20
21
|
{
|
|
@@ -29,22 +30,22 @@ const C = {
|
|
|
29
30
|
]
|
|
30
31
|
}
|
|
31
32
|
]
|
|
32
|
-
},
|
|
33
|
+
}, b = t(o, C, {
|
|
33
34
|
props: (e) => ({
|
|
34
35
|
...e,
|
|
35
|
-
results:
|
|
36
|
+
results: s({
|
|
36
37
|
from: e.dataset,
|
|
37
38
|
select: [e.measure, e.dimension]
|
|
38
39
|
})
|
|
39
40
|
}),
|
|
40
41
|
events: {
|
|
41
42
|
onSegmentClick: (e) => ({
|
|
42
|
-
dimensionValue: e.dimensionValue ||
|
|
43
|
+
dimensionValue: e.dimensionValue || a.noFilter()
|
|
43
44
|
})
|
|
44
45
|
}
|
|
45
46
|
});
|
|
46
47
|
export {
|
|
47
|
-
|
|
48
|
+
b as default,
|
|
48
49
|
C as meta
|
|
49
50
|
};
|
|
50
51
|
//# sourceMappingURL=PieChartPro.js.map
|
package/dist/PieChartPro.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PieChartPro.js","sources":["../src/remarkable-pro/components/charts/pies/PieChartPro/PieChartPro.emb.ts"],"sourcesContent":["import { Value, loadData } from '@embeddable.com/core';\nimport { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport PieChartPro from './index';\nimport {\n dataset,\n description,\n dimension,\n measure,\n maxLegendItems,\n showLegend,\n showTooltips,\n showValueLabels,\n title,\n} from '../../../component.constants';\n\nexport const meta = {\n name: 'PieChartPro',\n label: 'Pie Chart',\n category: 'Pie Charts',\n inputs: [\n dataset,\n measure,\n dimension,\n title,\n description,\n showLegend,\n maxLegendItems,\n showTooltips,\n showValueLabels,\n ],\n events: [\n {\n name: 'onSegmentClick',\n label: 'A segment is clicked',\n properties: [\n {\n name: 'dimensionValue',\n label: 'Clicked Dimension',\n type: 'string',\n },\n ],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(PieChartPro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n results: loadData({\n from: inputs.dataset,\n select: [inputs.measure, inputs.dimension],\n }),\n };\n },\n events: {\n onSegmentClick: (value) => {\n return {\n dimensionValue: value.dimensionValue || Value.noFilter(),\n };\n },\n },\n});\n"],"names":["meta","dataset","measure","dimension","title","description","showLegend","maxLegendItems","showTooltips","showValueLabels","PieChartPro_emb","defineComponent","PieChartPro","inputs","loadData","value","Value"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PieChartPro.js","sources":["../src/remarkable-pro/components/charts/pies/PieChartPro/PieChartPro.emb.ts"],"sourcesContent":["import { Value, loadData } from '@embeddable.com/core';\nimport { defineComponent, EmbeddedComponentMeta, Inputs } from '@embeddable.com/react';\nimport PieChartPro from './index';\nimport {\n dataset,\n description,\n dimension,\n measure,\n maxLegendItems,\n showLegend,\n showTooltips,\n showValueLabels,\n title,\n} from '../../../component.constants';\n\nexport const meta = {\n name: 'PieChartPro',\n label: 'Pie Chart',\n category: 'Pie Charts',\n inputs: [\n dataset,\n measure,\n dimension,\n title,\n description,\n showLegend,\n maxLegendItems,\n showTooltips,\n showValueLabels,\n ],\n events: [\n {\n name: 'onSegmentClick',\n label: 'A segment is clicked',\n properties: [\n {\n name: 'dimensionValue',\n label: 'Clicked Dimension',\n type: 'string',\n },\n ],\n },\n ],\n} as const satisfies EmbeddedComponentMeta;\n\nexport default defineComponent(PieChartPro, meta, {\n props: (inputs: Inputs<typeof meta>) => {\n return {\n ...inputs,\n results: loadData({\n from: inputs.dataset,\n select: [inputs.measure, inputs.dimension],\n }),\n };\n },\n events: {\n onSegmentClick: (value) => {\n return {\n dimensionValue: value.dimensionValue || Value.noFilter(),\n };\n },\n },\n});\n"],"names":["meta","dataset","measure","dimension","title","description","showLegend","maxLegendItems","showTooltips","showValueLabels","PieChartPro_emb","defineComponent","PieChartPro","inputs","loadData","value","Value"],"mappings":";;;;AAeO,MAAMA,IAAO;AAAA,EAClB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,IACNC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA;AAAA,EAEF,QAAQ;AAAA,IACN;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,YAAY;AAAA,QACV;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEJ,GAEAC,IAAeC,EAAgBC,GAAaZ,GAAM;AAAA,EAChD,OAAO,CAACa,OACC;AAAA,IACL,GAAGA;AAAA,IACH,SAASC,EAAS;AAAA,MAChB,MAAMD,EAAO;AAAA,MACb,QAAQ,CAACA,EAAO,SAASA,EAAO,SAAS;AAAA,IAAA,CAC1C;AAAA,EAAA;AAAA,EAGL,QAAQ;AAAA,IACN,gBAAgB,CAACE,OACR;AAAA,MACL,gBAAgBA,EAAM,kBAAkBC,EAAM,SAAA;AAAA,IAAS;AAAA,EAE3D;AAEJ,CAAC;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { j as o,
|
|
1
|
+
import { j as o, k as F, R as a } from "./TablePaginated-pVrIngVd.js";
|
|
2
2
|
import { useMemo as b, useState as Z, useEffect as _ } from "react";
|
|
3
3
|
import { g as v } from "./tables.utils-D7KXdM2S.js";
|
|
4
|
-
const G = (x) => typeof x == "number" && !Number.isNaN(x),
|
|
4
|
+
const G = (x) => typeof x == "number" && !Number.isNaN(x), R = (x, N) => `${x.toFixed(N)}%`, lt = ({
|
|
5
5
|
columnWidth: x,
|
|
6
6
|
firstColumnWidth: N,
|
|
7
7
|
data: d,
|
|
@@ -11,7 +11,7 @@ const G = (x) => typeof x == "number" && !Number.isNaN(x), I = (x, N) => `${x.to
|
|
|
11
11
|
progressive: T = !0,
|
|
12
12
|
batchSize: V = 100,
|
|
13
13
|
batchDelayMs: A = 0,
|
|
14
|
-
rowTotalsFor:
|
|
14
|
+
rowTotalsFor: I = [],
|
|
15
15
|
columnTotalsFor: E = [],
|
|
16
16
|
totalLabel: C = "Total",
|
|
17
17
|
className: H
|
|
@@ -37,7 +37,7 @@ const G = (x) => typeof x == "number" && !Number.isNaN(x), I = (x, N) => `${x.to
|
|
|
37
37
|
t.has(e) || t.set(e, /* @__PURE__ */ new Map()), t.get(e).set(c, l);
|
|
38
38
|
}
|
|
39
39
|
return t;
|
|
40
|
-
}, [d, y.key, p.key]), $ = b(() => new Set(
|
|
40
|
+
}, [d, y.key, p.key]), $ = b(() => new Set(I), [I]), B = b(() => new Set(E), [E]), P = $.size > 0, O = B.size > 0, K = b(() => {
|
|
41
41
|
const t = /* @__PURE__ */ new Map();
|
|
42
42
|
return s.forEach((l, e) => t.set(String(l.key), e)), t;
|
|
43
43
|
}, [s]), { colTotals: q, rowTotals: Q, grandTotals: z } = b(() => {
|
|
@@ -198,7 +198,7 @@ const G = (x) => typeof x == "number" && !Number.isNaN(x), I = (x, N) => `${x.to
|
|
|
198
198
|
P && s.filter((e) => $.has(e.key)).map((e, c) => {
|
|
199
199
|
const r = Q.get(t) ?? s.map(() => 0), n = K.get(e.key) ?? -1, i = `row-total-${String(t)}-${e.key}-${c}`, g = n >= 0 ? r[n] ?? 0 : 0;
|
|
200
200
|
let h = g;
|
|
201
|
-
return e.showAsPercentage ? h =
|
|
201
|
+
return e.showAsPercentage ? h = R(
|
|
202
202
|
g / (z[n] || 1) * 100,
|
|
203
203
|
e.percentageDecimalPlaces ?? 0
|
|
204
204
|
) : e.accessor && (h = e.accessor({ [e.key]: g })), /* @__PURE__ */ o.jsx("td", { className: a.boltCell, title: h, children: h }, i);
|
|
@@ -219,7 +219,7 @@ const G = (x) => typeof x == "number" && !Number.isNaN(x), I = (x, N) => `${x.to
|
|
|
219
219
|
(t) => s.map((l, e) => {
|
|
220
220
|
const c = B.has(String(l.key)), r = q.get(String(t)) ?? s.map(() => 0), n = s.findIndex((j) => String(j.key) === String(l.key)), i = `col-total-${String(t)}-${l.key}-${e}`, g = r[n] ?? 0;
|
|
221
221
|
let h = g;
|
|
222
|
-
l.showAsPercentage ? h =
|
|
222
|
+
l.showAsPercentage ? h = R(
|
|
223
223
|
100,
|
|
224
224
|
l.percentageDecimalPlaces ?? 0
|
|
225
225
|
) : l.accessor && (h = l.accessor({ [l.key]: g }));
|
|
@@ -230,7 +230,7 @@ const G = (x) => typeof x == "number" && !Number.isNaN(x), I = (x, N) => `${x.to
|
|
|
230
230
|
P && s.filter((t) => $.has(t.key)).map((t, l) => {
|
|
231
231
|
const e = s.findIndex((i) => String(i.key) === t.key), c = `grand-total-${t.key}-${l}`, r = z[e] ?? 0;
|
|
232
232
|
let n = r;
|
|
233
|
-
return t.showAsPercentage ? n =
|
|
233
|
+
return t.showAsPercentage ? n = R(
|
|
234
234
|
100,
|
|
235
235
|
t.percentageDecimalPlaces ?? 0
|
|
236
236
|
) : t.accessor && (n = t.accessor({ [t.key]: r })), /* @__PURE__ */ o.jsx("td", { className: a.boltCell, title: n, children: n }, c);
|
|
@@ -246,4 +246,4 @@ const G = (x) => typeof x == "number" && !Number.isNaN(x), I = (x, N) => `${x.to
|
|
|
246
246
|
export {
|
|
247
247
|
lt as P
|
|
248
248
|
};
|
|
249
|
-
//# sourceMappingURL=PivotTable-
|
|
249
|
+
//# sourceMappingURL=PivotTable-DlBkWU2O.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotTable-UDo7378U.js","sources":["../src/remarkable-ui/components/charts/tables/PivotTable/PivotTable.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(row)?.get(columnValue) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(row) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n"],"names":["isNumber","v","getPercentageDisplay","percentage","percentageDecimalPlaces","PivotTable","columnWidth","firstColumnWidth","data","measures","rowDimension","columnDimension","progressive","batchSize","batchDelayMs","rowTotalsFor","columnTotalsFor","totalLabel","className","rowValues","useMemo","s","d","rowValue","columnValues","columnValue","cellMap","map","r","rowTotalsSet","columnTotalsSet","hasRowTotals","hasColumnTotals","measureIndexByKey","m","i","colTotals","rowTotals","grandTotals","cTotals","rTotals","gTotals","c","cArr","rArr","raw","visibleCount","setVisibleCount","useState","useEffect","cancelled","t","tick","prev","next","visibleRows","clsx","tableStyles","jsx","jsxs","columnValueDisplay","getTableCellWidthStyle","col","measure","idx","row","rowDimensionValue","object","_a","value","key","mi","totalsForCol","colTotal","totalsForRow","measureIndex","displayValue","show","mm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PivotTable-DlBkWU2O.js","sources":["../src/remarkable-ui/components/charts/tables/PivotTable/PivotTable.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport tableStyles from '../tables.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { getTableCellWidthStyle } from '../tables.utils';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst isNumber = (v: any) => typeof v === 'number' && !Number.isNaN(v);\n\nconst getPercentageDisplay = (percentage: number, percentageDecimalPlaces: number) => {\n return `${percentage.toFixed(percentageDecimalPlaces)}%`;\n};\n\nexport const PivotTable: FC<PivotTableProps<any>> = ({\n columnWidth,\n firstColumnWidth,\n data,\n measures,\n rowDimension,\n columnDimension,\n progressive = true,\n batchSize = 100,\n batchDelayMs = 0,\n rowTotalsFor = [],\n columnTotalsFor = [],\n totalLabel = 'Total',\n className,\n}) => {\n const rowValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const rowValue = d[rowDimension.key];\n if (rowValue) s.add(rowValue);\n }\n return Array.from(s);\n }, [data, rowDimension.key]);\n\n const columnValues = useMemo(() => {\n const s = new Set<string>();\n for (const d of data) {\n const columnValue = d[columnDimension.key];\n if (columnValue) s.add(columnValue as string);\n }\n return Array.from(s);\n }, [data, columnDimension.key]);\n\n const cellMap = useMemo(() => {\n const map = new Map<string, Map<string, Record<string, any>>>();\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n if (!map.has(r)) map.set(r, new Map());\n map.get(r)!.set(c, d as Record<string, any>);\n }\n return map;\n }, [data, rowDimension.key, columnDimension.key]);\n\n const rowTotalsSet = useMemo(() => new Set<string>(rowTotalsFor), [rowTotalsFor]);\n const columnTotalsSet = useMemo(() => new Set<string>(columnTotalsFor), [columnTotalsFor]);\n const hasRowTotals = rowTotalsSet.size > 0;\n const hasColumnTotals = columnTotalsSet.size > 0;\n\n const measureIndexByKey = useMemo(() => {\n const map = new Map<string, number>();\n measures.forEach((m, i) => map.set(String(m.key), i));\n return map;\n }, [measures]);\n\n const { colTotals, rowTotals, grandTotals } = useMemo(() => {\n const cTotals = new Map<string, number[]>();\n const rTotals = new Map<string, number[]>();\n const gTotals = measures.map(() => 0);\n\n for (const d of data) {\n const r = String(d[rowDimension.key]);\n const c = String(d[columnDimension.key]);\n const cArr = cTotals.get(c) ?? measures.map(() => 0);\n const rArr = rTotals.get(r) ?? measures.map(() => 0);\n\n measures.forEach((m, i) => {\n const raw = (d as any)?.[m.key];\n const v = Number(raw);\n if (!Number.isNaN(v)) {\n cArr[i]! += v;\n rArr[i]! += v;\n gTotals[i]! += v;\n }\n });\n\n cTotals.set(c, cArr);\n rTotals.set(r, rArr);\n }\n\n for (const c of columnValues) {\n if (!cTotals.has(String(c)))\n cTotals.set(\n String(c),\n measures.map(() => 0),\n );\n }\n for (const r of rowValues) {\n if (!rTotals.has(String(r)))\n rTotals.set(\n String(r),\n measures.map(() => 0),\n );\n }\n\n return { colTotals: cTotals, rowTotals: rTotals, grandTotals: gTotals };\n }, [data, measures, rowDimension.key, columnDimension.key, columnValues, rowValues]);\n\n const [visibleCount, setVisibleCount] = useState(() =>\n progressive ? Math.min(batchSize, rowValues.length) : rowValues.length,\n );\n\n useEffect(() => {\n if (!progressive) {\n setVisibleCount(rowValues.length);\n return;\n }\n let cancelled = false;\n let t: number | null = null;\n setVisibleCount(0);\n\n const tick = () => {\n setVisibleCount((prev) => {\n const next = Math.min(prev + batchSize, rowValues.length);\n if (next < rowValues.length && !cancelled) {\n t = window.setTimeout(tick, batchDelayMs);\n }\n return next;\n });\n };\n\n t = window.setTimeout(tick, batchDelayMs);\n\n return () => {\n cancelled = true;\n if (t !== null) window.clearTimeout(t);\n };\n }, [progressive, batchSize, batchDelayMs, rowValues.length, data]);\n\n const visibleRows = progressive ? rowValues.slice(0, visibleCount) : rowValues;\n\n return (\n <div className={clsx(tableStyles.tableFullContainer, className)}>\n <div\n className={clsx(\n tableStyles.tableAdjustedContainer,\n (!columnWidth || !firstColumnWidth) && tableStyles.fullWidth,\n )}\n >\n <table\n className={tableStyles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={columnDimension.label}\n className={tableStyles.stickyFirstColumn}\n >\n {columnDimension.label}\n </th>\n {columnValues.map((columnValue) => {\n const columnValueDisplay = columnDimension.formatValue\n ? columnDimension.formatValue(columnValue)\n : columnValue;\n return (\n <th\n key={`col-${columnValue}`}\n scope=\"colgroup\"\n colSpan={measures.length}\n title={columnValueDisplay}\n >\n {columnValueDisplay}\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={tableStyles.boltCell}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n title={rowDimension.label}\n className={tableStyles.stickyFirstColumn}\n style={getTableCellWidthStyle(firstColumnWidth)}\n >\n {rowDimension.label}\n </th>\n {columnValues.flatMap((col) =>\n measures.map((measure, idx) => (\n <th\n key={`sub-${String(col)}-${measure.key}-${idx}`}\n scope=\"col\"\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n )),\n )}\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => (\n <th\n key={`sub-total-${measure.key}-${idx}`}\n scope=\"col\"\n className={tableStyles.boltCell}\n title={measure.label}\n style={getTableCellWidthStyle(columnWidth)}\n >\n {measure.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row) => {\n const rowDimensionValue = rowDimension.formatValue\n ? rowDimension.formatValue(row)\n : row;\n return (\n <tr key={`row-${row}`}>\n <th\n scope=\"row\"\n title={rowDimensionValue}\n className={tableStyles.stickyFirstColumn}\n >\n {rowDimensionValue}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const object = cellMap.get(row)?.get(columnValue) ?? {};\n const value = object?.[measure.key];\n\n const key = `cell-${row}-${columnValue}-${measure.key}-${idx}`;\n const getDisplayValue = () => {\n if (measure.showAsPercentage) {\n const mi = measureIndexByKey.get(String(measure.key)) ?? -1;\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const colTotal = mi >= 0 ? (totalsForCol[mi] ?? 0) : 0;\n\n const shouldShowPct =\n measure.showAsPercentage &&\n isNumber(Number(value)) &&\n isNumber(colTotal) &&\n colTotal > 0;\n\n if (shouldShowPct) {\n const percentage = (value / colTotal) * 100;\n return `${percentage.toFixed(measure.percentageDecimalPlaces ?? 0)}%`;\n }\n }\n\n return measure.accessor ? measure.accessor(object) : value;\n };\n\n const columnValueDisplay = getDisplayValue();\n\n return (\n <td key={key} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const totalsForRow = rowTotals.get(row) ?? measures.map(() => 0);\n const measureIndex = measureIndexByKey.get(measure.key) ?? -1;\n const key = `row-total-${String(row)}-${measure.key}-${idx}`;\n const value: number =\n measureIndex >= 0 ? (totalsForRow[measureIndex] ?? 0) : 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n (value / (grandTotals[measureIndex] || 1)) * 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n );\n })}\n {hasColumnTotals && (\n <tr key=\"totals-row\" className={tableStyles.stickyLastRow}>\n <th\n scope=\"row\"\n className={clsx(tableStyles.stickyFirstColumn, tableStyles.boltCell)}\n title={totalLabel}\n >\n {totalLabel}\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol =\n colTotals.get(String(columnValue)) ?? measures.map(() => 0);\n const mi = measures.findIndex((mm) => String(mm.key) === String(measure.key));\n const key = `col-total-${String(columnValue)}-${measure.key}-${idx}`;\n const value: number = totalsForCol[mi] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td key={key} className={tableStyles.boltCell} title={columnValueDisplay}>\n {columnValueDisplay}\n </td>\n );\n }),\n )}\n\n {hasRowTotals &&\n measures\n .filter((measure) => rowTotalsSet.has(measure.key))\n .map((measure, idx) => {\n const measureIndex = measures.findIndex((m) => String(m.key) === measure.key);\n const key = `grand-total-${measure.key}-${idx}`;\n const value: number = grandTotals[measureIndex] ?? 0;\n let displayValue: any = value;\n\n if (measure.showAsPercentage) {\n displayValue = getPercentageDisplay(\n 100,\n measure.percentageDecimalPlaces ?? 0,\n );\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n\n return (\n <td key={key} className={tableStyles.boltCell} title={displayValue}>\n {displayValue}\n </td>\n );\n })}\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n};\n"],"names":["isNumber","v","getPercentageDisplay","percentage","percentageDecimalPlaces","PivotTable","columnWidth","firstColumnWidth","data","measures","rowDimension","columnDimension","progressive","batchSize","batchDelayMs","rowTotalsFor","columnTotalsFor","totalLabel","className","rowValues","useMemo","s","d","rowValue","columnValues","columnValue","cellMap","map","r","rowTotalsSet","columnTotalsSet","hasRowTotals","hasColumnTotals","measureIndexByKey","m","i","colTotals","rowTotals","grandTotals","cTotals","rTotals","gTotals","c","cArr","rArr","raw","visibleCount","setVisibleCount","useState","useEffect","cancelled","t","tick","prev","next","visibleRows","clsx","tableStyles","jsx","jsxs","columnValueDisplay","getTableCellWidthStyle","col","measure","idx","row","rowDimensionValue","object","_a","value","key","mi","totalsForCol","colTotal","totalsForRow","measureIndex","displayValue","show","mm"],"mappings":"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"}
|