@bikdotai/bik-component-library 0.0.821-beta.8 → 0.0.821

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 (89) hide show
  1. package/dist/cjs/assets/icons/Shopify.svg.js +2 -0
  2. package/dist/cjs/assets/icons/Shopify.svg.js.map +1 -0
  3. package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
  4. package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +57 -23
  6. package/dist/cjs/components/agent-builder/AgentBuilder.styled.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/GoLiveModal.js.map +1 -1
  10. package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
  11. package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -1
  12. package/dist/cjs/components/agent-builder/components/MentionField.js +1 -1
  13. package/dist/cjs/components/agent-builder/components/MentionField.js.map +1 -1
  14. package/dist/cjs/components/agent-builder/components/MentionPicker.js +37 -6
  15. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  16. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +1 -1
  17. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  18. package/dist/cjs/components/agent-builder/constants/charLimits.js +1 -1
  19. package/dist/cjs/components/agent-builder/constants/charLimits.js.map +1 -1
  20. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  21. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  22. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js +1 -1
  23. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  24. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  25. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  26. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js +1 -1
  27. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  28. package/dist/cjs/components/agent-builder/utils/sourceIcons.js +2 -0
  29. package/dist/cjs/components/agent-builder/utils/sourceIcons.js.map +1 -0
  30. package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
  31. package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
  32. package/dist/cjs/components/agent-listing/AgentListingFilters.js +1 -1
  33. package/dist/cjs/components/agent-listing/AgentListingFilters.js.map +1 -1
  34. package/dist/cjs/editor/BikEditor.types.js.map +1 -1
  35. package/dist/cjs/editor/extensions/mention/MentionDropdown.js +1 -1
  36. package/dist/cjs/editor/extensions/mention/MentionDropdown.js.map +1 -1
  37. package/dist/cjs/editor/extensions/mention/MentionExtension.js +1 -1
  38. package/dist/cjs/editor/extensions/mention/MentionExtension.js.map +1 -1
  39. package/dist/esm/assets/icons/Shopify.svg.js +6 -0
  40. package/dist/esm/assets/icons/Shopify.svg.js.map +1 -0
  41. package/dist/esm/components/agent-builder/AgentBuilder.js +47 -47
  42. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  43. package/dist/esm/components/agent-builder/AgentBuilder.model.d.ts +1 -1
  44. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +6 -0
  45. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +82 -42
  46. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  47. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +84 -76
  48. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  49. package/dist/esm/components/agent-builder/components/GoLiveModal.js.map +1 -1
  50. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +6 -0
  51. package/dist/esm/components/agent-builder/components/MentionEditor.js +31 -30
  52. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
  53. package/dist/esm/components/agent-builder/components/MentionField.js +40 -37
  54. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -1
  55. package/dist/esm/components/agent-builder/components/MentionPicker.d.ts +6 -1
  56. package/dist/esm/components/agent-builder/components/MentionPicker.js +202 -101
  57. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  58. package/dist/esm/components/agent-builder/components/SelectableListSection.d.ts +18 -2
  59. package/dist/esm/components/agent-builder/components/SelectableListSection.js +159 -91
  60. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  61. package/dist/esm/components/agent-builder/constants/charLimits.d.ts +1 -1
  62. package/dist/esm/components/agent-builder/constants/charLimits.js +1 -1
  63. package/dist/esm/components/agent-builder/constants/charLimits.js.map +1 -1
  64. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +7 -0
  65. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +107 -99
  66. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  67. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js +7 -7
  68. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  69. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +131 -106
  70. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  71. package/dist/esm/components/agent-builder/utils/mentionSerialization.js +2 -2
  72. package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  73. package/dist/esm/components/agent-builder/utils/sourceIcons.d.ts +10 -0
  74. package/dist/esm/components/agent-builder/utils/sourceIcons.js +10 -0
  75. package/dist/esm/components/agent-builder/utils/sourceIcons.js.map +1 -0
  76. package/dist/esm/components/agent-listing/AgentListing.js +108 -101
  77. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  78. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +8 -0
  79. package/dist/esm/components/agent-listing/AgentListingFilters.d.ts +2 -0
  80. package/dist/esm/components/agent-listing/AgentListingFilters.js +37 -33
  81. package/dist/esm/components/agent-listing/AgentListingFilters.js.map +1 -1
  82. package/dist/esm/editor/BikEditor.types.d.ts +7 -0
  83. package/dist/esm/editor/BikEditor.types.js.map +1 -1
  84. package/dist/esm/editor/extensions/mention/MentionDropdown.d.ts +2 -0
  85. package/dist/esm/editor/extensions/mention/MentionDropdown.js +21 -20
  86. package/dist/esm/editor/extensions/mention/MentionDropdown.js.map +1 -1
  87. package/dist/esm/editor/extensions/mention/MentionExtension.js +66 -55
  88. package/dist/esm/editor/extensions/mention/MentionExtension.js.map +1 -1
  89. package/package.json +2 -2
@@ -1,61 +1,64 @@
1
- import { jsx as A } from "react/jsx-runtime";
2
- import { useMemo as C, useCallback as u } from "react";
1
+ import { jsx as d } from "react/jsx-runtime";
2
+ import { useMemo as x, useCallback as l } from "react";
3
3
  import { useAgentBuilderContext as I } from "../context/AgentBuilderContext.js";
4
4
  import { buildAgentMentionItems as T, appTypeLabel as $ } from "../utils/mentionSerialization.js";
