@bikdotai/bik-component-library 0.0.840-beta.0 → 0.0.840-tools-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.
- package/dist/cjs/assets/icons/BigCommerce.svg.js +2 -0
- package/dist/cjs/assets/icons/BigCommerce.svg.js.map +1 -0
- package/dist/cjs/assets/icons/ShipStation.svg.js +2 -0
- package/dist/cjs/assets/icons/ShipStation.svg.js.map +1 -0
- package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.js +1 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.js.map +1 -1
- package/dist/cjs/components/SearchFilter/index.js +1 -1
- package/dist/cjs/components/SearchFilter/index.js.map +1 -1
- package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
- package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
- package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +39 -51
- package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderFooter.js +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderFooter.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js +1 -1
- package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js +2 -2
- package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +1 -1
- package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/DiscardModal.js +1 -1
- package/dist/cjs/components/agent-builder/components/DiscardModal.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/GoLiveModal.js +1 -1
- package/dist/cjs/components/agent-builder/components/GoLiveModal.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
- package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/MentionPicker.js +22 -22
- package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js +4 -4
- package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/SelectableListSection.js +6 -6
- package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
- package/dist/cjs/components/agent-builder/components/StepSectionHeader.js +1 -1
- package/dist/cjs/components/agent-builder/components/StepSectionHeader.js.map +1 -1
- package/dist/cjs/components/agent-builder/constants/tools.js +1 -1
- package/dist/cjs/components/agent-builder/constants/tools.js.map +1 -1
- package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
- package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
- package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js +1 -3
- package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
- package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
- package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
- package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js +1 -1
- package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
- package/dist/cjs/components/agent-builder/utils/mentionSerialization.js +3 -5
- package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
- package/dist/cjs/components/agent-builder/utils/sourceIcons.js +1 -1
- package/dist/cjs/components/agent-builder/utils/sourceIcons.js.map +1 -1
- package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
- package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
- package/dist/cjs/components/agent-listing/AgentTable.js +1 -1
- package/dist/cjs/components/agent-listing/AgentTable.js.map +1 -1
- package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
- package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
- package/dist/cjs/components/agent-listing/DeleteAgentModal.js +1 -1
- package/dist/cjs/components/agent-listing/DeleteAgentModal.js.map +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChip.js +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChip.js.map +1 -1
- package/dist/cjs/components/button/Button.styled.js +0 -1
- package/dist/cjs/components/button/Button.styled.js.map +1 -1
- package/dist/cjs/components/button/themes.js +11 -11
- package/dist/cjs/components/button/themes.js.map +1 -1
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.js +1 -1
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.js.map +1 -1
- package/dist/cjs/components/dropdown/Dropdown.js +1 -1
- package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
- package/dist/cjs/components/dropdown-button/DropdownButton.js +1 -1
- package/dist/cjs/components/dropdown-button/DropdownButton.js.map +1 -1
- package/dist/cjs/components/input/Input.js +1 -1
- package/dist/cjs/components/input/Input.js.map +1 -1
- package/dist/cjs/components/multi-level-dropdown/MenuItem.js +1 -1
- package/dist/cjs/components/multi-level-dropdown/MenuItem.js.map +1 -1
- package/dist/cjs/components/radioButton/RadioButton.js +1 -1
- package/dist/cjs/components/radioButton/RadioButton.js.map +1 -1
- package/dist/cjs/components/radioList/RadioList.js +1 -1
- package/dist/cjs/components/radioList/RadioList.js.map +1 -1
- package/dist/cjs/components/searchBar/searchBar.js +1 -1
- package/dist/cjs/components/searchBar/searchBar.js.map +1 -1
- package/dist/cjs/components/side-modal/SideModal.js +1 -1
- package/dist/cjs/components/side-modal/SideModal.js.map +1 -1
- package/dist/cjs/components/star-rating/Star.js +1 -1
- package/dist/cjs/components/star-rating/Star.js.map +1 -1
- package/dist/cjs/components/star-rating/StarRating.js +2 -2
- package/dist/cjs/components/star-rating/StarRating.js.map +1 -1
- package/dist/cjs/components/template-preview/TemplatePreview.js +1 -1
- package/dist/cjs/components/template-preview/TemplatePreview.js.map +1 -1
- package/dist/cjs/components/thumbnail/Thumbnail.js +1 -1
- package/dist/cjs/components/thumbnail/Thumbnail.js.map +1 -1
- package/dist/cjs/components/zeroState/ZeroState.js +3 -3
- package/dist/cjs/components/zeroState/ZeroState.js.map +1 -1
- package/dist/cjs/editor/BikEditor.js +1 -1
- package/dist/cjs/editor/BikEditor.js.map +1 -1
- package/dist/cjs/editor/BikEditor.styles.js +54 -97
- package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
- package/dist/cjs/editor/extensions/jsonHighlight/JsonHighlightExtension.js +3 -3
- package/dist/cjs/editor/extensions/jsonHighlight/JsonHighlightExtension.js.map +1 -1
- package/dist/cjs/icons/index.js +1 -1
- package/dist/esm/assets/icons/BigCommerce.svg.js +6 -0
- package/dist/esm/assets/icons/BigCommerce.svg.js.map +1 -0
- package/dist/esm/assets/icons/ShipStation.svg.js +6 -0
- package/dist/esm/assets/icons/ShipStation.svg.js.map +1 -0
- package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.js +61 -66
- package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.js.map +1 -1
- package/dist/esm/components/SearchFilter/index.js +10 -11
- package/dist/esm/components/SearchFilter/index.js.map +1 -1
- package/dist/esm/components/agent-builder/AgentBuilder.js +102 -106
- package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
- package/dist/esm/components/agent-builder/AgentBuilder.model.d.ts +7 -0
- package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +6 -3
- package/dist/esm/components/agent-builder/AgentBuilder.styled.js +106 -118
- package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
- package/dist/esm/components/agent-builder/components/AgentBuilderFooter.js +21 -29
- package/dist/esm/components/agent-builder/components/AgentBuilderFooter.js.map +1 -1
- package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js +26 -27
- package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
- package/dist/esm/components/agent-builder/components/ConfigToolPanel.js +25 -25
- package/dist/esm/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
- package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +23 -24
- package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
- package/dist/esm/components/agent-builder/components/DiscardModal.d.ts +1 -3
- package/dist/esm/components/agent-builder/components/DiscardModal.js +24 -33
- package/dist/esm/components/agent-builder/components/DiscardModal.js.map +1 -1
- package/dist/esm/components/agent-builder/components/GoLiveModal.js +21 -23
- package/dist/esm/components/agent-builder/components/GoLiveModal.js.map +1 -1
- package/dist/esm/components/agent-builder/components/MentionEditor.js +19 -19
- package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
- package/dist/esm/components/agent-builder/components/MentionPicker.js +147 -177
- package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
- package/dist/esm/components/agent-builder/components/RestApiToolPanel.d.ts +0 -2
- package/dist/esm/components/agent-builder/components/RestApiToolPanel.js +105 -111
- package/dist/esm/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
- package/dist/esm/components/agent-builder/components/SelectableListSection.d.ts +4 -13
- package/dist/esm/components/agent-builder/components/SelectableListSection.js +148 -173
- package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
- package/dist/esm/components/agent-builder/components/StepSectionHeader.js +7 -7
- package/dist/esm/components/agent-builder/components/StepSectionHeader.js.map +1 -1
- package/dist/esm/components/agent-builder/constants/tools.d.ts +2 -0
- package/dist/esm/components/agent-builder/constants/tools.js +22 -17
- package/dist/esm/components/agent-builder/constants/tools.js.map +1 -1
- package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +103 -104
- package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
- package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js +102 -101
- package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
- package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +142 -144
- package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
- package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js +79 -23
- package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
- package/dist/esm/components/agent-builder/utils/mentionSerialization.js +23 -35
- package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
- package/dist/esm/components/agent-builder/utils/sourceIcons.js +20 -16
- package/dist/esm/components/agent-builder/utils/sourceIcons.js.map +1 -1
- package/dist/esm/components/agent-listing/AgentListing.js +65 -70
- package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
- package/dist/esm/components/agent-listing/AgentTable.d.ts +0 -2
- package/dist/esm/components/agent-listing/AgentTable.js +15 -16
- package/dist/esm/components/agent-listing/AgentTable.js.map +1 -1
- package/dist/esm/components/agent-listing/AgentTableRow.js +11 -11
- package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
- package/dist/esm/components/agent-listing/DeleteAgentModal.js +8 -8
- package/dist/esm/components/agent-listing/DeleteAgentModal.js.map +1 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChip.js +10 -11
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChip.js.map +1 -1
- package/dist/esm/components/button/Button.styled.js +19 -25
- package/dist/esm/components/button/Button.styled.js.map +1 -1
- package/dist/esm/components/button/themes.d.ts +0 -1
- package/dist/esm/components/button/themes.js +51 -61
- package/dist/esm/components/button/themes.js.map +1 -1
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.js +21 -28
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.js.map +1 -1
- package/dist/esm/components/dropdown/Dropdown.js +13 -18
- package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/dropdown-button/DropdownButton.js +13 -13
- package/dist/esm/components/dropdown-button/DropdownButton.js.map +1 -1
- package/dist/esm/components/input/Input.js +34 -35
- package/dist/esm/components/input/Input.js.map +1 -1
- package/dist/esm/components/input/Input.model.d.ts +0 -1
- package/dist/esm/components/multi-level-dropdown/MenuItem.js +27 -28
- package/dist/esm/components/multi-level-dropdown/MenuItem.js.map +1 -1
- package/dist/esm/components/radioButton/RadioButton.js +9 -10
- package/dist/esm/components/radioButton/RadioButton.js.map +1 -1
- package/dist/esm/components/radioList/RadioList.js +19 -28
- package/dist/esm/components/radioList/RadioList.js.map +1 -1
- package/dist/esm/components/searchBar/searchBar.js +10 -11
- package/dist/esm/components/searchBar/searchBar.js.map +1 -1
- package/dist/esm/components/side-modal/SideModal.js +5 -13
- package/dist/esm/components/side-modal/SideModal.js.map +1 -1
- package/dist/esm/components/star-rating/Star.d.ts +0 -1
- package/dist/esm/components/star-rating/Star.js +27 -32
- package/dist/esm/components/star-rating/Star.js.map +1 -1
- package/dist/esm/components/star-rating/StarRating.js +16 -17
- package/dist/esm/components/star-rating/StarRating.js.map +1 -1
- package/dist/esm/components/template-preview/TemplatePreview.js +40 -41
- package/dist/esm/components/template-preview/TemplatePreview.js.map +1 -1
- package/dist/esm/components/thumbnail/Thumbnail.js +3 -3
- package/dist/esm/components/thumbnail/Thumbnail.js.map +1 -1
- package/dist/esm/components/zeroState/ZeroState.js +13 -20
- package/dist/esm/components/zeroState/ZeroState.js.map +1 -1
- package/dist/esm/editor/BikEditor.js +160 -173
- package/dist/esm/editor/BikEditor.js.map +1 -1
- package/dist/esm/editor/BikEditor.styles.d.ts +3 -20
- package/dist/esm/editor/BikEditor.styles.js +57 -102
- package/dist/esm/editor/BikEditor.styles.js.map +1 -1
- package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.d.ts +8 -5
- package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.js +68 -87
- package/dist/esm/editor/extensions/jsonHighlight/JsonHighlightExtension.js.map +1 -1
- package/dist/esm/icons/Media/Visual/index.d.ts +0 -2
- package/dist/esm/icons/index.d.ts +25 -25
- package/dist/esm/icons/index.js +416 -420
- package/dist/esm/icons/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/components/agent-listing/AgentTableShimmer.js +0 -2
- package/dist/cjs/components/agent-listing/AgentTableShimmer.js.map +0 -1
- package/dist/cjs/icons/Media/Visual/FormkitNeutral.js +0 -2
- package/dist/cjs/icons/Media/Visual/FormkitNeutral.js.map +0 -1
- package/dist/cjs/icons/Media/Visual/FormkitSad.js +0 -2
- package/dist/cjs/icons/Media/Visual/FormkitSad.js.map +0 -1
- package/dist/esm/components/agent-builder/__fixtures__/agentValue.d.ts +0 -11
- package/dist/esm/components/agent-listing/AgentTableShimmer.d.ts +0 -12
- package/dist/esm/components/agent-listing/AgentTableShimmer.js +0 -20
- package/dist/esm/components/agent-listing/AgentTableShimmer.js.map +0 -1
- package/dist/esm/components/agent-listing/__fixtures__/agents.d.ts +0 -3
- package/dist/esm/icons/Media/Visual/FormkitNeutral.js +0 -58
- package/dist/esm/icons/Media/Visual/FormkitNeutral.js.map +0 -1
- package/dist/esm/icons/Media/Visual/FormkitSad.js +0 -61
- package/dist/esm/icons/Media/Visual/FormkitSad.js.map +0 -1
|
@@ -1,282 +1,252 @@
|
|
|
1
|
-
import { jsxs as m, jsx as u, Fragment as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import { useState as
|
|
1
|
+
import { jsxs as m, jsx as u, Fragment as Q } from "react/jsx-runtime";
|
|
2
|
+
import V from "../../../assets/icons/chevronRight.svg.js";
|
|
3
|
+
import W from "../../../assets/icons/searchIcon.svg.js";
|
|
4
|
+
import X from "../../../icons/Arrows/Normal arrows/ArrowLeft.js";
|
|
5
|
+
import { useState as A, useMemo as x, useEffect as P, useRef as Y } from "react";
|
|
6
6
|
import p from "styled-components";
|
|
7
|
-
import { TitleSmall as
|
|
8
|
-
import { COLORS as
|
|
9
|
-
import { CATEGORIES as
|
|
10
|
-
import { toolSourceLabel as
|
|
11
|
-
import { sourceIcon as
|
|
12
|
-
const
|
|
13
|
-
items:
|
|
14
|
-
onSelect:
|
|
15
|
-
registerKeyHandler:
|
|
16
|
-
onClose:
|
|
17
|
-
onCreateSubAgent:
|
|
18
|
-
initialSource:
|
|
19
|
-
toolActions:
|
|
7
|
+
import { TitleSmall as Z, BodySecondary as K } from "../../TypographyStyle.js";
|
|
8
|
+
import { COLORS as o } from "../../../constants/Theme.js";
|
|
9
|
+
import { CATEGORIES as H, toolSourceRank as U, CONFIG_TOOL_SOURCES as ee } from "../constants/tools.js";
|
|
10
|
+
import { toolSourceLabel as D } from "../utils/mentionSerialization.js";
|
|
11
|
+
import { sourceIcon as z, renderSourceIcon as j } from "../utils/sourceIcons.js";
|
|
12
|
+
const y = (i) => i.meta, L = (i) => y(i)?.plainLabel ?? i.label, te = "__bik_create_subagent__", we = ({
|
|
13
|
+
items: i,
|
|
14
|
+
onSelect: R,
|
|
15
|
+
registerKeyHandler: w,
|
|
16
|
+
onClose: I,
|
|
17
|
+
onCreateSubAgent: k,
|
|
18
|
+
initialSource: F,
|
|
19
|
+
toolActions: h
|
|
20
20
|
}) => {
|
|
21
|
-
const [
|
|
22
|
-
() =>
|
|
23
|
-
[
|
|
24
|
-
),
|
|
25
|
-
() =>
|
|
26
|
-
[
|
|
27
|
-
),
|
|
21
|
+
const [G, B] = A(null), [a, E] = A(F ?? null), [S, g] = A(0), [v, M] = A(""), b = x(
|
|
22
|
+
() => i.filter((e) => y(e)?.kind === "tool"),
|
|
23
|
+
[i]
|
|
24
|
+
), C = x(
|
|
25
|
+
() => i.filter((e) => y(e)?.kind === "subagent"),
|
|
26
|
+
[i]
|
|
27
|
+
), _ = x(() => {
|
|
28
28
|
const e = [];
|
|
29
|
-
return
|
|
30
|
-
const f =
|
|
29
|
+
return b.forEach((r) => {
|
|
30
|
+
const f = y(r)?.source ?? "other";
|
|
31
31
|
e.includes(f) || e.push(f);
|
|
32
32
|
}), e;
|
|
33
|
-
}, [
|
|
33
|
+
}, [b]), O = x(
|
|
34
34
|
() => new Map(
|
|
35
|
-
(
|
|
35
|
+
(h ?? []).map((e) => [e.source, e])
|
|
36
36
|
),
|
|
37
|
-
[
|
|
38
|
-
),
|
|
39
|
-
() =>
|
|
40
|
-
(e) => e.key === "tool" ?
|
|
37
|
+
[h]
|
|
38
|
+
), $ = x(
|
|
39
|
+
() => H.filter(
|
|
40
|
+
(e) => e.key === "tool" ? b.length > 0 || (h?.length ?? 0) > 0 : C.length > 0 || !!k
|
|
41
41
|
),
|
|
42
|
-
[
|
|
43
|
-
),
|
|
42
|
+
[b.length, C.length, k, h?.length]
|
|
43
|
+
), T = $.length === 1 ? $[0].key : null, c = G ?? T, d = c ? c === "subagent" ? (
|
|
44
44
|
// Always titled — with a back arrow only when the category chooser is above.
|
|
45
45
|
{
|
|
46
46
|
title: "Sub-agent",
|
|
47
|
-
onBack:
|
|
47
|
+
onBack: T ? void 0 : () => B(null)
|
|
48
48
|
}
|
|
49
49
|
) : a ? {
|
|
50
|
-
title:
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// (no initialSource) back returns to the source chooser.
|
|
54
|
-
onBack: U ? void 0 : () => O(null),
|
|
55
|
-
icon: E(a)
|
|
50
|
+
title: D(a),
|
|
51
|
+
onBack: () => E(null),
|
|
52
|
+
icon: z(a)
|
|
56
53
|
} : (
|
|
57
54
|
// Always titled — matches the Sub-agent header; back arrow only when the
|
|
58
55
|
// category chooser is above (i.e. not the sole category).
|
|
59
56
|
{
|
|
60
57
|
title: "Tools",
|
|
61
|
-
onBack:
|
|
58
|
+
onBack: T ? void 0 : () => B(null)
|
|
62
59
|
}
|
|
63
|
-
) : null,
|
|
64
|
-
if (!
|
|
65
|
-
return
|
|
66
|
-
id:
|
|
67
|
-
label:
|
|
60
|
+
) : null, s = x(() => {
|
|
61
|
+
if (!c)
|
|
62
|
+
return $.map((t) => ({
|
|
63
|
+
id: t.key,
|
|
64
|
+
label: t.label,
|
|
68
65
|
drillsIn: !0,
|
|
69
66
|
onActivate: () => {
|
|
70
|
-
|
|
67
|
+
B(t.key), E(null);
|
|
71
68
|
}
|
|
72
69
|
}));
|
|
73
|
-
if (
|
|
74
|
-
const
|
|
75
|
-
id: String(
|
|
76
|
-
label:
|
|
70
|
+
if (c === "subagent") {
|
|
71
|
+
const t = v.trim().toLowerCase(), n = C.filter((l) => !t || L(l).toLowerCase().includes(t)).map((l) => ({
|
|
72
|
+
id: String(l.id),
|
|
73
|
+
label: L(l),
|
|
77
74
|
drillsIn: !1,
|
|
78
|
-
onActivate: () =>
|
|
75
|
+
onActivate: () => R(l)
|
|
79
76
|
}));
|
|
80
|
-
return
|
|
81
|
-
id:
|
|
77
|
+
return k && n.push({
|
|
78
|
+
id: te,
|
|
82
79
|
label: "Create new",
|
|
83
80
|
drillsIn: !1,
|
|
84
81
|
isCreate: !0,
|
|
85
82
|
onActivate: () => {
|
|
86
|
-
|
|
83
|
+
I?.(), k();
|
|
87
84
|
}
|
|
88
|
-
}),
|
|
85
|
+
}), n;
|
|
89
86
|
}
|
|
90
87
|
if (!a) {
|
|
91
|
-
const
|
|
92
|
-
return [...
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
(R) => (k(R)?.source ?? "other") === t
|
|
107
|
-
);
|
|
108
|
-
if (G.length + (o ? 1 : 0) === 1) {
|
|
109
|
-
const R = E(t) ?? o?.icon;
|
|
110
|
-
if (o)
|
|
111
|
-
return {
|
|
112
|
-
id: t,
|
|
113
|
-
label: o.label,
|
|
114
|
-
drillsIn: !1,
|
|
115
|
-
icon: R,
|
|
116
|
-
onActivate: () => {
|
|
117
|
-
v?.(), o.onSelect();
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
const M = G[0];
|
|
121
|
-
return {
|
|
122
|
-
id: String(M.id),
|
|
123
|
-
label: I(M),
|
|
124
|
-
drillsIn: !1,
|
|
125
|
-
icon: R,
|
|
126
|
-
onActivate: () => S(M)
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
id: t,
|
|
131
|
-
label: N(t),
|
|
88
|
+
const t = (h ?? []).map((n) => n.source).filter((n) => !_.includes(n));
|
|
89
|
+
return [..._, ...t].sort((n, l) => U(n) - U(l)).map((n) => {
|
|
90
|
+
const l = O.get(n);
|
|
91
|
+
return l?.connected === !1 ? {
|
|
92
|
+
id: n,
|
|
93
|
+
label: D(n),
|
|
94
|
+
drillsIn: !1,
|
|
95
|
+
icon: z(n) ?? l.icon,
|
|
96
|
+
rightLabel: "Connect",
|
|
97
|
+
onActivate: () => {
|
|
98
|
+
I?.(), l.onConnect?.();
|
|
99
|
+
}
|
|
100
|
+
} : {
|
|
101
|
+
id: n,
|
|
102
|
+
label: D(n),
|
|
132
103
|
drillsIn: !0,
|
|
133
|
-
icon:
|
|
134
|
-
onActivate: () =>
|
|
104
|
+
icon: z(n) ?? l?.icon,
|
|
105
|
+
onActivate: () => E(n)
|
|
135
106
|
};
|
|
136
107
|
});
|
|
137
108
|
}
|
|
138
|
-
const e =
|
|
139
|
-
id: String(
|
|
140
|
-
label:
|
|
109
|
+
const e = v.trim().toLowerCase(), r = b.filter((t) => (y(t)?.source ?? "other") === a).filter((t) => !e || L(t).toLowerCase().includes(e)).map((t) => ({
|
|
110
|
+
id: String(t.id),
|
|
111
|
+
label: L(t),
|
|
141
112
|
drillsIn: !1,
|
|
142
|
-
onActivate: () =>
|
|
143
|
-
})), f =
|
|
113
|
+
onActivate: () => R(t)
|
|
114
|
+
})), f = O.get(a);
|
|
144
115
|
if (f) {
|
|
145
|
-
const
|
|
116
|
+
const t = a in ee;
|
|
146
117
|
r.push({
|
|
147
118
|
id: `create:${a}`,
|
|
148
119
|
label: f.label,
|
|
149
120
|
drillsIn: !1,
|
|
150
|
-
isCreate: !
|
|
121
|
+
isCreate: !t,
|
|
151
122
|
onActivate: () => {
|
|
152
|
-
|
|
123
|
+
I?.(), f.onSelect();
|
|
153
124
|
}
|
|
154
125
|
});
|
|
155
126
|
}
|
|
156
127
|
return r;
|
|
157
128
|
}, [
|
|
158
|
-
|
|
159
|
-
L,
|
|
160
|
-
a,
|
|
161
|
-
w,
|
|
162
|
-
g,
|
|
129
|
+
c,
|
|
163
130
|
$,
|
|
164
|
-
|
|
165
|
-
S,
|
|
131
|
+
a,
|
|
166
132
|
v,
|
|
167
|
-
y,
|
|
168
133
|
b,
|
|
169
|
-
|
|
134
|
+
C,
|
|
135
|
+
_,
|
|
136
|
+
R,
|
|
137
|
+
I,
|
|
138
|
+
k,
|
|
139
|
+
h,
|
|
140
|
+
O
|
|
170
141
|
]);
|
|
171
|
-
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
if (
|
|
175
|
-
return
|
|
176
|
-
const { rows: r, activeIndex: f, header:
|
|
142
|
+
P(() => g(0), [c, a, v, i]), P(() => M(""), [c, a]);
|
|
143
|
+
const N = Y({ rows: s, activeIndex: S, header: d });
|
|
144
|
+
N.current = { rows: s, activeIndex: S, header: d }, P(() => {
|
|
145
|
+
if (w)
|
|
146
|
+
return w((e) => {
|
|
147
|
+
const { rows: r, activeIndex: f, header: t } = N.current;
|
|
177
148
|
switch (e.key) {
|
|
178
149
|
case "ArrowDown":
|
|
179
|
-
return r.length &&
|
|
150
|
+
return r.length && g((n) => (n + 1) % r.length), !0;
|
|
180
151
|
case "ArrowUp":
|
|
181
|
-
return r.length &&
|
|
152
|
+
return r.length && g((n) => (n + r.length - 1) % r.length), !0;
|
|
182
153
|
case "ArrowRight":
|
|
183
154
|
case "Enter":
|
|
184
|
-
return
|
|
155
|
+
return r[f]?.onActivate(), !0;
|
|
185
156
|
case "ArrowLeft":
|
|
186
|
-
return
|
|
157
|
+
return t?.onBack ? (t.onBack(), !0) : !1;
|
|
187
158
|
default:
|
|
188
159
|
return !1;
|
|
189
160
|
}
|
|
190
|
-
}), () =>
|
|
191
|
-
}, [
|
|
192
|
-
const
|
|
193
|
-
return /* @__PURE__ */ m(
|
|
161
|
+
}), () => w(null);
|
|
162
|
+
}, [w]);
|
|
163
|
+
const q = c ? s.length && !s[0].drillsIn ? "items" : "sources" : "categories", J = c === "tool" && !!a || c === "subagent";
|
|
164
|
+
return /* @__PURE__ */ m(ne, { className: `bik-mention-picker bik-mention-picker--${q}`, children: [
|
|
194
165
|
d && /* @__PURE__ */ m(
|
|
195
|
-
|
|
166
|
+
se,
|
|
196
167
|
{
|
|
197
168
|
type: "button",
|
|
198
169
|
onClick: d.onBack,
|
|
199
170
|
disabled: !d.onBack,
|
|
200
171
|
style: {
|
|
201
|
-
background:
|
|
172
|
+
background: o.surface.subdued,
|
|
202
173
|
cursor: d.onBack ? "pointer" : "default"
|
|
203
174
|
},
|
|
204
175
|
children: [
|
|
205
176
|
d.onBack && /* @__PURE__ */ u(
|
|
206
|
-
|
|
177
|
+
X,
|
|
207
178
|
{
|
|
208
179
|
width: 20,
|
|
209
180
|
height: 20,
|
|
210
|
-
color:
|
|
181
|
+
color: o.content.primary
|
|
211
182
|
}
|
|
212
183
|
),
|
|
213
|
-
d.icon &&
|
|
214
|
-
/* @__PURE__ */ m(
|
|
184
|
+
d.icon && j(d.icon),
|
|
185
|
+
/* @__PURE__ */ m(Z, { children: [
|
|
215
186
|
" ",
|
|
216
187
|
d.title
|
|
217
188
|
] })
|
|
218
189
|
]
|
|
219
190
|
}
|
|
220
191
|
),
|
|
221
|
-
|
|
192
|
+
J && /* @__PURE__ */ m(re, { children: [
|
|
222
193
|
/* @__PURE__ */ u(
|
|
223
|
-
|
|
194
|
+
W,
|
|
224
195
|
{
|
|
225
196
|
width: 20,
|
|
226
197
|
height: 20,
|
|
227
|
-
color:
|
|
198
|
+
color: o.content.placeholder
|
|
228
199
|
}
|
|
229
200
|
),
|
|
230
201
|
/* @__PURE__ */ u(
|
|
231
|
-
|
|
202
|
+
oe,
|
|
232
203
|
{
|
|
233
204
|
autoFocus: !0,
|
|
234
|
-
value:
|
|
205
|
+
value: v,
|
|
235
206
|
placeholder: "Search",
|
|
236
207
|
"data-test": "mention-picker-search",
|
|
237
|
-
onChange: (e) =>
|
|
208
|
+
onChange: (e) => M(e.target.value),
|
|
238
209
|
onKeyDown: (e) => {
|
|
239
|
-
|
|
210
|
+
s.length && (e.key === "ArrowDown" ? (e.preventDefault(), g((r) => (r + 1) % s.length)) : e.key === "ArrowUp" ? (e.preventDefault(), g((r) => (r + s.length - 1) % s.length)) : e.key === "Enter" && (e.preventDefault(), s[S]?.onActivate()));
|
|
240
211
|
}
|
|
241
212
|
}
|
|
242
213
|
)
|
|
243
214
|
] }),
|
|
244
|
-
|
|
245
|
-
|
|
215
|
+
s.length === 0 ? /* @__PURE__ */ u(de, { children: c === "subagent" ? "No sub-agents available" : "No tools available" }) : s.map((e, r) => /* @__PURE__ */ u(
|
|
216
|
+
ie,
|
|
246
217
|
{
|
|
247
218
|
type: "button",
|
|
248
|
-
$active: r ===
|
|
249
|
-
onMouseEnter: () =>
|
|
250
|
-
onMouseLeave: () => h(-1),
|
|
219
|
+
$active: r === S,
|
|
220
|
+
onMouseEnter: () => g(r),
|
|
251
221
|
onClick: e.onActivate,
|
|
252
|
-
children: e.isCreate ? /* @__PURE__ */ u(
|
|
253
|
-
/* @__PURE__ */ m(
|
|
254
|
-
|
|
255
|
-
/* @__PURE__ */ u(
|
|
222
|
+
children: e.isCreate ? /* @__PURE__ */ u(ce, { children: e.label }) : /* @__PURE__ */ m(Q, { children: [
|
|
223
|
+
/* @__PURE__ */ m(ae, { children: [
|
|
224
|
+
j(e.icon),
|
|
225
|
+
/* @__PURE__ */ u(K, { color: o.content.primary, children: e.label })
|
|
256
226
|
] }),
|
|
257
|
-
e.rightLabel ? /* @__PURE__ */ u(
|
|
227
|
+
e.rightLabel ? /* @__PURE__ */ u(le, { children: e.rightLabel }) : e.drillsIn && /* @__PURE__ */ u(V, { width: 12, height: 12 })
|
|
258
228
|
] })
|
|
259
229
|
},
|
|
260
230
|
e.id
|
|
261
231
|
))
|
|
262
232
|
] });
|
|
263
|
-
},
|
|
233
|
+
}, ne = p.div`
|
|
264
234
|
display: flex;
|
|
265
235
|
flex-direction: column;
|
|
266
236
|
min-width: 240px;
|
|
267
237
|
max-height: 301px;
|
|
268
238
|
overflow-y: auto;
|
|
269
|
-
background: ${
|
|
270
|
-
border: 1px solid ${
|
|
239
|
+
background: ${o.surface.standard};
|
|
240
|
+
border: 1px solid ${o.stroke.primary};
|
|
271
241
|
border-radius: 4px;
|
|
272
242
|
box-shadow: 0px -2px 8px 0px #0000001f;
|
|
273
|
-
`,
|
|
243
|
+
`, re = p.div`
|
|
274
244
|
display: flex;
|
|
275
245
|
align-items: center;
|
|
276
246
|
gap: 8px;
|
|
277
247
|
padding: 10px 12px;
|
|
278
|
-
border-bottom: 1px solid ${
|
|
279
|
-
`,
|
|
248
|
+
border-bottom: 1px solid ${o.stroke.primary};
|
|
249
|
+
`, oe = p.input`
|
|
280
250
|
flex: 1;
|
|
281
251
|
min-width: 0;
|
|
282
252
|
border: none;
|
|
@@ -284,12 +254,12 @@ const k = (l) => l.meta, I = (l) => k(l)?.plainLabel ?? l.label, oe = "__bik_cre
|
|
|
284
254
|
background: transparent;
|
|
285
255
|
font-family: Inter;
|
|
286
256
|
font-size: 14px;
|
|
287
|
-
color: ${
|
|
257
|
+
color: ${o.content.primary};
|
|
288
258
|
|
|
289
259
|
&::placeholder {
|
|
290
|
-
color: ${
|
|
260
|
+
color: ${o.content.placeholder};
|
|
291
261
|
}
|
|
292
|
-
`,
|
|
262
|
+
`, ie = p.button`
|
|
293
263
|
display: flex;
|
|
294
264
|
justify-content: space-between;
|
|
295
265
|
align-items: center;
|
|
@@ -298,39 +268,39 @@ const k = (l) => l.meta, I = (l) => k(l)?.plainLabel ?? l.label, oe = "__bik_cre
|
|
|
298
268
|
padding: 8px 10px;
|
|
299
269
|
height: 48px;
|
|
300
270
|
border: none;
|
|
301
|
-
border-bottom: 1px solid ${
|
|
302
|
-
background: ${(
|
|
271
|
+
border-bottom: 1px solid ${o.stroke.primary};
|
|
272
|
+
background: ${(i) => i.$active ? o.surface.subdued : "transparent"};
|
|
303
273
|
cursor: pointer;
|
|
304
274
|
text-align: left;
|
|
305
275
|
|
|
306
276
|
&:hover {
|
|
307
|
-
background: ${
|
|
277
|
+
background: ${o.surface.subdued};
|
|
308
278
|
}
|
|
309
|
-
`,
|
|
279
|
+
`, ae = p.div`
|
|
310
280
|
display: flex;
|
|
311
281
|
align-items: center;
|
|
312
282
|
gap: 12px;
|
|
313
283
|
min-width: 0;
|
|
314
|
-
`,
|
|
284
|
+
`, le = p.span`
|
|
315
285
|
flex-shrink: 0;
|
|
316
|
-
color: ${
|
|
286
|
+
color: ${o.content.brand};
|
|
317
287
|
font-family: Inter;
|
|
318
288
|
font-size: 14px;
|
|
319
289
|
font-weight: 600;
|
|
320
290
|
white-space: nowrap;
|
|
321
|
-
`,
|
|
291
|
+
`, ce = p.div`
|
|
322
292
|
width: 100%;
|
|
323
293
|
text-align: center;
|
|
324
|
-
color: ${
|
|
294
|
+
color: ${o.content.brand};
|
|
325
295
|
font-family: Inter;
|
|
326
296
|
font-size: 14px;
|
|
327
297
|
font-weight: 600;
|
|
328
|
-
`,
|
|
298
|
+
`, se = p.button`
|
|
329
299
|
display: flex;
|
|
330
300
|
align-items: center;
|
|
331
301
|
padding: 12px 16px;
|
|
332
302
|
border: none;
|
|
333
|
-
border-bottom: 1px solid ${
|
|
303
|
+
border-bottom: 1px solid ${o.stroke.primary};
|
|
334
304
|
background: transparent;
|
|
335
305
|
cursor: pointer;
|
|
336
306
|
font-family: Inter;
|
|
@@ -338,13 +308,13 @@ const k = (l) => l.meta, I = (l) => k(l)?.plainLabel ?? l.label, oe = "__bik_cre
|
|
|
338
308
|
font-weight: 600;
|
|
339
309
|
height: 48px;
|
|
340
310
|
gap: 4px;
|
|
341
|
-
`,
|
|
311
|
+
`, de = p.div`
|
|
342
312
|
padding: 12px 10px;
|
|
343
313
|
font-family: Inter;
|
|
344
314
|
font-size: 13px;
|
|
345
|
-
color: ${
|
|
315
|
+
color: ${o.content.secondary};
|
|
346
316
|
`;
|
|
347
317
|
export {
|
|
348
|
-
|
|
318
|
+
we as MentionPicker
|
|
349
319
|
};
|
|
350
320
|
//# sourceMappingURL=MentionPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentionPicker.js","sources":["../../../../../src/components/agent-builder/components/MentionPicker.tsx"],"sourcesContent":["// import ChevronLeft from '@src/assets/icons/chevronLeft.svg';\nimport ChevronRight from '@src/assets/icons/chevronRight.svg';\nimport SearchIcon from '@src/assets/icons/searchIcon.svg';\nimport type { MentionDropdownRenderProps, MentionItem } from '@src/editor';\nimport SvgArrowLeft from '@src/icons/Arrows/Normal arrows/ArrowLeft';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { BodySecondary, TitleSmall } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tCATEGORIES,\n\tCONFIG_TOOL_SOURCES,\n\ttoolSourceRank,\n} from '../constants/tools';\nimport type { Category, ToolAction } from '../constants/tools';\nimport {\n\tMentionKindMeta,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\nimport { renderSourceIcon, sourceIcon, SourceIcon } from '../utils/sourceIcons';\n\nconst metaOf = (item: MentionItem): MentionKindMeta | undefined =>\n\titem.meta as unknown as MentionKindMeta | undefined;\n\nconst rowLabel = (item: MentionItem): string =>\n\tmetaOf(item)?.plainLabel ?? item.label;\n\n/** One navigable row in the picker's current view. */\ntype PickerRowModel = {\n\tid: string;\n\tlabel: string;\n\t/** Drill-in rows show a chevron; leaf (selectable) rows do not. */\n\tdrillsIn: boolean;\n\t/** Leading brand glyph (source rows only). */\n\ticon?: SourceIcon;\n\t/** Brand-coloured \"Create new\" action row (not a selectable item). */\n\tisCreate?: boolean;\n\t/**\n\t * Brand-coloured right-aligned action text (e.g. \"Connect\") shown in place of\n\t * the drill-in chevron — used for an unconnected integration source.\n\t */\n\trightLabel?: string;\n\tonActivate: () => void;\n};\n\n/** Sentinel id for the sub-agent \"Create new\" row. */\nconst CREATE_SUBAGENT_ID = '__bik_create_subagent__';\n\ntype MentionPickerProps = MentionDropdownRenderProps & {\n\t/** Opens the create-sub-agent drawer (shows a \"Create new\" row in the Sub-agent view). */\n\tonCreateSubAgent?: () => void;\n\t/**\n\t * Open already drilled into this tool source (e.g. `'shopify'`) — its tool list\n\t * is shown immediately. */\n\tinitialSource?: string;\n\t/**\n\t * Built-in tool actions (Rest API / Handover to email) shown in the Tools view.\n\t * Picking one opens its config drawer (via `onSelect`) and dismisses the picker\n\t * — it never inserts a mention into the text.\n\t */\n\ttoolActions?: ToolAction[];\n};\n\n/**\n * `@` reference picker. Drills:\n * root → Tools → <source> (Manifest / Shopify / …) → tool\n * → Sub-agent → sub-agent\n * (\"Add condition\" and \"Variables\" are intentionally not shown yet.)\n *\n * Owns keyboard navigation (↑/↓ move, →/Enter activate, ← go back) over the\n * CURRENTLY visible rows — registered with the editor via `registerKeyHandler`.\n */\nexport const MentionPicker: React.FC<MentionPickerProps> = ({\n\titems,\n\tonSelect,\n\tregisterKeyHandler,\n\tonClose,\n\tonCreateSubAgent,\n\tinitialSource,\n\ttoolActions,\n}) => {\n\tconst [category, setCategory] = useState<Category | null>(null);\n\tconst [source, setSource] = useState<string | null>(initialSource ?? null);\n\t// -1 = nothing highlighted; rows highlight only on hover / arrow keys\n\t// (a default highlight reads as a stuck hover state).\n\tconst [activeIndex, setActiveIndex] = useState(-1);\n\t// Search box shown inside a source's tool list (Manifest / Shopify); filters\n\t// that source's tools by name.\n\tconst [search, setSearch] = useState('');\n\n\tconst tools = useMemo(\n\t\t() => items.filter((i) => metaOf(i)?.kind === 'tool'),\n\t\t[items],\n\t);\n\tconst subAgents = useMemo(\n\t\t() => items.filter((i) => metaOf(i)?.kind === 'subagent'),\n\t\t[items],\n\t);\n\tconst sources = useMemo(() => {\n\t\tconst acc: string[] = [];\n\t\ttools.forEach((t) => {\n\t\t\tconst s = metaOf(t)?.source ?? 'other';\n\t\t\tif (!acc.includes(s)) {\n\t\t\t\tacc.push(s);\n\t\t\t}\n\t\t});\n\t\treturn acc;\n\t}, [tools]);\n\t// The built-in \"create\" action per source (Rest API / email / Slack). A source\n\t// with an action drills into [its instances + a \"Create new\" row] — like the\n\t// Sub-agent category — instead of showing a duplicate flat \"create\" row.\n\tconst actionBySource = useMemo(\n\t\t() =>\n\t\t\tnew Map<string, ToolAction>(\n\t\t\t\t(toolActions ?? []).map((a) => [a.source, a]),\n\t\t\t),\n\t\t[toolActions],\n\t);\n\n\t// Show a category when it has items — and ALWAYS show Sub-agent when creating\n\t// one is possible, so an agent with no sub-agents yet still gets the root\n\t// \"Tools / Sub-agent\" choice (with a \"Create new\" inside). When only one is\n\t// available (e.g. the sub-agent drawer offers tools only) the selector is skipped.\n\tconst availableCategories = useMemo(\n\t\t() =>\n\t\t\tCATEGORIES.filter((c) =>\n\t\t\t\tc.key === 'tool'\n\t\t\t\t\t? tools.length > 0 || (toolActions?.length ?? 0) > 0\n\t\t\t\t\t: subAgents.length > 0 || !!onCreateSubAgent,\n\t\t\t),\n\t\t[tools.length, subAgents.length, onCreateSubAgent, toolActions?.length],\n\t);\n\tconst soleCategory =\n\t\tavailableCategories.length === 1 ? availableCategories[0].key : null;\n\tconst activeCategory = category ?? soleCategory;\n\n\t// Title shown above the current view. `onBack` is omitted at a root level (a\n\t// sole category has nowhere to go back to) — the header then shows as a plain\n\t// title. When `onBack` is set the header leads with a back arrow, followed by\n\t// the source icon in a source detail view: `[← back][icon][title]`.\n\tconst header: {\n\t\ttitle: string;\n\t\tonBack?: () => void;\n\t\ticon?: SourceIcon;\n\t} | null = !activeCategory\n\t\t? null\n\t\t: activeCategory === 'subagent'\n\t\t? // Always titled — with a back arrow only when the category chooser is above.\n\t\t {\n\t\t\t\ttitle: 'Sub-agent',\n\t\t\t\tonBack: soleCategory ? undefined : () => setCategory(null),\n\t\t }\n\t\t: source\n\t\t? {\n\t\t\t\ttitle: toolSourceLabel(source),\n\t\t\t\t// Deep-linked to a source (opened from a right-panel source button):\n\t\t\t\t// that source IS the root, so no back arrow. In the @-drill flow\n\t\t\t\t// (no initialSource) back returns to the source chooser.\n\t\t\t\tonBack: initialSource ? undefined : () => setSource(null),\n\t\t\t\ticon: sourceIcon(source),\n\t\t }\n\t\t: // Always titled — matches the Sub-agent header; back arrow only when the\n\t\t // category chooser is above (i.e. not the sole category).\n\t\t {\n\t\t\t\ttitle: 'Tools',\n\t\t\t\tonBack: soleCategory ? undefined : () => setCategory(null),\n\t\t };\n\n\t// Build the navigable rows for the current view.\n\tconst rows: PickerRowModel[] = useMemo(() => {\n\t\tif (!activeCategory) {\n\t\t\treturn availableCategories.map((c) => ({\n\t\t\t\tid: c.key,\n\t\t\t\tlabel: c.label,\n\t\t\t\tdrillsIn: true,\n\t\t\t\tonActivate: () => {\n\t\t\t\t\tsetCategory(c.key);\n\t\t\t\t\tsetSource(null);\n\t\t\t\t},\n\t\t\t}));\n\t\t}\n\t\tif (activeCategory === 'subagent') {\n\t\t\tconst sq = search.trim().toLowerCase();\n\t\t\tconst leaves: PickerRowModel[] = subAgents\n\t\t\t\t.filter((item) => !sq || rowLabel(item).toLowerCase().includes(sq))\n\t\t\t\t.map((item) => ({\n\t\t\t\t\tid: String(item.id),\n\t\t\t\t\tlabel: rowLabel(item),\n\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\tonActivate: () => onSelect(item),\n\t\t\t\t}));\n\t\t\t// \"Create new\" opens the drawer — first dismiss the menu (strips the \"@\").\n\t\t\tif (onCreateSubAgent) {\n\t\t\t\tleaves.push({\n\t\t\t\t\tid: CREATE_SUBAGENT_ID,\n\t\t\t\t\tlabel: 'Create new',\n\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\tisCreate: true,\n\t\t\t\t\tonActivate: () => {\n\t\t\t\t\t\tonClose?.();\n\t\t\t\t\t\tonCreateSubAgent();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn leaves;\n\t\t}\n\t\tif (!source) {\n\t\t\t// One drill-in row per source: the real sources (from instances) plus any\n\t\t\t// action source (Rest API / email / Slack) with no instances yet, so it\n\t\t\t// still appears for first-time creation. Deduped — no more twin rows.\n\t\t\tconst actionOnly = (toolActions ?? [])\n\t\t\t\t.map((a) => a.source)\n\t\t\t\t.filter((s) => !sources.includes(s));\n\t\t\t// Fixed source order (manifest → shopify → rest_api → email → slack →\n\t\t\t// rest) so adding/updating a tool never reshuffles the picker rows.\n\t\t\treturn [...sources, ...actionOnly]\n\t\t\t\t.sort((a, b) => toolSourceRank(a) - toolSourceRank(b))\n\t\t\t\t.map((s) => {\n\t\t\t\t\tconst action = actionBySource.get(s);\n\t\t\t\t\t// Integration not connected → a \"Connect\" row (no drill-in / no\n\t\t\t\t\t// instances / no \"Create new\"); clicking dismisses the picker and\n\t\t\t\t\t// runs the consumer's connect flow.\n\t\t\t\t\tif (action?.connected === false) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: s,\n\t\t\t\t\t\t\tlabel: toolSourceLabel(s),\n\t\t\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\t\t\ticon: sourceIcon(s) ?? action.icon,\n\t\t\t\t\t\t\trightLabel: 'Connect',\n\t\t\t\t\t\t\tonActivate: () => {\n\t\t\t\t\t\t\t\tonClose?.();\n\t\t\t\t\t\t\t\taction.onConnect?.();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t// A source whose drill-in view would hold exactly one leaf is\n\t\t\t\t\t// pointless to drill into — surface that single leaf right here at\n\t\t\t\t\t// the source level (its function name + the same source icon).\n\t\t\t\t\t// Covers \"no Rest API added yet\" (→ open the create modal directly)\n\t\t\t\t\t// and a config tool's single capability (Slack → \"Send Slack\n\t\t\t\t\t// message\", email → \"Send Email\").\n\t\t\t\t\tconst instances = tools.filter(\n\t\t\t\t\t\t(t) => (metaOf(t)?.source ?? 'other') === s,\n\t\t\t\t\t);\n\t\t\t\t\tif (instances.length + (action ? 1 : 0) === 1) {\n\t\t\t\t\t\tconst icon = sourceIcon(s) ?? action?.icon;\n\t\t\t\t\t\tif (action) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: s,\n\t\t\t\t\t\t\t\tlabel: action.label,\n\t\t\t\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\t\t\t\ticon,\n\t\t\t\t\t\t\t\tonActivate: () => {\n\t\t\t\t\t\t\t\t\tonClose?.();\n\t\t\t\t\t\t\t\t\taction.onSelect();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst only = instances[0];\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: String(only.id),\n\t\t\t\t\t\t\tlabel: rowLabel(only),\n\t\t\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\t\t\ticon,\n\t\t\t\t\t\t\tonActivate: () => onSelect(only),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: s,\n\t\t\t\t\t\tlabel: toolSourceLabel(s),\n\t\t\t\t\t\tdrillsIn: true,\n\t\t\t\t\t\ticon: sourceIcon(s) ?? action?.icon,\n\t\t\t\t\t\tonActivate: () => setSource(s),\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t}\n\t\tconst q = search.trim().toLowerCase();\n\t\tconst leaves: PickerRowModel[] = tools\n\t\t\t.filter((t) => (metaOf(t)?.source ?? 'other') === source)\n\t\t\t.filter((t) => !q || rowLabel(t).toLowerCase().includes(q))\n\t\t\t.map((item) => ({\n\t\t\t\tid: String(item.id),\n\t\t\t\tlabel: rowLabel(item),\n\t\t\t\tdrillsIn: false,\n\t\t\t\tonActivate: () => onSelect(item),\n\t\t\t}));\n\t\t// A configurable source's add row, below any existing instances, opening\n\t\t// its drawer. Config tools (Slack / email) are a single fixed capability →\n\t\t// render like a normal tool leaf (label only, no icon — matching the tool\n\t\t// rows). Rest API instances are user-created, so its \"add\" stays a\n\t\t// brand-coloured create row.\n\t\tconst action = actionBySource.get(source);\n\t\tif (action) {\n\t\t\tconst isConfigTool = source in CONFIG_TOOL_SOURCES;\n\t\t\tleaves.push({\n\t\t\t\tid: `create:${source}`,\n\t\t\t\tlabel: action.label,\n\t\t\t\tdrillsIn: false,\n\t\t\t\tisCreate: !isConfigTool,\n\t\t\t\tonActivate: () => {\n\t\t\t\t\tonClose?.();\n\t\t\t\t\taction.onSelect();\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn leaves;\n\t}, [\n\t\tactiveCategory,\n\t\tavailableCategories,\n\t\tsource,\n\t\tsearch,\n\t\ttools,\n\t\tsubAgents,\n\t\tsources,\n\t\tonSelect,\n\t\tonClose,\n\t\tonCreateSubAgent,\n\t\ttoolActions,\n\t\tactionBySource,\n\t]);\n\n\t// Reset highlight whenever the view (or filtered result set) changes.\n\tuseEffect(() => setActiveIndex(-1), [activeCategory, source, search, items]);\n\t// Clear the search box when leaving a source view.\n\tuseEffect(() => setSearch(''), [activeCategory, source]);\n\n\t// Keep the latest rows/index reachable from the stable key handler.\n\tconst navRef = useRef({ rows, activeIndex, header });\n\tnavRef.current = { rows, activeIndex, header };\n\n\tuseEffect(() => {\n\t\tif (!registerKeyHandler) {\n\t\t\treturn;\n\t\t}\n\t\tregisterKeyHandler((event) => {\n\t\t\tconst { rows: r, activeIndex: i, header: h } = navRef.current;\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tif (r.length) setActiveIndex((p) => (p + 1) % r.length);\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tif (r.length) setActiveIndex((p) => (p + r.length - 1) % r.length);\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'Enter':\n\t\t\t\t\t// Nothing highlighted yet → treat the first row as the target so\n\t\t\t\t\t// the editor's @-flow (type, then Enter) still works.\n\t\t\t\t\t(r[i] ?? r[0])?.onActivate();\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\tif (h?.onBack) {\n\t\t\t\t\t\th.onBack();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn () => registerKeyHandler(null);\n\t}, [registerKeyHandler]);\n\n\tconst variant = !activeCategory\n\t\t? 'categories'\n\t\t: rows.length && !rows[0].drillsIn\n\t\t? 'items'\n\t\t: 'sources';\n\n\t// Search lives inside a source's tool list (Manifest / Shopify) and in the\n\t// sub-agent list.\n\tconst showSearch =\n\t\t(activeCategory === 'tool' && !!source) || activeCategory === 'subagent';\n\n\treturn (\n\t\t<PickerCard className={`bik-mention-picker bik-mention-picker--${variant}`}>\n\t\t\t{header && (\n\t\t\t\t<PickerBack\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={header.onBack}\n\t\t\t\t\tdisabled={!header.onBack}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: COLORS.surface.subdued,\n\t\t\t\t\t\tcursor: header.onBack ? 'pointer' : 'default',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{header.onBack && (\n\t\t\t\t\t\t<SvgArrowLeft\n\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\tcolor={COLORS.content.primary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{header.icon && renderSourceIcon(header.icon)}\n\t\t\t\t\t<TitleSmall> {header.title}</TitleSmall>\n\t\t\t\t</PickerBack>\n\t\t\t)}\n\t\t\t{showSearch && (\n\t\t\t\t<PickerSearchRow>\n\t\t\t\t\t<SearchIcon\n\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\theight={20}\n\t\t\t\t\t\tcolor={COLORS.content.placeholder}\n\t\t\t\t\t/>\n\t\t\t\t\t<PickerSearchInput\n\t\t\t\t\t\t// Focus on open so the user can type immediately (appears only\n\t\t\t\t\t\t// after they drill into a source).\n\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\tdata-test=\"mention-picker-search\"\n\t\t\t\t\t\tonChange={(e) => setSearch(e.target.value)}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (!rows.length) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (e.key === 'ArrowDown') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tsetActiveIndex((p) => (p + 1) % rows.length);\n\t\t\t\t\t\t\t} else if (e.key === 'ArrowUp') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tsetActiveIndex((p) => (p + rows.length - 1) % rows.length);\n\t\t\t\t\t\t\t} else if (e.key === 'Enter') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t(rows[activeIndex] ?? rows[0])?.onActivate();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</PickerSearchRow>\n\t\t\t)}\n\t\t\t{rows.length === 0 ? (\n\t\t\t\t<PickerEmpty>\n\t\t\t\t\t{activeCategory === 'subagent' ? null : 'No tools available'}\n\t\t\t\t</PickerEmpty>\n\t\t\t) : (\n\t\t\t\trows.map((row, i) => (\n\t\t\t\t\t<PickerRow\n\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t$active={i === activeIndex}\n\t\t\t\t\t\tonMouseEnter={() => setActiveIndex(i)}\n\t\t\t\t\t\tonMouseLeave={() => setActiveIndex(-1)}\n\t\t\t\t\t\tonClick={row.onActivate}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.isCreate ? (\n\t\t\t\t\t\t\t<CreateRowText>{row.label}</CreateRowText>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<PickerRowMain>\n\t\t\t\t\t\t\t\t\t{renderSourceIcon(row.icon)}\n\t\t\t\t\t\t\t\t\t<BodySecondary color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\t\t\t{row.label}\n\t\t\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t\t\t</PickerRowMain>\n\t\t\t\t\t\t\t\t{row.rightLabel ? (\n\t\t\t\t\t\t\t\t\t<RightActionText>{row.rightLabel}</RightActionText>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\trow.drillsIn && <ChevronRight width={12} height={12} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</PickerRow>\n\t\t\t\t))\n\t\t\t)}\n\t\t</PickerCard>\n\t);\n};\n\nconst PickerCard = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-width: 240px;\n\tmax-height: 301px;\n\toverflow-y: auto;\n\tbackground: ${COLORS.surface.standard};\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tborder-radius: 4px;\n\tbox-shadow: 0px -2px 8px 0px #0000001f;\n`;\n\n// Search box at the top of a source's tool list (Manifest / Shopify).\nconst PickerSearchRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 10px 12px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n`;\n\nconst PickerSearchInput = styled.input`\n\tflex: 1;\n\tmin-width: 0;\n\tborder: none;\n\toutline: none;\n\tbackground: transparent;\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tcolor: ${COLORS.content.primary};\n\n\t&::placeholder {\n\t\tcolor: ${COLORS.content.placeholder};\n\t}\n`;\n\nconst PickerRow = styled.button<{ $active?: boolean }>`\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tgap: 2px;\n\twidth: 100%;\n\tpadding: 8px 10px;\n\theight: 48px;\n\tborder: none;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tbackground: ${(p) => (p.$active ? COLORS.surface.subdued : 'transparent')};\n\tcursor: pointer;\n\ttext-align: left;\n\n\t&:hover {\n\t\tbackground: ${COLORS.surface.hovered};\n\t}\n`;\n\n// Left cluster: leading source glyph + label (chevron stays right via PickerRow).\nconst PickerRowMain = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n\tmin-width: 0;\n`;\n\n// Right-aligned brand action text (e.g. \"Connect\") in place of the chevron.\nconst RightActionText = styled.span`\n\tflex-shrink: 0;\n\tcolor: ${COLORS.content.brand};\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\twhite-space: nowrap;\n`;\n\n// \"Create new\" — centered brand text, no icon (matches the side-panel dropdown).\nconst CreateRowText = styled.div`\n\twidth: 100%;\n\ttext-align: center;\n\tcolor: ${COLORS.content.brand};\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tfont-weight: 600;\n`;\n\nconst PickerBack = styled.button`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 12px 16px;\n\tborder: none;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tbackground: transparent;\n\tcursor: pointer;\n\tfont-family: Inter;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\theight: 48px;\n\tgap: 4px;\n`;\n\nconst PickerEmpty = styled.div`\n\tpadding: 12px 10px;\n\tfont-family: Inter;\n\tfont-size: 13px;\n\tcolor: ${COLORS.content.secondary};\n`;\n"],"names":["metaOf","item","rowLabel","CREATE_SUBAGENT_ID","MentionPicker","items","onSelect","registerKeyHandler","onClose","onCreateSubAgent","initialSource","toolActions","category","setCategory","useState","source","setSource","activeIndex","setActiveIndex","search","setSearch","tools","useMemo","i","subAgents","sources","acc","t","s","actionBySource","a","availableCategories","CATEGORIES","c","soleCategory","activeCategory","header","toolSourceLabel","sourceIcon","rows","sq","leaves","actionOnly","b","toolSourceRank","action","instances","icon","only","q","isConfigTool","CONFIG_TOOL_SOURCES","useEffect","navRef","useRef","event","h","p","variant","showSearch","jsxs","PickerCard","PickerBack","COLORS","jsx","SvgArrowLeft","renderSourceIcon","TitleSmall","PickerSearchRow","SearchIcon","PickerSearchInput","PickerEmpty","row","PickerRow","CreateRowText","Fragment","PickerRowMain","BodySecondary","RightActionText","ChevronRight","styled"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MentionPicker.js","sources":["../../../../../src/components/agent-builder/components/MentionPicker.tsx"],"sourcesContent":["// import ChevronLeft from '@src/assets/icons/chevronLeft.svg';\nimport ChevronRight from '@src/assets/icons/chevronRight.svg';\nimport SearchIcon from '@src/assets/icons/searchIcon.svg';\nimport type { MentionDropdownRenderProps, MentionItem } from '@src/editor';\nimport SvgArrowLeft from '@src/icons/Arrows/Normal arrows/ArrowLeft';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { BodySecondary, TitleSmall } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tCATEGORIES,\n\tCONFIG_TOOL_SOURCES,\n\ttoolSourceRank,\n} from '../constants/tools';\nimport type { Category, ToolAction } from '../constants/tools';\nimport {\n\tMentionKindMeta,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\nimport { renderSourceIcon, sourceIcon, SourceIcon } from '../utils/sourceIcons';\n\nconst metaOf = (item: MentionItem): MentionKindMeta | undefined =>\n\titem.meta as unknown as MentionKindMeta | undefined;\n\nconst rowLabel = (item: MentionItem): string =>\n\tmetaOf(item)?.plainLabel ?? item.label;\n\n/** One navigable row in the picker's current view. */\ntype PickerRowModel = {\n\tid: string;\n\tlabel: string;\n\t/** Drill-in rows show a chevron; leaf (selectable) rows do not. */\n\tdrillsIn: boolean;\n\t/** Leading brand glyph (source rows only). */\n\ticon?: SourceIcon;\n\t/** Brand-coloured \"Create new\" action row (not a selectable item). */\n\tisCreate?: boolean;\n\t/**\n\t * Brand-coloured right-aligned action text (e.g. \"Connect\") shown in place of\n\t * the drill-in chevron — used for an unconnected integration source.\n\t */\n\trightLabel?: string;\n\tonActivate: () => void;\n};\n\n/** Sentinel id for the sub-agent \"Create new\" row. */\nconst CREATE_SUBAGENT_ID = '__bik_create_subagent__';\n\ntype MentionPickerProps = MentionDropdownRenderProps & {\n\t/** Opens the create-sub-agent drawer (shows a \"Create new\" row in the Sub-agent view). */\n\tonCreateSubAgent?: () => void;\n\t/**\n\t * Open already drilled into this tool source (e.g. `'shopify'`) — its tool list\n\t * is shown immediately. */\n\tinitialSource?: string;\n\t/**\n\t * Built-in tool actions (Rest API / Handover to email) shown in the Tools view.\n\t * Picking one opens its config drawer (via `onSelect`) and dismisses the picker\n\t * — it never inserts a mention into the text.\n\t */\n\ttoolActions?: ToolAction[];\n};\n\n/**\n * `@` reference picker. Drills:\n * root → Tools → <source> (Manifest / Shopify / …) → tool\n * → Sub-agent → sub-agent\n * (\"Add condition\" and \"Variables\" are intentionally not shown yet.)\n *\n * Owns keyboard navigation (↑/↓ move, →/Enter activate, ← go back) over the\n * CURRENTLY visible rows — registered with the editor via `registerKeyHandler`.\n */\nexport const MentionPicker: React.FC<MentionPickerProps> = ({\n\titems,\n\tonSelect,\n\tregisterKeyHandler,\n\tonClose,\n\tonCreateSubAgent,\n\tinitialSource,\n\ttoolActions,\n}) => {\n\tconst [category, setCategory] = useState<Category | null>(null);\n\tconst [source, setSource] = useState<string | null>(initialSource ?? null);\n\tconst [activeIndex, setActiveIndex] = useState(0);\n\t// Search box shown inside a source's tool list (Manifest / Shopify); filters\n\t// that source's tools by name.\n\tconst [search, setSearch] = useState('');\n\n\tconst tools = useMemo(\n\t\t() => items.filter((i) => metaOf(i)?.kind === 'tool'),\n\t\t[items],\n\t);\n\tconst subAgents = useMemo(\n\t\t() => items.filter((i) => metaOf(i)?.kind === 'subagent'),\n\t\t[items],\n\t);\n\tconst sources = useMemo(() => {\n\t\tconst acc: string[] = [];\n\t\ttools.forEach((t) => {\n\t\t\tconst s = metaOf(t)?.source ?? 'other';\n\t\t\tif (!acc.includes(s)) {\n\t\t\t\tacc.push(s);\n\t\t\t}\n\t\t});\n\t\treturn acc;\n\t}, [tools]);\n\t// The built-in \"create\" action per source (Rest API / email / Slack). A source\n\t// with an action drills into [its instances + a \"Create new\" row] — like the\n\t// Sub-agent category — instead of showing a duplicate flat \"create\" row.\n\tconst actionBySource = useMemo(\n\t\t() =>\n\t\t\tnew Map<string, ToolAction>(\n\t\t\t\t(toolActions ?? []).map((a) => [a.source, a]),\n\t\t\t),\n\t\t[toolActions],\n\t);\n\n\t// Show a category when it has items — and ALWAYS show Sub-agent when creating\n\t// one is possible, so an agent with no sub-agents yet still gets the root\n\t// \"Tools / Sub-agent\" choice (with a \"Create new\" inside). When only one is\n\t// available (e.g. the sub-agent drawer offers tools only) the selector is skipped.\n\tconst availableCategories = useMemo(\n\t\t() =>\n\t\t\tCATEGORIES.filter((c) =>\n\t\t\t\tc.key === 'tool'\n\t\t\t\t\t? tools.length > 0 || (toolActions?.length ?? 0) > 0\n\t\t\t\t\t: subAgents.length > 0 || !!onCreateSubAgent,\n\t\t\t),\n\t\t[tools.length, subAgents.length, onCreateSubAgent, toolActions?.length],\n\t);\n\tconst soleCategory =\n\t\tavailableCategories.length === 1 ? availableCategories[0].key : null;\n\tconst activeCategory = category ?? soleCategory;\n\n\t// Title shown above the current view. `onBack` is omitted at a root level (a\n\t// sole category has nowhere to go back to) — the header then shows as a plain\n\t// title. When `onBack` is set the header leads with a back arrow, followed by\n\t// the source icon in a source detail view: `[← back][icon][title]`.\n\tconst header: {\n\t\ttitle: string;\n\t\tonBack?: () => void;\n\t\ticon?: SourceIcon;\n\t} | null = !activeCategory\n\t\t? null\n\t\t: activeCategory === 'subagent'\n\t\t? // Always titled — with a back arrow only when the category chooser is above.\n\t\t {\n\t\t\t\ttitle: 'Sub-agent',\n\t\t\t\tonBack: soleCategory ? undefined : () => setCategory(null),\n\t\t }\n\t\t: source\n\t\t? {\n\t\t\t\ttitle: toolSourceLabel(source),\n\t\t\t\tonBack: () => setSource(null),\n\t\t\t\ticon: sourceIcon(source),\n\t\t }\n\t\t: // Always titled — matches the Sub-agent header; back arrow only when the\n\t\t // category chooser is above (i.e. not the sole category).\n\t\t {\n\t\t\t\ttitle: 'Tools',\n\t\t\t\tonBack: soleCategory ? undefined : () => setCategory(null),\n\t\t };\n\n\t// Build the navigable rows for the current view.\n\tconst rows: PickerRowModel[] = useMemo(() => {\n\t\tif (!activeCategory) {\n\t\t\treturn availableCategories.map((c) => ({\n\t\t\t\tid: c.key,\n\t\t\t\tlabel: c.label,\n\t\t\t\tdrillsIn: true,\n\t\t\t\tonActivate: () => {\n\t\t\t\t\tsetCategory(c.key);\n\t\t\t\t\tsetSource(null);\n\t\t\t\t},\n\t\t\t}));\n\t\t}\n\t\tif (activeCategory === 'subagent') {\n\t\t\tconst sq = search.trim().toLowerCase();\n\t\t\tconst leaves: PickerRowModel[] = subAgents\n\t\t\t\t.filter((item) => !sq || rowLabel(item).toLowerCase().includes(sq))\n\t\t\t\t.map((item) => ({\n\t\t\t\t\tid: String(item.id),\n\t\t\t\t\tlabel: rowLabel(item),\n\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\tonActivate: () => onSelect(item),\n\t\t\t\t}));\n\t\t\t// \"Create new\" opens the drawer — first dismiss the menu (strips the \"@\").\n\t\t\tif (onCreateSubAgent) {\n\t\t\t\tleaves.push({\n\t\t\t\t\tid: CREATE_SUBAGENT_ID,\n\t\t\t\t\tlabel: 'Create new',\n\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\tisCreate: true,\n\t\t\t\t\tonActivate: () => {\n\t\t\t\t\t\tonClose?.();\n\t\t\t\t\t\tonCreateSubAgent();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn leaves;\n\t\t}\n\t\tif (!source) {\n\t\t\t// One drill-in row per source: the real sources (from instances) plus any\n\t\t\t// action source (Rest API / email / Slack) with no instances yet, so it\n\t\t\t// still appears for first-time creation. Deduped — no more twin rows.\n\t\t\tconst actionOnly = (toolActions ?? [])\n\t\t\t\t.map((a) => a.source)\n\t\t\t\t.filter((s) => !sources.includes(s));\n\t\t\t// Fixed source order (manifest → shopify → rest_api → email → slack →\n\t\t\t// rest) so adding/updating a tool never reshuffles the picker rows.\n\t\t\treturn [...sources, ...actionOnly]\n\t\t\t\t.sort((a, b) => toolSourceRank(a) - toolSourceRank(b))\n\t\t\t\t.map((s) => {\n\t\t\t\t\tconst action = actionBySource.get(s);\n\t\t\t\t\t// Integration not connected → a \"Connect\" row (no drill-in / no\n\t\t\t\t\t// instances / no \"Create new\"); clicking dismisses the picker and\n\t\t\t\t\t// runs the consumer's connect flow.\n\t\t\t\t\tif (action?.connected === false) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: s,\n\t\t\t\t\t\t\tlabel: toolSourceLabel(s),\n\t\t\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\t\t\ticon: sourceIcon(s) ?? action.icon,\n\t\t\t\t\t\t\trightLabel: 'Connect',\n\t\t\t\t\t\t\tonActivate: () => {\n\t\t\t\t\t\t\t\tonClose?.();\n\t\t\t\t\t\t\t\taction.onConnect?.();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: s,\n\t\t\t\t\t\tlabel: toolSourceLabel(s),\n\t\t\t\t\t\tdrillsIn: true,\n\t\t\t\t\t\ticon: sourceIcon(s) ?? action?.icon,\n\t\t\t\t\t\tonActivate: () => setSource(s),\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t}\n\t\tconst q = search.trim().toLowerCase();\n\t\tconst leaves: PickerRowModel[] = tools\n\t\t\t.filter((t) => (metaOf(t)?.source ?? 'other') === source)\n\t\t\t.filter((t) => !q || rowLabel(t).toLowerCase().includes(q))\n\t\t\t.map((item) => ({\n\t\t\t\tid: String(item.id),\n\t\t\t\tlabel: rowLabel(item),\n\t\t\t\tdrillsIn: false,\n\t\t\t\tonActivate: () => onSelect(item),\n\t\t\t}));\n\t\t// A configurable source's add row, below any existing instances, opening\n\t\t// its drawer. Config tools (Slack / email) are a single fixed capability →\n\t\t// render like a normal tool leaf (label only, no icon — matching the tool\n\t\t// rows). Rest API instances are user-created, so its \"add\" stays a\n\t\t// brand-coloured create row.\n\t\tconst action = actionBySource.get(source);\n\t\tif (action) {\n\t\t\tconst isConfigTool = source in CONFIG_TOOL_SOURCES;\n\t\t\tleaves.push({\n\t\t\t\tid: `create:${source}`,\n\t\t\t\tlabel: action.label,\n\t\t\t\tdrillsIn: false,\n\t\t\t\tisCreate: !isConfigTool,\n\t\t\t\tonActivate: () => {\n\t\t\t\t\tonClose?.();\n\t\t\t\t\taction.onSelect();\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\treturn leaves;\n\t}, [\n\t\tactiveCategory,\n\t\tavailableCategories,\n\t\tsource,\n\t\tsearch,\n\t\ttools,\n\t\tsubAgents,\n\t\tsources,\n\t\tonSelect,\n\t\tonClose,\n\t\tonCreateSubAgent,\n\t\ttoolActions,\n\t\tactionBySource,\n\t]);\n\n\t// Reset highlight whenever the view (or filtered result set) changes.\n\tuseEffect(() => setActiveIndex(0), [activeCategory, source, search, items]);\n\t// Clear the search box when leaving a source view.\n\tuseEffect(() => setSearch(''), [activeCategory, source]);\n\n\t// Keep the latest rows/index reachable from the stable key handler.\n\tconst navRef = useRef({ rows, activeIndex, header });\n\tnavRef.current = { rows, activeIndex, header };\n\n\tuseEffect(() => {\n\t\tif (!registerKeyHandler) {\n\t\t\treturn;\n\t\t}\n\t\tregisterKeyHandler((event) => {\n\t\t\tconst { rows: r, activeIndex: i, header: h } = navRef.current;\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tif (r.length) setActiveIndex((p) => (p + 1) % r.length);\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tif (r.length) setActiveIndex((p) => (p + r.length - 1) % r.length);\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'Enter':\n\t\t\t\t\tr[i]?.onActivate();\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\tif (h?.onBack) {\n\t\t\t\t\t\th.onBack();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn () => registerKeyHandler(null);\n\t}, [registerKeyHandler]);\n\n\tconst variant = !activeCategory\n\t\t? 'categories'\n\t\t: rows.length && !rows[0].drillsIn\n\t\t? 'items'\n\t\t: 'sources';\n\n\t// Search lives inside a source's tool list (Manifest / Shopify) and in the\n\t// sub-agent list.\n\tconst showSearch =\n\t\t(activeCategory === 'tool' && !!source) || activeCategory === 'subagent';\n\n\treturn (\n\t\t<PickerCard className={`bik-mention-picker bik-mention-picker--${variant}`}>\n\t\t\t{header && (\n\t\t\t\t<PickerBack\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={header.onBack}\n\t\t\t\t\tdisabled={!header.onBack}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: COLORS.surface.subdued,\n\t\t\t\t\t\tcursor: header.onBack ? 'pointer' : 'default',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{header.onBack && (\n\t\t\t\t\t\t<SvgArrowLeft\n\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\tcolor={COLORS.content.primary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{header.icon && renderSourceIcon(header.icon)}\n\t\t\t\t\t<TitleSmall> {header.title}</TitleSmall>\n\t\t\t\t</PickerBack>\n\t\t\t)}\n\t\t\t{showSearch && (\n\t\t\t\t<PickerSearchRow>\n\t\t\t\t\t<SearchIcon\n\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\theight={20}\n\t\t\t\t\t\tcolor={COLORS.content.placeholder}\n\t\t\t\t\t/>\n\t\t\t\t\t<PickerSearchInput\n\t\t\t\t\t\t// Focus on open so the user can type immediately (appears only\n\t\t\t\t\t\t// after they drill into a source).\n\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\tdata-test=\"mention-picker-search\"\n\t\t\t\t\t\tonChange={(e) => setSearch(e.target.value)}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (!rows.length) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (e.key === 'ArrowDown') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tsetActiveIndex((p) => (p + 1) % rows.length);\n\t\t\t\t\t\t\t} else if (e.key === 'ArrowUp') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tsetActiveIndex((p) => (p + rows.length - 1) % rows.length);\n\t\t\t\t\t\t\t} else if (e.key === 'Enter') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\trows[activeIndex]?.onActivate();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</PickerSearchRow>\n\t\t\t)}\n\t\t\t{rows.length === 0 ? (\n\t\t\t\t<PickerEmpty>\n\t\t\t\t\t{activeCategory === 'subagent'\n\t\t\t\t\t\t? 'No sub-agents available'\n\t\t\t\t\t\t: 'No tools available'}\n\t\t\t\t</PickerEmpty>\n\t\t\t) : (\n\t\t\t\trows.map((row, i) => (\n\t\t\t\t\t<PickerRow\n\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t$active={i === activeIndex}\n\t\t\t\t\t\tonMouseEnter={() => setActiveIndex(i)}\n\t\t\t\t\t\tonClick={row.onActivate}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.isCreate ? (\n\t\t\t\t\t\t\t<CreateRowText>{row.label}</CreateRowText>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<PickerRowMain>\n\t\t\t\t\t\t\t\t\t{renderSourceIcon(row.icon)}\n\t\t\t\t\t\t\t\t\t<BodySecondary color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\t\t\t{row.label}\n\t\t\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t\t\t</PickerRowMain>\n\t\t\t\t\t\t\t\t{row.rightLabel ? (\n\t\t\t\t\t\t\t\t\t<RightActionText>{row.rightLabel}</RightActionText>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\trow.drillsIn && <ChevronRight width={12} height={12} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</PickerRow>\n\t\t\t\t))\n\t\t\t)}\n\t\t</PickerCard>\n\t);\n};\n\nconst PickerCard = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-width: 240px;\n\tmax-height: 301px;\n\toverflow-y: auto;\n\tbackground: ${COLORS.surface.standard};\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tborder-radius: 4px;\n\tbox-shadow: 0px -2px 8px 0px #0000001f;\n`;\n\n// Search box at the top of a source's tool list (Manifest / Shopify).\nconst PickerSearchRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 10px 12px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n`;\n\nconst PickerSearchInput = styled.input`\n\tflex: 1;\n\tmin-width: 0;\n\tborder: none;\n\toutline: none;\n\tbackground: transparent;\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tcolor: ${COLORS.content.primary};\n\n\t&::placeholder {\n\t\tcolor: ${COLORS.content.placeholder};\n\t}\n`;\n\nconst PickerRow = styled.button<{ $active?: boolean }>`\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tgap: 2px;\n\twidth: 100%;\n\tpadding: 8px 10px;\n\theight: 48px;\n\tborder: none;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tbackground: ${(p) => (p.$active ? COLORS.surface.subdued : 'transparent')};\n\tcursor: pointer;\n\ttext-align: left;\n\n\t&:hover {\n\t\tbackground: ${COLORS.surface.subdued};\n\t}\n`;\n\n// Left cluster: leading source glyph + label (chevron stays right via PickerRow).\nconst PickerRowMain = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n\tmin-width: 0;\n`;\n\n// Right-aligned brand action text (e.g. \"Connect\") in place of the chevron.\nconst RightActionText = styled.span`\n\tflex-shrink: 0;\n\tcolor: ${COLORS.content.brand};\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\twhite-space: nowrap;\n`;\n\n// \"Create new\" — centered brand text, no icon (matches the side-panel dropdown).\nconst CreateRowText = styled.div`\n\twidth: 100%;\n\ttext-align: center;\n\tcolor: ${COLORS.content.brand};\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tfont-weight: 600;\n`;\n\nconst PickerBack = styled.button`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 12px 16px;\n\tborder: none;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tbackground: transparent;\n\tcursor: pointer;\n\tfont-family: Inter;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\theight: 48px;\n\tgap: 4px;\n`;\n\nconst PickerEmpty = styled.div`\n\tpadding: 12px 10px;\n\tfont-family: Inter;\n\tfont-size: 13px;\n\tcolor: ${COLORS.content.secondary};\n`;\n"],"names":["metaOf","item","rowLabel","CREATE_SUBAGENT_ID","MentionPicker","items","onSelect","registerKeyHandler","onClose","onCreateSubAgent","initialSource","toolActions","category","setCategory","useState","source","setSource","activeIndex","setActiveIndex","search","setSearch","tools","useMemo","i","subAgents","sources","acc","t","s","actionBySource","a","availableCategories","CATEGORIES","c","soleCategory","activeCategory","header","toolSourceLabel","sourceIcon","rows","sq","leaves","actionOnly","b","toolSourceRank","action","q","isConfigTool","CONFIG_TOOL_SOURCES","useEffect","navRef","useRef","event","h","p","variant","showSearch","jsxs","PickerCard","PickerBack","COLORS","jsx","SvgArrowLeft","renderSourceIcon","TitleSmall","PickerSearchRow","SearchIcon","PickerSearchInput","PickerEmpty","row","PickerRow","CreateRowText","Fragment","PickerRowMain","BodySecondary","RightActionText","ChevronRight","styled"],"mappings":";;;;;;;;;;;AAqBA,MAAMA,IAAS,CAACC,MACfA,EAAK,MAEAC,IAAW,CAACD,MACjBD,EAAOC,CAAI,GAAG,cAAcA,EAAK,OAqB5BE,KAAqB,2BA0BdC,KAA8C,CAAC;AAAA,EAC3D,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AACD,MAAM;AACL,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAA0B,IAAI,GACxD,CAACC,GAAQC,CAAS,IAAIF,EAAwBJ,KAAiB,IAAI,GACnE,CAACO,GAAaC,CAAc,IAAIJ,EAAS,CAAC,GAG1C,CAACK,GAAQC,CAAS,IAAIN,EAAS,EAAE,GAEjCO,IAAQC;AAAA,IACb,MAAMjB,EAAM,OAAO,CAACkB,MAAMvB,EAAOuB,CAAC,GAAG,SAAS,MAAM;AAAA,IACpD,CAAClB,CAAK;AAAA,EAAA,GAEDmB,IAAYF;AAAA,IACjB,MAAMjB,EAAM,OAAO,CAACkB,MAAMvB,EAAOuB,CAAC,GAAG,SAAS,UAAU;AAAA,IACxD,CAAClB,CAAK;AAAA,EAAA,GAEDoB,IAAUH,EAAQ,MAAM;AAC7B,UAAMI,IAAgB,CAAA;AACtB,WAAAL,EAAM,QAAQ,CAACM,MAAM;AACpB,YAAMC,IAAI5B,EAAO2B,CAAC,GAAG,UAAU;AAC/B,MAAKD,EAAI,SAASE,CAAC,KAClBF,EAAI,KAAKE,CAAC;AAAA,IAEZ,CAAC,GACMF;AAAA,EACR,GAAG,CAACL,CAAK,CAAC,GAIJQ,IAAiBP;AAAA,IACtB,MACC,IAAI;AAAA,OACFX,KAAe,CAAA,GAAI,IAAI,CAACmB,MAAM,CAACA,EAAE,QAAQA,CAAC,CAAC;AAAA,IAAA;AAAA,IAE9C,CAACnB,CAAW;AAAA,EAAA,GAOPoB,IAAsBT;AAAA,IAC3B,MACCU,EAAW;AAAA,MAAO,CAACC,MAClBA,EAAE,QAAQ,SACPZ,EAAM,SAAS,MAAMV,GAAa,UAAU,KAAK,IACjDa,EAAU,SAAS,KAAK,CAAC,CAACf;AAAA,IAAA;AAAA,IAE/B,CAACY,EAAM,QAAQG,EAAU,QAAQf,GAAkBE,GAAa,MAAM;AAAA,EAAA,GAEjEuB,IACLH,EAAoB,WAAW,IAAIA,EAAoB,CAAC,EAAE,MAAM,MAC3DI,IAAiBvB,KAAYsB,GAM7BE,IAIMD,IAETA,MAAmB;AAAA;AAAA,IAEnB;AAAA,MACA,OAAO;AAAA,MACP,QAAQD,IAAe,SAAY,MAAMrB,EAAY,IAAI;AAAA,IAAA;AAAA,MAEzDE,IACA;AAAA,IACA,OAAOsB,EAAgBtB,CAAM;AAAA,IAC7B,QAAQ,MAAMC,EAAU,IAAI;AAAA,IAC5B,MAAMsB,EAAWvB,CAAM;AAAA,EAAA;AAAA;AAAA;AAAA,IAIvB;AAAA,MACA,OAAO;AAAA,MACP,QAAQmB,IAAe,SAAY,MAAMrB,EAAY,IAAI;AAAA,IAAA;AAAA,MAjBzD,MAqBG0B,IAAyBjB,EAAQ,MAAM;AAC5C,QAAI,CAACa;AACJ,aAAOJ,EAAoB,IAAI,CAACE,OAAO;AAAA,QACtC,IAAIA,EAAE;AAAA,QACN,OAAOA,EAAE;AAAA,QACT,UAAU;AAAA,QACV,YAAY,MAAM;AACjB,UAAApB,EAAYoB,EAAE,GAAG,GACjBjB,EAAU,IAAI;AAAA,QACf;AAAA,MAAA,EACC;AAEH,QAAImB,MAAmB,YAAY;AAClC,YAAMK,IAAKrB,EAAO,KAAA,EAAO,YAAA,GACnBsB,IAA2BjB,EAC/B,OAAO,CAACvB,MAAS,CAACuC,KAAMtC,EAASD,CAAI,EAAE,YAAA,EAAc,SAASuC,CAAE,CAAC,EACjE,IAAI,CAACvC,OAAU;AAAA,QACf,IAAI,OAAOA,EAAK,EAAE;AAAA,QAClB,OAAOC,EAASD,CAAI;AAAA,QACpB,UAAU;AAAA,QACV,YAAY,MAAMK,EAASL,CAAI;AAAA,MAAA,EAC9B;AAEH,aAAIQ,KACHgC,EAAO,KAAK;AAAA,QACX,IAAItC;AAAA,QACJ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,YAAY,MAAM;AACjB,UAAAK,IAAA,GACAC,EAAA;AAAA,QACD;AAAA,MAAA,CACA,GAEKgC;AAAAA,IACR;AACA,QAAI,CAAC1B,GAAQ;AAIZ,YAAM2B,KAAc/B,KAAe,CAAA,GACjC,IAAI,CAACmB,MAAMA,EAAE,MAAM,EACnB,OAAO,CAACF,MAAM,CAACH,EAAQ,SAASG,CAAC,CAAC;AAGpC,aAAO,CAAC,GAAGH,GAAS,GAAGiB,CAAU,EAC/B,KAAK,CAACZ,GAAGa,MAAMC,EAAed,CAAC,IAAIc,EAAeD,CAAC,CAAC,EACpD,IAAI,CAACf,MAAM;AACX,cAAMiB,IAAShB,EAAe,IAAID,CAAC;AAInC,eAAIiB,GAAQ,cAAc,KAClB;AAAA,UACN,IAAIjB;AAAA,UACJ,OAAOS,EAAgBT,CAAC;AAAA,UACxB,UAAU;AAAA,UACV,MAAMU,EAAWV,CAAC,KAAKiB,EAAO;AAAA,UAC9B,YAAY;AAAA,UACZ,YAAY,MAAM;AACjB,YAAArC,IAAA,GACAqC,EAAO,YAAA;AAAA,UACR;AAAA,QAAA,IAGK;AAAA,UACN,IAAIjB;AAAA,UACJ,OAAOS,EAAgBT,CAAC;AAAA,UACxB,UAAU;AAAA,UACV,MAAMU,EAAWV,CAAC,KAAKiB,GAAQ;AAAA,UAC/B,YAAY,MAAM7B,EAAUY,CAAC;AAAA,QAAA;AAAA,MAE/B,CAAC;AAAA,IACH;AACA,UAAMkB,IAAI3B,EAAO,KAAA,EAAO,YAAA,GAClBsB,IAA2BpB,EAC/B,OAAO,CAAC,OAAOrB,EAAO,CAAC,GAAG,UAAU,aAAae,CAAM,EACvD,OAAO,CAAC,MAAM,CAAC+B,KAAK5C,EAAS,CAAC,EAAE,cAAc,SAAS4C,CAAC,CAAC,EACzD,IAAI,CAAC7C,OAAU;AAAA,MACf,IAAI,OAAOA,EAAK,EAAE;AAAA,MAClB,OAAOC,EAASD,CAAI;AAAA,MACpB,UAAU;AAAA,MACV,YAAY,MAAMK,EAASL,CAAI;AAAA,IAAA,EAC9B,GAMG4C,IAAShB,EAAe,IAAId,CAAM;AACxC,QAAI8B,GAAQ;AACX,YAAME,IAAehC,KAAUiC;AAC/B,MAAAP,EAAO,KAAK;AAAA,QACX,IAAI,UAAU1B,CAAM;AAAA,QACpB,OAAO8B,EAAO;AAAA,QACd,UAAU;AAAA,QACV,UAAU,CAACE;AAAA,QACX,YAAY,MAAM;AACjB,UAAAvC,IAAA,GACAqC,EAAO,SAAA;AAAA,QACR;AAAA,MAAA,CACA;AAAA,IACF;AACA,WAAOJ;AAAA,EACR,GAAG;AAAA,IACFN;AAAA,IACAJ;AAAA,IACAhB;AAAA,IACAI;AAAA,IACAE;AAAA,IACAG;AAAA,IACAC;AAAA,IACAnB;AAAA,IACAE;AAAA,IACAC;AAAA,IACAE;AAAA,IACAkB;AAAA,EAAA,CACA;AAGD,EAAAoB,EAAU,MAAM/B,EAAe,CAAC,GAAG,CAACiB,GAAgBpB,GAAQI,GAAQd,CAAK,CAAC,GAE1E4C,EAAU,MAAM7B,EAAU,EAAE,GAAG,CAACe,GAAgBpB,CAAM,CAAC;AAGvD,QAAMmC,IAASC,EAAO,EAAE,MAAAZ,GAAM,aAAAtB,GAAa,QAAAmB,GAAQ;AACnD,EAAAc,EAAO,UAAU,EAAE,MAAAX,GAAM,aAAAtB,GAAa,QAAAmB,EAAA,GAEtCa,EAAU,MAAM;AACf,QAAK1C;AAGL,aAAAA,EAAmB,CAAC6C,MAAU;AAC7B,cAAM,EAAE,MAAM,GAAG,aAAa7B,GAAG,QAAQ8B,MAAMH,EAAO;AACtD,gBAAQE,EAAM,KAAA;AAAA,UACb,KAAK;AACJ,mBAAI,EAAE,UAAQlC,EAAe,CAACoC,OAAOA,IAAI,KAAK,EAAE,MAAM,GAC/C;AAAA,UACR,KAAK;AACJ,mBAAI,EAAE,UAAQpC,EAAe,CAACoC,OAAOA,IAAI,EAAE,SAAS,KAAK,EAAE,MAAM,GAC1D;AAAA,UACR,KAAK;AAAA,UACL,KAAK;AACJ,qBAAE/B,CAAC,GAAG,WAAA,GACC;AAAA,UACR,KAAK;AACJ,mBAAI8B,GAAG,UACNA,EAAE,OAAA,GACK,MAED;AAAA,UACR;AACC,mBAAO;AAAA,QAAA;AAAA,MAEV,CAAC,GACM,MAAM9C,EAAmB,IAAI;AAAA,EACrC,GAAG,CAACA,CAAkB,CAAC;AAEvB,QAAMgD,IAAWpB,IAEdI,EAAK,UAAU,CAACA,EAAK,CAAC,EAAE,WACxB,UACA,YAHA,cAOGiB,IACJrB,MAAmB,UAAU,CAAC,CAACpB,KAAWoB,MAAmB;AAE/D,SACC,gBAAAsB,EAACC,IAAA,EAAW,WAAW,0CAA0CH,CAAO,IACtE,UAAA;AAAA,IAAAnB,KACA,gBAAAqB;AAAA,MAACE;AAAA,MAAA;AAAA,QACA,MAAK;AAAA,QACL,SAASvB,EAAO;AAAA,QAChB,UAAU,CAACA,EAAO;AAAA,QAClB,OAAO;AAAA,UACN,YAAYwB,EAAO,QAAQ;AAAA,UAC3B,QAAQxB,EAAO,SAAS,YAAY;AAAA,QAAA;AAAA,QAGpC,UAAA;AAAA,UAAAA,EAAO,UACP,gBAAAyB;AAAA,YAACC;AAAA,YAAA;AAAA,cACA,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,OAAOF,EAAO,QAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAGvBxB,EAAO,QAAQ2B,EAAiB3B,EAAO,IAAI;AAAA,4BAC3C4B,GAAA,EAAW,UAAA;AAAA,YAAA;AAAA,YAAE5B,EAAO;AAAA,UAAA,EAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAG5BoB,uBACCS,IAAA,EACA,UAAA;AAAA,MAAA,gBAAAJ;AAAA,QAACK;AAAAA,QAAA;AAAA,UACA,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,OAAON,EAAO,QAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,MAEvB,gBAAAC;AAAA,QAACM;AAAA,QAAA;AAAA,UAIA,WAAS;AAAA,UACT,OAAOhD;AAAA,UACP,aAAY;AAAA,UACZ,aAAU;AAAA,UACV,UAAU,CAAC,MAAMC,EAAU,EAAE,OAAO,KAAK;AAAA,UACzC,WAAW,CAAC,MAAM;AACjB,YAAKmB,EAAK,WAGN,EAAE,QAAQ,eACb,EAAE,eAAA,GACFrB,EAAe,CAACoC,OAAOA,IAAI,KAAKf,EAAK,MAAM,KACjC,EAAE,QAAQ,aACpB,EAAE,eAAA,GACFrB,EAAe,CAACoC,OAAOA,IAAIf,EAAK,SAAS,KAAKA,EAAK,MAAM,KAC/C,EAAE,QAAQ,YACpB,EAAE,eAAA,GACFA,EAAKtB,CAAW,GAAG,WAAA;AAAA,UAErB;AAAA,QAAA;AAAA,MAAA;AAAA,IACD,GACD;AAAA,IAEAsB,EAAK,WAAW,IAChB,gBAAAsB,EAACO,MACC,UAAAjC,MAAmB,aACjB,4BACA,qBAAA,CACJ,IAEAI,EAAK,IAAI,CAAC8B,GAAK9C,MACd,gBAAAsC;AAAA,MAACS;AAAA,MAAA;AAAA,QAEA,MAAK;AAAA,QACL,SAAS/C,MAAMN;AAAA,QACf,cAAc,MAAMC,EAAeK,CAAC;AAAA,QACpC,SAAS8C,EAAI;AAAA,QAEZ,YAAI,WACJ,gBAAAR,EAACU,MAAe,UAAAF,EAAI,MAAA,CAAM,IAE1B,gBAAAZ,EAAAe,GAAA,EACC,UAAA;AAAA,UAAA,gBAAAf,EAACgB,IAAA,EACC,UAAA;AAAA,YAAAV,EAAiBM,EAAI,IAAI;AAAA,8BACzBK,GAAA,EAAc,OAAOd,EAAO,QAAQ,SACnC,YAAI,MAAA,CACN;AAAA,UAAA,GACD;AAAA,UACCS,EAAI,aACJ,gBAAAR,EAACc,IAAA,EAAiB,YAAI,WAAA,CAAW,IAEjCN,EAAI,YAAY,gBAAAR,EAACe,GAAA,EAAa,OAAO,IAAI,QAAQ,GAAA,CAAI;AAAA,QAAA,EAAA,CAEvD;AAAA,MAAA;AAAA,MArBIP,EAAI;AAAA,IAAA,CAwBV;AAAA,EAAA,GAEH;AAEF,GAEMX,KAAamB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMXjB,EAAO,QAAQ,QAAQ;AAAA,qBACjBA,EAAO,OAAO,OAAO;AAAA;AAAA;AAAA,GAMpCK,KAAkBY,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKHjB,EAAO,OAAO,OAAO;AAAA,GAG3CO,KAAoBU,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQvBjB,EAAO,QAAQ,OAAO;AAAA;AAAA;AAAA,WAGrBA,EAAO,QAAQ,WAAW;AAAA;AAAA,GAI/BU,KAAYO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BASGjB,EAAO,OAAO,OAAO;AAAA,eAClC,CAACN,MAAOA,EAAE,UAAUM,EAAO,QAAQ,UAAU,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA,gBAK1DA,EAAO,QAAQ,OAAO;AAAA;AAAA,GAKhCa,KAAgBI,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAQvBF,KAAkBE,EAAO;AAAA;AAAA,UAErBjB,EAAO,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,GAQxBW,KAAgBM,EAAO;AAAA;AAAA;AAAA,UAGnBjB,EAAO,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,GAMxBD,KAAakB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKEjB,EAAO,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAU3CQ,KAAcS,EAAO;AAAA;AAAA;AAAA;AAAA,UAIjBjB,EAAO,QAAQ,SAAS;AAAA;"}
|
|
@@ -12,8 +12,6 @@ interface RestApiToolPanelProps {
|
|
|
12
12
|
charLimits?: AgentCharLimits;
|
|
13
13
|
/** SideModal stacking order — raise it when opened over another drawer. */
|
|
14
14
|
zIndex?: number;
|
|
15
|
-
/** Names of the OTHER tools — a new tool can't reuse one of these. */
|
|
16
|
-
existingNames?: string[];
|
|
17
15
|
}
|
|
18
16
|
/**
|
|
19
17
|
* Right-side drawer to configure a "Rest API" tool: the endpoint the agent can
|