@bikdotai/bik-component-library 0.0.850-beta.1 → 0.0.850-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +14 -7
  2. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  3. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js +1 -1
  4. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +5 -5
  6. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  7. package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
  8. package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -1
  9. package/dist/cjs/components/agent-builder/components/MentionPicker.js +24 -24
  10. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  11. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js +4 -4
  12. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +2 -2
  14. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/constants/tools.js +1 -1
  16. package/dist/cjs/components/agent-builder/constants/tools.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  18. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  19. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  20. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  21. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js +2 -2
  22. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  23. package/dist/cjs/components/agent-builder/utils/sourceIcons.js +1 -1
  24. package/dist/cjs/components/agent-builder/utils/sourceIcons.js.map +1 -1
  25. package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
  26. package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
  27. package/dist/cjs/components/agent-listing/AgentTable.js +1 -1
  28. package/dist/cjs/components/agent-listing/AgentTable.js.map +1 -1
  29. package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
  30. package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
  31. package/dist/cjs/components/bik-layout/CommonStyles.js +6 -4
  32. package/dist/cjs/components/bik-layout/CommonStyles.js.map +1 -1
  33. package/dist/cjs/components/button/themes.js +3 -3
  34. package/dist/cjs/components/button/themes.js.map +1 -1
  35. package/dist/cjs/components/datePicker/DatePicker.js +1 -1
  36. package/dist/cjs/components/datePicker/DatePicker.js.map +1 -1
  37. package/dist/cjs/components/datePicker/DatePicker.styled.js +14 -20
  38. package/dist/cjs/components/datePicker/DatePicker.styled.js.map +1 -1
  39. package/dist/cjs/components/dropdown/ChipInput.js +1 -1
  40. package/dist/cjs/components/dropdown/ChipInput.js.map +1 -1
  41. package/dist/cjs/components/dropdown/Common.styled.js +5 -6
  42. package/dist/cjs/components/dropdown/Common.styled.js.map +1 -1
  43. package/dist/cjs/components/dropdown/Dropdown.js +1 -1
  44. package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
  45. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  46. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  47. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +1 -1
  48. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  49. package/dist/cjs/components/input/Input.js +1 -1
  50. package/dist/cjs/components/input/Input.js.map +1 -1
  51. package/dist/cjs/components/input/Input.styled.js +12 -25
  52. package/dist/cjs/components/input/Input.styled.js.map +1 -1
  53. package/dist/cjs/components/tabs/Tabs.js +1 -1
  54. package/dist/cjs/components/tabs/Tabs.js.map +1 -1
  55. package/dist/cjs/components/tabs/Tabs.styles.js +8 -22
  56. package/dist/cjs/components/tabs/Tabs.styles.js.map +1 -1
  57. package/dist/cjs/components/tag/Tag.js +1 -1
  58. package/dist/cjs/components/tag/Tag.js.map +1 -1
  59. package/dist/cjs/components/tag/Tag.styled.js +0 -4
  60. package/dist/cjs/components/tag/Tag.styled.js.map +1 -1
  61. package/dist/cjs/components/tag/model.js.map +1 -1
  62. package/dist/cjs/editor/BikEditor.js +1 -1
  63. package/dist/cjs/editor/BikEditor.js.map +1 -1
  64. package/dist/cjs/editor/BikEditor.styles.js +4 -4
  65. package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
  66. package/dist/cjs/editor/BikEditor.types.js.map +1 -1
  67. package/dist/cjs/editor/extensions/buildExtensions.js +2 -2
  68. package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
  69. package/dist/cjs/editor/extensions/mention/MentionChipNodeView.js +2 -0
  70. package/dist/cjs/editor/extensions/mention/MentionChipNodeView.js.map +1 -0
  71. package/dist/cjs/editor/extensions/mention/MentionExtension.js +1 -1
  72. package/dist/cjs/editor/extensions/mention/MentionExtension.js.map +1 -1
  73. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +17 -10
  74. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  75. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js +1 -1
  76. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
  77. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.d.ts +5 -0
  78. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +243 -227
  79. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  80. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +1 -1
  81. package/dist/esm/components/agent-builder/components/MentionEditor.js +93 -78
  82. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
  83. package/dist/esm/components/agent-builder/components/MentionPicker.js +179 -161
  84. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  85. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js +118 -109
  86. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
  87. package/dist/esm/components/agent-builder/components/SelectableListSection.js +117 -110
  88. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  89. package/dist/esm/components/agent-builder/constants/tools.d.ts +10 -0
  90. package/dist/esm/components/agent-builder/constants/tools.js +27 -14
  91. package/dist/esm/components/agent-builder/constants/tools.js.map +1 -1
  92. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +6 -2
  93. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +46 -43
  94. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  95. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +132 -117
  96. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  97. package/dist/esm/components/agent-builder/utils/mentionSerialization.d.ts +3 -2
  98. package/dist/esm/components/agent-builder/utils/mentionSerialization.js +24 -19
  99. package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  100. package/dist/esm/components/agent-builder/utils/sourceIcons.d.ts +9 -1
  101. package/dist/esm/components/agent-builder/utils/sourceIcons.js +15 -9
  102. package/dist/esm/components/agent-builder/utils/sourceIcons.js.map +1 -1
  103. package/dist/esm/components/agent-listing/AgentListing.js +71 -69
  104. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  105. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +6 -0
  106. package/dist/esm/components/agent-listing/AgentTable.d.ts +2 -0
  107. package/dist/esm/components/agent-listing/AgentTable.js +29 -27
  108. package/dist/esm/components/agent-listing/AgentTable.js.map +1 -1
  109. package/dist/esm/components/agent-listing/AgentTableRow.d.ts +2 -0
  110. package/dist/esm/components/agent-listing/AgentTableRow.js +50 -36
  111. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  112. package/dist/esm/components/bik-layout/CommonStyles.js +3 -1
  113. package/dist/esm/components/bik-layout/CommonStyles.js.map +1 -1
  114. package/dist/esm/components/button/themes.js +1 -1
  115. package/dist/esm/components/button/themes.js.map +1 -1
  116. package/dist/esm/components/datePicker/DatePicker.js +21 -22
  117. package/dist/esm/components/datePicker/DatePicker.js.map +1 -1
  118. package/dist/esm/components/datePicker/DatePicker.styled.d.ts +0 -10
  119. package/dist/esm/components/datePicker/DatePicker.styled.js +16 -23
  120. package/dist/esm/components/datePicker/DatePicker.styled.js.map +1 -1
  121. package/dist/esm/components/dropdown/ChipInput.d.ts +0 -1
  122. package/dist/esm/components/dropdown/ChipInput.js +30 -37
  123. package/dist/esm/components/dropdown/ChipInput.js.map +1 -1
  124. package/dist/esm/components/dropdown/Common.styled.js +6 -7
  125. package/dist/esm/components/dropdown/Common.styled.js.map +1 -1
  126. package/dist/esm/components/dropdown/Dropdown.d.ts +0 -2
  127. package/dist/esm/components/dropdown/Dropdown.js +89 -96
  128. package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
  129. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +95 -103
  130. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  131. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.d.ts +0 -1
  132. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +17 -17
  133. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  134. package/dist/esm/components/dropdown/type.d.ts +0 -2
  135. package/dist/esm/components/input/Input.js +101 -104
  136. package/dist/esm/components/input/Input.js.map +1 -1
  137. package/dist/esm/components/input/Input.model.d.ts +0 -2
  138. package/dist/esm/components/input/Input.styled.d.ts +0 -2
  139. package/dist/esm/components/input/Input.styled.js +25 -38
  140. package/dist/esm/components/input/Input.styled.js.map +1 -1
  141. package/dist/esm/components/tabs/Tabs.js +81 -103
  142. package/dist/esm/components/tabs/Tabs.js.map +1 -1
  143. package/dist/esm/components/tabs/Tabs.model.d.ts +0 -7
  144. package/dist/esm/components/tabs/Tabs.styles.d.ts +0 -2
  145. package/dist/esm/components/tabs/Tabs.styles.js +9 -23
  146. package/dist/esm/components/tabs/Tabs.styles.js.map +1 -1
  147. package/dist/esm/components/tag/Tag.d.ts +1 -1
  148. package/dist/esm/components/tag/Tag.js +15 -17
  149. package/dist/esm/components/tag/Tag.js.map +1 -1
  150. package/dist/esm/components/tag/Tag.styled.d.ts +0 -1
  151. package/dist/esm/components/tag/Tag.styled.js +6 -10
  152. package/dist/esm/components/tag/Tag.styled.js.map +1 -1
  153. package/dist/esm/components/tag/model.d.ts +0 -5
  154. package/dist/esm/components/tag/model.js.map +1 -1
  155. package/dist/esm/editor/BikEditor.js +84 -83
  156. package/dist/esm/editor/BikEditor.js.map +1 -1
  157. package/dist/esm/editor/BikEditor.styles.js +4 -4
  158. package/dist/esm/editor/BikEditor.styles.js.map +1 -1
  159. package/dist/esm/editor/BikEditor.types.d.ts +7 -0
  160. package/dist/esm/editor/BikEditor.types.js.map +1 -1
  161. package/dist/esm/editor/extensions/buildExtensions.d.ts +1 -0
  162. package/dist/esm/editor/extensions/buildExtensions.js +13 -12
  163. package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
  164. package/dist/esm/editor/extensions/mention/MentionChipNodeView.d.ts +17 -0
  165. package/dist/esm/editor/extensions/mention/MentionChipNodeView.js +39 -0
  166. package/dist/esm/editor/extensions/mention/MentionChipNodeView.js.map +1 -0
  167. package/dist/esm/editor/extensions/mention/MentionExtension.d.ts +1 -1
  168. package/dist/esm/editor/extensions/mention/MentionExtension.js +67 -45
  169. package/dist/esm/editor/extensions/mention/MentionExtension.js.map +1 -1
  170. package/package.json +1 -1
