@frontmcp/ui 0.12.2 → 1.0.0-beta.2
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 @@
|
|
|
1
|
+
{"version":3,"file":"use-renderer-theme.d.ts","sourceRoot":"","sources":["../../../src/renderer/common/use-renderer-theme.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,CA8BpE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,CAGtD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ContentRenderer, RenderOptions } from '../types';
|
|
3
|
+
export declare function detectDelimiter(content: string): string;
|
|
4
|
+
export declare function parseCsv(content: string, delimiter: string): string[][];
|
|
5
|
+
export declare class CsvRenderer implements ContentRenderer {
|
|
6
|
+
readonly type = "csv";
|
|
7
|
+
readonly priority = 10;
|
|
8
|
+
canHandle(content: string): boolean;
|
|
9
|
+
render(content: string, options?: RenderOptions): React.ReactElement;
|
|
10
|
+
}
|
|
11
|
+
export declare const csvRenderer: CsvRenderer;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/csv/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAY9D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM/D,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAKvE;AAuLD,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,QAAQ,MAAM;IAEvB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWnC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY;CAQrE;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -0,0 +1,224 @@
|
|
|
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/csv/index.ts
|
|
31
|
+
var csv_exports = {};
|
|
32
|
+
__export(csv_exports, {
|
|
33
|
+
CsvRenderer: () => CsvRenderer,
|
|
34
|
+
csvRenderer: () => csvRenderer,
|
|
35
|
+
detectDelimiter: () => detectDelimiter,
|
|
36
|
+
parseCsv: () => parseCsv
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(csv_exports);
|
|
39
|
+
var import_react = __toESM(require("react"));
|
|
40
|
+
var import_Box = __toESM(require("@mui/material/Box"));
|
|
41
|
+
var import_Table = __toESM(require("@mui/material/Table"));
|
|
42
|
+
var import_TableBody = __toESM(require("@mui/material/TableBody"));
|
|
43
|
+
var import_TableCell = __toESM(require("@mui/material/TableCell"));
|
|
44
|
+
var import_TableContainer = __toESM(require("@mui/material/TableContainer"));
|
|
45
|
+
var import_TableHead = __toESM(require("@mui/material/TableHead"));
|
|
46
|
+
var import_TableRow = __toESM(require("@mui/material/TableRow"));
|
|
47
|
+
var import_TablePagination = __toESM(require("@mui/material/TablePagination"));
|
|
48
|
+
var import_TableSortLabel = __toESM(require("@mui/material/TableSortLabel"));
|
|
49
|
+
var import_TextField = __toESM(require("@mui/material/TextField"));
|
|
50
|
+
var import_styles = require("@mui/material/styles");
|
|
51
|
+
function detectDelimiter(content) {
|
|
52
|
+
const firstLine = content.split("\n")[0];
|
|
53
|
+
const commas = (firstLine.match(/,/g) ?? []).length;
|
|
54
|
+
const tabs = (firstLine.match(/\t/g) ?? []).length;
|
|
55
|
+
const semicolons = (firstLine.match(/;/g) ?? []).length;
|
|
56
|
+
if (tabs > commas && tabs > semicolons) return " ";
|
|
57
|
+
if (semicolons > commas) return ";";
|
|
58
|
+
return ",";
|
|
59
|
+
}
|
|
60
|
+
function parseCsv(content, delimiter) {
|
|
61
|
+
return content.trim().split("\n").map((line) => line.split(delimiter).map((cell) => cell.trim()));
|
|
62
|
+
}
|
|
63
|
+
var CsvRoot = (0, import_styles.styled)(import_Box.default, {
|
|
64
|
+
name: "FrontMcpCsvTable",
|
|
65
|
+
slot: "Root"
|
|
66
|
+
})({
|
|
67
|
+
width: "100%"
|
|
68
|
+
});
|
|
69
|
+
var StyledHeaderCell = (0, import_styles.styled)(import_TableCell.default, {
|
|
70
|
+
name: "FrontMcpCsvTable",
|
|
71
|
+
slot: "Header"
|
|
72
|
+
})(({ theme }) => ({
|
|
73
|
+
fontWeight: 600,
|
|
74
|
+
backgroundColor: theme.palette.mode === "dark" ? theme.palette.grey[900] : theme.palette.grey[50],
|
|
75
|
+
whiteSpace: "nowrap"
|
|
76
|
+
}));
|
|
77
|
+
var FilterToolbar = (0, import_styles.styled)(import_Box.default, {
|
|
78
|
+
name: "FrontMcpCsvTable",
|
|
79
|
+
slot: "Toolbar"
|
|
80
|
+
})(({ theme }) => ({
|
|
81
|
+
padding: theme.spacing(1, 2),
|
|
82
|
+
display: "flex",
|
|
83
|
+
gap: theme.spacing(1)
|
|
84
|
+
}));
|
|
85
|
+
function CsvTableView({ content, className, pageSize = 25 }) {
|
|
86
|
+
const delimiter = (0, import_react.useMemo)(() => detectDelimiter(content), [content]);
|
|
87
|
+
const allRows = (0, import_react.useMemo)(() => parseCsv(content, delimiter), [content, delimiter]);
|
|
88
|
+
const headers = allRows[0] ?? [];
|
|
89
|
+
const dataRows = (0, import_react.useMemo)(() => allRows.slice(1), [allRows]);
|
|
90
|
+
const [page, setPage] = (0, import_react.useState)(0);
|
|
91
|
+
const [rowsPerPage, setRowsPerPage] = (0, import_react.useState)(pageSize);
|
|
92
|
+
const [sortCol, setSortCol] = (0, import_react.useState)(null);
|
|
93
|
+
const [sortDir, setSortDir] = (0, import_react.useState)("asc");
|
|
94
|
+
const [filter, setFilter] = (0, import_react.useState)("");
|
|
95
|
+
const filteredRows = (0, import_react.useMemo)(() => {
|
|
96
|
+
if (!filter) return dataRows;
|
|
97
|
+
const lower = filter.toLowerCase();
|
|
98
|
+
return dataRows.filter((row) => row.some((cell) => cell.toLowerCase().includes(lower)));
|
|
99
|
+
}, [dataRows, filter]);
|
|
100
|
+
const sortedRows = (0, import_react.useMemo)(() => {
|
|
101
|
+
if (sortCol === null) return filteredRows;
|
|
102
|
+
const sorted = [...filteredRows];
|
|
103
|
+
sorted.sort((a, b) => {
|
|
104
|
+
const va = a[sortCol] ?? "";
|
|
105
|
+
const vb = b[sortCol] ?? "";
|
|
106
|
+
const numA = Number(va);
|
|
107
|
+
const numB = Number(vb);
|
|
108
|
+
if (!isNaN(numA) && !isNaN(numB)) {
|
|
109
|
+
return sortDir === "asc" ? numA - numB : numB - numA;
|
|
110
|
+
}
|
|
111
|
+
return sortDir === "asc" ? va.localeCompare(vb) : vb.localeCompare(va);
|
|
112
|
+
});
|
|
113
|
+
return sorted;
|
|
114
|
+
}, [filteredRows, sortCol, sortDir]);
|
|
115
|
+
const pageRows = (0, import_react.useMemo)(
|
|
116
|
+
() => sortedRows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage),
|
|
117
|
+
[sortedRows, page, rowsPerPage]
|
|
118
|
+
);
|
|
119
|
+
const handleSort = (0, import_react.useCallback)((colIndex) => {
|
|
120
|
+
setSortCol((prev) => {
|
|
121
|
+
if (prev === colIndex) {
|
|
122
|
+
setSortDir((d) => d === "asc" ? "desc" : "asc");
|
|
123
|
+
return colIndex;
|
|
124
|
+
}
|
|
125
|
+
setSortDir("asc");
|
|
126
|
+
return colIndex;
|
|
127
|
+
});
|
|
128
|
+
}, []);
|
|
129
|
+
const handleChangePage = (0, import_react.useCallback)((_, newPage) => setPage(newPage), []);
|
|
130
|
+
const handleChangeRowsPerPage = (0, import_react.useCallback)((e) => {
|
|
131
|
+
setRowsPerPage(parseInt(e.target.value, 10));
|
|
132
|
+
setPage(0);
|
|
133
|
+
}, []);
|
|
134
|
+
return import_react.default.createElement(
|
|
135
|
+
CsvRoot,
|
|
136
|
+
{ className },
|
|
137
|
+
import_react.default.createElement(
|
|
138
|
+
FilterToolbar,
|
|
139
|
+
null,
|
|
140
|
+
import_react.default.createElement(import_TextField.default, {
|
|
141
|
+
size: "small",
|
|
142
|
+
placeholder: "Filter rows...",
|
|
143
|
+
value: filter,
|
|
144
|
+
onChange: (e) => {
|
|
145
|
+
setFilter(e.target.value);
|
|
146
|
+
setPage(0);
|
|
147
|
+
},
|
|
148
|
+
sx: { minWidth: 200 }
|
|
149
|
+
})
|
|
150
|
+
),
|
|
151
|
+
import_react.default.createElement(
|
|
152
|
+
import_TableContainer.default,
|
|
153
|
+
{ sx: { border: 1, borderColor: "divider", borderRadius: 1 } },
|
|
154
|
+
import_react.default.createElement(
|
|
155
|
+
import_Table.default,
|
|
156
|
+
{ size: "small", stickyHeader: true },
|
|
157
|
+
import_react.default.createElement(
|
|
158
|
+
import_TableHead.default,
|
|
159
|
+
null,
|
|
160
|
+
import_react.default.createElement(
|
|
161
|
+
import_TableRow.default,
|
|
162
|
+
null,
|
|
163
|
+
headers.map(
|
|
164
|
+
(header, i) => import_react.default.createElement(
|
|
165
|
+
StyledHeaderCell,
|
|
166
|
+
{ key: i },
|
|
167
|
+
import_react.default.createElement(
|
|
168
|
+
import_TableSortLabel.default,
|
|
169
|
+
{
|
|
170
|
+
active: sortCol === i,
|
|
171
|
+
direction: sortCol === i ? sortDir : "asc",
|
|
172
|
+
onClick: () => handleSort(i)
|
|
173
|
+
},
|
|
174
|
+
header
|
|
175
|
+
)
|
|
176
|
+
)
|
|
177
|
+
)
|
|
178
|
+
)
|
|
179
|
+
),
|
|
180
|
+
import_react.default.createElement(
|
|
181
|
+
import_TableBody.default,
|
|
182
|
+
null,
|
|
183
|
+
pageRows.map(
|
|
184
|
+
(row, ri) => import_react.default.createElement(
|
|
185
|
+
import_TableRow.default,
|
|
186
|
+
{ key: ri, hover: true },
|
|
187
|
+
row.map((cell, ci) => import_react.default.createElement(import_TableCell.default, { key: ci }, cell))
|
|
188
|
+
)
|
|
189
|
+
)
|
|
190
|
+
)
|
|
191
|
+
)
|
|
192
|
+
),
|
|
193
|
+
sortedRows.length > rowsPerPage && import_react.default.createElement(import_TablePagination.default, {
|
|
194
|
+
count: sortedRows.length,
|
|
195
|
+
page,
|
|
196
|
+
rowsPerPage,
|
|
197
|
+
onPageChange: handleChangePage,
|
|
198
|
+
onRowsPerPageChange: handleChangeRowsPerPage,
|
|
199
|
+
rowsPerPageOptions: [10, 25, 50, 100]
|
|
200
|
+
})
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
var CsvRenderer = class {
|
|
204
|
+
type = "csv";
|
|
205
|
+
priority = 10;
|
|
206
|
+
canHandle(content) {
|
|
207
|
+
const lines = content.trim().split("\n").slice(0, 5);
|
|
208
|
+
if (lines.length < 2) return false;
|
|
209
|
+
for (const delim of [",", " ", ";"]) {
|
|
210
|
+
const counts = lines.map((line) => line.split(delim).length);
|
|
211
|
+
if (counts[0] > 1 && counts.every((c) => c === counts[0])) return true;
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
render(content, options) {
|
|
216
|
+
const pageSize = options?.rendererOptions?.["pageSize"];
|
|
217
|
+
return import_react.default.createElement(CsvTableView, {
|
|
218
|
+
content,
|
|
219
|
+
className: options?.className ?? "fmcp-csv-table",
|
|
220
|
+
pageSize
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
var csvRenderer = new CsvRenderer();
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ContentRenderer, RenderOptions } from '../types';
|
|
3
|
+
export interface FlowNode {
|
|
4
|
+
id: string;
|
|
5
|
+
data: {
|
|
6
|
+
label: string;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
};
|
|
9
|
+
position: {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
type?: string;
|
|
14
|
+
style?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export interface FlowEdge {
|
|
17
|
+
id: string;
|
|
18
|
+
source: string;
|
|
19
|
+
target: string;
|
|
20
|
+
label?: string;
|
|
21
|
+
animated?: boolean;
|
|
22
|
+
type?: string;
|
|
23
|
+
style?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export interface FlowConfig {
|
|
26
|
+
nodes: FlowNode[];
|
|
27
|
+
edges: FlowEdge[];
|
|
28
|
+
fitView?: boolean;
|
|
29
|
+
title?: string;
|
|
30
|
+
height?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function isFlow(content: string): boolean;
|
|
33
|
+
export declare class FlowRenderer implements ContentRenderer {
|
|
34
|
+
readonly type = "flow";
|
|
35
|
+
readonly priority = 70;
|
|
36
|
+
canHandle(content: string): boolean;
|
|
37
|
+
render(content: string, options?: RenderOptions): React.ReactElement;
|
|
38
|
+
}
|
|
39
|
+
export declare const flowRenderer: FlowRenderer;
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/flow/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AASlD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAa/D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAChD,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI/C;AA8ID,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,MAAM;IAEvB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY;CAWrE;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,290 @@
|
|
|
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/flow/index.ts
|
|
31
|
+
var flow_exports = {};
|
|
32
|
+
__export(flow_exports, {
|
|
33
|
+
FlowRenderer: () => FlowRenderer,
|
|
34
|
+
flowRenderer: () => flowRenderer,
|
|
35
|
+
isFlow: () => isFlow
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(flow_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/inject-stylesheet.ts
|
|
104
|
+
function injectStylesheet(href, id) {
|
|
105
|
+
if (typeof document === "undefined") return;
|
|
106
|
+
if (document.getElementById(id)) return;
|
|
107
|
+
const link = document.createElement("link");
|
|
108
|
+
link.id = id;
|
|
109
|
+
link.rel = "stylesheet";
|
|
110
|
+
link.href = href;
|
|
111
|
+
link.crossOrigin = "anonymous";
|
|
112
|
+
document.head.appendChild(link);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// libs/ui/src/renderer/common/use-renderer-theme.ts
|
|
116
|
+
var import_react = require("react");
|
|
117
|
+
var import_styles = require("@mui/material/styles");
|
|
118
|
+
function extractThemeValues(theme) {
|
|
119
|
+
const palette = theme.palette;
|
|
120
|
+
return {
|
|
121
|
+
mode: palette.mode,
|
|
122
|
+
primary: palette.primary.main,
|
|
123
|
+
secondary: palette.secondary.main,
|
|
124
|
+
error: palette.error.main,
|
|
125
|
+
warning: palette.warning.main,
|
|
126
|
+
success: palette.success.main,
|
|
127
|
+
info: palette.info.main,
|
|
128
|
+
background: palette.background.default,
|
|
129
|
+
paper: palette.background.paper,
|
|
130
|
+
textPrimary: palette.text.primary,
|
|
131
|
+
textSecondary: palette.text.secondary,
|
|
132
|
+
divider: palette.divider,
|
|
133
|
+
fontFamily: theme.typography.fontFamily ?? "sans-serif",
|
|
134
|
+
monoFontFamily: theme.typography["monoFontFamily"] ?? '"SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace',
|
|
135
|
+
fontSize: theme.typography.fontSize ?? 14,
|
|
136
|
+
borderRadius: typeof theme.shape.borderRadius === "number" ? theme.shape.borderRadius : 4,
|
|
137
|
+
seriesColors: [
|
|
138
|
+
palette.primary.main,
|
|
139
|
+
palette.secondary.main,
|
|
140
|
+
palette.error.main,
|
|
141
|
+
palette.warning.main,
|
|
142
|
+
palette.success.main,
|
|
143
|
+
palette.info.main
|
|
144
|
+
]
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function useRendererTheme() {
|
|
148
|
+
const theme = (0, import_styles.useTheme)();
|
|
149
|
+
return (0, import_react.useMemo)(() => extractThemeValues(theme), [theme]);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// libs/ui/src/renderer/common/use-lazy-module.ts
|
|
153
|
+
var import_react2 = require("react");
|
|
154
|
+
function useLazyModule(lazy) {
|
|
155
|
+
const [, forceUpdate] = (0, import_react2.useState)(0);
|
|
156
|
+
(0, import_react2.useEffect)(() => {
|
|
157
|
+
if (lazy.getState().status === "loaded") {
|
|
158
|
+
forceUpdate((n) => n + 1);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
lazy.load().then(
|
|
162
|
+
() => forceUpdate((n) => n + 1),
|
|
163
|
+
() => forceUpdate((n) => n + 1)
|
|
164
|
+
);
|
|
165
|
+
}, [lazy]);
|
|
166
|
+
return lazy.get();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// libs/ui/src/renderer/flow/index.ts
|
|
170
|
+
var XYFLOW_CSS_URL = "https://esm.sh/@xyflow/react@12/dist/style.css";
|
|
171
|
+
var XYFLOW_CSS_ID = "fmcp-xyflow-css";
|
|
172
|
+
function isFlow(content) {
|
|
173
|
+
const trimmed = content.trim();
|
|
174
|
+
if (trimmed.charCodeAt(0) !== 123) return false;
|
|
175
|
+
return trimmed.includes('"nodes"') && trimmed.includes('"edges"');
|
|
176
|
+
}
|
|
177
|
+
var lazyXYFlow = createLazyImport("@xyflow/react", async () => {
|
|
178
|
+
const mod = await runtimeImportWithFallback(
|
|
179
|
+
"@xyflow/react",
|
|
180
|
+
esmShUrl("@xyflow/react@12", { external: ["react", "react-dom"] })
|
|
181
|
+
);
|
|
182
|
+
return mod;
|
|
183
|
+
});
|
|
184
|
+
var FlowRoot = (0, import_styles2.styled)(import_Box.default, {
|
|
185
|
+
name: "FrontMcpFlow",
|
|
186
|
+
slot: "Root"
|
|
187
|
+
})(({ theme }) => ({
|
|
188
|
+
width: "100%",
|
|
189
|
+
borderRadius: theme.shape.borderRadius,
|
|
190
|
+
overflow: "hidden",
|
|
191
|
+
border: `1px solid ${theme.palette.divider}`
|
|
192
|
+
}));
|
|
193
|
+
function FlowView({ config, className }) {
|
|
194
|
+
(0, import_react3.useEffect)(() => {
|
|
195
|
+
injectStylesheet(XYFLOW_CSS_URL, XYFLOW_CSS_ID);
|
|
196
|
+
}, []);
|
|
197
|
+
const themeValues = useRendererTheme();
|
|
198
|
+
const xyflow = useLazyModule(lazyXYFlow);
|
|
199
|
+
const height = config.height ?? 500;
|
|
200
|
+
const styledNodes = (0, import_react3.useMemo)(() => {
|
|
201
|
+
return config.nodes.map((node) => ({
|
|
202
|
+
...node,
|
|
203
|
+
style: {
|
|
204
|
+
background: themeValues.paper,
|
|
205
|
+
color: themeValues.textPrimary,
|
|
206
|
+
border: `1px solid ${themeValues.divider}`,
|
|
207
|
+
borderRadius: themeValues.borderRadius,
|
|
208
|
+
padding: 8,
|
|
209
|
+
fontSize: themeValues.fontSize,
|
|
210
|
+
fontFamily: themeValues.fontFamily,
|
|
211
|
+
...node.style
|
|
212
|
+
}
|
|
213
|
+
}));
|
|
214
|
+
}, [config.nodes, themeValues]);
|
|
215
|
+
const styledEdges = (0, import_react3.useMemo)(() => {
|
|
216
|
+
return config.edges.map((edge, i) => ({
|
|
217
|
+
...edge,
|
|
218
|
+
style: {
|
|
219
|
+
stroke: themeValues.seriesColors[i % themeValues.seriesColors.length],
|
|
220
|
+
strokeWidth: 2,
|
|
221
|
+
...edge.style
|
|
222
|
+
}
|
|
223
|
+
}));
|
|
224
|
+
}, [config.edges, themeValues]);
|
|
225
|
+
if (!xyflow) {
|
|
226
|
+
return import_react3.default.createElement(import_Alert.default, { severity: "info" }, "Loading flow diagram library...");
|
|
227
|
+
}
|
|
228
|
+
const { ReactFlow, Controls, MiniMap, Background } = xyflow;
|
|
229
|
+
return import_react3.default.createElement(
|
|
230
|
+
FlowRoot,
|
|
231
|
+
{ className },
|
|
232
|
+
config.title && import_react3.default.createElement(
|
|
233
|
+
import_Typography.default,
|
|
234
|
+
{ variant: "subtitle1", fontWeight: 600, sx: { p: 1.5, borderBottom: 1, borderColor: "divider" } },
|
|
235
|
+
config.title
|
|
236
|
+
),
|
|
237
|
+
import_react3.default.createElement(
|
|
238
|
+
import_Box.default,
|
|
239
|
+
{ sx: { height } },
|
|
240
|
+
import_react3.default.createElement(
|
|
241
|
+
ReactFlow,
|
|
242
|
+
{
|
|
243
|
+
nodes: styledNodes,
|
|
244
|
+
edges: styledEdges,
|
|
245
|
+
fitView: config.fitView !== false,
|
|
246
|
+
proOptions: { hideAttribution: true }
|
|
247
|
+
},
|
|
248
|
+
import_react3.default.createElement(Controls, {
|
|
249
|
+
style: {
|
|
250
|
+
backgroundColor: themeValues.paper,
|
|
251
|
+
borderRadius: themeValues.borderRadius,
|
|
252
|
+
border: `1px solid ${themeValues.divider}`
|
|
253
|
+
}
|
|
254
|
+
}),
|
|
255
|
+
import_react3.default.createElement(MiniMap, {
|
|
256
|
+
style: {
|
|
257
|
+
backgroundColor: themeValues.background,
|
|
258
|
+
borderRadius: themeValues.borderRadius
|
|
259
|
+
},
|
|
260
|
+
nodeColor: themeValues.primary
|
|
261
|
+
}),
|
|
262
|
+
Background && import_react3.default.createElement(Background, {
|
|
263
|
+
color: themeValues.divider,
|
|
264
|
+
gap: 16
|
|
265
|
+
})
|
|
266
|
+
)
|
|
267
|
+
)
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
lazyXYFlow.load().catch(() => {
|
|
271
|
+
});
|
|
272
|
+
var FlowRenderer = class {
|
|
273
|
+
type = "flow";
|
|
274
|
+
priority = 70;
|
|
275
|
+
canHandle(content) {
|
|
276
|
+
return isFlow(content);
|
|
277
|
+
}
|
|
278
|
+
render(content, options) {
|
|
279
|
+
try {
|
|
280
|
+
const config = JSON.parse(content);
|
|
281
|
+
return import_react3.default.createElement(FlowView, {
|
|
282
|
+
config,
|
|
283
|
+
className: options?.className ?? "fmcp-flow-content"
|
|
284
|
+
});
|
|
285
|
+
} catch {
|
|
286
|
+
return import_react3.default.createElement(import_Alert.default, { severity: "error" }, "Invalid flow JSON");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
var flowRenderer = new FlowRenderer();
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ContentRenderer, RenderOptions } from '../types';
|
|
3
|
+
/** @internal Exported for testing */
|
|
4
|
+
export declare function escapeHtml(html: string): string;
|
|
5
|
+
export declare class HtmlRenderer implements ContentRenderer {
|
|
6
|
+
readonly type = "html";
|
|
7
|
+
readonly priority = 0;
|
|
8
|
+
canHandle(content: string): boolean;
|
|
9
|
+
render(content: string, options?: RenderOptions): React.ReactElement;
|
|
10
|
+
}
|
|
11
|
+
export declare const htmlRenderer: HtmlRenderer;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/html/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAI5D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAgD/D,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AA2CD,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,KAAK;IAEtB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY;CAMrE;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|