@arcadeai/design-system 3.49.0 → 4.0.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 (41) hide show
  1. package/dist/assets/icons/fireflies.js +304 -0
  2. package/dist/assets/icons/insightly.js +32 -0
  3. package/dist/components/index.js +183 -181
  4. package/dist/components/ui/atoms/icons/fireflies.d.ts +4 -0
  5. package/dist/components/ui/atoms/icons/fireflies.d.ts.map +1 -0
  6. package/dist/components/ui/atoms/icons/fireflies.js +299 -0
  7. package/dist/components/ui/atoms/icons/index.d.ts +2 -0
  8. package/dist/components/ui/atoms/icons/index.d.ts.map +1 -1
  9. package/dist/components/ui/atoms/icons/index.js +112 -110
  10. package/dist/components/ui/atoms/icons/insightly.d.ts +4 -0
  11. package/dist/components/ui/atoms/icons/insightly.d.ts.map +1 -0
  12. package/dist/components/ui/atoms/icons/insightly.js +27 -0
  13. package/dist/components/ui/atoms/index.js +139 -137
  14. package/dist/components/ui/index.js +183 -181
  15. package/dist/components/ui/molecules/empty-state.js +1 -1
  16. package/dist/components/ui/molecules/index.d.ts +2 -2
  17. package/dist/components/ui/molecules/index.d.ts.map +1 -1
  18. package/dist/components/ui/molecules/index.js +2 -2
  19. package/dist/components/ui/molecules/mcp-server-picker/constants.d.ts +3 -0
  20. package/dist/components/ui/molecules/mcp-server-picker/constants.d.ts.map +1 -0
  21. package/dist/components/ui/molecules/mcp-server-picker/constants.js +4 -0
  22. package/dist/components/ui/molecules/mcp-server-picker/server-card.d.ts +35 -13
  23. package/dist/components/ui/molecules/mcp-server-picker/server-card.d.ts.map +1 -1
  24. package/dist/components/ui/molecules/mcp-server-picker/server-card.js +89 -41
  25. package/dist/components/ui/molecules/mcp-server-picker/tool-card.d.ts.map +1 -1
  26. package/dist/components/ui/molecules/mcp-server-picker/tool-card.js +12 -8
  27. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-match-card.d.ts +8 -0
  28. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-match-card.d.ts.map +1 -0
  29. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-match-card.js +61 -0
  30. package/dist/components/ui/molecules/scroll-fade-area.d.ts +7 -1
  31. package/dist/components/ui/molecules/scroll-fade-area.d.ts.map +1 -1
  32. package/dist/components/ui/molecules/scroll-fade-area.js +19 -14
  33. package/dist/main.js +189 -187
  34. package/dist/metadata/toolkit-icons.d.ts.map +1 -1
  35. package/dist/metadata/toolkit-icons.js +206 -202
  36. package/dist/metadata/toolkits.d.ts.map +1 -1
  37. package/dist/metadata/toolkits.js +26 -0
  38. package/package.json +1 -1
  39. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-callout.d.ts +0 -10
  40. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-callout.d.ts.map +0 -1
  41. package/dist/components/ui/molecules/mcp-server-picker/unoptimized-callout.js +0 -15
@@ -4,18 +4,18 @@ export type McpServerCardSelectionState = "none" | "partial" | "selected";
4
4
  declare const shellVariants: (props?: ({
5
5
  selectionState?: "none" | "selected" | "partial" | "setup-none" | "setup-selected" | "setup-partial" | null | undefined;
6
6
  } & ClassProp) | undefined) => string;
