@embeddable.com/remarkable-ui 0.1.38 → 0.1.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/BarChartDefaultHorizontalPro.js +4 -4
  2. package/dist/BarChartDefaultPro.js +4 -4
  3. package/dist/BarChartGroupedHorizontalPro.js +4 -4
  4. package/dist/BarChartGroupedPro.js +4 -4
  5. package/dist/BarChartStackedHorizontalPro.js +4 -4
  6. package/dist/BarChartStackedPro.js +4 -4
  7. package/dist/ChartCard-CsgyAnzC.js +117 -0
  8. package/dist/{ChartCard-Cr2L2Uki.js.map → ChartCard-CsgyAnzC.js.map} +1 -1
  9. package/dist/{ComparisonPeriod.type.emb-C7ixEJKv.js → ComparisonPeriod.type.emb-ZjbGbiV1.js} +2 -2
  10. package/dist/{ComparisonPeriod.type.emb-C7ixEJKv.js.map → ComparisonPeriod.type.emb-ZjbGbiV1.js.map} +1 -1
  11. package/dist/ComparisonPeriodSelectFieldPro.js +4 -4
  12. package/dist/DateRangeSelectFieldPro.js +5 -5
  13. package/dist/DonutChartPro.js +2 -2
  14. package/dist/DonutLabelChartPro.js +2 -2
  15. package/dist/{EditorCard-VE-lXcu3.js → EditorCard-DAwqwoAp.js} +14 -14
  16. package/dist/{EditorCard-VE-lXcu3.js.map → EditorCard-DAwqwoAp.js.map} +1 -1
  17. package/dist/{KpiChart-PRQV9-IW.js → KpiChart-Lh_2N9dT.js} +13 -13
  18. package/dist/{KpiChart-PRQV9-IW.js.map → KpiChart-Lh_2N9dT.js.map} +1 -1
  19. package/dist/KpiChartNumberComparisonPro.js +6 -6
  20. package/dist/KpiChartNumberPro.js +4 -4
  21. package/dist/LineChartComparisonDefaultPro.js +7 -7
  22. package/dist/LineChartDefaultPro.js +5 -5
  23. package/dist/LineChartGroupedPro.js +5 -5
  24. package/dist/MultiSelectFieldPro.js +2 -2
  25. package/dist/PieChartPro.js +2 -2
  26. package/dist/PivotTable-DCJT9sa0.js +253 -0
  27. package/dist/PivotTable-DCJT9sa0.js.map +1 -0
  28. package/dist/PivotTablePro.js +141 -0
  29. package/dist/PivotTablePro.js.map +1 -0
  30. package/dist/{SingleSelectField-Dzx78rCq.js → SingleSelectField-CMzbI0wG.js} +3 -3
  31. package/dist/{SingleSelectField-Dzx78rCq.js.map → SingleSelectField-CMzbI0wG.js.map} +1 -1
  32. package/dist/SingleSelectFieldPro.js +2 -2
  33. package/dist/TableChartPaginated.js +3 -3
  34. package/dist/TableChartPaginated.js.map +1 -1
  35. package/dist/{bars.utils-CTqUglN7.js → bars.utils-DIunU5Xf.js} +5 -5
  36. package/dist/{bars.utils-CTqUglN7.js.map → bars.utils-DIunU5Xf.js.map} +1 -1
  37. package/dist/charts.newFillGaps.hooks-CEXFxNVs.js +65 -0
  38. package/dist/charts.newFillGaps.hooks-CEXFxNVs.js.map +1 -0
  39. package/dist/{charts.utils-CgwyTiTH.js → charts.utils-9h6uemzB.js} +1371 -1396
  40. package/dist/charts.utils-9h6uemzB.js.map +1 -0
  41. package/dist/{component.constants-D59iJ42U.js → component.constants-6DERKpeq.js} +119 -108
  42. package/dist/component.constants-6DERKpeq.js.map +1 -0
  43. package/dist/embeddable-components.json +12 -11
  44. package/dist/embeddable-theme-2b917.js +6 -0
  45. package/dist/{formatter.utils-DDLdrAl9.js → formatter.utils-R5zIrZIA.js} +2 -2
  46. package/dist/{formatter.utils-DDLdrAl9.js.map → formatter.utils-R5zIrZIA.js.map} +1 -1
  47. package/dist/{index-DdEgKFPe.js → index-CLkczqL_.js} +8 -8
  48. package/dist/{index-DdEgKFPe.js.map → index-CLkczqL_.js.map} +1 -1
  49. package/dist/{index-CVw4TFfQ.js → index-Cj5wpig9.js} +4 -4
  50. package/dist/{index-CVw4TFfQ.js.map → index-Cj5wpig9.js.map} +1 -1
  51. package/dist/{index-DKUEiV33.js → index-Dfbt_iT7.js} +11 -11
  52. package/dist/{index-DKUEiV33.js.map → index-Dfbt_iT7.js.map} +1 -1
  53. package/dist/{index-BGwJ9TYS.js → index-DfnO1U7b.js} +7 -7
  54. package/dist/{index-BGwJ9TYS.js.map → index-DfnO1U7b.js.map} +1 -1
  55. package/dist/{index-BlqpkSit.js → index-YRGaBl06.js} +4 -4
  56. package/dist/{index-BlqpkSit.js.map → index-YRGaBl06.js.map} +1 -1
  57. package/dist/{index-IjB-3gUH.js → index-hua9dsBD.js} +5 -5
  58. package/dist/{index-IjB-3gUH.js.map → index-hua9dsBD.js.map} +1 -1
  59. package/dist/index.js +106 -102
  60. package/dist/index.js.map +1 -1
  61. package/dist/object.utils-D_Zzon-H.js +37 -0
  62. package/dist/object.utils-D_Zzon-H.js.map +1 -0
  63. package/dist/{pies.utils-DArVf3EJ.js → pies.utils-BHep0bTK.js} +5 -5
  64. package/dist/{pies.utils-DArVf3EJ.js.map → pies.utils-BHep0bTK.js.map} +1 -1
  65. package/dist/quarterOfYear-C0maIilJ.js +68 -0
  66. package/dist/quarterOfYear-C0maIilJ.js.map +1 -0
  67. package/dist/remarkable-pro/components/charts/charts.newFillGaps.hooks.d.ts.map +1 -1
  68. package/dist/remarkable-pro/components/charts/shared/ChartCard/ChartCard.d.ts.map +1 -1
  69. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts +14 -0
  70. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.d.ts.map +1 -0
  71. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts +16 -0
  72. package/dist/remarkable-pro/components/charts/tables/PivotTablePro/index.d.ts.map +1 -0
  73. package/dist/remarkable-pro/components/component.constants.d.ts +11 -0
  74. package/dist/remarkable-pro/components/component.constants.d.ts.map +1 -1
  75. package/dist/remarkable-pro/theme/i18n/translations/de.d.ts.map +1 -1
  76. package/dist/remarkable-pro/theme/i18n/translations/en.d.ts.map +1 -1
  77. package/dist/remarkable-ui/charts/tables/PivotTable/PivotTable.d.ts +4 -0
  78. package/dist/remarkable-ui/charts/tables/PivotTable/PivotTable.d.ts.map +1 -0
  79. package/dist/remarkable-ui/charts/tables/PivotTable/PivotTable.stories.d.ts +24 -0
  80. package/dist/remarkable-ui/charts/tables/PivotTable/PivotTable.stories.d.ts.map +1 -0
  81. package/dist/remarkable-ui/charts/tables/PivotTable/PivotTable.types.d.ts +39 -0
  82. package/dist/remarkable-ui/charts/tables/PivotTable/PivotTable.types.d.ts.map +1 -0
  83. package/dist/remarkable-ui/charts/tables/Table/Table.hooks.d.ts.map +1 -0
  84. package/dist/remarkable-ui/charts/tables/{TablePaginated.d.ts → Table/TablePaginated.d.ts} +1 -1
  85. package/dist/remarkable-ui/charts/tables/Table/TablePaginated.d.ts.map +1 -0
  86. package/dist/remarkable-ui/charts/tables/Table/TablePaginated.stories.d.ts.map +1 -0
  87. package/dist/remarkable-ui/charts/tables/{components → Table/components}/TableBody/TableBody.d.ts +1 -1
  88. package/dist/remarkable-ui/charts/tables/Table/components/TableBody/TableBody.d.ts.map +1 -0
  89. package/dist/remarkable-ui/charts/tables/{components → Table/components}/TableHeader/TableHeader.d.ts +1 -1
  90. package/dist/remarkable-ui/charts/tables/Table/components/TableHeader/TableHeader.d.ts.map +1 -0
  91. package/dist/remarkable-ui/charts/tables/{components → Table/components}/TablePagination/TablePagination.d.ts +1 -1
  92. package/dist/remarkable-ui/charts/tables/Table/components/TablePagination/TablePagination.d.ts.map +1 -0
  93. package/dist/remarkable-ui/charts/tables/Table/components/TablePagination/TablePagination.stories.d.ts.map +1 -0
  94. package/dist/remarkable-ui/charts/tables/{tables.types.d.ts → Table/table.types.d.ts} +2 -2
  95. package/dist/remarkable-ui/charts/tables/Table/table.types.d.ts.map +1 -0
  96. package/dist/remarkable-ui/index.d.ts +5 -3
  97. package/dist/remarkable-ui/index.d.ts.map +1 -1
  98. package/dist/remarkable-ui.css +1 -1
  99. package/dist/{timeRange.utils-D6gvWIhx.js → timeRange.utils-C61mst0e.js} +2 -2
  100. package/dist/{timeRange.utils-D6gvWIhx.js.map → timeRange.utils-C61mst0e.js.map} +1 -1
  101. package/package.json +1 -1
  102. package/dist/ChartCard-Cr2L2Uki.js +0 -110
  103. package/dist/charts.newFillGaps.hooks-YXEKFvmz.js +0 -64
  104. package/dist/charts.newFillGaps.hooks-YXEKFvmz.js.map +0 -1
  105. package/dist/charts.utils-CgwyTiTH.js.map +0 -1
  106. package/dist/component.constants-D59iJ42U.js.map +0 -1
  107. package/dist/object.utils-Cae_z0QB.js +0 -69
  108. package/dist/object.utils-Cae_z0QB.js.map +0 -1
  109. package/dist/remarkable-ui/charts/tables/Table.hooks.d.ts.map +0 -1
  110. package/dist/remarkable-ui/charts/tables/TablePaginated.d.ts.map +0 -1
  111. package/dist/remarkable-ui/charts/tables/TablePaginated.stories.d.ts.map +0 -1
  112. package/dist/remarkable-ui/charts/tables/components/TableBody/TableBody.d.ts.map +0 -1
  113. package/dist/remarkable-ui/charts/tables/components/TableHeader/TableHeader.d.ts.map +0 -1
  114. package/dist/remarkable-ui/charts/tables/components/TablePagination/TablePagination.d.ts.map +0 -1
  115. package/dist/remarkable-ui/charts/tables/components/TablePagination/TablePagination.stories.d.ts.map +0 -1
  116. package/dist/remarkable-ui/charts/tables/tables.types.d.ts.map +0 -1
  117. /package/dist/remarkable-ui/charts/tables/{Table.hooks.d.ts → Table/Table.hooks.d.ts} +0 -0
  118. /package/dist/remarkable-ui/charts/tables/{TablePaginated.stories.d.ts → Table/TablePaginated.stories.d.ts} +0 -0
  119. /package/dist/remarkable-ui/charts/tables/{components → Table/components}/TablePagination/TablePagination.stories.d.ts +0 -0
