@fayz-ai/plugin-reports 0.11.1 → 0.12.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/{chunk-4SPBNVQA.js → chunk-5SO5HWV2.js} +27 -4
- package/dist/chunk-5SO5HWV2.js.map +1 -0
- package/dist/components/ExportDropdown.d.ts.map +1 -1
- package/dist/components/ReportPagination.d.ts.map +1 -1
- package/dist/{excel-KIJTC7OJ.js → excel-LDM5H5IW.js} +3 -3
- package/dist/{excel-KIJTC7OJ.js.map → excel-LDM5H5IW.js.map} +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +960 -56
- package/dist/index.js.map +1 -1
- package/dist/lib/columns.d.ts.map +1 -1
- package/dist/lib/preferences.d.ts +90 -0
- package/dist/lib/preferences.d.ts.map +1 -0
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/pt-BR.d.ts.map +1 -1
- package/dist/{pdf-7QQ3U5JQ.js → pdf-XA2AR6B4.js} +3 -3
- package/dist/{pdf-7QQ3U5JQ.js.map → pdf-XA2AR6B4.js.map} +1 -1
- package/dist/types.d.ts +4 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/views/AnalyticsAssistant.d.ts.map +1 -1
- package/dist/views/AnalyticsModule.d.ts +1 -1
- package/dist/views/AnalyticsModule.d.ts.map +1 -1
- package/dist/views/AnalyticsReportViewer.d.ts.map +1 -1
- package/dist/views/AnalyticsSettingsPage.d.ts +16 -0
- package/dist/views/AnalyticsSettingsPage.d.ts.map +1 -0
- package/dist/views/AnalyticsSurface.d.ts +22 -3
- package/dist/views/AnalyticsSurface.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-4SPBNVQA.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../src/lib/columns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../src/lib/columns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAqD/C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAoB5F;AAMD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAChB,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CA0ElC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { AnalyticsCardDef, AnalyticsDimension, AnalyticsMeasure, AnalyticsVizType } from '@fayz-ai/core';
|
|
2
|
+
export interface AnalyticsCardPref {
|
|
3
|
+
/** Drop from the catalogue entirely — a built-in this tenant does not use. */
|
|
4
|
+
hidden?: boolean;
|
|
5
|
+
/** Force onto (true) or off (false) the overview, whatever the card declares. */
|
|
6
|
+
pinned?: boolean;
|
|
7
|
+
/** Position on the overview grid. */
|
|
8
|
+
order?: number;
|
|
9
|
+
/** Tile width, in grid columns. */
|
|
10
|
+
span?: 1 | 2 | 3 | 4;
|
|
11
|
+
/** Rename — the vocabulary of the house beats the vocabulary of the plugin. */
|
|
12
|
+
name?: string;
|
|
13
|
+
/** Chart type override. */
|
|
14
|
+
viz?: AnalyticsVizType;
|
|
15
|
+
/** Measure keys to keep. Absent = all. Ratio operands are always kept. */
|
|
16
|
+
measures?: string[];
|
|
17
|
+
/** Visible dimension keys to keep. Absent = all. Hidden ones always survive. */
|
|
18
|
+
dimensions?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface CustomReport {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
category: string;
|
|
25
|
+
icon?: string;
|
|
26
|
+
/** Shown in the list's "Created by" column — the house, not the product. */
|
|
27
|
+
createdBy?: string;
|
|
28
|
+
/** The card whose data source this report reads. */
|
|
29
|
+
baseId: string;
|
|
30
|
+
dimensions: string[];
|
|
31
|
+
measures: string[];
|
|
32
|
+
viz: AnalyticsVizType;
|
|
33
|
+
createdAt: string;
|
|
34
|
+
}
|
|
35
|
+
export interface AnalyticsPrefs {
|
|
36
|
+
version: 1;
|
|
37
|
+
cards: Record<string, AnalyticsCardPref>;
|
|
38
|
+
custom: CustomReport[];
|
|
39
|
+
}
|
|
40
|
+
/** Read the saved preferences and re-render when any surface changes them. */
|
|
41
|
+
export declare function useAnalyticsPrefs(): AnalyticsPrefs;
|
|
42
|
+
export declare function setCardPref(cardId: string, patch: AnalyticsCardPref): void;
|
|
43
|
+
export declare function clearCardPref(cardId: string): void;
|
|
44
|
+
/** Persist the overview order for the ids given, in the order given. */
|
|
45
|
+
export declare function setOverviewOrder(ids: string[]): void;
|
|
46
|
+
export declare function saveCustomReport(report: CustomReport): void;
|
|
47
|
+
export declare function deleteCustomReport(id: string): void;
|
|
48
|
+
export declare function resetAnalyticsPrefs(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Which cards read the same rows.
|
|
51
|
+
*
|
|
52
|
+
* A view or an RPC is named, so its name IS the identity. A function source has
|
|
53
|
+
* no name the outside can see, so the card's declared `grain` stands in — two
|
|
54
|
+
* cards at order grain over the same app function answer about the same rows,
|
|
55
|
+
* and that is exactly the set whose fields can be mixed in one report. A card
|
|
56
|
+
* with neither falls back to its own id: alone in its group, which is the safe
|
|
57
|
+
* answer when nothing says otherwise.
|
|
58
|
+
*/
|
|
59
|
+
export declare function sourceKey(card: AnalyticsCardDef): string;
|
|
60
|
+
export interface FieldPalette {
|
|
61
|
+
dimensions: AnalyticsDimension[];
|
|
62
|
+
measures: AnalyticsMeasure[];
|
|
63
|
+
}
|
|
64
|
+
export interface AnalyticsSourceGroup extends FieldPalette {
|
|
65
|
+
key: string;
|
|
66
|
+
/** A real card over this source — what a new report inherits its query from. */
|
|
67
|
+
base: AnalyticsCardDef;
|
|
68
|
+
label: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The distinct data sources behind a catalogue, each with everything askable of
|
|
72
|
+
* it.
|
|
73
|
+
*
|
|
74
|
+
* The builder offers THESE, not the seventeen cards: six of them read the same
|
|
75
|
+
* order rows, and a source picker listing all six asks the user to choose
|
|
76
|
+
* between six spellings of one answer. Sources with nothing to aggregate are
|
|
77
|
+
* left out — a detail listing has no measures, and a report with no measure is
|
|
78
|
+
* a table of raw rows the user already has.
|
|
79
|
+
*/
|
|
80
|
+
export declare function analyticsSources(pool: AnalyticsCardDef[]): AnalyticsSourceGroup[];
|
|
81
|
+
/** Every field any card offers over the same source, de-duplicated by key. */
|
|
82
|
+
export declare function fieldPalette(pool: AnalyticsCardDef[], base: AnalyticsCardDef): FieldPalette;
|
|
83
|
+
/** A stored custom report, rebuilt against the catalogue it derives from. */
|
|
84
|
+
export declare function resolveCustomReport(report: CustomReport, pool: AnalyticsCardDef[]): AnalyticsCardDef | null;
|
|
85
|
+
/**
|
|
86
|
+
* The catalogue as this user sees it: overrides applied, their own reports
|
|
87
|
+
* appended, the ones they removed gone.
|
|
88
|
+
*/
|
|
89
|
+
export declare function resolveCards(catalogue: AnalyticsCardDef[], prefs: AnalyticsPrefs): AnalyticsCardDef[];
|
|
90
|
+
//# sourceMappingURL=preferences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/lib/preferences.ts"],"names":[],"mappings":"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"}
|
package/dist/locales/en.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsGrC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../src/locales/pt-BR.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../src/locales/pt-BR.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmGvC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { formatValuePlain } from './chunk-
|
|
1
|
+
import { formatValuePlain } from './chunk-5SO5HWV2.js';
|
|
2
2
|
|
|
3
3
|
// src/export/pdf.ts
|
|
4
4
|
var load = (m) => new Function("m", "return import(m)")(m);
|
|
@@ -33,5 +33,5 @@ async function isPdfAvailable() {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
export { exportToPdf, isPdfAvailable };
|
|
36
|
-
//# sourceMappingURL=pdf-
|
|
37
|
-
//# sourceMappingURL=pdf-
|
|
36
|
+
//# sourceMappingURL=pdf-XA2AR6B4.js.map
|
|
37
|
+
//# sourceMappingURL=pdf-XA2AR6B4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/export/pdf.ts"],"names":[],"mappings":";;;AAKA,IAAM,IAAA,GAAO,CAAC,CAAA,KAAc,IAAI,SAAS,GAAA,EAAK,kBAAkB,EAAE,CAAC,CAAA;AAEnE,eAAsB,WAAA,CACpB,OAAA,EACA,IAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,KAAK,OAAO,CAAA;AAC7C,EAAA,MAAM,KAAK,iBAAiB,CAAA;AAE5B,EAAA,MAAM,cAAc,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,KAAK,CAAA;AAE7D,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,EAAE,WAAA,EAAa,YAAY,MAAA,GAAS,CAAA,GAAI,WAAA,GAAc,UAAA,EAAY,CAAA;AAExF,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,GAAA,CAAI,YAAY,EAAE,CAAA;AAClB,IAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAA,EAAI,EAAE,CAAA;AAAA,EAChC;AAEC,EAAC,IAAY,SAAA,CAAU;AAAA,IACtB,MAAA,EAAQ,OAAA,EAAS,KAAA,GAAQ,EAAA,GAAK,EAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,IACtC,MAAM,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KACd,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,KAAQ,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG,GAAA,EAAK,OAAA,EAAS,QAAQ,CAAC;AAAA,KACjF;AAAA,IACA,MAAA,EAAQ,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,IACtB,YAAY,EAAE,SAAA,EAAW,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAE,GAC1C,CAAA;AAED,EAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAAA;AAC5B;AAEA,eAAsB,cAAA,GAAmC;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,OAAO,CAAA;AAClB,IAAA,MAAM,KAAK,iBAAiB,CAAA;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"pdf-
|
|
1
|
+
{"version":3,"sources":["../src/export/pdf.ts"],"names":[],"mappings":";;;AAKA,IAAM,IAAA,GAAO,CAAC,CAAA,KAAc,IAAI,SAAS,GAAA,EAAK,kBAAkB,EAAE,CAAC,CAAA;AAEnE,eAAsB,WAAA,CACpB,OAAA,EACA,IAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,KAAK,OAAO,CAAA;AAC7C,EAAA,MAAM,KAAK,iBAAiB,CAAA;AAE5B,EAAA,MAAM,cAAc,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,KAAK,CAAA;AAE7D,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,EAAE,WAAA,EAAa,YAAY,MAAA,GAAS,CAAA,GAAI,WAAA,GAAc,UAAA,EAAY,CAAA;AAExF,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,GAAA,CAAI,YAAY,EAAE,CAAA;AAClB,IAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAA,EAAI,EAAE,CAAA;AAAA,EAChC;AAEC,EAAC,IAAY,SAAA,CAAU;AAAA,IACtB,MAAA,EAAQ,OAAA,EAAS,KAAA,GAAQ,EAAA,GAAK,EAAA;AAAA,IAC9B,IAAA,EAAM,CAAC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,IACtC,MAAM,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KACd,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,KAAQ,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG,GAAA,EAAK,OAAA,EAAS,QAAQ,CAAC;AAAA,KACjF;AAAA,IACA,MAAA,EAAQ,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,IACtB,YAAY,EAAE,SAAA,EAAW,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAE,GAC1C,CAAA;AAED,EAAA,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAAA;AAC5B;AAEA,eAAsB,cAAA,GAAmC;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,OAAO,CAAA;AAClB,IAAA,MAAM,KAAK,iBAAiB,CAAA;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"pdf-XA2AR6B4.js","sourcesContent":["import type { ReportColumnDef } from '../types'\nimport { formatValuePlain } from '../lib/columns'\n\n// Opaque dynamic import — hidden from Vite's static analysis so it won't\n// fail when jspdf is not installed (it's an optional peer dependency).\nconst load = (m: string) => new Function('m', 'return import(m)')(m) as Promise<any>\n\nexport async function exportToPdf(\n columns: ReportColumnDef[],\n data: Record<string, any>[],\n filename: string,\n options?: { title?: string; currency?: string },\n): Promise<void> {\n const { default: jsPDF } = await load('jspdf')\n await load('jspdf-autotable')\n\n const visibleCols = columns.filter((c) => c.visible !== false)\n\n const doc = new jsPDF({ orientation: visibleCols.length > 6 ? 'landscape' : 'portrait' })\n\n if (options?.title) {\n doc.setFontSize(14)\n doc.text(options.title, 14, 20)\n }\n\n ;(doc as any).autoTable({\n startY: options?.title ? 30 : 14,\n head: [visibleCols.map((c) => c.label)],\n body: data.map((row) =>\n visibleCols.map((col) => formatValuePlain(row[col.key], col, options?.currency)),\n ),\n styles: { fontSize: 8 },\n headStyles: { fillColor: [100, 100, 100] },\n })\n\n doc.save(`${filename}.pdf`)\n}\n\nexport async function isPdfAvailable(): Promise<boolean> {\n try {\n await load('jspdf')\n await load('jspdf-autotable')\n return true\n } catch {\n return false\n }\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
import type { FieldType } from '@fayz-ai/core';
|
|
3
|
-
|
|
3
|
+
/** `percent` and `duration` come from AnalyticsColumnDef, which the viewer casts
|
|
4
|
+
* to this shape — they always arrived at runtime, they just had no name here,
|
|
5
|
+
* so the table printed the raw number and dropped the card's chosen format. */
|
|
6
|
+
export type ReportFieldType = FieldType | 'person' | 'percent' | 'duration';
|
|
4
7
|
export interface ReportColumnDef {
|
|
5
8
|
key: string;
|
|
6
9
|
label: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsAssistant.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsAssistant.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"AnalyticsAssistant.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsAssistant.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,wBAAgB,kBAAkB,6BA6BjC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export type AnalyticsView = 'overview' | 'reports' | 'report' | 'live';
|
|
2
|
+
export type AnalyticsView = 'overview' | 'reports' | 'report' | 'live' | 'settings';
|
|
3
3
|
export interface AnalyticsModuleProps {
|
|
4
4
|
view: AnalyticsView;
|
|
5
5
|
/** Route param when `view === 'report'` — marks the active entry. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsModule.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsModule.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"AnalyticsModule.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsModule.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAgCzB,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AAEnF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAA;IACnB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAgDD,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,oBAAoB,qBAuF/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsReportViewer.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsReportViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"AnalyticsReportViewer.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsReportViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAyGzB,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,qBA8CpE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AnalyticsVizType } from '@fayz-ai/core';
|
|
3
|
+
import { type AnalyticsSourceGroup, type CustomReport } from '../lib/preferences';
|
|
4
|
+
/** Build a stored report from validated pieces. Shared by the form and by the
|
|
5
|
+
* assistant's tool, so both produce the same object. */
|
|
6
|
+
export declare function buildCustomReport(input: {
|
|
7
|
+
name: string;
|
|
8
|
+
category: string;
|
|
9
|
+
createdBy?: string;
|
|
10
|
+
source: AnalyticsSourceGroup;
|
|
11
|
+
dimensions: string[];
|
|
12
|
+
measures: string[];
|
|
13
|
+
viz: AnalyticsVizType;
|
|
14
|
+
}): CustomReport;
|
|
15
|
+
export declare function AnalyticsSettingsPage(): React.JSX.Element;
|
|
16
|
+
//# sourceMappingURL=AnalyticsSettingsPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticsSettingsPage.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsSettingsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,KAAK,EACQ,gBAAgB,EACnC,MAAM,eAAe,CAAA;AActB,OAAO,EAGL,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAC7C,MAAM,oBAAoB,CAAA;AAgN3B;yDACyD;AACzD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,oBAAoB,CAAA;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,GAAG,EAAE,gBAAgB,CAAA;CACtB,GAAG,YAAY,CAiBf;AAuLD,wBAAgB,qBAAqB,sBAiUpC"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type AnalyticsCardDef, type AnalyticsProvider as AnalyticsProviderType, type AnalyticsColumnDef, type AnalyticsCompare } from '@fayz-ai/core';
|
|
2
|
+
import { type AnalyticsCardDef, type AnalyticsProvider as AnalyticsProviderType, type AnalyticsColumnDef, type AnalyticsCompare, type AgentRole } from '@fayz-ai/core';
|
|
3
3
|
import { type AnalyticsRangePreset } from '@fayz-ai/ui';
|
|
4
4
|
export declare const ANALYTICS_BASE = "/analytics";
|
|
5
5
|
export declare const REPORTS_BASE = "/analytics/reports";
|
|
6
|
+
export declare const SETTINGS_ROUTE = "/analytics/settings";
|
|
6
7
|
export interface AnalyticsLabels {
|
|
7
8
|
analytics: string;
|
|
8
9
|
reports: string;
|
|
9
10
|
liveView: string;
|
|
10
11
|
/** Rail entry for the card grid. Falls back to the `reports.overview` key. */
|
|
11
12
|
overview?: string;
|
|
13
|
+
/** Rail entry for the customisation screen. Falls back to the locale key. */
|
|
14
|
+
settings?: string;
|
|
12
15
|
overviewSubtitle: string;
|
|
13
16
|
reportsSubtitle: string;
|
|
14
17
|
searchReports: string;
|
|
@@ -34,7 +37,10 @@ export interface AnalyticsLabels {
|
|
|
34
37
|
/** How the assistant introduces itself on the analytics screens. Every field is
|
|
35
38
|
* optional: what is not set falls back to the plugin's own locale strings. */
|
|
36
39
|
export interface AnalyticsAssistantConfig {
|
|
37
|
-
/**
|
|
40
|
+
/** Which colleague reads the numbers here. Defaults to the plugin's own
|
|
41
|
+
* (`growth`) — an app whose analytics are a finance conversation says so. */
|
|
42
|
+
role?: AgentRole;
|
|
43
|
+
/** Names the task here — "Growth Analyst". */
|
|
38
44
|
persona?: string;
|
|
39
45
|
/** Hero headline. `{{name}}` resolves to the signed-in user's first name. */
|
|
40
46
|
headline?: string;
|
|
@@ -75,11 +81,24 @@ export interface ResolvedAnalyticsConfig {
|
|
|
75
81
|
}
|
|
76
82
|
export declare function useAnalyticsConfig(): ResolvedAnalyticsConfig;
|
|
77
83
|
/**
|
|
78
|
-
*
|
|
84
|
+
* The catalogue AS SHIPPED — registry + app, de-duplicated by id, with no user
|
|
85
|
+
* overrides applied.
|
|
79
86
|
*
|
|
80
87
|
* The app's own definition wins a collision so a host can retune a card the
|
|
81
88
|
* plugin shipped (relabel it, move it off the overview) without forking the
|
|
82
89
|
* plugin — the alternative is apps carrying patched copies of plugin cards.
|
|
90
|
+
*
|
|
91
|
+
* Only the settings screen wants this: it has to show what the defaults ARE in
|
|
92
|
+
* order to offer a way back to them. Everything else reads `useAnalyticsCards`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function useAnalyticsCatalogue(): AnalyticsCardDef[];
|
|
95
|
+
/**
|
|
96
|
+
* Every card visible on this surface, with the user's own layer applied:
|
|
97
|
+
* their order, their columns, their reports, minus what they removed.
|
|
98
|
+
*
|
|
99
|
+
* The overview, the rail, the list and the viewer all read THIS — a preference
|
|
100
|
+
* that only the grid honoured would rename a card in one place and not the
|
|
101
|
+
* other, which is how a "customisable" screen becomes two screens.
|
|
83
102
|
*/
|
|
84
103
|
export declare function useAnalyticsCards(): AnalyticsCardDef[];
|
|
85
104
|
/** Cards a pack placed on the overview grid, in their declared order. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsSurface.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsSurface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAEL,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,IAAI,qBAAqB,EAAE,KAAK,kBAAkB,EAC/F,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"AnalyticsSurface.d.ts","sourceRoot":"","sources":["../../src/views/AnalyticsSurface.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"fayz": {
|
|
4
4
|
"status": "preview"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.12.0",
|
|
7
7
|
"description": "[experimental] Fayz SDK — plugin-reports plugin",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"sideEffects": false,
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@tanstack/react-table": "^8.20.0",
|
|
30
|
-
"@fayz-ai/core": "^0.
|
|
31
|
-
"@fayz-ai/ui": "^0.
|
|
32
|
-
"@fayz-ai/admin": "^0.
|
|
30
|
+
"@fayz-ai/core": "^0.15.0",
|
|
31
|
+
"@fayz-ai/ui": "^0.15.0",
|
|
32
|
+
"@fayz-ai/admin": "^0.15.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/react": "^18.3.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/columns.ts"],"names":["formatCurrencyLocale","formatDateLocale","formatDateTimeLocale"],"mappings":"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","file":"chunk-4SPBNVQA.js","sourcesContent":["import React from 'react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { ReportColumnDef } from '../types'\nimport { PersonLink } from '@fayz-ai/admin'\nimport {\n formatCurrency as formatCurrencyLocale,\n formatDate as formatDateLocale,\n formatDateTime as formatDateTimeLocale,\n} from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Formatters (mirrors fieldToColumn.tsx logic)\n// ---------------------------------------------------------------------------\n\nfunction formatCurrency(value: any, currency?: string): string {\n const num = typeof value === 'number' ? value : parseFloat(value)\n if (isNaN(num)) return '—'\n return formatCurrencyLocale(num, currency)\n}\n\nfunction formatDate(value: any): string {\n if (!value) return '—'\n return formatDateLocale(value)\n}\n\nfunction formatDateTime(value: any): string {\n if (!value) return '—'\n return formatDateTimeLocale(value)\n}\n\nfunction formatNumber(value: any): string {\n if (value == null) return '—'\n return typeof value === 'number' ? value.toLocaleString() : String(value)\n}\n\n// ---------------------------------------------------------------------------\n// Plain-text formatter for exports\n// ---------------------------------------------------------------------------\n\nexport function formatValuePlain(value: any, col: ReportColumnDef, currency?: string): string {\n if (value == null || value === '') return ''\n switch (col.type) {\n case 'currency':\n return formatCurrency(value, col.currency ?? currency)\n case 'date':\n return formatDate(value)\n case 'datetime':\n return formatDateTime(value)\n case 'number':\n return formatNumber(value)\n case 'boolean':\n return value ? 'Yes' : 'No'\n default:\n return String(value)\n }\n}\n\n// ---------------------------------------------------------------------------\n// ReportColumnDef[] → TanStack ColumnDef[]\n// ---------------------------------------------------------------------------\n\nexport function reportColumnsToTanstack(\n columns: ReportColumnDef[],\n currency?: string,\n): ColumnDef<Record<string, any>>[] {\n return columns\n .filter((c) => c.visible !== false)\n .map((col): ColumnDef<Record<string, any>> => {\n const sortable = col.sortable ?? ['text', 'number', 'currency', 'date', 'datetime', 'email'].includes(col.type)\n const alignRight = col.align === 'right' || (!col.align && (col.type === 'currency' || col.type === 'number'))\n const alignCenter = col.align === 'center'\n\n return {\n accessorKey: col.key,\n header: col.label,\n enableSorting: sortable,\n cell: (ctx) => {\n const value = ctx.getValue()\n const row = ctx.row.original\n\n if (col.renderCell) {\n return col.renderCell(value, row)\n }\n\n if (value == null || value === '') {\n return React.createElement('span', { className: 'text-muted-foreground' }, '—')\n }\n\n let content: React.ReactNode\n switch (col.type) {\n case 'person':\n content = React.createElement(PersonLink, {\n personId: col.idKey ? row[col.idKey] : null,\n name: String(value),\n kind: col.personKind,\n size: 'sm',\n className: 'text-xs',\n })\n break\n case 'currency':\n content = formatCurrency(value, col.currency ?? currency)\n break\n case 'date':\n content = formatDate(value)\n break\n case 'datetime':\n content = formatDateTime(value)\n break\n case 'boolean':\n content = value\n ? React.createElement('svg', { className: 'h-4 w-4 text-success', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: '2' },\n React.createElement('polyline', { points: '20 6 9 17 4 12' }),\n )\n : React.createElement('span', { className: 'text-muted-foreground' }, '—')\n break\n case 'number':\n content = formatNumber(value)\n break\n default:\n content = String(value)\n }\n\n const cls = alignRight ? 'text-right' : alignCenter ? 'text-center' : undefined\n return cls\n ? React.createElement('div', { className: cls }, content)\n : React.createElement(React.Fragment, null, content)\n },\n meta: { align: alignRight ? 'right' : alignCenter ? 'center' : 'left' },\n }\n })\n}\n"]}
|