@bikdotai/bik-component-library 0.0.823-beta.2 → 0.0.823

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 (75) 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 +97 -66
  4. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js +1 -1
  6. package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
  7. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +1 -1
  8. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  9. package/dist/cjs/components/agent-builder/components/MentionField.js +1 -1
  10. package/dist/cjs/components/agent-builder/components/MentionField.js.map +1 -1
  11. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +4 -4
  12. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/StepRail.js +1 -1
  14. package/dist/cjs/components/agent-builder/components/StepRail.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  16. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/steps/Step1About.js +1 -1
  18. package/dist/cjs/components/agent-builder/steps/Step1About.js.map +1 -1
  19. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js +1 -1
  20. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  21. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  22. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  23. package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js +1 -1
  24. package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
  25. package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
  26. package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
  27. package/dist/cjs/components/agent-listing/AgentListing.styled.js +32 -28
  28. package/dist/cjs/components/agent-listing/AgentListing.styled.js.map +1 -1
  29. package/dist/cjs/components/agent-listing/AgentListingHeader.js +1 -1
  30. package/dist/cjs/components/agent-listing/AgentListingHeader.js.map +1 -1
  31. package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
  32. package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
  33. package/dist/cjs/components/template-preview/models/TemplateMeta.js +1 -1
  34. package/dist/cjs/components/template-preview/models/TemplateMeta.js.map +1 -1
  35. package/dist/esm/components/agent-builder/AgentBuilder.js +82 -83
  36. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  37. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +13 -5
  38. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +141 -102
  39. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  40. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.d.ts +0 -1
  41. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js +33 -46
  42. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
  43. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +135 -119
  44. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  45. package/dist/esm/components/agent-builder/components/MentionField.js +44 -45
  46. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -1
  47. package/dist/esm/components/agent-builder/components/SelectableListSection.js +91 -94
  48. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  49. package/dist/esm/components/agent-builder/components/StepRail.js +28 -20
  50. package/dist/esm/components/agent-builder/components/StepRail.js.map +1 -1
  51. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +7 -0
  52. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +108 -98
  53. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  54. package/dist/esm/components/agent-builder/steps/Step1About.js +38 -35
  55. package/dist/esm/components/agent-builder/steps/Step1About.js.map +1 -1
  56. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js +118 -122
  57. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  58. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +112 -110
  59. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  60. package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js +72 -70
  61. package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
  62. package/dist/esm/components/agent-listing/AgentListing.js +45 -43
  63. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  64. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +7 -0
  65. package/dist/esm/components/agent-listing/AgentListing.styled.js +28 -24
  66. package/dist/esm/components/agent-listing/AgentListing.styled.js.map +1 -1
  67. package/dist/esm/components/agent-listing/AgentListingHeader.d.ts +2 -0
  68. package/dist/esm/components/agent-listing/AgentListingHeader.js +14 -12
  69. package/dist/esm/components/agent-listing/AgentListingHeader.js.map +1 -1
  70. package/dist/esm/components/agent-listing/AgentTableRow.js +102 -57
  71. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  72. package/dist/esm/components/template-preview/models/TemplateMeta.d.ts +1 -2
  73. package/dist/esm/components/template-preview/models/TemplateMeta.js +11 -11
  74. package/dist/esm/components/template-preview/models/TemplateMeta.js.map +1 -1
  75. package/package.json +1 -1
