@bikdotai/bik-component-library 0.0.830 → 0.0.831-beta.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.
Files changed (91) hide show
  1. package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
  2. package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
  3. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +17 -65
  4. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js +41 -0
  6. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js.map +1 -0
  7. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +5 -5
  8. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  9. package/dist/cjs/components/agent-builder/components/DrawerHeaderText.js +15 -0
  10. package/dist/cjs/components/agent-builder/components/DrawerHeaderText.js.map +1 -0
  11. package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
  12. package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/MentionField.js +1 -1
  14. package/dist/cjs/components/agent-builder/components/MentionField.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/components/MentionPicker.js +20 -20
  16. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js +23 -0
  18. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js.map +1 -0
  19. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +5 -5
  20. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  21. package/dist/cjs/components/agent-builder/components/ToolInstructionsField.js +5 -0
  22. package/dist/cjs/components/agent-builder/components/ToolInstructionsField.js.map +1 -0
  23. package/dist/cjs/components/agent-builder/constants/tools.js +2 -0
  24. package/dist/cjs/components/agent-builder/constants/tools.js.map +1 -0
  25. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  26. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  27. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  28. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  29. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js +3 -3
  30. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  31. package/dist/cjs/components/agent-builder/utils/sourceIcons.js +1 -1
  32. package/dist/cjs/components/agent-builder/utils/sourceIcons.js.map +1 -1
  33. package/dist/cjs/components/side-modal/SideModal.style.js +11 -10
  34. package/dist/cjs/components/side-modal/SideModal.style.js.map +1 -1
  35. package/dist/cjs/editor/extensions/mention/MentionExtension.js +1 -1
  36. package/dist/cjs/editor/extensions/mention/MentionExtension.js.map +1 -1
  37. package/dist/cjs/index.js +1 -1
  38. package/dist/esm/components/agent-builder/AgentBuilder.js +100 -96
  39. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  40. package/dist/esm/components/agent-builder/AgentBuilder.model.d.ts +144 -1
  41. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +0 -21
  42. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +42 -111
  43. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  44. package/dist/esm/components/agent-builder/components/ConfigToolPanel.d.ts +33 -0
  45. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js +251 -0
  46. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js.map +1 -0
  47. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.d.ts +9 -1
  48. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +318 -219
  49. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  50. package/dist/esm/components/agent-builder/components/DrawerHeaderText.d.ts +33 -0
  51. package/dist/esm/components/agent-builder/components/DrawerHeaderText.js +42 -0
  52. package/dist/esm/components/agent-builder/components/DrawerHeaderText.js.map +1 -0
  53. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +6 -0
  54. package/dist/esm/components/agent-builder/components/MentionEditor.js +38 -30
  55. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
  56. package/dist/esm/components/agent-builder/components/MentionField.js +77 -52
  57. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -1
  58. package/dist/esm/components/agent-builder/components/MentionPicker.d.ts +7 -0
  59. package/dist/esm/components/agent-builder/components/MentionPicker.js +162 -145
  60. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  61. package/dist/esm/components/agent-builder/components/RestApiToolPanel.d.ts +27 -0
  62. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js +270 -0
  63. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js.map +1 -0
  64. package/dist/esm/components/agent-builder/components/SelectableListSection.d.ts +14 -0
  65. package/dist/esm/components/agent-builder/components/SelectableListSection.js +166 -140
  66. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  67. package/dist/esm/components/agent-builder/components/ToolInstructionsField.d.ts +19 -0
  68. package/dist/esm/components/agent-builder/components/ToolInstructionsField.js +66 -0
  69. package/dist/esm/components/agent-builder/components/ToolInstructionsField.js.map +1 -0
  70. package/dist/esm/components/agent-builder/constants/tools.d.ts +67 -0
  71. package/dist/esm/components/agent-builder/constants/tools.js +29 -0
  72. package/dist/esm/components/agent-builder/constants/tools.js.map +1 -0
  73. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +19 -1
  74. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +169 -140
  75. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  76. package/dist/esm/components/agent-builder/index.d.ts +2 -1
  77. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +241 -141
  78. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  79. package/dist/esm/components/agent-builder/utils/mentionSerialization.d.ts +18 -3
  80. package/dist/esm/components/agent-builder/utils/mentionSerialization.js +81 -62
  81. package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  82. package/dist/esm/components/agent-builder/utils/sourceIcons.d.ts +15 -9
  83. package/dist/esm/components/agent-builder/utils/sourceIcons.js +16 -8
  84. package/dist/esm/components/agent-builder/utils/sourceIcons.js.map +1 -1
  85. package/dist/esm/components/side-modal/SideModal.style.js +1 -0
  86. package/dist/esm/components/side-modal/SideModal.style.js.map +1 -1
  87. package/dist/esm/editor/extensions/mention/MentionExtension.js +60 -57
  88. package/dist/esm/editor/extensions/mention/MentionExtension.js.map +1 -1
  89. package/dist/esm/index.js +97 -95
  90. package/dist/esm/index.js.map +1 -1
  91. package/package.json +1 -1