@@ -1 +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 {\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\t/** Names of the OTHER tools — a new tool can't reuse one of these. */\n\texistingNames?: string[];\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\texistingNames = [],\n}) => {\n\tconst [name, setName] = useState(initial?.name ?? '');\n\tconst [instructions, setInstructions] = useState(initial?.instructions ?? '');\n\t// New tools start with the scheme pre-filled so the user only types the host.\n\tconst [url, setUrl] = useState(initial?.url ?? 'https://');\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 nameTrimmed = name.trim();\n\t// Case-insensitive: two tools can't share a name (the LLM references them by it).\n\tconst isDuplicateName =\n\t\tnameTrimmed.length > 0 &&\n\t\texistingNames.some(\n\t\t\t(n) => n.trim().toLowerCase() === nameTrimmed.toLowerCase(),\n\t\t);\n\tconst canSave =\n\t\tnameTrimmed.length > 0 && url.trim().length > 0 && !isDuplicateName;\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. Define the request and a sample response for the agent to reference.\"\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 action name\"\n\t\t\t\tvalue={name}\n\t\t\t\tmaxCharLimit={charLimits.name}\n\t\t\t\tstate={isDuplicateName ? 'invalid' : undefined}\n\t\t\t\terrorMessage={\n\t\t\t\t\tisDuplicateName ? 'A tool with this name already exists' : undefined\n\t\t\t\t}\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\tdropdownWidth=\"399px\"\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=\"Enter name\"\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=\"Enter 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","existingNames","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","_","nameTrimmed","isDuplicateName","n","canSave","jsxs","SideModal","jsx","DrawerHeaderText","DRAWER_HEADER_STYLE","DRAWER_BODY_STYLE","config","result","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
+ {"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 {\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\t/** Names of the OTHER tools — a new tool can't reuse one of these. */\n\texistingNames?: string[];\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// A callable endpoint needs an http(s) scheme AND a host — this rejects the\n// pre-filled bare \"https://\" (and any scheme-only / malformed value).\nconst isValidHttpUrl = (value: string): boolean => {\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn (\n\t\t\t(parsed.protocol === 'http:' || parsed.protocol === 'https:') &&\n\t\t\tparsed.hostname.length > 0\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\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\texistingNames = [],\n}) => {\n\tconst [name, setName] = useState(initial?.name ?? '');\n\tconst [instructions, setInstructions] = useState(initial?.instructions ?? '');\n\t// New tools start with the scheme pre-filled so the user only types the host.\n\tconst [url, setUrl] = useState(initial?.url ?? 'https://');\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 nameTrimmed = name.trim();\n\t// Case-insensitive: two tools can't share a name (the LLM references them by it).\n\tconst isDuplicateName =\n\t\tnameTrimmed.length > 0 &&\n\t\texistingNames.some(\n\t\t\t(n) => n.trim().toLowerCase() === nameTrimmed.toLowerCase(),\n\t\t);\n\tconst urlTrimmed = url.trim();\n\t// Save needs a real endpoint, but don't flash the error while the field still\n\t// holds its pristine \"https://\" seed — only once the user has typed past it.\n\tconst isUrlInvalid =\n\t\turlTrimmed.length > 0 &&\n\t\turlTrimmed !== 'https://' &&\n\t\t!isValidHttpUrl(urlTrimmed);\n\tconst canSave =\n\t\tnameTrimmed.length > 0 && isValidHttpUrl(urlTrimmed) && !isDuplicateName;\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. Define the request and a sample response for the agent to reference.\"\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 action name\"\n\t\t\t\tvalue={name}\n\t\t\t\tmaxCharLimit={charLimits.name}\n\t\t\t\tstate={isDuplicateName ? 'invalid' : undefined}\n\t\t\t\terrorMessage={\n\t\t\t\t\tisDuplicateName ? 'A tool with this name already exists' : undefined\n\t\t\t\t}\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\tstate={isUrlInvalid ? 'invalid' : undefined}\n\t\t\t\t\terrorMessage={\n\t\t\t\t\t\tisUrlInvalid ? 'Enter a valid URL (including https://)' : undefined\n\t\t\t\t\t}\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\tdropdownWidth=\"399px\"\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=\"Enter name\"\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=\"Enter 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","isValidHttpUrl","value","parsed","RestApiToolPanel","onClose","onSave","initial","onImprove","charLimits","AGENT_CHAR_LIMITS","zIndex","existingNames","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","_","nameTrimmed","isDuplicateName","n","urlTrimmed","isUrlInvalid","canSave","jsxs","SideModal","jsx","DrawerHeaderText","DRAWER_HEADER_STYLE","DRAWER_BODY_STYLE","config","result","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,65 +1,65 @@
1
- import { jsx as n, jsxs as i, Fragment as U } from "react/jsx-runtime";
1
+ import { jsx as n, jsxs as i, Fragment as J } from "react/jsx-runtime";
2
2
  import ie from "../../../assets/icons/delete.svg.js";
3
3
  import de from "../../../assets/icons/edit.svg.js";
4
- import J from "../../../assets/icons/plus.svg.js";
5
- import { useState as m, useRef as Q, useEffect as se } from "react";
6
- import I from "styled-components";
7
- import { TitleSmall as ae, BodyCaption as w, BodySecondary as A } from "../../TypographyStyle.js";
4
+ import Q from "../../../assets/icons/plus.svg.js";
5
+ import { useState as m, useRef as U, useEffect as se } from "react";
6
+ import R from "styled-components";
7
+ import { TitleSmall as ae, BodyCaption as $, BodySecondary as A } from "../../TypographyStyle.js";
8
8
  import { COLORS as d } from "../../../constants/Theme.js";
9
- import { SideSection as ue, SideSectionHeader as he, AddIconButton as fe, SourceButtonRow as pe, SourceButton as X, SelectableRow as me, RowLabel as Se, RowText as be, RowActions as ye, RowMenuButton as Y, RowActionDivider as ve } from "../AgentBuilder.styled.js";
10
- import { renderSourceIcon as R, SOURCE_ICONS as we } from "../utils/sourceIcons.js";
9
+ import { SideSection as ue, SideSectionHeader as he, AddIconButton as fe, SourceButtonRow as pe, SourceButton as X, SelectableRow as me, RowLabel as Se, RowText as be, RowActions as ve, RowMenuButton as Y, RowActionDivider as ye } from "../AgentBuilder.styled.js";
10
+ import { renderSourceIcon as I, sourceIcon as we } from "../utils/sourceIcons.js";
11
11
  import { MentionPicker as $e } from "./MentionPicker.js";
12
12
  import { Dropdown as Z } from "../../dropdown/Dropdown.js";
13
13
  import { unwrapDropdownValue as P } from "../../dropdown/utils.js";
14
14
  import { Button as ge } from "../../button/Button.js";
15
15
  import { DeleteConfirmationModal as Ce } from "../../states-modal/DeleteConfirmationModal.js";
16
- import { Tooltip as $ } from "../../tooltips/Tooltip.js";
16
+ import { Tooltip as g } from "../../tooltips/Tooltip.js";
17
17
  import ke from "../../../icons/Informational/Common UI/Shield.js";
18
- const G = "__bik_create_new__", Ue = ({
18
+ const G = "__bik_create_new__", Je = ({
19
19
  title: s,
20
- helper: _,
20
+ helper: D,
21
21
  items: u,
22
22
  addableOptions: S,
23
- onAdd: g,
24
- onRemove: D,
25
- dataTestPrefix: t,
23
+ onAdd: b,
24
+ onRemove: _,
25
+ dataTestPrefix: l,
26
26
  emptyText: O,
27
- createOption: l,
27
+ createOption: r,
28
28
  onConfigure: L,
29
29
  sourceGroups: h,
30
30
  mentionItems: B,
31
- actionSources: b,
31
+ actionSources: v,
32
32
  confirmDelete: p,
33
33
  pickerOpensUp: z
34
34
  }) => {
35
- const [f, r] = m(!1), [x, C] = m(null), [H, M] = m(null), [ee, k] = m(null), y = !!h && h.length > 0, E = h?.find((e) => e.source === ee), c = B !== void 0, j = Q(null), q = Q(null), [v, N] = m(null);
35
+ const [f, t] = m(!1), [x, C] = m(null), [H, M] = m(null), [ee, k] = m(null), y = !!h && h.length > 0, E = h?.find((e) => e.source === ee), c = B !== void 0, j = U(null), q = U(null), [w, W] = m(null);
36
36
  se(() => {
37
37
  if (!c || !f)
38
38
  return;
39
39
  const e = (a) => {
40
40
  const V = a.target;
41
- !j.current?.contains(V) && !q.current?.contains(V) && r(!1);
41
+ !j.current?.contains(V) && !q.current?.contains(V) && t(!1);
42
42
  }, o = (a) => {
43
- a.key === "Escape" && r(!1);
43
+ a.key === "Escape" && t(!1);
44
44
  };
45
45
  return document.addEventListener("mousedown", e), document.addEventListener("keydown", o), () => {
46
46
  document.removeEventListener("mousedown", e), document.removeEventListener("keydown", o);
47
47
  };
48
48
  }, [c, f]);
49
- const ne = y ? c || u.length > 0 : c || S.length > 0 || !!l && u.length > 0, oe = u.length === 0 && !!l && !y && !c, W = !!b && b.length > 0, te = (y || W) && u.length === 0, le = () => {
49
+ const ne = y ? c || u.length > 0 : c || S.length > 0 || !!r && u.length > 0, oe = u.length === 0 && !!r && !y && !c, F = !!v && v.length > 0, te = (y || F) && u.length === 0, le = () => {
50
50
  if (c) {
51
- N(null), r((e) => !e);
51
+ W(null), t((e) => !e);
52
52
  return;
53
53
  }
54
54
  if (y) {
55
- k(null), r((e) => !e);
55
+ k(null), t((e) => !e);
56
56
  return;
57
57
  }
58
- if (S.length === 0 && l) {
59
- l.onSelect();
58
+ if (S.length === 0 && r) {
59
+ r.onSelect();
60
60
  return;
61
61
  }
62
- r((e) => !e);
62
+ t((e) => !e);
63
63
  }, re = (e, o) => {
64
64
  if (H)
65
65
  return;
@@ -70,22 +70,22 @@ const G = "__bik_create_new__", Ue = ({
70
70
  return /* @__PURE__ */ i(
71
71
  me,
72
72
  {
73
- "data-test": `${t}-row-${e.id}`,
73
+ "data-test": `${l}-row-${e.id}`,
74
74
  children: [
75
- R(e.icon),
75
+ I(e.icon),
76
76
  /* @__PURE__ */ i(Se, { children: [
77
- /* @__PURE__ */ n($, { body: e.label, placement: "top", children: /* @__PURE__ */ n(be, { children: /* @__PURE__ */ n(A, { numberOfLines: 1, color: d.content.primary, children: e.label }) }) }),
77
+ /* @__PURE__ */ n(g, { body: e.label, placement: "top", children: /* @__PURE__ */ n(be, { children: /* @__PURE__ */ n(A, { numberOfLines: 1, color: d.content.primary, children: e.label }) }) }),
78
78
  e.authRequired && // Order tools touch customer-private data — the shield flags that
79
79
  // this agent must verify the customer before the tool can run.
80
80
  /* @__PURE__ */ n(
81
- $,
81
+ g,
82
82
  {
83
83
  body: "This tool requires customer verification",
84
84
  placement: "top",
85
85
  children: /* @__PURE__ */ n(
86
86
  "span",
87
87
  {
88
- "data-test": `${t}-auth-${e.id}`,
88
+ "data-test": `${l}-auth-${e.id}`,
89
89
  style: { display: "inline-flex", flexShrink: 0 },
90
90
  children: /* @__PURE__ */ n(ke, { size: 16 })
91
91
  }
@@ -93,13 +93,13 @@ const G = "__bik_create_new__", Ue = ({
93
93
  }
94
94
  )
95
95
  ] }),
96
- /* @__PURE__ */ i(ye, { children: [
96
+ /* @__PURE__ */ i(ve, { children: [
97
97
  o && // Configurable rows (sub-agents, Rest API / email tools) get an
98
98
  // always-visible edit icon.
99
- /* @__PURE__ */ n($, { body: "Edit", placement: "top", children: /* @__PURE__ */ n(
99
+ /* @__PURE__ */ n(g, { body: "Edit", placement: "top", children: /* @__PURE__ */ n(
100
100
  Y,
101
101
  {
102
- "data-test": `${t}-edit-${e.id}`,
102
+ "data-test": `${l}-edit-${e.id}`,
103
103
  "aria-label": `Edit ${e.label}`,
104
104
  disabled: H !== null,
105
105
  onClick: () => re(e.id, o),
@@ -113,13 +113,13 @@ const G = "__bik_create_new__", Ue = ({
113
113
  )
114
114
  }
115
115
  ) }),
116
- o && /* @__PURE__ */ n(ve, { "aria-hidden": !0 }),
117
- /* @__PURE__ */ n($, { body: "Delete", placement: "top", children: /* @__PURE__ */ n(
116
+ o && /* @__PURE__ */ n(ye, { "aria-hidden": !0 }),
117
+ /* @__PURE__ */ n(g, { body: "Delete", placement: "top", children: /* @__PURE__ */ n(
118
118
  Y,
119
119
  {
120
- "data-test": `${t}-delete-${e.id}`,
120
+ "data-test": `${l}-delete-${e.id}`,
121
121
  "aria-label": `Delete ${e.label}`,
122
- onClick: () => p ? C(e.id) : D(e.id),
122
+ onClick: () => p ? C(e.id) : _(e.id),
123
123
  children: /* @__PURE__ */ n(
124
124
  ie,
125
125
  {
@@ -135,12 +135,12 @@ const G = "__bik_create_new__", Ue = ({
135
135
  },
136
136
  e.id
137
137
  );
138
- }), F = l ? [
138
+ }), K = r ? [
139
139
  ...S,
140
140
  {
141
- label: l.label,
141
+ label: r.label,
142
142
  value: G,
143
- searchKey: l.label,
143
+ searchKey: r.label,
144
144
  customComponent: /* @__PURE__ */ n(
145
145
  "div",
146
146
  {
@@ -152,38 +152,38 @@ const G = "__bik_create_new__", Ue = ({
152
152
  fontSize: 14,
153
153
  fontWeight: 600
154
154
  },
155
- children: l.label
155
+ children: r.label
156
156
  }
157
157
  )
158
158
  }
159
- ] : S, K = c ? /* @__PURE__ */ n(
159
+ ] : S, N = c ? /* @__PURE__ */ n(
160
160
  $e,
161
161
  {
162
162
  items: B ?? [],
163
163
  query: "",
164
164
  activeIndex: 0,
165
- initialSource: v ?? void 0,
165
+ initialSource: w ?? void 0,
166
166
  onSelect: (e) => {
167
- r(!1), g(String(e.id));
167
+ t(!1), b(String(e.id));
168
168
  },
169
- onClose: () => r(!1),
170
- onCreateSubAgent: l ? () => {
171
- r(!1), l.onSelect();
169
+ onClose: () => t(!1),
170
+ onCreateSubAgent: r ? () => {
171
+ t(!1), r.onSelect();
172
172
  } : void 0,
173
- toolActions: W ? b?.map((e) => ({
173
+ toolActions: F ? v?.map((e) => ({
174
174
  ...e,
175
175
  onSelect: () => {
176
- r(!1), e.onSelect();
176
+ t(!1), e.onSelect();
177
177
  }
178
178
  })) : void 0,
179
179
  integrationStatus: Object.fromEntries(
180
180
  (h ?? []).filter((e) => e.connected !== void 0).map((e) => [e.source, e.connected])
181
181
  ),
182
182
  onConnectIntegration: (e) => {
183
- r(!1), h?.find((o) => o.source === e)?.onConnect?.();
183
+ t(!1), h?.find((o) => o.source === e)?.onConnect?.();
184
184
  }
185
185
  },
186
- v ?? "__root__"
186
+ w ?? "__root__"
187
187
  ) : null;
188
188
  return /* @__PURE__ */ i(ue, { children: [
189
189
  /* @__PURE__ */ i(he, { children: [
@@ -192,62 +192,69 @@ const G = "__bik_create_new__", Ue = ({
192
192
  /* @__PURE__ */ n(
193
193
  fe,
194
194
  {
195
- "data-test": `${t}-add`,
195
+ "data-test": `${l}-add`,
196
196
  onClick: le,
197
197
  "aria-label": `Add ${s}`,
198
- children: /* @__PURE__ */ n(J, { width: 16, height: 16, color: d.content.primary })
198
+ children: /* @__PURE__ */ n(Q, { width: 16, height: 16, color: d.content.primary })
199
199
  }
200
200
  ),
201
- c && f && v === null && /* @__PURE__ */ n(
201
+ c && f && w === null && /* @__PURE__ */ n(
202
202
  T,
203
203
  {
204
204
  $up: z,
205
- "data-test": `${t}-picker`,
206
- children: K
205
+ "data-test": `${l}-picker`,
206
+ children: N
207
207
  }
208
208
  )
209
209
  ] })
210
210
  ] }),
211
- _ && /* @__PURE__ */ n(w, { color: d.content.secondary, children: _ }),
211
+ D && /* @__PURE__ */ n($, { color: d.content.secondary, children: D }),
212
212
  te ? /* @__PURE__ */ i(Ae, { ref: c ? q : void 0, children: [
213
- /* @__PURE__ */ i(pe, { "data-test": `${t}-sources`, children: [
214
- h?.map((e) => /* @__PURE__ */ i(
215
- X,
216
- {
217
- type: "button",
218
- "data-test": `${t}-source-${e.source}`,
219
- onClick: () => {
220
- if (e.connected === !1) {
221
- e.onConnect?.();
222
- return;
223
- }
224
- if (c) {
225
- N(e.source), r(!0);
226
- return;
227
- }
228
- k(e.source);
213
+ /* @__PURE__ */ i(pe, { "data-test": `${l}-sources`, children: [
214
+ h?.map((e) => {
215
+ const o = e.connected !== !1 && e.options.length === 1 ? e.options[0] : void 0;
216
+ return /* @__PURE__ */ i(
217
+ X,
218
+ {
219
+ type: "button",
220
+ "data-test": `${l}-source-${e.source}`,
221
+ onClick: () => {
222
+ if (e.connected === !1) {
223
+ e.onConnect?.();
224
+ return;
225
+ }
226
+ if (o) {
227
+ t(!1), b(o.value);
228
+ return;
229
+ }
230
+ if (c) {
231
+ W(e.source), t(!0);
232
+ return;
233
+ }
234
+ k(e.source);
235
+ },
236
+ children: [
237
+ I(we(e.source), -4),
238
+ /* @__PURE__ */ n($, { color: d.content.primary, children: o ? o.label : e.label }),
239
+ e.connected === !1 && // Not connected → show "Connect" upfront (consistent with
240
+ // the `@` picker); clicking runs the connect flow.
241
+ /* @__PURE__ */ n(A, { color: d.content.brand, children: "Connect" })
242
+ ]
229
243
  },
230
- children: [
231
- R(we[e.source], -4),
232
- /* @__PURE__ */ n(w, { color: d.content.primary, children: e.label }),
233
- e.connected === !1 && // Not connected → show "Connect" upfront (consistent with
234
- // the `@` picker); clicking runs the connect flow.
235
- /* @__PURE__ */ n(A, { color: d.content.brand, children: "Connect" })
236
- ]
237
- },
238
- e.source
239
- )),
240
- b?.map((e) => /* @__PURE__ */ i(
244
+ e.source
245
+ );
246
+ }),
247
+ v?.map((e) => /* @__PURE__ */ i(
241
248
  X,
242
249
  {
243
250
  type: "button",
244
- "data-test": `${t}-action-${e.source}`,
251
+ "data-test": `${l}-action-${e.source}`,
245
252
  onClick: e.connected === !1 ? () => e.onConnect?.() : () => {
246
- r(!1), e.onSelect();
253
+ t(!1), e.onSelect();
247
254
  },
248
255
  children: [
249
- R(e.icon, -4),
250
- /* @__PURE__ */ n(w, { color: d.content.primary, children: e.label }),
256
+ I(e.icon, -4),
257
+ /* @__PURE__ */ n($, { color: d.content.primary, children: e.label }),
251
258
  e.connected === !1 && // Not connected → "Connect" upfront (consistent with the
252
259
  // source buttons and the `@` picker).
253
260
  /* @__PURE__ */ n(A, { color: d.content.brand, children: "Connect" })
@@ -256,19 +263,19 @@ const G = "__bik_create_new__", Ue = ({
256
263
  e.source
257
264
  ))
258
265
  ] }),
259
- c && f && v !== null && /* @__PURE__ */ n(
266
+ c && f && w !== null && /* @__PURE__ */ n(
260
267
  T,
261
268
  {
262
269
  $align: "left",
263
270
  $up: z,
264
- "data-test": `${t}-picker`,
265
- children: K
271
+ "data-test": `${l}-picker`,
272
+ children: N
266
273
  }
267
274
  ),
268
275
  !c && E && /* @__PURE__ */ n(
269
276
  Z,
270
277
  {
271
- "data-test": `${t}-dropdown`,
278
+ "data-test": `${l}-dropdown`,
272
279
  size: "small",
273
280
  width: "100%",
274
281
  isSearchable: !0,
@@ -276,38 +283,38 @@ const G = "__bik_create_new__", Ue = ({
276
283
  options: E.options,
277
284
  onSelect: (e) => {
278
285
  const o = P(e);
279
- k(null), r(!1), o && g(o);
286
+ k(null), t(!1), o && b(o);
280
287
  }
281
288
  }
282
289
  )
283
- ] }) : /* @__PURE__ */ i(U, { children: [
284
- !c && f && F.length > 0 && /* @__PURE__ */ n(
290
+ ] }) : /* @__PURE__ */ i(J, { children: [
291
+ !c && f && K.length > 0 && /* @__PURE__ */ n(
285
292
  Z,
286
293
  {
287
- "data-test": `${t}-dropdown`,
294
+ "data-test": `${l}-dropdown`,
288
295
  size: "small",
289
296
  width: "100%",
290
297
  isSearchable: !0,
291
298
  placeHolder: `Select ${s.toLowerCase()}`,
292
- options: F,
299
+ options: K,
293
300
  onSelect: (e) => {
294
301
  const o = P(e);
295
- r(!1), o && (o === G ? l?.onSelect() : g(o));
302
+ t(!1), o && (o === G ? r?.onSelect() : b(o));
296
303
  }
297
304
  }
298
305
  ),
299
- u.length === 0 && !f ? /* @__PURE__ */ i(U, { children: [
300
- /* @__PURE__ */ n(w, { color: d.content.placeholder, children: O }),
301
- oe && l && /* @__PURE__ */ n(
306
+ u.length === 0 && !f ? /* @__PURE__ */ i(J, { children: [
307
+ /* @__PURE__ */ n($, { color: d.content.placeholder, children: O }),
308
+ oe && r && /* @__PURE__ */ n(
302
309
  ge,
303
310
  {
304
- "data-test": `${t}-create`,
311
+ "data-test": `${l}-create`,
305
312
  buttonType: "secondary",
306
313
  size: "small",
307
314
  matchParentWidth: !0,
308
- LeadingIcon: J,
309
- buttonText: l.label,
310
- onClick: l.onSelect
315
+ LeadingIcon: Q,
316
+ buttonText: r.label,
317
+ onClick: r.onSelect
311
318
  }
312
319
  )
313
320
  ] }) : ce()
@@ -315,33 +322,33 @@ const G = "__bik_create_new__", Ue = ({
315
322
  p && x && /* @__PURE__ */ n(
316
323
  Ce,
317
324
  {
318
- "data-test": `${t}-delete-confirm`,
325
+ "data-test": `${l}-delete-confirm`,
319
326
  header: `Delete this ${p.noun}?`,
320
327
  subHeader: `Deleting this ${p.noun} will also remove it from your instructions, wherever it's referenced.`,
321
328
  confirmationText: "Delete",
322
329
  zIndex: p.zIndex,
323
330
  onDeleteConfirmed: () => {
324
- D(x), C(null);
331
+ _(x), C(null);
325
332
  },
326
333
  onCancelClicked: () => C(null)
327
334
  }
328
335
  )
329
336
  ] });
330
- }, Ee = I.div`
337
+ }, Ee = R.div`
331
338
  position: relative;
332
339
  display: flex;
333
- `, Ae = I.div`
340
+ `, Ae = R.div`
334
341
  position: relative;
335
342
  display: flex;
336
343
  flex-direction: column;
337
344
  gap: 8px;
338
- `, T = I.div`
345
+ `, T = R.div`
339
346
  position: absolute;
340
347
  ${(s) => s.$up ? "bottom: calc(100% + 4px);" : "top: calc(100% + 4px);"}
341
348
  ${(s) => s.$align === "left" ? "left: 0;" : "right: 0;"}
342
349
  z-index: 30;
343
350
  `;
344
351
  export {
345
- Ue as SelectableListSection
352
+ Je as SelectableListSection
346
353
  };
347
354
  //# sourceMappingURL=SelectableListSection.js.map