@@ -1,14 +1,14 @@
1
1
  import { useTheme as Y, defineComponent as _ } from "@embeddable.com/react";
2
- import { m as E, E as G, C as w, U, _ as I, $ as O, i as q, r as z, j as V, a0 as K, d as J, a as B, Y as A, a1 as S, z as W, X as H, W as Q, t as Z, c as ee, s as ae, e as se, f as ne, g as te, x as ie, y as oe, p as re, q as le, u as me, V as de, o as F } from "./component.constants-D59iJ42U.js";
3
- import { C as ce } from "./ChartCard-Cr2L2Uki.js";
2
+ import { m as E, E as G, C as w, U, _ as I, $ as O, i as q, r as z, j as V, a0 as K, d as J, a as B, Y as A, a1 as S, z as W, X as H, W as Q, t as Z, c as ee, s as ae, e as se, f as ne, g as te, x as ie, y as oe, p as re, q as le, u as me, V as de, o as F } from "./component.constants-6DERKpeq.js";
3
+ import { C as ce } from "./ChartCard-CsgyAnzC.js";
4
4
  import { useEffect as pe } from "react";
5
- import { g as ue } from "./timeRange.utils-D6gvWIhx.js";
6
- import { g as M } from "./formatter.utils-DDLdrAl9.js";
7
- import { g as ge, a as xe } from "./object.utils-Cae_z0QB.js";
5
+ import { g as ue } from "./timeRange.utils-C61mst0e.js";
6
+ import { g as M } from "./formatter.utils-R5zIrZIA.js";
7
+ import { g as ge, a as xe } from "./object.utils-D_Zzon-H.js";
8
8
  import { i as he, s as be } from "./color.utils-CVyp-fGP.js";
9
9
  import { g as Ce } from "./lines.utils-CFEUUo4k.js";
