@frontmcp/ui 0.12.2 → 1.0.0-beta.1
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 +279 -72
- package/bridge/adapters/claude.adapter.d.ts.map +1 -1
- package/bridge/adapters/gemini.adapter.d.ts.map +1 -1
- package/bridge/index.js +2 -36
- package/components/Alert/Alert.d.ts +11 -0
- package/components/Alert/Alert.d.ts.map +1 -0
- package/components/Alert/index.d.ts +4 -0
- package/components/Alert/index.d.ts.map +1 -0
- package/components/Alert/index.js +61 -0
- package/components/Avatar/Avatar.d.ts +10 -0
- package/components/Avatar/Avatar.d.ts.map +1 -0
- package/components/Avatar/index.d.ts +4 -0
- package/components/Avatar/index.d.ts.map +1 -0
- package/components/Avatar/index.js +43 -0
- package/components/Badge/Badge.d.ts +13 -0
- package/components/Badge/Badge.d.ts.map +1 -0
- package/components/Badge/index.d.ts +4 -0
- package/components/Badge/index.d.ts.map +1 -0
- package/{render → components/Badge}/index.js +54 -42
- package/components/Button/Button.d.ts +16 -0
- package/components/Button/Button.d.ts.map +1 -0
- package/components/Button/index.d.ts +4 -0
- package/components/Button/index.d.ts.map +1 -0
- package/components/Button/index.js +91 -0
- package/components/Card/Card.d.ts +25 -0
- package/components/Card/Card.d.ts.map +1 -0
- package/components/Card/index.d.ts +4 -0
- package/components/Card/index.d.ts.map +1 -0
- package/components/Card/index.js +110 -0
- package/components/List/List.d.ts +15 -0
- package/components/List/List.d.ts.map +1 -0
- package/components/List/index.d.ts +4 -0
- package/components/List/index.d.ts.map +1 -0
- package/components/List/index.js +58 -0
- package/components/Loader/Loader.d.ts +28 -0
- package/components/Loader/Loader.d.ts.map +1 -0
- package/components/Loader/LoaderContext.d.ts +20 -0
- package/components/Loader/LoaderContext.d.ts.map +1 -0
- package/components/Loader/index.d.ts +6 -0
- package/components/Loader/index.d.ts.map +1 -0
- package/components/Loader/index.js +174 -0
- package/components/Modal/Modal.d.ts +22 -0
- package/components/Modal/Modal.d.ts.map +1 -0
- package/components/Modal/index.d.ts +4 -0
- package/components/Modal/index.d.ts.map +1 -0
- package/components/Modal/index.js +80 -0
- package/components/Select/Select.d.ts +21 -0
- package/components/Select/Select.d.ts.map +1 -0
- package/components/Select/index.d.ts +4 -0
- package/components/Select/index.d.ts.map +1 -0
- package/components/Select/index.js +78 -0
- package/components/Table/Table.d.ts +15 -0
- package/components/Table/Table.d.ts.map +1 -0
- package/components/Table/index.d.ts +4 -0
- package/components/Table/index.d.ts.map +1 -0
- package/components/Table/index.js +70 -0
- package/components/TextField/TextField.d.ts +19 -0
- package/components/TextField/TextField.d.ts.map +1 -0
- package/components/TextField/index.d.ts +4 -0
- package/components/TextField/index.d.ts.map +1 -0
- package/components/TextField/index.js +77 -0
- package/components/index.d.ts +22 -28
- package/components/index.d.ts.map +1 -1
- package/components/index.js +523 -2521
- package/esm/bridge/index.mjs +2 -6
- package/esm/components/Alert/index.mjs +28 -0
- package/esm/components/Avatar/index.mjs +10 -0
- package/esm/components/Badge/index.mjs +56 -0
- package/esm/components/Button/index.mjs +58 -0
- package/esm/components/Card/index.mjs +77 -0
- package/esm/components/List/index.mjs +25 -0
- package/esm/components/Loader/index.mjs +141 -0
- package/esm/components/Modal/index.mjs +47 -0
- package/esm/components/Select/index.mjs +45 -0
- package/esm/components/Table/index.mjs +37 -0
- package/esm/components/TextField/index.mjs +44 -0
- package/esm/components/index.mjs +513 -2415
- package/esm/index.mjs +62 -4652
- package/esm/package.json +372 -16
- package/esm/react/index.mjs +2 -285
- package/esm/renderer/charts/index.mjs +336 -0
- package/esm/renderer/common/index.mjs +135 -0
- package/esm/renderer/csv/index.mjs +193 -0
- package/esm/renderer/flow/index.mjs +259 -0
- package/esm/renderer/html/index.mjs +99 -0
- package/esm/renderer/image/index.mjs +125 -0
- package/esm/renderer/index.mjs +2173 -0
- package/esm/renderer/maps/index.mjs +217 -0
- package/esm/renderer/math/index.mjs +229 -0
- package/esm/renderer/mdx/index.mjs +261 -0
- package/esm/renderer/media/index.mjs +235 -0
- package/esm/renderer/mermaid/index.mjs +220 -0
- package/esm/renderer/pdf/index.mjs +229 -0
- package/esm/renderer/react/index.mjs +230 -0
- package/esm/runtime/index.mjs +194 -0
- package/esm/theme/index.mjs +93 -0
- package/index.d.ts +10 -18
- package/index.d.ts.map +1 -1
- package/index.js +63 -4806
- package/package.json +372 -16
- package/react/index.d.ts +8 -54
- package/react/index.d.ts.map +1 -1
- package/react/index.js +2 -295
- package/renderer/auto-detect.d.ts +39 -0
- package/renderer/auto-detect.d.ts.map +1 -0
- package/renderer/charts/index.d.ts +22 -0
- package/renderer/charts/index.d.ts.map +1 -0
- package/renderer/charts/index.js +367 -0
- package/renderer/common/index.d.ts +5 -0
- package/renderer/common/index.d.ts.map +1 -0
- package/renderer/common/index.js +158 -0
- package/renderer/common/inject-stylesheet.d.ts +9 -0
- package/renderer/common/inject-stylesheet.d.ts.map +1 -0
- package/renderer/common/lazy-import.d.ts +85 -0
- package/renderer/common/lazy-import.d.ts.map +1 -0
- package/renderer/common/use-lazy-module.d.ts +13 -0
- package/renderer/common/use-lazy-module.d.ts.map +1 -0
- package/renderer/common/use-renderer-theme.d.ts +35 -0
- package/renderer/common/use-renderer-theme.d.ts.map +1 -0
- package/renderer/csv/index.d.ts +12 -0
- package/renderer/csv/index.d.ts.map +1 -0
- package/renderer/csv/index.js +224 -0
- package/renderer/flow/index.d.ts +40 -0
- package/renderer/flow/index.d.ts.map +1 -0
- package/renderer/flow/index.js +290 -0
- package/renderer/html/index.d.ts +12 -0
- package/renderer/html/index.d.ts.map +1 -0
- package/renderer/html/index.js +130 -0
- package/renderer/image/index.d.ts +11 -0
- package/renderer/image/index.d.ts.map +1 -0
- package/renderer/image/index.js +156 -0
- package/renderer/index.d.ts +32 -0
- package/renderer/index.d.ts.map +1 -0
- package/renderer/index.js +2206 -0
- package/renderer/maps/index.d.ts +27 -0
- package/renderer/maps/index.d.ts.map +1 -0
- package/renderer/maps/index.js +248 -0
- package/renderer/math/index.d.ts +11 -0
- package/renderer/math/index.d.ts.map +1 -0
- package/renderer/math/index.js +260 -0
- package/renderer/mdx/index.d.ts +10 -0
- package/renderer/mdx/index.d.ts.map +1 -0
- package/renderer/mdx/index.js +292 -0
- package/renderer/media/index.d.ts +20 -0
- package/renderer/media/index.d.ts.map +1 -0
- package/renderer/media/index.js +266 -0
- package/renderer/mermaid/index.d.ts +11 -0
- package/renderer/mermaid/index.d.ts.map +1 -0
- package/renderer/mermaid/index.js +251 -0
- package/renderer/pdf/index.d.ts +10 -0
- package/renderer/pdf/index.d.ts.map +1 -0
- package/renderer/pdf/index.js +260 -0
- package/renderer/react/index.d.ts +45 -0
- package/renderer/react/index.d.ts.map +1 -0
- package/renderer/react/index.js +261 -0
- package/renderer/types.d.ts +24 -0
- package/renderer/types.d.ts.map +1 -0
- package/runtime/babel-runtime.d.ts +70 -0
- package/runtime/babel-runtime.d.ts.map +1 -0
- package/runtime/content-detector.d.ts +43 -0
- package/runtime/content-detector.d.ts.map +1 -0
- package/runtime/index.d.ts +10 -0
- package/runtime/index.d.ts.map +1 -0
- package/runtime/index.js +217 -0
- package/theme/FrontMcpThemeProvider.d.ts +4 -0
- package/theme/FrontMcpThemeProvider.d.ts.map +1 -0
- package/theme/create-theme.d.ts +9 -0
- package/theme/create-theme.d.ts.map +1 -0
- package/theme/index.d.ts +5 -0
- package/theme/index.d.ts.map +1 -0
- package/theme/index.js +126 -0
- package/theme/types.d.ts +28 -0
- package/theme/types.d.ts.map +1 -0
- package/theme/use-theme.d.ts +3 -0
- package/theme/use-theme.d.ts.map +1 -0
- package/bundler/browser-components.d.ts +0 -42
- package/bundler/browser-components.d.ts.map +0 -1
- package/bundler/bundler.d.ts +0 -282
- package/bundler/bundler.d.ts.map +0 -1
- package/bundler/index.d.ts +0 -43
- package/bundler/index.d.ts.map +0 -1
- package/bundler/index.js +0 -3168
- package/bundler/types.d.ts +0 -883
- package/bundler/types.d.ts.map +0 -1
- package/components/alert.d.ts +0 -83
- package/components/alert.d.ts.map +0 -1
- package/components/alert.schema.d.ts +0 -98
- package/components/alert.schema.d.ts.map +0 -1
- package/components/avatar.d.ts +0 -77
- package/components/avatar.d.ts.map +0 -1
- package/components/avatar.schema.d.ts +0 -170
- package/components/avatar.schema.d.ts.map +0 -1
- package/components/badge.d.ts +0 -78
- package/components/badge.d.ts.map +0 -1
- package/components/badge.schema.d.ts +0 -91
- package/components/badge.schema.d.ts.map +0 -1
- package/components/button.d.ts +0 -100
- package/components/button.d.ts.map +0 -1
- package/components/button.schema.d.ts +0 -120
- package/components/button.schema.d.ts.map +0 -1
- package/components/card.d.ts +0 -76
- package/components/card.d.ts.map +0 -1
- package/components/card.schema.d.ts +0 -93
- package/components/card.schema.d.ts.map +0 -1
- package/components/form.d.ts +0 -227
- package/components/form.d.ts.map +0 -1
- package/components/form.schema.d.ts +0 -365
- package/components/form.schema.d.ts.map +0 -1
- package/components/list.d.ts +0 -121
- package/components/list.d.ts.map +0 -1
- package/components/list.schema.d.ts +0 -129
- package/components/list.schema.d.ts.map +0 -1
- package/components/modal.d.ts +0 -100
- package/components/modal.d.ts.map +0 -1
- package/components/modal.schema.d.ts +0 -151
- package/components/modal.schema.d.ts.map +0 -1
- package/components/table.d.ts +0 -91
- package/components/table.d.ts.map +0 -1
- package/components/table.schema.d.ts +0 -123
- package/components/table.schema.d.ts.map +0 -1
- package/esm/bundler/index.mjs +0 -3136
- package/esm/layouts/index.mjs +0 -409
- package/esm/render/index.mjs +0 -45
- package/esm/renderers/index.mjs +0 -621
- package/esm/universal/index.mjs +0 -1946
- package/esm/web-components/index.mjs +0 -2023
- package/layouts/base.d.ts +0 -86
- package/layouts/base.d.ts.map +0 -1
- package/layouts/index.d.ts +0 -8
- package/layouts/index.d.ts.map +0 -1
- package/layouts/index.js +0 -437
- package/layouts/presets.d.ts +0 -134
- package/layouts/presets.d.ts.map +0 -1
- package/react/Alert.d.ts +0 -101
- package/react/Alert.d.ts.map +0 -1
- package/react/Badge.d.ts +0 -100
- package/react/Badge.d.ts.map +0 -1
- package/react/Button.d.ts +0 -108
- package/react/Button.d.ts.map +0 -1
- package/react/Card.d.ts +0 -103
- package/react/Card.d.ts.map +0 -1
- package/react/types.d.ts +0 -105
- package/react/types.d.ts.map +0 -1
- package/render/index.d.ts +0 -8
- package/render/index.d.ts.map +0 -1
- package/render/prerender.d.ts +0 -57
- package/render/prerender.d.ts.map +0 -1
- package/renderers/index.d.ts +0 -26
- package/renderers/index.d.ts.map +0 -1
- package/renderers/index.js +0 -666
- package/renderers/mdx.renderer.d.ts +0 -99
- package/renderers/mdx.renderer.d.ts.map +0 -1
- package/renderers/react.adapter.d.ts +0 -70
- package/renderers/react.adapter.d.ts.map +0 -1
- package/renderers/react.renderer.d.ts +0 -105
- package/renderers/react.renderer.d.ts.map +0 -1
- package/renderers/transpiler.d.ts +0 -49
- package/renderers/transpiler.d.ts.map +0 -1
- package/universal/UniversalApp.d.ts +0 -108
- package/universal/UniversalApp.d.ts.map +0 -1
- package/universal/cached-runtime.d.ts +0 -139
- package/universal/cached-runtime.d.ts.map +0 -1
- package/universal/context.d.ts +0 -122
- package/universal/context.d.ts.map +0 -1
- package/universal/index.d.ts +0 -57
- package/universal/index.d.ts.map +0 -1
- package/universal/index.js +0 -2032
- package/universal/renderers/html.renderer.d.ts +0 -36
- package/universal/renderers/html.renderer.d.ts.map +0 -1
- package/universal/renderers/index.d.ts +0 -112
- package/universal/renderers/index.d.ts.map +0 -1
- package/universal/renderers/markdown.renderer.d.ts +0 -33
- package/universal/renderers/markdown.renderer.d.ts.map +0 -1
- package/universal/renderers/mdx.renderer.d.ts +0 -38
- package/universal/renderers/mdx.renderer.d.ts.map +0 -1
- package/universal/renderers/react.renderer.d.ts +0 -46
- package/universal/renderers/react.renderer.d.ts.map +0 -1
- package/universal/runtime-builder.d.ts +0 -33
- package/universal/runtime-builder.d.ts.map +0 -1
- package/universal/store.d.ts +0 -135
- package/universal/store.d.ts.map +0 -1
- package/universal/types.d.ts +0 -199
- package/universal/types.d.ts.map +0 -1
- package/web-components/core/attribute-parser.d.ts +0 -82
- package/web-components/core/attribute-parser.d.ts.map +0 -1
- package/web-components/core/base-element.d.ts +0 -197
- package/web-components/core/base-element.d.ts.map +0 -1
- package/web-components/core/index.d.ts +0 -9
- package/web-components/core/index.d.ts.map +0 -1
- package/web-components/elements/fmcp-alert.d.ts +0 -46
- package/web-components/elements/fmcp-alert.d.ts.map +0 -1
- package/web-components/elements/fmcp-badge.d.ts +0 -47
- package/web-components/elements/fmcp-badge.d.ts.map +0 -1
- package/web-components/elements/fmcp-button.d.ts +0 -117
- package/web-components/elements/fmcp-button.d.ts.map +0 -1
- package/web-components/elements/fmcp-card.d.ts +0 -53
- package/web-components/elements/fmcp-card.d.ts.map +0 -1
- package/web-components/elements/fmcp-input.d.ts +0 -96
- package/web-components/elements/fmcp-input.d.ts.map +0 -1
- package/web-components/elements/fmcp-select.d.ts +0 -100
- package/web-components/elements/fmcp-select.d.ts.map +0 -1
- package/web-components/elements/index.d.ts +0 -13
- package/web-components/elements/index.d.ts.map +0 -1
- package/web-components/index.d.ts +0 -49
- package/web-components/index.d.ts.map +0 -1
- package/web-components/index.js +0 -2058
- package/web-components/register.d.ts +0 -57
- package/web-components/register.d.ts.map +0 -1
- package/web-components/types.d.ts +0 -122
- package/web-components/types.d.ts.map +0 -1
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// libs/ui/src/renderer/charts/index.ts
|
|
31
|
+
var charts_exports = {};
|
|
32
|
+
__export(charts_exports, {
|
|
33
|
+
ChartsRenderer: () => ChartsRenderer,
|
|
34
|
+
chartsRenderer: () => chartsRenderer,
|
|
35
|
+
isChart: () => isChart
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(charts_exports);
|
|
38
|
+
var import_react3 = __toESM(require("react"));
|
|
39
|
+
var import_Box = __toESM(require("@mui/material/Box"));
|
|
40
|
+
var import_Alert = __toESM(require("@mui/material/Alert"));
|
|
41
|
+
var import_Typography = __toESM(require("@mui/material/Typography"));
|
|
42
|
+
var import_styles2 = require("@mui/material/styles");
|
|
43
|
+
|
|
44
|
+
// libs/ui/src/renderer/common/lazy-import.ts
|
|
45
|
+
var ESM_SH_BASE = "https://esm.sh/";
|
|
46
|
+
function esmShUrl(pkg, options) {
|
|
47
|
+
let url = `${ESM_SH_BASE}${pkg}`;
|
|
48
|
+
if (options?.external?.length) {
|
|
49
|
+
url += `?external=${options.external.join(",")}`;
|
|
50
|
+
}
|
|
51
|
+
return url;
|
|
52
|
+
}
|
|
53
|
+
function runtimeImport(specifier) {
|
|
54
|
+
const dynamicImport = new Function("s", "return import(s)");
|
|
55
|
+
return dynamicImport(specifier);
|
|
56
|
+
}
|
|
57
|
+
async function runtimeImportWithFallback(bareSpecifier, fallbackUrl) {
|
|
58
|
+
try {
|
|
59
|
+
return await runtimeImport(bareSpecifier);
|
|
60
|
+
} catch {
|
|
61
|
+
return runtimeImport(fallbackUrl);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function createLazyImport(moduleId, importer) {
|
|
65
|
+
let state = { status: "idle" };
|
|
66
|
+
const doImport = importer ?? (async () => {
|
|
67
|
+
const mod = await runtimeImport(moduleId);
|
|
68
|
+
return mod["default"] ?? mod;
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
load() {
|
|
72
|
+
if (state.status === "loaded") return Promise.resolve(state.module);
|
|
73
|
+
if (state.status === "loading") return state.promise;
|
|
74
|
+
if (state.status === "error") {
|
|
75
|
+
state = { status: "idle" };
|
|
76
|
+
}
|
|
77
|
+
const promise = doImport().then(
|
|
78
|
+
(mod) => {
|
|
79
|
+
state = { status: "loaded", module: mod };
|
|
80
|
+
return mod;
|
|
81
|
+
},
|
|
82
|
+
(err) => {
|
|
83
|
+
const error = err instanceof Error ? err : new Error(`Failed to load module "${moduleId}": ${String(err)}`);
|
|
84
|
+
state = { status: "error", error };
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
state = { status: "loading", promise };
|
|
89
|
+
return promise;
|
|
90
|
+
},
|
|
91
|
+
get() {
|
|
92
|
+
return state.status === "loaded" ? state.module : void 0;
|
|
93
|
+
},
|
|
94
|
+
getState() {
|
|
95
|
+
return state;
|
|
96
|
+
},
|
|
97
|
+
reset() {
|
|
98
|
+
state = { status: "idle" };
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// libs/ui/src/renderer/common/use-renderer-theme.ts
|
|
104
|
+
var import_react = require("react");
|
|
105
|
+
var import_styles = require("@mui/material/styles");
|
|
106
|
+
function extractThemeValues(theme) {
|
|
107
|
+
const palette = theme.palette;
|
|
108
|
+
return {
|
|
109
|
+
mode: palette.mode,
|
|
110
|
+
primary: palette.primary.main,
|
|
111
|
+
secondary: palette.secondary.main,
|
|
112
|
+
error: palette.error.main,
|
|
113
|
+
warning: palette.warning.main,
|
|
114
|
+
success: palette.success.main,
|
|
115
|
+
info: palette.info.main,
|
|
116
|
+
background: palette.background.default,
|
|
117
|
+
paper: palette.background.paper,
|
|
118
|
+
textPrimary: palette.text.primary,
|
|
119
|
+
textSecondary: palette.text.secondary,
|
|
120
|
+
divider: palette.divider,
|
|
121
|
+
fontFamily: theme.typography.fontFamily ?? "sans-serif",
|
|
122
|
+
monoFontFamily: theme.typography["monoFontFamily"] ?? '"SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace',
|
|
123
|
+
fontSize: theme.typography.fontSize ?? 14,
|
|
124
|
+
borderRadius: typeof theme.shape.borderRadius === "number" ? theme.shape.borderRadius : 4,
|
|
125
|
+
seriesColors: [
|
|
126
|
+
palette.primary.main,
|
|
127
|
+
palette.secondary.main,
|
|
128
|
+
palette.error.main,
|
|
129
|
+
palette.warning.main,
|
|
130
|
+
palette.success.main,
|
|
131
|
+
palette.info.main
|
|
132
|
+
]
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function useRendererTheme() {
|
|
136
|
+
const theme = (0, import_styles.useTheme)();
|
|
137
|
+
return (0, import_react.useMemo)(() => extractThemeValues(theme), [theme]);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// libs/ui/src/renderer/common/use-lazy-module.ts
|
|
141
|
+
var import_react2 = require("react");
|
|
142
|
+
function useLazyModule(lazy) {
|
|
143
|
+
const [, forceUpdate] = (0, import_react2.useState)(0);
|
|
144
|
+
(0, import_react2.useEffect)(() => {
|
|
145
|
+
if (lazy.getState().status === "loaded") {
|
|
146
|
+
forceUpdate((n) => n + 1);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
lazy.load().then(
|
|
150
|
+
() => forceUpdate((n) => n + 1),
|
|
151
|
+
() => forceUpdate((n) => n + 1)
|
|
152
|
+
);
|
|
153
|
+
}, [lazy]);
|
|
154
|
+
return lazy.get();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// libs/ui/src/renderer/charts/index.ts
|
|
158
|
+
var CHART_TYPE_RE = /"type"\s*:\s*"(?:bar|line|area|pie|scatter|radar|composed)"/;
|
|
159
|
+
function isChart(content) {
|
|
160
|
+
const trimmed = content.trim();
|
|
161
|
+
if (trimmed.charCodeAt(0) !== 123) return false;
|
|
162
|
+
return CHART_TYPE_RE.test(trimmed) && trimmed.includes('"data"');
|
|
163
|
+
}
|
|
164
|
+
var lazyRecharts = createLazyImport("recharts", async () => {
|
|
165
|
+
const mod = await runtimeImportWithFallback("recharts", esmShUrl("recharts@2", { external: ["react", "react-dom"] }));
|
|
166
|
+
return mod;
|
|
167
|
+
});
|
|
168
|
+
var ChartRoot = (0, import_styles2.styled)(import_Box.default, {
|
|
169
|
+
name: "FrontMcpChart",
|
|
170
|
+
slot: "Root"
|
|
171
|
+
})(({ theme }) => ({
|
|
172
|
+
width: "100%",
|
|
173
|
+
padding: theme.spacing(2)
|
|
174
|
+
}));
|
|
175
|
+
function ChartView({ config, className }) {
|
|
176
|
+
const themeValues = useRendererTheme();
|
|
177
|
+
const recharts = useLazyModule(lazyRecharts);
|
|
178
|
+
const colors = (0, import_react3.useMemo)(() => config.colors ?? themeValues.seriesColors, [config.colors, themeValues.seriesColors]);
|
|
179
|
+
if (!recharts) {
|
|
180
|
+
return import_react3.default.createElement(import_Alert.default, { severity: "info" }, "Loading chart library...");
|
|
181
|
+
}
|
|
182
|
+
const { ResponsiveContainer, Tooltip, Legend, CartesianGrid, XAxis, YAxis } = recharts;
|
|
183
|
+
const height = config.height ?? 400;
|
|
184
|
+
const xKey = config.xKey ?? "name";
|
|
185
|
+
const yKeys = config.yKeys ?? Object.keys(config.data?.[0] ?? {}).filter((k) => k !== xKey);
|
|
186
|
+
const chartContent = renderChartType(
|
|
187
|
+
recharts,
|
|
188
|
+
config.type,
|
|
189
|
+
config.data,
|
|
190
|
+
xKey,
|
|
191
|
+
yKeys,
|
|
192
|
+
colors,
|
|
193
|
+
themeValues.borderRadius
|
|
194
|
+
);
|
|
195
|
+
return import_react3.default.createElement(
|
|
196
|
+
ChartRoot,
|
|
197
|
+
{ className },
|
|
198
|
+
config.title && import_react3.default.createElement(
|
|
199
|
+
import_Typography.default,
|
|
200
|
+
{ variant: "subtitle1", gutterBottom: true, fontWeight: 600, textAlign: "center" },
|
|
201
|
+
config.title
|
|
202
|
+
),
|
|
203
|
+
import_react3.default.createElement(ResponsiveContainer, { width: "100%", height }, chartContent)
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
function renderChartType(rc, type, data, xKey, yKeys, colors, borderRadius) {
|
|
207
|
+
const commonProps = { data };
|
|
208
|
+
const grid = import_react3.default.createElement(rc.CartesianGrid, { strokeDasharray: "3 3", opacity: 0.3 });
|
|
209
|
+
const xAxis = import_react3.default.createElement(rc.XAxis, { dataKey: xKey });
|
|
210
|
+
const yAxis = import_react3.default.createElement(rc.YAxis);
|
|
211
|
+
const tooltip = import_react3.default.createElement(rc.Tooltip, { contentStyle: { borderRadius } });
|
|
212
|
+
const legend = import_react3.default.createElement(rc.Legend);
|
|
213
|
+
switch (type) {
|
|
214
|
+
case "bar":
|
|
215
|
+
return import_react3.default.createElement(
|
|
216
|
+
rc.BarChart,
|
|
217
|
+
commonProps,
|
|
218
|
+
grid,
|
|
219
|
+
xAxis,
|
|
220
|
+
yAxis,
|
|
221
|
+
tooltip,
|
|
222
|
+
legend,
|
|
223
|
+
...yKeys.map(
|
|
224
|
+
(key, i) => import_react3.default.createElement(rc.Bar, {
|
|
225
|
+
key,
|
|
226
|
+
dataKey: key,
|
|
227
|
+
fill: colors[i % colors.length],
|
|
228
|
+
radius: [borderRadius, borderRadius, 0, 0]
|
|
229
|
+
})
|
|
230
|
+
)
|
|
231
|
+
);
|
|
232
|
+
case "line":
|
|
233
|
+
return import_react3.default.createElement(
|
|
234
|
+
rc.LineChart,
|
|
235
|
+
commonProps,
|
|
236
|
+
grid,
|
|
237
|
+
xAxis,
|
|
238
|
+
yAxis,
|
|
239
|
+
tooltip,
|
|
240
|
+
legend,
|
|
241
|
+
...yKeys.map(
|
|
242
|
+
(key, i) => import_react3.default.createElement(rc.Line, {
|
|
243
|
+
key,
|
|
244
|
+
type: "monotone",
|
|
245
|
+
dataKey: key,
|
|
246
|
+
stroke: colors[i % colors.length],
|
|
247
|
+
strokeWidth: 2
|
|
248
|
+
})
|
|
249
|
+
)
|
|
250
|
+
);
|
|
251
|
+
case "area":
|
|
252
|
+
return import_react3.default.createElement(
|
|
253
|
+
rc.AreaChart,
|
|
254
|
+
commonProps,
|
|
255
|
+
grid,
|
|
256
|
+
xAxis,
|
|
257
|
+
yAxis,
|
|
258
|
+
tooltip,
|
|
259
|
+
legend,
|
|
260
|
+
...yKeys.map(
|
|
261
|
+
(key, i) => import_react3.default.createElement(rc.Area, {
|
|
262
|
+
key,
|
|
263
|
+
type: "monotone",
|
|
264
|
+
dataKey: key,
|
|
265
|
+
stroke: colors[i % colors.length],
|
|
266
|
+
fill: colors[i % colors.length],
|
|
267
|
+
fillOpacity: 0.3
|
|
268
|
+
})
|
|
269
|
+
)
|
|
270
|
+
);
|
|
271
|
+
case "pie":
|
|
272
|
+
return import_react3.default.createElement(
|
|
273
|
+
rc.PieChart,
|
|
274
|
+
{},
|
|
275
|
+
tooltip,
|
|
276
|
+
legend,
|
|
277
|
+
import_react3.default.createElement(
|
|
278
|
+
rc.Pie,
|
|
279
|
+
{ data, dataKey: yKeys[0] ?? "value", nameKey: xKey, cx: "50%", cy: "50%", outerRadius: "80%", label: true },
|
|
280
|
+
...data.map((_, i) => import_react3.default.createElement(rc.Cell, { key: i, fill: colors[i % colors.length] }))
|
|
281
|
+
)
|
|
282
|
+
);
|
|
283
|
+
case "scatter":
|
|
284
|
+
return import_react3.default.createElement(
|
|
285
|
+
rc.ScatterChart,
|
|
286
|
+
{},
|
|
287
|
+
grid,
|
|
288
|
+
xAxis,
|
|
289
|
+
yAxis,
|
|
290
|
+
tooltip,
|
|
291
|
+
legend,
|
|
292
|
+
...yKeys.map(
|
|
293
|
+
(key, i) => import_react3.default.createElement(rc.Scatter, { key, name: key, dataKey: key, data, fill: colors[i % colors.length] })
|
|
294
|
+
)
|
|
295
|
+
);
|
|
296
|
+
case "radar":
|
|
297
|
+
return import_react3.default.createElement(
|
|
298
|
+
rc.RadarChart,
|
|
299
|
+
{ cx: "50%", cy: "50%", outerRadius: "80%", data },
|
|
300
|
+
import_react3.default.createElement(rc.PolarGrid),
|
|
301
|
+
import_react3.default.createElement(rc.PolarAngleAxis, { dataKey: xKey }),
|
|
302
|
+
import_react3.default.createElement(rc.PolarRadiusAxis),
|
|
303
|
+
tooltip,
|
|
304
|
+
legend,
|
|
305
|
+
...yKeys.map(
|
|
306
|
+
(key, i) => import_react3.default.createElement(rc.Radar, {
|
|
307
|
+
key,
|
|
308
|
+
name: key,
|
|
309
|
+
dataKey: key,
|
|
310
|
+
stroke: colors[i % colors.length],
|
|
311
|
+
fill: colors[i % colors.length],
|
|
312
|
+
fillOpacity: 0.3
|
|
313
|
+
})
|
|
314
|
+
)
|
|
315
|
+
);
|
|
316
|
+
case "composed":
|
|
317
|
+
return import_react3.default.createElement(
|
|
318
|
+
rc.ComposedChart,
|
|
319
|
+
commonProps,
|
|
320
|
+
grid,
|
|
321
|
+
xAxis,
|
|
322
|
+
yAxis,
|
|
323
|
+
tooltip,
|
|
324
|
+
legend,
|
|
325
|
+
...yKeys.map((key, i) => {
|
|
326
|
+
if (i % 2 === 0) {
|
|
327
|
+
return import_react3.default.createElement(rc.Bar, {
|
|
328
|
+
key,
|
|
329
|
+
dataKey: key,
|
|
330
|
+
fill: colors[i % colors.length],
|
|
331
|
+
radius: [borderRadius, borderRadius, 0, 0]
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
return import_react3.default.createElement(rc.Line, {
|
|
335
|
+
key,
|
|
336
|
+
type: "monotone",
|
|
337
|
+
dataKey: key,
|
|
338
|
+
stroke: colors[i % colors.length],
|
|
339
|
+
strokeWidth: 2
|
|
340
|
+
});
|
|
341
|
+
})
|
|
342
|
+
);
|
|
343
|
+
default:
|
|
344
|
+
return import_react3.default.createElement(rc.BarChart, commonProps, grid, xAxis, yAxis, tooltip, legend);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
lazyRecharts.load().catch(() => {
|
|
348
|
+
});
|
|
349
|
+
var ChartsRenderer = class {
|
|
350
|
+
type = "chart";
|
|
351
|
+
priority = 80;
|
|
352
|
+
canHandle(content) {
|
|
353
|
+
return isChart(content);
|
|
354
|
+
}
|
|
355
|
+
render(content, options) {
|
|
356
|
+
try {
|
|
357
|
+
const config = JSON.parse(content);
|
|
358
|
+
return import_react3.default.createElement(ChartView, {
|
|
359
|
+
config,
|
|
360
|
+
className: options?.className ?? "fmcp-chart-content"
|
|
361
|
+
});
|
|
362
|
+
} catch {
|
|
363
|
+
return import_react3.default.createElement(import_Alert.default, { severity: "error" }, "Invalid chart JSON");
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
var chartsRenderer = new ChartsRenderer();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { useRendererTheme, extractThemeValues, type RendererThemeValues } from './use-renderer-theme';
|
|
2
|
+
export { injectStylesheet } from './inject-stylesheet';
|
|
3
|
+
export { createLazyImport, runtimeImport, runtimeImportWithFallback, esmShUrl, ESM_SH_BASE, type LazyImport, type LazyImportState, } from './lazy-import';
|
|
4
|
+
export { useLazyModule } from './use-lazy-module';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,QAAQ,EACR,WAAW,EACX,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// libs/ui/src/renderer/common/index.ts
|
|
21
|
+
var common_exports = {};
|
|
22
|
+
__export(common_exports, {
|
|
23
|
+
ESM_SH_BASE: () => ESM_SH_BASE,
|
|
24
|
+
createLazyImport: () => createLazyImport,
|
|
25
|
+
esmShUrl: () => esmShUrl,
|
|
26
|
+
extractThemeValues: () => extractThemeValues,
|
|
27
|
+
injectStylesheet: () => injectStylesheet,
|
|
28
|
+
runtimeImport: () => runtimeImport,
|
|
29
|
+
runtimeImportWithFallback: () => runtimeImportWithFallback,
|
|
30
|
+
useLazyModule: () => useLazyModule,
|
|
31
|
+
useRendererTheme: () => useRendererTheme
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(common_exports);
|
|
34
|
+
|
|
35
|
+
// libs/ui/src/renderer/common/use-renderer-theme.ts
|
|
36
|
+
var import_react = require("react");
|
|
37
|
+
var import_styles = require("@mui/material/styles");
|
|
38
|
+
function extractThemeValues(theme) {
|
|
39
|
+
const palette = theme.palette;
|
|
40
|
+
return {
|
|
41
|
+
mode: palette.mode,
|
|
42
|
+
primary: palette.primary.main,
|
|
43
|
+
secondary: palette.secondary.main,
|
|
44
|
+
error: palette.error.main,
|
|
45
|
+
warning: palette.warning.main,
|
|
46
|
+
success: palette.success.main,
|
|
47
|
+
info: palette.info.main,
|
|
48
|
+
background: palette.background.default,
|
|
49
|
+
paper: palette.background.paper,
|
|
50
|
+
textPrimary: palette.text.primary,
|
|
51
|
+
textSecondary: palette.text.secondary,
|
|
52
|
+
divider: palette.divider,
|
|
53
|
+
fontFamily: theme.typography.fontFamily ?? "sans-serif",
|
|
54
|
+
monoFontFamily: theme.typography["monoFontFamily"] ?? '"SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace',
|
|
55
|
+
fontSize: theme.typography.fontSize ?? 14,
|
|
56
|
+
borderRadius: typeof theme.shape.borderRadius === "number" ? theme.shape.borderRadius : 4,
|
|
57
|
+
seriesColors: [
|
|
58
|
+
palette.primary.main,
|
|
59
|
+
palette.secondary.main,
|
|
60
|
+
palette.error.main,
|
|
61
|
+
palette.warning.main,
|
|
62
|
+
palette.success.main,
|
|
63
|
+
palette.info.main
|
|
64
|
+
]
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function useRendererTheme() {
|
|
68
|
+
const theme = (0, import_styles.useTheme)();
|
|
69
|
+
return (0, import_react.useMemo)(() => extractThemeValues(theme), [theme]);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// libs/ui/src/renderer/common/inject-stylesheet.ts
|
|
73
|
+
function injectStylesheet(href, id) {
|
|
74
|
+
if (typeof document === "undefined") return;
|
|
75
|
+
if (document.getElementById(id)) return;
|
|
76
|
+
const link = document.createElement("link");
|
|
77
|
+
link.id = id;
|
|
78
|
+
link.rel = "stylesheet";
|
|
79
|
+
link.href = href;
|
|
80
|
+
link.crossOrigin = "anonymous";
|
|
81
|
+
document.head.appendChild(link);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// libs/ui/src/renderer/common/lazy-import.ts
|
|
85
|
+
var ESM_SH_BASE = "https://esm.sh/";
|
|
86
|
+
function esmShUrl(pkg, options) {
|
|
87
|
+
let url = `${ESM_SH_BASE}${pkg}`;
|
|
88
|
+
if (options?.external?.length) {
|
|
89
|
+
url += `?external=${options.external.join(",")}`;
|
|
90
|
+
}
|
|
91
|
+
return url;
|
|
92
|
+
}
|
|
93
|
+
function runtimeImport(specifier) {
|
|
94
|
+
const dynamicImport = new Function("s", "return import(s)");
|
|
95
|
+
return dynamicImport(specifier);
|
|
96
|
+
}
|
|
97
|
+
async function runtimeImportWithFallback(bareSpecifier, fallbackUrl) {
|
|
98
|
+
try {
|
|
99
|
+
return await runtimeImport(bareSpecifier);
|
|
100
|
+
} catch {
|
|
101
|
+
return runtimeImport(fallbackUrl);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function createLazyImport(moduleId, importer) {
|
|
105
|
+
let state = { status: "idle" };
|
|
106
|
+
const doImport = importer ?? (async () => {
|
|
107
|
+
const mod = await runtimeImport(moduleId);
|
|
108
|
+
return mod["default"] ?? mod;
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
load() {
|
|
112
|
+
if (state.status === "loaded") return Promise.resolve(state.module);
|
|
113
|
+
if (state.status === "loading") return state.promise;
|
|
114
|
+
if (state.status === "error") {
|
|
115
|
+
state = { status: "idle" };
|
|
116
|
+
}
|
|
117
|
+
const promise = doImport().then(
|
|
118
|
+
(mod) => {
|
|
119
|
+
state = { status: "loaded", module: mod };
|
|
120
|
+
return mod;
|
|
121
|
+
},
|
|
122
|
+
(err) => {
|
|
123
|
+
const error = err instanceof Error ? err : new Error(`Failed to load module "${moduleId}": ${String(err)}`);
|
|
124
|
+
state = { status: "error", error };
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
state = { status: "loading", promise };
|
|
129
|
+
return promise;
|
|
130
|
+
},
|
|
131
|
+
get() {
|
|
132
|
+
return state.status === "loaded" ? state.module : void 0;
|
|
133
|
+
},
|
|
134
|
+
getState() {
|
|
135
|
+
return state;
|
|
136
|
+
},
|
|
137
|
+
reset() {
|
|
138
|
+
state = { status: "idle" };
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// libs/ui/src/renderer/common/use-lazy-module.ts
|
|
144
|
+
var import_react2 = require("react");
|
|
145
|
+
function useLazyModule(lazy) {
|
|
146
|
+
const [, forceUpdate] = (0, import_react2.useState)(0);
|
|
147
|
+
(0, import_react2.useEffect)(() => {
|
|
148
|
+
if (lazy.getState().status === "loaded") {
|
|
149
|
+
forceUpdate((n) => n + 1);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
lazy.load().then(
|
|
153
|
+
() => forceUpdate((n) => n + 1),
|
|
154
|
+
() => forceUpdate((n) => n + 1)
|
|
155
|
+
);
|
|
156
|
+
}, [lazy]);
|
|
157
|
+
return lazy.get();
|
|
158
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inject a CSS stylesheet link into the document head.
|
|
3
|
+
* No-ops if the stylesheet is already loaded or if running outside a browser.
|
|
4
|
+
*
|
|
5
|
+
* @param href - URL of the stylesheet
|
|
6
|
+
* @param id - Unique ID for the link element (prevents duplicates)
|
|
7
|
+
*/
|
|
8
|
+
export declare function injectStylesheet(href: string, id: string): void;
|
|
9
|
+
//# sourceMappingURL=inject-stylesheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-stylesheet.d.ts","sourceRoot":"","sources":["../../../src/renderer/common/inject-stylesheet.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAU/D"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy module import helper.
|
|
3
|
+
*
|
|
4
|
+
* Creates a lazy-loading wrapper for peer dependencies that are externalized
|
|
5
|
+
* and loaded via esm.sh. Follows the state machine pattern from babel-runtime.ts.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/** Base URL for esm.sh CDN. */
|
|
10
|
+
export declare const ESM_SH_BASE = "https://esm.sh/";
|
|
11
|
+
/**
|
|
12
|
+
* Build an esm.sh CDN URL for a package.
|
|
13
|
+
*
|
|
14
|
+
* @param pkg - Package specifier with version (e.g., 'recharts@2', 'mermaid@11')
|
|
15
|
+
* @param options - Optional configuration
|
|
16
|
+
* @param options.external - Packages to externalize (e.g., ['react', 'react-dom'])
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* esmShUrl('mermaid@11');
|
|
21
|
+
* // => 'https://esm.sh/mermaid@11'
|
|
22
|
+
*
|
|
23
|
+
* esmShUrl('recharts@2', { external: ['react', 'react-dom'] });
|
|
24
|
+
* // => 'https://esm.sh/recharts@2?external=react,react-dom'
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function esmShUrl(pkg: string, options?: {
|
|
28
|
+
external?: string[];
|
|
29
|
+
}): string;
|
|
30
|
+
/** Loading state for a lazy-imported module. */
|
|
31
|
+
export type LazyImportState<T> = {
|
|
32
|
+
status: 'idle';
|
|
33
|
+
} | {
|
|
34
|
+
status: 'loading';
|
|
35
|
+
promise: Promise<T>;
|
|
36
|
+
} | {
|
|
37
|
+
status: 'loaded';
|
|
38
|
+
module: T;
|
|
39
|
+
} | {
|
|
40
|
+
status: 'error';
|
|
41
|
+
error: Error;
|
|
42
|
+
};
|
|
43
|
+
export interface LazyImport<T> {
|
|
44
|
+
/** Load the module (cached after first call). */
|
|
45
|
+
load(): Promise<T>;
|
|
46
|
+
/** Get the module if already loaded, or undefined. */
|
|
47
|
+
get(): T | undefined;
|
|
48
|
+
/** Check current loading status. */
|
|
49
|
+
getState(): LazyImportState<T>;
|
|
50
|
+
/** Reset state (for testing). */
|
|
51
|
+
reset(): void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Runtime dynamic import that avoids TS2307 for uninstalled optional peer deps.
|
|
55
|
+
* Uses Function constructor so TypeScript doesn't try to resolve the module.
|
|
56
|
+
*/
|
|
57
|
+
export declare function runtimeImport(specifier: string): Promise<Record<string, unknown>>;
|
|
58
|
+
/**
|
|
59
|
+
* Try importing a bare specifier first (works in bundled environments),
|
|
60
|
+
* then fall back to an esm.sh URL (works in raw browser environments).
|
|
61
|
+
*
|
|
62
|
+
* This is the primary import strategy for optional peer dependencies.
|
|
63
|
+
* In Vite dev mode, bare specifiers resolve via `optimizeDeps.include`.
|
|
64
|
+
* In production or unbundled environments, the esm.sh CDN URL is used.
|
|
65
|
+
*
|
|
66
|
+
* @param bareSpecifier - The npm package name (e.g., 'recharts', 'mermaid')
|
|
67
|
+
* @param fallbackUrl - The esm.sh URL to use if bare import fails
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const mod = await runtimeImportWithFallback(
|
|
72
|
+
* 'recharts',
|
|
73
|
+
* esmShUrl('recharts@2', { external: ['react', 'react-dom'] }),
|
|
74
|
+
* );
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function runtimeImportWithFallback(bareSpecifier: string, fallbackUrl: string): Promise<Record<string, unknown>>;
|
|
78
|
+
/**
|
|
79
|
+
* Create a lazy-loading wrapper for an external module.
|
|
80
|
+
*
|
|
81
|
+
* @param moduleId - The module specifier (e.g., 'recharts', 'mermaid')
|
|
82
|
+
* @param importer - Optional custom import function. Defaults to dynamic import().
|
|
83
|
+
*/
|
|
84
|
+
export declare function createLazyImport<T>(moduleId: string, importer?: () => Promise<T>): LazyImport<T>;
|
|
85
|
+
//# sourceMappingURL=lazy-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-import.d.ts","sourceRoot":"","sources":["../../../src/renderer/common/lazy-import.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,+BAA+B;AAC/B,eAAO,MAAM,WAAW,oBAAoB,CAAC;AAE7C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAM/E;AAMD,gDAAgD;AAChD,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,iDAAiD;IACjD,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,sDAAsD;IACtD,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACrB,oCAAoC;IACpC,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;IAC/B,iCAAiC;IACjC,KAAK,IAAI,IAAI,CAAC;CACf;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAIjF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAgDhG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LazyImport } from './lazy-import';
|
|
2
|
+
/**
|
|
3
|
+
* React hook that loads a lazy module and triggers a re-render when it finishes.
|
|
4
|
+
*
|
|
5
|
+
* Without this hook, components that call `lazyX.get()` synchronously will render
|
|
6
|
+
* once (returning undefined), show a "Loading..." fallback, and never re-render
|
|
7
|
+
* because nothing triggers an update when the module finishes loading.
|
|
8
|
+
*
|
|
9
|
+
* @param lazy - A lazy import handle created by `createLazyImport`.
|
|
10
|
+
* @returns The loaded module, or `undefined` while still loading.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useLazyModule<T>(lazy: LazyImport<T>): T | undefined;
|
|
13
|
+
//# sourceMappingURL=use-lazy-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-lazy-module.d.ts","sourceRoot":"","sources":["../../../src/renderer/common/use-lazy-module.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAkBnE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Theme } from '@mui/material/styles';
|
|
2
|
+
/**
|
|
3
|
+
* Flat theme values extracted from MUI theme for non-MUI libraries.
|
|
4
|
+
* Used by Recharts, Mermaid, Leaflet, KaTeX, ReactFlow, etc.
|
|
5
|
+
*/
|
|
6
|
+
export interface RendererThemeValues {
|
|
7
|
+
mode: 'light' | 'dark';
|
|
8
|
+
primary: string;
|
|
9
|
+
secondary: string;
|
|
10
|
+
error: string;
|
|
11
|
+
warning: string;
|
|
12
|
+
success: string;
|
|
13
|
+
info: string;
|
|
14
|
+
background: string;
|
|
15
|
+
paper: string;
|
|
16
|
+
textPrimary: string;
|
|
17
|
+
textSecondary: string;
|
|
18
|
+
divider: string;
|
|
19
|
+
fontFamily: string;
|
|
20
|
+
monoFontFamily: string;
|
|
21
|
+
fontSize: number;
|
|
22
|
+
borderRadius: number;
|
|
23
|
+
/** Ordered palette colors for data series */
|
|
24
|
+
seriesColors: string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract flat theme values from MUI theme for use in non-MUI renderers.
|
|
28
|
+
*/
|
|
29
|
+
export declare function extractThemeValues(theme: Theme): RendererThemeValues;
|
|
30
|
+
/**
|
|
31
|
+
* React hook that extracts MUI theme values into a flat object
|
|
32
|
+
* for use by non-MUI rendering libraries (Recharts, Mermaid, etc.).
|
|
33
|
+
*/
|
|
34
|
+
export declare function useRendererTheme(): RendererThemeValues;
|
|
35
|
+
//# sourceMappingURL=use-renderer-theme.d.ts.map
|