@@ -1,60 +1,59 @@
1
- import { jsx as d } from "react/jsx-runtime";
2
- import { useMemo as x, useCallback as l } from "react";
3
- import { useAgentBuilderContext as I } from "../context/AgentBuilderContext.js";
4
- import { buildAgentMentionItems as T, appTypeLabel as $ } from "../utils/mentionSerialization.js";
5
- import { MentionEditor as h } from "./MentionEditor.js";
1
+ import { jsx as I } from "react/jsx-runtime";
2
+ import { useMemo as T, useCallback as m } from "react";
3
+ import { useAgentBuilderContext as $ } from "../context/AgentBuilderContext.js";
4
+ import { buildAgentMentionItems as f, appTypeLabel as h } from "../utils/mentionSerialization.js";
5
+ import { MentionEditor as R } from "./MentionEditor.js";
6
6
  const L = ({
7
7
  fieldKey: e,
8
- label: m,
9
- placeholder: b,
8
+ label: u,
9
+ placeholder: p,
10
10
  maxLength: c,
11
- minHeight: g,
12
- ...p
11
+ minHeight: l,
12
+ ...b
13
13
  }) => {
14
14
  const {
15
- value: t,
16
- patch: n,
17
- availableTools: a,
18
- availableSubAgents: r,
19
- applicationType: i,
15
+ value: n,
16
+ patch: g,
17
+ addReference: r,
18
+ availableTools: o,
19
+ availableSubAgents: a,
20
+ applicationType: s,
20
21
  mentionResetKey: M,
21
- registerMentionField: u,
22
- notifyMentionFocus: A,
23
- onCreateSubAgent: C,
24
- requestCreateSubAgent: v
25
- } = I(), S = x(
26
- () => T(
22
+ registerMentionField: i,
23
+ notifyMentionFocus: d,
24
+ onCreateSubAgent: A,
25
+ requestCreateSubAgent: C
26
+ } = $(), v = T(
27
+ () => f(
28
+ o,
27
29
  a,
28
- r,
29
- $(i)
30
+ h(s)
30
31
  ),
31
- [a, r, i]
32
- ), f = l(
33
- (o) => u(e, o),
34
- [u, e]
35
- ), F = l(
36
- (o, s) => {
37
- o === "tool" ? t.tools.includes(s) || n({ tools: [...t.tools, s] }) : t.subagents.includes(s) || n({ subagents: [...t.subagents, s] });
38
- },
39
- [n, t.tools, t.subagents]
32
+ [o, a, s]
33
+ ), S = m(
34
+ (t) => i(e, t),
35
+ [i, e]
36
+ ), F = m(
37
+ (t, x) => r(t, x),
38
+ [r]
40
39
  );
41
- return /* @__PURE__ */ d(
42
- h,
40
+ return /* @__PURE__ */ I(
41
+ R,
43
42
  {
44
- label: m,
45
- value: t[e] ?? "",
46
- onChange: (o) => n({ [e]: o }),
43
+ label: u,
44
+ value: n[e] ?? "",
45
+ onChange: (t) => g({ [e]: t }),
47
46
  maxLength: c,
48
- placeholder: b,
49
- minHeight: g,
50
- resetKey: `${t.id}:${e}:${M}`,
51
- mentionItems: S,
52
- tools: a,
47
+ placeholder: p,
48
+ minHeight: l,
49
+ resetKey: `${n.id}:${e}:${M}`,
50
+ mentionItems: v,
51
+ tools: o,
53
52
  onMentionSelect: F,
54
- onFocus: () => A(e),
55
- registerInsert: f,
56
- onCreateSubAgent: C ? v : void 0,
57
- "data-test": p["data-test"]
53
+ onFocus: () => d(e),
54
+ registerInsert: S,
55
+ onCreateSubAgent: A ? C : void 0,
56
+ "data-test": b["data-test"]
58
57
  }
59
58
  );
60
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MentionField.js","sources":["../../../../../src/components/agent-builder/components/MentionField.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport { AgentValue } from '../AgentBuilder.model';\nimport {\n\tMentionFieldKey,\n\tuseAgentBuilderContext,\n} from '../context/AgentBuilderContext';\nimport {\n\tappTypeLabel,\n\tbuildAgentMentionItems,\n} from '../utils/mentionSerialization';\nimport { MentionEditor } from './MentionEditor';\n\ninterface MentionFieldProps {\n\t/** Which AgentValue field this editor reads / writes. */\n\tfieldKey: MentionFieldKey;\n\tlabel: string;\n\tplaceholder?: string;\n\tmaxLength: number;\n\tminHeight?: string;\n\t'data-test'?: string;\n}\n\n/**\n * Context-bound {@link MentionEditor} for the builder's Step-3 Instructions /\n * Guardrails. Both `@` tools and sub-agents are offered; the field registers its\n * insert + focus with the context so side-panel adds drop a chip into whichever\n * field was last focused, and remounts on `mentionResetKey`.\n */\nexport const MentionField: React.FC<MentionFieldProps> = ({\n\tfieldKey,\n\tlabel,\n\tplaceholder,\n\tmaxLength,\n\tminHeight,\n\t...rest\n}) => {\n\tconst {\n\t\tvalue,\n\t\tpatch,\n\t\tavailableTools,\n\t\tavailableSubAgents,\n\t\tapplicationType,\n\t\tmentionResetKey,\n\t\tregisterMentionField,\n\t\tnotifyMentionFocus,\n\t\tonCreateSubAgent,\n\t\trequestCreateSubAgent,\n\t} = useAgentBuilderContext();\n\n\tconst mentionItems = useMemo(\n\t\t() =>\n\t\t\tbuildAgentMentionItems(\n\t\t\t\tavailableTools,\n\t\t\t\tavailableSubAgents,\n\t\t\t\tappTypeLabel(applicationType),\n\t\t\t),\n\t\t[availableTools, availableSubAgents, applicationType],\n\t);\n\n\tconst registerInsert = useCallback(\n\t\t(fn: Parameters<typeof registerMentionField>[1]) =>\n\t\t\tregisterMentionField(fieldKey, fn),\n\t\t[registerMentionField, fieldKey],\n\t);\n\n\tconst onMentionSelect = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\tif (kind === 'tool') {\n\t\t\t\tif (!value.tools.includes(id)) {\n\t\t\t\t\tpatch({ tools: [...value.tools, id] });\n\t\t\t\t}\n\t\t\t} else if (!value.subagents.includes(id)) {\n\t\t\t\tpatch({ subagents: [...value.subagents, id] });\n\t\t\t}\n\t\t},\n\t\t[patch, value.tools, value.subagents],\n\t);\n\n\treturn (\n\t\t<MentionEditor\n\t\t\tlabel={label}\n\t\t\tvalue={(value[fieldKey] as string | undefined) ?? ''}\n\t\t\tonChange={(text) => patch({ [fieldKey]: text } as Partial<AgentValue>)}\n\t\t\tmaxLength={maxLength}\n\t\t\tplaceholder={placeholder}\n\t\t\tminHeight={minHeight}\n\t\t\tresetKey={`${value.id}:${fieldKey}:${mentionResetKey}`}\n\t\t\tmentionItems={mentionItems}\n\t\t\ttools={availableTools}\n\t\t\tonMentionSelect={onMentionSelect}\n\t\t\tonFocus={() => notifyMentionFocus(fieldKey)}\n\t\t\tregisterInsert={registerInsert}\n\t\t\tonCreateSubAgent={onCreateSubAgent ? requestCreateSubAgent : undefined}\n\t\t\tdata-test={rest['data-test']}\n\t\t/>\n\t);\n};\n"],"names":["MentionField","fieldKey","label","placeholder","maxLength","minHeight","rest","value","patch","availableTools","availableSubAgents","applicationType","mentionResetKey","registerMentionField","notifyMentionFocus","onCreateSubAgent","requestCreateSubAgent","useAgentBuilderContext","mentionItems","useMemo","buildAgentMentionItems","appTypeLabel","registerInsert","useCallback","fn","onMentionSelect","kind","id","jsx","MentionEditor","text"],"mappings":";;;;;AA4BO,MAAMA,IAA4C,CAAC;AAAA,EACzD,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACJ,MAAM;AACL,QAAM;AAAA,IACL,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,uBAAAC;AAAA,EAAA,IACGC,EAAA,GAEEC,IAAeC;AAAA,IACpB,MACCC;AAAA,MACCX;AAAA,MACAC;AAAA,MACAW,EAAaV,CAAe;AAAA,IAAA;AAAA,IAE9B,CAACF,GAAgBC,GAAoBC,CAAe;AAAA,EAAA,GAG/CW,IAAiBC;AAAA,IACtB,CAACC,MACAX,EAAqBZ,GAAUuB,CAAE;AAAA,IAClC,CAACX,GAAsBZ,CAAQ;AAAA,EAAA,GAG1BwB,IAAkBF;AAAA,IACvB,CAACG,GAA2BC,MAAe;AAC1C,MAAID,MAAS,SACPnB,EAAM,MAAM,SAASoB,CAAE,KAC3BnB,EAAM,EAAE,OAAO,CAAC,GAAGD,EAAM,OAAOoB,CAAE,GAAG,IAE3BpB,EAAM,UAAU,SAASoB,CAAE,KACtCnB,EAAM,EAAE,WAAW,CAAC,GAAGD,EAAM,WAAWoB,CAAE,GAAG;AAAA,IAE/C;AAAA,IACA,CAACnB,GAAOD,EAAM,OAAOA,EAAM,SAAS;AAAA,EAAA;AAGrC,SACC,gBAAAqB;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,OAAA3B;AAAA,MACA,OAAQK,EAAMN,CAAQ,KAA4B;AAAA,MAClD,UAAU,CAAC6B,MAAStB,EAAM,EAAE,CAACP,CAAQ,GAAG6B,GAA6B;AAAA,MACrE,WAAA1B;AAAA,MACA,aAAAD;AAAA,MACA,WAAAE;AAAA,MACA,UAAU,GAAGE,EAAM,EAAE,IAAIN,CAAQ,IAAIW,CAAe;AAAA,MACpD,cAAAM;AAAA,MACA,OAAOT;AAAA,MACP,iBAAAgB;AAAA,MACA,SAAS,MAAMX,EAAmBb,CAAQ;AAAA,MAC1C,gBAAAqB;AAAA,MACA,kBAAkBP,IAAmBC,IAAwB;AAAA,MAC7D,aAAWV,EAAK,WAAW;AAAA,IAAA;AAAA,EAAA;AAG9B;"}
1
+ {"version":3,"file":"MentionField.js","sources":["../../../../../src/components/agent-builder/components/MentionField.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport { AgentValue } from '../AgentBuilder.model';\nimport {\n\tMentionFieldKey,\n\tuseAgentBuilderContext,\n} from '../context/AgentBuilderContext';\nimport {\n\tappTypeLabel,\n\tbuildAgentMentionItems,\n} from '../utils/mentionSerialization';\nimport { MentionEditor } from './MentionEditor';\n\ninterface MentionFieldProps {\n\t/** Which AgentValue field this editor reads / writes. */\n\tfieldKey: MentionFieldKey;\n\tlabel: string;\n\tplaceholder?: string;\n\tmaxLength: number;\n\tminHeight?: string;\n\t'data-test'?: string;\n}\n\n/**\n * Context-bound {@link MentionEditor} for the builder's Step-3 Instructions /\n * Guardrails. Both `@` tools and sub-agents are offered; the field registers its\n * insert + focus with the context so side-panel adds drop a chip into whichever\n * field was last focused, and remounts on `mentionResetKey`.\n */\nexport const MentionField: React.FC<MentionFieldProps> = ({\n\tfieldKey,\n\tlabel,\n\tplaceholder,\n\tmaxLength,\n\tminHeight,\n\t...rest\n}) => {\n\tconst {\n\t\tvalue,\n\t\tpatch,\n\t\taddReference,\n\t\tavailableTools,\n\t\tavailableSubAgents,\n\t\tapplicationType,\n\t\tmentionResetKey,\n\t\tregisterMentionField,\n\t\tnotifyMentionFocus,\n\t\tonCreateSubAgent,\n\t\trequestCreateSubAgent,\n\t} = useAgentBuilderContext();\n\n\tconst mentionItems = useMemo(\n\t\t() =>\n\t\t\tbuildAgentMentionItems(\n\t\t\t\tavailableTools,\n\t\t\t\tavailableSubAgents,\n\t\t\t\tappTypeLabel(applicationType),\n\t\t\t),\n\t\t[availableTools, availableSubAgents, applicationType],\n\t);\n\n\tconst registerInsert = useCallback(\n\t\t(fn: Parameters<typeof registerMentionField>[1]) =>\n\t\t\tregisterMentionField(fieldKey, fn),\n\t\t[registerMentionField, fieldKey],\n\t);\n\n\t// Route through the context's ref-backed `addReference`: BikEditor captures\n\t// this handler at mount, so reading `value.tools` here would keep only the last\n\t// pick. `addReference` always appends against the latest lists.\n\tconst onMentionSelect = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => addReference(kind, id),\n\t\t[addReference],\n\t);\n\n\treturn (\n\t\t<MentionEditor\n\t\t\tlabel={label}\n\t\t\tvalue={(value[fieldKey] as string | undefined) ?? ''}\n\t\t\tonChange={(text) => patch({ [fieldKey]: text } as Partial<AgentValue>)}\n\t\t\tmaxLength={maxLength}\n\t\t\tplaceholder={placeholder}\n\t\t\tminHeight={minHeight}\n\t\t\tresetKey={`${value.id}:${fieldKey}:${mentionResetKey}`}\n\t\t\tmentionItems={mentionItems}\n\t\t\ttools={availableTools}\n\t\t\tonMentionSelect={onMentionSelect}\n\t\t\tonFocus={() => notifyMentionFocus(fieldKey)}\n\t\t\tregisterInsert={registerInsert}\n\t\t\tonCreateSubAgent={onCreateSubAgent ? requestCreateSubAgent : undefined}\n\t\t\tdata-test={rest['data-test']}\n\t\t/>\n\t);\n};\n"],"names":["MentionField","fieldKey","label","placeholder","maxLength","minHeight","rest","value","patch","addReference","availableTools","availableSubAgents","applicationType","mentionResetKey","registerMentionField","notifyMentionFocus","onCreateSubAgent","requestCreateSubAgent","useAgentBuilderContext","mentionItems","useMemo","buildAgentMentionItems","appTypeLabel","registerInsert","useCallback","fn","onMentionSelect","kind","id","jsx","MentionEditor","text"],"mappings":";;;;;AA4BO,MAAMA,IAA4C,CAAC;AAAA,EACzD,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACJ,MAAM;AACL,QAAM;AAAA,IACL,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,uBAAAC;AAAA,EAAA,IACGC,EAAA,GAEEC,IAAeC;AAAA,IACpB,MACCC;AAAA,MACCX;AAAA,MACAC;AAAA,MACAW,EAAaV,CAAe;AAAA,IAAA;AAAA,IAE9B,CAACF,GAAgBC,GAAoBC,CAAe;AAAA,EAAA,GAG/CW,IAAiBC;AAAA,IACtB,CAACC,MACAX,EAAqBb,GAAUwB,CAAE;AAAA,IAClC,CAACX,GAAsBb,CAAQ;AAAA,EAAA,GAM1ByB,IAAkBF;AAAA,IACvB,CAACG,GAA2BC,MAAenB,EAAakB,GAAMC,CAAE;AAAA,IAChE,CAACnB,CAAY;AAAA,EAAA;AAGd,SACC,gBAAAoB;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,OAAA5B;AAAA,MACA,OAAQK,EAAMN,CAAQ,KAA4B;AAAA,MAClD,UAAU,CAAC8B,MAASvB,EAAM,EAAE,CAACP,CAAQ,GAAG8B,GAA6B;AAAA,MACrE,WAAA3B;AAAA,MACA,aAAAD;AAAA,MACA,WAAAE;AAAA,MACA,UAAU,GAAGE,EAAM,EAAE,IAAIN,CAAQ,IAAIY,CAAe;AAAA,MACpD,cAAAM;AAAA,MACA,OAAOT;AAAA,MACP,iBAAAgB;AAAA,MACA,SAAS,MAAMX,EAAmBd,CAAQ;AAAA,MAC1C,gBAAAsB;AAAA,MACA,kBAAkBP,IAAmBC,IAAwB;AAAA,MAC7D,aAAWX,EAAK,WAAW;AAAA,IAAA;AAAA,EAAA;AAG9B;"}
@@ -1,79 +1,76 @@
1
- import { jsx as o, jsxs as i, Fragment as B } from "react/jsx-runtime";
2
- import X from "../../../assets/icons/delete.svg.js";
3
- import Y from "../../../assets/icons/edit.svg.js";
4
- import L from "../../../assets/icons/plus.svg.js";
5
- import { useState as g, useRef as Z, useEffect as G } from "react";
6
- import k from "styled-components";
7
- import { TitleSmall as P, BodyCaption as D, BodySecondary as I } from "../../TypographyStyle.js";
1
+ import { jsx as o, jsxs as i, Fragment as D } from "react/jsx-runtime";
2
+ import Z from "../../../assets/icons/delete.svg.js";
3
+ import G from "../../../assets/icons/edit.svg.js";
4
+ import I from "../../../assets/icons/plus.svg.js";
5
+ import { useState as $, useRef as z, useEffect as T } from "react";
6
+ import g from "styled-components";
7
+ import { TitleSmall as O, BodyCaption as x, BodySecondary as H } from "../../TypographyStyle.js";
8
8
  import { COLORS as d } from "../../../constants/Theme.js";
9
- import { SideSection as T, SideSectionHeader as O, AddIconButton as ee, SourceButtonRow as oe, SourceButton as ne, SelectableRow as te, RowText as le, RowActions as re, RowMenuButton as z, RowActionDivider as ce } from "../AgentBuilder.styled.js";
10
- import { renderSourceIcon as W, SOURCE_ICONS as ie } from "../utils/sourceIcons.js";
11
- import { MentionPicker as de } from "./MentionPicker.js";
12
- import { Dropdown as x } from "../../dropdown/Dropdown.js";
13
- import { unwrapDropdownValue as H } from "../../dropdown/utils.js";
14
- import { Button as se } from "../../button/Button.js";
15
- const M = "__bik_create_new__", _e = ({
9
+ import { SideSection as ee, SideSectionHeader as oe, AddIconButton as ne, SourceButtonRow as te, SourceButton as re, SelectableRow as le, RowText as ce, RowActions as ie, RowMenuButton as M, RowActionDivider as de } from "../AgentBuilder.styled.js";
10
+ import { renderSourceIcon as N, SOURCE_ICONS as se } from "../utils/sourceIcons.js";
11
+ import { MentionPicker as ae } from "./MentionPicker.js";
12
+ import { Dropdown as W } from "../../dropdown/Dropdown.js";
13
+ import { unwrapDropdownValue as j } from "../../dropdown/utils.js";
14
+ import { Button as ue } from "../../button/Button.js";
15
+ const F = "__bik_create_new__", Ae = ({
16
16
  title: u,
17
- helper: C,
17
+ helper: k,
18
18
  items: s,
19
19
  addableOptions: h,
20
- onAdd: f,
21
- onRemove: j,
22
- dataTestPrefix: l,
23
- emptyText: F,
20
+ onAdd: p,
21
+ onRemove: U,
22
+ dataTestPrefix: r,
23
+ emptyText: V,
24
24
  createOption: n,
25
25
  onConfigure: w,
26
26
  sourceGroups: S,
27
- mentionItems: E
27
+ mentionItems: C
28
28
  }) => {
29
- const [a, r] = g(!1), [K, v] = g(null), p = !!S && S.length > 0, y = S?.find((e) => e.source === K), t = E !== void 0, b = Z(null), [m, _] = g(null);
30
- G(() => {
29
+ const [a, l] = $(!1), [q, v] = $(null), f = !!S && S.length > 0, y = S?.find((e) => e.source === q), t = C !== void 0, E = z(null), R = z(null), [m, _] = $(null);
30
+ T(() => {
31
31
  if (!t || !a)
32
32
  return;
33
- const e = ($) => {
34
- b.current?.contains($.target) || r(!1);
35
- }, c = ($) => {
36
- $.key === "Escape" && r(!1);
33
+ const e = (b) => {
34
+ const L = b.target;
35
+ !E.current?.contains(L) && !R.current?.contains(L) && l(!1);
36
+ }, c = (b) => {
37
+ b.key === "Escape" && l(!1);
37
38
  };
38
39
  return document.addEventListener("mousedown", e), document.addEventListener("keydown", c), () => {
39
40
  document.removeEventListener("mousedown", e), document.removeEventListener("keydown", c);
40
41
  };
41
42
  }, [t, a]);
42
- const U = p ? s.length > 0 : (
43
- // Picker mode (sub-agents) always shows the header "+", even when empty —
44
- // the empty state is just the title + helper + "+" (create lives in the picker).
45
- t || h.length > 0 || !!n && s.length > 0
46
- ), V = s.length === 0 && !!n && !p && !t, q = p && s.length === 0, J = () => {
43
+ const P = f ? t || s.length > 0 : t || h.length > 0 || !!n && s.length > 0, J = s.length === 0 && !!n && !f && !t, Q = f && s.length === 0, X = () => {
47
44
  if (t) {
48
- _(null), r((e) => !e);
45
+ _(null), l((e) => !e);
49
46
  return;
50
47
  }
51
- if (p) {
52
- v(null), r((e) => !e);
48
+ if (f) {
49
+ v(null), l((e) => !e);
53
50
  return;
54
51
  }
55
52
  if (h.length === 0 && n) {
56
53
  n.onSelect();
57
54
  return;
58
55
  }
59
- r((e) => !e);
60
- }, Q = () => s.map((e) => /* @__PURE__ */ i(
61
- te,
56
+ l((e) => !e);
57
+ }, Y = () => s.map((e) => /* @__PURE__ */ i(
58
+ le,
62
59
  {
63
- "data-test": `${l}-row-${e.id}`,
60
+ "data-test": `${r}-row-${e.id}`,
64
61
  children: [
65
- W(e.icon),
66
- /* @__PURE__ */ o(le, { children: /* @__PURE__ */ o(I, { numberOfLines: 1, color: d.content.primary, children: e.label }) }),
67
- /* @__PURE__ */ i(re, { children: [
62
+ N(e.icon),
63
+ /* @__PURE__ */ o(ce, { children: /* @__PURE__ */ o(H, { numberOfLines: 1, color: d.content.primary, children: e.label }) }),
64
+ /* @__PURE__ */ i(ie, { children: [
68
65
  w && // Configurable rows (sub-agents) get an always-visible edit icon.
69
66
  /* @__PURE__ */ o(
70
- z,
67
+ M,
71
68
  {
72
- "data-test": `${l}-edit-${e.id}`,
69
+ "data-test": `${r}-edit-${e.id}`,
73
70
  "aria-label": `Edit ${e.label}`,
74
71
  onClick: () => w(e.id),
75
72
  children: /* @__PURE__ */ o(
76
- Y,
73
+ G,
77
74
  {
78
75
  width: 16,
79
76
  height: 16,
@@ -82,15 +79,15 @@ const M = "__bik_create_new__", _e = ({
82
79
  )
83
80
  }
84
81
  ),
85
- w && /* @__PURE__ */ o(ce, { "aria-hidden": !0 }),
82
+ w && /* @__PURE__ */ o(de, { "aria-hidden": !0 }),
86
83
  /* @__PURE__ */ o(
87
- z,
84
+ M,
88
85
  {
89
- "data-test": `${l}-delete-${e.id}`,
86
+ "data-test": `${r}-delete-${e.id}`,
90
87
  "aria-label": `Delete ${e.label}`,
91
- onClick: () => j(e.id),
88
+ onClick: () => U(e.id),
92
89
  children: /* @__PURE__ */ o(
93
- X,
90
+ Z,
94
91
  {
95
92
  width: 16,
96
93
  height: 16,
@@ -107,7 +104,7 @@ const M = "__bik_create_new__", _e = ({
107
104
  ...h,
108
105
  {
109
106
  label: n.label,
110
- value: M,
107
+ value: F,
111
108
  searchKey: n.label,
112
109
  customComponent: /* @__PURE__ */ o(
113
110
  "div",
@@ -124,124 +121,124 @@ const M = "__bik_create_new__", _e = ({
124
121
  }
125
122
  )
126
123
  }
127
- ] : h, R = t ? /* @__PURE__ */ o(
128
- de,
124
+ ] : h, B = t ? /* @__PURE__ */ o(
125
+ ae,
129
126
  {
130
- items: E ?? [],
127
+ items: C ?? [],
131
128
  query: "",
132
129
  activeIndex: 0,
133
130
  initialSource: m ?? void 0,
134
131
  onSelect: (e) => {
135
- r(!1), f(String(e.id));
132
+ l(!1), p(String(e.id));
136
133
  },
137
- onClose: () => r(!1),
134
+ onClose: () => l(!1),
138
135
  onCreateSubAgent: n ? () => {
139
- r(!1), n.onSelect();
136
+ l(!1), n.onSelect();
140
137
  } : void 0
141
138
  },
142
139
  m ?? "__root__"
143
140
  ) : null;
144
- return /* @__PURE__ */ i(T, { children: [
145
- /* @__PURE__ */ i(O, { children: [
146
- /* @__PURE__ */ o(P, { color: d.content.primary, children: u }),
147
- U && /* @__PURE__ */ i(ae, { ref: b, children: [
141
+ return /* @__PURE__ */ i(ee, { children: [
142
+ /* @__PURE__ */ i(oe, { children: [
143
+ /* @__PURE__ */ o(O, { color: d.content.primary, children: u }),
144
+ P && /* @__PURE__ */ i(he, { ref: E, children: [
148
145
  /* @__PURE__ */ o(
149
- ee,
146
+ ne,
150
147
  {
151
- "data-test": `${l}-add`,
152
- onClick: J,
148
+ "data-test": `${r}-add`,
149
+ onClick: X,
153
150
  "aria-label": `Add ${u}`,
154
- children: /* @__PURE__ */ o(L, { width: 20, height: 20, color: d.content.brand })
151
+ children: /* @__PURE__ */ o(I, { width: 20, height: 20, color: d.content.brand })
155
152
  }
156
153
  ),
157
- t && a && m === null && /* @__PURE__ */ o(N, { "data-test": `${l}-picker`, children: R })
154
+ t && a && m === null && /* @__PURE__ */ o(K, { "data-test": `${r}-picker`, children: B })
158
155
  ] })
159
156
  ] }),
160
- C && /* @__PURE__ */ o(D, { color: d.content.secondary, children: C }),
161
- q ? /* @__PURE__ */ i(ue, { ref: t ? b : void 0, children: [
162
- /* @__PURE__ */ o(oe, { "data-test": `${l}-sources`, children: S?.map((e) => /* @__PURE__ */ i(
163
- ne,
157
+ k && /* @__PURE__ */ o(x, { color: d.content.secondary, children: k }),
158
+ Q ? /* @__PURE__ */ i(Se, { ref: t ? R : void 0, children: [
159
+ /* @__PURE__ */ o(te, { "data-test": `${r}-sources`, children: S?.map((e) => /* @__PURE__ */ i(
160
+ re,
164
161
  {
165
162
  type: "button",
166
- "data-test": `${l}-source-${e.source}`,
163
+ "data-test": `${r}-source-${e.source}`,
167
164
  onClick: () => {
168
165
  if (t) {
169
- _(e.source), r(!0);
166
+ _(e.source), l(!0);
170
167
  return;
171
168
  }
172
169
  v(e.source);
173
170
  },
174
171
  children: [
175
- W(ie[e.source], -4),
176
- /* @__PURE__ */ o(I, { color: d.content.primary, children: e.label })
172
+ N(se[e.source], -4),
173
+ /* @__PURE__ */ o(H, { color: d.content.primary, children: e.label })
177
174
  ]
178
175
  },
179
176
  e.source
180
177
  )) }),
181
- t && a && m !== null && /* @__PURE__ */ o(N, { $align: "left", "data-test": `${l}-picker`, children: R }),
178
+ t && a && m !== null && /* @__PURE__ */ o(K, { $align: "left", "data-test": `${r}-picker`, children: B }),
182
179
  !t && y && /* @__PURE__ */ o(
183
- x,
180
+ W,
184
181
  {
185
- "data-test": `${l}-dropdown`,
182
+ "data-test": `${r}-dropdown`,
186
183
  size: "small",
187
184
  width: "100%",
188
185
  isSearchable: !0,
189
186
  placeHolder: `Search ${y.label} tools`,
190
187
  options: y.options,
191
188
  onSelect: (e) => {
192
- const c = H(e);
193
- v(null), r(!1), c && f(c);
189
+ const c = j(e);
190
+ v(null), l(!1), c && p(c);
194
191
  }
195
192
  }
196
193
  )
197
- ] }) : /* @__PURE__ */ i(B, { children: [
194
+ ] }) : /* @__PURE__ */ i(D, { children: [
198
195
  !t && a && A.length > 0 && /* @__PURE__ */ o(
199
- x,
196
+ W,
200
197
  {
201
- "data-test": `${l}-dropdown`,
198
+ "data-test": `${r}-dropdown`,
202
199
  size: "small",
203
200
  width: "100%",
204
201
  isSearchable: !0,
205
202
  placeHolder: `Select ${u.toLowerCase()}`,
206
203
  options: A,
207
204
  onSelect: (e) => {
208
- const c = H(e);
209
- r(!1), c && (c === M ? n?.onSelect() : f(c));
205
+ const c = j(e);
206
+ l(!1), c && (c === F ? n?.onSelect() : p(c));
210
207
  }
211
208
  }
212
209
  ),
213
- s.length === 0 && !a ? /* @__PURE__ */ i(B, { children: [
214
- /* @__PURE__ */ o(D, { color: d.content.placeholder, children: F }),
215
- V && n && /* @__PURE__ */ o(
216
- se,
210
+ s.length === 0 && !a ? /* @__PURE__ */ i(D, { children: [
211
+ /* @__PURE__ */ o(x, { color: d.content.placeholder, children: V }),
212
+ J && n && /* @__PURE__ */ o(
213
+ ue,
217
214
  {
218
- "data-test": `${l}-create`,
215
+ "data-test": `${r}-create`,
219
216
  buttonType: "secondary",
220
217
  size: "small",
221
218
  matchParentWidth: !0,
222
- LeadingIcon: L,
219
+ LeadingIcon: I,
223
220
  buttonText: n.label,
224
221
  onClick: n.onSelect
225
222
  }
226
223
  )
227
- ] }) : Q()
224
+ ] }) : Y()
228
225
  ] })
229
226
  ] });
230
- }, ae = k.div`
227
+ }, he = g.div`
231
228
  position: relative;
232
229
  display: flex;
233
- `, ue = k.div`
230
+ `, Se = g.div`
234
231
  position: relative;
235
232
  display: flex;
236
233
  flex-direction: column;
237
234
  gap: 8px;
238
- `, N = k.div`
235
+ `, K = g.div`
239
236
  position: absolute;
240
237
  top: calc(100% + 4px);
241
238
  ${(u) => u.$align === "left" ? "left: 0;" : "right: 0;"}
242
239
  z-index: 30;
243
240
  `;
244
241
  export {
245
- _e as SelectableListSection
242
+ Ae as SelectableListSection
246
243
  };
247
244
  //# sourceMappingURL=SelectableListSection.js.map
@@ -1 +1 @@
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 { MentionItem } from '@src/editor';\nimport React, { useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '@src/components/button';\nimport { Dropdown, unwrapDropdownValue } from '@src/components/dropdown';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport {\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\tSourceButton,\n\tSourceButtonRow,\n} from '../AgentBuilder.styled';\nimport {\n\trenderSourceIcon,\n\tSOURCE_ICONS,\n\tSourceIcon,\n} from '../utils/sourceIcons';\nimport { MentionPicker } from './MentionPicker';\n\nexport interface SelectableItem {\n\tid: string;\n\tlabel: string;\n\t/** Leading brand glyph (e.g. a tool's source icon). */\n\ticon?: SourceIcon;\n}\n\n/** A tool source for the empty-state picker (Tools): a button → its searchable list. */\nexport interface SourceGroup {\n\tsource: string;\n\tlabel: string;\n\toptions: SingleOption[];\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 shows an edit (Configure) icon next to Delete.\n\t * Omit for tools (Delete only).\n\t */\n\tonConfigure?: (id: string) => void;\n\t/**\n\t * Tool sources (e.g. Manifest / Shopify). When set, the empty state shows a\n\t * button per source; clicking one reveals a searchable dropdown of just that\n\t * source's options. Selecting calls `onAdd`. Takes precedence over the plain\n\t * `addableOptions` dropdown.\n\t */\n\tsourceGroups?: SourceGroup[];\n\t/**\n\t * When provided, the header \"+\" opens the same `@` reference picker used in the\n\t * Instructions editor (a {@link MentionPicker} popover) instead of the inline\n\t * select dropdown. Pass the items for THIS section only (tools OR sub-agents) —\n\t * the picker auto-drills into the single category. Selecting a row calls\n\t * `onAdd(id)`; the picker's \"Create new\" row (sub-agents) calls\n\t * `createOption.onSelect`.\n\t */\n\tmentionItems?: MentionItem[];\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\tsourceGroups,\n\tmentionItems,\n}) => {\n\tconst [adding, setAdding] = useState(false);\n\t// Tools: which source's searchable list is open (null = just show the buttons).\n\tconst [activeSource, setActiveSource] = useState<string | null>(null);\n\tconst hasSourceGroups = !!sourceGroups && sourceGroups.length > 0;\n\tconst activeGroup = sourceGroups?.find((g) => g.source === activeSource);\n\t// When set, \"+\" opens the `@` MentionPicker popover instead of a select input.\n\tconst usePicker = mentionItems !== undefined;\n\tconst pickerWrapRef = useRef<HTMLDivElement>(null);\n\t// Source (Shopify / Manifest) the empty-state button opened the picker into;\n\t// null when \"+\" opened it at the root source list.\n\tconst [pickerSource, setPickerSource] = useState<string | null>(null);\n\n\t// Dismiss the picker popover on outside click / Escape.\n\tuseEffect(() => {\n\t\tif (!usePicker || !adding) {\n\t\t\treturn;\n\t\t}\n\t\tconst onDocMouseDown = (e: MouseEvent) => {\n\t\t\tif (!pickerWrapRef.current?.contains(e.target as Node)) {\n\t\t\t\tsetAdding(false);\n\t\t\t}\n\t\t};\n\t\tconst onKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\tsetAdding(false);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('mousedown', onDocMouseDown);\n\t\tdocument.addEventListener('keydown', onKeyDown);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousedown', onDocMouseDown);\n\t\t\tdocument.removeEventListener('keydown', onKeyDown);\n\t\t};\n\t}, [usePicker, adding]);\n\n\t// Header \"+\" picks an EXISTING item (and, once some exist, re-creates via the\n\t// dropdown's footer row). With an empty list + a createOption the body shows a\n\t// dedicated \"Create new\" button instead, so the header \"+\" would be redundant.\n\t// With sourceGroups the empty state IS the source buttons, so \"+\" only adds more.\n\tconst showAddButton = hasSourceGroups\n\t\t? items.length > 0\n\t\t: // Picker mode (sub-agents) always shows the header \"+\", even when empty —\n\t\t // the empty state is just the title + helper + \"+\" (create lives in the picker).\n\t\t usePicker ||\n\t\t addableOptions.length > 0 ||\n\t\t (!!createOption && items.length > 0);\n\t// Empty state offers a one-click \"Create new\" (sub-agents) rather than burying\n\t// it behind a single-item dropdown. In picker mode the \"+\" opens the picker\n\t// (with its own \"Create new\" row) instead, so skip the standalone button.\n\tconst showEmptyCreate =\n\t\titems.length === 0 && !!createOption && !hasSourceGroups && !usePicker;\n\t// Source buttons ONLY while no tool is added. Once one exists, adding more uses\n\t// the header \"+\" → all-tools dropdown (the buttons never come back).\n\tconst showSourceButtons = hasSourceGroups && items.length === 0;\n\t// Nothing existing to pick → skip the 1-item dropdown and create directly.\n\tconst handleAddClick = () => {\n\t\tif (usePicker) {\n\t\t\t// Toggle the `@` reference-picker popover (rendered under the \"+\"), opened\n\t\t\t// at the root source list (no pre-drilled source).\n\t\t\tsetPickerSource(null);\n\t\t\tsetAdding((v) => !v);\n\t\t\treturn;\n\t\t}\n\t\tif (hasSourceGroups) {\n\t\t\tsetActiveSource(null);\n\t\t\tsetAdding((v) => !v);\n\t\t\treturn;\n\t\t}\n\t\tif (addableOptions.length === 0 && createOption) {\n\t\t\tcreateOption.onSelect();\n\t\t\treturn;\n\t\t}\n\t\tsetAdding((v) => !v);\n\t};\n\n\tconst renderChipRows = () =>\n\t\titems.map((item) => (\n\t\t\t<SelectableRow\n\t\t\t\tkey={item.id}\n\t\t\t\tdata-test={`${dataTestPrefix}-row-${item.id}`}\n\t\t\t>\n\t\t\t\t{renderSourceIcon(item.icon)}\n\t\t\t\t<RowText>\n\t\t\t\t\t<BodySecondary numberOfLines={1} color={COLORS.content.primary}>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</BodySecondary>\n\t\t\t\t</RowText>\n\t\t\t\t<RowActions>\n\t\t\t\t\t{onConfigure && (\n\t\t\t\t\t\t// Configurable rows (sub-agents) get an always-visible edit icon.\n\t\t\t\t\t\t<RowMenuButton\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-edit-${item.id}`}\n\t\t\t\t\t\t\taria-label={`Edit ${item.label}`}\n\t\t\t\t\t\t\tonClick={() => onConfigure(item.id)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<EditIcon\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</RowMenuButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{onConfigure && <RowActionDivider aria-hidden />}\n\t\t\t\t\t<RowMenuButton\n\t\t\t\t\t\tdata-test={`${dataTestPrefix}-delete-${item.id}`}\n\t\t\t\t\t\taria-label={`Delete ${item.label}`}\n\t\t\t\t\t\tonClick={() => onRemove(item.id)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DeleteIcon\n\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</RowMenuButton>\n\t\t\t\t</RowActions>\n\t\t\t</SelectableRow>\n\t\t));\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\t// One picker instance reused by the header \"+\" and the empty-state source\n\t// buttons. `key` remounts it so a source button re-drills into its own tools\n\t// (the initial drill-in level is read once, on mount).\n\tconst pickerNode = usePicker ? (\n\t\t<MentionPicker\n\t\t\tkey={pickerSource ?? '__root__'}\n\t\t\titems={mentionItems ?? []}\n\t\t\tquery=\"\"\n\t\t\tactiveIndex={0}\n\t\t\tinitialSource={pickerSource ?? undefined}\n\t\t\tonSelect={(item) => {\n\t\t\t\tsetAdding(false);\n\t\t\t\tonAdd(String(item.id));\n\t\t\t}}\n\t\t\tonClose={() => setAdding(false)}\n\t\t\tonCreateSubAgent={\n\t\t\t\tcreateOption\n\t\t\t\t\t? () => {\n\t\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t\t\tcreateOption.onSelect();\n\t\t\t\t\t }\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t/>\n\t) : null;\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<AddButtonWrap ref={pickerWrapRef}>\n\t\t\t\t\t\t<AddIconButton\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-add`}\n\t\t\t\t\t\t\tonClick={handleAddClick}\n\t\t\t\t\t\t\taria-label={`Add ${title}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PlusIcon width={20} height={20} color={COLORS.content.brand} />\n\t\t\t\t\t\t</AddIconButton>\n\t\t\t\t\t\t{usePicker && adding && pickerSource === null && (\n\t\t\t\t\t\t\t<PickerPopover data-test={`${dataTestPrefix}-picker`}>\n\t\t\t\t\t\t\t\t{pickerNode}\n\t\t\t\t\t\t\t</PickerPopover>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AddButtonWrap>\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{showSourceButtons ? (\n\t\t\t\t<SourcePickerAnchor ref={usePicker ? pickerWrapRef : undefined}>\n\t\t\t\t\t{/* No tools yet: one button per source (never shown once a tool exists). */}\n\t\t\t\t\t<SourceButtonRow data-test={`${dataTestPrefix}-sources`}>\n\t\t\t\t\t\t{sourceGroups?.map((g) => (\n\t\t\t\t\t\t\t<SourceButton\n\t\t\t\t\t\t\t\tkey={g.source}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-source-${g.source}`}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (usePicker) {\n\t\t\t\t\t\t\t\t\t\t// Open the `@` picker drilled straight into this source's tools.\n\t\t\t\t\t\t\t\t\t\tsetPickerSource(g.source);\n\t\t\t\t\t\t\t\t\t\tsetAdding(true);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsetActiveSource(g.source);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{renderSourceIcon(SOURCE_ICONS[g.source], -4)}\n\t\t\t\t\t\t\t\t<BodySecondary color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\t\t{g.label}\n\t\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t\t</SourceButton>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SourceButtonRow>\n\n\t\t\t\t\t{/* Picker mode: clicking a source opens its tools in the `@` picker. */}\n\t\t\t\t\t{usePicker && adding && pickerSource !== null && (\n\t\t\t\t\t\t<PickerPopover $align=\"left\" data-test={`${dataTestPrefix}-picker`}>\n\t\t\t\t\t\t\t{pickerNode}\n\t\t\t\t\t\t</PickerPopover>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Legacy (non-picker) mode: chosen source → its searchable tool list. */}\n\t\t\t\t\t{!usePicker && activeGroup && (\n\t\t\t\t\t\t<Dropdown\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-dropdown`}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\tisSearchable\n\t\t\t\t\t\t\tplaceHolder={`Search ${activeGroup.label} tools`}\n\t\t\t\t\t\t\toptions={activeGroup.options}\n\t\t\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\t\t\tconst v = unwrapDropdownValue(opt);\n\t\t\t\t\t\t\t\tsetActiveSource(null);\n\t\t\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\tonAdd(v);\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)}\n\t\t\t\t</SourcePickerAnchor>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{!usePicker && adding && dropdownOptions.length > 0 && (\n\t\t\t\t\t\t<Dropdown\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-dropdown`}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\tisSearchable\n\t\t\t\t\t\t\tplaceHolder={`Select ${title.toLowerCase()}`}\n\t\t\t\t\t\t\toptions={dropdownOptions}\n\t\t\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\t\t\tconst v = unwrapDropdownValue(opt);\n\t\t\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t\t\t\tif (!v) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v === CREATE_OPTION_VALUE) {\n\t\t\t\t\t\t\t\t\tcreateOption?.onSelect();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tonAdd(v);\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)}\n\n\t\t\t\t\t{items.length === 0 && !adding ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BodyCaption color={COLORS.content.placeholder}>\n\t\t\t\t\t\t\t\t{emptyText}\n\t\t\t\t\t\t\t</BodyCaption>\n\t\t\t\t\t\t\t{showEmptyCreate && createOption && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-create`}\n\t\t\t\t\t\t\t\t\tbuttonType=\"secondary\"\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tmatchParentWidth\n\t\t\t\t\t\t\t\t\tLeadingIcon={PlusIcon}\n\t\t\t\t\t\t\t\t\tbuttonText={createOption.label}\n\t\t\t\t\t\t\t\t\tonClick={createOption.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) : (\n\t\t\t\t\t\trenderChipRows()\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</SideSection>\n\t);\n};\n\n// Anchors the `@`-picker popover to the header \"+\" button.\nconst AddButtonWrap = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n`;\n\n// Anchors the `@`-picker popover to the empty-state source buttons.\nconst SourcePickerAnchor = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n`;\n\n// Floating card under the trigger. Aligns to the \"+\" (right) or the source\n// buttons (left) so it stays inside the side panel.\nconst PickerPopover = styled.div<{ $align?: 'left' | 'right' }>`\n\tposition: absolute;\n\ttop: calc(100% + 4px);\n\t${(p) => (p.$align === 'left' ? 'left: 0;' : 'right: 0;')}\n\tz-index: 30;\n`;\n"],"names":["CREATE_OPTION_VALUE","SelectableListSection","title","helper","items","addableOptions","onAdd","onRemove","dataTestPrefix","emptyText","createOption","onConfigure","sourceGroups","mentionItems","adding","setAdding","useState","activeSource","setActiveSource","hasSourceGroups","activeGroup","g","usePicker","pickerWrapRef","useRef","pickerSource","setPickerSource","useEffect","onDocMouseDown","e","onKeyDown","showAddButton","showEmptyCreate","showSourceButtons","handleAddClick","v","renderChipRows","item","jsxs","SelectableRow","renderSourceIcon","jsx","RowText","BodySecondary","COLORS","RowActions","RowMenuButton","EditIcon","RowActionDivider","DeleteIcon","dropdownOptions","pickerNode","MentionPicker","SideSection","SideSectionHeader","TitleSmall","AddButtonWrap","AddIconButton","PlusIcon","PickerPopover","BodyCaption","SourcePickerAnchor","SourceButtonRow","SourceButton","SOURCE_ICONS","Dropdown","opt","unwrapDropdownValue","Fragment","Button","styled","p"],"mappings":"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"}
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 { MentionItem } from '@src/editor';\nimport React, { useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { Button } from '@src/components/button';\nimport { Dropdown, unwrapDropdownValue } from '@src/components/dropdown';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport {\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\tSourceButton,\n\tSourceButtonRow,\n} from '../AgentBuilder.styled';\nimport {\n\trenderSourceIcon,\n\tSOURCE_ICONS,\n\tSourceIcon,\n} from '../utils/sourceIcons';\nimport { MentionPicker } from './MentionPicker';\n\nexport interface SelectableItem {\n\tid: string;\n\tlabel: string;\n\t/** Leading brand glyph (e.g. a tool's source icon). */\n\ticon?: SourceIcon;\n}\n\n/** A tool source for the empty-state picker (Tools): a button → its searchable list. */\nexport interface SourceGroup {\n\tsource: string;\n\tlabel: string;\n\toptions: SingleOption[];\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 shows an edit (Configure) icon next to Delete.\n\t * Omit for tools (Delete only).\n\t */\n\tonConfigure?: (id: string) => void;\n\t/**\n\t * Tool sources (e.g. Manifest / Shopify). When set, the empty state shows a\n\t * button per source; clicking one reveals a searchable dropdown of just that\n\t * source's options. Selecting calls `onAdd`. Takes precedence over the plain\n\t * `addableOptions` dropdown.\n\t */\n\tsourceGroups?: SourceGroup[];\n\t/**\n\t * When provided, the header \"+\" opens the same `@` reference picker used in the\n\t * Instructions editor (a {@link MentionPicker} popover) instead of the inline\n\t * select dropdown. Pass the items for THIS section only (tools OR sub-agents) —\n\t * the picker auto-drills into the single category. Selecting a row calls\n\t * `onAdd(id)`; the picker's \"Create new\" row (sub-agents) calls\n\t * `createOption.onSelect`.\n\t */\n\tmentionItems?: MentionItem[];\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\tsourceGroups,\n\tmentionItems,\n}) => {\n\tconst [adding, setAdding] = useState(false);\n\t// Tools: which source's searchable list is open (null = just show the buttons).\n\tconst [activeSource, setActiveSource] = useState<string | null>(null);\n\tconst hasSourceGroups = !!sourceGroups && sourceGroups.length > 0;\n\tconst activeGroup = sourceGroups?.find((g) => g.source === activeSource);\n\t// When set, \"+\" opens the `@` MentionPicker popover instead of a select input.\n\tconst usePicker = mentionItems !== undefined;\n\t// Separate anchors for the header \"+\" popover and the empty-state source-button\n\t// popover — when empty both render at once, so a shared ref would misfire the\n\t// outside-click check (closing the header picker when a source row is clicked).\n\tconst headerPickerRef = useRef<HTMLDivElement>(null);\n\tconst sourcePickerRef = useRef<HTMLDivElement>(null);\n\t// Source (Shopify / Manifest) the empty-state button opened the picker into;\n\t// null when \"+\" opened it at the root source list.\n\tconst [pickerSource, setPickerSource] = useState<string | null>(null);\n\n\t// Dismiss the picker popover on outside click / Escape.\n\tuseEffect(() => {\n\t\tif (!usePicker || !adding) {\n\t\t\treturn;\n\t\t}\n\t\tconst onDocMouseDown = (e: MouseEvent) => {\n\t\t\tconst target = e.target as Node;\n\t\t\tif (\n\t\t\t\t!headerPickerRef.current?.contains(target) &&\n\t\t\t\t!sourcePickerRef.current?.contains(target)\n\t\t\t) {\n\t\t\t\tsetAdding(false);\n\t\t\t}\n\t\t};\n\t\tconst onKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\tsetAdding(false);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener('mousedown', onDocMouseDown);\n\t\tdocument.addEventListener('keydown', onKeyDown);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousedown', onDocMouseDown);\n\t\t\tdocument.removeEventListener('keydown', onKeyDown);\n\t\t};\n\t}, [usePicker, adding]);\n\n\t// Header \"+\" picks an EXISTING item (and, once some exist, re-creates via the\n\t// dropdown's footer row). With an empty list + a createOption the body shows a\n\t// dedicated \"Create new\" button instead, so the header \"+\" would be redundant.\n\t// In picker mode the \"+\" always shows (even empty) — for tools it sits next to\n\t// the empty-state source buttons; the create flow lives inside the picker.\n\tconst showAddButton = hasSourceGroups\n\t\t? usePicker || items.length > 0\n\t\t: usePicker ||\n\t\t addableOptions.length > 0 ||\n\t\t (!!createOption && items.length > 0);\n\t// Empty state offers a one-click \"Create new\" (sub-agents) rather than burying\n\t// it behind a single-item dropdown. In picker mode the \"+\" opens the picker\n\t// (with its own \"Create new\" row) instead, so skip the standalone button.\n\tconst showEmptyCreate =\n\t\titems.length === 0 && !!createOption && !hasSourceGroups && !usePicker;\n\t// Source buttons ONLY while no tool is added. Once one exists, adding more uses\n\t// the header \"+\" → all-tools dropdown (the buttons never come back).\n\tconst showSourceButtons = hasSourceGroups && items.length === 0;\n\t// Nothing existing to pick → skip the 1-item dropdown and create directly.\n\tconst handleAddClick = () => {\n\t\tif (usePicker) {\n\t\t\t// Toggle the `@` reference-picker popover (rendered under the \"+\"), opened\n\t\t\t// at the root source list (no pre-drilled source).\n\t\t\tsetPickerSource(null);\n\t\t\tsetAdding((v) => !v);\n\t\t\treturn;\n\t\t}\n\t\tif (hasSourceGroups) {\n\t\t\tsetActiveSource(null);\n\t\t\tsetAdding((v) => !v);\n\t\t\treturn;\n\t\t}\n\t\tif (addableOptions.length === 0 && createOption) {\n\t\t\tcreateOption.onSelect();\n\t\t\treturn;\n\t\t}\n\t\tsetAdding((v) => !v);\n\t};\n\n\tconst renderChipRows = () =>\n\t\titems.map((item) => (\n\t\t\t<SelectableRow\n\t\t\t\tkey={item.id}\n\t\t\t\tdata-test={`${dataTestPrefix}-row-${item.id}`}\n\t\t\t>\n\t\t\t\t{renderSourceIcon(item.icon)}\n\t\t\t\t<RowText>\n\t\t\t\t\t<BodySecondary numberOfLines={1} color={COLORS.content.primary}>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</BodySecondary>\n\t\t\t\t</RowText>\n\t\t\t\t<RowActions>\n\t\t\t\t\t{onConfigure && (\n\t\t\t\t\t\t// Configurable rows (sub-agents) get an always-visible edit icon.\n\t\t\t\t\t\t<RowMenuButton\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-edit-${item.id}`}\n\t\t\t\t\t\t\taria-label={`Edit ${item.label}`}\n\t\t\t\t\t\t\tonClick={() => onConfigure(item.id)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<EditIcon\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</RowMenuButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{onConfigure && <RowActionDivider aria-hidden />}\n\t\t\t\t\t<RowMenuButton\n\t\t\t\t\t\tdata-test={`${dataTestPrefix}-delete-${item.id}`}\n\t\t\t\t\t\taria-label={`Delete ${item.label}`}\n\t\t\t\t\t\tonClick={() => onRemove(item.id)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DeleteIcon\n\t\t\t\t\t\t\twidth={16}\n\t\t\t\t\t\t\theight={16}\n\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</RowMenuButton>\n\t\t\t\t</RowActions>\n\t\t\t</SelectableRow>\n\t\t));\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\t// One picker instance reused by the header \"+\" and the empty-state source\n\t// buttons. `key` remounts it so a source button re-drills into its own tools\n\t// (the initial drill-in level is read once, on mount).\n\tconst pickerNode = usePicker ? (\n\t\t<MentionPicker\n\t\t\tkey={pickerSource ?? '__root__'}\n\t\t\titems={mentionItems ?? []}\n\t\t\tquery=\"\"\n\t\t\tactiveIndex={0}\n\t\t\tinitialSource={pickerSource ?? undefined}\n\t\t\tonSelect={(item) => {\n\t\t\t\tsetAdding(false);\n\t\t\t\tonAdd(String(item.id));\n\t\t\t}}\n\t\t\tonClose={() => setAdding(false)}\n\t\t\tonCreateSubAgent={\n\t\t\t\tcreateOption\n\t\t\t\t\t? () => {\n\t\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t\t\tcreateOption.onSelect();\n\t\t\t\t\t }\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t/>\n\t) : null;\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<AddButtonWrap ref={headerPickerRef}>\n\t\t\t\t\t\t<AddIconButton\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-add`}\n\t\t\t\t\t\t\tonClick={handleAddClick}\n\t\t\t\t\t\t\taria-label={`Add ${title}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PlusIcon width={20} height={20} color={COLORS.content.brand} />\n\t\t\t\t\t\t</AddIconButton>\n\t\t\t\t\t\t{usePicker && adding && pickerSource === null && (\n\t\t\t\t\t\t\t<PickerPopover data-test={`${dataTestPrefix}-picker`}>\n\t\t\t\t\t\t\t\t{pickerNode}\n\t\t\t\t\t\t\t</PickerPopover>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AddButtonWrap>\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{showSourceButtons ? (\n\t\t\t\t<SourcePickerAnchor ref={usePicker ? sourcePickerRef : undefined}>\n\t\t\t\t\t{/* No tools yet: one button per source (never shown once a tool exists). */}\n\t\t\t\t\t<SourceButtonRow data-test={`${dataTestPrefix}-sources`}>\n\t\t\t\t\t\t{sourceGroups?.map((g) => (\n\t\t\t\t\t\t\t<SourceButton\n\t\t\t\t\t\t\t\tkey={g.source}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-source-${g.source}`}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (usePicker) {\n\t\t\t\t\t\t\t\t\t\t// Open the `@` picker drilled straight into this source's tools.\n\t\t\t\t\t\t\t\t\t\tsetPickerSource(g.source);\n\t\t\t\t\t\t\t\t\t\tsetAdding(true);\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsetActiveSource(g.source);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{renderSourceIcon(SOURCE_ICONS[g.source], -4)}\n\t\t\t\t\t\t\t\t<BodySecondary color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\t\t{g.label}\n\t\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t\t</SourceButton>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SourceButtonRow>\n\n\t\t\t\t\t{/* Picker mode: clicking a source opens its tools in the `@` picker. */}\n\t\t\t\t\t{usePicker && adding && pickerSource !== null && (\n\t\t\t\t\t\t<PickerPopover $align=\"left\" data-test={`${dataTestPrefix}-picker`}>\n\t\t\t\t\t\t\t{pickerNode}\n\t\t\t\t\t\t</PickerPopover>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Legacy (non-picker) mode: chosen source → its searchable tool list. */}\n\t\t\t\t\t{!usePicker && activeGroup && (\n\t\t\t\t\t\t<Dropdown\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-dropdown`}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\tisSearchable\n\t\t\t\t\t\t\tplaceHolder={`Search ${activeGroup.label} tools`}\n\t\t\t\t\t\t\toptions={activeGroup.options}\n\t\t\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\t\t\tconst v = unwrapDropdownValue(opt);\n\t\t\t\t\t\t\t\tsetActiveSource(null);\n\t\t\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\tonAdd(v);\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)}\n\t\t\t\t</SourcePickerAnchor>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{!usePicker && adding && dropdownOptions.length > 0 && (\n\t\t\t\t\t\t<Dropdown\n\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-dropdown`}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\tisSearchable\n\t\t\t\t\t\t\tplaceHolder={`Select ${title.toLowerCase()}`}\n\t\t\t\t\t\t\toptions={dropdownOptions}\n\t\t\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\t\t\tconst v = unwrapDropdownValue(opt);\n\t\t\t\t\t\t\t\tsetAdding(false);\n\t\t\t\t\t\t\t\tif (!v) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v === CREATE_OPTION_VALUE) {\n\t\t\t\t\t\t\t\t\tcreateOption?.onSelect();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tonAdd(v);\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)}\n\n\t\t\t\t\t{items.length === 0 && !adding ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<BodyCaption color={COLORS.content.placeholder}>\n\t\t\t\t\t\t\t\t{emptyText}\n\t\t\t\t\t\t\t</BodyCaption>\n\t\t\t\t\t\t\t{showEmptyCreate && createOption && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tdata-test={`${dataTestPrefix}-create`}\n\t\t\t\t\t\t\t\t\tbuttonType=\"secondary\"\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tmatchParentWidth\n\t\t\t\t\t\t\t\t\tLeadingIcon={PlusIcon}\n\t\t\t\t\t\t\t\t\tbuttonText={createOption.label}\n\t\t\t\t\t\t\t\t\tonClick={createOption.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) : (\n\t\t\t\t\t\trenderChipRows()\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</SideSection>\n\t);\n};\n\n// Anchors the `@`-picker popover to the header \"+\" button.\nconst AddButtonWrap = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n`;\n\n// Anchors the `@`-picker popover to the empty-state source buttons.\nconst SourcePickerAnchor = styled.div`\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n`;\n\n// Floating card under the trigger. Aligns to the \"+\" (right) or the source\n// buttons (left) so it stays inside the side panel.\nconst PickerPopover = styled.div<{ $align?: 'left' | 'right' }>`\n\tposition: absolute;\n\ttop: calc(100% + 4px);\n\t${(p) => (p.$align === 'left' ? 'left: 0;' : 'right: 0;')}\n\tz-index: 30;\n`;\n"],"names":["CREATE_OPTION_VALUE","SelectableListSection","title","helper","items","addableOptions","onAdd","onRemove","dataTestPrefix","emptyText","createOption","onConfigure","sourceGroups","mentionItems","adding","setAdding","useState","activeSource","setActiveSource","hasSourceGroups","activeGroup","g","usePicker","headerPickerRef","useRef","sourcePickerRef","pickerSource","setPickerSource","useEffect","onDocMouseDown","e","target","onKeyDown","showAddButton","showEmptyCreate","showSourceButtons","handleAddClick","v","renderChipRows","item","jsxs","SelectableRow","renderSourceIcon","jsx","RowText","BodySecondary","COLORS","RowActions","RowMenuButton","EditIcon","RowActionDivider","DeleteIcon","dropdownOptions","pickerNode","MentionPicker","SideSection","SideSectionHeader","TitleSmall","AddButtonWrap","AddIconButton","PlusIcon","PickerPopover","BodyCaption","SourcePickerAnchor","SourceButtonRow","SourceButton","SOURCE_ICONS","Dropdown","opt","unwrapDropdownValue","Fragment","Button","styled","p"],"mappings":"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"}
@@ -1,35 +1,43 @@
1
- import { jsx as t, jsxs as s } from "react/jsx-runtime";
2
- import { TitleSmall as S, BodySecondary as p } from "../../TypographyStyle.js";
3
- import { COLORS as v } from "../../../constants/Theme.js";
4
- import { RailList as y, RailItem as x, StepBadge as f } from "../AgentBuilder.styled.js";
5
- import { STEP_DEFINITIONS as g } from "../constants/steps.js";
6
- import { useAgentBuilderContext as k } from "../context/AgentBuilderContext.js";
7
- const T = () => {
1
+ import { jsx as e, jsxs as s } from "react/jsx-runtime";
2
+ import S from "../../../assets/icons/tick.svg.js";
3
+ import { TitleSmall as v, BodySecondary as y } from "../../TypographyStyle.js";
4
+ import { COLORS as n } from "../../../constants/Theme.js";
5
+ import { RailList as g, RailItem as f, StepBadge as h } from "../AgentBuilder.styled.js";
6
+ import { STEP_DEFINITIONS as k } from "../constants/steps.js";
7
+ import { useAgentBuilderContext as x } from "../context/AgentBuilderContext.js";
8
+ const L = () => {
8
9
  const {
9
10
  activeStep: a,
10
- activeIndex: n,
11
- validation: c,
12
- goToStep: l,
11
+ activeIndex: c,
12
+ validation: l,
13
+ goToStep: m,
13
14
  disableStepNavigation: i
14
- } = k();
15
- return /* @__PURE__ */ t(y, { children: g.map((e) => {
16
- const o = e.key === a, r = e.index - 1 < n && c[e.key], d = o ? "active" : r ? "complete" : "inactive", m = o ? S : p;
15
+ } = x();
16
+ return /* @__PURE__ */ e(g, { children: k.map((t) => {
17
+ const o = t.key === a, r = t.index - 1 < c && l[t.key], d = o ? "active" : r ? "complete" : "inactive", p = o ? v : y;
17
18
  return /* @__PURE__ */ s(
18
- x,
19
+ f,
19
20
  {
20
- "data-test": `agent-step-${e.key}`,
21
+ "data-test": `agent-step-${t.key}`,
21
22
  disabled: i,
22
- onClick: i ? void 0 : () => l(e.key),
23
+ onClick: i ? void 0 : () => m(t.key),
23
24
  children: [
24
- /* @__PURE__ */ t(f, { state: d, children: r ? "✓" : e.index }),
25
- /* @__PURE__ */ t(m, { color: v.content.primary, children: e.title })
25
+ /* @__PURE__ */ e(h, { state: d, children: r ? /* @__PURE__ */ e(
26
+ S,
27
+ {
28
+ width: 11,
29
+ height: 8,
30
+ color: n.content.primaryInverse
31
+ }
32
+ ) : t.index }),
33
+ /* @__PURE__ */ e(p, { color: n.content.primary, children: t.title })
26
34
  ]
27
35
  },
28
- e.key
36
+ t.key
29
37
  );
30
38
  }) });
31
39
  };
32
40
  export {
33
- T as StepRail
41
+ L as StepRail
34
42
  };
35
43
  //# sourceMappingURL=StepRail.js.map