10
- import { u as N } from "./charts.newFillGaps.hooks-YXEKFvmz.js";
11
- import { C as fe } from "./ComparisonPeriod.type.emb-C7ixEJKv.js";
10
+ import { u as N } from "./charts.newFillGaps.hooks-CEXFxNVs.js";
11
+ import { C as fe } from "./ComparisonPeriod.type.emb-ZjbGbiV1.js";
12
12
  const L = "mainAxis", v = "comparisonAxis", $ = (a, t) => {
13
13
  var P, k, h, u;
14
14
  const { data: n, measure: i, dimension: s, index: c, isPreviousPeriod: r, hasMinMaxYAxisRange: b, labels: e } = a, p = n == null ? void 0 : n.map((C) => C[s.name]), l = !!((P = i.inputs) != null && P.connectGaps), g = e ? e.map((C) => {
@@ -1,11 +1,11 @@
1
1
  import { useTheme as v, defineComponent as w } from "@embeddable.com/react";
2
- import { E as f, C as g, m as F, i as P, r as R, j as A, a0 as B, d as j, a as k, Y as x, a1 as O, b as S, t as T, c as I, s as $, e as G, f as X, g as Y, x as E, y as K, p as N, q as U, u as _, V as q, o as z } from "./component.constants-D59iJ42U.js";
3
- import { C as W } from "./ChartCard-Cr2L2Uki.js";
4
- import { g as V } from "./formatter.utils-DDLdrAl9.js";
5
- import { g as H, a as y } from "./object.utils-Cae_z0QB.js";
2
+ import { E as f, C as g, m as F, i as P, r as R, j as A, a0 as B, d as j, a as k, Y as x, a1 as O, b as S, t as T, c as I, s as $, e as G, f as X, g as Y, x as E, y as K, p as N, q as U, u as _, V as q, o as z } from "./component.constants-6DERKpeq.js";
3
+ import { C as W } from "./ChartCard-CsgyAnzC.js";
4
+ import { g as V } from "./formatter.utils-R5zIrZIA.js";
5
+ import { g as H, a as y } from "./object.utils-D_Zzon-H.js";
6
6
  import "react";
7
7
  import { i as D, s as J } from "./color.utils-CVyp-fGP.js";
8
- import { u as Q } from "./charts.newFillGaps.hooks-YXEKFvmz.js";
8
+ import { u as Q } from "./charts.newFillGaps.hooks-CEXFxNVs.js";
9
9
  const Z = (e, o) => {
10
10
  if (!e.data)
11
11
  return {
@@ -1,12 +1,12 @@
1
1
  import { useTheme as R, defineComponent as P } from "@embeddable.com/react";
2
- import { E as k, C as $, m as F, i as S, r as v, j as y, a0 as B, d as j, w, Y as V, b as O, z as T, t as X, c as Y, A as E, s as K, e as N, f as U, g as q, x as z, y as W, p as _, q as H, u as J, V as D, o as Q } from "./component.constants-D59iJ42U.js";
3
- import { C as Z } from "./ChartCard-Cr2L2Uki.js";
4
- import { g as M } from "./formatter.utils-DDLdrAl9.js";
5
- import { g as I, a as G } from "./object.utils-Cae_z0QB.js";
2
+ import { E as k, C as $, m as F, i as S, r as v, j as y, a0 as B, d as j, w, Y as V, b as O, z as T, t as X, c as Y, A as E, s as K, e as N, f as U, g as q, x as z, y as W, p as _, q as H, u as J, V as D, o as Q } from "./component.constants-6DERKpeq.js";
3
+ import { C as Z } from "./ChartCard-CsgyAnzC.js";
4
+ import { g as M } from "./formatter.utils-R5zIrZIA.js";
5
+ import { g as I, a as G } from "./object.utils-D_Zzon-H.js";
6
6
  import { s as ee } from "./color.utils-CVyp-fGP.js";
7
7
  import "react";
8
8
  import { g as ae } from "./lines.utils-CFEUUo4k.js";
9
- import { u as se } from "./charts.newFillGaps.hooks-YXEKFvmz.js";
9
+ import { u as se } from "./charts.newFillGaps.hooks-CEXFxNVs.js";
10
10
  const ne = (e, o) => {
11
11
  const u = M(o), { data: t = [], dimension: l, groupDimension: r, measure: n, hasMinMaxYAxisRange: c } = e, m = [...new Set(t.map((s) => s[l.name]).filter(Boolean))].sort(), d = [...new Set(t.map((s) => s[r.name]))].filter(Boolean), a = I(o), i = d.map((s, x) => {
12
12
  var p;
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
- import { d as r, z as s, t as d, c as u, ad as m, V as t, o as c } from "./component.constants-D59iJ42U.js";
3
- import { M as p, a as f } from "./index-CVw4TFfQ.js";
2
+ import { d as r, z as s, t as d, c as u, ae as m, V as t, o as c } from "./component.constants-6DERKpeq.js";
3
+ import { M as p, a as f } from "./index-Cj5wpig9.js";
4
4
  const g = {
5
5
  name: "MultiSelectFieldPro",
6
6
  label: "Multi Select Field",
@@ -1,6 +1,6 @@
1
- import { d as a, w as s, z as t, t as o, c as n, s as i, a3 as r, e as m, f as l, V as d, o as c } from "./component.constants-D59iJ42U.js";
1
+ import { d as a, w as s, z as t, t as o, c as n, s as i, a3 as r, e as m, f as l, V as d, o as c } from "./component.constants-6DERKpeq.js";
2
2
  import { defineComponent as p } from "@embeddable.com/react";
3
- import { P as u } from "./index-DdEgKFPe.js";
3
+ import { P as u } from "./index-CLkczqL_.js";
4
4
  const C = {
5
5
  name: "PieChartPro",
6
6
  label: "Pie Chart",
@@ -0,0 +1,253 @@
1
+ import { j as c, ag as h, ah as p } from "./component.constants-6DERKpeq.js";
2
+ import { useMemo as $, useState as X, useEffect as Y } from "react";
3
+ const Z = "_tableContainer_2e613_3", L = "_table_2e613_3", D = "_cell_2e613_78", m = "_header_2e613_106", tt = "_bold_2e613_111", o = {
4
+ tableContainer: Z,
5
+ table: L,
6
+ cell: D,
7
+ header: m,
8
+ bold: tt
9
+ }, z = (r) => typeof r == "number" && !Number.isNaN(r), u = (r, A) => `${r.toFixed(A)}%`, E = (r) => ({
10
+ minWidth: r ? `${r}px` : void 0,
11
+ width: r ? `${r}px` : void 0,
12
+ maxWidth: r ? `${r}px` : void 0
13
+ }), ot = ({
14
+ columnWidth: r,
15
+ firstColumnWidth: A,
16
+ data: b,
17
+ measures: n,
18
+ rowDimension: y,
19
+ columnDimension: g,
20
+ progressive: _ = !0,
21
+ batchSize: C = 100,
22
+ batchDelayMs: M = 0,
23
+ rowTotalsFor: R = [],
24
+ columnTotalsFor: F = [],
25
+ totalLabel: P = "Total"
26
+ }) => {
27
+ const k = $(() => {
28
+ const t = /* @__PURE__ */ new Set();
29
+ for (const e of b) {
30
+ const l = e[y.key];
31
+ l && t.add(l);
32
+ }
33
+ return Array.from(t);
34
+ }, [b, y.key]), N = $(() => {
35
+ const t = /* @__PURE__ */ new Set();
36
+ for (const e of b) {
37
+ const l = e[g.key];
38
+ l && t.add(l);
39
+ }
40
+ return Array.from(t);
41
+ }, [b, g.key]), G = $(() => {
42
+ const t = /* @__PURE__ */ new Map();
43
+ for (const e of b) {
44
+ const l = String(e[y.key]), s = String(e[g.key]);
45
+ t.has(l) || t.set(l, /* @__PURE__ */ new Map()), t.get(l).set(s, e);
46
+ }
47
+ return t;
48
+ }, [b, y.key, g.key]), T = $(() => new Set(R), [R]), W = $(() => new Set(F), [F]), V = T.size > 0, H = W.size > 0, B = $(() => {
49
+ const t = /* @__PURE__ */ new Map();
50
+ return n.forEach((e, l) => t.set(String(e.key), l)), t;
51
+ }, [n]), { colTotals: K, rowTotals: J, grandTotals: q } = $(() => {
52
+ const t = /* @__PURE__ */ new Map(), e = /* @__PURE__ */ new Map(), l = n.map(() => 0);
53
+ for (const s of b) {
54
+ const i = String(s[y.key]), a = String(s[g.key]), d = t.get(a) ?? n.map(() => 0), f = e.get(i) ?? n.map(() => 0);
55
+ n.forEach((x, j) => {
56
+ const w = s == null ? void 0 : s[x.key], S = Number(w);
57
+ Number.isNaN(S) || (d[j] += S, f[j] += S, l[j] += S);
58
+ }), t.set(a, d), e.set(i, f);
59
+ }
60
+ for (const s of N)
61
+ t.has(String(s)) || t.set(
62
+ String(s),
63
+ n.map(() => 0)
64
+ );
65
+ for (const s of k)
66
+ e.has(String(s)) || e.set(
67
+ String(s),
68
+ n.map(() => 0)
69
+ );
70
+ return { colTotals: t, rowTotals: e, grandTotals: l };
71
+ }, [b, n, y.key, g.key, N, k]), [O, v] = X(
72
+ () => _ ? Math.min(C, k.length) : k.length
73
+ );
74
+ Y(() => {
75
+ if (!_) {
76
+ v(k.length);
77
+ return;
78
+ }
79
+ let t = !1, e = null;
80
+ v(0);
81
+ const l = () => {
82
+ v((s) => {
83
+ const i = Math.min(s + C, k.length);
84
+ return i < k.length && !t && (e = window.setTimeout(l, M)), i;
85
+ });
86
+ };
87
+ return e = window.setTimeout(l, M), () => {
88
+ t = !0, e !== null && window.clearTimeout(e);
89
+ };
90
+ }, [_, C, M, k.length, b]);
91
+ const Q = _ ? k.slice(0, O) : k;
92
+ return /* @__PURE__ */ c.jsx("div", { className: o.tableContainer, children: /* @__PURE__ */ c.jsxs(
93
+ "table",
94
+ {
95
+ className: o.table,
96
+ "aria-label": `${y.label} by ${g.label}`,
97
+ children: [
98
+ /* @__PURE__ */ c.jsxs("thead", { children: [
99
+ /* @__PURE__ */ c.jsxs("tr", { children: [
100
+ /* @__PURE__ */ c.jsx(
101
+ "th",
102
+ {
103
+ scope: "col",
104
+ rowSpan: 1,
105
+ className: h(o.cell, o.header),
106
+ title: g.label,
107
+ children: /* @__PURE__ */ c.jsx(p, { children: g.label })
108
+ }
109
+ ),
110
+ N.map((t) => {
111
+ const e = g.formatValue ? g.formatValue(t) : t;
112
+ return /* @__PURE__ */ c.jsx(
113
+ "th",
114
+ {
115
+ scope: "colgroup",
116
+ colSpan: n.length,
117
+ className: h(o.cell, o.header),
118
+ title: e,
119
+ children: /* @__PURE__ */ c.jsx(p, { children: e })
120
+ },
121
+ `col-${t}`
122
+ );
123
+ }),
124
+ V && /* @__PURE__ */ c.jsx(
125
+ "th",
126
+ {
127
+ scope: "colgroup",
128
+ colSpan: Array.from(T).length,
129
+ className: h(o.cell, o.bold),
130
+ title: P,
131
+ children: /* @__PURE__ */ c.jsx(p, { children: P })
132
+ },
133
+ "col-total-group"
134
+ )
135
+ ] }),
136
+ /* @__PURE__ */ c.jsxs("tr", { children: [
137
+ /* @__PURE__ */ c.jsx(
138
+ "th",
139
+ {
140
+ scope: "col",
141
+ rowSpan: 1,
142
+ className: h(o.cell, o.header),
143
+ title: y.label,
144
+ style: E(A),
145
+ children: /* @__PURE__ */ c.jsx(p, { children: y.label })
146
+ }
147
+ ),
148
+ N.flatMap(
149
+ (t) => n.map((e, l) => /* @__PURE__ */ c.jsx(
150
+ "th",
151
+ {
152
+ scope: "col",
153
+ className: h(o.cell, o.header),
154
+ title: e.label,
155
+ style: E(r),
156
+ children: /* @__PURE__ */ c.jsx(p, { children: e.label })
157
+ },
158
+ `sub-${String(t)}-${e.key}-${l}`
159
+ ))
160
+ ),
161
+ V && n.filter((t) => T.has(t.key)).map((t, e) => /* @__PURE__ */ c.jsx(
162
+ "th",
163
+ {
164
+ scope: "col",
165
+ className: h(o.cell, o.bold),
166
+ title: t.label,
167
+ style: E(r),
168
+ children: /* @__PURE__ */ c.jsx(p, { children: t.label })
169
+ },
170
+ `sub-total-${t.key}-${e}`
171
+ ))
172
+ ] })
173
+ ] }),
174
+ /* @__PURE__ */ c.jsx("tbody", { children: Q.map((t) => {
175
+ const e = y.formatValue ? y.formatValue(t) : t;
176
+ return /* @__PURE__ */ c.jsxs("tr", { children: [
177
+ /* @__PURE__ */ c.jsx(
178
+ "th",
179
+ {
180
+ scope: "row",
181
+ className: h(o.cell, o.header),
182
+ title: e,
183
+ children: /* @__PURE__ */ c.jsx(p, { children: e })
184
+ }
185
+ ),
186
+ N.flatMap(
187
+ (l) => n.map((s, i) => {
188
+ var w;
189
+ const a = ((w = G.get(t)) == null ? void 0 : w.get(l)) ?? {}, d = a == null ? void 0 : a[s.key], f = `cell-${t}-${l}-${s.key}-${i}`, j = (() => {
190
+ if (s.showAsPercentage) {
191
+ const S = B.get(String(s.key)) ?? -1, U = K.get(String(l)) ?? n.map(() => 0), I = S >= 0 ? U[S] ?? 0 : 0;
192
+ if (s.showAsPercentage && z(Number(d)) && z(I) && I > 0)
193
+ return `${(d / I * 100).toFixed(s.percentageDecimalPlaces ?? 0)}%`;
194
+ }
195
+ return s.accessor ? s.accessor(a) : d;
196
+ })();
197
+ return /* @__PURE__ */ c.jsx("td", { className: h(o.cell), title: j, children: /* @__PURE__ */ c.jsx(p, { children: j }) }, f);
198
+ })
199
+ ),
200
+ V && n.filter((l) => T.has(l.key)).map((l, s) => {
201
+ const i = J.get(t) ?? n.map(() => 0), a = B.get(l.key) ?? -1, d = `row-total-${String(t)}-${l.key}-${s}`, f = a >= 0 ? i[a] ?? 0 : 0;
202
+ let x = f;
203
+ return l.showAsPercentage ? x = u(
204
+ f / (q[a] || 1) * 100,
205
+ l.percentageDecimalPlaces ?? 0
206
+ ) : l.accessor && (x = l.accessor({ [l.key]: f })), /* @__PURE__ */ c.jsx(
207
+ "td",
208
+ {
209
+ className: h(o.cell, o.bold),
210
+ title: x,
211
+ children: /* @__PURE__ */ c.jsx(p, { children: x })
212
+ },
213
+ d
214
+ );
215
+ })
216
+ ] }, `row-${t}`);
217
+ }) }),
218
+ /* @__PURE__ */ c.jsx("tfoot", { children: H && /* @__PURE__ */ c.jsxs("tr", { children: [
219
+ /* @__PURE__ */ c.jsx("th", { scope: "row", className: h(o.cell, o.bold), title: P, children: /* @__PURE__ */ c.jsx(p, { children: P }) }),
220
+ N.flatMap(
221
+ (t) => n.map((e, l) => {
222
+ const s = W.has(String(e.key)), i = K.get(String(t)) ?? n.map(() => 0), a = n.findIndex((w) => String(w.key) === String(e.key)), d = `col-total-${String(t)}-${e.key}-${l}`, f = i[a] ?? 0;
223
+ let x = f;
224
+ e.showAsPercentage ? x = u(100, e.percentageDecimalPlaces ?? 0) : e.accessor && (x = e.accessor({ [e.key]: f }));
225
+ const j = s ? x : "";
226
+ return /* @__PURE__ */ c.jsx(
227
+ "td",
228
+ {
229
+ className: h(o.cell, o.bold),
230
+ title: j,
231
+ children: /* @__PURE__ */ c.jsx(p, { children: j })
232
+ },
233
+ d
234
+ );
235
+ })
236
+ ),
237
+ V && n.filter((t) => T.has(t.key)).map((t, e) => {
238
+ const l = n.findIndex((d) => String(d.key) === t.key), s = `grand-total-${t.key}-${e}`, i = q[l] ?? 0;
239
+ let a = i;
240
+ return t.showAsPercentage ? a = u(
241
+ 100,
242
+ t.percentageDecimalPlaces ?? 0
243
+ ) : t.accessor && (a = t.accessor({ [t.key]: i })), /* @__PURE__ */ c.jsx("td", { className: h(o.cell, o.bold), title: a, children: /* @__PURE__ */ c.jsx(p, { children: a }) }, s);
244
+ })
245
+ ] }, "totals-row") })
246
+ ]
247
+ }
248
+ ) });
249
+ };
250
+ export {
251
+ ot as P
252
+ };
253
+ //# sourceMappingURL=PivotTable-DCJT9sa0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PivotTable-DCJT9sa0.js","sources":["../src/remarkable-ui/charts/tables/PivotTable/PivotTable.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport styles from './PivotTable.module.css';\nimport clsx from 'clsx';\nimport { PivotTableProps } from './PivotTable.types';\nimport { Typography } from '../../../shared/Typography/Typography';\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\nconst getCellWidthStyle = (width: number | undefined) => {\n return {\n minWidth: width ? `${width}px` : undefined,\n width: width ? `${width}px` : undefined,\n maxWidth: width ? `${width}px` : undefined,\n };\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}) => {\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={styles.tableContainer}>\n <table\n className={styles.table}\n aria-label={`${rowDimension.label} by ${columnDimension.label}`}\n >\n <thead>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n className={clsx(styles.cell, styles.header)}\n title={columnDimension.label}\n >\n <Typography>{columnDimension.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={columnValueDisplay}\n >\n <Typography>{columnValueDisplay}</Typography>\n </th>\n );\n })}\n {hasRowTotals && (\n <th\n key=\"col-total-group\"\n scope=\"colgroup\"\n colSpan={Array.from(rowTotalsSet).length}\n className={clsx(styles.cell, styles.bold)}\n title={totalLabel}\n >\n <Typography>{totalLabel}</Typography>\n </th>\n )}\n </tr>\n <tr>\n <th\n scope=\"col\"\n rowSpan={1}\n className={clsx(styles.cell, styles.header)}\n title={rowDimension.label}\n style={getCellWidthStyle(firstColumnWidth)}\n >\n <Typography>{rowDimension.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={measure.label}\n style={getCellWidthStyle(columnWidth)}\n >\n <Typography>{measure.label}</Typography>\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={clsx(styles.cell, styles.bold)}\n title={measure.label}\n style={getCellWidthStyle(columnWidth)}\n >\n <Typography>{measure.label}</Typography>\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 className={clsx(styles.cell, styles.header)}\n title={rowDimensionValue}\n >\n <Typography>{rowDimensionValue}</Typography>\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} className={clsx(styles.cell)} title={columnValueDisplay}>\n <Typography>{columnValueDisplay}</Typography>\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\n key={key}\n className={clsx(styles.cell, styles.bold)}\n title={displayValue}\n >\n <Typography>{displayValue}</Typography>\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n <tfoot>\n {hasColumnTotals && (\n <tr key=\"totals-row\">\n <th scope=\"row\" className={clsx(styles.cell, styles.bold)} title={totalLabel}>\n <Typography>{totalLabel}</Typography>\n </th>\n\n {columnValues.flatMap((columnValue) =>\n measures.map((measure, idx) => {\n const show = columnTotalsSet.has(String(measure.key));\n const totalsForCol = 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(100, measure.percentageDecimalPlaces ?? 0);\n } else if (measure.accessor) {\n displayValue = measure.accessor({ [measure.key]: value });\n }\n const columnValueDisplay = show ? displayValue : '';\n\n return (\n <td\n key={key}\n className={clsx(styles.cell, styles.bold)}\n title={columnValueDisplay}\n >\n <Typography>{columnValueDisplay}</Typography>\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={clsx(styles.cell, styles.bold)} title={displayValue}>\n <Typography>{displayValue}</Typography>\n </td>\n );\n })}\n </tr>\n )}\n </tfoot>\n </table>\n </div>\n );\n};\n"],"names":["isNumber","v","getPercentageDisplay","percentage","percentageDecimalPlaces","getCellWidthStyle","width","PivotTable","columnWidth","firstColumnWidth","data","measures","rowDimension","columnDimension","progressive","batchSize","batchDelayMs","rowTotalsFor","columnTotalsFor","totalLabel","rowValues","useMemo","s","d","rowValue","columnValues","columnValue","cellMap","map","r","c","rowTotalsSet","columnTotalsSet","hasRowTotals","hasColumnTotals","measureIndexByKey","m","i","colTotals","rowTotals","grandTotals","cTotals","rTotals","gTotals","cArr","rArr","raw","visibleCount","setVisibleCount","useState","useEffect","cancelled","t","tick","prev","next","visibleRows","jsx","styles","jsxs","clsx","Typography","columnValueDisplay","col","measure","idx","row","rowDimensionValue","object","_a","value","key","mi","totalsForCol","colTotal","totalsForRow","measureIndex","displayValue","show","mm"],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import { i as y, r as M, j as m, U as W, d as N, a as u, a4 as c, b as d, t as S, c as j, Y as B, a5 as G, Z as p, A as I, o as Y } from "./component.constants-6DERKpeq.js";
2
+ import { useTheme as k, defineComponent as O } from "@embeddable.com/react";
3
+ import { C as V } from "./ChartCard-CsgyAnzC.js";
4
+ import { useRef as E } from "react";
5
+ import { P as L } from "./PivotTable-DCJT9sa0.js";
6
+ import { u as b } from "./charts.newFillGaps.hooks-CEXFxNVs.js";
7
+ import { g as T } from "./formatter.utils-R5zIrZIA.js";
8
+ const U = (e, o) => {
9
+ const n = T(o);
10
+ return e.measures.map((s) => {
11
+ var t, a;
12
+ return {
13
+ key: s.name,
14
+ label: n.dimensionOrMeasureTitle(s),
15
+ showAsPercentage: !!((t = s.inputs) != null && t.showAsPercentage),
16
+ percentageDecimalPlaces: ((a = s.inputs) == null ? void 0 : a.decimalPlaces) ?? 1,
17
+ accessor: (i) => i[s.name] == null ? e.displayNullAs : n.data(s, i[s.name])
18
+ };
19
+ });
20
+ }, h = (e, o) => {
21
+ const n = T(o);
22
+ return {
23
+ key: e.dimension.name,
24
+ label: n.dimensionOrMeasureTitle(e.dimension),
25
+ formatValue: (s) => n.data(e.dimension, s)
26
+ };
27
+ }, Z = (e) => e.measures.filter((o) => {
28
+ var n;
29
+ return (n = o.inputs) == null ? void 0 : n.showColumnTotal;
30
+ }).map((o) => o.name), _ = (e) => {
31
+ const o = k();
32
+ y(o);
33
+ const { description: n, title: s } = M(e), {
34
+ measures: t,
35
+ rowDimension: a,
36
+ columnDimension: i,
37
+ showRowTotals: r,
38
+ displayNullAs: w,
39
+ columnWidth: f,
40
+ firstColumnWidth: g
41
+ } = e, D = b({
42
+ results: e.results,
43
+ dimension: i
44
+ }), l = b({
45
+ results: D,
46
+ dimension: a
47
+ }), P = E(null), C = U({ measures: t, displayNullAs: w }, o), v = h({ dimension: a }, o), R = h({ dimension: i }, o), F = Z({ measures: t }), A = r ? t.map((x) => x.name) : [];
48
+ return /* @__PURE__ */ m.jsx(
49
+ V,
50
+ {
51
+ ref: P,
52
+ title: s,
53
+ subtitle: n,
54
+ data: e.results,
55
+ dimensionsAndMeasures: [a, i, ...t],
56
+ errorMessage: l == null ? void 0 : l.error,
57
+ children: /* @__PURE__ */ m.jsx(
58
+ L,
59
+ {
60
+ firstColumnWidth: g,
61
+ columnWidth: f,
62
+ totalLabel: W.t("charts.pivotTable.total"),
63
+ data: l.data ?? [],
64
+ measures: C,
65
+ rowDimension: v,
66
+ columnDimension: R,
67
+ columnTotalsFor: F,
68
+ rowTotalsFor: A
69
+ }
70
+ )
71
+ }
72
+ );
73
+ }, q = {
74
+ name: "PivotTablePro",
75
+ label: "Pivot Table",
76
+ category: "Table Charts",
77
+ inputs: [
78
+ N,
79
+ {
80
+ ...u,
81
+ label: "Measures To Display",
82
+ inputs: [
83
+ ...u.inputs,
84
+ {
85
+ ...c,
86
+ name: "showColumnTotal",
87
+ label: "Show Column Total"
88
+ },
89
+ {
90
+ ...c,
91
+ name: "showAsPercentage",
92
+ label: "Show As Percentage",
93
+ description: "If turned on, other measures may be ignored",
94
+ defaultValue: !1
95
+ }
96
+ ]
97
+ },
98
+ {
99
+ ...d,
100
+ label: "Row Dimension",
101
+ name: "rowDimension"
102
+ },
103
+ {
104
+ ...d,
105
+ label: "Column Dimension",
106
+ name: "columnDimension"
107
+ },
108
+ S,
109
+ j,
110
+ { ...B, name: "showRowTotals", label: "Show Row Totals" },
111
+ { ...G, name: "displayNullAs", label: "Display Null As" },
112
+ {
113
+ ...p,
114
+ name: "firstColumnWidth",
115
+ label: "First Column Width",
116
+ description: "You can input a number in pixels e.g. 400"
117
+ },
118
+ {
119
+ ...p,
120
+ name: "columnWidth",
121
+ label: "Column Width",
122
+ description: "You can input a number in pixels e.g. 400"
123
+ },
124
+ I
125
+ ]
126
+ }, ee = O(_, q, {
127
+ props: (e) => ({
128
+ ...e,
129
+ results: Y({
130
+ from: e.dataset,
131
+ select: [e.rowDimension, e.columnDimension, ...e.measures],
132
+ limit: e.maxResults,
133
+ countRows: !0
134
+ })
135
+ })
136
+ });
137
+ export {
138
+ ee as default,
139
+ q as meta
140
+ };
141
+ //# sourceMappingURL=PivotTablePro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PivotTablePro.js","sources":["../src/remarkable-pro/components/charts/tables/PivotTablePro/PivotPro.utils.ts","../src/remarkable-pro/components/charts/tables/PivotTablePro/index.tsx","../src/remarkable-pro/components/charts/tables/PivotTablePro/PivotTablePro.emb.ts"],"sourcesContent":["import { Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../../theme/theme.types';\nimport { PivotTableProps } from '../../../../../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 = (props: {\n measures: Measure[];\n}): PivotTableProps<any>['columnTotalsFor'] | undefined => {\n return props.measures.filter((m) => m.inputs?.showColumnTotal).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 '../../../../../remarkable-ui';\nimport { useRef } from 'react';\nimport { useFillGaps } from '../../charts.newFillGaps.hooks';\nimport { getPivotColumnTotalsFor, getPivotDimension, getPivotMeasures } 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 showRowTotals?: boolean;\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 {\n measures,\n rowDimension,\n columnDimension,\n showRowTotals,\n displayNullAs,\n columnWidth,\n 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 = showRowTotals ? measures.map((m) => m.name) : [];\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 genericBoolean,\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: '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 { ...genericBoolean, name: 'showRowTotals', label: 'Show Row Totals' },\n { ...genericString, name: 'displayNullAs', label: 'Display Null As' },\n {\n ...genericNumber,\n name: 'firstColumnWidth',\n label: 'First Column Width',\n description: 'You can input a number in pixels e.g. 400',\n },\n {\n ...genericNumber,\n name: 'columnWidth',\n label: 'Column Width',\n description: 'You can input a number in pixels e.g. 400',\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","m","PivotTablePro","useTheme","i18nSetup","description","title","resolveI18nProps","measures","rowDimension","columnDimension","showRowTotals","displayNullAs","columnWidth","firstColumnWidth","resultsColumnDimensionFillGaps","useFillGaps","results","cardContentRef","useRef","pivotMeasures","pivotRowDimension","pivotColumnDimension","pivotColumnTotalsFor","pivotRowTotalsFor","jsx","ChartCard","PivotTable","i18n","meta","dataset","subInputGenericBoolean","dimensionWithDateBounds","genericBoolean","genericString","genericNumber","maxResults","PivotTablePro_emb","defineComponent","inputs","loadData"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { j as s, ao as D, ar as N, as as q, ap as x, aq as w, an as K } from "./component.constants-D59iJ42U.js";
1
+ import { j as s, ap as D, as as N, at as q, aq as x, ar as w, ao as K } from "./component.constants-6DERKpeq.js";
2
2
  import { useState as b, useRef as P, useEffect as T, useMemo as O } from "react";
3
- import { u as z, d as A, g as G, I as H, S as J, a as M } from "./EditorCard-VE-lXcu3.js";
3
+ import { u as z, d as A, g as G, I as H, S as J, a as M } from "./EditorCard-DAwqwoAp.js";
4
4
  const Q = "_selectField_73cni_1", U = {
5
5
  selectField: Q
6
6
  }, Y = ({
@@ -104,4 +104,4 @@ const Q = "_selectField_73cni_1", U = {
104
104
  export {
105
105
  Y as S
106
106
  };
107
- //# sourceMappingURL=SingleSelectField-Dzx78rCq.js.map
107
+ //# sourceMappingURL=SingleSelectField-CMzbI0wG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SingleSelectField-Dzx78rCq.js","sources":["../src/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { SelectListCategory } from '../shared/SelectList/SelectListOptions/SelectListCategory/SelectListCategory';\nimport { groupOptionsByCategory } from '../shared/SelectList/selectList.utils';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport styles from './SingleSelectField.module.css';\nimport { FieldErrorMessage } from '../../../shared/FieldErrorMessage/FieldErrorMessage';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n isSearchable?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n};\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n isSearchable,\n isClearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div className={styles.selectField}>\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectList>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n />\n )}\n <SelectListOptions disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <div key={category}>\n <SelectListCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </div>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectListOptions>\n </SelectList>\n </Dropdown>\n {errorMessage && <FieldErrorMessage message={errorMessage} />}\n </div>\n );\n};\n"],"names":["SingleSelectField","value","startIcon","options","disabled","placeholder","isSearchable","isClearable","isLoading","noOptionsMessage","onChange","onSearch","error","errorMessage","isOpen","setIsOpen","useState","searchValue","setSearchValue","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","option","opt","debouncedSearch","useMemo","debounce","displayOptions","groupedOptions","groupOptionsByCategory","handleChange","newValue","handleSearch","newSearch","hasError","jsxs","styles","jsx","Dropdown","SelectButton","SelectList","TextField","IconSearch","SelectListOptions","category","categoryOptions","SelectListCategory","SelectListOption","FieldErrorMessage"],"mappings":";;;;;GAmCaA,IAAgD,CAAC;AAAA,EAC5D,OAAAC,IAAQ;AAAA,EACR,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,cAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAaC,CAAc,IAAIF,EAAiB,EAAE,GACnD,CAACG,GAAeC,CAAgB,IAAIJ,EAAiBf,CAAK,GAE1DoB,IAAiBC,EAAyB,IAAI;AACpD,EAAAC,EAAqBT,GAAQO,CAAc,GAE3CG,EAAU,MAAM;AACd,QAAI,CAACvB,GAAO;AACV,MAAAmB,EAAiB,EAAE;AACnB;AAAA,IACF;AAEA,UAAMK,IAAStB,EAAQ,KAAK,CAACuB,MAAQA,EAAI,UAAUzB,CAAK;AACxD,IAAIwB,KACFL,EAAiBK,EAAO,KAAK;AAAA,EAEjC,GAAG,CAACxB,GAAOE,CAAO,CAAC;AAEnB,QAAMwB,IAAkBC,EAAQ,MAAOjB,IAAWkB,EAASlB,CAAQ,IAAI,QAAY,CAACA,CAAQ,CAAC,GAEvFmB,IACJxB,KAAgB,CAACK,IACbR,EAAQ,OAAO,CAACsB,MAAWA,EAAO,MAAM,cAAc,SAASR,EAAY,YAAA,CAAa,CAAC,IACzFd,GAEA4B,IAAiBH,EAAQ,MAAMI,EAAuBF,CAAc,GAAG,CAACA,CAAc,CAAC,GAEvFG,IAAe,CAACC,MAAsB;AAK1C,QAJAhB,EAAe,EAAE,GACjBR,EAASwB,KAAY,EAAE,GACvBvB,KAAA,QAAAA,EAAW,KAEPuB,MAAa;AACf,MAAAd,EAAiB,EAAE;AAAA,SACd;AACL,YAAMK,IAAStB,EAAQ,KAAK,CAACuB,MAAQA,EAAI,UAAUQ,CAAQ;AAC3D,MAAIT,KAAQL,EAAiBK,EAAO,KAAK;AAAA,IAC3C;AAAA,EACF,GAEMU,IAAe,CAACC,MAAsB;AAC1C,IAAAlB,EAAekB,CAAS,GACxBT,KAAA,QAAAA,EAAkBS;AAAA,EACpB,GAEMC,IAAWzB,KAAS,CAAC,CAACC;AAE5B,SACEyB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAWC,EAAO,aACrB,UAAA;AAAA,IAAAC,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAM3B;AAAA,QACN,cAAcC;AAAA,QACd,UAAAX;AAAA,QACA,kBACEoC,gBAAAA,EAAAA;AAAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAAxC;AAAA,YACA,cAAW;AAAA,YACX,aAAAG;AAAA,YACA,UAAAD;AAAA,YACA,YAAYe;AAAA,YACZ,SAAS,MAAMc,EAAa,EAAE;AAAA,YAC9B,aAAA1B;AAAA,YACA,WAAAC;AAAA,YACA,OAAO6B;AAAA,UAAA;AAAA,QAAA;AAAA,QAIX,iCAACM,GAAA,EACE,UAAA;AAAA,UAAArC,KACCkC,gBAAAA,EAAAA;AAAAA,YAACI;AAAA,YAAA;AAAA,cACC,KAAKvB;AAAA,cACL,WAAWwB;AAAA,cACX,cAAW;AAAA,cACX,aAAY;AAAA,cACZ,MAAK;AAAA,cACL,OAAO5B;AAAA,cACP,WAAW,CAAC,MAAM,EAAE,gBAAA;AAAA,cACpB,UAAUkB;AAAA,YAAA;AAAA,UAAA;AAAA,UAGdG,gBAAAA,EAAAA,KAACQ,GAAA,EAAkB,UAAUtC,GAC1B,UAAA;AAAA,YAAAuB,IACG,OAAO,QAAQA,CAAc,EAAE,IAAI,CAAC,CAACgB,GAAUC,CAAe,MAC5DV,gBAAAA,EAAAA,KAAC,OAAA,EACC,UAAA;AAAA,cAAAE,gBAAAA,EAAAA,IAACS,GAAA,EAAmB,OAAOF,EAAA,CAAU;AAAA,cACpCC,EAAgB,IAAI,CAACvB,MACpBe,gBAAAA,EAAAA;AAAAA,gBAACU;AAAA,gBAAA;AAAA,kBAEC,SAAS,MAAMjB,EAAaR,KAAA,gBAAAA,EAAQ,KAAK;AAAA,kBACzC,YAAYA,EAAO,UAAUxB;AAAA,kBAC5B,GAAGwB;AAAA,gBAAA;AAAA,iBAHCA,KAAA,gBAAAA,EAAQ,UAASA,EAAO;AAAA,cAAA,CAKhC;AAAA,YAAA,EAAA,GATOsB,CAUV,CACD,IACDjB,EAAe,IAAI,CAACL,MAClBe,gBAAAA,EAAAA;AAAAA,cAACU;AAAA,cAAA;AAAA,gBAEC,SAAS,MAAMjB,EAAaR,KAAA,gBAAAA,EAAQ,KAAK;AAAA,gBACzC,YAAYA,EAAO,UAAUxB;AAAA,gBAC5B,GAAGwB;AAAA,cAAA;AAAA,eAHCA,KAAA,gBAAAA,EAAQ,UAASA,EAAO;AAAA,YAAA,CAKhC;AAAA,YACJtB,EAAQ,WAAW,KAClBqC,gBAAAA,EAAAA,IAACU,GAAA,EAAiB,UAAQ,IAAC,OAAM,SAAQ,OAAOzC,EAAA,CAAkB;AAAA,UAAA,EAAA,CAEtE;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEDI,KAAgB2B,gBAAAA,EAAAA,IAACW,GAAA,EAAkB,SAAStC,EAAA,CAAc;AAAA,EAAA,GAC7D;AAEJ;"}
1
+ {"version":3,"file":"SingleSelectField-CMzbI0wG.js","sources":["../src/remarkable-ui/editors/select/SingleSelectField/SingleSelectField.tsx"],"sourcesContent":["import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport {\n SelectListOption,\n SelectListOptionProps,\n SelectListOptionPropsWithCategory,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { SelectListCategory } from '../shared/SelectList/SelectListOptions/SelectListCategory/SelectListCategory';\nimport { groupOptionsByCategory } from '../shared/SelectList/selectList.utils';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { IconSearch, TablerIcon } from '@tabler/icons-react';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport styles from './SingleSelectField.module.css';\nimport { FieldErrorMessage } from '../../../shared/FieldErrorMessage/FieldErrorMessage';\n\nexport type SingleSelectFieldProps = {\n options: (SelectListOptionProps | SelectListOptionPropsWithCategory)[];\n startIcon?: TablerIcon;\n value?: string;\n disabled?: boolean;\n placeholder?: string;\n isSearchable?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n noOptionsMessage?: string;\n onChange: (value: string) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n};\n\nexport const SingleSelectField: FC<SingleSelectFieldProps> = ({\n value = '',\n startIcon,\n options,\n disabled,\n placeholder,\n isSearchable,\n isClearable,\n isLoading,\n noOptionsMessage = 'No options available',\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [selectedLabel, setSelectedLabel] = useState<string>(value);\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n if (!value) {\n setSelectedLabel('');\n return;\n }\n\n const option = options.find((opt) => opt.value === value);\n if (option) {\n setSelectedLabel(option.label);\n }\n }, [value, options]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const groupedOptions = useMemo(() => groupOptionsByCategory(displayOptions), [displayOptions]);\n\n const handleChange = (newValue?: string) => {\n setSearchValue('');\n onChange(newValue ?? '');\n onSearch?.('');\n\n if (newValue === '') {\n setSelectedLabel('');\n } else {\n const option = options.find((opt) => opt.value === newValue);\n if (option) setSelectedLabel(option.label);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div className={styles.selectField}>\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n startIcon={startIcon}\n aria-label=\"Select option\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={() => handleChange('')}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectList>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n />\n )}\n <SelectListOptions disabled={isLoading}>\n {groupedOptions\n ? Object.entries(groupedOptions).map(([category, categoryOptions]) => (\n <div key={category}>\n <SelectListCategory label={category} />\n {categoryOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n </div>\n ))\n : displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={() => handleChange(option?.value)}\n isSelected={option.value === value}\n {...option}\n />\n ))}\n {options.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectListOptions>\n </SelectList>\n </Dropdown>\n {errorMessage && <FieldErrorMessage message={errorMessage} />}\n </div>\n );\n};\n"],"names":["SingleSelectField","value","startIcon","options","disabled","placeholder","isSearchable","isClearable","isLoading","noOptionsMessage","onChange","onSearch","error","errorMessage","isOpen","setIsOpen","useState","searchValue","setSearchValue","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","option","opt","debouncedSearch","useMemo","debounce","displayOptions","groupedOptions","groupOptionsByCategory","handleChange","newValue","handleSearch","newSearch","hasError","jsxs","styles","jsx","Dropdown","SelectButton","SelectList","TextField","IconSearch","SelectListOptions","category","categoryOptions","SelectListCategory","SelectListOption","FieldErrorMessage"],"mappings":";;;;;GAmCaA,IAAgD,CAAC;AAAA,EAC5D,OAAAC,IAAQ;AAAA,EACR,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,cAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAaC,CAAc,IAAIF,EAAiB,EAAE,GACnD,CAACG,GAAeC,CAAgB,IAAIJ,EAAiBf,CAAK,GAE1DoB,IAAiBC,EAAyB,IAAI;AACpD,EAAAC,EAAqBT,GAAQO,CAAc,GAE3CG,EAAU,MAAM;AACd,QAAI,CAACvB,GAAO;AACV,MAAAmB,EAAiB,EAAE;AACnB;AAAA,IACF;AAEA,UAAMK,IAAStB,EAAQ,KAAK,CAACuB,MAAQA,EAAI,UAAUzB,CAAK;AACxD,IAAIwB,KACFL,EAAiBK,EAAO,KAAK;AAAA,EAEjC,GAAG,CAACxB,GAAOE,CAAO,CAAC;AAEnB,QAAMwB,IAAkBC,EAAQ,MAAOjB,IAAWkB,EAASlB,CAAQ,IAAI,QAAY,CAACA,CAAQ,CAAC,GAEvFmB,IACJxB,KAAgB,CAACK,IACbR,EAAQ,OAAO,CAACsB,MAAWA,EAAO,MAAM,cAAc,SAASR,EAAY,YAAA,CAAa,CAAC,IACzFd,GAEA4B,IAAiBH,EAAQ,MAAMI,EAAuBF,CAAc,GAAG,CAACA,CAAc,CAAC,GAEvFG,IAAe,CAACC,MAAsB;AAK1C,QAJAhB,EAAe,EAAE,GACjBR,EAASwB,KAAY,EAAE,GACvBvB,KAAA,QAAAA,EAAW,KAEPuB,MAAa;AACf,MAAAd,EAAiB,EAAE;AAAA,SACd;AACL,YAAMK,IAAStB,EAAQ,KAAK,CAACuB,MAAQA,EAAI,UAAUQ,CAAQ;AAC3D,MAAIT,KAAQL,EAAiBK,EAAO,KAAK;AAAA,IAC3C;AAAA,EACF,GAEMU,IAAe,CAACC,MAAsB;AAC1C,IAAAlB,EAAekB,CAAS,GACxBT,KAAA,QAAAA,EAAkBS;AAAA,EACpB,GAEMC,IAAWzB,KAAS,CAAC,CAACC;AAE5B,SACEyB,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAWC,EAAO,aACrB,UAAA;AAAA,IAAAC,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAM3B;AAAA,QACN,cAAcC;AAAA,QACd,UAAAX;AAAA,QACA,kBACEoC,gBAAAA,EAAAA;AAAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAAxC;AAAA,YACA,cAAW;AAAA,YACX,aAAAG;AAAA,YACA,UAAAD;AAAA,YACA,YAAYe;AAAA,YACZ,SAAS,MAAMc,EAAa,EAAE;AAAA,YAC9B,aAAA1B;AAAA,YACA,WAAAC;AAAA,YACA,OAAO6B;AAAA,UAAA;AAAA,QAAA;AAAA,QAIX,iCAACM,GAAA,EACE,UAAA;AAAA,UAAArC,KACCkC,gBAAAA,EAAAA;AAAAA,YAACI;AAAA,YAAA;AAAA,cACC,KAAKvB;AAAA,cACL,WAAWwB;AAAA,cACX,cAAW;AAAA,cACX,aAAY;AAAA,cACZ,MAAK;AAAA,cACL,OAAO5B;AAAA,cACP,WAAW,CAAC,MAAM,EAAE,gBAAA;AAAA,cACpB,UAAUkB;AAAA,YAAA;AAAA,UAAA;AAAA,UAGdG,gBAAAA,EAAAA,KAACQ,GAAA,EAAkB,UAAUtC,GAC1B,UAAA;AAAA,YAAAuB,IACG,OAAO,QAAQA,CAAc,EAAE,IAAI,CAAC,CAACgB,GAAUC,CAAe,MAC5DV,gBAAAA,EAAAA,KAAC,OAAA,EACC,UAAA;AAAA,cAAAE,gBAAAA,EAAAA,IAACS,GAAA,EAAmB,OAAOF,EAAA,CAAU;AAAA,cACpCC,EAAgB,IAAI,CAACvB,MACpBe,gBAAAA,EAAAA;AAAAA,gBAACU;AAAA,gBAAA;AAAA,kBAEC,SAAS,MAAMjB,EAAaR,KAAA,gBAAAA,EAAQ,KAAK;AAAA,kBACzC,YAAYA,EAAO,UAAUxB;AAAA,kBAC5B,GAAGwB;AAAA,gBAAA;AAAA,iBAHCA,KAAA,gBAAAA,EAAQ,UAASA,EAAO;AAAA,cAAA,CAKhC;AAAA,YAAA,EAAA,GATOsB,CAUV,CACD,IACDjB,EAAe,IAAI,CAACL,MAClBe,gBAAAA,EAAAA;AAAAA,cAACU;AAAA,cAAA;AAAA,gBAEC,SAAS,MAAMjB,EAAaR,KAAA,gBAAAA,EAAQ,KAAK;AAAA,gBACzC,YAAYA,EAAO,UAAUxB;AAAA,gBAC5B,GAAGwB;AAAA,cAAA;AAAA,eAHCA,KAAA,gBAAAA,EAAQ,UAASA,EAAO;AAAA,YAAA,CAKhC;AAAA,YACJtB,EAAQ,WAAW,KAClBqC,gBAAAA,EAAAA,IAACU,GAAA,EAAiB,UAAQ,IAAC,OAAM,SAAQ,OAAOzC,EAAA,CAAkB;AAAA,UAAA,EAAA,CAEtE;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEDI,KAAgB2B,gBAAAA,EAAAA,IAACW,GAAA,EAAkB,SAAStC,EAAA,CAAc;AAAA,EAAA,GAC7D;AAEJ;"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
- import { d as s, z as r, t as d, c as m, ad as c, V as n, o as u } from "./component.constants-D59iJ42U.js";
3
- import { M as p, S as g } from "./index-IjB-3gUH.js";
2
+ import { d as s, z as r, t as d, c as m, ae as c, V as n, o as u } from "./component.constants-6DERKpeq.js";
3
+ import { M as p, S as g } from "./index-hua9dsBD.js";
4
4
  const f = {
5
5
  name: "SingleSelectFieldPro",
6
6
  label: "Single Select Field",