@reforma/components 0.4.1 → 0.5.0
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/dist/RichInput/RichInput.d.ts +1 -1
- package/dist/RichInput/RichInput.d.ts.map +1 -1
- package/dist/RichInput/RichInput.js +126 -123
- package/dist/RichInput/RichInput.js.map +1 -1
- package/dist/chat/ComposerBanner/ComposerBanner.d.ts +6 -1
- package/dist/chat/ComposerBanner/ComposerBanner.d.ts.map +1 -1
- package/dist/chat/ComposerBanner/ComposerBanner.js +60 -40
- package/dist/chat/ComposerBanner/ComposerBanner.js.map +1 -1
- package/dist/chat/ComposerBanner/ComposerBanner.module.css +1 -1
- package/dist/chat/ComposerBanner/ComposerBanner.module.css.js +13 -9
- package/dist/chat/ComposerBanner/ComposerBanner.module.css.js.map +1 -1
- package/dist/chat/Conversation/ConversationPendingLoader.d.ts.map +1 -1
- package/dist/chat/Conversation/ConversationPendingLoader.js +1 -1
- package/dist/chat/Conversation/ConversationPendingLoader.js.map +1 -1
- package/dist/chat/Message/normalize/normalizeMessageParts.d.ts +1 -1
- package/dist/chat/Message/normalize/normalizeMessageParts.d.ts.map +1 -1
- package/dist/chat/Message/normalize/normalizeMessageParts.js +1 -1
- package/dist/chat/Message/normalize/normalizeMessageParts.js.map +1 -1
- package/dist/chat/Message/parts/MessagePart.d.ts.map +1 -1
- package/dist/chat/Message/parts/MessagePart.js +1 -1
- package/dist/chat/Message/parts/MessagePart.js.map +1 -1
- package/dist/chat/Message/parts/backgroundResultPart.js +1 -1
- package/dist/chat/Message/parts/backgroundResultPart.js.map +1 -1
- package/dist/chat/Message/parts/collectMessageSources.d.ts +1 -1
- package/dist/chat/Message/parts/collectMessageSources.d.ts.map +1 -1
- package/dist/chat/Message/parts/collectMessageSources.js +1 -1
- package/dist/chat/Message/parts/collectMessageSources.js.map +1 -1
- package/dist/chat/Message/parts/contextCompactionPart.js +1 -1
- package/dist/chat/Message/parts/contextCompactionPart.js.map +1 -1
- package/dist/chat/Message/segments/analyzeGroupedSegment.js +5 -5
- package/dist/chat/Message/segments/analyzeGroupedSegment.js.map +1 -1
- package/dist/chat/Message/segments/recentStreamingPhaseToolGroups.js +1 -1
- package/dist/chat/Message/segments/recentStreamingPhaseToolGroups.js.map +1 -1
- package/dist/chat/Message/turn/workedCollapse.js +1 -1
- package/dist/chat/Message/turn/workedCollapse.js.map +1 -1
- package/dist/chat/Tool/Tool.js +1 -1
- package/dist/chat/Tool/Tool.js.map +1 -1
- package/dist/chat/Tool/agent/AgentTool.d.ts.map +1 -1
- package/dist/chat/Tool/agent/AgentTool.js +73 -73
- package/dist/chat/Tool/agent/AgentTool.js.map +1 -1
- package/dist/chat/Tool/bash/BashTool.d.ts.map +1 -1
- package/dist/chat/Tool/bash/BashTool.js +1 -1
- package/dist/chat/Tool/bash/BashTool.js.map +1 -1
- package/dist/chat/Tool/create-directory/CreateDirectoryTool.js +1 -1
- package/dist/chat/Tool/create-directory/CreateDirectoryTool.js.map +1 -1
- package/dist/chat/Tool/default/Default.d.ts.map +1 -1
- package/dist/chat/Tool/default/Default.js +1 -1
- package/dist/chat/Tool/default/Default.js.map +1 -1
- package/dist/chat/Tool/dev-server/DevServerRestartTool.js +1 -1
- package/dist/chat/Tool/dev-server/DevServerRestartTool.js.map +1 -1
- package/dist/chat/Tool/dev-server/DevServerStatusTool.js +1 -1
- package/dist/chat/Tool/dev-server/DevServerStatusTool.js.map +1 -1
- package/dist/chat/Tool/edit/EditTool.js +1 -1
- package/dist/chat/Tool/edit/EditTool.js.map +1 -1
- package/dist/chat/Tool/fetch/FetchTool.js +1 -1
- package/dist/chat/Tool/fetch/FetchTool.js.map +1 -1
- package/dist/chat/Tool/fileChangesFromToolParts.js +1 -1
- package/dist/chat/Tool/fileChangesFromToolParts.js.map +1 -1
- package/dist/chat/Tool/get-background-result/GetBackgroundResultTool.js +1 -1
- package/dist/chat/Tool/get-background-result/GetBackgroundResultTool.js.map +1 -1
- package/dist/chat/Tool/get-errors/GetErrorsTool.js +1 -1
- package/dist/chat/Tool/get-errors/GetErrorsTool.js.map +1 -1
- package/dist/chat/Tool/glob/GlobTool.js +1 -1
- package/dist/chat/Tool/glob/GlobTool.js.map +1 -1
- package/dist/chat/Tool/grep/GrepTool.js +1 -1
- package/dist/chat/Tool/grep/GrepTool.js.map +1 -1
- package/dist/chat/Tool/helpers.d.ts +1 -1
- package/dist/chat/Tool/helpers.d.ts.map +1 -1
- package/dist/chat/Tool/helpers.js +1 -1
- package/dist/chat/Tool/helpers.js.map +1 -1
- package/dist/chat/Tool/image-asset/ImageAssetTool.js +1 -1
- package/dist/chat/Tool/image-asset/ImageAssetTool.js.map +1 -1
- package/dist/chat/Tool/install-dependencies/InstallDependenciesTool.js +1 -1
- package/dist/chat/Tool/install-dependencies/InstallDependenciesTool.js.map +1 -1
- package/dist/chat/Tool/install-plugin/InstallPlugin.js +1 -1
- package/dist/chat/Tool/install-plugin/InstallPlugin.js.map +1 -1
- package/dist/chat/Tool/integration-card/IntegrationActionCard.d.ts +3 -1
- package/dist/chat/Tool/integration-card/IntegrationActionCard.d.ts.map +1 -1
- package/dist/chat/Tool/integration-card/IntegrationActionCard.js +88 -82
- package/dist/chat/Tool/integration-card/IntegrationActionCard.js.map +1 -1
- package/dist/chat/Tool/list-directory/normalizeListDirectoryTools.js +1 -1
- package/dist/chat/Tool/list-directory/normalizeListDirectoryTools.js.map +1 -1
- package/dist/chat/Tool/mcp-tools/CallDynamicTool.js +1 -1
- package/dist/chat/Tool/mcp-tools/CallDynamicTool.js.map +1 -1
- package/dist/chat/Tool/mcp-tools/GetDynamicToolsTool.js +1 -1
- package/dist/chat/Tool/mcp-tools/GetDynamicToolsTool.js.map +1 -1
- package/dist/chat/Tool/mcp-tools/GetMcpResourcesTool.js +1 -1
- package/dist/chat/Tool/mcp-tools/GetMcpResourcesTool.js.map +1 -1
- package/dist/chat/Tool/mcp-tools/McpAuth.js +1 -1
- package/dist/chat/Tool/mcp-tools/McpAuth.js.map +1 -1
- package/dist/chat/Tool/memory/MemoryTool.js +1 -1
- package/dist/chat/Tool/memory/MemoryTool.js.map +1 -1
- package/dist/chat/Tool/move-file/MoveFileTool.js +1 -1
- package/dist/chat/Tool/move-file/MoveFileTool.js.map +1 -1
- package/dist/chat/Tool/plan/CreatePlanTool.js +1 -1
- package/dist/chat/Tool/plan/CreatePlanTool.js.map +1 -1
- package/dist/chat/Tool/preamble/PreambleTool.js +1 -1
- package/dist/chat/Tool/preamble/PreambleTool.js.map +1 -1
- package/dist/chat/Tool/project-build/BuildTool.js +1 -1
- package/dist/chat/Tool/project-build/BuildTool.js.map +1 -1
- package/dist/chat/Tool/project-env/ProjectEnvTool.js +1 -1
- package/dist/chat/Tool/project-env/ProjectEnvTool.js.map +1 -1
- package/dist/chat/Tool/read/normalizeReadTools.js +1 -1
- package/dist/chat/Tool/read/normalizeReadTools.js.map +1 -1
- package/dist/chat/Tool/read-lints/ReadLintsTool.js +1 -1
- package/dist/chat/Tool/read-lints/ReadLintsTool.js.map +1 -1
- package/dist/chat/Tool/remove-file/RemoveFileTool.js +1 -1
- package/dist/chat/Tool/remove-file/RemoveFileTool.js.map +1 -1
- package/dist/chat/Tool/scaffold-project/ScaffoldProjectTool.js +1 -1
- package/dist/chat/Tool/scaffold-project/ScaffoldProjectTool.js.map +1 -1
- package/dist/chat/Tool/screenshot/CaptureScreenshotTool.js +3 -3
- package/dist/chat/Tool/screenshot/CaptureScreenshotTool.js.map +1 -1
- package/dist/chat/Tool/skill/SkillTool.js +1 -1
- package/dist/chat/Tool/skill/SkillTool.js.map +1 -1
- package/dist/chat/Tool/waiting/WaitingTool.js +1 -1
- package/dist/chat/Tool/waiting/WaitingTool.js.map +1 -1
- package/dist/chat/Tool/web-search/WebSearchTool.js +1 -1
- package/dist/chat/Tool/web-search/WebSearchTool.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,150 +1,156 @@
|
|
|
1
|
-
import { Mcp as
|
|
2
|
-
import { isHttpUrl as
|
|
1
|
+
import { Mcp as k } from "@reforma/icons/14";
|
|
2
|
+
import { isHttpUrl as N } from "@reforma/lib";
|
|
3
3
|
import "react";
|
|
4
|
-
import { Box as
|
|
5
|
-
import { Button as
|
|
4
|
+
import { Box as s } from "../../../Box/Box.js";
|
|
5
|
+
import { Button as b } from "../../../Button/Button.js";
|
|
6
6
|
import { Card as j } from "../../../Card/Card.js";
|
|
7
|
-
import { Image as
|
|
8
|
-
import { Show as
|
|
9
|
-
import { Text as
|
|
10
|
-
import
|
|
11
|
-
import { jsxs as
|
|
12
|
-
const
|
|
13
|
-
function
|
|
14
|
-
logo:
|
|
15
|
-
logoSmall:
|
|
7
|
+
import { Image as z } from "../../../Image/Image.js";
|
|
8
|
+
import { Show as u } from "../../../Show/Show.js";
|
|
9
|
+
import { Text as f } from "../../../Text/Text.js";
|
|
10
|
+
import m from "./IntegrationActionCard.module.css.js";
|
|
11
|
+
import { jsxs as e, jsx as r } from "react/jsx-runtime";
|
|
12
|
+
const A = 20;
|
|
13
|
+
function W({
|
|
14
|
+
logo: i,
|
|
15
|
+
logoSmall: n,
|
|
16
16
|
brandColor: c,
|
|
17
17
|
brandColorDark: o,
|
|
18
|
-
size:
|
|
18
|
+
size: a = A,
|
|
19
19
|
framed: l = !0
|
|
20
20
|
}) {
|
|
21
|
-
const
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
className: l ?
|
|
21
|
+
const h = !l && n && N(n) ? n : void 0, t = h ?? (i && N(i) ? i : void 0), d = !!((c || o) && !h);
|
|
22
|
+
return /* @__PURE__ */ r("span", {
|
|
23
|
+
className: l ? m.icon : m.compact,
|
|
24
24
|
style: {
|
|
25
25
|
...l ? {} : {
|
|
26
|
-
"--catalog-icon-size": `${
|
|
26
|
+
"--catalog-icon-size": `${a}px`
|
|
27
27
|
},
|
|
28
|
-
...
|
|
28
|
+
...d && c ? {
|
|
29
29
|
"--catalog-brand": c
|
|
30
30
|
} : {},
|
|
31
|
-
...
|
|
31
|
+
...d && o ? {
|
|
32
32
|
"--catalog-brand-dark": o
|
|
33
33
|
} : {}
|
|
34
34
|
},
|
|
35
|
-
children: /* @__PURE__ */
|
|
36
|
-
when:
|
|
37
|
-
fallback: /* @__PURE__ */
|
|
38
|
-
size:
|
|
35
|
+
children: /* @__PURE__ */ r(u, {
|
|
36
|
+
when: t,
|
|
37
|
+
fallback: /* @__PURE__ */ r(k, {
|
|
38
|
+
size: a,
|
|
39
39
|
"aria-hidden": !0
|
|
40
40
|
}),
|
|
41
|
-
children: (
|
|
42
|
-
src:
|
|
41
|
+
children: (p) => /* @__PURE__ */ r(z, {
|
|
42
|
+
src: p,
|
|
43
43
|
alt: "",
|
|
44
|
-
width:
|
|
45
|
-
height:
|
|
44
|
+
width: a,
|
|
45
|
+
height: a
|
|
46
46
|
})
|
|
47
47
|
})
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
-
function
|
|
51
|
-
name:
|
|
52
|
-
description:
|
|
50
|
+
function F({
|
|
51
|
+
name: i,
|
|
52
|
+
description: n,
|
|
53
53
|
logo: c,
|
|
54
54
|
brandColor: o,
|
|
55
|
-
brandColorDark:
|
|
55
|
+
brandColorDark: a,
|
|
56
56
|
primaryLabel: l,
|
|
57
|
-
skipLabel:
|
|
58
|
-
spacious:
|
|
59
|
-
icon:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
skipLabel: h = "Skip",
|
|
58
|
+
spacious: t = !1,
|
|
59
|
+
icon: d,
|
|
60
|
+
badge: p,
|
|
61
|
+
onSkip: v,
|
|
62
|
+
onPrimary: w,
|
|
63
|
+
isPending: g = !1,
|
|
63
64
|
isPrimaryDisabled: B = !1,
|
|
64
|
-
"data-slot":
|
|
65
|
+
"data-slot": x
|
|
65
66
|
}) {
|
|
66
|
-
const
|
|
67
|
-
when:
|
|
68
|
-
fallback: /* @__PURE__ */
|
|
67
|
+
const I = /* @__PURE__ */ r(u, {
|
|
68
|
+
when: d,
|
|
69
|
+
fallback: /* @__PURE__ */ r(W, {
|
|
69
70
|
logo: c,
|
|
70
71
|
brandColor: o,
|
|
71
|
-
brandColorDark:
|
|
72
|
+
brandColorDark: a
|
|
72
73
|
}),
|
|
73
|
-
children:
|
|
74
|
-
}),
|
|
75
|
-
when:
|
|
76
|
-
children: /* @__PURE__ */
|
|
74
|
+
children: d
|
|
75
|
+
}), y = /* @__PURE__ */ r(u, {
|
|
76
|
+
when: v && w,
|
|
77
|
+
children: /* @__PURE__ */ e(s, {
|
|
77
78
|
direction: "row",
|
|
78
79
|
gap: "sm",
|
|
79
|
-
justify:
|
|
80
|
-
className:
|
|
81
|
-
children: [/* @__PURE__ */
|
|
82
|
-
size:
|
|
83
|
-
variant: "ghost",
|
|
80
|
+
justify: t ? "end" : void 0,
|
|
81
|
+
className: m.actions,
|
|
82
|
+
children: [/* @__PURE__ */ r(b, {
|
|
83
|
+
size: t ? "md" : "sm",
|
|
84
|
+
variant: t ? "bordered" : "ghost",
|
|
84
85
|
color: "secondary",
|
|
85
|
-
isDisabled:
|
|
86
|
-
onPress:
|
|
87
|
-
children:
|
|
88
|
-
}), /* @__PURE__ */
|
|
89
|
-
size:
|
|
86
|
+
isDisabled: g,
|
|
87
|
+
onPress: v,
|
|
88
|
+
children: h
|
|
89
|
+
}), /* @__PURE__ */ r(b, {
|
|
90
|
+
size: t ? "md" : "sm",
|
|
90
91
|
variant: "filled",
|
|
91
92
|
color: "contrast",
|
|
92
|
-
isPending:
|
|
93
|
-
isDisabled:
|
|
94
|
-
onPress:
|
|
93
|
+
isPending: g,
|
|
94
|
+
isDisabled: g || B,
|
|
95
|
+
onPress: w,
|
|
95
96
|
children: l
|
|
96
97
|
})]
|
|
97
98
|
})
|
|
98
99
|
});
|
|
99
|
-
return
|
|
100
|
+
return t ? /* @__PURE__ */ e(j, {
|
|
100
101
|
variant: "filled",
|
|
101
102
|
size: "lg",
|
|
102
103
|
direction: "column",
|
|
103
104
|
align: "stretch",
|
|
104
105
|
gap: "xl",
|
|
105
106
|
fullWidth: !0,
|
|
106
|
-
className:
|
|
107
|
-
"data-slot":
|
|
108
|
-
children: [/* @__PURE__ */
|
|
107
|
+
className: m.root,
|
|
108
|
+
"data-slot": x,
|
|
109
|
+
children: [/* @__PURE__ */ e(s, {
|
|
109
110
|
gap: "lg",
|
|
110
|
-
children: [
|
|
111
|
+
children: [I, /* @__PURE__ */ e(s, {
|
|
111
112
|
gap: "xs",
|
|
112
|
-
children: [/* @__PURE__ */
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
children: [/* @__PURE__ */ e(s, {
|
|
114
|
+
direction: "row",
|
|
115
|
+
align: "center",
|
|
116
|
+
gap: "sm",
|
|
117
|
+
children: [/* @__PURE__ */ r(f, {
|
|
118
|
+
variant: "heading-4",
|
|
119
|
+
children: i
|
|
120
|
+
}), p]
|
|
121
|
+
}), /* @__PURE__ */ r(f, {
|
|
116
122
|
variant: "md",
|
|
117
123
|
color: "secondary",
|
|
118
|
-
children:
|
|
124
|
+
children: n
|
|
119
125
|
})]
|
|
120
126
|
})]
|
|
121
|
-
}),
|
|
122
|
-
}) : /* @__PURE__ */
|
|
127
|
+
}), y]
|
|
128
|
+
}) : /* @__PURE__ */ e(j, {
|
|
123
129
|
variant: "filled",
|
|
124
130
|
size: "sm",
|
|
125
131
|
direction: "row",
|
|
126
132
|
align: "center",
|
|
127
133
|
gap: "md",
|
|
128
134
|
fullWidth: !0,
|
|
129
|
-
className:
|
|
130
|
-
"data-slot":
|
|
131
|
-
children: [
|
|
135
|
+
className: m.root,
|
|
136
|
+
"data-slot": x,
|
|
137
|
+
children: [I, /* @__PURE__ */ e(s, {
|
|
132
138
|
grow: !0,
|
|
133
|
-
children: [/* @__PURE__ */
|
|
139
|
+
children: [/* @__PURE__ */ r(f, {
|
|
134
140
|
variant: "heading-5",
|
|
135
141
|
truncate: !0,
|
|
136
|
-
children:
|
|
137
|
-
}), /* @__PURE__ */
|
|
142
|
+
children: i
|
|
143
|
+
}), /* @__PURE__ */ r(f, {
|
|
138
144
|
variant: "md",
|
|
139
145
|
color: "secondary",
|
|
140
146
|
truncate: !0,
|
|
141
|
-
children:
|
|
147
|
+
children: n
|
|
142
148
|
})]
|
|
143
|
-
}),
|
|
149
|
+
}), y]
|
|
144
150
|
});
|
|
145
151
|
}
|
|
146
152
|
export {
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
F as IntegrationActionCard,
|
|
154
|
+
W as IntegrationActionIcon
|
|
149
155
|
};
|
|
150
156
|
//# sourceMappingURL=IntegrationActionCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntegrationActionCard.js","sources":["../../../../src/chat/Tool/integration-card/IntegrationActionCard.tsx"],"sourcesContent":["import { Mcp } from '@reforma/icons/14';\nimport { isHttpUrl } from '@reforma/lib';\nimport { type CSSProperties, type ReactNode } from 'react';\n\nimport { Box } from '../../../Box';\nimport { Button } from '../../../Button';\nimport { Card } from '../../../Card';\nimport { Image } from '../../../Image';\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport styles from './IntegrationActionCard.module.css';\n\nconst ICON_SIZE = 20;\n\nexport type IntegrationActionCardProps = {\n name: string;\n description: string;\n logo?: string;\n logoSmall?: string;\n brandColor?: string;\n brandColorDark?: string;\n primaryLabel?: string;\n skipLabel?: string;\n /** Taller card: wrapping copy and room for a long skip label. */\n spacious?: boolean;\n /** Replaces the catalog mark. */\n icon?: ReactNode;\n onSkip?: () => void;\n onPrimary?: () => void;\n isPending?: boolean;\n isPrimaryDisabled?: boolean;\n 'data-slot'?: string;\n};\n\nexport function IntegrationActionIcon({\n logo,\n logoSmall,\n brandColor,\n brandColorDark,\n size = ICON_SIZE,\n framed = true,\n}: Pick<IntegrationActionCardProps, 'logo' | 'logoSmall' | 'brandColor' | 'brandColorDark'> & {\n size?: number;\n framed?: boolean;\n}) {\n const small = !framed && logoSmall && isHttpUrl(logoSmall) ? logoSmall : undefined;\n const src = small ?? ((logo && isHttpUrl(logo)) ? logo : undefined);\n const plated = Boolean((brandColor || brandColorDark) && !small);\n\n return (\n <span\n className={ framed ? styles.icon : styles.compact }\n style={ {\n ...(!framed ? { '--catalog-icon-size': `${ size }px` } : {}),\n ...(plated && brandColor ? { '--catalog-brand': brandColor } : {}),\n ...(plated && brandColorDark ? { '--catalog-brand-dark': brandColorDark } : {}),\n } as CSSProperties }\n >\n <Show\n when={ src }\n fallback={ <Mcp size={ size } aria-hidden /> }\n >\n { href => (\n <Image\n src={ href }\n alt=\"\"\n width={ size }\n height={ size }\n />\n ) }\n </Show>\n </span>\n );\n}\n\n/** Filled HITL row: catalog mark + name + description + Skip / primary. */\nexport function IntegrationActionCard({\n name,\n description,\n logo,\n brandColor,\n brandColorDark,\n primaryLabel,\n skipLabel = 'Skip',\n spacious = false,\n icon,\n onSkip,\n onPrimary,\n isPending = false,\n isPrimaryDisabled = false,\n 'data-slot': dataSlot,\n}: IntegrationActionCardProps) {\n const mark = (\n <Show\n when={ icon }\n fallback={ (\n <IntegrationActionIcon\n logo={ logo }\n brandColor={ brandColor }\n brandColorDark={ brandColorDark }\n />\n ) }\n >\n { icon }\n </Show>\n );\n const actions = (\n <Show when={ onSkip && onPrimary }>\n <Box direction=\"row\" gap=\"sm\" justify={ spacious ? 'end' : undefined } className={ styles.actions }>\n <Button\n size={ spacious ? 'md' : 'sm' }\n variant
|
|
1
|
+
{"version":3,"file":"IntegrationActionCard.js","sources":["../../../../src/chat/Tool/integration-card/IntegrationActionCard.tsx"],"sourcesContent":["import { Mcp } from '@reforma/icons/14';\nimport { isHttpUrl } from '@reforma/lib';\nimport { type CSSProperties, type ReactNode } from 'react';\n\nimport { Box } from '../../../Box';\nimport { Button } from '../../../Button';\nimport { Card } from '../../../Card';\nimport { Image } from '../../../Image';\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport styles from './IntegrationActionCard.module.css';\n\nconst ICON_SIZE = 20;\n\nexport type IntegrationActionCardProps = {\n name: string;\n description: string;\n logo?: string;\n logoSmall?: string;\n brandColor?: string;\n brandColorDark?: string;\n primaryLabel?: string;\n skipLabel?: string;\n /** Taller card: wrapping copy and room for a long skip label. */\n spacious?: boolean;\n /** Replaces the catalog mark. */\n icon?: ReactNode;\n /** Shown after the name in the spacious layout. */\n badge?: ReactNode;\n onSkip?: () => void;\n onPrimary?: () => void;\n isPending?: boolean;\n isPrimaryDisabled?: boolean;\n 'data-slot'?: string;\n};\n\nexport function IntegrationActionIcon({\n logo,\n logoSmall,\n brandColor,\n brandColorDark,\n size = ICON_SIZE,\n framed = true,\n}: Pick<IntegrationActionCardProps, 'logo' | 'logoSmall' | 'brandColor' | 'brandColorDark'> & {\n size?: number;\n framed?: boolean;\n}) {\n const small = !framed && logoSmall && isHttpUrl(logoSmall) ? logoSmall : undefined;\n const src = small ?? ((logo && isHttpUrl(logo)) ? logo : undefined);\n const plated = Boolean((brandColor || brandColorDark) && !small);\n\n return (\n <span\n className={ framed ? styles.icon : styles.compact }\n style={ {\n ...(!framed ? { '--catalog-icon-size': `${ size }px` } : {}),\n ...(plated && brandColor ? { '--catalog-brand': brandColor } : {}),\n ...(plated && brandColorDark ? { '--catalog-brand-dark': brandColorDark } : {}),\n } as CSSProperties }\n >\n <Show\n when={ src }\n fallback={ <Mcp size={ size } aria-hidden /> }\n >\n { href => (\n <Image\n src={ href }\n alt=\"\"\n width={ size }\n height={ size }\n />\n ) }\n </Show>\n </span>\n );\n}\n\n/** Filled HITL row: catalog mark + name + description + Skip / primary. */\nexport function IntegrationActionCard({\n name,\n description,\n logo,\n brandColor,\n brandColorDark,\n primaryLabel,\n skipLabel = 'Skip',\n spacious = false,\n icon,\n badge,\n onSkip,\n onPrimary,\n isPending = false,\n isPrimaryDisabled = false,\n 'data-slot': dataSlot,\n}: IntegrationActionCardProps) {\n const mark = (\n <Show\n when={ icon }\n fallback={ (\n <IntegrationActionIcon\n logo={ logo }\n brandColor={ brandColor }\n brandColorDark={ brandColorDark }\n />\n ) }\n >\n { icon }\n </Show>\n );\n const actions = (\n <Show when={ onSkip && onPrimary }>\n <Box direction=\"row\" gap=\"sm\" justify={ spacious ? 'end' : undefined } className={ styles.actions }>\n <Button\n size={ spacious ? 'md' : 'sm' }\n variant={ spacious ? 'bordered' : 'ghost' }\n color=\"secondary\"\n isDisabled={ isPending }\n onPress={ onSkip }\n >\n { skipLabel }\n </Button>\n <Button\n size={ spacious ? 'md' : 'sm' }\n variant=\"filled\"\n color=\"contrast\"\n isPending={ isPending }\n isDisabled={ isPending || isPrimaryDisabled }\n onPress={ onPrimary }\n >\n { primaryLabel }\n </Button>\n </Box>\n </Show>\n );\n\n if (spacious) {\n return (\n <Card\n variant=\"filled\"\n size=\"lg\"\n direction=\"column\"\n align=\"stretch\"\n gap=\"xl\"\n fullWidth\n className={ styles.root }\n data-slot={ dataSlot }\n >\n <Box gap=\"lg\">\n { mark }\n <Box gap=\"xs\">\n <Box direction=\"row\" align=\"center\" gap=\"sm\">\n <Text variant=\"heading-4\">{ name }</Text>\n { badge }\n </Box>\n <Text variant=\"md\" color=\"secondary\">{ description }</Text>\n </Box>\n </Box>\n { actions }\n </Card>\n );\n }\n\n return (\n <Card\n variant=\"filled\"\n size=\"sm\"\n direction=\"row\"\n align=\"center\"\n gap=\"md\"\n fullWidth\n className={ styles.root }\n data-slot={ dataSlot }\n >\n { mark }\n <Box grow>\n <Text variant=\"heading-5\" truncate>{ name }</Text>\n <Text variant=\"md\" color=\"secondary\" truncate>{ description }</Text>\n </Box>\n { actions }\n </Card>\n );\n}\n"],"names":["ICON_SIZE","IntegrationActionIcon","logo","logoSmall","brandColor","brandColorDark","size","framed","small","isHttpUrl","src","plated","styles","Show","Mcp","href","_jsx","Image","IntegrationActionCard","name","description","primaryLabel","skipLabel","spacious","icon","badge","onSkip","onPrimary","isPending","isPrimaryDisabled","dataSlot","mark","actions","Box","Button","Card","_jsxs","Text"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isToolUIPart as l, getToolName as s } from "
|
|
1
|
+
import { isToolUIPart as l, getToolName as s } from "@reforma/types";
|
|
2
2
|
import { chipItemFromPath as n } from "../../Chip/helpers/chipPath.js";
|
|
3
3
|
import { isToolInvocationInProgress as c, getToolFailureRowState as m } from "../helpers.js";
|
|
4
4
|
import { parseListDirectoryOutput as a } from "./listDirectoryOutput.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeListDirectoryTools.js","sources":["../../../../src/chat/Tool/list-directory/normalizeListDirectoryTools.ts"],"sourcesContent":["import { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"normalizeListDirectoryTools.js","sources":["../../../../src/chat/Tool/list-directory/normalizeListDirectoryTools.ts"],"sourcesContent":["import { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { chipItemFromPath, type ChipItem } from '../../Chip';\nimport { getToolFailureRowState, isToolInvocationInProgress, type ToolFailureRowState } from '../helpers';\nimport { parseListDirectoryOutput } from './listDirectoryOutput';\n\nimport type { ReformaUIMessagePart } from '../../Message/types';\nimport type { ToolRendererProps } from '../types';\n\nexport type ListDirectoryToolUIPart = Extract<ReformaUIMessagePart, { type: 'tool-ListDirectory' }>;\n\nexport function isListDirectoryToolUIPart(\n part: ToolRendererProps['part'] | ReformaUIMessagePart\n): part is ListDirectoryToolUIPart {\n return isToolUIPart(part) && getToolName(part) === 'ListDirectory';\n}\n\nexport type ListDirectoryDirectoryEntry = {\n id: string;\n chipItems: ChipItem[];\n paths: string[];\n done: boolean;\n};\n\nexport type NormalizedListDirectoryToolsView = {\n directories: ListDirectoryDirectoryEntry[];\n /** SDK state of the last merged part (message order). */\n state: ListDirectoryToolUIPart['state'];\n failure: ToolFailureRowState;\n statusDetail?: string;\n problemText?: string;\n};\n\nfunction directoryEntryFromPart(part: ListDirectoryToolUIPart): ListDirectoryDirectoryEntry {\n const input = part.input as { path?: string } | undefined;\n const item = chipItemFromPath(input?.path || './');\n const chipItems = item ? [{ ...item, type: 'folder' as const, id: part.toolCallId }] : [];\n const done = part.state === 'output-available';\n const parsed = done ? parseListDirectoryOutput(part.output) : { paths: [] as string[] };\n\n return {\n id: part.toolCallId,\n chipItems,\n paths: parsed.paths,\n done,\n };\n}\n\nfunction aggregateListDirectoryFailure(parts: readonly ListDirectoryToolUIPart[]): ToolFailureRowState {\n if (parts.some(part => isToolInvocationInProgress(part.state))) {\n return { useFailureLabel: false, tooltip: undefined, problemText: undefined };\n }\n\n if (parts.some(part => part.state === 'output-available')) {\n return { useFailureLabel: false, tooltip: undefined, problemText: undefined };\n }\n\n const failure = parts.map(part => getToolFailureRowState(part)).find(row => row.useFailureLabel);\n\n return failure ?? { useFailureLabel: false, tooltip: undefined, problemText: undefined };\n}\n\nfunction statusDetailFromParts(\n parts: readonly ListDirectoryToolUIPart[],\n failure: ToolFailureRowState\n): string | undefined {\n if (failure.useFailureLabel) {\n return failure.tooltip;\n }\n\n for (const part of parts) {\n if (part.state !== 'output-available') {\n continue;\n }\n\n const parsed = parseListDirectoryOutput(part.output);\n\n if (parsed.error) {\n return parsed.error;\n }\n }\n\n return undefined;\n}\n\nfunction problemTextFromParts(\n parts: readonly ListDirectoryToolUIPart[],\n failure: ToolFailureRowState\n): string | undefined {\n const hasExecutionError = parts.some((part) => {\n if (part.state !== 'output-available') {\n return false;\n }\n\n return parseListDirectoryOutput(part.output).error !== undefined;\n });\n\n return hasExecutionError ? undefined : failure.problemText;\n}\n\n/** Merges one or more ListDirectory tool parts into a single summary row view. */\nexport function normalizeListDirectoryToolParts(\n parts: readonly ListDirectoryToolUIPart[]\n): NormalizedListDirectoryToolsView {\n const directories = parts.map(part => directoryEntryFromPart(part));\n const failure = aggregateListDirectoryFailure(parts);\n const state = parts[parts.length - 1]?.state ?? 'output-available';\n\n return {\n directories,\n state,\n failure,\n statusDetail: statusDetailFromParts(parts, failure),\n problemText: problemTextFromParts(parts, failure),\n };\n}\n"],"names":["isListDirectoryToolUIPart","part","isToolUIPart","getToolName","directoryEntryFromPart","input","item","chipItemFromPath","chipItems","done","parsed","parseListDirectoryOutput","aggregateListDirectoryFailure","parts","isToolInvocationInProgress","getToolFailureRowState","row","statusDetailFromParts","failure","problemTextFromParts","normalizeListDirectoryToolParts","directories","state"],"mappings":";;;;AAIO,SAASA,EAA0BC,GAAM;AAC9C,SAAOC,EAAaD,CAAI,KAAKE,EAAYF,CAAI,MAAM;AACrD;AACA,SAASG,EAAuBH,GAAM;AACpC,QAAMI,IAAQJ,EAAK,OACbK,IAAOC,EAAiBF,GAAO,QAAQ,IAAI,GAC3CG,IAAYF,IAAO,CAAC;AAAA,IACxB,GAAGA;AAAA,IACH,MAAM;AAAA,IACN,IAAIL,EAAK;AAAA,EAAA,CACV,IAAI,CAAA,GACCQ,IAAOR,EAAK,UAAU,oBACtBS,IAASD,IAAOE,EAAyBV,EAAK,MAAM,IAAI;AAAA,IAC5D,OAAO,CAAA;AAAA,EAAC;AAEV,SAAO;AAAA,IACL,IAAIA,EAAK;AAAA,IACT,WAAAO;AAAA,IACA,OAAOE,EAAO;AAAA,IACd,MAAAD;AAAA,EAAA;AAEJ;AACA,SAASG,EAA8BC,GAAO;AAC5C,SAAIA,EAAM,KAAK,CAAAZ,MAAQa,EAA2Bb,EAAK,KAAK,CAAC,IACpD;AAAA,IACL,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,EAAA,IAGbY,EAAM,KAAK,CAAAZ,MAAQA,EAAK,UAAU,kBAAkB,IAC/C;AAAA,IACL,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,EAAA,IAGDY,EAAM,IAAI,CAAAZ,MAAQc,EAAuBd,CAAI,CAAC,EAAE,KAAK,CAAAe,MAAOA,EAAI,eAAe,KAC7E;AAAA,IAChB,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,aAAa;AAAA,EAAA;AAEjB;AACA,SAASC,EAAsBJ,GAAOK,GAAS;AAC7C,MAAIA,EAAQ;AACV,WAAOA,EAAQ;AAEjB,aAAWjB,KAAQY,GAAO;AACxB,QAAIZ,EAAK,UAAU;AACjB;AAEF,UAAMS,IAASC,EAAyBV,EAAK,MAAM;AACnD,QAAIS,EAAO;AACT,aAAOA,EAAO;AAAA,EAElB;AAEF;AACA,SAASS,EAAqBN,GAAOK,GAAS;AAO5C,SAN0BL,EAAM,KAAK,CAAAZ,MAC/BA,EAAK,UAAU,qBACV,KAEFU,EAAyBV,EAAK,MAAM,EAAE,UAAU,MACxD,IAC0B,SAAYiB,EAAQ;AACjD;AAGO,SAASE,EAAgCP,GAAO;AACrD,QAAMQ,IAAcR,EAAM,IAAI,CAAAZ,MAAQG,EAAuBH,CAAI,CAAC,GAC5DiB,IAAUN,EAA8BC,CAAK,GAC7CS,IAAQT,EAAMA,EAAM,SAAS,CAAC,GAAG,SAAS;AAChD,SAAO;AAAA,IACL,aAAAQ;AAAA,IACA,OAAAC;AAAA,IACA,SAAAJ;AAAA,IACA,cAAcD,EAAsBJ,GAAOK,CAAO;AAAA,IAClD,aAAaC,EAAqBN,GAAOK,CAAO;AAAA,EAAA;AAEpD;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Mcp as p } from "@reforma/icons/14";
|
|
2
2
|
import { humanizeString as u } from "@reforma/lib";
|
|
3
|
-
import { isToolUIPart as s, getToolName as f } from "
|
|
3
|
+
import { isToolUIPart as s, getToolName as f } from "@reforma/types";
|
|
4
4
|
import { DefaultTool as T } from "../default/Default.js";
|
|
5
5
|
import { parsePrefixedMcpToolName as d, parseCallDynamicToolInput as C } from "./parseCallDynamicToolInput.js";
|
|
6
6
|
import { jsx as i } from "react/jsx-runtime";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallDynamicTool.js","sources":["../../../../src/chat/Tool/mcp-tools/CallDynamicTool.tsx"],"sourcesContent":["import { Mcp } from '@reforma/icons/14';\nimport { humanizeString } from '@reforma/lib';\nimport { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"CallDynamicTool.js","sources":["../../../../src/chat/Tool/mcp-tools/CallDynamicTool.tsx"],"sourcesContent":["import { Mcp } from '@reforma/icons/14';\nimport { humanizeString } from '@reforma/lib';\nimport { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { DefaultTool } from '../default/Default';\nimport { parseCallDynamicToolInput, parsePrefixedMcpToolName } from './parseCallDynamicToolInput';\n\nimport type { ToolRendererProps } from '../types';\n\nfunction titleWords(raw: string): string {\n return humanizeString(raw)\n .split(' ')\n .filter(Boolean)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\n/** @internal */\nexport function callDynamicToolTitle(toolName: string, namespace?: string): string {\n const tool = titleWords(toolName);\n\n if (!namespace) {\n return `Run ${ tool }`;\n }\n\n const ns = titleWords(namespace);\n const label = tool.split(' ')[0]?.toLowerCase() === ns.toLowerCase() ? tool : `${ ns } ${ tool }`;\n\n return `Run ${ label }`;\n}\n\n/** CallDynamicTool: render like a native tool — MCP icon, proxied tool name, and inner MCP args only. */\nexport function CallDynamicTool({ part, onToolApprovalResponse }: ToolRendererProps) {\n if (!isToolUIPart(part)) {\n return null;\n }\n\n const name = getToolName(part);\n const prefixed = name === 'CallDynamicTool' ? null : parsePrefixedMcpToolName(name);\n const parsed = name === 'CallDynamicTool'\n ? parseCallDynamicToolInput(part.input)\n : prefixed\n ? { toolName: prefixed.tool, namespace: prefixed.namespace, mcpInput: part.input }\n : undefined;\n\n if (!parsed) {\n return null;\n }\n\n const { toolName, namespace, mcpInput } = parsed;\n\n return (\n <DefaultTool\n part={ part }\n titleOverride={ callDynamicToolTitle(toolName, namespace) }\n inputOverride={ mcpInput }\n leadingIcon={ <Mcp aria-hidden /> }\n onToolApprovalResponse={ onToolApprovalResponse }\n />\n );\n}\n"],"names":["titleWords","raw","humanizeString","word","callDynamicToolTitle","toolName","namespace","tool","ns","CallDynamicTool","part","onToolApprovalResponse","isToolUIPart","name","getToolName","prefixed","parsePrefixedMcpToolName","parsed","parseCallDynamicToolInput","mcpInput","DefaultTool","Mcp"],"mappings":";;;;;;AAMA,SAASA,EAAWC,GAAK;AACvB,SAAOC,EAAeD,CAAG,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI,CAAAE,MAAQA,EAAK,OAAO,CAAC,EAAE,gBAAgBA,EAAK,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG;AAC1H;AAGO,SAASC,EAAqBC,GAAUC,GAAW;AACxD,QAAMC,IAAOP,EAAWK,CAAQ;AAChC,MAAI,CAACC;AACH,WAAO,OAAOC,CAAI;AAEpB,QAAMC,IAAKR,EAAWM,CAAS;AAE/B,SAAO,OADOC,EAAK,MAAM,GAAG,EAAE,CAAC,GAAG,YAAA,MAAkBC,EAAG,gBAAgBD,IAAO,GAAGC,CAAE,IAAID,CAAI,EACxE;AACrB;AAGO,SAASE,EAAgB;AAAA,EAC9B,MAAAC;AAAA,EACA,wBAAAC;AACF,GAAG;AACD,MAAI,CAACC,EAAaF,CAAI;AACpB,WAAO;AAET,QAAMG,IAAOC,EAAYJ,CAAI,GACvBK,IAAWF,MAAS,oBAAoB,OAAOG,EAAyBH,CAAI,GAC5EI,IAASJ,MAAS,oBAAoBK,EAA0BR,EAAK,KAAK,IAAIK,IAAW;AAAA,IAC7F,UAAUA,EAAS;AAAA,IACnB,WAAWA,EAAS;AAAA,IACpB,UAAUL,EAAK;AAAA,EAAA,IACb;AACJ,MAAI,CAACO;AACH,WAAO;AAET,QAAM;AAAA,IACJ,UAAAZ;AAAA,IACA,WAAAC;AAAA,IACA,UAAAa;AAAA,EAAA,IACEF;AACJ,2BAAyBG,GAAa;AAAA,IACpC,MAAAV;AAAA,IACA,eAAeN,EAAqBC,GAAUC,CAAS;AAAA,IACvD,eAAea;AAAA,IACf,+BAA+BE,GAAK;AAAA,MAClC,eAAe;AAAA,IAAA,CAChB;AAAA,IACD,wBAAAV;AAAA,EAAA,CACD;AACH;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Mcp as n } from "@reforma/icons/14";
|
|
2
|
-
import { isToolUIPart as r, getToolName as s } from "
|
|
2
|
+
import { isToolUIPart as r, getToolName as s } from "@reforma/types";
|
|
3
3
|
import { getToolFailureRowState as a } from "../helpers.js";
|
|
4
4
|
import { ToolShell as m, ToolShellHeader as c } from "../shell/ToolShell.js";
|
|
5
5
|
import { jsx as e } from "react/jsx-runtime";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GetDynamicToolsTool.js","sources":["../../../../src/chat/Tool/mcp-tools/GetDynamicToolsTool.tsx"],"sourcesContent":["import { Mcp } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"GetDynamicToolsTool.js","sources":["../../../../src/chat/Tool/mcp-tools/GetDynamicToolsTool.tsx"],"sourcesContent":["import { Mcp } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { getToolFailureRowState } from '../helpers';\nimport { ToolShell, ToolShellHeader } from '../shell';\n\nimport type { GetDynamicToolsToolInput } from '@reforma/types';\nimport type { ToolRendererProps } from '../types';\n\nfunction namespaceFromInput(input: unknown): string {\n if (input == null || typeof input !== 'object') {\n return '';\n }\n\n const namespace = (input as GetDynamicToolsToolInput).namespace;\n\n return typeof namespace === 'string' ? namespace.trim() : '';\n}\n\n/** GetDynamicTools: compact catalog discovery row (no tool output in the UI). */\nexport function GetDynamicToolsTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'GetDynamicTools') {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const namespace = namespaceFromInput(part.input);\n const subject = namespace ? `${ namespace } tools` : 'tools';\n\n return (\n <ToolShell data-slot=\"get-dynamic-tools-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip }\n title={ `Listed ${ subject }` }\n titleInProgress={ `Listing ${ subject }` }\n icon={ <Mcp aria-hidden /> }\n />\n </ToolShell>\n );\n}\n"],"names":["namespaceFromInput","input","namespace","GetDynamicToolsTool","part","isToolUIPart","getToolName","failure","getToolFailureRowState","subject","ToolShell","ToolShellHeader","Mcp"],"mappings":";;;;;AAKA,SAASA,EAAmBC,GAAO;AACjC,MAAIA,KAAS,QAAQ,OAAOA,KAAU;AACpC,WAAO;AAET,QAAMC,IAAYD,EAAM;AACxB,SAAO,OAAOC,KAAc,WAAWA,EAAU,SAAS;AAC5D;AAGO,SAASC,EAAoB;AAAA,EAClC,MAAAC;AACF,GAAG;AACD,MAAI,CAACC,EAAaD,CAAI,KAAKE,EAAYF,CAAI,MAAM;AAC/C,WAAO;AAET,QAAMG,IAAUC,EAAuBJ,CAAI,GACrCF,IAAYF,EAAmBI,EAAK,KAAK,GACzCK,IAAUP,IAAY,GAAGA,CAAS,WAAW;AACnD,2BAAyBQ,GAAW;AAAA,IAClC,aAAa;AAAA,IACb,4BAA4BC,GAAiB;AAAA,MAC3C,OAAOP,EAAK;AAAA,MACZ,cAAcG,EAAQ;AAAA,MACtB,OAAO,UAAUE,CAAO;AAAA,MACxB,iBAAiB,WAAWA,CAAO;AAAA,MACnC,wBAAwBG,GAAK;AAAA,QAC3B,eAAe;AAAA,MAAA,CAChB;AAAA,IAAA,CACF;AAAA,EAAA,CACF;AACH;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Book as c, Mcp as u } from "@reforma/icons/14";
|
|
2
|
-
import { isToolUIPart as a, getToolName as n } from "
|
|
2
|
+
import { isToolUIPart as a, getToolName as n } from "@reforma/types";
|
|
3
3
|
import { Show as m } from "../../../Show/Show.js";
|
|
4
4
|
import { Text as d } from "../../../Text/Text.js";
|
|
5
5
|
import { getToolFailureRowState as p } from "../helpers.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GetMcpResourcesTool.js","sources":["../../../../src/chat/Tool/mcp-tools/GetMcpResourcesTool.tsx"],"sourcesContent":["import { Book, Mcp } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"GetMcpResourcesTool.js","sources":["../../../../src/chat/Tool/mcp-tools/GetMcpResourcesTool.tsx"],"sourcesContent":["import { Book, Mcp } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { getToolFailureRowState } from '../helpers';\nimport {\n ToolShell,\n ToolShellFooter,\n ToolShellHeader,\n ToolSummaryBadges,\n} from '../shell';\nimport {\n mcpResourceBadgeLabel,\n mcpResourceErrorFromOutput,\n parseGetMcpResourcesInput,\n} from './parseGetMcpResources';\n\nimport type { ToolRendererProps } from '../types';\n\n/** GetMcpResources: list row or Skill-like read row. Body stays out of the UI. */\nexport function GetMcpResourcesTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'GetMcpResources') {\n return null;\n }\n\n const { isRead } = parseGetMcpResourcesInput(part.input);\n const failure = getToolFailureRowState(part);\n const done = part.state === 'output-available';\n const logicalError = done ? mcpResourceErrorFromOutput(part.output) : undefined;\n const badge = mcpResourceBadgeLabel(part.input, done ? part.output : undefined);\n\n return (\n <ToolShell data-slot=\"get-mcp-resources-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip }\n title={ isRead ? 'Read resource' : 'Listed MCP resources' }\n titleInProgress={ isRead ? 'Reading resource' : 'Listing MCP resources' }\n icon={ isRead ? <Book aria-hidden /> : <Mcp aria-hidden /> }\n >\n <ToolSummaryBadges\n labels={ badge ? [badge] : [] }\n aria-label={ isRead ? 'Resource' : 'MCP server' }\n />\n </ToolShellHeader>\n\n <Show when={ logicalError ?? failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{logicalError ?? failure.problemText}</Text>\n </ToolShellFooter>\n </Show>\n </ToolShell>\n );\n}\n"],"names":["GetMcpResourcesTool","part","isToolUIPart","getToolName","isRead","parseGetMcpResourcesInput","failure","getToolFailureRowState","done","logicalError","mcpResourceErrorFromOutput","badge","mcpResourceBadgeLabel","ToolShell","_jsx","ToolShellHeader","Book","Mcp","ToolSummaryBadges","Show","ToolShellFooter","Text"],"mappings":";;;;;;;;;AASO,SAASA,EAAoB;AAAA,EAClC,MAAAC;AACF,GAAG;AACD,MAAI,CAACC,EAAaD,CAAI,KAAKE,EAAYF,CAAI,MAAM;AAC/C,WAAO;AAET,QAAM;AAAA,IACJ,QAAAG;AAAA,EAAA,IACEC,EAA0BJ,EAAK,KAAK,GAClCK,IAAUC,EAAuBN,CAAI,GACrCO,IAAOP,EAAK,UAAU,oBACtBQ,IAAeD,IAAOE,EAA2BT,EAAK,MAAM,IAAI,QAChEU,IAAQC,EAAsBX,EAAK,OAAOO,IAAOP,EAAK,SAAS,MAAS;AAC9E,2BAA0BY,GAAW;AAAA,IACnC,aAAa;AAAA,IACb,UAAU,CAAcC,gBAAAA,EAAKC,GAAiB;AAAA,MAC5C,OAAOd,EAAK;AAAA,MACZ,cAAcK,EAAQ;AAAA,MACtB,OAAOF,IAAS,kBAAkB;AAAA,MAClC,iBAAiBA,IAAS,qBAAqB;AAAA,MAC/C,MAAMA,IAAsBU,gBAAAA,EAAKE,GAAM;AAAA,QACrC,eAAe;AAAA,MAAA,CAChB,IAAiBF,gBAAAA,EAAKG,GAAK;AAAA,QAC1B,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,4BAA4BC,GAAmB;AAAA,QAC7C,QAAQP,IAAQ,CAACA,CAAK,IAAI,CAAA;AAAA,QAC1B,cAAcP,IAAS,aAAa;AAAA,MAAA,CACrC;AAAA,IAAA,CACF,GAAgBU,gBAAAA,EAAKK,GAAM;AAAA,MAC1B,MAAMV,KAAgBH,EAAQ;AAAA,MAC9B,4BAA4Bc,GAAiB;AAAA,QAC3C,4BAA4BC,GAAM;AAAA,UAChC,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAUZ,KAAgBH,EAAQ;AAAA,QAAA,CACnC;AAAA,MAAA,CACF;AAAA,IAAA,CACF,CAAC;AAAA,EAAA,CACH;AACH;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isToolUIPart as p, getToolName as f } from "
|
|
1
|
+
import { isToolUIPart as p, getToolName as f } from "@reforma/types";
|
|
2
2
|
import { useState as u } from "react";
|
|
3
3
|
import { useChat as c } from "../../ChatContext.js";
|
|
4
4
|
import { IntegrationActionCard as v } from "../integration-card/IntegrationActionCard.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpAuth.js","sources":["../../../../src/chat/Tool/mcp-tools/McpAuth.tsx"],"sourcesContent":["import { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"McpAuth.js","sources":["../../../../src/chat/Tool/mcp-tools/McpAuth.tsx"],"sourcesContent":["import { getToolName, isToolUIPart } from '@reforma/types';\nimport { useState } from 'react';\n\nimport { useChat } from '../../ChatContext';\nimport { IntegrationActionCard } from '../integration-card/IntegrationActionCard';\n\nimport type { ToolRendererProps } from '../types';\n\nfunction mcpAuthServer(input: unknown): string | undefined {\n if (!input || typeof input !== 'object') {\n return undefined;\n }\n\n const server = (input as { server?: unknown }).server;\n\n return typeof server === 'string' ? server.trim() || undefined : undefined;\n}\n\n/** McpAuth: Skip / Login plaque. Hidden after the user responds. */\nexport function McpAuth({ part, onToolApprovalResponse }: ToolRendererProps) {\n const { pluginsCatalog, onIntegrationLogin } = useChat();\n const [loggingIn, setLoggingIn] = useState(false);\n\n if (!isToolUIPart(part) || getToolName(part) !== 'McpAuth' || part.state !== 'approval-requested') {\n return null;\n }\n\n const server = mcpAuthServer(part.input);\n const row = server\n ? pluginsCatalog?.integrations.find(item => item.serverId === server || item.id === server)\n : undefined;\n const integrationId = row?.id ?? server;\n const name = row?.name ?? server ?? 'MCP';\n const approvalId = part.approval?.id;\n\n return (\n <IntegrationActionCard\n data-slot=\"mcp-auth-tool\"\n name={ name }\n description=\"Login required\"\n logo={ row?.logo }\n brandColor={ row?.brandColor }\n brandColorDark={ row?.brandColorDark }\n primaryLabel=\"Login\"\n isPending={ loggingIn }\n isPrimaryDisabled={ !onIntegrationLogin || !integrationId || !approvalId }\n onSkip={ () => {\n if (!approvalId) {\n return;\n }\n\n onToolApprovalResponse?.({\n id: approvalId,\n approved: false,\n });\n } }\n onPrimary={ () => {\n if (!integrationId || !approvalId) {\n return;\n }\n\n setLoggingIn(true);\n void Promise.resolve(\n onIntegrationLogin?.({ integrationId, approvalId })\n ).finally(() => {\n setLoggingIn(false);\n });\n } }\n />\n );\n}\n"],"names":["mcpAuthServer","input","server","McpAuth","part","onToolApprovalResponse","pluginsCatalog","onIntegrationLogin","useChat","loggingIn","setLoggingIn","useState","isToolUIPart","getToolName","row","item","integrationId","name","approvalId","IntegrationActionCard"],"mappings":";;;;;AAKA,SAASA,EAAcC,GAAO;AAC5B,MAAI,CAACA,KAAS,OAAOA,KAAU;AAC7B;AAEF,QAAMC,IAASD,EAAM;AACrB,SAAO,OAAOC,KAAW,YAAWA,EAAO,KAAA,KAAU;AACvD;AAGO,SAASC,EAAQ;AAAA,EACtB,MAAAC;AAAA,EACA,wBAAAC;AACF,GAAG;AACD,QAAM;AAAA,IACJ,gBAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,IACEC,EAAA,GACE,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK;AAChD,MAAI,CAACC,EAAaR,CAAI,KAAKS,EAAYT,CAAI,MAAM,aAAaA,EAAK,UAAU;AAC3E,WAAO;AAET,QAAMF,IAASF,EAAcI,EAAK,KAAK,GACjCU,IAAMZ,IAASI,GAAgB,aAAa,KAAK,CAAAS,MAAQA,EAAK,aAAab,KAAUa,EAAK,OAAOb,CAAM,IAAI,QAC3Gc,IAAgBF,GAAK,MAAMZ,GAC3Be,IAAOH,GAAK,QAAQZ,KAAU,OAC9BgB,IAAad,EAAK,UAAU;AAClC,2BAAyBe,GAAuB;AAAA,IAC9C,aAAa;AAAA,IACb,MAAAF;AAAA,IACA,aAAa;AAAA,IACb,MAAMH,GAAK;AAAA,IACX,YAAYA,GAAK;AAAA,IACjB,gBAAgBA,GAAK;AAAA,IACrB,cAAc;AAAA,IACd,WAAWL;AAAA,IACX,mBAAmB,CAACF,KAAsB,CAACS,KAAiB,CAACE;AAAA,IAC7D,QAAQ,MAAM;AACZ,MAAKA,KAGLb,IAAyB;AAAA,QACvB,IAAIa;AAAA,QACJ,UAAU;AAAA,MAAA,CACX;AAAA,IACH;AAAA,IACA,WAAW,MAAM;AACf,MAAI,CAACF,KAAiB,CAACE,MAGvBR,EAAa,EAAI,GACZ,QAAQ,QAAQH,IAAqB;AAAA,QACxC,eAAAS;AAAA,QACA,YAAAE;AAAA,MAAA,CACD,CAAC,EAAE,QAAQ,MAAM;AAChB,QAAAR,EAAa,EAAK;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,EAAA,CACD;AACH;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MemoryCard as a } from "@reforma/icons/14";
|
|
2
|
-
import { isToolUIPart as c, getToolName as d } from "
|
|
2
|
+
import { isToolUIPart as c, getToolName as d } from "@reforma/types";
|
|
3
3
|
import { Show as n } from "../../../Show/Show.js";
|
|
4
4
|
import { Text as f } from "../../../Text/Text.js";
|
|
5
5
|
import { MessageText as u } from "../../Message/streamdown/MessageText.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryTool.js","sources":["../../../../src/chat/Tool/memory/MemoryTool.tsx"],"sourcesContent":["import { MemoryCard } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"MemoryTool.js","sources":["../../../../src/chat/Tool/memory/MemoryTool.tsx"],"sourcesContent":["import { MemoryCard } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { MessageText } from '../../Message/streamdown/MessageText';\nimport { getToolFailureRowState } from '../helpers';\nimport {\n ToolShell,\n ToolShellContent,\n ToolShellFooter,\n ToolShellHeader,\n} from '../shell';\n\nimport type { ToolRendererProps } from '../types';\n\nfunction field(input: unknown, key: string): string | undefined {\n if (input == null || typeof input !== 'object') {\n return undefined;\n }\n\n const value = (input as Record<string, unknown>)[key];\n\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\n/** Remember / Forget. Header like reasoning; body is only the fact text. */\nexport function MemoryTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part)) {\n return null;\n }\n\n const name = getToolName(part);\n const isRemember = name === 'Remember';\n const isForget = name === 'Forget';\n\n if (!isRemember && !isForget) {\n return null;\n }\n\n const failure = getToolFailureRowState(part);\n const detail = isRemember ? field(part.input, 'fact') : field(part.input, 'text');\n\n return (\n <ToolShell collapsible={ Boolean(detail) } data-slot=\"memory-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip }\n title=\"Memory updated\"\n icon={ <MemoryCard aria-hidden /> }\n />\n\n <Show when={ detail }>\n { fact => (\n <ToolShellContent>\n <MessageText className=\"color-secondary-muted-text\" mode=\"static\">\n {fact}\n </MessageText>\n </ToolShellContent>\n ) }\n </Show>\n\n <Show when={ failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{failure.problemText}</Text>\n </ToolShellFooter>\n </Show>\n </ToolShell>\n );\n}\n"],"names":["field","input","key","value","MemoryTool","part","isToolUIPart","name","getToolName","isRemember","failure","getToolFailureRowState","detail","ToolShell","_jsx","ToolShellHeader","MemoryCard","Show","fact","ToolShellContent","MessageText","ToolShellFooter","Text"],"mappings":";;;;;;;;AAQA,SAASA,EAAMC,GAAOC,GAAK;AACzB,MAAID,KAAS,QAAQ,OAAOA,KAAU;AACpC;AAEF,QAAME,IAAQF,EAAMC,CAAG;AACvB,SAAO,OAAOC,KAAU,YAAYA,EAAM,SAASA,EAAM,SAAS;AACpE;AAGO,SAASC,EAAW;AAAA,EACzB,MAAAC;AACF,GAAG;AACD,MAAI,CAACC,EAAaD,CAAI;AACpB,WAAO;AAET,QAAME,IAAOC,EAAYH,CAAI,GACvBI,IAAaF,MAAS;AAE5B,MAAI,CAACE,KAAc,EADFF,MAAS;AAExB,WAAO;AAET,QAAMG,IAAUC,EAAuBN,CAAI,GACrCO,IAASH,IAAaT,EAAMK,EAAK,OAAO,MAAM,IAAIL,EAAMK,EAAK,OAAO,MAAM;AAChF,2BAA0BQ,GAAW;AAAA,IACnC,aAAa,EAAQD;AAAA,IACrB,aAAa;AAAA,IACb,UAAU,CAAcE,gBAAAA,EAAKC,GAAiB;AAAA,MAC5C,OAAOV,EAAK;AAAA,MACZ,cAAcK,EAAQ;AAAA,MACtB,OAAO;AAAA,MACP,wBAAwBM,GAAY;AAAA,QAClC,eAAe;AAAA,MAAA,CAChB;AAAA,IAAA,CACF,GAAgBF,gBAAAA,EAAKG,GAAM;AAAA,MAC1B,MAAML;AAAA,MACN,UAAU,CAAAM,MAAqBJ,gBAAAA,EAAKK,GAAkB;AAAA,QACpD,4BAA4BC,GAAa;AAAA,UACvC,WAAW;AAAA,UACX,MAAM;AAAA,UACN,UAAUF;AAAA,QAAA,CACX;AAAA,MAAA,CACF;AAAA,IAAA,CACF,GAAgBJ,gBAAAA,EAAKG,GAAM;AAAA,MAC1B,MAAMP,EAAQ;AAAA,MACd,4BAA4BW,GAAiB;AAAA,QAC3C,4BAA4BC,GAAM;AAAA,UAChC,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAUZ,EAAQ;AAAA,QAAA,CACnB;AAAA,MAAA,CACF;AAAA,IAAA,CACF,CAAC;AAAA,EAAA,CACH;AACH;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Nowrap as v } from "@reforma/icons/14";
|
|
2
|
-
import { isToolUIPart as u, getToolName as T } from "
|
|
2
|
+
import { isToolUIPart as u, getToolName as T } from "@reforma/types";
|
|
3
3
|
import { Box as w } from "../../../Box/Box.js";
|
|
4
4
|
import { Show as s } from "../../../Show/Show.js";
|
|
5
5
|
import { Text as c } from "../../../Text/Text.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoveFileTool.js","sources":["../../../../src/chat/Tool/move-file/MoveFileTool.tsx"],"sourcesContent":["import { Nowrap } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"MoveFileTool.js","sources":["../../../../src/chat/Tool/move-file/MoveFileTool.tsx"],"sourcesContent":["import { Nowrap } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { Box } from '../../../Box';\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { Chip, chipItemFromPath } from '../../Chip';\nimport { getToolFailureRowState, isToolInvocationInProgress } from '../helpers';\nimport { ToolShell, ToolShellFooter, ToolShellHeader } from '../shell';\nimport { parseMoveFileInput } from './parseMoveFileInput';\n\nimport type { ToolRendererProps } from '../types';\n\n/** MoveFile: label + from → to path chips (one `Chip` per path for separate aria-labels). */\nexport function MoveFileTool({ part, onOpenPath }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'MoveFile') {\n return null;\n }\n\n const state = part.state;\n const inProgress = isToolInvocationInProgress(state);\n const failure = getToolFailureRowState(part);\n\n const { fromPath, toPath } = parseMoveFileInput(part.input);\n\n const fromChip = chipItemFromPath(fromPath);\n const toChip = chipItemFromPath(toPath);\n\n return (\n <ToolShell data-slot=\"move-file-tool\">\n <ToolShellHeader\n state={ state }\n statusDetail={ failure.tooltip }\n title=\"Moved\"\n titleInProgress=\"Moving\"\n icon={ <Nowrap aria-hidden /> }\n >\n <Show when={ !inProgress }>\n { fromChip && toChip && (\n <Box direction=\"row\" gap=\"sm\" align=\"center\" wrap=\"wrap\">\n <Chip\n aria-label=\"Move from\"\n item={ fromChip }\n />\n\n <Text color=\"secondary\" whitespace=\"nowrap\" aria-hidden>\n →\n </Text>\n\n <Chip\n aria-label=\"Move to\"\n item={ toChip }\n onAction={ onOpenPath }\n />\n </Box>\n ) }\n\n { fromChip && !toChip && (\n <Chip\n aria-label=\"Move from\"\n item={ fromChip }\n />\n ) }\n\n { !fromChip && toChip && (\n <Chip\n aria-label=\"Move to\"\n item={ toChip }\n onAction={ onOpenPath }\n />\n )}\n </Show>\n </ToolShellHeader>\n\n <Show when={ failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{failure.problemText}</Text>\n </ToolShellFooter>\n </Show>\n </ToolShell>\n );\n}\n"],"names":["MoveFileTool","part","onOpenPath","isToolUIPart","getToolName","state","inProgress","isToolInvocationInProgress","failure","getToolFailureRowState","fromPath","toPath","parseMoveFileInput","fromChip","chipItemFromPath","toChip","ToolShell","_jsx","ToolShellHeader","Nowrap","Show","Box","Chip","Text","ToolShellFooter"],"mappings":";;;;;;;;;;;AAWO,SAASA,EAAa;AAAA,EAC3B,MAAAC;AAAA,EACA,YAAAC;AACF,GAAG;AACD,MAAI,CAACC,EAAaF,CAAI,KAAKG,EAAYH,CAAI,MAAM;AAC/C,WAAO;AAET,QAAMI,IAAQJ,EAAK,OACbK,IAAaC,EAA2BF,CAAK,GAC7CG,IAAUC,EAAuBR,CAAI,GACrC;AAAA,IACJ,UAAAS;AAAA,IACA,QAAAC;AAAA,EAAA,IACEC,EAAmBX,EAAK,KAAK,GAC3BY,IAAWC,EAAiBJ,CAAQ,GACpCK,IAASD,EAAiBH,CAAM;AACtC,2BAA0BK,GAAW;AAAA,IACnC,aAAa;AAAA,IACb,UAAU,CAAcC,gBAAAA,EAAKC,GAAiB;AAAA,MAC5C,OAAAb;AAAA,MACA,cAAcG,EAAQ;AAAA,MACtB,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,wBAAwBW,GAAQ;AAAA,QAC9B,eAAe;AAAA,MAAA,CAChB;AAAA,MACD,4BAA6BC,GAAM;AAAA,QACjC,MAAM,CAACd;AAAA,QACP,UAAU,CAACO,KAAYE,uBAA6BM,GAAK;AAAA,UACvD,WAAW;AAAA,UACX,KAAK;AAAA,UACL,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU,CAAcJ,gBAAAA,EAAKK,GAAM;AAAA,YACjC,cAAc;AAAA,YACd,MAAMT;AAAA,UAAA,CACP,GAAgBI,gBAAAA,EAAKM,GAAM;AAAA,YAC1B,OAAO;AAAA,YACP,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,UAAU;AAAA,UAAA,CACX,GAAgBN,gBAAAA,EAAKK,GAAM;AAAA,YAC1B,cAAc;AAAA,YACd,MAAMP;AAAA,YACN,UAAUb;AAAA,UAAA,CACX,CAAC;AAAA,QAAA,CACH,GAAGW,KAAY,CAACE,uBAA4BO,GAAM;AAAA,UACjD,cAAc;AAAA,UACd,MAAMT;AAAA,QAAA,CACP,GAAG,CAACA,KAAYE,uBAA4BO,GAAM;AAAA,UACjD,cAAc;AAAA,UACd,MAAMP;AAAA,UACN,UAAUb;AAAA,QAAA,CACX,CAAC;AAAA,MAAA,CACH;AAAA,IAAA,CACF,GAAgBe,gBAAAA,EAAKG,GAAM;AAAA,MAC1B,MAAMZ,EAAQ;AAAA,MACd,4BAA4BgB,GAAiB;AAAA,QAC3C,4BAA4BD,GAAM;AAAA,UAChC,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAUf,EAAQ;AAAA,QAAA,CACnB;AAAA,MAAA,CACF;AAAA,IAAA,CACF,CAAC;AAAA,EAAA,CACH;AACH;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Plan as T, ArrowUpRight as y } from "@reforma/icons/14";
|
|
2
|
-
import { isToolUIPart as B, getToolName as N } from "
|
|
2
|
+
import { isToolUIPart as B, getToolName as N } from "@reforma/types";
|
|
3
3
|
import { Button as w } from "../../../Button/Button.js";
|
|
4
4
|
import { Show as i } from "../../../Show/Show.js";
|
|
5
5
|
import { Text as g } from "../../../Text/Text.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePlanTool.js","sources":["../../../../src/chat/Tool/plan/CreatePlanTool.tsx"],"sourcesContent":["import { ArrowUpRight, Plan as PlanIcon } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"CreatePlanTool.js","sources":["../../../../src/chat/Tool/plan/CreatePlanTool.tsx"],"sourcesContent":["import { ArrowUpRight, Plan as PlanIcon } from '@reforma/icons/14';\nimport { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { Button } from '../../../Button';\nimport { Show } from '../../../Show';\nimport { Text } from '../../../Text';\nimport { useChat } from '../../ChatContext';\nimport { Chip } from '../../Chip';\nimport { getToolFailureRowState } from '../helpers';\nimport {\n ToolShell,\n ToolShellCard,\n ToolShellCardContent,\n ToolShellCardFooter,\n ToolShellCardHeader,\n ToolShellFooter,\n ToolShellHeader,\n} from '../shell';\nimport { useToolProgress } from '../shell/toolProgress';\nimport shellStyles from '../shell/ToolShellCard.module.css';\nimport styles from './CreatePlanTool.module.css';\n\nimport type {\n CreatePlanToolInput,\n CreatePlanToolOutput,\n ReadPlanToolOutput,\n} from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\nfunction fieldString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmed = value.trim();\n\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction planCardTitle(name: string | undefined, failed: boolean, live: boolean): string {\n if (failed) {\n return 'Plan failed';\n }\n\n if (name) {\n return name;\n }\n\n return live ? 'Creating plan' : 'Created plan';\n}\n\nconst PLAN_TOOLS = new Set(['ReadPlan', 'CreatePlan']);\n\n/** ReadPlan is a compact row; CreatePlan is a card. Open opens the plan panel. */\nexport function CreatePlanTool({ part }: ToolRendererProps) {\n const { onOpenPlan, onBuildPlan } = useChat();\n const failure = getToolFailureRowState(part);\n const { live } = useToolProgress(part.state);\n\n if (!isToolUIPart(part)) {\n return null;\n }\n\n const toolName = getToolName(part);\n\n if (!PLAN_TOOLS.has(toolName)) {\n return null;\n }\n\n const input = part.input as CreatePlanToolInput | undefined;\n const output = part.state === 'output-available'\n ? part.output as CreatePlanToolOutput | ReadPlanToolOutput | undefined\n : undefined;\n const name = fieldString(output?.name)\n ?? fieldString((input && 'name' in input) ? input.name : undefined);\n const overview = fieldString((input && 'overview' in input) ? input.overview : undefined)\n ?? fieldString((output && 'overview' in output) ? output.overview : undefined);\n const failed = failure.useFailureLabel;\n const isInputStreaming = part.state === 'input-streaming';\n\n if (toolName === 'ReadPlan') {\n return (\n <ToolShell data-slot=\"read-plan-tool\">\n <ToolShellHeader\n state={ part.state }\n statusDetail={ failure.tooltip }\n title=\"Read plan\"\n titleInProgress=\"Reading plan\"\n icon={ <PlanIcon aria-hidden /> }\n >\n <Show when={ name }>\n { planName => (\n <Chip\n aria-label={ planName }\n item={ { label: planName, icon: 'nav' } }\n onAction={ (onOpenPlan && !failed) ? () => onOpenPlan() : undefined }\n />\n ) }\n </Show>\n </ToolShellHeader>\n\n <Show when={ failure.problemText }>\n <ToolShellFooter>\n <Text color=\"danger\" variant=\"xs\">{failure.problemText}</Text>\n </ToolShellFooter>\n </Show>\n </ToolShell>\n );\n }\n\n const canOpen = Boolean(onOpenPlan && !failed && !isInputStreaming);\n const canBuild = Boolean(onBuildPlan && !failed && !isInputStreaming);\n const errorText = failure.problemText;\n const bodyText = failed ? errorText : overview;\n\n return (\n <ToolShellCard\n collapsible={ false }\n className={ shellStyles.tool }\n data-slot=\"create-plan-tool\"\n >\n <ToolShellCardHeader\n state={ part.state }\n statusDetail={ failure.tooltip }\n title={ planCardTitle(name, failed, live) }\n icon={ <PlanIcon aria-hidden /> }\n />\n\n <Show when={ !isInputStreaming && bodyText }>\n { text => (\n <ToolShellCardContent className={ styles.content }>\n <Text\n color={ failed ? 'danger' : 'secondary' }\n variant=\"sm\"\n wrap=\"anywhere\"\n >\n {text}\n </Text>\n </ToolShellCardContent>\n ) }\n </Show>\n\n <Show when={ canOpen || canBuild }>\n <ToolShellCardFooter className={ styles.footer }>\n <Show when={ canBuild }>\n <Button\n size=\"xs\"\n color=\"contrast\"\n onPress={ () => onBuildPlan?.() }\n >\n Build\n </Button>\n </Show>\n\n <Show when={ canOpen }>\n <Button\n className=\"ml-auto\"\n size=\"xs\"\n variant=\"filling\"\n onPress={ () => onOpenPlan?.() }\n >\n <ArrowUpRight aria-hidden />\n Open\n </Button>\n </Show>\n </ToolShellCardFooter>\n </Show>\n </ToolShellCard>\n );\n}\n"],"names":["fieldString","value","trimmed","planCardTitle","name","failed","live","PLAN_TOOLS","CreatePlanTool","part","onOpenPlan","onBuildPlan","useChat","failure","getToolFailureRowState","useToolProgress","isToolUIPart","toolName","getToolName","input","output","overview","isInputStreaming","ToolShell","_jsx","ToolShellHeader","PlanIcon","Show","planName","Chip","ToolShellFooter","Text","canOpen","canBuild","errorText","bodyText","ToolShellCard","shellStyles","ToolShellCardHeader","text","ToolShellCardContent","styles","ToolShellCardFooter","Button","ArrowUpRight"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreambleTool.js","sources":["../../../../src/chat/Tool/preamble/PreambleTool.tsx"],"sourcesContent":["import { getToolName, isToolUIPart } from '
|
|
1
|
+
{"version":3,"file":"PreambleTool.js","sources":["../../../../src/chat/Tool/preamble/PreambleTool.tsx"],"sourcesContent":["import { getToolName, isToolUIPart } from '@reforma/types';\n\nimport { MessageText } from '../../Message/streamdown/MessageText';\n\nimport type { PreambleToolInput } from '@reforma/types/sandbox';\nimport type { ToolRendererProps } from '../types';\n\n/** User-facing status note — renders like assistant prose (markdown), not a tool shell. */\nexport function PreambleTool({ part }: ToolRendererProps) {\n if (!isToolUIPart(part) || getToolName(part) !== 'Preamble') {\n return null;\n }\n\n const content = (part.input as PreambleToolInput | undefined)?.content?.trim();\n\n if (!content) {\n return null;\n }\n\n const streaming = part.state === 'input-streaming' || part.state === 'input-available';\n\n return (\n <MessageText\n mode={ streaming ? 'streaming' : 'static' }\n >\n {content}\n </MessageText>\n );\n}\n"],"names":["PreambleTool","part","isToolUIPart","getToolName","content","streaming","MessageText"],"mappings":";;;AAIO,SAASA,EAAa;AAAA,EAC3B,MAAAC;AACF,GAAG;AACD,MAAI,CAACC,EAAaD,CAAI,KAAKE,EAAYF,CAAI,MAAM;AAC/C,WAAO;AAET,QAAMG,IAAUH,EAAK,OAAO,SAAS,KAAA;AACrC,MAAI,CAACG;AACH,WAAO;AAET,QAAMC,IAAYJ,EAAK,UAAU,qBAAqBA,EAAK,UAAU;AACrE,2BAAyBK,GAAa;AAAA,IACpC,MAAMD,IAAY,cAAc;AAAA,IAChC,UAAUD;AAAA,EAAA,CACX;AACH;"}
|