@@ -0,0 +1,270 @@
1
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
+ import z from "../../../assets/icons/delete.svg.js";
3
+ import U from "../../../assets/icons/plus.svg.js";
4
+ import { useState as n } from "react";
5
+ import x from "styled-components";
6
+ import { TitleSmall as c } from "../../TypographyStyle.js";
7
+ import { COLORS as s } from "../../../constants/Theme.js";
8
+ import { FieldBlock as d } from "../AgentBuilder.styled.js";
9
+ import { AGENT_CHAR_LIMITS as F } from "../constants/charLimits.js";
10
+ import { ToolSource as G } from "../constants/tools.js";
11
+ import { SOURCE_ICONS as J } from "../utils/sourceIcons.js";
12
+ import { DRAWER_BODY_STYLE as Y, DRAWER_HEADER_STYLE as V, DrawerHeaderText as W } from "./DrawerHeaderText.js";
13
+ import { ToolInstructionsField as K } from "./ToolInstructionsField.js";
14
+ import { SideModal as Q } from "../../side-modal/SideModal.js";
15
+ import { Input as m } from "../../input/Input.js";
16
+ import { Dropdown as X } from "../../dropdown/Dropdown.js";
17
+ import { unwrapDropdownValue as Z } from "../../dropdown/utils.js";
18
+ import { Button as ee } from "../../button/Button.js";
19
+ import { BikEditor as I } from "../../../editor/BikEditor.js";
20
+ const te = ["GET", "POST", "PUT", "PATCH", "DELETE"], re = te.map((i) => ({
21
+ label: i,
22
+ value: i
23
+ })), He = ({
24
+ onClose: i,
25
+ onSave: A,
26
+ initial: a,
27
+ onImprove: O,
28
+ charLimits: T = F,
29
+ zIndex: k
30
+ }) => {
31
+ const [u, P] = n(a?.name ?? ""), [v, B] = n(a?.instructions ?? ""), [h, D] = n(a?.url ?? ""), [f, L] = n(
32
+ a?.method ?? "POST"
33
+ ), [g, y] = n(
34
+ a?.headers ?? [{ key: "", value: "" }]
35
+ ), [S, _] = n(a?.requestBody ?? ""), [b, M] = n(
36
+ a?.responseSample ?? ""
37
+ ), [C, R] = n(!1), H = (r, t) => y(
38
+ (o) => o.map((p, j) => j === r ? { ...p, ...t } : p)
39
+ ), N = () => y((r) => [...r, { key: "", value: "" }]), q = (r) => y((t) => t.filter((o, p) => p !== r)), E = u.trim().length > 0 && h.trim().length > 0, $ = async () => {
40
+ if (!E || C)
41
+ return;
42
+ const r = {
43
+ id: a?.id ?? `restapi_${Date.now().toString(36)}`,
44
+ name: u.trim(),
45
+ instructions: v,
46
+ url: h.trim(),
47
+ method: f,
48
+ // Drop fully-empty header rows.
49
+ headers: g.filter((o) => o.key.trim() || o.value.trim()),
50
+ requestBody: S,
51
+ responseSample: b
52
+ }, t = A(r);
53
+ if (t && typeof t.then == "function") {
54
+ R(!0);
55
+ try {
56
+ await t;
57
+ } finally {
58
+ R(!1);
59
+ }
60
+ }
61
+ };
62
+ return /* @__PURE__ */ l(
63
+ Q,
64
+ {
65
+ header: "Rest API",
66
+ closeOnEscapeKey: !1,
67
+ zIndex: k,
68
+ headerCustomComponent: /* @__PURE__ */ e(
69
+ W,
70
+ {
71
+ title: "Rest API",
72
+ subtitle: "Connect to any API endpoint. Configure the request, then test it with a sample response.",
73
+ icon: J[G.RestApi]
74
+ }
75
+ ),
76
+ width: "431px",
77
+ headerStyle: V,
78
+ bodyStyle: Y,
79
+ onClose: i,
80
+ saveButtonProps: {
81
+ "data-test": "restapi-save",
82
+ buttonText: "Save",
83
+ buttonType: "primary",
84
+ size: "small",
85
+ disabled: !E,
86
+ isLoading: C,
87
+ onClick: $
88
+ },
89
+ cancelButtonProps: {
90
+ "data-test": "restapi-cancel",
91
+ buttonText: "Cancel",
92
+ buttonType: "tertiaryGray",
93
+ size: "small",
94
+ onClick: i
95
+ },
96
+ children: [
97
+ /* @__PURE__ */ e(
98
+ m,
99
+ {
100
+ "data-test": "restapi-name",
101
+ variant: "small",
102
+ labelText: "Name",
103
+ labelTextBold: !0,
104
+ placeholder: "Enter name",
105
+ value: u,
106
+ maxCharLimit: T.name,
107
+ onChangeText: P
108
+ }
109
+ ),
110
+ /* @__PURE__ */ e(
111
+ K,
112
+ {
113
+ "data-test": "restapi-instructions",
114
+ label: "Instructions",
115
+ value: v,
116
+ onChange: B,
117
+ maxLength: T.instructions,
118
+ placeholder: "Describe how should the LLM generate the rest API",
119
+ onImprove: O
120
+ }
121
+ ),
122
+ /* @__PURE__ */ e(d, { children: /* @__PURE__ */ e(
123
+ m,
124
+ {
125
+ "data-test": "restapi-url",
126
+ variant: "small",
127
+ labelText: "Request URL",
128
+ labelTextBold: !0,
129
+ placeholder: "https://",
130
+ type: "url",
131
+ value: h,
132
+ onChangeText: D
133
+ }
134
+ ) }),
135
+ /* @__PURE__ */ l(d, { children: [
136
+ /* @__PURE__ */ e(c, { color: s.content.primary, children: "HTTP method" }),
137
+ /* @__PURE__ */ e(
138
+ X,
139
+ {
140
+ "data-test": "restapi-method",
141
+ size: "small",
142
+ width: "100%",
143
+ options: re,
144
+ defaultOptions: [{ label: f, value: f }],
145
+ onSelect: (r) => {
146
+ const t = Z(r);
147
+ t && L(t);
148
+ }
149
+ }
150
+ )
151
+ ] }),
152
+ /* @__PURE__ */ l(d, { children: [
153
+ /* @__PURE__ */ e(c, { color: s.content.primary, children: "Headers" }),
154
+ g.map((r, t) => (
155
+ // eslint-disable-next-line react/no-array-index-key
156
+ /* @__PURE__ */ l(oe, { "data-test": `restapi-header-${t}`, children: [
157
+ /* @__PURE__ */ e(
158
+ m,
159
+ {
160
+ variant: "small",
161
+ hideInputHeader: !0,
162
+ placeholder: "Accept",
163
+ value: r.key,
164
+ onChangeText: (o) => H(t, { key: o })
165
+ }
166
+ ),
167
+ /* @__PURE__ */ e(
168
+ m,
169
+ {
170
+ variant: "small",
171
+ hideInputHeader: !0,
172
+ placeholder: "Value",
173
+ value: r.value,
174
+ onChangeText: (o) => H(t, { value: o })
175
+ }
176
+ ),
177
+ /* @__PURE__ */ e(
178
+ ne,
179
+ {
180
+ type: "button",
181
+ "aria-label": "Remove header",
182
+ "data-test": `restapi-header-remove-${t}`,
183
+ onClick: () => q(t),
184
+ children: /* @__PURE__ */ e(
185
+ z,
186
+ {
187
+ width: 16,
188
+ height: 16,
189
+ color: s.content.secondary
190
+ }
191
+ )
192
+ }
193
+ )
194
+ ] }, t)
195
+ )),
196
+ /* @__PURE__ */ e(ae, { children: /* @__PURE__ */ e(
197
+ ee,
198
+ {
199
+ "data-test": "restapi-add-header",
200
+ buttonType: "dashRegular",
201
+ size: "small",
202
+ LeadingIcon: U,
203
+ buttonText: "Add header",
204
+ onClick: N
205
+ }
206
+ ) })
207
+ ] }),
208
+ /* @__PURE__ */ l(d, { children: [
209
+ /* @__PURE__ */ e(c, { color: s.content.primary, children: "Request " }),
210
+ /* @__PURE__ */ e(
211
+ I,
212
+ {
213
+ features: { jsonMode: !0 },
214
+ initialContent: S,
215
+ style: w,
216
+ placeholder: "Type or paste JSON here",
217
+ onChange: (r) => _(r.text),
218
+ minHeight: "120px",
219
+ maxHeight: "240px"
220
+ }
221
+ )
222
+ ] }),
223
+ /* @__PURE__ */ l(d, { children: [
224
+ /* @__PURE__ */ e(c, { color: s.content.primary, children: "Response " }),
225
+ /* @__PURE__ */ e(
226
+ I,
227
+ {
228
+ features: { jsonMode: !0 },
229
+ style: w,
230
+ initialContent: b,
231
+ placeholder: "Type or paste JSON here",
232
+ onChange: (r) => M(r.text),
233
+ minHeight: "120px",
234
+ maxHeight: "240px"
235
+ }
236
+ )
237
+ ] })
238
+ ]
239
+ }
240
+ );
241
+ }, oe = x.div`
242
+ display: flex;
243
+ align-items: center;
244
+ gap: 8px;
245
+ `, ae = x.div`
246
+ display: flex;
247
+ `, ne = x.button`
248
+ display: inline-flex;
249
+ align-items: center;
250
+ justify-content: center;
251
+ flex-shrink: 0;
252
+ width: 32px;
253
+ height: 32px;
254
+ border: 1px solid ${s.stroke.primary};
255
+ border-radius: 4px;
256
+ background: ${s.surface.standard};
257
+ cursor: pointer;
258
+
259
+ &:hover {
260
+ border-color: ${s.content.secondary};
261
+ }
262
+ `, w = {
263
+ borderRadius: "4px",
264
+ overflow: "hidden"
265
+ };
266
+ export {
267
+ w as JsonFieldBox,
268
+ He as RestApiToolPanel
269
+ };
270
+ //# sourceMappingURL=RestApiToolPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestApiToolPanel.js","sources":["../../../../../src/components/agent-builder/components/RestApiToolPanel.tsx"],"sourcesContent":["import DeleteIcon from '@src/assets/icons/delete.svg';\nimport PlusIcon from '@src/assets/icons/plus.svg';\nimport { BikEditor } from '@src/editor';\nimport React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '@src/components/button';\nimport { Dropdown, unwrapDropdownValue } from '@src/components/dropdown';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { Input } from '@src/components/input';\nimport { SideModal } from '@src/components/side-modal';\nimport { TitleSmall } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tRestApiHeader,\n\tRestApiMethod,\n\tRestApiToolConfig,\n} from '../AgentBuilder.model';\nimport { FieldBlock } from '../AgentBuilder.styled';\nimport type { AgentCharLimits } from '../constants/charLimits';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport { ToolSource } from '../constants/tools';\nimport { SOURCE_ICONS } from '../utils/sourceIcons';\nimport {\n\tDRAWER_BODY_STYLE,\n\tDRAWER_HEADER_STYLE,\n\tDrawerHeaderText,\n} from './DrawerHeaderText';\nimport { ToolInstructionsField } from './ToolInstructionsField';\n\ninterface RestApiToolPanelProps {\n\tonClose: () => void;\n\t/** Persist the config. A pending promise shows the Save loader. */\n\tonSave: (config: RestApiToolConfig) => void | Promise<void>;\n\t/** Seed values when editing an existing tool. */\n\tinitial?: RestApiToolConfig;\n\t/** Optional \"Improve with AI\" for the instructions field. Omit to hide it. */\n\tonImprove?: (text: string) => Promise<string>;\n\tcharLimits?: AgentCharLimits;\n\t/** SideModal stacking order — raise it when opened over another drawer. */\n\tzIndex?: number;\n}\n\nconst METHODS: RestApiMethod[] = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];\nconst METHOD_OPTIONS: SingleOption[] = METHODS.map((m) => ({\n\tlabel: m,\n\tvalue: m,\n}));\n\n/**\n * Right-side drawer to configure a \"Rest API\" tool: the endpoint the agent can\n * call, plus a JSON request-body template and a sample response. Mount it fresh\n * per open (key it) so `initial` seeds the state. Built on the shared `SideModal`\n * shell and the BikEditor JSON body mode for the Request / Response editors.\n */\nexport const RestApiToolPanel: React.FC<RestApiToolPanelProps> = ({\n\tonClose,\n\tonSave,\n\tinitial,\n\tonImprove,\n\tcharLimits = AGENT_CHAR_LIMITS,\n\tzIndex,\n}) => {\n\tconst [name, setName] = useState(initial?.name ?? '');\n\tconst [instructions, setInstructions] = useState(initial?.instructions ?? '');\n\tconst [url, setUrl] = useState(initial?.url ?? '');\n\tconst [method, setMethod] = useState<RestApiMethod>(\n\t\tinitial?.method ?? 'POST',\n\t);\n\tconst [headers, setHeaders] = useState<RestApiHeader[]>(\n\t\tinitial?.headers ?? [{ key: '', value: '' }],\n\t);\n\tconst [requestBody, setRequestBody] = useState(initial?.requestBody ?? '');\n\tconst [responseSample, setResponseSample] = useState(\n\t\tinitial?.responseSample ?? '',\n\t);\n\tconst [saving, setSaving] = useState(false);\n\n\tconst patchHeader = (i: number, patch: Partial<RestApiHeader>) =>\n\t\tsetHeaders((prev) =>\n\t\t\tprev.map((h, idx) => (idx === i ? { ...h, ...patch } : h)),\n\t\t);\n\tconst addHeader = () =>\n\t\tsetHeaders((prev) => [...prev, { key: '', value: '' }]);\n\tconst removeHeader = (i: number) =>\n\t\tsetHeaders((prev) => prev.filter((_, idx) => idx !== i));\n\n\tconst canSave = name.trim().length > 0 && url.trim().length > 0;\n\n\tconst handleSave = async () => {\n\t\tif (!canSave || saving) {\n\t\t\treturn;\n\t\t}\n\t\tconst config: RestApiToolConfig = {\n\t\t\tid: initial?.id ?? `restapi_${Date.now().toString(36)}`,\n\t\t\tname: name.trim(),\n\t\t\tinstructions,\n\t\t\turl: url.trim(),\n\t\t\tmethod,\n\t\t\t// Drop fully-empty header rows.\n\t\t\theaders: headers.filter((h) => h.key.trim() || h.value.trim()),\n\t\t\trequestBody,\n\t\t\tresponseSample,\n\t\t};\n\t\tconst result = onSave(config);\n\t\tif (result && typeof (result as Promise<void>).then === 'function') {\n\t\t\tsetSaving(true);\n\t\t\ttry {\n\t\t\t\tawait result;\n\t\t\t} finally {\n\t\t\t\tsetSaving(false);\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<SideModal\n\t\t\theader=\"Rest API\"\n\t\t\tcloseOnEscapeKey={false}\n\t\t\tzIndex={zIndex}\n\t\t\theaderCustomComponent={\n\t\t\t\t<DrawerHeaderText\n\t\t\t\t\ttitle=\"Rest API\"\n\t\t\t\t\tsubtitle=\"Connect to any API endpoint. Configure the request, then test it with a sample response.\"\n\t\t\t\t\ticon={SOURCE_ICONS[ToolSource.RestApi]}\n\t\t\t\t/>\n\t\t\t}\n\t\t\twidth=\"431px\"\n\t\t\theaderStyle={DRAWER_HEADER_STYLE}\n\t\t\tbodyStyle={DRAWER_BODY_STYLE}\n\t\t\tonClose={onClose}\n\t\t\tsaveButtonProps={{\n\t\t\t\t'data-test': 'restapi-save',\n\t\t\t\tbuttonText: 'Save',\n\t\t\t\tbuttonType: 'primary',\n\t\t\t\tsize: 'small',\n\t\t\t\tdisabled: !canSave,\n\t\t\t\tisLoading: saving,\n\t\t\t\tonClick: handleSave,\n\t\t\t}}\n\t\t\tcancelButtonProps={{\n\t\t\t\t'data-test': 'restapi-cancel',\n\t\t\t\tbuttonText: 'Cancel',\n\t\t\t\tbuttonType: 'tertiaryGray',\n\t\t\t\tsize: 'small',\n\t\t\t\tonClick: onClose,\n\t\t\t}}\n\t\t>\n\t\t\t<Input\n\t\t\t\tdata-test=\"restapi-name\"\n\t\t\t\tvariant=\"small\"\n\t\t\t\tlabelText=\"Name\"\n\t\t\t\tlabelTextBold\n\t\t\t\tplaceholder=\"Enter name\"\n\t\t\t\tvalue={name}\n\t\t\t\tmaxCharLimit={charLimits.name}\n\t\t\t\tonChangeText={setName}\n\t\t\t/>\n\n\t\t\t<ToolInstructionsField\n\t\t\t\tdata-test=\"restapi-instructions\"\n\t\t\t\tlabel=\"Instructions\"\n\t\t\t\tvalue={instructions}\n\t\t\t\tonChange={setInstructions}\n\t\t\t\tmaxLength={charLimits.instructions}\n\t\t\t\tplaceholder=\"Describe how should the LLM generate the rest API\"\n\t\t\t\tonImprove={onImprove}\n\t\t\t/>\n\n\t\t\t<FieldBlock>\n\t\t\t\t<Input\n\t\t\t\t\tdata-test=\"restapi-url\"\n\t\t\t\t\tvariant=\"small\"\n\t\t\t\t\tlabelText=\"Request URL\"\n\t\t\t\t\tlabelTextBold\n\t\t\t\t\tplaceholder=\"https://\"\n\t\t\t\t\ttype=\"url\"\n\t\t\t\t\tvalue={url}\n\t\t\t\t\tonChangeText={setUrl}\n\t\t\t\t/>\n\t\t\t</FieldBlock>\n\n\t\t\t<FieldBlock>\n\t\t\t\t<TitleSmall color={COLORS.content.primary}>HTTP method</TitleSmall>\n\t\t\t\t<Dropdown\n\t\t\t\t\tdata-test=\"restapi-method\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\toptions={METHOD_OPTIONS}\n\t\t\t\t\tdefaultOptions={[{ label: method, value: method }]}\n\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\tconst v = unwrapDropdownValue(opt);\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tsetMethod(v as RestApiMethod);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</FieldBlock>\n\n\t\t\t<FieldBlock>\n\t\t\t\t<TitleSmall color={COLORS.content.primary}>Headers</TitleSmall>\n\t\t\t\t{headers.map((h, i) => (\n\t\t\t\t\t// eslint-disable-next-line react/no-array-index-key\n\t\t\t\t\t<HeaderRow key={i} data-test={`restapi-header-${i}`}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tvariant=\"small\"\n\t\t\t\t\t\t\thideInputHeader\n\t\t\t\t\t\t\tplaceholder=\"Accept\"\n\t\t\t\t\t\t\tvalue={h.key}\n\t\t\t\t\t\t\tonChangeText={(v) => patchHeader(i, { key: v })}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tvariant=\"small\"\n\t\t\t\t\t\t\thideInputHeader\n\t\t\t\t\t\t\tplaceholder=\"Value\"\n\t\t\t\t\t\t\tvalue={h.value}\n\t\t\t\t\t\t\tonChangeText={(v) => patchHeader(i, { value: v })}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconBtn\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-label=\"Remove header\"\n\t\t\t\t\t\t\tdata-test={`restapi-header-remove-${i}`}\n\t\t\t\t\t\t\tonClick={() => removeHeader(i)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DeleteIcon\n\t\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</IconBtn>\n\t\t\t\t\t</HeaderRow>\n\t\t\t\t))}\n\t\t\t\t<AddHeaderRow>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdata-test=\"restapi-add-header\"\n\t\t\t\t\t\tbuttonType=\"dashRegular\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tLeadingIcon={PlusIcon}\n\t\t\t\t\t\tbuttonText=\"Add header\"\n\t\t\t\t\t\tonClick={addHeader}\n\t\t\t\t\t/>\n\t\t\t\t</AddHeaderRow>\n\t\t\t</FieldBlock>\n\n\t\t\t<FieldBlock>\n\t\t\t\t<TitleSmall color={COLORS.content.primary}>Request </TitleSmall>\n\t\t\t\t<BikEditor\n\t\t\t\t\tfeatures={{ jsonMode: true }}\n\t\t\t\t\tinitialContent={requestBody}\n\t\t\t\t\tstyle={JsonFieldBox}\n\t\t\t\t\tplaceholder=\"Type or paste JSON here\"\n\t\t\t\t\tonChange={(c) => setRequestBody(c.text)}\n\t\t\t\t\tminHeight=\"120px\"\n\t\t\t\t\tmaxHeight=\"240px\"\n\t\t\t\t/>\n\t\t\t</FieldBlock>\n\n\t\t\t<FieldBlock>\n\t\t\t\t<TitleSmall color={COLORS.content.primary}>Response </TitleSmall>\n\t\t\t\t<BikEditor\n\t\t\t\t\tfeatures={{ jsonMode: true }}\n\t\t\t\t\tstyle={JsonFieldBox}\n\t\t\t\t\tinitialContent={responseSample}\n\t\t\t\t\tplaceholder=\"Type or paste JSON here\"\n\t\t\t\t\tonChange={(c) => setResponseSample(c.text)}\n\t\t\t\t\tminHeight=\"120px\"\n\t\t\t\t\tmaxHeight=\"240px\"\n\t\t\t\t/>\n\t\t\t</FieldBlock>\n\t\t</SideModal>\n\t);\n};\n\nconst HeaderRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n`;\n\nconst AddHeaderRow = styled.div`\n\tdisplay: flex;\n`;\n\nconst IconBtn = styled.button`\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tborder-radius: 4px;\n\tbackground: ${COLORS.surface.standard};\n\tcursor: pointer;\n\n\t&:hover {\n\t\tborder-color: ${COLORS.content.secondary};\n\t}\n`;\n\nexport const JsonFieldBox = {\n\tborderRadius: '4px',\n\toverflow: 'hidden',\n};\n"],"names":["METHODS","METHOD_OPTIONS","m","RestApiToolPanel","onClose","onSave","initial","onImprove","charLimits","AGENT_CHAR_LIMITS","zIndex","name","setName","useState","instructions","setInstructions","url","setUrl","method","setMethod","headers","setHeaders","requestBody","setRequestBody","responseSample","setResponseSample","saving","setSaving","patchHeader","i","patch","prev","h","idx","addHeader","removeHeader","_","canSave","handleSave","config","result","jsxs","SideModal","jsx","DrawerHeaderText","SOURCE_ICONS","ToolSource","DRAWER_HEADER_STYLE","DRAWER_BODY_STYLE","Input","ToolInstructionsField","FieldBlock","TitleSmall","COLORS","Dropdown","opt","v","unwrapDropdownValue","HeaderRow","IconBtn","DeleteIcon","AddHeaderRow","Button","PlusIcon","BikEditor","JsonFieldBox","c","styled"],"mappings":"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"}
@@ -1,12 +1,19 @@
1
1
  import { MentionItem } from '../../../editor';
