@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,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ContentRenderer, RenderOptions } from '../types';
|
|
3
|
+
export interface MapMarker {
|
|
4
|
+
position: [number, number];
|
|
5
|
+
popup?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface MapConfig {
|
|
8
|
+
center?: [number, number];
|
|
9
|
+
zoom?: number;
|
|
10
|
+
markers?: MapMarker[];
|
|
11
|
+
geojson?: Record<string, unknown>;
|
|
12
|
+
tileLayer?: {
|
|
13
|
+
url: string;
|
|
14
|
+
attribution?: string;
|
|
15
|
+
};
|
|
16
|
+
title?: string;
|
|
17
|
+
height?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function isMap(content: string): boolean;
|
|
20
|
+
export declare class MapsRenderer implements ContentRenderer {
|
|
21
|
+
readonly type = "map";
|
|
22
|
+
readonly priority = 60;
|
|
23
|
+
canHandle(content: string): boolean;
|
|
24
|
+
render(content: string, options?: RenderOptions): React.ReactElement;
|
|
25
|
+
}
|
|
26
|
+
export declare const mapsRenderer: MapsRenderer;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/maps/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AASzC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAe/D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe9C;AAyID,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,SAAS;IACtB,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,248 @@
|
|
|
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/maps/index.ts
|
|
31
|
+
var maps_exports = {};
|
|
32
|
+
__export(maps_exports, {
|
|
33
|
+
MapsRenderer: () => MapsRenderer,
|
|
34
|
+
isMap: () => isMap,
|
|
35
|
+
mapsRenderer: () => mapsRenderer
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(maps_exports);
|
|
38
|
+
var import_react2 = __toESM(require("react"));
|
|
39
|
+
var import_Box = __toESM(require("@mui/material/Box"));
|
|
40
|
+
var import_Alert = __toESM(require("@mui/material/Alert"));
|
|
41
|
+
var import_Paper = __toESM(require("@mui/material/Paper"));
|
|
42
|
+
var import_Typography = __toESM(require("@mui/material/Typography"));
|
|
43
|
+
var import_styles = require("@mui/material/styles");
|
|
44
|
+
|
|
45
|
+
// libs/ui/src/renderer/common/lazy-import.ts
|
|
46
|
+
var ESM_SH_BASE = "https://esm.sh/";
|
|
47
|
+
function esmShUrl(pkg, options) {
|
|
48
|
+
let url = `${ESM_SH_BASE}${pkg}`;
|
|
49
|
+
if (options?.external?.length) {
|
|
50
|
+
url += `?external=${options.external.join(",")}`;
|
|
51
|
+
}
|
|
52
|
+
return url;
|
|
53
|
+
}
|
|
54
|
+
function runtimeImport(specifier) {
|
|
55
|
+
const dynamicImport = new Function("s", "return import(s)");
|
|
56
|
+
return dynamicImport(specifier);
|
|
57
|
+
}
|
|
58
|
+
async function runtimeImportWithFallback(bareSpecifier, fallbackUrl) {
|
|
59
|
+
try {
|
|
60
|
+
return await runtimeImport(bareSpecifier);
|
|
61
|
+
} catch {
|
|
62
|
+
return runtimeImport(fallbackUrl);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function createLazyImport(moduleId, importer) {
|
|
66
|
+
let state = { status: "idle" };
|
|
67
|
+
const doImport = importer ?? (async () => {
|
|
68
|
+
const mod = await runtimeImport(moduleId);
|
|
69
|
+
return mod["default"] ?? mod;
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
load() {
|
|
73
|
+
if (state.status === "loaded") return Promise.resolve(state.module);
|
|
74
|
+
if (state.status === "loading") return state.promise;
|
|
75
|
+
if (state.status === "error") {
|
|
76
|
+
state = { status: "idle" };
|
|
77
|
+
}
|
|
78
|
+
const promise = doImport().then(
|
|
79
|
+
(mod) => {
|
|
80
|
+
state = { status: "loaded", module: mod };
|
|
81
|
+
return mod;
|
|
82
|
+
},
|
|
83
|
+
(err) => {
|
|
84
|
+
const error = err instanceof Error ? err : new Error(`Failed to load module "${moduleId}": ${String(err)}`);
|
|
85
|
+
state = { status: "error", error };
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
state = { status: "loading", promise };
|
|
90
|
+
return promise;
|
|
91
|
+
},
|
|
92
|
+
get() {
|
|
93
|
+
return state.status === "loaded" ? state.module : void 0;
|
|
94
|
+
},
|
|
95
|
+
getState() {
|
|
96
|
+
return state;
|
|
97
|
+
},
|
|
98
|
+
reset() {
|
|
99
|
+
state = { status: "idle" };
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// libs/ui/src/renderer/common/inject-stylesheet.ts
|
|
105
|
+
function injectStylesheet(href, id) {
|
|
106
|
+
if (typeof document === "undefined") return;
|
|
107
|
+
if (document.getElementById(id)) return;
|
|
108
|
+
const link = document.createElement("link");
|
|
109
|
+
link.id = id;
|
|
110
|
+
link.rel = "stylesheet";
|
|
111
|
+
link.href = href;
|
|
112
|
+
link.crossOrigin = "anonymous";
|
|
113
|
+
document.head.appendChild(link);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// libs/ui/src/renderer/common/use-lazy-module.ts
|
|
117
|
+
var import_react = require("react");
|
|
118
|
+
function useLazyModule(lazy) {
|
|
119
|
+
const [, forceUpdate] = (0, import_react.useState)(0);
|
|
120
|
+
(0, import_react.useEffect)(() => {
|
|
121
|
+
if (lazy.getState().status === "loaded") {
|
|
122
|
+
forceUpdate((n) => n + 1);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
lazy.load().then(
|
|
126
|
+
() => forceUpdate((n) => n + 1),
|
|
127
|
+
() => forceUpdate((n) => n + 1)
|
|
128
|
+
);
|
|
129
|
+
}, [lazy]);
|
|
130
|
+
return lazy.get();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// libs/ui/src/renderer/maps/index.ts
|
|
134
|
+
var LEAFLET_CSS_URL = "https://esm.sh/leaflet@1.9.4/dist/leaflet.css";
|
|
135
|
+
var LEAFLET_CSS_ID = "fmcp-leaflet-css";
|
|
136
|
+
var DEFAULT_TILE_URL = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";
|
|
137
|
+
var DEFAULT_ATTRIBUTION = '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors';
|
|
138
|
+
var GEOJSON_TYPE_RE = /"type"\s*:\s*"(?:FeatureCollection|Feature|Point|LineString|Polygon|MultiPoint|MultiLineString|MultiPolygon|GeometryCollection)"/;
|
|
139
|
+
function isMap(content) {
|
|
140
|
+
const trimmed = content.trim();
|
|
141
|
+
if (trimmed.charCodeAt(0) === 123 && GEOJSON_TYPE_RE.test(trimmed)) return true;
|
|
142
|
+
try {
|
|
143
|
+
const parsed = JSON.parse(trimmed);
|
|
144
|
+
return !!(parsed.center && Array.isArray(parsed.center) || parsed.markers && Array.isArray(parsed.markers) || parsed.geojson && typeof parsed.geojson === "object");
|
|
145
|
+
} catch {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
var lazyReactLeaflet = createLazyImport("react-leaflet", async () => {
|
|
150
|
+
const mod = await runtimeImportWithFallback(
|
|
151
|
+
"react-leaflet",
|
|
152
|
+
esmShUrl("react-leaflet@5", { external: ["react", "react-dom"] })
|
|
153
|
+
);
|
|
154
|
+
return mod;
|
|
155
|
+
});
|
|
156
|
+
var MapRoot = (0, import_styles.styled)(import_Box.default, {
|
|
157
|
+
name: "FrontMcpMap",
|
|
158
|
+
slot: "Root"
|
|
159
|
+
})(({ theme }) => ({
|
|
160
|
+
width: "100%",
|
|
161
|
+
borderRadius: theme.shape.borderRadius,
|
|
162
|
+
overflow: "hidden",
|
|
163
|
+
border: `1px solid ${theme.palette.divider}`
|
|
164
|
+
}));
|
|
165
|
+
function parseMapConfig(content) {
|
|
166
|
+
const parsed = JSON.parse(content);
|
|
167
|
+
if (parsed.type && [
|
|
168
|
+
"FeatureCollection",
|
|
169
|
+
"Feature",
|
|
170
|
+
"Point",
|
|
171
|
+
"LineString",
|
|
172
|
+
"Polygon",
|
|
173
|
+
"MultiPoint",
|
|
174
|
+
"MultiLineString",
|
|
175
|
+
"MultiPolygon",
|
|
176
|
+
"GeometryCollection"
|
|
177
|
+
].includes(parsed.type)) {
|
|
178
|
+
return {
|
|
179
|
+
center: [0, 0],
|
|
180
|
+
zoom: 2,
|
|
181
|
+
geojson: parsed
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return parsed;
|
|
185
|
+
}
|
|
186
|
+
function MapView({ config, className }) {
|
|
187
|
+
(0, import_react2.useEffect)(() => {
|
|
188
|
+
injectStylesheet(LEAFLET_CSS_URL, LEAFLET_CSS_ID);
|
|
189
|
+
}, []);
|
|
190
|
+
const leaflet = useLazyModule(lazyReactLeaflet);
|
|
191
|
+
const height = config.height ?? 400;
|
|
192
|
+
const center = config.center ?? [51.505, -0.09];
|
|
193
|
+
const zoom = config.zoom ?? 13;
|
|
194
|
+
if (!leaflet) {
|
|
195
|
+
return import_react2.default.createElement(import_Alert.default, { severity: "info" }, "Loading map library...");
|
|
196
|
+
}
|
|
197
|
+
const { MapContainer, TileLayer, Marker, Popup, GeoJSON } = leaflet;
|
|
198
|
+
const tileUrl = config.tileLayer?.url ?? DEFAULT_TILE_URL;
|
|
199
|
+
const attribution = config.tileLayer?.attribution ?? DEFAULT_ATTRIBUTION;
|
|
200
|
+
return import_react2.default.createElement(
|
|
201
|
+
MapRoot,
|
|
202
|
+
{ className },
|
|
203
|
+
config.title && import_react2.default.createElement(
|
|
204
|
+
import_Typography.default,
|
|
205
|
+
{ variant: "subtitle1", fontWeight: 600, sx: { p: 1.5, borderBottom: 1, borderColor: "divider" } },
|
|
206
|
+
config.title
|
|
207
|
+
),
|
|
208
|
+
import_react2.default.createElement(
|
|
209
|
+
MapContainer,
|
|
210
|
+
{
|
|
211
|
+
center,
|
|
212
|
+
zoom,
|
|
213
|
+
style: { height, width: "100%" },
|
|
214
|
+
scrollWheelZoom: true
|
|
215
|
+
},
|
|
216
|
+
import_react2.default.createElement(TileLayer, { url: tileUrl, attribution }),
|
|
217
|
+
config.markers?.map(
|
|
218
|
+
(marker, i) => import_react2.default.createElement(
|
|
219
|
+
Marker,
|
|
220
|
+
{ key: i, position: marker.position },
|
|
221
|
+
marker.popup && import_react2.default.createElement(Popup, null, import_react2.default.createElement(import_Paper.default, { elevation: 0, sx: { p: 1 } }, marker.popup))
|
|
222
|
+
)
|
|
223
|
+
),
|
|
224
|
+
config.geojson && import_react2.default.createElement(GeoJSON, { data: config.geojson })
|
|
225
|
+
)
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
lazyReactLeaflet.load().catch(() => {
|
|
229
|
+
});
|
|
230
|
+
var MapsRenderer = class {
|
|
231
|
+
type = "map";
|
|
232
|
+
priority = 60;
|
|
233
|
+
canHandle(content) {
|
|
234
|
+
return isMap(content);
|
|
235
|
+
}
|
|
236
|
+
render(content, options) {
|
|
237
|
+
try {
|
|
238
|
+
const config = parseMapConfig(content);
|
|
239
|
+
return import_react2.default.createElement(MapView, {
|
|
240
|
+
config,
|
|
241
|
+
className: options?.className ?? "fmcp-map-content"
|
|
242
|
+
});
|
|
243
|
+
} catch {
|
|
244
|
+
return import_react2.default.createElement(import_Alert.default, { severity: "error" }, "Invalid map/GeoJSON data");
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
var mapsRenderer = new MapsRenderer();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ContentRenderer, RenderOptions } from '../types';
|
|
3
|
+
export declare function isMath(content: string): boolean;
|
|
4
|
+
export declare class MathRenderer implements ContentRenderer {
|
|
5
|
+
readonly type = "math";
|
|
6
|
+
readonly priority = 40;
|
|
7
|
+
canHandle(content: string): boolean;
|
|
8
|
+
render(content: string, options?: RenderOptions): React.ReactElement;
|
|
9
|
+
}
|
|
10
|
+
export declare const mathRenderer: MathRenderer;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/math/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAOlD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAmB/D,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAS/C;AAqKD,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;CAMrE;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,260 @@
|
|
|
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/math/index.ts
|
|
31
|
+
var math_exports = {};
|
|
32
|
+
__export(math_exports, {
|
|
33
|
+
MathRenderer: () => MathRenderer,
|
|
34
|
+
isMath: () => isMath,
|
|
35
|
+
mathRenderer: () => mathRenderer
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(math_exports);
|
|
38
|
+
var import_react2 = __toESM(require("react"));
|
|
39
|
+
var import_Box = __toESM(require("@mui/material/Box"));
|
|
40
|
+
var import_Alert = __toESM(require("@mui/material/Alert"));
|
|
41
|
+
var import_styles = require("@mui/material/styles");
|
|
42
|
+
|
|
43
|
+
// libs/ui/src/renderer/common/lazy-import.ts
|
|
44
|
+
var ESM_SH_BASE = "https://esm.sh/";
|
|
45
|
+
function esmShUrl(pkg, options) {
|
|
46
|
+
let url = `${ESM_SH_BASE}${pkg}`;
|
|
47
|
+
if (options?.external?.length) {
|
|
48
|
+
url += `?external=${options.external.join(",")}`;
|
|
49
|
+
}
|
|
50
|
+
return url;
|
|
51
|
+
}
|
|
52
|
+
function runtimeImport(specifier) {
|
|
53
|
+
const dynamicImport = new Function("s", "return import(s)");
|
|
54
|
+
return dynamicImport(specifier);
|
|
55
|
+
}
|
|
56
|
+
async function runtimeImportWithFallback(bareSpecifier, fallbackUrl) {
|
|
57
|
+
try {
|
|
58
|
+
return await runtimeImport(bareSpecifier);
|
|
59
|
+
} catch {
|
|
60
|
+
return runtimeImport(fallbackUrl);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function createLazyImport(moduleId, importer) {
|
|
64
|
+
let state = { status: "idle" };
|
|
65
|
+
const doImport = importer ?? (async () => {
|
|
66
|
+
const mod = await runtimeImport(moduleId);
|
|
67
|
+
return mod["default"] ?? mod;
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
load() {
|
|
71
|
+
if (state.status === "loaded") return Promise.resolve(state.module);
|
|
72
|
+
if (state.status === "loading") return state.promise;
|
|
73
|
+
if (state.status === "error") {
|
|
74
|
+
state = { status: "idle" };
|
|
75
|
+
}
|
|
76
|
+
const promise = doImport().then(
|
|
77
|
+
(mod) => {
|
|
78
|
+
state = { status: "loaded", module: mod };
|
|
79
|
+
return mod;
|
|
80
|
+
},
|
|
81
|
+
(err) => {
|
|
82
|
+
const error = err instanceof Error ? err : new Error(`Failed to load module "${moduleId}": ${String(err)}`);
|
|
83
|
+
state = { status: "error", error };
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
state = { status: "loading", promise };
|
|
88
|
+
return promise;
|
|
89
|
+
},
|
|
90
|
+
get() {
|
|
91
|
+
return state.status === "loaded" ? state.module : void 0;
|
|
92
|
+
},
|
|
93
|
+
getState() {
|
|
94
|
+
return state;
|
|
95
|
+
},
|
|
96
|
+
reset() {
|
|
97
|
+
state = { status: "idle" };
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// libs/ui/src/renderer/common/inject-stylesheet.ts
|
|
103
|
+
function injectStylesheet(href, id) {
|
|
104
|
+
if (typeof document === "undefined") return;
|
|
105
|
+
if (document.getElementById(id)) return;
|
|
106
|
+
const link = document.createElement("link");
|
|
107
|
+
link.id = id;
|
|
108
|
+
link.rel = "stylesheet";
|
|
109
|
+
link.href = href;
|
|
110
|
+
link.crossOrigin = "anonymous";
|
|
111
|
+
document.head.appendChild(link);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// libs/ui/src/renderer/common/use-lazy-module.ts
|
|
115
|
+
var import_react = require("react");
|
|
116
|
+
function useLazyModule(lazy) {
|
|
117
|
+
const [, forceUpdate] = (0, import_react.useState)(0);
|
|
118
|
+
(0, import_react.useEffect)(() => {
|
|
119
|
+
if (lazy.getState().status === "loaded") {
|
|
120
|
+
forceUpdate((n) => n + 1);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
lazy.load().then(
|
|
124
|
+
() => forceUpdate((n) => n + 1),
|
|
125
|
+
() => forceUpdate((n) => n + 1)
|
|
126
|
+
);
|
|
127
|
+
}, [lazy]);
|
|
128
|
+
return lazy.get();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// libs/ui/src/renderer/math/index.ts
|
|
132
|
+
var KATEX_CSS_URL = "https://esm.sh/katex@0.16.11/dist/katex.min.css";
|
|
133
|
+
var KATEX_CSS_ID = "fmcp-katex-css";
|
|
134
|
+
var MATH_DISPLAY = /\$\$(?:[^$]|\$(?!\$))+\$\$/s;
|
|
135
|
+
var MATH_INLINE = /\$[^$\n]+?\$/;
|
|
136
|
+
var MATH_BRACKET_DISPLAY = /\\\[(?:[^\\]|\\.)*\\\]/s;
|
|
137
|
+
var MATH_PAREN_INLINE = /\\\((?:[^\\]|\\.)*\\\)/s;
|
|
138
|
+
var MATH_BEGIN = /\\begin\{(?:equation|align|gather|matrix|pmatrix|bmatrix|cases)\}/;
|
|
139
|
+
function isMath(content) {
|
|
140
|
+
const trimmed = content.trim();
|
|
141
|
+
return MATH_DISPLAY.test(trimmed) || MATH_INLINE.test(trimmed) || MATH_BRACKET_DISPLAY.test(trimmed) || MATH_PAREN_INLINE.test(trimmed) || MATH_BEGIN.test(trimmed);
|
|
142
|
+
}
|
|
143
|
+
var lazyKatex = createLazyImport("katex", async () => {
|
|
144
|
+
const mod = await runtimeImportWithFallback("katex", esmShUrl("katex@0.16"));
|
|
145
|
+
return mod;
|
|
146
|
+
});
|
|
147
|
+
var MathRoot = (0, import_styles.styled)(import_Box.default, {
|
|
148
|
+
name: "FrontMcpMath",
|
|
149
|
+
slot: "Root"
|
|
150
|
+
})(({ theme }) => ({
|
|
151
|
+
color: theme.palette.text.primary,
|
|
152
|
+
"& .katex-display": {
|
|
153
|
+
margin: theme.spacing(2, 0),
|
|
154
|
+
textAlign: "center"
|
|
155
|
+
}
|
|
156
|
+
}));
|
|
157
|
+
var MathDisplay = (0, import_styles.styled)(import_Box.default, {
|
|
158
|
+
name: "FrontMcpMath",
|
|
159
|
+
slot: "Display"
|
|
160
|
+
})(({ theme }) => ({
|
|
161
|
+
display: "block",
|
|
162
|
+
textAlign: "center",
|
|
163
|
+
margin: theme.spacing(2, 0),
|
|
164
|
+
fontSize: "1.2em",
|
|
165
|
+
overflow: "auto"
|
|
166
|
+
}));
|
|
167
|
+
var MathInline = (0, import_styles.styled)("span", {
|
|
168
|
+
name: "FrontMcpMath",
|
|
169
|
+
slot: "Inline"
|
|
170
|
+
})({
|
|
171
|
+
display: "inline"
|
|
172
|
+
});
|
|
173
|
+
function parseMathContent(source) {
|
|
174
|
+
const segments = [];
|
|
175
|
+
const mathRegex = /(\$\$(?:[^$]|\$(?!\$))+\$\$|\$[^$\n]+?\$|\\\[(?:[^\\]|\\.)*\\\]|\\\((?:[^\\]|\\.)*\\\)|\\begin\{(?:[^\\]|\\.)*\\end\{[^}]+\})/gs;
|
|
176
|
+
let lastIndex = 0;
|
|
177
|
+
let match;
|
|
178
|
+
while ((match = mathRegex.exec(source)) !== null) {
|
|
179
|
+
if (match.index > lastIndex) {
|
|
180
|
+
segments.push({ type: "text", content: source.slice(lastIndex, match.index) });
|
|
181
|
+
}
|
|
182
|
+
const raw = match[0];
|
|
183
|
+
if (raw.startsWith("$$")) {
|
|
184
|
+
segments.push({ type: "display", content: raw.slice(2, -2).trim() });
|
|
185
|
+
} else if (raw.startsWith("\\[")) {
|
|
186
|
+
segments.push({ type: "display", content: raw.slice(2, -2).trim() });
|
|
187
|
+
} else if (raw.startsWith("\\begin")) {
|
|
188
|
+
segments.push({ type: "display", content: raw });
|
|
189
|
+
} else if (raw.startsWith("\\(")) {
|
|
190
|
+
segments.push({ type: "inline", content: raw.slice(2, -2).trim() });
|
|
191
|
+
} else if (raw.startsWith("$")) {
|
|
192
|
+
segments.push({ type: "inline", content: raw.slice(1, -1).trim() });
|
|
193
|
+
}
|
|
194
|
+
lastIndex = match.index + raw.length;
|
|
195
|
+
}
|
|
196
|
+
if (lastIndex < source.length) {
|
|
197
|
+
segments.push({ type: "text", content: source.slice(lastIndex) });
|
|
198
|
+
}
|
|
199
|
+
return segments;
|
|
200
|
+
}
|
|
201
|
+
function MathView({ content, className }) {
|
|
202
|
+
(0, import_react2.useEffect)(() => {
|
|
203
|
+
injectStylesheet(KATEX_CSS_URL, KATEX_CSS_ID);
|
|
204
|
+
}, []);
|
|
205
|
+
const katexMod = useLazyModule(lazyKatex);
|
|
206
|
+
const segments = (0, import_react2.useMemo)(() => parseMathContent(content), [content]);
|
|
207
|
+
const renderToString = katexMod?.default?.renderToString ?? katexMod?.renderToString;
|
|
208
|
+
if (!renderToString) {
|
|
209
|
+
return import_react2.default.createElement(
|
|
210
|
+
MathRoot,
|
|
211
|
+
{ className },
|
|
212
|
+
import_react2.default.createElement("pre", { style: { fontFamily: "monospace", whiteSpace: "pre-wrap" } }, content)
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
const elements = segments.map((seg, i) => {
|
|
216
|
+
if (seg.type === "text") {
|
|
217
|
+
return import_react2.default.createElement("span", { key: i }, seg.content);
|
|
218
|
+
}
|
|
219
|
+
try {
|
|
220
|
+
const html = renderToString(seg.content, {
|
|
221
|
+
displayMode: seg.type === "display",
|
|
222
|
+
throwOnError: false
|
|
223
|
+
});
|
|
224
|
+
if (seg.type === "display") {
|
|
225
|
+
return import_react2.default.createElement(MathDisplay, {
|
|
226
|
+
key: i,
|
|
227
|
+
dangerouslySetInnerHTML: { __html: html }
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
return import_react2.default.createElement(MathInline, {
|
|
231
|
+
key: i,
|
|
232
|
+
dangerouslySetInnerHTML: { __html: html }
|
|
233
|
+
});
|
|
234
|
+
} catch (err) {
|
|
235
|
+
return import_react2.default.createElement(
|
|
236
|
+
import_Alert.default,
|
|
237
|
+
{ key: i, severity: "error", sx: { my: 1 } },
|
|
238
|
+
`LaTeX error: ${err instanceof Error ? err.message : String(err)}
|
|
239
|
+
Source: ${seg.content}`
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
return import_react2.default.createElement(MathRoot, { className }, ...elements);
|
|
244
|
+
}
|
|
245
|
+
lazyKatex.load().catch(() => {
|
|
246
|
+
});
|
|
247
|
+
var MathRenderer = class {
|
|
248
|
+
type = "math";
|
|
249
|
+
priority = 40;
|
|
250
|
+
canHandle(content) {
|
|
251
|
+
return isMath(content);
|
|
252
|
+
}
|
|
253
|
+
render(content, options) {
|
|
254
|
+
return import_react2.default.createElement(MathView, {
|
|
255
|
+
content,
|
|
256
|
+
className: options?.className ?? "fmcp-math-content"
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
var mathRenderer = new MathRenderer();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ContentRenderer, RenderOptions } from '../types';
|
|
3
|
+
export declare class MdxRenderer implements ContentRenderer {
|
|
4
|
+
readonly type = "mdx";
|
|
5
|
+
readonly priority = 5;
|
|
6
|
+
canHandle(content: string): boolean;
|
|
7
|
+
render(content: string, options?: RenderOptions): React.ReactElement;
|
|
8
|
+
}
|
|
9
|
+
export declare const mdxRenderer: MdxRenderer;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/mdx/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAYvC,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA2N/D,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,QAAQ,KAAK;IAEtB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAUnC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY;CAMrE;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|