@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 +65 -0
- package/dist/chunk-KATRK3C3.js +336 -0
- package/dist/chunk-KATRK3C3.js.map +1 -0
- package/dist/chunk-Q2ZHY445.mjs +328 -0
- package/dist/chunk-Q2ZHY445.mjs.map +1 -0
- package/dist/index-DWzDIVQ9.d.mts +404 -0
- package/dist/index-DWzDIVQ9.d.ts +404 -0
- package/dist/index.d.mts +556 -0
- package/dist/index.d.ts +556 -0
- package/dist/index.js +1655 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1600 -0
- package/dist/index.mjs.map +1 -0
- package/dist/themes/index.d.mts +1 -0
- package/dist/themes/index.d.ts +1 -0
- package/dist/themes/index.js +32 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/index.mjs +3 -0
- package/dist/themes/index.mjs.map +1 -0
- package/package.json +54 -0
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"]}
|