@bikdotai/bik-component-library 0.0.821-beta.0 → 0.0.821-beta.10

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 (90) hide show
  1. package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
  2. package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
  3. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +152 -60
  4. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +2 -0
  6. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -0
  7. package/dist/cjs/components/agent-builder/components/MentionEditor.js +2 -0
  8. package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -0
  9. package/dist/cjs/components/agent-builder/components/MentionField.js +2 -0
  10. package/dist/cjs/components/agent-builder/components/MentionField.js.map +1 -0
  11. package/dist/cjs/components/agent-builder/components/MentionPicker.js +12 -12
  12. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +1 -1
  14. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/components/UndoToast.js +2 -0
  16. package/dist/cjs/components/agent-builder/components/UndoToast.js.map +1 -0
  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 +3 -3
  22. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  23. package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
  24. package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
  25. package/dist/cjs/components/agent-listing/AgentListingFilters.js +1 -1
  26. package/dist/cjs/components/agent-listing/AgentListingFilters.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/agent-listing/DeleteAgentModal.js +2 -0
  32. package/dist/cjs/components/agent-listing/DeleteAgentModal.js.map +1 -0
  33. package/dist/esm/components/agent-builder/AgentBuilder.js +141 -128
  34. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  35. package/dist/esm/components/agent-builder/AgentBuilder.model.d.ts +34 -0
  36. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +34 -0
  37. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +206 -82
  38. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  39. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.d.ts +25 -0
  40. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +207 -0
  41. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -0
  42. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +33 -0
  43. package/dist/esm/components/agent-builder/components/MentionEditor.js +99 -0
  44. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -0
  45. package/dist/esm/components/agent-builder/components/MentionField.d.ts +19 -0
  46. package/dist/esm/components/agent-builder/components/MentionField.js +61 -0
  47. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -0
  48. package/dist/esm/components/agent-builder/components/MentionPicker.js +84 -71
  49. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  50. package/dist/esm/components/agent-builder/components/SelectableListSection.d.ts +18 -1
  51. package/dist/esm/components/agent-builder/components/SelectableListSection.js +102 -57
  52. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  53. package/dist/esm/components/agent-builder/components/UndoToast.d.ts +7 -0
  54. package/dist/esm/components/agent-builder/components/UndoToast.js +27 -0
  55. package/dist/esm/components/agent-builder/components/UndoToast.js.map +1 -0
  56. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +43 -5
  57. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +135 -87
  58. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  59. package/dist/esm/components/agent-builder/index.d.ts +1 -1
  60. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +149 -68
  61. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  62. package/dist/esm/components/agent-builder/utils/mentionSerialization.d.ts +6 -0
  63. package/dist/esm/components/agent-builder/utils/mentionSerialization.js +53 -52
  64. package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  65. package/dist/esm/components/agent-listing/AgentListing.js +126 -91
  66. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  67. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +9 -0
  68. package/dist/esm/components/agent-listing/AgentListingFilters.d.ts +2 -0
  69. package/dist/esm/components/agent-listing/AgentListingFilters.js +37 -33
  70. package/dist/esm/components/agent-listing/AgentListingFilters.js.map +1 -1
  71. package/dist/esm/components/agent-listing/AgentTable.d.ts +1 -0
  72. package/dist/esm/components/agent-listing/AgentTable.js +13 -11
  73. package/dist/esm/components/agent-listing/AgentTable.js.map +1 -1
  74. package/dist/esm/components/agent-listing/AgentTableRow.d.ts +2 -0
  75. package/dist/esm/components/agent-listing/AgentTableRow.js +70 -50
  76. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  77. package/dist/esm/components/agent-listing/DeleteAgentModal.d.ts +16 -0
  78. package/dist/esm/components/agent-listing/DeleteAgentModal.js +69 -0
  79. package/dist/esm/components/agent-listing/DeleteAgentModal.js.map +1 -0
  80. package/package.json +1 -1
  81. package/dist/cjs/components/agent-builder/components/InstructionsField.js +0 -2
  82. package/dist/cjs/components/agent-builder/components/InstructionsField.js.map +0 -1
  83. package/dist/cjs/components/agent-builder/components/RichTextField.js +0 -2
  84. package/dist/cjs/components/agent-builder/components/RichTextField.js.map +0 -1
  85. package/dist/esm/components/agent-builder/components/InstructionsField.d.ts +0 -2
  86. package/dist/esm/components/agent-builder/components/InstructionsField.js +0 -81
  87. package/dist/esm/components/agent-builder/components/InstructionsField.js.map +0 -1
  88. package/dist/esm/components/agent-builder/components/RichTextField.d.ts +0 -21
  89. package/dist/esm/components/agent-builder/components/RichTextField.js +0 -66
  90. package/dist/esm/components/agent-builder/components/RichTextField.js.map +0 -1