7
- export type McpServerCardProps = {
7
+ type McpServerCardBaseProps = {
8
8
  name: string;
9
9
  description?: string;
10
10
  /**
11
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`.
12
+ * when no brand mark is registered. The fallback is shared with
13
+ * `McpToolkitChip` and the summary bar via `McpToolkitAvatar`.
14
14
  */
15
15
  toolkitId?: string;
16
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
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
19
  * pair when stacked together.
20
20
  */
21
21
  version?: string;
@@ -23,18 +23,40 @@ export type McpServerCardProps = {
23
23
  selectedToolCount?: number;
24
24
  selectionState?: McpServerCardSelectionState;
25
25
  /**
26
- * The server requires a secret (API key, OAuth, etc.) that isn't configured
27
- * yet, so its tools can't be selected. The card becomes a single clickable
28
- * "Set up" affordance that fires `onSetup` (intended to open a setup dialog)
29
- * and drops the toggle/customize controls until it's configured.
26
+ * Whether the server still needs configuration before its tools can run.
27
+ * The card remains selectable regardless. Blocking selection based on setup
28
+ * status is the consumer's responsibility, not the card's.
30
29
  */
31
30
  needsSetup?: boolean;
32
- /** Fired when a `needsSetup` card is clicked. */
31
+ /** Fired from the setup strip when `needsSetup` is true. */
33
32
  onSetup?: () => void;
34
- onToggle?: () => void;
35
- onCustomize?: () => void;
36
33
  } & Omit<React.ComponentProps<"div">, "onToggle">;
37
- declare function McpServerCardImpl({ name, description, toolkitId, version, toolCount, selectedToolCount, selectionState, needsSetup, onSetup, onToggle, onCustomize, className, ...rest }: McpServerCardProps): React.JSX.Element;
34
+ type McpServerCardToggleProps = McpServerCardBaseProps & {
35
+ /**
36
+ * How the card body behaves on click:
37
+ * - `"toggle"` (default): the body adds/removes the whole server (`onToggle`),
38
+ * with a separate right-edge control to drill into individual tools.
39
+ */
40
+ interaction?: "toggle";
41
+ onToggle: () => void;
42
+ onCustomize: () => void;
43
+ };
44
+ type McpServerCardDrillProps = McpServerCardBaseProps & {
45
+ /**
46
+ * `"drill"`: the card has no whole-server toggle. Clicking it opens the
47
+ * server's tool list via `onCustomize` so the user can pick a specific tool.
48
+ *
49
+ * Use this in single-tool contexts such as a tool-execution page, where the
50
+ * goal is to select one tool to run rather than to add an entire server's
51
+ * tools to a configuration. Selecting the server is not meaningful in that
52
+ * context; the card is a navigation step toward the tool.
53
+ */
54
+ interaction: "drill";
55
+ onCustomize: () => void;
56
+ onToggle?: never;
57
+ };
58
+ export type McpServerCardProps = McpServerCardToggleProps | McpServerCardDrillProps;
59
+ declare function McpServerCardImpl({ name, description, toolkitId, version, toolCount, selectedToolCount, selectionState, needsSetup, interaction, onSetup, onToggle, onCustomize, className, ...rest }: McpServerCardProps): React.JSX.Element;
38
60
  export declare const McpServerCard: React.MemoExoticComponent<typeof McpServerCardImpl>;
39
61
  export { shellVariants as mcpServerCardShellVariants };
40
62
  //# sourceMappingURL=server-card.d.ts.map
@@ -1 +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;AAU/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;;;;;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;AA0IlD,iBAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,iBAAqB,EACrB,cAAuB,EACvB,UAAkB,EAClB,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,kBAAkB,qBAkCpB;AAED,eAAO,MAAM,aAAa,qDAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,IAAI,0BAA0B,EAAE,CAAC"}
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;AAU/B,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE1E,QAAA,MAAM,aAAa;;8EAoBlB,CAAC;AAwBF,KAAK,sBAAsB,GAAG;IAC5B,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;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;AAElD,KAAK,wBAAwB,GAAG,sBAAsB,GAAG;IACvD;;;;OAIG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,KAAK,uBAAuB,GAAG,sBAAsB,GAAG;IACtD;;;;;;;;OAQG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,wBAAwB,GACxB,uBAAuB,CAAC;AA+M5B,iBAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,iBAAqB,EACrB,cAAuB,EACvB,UAAkB,EAClB,WAAsB,EACtB,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,kBAAkB,qBAqDpB;AAED,eAAO,MAAM,aAAa,qDAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,IAAI,0BAA0B,EAAE,CAAC"}
@@ -5,10 +5,10 @@ import { t } from "../../../../dist-Ber_p4PA.js";
5
5
  import { i as n, n as r, r as i, t as a } from "../../../../tooltip-34vRSwJG.js";
6
6
  import { McpToolkitAvatar as o } from "./toolkit-avatar.js";
7
7
  import * as s from "react";
8
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
- import { ChevronRight as u, KeyRound as d } from "lucide-react";
8
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
9
+ import { ChevronRight as d, KeyRound as f } from "lucide-react";
10
10
  //#region lib/components/ui/molecules/mcp-server-picker/server-card.tsx
11
- var f = t("flex items-stretch rounded-lg border transition-[background-color,border-color,box-shadow,transform] duration-[var(--duration-normal)] ease-[var(--ease-smooth)] motion-reduce:transition-colors", {
11
+ var p = t("flex items-stretch rounded-lg border transition-[background-color,border-color,box-shadow,transform] duration-[var(--duration-normal)] ease-[var(--ease-smooth)] motion-reduce:transition-colors", {
12
12
  variants: { selectionState: {
13
13
  selected: "border-foreground/45 bg-muted/20 shadow-[var(--shadow-card)]",
14
14
  partial: "border-foreground/45 border-dashed bg-muted/20 shadow-[var(--shadow-card)]",
@@ -19,100 +19,148 @@ var f = t("flex items-stretch rounded-lg border transition-[background-color,bor
19
19
  } },
20
20
  defaultVariants: { selectionState: "none" }
21
21
  });
22
- function p(e, t) {
22
+ function m(e, t) {
23
23
  return t ? e === "selected" ? "setup-selected" : e === "partial" ? "setup-partial" : "setup-none" : e;
24
24
  }
25
- function m(e) {
25
+ function h(e) {
26
26
  return e === "selected" ? !0 : e === "partial" ? "mixed" : !1;
27
27
  }
28
- function h({ name: e, description: t, toolkitId: n, version: r, selectionState: i, onToggle: a }) {
29
- return /* @__PURE__ */ l("button", {
28
+ function g({ name: e, description: t, toolkitId: n, version: r, selectionState: i, onToggle: a }) {
29
+ return /* @__PURE__ */ u("button", {
30
30
  "aria-label": `${i === "selected" ? "Remove all" : "Add all"} ${e} tools`,
31
- "aria-pressed": m(i),
31
+ "aria-pressed": h(i),
32
32
  className: "flex min-w-0 flex-1 cursor-pointer items-center gap-2 rounded-l-lg px-3 py-2.5 text-left transition-[background-color,color,transform] duration-[var(--duration-fast)] ease-[var(--ease-smooth)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-inset active:scale-[0.98] motion-reduce:transition-colors motion-reduce:active:scale-100",
33
33
  onClick: a,
34
34
  title: t || void 0,
35
35
  type: "button",
36
- children: [/* @__PURE__ */ c(o, {
36
+ children: [/* @__PURE__ */ l(o, {
37
37
  name: e,
38
38
  size: "md",
39
39
  toolkitId: n
40
- }), /* @__PURE__ */ l("span", {
40
+ }), /* @__PURE__ */ u("span", {
41
41
  className: "flex min-w-0 flex-1 items-baseline gap-1.5",
42
- children: [/* @__PURE__ */ c("span", {
42
+ children: [/* @__PURE__ */ l("span", {
43
43
  className: "min-w-0 truncate font-medium text-base capitalize",
44
44
  children: e
45
- }), r ? /* @__PURE__ */ l("span", {
45
+ }), r ? /* @__PURE__ */ u("span", {
46
46
  className: "shrink-0 font-normal text-muted-foreground text-xs tabular-nums",
47
47
  children: ["v", r]
48
48
  }) : null]
49
49
  })]
50
50
  });
51
51
  }
52
- function g({ name: e, toolsLabel: t, onCustomize: n }) {
53
- return /* @__PURE__ */ l("button", {
52
+ function _({ hasSetup: t, name: n, description: r, toolkitId: i, version: a, toolsLabel: s, onCustomize: c }) {
53
+ return /* @__PURE__ */ u("button", {
54
+ "aria-label": `Choose individual tools for ${n}`,
55
+ className: e("flex min-w-0 flex-1 cursor-pointer items-center gap-2 px-3 py-2.5 text-left transition-[background-color,color,transform] duration-[var(--duration-fast)] ease-[var(--ease-smooth)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-inset active:scale-[0.98] motion-reduce:transition-colors motion-reduce:active:scale-100", t ? "rounded-l-lg" : "rounded-lg"),
56
+ onClick: c,
57
+ title: r || void 0,
58
+ type: "button",
59
+ children: [
60
+ /* @__PURE__ */ l(o, {
61
+ name: n,
62
+ size: "md",
63
+ toolkitId: i
64
+ }),
65
+ /* @__PURE__ */ u("span", {
66
+ className: "flex min-w-0 flex-1 items-baseline gap-1.5",
67
+ children: [/* @__PURE__ */ l("span", {
68
+ className: "min-w-0 truncate font-medium text-base capitalize",
69
+ children: n
70
+ }), a ? /* @__PURE__ */ u("span", {
71
+ className: "shrink-0 font-normal text-muted-foreground text-xs tabular-nums",
72
+ children: ["v", a]
73
+ }) : null]
74
+ }),
75
+ /* @__PURE__ */ u("span", {
76
+ className: "flex shrink-0 items-center gap-1.5 text-muted-foreground text-xs",
77
+ children: [/* @__PURE__ */ l("span", {
78
+ className: "whitespace-nowrap tabular-nums",
79
+ children: s
80
+ }), /* @__PURE__ */ l(d, {
81
+ "aria-hidden": !0,
82
+ className: "size-3 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-smooth)] motion-reduce:transition-none"
83
+ })]
84
+ })
85
+ ]
86
+ });
87
+ }
88
+ function v({ name: e, toolsLabel: t, onCustomize: n }) {
89
+ return /* @__PURE__ */ u("button", {
54
90
  "aria-label": `Choose individual tools for ${e}`,
55
91
  className: "flex min-w-[5.5rem] shrink-0 cursor-pointer items-center justify-end gap-1.5 rounded-r-lg border-border/60 border-l px-2.5 text-muted-foreground text-xs transition-[background-color,color,transform] duration-[var(--duration-fast)] ease-[var(--ease-smooth)] hover:bg-muted/40 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-inset active:scale-[0.98] motion-reduce:transition-colors motion-reduce:active:scale-100",
56
92
  "data-slot": "mcp-server-card-customize",
57
93
  onClick: n,
58
94
  type: "button",
59
- children: [/* @__PURE__ */ c("span", {
95
+ children: [/* @__PURE__ */ l("span", {
60
96
  className: "whitespace-nowrap tabular-nums",
61
97
  children: t
62
- }), /* @__PURE__ */ c(u, {
98
+ }), /* @__PURE__ */ l(d, {
63
99
  "aria-hidden": !0,
64
100
  className: "size-3 transition-transform duration-[var(--duration-fast)] ease-[var(--ease-smooth)] motion-reduce:transition-none"
65
101
  })]
66
102
  });
67
103
  }
68
- function _({ name: e, onSetup: t }) {
69
- return /* @__PURE__ */ c(i, { children: /* @__PURE__ */ l(a, { children: [/* @__PURE__ */ c(n, { render: /* @__PURE__ */ c("button", {
70
- "aria-label": `Set up ${e}`,
71
- className: "flex shrink-0 cursor-pointer items-center justify-center border-border/60 border-l bg-warning/10 px-2.5 text-warning transition-colors duration-[var(--duration-fast)] ease-[var(--ease-smooth)] hover:bg-warning/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-inset",
104
+ function y({ isTerminal: t = !1, name: o, onSetup: s }) {
105
+ return /* @__PURE__ */ l(i, { children: /* @__PURE__ */ u(a, { children: [/* @__PURE__ */ l(n, { render: /* @__PURE__ */ l("button", {
106
+ "aria-label": `Set up ${o}`,
107
+ className: e("flex shrink-0 cursor-pointer items-center justify-center border-border/60 border-l bg-warning/10 px-2.5 text-warning transition-colors duration-[var(--duration-fast)] ease-[var(--ease-smooth)] hover:bg-warning/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-inset", t ? "rounded-r-lg" : ""),
72
108
  "data-slot": "mcp-server-card-setup",
73
- onClick: t,
109
+ onClick: s,
74
110
  type: "button",
75
- children: /* @__PURE__ */ c(d, {
111
+ children: /* @__PURE__ */ l(f, {
76
112
  "aria-hidden": !0,
77
113
  className: "size-4"
78
114
  })
79
- }) }), /* @__PURE__ */ l(r, {
115
+ }) }), /* @__PURE__ */ u(r, {
80
116
  className: "max-w-56 flex-col items-start gap-0.5 text-left",
81
117
  side: "top",
82
- children: [/* @__PURE__ */ c("span", {
118
+ children: [/* @__PURE__ */ l("span", {
83
119
  className: "font-semibold",
84
120
  children: "Setup required"
85
- }), /* @__PURE__ */ c("span", { children: "This server isn't ready yet. It needs some configuration before its tools work." })]
121
+ }), /* @__PURE__ */ l("span", { children: "This server isn't ready yet. It needs some configuration before its tools work." })]
86
122
  })] }) });
87
123
  }
88
- function v({ name: t, description: n, toolkitId: r, version: i, toolCount: a, selectedToolCount: o = 0, selectionState: s = "none", needsSetup: u = !1, onSetup: d, onToggle: m, onCustomize: v, className: y, ...b }) {
89
- let x = s === "partial" ? `${o}/${a} tools` : `${a} ${a === 1 ? "tool" : "tools"}`;
124
+ function b({ name: t, description: n, toolkitId: r, version: i, toolCount: a, selectedToolCount: o = 0, selectionState: s = "none", needsSetup: d = !1, interaction: f = "toggle", onSetup: h, onToggle: b, onCustomize: x, className: S, ...C }) {
125
+ let w = s === "partial" ? `${o}/${a} tools` : `${a} ${a === 1 ? "tool" : "tools"}`;
90
126
  return /* @__PURE__ */ l("div", {
91
- ...b,
92
- className: e(f({ selectionState: p(s, u) }), y),
127
+ ...C,
128
+ className: e(p({ selectionState: m(s, d) }), S),
93
129
  "data-slot": "mcp-server-card",
94
- "data-status": u ? "needs-setup" : s,
95
- children: [
96
- /* @__PURE__ */ c(h, {
130
+ "data-status": d ? "needs-setup" : s,
131
+ children: f === "drill" ? /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l(_, {
132
+ description: n,
133
+ hasSetup: d,
134
+ name: t,
135
+ onCustomize: x,
136
+ toolkitId: r,
137
+ toolsLabel: w,
138
+ version: i
139
+ }), d ? /* @__PURE__ */ l(y, {
140
+ isTerminal: !0,
141
+ name: t,
142
+ onSetup: h
143
+ }) : null] }) : /* @__PURE__ */ u(c, { children: [
144
+ /* @__PURE__ */ l(g, {
97
145
  description: n,
98
146
  name: t,
99
- onToggle: m,
147
+ onToggle: b,
100
148
  selectionState: s,
101
149
  toolkitId: r,
102
150
  version: i
103
151
  }),
104
- u ? /* @__PURE__ */ c(_, {
152
+ d ? /* @__PURE__ */ l(y, {
105
153
  name: t,
106
- onSetup: d
154
+ onSetup: h
107
155
  }) : null,
108
- /* @__PURE__ */ c(g, {
156
+ /* @__PURE__ */ l(v, {
109
157
  name: t,
110
- onCustomize: v,
111
- toolsLabel: x
158
+ onCustomize: x,
159
+ toolsLabel: w
112
160
  })
113
- ]
161
+ ] })
114
162
  });
115
163
  }
116
- var y = s.memo(v);
164
+ var x = s.memo(b);
117
165
  //#endregion
118
- export { y as McpServerCard, f as mcpServerCardShellVariants };
166
+ export { x as McpServerCard, p as mcpServerCardShellVariants };
@@ -1 +1 @@
1
- {"version":3,"file":"tool-card.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/tool-card.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;AAE1E,iBAAS,eAAe,CAAC,EACvB,IAAI,EACJ,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAgB,EAChB,WAAmB,EACnB,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,gBAAgB,qBAkFlB;AAED,eAAO,MAAM,WAAW,mDAA8B,CAAC"}
1
+ {"version":3,"file":"tool-card.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/tool-card.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;AAE1E,iBAAS,eAAe,CAAC,EACvB,IAAI,EACJ,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAgB,EAChB,WAAmB,EACnB,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,gBAAgB,qBAkFlB;AAED,eAAO,MAAM,WAAW,mDAA8B,CAAC"}
@@ -2,6 +2,7 @@
2
2
  "use client";
3
3
  import { cn as e } from "../../../../lib/utils.js";
4
4
  import { i as t, n, r, t as i } from "../../../../tooltip-34vRSwJG.js";
5
+ import "./constants.js";
5
6
  import * as a from "react";
6
7
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
8
  import { Check as c } from "lucide-react";
@@ -48,14 +49,17 @@ function l({ name: a, rawName: l, version: u, description: d, selected: f = !1,
48
49
  }) : null]
49
50
  })]
50
51
  });
51
- return d ? /* @__PURE__ */ o(r, { children: /* @__PURE__ */ s(i, { children: [/* @__PURE__ */ o(t, { render: v }), /* @__PURE__ */ s(n, {
52
- className: "max-w-xs flex-col items-start gap-0.5 text-left text-xs",
53
- side: "bottom",
54
- children: [l && l !== a ? /* @__PURE__ */ o("span", {
55
- className: "font-medium",
56
- children: l
57
- }) : null, /* @__PURE__ */ o("span", { children: d })]
58
- })] }) }) : v;
52
+ return d ? /* @__PURE__ */ o(r, {
53
+ delay: 600,
54
+ children: /* @__PURE__ */ s(i, { children: [/* @__PURE__ */ o(t, { render: v }), /* @__PURE__ */ s(n, {
55
+ className: "max-w-xs flex-col items-start gap-0.5 text-left text-xs",
56
+ side: "bottom",
57
+ children: [l && l !== a ? /* @__PURE__ */ o("span", {
58
+ className: "font-medium",
59
+ children: l
60
+ }) : null, /* @__PURE__ */ o("span", { children: d })]
61
+ })] })
62
+ }) : v;
59
63
  }
60
64
  var u = a.memo(l);
61
65
  //#endregion
@@ -0,0 +1,8 @@
1
+ export type McpUnoptimizedMatchCardProps = {
2
+ serverCount: number;
3
+ toolCount: number;
4
+ onShow?: () => void;
5
+ className?: string;
6
+ };
7
+ export declare function McpUnoptimizedMatchCard({ serverCount, toolCount, onShow, className, }: McpUnoptimizedMatchCardProps): import("react").JSX.Element | null;
8
+ //# sourceMappingURL=unoptimized-match-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unoptimized-match-card.d.ts","sourceRoot":"","sources":["../../../../../lib/components/ui/molecules/mcp-server-picker/unoptimized-match-card.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,4BAA4B,GAAG;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAeF,wBAAgB,uBAAuB,CAAC,EACtC,WAAW,EACX,SAAS,EACT,MAAM,EACN,SAAS,GACV,EAAE,4BAA4B,sCA2E9B"}
@@ -0,0 +1,61 @@
1
+ "use client";
2
+ "use client";
3
+ import { cn as e } from "../../../../lib/utils.js";
4
+ import { i as t, n, r, t as i } from "../../../../tooltip-34vRSwJG.js";
5
+ import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
6
+ import { Braces as c, Info as l } from "lucide-react";
7
+ //#region lib/components/ui/molecules/mcp-server-picker/unoptimized-match-card.tsx
8
+ function u(e, t) {
9
+ return `${e} ${t}${e === 1 ? "" : "s"}`;
10
+ }
11
+ var d = /* @__PURE__ */ o(a, { children: "Tools built around individual actions rather than full tasks. Useful when you need something specific, but your agent often has to combine a few to complete a task." });
12
+ function f({ serverCount: a, toolCount: f, onShow: p, className: m }) {
13
+ if (a === 0 && f === 0) return null;
14
+ let h = [a > 0 ? `+${u(a, "server")}` : null, f > 0 ? `+${u(f, "tool")}` : null].filter(Boolean).join(" ");
15
+ return /* @__PURE__ */ s("div", {
16
+ className: e("flex h-full w-full items-center gap-2 rounded-lg border border-brand-text/40 border-dashed bg-muted/20 p-3", m),
17
+ "data-slot": "mcp-unoptimized-match-card",
18
+ children: [/* @__PURE__ */ o(r, { children: /* @__PURE__ */ s(i, { children: [/* @__PURE__ */ s(t, {
19
+ render: /* @__PURE__ */ o("button", {
20
+ "aria-label": `Show unoptimized (${h})`,
21
+ className: "flex min-w-0 flex-1 cursor-pointer items-center gap-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-inset",
22
+ onClick: p,
23
+ type: "button"
24
+ }),
25
+ children: [
26
+ /* @__PURE__ */ o(c, {
27
+ "aria-hidden": !0,
28
+ className: "size-5 shrink-0 text-brand-text"
29
+ }),
30
+ /* @__PURE__ */ o("span", {
31
+ className: "min-w-0 flex-1 truncate font-medium text-sm",
32
+ children: "Show unoptimized"
33
+ }),
34
+ /* @__PURE__ */ o("span", {
35
+ className: "shrink-0 whitespace-nowrap text-muted-foreground text-xs tabular-nums",
36
+ children: h
37
+ })
38
+ ]
39
+ }), /* @__PURE__ */ o(n, {
40
+ className: "max-w-xs",
41
+ side: "top",
42
+ children: d
43
+ })] }) }), /* @__PURE__ */ o(r, { children: /* @__PURE__ */ s(i, { children: [/* @__PURE__ */ o(t, {
44
+ render: /* @__PURE__ */ o("button", {
45
+ "aria-label": "What are unoptimized tools?",
46
+ className: "shrink-0 cursor-pointer rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 sm:hidden",
47
+ type: "button"
48
+ }),
49
+ children: /* @__PURE__ */ o(l, {
50
+ "aria-hidden": !0,
51
+ className: "size-3.5 text-muted-foreground"
52
+ })
53
+ }), /* @__PURE__ */ o(n, {
54
+ className: "max-w-xs",
55
+ side: "top",
56
+ children: d
57
+ })] }) })]
58
+ });
59
+ }
60
+ //#endregion
61
+ export { f as McpUnoptimizedMatchCard };
@@ -5,6 +5,12 @@ export type ScrollFadeAreaProps = {
5
5
  className?: string;
6
6
  /** Classes for the inner scroll viewport (padding, child spacing). */
7
7
  viewportClassName?: string;
8
+ /**
9
+ * Receives the scroll viewport element (or `null` on unmount). Use when a
10
+ * child needs the scroll container itself — e.g. a virtualizer that reads
11
+ * scroll position from it.
12
+ */
13
+ viewportRef?: (el: HTMLDivElement | null) => void;
8
14
  };
9
15
  /**
10
16
  * Vertical scroll area with "there's more" affordances on whichever edge still
@@ -22,5 +28,5 @@ export type ScrollFadeAreaProps = {
22
28
  * background-colored surface; on a `card`/`muted` surface the gradient seams.
23
29
  * Such callers want the mask treatment instead.
24
30
  */
25
- export declare function ScrollFadeArea({ children, className, viewportClassName, }: ScrollFadeAreaProps): import("react").JSX.Element;
31
+ export declare function ScrollFadeArea({ children, className, viewportClassName, viewportRef, }: ScrollFadeAreaProps): import("react").JSX.Element;
26
32
  //# sourceMappingURL=scroll-fade-area.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-fade-area.d.ts","sourceRoot":"","sources":["../../../../lib/components/ui/molecules/scroll-fade-area.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,SAAS,EACT,iBAAiB,GAClB,EAAE,mBAAmB,+BAiCrB"}
1
+ {"version":3,"file":"scroll-fade-area.d.ts","sourceRoot":"","sources":["../../../../lib/components/ui/molecules/scroll-fade-area.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAI5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,WAAW,GACZ,EAAE,mBAAmB,+BAkDrB"}
@@ -2,24 +2,29 @@
2
2
  "use client";
3
3
  import { cn as e } from "../../../lib/utils.js";
4
4
  import { useScrollFade as t } from "../../../hooks/use-scroll-fade.js";
5
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
+ import { useCallback as n, useRef as r } from "react";
6
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
7
  //#region lib/components/ui/molecules/scroll-fade-area.tsx
7
- function i({ children: i, className: a, viewportClassName: o }) {
8
- let s = t("y"), c = [s.edges.start && "inset 0 8px 12px -10px color-mix(in oklch, var(--shadow-color) 3%, transparent)", s.edges.end && "inset 0 -12px 16px -10px color-mix(in oklch, var(--shadow-color) 6%, transparent)"].filter(Boolean).join(", ") || void 0;
9
- return /* @__PURE__ */ r("div", {
10
- className: e("relative min-h-0 flex-1", a),
8
+ function o({ children: o, className: s, viewportClassName: c, viewportRef: l }) {
9
+ let u = t("y"), d = r(l);
10
+ d.current = l;
11
+ let f = n((e) => {
12
+ u.ref(e), d.current?.(e);
13
+ }, [u.ref]), p = [u.edges.start && "inset 0 8px 12px -10px color-mix(in oklch, var(--shadow-color) 3%, transparent)", u.edges.end && "inset 0 -12px 16px -10px color-mix(in oklch, var(--shadow-color) 6%, transparent)"].filter(Boolean).join(", ") || void 0;
14
+ return /* @__PURE__ */ a("div", {
15
+ className: e("relative min-h-0 flex-1", s),
11
16
  children: [
12
- s.edges.start ? /* @__PURE__ */ n("div", { className: "pointer-events-none absolute inset-x-0 top-0 z-10 h-8 bg-gradient-to-b from-background to-transparent dark:from-background/40" }) : null,
13
- s.edges.end ? /* @__PURE__ */ n("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 z-10 h-10 bg-gradient-to-t from-background to-transparent dark:from-background/40" }) : null,
14
- /* @__PURE__ */ n("div", {
15
- className: e("h-full overflow-y-auto transition-shadow duration-200", o),
16
- onScroll: s.onScroll,
17
- ref: s.ref,
18
- style: { boxShadow: c },
19
- children: i
17
+ u.edges.start ? /* @__PURE__ */ i("div", { className: "pointer-events-none absolute inset-x-0 top-0 z-10 h-8 bg-gradient-to-b from-background to-transparent dark:from-background/40" }) : null,
18
+ u.edges.end ? /* @__PURE__ */ i("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 z-10 h-10 bg-gradient-to-t from-background to-transparent dark:from-background/40" }) : null,
19
+ /* @__PURE__ */ i("div", {
20
+ className: e("h-full overflow-y-auto transition-shadow duration-200", c),
21
+ onScroll: u.onScroll,
22
+ ref: f,
23
+ style: { boxShadow: p },
24
+ children: o
20
25
  })
21
26
  ]
22
27
  });
23
28
  }
24
29
  //#endregion
25
- export { i as ScrollFadeArea };
30
+ export { o as ScrollFadeArea };