@arcadeai/design-system 3.46.0 → 3.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +1 -1
  2. package/dist/{toggle-C4ztdcN-.js → Toggle-CyMSF-Z7.js} +14 -46
  3. package/dist/ToolbarRootContext-DVNA8Vkb.js +13 -0
  4. package/dist/{alert-dialog-oB_cE8NP.js → alert-dialog-tBMDYzJ3.js} +1 -1
  5. package/dist/assets/index.css +1 -1
  6. package/dist/assets/tokens.css +1 -1
  7. package/dist/assets/variables.css +1 -1
  8. package/dist/components/index.js +236 -215
  9. package/dist/components/ui/atoms/alert-dialog.js +1 -1
  10. package/dist/components/ui/atoms/avatar-notification-badge.d.ts +2 -2
  11. package/dist/components/ui/atoms/avatar-notification-badge.d.ts.map +1 -1
  12. package/dist/components/ui/atoms/avatar-notification-badge.js +21 -0
  13. package/dist/components/ui/atoms/dropdown-menu.js +1 -1
  14. package/dist/components/ui/atoms/filter-chip.d.ts +16 -0
  15. package/dist/components/ui/atoms/filter-chip.d.ts.map +1 -0
  16. package/dist/components/ui/atoms/filter-chip.js +37 -0
  17. package/dist/components/ui/atoms/index.d.ts +4 -0
  18. package/dist/components/ui/atoms/index.d.ts.map +1 -1
  19. package/dist/components/ui/atoms/index.js +193 -189
  20. package/dist/components/ui/atoms/mobile-tooltip.js +1 -1
  21. package/dist/components/ui/atoms/popover.js +1 -1
  22. package/dist/components/ui/atoms/removable-chip.d.ts +38 -0
  23. package/dist/components/ui/atoms/removable-chip.d.ts.map +1 -0
  24. package/dist/components/ui/atoms/removable-chip.js +36 -0
  25. package/dist/components/ui/atoms/scroll-area.d.ts +7 -1
  26. package/dist/components/ui/atoms/scroll-area.d.ts.map +1 -1
  27. package/dist/components/ui/atoms/scroll-area.js +1 -1
  28. package/dist/components/ui/atoms/select.js +1 -1
  29. package/dist/components/ui/atoms/toggle-group.d.ts +29 -0
  30. package/dist/components/ui/atoms/toggle-group.d.ts.map +1 -0
  31. package/dist/components/ui/atoms/toggle-group.js +3 -0
  32. package/dist/components/ui/atoms/toggle.js +36 -2
  33. package/dist/components/ui/atoms/unoptimized-marker.d.ts +16 -0
  34. package/dist/components/ui/atoms/unoptimized-marker.d.ts.map +1 -0
  35. package/dist/components/ui/atoms/unoptimized-marker.js +20 -0
  36. package/dist/components/ui/index.d.ts +1 -0
  37. package/dist/components/ui/index.d.ts.map +1 -1
  38. package/dist/components/ui/index.js +236 -215
  39. package/dist/components/ui/molecules/confirm-popover.js +1 -1
  40. package/dist/components/ui/molecules/date-time-picker.js +1 -1
  41. package/dist/components/ui/molecules/empty-state.d.ts +28 -3
  42. package/dist/components/ui/molecules/empty-state.d.ts.map +1 -1
  43. package/dist/components/ui/molecules/empty-state.js +25 -19
  44. package/dist/components/ui/molecules/index.d.ts +30 -0
  45. package/dist/components/ui/molecules/index.d.ts.map +1 -1
  46. package/dist/components/ui/molecules/index.js +25 -10
  47. package/dist/components/ui/molecules/mcp-server-picker/category-filter-menu.d.ts +31 -0
  48. package/dist/components/ui/molecules/mcp-server-picker/category-filter-menu.d.ts.map +1 -0
  49. package/dist/components/ui/molecules/mcp-server-picker/category-filter-menu.js +106 -0
  50. package/dist/components/ui/molecules/mcp-server-picker/category-filter.d.ts +18 -0
  51. package/dist/components/ui/molecules/mcp-server-picker/category-filter.d.ts.map +1 -0
  52. package/dist/components/ui/molecules/mcp-server-picker/category-filter.js +34 -0
  53. package/dist/components/ui/molecules/mcp-server-picker/recommended-toolkits-chip.d.ts +53 -0
  54. package/dist/components/ui/molecules/mcp-server-picker/recommended-toolkits-chip.d.ts.map +1 -0
  55. package/dist/components/ui/molecules/mcp-server-picker/recommended-toolkits-chip.js +91 -0
  56. package/dist/components/ui/molecules/mcp-server-picker/recommended-tools.d.ts +52 -0
  57. package/dist/components/ui/molecules/mcp-server-picker/recommended-tools.d.ts.map +1 -0
  58. package/dist/components/ui/molecules/mcp-server-picker/recommended-tools.js +103 -0
  59. package/dist/components/ui/molecules/mcp-server-picker/review-count-chip.d.ts +22 -0
  60. package/dist/components/ui/molecules/mcp-server-picker/review-count-chip.d.ts.map +1 -0
  61. package/dist/components/ui/molecules/mcp-server-picker/review-count-chip.js +42 -0
  62. package/dist/components/ui/molecules/mcp-server-picker/search-scope-tabs.d.ts +18 -0
  63. package/dist/components/ui/molecules/mcp-server-picker/search-scope-tabs.d.ts.map +1 -0
  64. package/dist/components/ui/molecules/mcp-server-picker/search-scope-tabs.js +31 -0
  65. package/dist/components/ui/molecules/mcp-server-picker/section-callout.d.ts +21 -0
  66. package/dist/components/ui/molecules/mcp-server-picker/section-callout.d.ts.map +1 -0
  67. package/dist/components/ui/molecules/mcp-server-picker/section-callout.js +23 -0
  68. package/dist/components/ui/molecules/mcp-server-picker/section-nav-header.d.ts +39 -0
  69. package/dist/components/ui/molecules/mcp-server-picker/section-nav-header.d.ts.map +1 -0
  70. package/dist/components/ui/molecules/mcp-server-picker/section-nav-header.js +43 -0
  71. package/dist/components/ui/molecules/mcp-server-picker/server-avatar-stack.d.ts +16 -0
  72. package/dist/components/ui/molecules/mcp-server-picker/server-avatar-stack.d.ts.map +1 -0
  73. package/dist/components/ui/molecules/mcp-server-picker/server-avatar-stack.js +99 -0
  74. package/dist/components/ui/molecules/mcp-server-picker/server-card.d.ts +41 -0
  75. package/dist/components/ui/molecules/mcp-server-picker/server-card.d.ts.map +1 -0
  76. package/dist/components/ui/molecules/mcp-server-picker/server-card.js +124 -0
  77. package/dist/components/ui/molecules/mcp-server-picker/tool-card.d.ts +27 -0
  78. package/dist/components/ui/molecules/mcp-server-picker/tool-card.d.ts.map +1 -0
  79. package/dist/components/ui/molecules/mcp-server-picker/tool-card.js +67 -0
  80. package/dist/components/ui/molecules/mcp-server-picker/tool-search-band.d.ts +8 -0
  81. package/dist/components/ui/molecules/mcp-server-picker/tool-search-band.d.ts.map +1 -0
  82. package/dist/components/ui/molecules/mcp-server-picker/tool-search-band.js +41 -0
  83. package/dist/components/ui/molecules/mcp-server-picker/toolkit-avatar.d.ts +16 -0
  84. package/dist/components/ui/molecules/mcp-server-picker/toolkit-avatar.d.ts.map +1 -0
  85. package/dist/components/ui/molecules/mcp-server-picker/toolkit-avatar.js +56 -0
  86. package/dist/components/ui/molecules/mcp-server-picker/toolkit-chip.d.ts +38 -0
  87. package/dist/components/ui/molecules/mcp-server-picker/toolkit-chip.d.ts.map +1 -0
  88. package/dist/components/ui/molecules/mcp-server-picker/toolkit-chip.js +42 -0
  89. package/dist/components/ui/molecules/mcp-server-picker/toolkit-group-header.d.ts +33 -0
  90. package/dist/components/ui/molecules/mcp-server-picker/toolkit-group-header.d.ts.map +1 -0
  91. package/dist/components/ui/molecules/mcp-server-picker/toolkit-group-header.js +36 -0
  92. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-callout.d.ts +10 -0
  93. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-callout.d.ts.map +1 -0
  94. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-callout.js +15 -0
  95. package/dist/components/ui/molecules/user-nav.js +1 -1
  96. package/dist/components/ui/organisms/index.d.ts +5 -0
  97. package/dist/components/ui/organisms/index.d.ts.map +1 -0
  98. package/dist/components/ui/organisms/index.js +3 -0
  99. package/dist/components/ui/organisms/mcp-selection-summary-bar.d.ts +71 -0
  100. package/dist/components/ui/organisms/mcp-selection-summary-bar.d.ts.map +1 -0
  101. package/dist/components/ui/organisms/mcp-selection-summary-bar.js +61 -0
  102. package/dist/components/ui/organisms/mcp-server-picker.d.ts +45 -0
  103. package/dist/components/ui/organisms/mcp-server-picker.d.ts.map +1 -0
  104. package/dist/components/ui/organisms/mcp-server-picker.js +35 -0
  105. package/dist/components/ui/pages/login-page.js +19 -19
  106. package/dist/components/ui/templates/gateway-diagram.js +10 -10
  107. package/dist/{dropdown-menu-DCFuLDwH.js → dropdown-menu-dsg43mOw.js} +2 -1
  108. package/dist/hooks/use-scroll-fade.d.ts +15 -0
  109. package/dist/hooks/use-scroll-fade.d.ts.map +1 -0
  110. package/dist/hooks/use-scroll-fade.js +38 -0
  111. package/dist/main.js +242 -221
  112. package/dist/metadata/index.js +6 -6
  113. package/dist/metadata/toolkit-icons.d.ts +15 -0
  114. package/dist/metadata/toolkit-icons.d.ts.map +1 -1
  115. package/dist/metadata/toolkit-icons.js +294 -292
  116. package/dist/{popover-Ck3ILBUA.js → popover-CXSOUeVQ.js} +2 -1
  117. package/dist/{scroll-area-BD6qsU_I.js → scroll-area-53KPfESS.js} +6 -3
  118. package/dist/{select-cAvbXH_n.js → select-CPTT__cT.js} +2 -1
  119. package/dist/toggle-group-CDYMBO0F.js +87 -0
  120. package/dist/useAnchoredPopupScrollLock-C8wRjuy0.js +24 -0
  121. package/package.json +1 -1
  122. package/dist/ToolbarRootContext-Dubw_915.js +0 -34
