@rm-graph/core 0.1.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/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # @rm-graph/core
2
+
3
+ RM-Graphs Core - Framework-agnostic charting library built on SciChart.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @rm-graph/core
9
+ ```
10
+
11
+ > `scichart` is automatically installed as a dependency!
12
+
13
+ ## Usage
14
+
15
+ ```typescript
16
+ import { createLineChart, createBarChart, createAreaChart } from '@rm-graph/core';
17
+
18
+ // Create a line chart
19
+ const chart = await createLineChart('container-id', {
20
+ theme: 'dark',
21
+ series: [
22
+ {
23
+ name: 'Revenue',
24
+ data: [100, 150, 120, 180, 200],
25
+ },
26
+ ],
27
+ xAxis: { title: 'Month' },
28
+ yAxis: { title: 'Amount ($)' },
29
+ });
30
+
31
+ // Update data
32
+ chart.setData([
33
+ { name: 'Revenue', data: [200, 250, 220, 280, 300] },
34
+ ]);
35
+
36
+ // Change theme
37
+ chart.setOptions({ theme: 'light' });
38
+
39
+ // Cleanup when done
40
+ chart.destroy();
41
+ ```
42
+
43
+ ## Chart Types
44
+
45
+ - `createLineChart` - Line charts with optional points
46
+ - `createBarChart` - Bar/column charts with grouping and stacking
47
+ - `createAreaChart` - Area charts with gradient fills
48
+
49
+ ## Theming
50
+
51
+ Built-in themes: `light`, `dark`, `modern`, `midnight`
52
+
53
+ ```typescript
54
+ import { getThemeManager } from '@rm-graph/core';
55
+
56
+ // Register custom theme
57
+ getThemeManager().registerTheme({
58
+ name: 'custom',
59
+ backgroundColor: '#1a1a2e',
60
+ colorPalette: ['#ff6b6b', '#4ecdc4'],
61
+ // ...
62
+ });
63
+ ```
64
+
65
+ See main README for full documentation.
@@ -0,0 +1,336 @@
1
+ 'use strict';
2
+
3
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
4
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
5
+ }) : x)(function(x) {
6
+ if (typeof require !== "undefined") return require.apply(this, arguments);
7
+ throw Error('Dynamic require of "' + x + '" is not supported');
8
+ });
9
+
10
+ // src/themes/defaultTheme.ts
11
+ var lightTheme = {
12
+ name: "light",
13
+ backgroundColor: "#f8f9fa",
14
+ textColor: "#495057",
15
+ fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
16
+ colorPalette: [
17
+ "#4285f4",
18
+ // Blue (Channel 1)
19
+ "#34a853",
20
+ // Green (Channel 2)
21
+ "#fbbc04",
22
+ // Orange/Yellow (Channel 3)
23
+ "#ea4335",
24
+ // Red (Channel 4)
25
+ "#9c27b0",
26
+ // Purple
27
+ "#00bcd4",
28
+ // Cyan
29
+ "#ff9800",
30
+ // Orange
31
+ "#8bc34a",
32
+ // Light Green
33
+ "#e91e63",
34
+ // Pink
35
+ "#607d8b"
36
+ // Blue Grey
37
+ ],
38
+ axis: {
39
+ lineColor: "#dee2e6",
40
+ labelColor: "#6c757d",
41
+ titleColor: "#495057",
42
+ gridLineColor: "#e9ecef"
43
+ },
44
+ tooltip: {
45
+ backgroundColor: "#212529",
46
+ textColor: "#ffffff",
47
+ borderColor: "#495057",
48
+ borderRadius: 6
49
+ },
50
+ legend: {
51
+ textColor: "#495057",
52
+ backgroundColor: "transparent"
53
+ },
54
+ title: {
55
+ color: "#212529",
56
+ fontSize: 18,
57
+ fontWeight: "600"
58
+ }
59
+ };
60
+ var darkTheme = {
61
+ name: "dark",
62
+ backgroundColor: "#0f172a",
63
+ textColor: "#e2e8f0",
64
+ fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
65
+ colorPalette: [
66
+ "#818cf8",
67
+ // Indigo (lighter)
68
+ "#fbbf24",
69
+ // Amber (lighter)
70
+ "#34d399",
71
+ // Emerald (lighter)
72
+ "#f87171",
73
+ // Red (lighter)
74
+ "#a78bfa",
75
+ // Violet (lighter)
76
+ "#22d3ee",
77
+ // Cyan (lighter)
78
+ "#fb923c",
79
+ // Orange (lighter)
80
+ "#a3e635",
81
+ // Lime (lighter)
82
+ "#f472b6",
83
+ // Pink (lighter)
84
+ "#2dd4bf"
85
+ // Teal (lighter)
86
+ ],
87
+ axis: {
88
+ lineColor: "#334155",
89
+ labelColor: "#94a3b8",
90
+ titleColor: "#cbd5e1",
91
+ gridLineColor: "#1e293b"
92
+ },
93
+ tooltip: {
94
+ backgroundColor: "#1e293b",
95
+ textColor: "#f1f5f9",
96
+ borderColor: "#475569",
97
+ borderRadius: 8
98
+ },
99
+ legend: {
100
+ textColor: "#cbd5e1",
101
+ backgroundColor: "transparent"
102
+ },
103
+ title: {
104
+ color: "#f8fafc",
105
+ fontSize: 18,
106
+ fontWeight: "600"
107
+ }
108
+ };
109
+ var modernTheme = {
110
+ name: "modern",
111
+ backgroundColor: "#fafafa",
112
+ textColor: "#18181b",
113
+ fontFamily: '"Inter", system-ui, sans-serif',
114
+ colorPalette: [
115
+ "#7c3aed",
116
+ // Violet
117
+ "#2563eb",
118
+ // Blue
119
+ "#059669",
120
+ // Green
121
+ "#dc2626",
122
+ // Red
123
+ "#d97706",
124
+ // Amber
125
+ "#0891b2",
126
+ // Cyan
127
+ "#c026d3",
128
+ // Fuchsia
129
+ "#4f46e5",
130
+ // Indigo
131
+ "#16a34a",
132
+ // Green
133
+ "#9333ea"
134
+ // Purple
135
+ ],
136
+ axis: {
137
+ lineColor: "#e4e4e7",
138
+ labelColor: "#71717a",
139
+ titleColor: "#3f3f46",
140
+ gridLineColor: "#f4f4f5"
141
+ },
142
+ tooltip: {
143
+ backgroundColor: "#18181b",
144
+ textColor: "#fafafa",
145
+ borderColor: "#27272a",
146
+ borderRadius: 12
147
+ },
148
+ legend: {
149
+ textColor: "#3f3f46",
150
+ backgroundColor: "transparent"
151
+ },
152
+ title: {
153
+ color: "#09090b",
154
+ fontSize: 20,
155
+ fontWeight: "700"
156
+ }
157
+ };
158
+ var midnightTheme = {
159
+ name: "midnight",
160
+ backgroundColor: "#030712",
161
+ textColor: "#d1d5db",
162
+ fontFamily: '"JetBrains Mono", monospace',
163
+ colorPalette: [
164
+ "#22d3ee",
165
+ // Cyan
166
+ "#a855f7",
167
+ // Purple
168
+ "#4ade80",
169
+ // Green
170
+ "#fb7185",
171
+ // Pink
172
+ "#facc15",
173
+ // Yellow
174
+ "#38bdf8",
175
+ // Sky
176
+ "#f472b6",
177
+ // Pink
178
+ "#2dd4bf",
179
+ // Teal
180
+ "#c084fc",
181
+ // Purple
182
+ "#fbbf24"
183
+ // Amber
184
+ ],
185
+ axis: {
186
+ lineColor: "#1f2937",
187
+ labelColor: "#6b7280",
188
+ titleColor: "#9ca3af",
189
+ gridLineColor: "#111827"
190
+ },
191
+ tooltip: {
192
+ backgroundColor: "#111827",
193
+ textColor: "#f9fafb",
194
+ borderColor: "#22d3ee",
195
+ borderRadius: 4
196
+ },
197
+ legend: {
198
+ textColor: "#9ca3af",
199
+ backgroundColor: "transparent"
200
+ },
201
+ title: {
202
+ color: "#f3f4f6",
203
+ fontSize: 18,
204
+ fontWeight: "500"
205
+ }
206
+ };
207
+
208
+ // src/themes/ThemeManager.ts
209
+ var ThemeManager = class _ThemeManager {
210
+ constructor() {
211
+ this.themes = /* @__PURE__ */ new Map();
212
+ this.currentTheme = "light";
213
+ this.registerTheme(lightTheme);
214
+ this.registerTheme(darkTheme);
215
+ this.registerTheme(modernTheme);
216
+ this.registerTheme(midnightTheme);
217
+ }
218
+ /**
219
+ * Get the singleton instance of ThemeManager
220
+ */
221
+ static getInstance() {
222
+ if (!_ThemeManager.instance) {
223
+ _ThemeManager.instance = new _ThemeManager();
224
+ }
225
+ return _ThemeManager.instance;
226
+ }
227
+ /**
228
+ * Register a custom theme
229
+ */
230
+ registerTheme(theme) {
231
+ if (!theme.name) {
232
+ throw new Error("Theme must have a name");
233
+ }
234
+ this.themes.set(theme.name, theme);
235
+ }
236
+ /**
237
+ * Get a theme by name
238
+ */
239
+ getTheme(name) {
240
+ const theme = this.themes.get(name);
241
+ if (!theme) {
242
+ console.warn(`Theme "${name}" not found, falling back to light theme`);
243
+ return this.themes.get("light");
244
+ }
245
+ return theme;
246
+ }
247
+ /**
248
+ * Set the global default theme
249
+ */
250
+ setDefaultTheme(name) {
251
+ if (!this.themes.has(name)) {
252
+ throw new Error(`Theme "${name}" is not registered`);
253
+ }
254
+ this.currentTheme = name;
255
+ }
256
+ /**
257
+ * Get the current default theme name
258
+ */
259
+ getDefaultThemeName() {
260
+ return this.currentTheme;
261
+ }
262
+ /**
263
+ * Get the current default theme configuration
264
+ */
265
+ getDefaultTheme() {
266
+ return this.themes.get(this.currentTheme);
267
+ }
268
+ /**
269
+ * Get all registered theme names
270
+ */
271
+ getAvailableThemes() {
272
+ return Array.from(this.themes.keys());
273
+ }
274
+ /**
275
+ * Check if a theme is registered
276
+ */
277
+ hasTheme(name) {
278
+ return this.themes.has(name);
279
+ }
280
+ /**
281
+ * Resolve theme from string name or ThemeConfig object
282
+ */
283
+ resolveTheme(theme) {
284
+ if (!theme) {
285
+ return this.getDefaultTheme();
286
+ }
287
+ if (typeof theme === "string") {
288
+ return this.getTheme(theme);
289
+ }
290
+ return this.mergeThemes(this.getDefaultTheme(), theme);
291
+ }
292
+ /**
293
+ * Merge two themes, with override taking precedence
294
+ */
295
+ mergeThemes(base, override) {
296
+ return {
297
+ ...base,
298
+ ...override,
299
+ axis: {
300
+ ...base.axis,
301
+ ...override.axis
302
+ },
303
+ tooltip: {
304
+ ...base.tooltip,
305
+ ...override.tooltip
306
+ },
307
+ legend: {
308
+ ...base.legend,
309
+ ...override.legend
310
+ },
311
+ title: {
312
+ ...base.title,
313
+ ...override.title
314
+ },
315
+ colorPalette: override.colorPalette ?? base.colorPalette
316
+ };
317
+ }
318
+ /**
319
+ * Get color from palette by index (cycles through palette)
320
+ */
321
+ getColorFromPalette(theme, index) {
322
+ const palette = theme.colorPalette ?? lightTheme.colorPalette;
323
+ return palette[index % palette.length];
324
+ }
325
+ };
326
+ var getThemeManager = () => ThemeManager.getInstance();
327
+
328
+ exports.ThemeManager = ThemeManager;
329
+ exports.__require = __require;
330
+ exports.darkTheme = darkTheme;
331
+ exports.getThemeManager = getThemeManager;
332
+ exports.lightTheme = lightTheme;
333
+ exports.midnightTheme = midnightTheme;
334
+ exports.modernTheme = modernTheme;
335
+ //# sourceMappingURL=chunk-KATRK3C3.js.map
336
+ //# sourceMappingURL=chunk-KATRK3C3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes/defaultTheme.ts","../src/themes/ThemeManager.ts"],"names":[],"mappings":"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","file":"chunk-KATRK3C3.js","sourcesContent":["import type { ThemeConfig } from \"../types\";\r\n\r\n/**\r\n * Default light theme - clean white background with subtle grid\r\n */\r\nexport const lightTheme: ThemeConfig = {\r\n name: \"light\",\r\n backgroundColor: \"#f8f9fa\",\r\n textColor: \"#495057\",\r\n fontFamily:\r\n 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n colorPalette: [\r\n \"#4285f4\", // Blue (Channel 1)\r\n \"#34a853\", // Green (Channel 2)\r\n \"#fbbc04\", // Orange/Yellow (Channel 3)\r\n \"#ea4335\", // Red (Channel 4)\r\n \"#9c27b0\", // Purple\r\n \"#00bcd4\", // Cyan\r\n \"#ff9800\", // Orange\r\n \"#8bc34a\", // Light Green\r\n \"#e91e63\", // Pink\r\n \"#607d8b\", // Blue Grey\r\n ],\r\n axis: {\r\n lineColor: \"#dee2e6\",\r\n labelColor: \"#6c757d\",\r\n titleColor: \"#495057\",\r\n gridLineColor: \"#e9ecef\",\r\n },\r\n tooltip: {\r\n backgroundColor: \"#212529\",\r\n textColor: \"#ffffff\",\r\n borderColor: \"#495057\",\r\n borderRadius: 6,\r\n },\r\n legend: {\r\n textColor: \"#495057\",\r\n backgroundColor: \"transparent\",\r\n },\r\n title: {\r\n color: \"#212529\",\r\n fontSize: 18,\r\n fontWeight: \"600\",\r\n },\r\n};\r\n\r\n/**\r\n * Default dark theme\r\n */\r\nexport const darkTheme: ThemeConfig = {\r\n name: \"dark\",\r\n backgroundColor: \"#0f172a\",\r\n textColor: \"#e2e8f0\",\r\n fontFamily:\r\n 'system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n colorPalette: [\r\n \"#818cf8\", // Indigo (lighter)\r\n \"#fbbf24\", // Amber (lighter)\r\n \"#34d399\", // Emerald (lighter)\r\n \"#f87171\", // Red (lighter)\r\n \"#a78bfa\", // Violet (lighter)\r\n \"#22d3ee\", // Cyan (lighter)\r\n \"#fb923c\", // Orange (lighter)\r\n \"#a3e635\", // Lime (lighter)\r\n \"#f472b6\", // Pink (lighter)\r\n \"#2dd4bf\", // Teal (lighter)\r\n ],\r\n axis: {\r\n lineColor: \"#334155\",\r\n labelColor: \"#94a3b8\",\r\n titleColor: \"#cbd5e1\",\r\n gridLineColor: \"#1e293b\",\r\n },\r\n tooltip: {\r\n backgroundColor: \"#1e293b\",\r\n textColor: \"#f1f5f9\",\r\n borderColor: \"#475569\",\r\n borderRadius: 8,\r\n },\r\n legend: {\r\n textColor: \"#cbd5e1\",\r\n backgroundColor: \"transparent\",\r\n },\r\n title: {\r\n color: \"#f8fafc\",\r\n fontSize: 18,\r\n fontWeight: \"600\",\r\n },\r\n};\r\n\r\n/**\r\n * Modern gradient theme with vibrant colors\r\n */\r\nexport const modernTheme: ThemeConfig = {\r\n name: \"modern\",\r\n backgroundColor: \"#fafafa\",\r\n textColor: \"#18181b\",\r\n fontFamily: '\"Inter\", system-ui, sans-serif',\r\n colorPalette: [\r\n \"#7c3aed\", // Violet\r\n \"#2563eb\", // Blue\r\n \"#059669\", // Green\r\n \"#dc2626\", // Red\r\n \"#d97706\", // Amber\r\n \"#0891b2\", // Cyan\r\n \"#c026d3\", // Fuchsia\r\n \"#4f46e5\", // Indigo\r\n \"#16a34a\", // Green\r\n \"#9333ea\", // Purple\r\n ],\r\n axis: {\r\n lineColor: \"#e4e4e7\",\r\n labelColor: \"#71717a\",\r\n titleColor: \"#3f3f46\",\r\n gridLineColor: \"#f4f4f5\",\r\n },\r\n tooltip: {\r\n backgroundColor: \"#18181b\",\r\n textColor: \"#fafafa\",\r\n borderColor: \"#27272a\",\r\n borderRadius: 12,\r\n },\r\n legend: {\r\n textColor: \"#3f3f46\",\r\n backgroundColor: \"transparent\",\r\n },\r\n title: {\r\n color: \"#09090b\",\r\n fontSize: 20,\r\n fontWeight: \"700\",\r\n },\r\n};\r\n\r\n/**\r\n * Midnight theme - deep dark with neon accents\r\n */\r\nexport const midnightTheme: ThemeConfig = {\r\n name: \"midnight\",\r\n backgroundColor: \"#030712\",\r\n textColor: \"#d1d5db\",\r\n fontFamily: '\"JetBrains Mono\", monospace',\r\n colorPalette: [\r\n \"#22d3ee\", // Cyan\r\n \"#a855f7\", // Purple\r\n \"#4ade80\", // Green\r\n \"#fb7185\", // Pink\r\n \"#facc15\", // Yellow\r\n \"#38bdf8\", // Sky\r\n \"#f472b6\", // Pink\r\n \"#2dd4bf\", // Teal\r\n \"#c084fc\", // Purple\r\n \"#fbbf24\", // Amber\r\n ],\r\n axis: {\r\n lineColor: \"#1f2937\",\r\n labelColor: \"#6b7280\",\r\n titleColor: \"#9ca3af\",\r\n gridLineColor: \"#111827\",\r\n },\r\n tooltip: {\r\n backgroundColor: \"#111827\",\r\n textColor: \"#f9fafb\",\r\n borderColor: \"#22d3ee\",\r\n borderRadius: 4,\r\n },\r\n legend: {\r\n textColor: \"#9ca3af\",\r\n backgroundColor: \"transparent\",\r\n },\r\n title: {\r\n color: \"#f3f4f6\",\r\n fontSize: 18,\r\n fontWeight: \"500\",\r\n },\r\n};\r\n\r\n","import type { ThemeConfig } from \"../types\";\r\nimport { lightTheme, darkTheme, modernTheme, midnightTheme } from \"./defaultTheme\";\r\n\r\n/**\r\n * ThemeManager - Manages chart themes and provides theme resolution\r\n */\r\nexport class ThemeManager {\r\n private static instance: ThemeManager;\r\n private themes: Map<string, ThemeConfig> = new Map();\r\n private currentTheme: string = \"light\";\r\n\r\n private constructor() {\r\n // Register built-in themes\r\n this.registerTheme(lightTheme);\r\n this.registerTheme(darkTheme);\r\n this.registerTheme(modernTheme);\r\n this.registerTheme(midnightTheme);\r\n }\r\n\r\n /**\r\n * Get the singleton instance of ThemeManager\r\n */\r\n public static getInstance(): ThemeManager {\r\n if (!ThemeManager.instance) {\r\n ThemeManager.instance = new ThemeManager();\r\n }\r\n return ThemeManager.instance;\r\n }\r\n\r\n /**\r\n * Register a custom theme\r\n */\r\n public registerTheme(theme: ThemeConfig): void {\r\n if (!theme.name) {\r\n throw new Error(\"Theme must have a name\");\r\n }\r\n this.themes.set(theme.name, theme);\r\n }\r\n\r\n /**\r\n * Get a theme by name\r\n */\r\n public getTheme(name: string): ThemeConfig {\r\n const theme = this.themes.get(name);\r\n if (!theme) {\r\n console.warn(`Theme \"${name}\" not found, falling back to light theme`);\r\n return this.themes.get(\"light\")!;\r\n }\r\n return theme;\r\n }\r\n\r\n /**\r\n * Set the global default theme\r\n */\r\n public setDefaultTheme(name: string): void {\r\n if (!this.themes.has(name)) {\r\n throw new Error(`Theme \"${name}\" is not registered`);\r\n }\r\n this.currentTheme = name;\r\n }\r\n\r\n /**\r\n * Get the current default theme name\r\n */\r\n public getDefaultThemeName(): string {\r\n return this.currentTheme;\r\n }\r\n\r\n /**\r\n * Get the current default theme configuration\r\n */\r\n public getDefaultTheme(): ThemeConfig {\r\n return this.themes.get(this.currentTheme)!;\r\n }\r\n\r\n /**\r\n * Get all registered theme names\r\n */\r\n public getAvailableThemes(): string[] {\r\n return Array.from(this.themes.keys());\r\n }\r\n\r\n /**\r\n * Check if a theme is registered\r\n */\r\n public hasTheme(name: string): boolean {\r\n return this.themes.has(name);\r\n }\r\n\r\n /**\r\n * Resolve theme from string name or ThemeConfig object\r\n */\r\n public resolveTheme(theme?: ThemeConfig | string): ThemeConfig {\r\n if (!theme) {\r\n return this.getDefaultTheme();\r\n }\r\n if (typeof theme === \"string\") {\r\n return this.getTheme(theme);\r\n }\r\n // Merge with default theme for any missing properties\r\n return this.mergeThemes(this.getDefaultTheme(), theme);\r\n }\r\n\r\n /**\r\n * Merge two themes, with override taking precedence\r\n */\r\n public mergeThemes(base: ThemeConfig, override: Partial<ThemeConfig>): ThemeConfig {\r\n return {\r\n ...base,\r\n ...override,\r\n axis: {\r\n ...base.axis,\r\n ...override.axis,\r\n },\r\n tooltip: {\r\n ...base.tooltip,\r\n ...override.tooltip,\r\n },\r\n legend: {\r\n ...base.legend,\r\n ...override.legend,\r\n },\r\n title: {\r\n ...base.title,\r\n ...override.title,\r\n },\r\n colorPalette: override.colorPalette ?? base.colorPalette,\r\n };\r\n }\r\n\r\n /**\r\n * Get color from palette by index (cycles through palette)\r\n */\r\n public getColorFromPalette(theme: ThemeConfig, index: number): string {\r\n const palette = theme.colorPalette ?? lightTheme.colorPalette!;\r\n return palette[index % palette.length];\r\n }\r\n}\r\n\r\n// Export singleton getter for convenience\r\nexport const getThemeManager = (): ThemeManager => ThemeManager.getInstance();\r\n\r\n"]}