@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,230 @@
|
|
|
1
|
+
// libs/ui/src/renderer/react/index.ts
|
|
2
|
+
import React, { useState, useEffect } from "react";
|
|
3
|
+
import Box from "@mui/material/Box";
|
|
4
|
+
import Alert from "@mui/material/Alert";
|
|
5
|
+
|
|
6
|
+
// libs/ui/src/renderer/common/lazy-import.ts
|
|
7
|
+
function runtimeImport(specifier) {
|
|
8
|
+
const dynamicImport = new Function("s", "return import(s)");
|
|
9
|
+
return dynamicImport(specifier);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// libs/ui/src/runtime/babel-runtime.ts
|
|
13
|
+
var BABEL_STANDALONE_CDN = "https://esm.sh/@babel/standalone@7";
|
|
14
|
+
var BABEL_STANDALONE_FALLBACK_CDN = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.26.10/babel.min.js";
|
|
15
|
+
var babelState = { status: "idle" };
|
|
16
|
+
async function loadBabel() {
|
|
17
|
+
if (babelState.status === "loaded") {
|
|
18
|
+
return babelState.babel;
|
|
19
|
+
}
|
|
20
|
+
if (babelState.status === "loading") {
|
|
21
|
+
return babelState.promise;
|
|
22
|
+
}
|
|
23
|
+
if (babelState.status === "error") {
|
|
24
|
+
throw babelState.error;
|
|
25
|
+
}
|
|
26
|
+
const promise = doLoadBabel();
|
|
27
|
+
babelState = { status: "loading", promise };
|
|
28
|
+
try {
|
|
29
|
+
const babel = await promise;
|
|
30
|
+
babelState = { status: "loaded", babel };
|
|
31
|
+
return babel;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
34
|
+
babelState = { status: "error", error: err };
|
|
35
|
+
throw err;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function doLoadBabel() {
|
|
39
|
+
const globalBabel = globalThis["Babel"];
|
|
40
|
+
if (globalBabel && typeof globalBabel.transform === "function") {
|
|
41
|
+
return globalBabel;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const module = await import(
|
|
45
|
+
/* @vite-ignore */
|
|
46
|
+
/* webpackIgnore: true */
|
|
47
|
+
BABEL_STANDALONE_CDN
|
|
48
|
+
);
|
|
49
|
+
if (module && typeof module.transform === "function") {
|
|
50
|
+
return module;
|
|
51
|
+
}
|
|
52
|
+
if (module.default && typeof module.default.transform === "function") {
|
|
53
|
+
return module.default;
|
|
54
|
+
}
|
|
55
|
+
} catch {
|
|
56
|
+
}
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
if (typeof document === "undefined") {
|
|
59
|
+
reject(new Error("Babel Standalone requires a browser environment"));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const script = document.createElement("script");
|
|
63
|
+
script.src = BABEL_STANDALONE_FALLBACK_CDN;
|
|
64
|
+
script.crossOrigin = "anonymous";
|
|
65
|
+
script.onload = () => {
|
|
66
|
+
const babel = globalThis["Babel"];
|
|
67
|
+
if (babel && typeof babel.transform === "function") {
|
|
68
|
+
resolve(babel);
|
|
69
|
+
} else {
|
|
70
|
+
reject(new Error("Babel Standalone loaded but transform function not found"));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
script.onerror = () => {
|
|
74
|
+
reject(new Error(`Failed to load Babel Standalone from ${BABEL_STANDALONE_FALLBACK_CDN}`));
|
|
75
|
+
};
|
|
76
|
+
document.head.appendChild(script);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async function transpileJsx(source, filename = "component.jsx") {
|
|
80
|
+
const babel = await loadBabel();
|
|
81
|
+
const result = babel.transform(source, {
|
|
82
|
+
presets: ["react"],
|
|
83
|
+
filename
|
|
84
|
+
});
|
|
85
|
+
return result.code;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// libs/ui/src/renderer/react/index.ts
|
|
89
|
+
function isReactJsx(content) {
|
|
90
|
+
if (/^#{1,6}\s+\S/m.test(content)) return false;
|
|
91
|
+
return /(?:function|const|class)\s+\w+/.test(content) && /(?:return|=>)[\s(]*</.test(content);
|
|
92
|
+
}
|
|
93
|
+
function parseImports(source) {
|
|
94
|
+
const results = [];
|
|
95
|
+
const defaultRe = /^import\s+(\w+)\s+from\s+['"]([^'"]+)['"][\s;]*$/gm;
|
|
96
|
+
let m;
|
|
97
|
+
while ((m = defaultRe.exec(source)) !== null) {
|
|
98
|
+
results.push({ line: m[0], localName: m[1], specifier: m[2], named: false });
|
|
99
|
+
}
|
|
100
|
+
const namedRe = /^import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"][\s;]*$/gm;
|
|
101
|
+
while ((m = namedRe.exec(source)) !== null) {
|
|
102
|
+
const names = m[1].split(",").map((n) => n.trim()).filter(Boolean);
|
|
103
|
+
for (const name of names) {
|
|
104
|
+
results.push({ line: m[0], localName: name, specifier: m[2], named: true });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return results;
|
|
108
|
+
}
|
|
109
|
+
function stripImports(source) {
|
|
110
|
+
return source.replace(/^import\s+\w+\s+from\s+['"][^'"]+['"][\s;]*$/gm, "").replace(/^import\s+\{[^}]+\}\s+from\s+['"][^'"]+['"][\s;]*$/gm, "");
|
|
111
|
+
}
|
|
112
|
+
function rewriteExportDefault(source) {
|
|
113
|
+
let result = source.replace(/^export\s+default\s+(function|class)\b/gm, "var __default__ = $1");
|
|
114
|
+
result = result.replace(/^export\s+default\s+(\([^)]*\)\s*=>)/gm, "var __default__ = $1");
|
|
115
|
+
result = result.replace(/^export\s+default\s+(\w+)\s*;?\s*$/gm, "var __default__ = $1;");
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
function isReactSpecifier(specifier) {
|
|
119
|
+
return specifier === "react" || /^https?:\/\/esm\.sh\/react(?:@[\d.]+)?$/.test(specifier);
|
|
120
|
+
}
|
|
121
|
+
async function resolveModules(imports) {
|
|
122
|
+
const modules = {};
|
|
123
|
+
const specifierMap = /* @__PURE__ */ new Map();
|
|
124
|
+
for (const imp of imports) {
|
|
125
|
+
const existing = specifierMap.get(imp.specifier) ?? [];
|
|
126
|
+
existing.push(imp);
|
|
127
|
+
specifierMap.set(imp.specifier, existing);
|
|
128
|
+
}
|
|
129
|
+
for (const [specifier, specImports] of specifierMap) {
|
|
130
|
+
let mod;
|
|
131
|
+
if (isReactSpecifier(specifier)) {
|
|
132
|
+
mod = React;
|
|
133
|
+
} else {
|
|
134
|
+
mod = await runtimeImport(specifier);
|
|
135
|
+
}
|
|
136
|
+
for (const imp of specImports) {
|
|
137
|
+
if (imp.named) {
|
|
138
|
+
modules[imp.localName] = mod[imp.localName] ?? mod["default"]?.[imp.localName];
|
|
139
|
+
} else {
|
|
140
|
+
modules[imp.localName] = mod["default"] ?? mod;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return modules;
|
|
145
|
+
}
|
|
146
|
+
function ReactJsxView({ source, className }) {
|
|
147
|
+
const [Component, setComponent] = useState(null);
|
|
148
|
+
const [error, setError] = useState(null);
|
|
149
|
+
const [loading, setLoading] = useState(true);
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
let cancelled = false;
|
|
152
|
+
async function transpileAndRender() {
|
|
153
|
+
try {
|
|
154
|
+
const imports = parseImports(source);
|
|
155
|
+
const modules = await resolveModules(imports);
|
|
156
|
+
let code = stripImports(source);
|
|
157
|
+
code = rewriteExportDefault(code);
|
|
158
|
+
code = await transpileJsx(code, "component.jsx");
|
|
159
|
+
code += "\nreturn __default__;";
|
|
160
|
+
const argNames = Object.keys(modules);
|
|
161
|
+
const argValues = argNames.map((n) => modules[n]);
|
|
162
|
+
const factory = new Function(...argNames, code);
|
|
163
|
+
const Comp = factory(...argValues);
|
|
164
|
+
if (!cancelled) {
|
|
165
|
+
setComponent(() => Comp);
|
|
166
|
+
setError(null);
|
|
167
|
+
setLoading(false);
|
|
168
|
+
}
|
|
169
|
+
} catch (err) {
|
|
170
|
+
if (!cancelled) {
|
|
171
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
172
|
+
setComponent(null);
|
|
173
|
+
setLoading(false);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
setLoading(true);
|
|
178
|
+
setError(null);
|
|
179
|
+
setComponent(null);
|
|
180
|
+
transpileAndRender();
|
|
181
|
+
return () => {
|
|
182
|
+
cancelled = true;
|
|
183
|
+
};
|
|
184
|
+
}, [source]);
|
|
185
|
+
if (loading) {
|
|
186
|
+
return React.createElement(Box, { className, sx: { p: 2, color: "text.secondary" } }, "Transpiling JSX...");
|
|
187
|
+
}
|
|
188
|
+
if (error) {
|
|
189
|
+
return React.createElement(
|
|
190
|
+
Box,
|
|
191
|
+
{ className },
|
|
192
|
+
React.createElement(Alert, { severity: "error", sx: { mb: 1 } }, `JSX render error: ${error}`),
|
|
193
|
+
React.createElement(
|
|
194
|
+
"pre",
|
|
195
|
+
{ style: { fontFamily: "monospace", whiteSpace: "pre-wrap", fontSize: "0.85em" } },
|
|
196
|
+
source
|
|
197
|
+
)
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
if (!Component) {
|
|
201
|
+
return React.createElement(
|
|
202
|
+
Box,
|
|
203
|
+
{ className },
|
|
204
|
+
React.createElement(Alert, { severity: "warning" }, "No component exported. Use `export default MyComponent`.")
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
return React.createElement(Box, { className }, React.createElement(Component, {}));
|
|
208
|
+
}
|
|
209
|
+
var ReactJsxRenderer = class {
|
|
210
|
+
type = "jsx";
|
|
211
|
+
priority = 10;
|
|
212
|
+
canHandle(content) {
|
|
213
|
+
return isReactJsx(content);
|
|
214
|
+
}
|
|
215
|
+
render(content, options) {
|
|
216
|
+
return React.createElement(ReactJsxView, {
|
|
217
|
+
source: content,
|
|
218
|
+
className: options?.className ?? "fmcp-jsx-content"
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
var reactJsxRenderer = new ReactJsxRenderer();
|
|
223
|
+
export {
|
|
224
|
+
ReactJsxRenderer,
|
|
225
|
+
isReactJsx,
|
|
226
|
+
parseImports,
|
|
227
|
+
reactJsxRenderer,
|
|
228
|
+
rewriteExportDefault,
|
|
229
|
+
stripImports
|
|
230
|
+
};
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// libs/ui/src/runtime/content-detector.ts
|
|
2
|
+
var JSX_PATTERNS = [
|
|
3
|
+
// JSX-specific syntax: self-closing tags with capitalized names
|
|
4
|
+
/<[A-Z][a-zA-Z0-9]*[\s/>]/,
|
|
5
|
+
// JSX expressions: {someVar} or {() => ...}
|
|
6
|
+
/\{[a-zA-Z_$][\w$.]*\}/,
|
|
7
|
+
// React hooks: useState, useEffect, etc.
|
|
8
|
+
/\buse[A-Z]\w+\s*\(/,
|
|
9
|
+
// Arrow function components or function declarations: const Foo = / function Foo(
|
|
10
|
+
/(?:const|let|var|function)\s+[A-Z]\w*\s*[=(]/,
|
|
11
|
+
// Import from react
|
|
12
|
+
/import\s[^\n]{1,200}from\s+['"]react['"]/,
|
|
13
|
+
// JSX pragma or import
|
|
14
|
+
/\/\*\*?\s*@jsx\b/,
|
|
15
|
+
// export default function/const (component pattern)
|
|
16
|
+
/export\s+default\s+function\s+[A-Z]/
|
|
17
|
+
];
|
|
18
|
+
var MDX_PATTERNS = [
|
|
19
|
+
// MDX frontmatter
|
|
20
|
+
/^---\s*\n/,
|
|
21
|
+
// Markdown headings
|
|
22
|
+
/^#{1,6}\s+\S/m,
|
|
23
|
+
// MDX import statements followed by markdown
|
|
24
|
+
/^import\s[^\n]*\n+#/m,
|
|
25
|
+
// MDX export default (layout pattern)
|
|
26
|
+
/^export\s+default\s+/m,
|
|
27
|
+
// Markdown bullet lists
|
|
28
|
+
/^\s*[-*+]\s+\S/m,
|
|
29
|
+
// Markdown links
|
|
30
|
+
/\[[^\]]+\]\([^)]+\)/,
|
|
31
|
+
// Markdown code blocks
|
|
32
|
+
/^```\w*/m,
|
|
33
|
+
// Markdown emphasis
|
|
34
|
+
/(?:\*\*|__)(?:(?!\*\*|__).)+(?:\*\*|__)/
|
|
35
|
+
];
|
|
36
|
+
var CHART_TYPE_RE = /"type"\s*:\s*"(?:bar|line|area|pie|scatter|radar|composed)"/;
|
|
37
|
+
var MERMAID_PATTERN = /^\s*(?:graph|sequenceDiagram|classDiagram|stateDiagram|flowchart|erDiagram|gantt|pie|journey|gitGraph)\b/;
|
|
38
|
+
function looksLikeChart(s) {
|
|
39
|
+
return s.charCodeAt(0) === 123 && CHART_TYPE_RE.test(s) && s.includes('"data"');
|
|
40
|
+
}
|
|
41
|
+
function looksLikeFlow(s) {
|
|
42
|
+
return s.charCodeAt(0) === 123 && s.includes('"nodes"') && s.includes('"edges"');
|
|
43
|
+
}
|
|
44
|
+
var MATH_PATTERNS = [
|
|
45
|
+
/\$\$(?:[^$]|\$(?!\$))+\$\$/s,
|
|
46
|
+
/\$[^$\n]+?\$/,
|
|
47
|
+
/\\\[(?:[^\\]|\\.)*\\\]/s,
|
|
48
|
+
/\\\((?:[^\\]|\\.)*\\\)/s,
|
|
49
|
+
/\\begin\{(?:equation|align|gather|matrix|pmatrix|bmatrix|cases)\}/
|
|
50
|
+
];
|
|
51
|
+
var GEOJSON_TYPE_RE = /"type"\s*:\s*"(?:FeatureCollection|Feature|Point|LineString|Polygon|MultiPoint|MultiLineString|MultiPolygon|GeometryCollection)"/;
|
|
52
|
+
function looksLikeMap(s) {
|
|
53
|
+
return s.charCodeAt(0) === 123 && GEOJSON_TYPE_RE.test(s);
|
|
54
|
+
}
|
|
55
|
+
var IMAGE_PATTERNS = [
|
|
56
|
+
/^data:image\/(?:png|jpeg|jpg|gif|webp|svg\+xml)[;,]/,
|
|
57
|
+
/^https?:\/\/[^?#\s]+\.(?:png|jpe?g|gif|webp|svg|avif|ico)(?:\?[^#\s]*)?$/i
|
|
58
|
+
];
|
|
59
|
+
var VIDEO_PATTERNS = [
|
|
60
|
+
/^https?:\/\/[^?#\s]+\.(?:mp4|webm|ogg|mov)(?:\?[^#\s]*)?$/i,
|
|
61
|
+
/^https?:\/\/(?:www\.)?(?:youtube\.com|youtu\.be|vimeo\.com)\//i,
|
|
62
|
+
/^data:video\//
|
|
63
|
+
];
|
|
64
|
+
var AUDIO_PATTERNS = [
|
|
65
|
+
/^https?:\/\/[^?#\s]+\.(?:mp3|wav|ogg|aac|flac|m4a)(?:\?[^#\s]*)?$/i,
|
|
66
|
+
/^https?:\/\/(?:www\.)?soundcloud\.com\//i,
|
|
67
|
+
/^data:audio\//
|
|
68
|
+
];
|
|
69
|
+
function detectContentType(content) {
|
|
70
|
+
if (!content || typeof content !== "string") {
|
|
71
|
+
return "html";
|
|
72
|
+
}
|
|
73
|
+
const trimmed = content.trim();
|
|
74
|
+
if (looksLikeChart(trimmed)) return "chart";
|
|
75
|
+
if (looksLikeFlow(trimmed)) return "flow";
|
|
76
|
+
if (looksLikeMap(trimmed)) return "map";
|
|
77
|
+
if (MERMAID_PATTERN.test(trimmed)) return "mermaid";
|
|
78
|
+
if (MATH_PATTERNS.some((p) => p.test(trimmed))) return "math";
|
|
79
|
+
if (IMAGE_PATTERNS.some((p) => p.test(trimmed))) return "image";
|
|
80
|
+
if (VIDEO_PATTERNS.some((p) => p.test(trimmed))) return "video";
|
|
81
|
+
if (AUDIO_PATTERNS.some((p) => p.test(trimmed))) return "audio";
|
|
82
|
+
const jsxScore = countMatches(trimmed, JSX_PATTERNS);
|
|
83
|
+
const mdxScore = countMatches(trimmed, MDX_PATTERNS);
|
|
84
|
+
if (jsxScore > 0 && jsxScore >= mdxScore) {
|
|
85
|
+
return "jsx";
|
|
86
|
+
}
|
|
87
|
+
if (mdxScore >= 2) {
|
|
88
|
+
return "mdx";
|
|
89
|
+
}
|
|
90
|
+
if (mdxScore === 1 && /^import\s+/m.test(trimmed)) {
|
|
91
|
+
return "mdx";
|
|
92
|
+
}
|
|
93
|
+
return "html";
|
|
94
|
+
}
|
|
95
|
+
function countMatches(content, patterns) {
|
|
96
|
+
let count = 0;
|
|
97
|
+
for (const pattern of patterns) {
|
|
98
|
+
if (pattern.test(content)) {
|
|
99
|
+
count++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return count;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// libs/ui/src/runtime/babel-runtime.ts
|
|
106
|
+
var BABEL_STANDALONE_CDN = "https://esm.sh/@babel/standalone@7";
|
|
107
|
+
var BABEL_STANDALONE_FALLBACK_CDN = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.26.10/babel.min.js";
|
|
108
|
+
var babelState = { status: "idle" };
|
|
109
|
+
async function loadBabel() {
|
|
110
|
+
if (babelState.status === "loaded") {
|
|
111
|
+
return babelState.babel;
|
|
112
|
+
}
|
|
113
|
+
if (babelState.status === "loading") {
|
|
114
|
+
return babelState.promise;
|
|
115
|
+
}
|
|
116
|
+
if (babelState.status === "error") {
|
|
117
|
+
throw babelState.error;
|
|
118
|
+
}
|
|
119
|
+
const promise = doLoadBabel();
|
|
120
|
+
babelState = { status: "loading", promise };
|
|
121
|
+
try {
|
|
122
|
+
const babel = await promise;
|
|
123
|
+
babelState = { status: "loaded", babel };
|
|
124
|
+
return babel;
|
|
125
|
+
} catch (error) {
|
|
126
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
127
|
+
babelState = { status: "error", error: err };
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async function doLoadBabel() {
|
|
132
|
+
const globalBabel = globalThis["Babel"];
|
|
133
|
+
if (globalBabel && typeof globalBabel.transform === "function") {
|
|
134
|
+
return globalBabel;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const module = await import(
|
|
138
|
+
/* @vite-ignore */
|
|
139
|
+
/* webpackIgnore: true */
|
|
140
|
+
BABEL_STANDALONE_CDN
|
|
141
|
+
);
|
|
142
|
+
if (module && typeof module.transform === "function") {
|
|
143
|
+
return module;
|
|
144
|
+
}
|
|
145
|
+
if (module.default && typeof module.default.transform === "function") {
|
|
146
|
+
return module.default;
|
|
147
|
+
}
|
|
148
|
+
} catch {
|
|
149
|
+
}
|
|
150
|
+
return new Promise((resolve, reject) => {
|
|
151
|
+
if (typeof document === "undefined") {
|
|
152
|
+
reject(new Error("Babel Standalone requires a browser environment"));
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const script = document.createElement("script");
|
|
156
|
+
script.src = BABEL_STANDALONE_FALLBACK_CDN;
|
|
157
|
+
script.crossOrigin = "anonymous";
|
|
158
|
+
script.onload = () => {
|
|
159
|
+
const babel = globalThis["Babel"];
|
|
160
|
+
if (babel && typeof babel.transform === "function") {
|
|
161
|
+
resolve(babel);
|
|
162
|
+
} else {
|
|
163
|
+
reject(new Error("Babel Standalone loaded but transform function not found"));
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
script.onerror = () => {
|
|
167
|
+
reject(new Error(`Failed to load Babel Standalone from ${BABEL_STANDALONE_FALLBACK_CDN}`));
|
|
168
|
+
};
|
|
169
|
+
document.head.appendChild(script);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async function transpileJsx(source, filename = "component.jsx") {
|
|
173
|
+
const babel = await loadBabel();
|
|
174
|
+
const result = babel.transform(source, {
|
|
175
|
+
presets: ["react"],
|
|
176
|
+
filename
|
|
177
|
+
});
|
|
178
|
+
return result.code;
|
|
179
|
+
}
|
|
180
|
+
function isBabelLoaded() {
|
|
181
|
+
return babelState.status === "loaded";
|
|
182
|
+
}
|
|
183
|
+
function resetBabelState() {
|
|
184
|
+
babelState = { status: "idle" };
|
|
185
|
+
}
|
|
186
|
+
export {
|
|
187
|
+
BABEL_STANDALONE_CDN,
|
|
188
|
+
BABEL_STANDALONE_FALLBACK_CDN,
|
|
189
|
+
detectContentType,
|
|
190
|
+
isBabelLoaded,
|
|
191
|
+
loadBabel,
|
|
192
|
+
resetBabelState,
|
|
193
|
+
transpileJsx
|
|
194
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// libs/ui/src/theme/create-theme.ts
|
|
2
|
+
import { createTheme } from "@mui/material/styles";
|
|
3
|
+
var SYSTEM_FONT_STACK = [
|
|
4
|
+
"-apple-system",
|
|
5
|
+
"BlinkMacSystemFont",
|
|
6
|
+
'"Segoe UI"',
|
|
7
|
+
"Roboto",
|
|
8
|
+
'"Helvetica Neue"',
|
|
9
|
+
"Arial",
|
|
10
|
+
"sans-serif"
|
|
11
|
+
].join(",");
|
|
12
|
+
var MONO_FONT_STACK = [
|
|
13
|
+
'"SF Mono"',
|
|
14
|
+
'"Fira Code"',
|
|
15
|
+
'"Fira Mono"',
|
|
16
|
+
"Menlo",
|
|
17
|
+
"Consolas",
|
|
18
|
+
'"DejaVu Sans Mono"',
|
|
19
|
+
"monospace"
|
|
20
|
+
].join(",");
|
|
21
|
+
function createFrontMcpTheme(config) {
|
|
22
|
+
const mode = config?.mode ?? "light";
|
|
23
|
+
const palette = config?.palette;
|
|
24
|
+
const typography = config?.typography;
|
|
25
|
+
const shape = config?.shape;
|
|
26
|
+
return createTheme({
|
|
27
|
+
palette: {
|
|
28
|
+
mode,
|
|
29
|
+
primary: { main: palette?.primary ?? "#0969da" },
|
|
30
|
+
secondary: { main: palette?.secondary ?? "#8250df" },
|
|
31
|
+
success: { main: palette?.success ?? "#1a7f37" },
|
|
32
|
+
warning: { main: palette?.warning ?? "#bf8700" },
|
|
33
|
+
error: { main: palette?.error ?? "#cf222e" },
|
|
34
|
+
info: { main: palette?.info ?? "#0550ae" },
|
|
35
|
+
...palette?.background ? { background: { default: palette.background, paper: palette.surface ?? palette.background } } : {},
|
|
36
|
+
...palette?.text ? { text: { primary: palette.text } } : {}
|
|
37
|
+
},
|
|
38
|
+
typography: {
|
|
39
|
+
fontFamily: typography?.fontFamily ?? SYSTEM_FONT_STACK,
|
|
40
|
+
fontSize: typography?.fontSize ?? 14
|
|
41
|
+
},
|
|
42
|
+
shape: {
|
|
43
|
+
borderRadius: shape?.borderRadius ?? 8
|
|
44
|
+
},
|
|
45
|
+
components: {
|
|
46
|
+
MuiButtonBase: {
|
|
47
|
+
defaultProps: {
|
|
48
|
+
disableRipple: false
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
MuiButton: {
|
|
52
|
+
styleOverrides: {
|
|
53
|
+
root: {
|
|
54
|
+
textTransform: "none",
|
|
55
|
+
fontWeight: 500
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
var defaultTheme = createFrontMcpTheme();
|
|
63
|
+
var darkTheme = createFrontMcpTheme({ mode: "dark" });
|
|
64
|
+
|
|
65
|
+
// libs/ui/src/theme/FrontMcpThemeProvider.tsx
|
|
66
|
+
import { ThemeProvider } from "@mui/material/styles";
|
|
67
|
+
import CssBaseline from "@mui/material/CssBaseline";
|
|
68
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
69
|
+
function FrontMcpThemeProvider({
|
|
70
|
+
theme: themeConfig,
|
|
71
|
+
children
|
|
72
|
+
}) {
|
|
73
|
+
const muiTheme = themeConfig ? createFrontMcpTheme(themeConfig) : defaultTheme;
|
|
74
|
+
return /* @__PURE__ */ jsxs(ThemeProvider, { theme: muiTheme, children: [
|
|
75
|
+
/* @__PURE__ */ jsx(CssBaseline, {}),
|
|
76
|
+
children
|
|
77
|
+
] });
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// libs/ui/src/theme/use-theme.ts
|
|
81
|
+
import { useTheme as useMuiTheme } from "@mui/material/styles";
|
|
82
|
+
function useFrontMcpTheme() {
|
|
83
|
+
return useMuiTheme();
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
FrontMcpThemeProvider,
|
|
87
|
+
MONO_FONT_STACK,
|
|
88
|
+
SYSTEM_FONT_STACK,
|
|
89
|
+
createFrontMcpTheme,
|
|
90
|
+
darkTheme,
|
|
91
|
+
defaultTheme,
|
|
92
|
+
useFrontMcpTheme
|
|
93
|
+
};
|
package/index.d.ts
CHANGED
|
@@ -1,37 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @frontmcp/ui
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Provides
|
|
4
|
+
* MUI-based React component library for FrontMCP applications.
|
|
5
|
+
* Provides themed components, content renderers, and MCP bridge hooks.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @example HTML components
|
|
7
|
+
* @example Theme
|
|
10
8
|
* ```typescript
|
|
11
|
-
* import {
|
|
12
|
-
* import { baseLayout } from '@frontmcp/ui/layouts';
|
|
9
|
+
* import { FrontMcpThemeProvider, createFrontMcpTheme } from '@frontmcp/ui/theme';
|
|
13
10
|
* ```
|
|
14
11
|
*
|
|
15
|
-
* @example
|
|
12
|
+
* @example Components
|
|
16
13
|
* ```typescript
|
|
17
|
-
* import {
|
|
14
|
+
* import { Button, Card, Alert } from '@frontmcp/ui/components';
|
|
18
15
|
* ```
|
|
19
16
|
*
|
|
20
|
-
* @example React
|
|
17
|
+
* @example React hooks
|
|
21
18
|
* ```typescript
|
|
22
|
-
* import {
|
|
23
|
-
* import { useMcpBridge, useCallTool } from '@frontmcp/ui/react/hooks';
|
|
19
|
+
* import { useMcpBridge, useCallTool } from '@frontmcp/ui/react';
|
|
24
20
|
* ```
|
|
25
21
|
*
|
|
26
|
-
* @example
|
|
22
|
+
* @example Renderer
|
|
27
23
|
* ```typescript
|
|
28
|
-
* import {
|
|
24
|
+
* import { renderContent, detectContentType } from '@frontmcp/ui/renderer';
|
|
29
25
|
* ```
|
|
30
26
|
*/
|
|
31
|
-
export * from './components';
|
|
32
|
-
export * from './layouts';
|
|
33
27
|
export { type PlatformAdapter, type AdapterCapabilities, type BridgeConfig, FrontMcpBridge, createBridge, AdapterRegistry, defaultRegistry, registerAdapter, generateBridgeIIFE, generatePlatformBundle, UNIVERSAL_BRIDGE_SCRIPT, BRIDGE_SCRIPT_TAGS, } from './bridge';
|
|
34
|
-
export { registerAllComponents, registerFmcpButton, registerFmcpCard, registerFmcpAlert, registerFmcpBadge, registerFmcpInput, registerFmcpSelect, FmcpButton, FmcpCard, FmcpAlert, FmcpBadge, FmcpInput, FmcpSelect, FmcpElement, } from './web-components';
|
|
35
28
|
export * from './react';
|
|
36
|
-
export { ReactRenderer, reactRenderer, ReactRendererAdapter, createReactAdapter, loadReactAdapter } from './renderers';
|
|
37
29
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAEjB,cAAc,EACd,YAAY,EAEZ,eAAe,EACf,eAAe,EACf,eAAe,EAEf,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAKlB,cAAc,SAAS,CAAC"}
|