@@ -1,118 +1,131 @@
1
- import { jsxs as f, jsx as b } from "react/jsx-runtime";
2
- import L from "../../../assets/icons/chevronLeft.svg.js";
3
- import P from "../../../assets/icons/chevronRight.svg.js";
4
- import { useState as w, useMemo as h, useEffect as C, useRef as O } from "react";
5
- import g from "styled-components";
6
- import { TitleSmall as T, BodySecondary as j } from "../../TypographyStyle.js";
7
- import { COLORS as n } from "../../../constants/Theme.js";
8
- import { toolSourceLabel as B } from "../utils/mentionSerialization.js";
9
- const M = [
1
+ import { jsxs as h, jsx as x } from "react/jsx-runtime";
2
+ import T from "../../../assets/icons/chevronLeft.svg.js";
3
+ import j from "../../../assets/icons/chevronRight.svg.js";
4
+ import { useState as C, useMemo as c, useEffect as E, useRef as M } from "react";
5
+ import k from "styled-components";
6
+ import { TitleSmall as N, BodySecondary as z } from "../../TypographyStyle.js";
7
+ import { COLORS as r } from "../../../constants/Theme.js";
8
+ import { toolSourceLabel as R } from "../utils/mentionSerialization.js";
9
+ const D = [
10
10
  { key: "tool", label: "Tools" },
11
11
  { key: "subagent", label: "Sub-agent" }
12
- ], s = (t) => t.meta, E = (t) => s(t)?.plainLabel ?? t.label, Y = ({
12
+ ], u = (t) => t.meta, L = (t) => u(t)?.plainLabel ?? t.label, H = ({
13
13
  items: t,
14
- onSelect: x,
15
- registerKeyHandler: c
14
+ onSelect: m,
15
+ registerKeyHandler: d
16
16
  }) => {
17
- const [o, m] = w(null), [a, k] = w(null), [v, u] = w(0), d = h(
18
- () => t.filter((e) => s(e)?.kind === "tool"),
17
+ const [P, y] = C(null), [l, v] = C(null), [w, p] = C(0), a = c(
18
+ () => t.filter((e) => u(e)?.kind === "tool"),
19
19
  [t]
20
- ), A = h(
21
- () => t.filter((e) => s(e)?.kind === "subagent"),
20
+ ), f = c(
21
+ () => t.filter((e) => u(e)?.kind === "subagent"),
22
22
  [t]
23
- ), I = h(() => {
23
+ ), S = c(() => {
24
24
  const e = [];
25
- return d.forEach((r) => {
26
- const p = s(r)?.source ?? "other";
27
- e.includes(p) || e.push(p);
25
+ return a.forEach((n) => {
26
+ const b = u(n)?.source ?? "other";
27
+ e.includes(b) || e.push(b);
28
28
  }), e;
29
- }, [d]), l = o ? o === "subagent" ? { title: "Sub-agent", onBack: () => m(null) } : a ? { title: B(a), onBack: () => k(null) } : { title: "Tools", onBack: () => m(null) } : null, i = h(() => o ? o === "subagent" ? A.map((e) => ({
29
+ }, [a]), g = c(
30
+ () => D.filter(
31
+ (e) => e.key === "tool" ? a.length > 0 : f.length > 0
32
+ ),
33
+ [a.length, f.length]
34
+ ), A = g.length === 1 ? g[0].key : null, o = P ?? A, s = o ? o === "subagent" ? A ? null : { title: "Sub-agent", onBack: () => y(null) } : l ? { title: R(l), onBack: () => v(null) } : A ? null : { title: "Tools", onBack: () => y(null) } : null, i = c(() => o ? o === "subagent" ? f.map((e) => ({
30
35
  id: String(e.id),
31
- label: E(e),
36
+ label: L(e),
32
37
  drillsIn: !1,
33
- onActivate: () => x(e)
34
- })) : a ? d.filter((e) => (s(e)?.source ?? "other") === a).map((e) => ({
38
+ onActivate: () => m(e)
39
+ })) : l ? a.filter((e) => (u(e)?.source ?? "other") === l).map((e) => ({
35
40
  id: String(e.id),
36
- label: E(e),
41
+ label: L(e),
37
42
  drillsIn: !1,
38
- onActivate: () => x(e)
39
- })) : I.map((e) => ({
43
+ onActivate: () => m(e)
44
+ })) : S.map((e) => ({
40
45
  id: e,
41
- label: B(e),
46
+ label: R(e),
42
47
  drillsIn: !0,
43
- onActivate: () => k(e)
44
- })) : M.map((e) => ({
48
+ onActivate: () => v(e)
49
+ })) : g.map((e) => ({
45
50
  id: e.key,
46
51
  label: e.label,
47
52
  drillsIn: !0,
48
53
  onActivate: () => {
49
- m(e.key), k(null);
54
+ y(e.key), v(null);
50
55
  }
51
- })), [o, a, d, A, I, x]);
52
- C(() => u(0), [o, a, t]);
53
- const S = O({ rows: i, activeIndex: v, header: l });
54
- S.current = { rows: i, activeIndex: v, header: l }, C(() => {
55
- if (c)
56
- return c((e) => {
57
- const { rows: r, activeIndex: p, header: $ } = S.current;
56
+ })), [
57
+ o,
58
+ g,
59
+ l,
60
+ a,
61
+ f,
62
+ S,
63
+ m
64
+ ]);
65
+ E(() => p(0), [o, l, t]);
66
+ const $ = M({ rows: i, activeIndex: w, header: s });
67
+ $.current = { rows: i, activeIndex: w, header: s }, E(() => {
68
+ if (d)
69
+ return d((e) => {
70
+ const { rows: n, activeIndex: b, header: B } = $.current;
58
71
  switch (e.key) {
59
72
  case "ArrowDown":
60
- return r.length && u((y) => (y + 1) % r.length), !0;
73
+ return n.length && p((I) => (I + 1) % n.length), !0;
61
74
  case "ArrowUp":
62
- return r.length && u((y) => (y + r.length - 1) % r.length), !0;
75
+ return n.length && p((I) => (I + n.length - 1) % n.length), !0;
63
76
  case "ArrowRight":
64
77
  case "Enter":
65
- return r[p]?.onActivate(), !0;
78
+ return n[b]?.onActivate(), !0;
66
79
  case "ArrowLeft":
67
- return $ ? ($.onBack(), !0) : !1;
80
+ return B ? (B.onBack(), !0) : !1;
68
81
  default:
69
82
  return !1;
70
83
  }
71
- }), () => c(null);
72
- }, [c]);
73
- const R = o ? i.length && !i[0].drillsIn ? "items" : "sources" : "categories";
74
- return /* @__PURE__ */ f(N, { className: `bik-mention-picker bik-mention-picker--${R}`, children: [
75
- l && /* @__PURE__ */ f(
76
- D,
84
+ }), () => d(null);
85
+ }, [d]);
86
+ const O = o ? i.length && !i[0].drillsIn ? "items" : "sources" : "categories";
87
+ return /* @__PURE__ */ h(G, { className: `bik-mention-picker bik-mention-picker--${O}`, children: [
88
+ s && /* @__PURE__ */ h(
89
+ q,
77
90
  {
78
91
  type: "button",
79
- onClick: l.onBack,
80
- style: { background: n.surface.subdued },
92
+ onClick: s.onBack,
93
+ style: { background: r.surface.subdued },
81
94
  children: [
82
- /* @__PURE__ */ b(L, { width: 12, height: 12 }),
83
- /* @__PURE__ */ f(T, { children: [
95
+ /* @__PURE__ */ x(T, { width: 12, height: 12 }),
96
+ /* @__PURE__ */ h(N, { children: [
84
97
  " ",
85
- l.title
98
+ s.title
86
99
  ] })
87
100
  ]
88
101
  }
89
102
  ),
90
- i.length === 0 ? /* @__PURE__ */ b(G, { children: o === "subagent" ? "No sub-agents available" : "No tools available" }) : i.map((e, r) => /* @__PURE__ */ f(
91
- z,
103
+ i.length === 0 ? /* @__PURE__ */ x(F, { children: o === "subagent" ? "No sub-agents available" : "No tools available" }) : i.map((e, n) => /* @__PURE__ */ h(
104
+ U,
92
105
  {
93
106
  type: "button",
94
- $active: r === v,
95
- onMouseEnter: () => u(r),
107
+ $active: n === w,
108
+ onMouseEnter: () => p(n),
96
109
  onClick: e.onActivate,
97
110
  children: [
98
- /* @__PURE__ */ b(j, { color: n.content.primary, children: e.label }),
99
- e.drillsIn && /* @__PURE__ */ b(P, { width: 12, height: 12 })
111
+ /* @__PURE__ */ x(z, { color: r.content.primary, children: e.label }),
112
+ e.drillsIn && /* @__PURE__ */ x(j, { width: 12, height: 12 })
100
113
  ]
101
114
  },
102
115
  e.id
103
116
  ))
104
117
  ] });
105
- }, N = g.div`
118
+ }, G = k.div`
106
119
  display: flex;
107
120
  flex-direction: column;
108
121
  min-width: 240px;
109
122
  max-height: 280px;
110
123
  overflow-y: auto;
111
- background: ${n.surface.standard};
112
- border: 1px solid ${n.stroke.primary};
124
+ background: ${r.surface.standard};
125
+ border: 1px solid ${r.stroke.primary};
113
126
  border-radius: 4px;
114
127
  box-shadow: 0px -2px 8px 0px #0000001f;
115
- `, z = g.button`
128
+ `, U = k.button`
116
129
  display: flex;
117
130
  justify-content: space-between;
118
131
  align-items: center;
@@ -121,20 +134,20 @@ const M = [
121
134
  padding: 8px 10px;
122
135
  height: 48px;
123
136
  border: none;
124
- border-bottom: 1px solid ${n.stroke.primary};
125
- background: ${(t) => t.$active ? n.surface.subdued : "transparent"};
137
+ border-bottom: 1px solid ${r.stroke.primary};
138
+ background: ${(t) => t.$active ? r.surface.subdued : "transparent"};
126
139
  cursor: pointer;
127
140
  text-align: left;
128
141
 
129
142
  &:hover {
130
- background: ${n.surface.subdued};
143
+ background: ${r.surface.subdued};
131
144
  }
132
- `, D = g.button`
145
+ `, q = k.button`
133
146
  display: flex;
134
147
  align-items: center;
135
148
  padding: 12px 16px;
136
149
  border: none;
137
- border-bottom: 1px solid ${n.stroke.primary};
150
+ border-bottom: 1px solid ${r.stroke.primary};
138
151
  background: transparent;
139
152
  cursor: pointer;
140
153
  font-family: Inter;
@@ -142,13 +155,13 @@ const M = [
142
155
  font-weight: 600;
143
156
  height: 48px;
144
157
  gap: 4px;
145
- `, G = g.div`
158
+ `, F = k.div`
146
159
  padding: 12px 10px;
147
160
  font-family: Inter;
148
161
  font-size: 13px;
149
- color: ${n.content.secondary};
162
+ color: ${r.content.secondary};
150
163
  `;
151
164
  export {
152
- Y as MentionPicker
165
+ H as MentionPicker
153
166
  };
154
167
  //# 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 type { MentionDropdownRenderProps, MentionItem } from '@src/editor';\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\tMentionKindMeta,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\n\ntype Category = 'tool' | 'subagent';\n\nconst CATEGORIES: { key: Category; label: string }[] = [\n\t{ key: 'tool', label: 'Tools' },\n\t{ key: 'subagent', label: 'Sub-agent' },\n];\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\tonActivate: () => void;\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<MentionDropdownRenderProps> = ({\n\titems,\n\tonSelect,\n\tregisterKeyHandler,\n}) => {\n\tconst [category, setCategory] = useState<Category | null>(null);\n\tconst [source, setSource] = useState<string | null>(null);\n\tconst [activeIndex, setActiveIndex] = useState(0);\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\n\t// Title shown above the current view, and whether we can go back a level.\n\tconst header: { title: string; onBack: () => void } | null = !category\n\t\t? null\n\t\t: category === 'subagent'\n\t\t? { title: 'Sub-agent', onBack: () => setCategory(null) }\n\t\t: source\n\t\t? { title: toolSourceLabel(source), onBack: () => setSource(null) }\n\t\t: { title: 'Tools', onBack: () => setCategory(null) };\n\n\t// Build the navigable rows for the current view.\n\tconst rows: PickerRowModel[] = useMemo(() => {\n\t\tif (!category) {\n\t\t\treturn CATEGORIES.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 (category === 'subagent') {\n\t\t\treturn subAgents.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}\n\t\tif (!source) {\n\t\t\treturn sources.map((s) => ({\n\t\t\t\tid: s,\n\t\t\t\tlabel: toolSourceLabel(s),\n\t\t\t\tdrillsIn: true,\n\t\t\t\tonActivate: () => setSource(s),\n\t\t\t}));\n\t\t}\n\t\treturn tools\n\t\t\t.filter((t) => (metaOf(t)?.source ?? 'other') === source)\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}, [category, source, tools, subAgents, sources, onSelect]);\n\n\t// Reset highlight whenever the view (or filtered result set) changes.\n\tuseEffect(() => setActiveIndex(0), [category, source, items]);\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) {\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 = !category\n\t\t? 'categories'\n\t\t: rows.length && !rows[0].drillsIn\n\t\t? 'items'\n\t\t: 'sources';\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\tstyle={{ background: COLORS.surface.subdued }}\n\t\t\t\t>\n\t\t\t\t\t<ChevronLeft width={12} height={12} />\n\t\t\t\t\t<TitleSmall> {header.title}</TitleSmall>\n\t\t\t\t</PickerBack>\n\t\t\t)}\n\t\t\t{rows.length === 0 ? (\n\t\t\t\t<PickerEmpty>\n\t\t\t\t\t{category === '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<BodySecondary color={COLORS.content.primary}>\n\t\t\t\t\t\t\t{row.label}\n\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t{row.drillsIn && <ChevronRight width={12} height={12} />}\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: 280px;\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\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\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":["CATEGORIES","metaOf","item","rowLabel","MentionPicker","items","onSelect","registerKeyHandler","category","setCategory","useState","source","setSource","activeIndex","setActiveIndex","tools","useMemo","i","subAgents","sources","acc","t","s","header","toolSourceLabel","rows","c","useEffect","navRef","useRef","event","h","p","variant","jsxs","PickerCard","PickerBack","COLORS","jsx","ChevronLeft","TitleSmall","PickerEmpty","row","PickerRow","BodySecondary","ChevronRight","styled"],"mappings":";;;;;;;;AAcA,MAAMA,IAAiD;AAAA,EACtD,EAAE,KAAK,QAAQ,OAAO,QAAA;AAAA,EACtB,EAAE,KAAK,YAAY,OAAO,YAAA;AAC3B,GAEMC,IAAS,CAACC,MACfA,EAAK,MAEAC,IAAW,CAACD,MACjBD,EAAOC,CAAI,GAAG,cAAcA,EAAK,OAoBrBE,IAAsD,CAAC;AAAA,EACnE,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,oBAAAC;AACD,MAAM;AACL,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAA0B,IAAI,GACxD,CAACC,GAAQC,CAAS,IAAIF,EAAwB,IAAI,GAClD,CAACG,GAAaC,CAAc,IAAIJ,EAAS,CAAC,GAE1CK,IAAQC;AAAA,IACb,MAAMX,EAAM,OAAO,CAACY,MAAMhB,EAAOgB,CAAC,GAAG,SAAS,MAAM;AAAA,IACpD,CAACZ,CAAK;AAAA,EAAA,GAEDa,IAAYF;AAAA,IACjB,MAAMX,EAAM,OAAO,CAACY,MAAMhB,EAAOgB,CAAC,GAAG,SAAS,UAAU;AAAA,IACxD,CAACZ,CAAK;AAAA,EAAA,GAEDc,IAAUH,EAAQ,MAAM;AAC7B,UAAMI,IAAgB,CAAA;AACtB,WAAAL,EAAM,QAAQ,CAACM,MAAM;AACpB,YAAMC,IAAIrB,EAAOoB,CAAC,GAAG,UAAU;AAC/B,MAAKD,EAAI,SAASE,CAAC,KAClBF,EAAI,KAAKE,CAAC;AAAA,IAEZ,CAAC,GACMF;AAAA,EACR,GAAG,CAACL,CAAK,CAAC,GAGJQ,IAAwDf,IAE3DA,MAAa,aACb,EAAE,OAAO,aAAa,QAAQ,MAAMC,EAAY,IAAI,EAAA,IACpDE,IACA,EAAE,OAAOa,EAAgBb,CAAM,GAAG,QAAQ,MAAMC,EAAU,IAAI,EAAA,IAC9D,EAAE,OAAO,SAAS,QAAQ,MAAMH,EAAY,IAAI,EAAA,IALhD,MAQGgB,IAAyBT,EAAQ,MACjCR,IAWDA,MAAa,aACTU,EAAU,IAAI,CAAChB,OAAU;AAAA,IAC/B,IAAI,OAAOA,EAAK,EAAE;AAAA,IAClB,OAAOC,EAASD,CAAI;AAAA,IACpB,UAAU;AAAA,IACV,YAAY,MAAMI,EAASJ,CAAI;AAAA,EAAA,EAC9B,IAEES,IAQEI,EACL,OAAO,CAACM,OAAOpB,EAAOoB,CAAC,GAAG,UAAU,aAAaV,CAAM,EACvD,IAAI,CAACT,OAAU;AAAA,IACf,IAAI,OAAOA,EAAK,EAAE;AAAA,IAClB,OAAOC,EAASD,CAAI;AAAA,IACpB,UAAU;AAAA,IACV,YAAY,MAAMI,EAASJ,CAAI;AAAA,EAAA,EAC9B,IAdKiB,EAAQ,IAAI,CAACG,OAAO;AAAA,IAC1B,IAAIA;AAAA,IACJ,OAAOE,EAAgBF,CAAC;AAAA,IACxB,UAAU;AAAA,IACV,YAAY,MAAMV,EAAUU,CAAC;AAAA,EAAA,EAC5B,IAxBKtB,EAAW,IAAI,CAAC0B,OAAO;AAAA,IAC7B,IAAIA,EAAE;AAAA,IACN,OAAOA,EAAE;AAAA,IACT,UAAU;AAAA,IACV,YAAY,MAAM;AACjB,MAAAjB,EAAYiB,EAAE,GAAG,GACjBd,EAAU,IAAI;AAAA,IACf;AAAA,EAAA,EACC,GA0BD,CAACJ,GAAUG,GAAQI,GAAOG,GAAWC,GAASb,CAAQ,CAAC;AAG1D,EAAAqB,EAAU,MAAMb,EAAe,CAAC,GAAG,CAACN,GAAUG,GAAQN,CAAK,CAAC;AAG5D,QAAMuB,IAASC,EAAO,EAAE,MAAAJ,GAAM,aAAAZ,GAAa,QAAAU,GAAQ;AACnD,EAAAK,EAAO,UAAU,EAAE,MAAAH,GAAM,aAAAZ,GAAa,QAAAU,EAAA,GAEtCI,EAAU,MAAM;AACf,QAAKpB;AAGL,aAAAA,EAAmB,CAACuB,MAAU;AAC7B,cAAM,EAAE,MAAM,GAAG,aAAab,GAAG,QAAQc,MAAMH,EAAO;AACtD,gBAAQE,EAAM,KAAA;AAAA,UACb,KAAK;AACJ,mBAAI,EAAE,UAAQhB,EAAe,CAACkB,OAAOA,IAAI,KAAK,EAAE,MAAM,GAC/C;AAAA,UACR,KAAK;AACJ,mBAAI,EAAE,UAAQlB,EAAe,CAACkB,OAAOA,IAAI,EAAE,SAAS,KAAK,EAAE,MAAM,GAC1D;AAAA,UACR,KAAK;AAAA,UACL,KAAK;AACJ,qBAAEf,CAAC,GAAG,WAAA,GACC;AAAA,UACR,KAAK;AACJ,mBAAIc,KACHA,EAAE,OAAA,GACK,MAED;AAAA,UACR;AACC,mBAAO;AAAA,QAAA;AAAA,MAEV,CAAC,GACM,MAAMxB,EAAmB,IAAI;AAAA,EACrC,GAAG,CAACA,CAAkB,CAAC;AAEvB,QAAM0B,IAAWzB,IAEdiB,EAAK,UAAU,CAACA,EAAK,CAAC,EAAE,WACxB,UACA,YAHA;AAKH,SACC,gBAAAS,EAACC,GAAA,EAAW,WAAW,0CAA0CF,CAAO,IACtE,UAAA;AAAA,IAAAV,KACA,gBAAAW;AAAA,MAACE;AAAA,MAAA;AAAA,QACA,MAAK;AAAA,QACL,SAASb,EAAO;AAAA,QAChB,OAAO,EAAE,YAAYc,EAAO,QAAQ,QAAA;AAAA,QAEpC,UAAA;AAAA,UAAA,gBAAAC,EAACC,GAAA,EAAY,OAAO,IAAI,QAAQ,IAAI;AAAA,4BACnCC,GAAA,EAAW,UAAA;AAAA,YAAA;AAAA,YAAEjB,EAAO;AAAA,UAAA,EAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAG5BE,EAAK,WAAW,IAChB,gBAAAa,EAACG,KACC,UAAAjC,MAAa,aACX,4BACA,qBAAA,CACJ,IAEAiB,EAAK,IAAI,CAACiB,GAAKzB,MACd,gBAAAiB;AAAA,MAACS;AAAA,MAAA;AAAA,QAEA,MAAK;AAAA,QACL,SAAS1B,MAAMJ;AAAA,QACf,cAAc,MAAMC,EAAeG,CAAC;AAAA,QACpC,SAASyB,EAAI;AAAA,QAEb,UAAA;AAAA,UAAA,gBAAAJ,EAACM,KAAc,OAAOP,EAAO,QAAQ,SACnC,YAAI,OACN;AAAA,UACCK,EAAI,YAAY,gBAAAJ,EAACO,KAAa,OAAO,IAAI,QAAQ,GAAA,CAAI;AAAA,QAAA;AAAA,MAAA;AAAA,MATjDH,EAAI;AAAA,IAAA,CAWV;AAAA,EAAA,GAEH;AAEF,GAEMP,IAAaW,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMXT,EAAO,QAAQ,QAAQ;AAAA,qBACjBA,EAAO,OAAO,OAAO;AAAA;AAAA;AAAA,GAKpCM,IAAYG,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BASGT,EAAO,OAAO,OAAO;AAAA,eAClC,CAACL,MAAOA,EAAE,UAAUK,EAAO,QAAQ,UAAU,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA,gBAK1DA,EAAO,QAAQ,OAAO;AAAA;AAAA,GAIhCD,IAAaU,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKET,EAAO,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAU3CI,IAAcK,EAAO;AAAA;AAAA;AAAA;AAAA,UAIjBT,EAAO,QAAQ,SAAS;AAAA;"}
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 type { MentionDropdownRenderProps, MentionItem } from '@src/editor';\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\tMentionKindMeta,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\n\ntype Category = 'tool' | 'subagent';\n\nconst CATEGORIES: { key: Category; label: string }[] = [\n\t{ key: 'tool', label: 'Tools' },\n\t{ key: 'subagent', label: 'Sub-agent' },\n];\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\tonActivate: () => void;\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<MentionDropdownRenderProps> = ({\n\titems,\n\tonSelect,\n\tregisterKeyHandler,\n}) => {\n\tconst [category, setCategory] = useState<Category | null>(null);\n\tconst [source, setSource] = useState<string | null>(null);\n\tconst [activeIndex, setActiveIndex] = useState(0);\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\n\t// Only show categories that actually have items. When just one is available\n\t// (e.g. the sub-agent drawer offers tools only), skip the category selector.\n\tconst availableCategories = useMemo(\n\t\t() =>\n\t\t\tCATEGORIES.filter((c) =>\n\t\t\t\tc.key === 'tool' ? tools.length > 0 : subAgents.length > 0,\n\t\t\t),\n\t\t[tools.length, subAgents.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, and whether we can go back a level.\n\t// With a sole category there is no root to go back to (no category header).\n\tconst header: { title: string; onBack: () => void } | null = !activeCategory\n\t\t? null\n\t\t: activeCategory === 'subagent'\n\t\t? soleCategory\n\t\t\t? null\n\t\t\t: { title: 'Sub-agent', onBack: () => setCategory(null) }\n\t\t: source\n\t\t? { title: toolSourceLabel(source), onBack: () => setSource(null) }\n\t\t: soleCategory\n\t\t? null\n\t\t: { title: 'Tools', onBack: () => setCategory(null) };\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\treturn subAgents.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}\n\t\tif (!source) {\n\t\t\treturn sources.map((s) => ({\n\t\t\t\tid: s,\n\t\t\t\tlabel: toolSourceLabel(s),\n\t\t\t\tdrillsIn: true,\n\t\t\t\tonActivate: () => setSource(s),\n\t\t\t}));\n\t\t}\n\t\treturn tools\n\t\t\t.filter((t) => (metaOf(t)?.source ?? 'other') === source)\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}, [\n\t\tactiveCategory,\n\t\tavailableCategories,\n\t\tsource,\n\t\ttools,\n\t\tsubAgents,\n\t\tsources,\n\t\tonSelect,\n\t]);\n\n\t// Reset highlight whenever the view (or filtered result set) changes.\n\tuseEffect(() => setActiveIndex(0), [activeCategory, source, items]);\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) {\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\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\tstyle={{ background: COLORS.surface.subdued }}\n\t\t\t\t>\n\t\t\t\t\t<ChevronLeft width={12} height={12} />\n\t\t\t\t\t<TitleSmall> {header.title}</TitleSmall>\n\t\t\t\t</PickerBack>\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<BodySecondary color={COLORS.content.primary}>\n\t\t\t\t\t\t\t{row.label}\n\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t{row.drillsIn && <ChevronRight width={12} height={12} />}\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: 280px;\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\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\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":["CATEGORIES","metaOf","item","rowLabel","MentionPicker","items","onSelect","registerKeyHandler","category","setCategory","useState","source","setSource","activeIndex","setActiveIndex","tools","useMemo","i","subAgents","sources","acc","t","s","availableCategories","c","soleCategory","activeCategory","header","toolSourceLabel","rows","useEffect","navRef","useRef","event","r","h","p","variant","jsxs","PickerCard","PickerBack","COLORS","jsx","ChevronLeft","TitleSmall","PickerEmpty","row","PickerRow","BodySecondary","ChevronRight","styled"],"mappings":"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"}
@@ -8,12 +8,29 @@ interface SelectableListSectionProps {
8
8
  title: string;
9
9
  helper?: string;
10
10
  items: SelectableItem[];
11
- /** Options not yet selected, available to add. */
11
+ /**
12
+ * Options shown in the add dropdown. Pass ALL items (not just unselected
13
+ * ones) when re-picking an already-added item is allowed (e.g. to insert its
14
+ * mention again) — the chip list still shows each item only once.
15
+ */
12
16
  addableOptions: SingleOption[];
13
17
  onAdd: (id: string) => void;
14
18
  onRemove: (id: string) => void;
15
19
  dataTestPrefix: string;
16
20
  emptyText: string;
21
+ /**
22
+ * Adds a "create new" entry at the top of the add dropdown (e.g. "Create
23
+ * sub-agent"). Selecting it calls `onSelect` instead of `onAdd`.
24
+ */
25
+ createOption?: {
26
+ label: string;
27
+ onSelect: () => void;
28
+ };
29
+ /**
30
+ * When provided, each row's kebab menu gains a "Configure" action (above
31
+ * "Delete"). Omit for tools (Delete only).
32
+ */
33
+ onConfigure?: (id: string) => void;
17
34
  }
18
35
  export declare const SelectableListSection: React.FC<SelectableListSectionProps>;
19
36
  export {};
@@ -1,79 +1,124 @@
1
- import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
- import f from "../../../assets/icons/cross.svg.js";
3
- import w from "../../../assets/icons/plus.svg.js";
4
- import { useState as y } from "react";
5
- import { TitleSmall as u, BodyCaption as m, BodySecondary as b } from "../../TypographyStyle.js";
6
- import { COLORS as r } from "../../../constants/Theme.js";
7
- import { SideSection as $, SideSectionHeader as v, AddIconButton as C, SelectableRow as R, RowText as A, RowRemoveButton as B } from "../AgentBuilder.styled.js";
8
- import { Dropdown as L } from "../../dropdown/Dropdown.js";
9
- const E = ({
10
- title: n,
11
- helper: i,
12
- items: d,
13
- addableOptions: t,
14
- onAdd: S,
15
- onRemove: p,
16
- dataTestPrefix: l,
17
- emptyText: g
1
+ import { jsx as o, jsxs as r } from "react/jsx-runtime";
2
+ import A from "../../../assets/icons/delete.svg.js";
3
+ import v from "../../../assets/icons/edit.svg.js";
4
+ import _ from "../../../assets/icons/plus.svg.js";
5
+ import { useState as R } from "react";
6
+ import { TitleSmall as C, BodyCaption as b, BodySecondary as B } from "../../TypographyStyle.js";
7
+ import { COLORS as l } from "../../../constants/Theme.js";
8
+ import { SideSection as E, SideSectionHeader as L, AddIconButton as k, SelectableRow as D, RowText as I, RowActions as j, RowMenuButton as g, RowActionDivider as z } from "../AgentBuilder.styled.js";
9
+ import { Dropdown as H } from "../../dropdown/Dropdown.js";
10
+ const y = "__bik_create_new__", J = ({
11
+ title: d,
12
+ helper: s,
13
+ items: h,
14
+ addableOptions: c,
15
+ onAdd: p,
16
+ onRemove: u,
17
+ dataTestPrefix: t,
18
+ emptyText: $,
19
+ createOption: n,
20
+ onConfigure: i
18
21
  }) => {
19
- const [a, s] = y(!1);
20
- return /* @__PURE__ */ c($, { children: [
21
- /* @__PURE__ */ c(v, { children: [
22
- /* @__PURE__ */ e(u, { color: r.content.primary, children: n }),
23
- t.length > 0 && /* @__PURE__ */ e(
24
- C,
22
+ const [S, m] = R(!1), f = c.length > 0 || !!n, w = n ? [
23
+ ...c,
24
+ {
25
+ label: n.label,
26
+ value: y,
27
+ searchKey: n.label,
28
+ customComponent: /* @__PURE__ */ o(
29
+ "div",
25
30
  {
26
- "data-test": `${l}-add`,
27
- onClick: () => s((o) => !o),
28
- "aria-label": `Add ${n}`,
29
- children: /* @__PURE__ */ e(w, { width: 20, height: 20, color: r.content.brand })
31
+ style: {
32
+ width: "100%",
33
+ textAlign: "center",
34
+ color: l.content.brand,
35
+ fontFamily: "Inter",
36
+ fontSize: 14,
37
+ fontWeight: 600
38
+ },
39
+ children: n.label
40
+ }
41
+ )
42
+ }
43
+ ] : c;
44
+ return /* @__PURE__ */ r(E, { children: [
45
+ /* @__PURE__ */ r(L, { children: [
46
+ /* @__PURE__ */ o(C, { color: l.content.primary, children: d }),
47
+ f && /* @__PURE__ */ o(
48
+ k,
49
+ {
50
+ "data-test": `${t}-add`,
51
+ onClick: () => m((e) => !e),
52
+ "aria-label": `Add ${d}`,
53
+ children: /* @__PURE__ */ o(_, { width: 20, height: 20, color: l.content.brand })
30
54
  }
31
55
  )
32
56
  ] }),
33
- i && /* @__PURE__ */ e(m, { color: r.content.secondary, children: i }),
34
- a && t.length > 0 && /* @__PURE__ */ e(
35
- L,
57
+ s && /* @__PURE__ */ o(b, { color: l.content.secondary, children: s }),
58
+ S && w.length > 0 && /* @__PURE__ */ o(
59
+ H,
36
60
  {
37
- "data-test": `${l}-dropdown`,
61
+ "data-test": `${t}-dropdown`,
38
62
  size: "small",
39
63
  width: "100%",
40
64
  isSearchable: !0,
41
- placeHolder: `Select ${n.toLowerCase()}`,
42
- options: t,
43
- onSelect: (o) => {
44
- const h = (Array.isArray(o) ? o[0] : o)?.value;
45
- h && S(h), s(!1);
65
+ placeHolder: `Select ${d.toLowerCase()}`,
66
+ options: w,
67
+ onSelect: (e) => {
68
+ const a = (Array.isArray(e) ? e[0] : e)?.value;
69
+ m(!1), a && (a === y ? n?.onSelect() : p(a));
46
70
  }
47
71
  }
48
72
  ),
49
- d.length === 0 && !a ? /* @__PURE__ */ e(m, { color: r.content.placeholder, children: g }) : d.map((o) => /* @__PURE__ */ c(
50
- R,
73
+ h.length === 0 && !S ? /* @__PURE__ */ o(b, { color: l.content.placeholder, children: $ }) : h.map((e) => /* @__PURE__ */ r(
74
+ D,
51
75
  {
52
- "data-test": `${l}-row-${o.id}`,
76
+ "data-test": `${t}-row-${e.id}`,
53
77
  children: [
54
- /* @__PURE__ */ e(A, { children: /* @__PURE__ */ e(b, { numberOfLines: 1, color: r.content.primary, children: o.label }) }),
55
- /* @__PURE__ */ e(
56
- B,
57
- {
58
- onClick: () => p(o.id),
59
- "aria-label": `Remove ${o.label}`,
60
- children: /* @__PURE__ */ e(
61
- f,
62
- {
63
- width: 16,
64
- height: 16,
65
- color: r.content.secondary
66
- }
67
- )
68
- }
69
- )
78
+ /* @__PURE__ */ o(I, { children: /* @__PURE__ */ o(B, { numberOfLines: 1, color: l.content.primary, children: e.label }) }),
79
+ /* @__PURE__ */ r(j, { children: [
80
+ i && // Configurable rows (sub-agents) get an always-visible edit icon.
81
+ /* @__PURE__ */ o(
82
+ g,
83
+ {
84
+ "data-test": `${t}-edit-${e.id}`,
85
+ "aria-label": `Edit ${e.label}`,
86
+ onClick: () => i(e.id),
87
+ children: /* @__PURE__ */ o(
88
+ v,
89
+ {
90
+ width: 16,
91
+ height: 16,
92
+ color: l.content.secondary
93
+ }
94
+ )
95
+ }
96
+ ),
97
+ i && /* @__PURE__ */ o(z, { "aria-hidden": !0 }),
98
+ /* @__PURE__ */ o(
99
+ g,
100
+ {
101
+ "data-test": `${t}-delete-${e.id}`,
102
+ "aria-label": `Delete ${e.label}`,
103
+ onClick: () => u(e.id),
104
+ children: /* @__PURE__ */ o(
105
+ A,
106
+ {
107
+ width: 16,
108
+ height: 16,
109
+ color: l.content.secondary
110
+ }
111
+ )
112
+ }
113
+ )
114
+ ] })
70
115
  ]
71
116
  },
72
- o.id
117
+ e.id
73
118
  ))
74
119
  ] });
75
120
  };
76
121
  export {
77
- E as SelectableListSection
122
+ J as SelectableListSection
78
123
  };
79
124
  //# sourceMappingURL=SelectableListSection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectableListSection.js","sources":["../../../../../src/components/agent-builder/components/SelectableListSection.tsx"],"sourcesContent":["import CrossIcon from '@src/assets/icons/cross.svg';\nimport PlusIcon from '@src/assets/icons/plus.svg';\nimport React, { useState } from 'react';\nimport { Dropdown } from '@src/components/dropdown';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport {\n\tBodyCaption,\n\tBodySecondary,\n\tTitleSmall,\n} from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tAddIconButton,\n\tRowRemoveButton,\n\tRowText,\n\tSelectableRow,\n\tSideSection,\n\tSideSectionHeader,\n} from '../AgentBuilder.styled';\n\nexport interface SelectableItem {\n\tid: string;\n\tlabel: string;\n}\n\ninterface SelectableListSectionProps {\n\ttitle: string;\n\thelper?: string;\n\titems: SelectableItem[];\n\t/** Options not yet selected, available to add. */\n\taddableOptions: SingleOption[];\n\tonAdd: (id: string) => void;\n\tonRemove: (id: string) => void;\n\tdataTestPrefix: string;\n\temptyText: string;\n}\n\nexport const SelectableListSection: React.FC<SelectableListSectionProps> = ({\n\ttitle,\n\thelper,\n\titems,\n\taddableOptions,\n\tonAdd,\n\tonRemove,\n\tdataTestPrefix,\n\temptyText,\n}) => {\n\tconst [adding, setAdding] = useState(false);\n\n\treturn (\n\t\t<SideSection>\n\t\t\t<SideSectionHeader>\n\t\t\t\t<TitleSmall color={COLORS.content.primary}>{title}</TitleSmall>\n\t\t\t\t{addableOptions.length > 0 && (\n\t\t\t\t\t<AddIconButton\n\t\t\t\t\t\tdata-test={`${dataTestPrefix}-add`}\n\t\t\t\t\t\tonClick={() => setAdding((v) => !v)}\n\t\t\t\t\t\taria-label={`Add ${title}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon width={20} height={20} color={COLORS.content.brand} />\n\t\t\t\t\t</AddIconButton>\n\t\t\t\t)}\n\t\t\t</SideSectionHeader>\n\n\t\t\t{helper && (\n\t\t\t\t<BodyCaption color={COLORS.content.secondary}>{helper}</BodyCaption>\n\t\t\t)}\n\n\t\t\t{adding && addableOptions.length > 0 && (\n\t\t\t\t<Dropdown\n\t\t\t\t\tdata-test={`${dataTestPrefix}-dropdown`}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\tisSearchable\n\t\t\t\t\tplaceHolder={`Select ${title.toLowerCase()}`}\n\t\t\t\t\toptions={addableOptions}\n\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\tconst single = Array.isArray(opt) ? opt[0] : opt;\n\t\t\t\t\t\tconst v = (single as SingleOption)?.value;\n\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\tonAdd(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{items.length === 0 && !adding ? (\n\t\t\t\t<BodyCaption color={COLORS.content.placeholder}>\n\t\t\t\t\t{emptyText}\n\t\t\t\t</BodyCaption>\n\t\t\t) : (\n\t\t\t\titems.map((item) => (\n\t\t\t\t\t<SelectableRow\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tdata-test={`${dataTestPrefix}-row-${item.id}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RowText>\n\t\t\t\t\t\t\t<BodySecondary numberOfLines={1} color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t</RowText>\n\t\t\t\t\t\t<RowRemoveButton\n\t\t\t\t\t\t\tonClick={() => onRemove(item.id)}\n\t\t\t\t\t\t\taria-label={`Remove ${item.label}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CrossIcon\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</RowRemoveButton>\n\t\t\t\t\t</SelectableRow>\n\t\t\t\t))\n\t\t\t)}\n\t\t</SideSection>\n\t);\n};\n"],"names":["SelectableListSection","title","helper","items","addableOptions","onAdd","onRemove","dataTestPrefix","emptyText","adding","setAdding","useState","SideSection","jsxs","SideSectionHeader","jsx","TitleSmall","COLORS","AddIconButton","v","PlusIcon","BodyCaption","Dropdown","opt","item","SelectableRow","RowText","BodySecondary","RowRemoveButton","CrossIcon"],"mappings":";;;;;;;;AAqCO,MAAMA,IAA8D,CAAC;AAAA,EAC3E,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AACD,MAAM;AACL,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK;AAE1C,2BACEC,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAC,EAACC,GAAA,EAAW,OAAOC,EAAO,QAAQ,SAAU,UAAAhB,GAAM;AAAA,MACjDG,EAAe,SAAS,KACxB,gBAAAW;AAAA,QAACG;AAAA,QAAA;AAAA,UACA,aAAW,GAAGX,CAAc;AAAA,UAC5B,SAAS,MAAMG,EAAU,CAACS,MAAM,CAACA,CAAC;AAAA,UAClC,cAAY,OAAOlB,CAAK;AAAA,UAExB,UAAA,gBAAAc,EAACK,KAAS,OAAO,IAAI,QAAQ,IAAI,OAAOH,EAAO,QAAQ,MAAA,CAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAC/D,GAEF;AAAA,IAECf,KACA,gBAAAa,EAACM,GAAA,EAAY,OAAOJ,EAAO,QAAQ,WAAY,UAAAf,GAAO;AAAA,IAGtDO,KAAUL,EAAe,SAAS,KAClC,gBAAAW;AAAA,MAACO;AAAA,MAAA;AAAA,QACA,aAAW,GAAGf,CAAc;AAAA,QAC5B,MAAK;AAAA,QACL,OAAM;AAAA,QACN,cAAY;AAAA,QACZ,aAAa,UAAUN,EAAM,YAAA,CAAa;AAAA,QAC1C,SAASG;AAAA,QACT,UAAU,CAACmB,MAAQ;AAElB,gBAAMJ,KADS,MAAM,QAAQI,CAAG,IAAIA,EAAI,CAAC,IAAIA,IACT;AACpC,UAAIJ,KACHd,EAAMc,CAAC,GAERT,EAAU,EAAK;AAAA,QAChB;AAAA,MAAA;AAAA,IAAA;AAAA,IAIDP,EAAM,WAAW,KAAK,CAACM,sBACtBY,GAAA,EAAY,OAAOJ,EAAO,QAAQ,aACjC,UAAAT,EAAA,CACF,IAEAL,EAAM,IAAI,CAACqB,MACV,gBAAAX;AAAA,MAACY;AAAA,MAAA;AAAA,QAEA,aAAW,GAAGlB,CAAc,QAAQiB,EAAK,EAAE;AAAA,QAE3C,UAAA;AAAA,UAAA,gBAAAT,EAACW,GAAA,EACA,UAAA,gBAAAX,EAACY,GAAA,EAAc,eAAe,GAAG,OAAOV,EAAO,QAAQ,SACrD,UAAAO,EAAK,MAAA,CACP,GACD;AAAA,UACA,gBAAAT;AAAA,YAACa;AAAA,YAAA;AAAA,cACA,SAAS,MAAMtB,EAASkB,EAAK,EAAE;AAAA,cAC/B,cAAY,UAAUA,EAAK,KAAK;AAAA,cAEhC,UAAA,gBAAAT;AAAA,gBAACc;AAAAA,gBAAA;AAAA,kBACA,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,OAAOZ,EAAO,QAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YACvB;AAAA,UAAA;AAAA,QACD;AAAA,MAAA;AAAA,MAjBKO,EAAK;AAAA,IAAA,CAmBX;AAAA,EAAA,GAEH;AAEF;"}
1
+ {"version":3,"file":"SelectableListSection.js","sources":["../../../../../src/components/agent-builder/components/SelectableListSection.tsx"],"sourcesContent":["import DeleteIcon from '@src/assets/icons/delete.svg';\nimport EditIcon from '@src/assets/icons/edit.svg';\nimport PlusIcon from '@src/assets/icons/plus.svg';\nimport React, { useState } from 'react';\nimport { Dropdown } from '@src/components/dropdown';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport {\n\tBodyCaption,\n\tBodySecondary,\n\tTitleSmall,\n} from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tAddIconButton,\n\tRowActionDivider,\n\tRowActions,\n\tRowMenuButton,\n\tRowText,\n\tSelectableRow,\n\tSideSection,\n\tSideSectionHeader,\n} from '../AgentBuilder.styled';\n\nexport interface SelectableItem {\n\tid: string;\n\tlabel: string;\n}\n\n/** Sentinel value for the \"create new\" entry in the add dropdown. */\nconst CREATE_OPTION_VALUE = '__bik_create_new__';\n\ninterface SelectableListSectionProps {\n\ttitle: string;\n\thelper?: string;\n\titems: SelectableItem[];\n\t/**\n\t * Options shown in the add dropdown. Pass ALL items (not just unselected\n\t * ones) when re-picking an already-added item is allowed (e.g. to insert its\n\t * mention again) — the chip list still shows each item only once.\n\t */\n\taddableOptions: SingleOption[];\n\tonAdd: (id: string) => void;\n\tonRemove: (id: string) => void;\n\tdataTestPrefix: string;\n\temptyText: string;\n\t/**\n\t * Adds a \"create new\" entry at the top of the add dropdown (e.g. \"Create\n\t * sub-agent\"). Selecting it calls `onSelect` instead of `onAdd`.\n\t */\n\tcreateOption?: { label: string; onSelect: () => void };\n\t/**\n\t * When provided, each row's kebab menu gains a \"Configure\" action (above\n\t * \"Delete\"). Omit for tools (Delete only).\n\t */\n\tonConfigure?: (id: string) => void;\n}\n\nexport const SelectableListSection: React.FC<SelectableListSectionProps> = ({\n\ttitle,\n\thelper,\n\titems,\n\taddableOptions,\n\tonAdd,\n\tonRemove,\n\tdataTestPrefix,\n\temptyText,\n\tcreateOption,\n\tonConfigure,\n}) => {\n\tconst [adding, setAdding] = useState(false);\n\tconst showAddButton = addableOptions.length > 0 || !!createOption;\n\t// \"Create new\" is a brand-coloured footer row at the BOTTOM of the dropdown,\n\t// separated from the selectable items by a divider.\n\tconst dropdownOptions: SingleOption[] = createOption\n\t\t? [\n\t\t\t\t...addableOptions,\n\t\t\t\t{\n\t\t\t\t\tlabel: createOption.label,\n\t\t\t\t\tvalue: CREATE_OPTION_VALUE,\n\t\t\t\t\tsearchKey: createOption.label,\n\t\t\t\t\tcustomComponent: (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t\t\t\t\tcolor: COLORS.content.brand,\n\t\t\t\t\t\t\t\tfontFamily: 'Inter',\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{createOption.label}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t ]\n\t\t: addableOptions;\n\n\treturn (\n\t\t<SideSection>\n\t\t\t<SideSectionHeader>\n\t\t\t\t<TitleSmall color={COLORS.content.primary}>{title}</TitleSmall>\n\t\t\t\t{showAddButton && (\n\t\t\t\t\t<AddIconButton\n\t\t\t\t\t\tdata-test={`${dataTestPrefix}-add`}\n\t\t\t\t\t\tonClick={() => setAdding((v) => !v)}\n\t\t\t\t\t\taria-label={`Add ${title}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon width={20} height={20} color={COLORS.content.brand} />\n\t\t\t\t\t</AddIconButton>\n\t\t\t\t)}\n\t\t\t</SideSectionHeader>\n\n\t\t\t{helper && (\n\t\t\t\t<BodyCaption color={COLORS.content.secondary}>{helper}</BodyCaption>\n\t\t\t)}\n\n\t\t\t{adding && dropdownOptions.length > 0 && (\n\t\t\t\t<Dropdown\n\t\t\t\t\tdata-test={`${dataTestPrefix}-dropdown`}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\tisSearchable\n\t\t\t\t\tplaceHolder={`Select ${title.toLowerCase()}`}\n\t\t\t\t\toptions={dropdownOptions}\n\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\tconst single = Array.isArray(opt) ? opt[0] : opt;\n\t\t\t\t\t\tconst v = (single as SingleOption)?.value;\n\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t\tif (!v) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (v === CREATE_OPTION_VALUE) {\n\t\t\t\t\t\t\tcreateOption?.onSelect();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonAdd(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{items.length === 0 && !adding ? (\n\t\t\t\t<BodyCaption color={COLORS.content.placeholder}>\n\t\t\t\t\t{emptyText}\n\t\t\t\t</BodyCaption>\n\t\t\t) : (\n\t\t\t\titems.map((item) => (\n\t\t\t\t\t<SelectableRow\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tdata-test={`${dataTestPrefix}-row-${item.id}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RowText>\n\t\t\t\t\t\t\t<BodySecondary numberOfLines={1} color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t</RowText>\n\t\t\t\t\t\t<RowActions>\n\t\t\t\t\t\t\t{onConfigure && (\n\t\t\t\t\t\t\t\t// Configurable rows (sub-agents) get an always-visible edit icon.\n\t\t\t\t\t\t\t\t<RowMenuButton\n\t\t\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-edit-${item.id}`}\n\t\t\t\t\t\t\t\t\taria-label={`Edit ${item.label}`}\n\t\t\t\t\t\t\t\t\tonClick={() => onConfigure(item.id)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<EditIcon\n\t\t\t\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</RowMenuButton>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{onConfigure && <RowActionDivider aria-hidden />}\n\t\t\t\t\t\t\t<RowMenuButton\n\t\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-delete-${item.id}`}\n\t\t\t\t\t\t\t\taria-label={`Delete ${item.label}`}\n\t\t\t\t\t\t\t\tonClick={() => onRemove(item.id)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DeleteIcon\n\t\t\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</RowMenuButton>\n\t\t\t\t\t\t</RowActions>\n\t\t\t\t\t</SelectableRow>\n\t\t\t\t))\n\t\t\t)}\n\t\t</SideSection>\n\t);\n};\n"],"names":["CREATE_OPTION_VALUE","SelectableListSection","title","helper","items","addableOptions","onAdd","onRemove","dataTestPrefix","emptyText","createOption","onConfigure","adding","setAdding","useState","showAddButton","dropdownOptions","jsx","COLORS","SideSection","jsxs","SideSectionHeader","TitleSmall","AddIconButton","v","PlusIcon","BodyCaption","Dropdown","opt","item","SelectableRow","RowText","BodySecondary","RowActions","RowMenuButton","EditIcon","RowActionDivider","DeleteIcon"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { default as React } from 'react';
2
+ /**
3
+ * Top-right toast shown after a tool / sub-agent is removed, offering an Undo.
4
+ * Re-keyed per removal so each one restarts the auto-close timer. Uses the
5
+ * shared `Toaster` (which mounts its own ToastContainer).
6
+ */
7
+ export declare const UndoToast: React.FC;
@@ -0,0 +1,27 @@
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import { useAgentBuilderContext as r } from "../context/AgentBuilderContext.js";
3
+ import { Toaster as s } from "../../toaster/Toaster.js";
4
+ const m = () => {
5
+ const { undoToast: o, undoRemoval: t, dismissUndo: e } = r();
6
+ return o ? /* @__PURE__ */ n(
7
+ s,
8
+ {
9
+ text: o.message,
10
+ type: "info",
11
+ position: "top-right",
12
+ autoClose: 5e3,
13
+ hideCloseButton: !0,
14
+ buttonProps: {
15
+ buttonText: "Undo",
16
+ showButton: !0,
17
+ onButtonClick: () => (t(), {})
18
+ },
19
+ onCloseToast: () => e()
20
+ },
21
+ o.id
22
+ ) : null;
23
+ };
24
+ export {
25
+ m as UndoToast
26
+ };
27
+ //# sourceMappingURL=UndoToast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UndoToast.js","sources":["../../../../../src/components/agent-builder/components/UndoToast.tsx"],"sourcesContent":["import React from 'react';\nimport { Toaster } from '@src/components/toaster';\nimport { useAgentBuilderContext } from '../context/AgentBuilderContext';\n\n/**\n * Top-right toast shown after a tool / sub-agent is removed, offering an Undo.\n * Re-keyed per removal so each one restarts the auto-close timer. Uses the\n * shared `Toaster` (which mounts its own ToastContainer).\n */\nexport const UndoToast: React.FC = () => {\n\tconst { undoToast, undoRemoval, dismissUndo } = useAgentBuilderContext();\n\n\tif (!undoToast) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Toaster\n\t\t\tkey={undoToast.id}\n\t\t\ttext={undoToast.message}\n\t\t\ttype=\"info\"\n\t\t\tposition=\"top-right\"\n\t\t\tautoClose={5000}\n\t\t\thideCloseButton\n\t\t\tbuttonProps={{\n\t\t\t\tbuttonText: 'Undo',\n\t\t\t\tshowButton: true,\n\t\t\t\tonButtonClick: () => {\n\t\t\t\t\tundoRemoval();\n\t\t\t\t\treturn {} as Record<string, never>;\n\t\t\t\t},\n\t\t\t}}\n\t\t\tonCloseToast={() => dismissUndo()}\n\t\t/>\n\t);\n};\n"],"names":["UndoToast","undoToast","undoRemoval","dismissUndo","useAgentBuilderContext","jsx","Toaster"],"mappings":";;;AASO,MAAMA,IAAsB,MAAM;AACxC,QAAM,EAAE,WAAAC,GAAW,aAAAC,GAAa,aAAAC,EAAA,IAAgBC,EAAA;AAEhD,SAAKH,IAKJ,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MAEA,MAAML,EAAU;AAAA,MAChB,MAAK;AAAA,MACL,UAAS;AAAA,MACT,WAAW;AAAA,MACX,iBAAe;AAAA,MACf,aAAa;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,eAAe,OACdC,EAAA,GACO,CAAA;AAAA,MACR;AAAA,MAED,cAAc,MAAMC,EAAA;AAAA,IAAY;AAAA,IAd3BF,EAAU;AAAA,EAAA,IALT;AAsBT;"}