@arcfusionz/arc-analytic-ui 0.0.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.
Files changed (156) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +13 -0
  2. package/dist/components/AnomalyCard/AnomalyCard.chart.d.ts +64 -0
  3. package/dist/components/AnomalyCard/AnomalyCard.chart.js +341 -0
  4. package/dist/components/AnomalyCard/AnomalyCard.d.ts +169 -0
  5. package/dist/components/AnomalyCard/AnomalyCard.js +1019 -0
  6. package/dist/components/AnomalyCard/AnomalyCard.model.d.ts +508 -0
  7. package/dist/components/AnomalyCard/AnomalyCard.model.js +553 -0
  8. package/dist/components/AnomalyCard/index.d.ts +4 -0
  9. package/dist/components/AnomalyCard/index.js +4 -0
  10. package/dist/components/ChartCard/ChartCard.chart.d.ts +72 -0
  11. package/dist/components/ChartCard/ChartCard.chart.js +1333 -0
  12. package/dist/components/ChartCard/ChartCard.d.ts +206 -0
  13. package/dist/components/ChartCard/ChartCard.js +718 -0
  14. package/dist/components/ChartCard/ChartCard.model.d.ts +452 -0
  15. package/dist/components/ChartCard/ChartCard.model.js +1223 -0
  16. package/dist/components/ChartCard/index.d.ts +4 -0
  17. package/dist/components/ChartCard/index.js +4 -0
  18. package/dist/components/ComparisonCard/ComparisonCard.chart.d.ts +80 -0
  19. package/dist/components/ComparisonCard/ComparisonCard.chart.js +337 -0
  20. package/dist/components/ComparisonCard/ComparisonCard.d.ts +200 -0
  21. package/dist/components/ComparisonCard/ComparisonCard.js +1325 -0
  22. package/dist/components/ComparisonCard/ComparisonCard.model.d.ts +309 -0
  23. package/dist/components/ComparisonCard/ComparisonCard.model.js +263 -0
  24. package/dist/components/ComparisonCard/index.d.ts +4 -0
  25. package/dist/components/ComparisonCard/index.js +4 -0
  26. package/dist/components/ForecastCard/ForecastCard.chart.d.ts +82 -0
  27. package/dist/components/ForecastCard/ForecastCard.chart.js +416 -0
  28. package/dist/components/ForecastCard/ForecastCard.d.ts +148 -0
  29. package/dist/components/ForecastCard/ForecastCard.js +1029 -0
  30. package/dist/components/ForecastCard/ForecastCard.model.d.ts +497 -0
  31. package/dist/components/ForecastCard/ForecastCard.model.js +554 -0
  32. package/dist/components/ForecastCard/index.d.ts +4 -0
  33. package/dist/components/ForecastCard/index.js +4 -0
  34. package/dist/components/HighlightCard/HighlightCard.chart.d.ts +122 -0
  35. package/dist/components/HighlightCard/HighlightCard.chart.js +660 -0
  36. package/dist/components/HighlightCard/HighlightCard.d.ts +202 -0
  37. package/dist/components/HighlightCard/HighlightCard.js +1286 -0
  38. package/dist/components/HighlightCard/HighlightCard.model.d.ts +692 -0
  39. package/dist/components/HighlightCard/HighlightCard.model.js +875 -0
  40. package/dist/components/HighlightCard/index.d.ts +4 -0
  41. package/dist/components/HighlightCard/index.js +4 -0
  42. package/dist/components/InsightCard/InsightCard.chart.d.ts +91 -0
  43. package/dist/components/InsightCard/InsightCard.chart.js +471 -0
  44. package/dist/components/InsightCard/InsightCard.d.ts +161 -0
  45. package/dist/components/InsightCard/InsightCard.js +961 -0
  46. package/dist/components/InsightCard/InsightCard.model.d.ts +405 -0
  47. package/dist/components/InsightCard/InsightCard.model.js +421 -0
  48. package/dist/components/InsightCard/index.d.ts +4 -0
  49. package/dist/components/InsightCard/index.js +4 -0
  50. package/dist/components/MetricCard/MetricCard.chart.d.ts +79 -0
  51. package/dist/components/MetricCard/MetricCard.chart.js +435 -0
  52. package/dist/components/MetricCard/MetricCard.d.ts +227 -0
  53. package/dist/components/MetricCard/MetricCard.js +1293 -0
  54. package/dist/components/MetricCard/MetricCard.model.d.ts +521 -0
  55. package/dist/components/MetricCard/MetricCard.model.js +627 -0
  56. package/dist/components/MetricCard/index.d.ts +4 -0
  57. package/dist/components/MetricCard/index.js +4 -0
  58. package/dist/components/ProfileCard/ProfileCard.chart.d.ts +64 -0
  59. package/dist/components/ProfileCard/ProfileCard.chart.js +427 -0
  60. package/dist/components/ProfileCard/ProfileCard.d.ts +140 -0
  61. package/dist/components/ProfileCard/ProfileCard.js +735 -0
  62. package/dist/components/ProfileCard/ProfileCard.model.d.ts +279 -0
  63. package/dist/components/ProfileCard/ProfileCard.model.js +244 -0
  64. package/dist/components/ProfileCard/index.d.ts +4 -0
  65. package/dist/components/ProfileCard/index.js +4 -0
  66. package/dist/components/ProgressCard/ProgressCard.chart.d.ts +73 -0
  67. package/dist/components/ProgressCard/ProgressCard.chart.js +373 -0
  68. package/dist/components/ProgressCard/ProgressCard.d.ts +137 -0
  69. package/dist/components/ProgressCard/ProgressCard.js +908 -0
  70. package/dist/components/ProgressCard/ProgressCard.model.d.ts +385 -0
  71. package/dist/components/ProgressCard/ProgressCard.model.js +389 -0
  72. package/dist/components/ProgressCard/index.d.ts +4 -0
  73. package/dist/components/ProgressCard/index.js +4 -0
  74. package/dist/components/ReportCard/ReportCard.chart.d.ts +45 -0
  75. package/dist/components/ReportCard/ReportCard.chart.js +231 -0
  76. package/dist/components/ReportCard/ReportCard.d.ts +153 -0
  77. package/dist/components/ReportCard/ReportCard.js +1118 -0
  78. package/dist/components/ReportCard/ReportCard.model.d.ts +392 -0
  79. package/dist/components/ReportCard/ReportCard.model.js +399 -0
  80. package/dist/components/ReportCard/index.d.ts +4 -0
  81. package/dist/components/ReportCard/index.js +4 -0
  82. package/dist/components/SankeyCard/SankeyCard.chart.d.ts +75 -0
  83. package/dist/components/SankeyCard/SankeyCard.chart.js +249 -0
  84. package/dist/components/SankeyCard/SankeyCard.d.ts +185 -0
  85. package/dist/components/SankeyCard/SankeyCard.js +788 -0
  86. package/dist/components/SankeyCard/SankeyCard.model.d.ts +501 -0
  87. package/dist/components/SankeyCard/SankeyCard.model.js +789 -0
  88. package/dist/components/SankeyCard/index.d.ts +4 -0
  89. package/dist/components/SankeyCard/index.js +4 -0
  90. package/dist/components/StatusCard/StatusCard.chart.d.ts +60 -0
  91. package/dist/components/StatusCard/StatusCard.chart.js +188 -0
  92. package/dist/components/StatusCard/StatusCard.d.ts +176 -0
  93. package/dist/components/StatusCard/StatusCard.js +989 -0
  94. package/dist/components/StatusCard/StatusCard.model.d.ts +555 -0
  95. package/dist/components/StatusCard/StatusCard.model.js +776 -0
  96. package/dist/components/StatusCard/index.d.ts +4 -0
  97. package/dist/components/StatusCard/index.js +4 -0
  98. package/dist/components/TableCard/TableCard.chart.d.ts +53 -0
  99. package/dist/components/TableCard/TableCard.chart.js +192 -0
  100. package/dist/components/TableCard/TableCard.d.ts +140 -0
  101. package/dist/components/TableCard/TableCard.js +811 -0
  102. package/dist/components/TableCard/TableCard.model.d.ts +381 -0
  103. package/dist/components/TableCard/TableCard.model.js +475 -0
  104. package/dist/components/TableCard/index.d.ts +4 -0
  105. package/dist/components/TableCard/index.js +4 -0
  106. package/dist/components/TargetCard/TargetCard.chart.d.ts +52 -0
  107. package/dist/components/TargetCard/TargetCard.chart.js +273 -0
  108. package/dist/components/TargetCard/TargetCard.d.ts +143 -0
  109. package/dist/components/TargetCard/TargetCard.js +910 -0
  110. package/dist/components/TargetCard/TargetCard.model.d.ts +468 -0
  111. package/dist/components/TargetCard/TargetCard.model.js +581 -0
  112. package/dist/components/TargetCard/index.d.ts +4 -0
  113. package/dist/components/TargetCard/index.js +4 -0
  114. package/dist/components/TreeCard/TreeCard.chart.d.ts +80 -0
  115. package/dist/components/TreeCard/TreeCard.chart.js +178 -0
  116. package/dist/components/TreeCard/TreeCard.d.ts +182 -0
  117. package/dist/components/TreeCard/TreeCard.js +1187 -0
  118. package/dist/components/TreeCard/TreeCard.model.d.ts +330 -0
  119. package/dist/components/TreeCard/TreeCard.model.js +401 -0
  120. package/dist/components/TreeCard/index.d.ts +4 -0
  121. package/dist/components/TreeCard/index.js +4 -0
  122. package/dist/components/TrendCard/TrendCard.chart.d.ts +75 -0
  123. package/dist/components/TrendCard/TrendCard.chart.js +393 -0
  124. package/dist/components/TrendCard/TrendCard.d.ts +224 -0
  125. package/dist/components/TrendCard/TrendCard.js +1053 -0
  126. package/dist/components/TrendCard/TrendCard.model.d.ts +545 -0
  127. package/dist/components/TrendCard/TrendCard.model.js +623 -0
  128. package/dist/components/TrendCard/index.d.ts +4 -0
  129. package/dist/components/TrendCard/index.js +4 -0
  130. package/dist/index.d.ts +76 -0
  131. package/dist/index.js +57 -0
  132. package/dist/lib/vega/ArcVegaChart.d.ts +24 -0
  133. package/dist/lib/vega/ArcVegaChart.js +42 -0
  134. package/dist/lib/vega/ArcVegaSurface.d.ts +13 -0
  135. package/dist/lib/vega/ArcVegaSurface.js +38 -0
  136. package/dist/lib/vega/axisTicks.js +156 -0
  137. package/dist/lib/vega/config.d.ts +29 -0
  138. package/dist/lib/vega/config.js +113 -0
  139. package/dist/lib/vega/embed.d.ts +29 -0
  140. package/dist/lib/vega/embed.js +29 -0
  141. package/dist/lib/vega/engine.d.ts +10 -0
  142. package/dist/lib/vega/engine.js +6 -0
  143. package/dist/lib/vega/formatters.d.ts +125 -0
  144. package/dist/lib/vega/formatters.js +277 -0
  145. package/dist/lib/vega/index.d.ts +11 -0
  146. package/dist/lib/vega/load.d.ts +13 -0
  147. package/dist/lib/vega/load.js +21 -0
  148. package/dist/lib/vega/time.d.ts +45 -0
  149. package/dist/lib/vega/time.js +105 -0
  150. package/dist/lib/vega/tokens.d.ts +73 -0
  151. package/dist/lib/vega/tokens.js +137 -0
  152. package/dist/lib/vega/tooltip.d.ts +45 -0
  153. package/dist/lib/vega/tooltip.js +124 -0
  154. package/dist/lib/vega/useArcVega.d.ts +43 -0
  155. package/dist/lib/vega/useArcVega.js +121 -0
  156. package/package.json +60 -0