2
2
  import { default as React } from 'react';
3
3
  import { SingleOption } from '../../dropdown/type';
4
+ import { ToolAction } from '../constants/tools';
4
5
  import { SourceIcon } from '../utils/sourceIcons';
5
6
  export interface SelectableItem {
6
7
  id: string;
7
8
  label: string;
8
9
  /** Leading brand glyph (e.g. a tool's source icon). */
9
10
  icon?: SourceIcon;
11
+ /**
12
+ * When set, this row shows an edit (Configure) icon that calls this instead of
13
+ * the section-level `onConfigure`. Use for rows that open their own drawer
14
+ * (e.g. a configured Rest API / email-handover tool).
15
+ */
16
+ onConfigure?: () => void;
10
17
  }
11
18
  /** A tool source for the empty-state picker (Tools): a button → its searchable list. */
12
19
  export interface SourceGroup {
@@ -57,6 +64,13 @@ interface SelectableListSectionProps {
57
64
  * `createOption.onSelect`.
58
65
  */
59
66
  mentionItems?: MentionItem[];
67
+ /**
68
+ * Built-in "action" tools (e.g. Rest API / Handover to email) that open a
69
+ * config drawer via `onSelect` instead of adding a mention. Shown as
70
+ * empty-state source buttons (only while no items exist, alongside
71
+ * `sourceGroups`) AND as rows inside the `@` picker's Tools view.
72
+ */
73
+ actionSources?: ToolAction[];
60
74
  }
61
75
  export declare const SelectableListSection: React.FC<SelectableListSectionProps>;
62
76
  export {};