@@ -0,0 +1,103 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn as e } from "../../../../lib/utils.js";
4
+ import { a as t, d as n, i as r, n as i, o as a, r as o, s, t as c } from "../../../../alert-dialog-tBMDYzJ3.js";
5
+ import { t as l } from "../../../../switch-CP9j-8px.js";
6
+ import { McpSectionCallout as u } from "./section-callout.js";
7
+ import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
8
+ //#region lib/components/ui/molecules/mcp-server-picker/recommended-tools.tsx
9
+ function m({ state: e, onToggle: t, ...n }) {
10
+ let r = e === "on";
11
+ return /* @__PURE__ */ f(u, {
12
+ ...n,
13
+ action: /* @__PURE__ */ p(d, { children: [/* @__PURE__ */ f(l, {
14
+ "aria-label": `Recommended tools ${r ? "on" : "off"}`,
15
+ checked: r,
16
+ onCheckedChange: t,
17
+ size: "sm"
18
+ }), /* @__PURE__ */ f("span", {
19
+ className: "w-6 text-left font-medium tabular-nums",
20
+ children: r ? "On" : "Off"
21
+ })] }),
22
+ "data-slot": "mcp-recommended-tools-callout",
23
+ "data-status": e,
24
+ description: r ? "Arcade selects and keeps your tools up to date for you. New ones are added automatically as they become available, so there's nothing to manage." : "You're managing your own tool selection. New tools from Arcade won't be added automatically.",
25
+ title: "Recommended tools"
26
+ });
27
+ }
28
+ function h({ open: e, selectedCount: t, onKeep: i, onClear: l, onCancel: u }) {
29
+ let d = t && t > 0 ? `The ${t} selected tool${t === 1 ? "" : "s"} stay as your own set. They won't change as Arcade updates its recommendations.` : "Your selected tools stay as your own set. They won't change as Arcade updates its recommendations.";
30
+ return /* @__PURE__ */ f(c, {
31
+ onOpenChange: (e) => {
32
+ e || u();
33
+ },
34
+ open: e,
35
+ children: /* @__PURE__ */ p(r, { children: [
36
+ /* @__PURE__ */ f(s, { children: /* @__PURE__ */ f(n, { children: "Turn off recommended tools?" }) }),
37
+ /* @__PURE__ */ p("div", {
38
+ className: "flex flex-col gap-2",
39
+ children: [/* @__PURE__ */ f(g, {
40
+ description: d,
41
+ onClick: i,
42
+ title: "Keep my tools"
43
+ }), /* @__PURE__ */ f(g, {
44
+ description: "Remove the recommended tools and build your own selection from scratch.",
45
+ onClick: l,
46
+ title: "Clear & start fresh",
47
+ tone: "destructive"
48
+ })]
49
+ }),
50
+ /* @__PURE__ */ f(a, { children: /* @__PURE__ */ f(o, { children: "Cancel" }) })
51
+ ] })
52
+ });
53
+ }
54
+ function g({ title: t, description: n, tone: r = "neutral", onClick: i }) {
55
+ return /* @__PURE__ */ p("button", {
56
+ className: e("flex w-full cursor-pointer flex-col gap-0.5 rounded-lg border p-3 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60", r === "destructive" ? "border-border hover:border-destructive/50 hover:bg-destructive/5" : "border-border hover:border-foreground/40 hover:bg-muted/50"),
57
+ onClick: i,
58
+ type: "button",
59
+ children: [/* @__PURE__ */ f("span", {
60
+ className: e("font-medium text-sm", r === "destructive" ? "text-destructive" : "text-foreground"),
61
+ children: t
62
+ }), /* @__PURE__ */ f("span", {
63
+ className: "text-muted-foreground text-xs leading-snug",
64
+ children: n
65
+ })]
66
+ });
67
+ }
68
+ var _ = {
69
+ "remove-tool": {
70
+ title: "Remove this recommended tool?",
71
+ description: "Removing it will turn off recommended tools. Arcade will stop keeping your selection up to date automatically.",
72
+ confirmLabel: "Remove"
73
+ },
74
+ "remove-server": {
75
+ title: "Remove this server's recommended tools?",
76
+ description: "Removing them will turn off recommended tools. Arcade will stop keeping your selection up to date automatically.",
77
+ confirmLabel: "Remove"
78
+ },
79
+ "clear-all": {
80
+ title: "Clear your selection?",
81
+ description: "This removes all your selected tools, including the recommended ones.",
82
+ confirmLabel: "Clear all"
83
+ }
84
+ };
85
+ function v({ kind: e, open: l, onConfirm: u, onCancel: d }) {
86
+ let m = _[e];
87
+ return /* @__PURE__ */ f(c, {
88
+ onOpenChange: (e) => {
89
+ e || d();
90
+ },
91
+ open: l,
92
+ children: /* @__PURE__ */ p(r, {
93
+ size: "sm",
94
+ children: [/* @__PURE__ */ p(s, { children: [/* @__PURE__ */ f(n, { children: m.title }), m.description ? /* @__PURE__ */ f(t, { children: m.description }) : null] }), /* @__PURE__ */ p(a, { children: [/* @__PURE__ */ f(o, { children: "Cancel" }), /* @__PURE__ */ f(i, {
95
+ onClick: u,
96
+ variant: "destructive",
97
+ children: m.confirmLabel
98
+ })] })]
99
+ })
100
+ });
101
+ }
102
+ //#endregion
103
+ export { m as McpRecommendedToolsCallout, h as McpRecommendedToolsDeactivateDialog, v as McpRecommendedToolsOptOutDialog };
@@ -0,0 +1,22 @@
1
+ import type * as React from "react";
2
+ export type McpReviewCountChipProps = {
3
+ /** Total selected tools — shown as the primary count. */
4
+ toolCount: number;
5
+ /** Total selected MCP servers — shown as the secondary count after a divider. */
6
+ serverCount: number;
7
+ /**
8
+ * The chip is currently in its pressed/open state — used when a click on
9
+ * the chip toggles a review pane. Adds an external ring so the active
10
+ * state reads at a glance without being confused with hover.
11
+ */
12
+ active?: boolean;
13
+ } & Omit<React.ComponentProps<"button">, "children" | "type">;
14
+ /**
15
+ * Compact button-chip summarising the current selection — "N tools · M
16
+ * servers". Sits in the picker's selection summary bar and toggles the grouped
17
+ * review pane when clicked. Resting tint hints "clickable"; the active state
18
+ * adds an external ring (same family as the server pills' focus ring) so the
19
+ * user can see where the click landed.
20
+ */
21
+ export declare function McpReviewCountChip({ toolCount, serverCount, active, className, "aria-label": ariaLabel, ...rest }: McpReviewCountChipProps): React.JSX.Element;
22
+ //# sourceMappingURL=review-count-chip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-count-chip.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/review-count-chip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,MAAM,MAAM,uBAAuB,GAAG;IACpC,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,WAAW,EACX,MAAc,EACd,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,GAAG,IAAI,EACR,EAAE,uBAAuB,qBAkCzB"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn as e } from "../../../../lib/utils.js";
4
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
5
+ //#region lib/components/ui/molecules/mcp-server-picker/review-count-chip.tsx
6
+ function r({ toolCount: r, serverCount: i, active: a = !1, className: o, "aria-label": s, ...c }) {
7
+ let l = r === 1 ? "tool" : "tools", u = i === 1 ? "server" : "servers", d = s ?? `View selection: ${r} ${l}, ${i} ${u}`;
8
+ return /* @__PURE__ */ n("button", {
9
+ ...c,
10
+ "aria-expanded": a,
11
+ "aria-label": d,
12
+ className: e("flex shrink-0 cursor-pointer items-center gap-1.5 rounded-md bg-foreground/[0.04] px-2 py-1 font-medium text-xs transition-[background-color,box-shadow,color] duration-[var(--duration-fast)] ease-[var(--ease-smooth)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 motion-reduce:transition-colors", a ? "text-foreground ring-2 ring-ring/60" : "hover:bg-foreground/10", o),
13
+ "data-slot": "mcp-review-count-chip",
14
+ "data-status": a ? "open" : "closed",
15
+ type: "button",
16
+ children: [
17
+ /* @__PURE__ */ t("span", {
18
+ className: "tabular-nums",
19
+ children: r
20
+ }),
21
+ /* @__PURE__ */ t("span", {
22
+ className: "text-muted-foreground",
23
+ children: l
24
+ }),
25
+ /* @__PURE__ */ t("span", {
26
+ "aria-hidden": !0,
27
+ className: "text-muted-foreground/60",
28
+ children: "·"
29
+ }),
30
+ /* @__PURE__ */ t("span", {
31
+ className: "tabular-nums",
32
+ children: i
33
+ }),
34
+ /* @__PURE__ */ t("span", {
35
+ className: "text-muted-foreground",
36
+ children: u
37
+ })
38
+ ]
39
+ });
40
+ }
41
+ //#endregion
42
+ export { r as McpReviewCountChip };
@@ -0,0 +1,18 @@
1
+ import { Tabs } from '../../atoms/tabs';
2
+ import type * as React from "react";
3
+ export type McpSearchScope = "servers" | "tools";
4
+ export type McpSearchScopeTabsProps = {
5
+ active: McpSearchScope;
6
+ serverCount: number;
7
+ toolCount: number;
8
+ onChange?: (scope: McpSearchScope) => void;
9
+ } & Omit<React.ComponentProps<typeof Tabs>, "value" | "onValueChange" | "onChange">;
10
+ /**
11
+ * MCP servers / Tools scope switcher shown above search results. Composes the
12
+ * design-system `Tabs` primitive (line variant) instead of reimplementing
13
+ * tablist semantics — so the underline-on-active look, keyboard nav, and
14
+ * focus-ring all come from the same source as every other tab in the app.
15
+ * It renders tabs and picks one-of-two, so it's named `…Tabs`, not `…Toggle`.
16
+ */
17
+ export declare function McpSearchScopeTabs({ active, serverCount, toolCount, onChange, ...rest }: McpSearchScopeTabsProps): React.JSX.Element;
18
+ //# sourceMappingURL=search-scope-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-scope-tabs.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/search-scope-tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,IAAI,EAAyB,MAAM,kBAAkB,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjD,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5C,GAAG,IAAI,CACN,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EACjC,OAAO,GAAG,eAAe,GAAG,UAAU,CACvC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,uBAAuB,qBAwBzB"}
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ "use client";
3
+ import { i as e, r as t, t as n } from "../../../../tabs-C7JA8G0W.js";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
+ //#region lib/components/ui/molecules/mcp-server-picker/search-scope-tabs.tsx
6
+ function a({ active: a, serverCount: o, toolCount: s, onChange: c, ...l }) {
7
+ return /* @__PURE__ */ r(n, {
8
+ ...l,
9
+ "aria-label": "Search result scope",
10
+ onValueChange: (e) => c?.(e),
11
+ value: a,
12
+ children: /* @__PURE__ */ i(t, {
13
+ variant: "line",
14
+ children: [/* @__PURE__ */ i(e, {
15
+ value: "servers",
16
+ children: ["MCP servers", /* @__PURE__ */ r("span", {
17
+ className: "text-muted-foreground tabular-nums",
18
+ children: o
19
+ })]
20
+ }), /* @__PURE__ */ i(e, {
21
+ value: "tools",
22
+ children: ["Tools", /* @__PURE__ */ r("span", {
23
+ className: "text-muted-foreground tabular-nums",
24
+ children: s
25
+ })]
26
+ })]
27
+ })
28
+ });
29
+ }
30
+ //#endregion
31
+ export { a as McpSearchScopeTabs };
@@ -0,0 +1,21 @@
1
+ import type * as React from "react";
2
+ export type McpSectionCalloutProps = {
3
+ /** Section title — rendered semibold. */
4
+ title: React.ReactNode;
5
+ /** Short explanatory paragraph beneath the title. */
6
+ description: React.ReactNode;
7
+ /**
8
+ * Optional inline control rendered next to the title (e.g. an on/off switch).
9
+ * Sits on the title row, close enough that the eye reads it and the title as
10
+ * one unit.
11
+ */
12
+ action?: React.ReactNode;
13
+ } & Omit<React.ComponentProps<"div">, "title" | "children">;
14
+ /**
15
+ * Flat section explainer shown above a stream of picker results — a semibold
16
+ * title with an optional inline control, and a muted description beneath. No
17
+ * card chrome, so it reads as part of the results rather than a competing
18
+ * surface. The shared layout behind the Recommended and Unoptimized callouts.
19
+ */
20
+ export declare function McpSectionCallout({ title, description, action, className, ...rest }: McpSectionCalloutProps): React.JSX.Element;
21
+ //# sourceMappingURL=section-callout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-callout.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/section-callout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,MAAM,MAAM,sBAAsB,GAAG;IACnC,yCAAyC;IACzC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,qDAAqD;IACrD,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,EACT,GAAG,IAAI,EACR,EAAE,sBAAsB,qBAgBxB"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn as e } from "../../../../lib/utils.js";
4
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
5
+ //#region lib/components/ui/molecules/mcp-server-picker/section-callout.tsx
6
+ function r({ title: r, description: i, action: a, className: o, ...s }) {
7
+ return /* @__PURE__ */ n("div", {
8
+ className: e("px-0.5 py-1", o),
9
+ ...s,
10
+ children: [a ? /* @__PURE__ */ n("div", {
11
+ className: "inline-flex items-center gap-3 font-semibold text-foreground text-sm",
12
+ children: [/* @__PURE__ */ t("span", { children: r }), a]
13
+ }) : /* @__PURE__ */ t("p", {
14
+ className: "font-semibold text-foreground text-sm",
15
+ children: r
16
+ }), /* @__PURE__ */ t("p", {
17
+ className: "mt-1.5 text-[13px] text-muted-foreground leading-relaxed",
18
+ children: i
19
+ })]
20
+ });
21
+ }
22
+ //#endregion
23
+ export { r as McpSectionCallout };
@@ -0,0 +1,39 @@
1
+ import type * as React from "react";
2
+ export type McpSectionNavHeaderProps = {
3
+ /**
4
+ * Identity slot — typically a `McpToolkitGroupHeader` or a plain title with
5
+ * trailing count. Rendered after the back affordance and the divider.
6
+ */
7
+ identity: React.ReactNode;
8
+ /**
9
+ * Optional right-aligned actions (e.g. "Select all" / "Clear" buttons). Wraps
10
+ * to a second row at narrow widths instead of squeezing the identity slot.
11
+ */
12
+ actions?: React.ReactNode;
13
+ /**
14
+ * Click handler for the back affordance. When provided, the default
15
+ * "← MCP servers" button is rendered automatically.
16
+ */
17
+ onBack?: () => void;
18
+ /**
19
+ * Label for the back button (and its `aria-label`). Override to match the
20
+ * surface being returned to — e.g. `"Tools"` or `"Results"`.
21
+ */
22
+ backLabel?: string;
23
+ /**
24
+ * Render a custom back affordance. Overrides `onBack` + `backLabel` if both
25
+ * are passed — useful when the back action needs to be a link instead of a
26
+ * button.
27
+ */
28
+ back?: React.ReactNode;
29
+ } & Omit<React.ComponentProps<"div">, "children">;
30
+ /**
31
+ * Section navigation strip used at the top of a drill-in or review pane:
32
+ * a back affordance, a separator, identity (avatar + title + count), and an
33
+ * optional cluster of actions on the right. Used as the recurring header for
34
+ * `ToolsView` and `SelectedToolsReview` inside the MCP server picker.
35
+ *
36
+ * Pure layout — the caller owns what goes in each slot.
37
+ */
38
+ export declare function McpSectionNavHeader({ identity, actions, back, onBack, backLabel, className, ...rest }: McpSectionNavHeaderProps): React.JSX.Element;
39
+ //# sourceMappingURL=section-nav-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-nav-header.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/section-nav-header.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAIpC,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;OAGG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;AAElD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,MAAM,EACN,SAAyB,EACzB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,wBAAwB,qBAoC1B"}
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn as e } from "../../../../lib/utils.js";
4
+ import { t } from "../../../../button-BNOmhdpM.js";
5
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
6
+ import { ChevronLeft as i } from "lucide-react";
7
+ //#region lib/components/ui/molecules/mcp-server-picker/section-nav-header.tsx
8
+ function a({ identity: a, actions: o, back: s, onBack: c, backLabel: l = "MCP servers", className: u, ...d }) {
9
+ let f = s ?? (c ? /* @__PURE__ */ r(t, {
10
+ "aria-label": `Back to ${l.toLowerCase()}`,
11
+ onClick: c,
12
+ size: "sm",
13
+ variant: "ghost",
14
+ children: [/* @__PURE__ */ n(i, {
15
+ "aria-hidden": !0,
16
+ "data-icon": "inline-start"
17
+ }), l]
18
+ }) : null);
19
+ return /* @__PURE__ */ r("div", {
20
+ ...d,
21
+ className: e("flex flex-wrap items-center justify-between gap-x-3 gap-y-2", u),
22
+ "data-slot": "mcp-section-nav-header",
23
+ children: [/* @__PURE__ */ r("div", {
24
+ className: "flex min-w-0 items-center gap-3",
25
+ children: [
26
+ f,
27
+ f ? /* @__PURE__ */ n("span", {
28
+ "aria-hidden": !0,
29
+ className: "h-5 w-px shrink-0 bg-border"
30
+ }) : null,
31
+ /* @__PURE__ */ n("div", {
32
+ className: "flex min-w-0 items-center gap-2",
33
+ children: a
34
+ })
35
+ ]
36
+ }), o ? /* @__PURE__ */ n("div", {
37
+ className: "flex items-center gap-1",
38
+ children: o
39
+ }) : null]
40
+ });
41
+ }
42
+ //#endregion
43
+ export { a as McpSectionNavHeader };
@@ -0,0 +1,16 @@
1
+ import type * as React from "react";
2
+ export type McpServerAvatarStackItem = {
3
+ id: string;
4
+ name: string;
5
+ toolkitId?: string;
6
+ selectedCount?: number;
7
+ total?: number;
8
+ };
9
+ export type McpServerAvatarStackProps = {
10
+ servers: McpServerAvatarStackItem[];
11
+ maxVisible?: number;
12
+ overflowLabel?: string;
13
+ onOpenMcpServer?: (id: string) => void;
14
+ } & Omit<React.ComponentProps<"span">, "children">;
15
+ export declare function McpServerAvatarStack({ servers, maxVisible, overflowLabel, onOpenMcpServer, className, ...rest }: McpServerAvatarStackProps): React.JSX.Element | null;
16
+ //# sourceMappingURL=server-avatar-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-avatar-stack.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/server-avatar-stack.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAYpC,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,UAAc,EACd,aAAkC,EAClC,eAAe,EACf,SAAS,EACT,GAAG,IAAI,EACR,EAAE,yBAAyB,4BAmC3B"}
@@ -0,0 +1,99 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn as e } from "../../../../lib/utils.js";
4
+ import { i as t, n, o as r, t as i } from "../../../../popover-CXSOUeVQ.js";
5
+ import { t as a } from "../../../../scroll-area-53KPfESS.js";
6
+ import { McpToolkitAvatar as o } from "./toolkit-avatar.js";
7
+ import { useState as s } from "react";
8
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
9
+ //#region lib/components/ui/molecules/mcp-server-picker/server-avatar-stack.tsx
10
+ function d({ servers: t, maxVisible: n = 5, overflowLabel: r = "more MCP servers", onOpenMcpServer: i, className: a, ...s }) {
11
+ if (t.length === 0) return null;
12
+ let c = t.slice(0, n), d = t.slice(n), p = d.length;
13
+ return /* @__PURE__ */ u("span", {
14
+ ...s,
15
+ className: e("inline-flex shrink-0 items-center gap-1", a),
16
+ "data-slot": "mcp-server-avatar-stack",
17
+ children: [/* @__PURE__ */ l("span", {
18
+ className: "inline-flex items-center gap-1",
19
+ children: c.map((e) => /* @__PURE__ */ l(o, {
20
+ name: e.name,
21
+ size: "xs",
22
+ title: e.name,
23
+ toolkitId: e.toolkitId
24
+ }, e.id))
25
+ }), p > 0 ? /* @__PURE__ */ l(f, {
26
+ label: r,
27
+ onOpenMcpServer: i,
28
+ servers: d
29
+ }) : null]
30
+ });
31
+ }
32
+ function f({ label: e, servers: o, onOpenMcpServer: c }) {
33
+ let [d, f] = s(!1), m = o.length, h = m === 1 ? "server" : "servers", g = `Show ${m} ${e}`;
34
+ return /* @__PURE__ */ u(i, {
35
+ onOpenChange: f,
36
+ open: d,
37
+ children: [/* @__PURE__ */ u(r, {
38
+ "aria-label": g,
39
+ className: "inline-flex size-[18px] cursor-pointer items-center justify-center rounded-full bg-foreground/8 font-medium text-[9px] text-muted-foreground tabular-nums transition-colors hover:bg-foreground/12 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",
40
+ title: g,
41
+ type: "button",
42
+ children: ["+", m]
43
+ }), /* @__PURE__ */ u(n, {
44
+ align: "start",
45
+ className: "w-56 gap-0 p-0",
46
+ sideOffset: 6,
47
+ children: [/* @__PURE__ */ u(t, {
48
+ className: "px-3 pt-2.5 pb-1.5 font-medium text-foreground text-xs",
49
+ children: [
50
+ m,
51
+ " more MCP ",
52
+ h
53
+ ]
54
+ }), /* @__PURE__ */ l(a, {
55
+ className: "max-h-72",
56
+ orientation: "vertical",
57
+ type: "hover",
58
+ children: /* @__PURE__ */ l("ul", {
59
+ className: "flex flex-col py-1",
60
+ children: o.map((e) => /* @__PURE__ */ l("li", { children: /* @__PURE__ */ l(p, {
61
+ onOpenMcpServer: c ? (e) => {
62
+ f(!1), c(e);
63
+ } : void 0,
64
+ server: e
65
+ }) }, e.id))
66
+ })
67
+ })]
68
+ })]
69
+ });
70
+ }
71
+ function p({ server: e, onOpenMcpServer: t }) {
72
+ let n = /* @__PURE__ */ u(c, { children: [
73
+ /* @__PURE__ */ l(o, {
74
+ name: e.name,
75
+ size: "sm",
76
+ toolkitId: e.toolkitId
77
+ }),
78
+ /* @__PURE__ */ l("span", {
79
+ className: "min-w-0 flex-1 truncate font-medium capitalize",
80
+ children: e.name
81
+ }),
82
+ e.selectedCount != null && e.total != null ? /* @__PURE__ */ l("span", {
83
+ className: "shrink-0 text-[10px] text-muted-foreground tabular-nums",
84
+ children: e.selectedCount === e.total ? `${e.total}` : `${e.selectedCount}/${e.total}`
85
+ }) : null
86
+ ] });
87
+ return t ? /* @__PURE__ */ l("button", {
88
+ "aria-label": `Open ${e.name} tools`,
89
+ className: "flex w-full cursor-pointer items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-foreground/[0.06] focus-visible:bg-foreground/[0.06] focus-visible:outline-none",
90
+ onClick: () => t(e.id),
91
+ type: "button",
92
+ children: n
93
+ }) : /* @__PURE__ */ l("div", {
94
+ className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs",
95
+ children: n
96
+ });
97
+ }
98
+ //#endregion
99
+ export { d as McpServerAvatarStack };
@@ -0,0 +1,41 @@
1
+ import { ClassProp } from 'class-variance-authority/types';
2
+ import * as React from "react";
3
+ export type McpServerCardSelectionState = "none" | "partial" | "selected";
4
+ declare const shellVariants: (props?: ({
5
+ selectionState?: "none" | "selected" | "partial" | "setup-none" | "setup-selected" | "setup-partial" | null | undefined;
6
+ } & ClassProp) | undefined) => string;
7
+ export type McpServerCardProps = {
8
+ name: string;
9
+ description?: string;
10
+ /**
11
+ * Toolkit id used to resolve the brand icon. Falls back to a letter avatar
12
+ * when no brand mark is registered — the single fallback path shared with
13
+ * `McpToolkitChip` and the summary bar, via `McpToolkitAvatar`.
14
+ */
15
+ toolkitId?: string;
16
+ /**
17
+ * Optional server version, shown muted next to the name (e.g. "v1.2.4") —
18
+ * matches the `version` slot on `McpToolCard` so the two cards read as a
19
+ * pair when stacked together.
20
+ */
21
+ version?: string;
22
+ toolCount: number;
23
+ selectedToolCount?: number;
24
+ selectionState?: McpServerCardSelectionState;
25
+ isUnoptimized?: boolean;
26
+ /**
27
+ * The server requires a secret (API key, OAuth, etc.) that isn't configured
28
+ * yet, so its tools can't be selected. The card becomes a single clickable
29
+ * "Set up" affordance that fires `onSetup` (intended to open a setup dialog)
30
+ * and drops the toggle/customize controls until it's configured.
31
+ */
32
+ needsSetup?: boolean;
33
+ /** Fired when a `needsSetup` card is clicked. */
34
+ onSetup?: () => void;
35
+ onToggle?: () => void;
36
+ onCustomize?: () => void;
37
+ } & Omit<React.ComponentProps<"div">, "onToggle">;
38
+ declare function McpServerCardImpl({ name, description, toolkitId, version, toolCount, selectedToolCount, selectionState, isUnoptimized, needsSetup, onSetup, onToggle, onCustomize, className, ...rest }: McpServerCardProps): React.JSX.Element;
39
+ export declare const McpServerCard: React.MemoExoticComponent<typeof McpServerCardImpl>;
40
+ export { shellVariants as mcpServerCardShellVariants };
41
+ //# sourceMappingURL=server-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-card.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/server-card.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE1E,QAAA,MAAM,aAAa;;8EAoBlB,CAAC;AAwBF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;AA6IlD,iBAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,iBAAqB,EACrB,cAAuB,EACvB,aAAqB,EACrB,UAAkB,EAClB,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,kBAAkB,qBAmCpB;AAED,eAAO,MAAM,aAAa,qDAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,IAAI,0BAA0B,EAAE,CAAC"}