5
- import { MentionEditor as d } from "./MentionEditor.js";
6
- const E = ({
7
- fieldKey: o,
5
+ import { MentionEditor as h } from "./MentionEditor.js";
6
+ const L = ({
7
+ fieldKey: e,
8
8
  label: m,
9
- placeholder: c,
10
- maxLength: p,
11
- minHeight: b,
12
- ...g
9
+ placeholder: b,
10
+ maxLength: c,
11
+ minHeight: g,
12
+ ...p
13
13
  }) => {
14
14
  const {
15
15
  value: t,
16
16
  patch: n,
17
17
  availableTools: a,
18
- availableSubAgents: i,
19
- applicationType: r,
18
+ availableSubAgents: r,
19
+ applicationType: i,
20
20
  mentionResetKey: M,
21
- registerMentionField: l,
22
- notifyMentionFocus: f
23
- } = I(), v = C(
21
+ registerMentionField: u,
22
+ notifyMentionFocus: A,
23
+ onCreateSubAgent: C,
24
+ requestCreateSubAgent: v
25
+ } = I(), S = x(
24
26
  () => T(
25
27
  a,
26
- i,
27
- $(r)
28
+ r,
29
+ $(i)
28
30
  ),
29
- [a, i, r]
30
- ), F = u(
31
- (e) => l(o, e),
32
- [l, o]
33
- ), x = u(
34
- (e, s) => {
35
- e === "tool" ? t.tools.includes(s) || n({ tools: [...t.tools, s] }) : t.subagents.includes(s) || n({ subagents: [...t.subagents, s] });
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] });
36
38
  },
37
39
  [n, t.tools, t.subagents]
38
40
  );
39
- return /* @__PURE__ */ A(
40
- d,
41
+ return /* @__PURE__ */ d(
42
+ h,
41
43
  {
42
44
  label: m,
43
- value: t[o] ?? "",
44
- onChange: (e) => n({ [o]: e }),
45
- maxLength: p,
46
- placeholder: c,
47
- minHeight: b,
48
- resetKey: `${t.id}:${o}:${M}`,
49
- mentionItems: v,
45
+ value: t[e] ?? "",
46
+ onChange: (o) => n({ [e]: o }),
47
+ maxLength: c,
48
+ placeholder: b,
49
+ minHeight: g,
50
+ resetKey: `${t.id}:${e}:${M}`,
51
+ mentionItems: S,
50
52
  tools: a,
51
- onMentionSelect: x,
52
- onFocus: () => f(o),
53
- registerInsert: F,
54
- "data-test": g["data-test"]
53
+ onMentionSelect: F,
54
+ onFocus: () => A(e),
55
+ registerInsert: f,
56
+ onCreateSubAgent: C ? v : void 0,
57
+ "data-test": p["data-test"]
55
58
  }
56
59
  );
57
60
  };
58
61
  export {
59
- E as MentionField
62
+ L as MentionField
60
63
  };
61
64
  //# sourceMappingURL=MentionField.js.map
@@ -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} = 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\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","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,EAAA,IACGC,EAAA,GAEEC,IAAeC;AAAA,IACpB,MACCC;AAAA,MACCT;AAAA,MACAC;AAAA,MACAS,EAAaR,CAAe;AAAA,IAAA;AAAA,IAE9B,CAACF,GAAgBC,GAAoBC,CAAe;AAAA,EAAA,GAG/CS,IAAiBC;AAAA,IACtB,CAACC,MACAT,EAAqBZ,GAAUqB,CAAE;AAAA,IAClC,CAACT,GAAsBZ,CAAQ;AAAA,EAAA,GAG1BsB,IAAkBF;AAAA,IACvB,CAACG,GAA2BC,MAAe;AAC1C,MAAID,MAAS,SACPjB,EAAM,MAAM,SAASkB,CAAE,KAC3BjB,EAAM,EAAE,OAAO,CAAC,GAAGD,EAAM,OAAOkB,CAAE,GAAG,IAE3BlB,EAAM,UAAU,SAASkB,CAAE,KACtCjB,EAAM,EAAE,WAAW,CAAC,GAAGD,EAAM,WAAWkB,CAAE,GAAG;AAAA,IAE/C;AAAA,IACA,CAACjB,GAAOD,EAAM,OAAOA,EAAM,SAAS;AAAA,EAAA;AAGrC,SACC,gBAAAmB;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,OAAAzB;AAAA,MACA,OAAQK,EAAMN,CAAQ,KAA4B;AAAA,MAClD,UAAU,CAAC2B,MAASpB,EAAM,EAAE,CAACP,CAAQ,GAAG2B,GAA6B;AAAA,MACrE,WAAAxB;AAAA,MACA,aAAAD;AAAA,MACA,WAAAE;AAAA,MACA,UAAU,GAAGE,EAAM,EAAE,IAAIN,CAAQ,IAAIW,CAAe;AAAA,MACpD,cAAAI;AAAA,MACA,OAAOP;AAAA,MACP,iBAAAc;AAAA,MACA,SAAS,MAAMT,EAAmBb,CAAQ;AAAA,MAC1C,gBAAAmB;AAAA,MACA,aAAWd,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\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,5 +1,9 @@
1
1
  import { MentionDropdownRenderProps } from '../../../editor';
2
2
  import { default as React } from 'react';
3
+ type MentionPickerProps = MentionDropdownRenderProps & {
4
+ /** Opens the create-sub-agent drawer (shows a "Create new" row in the Sub-agent view). */
5
+ onCreateSubAgent?: () => void;
6
+ };
3
7
  /**
4
8
  * `@` reference picker. Drills:
5
9
  * root → Tools → <source> (Manifest / Shopify / …) → tool
@@ -9,4 +13,5 @@ import { default as React } from 'react';
9
13
  * Owns keyboard navigation (↑/↓ move, →/Enter activate, ← go back) over the
10
14
  * CURRENTLY visible rows — registered with the editor via `registerKeyHandler`.
11
15
  */
