@frontmcp/ui 1.0.0-beta.13 → 1.0.0-beta.14
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/components/Modal/Modal.d.ts +1 -1
- package/esm/index.mjs +17 -3
- package/esm/package.json +2 -2
- package/esm/react/index.mjs +17 -3
- package/index.js +17 -3
- package/package.json +2 -2
- package/react/hooks/context.d.ts.map +1 -1
- package/react/hooks/tools.d.ts.map +1 -1
- package/react/index.js +17 -3
|
@@ -15,7 +15,7 @@ export interface ModalProps {
|
|
|
15
15
|
slotProps?: ModalSlotProps;
|
|
16
16
|
children: React.ReactNode;
|
|
17
17
|
}
|
|
18
|
-
declare const StyledDialogTitle: import("@emotion/styled").StyledComponent<Pick<import("@mui/material/DialogTitle").DialogTitleOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "width" | "height" | "children" | "className" | "style" | "classes" | "sx" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "
|
|
18
|
+
declare const StyledDialogTitle: import("@emotion/styled").StyledComponent<Pick<import("@mui/material/DialogTitle").DialogTitleOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "width" | "height" | "children" | "top" | "className" | "style" | "classes" | "sx" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "visibility" | "whiteSpace" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "variant" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping">, "id" | "width" | "height" | "children" | "onError" | "top" | "ref" | "key" | "className" | "style" | "classes" | "sx" | "tabIndex" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "color" | "columnGap" | "content" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "translate" | "visibility" | "whiteSpace" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "variant" | "slot" | "title" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "enterKeyHint" | "hidden" | "lang" | "nonce" | "spellCheck" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
|
|
19
19
|
declare const StyledDialogContent: import("@emotion/styled").StyledComponent<Pick<import("@mui/material/DialogContent").DialogContentProps, keyof import("@mui/material/DialogContent").DialogContentProps> & import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, {}, {}>;
|
|
20
20
|
export declare function Modal({ open, onClose, title, actions, maxWidth, fullWidth, slotProps, children, }: ModalProps): React.ReactElement;
|
|
21
21
|
export {};
|
package/esm/index.mjs
CHANGED
|
@@ -555,10 +555,25 @@ import { createContext, useContext, useEffect, useState, useMemo } from "react";
|
|
|
555
555
|
import { jsx } from "react/jsx-runtime";
|
|
556
556
|
var McpBridgeContext = createContext(null);
|
|
557
557
|
function McpBridgeProvider({ children, config, onReady, onError }) {
|
|
558
|
-
const
|
|
559
|
-
const
|
|
558
|
+
const existingBridge = globalThis["FrontMcpBridge"];
|
|
559
|
+
const hasExisting = !!(existingBridge && typeof existingBridge.callTool === "function");
|
|
560
|
+
const [bridge, setBridge] = useState(hasExisting ? existingBridge : null);
|
|
561
|
+
const [loading, setLoading] = useState(!hasExisting);
|
|
560
562
|
const [error, setError] = useState(null);
|
|
561
563
|
useEffect(() => {
|
|
564
|
+
if (hasExisting) {
|
|
565
|
+
if (existingBridge.initialized) {
|
|
566
|
+
onReady?.(existingBridge);
|
|
567
|
+
} else {
|
|
568
|
+
const handler = () => {
|
|
569
|
+
onReady?.(existingBridge);
|
|
570
|
+
setBridge(existingBridge);
|
|
571
|
+
};
|
|
572
|
+
window.addEventListener("bridge:ready", handler, { once: true });
|
|
573
|
+
return () => window.removeEventListener("bridge:ready", handler);
|
|
574
|
+
}
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
562
577
|
let mounted = true;
|
|
563
578
|
let bridgeInstance = null;
|
|
564
579
|
const initBridge = async () => {
|
|
@@ -720,7 +735,6 @@ function useStructuredContent() {
|
|
|
720
735
|
function useCallTool(toolName, options = {}) {
|
|
721
736
|
const { bridge, ready } = useMcpBridgeContext();
|
|
722
737
|
const { onSuccess, onError, resetOnToolChange = true } = options;
|
|
723
|
-
console.log("useCallTool", toolName, bridge);
|
|
724
738
|
const [state, setState] = useState2({
|
|
725
739
|
data: null,
|
|
726
740
|
loading: false,
|
package/esm/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/ui",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.14",
|
|
4
4
|
"description": "FrontMCP UI - MUI-based React components, renderers, and MCP bridge for MCP applications",
|
|
5
5
|
"author": "AgentFront <info@agentfront.dev>",
|
|
6
6
|
"homepage": "https://docs.agentfront.dev",
|
|
@@ -417,7 +417,7 @@
|
|
|
417
417
|
}
|
|
418
418
|
},
|
|
419
419
|
"optionalDependencies": {
|
|
420
|
-
"@frontmcp/uipack": "1.0.0-beta.
|
|
420
|
+
"@frontmcp/uipack": "1.0.0-beta.14"
|
|
421
421
|
},
|
|
422
422
|
"devDependencies": {
|
|
423
423
|
"@types/react": "^19.0.0",
|
package/esm/react/index.mjs
CHANGED
|
@@ -541,10 +541,25 @@ var FrontMcpBridge = class {
|
|
|
541
541
|
import { jsx } from "react/jsx-runtime";
|
|
542
542
|
var McpBridgeContext = createContext(null);
|
|
543
543
|
function McpBridgeProvider({ children, config, onReady, onError }) {
|
|
544
|
-
const
|
|
545
|
-
const
|
|
544
|
+
const existingBridge = globalThis["FrontMcpBridge"];
|
|
545
|
+
const hasExisting = !!(existingBridge && typeof existingBridge.callTool === "function");
|
|
546
|
+
const [bridge, setBridge] = useState(hasExisting ? existingBridge : null);
|
|
547
|
+
const [loading, setLoading] = useState(!hasExisting);
|
|
546
548
|
const [error, setError] = useState(null);
|
|
547
549
|
useEffect(() => {
|
|
550
|
+
if (hasExisting) {
|
|
551
|
+
if (existingBridge.initialized) {
|
|
552
|
+
onReady?.(existingBridge);
|
|
553
|
+
} else {
|
|
554
|
+
const handler = () => {
|
|
555
|
+
onReady?.(existingBridge);
|
|
556
|
+
setBridge(existingBridge);
|
|
557
|
+
};
|
|
558
|
+
window.addEventListener("bridge:ready", handler, { once: true });
|
|
559
|
+
return () => window.removeEventListener("bridge:ready", handler);
|
|
560
|
+
}
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
548
563
|
let mounted = true;
|
|
549
564
|
let bridgeInstance = null;
|
|
550
565
|
const initBridge = async () => {
|
|
@@ -706,7 +721,6 @@ function useStructuredContent() {
|
|
|
706
721
|
function useCallTool(toolName, options = {}) {
|
|
707
722
|
const { bridge, ready } = useMcpBridgeContext();
|
|
708
723
|
const { onSuccess, onError, resetOnToolChange = true } = options;
|
|
709
|
-
console.log("useCallTool", toolName, bridge);
|
|
710
724
|
const [state, setState] = useState2({
|
|
711
725
|
data: null,
|
|
712
726
|
loading: false,
|
package/index.js
CHANGED
|
@@ -598,10 +598,25 @@ var import_react = require("react");
|
|
|
598
598
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
599
599
|
var McpBridgeContext = (0, import_react.createContext)(null);
|
|
600
600
|
function McpBridgeProvider({ children, config, onReady, onError }) {
|
|
601
|
-
const
|
|
602
|
-
const
|
|
601
|
+
const existingBridge = globalThis["FrontMcpBridge"];
|
|
602
|
+
const hasExisting = !!(existingBridge && typeof existingBridge.callTool === "function");
|
|
603
|
+
const [bridge, setBridge] = (0, import_react.useState)(hasExisting ? existingBridge : null);
|
|
604
|
+
const [loading, setLoading] = (0, import_react.useState)(!hasExisting);
|
|
603
605
|
const [error, setError] = (0, import_react.useState)(null);
|
|
604
606
|
(0, import_react.useEffect)(() => {
|
|
607
|
+
if (hasExisting) {
|
|
608
|
+
if (existingBridge.initialized) {
|
|
609
|
+
onReady?.(existingBridge);
|
|
610
|
+
} else {
|
|
611
|
+
const handler = () => {
|
|
612
|
+
onReady?.(existingBridge);
|
|
613
|
+
setBridge(existingBridge);
|
|
614
|
+
};
|
|
615
|
+
window.addEventListener("bridge:ready", handler, { once: true });
|
|
616
|
+
return () => window.removeEventListener("bridge:ready", handler);
|
|
617
|
+
}
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
605
620
|
let mounted = true;
|
|
606
621
|
let bridgeInstance = null;
|
|
607
622
|
const initBridge = async () => {
|
|
@@ -763,7 +778,6 @@ function useStructuredContent() {
|
|
|
763
778
|
function useCallTool(toolName, options = {}) {
|
|
764
779
|
const { bridge, ready } = useMcpBridgeContext();
|
|
765
780
|
const { onSuccess, onError, resetOnToolChange = true } = options;
|
|
766
|
-
console.log("useCallTool", toolName, bridge);
|
|
767
781
|
const [state, setState] = (0, import_react2.useState)({
|
|
768
782
|
data: null,
|
|
769
783
|
loading: false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/ui",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.14",
|
|
4
4
|
"description": "FrontMCP UI - MUI-based React components, renderers, and MCP bridge for MCP applications",
|
|
5
5
|
"author": "AgentFront <info@agentfront.dev>",
|
|
6
6
|
"homepage": "https://docs.agentfront.dev",
|
|
@@ -417,7 +417,7 @@
|
|
|
417
417
|
}
|
|
418
418
|
},
|
|
419
419
|
"optionalDependencies": {
|
|
420
|
-
"@frontmcp/uipack": "1.0.0-beta.
|
|
420
|
+
"@frontmcp/uipack": "1.0.0-beta.14"
|
|
421
421
|
},
|
|
422
422
|
"devDependencies": {
|
|
423
423
|
"@types/react": "^19.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,EACV,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,WAAW,EACZ,MAAM,cAAc,CAAC;AAOtB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACvC,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mCAAmC;IACnC,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uBAAuB;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpD,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/context.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChG,OAAO,KAAK,EACV,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,WAAW,EACZ,MAAM,cAAc,CAAC;AAOtB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACvC,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mCAAmC;IACnC,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uBAAuB;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpD,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CA8E/F;AAoBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,IAAI,qBAAqB,CAS3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,IAAI,uBAAuB,GAAG,IAAI,CAG7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,IAAI,OAAO,GAAG,MAAM,CAqB3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAsBnD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAGrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/tools.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,uBAAuB;IACvB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,qDAAqD;IACrD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,IAAI;IAC9D,gCAAgC;IAChC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACzC,yBAAyB;IACzB,SAAS,CAAC,OAAO,CAAC;IAClB,oCAAoC;IACpC,MAAM,IAAI;CACX,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAYnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CA0BrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CAgB5D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,EAC5F,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/tools.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AASH;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,uBAAuB;IACvB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,qDAAqD;IACrD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,IAAI;IAC9D,gCAAgC;IAChC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACzC,yBAAyB;IACzB,SAAS,CAAC,OAAO,CAAC;IAClB,oCAAoC;IACpC,MAAM,IAAI;CACX,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAYnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CA0BrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,IAAI,CAgB5D;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,EAC5F,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CA+EpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3D,OAAO,EAAE,CAAC,GACT;KACA,CAAC,IAAI,MAAM,CAAC,GAAG;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB;CACF,CAuFA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,IAAI;IAChC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAClC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE;CACzD,CA6BA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,IAAI,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAc5D"}
|
package/react/index.js
CHANGED
|
@@ -580,10 +580,25 @@ var FrontMcpBridge = class {
|
|
|
580
580
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
581
581
|
var McpBridgeContext = (0, import_react.createContext)(null);
|
|
582
582
|
function McpBridgeProvider({ children, config, onReady, onError }) {
|
|
583
|
-
const
|
|
584
|
-
const
|
|
583
|
+
const existingBridge = globalThis["FrontMcpBridge"];
|
|
584
|
+
const hasExisting = !!(existingBridge && typeof existingBridge.callTool === "function");
|
|
585
|
+
const [bridge, setBridge] = (0, import_react.useState)(hasExisting ? existingBridge : null);
|
|
586
|
+
const [loading, setLoading] = (0, import_react.useState)(!hasExisting);
|
|
585
587
|
const [error, setError] = (0, import_react.useState)(null);
|
|
586
588
|
(0, import_react.useEffect)(() => {
|
|
589
|
+
if (hasExisting) {
|
|
590
|
+
if (existingBridge.initialized) {
|
|
591
|
+
onReady?.(existingBridge);
|
|
592
|
+
} else {
|
|
593
|
+
const handler = () => {
|
|
594
|
+
onReady?.(existingBridge);
|
|
595
|
+
setBridge(existingBridge);
|
|
596
|
+
};
|
|
597
|
+
window.addEventListener("bridge:ready", handler, { once: true });
|
|
598
|
+
return () => window.removeEventListener("bridge:ready", handler);
|
|
599
|
+
}
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
587
602
|
let mounted = true;
|
|
588
603
|
let bridgeInstance = null;
|
|
589
604
|
const initBridge = async () => {
|
|
@@ -745,7 +760,6 @@ function useStructuredContent() {
|
|
|
745
760
|
function useCallTool(toolName, options = {}) {
|
|
746
761
|
const { bridge, ready } = useMcpBridgeContext();
|
|
747
762
|
const { onSuccess, onError, resetOnToolChange = true } = options;
|
|
748
|
-
console.log("useCallTool", toolName, bridge);
|
|
749
763
|
const [state, setState] = (0, import_react2.useState)({
|
|
750
764
|
data: null,
|
|
751
765
|
loading: false,
|