@frontmcp/uipack 0.6.3 → 0.7.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/CLAUDE.md +0 -14
- package/adapters/index.js +50 -47
- package/adapters/platform-meta.d.ts.map +1 -1
- package/adapters/response-builder.d.ts +16 -3
- package/adapters/response-builder.d.ts.map +1 -1
- package/bridge-runtime/iife-generator.d.ts.map +1 -1
- package/bridge-runtime/index.js +4 -0
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +61 -69
- package/bundler/index.js +35 -34
- package/dependency/import-map.d.ts.map +1 -1
- package/dependency/index.js +22 -29
- package/esm/adapters/index.mjs +52 -42
- package/esm/bridge-runtime/index.mjs +4 -0
- package/esm/build/index.mjs +30 -32
- package/esm/bundler/index.mjs +19 -11
- package/esm/dependency/index.mjs +18 -18
- package/esm/handlebars/index.mjs +9 -8
- package/esm/index.mjs +107 -126
- package/esm/package.json +3 -2
- package/esm/registry/index.mjs +53 -49
- package/esm/renderers/index.mjs +15 -21
- package/esm/runtime/index.mjs +16 -15
- package/esm/theme/index.mjs +8 -0
- package/esm/tool-template/index.mjs +23 -15
- package/esm/typings/index.mjs +4 -0
- package/esm/utils/index.mjs +9 -56
- package/esm/validation/index.mjs +9 -8
- package/handlebars/index.js +4 -10
- package/index.js +186 -211
- package/package.json +3 -2
- package/preview/generic-preview.d.ts +4 -5
- package/preview/generic-preview.d.ts.map +1 -1
- package/preview/types.d.ts +15 -1
- package/preview/types.d.ts.map +1 -1
- package/registry/index.js +61 -63
- package/registry/render-template.d.ts.map +1 -1
- package/renderers/index.js +16 -28
- package/renderers/utils/detect.d.ts.map +1 -1
- package/runtime/index.js +20 -25
- package/runtime/sanitizer.d.ts.map +1 -1
- package/theme/css-to-theme.d.ts +0 -27
- package/theme/css-to-theme.d.ts.map +1 -1
- package/theme/index.js +8 -0
- package/tool-template/index.js +30 -28
- package/typings/dts-parser.d.ts.map +1 -1
- package/typings/index.js +4 -0
- package/utils/index.d.ts +2 -3
- package/utils/index.d.ts.map +1 -1
- package/utils/index.js +7 -63
- package/validation/index.js +6 -12
- package/utils/escape-html.d.ts +0 -102
- package/utils/escape-html.d.ts.map +0 -1
- package/utils/safe-stringify.d.ts +0 -30
- package/utils/safe-stringify.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/uipack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "FrontMCP UIpack - Bundling, build tools, and platform adapters for MCP UI development (React-free core)",
|
|
5
5
|
"author": "AgentFront <info@agentfront.dev>",
|
|
6
6
|
"homepage": "https://docs.agentfront.dev",
|
|
@@ -55,8 +55,9 @@
|
|
|
55
55
|
"./esm": null
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
+
"@frontmcp/utils": "0.7.2",
|
|
58
59
|
"@swc/core": "^1.5.0",
|
|
59
|
-
"enclave-vm": "^
|
|
60
|
+
"enclave-vm": "^2.7.0",
|
|
60
61
|
"esbuild": "^0.27.1",
|
|
61
62
|
"handlebars": "^4.7.8",
|
|
62
63
|
"zod": "^4.0.0"
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
* Generic Preview Handler
|
|
3
3
|
*
|
|
4
4
|
* Generates metadata for generic MCP clients.
|
|
5
|
-
* Uses
|
|
6
|
-
*
|
|
7
|
-
* Behaves like OpenAI but with different metadata namespaces.
|
|
5
|
+
* Uses ui/* namespace for maximum compatibility with MCP clients
|
|
6
|
+
* (Claude, Cursor, etc.).
|
|
8
7
|
*
|
|
9
8
|
* @packageDocumentation
|
|
10
9
|
*/
|
|
@@ -12,8 +11,8 @@ import type { PreviewHandler, DiscoveryPreviewOptions, ExecutionPreviewOptions,
|
|
|
12
11
|
/**
|
|
13
12
|
* Preview handler for generic MCP clients.
|
|
14
13
|
*
|
|
15
|
-
* Uses the
|
|
16
|
-
*
|
|
14
|
+
* Uses the ui/* namespace for maximum compatibility with
|
|
15
|
+
* MCP clients (Claude, Cursor, etc.).
|
|
17
16
|
*
|
|
18
17
|
* @example
|
|
19
18
|
* ```typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-preview.d.ts","sourceRoot":"","sources":["../../src/preview/generic-preview.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"generic-preview.d.ts","sourceRoot":"","sources":["../../src/preview/generic-preview.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,EACb,aAAa,EAGd,MAAM,SAAS,CAAC;AAsBjB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAEvC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAkB7D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAsB7D,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,kBAAkB;IAuB1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;CA6BhC"}
|
package/preview/types.d.ts
CHANGED
|
@@ -165,7 +165,15 @@ export interface ClaudeMetaFields {
|
|
|
165
165
|
'claude/prefersBorder'?: boolean;
|
|
166
166
|
}
|
|
167
167
|
/**
|
|
168
|
-
*
|
|
168
|
+
* Generic MCP metadata fields.
|
|
169
|
+
* Uses ui/* namespace for maximum compatibility with MCP clients.
|
|
170
|
+
*
|
|
171
|
+
* Note: This type includes both legacy frontmcp/* and new ui/* keys
|
|
172
|
+
* for type compatibility during the migration period. New code should
|
|
173
|
+
* only emit ui/* keys. The frontmcp/* keys will be removed in a future
|
|
174
|
+
* major version.
|
|
175
|
+
*
|
|
176
|
+
* @deprecated frontmcp/* keys are deprecated - use ui/* keys instead
|
|
169
177
|
*/
|
|
170
178
|
export interface FrontMCPMetaFields {
|
|
171
179
|
'frontmcp/html'?: string;
|
|
@@ -177,6 +185,12 @@ export interface FrontMCPMetaFields {
|
|
|
177
185
|
};
|
|
178
186
|
'ui/html'?: string;
|
|
179
187
|
'ui/mimeType'?: string;
|
|
188
|
+
'ui/resourceUri'?: string;
|
|
189
|
+
'ui/component'?: string;
|
|
190
|
+
'ui/widgetCSP'?: {
|
|
191
|
+
connectDomains?: string[];
|
|
192
|
+
resourceDomains?: string[];
|
|
193
|
+
};
|
|
180
194
|
}
|
|
181
195
|
/**
|
|
182
196
|
* Combined metadata fields for all platforms.
|
package/preview/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/preview/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAMhE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,WAAW,EAAE,aAAa,CAAC;IAE3B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,WAAW,EAAE,aAAa,CAAC;IAE3B;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAErC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa,CAAC;IAE9D;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa,CAAC;CAC/D;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE;QACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,oBAAoB,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9C,+BAA+B,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/preview/types.ts"],"names":[],"mappings":"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"}
|
package/registry/index.js
CHANGED
|
@@ -570,31 +570,12 @@ var init_theme2 = __esm({
|
|
|
570
570
|
}
|
|
571
571
|
});
|
|
572
572
|
|
|
573
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
574
|
-
function escapeHtml(str) {
|
|
575
|
-
if (str === null || str === void 0) {
|
|
576
|
-
return "";
|
|
577
|
-
}
|
|
578
|
-
const s = String(str);
|
|
579
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
580
|
-
}
|
|
581
|
-
function escapeJsString(str) {
|
|
582
|
-
return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
583
|
-
}
|
|
584
|
-
function escapeScriptClose(jsonString) {
|
|
585
|
-
return jsonString.replace(/<\//g, "<\\/");
|
|
586
|
-
}
|
|
587
|
-
var init_escape_html = __esm({
|
|
588
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
589
|
-
"use strict";
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
|
|
593
573
|
// libs/uipack/src/utils/index.ts
|
|
574
|
+
var import_utils;
|
|
594
575
|
var init_utils = __esm({
|
|
595
576
|
"libs/uipack/src/utils/index.ts"() {
|
|
596
577
|
"use strict";
|
|
597
|
-
|
|
578
|
+
import_utils = require("@frontmcp/utils");
|
|
598
579
|
}
|
|
599
580
|
});
|
|
600
581
|
|
|
@@ -848,6 +829,9 @@ function isTemplateBuilderFunction(fn) {
|
|
|
848
829
|
return true;
|
|
849
830
|
}
|
|
850
831
|
function containsJsx(source) {
|
|
832
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
833
|
+
return false;
|
|
834
|
+
}
|
|
851
835
|
if (/<[A-Z][a-zA-Z0-9]*(\s|>|\/)/.test(source)) {
|
|
852
836
|
return true;
|
|
853
837
|
}
|
|
@@ -872,6 +856,9 @@ function containsJsx(source) {
|
|
|
872
856
|
return false;
|
|
873
857
|
}
|
|
874
858
|
function containsMdxSyntax(source) {
|
|
859
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
860
|
+
return false;
|
|
861
|
+
}
|
|
875
862
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
876
863
|
return true;
|
|
877
864
|
}
|
|
@@ -945,9 +932,11 @@ function detectTemplateType(template) {
|
|
|
945
932
|
reason: "Unknown template type, defaulting to HTML"
|
|
946
933
|
};
|
|
947
934
|
}
|
|
935
|
+
var MAX_TEMPLATE_LENGTH;
|
|
948
936
|
var init_detect = __esm({
|
|
949
937
|
"libs/uipack/src/renderers/utils/detect.ts"() {
|
|
950
938
|
"use strict";
|
|
939
|
+
MAX_TEMPLATE_LENGTH = 5e4;
|
|
951
940
|
}
|
|
952
941
|
});
|
|
953
942
|
|
|
@@ -1137,7 +1126,7 @@ var init_helpers = __esm({
|
|
|
1137
1126
|
idCounter = 0;
|
|
1138
1127
|
builtinHelpers = {
|
|
1139
1128
|
// Escaping
|
|
1140
|
-
escapeHtml,
|
|
1129
|
+
escapeHtml: import_utils.escapeHtml,
|
|
1141
1130
|
// Formatting
|
|
1142
1131
|
formatDate,
|
|
1143
1132
|
formatCurrency,
|
|
@@ -1308,7 +1297,7 @@ __export(handlebars_exports, {
|
|
|
1308
1297
|
createHandlebarsRenderer: () => createHandlebarsRenderer,
|
|
1309
1298
|
defaultValue: () => defaultValue,
|
|
1310
1299
|
eq: () => eq,
|
|
1311
|
-
escapeHtml: () => escapeHtml,
|
|
1300
|
+
escapeHtml: () => import_utils.escapeHtml,
|
|
1312
1301
|
extractAll: () => extractAll,
|
|
1313
1302
|
extractExpressions: () => extractExpressions,
|
|
1314
1303
|
extractInputPaths: () => extractInputPaths,
|
|
@@ -1954,12 +1943,12 @@ var init_mdx_client_renderer = __esm({
|
|
|
1954
1943
|
...outputProps,
|
|
1955
1944
|
...props
|
|
1956
1945
|
};
|
|
1957
|
-
const escapedMdx = escapeScriptClose(JSON.stringify(template));
|
|
1958
|
-
const escapedProps = escapeScriptClose(JSON.stringify(spreadProps));
|
|
1959
|
-
const safeContainerId = escapeJsString(containerId);
|
|
1960
|
-
const loadingHtml = showLoading ? `<div class="mdx-loading">${escapeHtml(loadingMessage)}</div>` : "";
|
|
1946
|
+
const escapedMdx = (0, import_utils.escapeScriptClose)(JSON.stringify(template));
|
|
1947
|
+
const escapedProps = (0, import_utils.escapeScriptClose)(JSON.stringify(spreadProps));
|
|
1948
|
+
const safeContainerId = (0, import_utils.escapeJsString)(containerId);
|
|
1949
|
+
const loadingHtml = showLoading ? `<div class="mdx-loading">${(0, import_utils.escapeHtml)(loadingMessage)}</div>` : "";
|
|
1961
1950
|
return `
|
|
1962
|
-
<div id="${escapeHtml(containerId)}">${loadingHtml}</div>
|
|
1951
|
+
<div id="${(0, import_utils.escapeHtml)(containerId)}">${loadingHtml}</div>
|
|
1963
1952
|
<script type="module">
|
|
1964
1953
|
(async function() {
|
|
1965
1954
|
try {
|
|
@@ -2167,11 +2156,12 @@ var init_renderers = __esm({
|
|
|
2167
2156
|
function sha256(content) {
|
|
2168
2157
|
return (0, import_crypto.createHash)("sha256").update(content, "utf8").digest("hex");
|
|
2169
2158
|
}
|
|
2170
|
-
var import_crypto;
|
|
2159
|
+
var import_crypto, import_utils6;
|
|
2171
2160
|
var init_hash_calculator = __esm({
|
|
2172
2161
|
"libs/uipack/src/bundler/file-cache/hash-calculator.ts"() {
|
|
2173
2162
|
"use strict";
|
|
2174
2163
|
import_crypto = require("crypto");
|
|
2164
|
+
import_utils6 = require("@frontmcp/utils");
|
|
2175
2165
|
}
|
|
2176
2166
|
});
|
|
2177
2167
|
|
|
@@ -3022,7 +3012,11 @@ FrontMcpBridge.prototype._setupDataToolCallHandler = function() {
|
|
|
3022
3012
|
};
|
|
3023
3013
|
`.trim();
|
|
3024
3014
|
}
|
|
3015
|
+
var MAX_MINIFY_CODE_LENGTH = 5e5;
|
|
3025
3016
|
function minifyJS(code) {
|
|
3017
|
+
if (code.length > MAX_MINIFY_CODE_LENGTH) {
|
|
3018
|
+
return code;
|
|
3019
|
+
}
|
|
3026
3020
|
return code.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").replace(/\s+/g, " ").replace(/\s*([{};,:()[\]])\s*/g, "$1").replace(/;\}/g, "}").trim();
|
|
3027
3021
|
}
|
|
3028
3022
|
function generatePlatformBundle(platform, options = {}) {
|
|
@@ -3129,7 +3123,7 @@ function createTemplateHelpers() {
|
|
|
3129
3123
|
/**
|
|
3130
3124
|
* Escape HTML special characters to prevent XSS
|
|
3131
3125
|
*/
|
|
3132
|
-
escapeHtml,
|
|
3126
|
+
escapeHtml: import_utils.escapeHtml,
|
|
3133
3127
|
/**
|
|
3134
3128
|
* Format a date for display
|
|
3135
3129
|
*/
|
|
@@ -3246,7 +3240,7 @@ function wrapToolUIUniversal(options) {
|
|
|
3246
3240
|
resourceMode
|
|
3247
3241
|
});
|
|
3248
3242
|
const bridgeScript = includeBridge ? BRIDGE_SCRIPT_TAGS.universal : "";
|
|
3249
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3243
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3250
3244
|
return `<!DOCTYPE html>
|
|
3251
3245
|
<html lang="en">
|
|
3252
3246
|
<head>
|
|
@@ -3471,7 +3465,7 @@ function wrapLeanWidgetShell(options) {
|
|
|
3471
3465
|
<head>
|
|
3472
3466
|
<meta charset="UTF-8">
|
|
3473
3467
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3474
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
3468
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
3475
3469
|
${fontPreconnect}
|
|
3476
3470
|
${fontStylesheets}
|
|
3477
3471
|
${tailwindScript}
|
|
@@ -3872,7 +3866,7 @@ function wrapHybridWidgetShell(options) {
|
|
|
3872
3866
|
<head>
|
|
3873
3867
|
<meta charset="UTF-8">
|
|
3874
3868
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3875
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
3869
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
3876
3870
|
${fontPreconnect}
|
|
3877
3871
|
${fontStylesheets}
|
|
3878
3872
|
${tailwindScript}
|
|
@@ -4414,7 +4408,7 @@ function wrapStaticWidgetUniversal(options) {
|
|
|
4414
4408
|
}, 100);
|
|
4415
4409
|
}
|
|
4416
4410
|
</script>` : "";
|
|
4417
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Widget`;
|
|
4411
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Widget`;
|
|
4418
4412
|
const loaderHtml = isReactBased && componentCode && !hasEmbeddedData ? `
|
|
4419
4413
|
<!-- Loading State -->
|
|
4420
4414
|
<div id="frontmcp-loader" style="display: flex; align-items: center; justify-content: center; padding: 2rem; gap: 0.5rem;">
|
|
@@ -4464,7 +4458,11 @@ function wrapStaticWidgetUniversal(options) {
|
|
|
4464
4458
|
}
|
|
4465
4459
|
|
|
4466
4460
|
// libs/uipack/src/registry/render-template.ts
|
|
4461
|
+
var MAX_MDX_SOURCE_LENGTH = 1e5;
|
|
4467
4462
|
function containsMdxSyntax2(source) {
|
|
4463
|
+
if (source.length > MAX_MDX_SOURCE_LENGTH) {
|
|
4464
|
+
return false;
|
|
4465
|
+
}
|
|
4468
4466
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
4469
4467
|
return true;
|
|
4470
4468
|
}
|
|
@@ -4632,16 +4630,13 @@ function buildUIMeta(options) {
|
|
|
4632
4630
|
case "generic-mcp":
|
|
4633
4631
|
case "gemini":
|
|
4634
4632
|
default:
|
|
4635
|
-
meta["frontmcp/html"] = html;
|
|
4636
|
-
meta["frontmcp/mimeType"] = "text/html+mcp";
|
|
4637
|
-
if (rendererType) meta["frontmcp/type"] = rendererType;
|
|
4638
|
-
if (contentHash) meta["frontmcp/contentHash"] = contentHash;
|
|
4639
|
-
if (manifestUri) meta["frontmcp/manifestUri"] = manifestUri;
|
|
4640
|
-
if (token) meta["frontmcp/widgetToken"] = token;
|
|
4641
|
-
if (directUrl) meta["frontmcp/directUrl"] = directUrl;
|
|
4642
4633
|
meta["ui/html"] = html;
|
|
4643
4634
|
meta["ui/mimeType"] = "text/html+mcp";
|
|
4644
4635
|
if (rendererType) meta["ui/type"] = rendererType;
|
|
4636
|
+
if (contentHash) meta["ui/contentHash"] = contentHash;
|
|
4637
|
+
if (manifestUri) meta["ui/manifestUri"] = manifestUri;
|
|
4638
|
+
if (token) meta["ui/widgetToken"] = token;
|
|
4639
|
+
if (directUrl) meta["ui/directUrl"] = directUrl;
|
|
4645
4640
|
if (platformType === "claude") {
|
|
4646
4641
|
return buildClaudeMeta(meta, uiConfig);
|
|
4647
4642
|
} else if (platformType === "gemini") {
|
|
@@ -4690,34 +4685,37 @@ function buildIDEMeta(meta, uiConfig) {
|
|
|
4690
4685
|
}
|
|
4691
4686
|
return meta;
|
|
4692
4687
|
}
|
|
4693
|
-
function buildFrontMCPCSP(csp) {
|
|
4694
|
-
const result = {};
|
|
4695
|
-
if (csp.connectDomains?.length) {
|
|
4696
|
-
result.connectDomains = csp.connectDomains;
|
|
4697
|
-
}
|
|
4698
|
-
if (csp.resourceDomains?.length) {
|
|
4699
|
-
result.resourceDomains = csp.resourceDomains;
|
|
4700
|
-
}
|
|
4701
|
-
return result;
|
|
4702
|
-
}
|
|
4703
4688
|
function buildGenericMeta(meta, uiConfig) {
|
|
4704
|
-
if (uiConfig.widgetAccessible) {
|
|
4705
|
-
meta["frontmcp/widgetAccessible"] = true;
|
|
4706
|
-
}
|
|
4707
4689
|
if (uiConfig.csp) {
|
|
4708
|
-
|
|
4690
|
+
const csp = {};
|
|
4691
|
+
if (uiConfig.csp.connectDomains?.length) {
|
|
4692
|
+
csp.connectDomains = uiConfig.csp.connectDomains;
|
|
4693
|
+
}
|
|
4694
|
+
if (uiConfig.csp.resourceDomains?.length) {
|
|
4695
|
+
csp.resourceDomains = uiConfig.csp.resourceDomains;
|
|
4696
|
+
}
|
|
4697
|
+
if (Object.keys(csp).length > 0) {
|
|
4698
|
+
meta["ui/csp"] = csp;
|
|
4699
|
+
}
|
|
4709
4700
|
}
|
|
4710
4701
|
if (uiConfig.displayMode) {
|
|
4711
|
-
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
|
|
4702
|
+
const displayModeMap = {
|
|
4703
|
+
inline: "inline",
|
|
4704
|
+
fullscreen: "fullscreen",
|
|
4705
|
+
pip: "pip",
|
|
4706
|
+
widget: "inline",
|
|
4707
|
+
panel: "fullscreen"
|
|
4708
|
+
};
|
|
4709
|
+
const mappedMode = displayModeMap[uiConfig.displayMode];
|
|
4710
|
+
if (mappedMode) {
|
|
4711
|
+
meta["ui/displayMode"] = mappedMode;
|
|
4712
|
+
}
|
|
4715
4713
|
}
|
|
4716
4714
|
if (uiConfig.prefersBorder !== void 0) {
|
|
4717
|
-
meta["
|
|
4715
|
+
meta["ui/prefersBorder"] = uiConfig.prefersBorder;
|
|
4718
4716
|
}
|
|
4719
4717
|
if (uiConfig.sandboxDomain) {
|
|
4720
|
-
meta["
|
|
4718
|
+
meta["ui/domain"] = uiConfig.sandboxDomain;
|
|
4721
4719
|
}
|
|
4722
4720
|
return meta;
|
|
4723
4721
|
}
|
|
@@ -4991,7 +4989,7 @@ function getSchemaPathStrings(schema, prefix = "output") {
|
|
|
4991
4989
|
}
|
|
4992
4990
|
|
|
4993
4991
|
// libs/uipack/src/validation/template-validator.ts
|
|
4994
|
-
|
|
4992
|
+
init_handlebars();
|
|
4995
4993
|
function validateTemplate(template, outputSchema, options = {}) {
|
|
4996
4994
|
const { inputSchema, warnOnOptional = true, suggestSimilar = true, maxSuggestionDistance = 3 } = options;
|
|
4997
4995
|
const errors = [];
|
|
@@ -5341,7 +5339,7 @@ function safeInputToRecord(input) {
|
|
|
5341
5339
|
return {};
|
|
5342
5340
|
}
|
|
5343
5341
|
var defaultHelpers = {
|
|
5344
|
-
escapeHtml,
|
|
5342
|
+
escapeHtml: import_utils.escapeHtml,
|
|
5345
5343
|
formatDate: (date, format) => {
|
|
5346
5344
|
const d = date instanceof Date ? date : new Date(date);
|
|
5347
5345
|
if (format === "iso") return d.toISOString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-template.d.ts","sourceRoot":"","sources":["../../src/registry/render-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"render-template.d.ts","sourceRoot":"","sources":["../../src/registry/render-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAYrF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA2CzD;AAkCD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAyB3D;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAE/C,QAAQ,EAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAC/E,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oDAAoD;IAEpD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAuBzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,QAAQ,IAAI;IAAE,EAAE,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CAAE,CAG9G;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmGpG"}
|
package/renderers/index.js
CHANGED
|
@@ -30,31 +30,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
30
|
));
|
|
31
31
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
32
|
|
|
33
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
34
|
-
function escapeHtml(str) {
|
|
35
|
-
if (str === null || str === void 0) {
|
|
36
|
-
return "";
|
|
37
|
-
}
|
|
38
|
-
const s = String(str);
|
|
39
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
40
|
-
}
|
|
41
|
-
function escapeJsString(str) {
|
|
42
|
-
return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
43
|
-
}
|
|
44
|
-
function escapeScriptClose(jsonString) {
|
|
45
|
-
return jsonString.replace(/<\//g, "<\\/");
|
|
46
|
-
}
|
|
47
|
-
var init_escape_html = __esm({
|
|
48
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
49
|
-
"use strict";
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
|
|
53
33
|
// libs/uipack/src/utils/index.ts
|
|
34
|
+
var import_utils;
|
|
54
35
|
var init_utils = __esm({
|
|
55
36
|
"libs/uipack/src/utils/index.ts"() {
|
|
56
37
|
"use strict";
|
|
57
|
-
|
|
38
|
+
import_utils = require("@frontmcp/utils");
|
|
58
39
|
}
|
|
59
40
|
});
|
|
60
41
|
|
|
@@ -244,7 +225,7 @@ var init_helpers = __esm({
|
|
|
244
225
|
idCounter = 0;
|
|
245
226
|
builtinHelpers = {
|
|
246
227
|
// Escaping
|
|
247
|
-
escapeHtml,
|
|
228
|
+
escapeHtml: import_utils.escapeHtml,
|
|
248
229
|
// Formatting
|
|
249
230
|
formatDate,
|
|
250
231
|
formatCurrency,
|
|
@@ -415,7 +396,7 @@ __export(handlebars_exports, {
|
|
|
415
396
|
createHandlebarsRenderer: () => createHandlebarsRenderer,
|
|
416
397
|
defaultValue: () => defaultValue,
|
|
417
398
|
eq: () => eq,
|
|
418
|
-
escapeHtml: () => escapeHtml,
|
|
399
|
+
escapeHtml: () => import_utils.escapeHtml,
|
|
419
400
|
extractAll: () => extractAll,
|
|
420
401
|
extractExpressions: () => extractExpressions,
|
|
421
402
|
extractInputPaths: () => extractInputPaths,
|
|
@@ -932,6 +913,7 @@ var CLAUDE_PLATFORM = {
|
|
|
932
913
|
};
|
|
933
914
|
|
|
934
915
|
// libs/uipack/src/renderers/utils/detect.ts
|
|
916
|
+
var MAX_TEMPLATE_LENGTH = 5e4;
|
|
935
917
|
function isReactComponent(value) {
|
|
936
918
|
if (typeof value !== "function") {
|
|
937
919
|
return false;
|
|
@@ -960,6 +942,9 @@ function isTemplateBuilderFunction(fn) {
|
|
|
960
942
|
return true;
|
|
961
943
|
}
|
|
962
944
|
function containsJsx(source) {
|
|
945
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
946
|
+
return false;
|
|
947
|
+
}
|
|
963
948
|
if (/<[A-Z][a-zA-Z0-9]*(\s|>|\/)/.test(source)) {
|
|
964
949
|
return true;
|
|
965
950
|
}
|
|
@@ -984,6 +969,9 @@ function containsJsx(source) {
|
|
|
984
969
|
return false;
|
|
985
970
|
}
|
|
986
971
|
function containsMdxSyntax(source) {
|
|
972
|
+
if (source.length > MAX_TEMPLATE_LENGTH) {
|
|
973
|
+
return false;
|
|
974
|
+
}
|
|
987
975
|
if (/<[A-Z][a-zA-Z0-9]*/.test(source)) {
|
|
988
976
|
return true;
|
|
989
977
|
}
|
|
@@ -1437,12 +1425,12 @@ var MdxClientRenderer = class {
|
|
|
1437
1425
|
...outputProps,
|
|
1438
1426
|
...props
|
|
1439
1427
|
};
|
|
1440
|
-
const escapedMdx = escapeScriptClose(JSON.stringify(template));
|
|
1441
|
-
const escapedProps = escapeScriptClose(JSON.stringify(spreadProps));
|
|
1442
|
-
const safeContainerId = escapeJsString(containerId);
|
|
1443
|
-
const loadingHtml = showLoading ? `<div class="mdx-loading">${escapeHtml(loadingMessage)}</div>` : "";
|
|
1428
|
+
const escapedMdx = (0, import_utils.escapeScriptClose)(JSON.stringify(template));
|
|
1429
|
+
const escapedProps = (0, import_utils.escapeScriptClose)(JSON.stringify(spreadProps));
|
|
1430
|
+
const safeContainerId = (0, import_utils.escapeJsString)(containerId);
|
|
1431
|
+
const loadingHtml = showLoading ? `<div class="mdx-loading">${(0, import_utils.escapeHtml)(loadingMessage)}</div>` : "";
|
|
1444
1432
|
return `
|
|
1445
|
-
<div id="${escapeHtml(containerId)}">${loadingHtml}</div>
|
|
1433
|
+
<div id="${(0, import_utils.escapeHtml)(containerId)}">${loadingHtml}</div>
|
|
1446
1434
|
<script type="module">
|
|
1447
1435
|
(async function() {
|
|
1448
1436
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/renderers/utils/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/renderers/utils/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAuCxD;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAa/D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA0CnD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAuCzD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG;IACrD,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,CAAC;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CA8DA"}
|
package/runtime/index.js
CHANGED
|
@@ -30,25 +30,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
30
|
));
|
|
31
31
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
32
|
|
|
33
|
-
// libs/uipack/src/utils/escape-html.ts
|
|
34
|
-
function escapeHtml(str) {
|
|
35
|
-
if (str === null || str === void 0) {
|
|
36
|
-
return "";
|
|
37
|
-
}
|
|
38
|
-
const s = String(str);
|
|
39
|
-
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
40
|
-
}
|
|
41
|
-
var init_escape_html = __esm({
|
|
42
|
-
"libs/uipack/src/utils/escape-html.ts"() {
|
|
43
|
-
"use strict";
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
|
|
47
33
|
// libs/uipack/src/utils/index.ts
|
|
34
|
+
var import_utils;
|
|
48
35
|
var init_utils = __esm({
|
|
49
36
|
"libs/uipack/src/utils/index.ts"() {
|
|
50
37
|
"use strict";
|
|
51
|
-
|
|
38
|
+
import_utils = require("@frontmcp/utils");
|
|
52
39
|
}
|
|
53
40
|
});
|
|
54
41
|
|
|
@@ -238,7 +225,7 @@ var init_helpers = __esm({
|
|
|
238
225
|
idCounter = 0;
|
|
239
226
|
builtinHelpers = {
|
|
240
227
|
// Escaping
|
|
241
|
-
escapeHtml,
|
|
228
|
+
escapeHtml: import_utils.escapeHtml,
|
|
242
229
|
// Formatting
|
|
243
230
|
formatDate,
|
|
244
231
|
formatCurrency,
|
|
@@ -409,7 +396,7 @@ __export(handlebars_exports, {
|
|
|
409
396
|
createHandlebarsRenderer: () => createHandlebarsRenderer,
|
|
410
397
|
defaultValue: () => defaultValue,
|
|
411
398
|
eq: () => eq,
|
|
412
|
-
escapeHtml: () => escapeHtml,
|
|
399
|
+
escapeHtml: () => import_utils.escapeHtml,
|
|
413
400
|
extractAll: () => extractAll,
|
|
414
401
|
extractExpressions: () => extractExpressions,
|
|
415
402
|
extractInputPaths: () => extractInputPaths,
|
|
@@ -1831,7 +1818,11 @@ FrontMcpBridge.prototype._setupDataToolCallHandler = function() {
|
|
|
1831
1818
|
};
|
|
1832
1819
|
`.trim();
|
|
1833
1820
|
}
|
|
1821
|
+
var MAX_MINIFY_CODE_LENGTH = 5e5;
|
|
1834
1822
|
function minifyJS(code) {
|
|
1823
|
+
if (code.length > MAX_MINIFY_CODE_LENGTH) {
|
|
1824
|
+
return code;
|
|
1825
|
+
}
|
|
1835
1826
|
return code.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/.*$/gm, "").replace(/\s+/g, " ").replace(/\s*([{};,:()[\]])\s*/g, "$1").replace(/;\}/g, "}").trim();
|
|
1836
1827
|
}
|
|
1837
1828
|
function generatePlatformBundle(platform, options = {}) {
|
|
@@ -2985,7 +2976,11 @@ function detectPIIType(value) {
|
|
|
2985
2976
|
if (isIPv4(value)) return "IP";
|
|
2986
2977
|
return null;
|
|
2987
2978
|
}
|
|
2979
|
+
var MAX_PII_TEXT_LENGTH = 1e5;
|
|
2988
2980
|
function redactPIIFromText(text) {
|
|
2981
|
+
if (text.length > MAX_PII_TEXT_LENGTH) {
|
|
2982
|
+
return text;
|
|
2983
|
+
}
|
|
2989
2984
|
let result = text;
|
|
2990
2985
|
result = result.replace(PII_PATTERNS.creditCardInText, REDACTION_TOKENS.CARD);
|
|
2991
2986
|
result = result.replace(PII_PATTERNS.ssnInText, REDACTION_TOKENS.ID);
|
|
@@ -3104,7 +3099,7 @@ function createTemplateHelpers() {
|
|
|
3104
3099
|
/**
|
|
3105
3100
|
* Escape HTML special characters to prevent XSS
|
|
3106
3101
|
*/
|
|
3107
|
-
escapeHtml,
|
|
3102
|
+
escapeHtml: import_utils.escapeHtml,
|
|
3108
3103
|
/**
|
|
3109
3104
|
* Format a date for display
|
|
3110
3105
|
*/
|
|
@@ -3208,7 +3203,7 @@ function wrapToolUI(options) {
|
|
|
3208
3203
|
widgetAccessible,
|
|
3209
3204
|
hostContext
|
|
3210
3205
|
});
|
|
3211
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3206
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3212
3207
|
return `<!DOCTYPE html>
|
|
3213
3208
|
<html lang="en">
|
|
3214
3209
|
<head>
|
|
@@ -3361,7 +3356,7 @@ function wrapToolUIUniversal(options) {
|
|
|
3361
3356
|
resourceMode
|
|
3362
3357
|
});
|
|
3363
3358
|
const bridgeScript = includeBridge ? BRIDGE_SCRIPT_TAGS.universal : "";
|
|
3364
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3359
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3365
3360
|
return `<!DOCTYPE html>
|
|
3366
3361
|
<html lang="en">
|
|
3367
3362
|
<head>
|
|
@@ -3475,7 +3470,7 @@ function wrapToolUIMinimal(options) {
|
|
|
3475
3470
|
window.__mcpWidgetAccessible = ${helpers.jsonEmbed(widgetAccessible)};
|
|
3476
3471
|
window.__mcpHostContext = ${helpers.jsonEmbed(contextData)};
|
|
3477
3472
|
</script>`;
|
|
3478
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
3473
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
3479
3474
|
return `<!DOCTYPE html>
|
|
3480
3475
|
<html lang="en">
|
|
3481
3476
|
<head>
|
|
@@ -3625,7 +3620,7 @@ function wrapLeanWidgetShell(options) {
|
|
|
3625
3620
|
<head>
|
|
3626
3621
|
<meta charset="UTF-8">
|
|
3627
3622
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3628
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
3623
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
3629
3624
|
${fontPreconnect}
|
|
3630
3625
|
${fontStylesheets}
|
|
3631
3626
|
${tailwindScript}
|
|
@@ -4026,7 +4021,7 @@ function wrapHybridWidgetShell(options) {
|
|
|
4026
4021
|
<head>
|
|
4027
4022
|
<meta charset="UTF-8">
|
|
4028
4023
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
4029
|
-
<title>${escapeHtml(title || toolName)}</title>
|
|
4024
|
+
<title>${(0, import_utils.escapeHtml)(title || toolName)}</title>
|
|
4030
4025
|
${fontPreconnect}
|
|
4031
4026
|
${fontStylesheets}
|
|
4032
4027
|
${tailwindScript}
|
|
@@ -4568,7 +4563,7 @@ function wrapStaticWidgetUniversal(options) {
|
|
|
4568
4563
|
}, 100);
|
|
4569
4564
|
}
|
|
4570
4565
|
</script>` : "";
|
|
4571
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Widget`;
|
|
4566
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Widget`;
|
|
4572
4567
|
const loaderHtml = isReactBased && componentCode && !hasEmbeddedData ? `
|
|
4573
4568
|
<!-- Loading State -->
|
|
4574
4569
|
<div id="frontmcp-loader" style="display: flex; align-items: center; justify-content: center; padding: 2rem; gap: 0.5rem;">
|
|
@@ -4667,7 +4662,7 @@ function wrapToolUIForClaude(options) {
|
|
|
4667
4662
|
window.__mcpToolInput = ${helpers.jsonEmbed(input)};
|
|
4668
4663
|
window.__mcpToolOutput = ${helpers.jsonEmbed(output)};
|
|
4669
4664
|
</script>`;
|
|
4670
|
-
const pageTitle = title || `${escapeHtml(toolName)} - Tool Result`;
|
|
4665
|
+
const pageTitle = title || `${(0, import_utils.escapeHtml)(toolName)} - Tool Result`;
|
|
4671
4666
|
return `<!DOCTYPE html>
|
|
4672
4667
|
<html lang="en">
|
|
4673
4668
|
<head>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/runtime/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;CAOnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CA8BxB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,gBAAgB,GAAG,IAAI,CAOjF;
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/runtime/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;CAOnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CA8BxB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,gBAAgB,GAAG,IAAI,CAOjF;AAQD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBtD;AA0FD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,GAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAkB,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,IAAI,GAAE,IAAI,GAAG,MAAM,EAAE,GAAG,WAAkB,GACzC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA0CA"}
|
package/theme/css-to-theme.d.ts
CHANGED
|
@@ -44,33 +44,6 @@ export interface CssToThemeResult {
|
|
|
44
44
|
*/
|
|
45
45
|
colorVars: Map<string, string>;
|
|
46
46
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Extract --color-* variables from user CSS and convert to Tailwind @theme block.
|
|
49
|
-
*
|
|
50
|
-
* This function:
|
|
51
|
-
* 1. Finds all --color-* variable declarations in the CSS
|
|
52
|
-
* 2. Creates a @theme block with these variables (for Tailwind v4 to process)
|
|
53
|
-
* 3. Returns the remaining CSS without color variables
|
|
54
|
-
*
|
|
55
|
-
* The @theme block should be placed inside <style type="text/tailwindcss">,
|
|
56
|
-
* which tells Tailwind v4 to:
|
|
57
|
-
* - Create native utility classes (bg-primary, text-primary, etc.)
|
|
58
|
-
* - Support opacity modifiers (bg-primary/10, text-success/50)
|
|
59
|
-
*
|
|
60
|
-
* @param userCss - CSS string containing :root with --color-* variables
|
|
61
|
-
* @returns Object with themeBlock, remainingCss, and colorVars map
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const result = cssToTailwindTheme(`:root {
|
|
66
|
-
* --color-primary: #0556b2;
|
|
67
|
-
* --font-size: 16px;
|
|
68
|
-
* }`);
|
|
69
|
-
*
|
|
70
|
-
* // result.themeBlock: "@theme {\n --color-primary: #0556b2;\n}"
|
|
71
|
-
* // result.remainingCss: ":root {\n --font-size: 16px;\n}"
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
47
|
export declare function cssToTailwindTheme(userCss: string): CssToThemeResult;
|
|
75
48
|
/**
|
|
76
49
|
* Build a complete Tailwind style block from user CSS.
|