@bonnard/react 0.2.0 → 0.3.0
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/dashboard.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as BarChart, i as LineChart, n as PieChart, o as BigValue, r as AreaChart, t as DataTable, u as useBonnard } from "./data-table-
|
|
1
|
+
import { a as BarChart, i as LineChart, n as PieChart, o as BigValue, r as AreaChart, t as DataTable, u as useBonnard } from "./data-table-CkOo6s_V.js";
|
|
2
2
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
3
|
import DOMPurify from "isomorphic-dompurify";
|
|
4
4
|
import matter from "gray-matter";
|
|
@@ -798,10 +798,21 @@ function SectionRenderer({ section, queryStates }) {
|
|
|
798
798
|
queryStates
|
|
799
799
|
}, i))
|
|
800
800
|
});
|
|
801
|
-
|
|
801
|
+
const isBigValue = section.component.type === "BigValue";
|
|
802
|
+
const inner = /* @__PURE__ */ jsx(ComponentRenderer, {
|
|
802
803
|
component: section.component,
|
|
803
804
|
queryStates
|
|
804
805
|
});
|
|
806
|
+
if (isBigValue) return inner;
|
|
807
|
+
return /* @__PURE__ */ jsx("div", {
|
|
808
|
+
style: {
|
|
809
|
+
borderRadius: "var(--bon-radius, 8px)",
|
|
810
|
+
border: "1px solid var(--bon-border)",
|
|
811
|
+
backgroundColor: "var(--bon-bg-card)",
|
|
812
|
+
padding: 16
|
|
813
|
+
},
|
|
814
|
+
children: inner
|
|
815
|
+
});
|
|
805
816
|
}
|
|
806
817
|
function ComponentRenderer({ component, queryStates }) {
|
|
807
818
|
const { type, props } = component;
|
|
@@ -265,7 +265,10 @@ function formatAxisLabel(val) {
|
|
|
265
265
|
/** ECharts y-axis formatter — compact numbers */
|
|
266
266
|
function axisValueFormatter(val) {
|
|
267
267
|
if (Math.abs(val) >= 1e6) return `${(val / 1e6).toFixed(1)}M`;
|
|
268
|
-
if (Math.abs(val) >= 1e3)
|
|
268
|
+
if (Math.abs(val) >= 1e3) {
|
|
269
|
+
const k = val / 1e3;
|
|
270
|
+
return k % 1 === 0 ? `${k}K` : `${k.toFixed(1)}K`;
|
|
271
|
+
}
|
|
269
272
|
return String(val);
|
|
270
273
|
}
|
|
271
274
|
/** Convert snake_case or camelCase field names to Title Case */
|
|
@@ -316,6 +319,21 @@ function BigValue({ data, value, title, fmt }) {
|
|
|
316
319
|
//#endregion
|
|
317
320
|
//#region src/lib/build-series.ts
|
|
318
321
|
/**
|
|
322
|
+
* Pure data transformation: splits flat query results into multi-series datasets.
|
|
323
|
+
*
|
|
324
|
+
* Four cases:
|
|
325
|
+
* | y columns | series prop | Result |
|
|
326
|
+
* |-----------|-------------|-------------------------------|
|
|
327
|
+
* | Single | None | 1 dataset (current behavior) |
|
|
328
|
+
* | Single | Set | N datasets (per series value) |
|
|
329
|
+
* | Multiple | None | N datasets (per y column) |
|
|
330
|
+
* | Multiple | Set | N*M datasets |
|
|
331
|
+
*/
|
|
332
|
+
/** Strip view/cube prefix and convert snake_case to Title Case for legend labels */
|
|
333
|
+
function humanizeField(name) {
|
|
334
|
+
return (name.includes(".") ? name.slice(name.indexOf(".") + 1) : name).replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
319
337
|
* Build multi-series datasets from flat query data.
|
|
320
338
|
*
|
|
321
339
|
* @param data - Flat array of row objects from query
|
|
@@ -328,11 +346,17 @@ function buildSeries(data, x, y, series) {
|
|
|
328
346
|
labels: [],
|
|
329
347
|
datasets: []
|
|
330
348
|
};
|
|
349
|
+
const firstX = String(data[0][x] ?? "");
|
|
350
|
+
if (/^\d{4}-\d{2}-\d{2}/.test(firstX)) data = [...data].sort((a, b) => {
|
|
351
|
+
const aVal = String(a[x] ?? "");
|
|
352
|
+
const bVal = String(b[x] ?? "");
|
|
353
|
+
return aVal.localeCompare(bVal);
|
|
354
|
+
});
|
|
331
355
|
const yColumns = y.split(",").map((col) => col.trim()).filter(Boolean);
|
|
332
356
|
if (!series) return {
|
|
333
357
|
labels: data.map((row) => String(row[x] ?? "")),
|
|
334
358
|
datasets: yColumns.map((col) => ({
|
|
335
|
-
name: col,
|
|
359
|
+
name: humanizeField(col),
|
|
336
360
|
values: data.map((row) => {
|
|
337
361
|
const val = row[col];
|
|
338
362
|
return val == null ? null : Number(val);
|
|
@@ -362,7 +386,7 @@ function buildSeries(data, x, y, series) {
|
|
|
362
386
|
}
|
|
363
387
|
const datasets = [];
|
|
364
388
|
for (const sk of seriesKeys) for (const col of yColumns) {
|
|
365
|
-
const name = yColumns.length === 1 ? sk : `${sk} - ${col}`;
|
|
389
|
+
const name = yColumns.length === 1 ? sk : `${sk} - ${humanizeField(col)}`;
|
|
366
390
|
const values = xValues.map((xRaw) => {
|
|
367
391
|
const row = lookup.get(`${xRaw}\0${sk}`);
|
|
368
392
|
if (!row) return null;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as BarChart, c as PALETTES, i as LineChart, l as BonnardContext, n as PieChart, o as BigValue, r as AreaChart, s as CHART_COLORS, t as DataTable, u as useBonnard } from "./data-table-
|
|
1
|
+
import { a as BarChart, c as PALETTES, i as LineChart, l as BonnardContext, n as PieChart, o as BigValue, r as AreaChart, s as CHART_COLORS, t as DataTable, u as useBonnard } from "./data-table-CkOo6s_V.js";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { createClient } from "@bonnard/sdk";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-series.d.ts","sourceRoot":"","sources":["../../src/lib/build-series.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"build-series.d.ts","sourceRoot":"","sources":["../../src/lib/build-series.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,CAAC,EAAE,MAAM,GACd,iBAAiB,CA+EnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-theme.d.ts","sourceRoot":"","sources":["../../src/theme/chart-theme.ts"],"names":[],"mappings":"AAKA,sCAAsC;AACtC,eAAO,MAAM,QAAQ;;;;;CAuBX,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,QAAQ,CAAC;AAGhD,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAAqB,CAAC;AAEhE,8BAA8B;AAC9B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAE/D;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB;;;;;;;;;;oBAQhC,MAAM,EAAE,WAAW,OAAO,QAAQ,WAAW,SAAS,OAAO,QAAQ;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;EAWrI;AAED,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB;;;;;;;;;;;;;;EAWlD;AAED,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAQvD;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAGtD;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQhD;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,CAKzE;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBnD;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"chart-theme.d.ts","sourceRoot":"","sources":["../../src/theme/chart-theme.ts"],"names":[],"mappings":"AAKA,sCAAsC;AACtC,eAAO,MAAM,QAAQ;;;;;CAuBX,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,QAAQ,CAAC;AAGhD,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAAqB,CAAC;AAEhE,8BAA8B;AAC9B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAE/D;AAED,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB;;;;;;;;;;oBAQhC,MAAM,EAAE,WAAW,OAAO,QAAQ,WAAW,SAAS,OAAO,QAAQ;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;EAWrI;AAED,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB;;;;;;;;;;;;;;EAWlD;AAED,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAQvD;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAGtD;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQhD;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,CAKzE;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBnD;AAED,iDAAiD;AACjD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKtD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bonnard/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Bonnard embedded analytics — React charts, dashboards, and hooks",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"isomorphic-dompurify": "^2.0.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@bonnard/sdk": "^0.
|
|
50
|
+
"@bonnard/sdk": "^0.3.0",
|
|
51
51
|
"@types/react": "^19.0.0",
|
|
52
52
|
"tsdown": "^0.12.5",
|
|
53
53
|
"typescript": "^5.5.0"
|