12
- export declare const MentionPicker: React.FC<MentionDropdownRenderProps>;
16
+ export declare const MentionPicker: React.FC<MentionPickerProps>;
17
+ export {};
@@ -1,131 +1,220 @@
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 = [
1
+ import { jsxs as h, jsx as s, Fragment as j } from "react/jsx-runtime";
2
+ import F from "../../../assets/icons/chevronRight.svg.js";
3
+ import G from "../../../assets/icons/searchIcon.svg.js";
4
+ import q from "../../../icons/Arrows/Normal arrows/ArrowLeft.js";
5
+ import T, { useState as w, useMemo as g, useEffect as $, useRef as J } from "react";
6
+ import d from "styled-components";
7
+ import { TitleSmall as Q, BodySecondary as V } from "../../TypographyStyle.js";
8
+ import { COLORS as n } from "../../../constants/Theme.js";
9
+ import { toolSourceLabel as O } from "../utils/mentionSerialization.js";
10
+ import { SOURCE_ICONS as N } from "../utils/sourceIcons.js";
11
+ const W = [
10
12
  { key: "tool", label: "Tools" },
11
13
  { key: "subagent", label: "Sub-agent" }
12
- ], u = (t) => t.meta, L = (t) => u(t)?.plainLabel ?? t.label, H = ({
13
- items: t,
14
- onSelect: m,
15
- registerKeyHandler: d
14
+ ], b = (r) => r.meta, R = (r) => b(r)?.plainLabel ?? r.label, X = "__bik_create_subagent__", fe = ({
15
+ items: r,
16
+ onSelect: I,
17
+ registerKeyHandler: m,
18
+ onClose: _,
19
+ onCreateSubAgent: f
16
20
  }) => {
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
- [t]
20
- ), f = c(
21
- () => t.filter((e) => u(e)?.kind === "subagent"),
22
- [t]
23
- ), S = c(() => {
24
- const e = [];
25
- return a.forEach((n) => {
26
- const b = u(n)?.source ?? "other";
27
- e.includes(b) || e.push(b);
28
- }), e;
29
- }, [a]), g = c(
30
- () => D.filter(
31
- (e) => e.key === "tool" ? a.length > 0 : f.length > 0
21
+ const [z, S] = w(null), [l, A] = w(null), [x, u] = w(0), [k, B] = w(""), p = g(
22
+ () => r.filter((t) => b(t)?.kind === "tool"),
23
+ [r]
24
+ ), y = g(
25
+ () => r.filter((t) => b(t)?.kind === "subagent"),
26
+ [r]
27
+ ), L = g(() => {
28
+ const t = [];
29
+ return p.forEach((e) => {
30
+ const c = b(e)?.source ?? "other";
31
+ t.includes(c) || t.push(c);
32
+ }), t;
33
+ }, [p]), v = g(
34
+ () => W.filter(
35
+ (t) => t.key === "tool" ? p.length > 0 : y.length > 0 || !!f
32
36
  ),
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) => ({
35
- id: String(e.id),
36
- label: L(e),
37
- drillsIn: !1,
38
- onActivate: () => m(e)
39
- })) : l ? a.filter((e) => (u(e)?.source ?? "other") === l).map((e) => ({
40
- id: String(e.id),
41
- label: L(e),
42
- drillsIn: !1,
43
- onActivate: () => m(e)
44
- })) : S.map((e) => ({
45
- id: e,
46
- label: R(e),
47
- drillsIn: !0,
48
- onActivate: () => v(e)
49
- })) : g.map((e) => ({
50
- id: e.key,
51
- label: e.label,
52
- drillsIn: !0,
53
- onActivate: () => {
54
- y(e.key), v(null);
37
+ [p.length, y.length, f]
38
+ ), C = v.length === 1 ? v[0].key : null, i = z ?? C, a = i ? i === "subagent" ? C ? null : { title: "Sub-agent", onBack: () => S(null) } : l ? {
39
+ title: O(l),
40
+ onBack: () => A(null),
41
+ icon: N[l]
42
+ } : C ? null : { title: "Tools", onBack: () => S(null) } : null, o = g(() => {
43
+ if (!i)
44
+ return v.map((e) => ({
45
+ id: e.key,
46
+ label: e.label,
47
+ drillsIn: !0,
48
+ onActivate: () => {
49
+ S(e.key), A(null);
50
+ }
51
+ }));
52
+ if (i === "subagent") {
53
+ const e = y.map((c) => ({
54
+ id: String(c.id),
55
+ label: R(c),
56
+ drillsIn: !1,
57
+ onActivate: () => I(c)
58
+ }));
59
+ return f && e.push({
60
+ id: X,
61
+ label: "Create new",
62
+ drillsIn: !1,
63
+ isCreate: !0,
64
+ onActivate: () => {
65
+ _?.(), f();
66
+ }
67
+ }), e;
55
68
  }
56
- })), [
57
- o,
58
- g,
69
+ if (!l)
70
+ return L.map((e) => ({
71
+ id: e,
72
+ label: O(e),
73
+ drillsIn: !0,
74
+ icon: N[e],
75
+ onActivate: () => A(e)
76
+ }));
77
+ const t = k.trim().toLowerCase();
78
+ return p.filter((e) => (b(e)?.source ?? "other") === l).filter((e) => !t || R(e).toLowerCase().includes(t)).map((e) => ({
79
+ id: String(e.id),
80
+ label: R(e),
81
+ drillsIn: !1,
82
+ onActivate: () => I(e)
83
+ }));
84
+ }, [
85
+ i,
86
+ v,
59
87
  l,
60
- a,
61
- f,
62
- S,
63
- m
88
+ k,
89
+ p,
90
+ y,
91
+ L,
92
+ I,
93
+ _,
94
+ f
64
95
  ]);
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;
71
- switch (e.key) {
96
+ $(() => u(0), [i, l, k, r]), $(() => B(""), [i, l]);
97
+ const P = J({ rows: o, activeIndex: x, header: a });
98
+ P.current = { rows: o, activeIndex: x, header: a }, $(() => {
99
+ if (m)
100
+ return m((t) => {
101
+ const { rows: e, activeIndex: c, header: D } = P.current;
102
+ switch (t.key) {
72
103
  case "ArrowDown":
73
- return n.length && p((I) => (I + 1) % n.length), !0;
104
+ return e.length && u((E) => (E + 1) % e.length), !0;
74
105
  case "ArrowUp":
75
- return n.length && p((I) => (I + n.length - 1) % n.length), !0;
106
+ return e.length && u((E) => (E + e.length - 1) % e.length), !0;
76
107
  case "ArrowRight":
77
108
  case "Enter":
78
- return n[b]?.onActivate(), !0;
109
+ return e[c]?.onActivate(), !0;
79
110
  case "ArrowLeft":
80
- return B ? (B.onBack(), !0) : !1;
111
+ return D ? (D.onBack(), !0) : !1;
81
112
  default:
82
113
  return !1;
83
114
  }
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,
115
+ }), () => m(null);
116
+ }, [m]);
117
+ const M = i ? o.length && !o[0].drillsIn ? "items" : "sources" : "categories", U = i === "tool" && !!l;
118
+ return /* @__PURE__ */ h(Y, { className: `bik-mention-picker bik-mention-picker--${M}`, children: [
119
+ a && /* @__PURE__ */ h(
120
+ ne,
90
121
  {
91
122
  type: "button",
92
- onClick: s.onBack,
93
- style: { background: r.surface.subdued },
123
+ onClick: a.onBack,
124
+ style: { background: n.surface.subdued },
94
125
  children: [
95
- /* @__PURE__ */ x(T, { width: 12, height: 12 }),
96
- /* @__PURE__ */ h(N, { children: [
126
+ a.icon ? T.createElement(a.icon.Icon, {
127
+ width: a.icon.w,
128
+ height: a.icon.h
129
+ }) : /* @__PURE__ */ s(
130
+ q,
131
+ {
132
+ width: 20,
133
+ height: 20,
134
+ color: n.content.primary
135
+ }
136
+ ),
137
+ /* @__PURE__ */ h(Q, { children: [
97
138
  " ",
98
- s.title
139
+ a.title
99
140
  ] })
100
141
  ]
101
142
  }
102
143
  ),
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,
144
+ U && /* @__PURE__ */ h(Z, { children: [
145
+ /* @__PURE__ */ s(
146
+ G,
147
+ {
148
+ width: 20,
149
+ height: 20,
150
+ color: n.content.placeholder
151
+ }
152
+ ),
153
+ /* @__PURE__ */ s(
154
+ K,
155
+ {
156
+ autoFocus: !0,
157
+ value: k,
158
+ placeholder: "Search",
159
+ "data-test": "mention-picker-search",
160
+ onChange: (t) => B(t.target.value),
161
+ onKeyDown: (t) => {
162
+ o.length && (t.key === "ArrowDown" ? (t.preventDefault(), u((e) => (e + 1) % o.length)) : t.key === "ArrowUp" ? (t.preventDefault(), u((e) => (e + o.length - 1) % o.length)) : t.key === "Enter" && (t.preventDefault(), o[x]?.onActivate()));
163
+ }
164
+ }
165
+ )
166
+ ] }),
167
+ o.length === 0 ? /* @__PURE__ */ s(re, { children: i === "subagent" ? "No sub-agents available" : "No tools available" }) : o.map((t, e) => /* @__PURE__ */ s(
168
+ H,
105
169
  {
106
170
  type: "button",
107
- $active: n === w,
108
- onMouseEnter: () => p(n),
109
- onClick: e.onActivate,
110
- children: [
111
- /* @__PURE__ */ x(z, { color: r.content.primary, children: e.label }),
112
- e.drillsIn && /* @__PURE__ */ x(j, { width: 12, height: 12 })
113
- ]
171
+ $active: e === x,
172
+ onMouseEnter: () => u(e),
173
+ onClick: t.onActivate,
174
+ children: t.isCreate ? /* @__PURE__ */ s(te, { children: t.label }) : /* @__PURE__ */ h(j, { children: [
175
+ /* @__PURE__ */ h(ee, { children: [
176
+ t.icon && T.createElement(t.icon.Icon, {
177
+ width: t.icon.w,
178
+ height: t.icon.h
179
+ }),
180
+ /* @__PURE__ */ s(V, { color: n.content.primary, children: t.label })
181
+ ] }),
182
+ t.drillsIn && /* @__PURE__ */ s(F, { width: 12, height: 12 })
183
+ ] })
114
184
  },
115
- e.id
185
+ t.id
116
186
  ))
117
187
  ] });
118
- }, G = k.div`
188
+ }, Y = d.div`
119
189
  display: flex;
120
190
  flex-direction: column;
121
191
  min-width: 240px;
122
192
  max-height: 280px;
123
193
  overflow-y: auto;
124
- background: ${r.surface.standard};
125
- border: 1px solid ${r.stroke.primary};
194
+ background: ${n.surface.standard};
195
+ border: 1px solid ${n.stroke.primary};
126
196
  border-radius: 4px;
127
197
  box-shadow: 0px -2px 8px 0px #0000001f;
128
- `, U = k.button`
198
+ `, Z = d.div`
199
+ display: flex;
200
+ align-items: center;
201
+ gap: 8px;
202
+ padding: 10px 12px;
203
+ border-bottom: 1px solid ${n.stroke.primary};
204
+ `, K = d.input`
205
+ flex: 1;
206
+ min-width: 0;
207
+ border: none;
208
+ outline: none;
209
+ background: transparent;
210
+ font-family: Inter;
211
+ font-size: 14px;
212
+ color: ${n.content.primary};
213
+
214
+ &::placeholder {
215
+ color: ${n.content.placeholder};
216
+ }
217
+ `, H = d.button`
129
218
  display: flex;
130
219
  justify-content: space-between;
131
220
  align-items: center;
@@ -134,20 +223,32 @@ const D = [
134
223
  padding: 8px 10px;
135
224
  height: 48px;
136
225
  border: none;
137
- border-bottom: 1px solid ${r.stroke.primary};
138
- background: ${(t) => t.$active ? r.surface.subdued : "transparent"};
226
+ border-bottom: 1px solid ${n.stroke.primary};
227
+ background: ${(r) => r.$active ? n.surface.subdued : "transparent"};
139
228
  cursor: pointer;
140
229
  text-align: left;
141
230
 
142
231
  &:hover {
143
- background: ${r.surface.subdued};
232
+ background: ${n.surface.subdued};
144
233
  }
145
- `, q = k.button`
234
+ `, ee = d.div`
235
+ display: flex;
236
+ align-items: center;
237
+ gap: 12px;
238
+ min-width: 0;
239
+ `, te = d.div`
240
+ width: 100%;
241
+ text-align: center;
242
+ color: ${n.content.brand};
243
+ font-family: Inter;
244
+ font-size: 14px;
245
+ font-weight: 600;
246
+ `, ne = d.button`
146
247
  display: flex;
147
248
  align-items: center;
148
249
  padding: 12px 16px;
149
250
  border: none;
150
- border-bottom: 1px solid ${r.stroke.primary};
251
+ border-bottom: 1px solid ${n.stroke.primary};
151
252
  background: transparent;
152
253
  cursor: pointer;
153
254
  font-family: Inter;
@@ -155,13 +256,13 @@ const D = [
155
256
  font-weight: 600;
156
257
  height: 48px;
157
258
  gap: 4px;
158
- `, F = k.div`
259
+ `, re = d.div`
159
260
  padding: 12px 10px;
160
261
  font-family: Inter;
161
262
  font-size: 13px;
162
- color: ${r.content.secondary};
263
+ color: ${n.content.secondary};
163
264
  `;
164
265
  export {
165
- H as MentionPicker
266
+ fe as MentionPicker
166
267
  };
167
268
  //# 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// 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":";;;;;;;;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,GAIJQ,IAAsBP;AAAA,IAC3B,MACChB,EAAW;AAAA,MAAO,CAACwB,MAClBA,EAAE,QAAQ,SAAST,EAAM,SAAS,IAAIG,EAAU,SAAS;AAAA,IAAA;AAAA,IAE3D,CAACH,EAAM,QAAQG,EAAU,MAAM;AAAA,EAAA,GAE1BO,IACLF,EAAoB,WAAW,IAAIA,EAAoB,CAAC,EAAE,MAAM,MAC3DG,IAAiBlB,KAAYiB,GAI7BE,IAAwDD,IAE3DA,MAAmB,aACnBD,IACC,OACA,EAAE,OAAO,aAAa,QAAQ,MAAMhB,EAAY,IAAI,EAAA,IACrDE,IACA,EAAE,OAAOiB,EAAgBjB,CAAM,GAAG,QAAQ,MAAMC,EAAU,IAAI,EAAA,IAC9Da,IACA,OACA,EAAE,OAAO,SAAS,QAAQ,MAAMhB,EAAY,IAAI,EAAA,IAThD,MAYGoB,IAAyBb,EAAQ,MACjCU,IAWDA,MAAmB,aACfR,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,OAAOM,EAAgBN,CAAC;AAAA,IACxB,UAAU;AAAA,IACV,YAAY,MAAMV,EAAUU,CAAC;AAAA,EAAA,EAC5B,IAxBKC,EAAoB,IAAI,CAACC,OAAO;AAAA,IACtC,IAAIA,EAAE;AAAA,IACN,OAAOA,EAAE;AAAA,IACT,UAAU;AAAA,IACV,YAAY,MAAM;AACjB,MAAAf,EAAYe,EAAE,GAAG,GACjBZ,EAAU,IAAI;AAAA,IACf;AAAA,EAAA,EACC,GA0BD;AAAA,IACFc;AAAA,IACAH;AAAA,IACAZ;AAAA,IACAI;AAAA,IACAG;AAAA,IACAC;AAAA,IACAb;AAAA,EAAA,CACA;AAGD,EAAAwB,EAAU,MAAMhB,EAAe,CAAC,GAAG,CAACY,GAAgBf,GAAQN,CAAK,CAAC;AAGlE,QAAM0B,IAASC,EAAO,EAAE,MAAAH,GAAM,aAAAhB,GAAa,QAAAc,GAAQ;AACnD,EAAAI,EAAO,UAAU,EAAE,MAAAF,GAAM,aAAAhB,GAAa,QAAAc,EAAA,GAEtCG,EAAU,MAAM;AACf,QAAKvB;AAGL,aAAAA,EAAmB,CAAC0B,MAAU;AAC7B,cAAM,EAAE,MAAMC,GAAG,aAAajB,GAAG,QAAQkB,MAAMJ,EAAO;AACtD,gBAAQE,EAAM,KAAA;AAAA,UACb,KAAK;AACJ,mBAAIC,EAAE,UAAQpB,EAAe,CAACsB,OAAOA,IAAI,KAAKF,EAAE,MAAM,GAC/C;AAAA,UACR,KAAK;AACJ,mBAAIA,EAAE,UAAQpB,EAAe,CAACsB,OAAOA,IAAIF,EAAE,SAAS,KAAKA,EAAE,MAAM,GAC1D;AAAA,UACR,KAAK;AAAA,UACL,KAAK;AACJ,mBAAAA,EAAEjB,CAAC,GAAG,WAAA,GACC;AAAA,UACR,KAAK;AACJ,mBAAIkB,KACHA,EAAE,OAAA,GACK,MAED;AAAA,UACR;AACC,mBAAO;AAAA,QAAA;AAAA,MAEV,CAAC,GACM,MAAM5B,EAAmB,IAAI;AAAA,EACrC,GAAG,CAACA,CAAkB,CAAC;AAEvB,QAAM8B,IAAWX,IAEdG,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,UAAAnB,MAAmB,aACjB,4BACA,qBAAA,CACJ,IAEAG,EAAK,IAAI,CAACiB,GAAK7B,MACd,gBAAAqB;AAAA,MAACS;AAAA,MAAA;AAAA,QAEA,MAAK;AAAA,QACL,SAAS9B,MAAMJ;AAAA,QACf,cAAc,MAAMC,EAAeG,CAAC;AAAA,QACpC,SAAS6B,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 SearchIcon from '@src/assets/icons/searchIcon.svg';\nimport type { MentionDropdownRenderProps, MentionItem } from '@src/editor';\nimport SvgArrowLeft from '@src/icons/Arrows/Normal arrows/ArrowLeft';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { BodySecondary, TitleSmall } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tMentionKindMeta,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\nimport { SOURCE_ICONS, SourceIcon } from '../utils/sourceIcons';\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\t/** Leading brand glyph (source rows only). */\n\ticon?: SourceIcon;\n\t/** Brand-coloured \"Create new\" action row (not a selectable item). */\n\tisCreate?: boolean;\n\tonActivate: () => void;\n};\n\n/** Sentinel id for the sub-agent \"Create new\" row. */\nconst CREATE_SUBAGENT_ID = '__bik_create_subagent__';\n\ntype MentionPickerProps = MentionDropdownRenderProps & {\n\t/** Opens the create-sub-agent drawer (shows a \"Create new\" row in the Sub-agent view). */\n\tonCreateSubAgent?: () => void;\n};\n\n/**\n * `@` reference picker. Drills:\n * root → Tools → <source> (Manifest / Shopify / …) → tool\n * → Sub-agent → sub-agent\n * (\"Add condition\" and \"Variables\" are intentionally not shown yet.)\n *\n * Owns keyboard navigation (↑/↓ move, →/Enter activate, ← go back) over the\n * CURRENTLY visible rows — registered with the editor via `registerKeyHandler`.\n */\nexport const MentionPicker: React.FC<MentionPickerProps> = ({\n\titems,\n\tonSelect,\n\tregisterKeyHandler,\n\tonClose,\n\tonCreateSubAgent,\n}) => {\n\tconst [category, setCategory] = useState<Category | null>(null);\n\tconst [source, setSource] = useState<string | null>(null);\n\tconst [activeIndex, setActiveIndex] = useState(0);\n\t// Search box shown inside a source's tool list (Manifest / Shopify); filters\n\t// that source's tools by name.\n\tconst [search, setSearch] = useState('');\n\n\tconst tools = useMemo(\n\t\t() => items.filter((i) => metaOf(i)?.kind === 'tool'),\n\t\t[items],\n\t);\n\tconst subAgents = useMemo(\n\t\t() => items.filter((i) => metaOf(i)?.kind === 'subagent'),\n\t\t[items],\n\t);\n\tconst sources = useMemo(() => {\n\t\tconst acc: string[] = [];\n\t\ttools.forEach((t) => {\n\t\t\tconst s = metaOf(t)?.source ?? 'other';\n\t\t\tif (!acc.includes(s)) {\n\t\t\t\tacc.push(s);\n\t\t\t}\n\t\t});\n\t\treturn acc;\n\t}, [tools]);\n\n\t// Show a category when it has items — and ALWAYS show Sub-agent when creating\n\t// one is possible, so an agent with no sub-agents yet still gets the root\n\t// \"Tools / Sub-agent\" choice (with a \"Create new\" inside). When only one is\n\t// available (e.g. the sub-agent drawer offers tools only) the selector is skipped.\n\tconst availableCategories = useMemo(\n\t\t() =>\n\t\t\tCATEGORIES.filter((c) =>\n\t\t\t\tc.key === 'tool'\n\t\t\t\t\t? tools.length > 0\n\t\t\t\t\t: subAgents.length > 0 || !!onCreateSubAgent,\n\t\t\t),\n\t\t[tools.length, subAgents.length, onCreateSubAgent],\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\t// In a source detail view the leading glyph is the source icon (per design),\n\t// otherwise it's a back chevron.\n\tconst header: {\n\t\ttitle: string;\n\t\tonBack: () => void;\n\t\ticon?: SourceIcon;\n\t} | null = !activeCategory\n\t\t? null\n\t\t: activeCategory === 'subagent'\n\t\t? soleCategory\n\t\t\t? null\n\t\t\t: { title: 'Sub-agent', onBack: () => setCategory(null) }\n\t\t: source\n\t\t? {\n\t\t\t\ttitle: toolSourceLabel(source),\n\t\t\t\tonBack: () => setSource(null),\n\t\t\t\ticon: SOURCE_ICONS[source],\n\t\t }\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\tconst leaves: PickerRowModel[] = 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\t// \"Create new\" opens the drawer — first dismiss the menu (strips the \"@\").\n\t\t\tif (onCreateSubAgent) {\n\t\t\t\tleaves.push({\n\t\t\t\t\tid: CREATE_SUBAGENT_ID,\n\t\t\t\t\tlabel: 'Create new',\n\t\t\t\t\tdrillsIn: false,\n\t\t\t\t\tisCreate: true,\n\t\t\t\t\tonActivate: () => {\n\t\t\t\t\t\tonClose?.();\n\t\t\t\t\t\tonCreateSubAgent();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn leaves;\n\t\t}\n\t\tif (!source) {\n\t\t\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\ticon: SOURCE_ICONS[s],\n\t\t\t\tonActivate: () => setSource(s),\n\t\t\t}));\n\t\t}\n\t\tconst q = search.trim().toLowerCase();\n\t\treturn tools\n\t\t\t.filter((t) => (metaOf(t)?.source ?? 'other') === source)\n\t\t\t.filter((t) => !q || rowLabel(t).toLowerCase().includes(q))\n\t\t\t.map((item) => ({\n\t\t\t\tid: String(item.id),\n\t\t\t\tlabel: rowLabel(item),\n\t\t\t\tdrillsIn: false,\n\t\t\t\tonActivate: () => onSelect(item),\n\t\t\t}));\n\t}, [\n\t\tactiveCategory,\n\t\tavailableCategories,\n\t\tsource,\n\t\tsearch,\n\t\ttools,\n\t\tsubAgents,\n\t\tsources,\n\t\tonSelect,\n\t\tonClose,\n\t\tonCreateSubAgent,\n\t]);\n\n\t// Reset highlight whenever the view (or filtered result set) changes.\n\tuseEffect(() => setActiveIndex(0), [activeCategory, source, search, items]);\n\t// Clear the search box when leaving a source view.\n\tuseEffect(() => setSearch(''), [activeCategory, source]);\n\n\t// Keep the latest rows/index reachable from the stable key handler.\n\tconst navRef = useRef({ rows, activeIndex, header });\n\tnavRef.current = { rows, activeIndex, header };\n\n\tuseEffect(() => {\n\t\tif (!registerKeyHandler) {\n\t\t\treturn;\n\t\t}\n\t\tregisterKeyHandler((event) => {\n\t\t\tconst { rows: r, activeIndex: i, header: h } = navRef.current;\n\t\t\tswitch (event.key) {\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tif (r.length) setActiveIndex((p) => (p + 1) % r.length);\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tif (r.length) setActiveIndex((p) => (p + r.length - 1) % r.length);\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'Enter':\n\t\t\t\t\tr[i]?.onActivate();\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\tif (h) {\n\t\t\t\t\t\th.onBack();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn () => registerKeyHandler(null);\n\t}, [registerKeyHandler]);\n\n\tconst variant = !activeCategory\n\t\t? 'categories'\n\t\t: rows.length && !rows[0].drillsIn\n\t\t? 'items'\n\t\t: 'sources';\n\n\t// Search lives inside a source's tool list (Manifest / Shopify).\n\tconst showSearch = activeCategory === 'tool' && !!source;\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{header.icon ? (\n\t\t\t\t\t\tReact.createElement(header.icon.Icon, {\n\t\t\t\t\t\t\twidth: header.icon.w,\n\t\t\t\t\t\t\theight: header.icon.h,\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SvgArrowLeft\n\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\tcolor={COLORS.content.primary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<TitleSmall> {header.title}</TitleSmall>\n\t\t\t\t</PickerBack>\n\t\t\t)}\n\t\t\t{showSearch && (\n\t\t\t\t<PickerSearchRow>\n\t\t\t\t\t<SearchIcon\n\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\theight={20}\n\t\t\t\t\t\tcolor={COLORS.content.placeholder}\n\t\t\t\t\t/>\n\t\t\t\t\t<PickerSearchInput\n\t\t\t\t\t\t// Focus on open so the user can type immediately (appears only\n\t\t\t\t\t\t// after they drill into a source).\n\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\tvalue={search}\n\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\tdata-test=\"mention-picker-search\"\n\t\t\t\t\t\tonChange={(e) => setSearch(e.target.value)}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (!rows.length) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (e.key === 'ArrowDown') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tsetActiveIndex((p) => (p + 1) % rows.length);\n\t\t\t\t\t\t\t} else if (e.key === 'ArrowUp') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tsetActiveIndex((p) => (p + rows.length - 1) % rows.length);\n\t\t\t\t\t\t\t} else if (e.key === 'Enter') {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\trows[activeIndex]?.onActivate();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</PickerSearchRow>\n\t\t\t)}\n\t\t\t{rows.length === 0 ? (\n\t\t\t\t<PickerEmpty>\n\t\t\t\t\t{activeCategory === 'subagent'\n\t\t\t\t\t\t? 'No sub-agents available'\n\t\t\t\t\t\t: 'No tools available'}\n\t\t\t\t</PickerEmpty>\n\t\t\t) : (\n\t\t\t\trows.map((row, i) => (\n\t\t\t\t\t<PickerRow\n\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t$active={i === activeIndex}\n\t\t\t\t\t\tonMouseEnter={() => setActiveIndex(i)}\n\t\t\t\t\t\tonClick={row.onActivate}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.isCreate ? (\n\t\t\t\t\t\t\t<CreateRowText>{row.label}</CreateRowText>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<PickerRowMain>\n\t\t\t\t\t\t\t\t\t{row.icon &&\n\t\t\t\t\t\t\t\t\t\tReact.createElement(row.icon.Icon, {\n\t\t\t\t\t\t\t\t\t\t\twidth: row.icon.w,\n\t\t\t\t\t\t\t\t\t\t\theight: row.icon.h,\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t<BodySecondary color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\t\t\t{row.label}\n\t\t\t\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t\t\t\t</PickerRowMain>\n\t\t\t\t\t\t\t\t{row.drillsIn && <ChevronRight width={12} height={12} />}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</PickerRow>\n\t\t\t\t))\n\t\t\t)}\n\t\t</PickerCard>\n\t);\n};\n\nconst PickerCard = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\tmin-width: 240px;\n\tmax-height: 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\n// Search box at the top of a source's tool list (Manifest / Shopify).\nconst PickerSearchRow = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 10px 12px;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n`;\n\nconst PickerSearchInput = styled.input`\n\tflex: 1;\n\tmin-width: 0;\n\tborder: none;\n\toutline: none;\n\tbackground: transparent;\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tcolor: ${COLORS.content.primary};\n\n\t&::placeholder {\n\t\tcolor: ${COLORS.content.placeholder};\n\t}\n`;\n\nconst PickerRow = styled.button<{ $active?: boolean }>`\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tgap: 2px;\n\twidth: 100%;\n\tpadding: 8px 10px;\n\theight: 48px;\n\tborder: none;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tbackground: ${(p) => (p.$active ? COLORS.surface.subdued : 'transparent')};\n\tcursor: pointer;\n\ttext-align: left;\n\n\t&:hover {\n\t\tbackground: ${COLORS.surface.subdued};\n\t}\n`;\n\n// Left cluster: leading source glyph + label (chevron stays right via PickerRow).\nconst PickerRowMain = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n\tmin-width: 0;\n`;\n\n// \"Create new\" — centered brand text, no icon (matches the side-panel dropdown).\nconst CreateRowText = styled.div`\n\twidth: 100%;\n\ttext-align: center;\n\tcolor: ${COLORS.content.brand};\n\tfont-family: Inter;\n\tfont-size: 14px;\n\tfont-weight: 600;\n`;\n\nconst PickerBack = styled.button`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 12px 16px;\n\tborder: none;\n\tborder-bottom: 1px solid ${COLORS.stroke.primary};\n\tbackground: transparent;\n\tcursor: pointer;\n\tfont-family: Inter;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\theight: 48px;\n\tgap: 4px;\n`;\n\nconst PickerEmpty = styled.div`\n\tpadding: 12px 10px;\n\tfont-family: Inter;\n\tfont-size: 13px;\n\tcolor: ${COLORS.content.secondary};\n`;\n"],"names":["CATEGORIES","metaOf","item","rowLabel","CREATE_SUBAGENT_ID","MentionPicker","items","onSelect","registerKeyHandler","onClose","onCreateSubAgent","category","setCategory","useState","source","setSource","activeIndex","setActiveIndex","search","setSearch","tools","useMemo","i","subAgents","sources","acc","t","s","availableCategories","c","soleCategory","activeCategory","header","toolSourceLabel","SOURCE_ICONS","rows","leaves","q","useEffect","navRef","useRef","event","r","h","p","variant","showSearch","jsxs","PickerCard","PickerBack","COLORS","React","jsx","SvgArrowLeft","TitleSmall","PickerSearchRow","SearchIcon","PickerSearchInput","e","PickerEmpty","row","PickerRow","CreateRowText","Fragment","PickerRowMain","BodySecondary","ChevronRight","styled"],"mappings":"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"}
@@ -1,8 +1,17 @@
1
1
  import { default as React } from 'react';
2
2
  import { SingleOption } from '../../dropdown/type';
3
+ import { SourceIcon } from '../utils/sourceIcons';
3
4
  export interface SelectableItem {
4
5
  id: string;
5
6
  label: string;
7
+ /** Leading brand glyph (e.g. a tool's source icon). */
8
+ icon?: SourceIcon;
9
+ }
10
+ /** A tool source for the empty-state picker (Tools): a button → its searchable list. */
11
+ export interface SourceGroup {
12
+ source: string;
13
+ label: string;
14
+ options: SingleOption[];
6
15
  }
7
16
  interface SelectableListSectionProps {
8
17
  title: string;
@@ -27,10 +36,17 @@ interface SelectableListSectionProps {
27
36
  onSelect: () => void;
28
37
  };
29
38
  /**
30
- * When provided, each row's kebab menu gains a "Configure" action (above
31
- * "Delete"). Omit for tools (Delete only).
39
+ * When provided, each row shows an edit (Configure) icon next to Delete.
40
+ * Omit for tools (Delete only).
32
41
  */
33
42
  onConfigure?: (id: string) => void;
43
+ /**
44
+ * Tool sources (e.g. Manifest / Shopify). When set, the empty state shows a
45
+ * button per source; clicking one reveals a searchable dropdown of just that
46
+ * source's options. Selecting calls `onAdd`. Takes precedence over the plain
47
+ * `addableOptions` dropdown.
48
+ */
49
+ sourceGroups?: SourceGroup[];
34
50
  }
35
51
  export declare const SelectableListSection: React.FC<SelectableListSectionProps>;
36
52
  export {};