@@ -0,0 +1,121 @@
1
+ import { registerArcFormatters } from "./formatters.js";
2
+ import { useCallback, useEffect, useMemo, useRef } from "react";
3
+ import { expressionFunction } from "vega";
4
+ import { useVegaEmbed } from "react-vega";
5
+ //#region src/lib/vega/useArcVega.ts
6
+ registerArcFormatters(expressionFunction);
7
+ /**
8
+ * react-vega 8's `useVegaEmbed` plus the View API discipline the analytics
9
+ * package needs: one embed per mount (a re-embed only when the structural spec
10
+ * or the options change), and one `runAsync` per batch of data / size /
11
+ * description / signal changes. Listeners and callbacks go through
12
+ * latest-value refs, so they never go stale while the view lives; react-vega
13
+ * finalizes the view on unmount and before every re-embed.
14
+ */
15
+ function useArcVega(params) {
16
+ const { ref, spec, options, datasets, description, width, height, signals } = params;
17
+ const latest = useRef(params);
18
+ latest.current = params;
19
+ const applied = useRef({});
20
+ const baked = useRef({});
21
+ const bakeIntoSpec = useCallback((vgSpec) => {
22
+ const { datasets, description, width, height, signals } = latest.current;
23
+ const next = { ...vgSpec };
24
+ if (datasets && vgSpec.data) next.data = vgSpec.data.map((source) => source.name in datasets && !("source" in source) && !("url" in source) ? {
25
+ ...source,
26
+ values: datasets[source.name]
27
+ } : source);
28
+ if (signals && vgSpec.signals) next.signals = vgSpec.signals.map((signal) => signal.name in signals ? {
29
+ ...signal,
30
+ value: signals[signal.name]
31
+ } : signal);
32
+ if (description != null) next.description = description;
33
+ if (width != null) next.width = width;
34
+ if (height != null) next.height = height;
35
+ baked.current = {
36
+ datasets,
37
+ description,
38
+ width,
39
+ height,
40
+ signals
41
+ };
42
+ return next;
43
+ }, []);
44
+ const embedOptions = useMemo(() => {
45
+ const consumerPatch = options.patch;
46
+ const patch = (vgSpec) => bakeIntoSpec(typeof consumerPatch === "function" ? consumerPatch(vgSpec) : vgSpec);
47
+ return {
48
+ ...options,
49
+ patch
50
+ };
51
+ }, [options, bakeIntoSpec]);
52
+ const handleEmbed = useCallback((result) => {
53
+ applied.current = baked.current;
54
+ baked.current = {};
55
+ const { onSignal, onEmbed } = latest.current;
56
+ if (onSignal) for (const name of Object.keys(onSignal)) result.view.addSignalListener(name, (_signalName, value) => {
57
+ latest.current.onSignal?.[name]?.(value);
58
+ });
59
+ onEmbed?.(result);
60
+ }, []);
61
+ const handleError = useCallback((error) => {
62
+ latest.current.onError?.(error);
63
+ }, []);
64
+ const result = useVegaEmbed({
65
+ ref,
66
+ spec,
67
+ options: embedOptions,
68
+ onEmbed: handleEmbed,
69
+ onError: handleError
70
+ });
71
+ useEffect(() => {
72
+ const view = result?.view;
73
+ if (!view) return;
74
+ const previous = applied.current;
75
+ let dirty = false;
76
+ if (datasets && datasets !== previous.datasets) {
77
+ const declared = new Set((result.vgSpec.data ?? []).map((source) => source.name));
78
+ for (const [name, rows] of Object.entries(datasets)) if (declared.has(name) && previous.datasets?.[name] !== rows) {
79
+ view.data(name, rows);
80
+ dirty = true;
81
+ }
82
+ }
83
+ if (description != null && description !== previous.description) {
84
+ view.description(description);
85
+ dirty = true;
86
+ }
87
+ if (width != null && width !== previous.width) {
88
+ view.width(width);
89
+ dirty = true;
90
+ }
91
+ if (height != null && height !== previous.height) {
92
+ view.height(height);
93
+ dirty = true;
94
+ }
95
+ if (signals && signals !== previous.signals) {
96
+ const declared = new Set((result.vgSpec.signals ?? []).map((signal) => signal.name));
97
+ for (const [name, value] of Object.entries(signals)) if (declared.has(name) && (!previous.signals || previous.signals[name] !== value)) {
98
+ view.signal(name, value);
99
+ dirty = true;
100
+ }
101
+ }
102
+ applied.current = {
103
+ datasets,
104
+ description,
105
+ width,
106
+ height,
107
+ signals
108
+ };
109
+ if (dirty) view.runAsync();
110
+ }, [
111
+ result,
112
+ datasets,
113
+ description,
114
+ width,
115
+ height,
116
+ signals
117
+ ]);
118
+ return result;
119
+ }
120
+ //#endregion
121
+ export { useArcVega };
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@arcfusionz/arc-analytic-ui",
3
+ "version": "0.0.0",
4
+ "description": "ArcFusion analytics UI components — Vega-Lite charts framed by Arc primitives",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/arcfusion-ai/arc-components.git",
10
+ "directory": "packages/analytic-ui"
11
+ },
12
+ "homepage": "https://github.com/arcfusion-ai/arc-components#readme",
13
+ "bugs": "https://github.com/arcfusion-ai/arc-components/issues",
14
+ "main": "./dist/index.js",
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ },
22
+ "./*": {
23
+ "types": "./dist/components/*/index.d.ts",
24
+ "import": "./dist/components/*/index.js"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "sideEffects": false,
34
+ "scripts": {
35
+ "build": "tsdown",
36
+ "test": "tsx --test src/lib/vega/formatters.test.ts src/lib/vega/time.test.ts src/components/AnomalyCard/AnomalyCard.test.ts src/components/ChartCard/ChartCard.test.ts src/components/ComparisonCard/ComparisonCard.test.ts src/components/ForecastCard/ForecastCard.test.ts src/components/HighlightCard/HighlightCard.test.ts src/components/InsightCard/InsightCard.test.ts src/components/MetricCard/MetricCard.test.ts src/components/ProfileCard/ProfileCard.test.ts src/components/ProgressCard/ProgressCard.test.ts src/components/ReportCard/ReportCard.test.ts src/components/SankeyCard/SankeyCard.test.ts src/components/StatusCard/StatusCard.test.ts src/components/TableCard/TableCard.test.ts src/components/TargetCard/TargetCard.test.ts src/components/TreeCard/TreeCard.test.ts src/components/TrendCard/TrendCard.test.ts",
37
+ "typecheck": "tsc --noEmit"
38
+ },
39
+ "peerDependencies": {
40
+ "react": "^18.0.0 || ^19.0.0",
41
+ "react-dom": "^18.0.0 || ^19.0.0"
42
+ },
43
+ "dependencies": {
44
+ "@arcfusionz/arc-primitive-ui": "workspace:^",
45
+ "react-vega": "catalog:",
46
+ "vega": "catalog:",
47
+ "vega-embed": "catalog:",
48
+ "vega-lite": "catalog:"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^24.13.3",
52
+ "@types/react": "catalog:",
53
+ "@types/react-dom": "catalog:",
54
+ "react": "catalog:",
55
+ "react-dom": "catalog:",
56
+ "tsdown": "^0.22.12",
57
+ "tsx": "^4.21.0",
58
+ "typescript": "^5.7.0"
59
+ }
60
+ }