@arcadeai/design-system 2.1.1 → 2.3.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 (23) hide show
  1. package/dist/components/index.js +1 -1
  2. package/dist/components/ui/index.js +1 -1
  3. package/dist/components/ui/molecules/index.js +1 -1
  4. package/dist/components/ui/molecules/requirement-badges.js +1 -1
  5. package/dist/components/ui/molecules/tool-card.js +24 -24
  6. package/dist/components/ui/molecules/toolkit-card.js +1 -1
  7. package/dist/components/ui/molecules/toolkit-selection-summary.js +1 -1
  8. package/dist/components/ui/organisms/toolkit-picker/components/action-buttons.d.ts +6 -0
  9. package/dist/components/ui/organisms/toolkit-picker/components/action-buttons.js +54 -0
  10. package/dist/components/ui/organisms/toolkit-picker/components/filter-badges.d.ts +1 -0
  11. package/dist/components/ui/organisms/toolkit-picker/components/filter-badges.js +92 -0
  12. package/dist/components/ui/organisms/toolkit-picker/components/search-input.js +52 -18
  13. package/dist/components/ui/organisms/toolkit-picker/components/select-button.js +1 -1
  14. package/dist/components/ui/organisms/toolkit-picker/components/toolkit-card-with-selection.js +1 -1
  15. package/dist/components/ui/organisms/toolkit-picker/components/toolkit-list.d.ts +6 -0
  16. package/dist/components/ui/organisms/toolkit-picker/components/toolkit-list.js +90 -0
  17. package/dist/components/ui/organisms/toolkit-picker/components/tools-list.d.ts +6 -0
  18. package/dist/components/ui/organisms/toolkit-picker/components/tools-list.js +97 -0
  19. package/dist/components/ui/organisms/toolkit-picker/toolkit-picker.js +105 -302
  20. package/dist/components/ui/organisms/toolkit-picker/toolkit-picker.test.js +642 -622
  21. package/dist/main.js +1 -1
  22. package/dist/{toolkit-card-DgjPGtsJ.js → toolkit-card-BWuG_NJi.js} +27 -27
  23. package/package.json +1 -1
@@ -148,7 +148,7 @@ import { Textarea as Qm } from "./ui/atoms/textarea.js";
148
148
  import { Toggle as Ym, toggleVariants as jm } from "./ui/atoms/toggle.js";
149
149
  import { Tooltip as _m, TooltipContent as $m, TooltipProvider as oi, TooltipTrigger as ri } from "./ui/atoms/tooltip.js";
150
150
  import { EmptyState as ti } from "./ui/molecules/empty-state.js";
151
- import { R as ai, T as mi } from "../toolkit-card-DgjPGtsJ.js";
151
+ import { R as ai, T as mi } from "../toolkit-card-BWuG_NJi.js";
152
152
  import { ToolCard as li } from "./ui/molecules/tool-card.js";
153
153
  import { ToolkitPickerTrigger as xi } from "./ui/molecules/toolkit-picker-trigger.js";
154
154
  import { ToolkitSelectionSummary as di } from "./ui/molecules/toolkit-selection-summary.js";
@@ -148,7 +148,7 @@ import { Textarea as Qm } from "./atoms/textarea.js";
148
148
  import { Toggle as Ym, toggleVariants as jm } from "./atoms/toggle.js";
149
149
  import { Tooltip as _m, TooltipContent as $m, TooltipProvider as oi, TooltipTrigger as ri } from "./atoms/tooltip.js";
150
150
  import { EmptyState as ti } from "./molecules/empty-state.js";
151
- import { R as ai, T as mi } from "../../toolkit-card-DgjPGtsJ.js";
151
+ import { R as ai, T as mi } from "../../toolkit-card-BWuG_NJi.js";
152
152
  import { ToolCard as li } from "./molecules/tool-card.js";
153
153
  import { ToolkitPickerTrigger as xi } from "./molecules/toolkit-picker-trigger.js";
154
154
  import { ToolkitSelectionSummary as di } from "./molecules/toolkit-selection-summary.js";
@@ -1,5 +1,5 @@
1
1
  import { EmptyState as e } from "./empty-state.js";
2
- import { R as m, T as a } from "../../../toolkit-card-DgjPGtsJ.js";
2
+ import { R as m, T as a } from "../../../toolkit-card-BWuG_NJi.js";
3
3
  import { ToolCard as p } from "./tool-card.js";
4
4
  import { ToolkitPickerTrigger as f } from "./toolkit-picker-trigger.js";
5
5
  import { ToolkitSelectionSummary as x } from "./toolkit-selection-summary.js";
@@ -11,7 +11,7 @@ import "../../../react-resizable-panels.browser-DggUboAp.js";
11
11
  import "../atoms/sidebar.js";
12
12
  import "../atoms/table.js";
13
13
  import "../atoms/tooltip.js";
14
- import { O as n, R as q, S as x } from "../../../toolkit-card-DgjPGtsJ.js";
14
+ import { O as n, R as q, S as x } from "../../../toolkit-card-BWuG_NJi.js";
15
15
  import "./tool-card.js";
16
16
  import "../../../metadata/toolkits.js";
17
17
  import "../organisms/toolkit-picker/hooks/use-toolkit-picker.js";
@@ -9,23 +9,23 @@ import { c as m } from "../../../utils-Db4QWi-E.js";
9
9
  import { createPropsComparator as j } from "../utils/memo.js";
10
10
  const K = /\s+/, O = 220, R = 40;
11
11
  function z({
12
- fully_qualified_name: u,
13
- name: k,
14
- toolkitName: p,
15
- description: n,
16
- Icon: C = (s) => /* @__PURE__ */ r(N, { ...s }),
17
- isSelected: o = !1,
12
+ fully_qualified_name: p,
13
+ name: b,
14
+ toolkitName: u,
15
+ description: o,
16
+ Icon: k = (s) => /* @__PURE__ */ r(N, { ...s }),
17
+ isSelected: n = !1,
18
18
  onSelect: l,
19
19
  hideCheckbox: h = !1,
20
- ...b
20
+ ...C
21
21
  }) {
22
22
  const s = t.useCallback(
23
- () => l?.(!o),
24
- [o, l]
25
- ), [i, x] = t.useState(!1), w = t.useMemo(() => n ? n.length > O ? !0 : n.trim().split(K).length > R : !1, [n]), y = (e) => {
23
+ () => l?.(!n),
24
+ [n, l]
25
+ ), [i, x] = t.useState(!1), y = t.useMemo(() => o ? o.length > O ? !0 : o.trim().split(K).length > R : !1, [o]), v = (e) => {
26
26
  const c = e.key === "Enter" || e.code === "Enter", d = e.key === " " || e.key === "Spacebar" || e.code === "Space";
27
27
  (c || d) && (e.preventDefault(), s());
28
- }, v = t.useCallback(
28
+ }, w = t.useCallback(
29
29
  (e) => l?.(!!e),
30
30
  [l]
31
31
  ), f = t.useCallback((e) => {
@@ -37,17 +37,17 @@ function z({
37
37
  return /* @__PURE__ */ r(
38
38
  D,
39
39
  {
40
- ...b,
41
- "aria-label": `Select tool ${u}`,
40
+ ...C,
41
+ "aria-label": `Select tool ${p}`,
42
42
  className: m(
43
43
  "group relative cursor-pointer overflow-hidden rounded-lg border py-3 transition-all duration-200",
44
44
  "bg-white/50 hover:bg-white/70 dark:bg-neutral-900/50 dark:hover:bg-neutral-900/70",
45
45
  "hover:-translate-y-0.5 hover:shadow-lg",
46
- o && "border-emerald-300 ring-2 ring-emerald-500 ring-offset-2 ring-offset-white dark:border-emerald-900/60 dark:ring-offset-neutral-950",
47
- !o && "border-neutral-200 hover:border-neutral-300 dark:border-neutral-800 dark:hover:border-neutral-700"
46
+ n && "border-2 border-emerald-600 dark:border-emerald-400",
47
+ !n && "border-neutral-200 hover:border-neutral-300 dark:border-neutral-800 dark:hover:border-neutral-700"
48
48
  ),
49
49
  onClick: s,
50
- onKeyDown: y,
50
+ onKeyDown: v,
51
51
  tabIndex: 0,
52
52
  children: /* @__PURE__ */ r(I, { className: "px-3", children: /* @__PURE__ */ a(
53
53
  "div",
@@ -61,8 +61,8 @@ function z({
61
61
  !h && /* @__PURE__ */ r("div", { className: "flex items-center justify-center pt-1.5", children: /* @__PURE__ */ r(
62
62
  P,
63
63
  {
64
- checked: o,
65
- onCheckedChange: v,
64
+ checked: n,
65
+ onCheckedChange: w,
66
66
  onClick: f,
67
67
  onKeyDown: g,
68
68
  tabIndex: -1
@@ -70,13 +70,13 @@ function z({
70
70
  ) }),
71
71
  /* @__PURE__ */ a("div", { className: "min-w-0 space-y-2", children: [
72
72
  /* @__PURE__ */ a("div", { className: "flex min-w-0 items-start gap-3", children: [
73
- /* @__PURE__ */ r("div", { className: "flex size-9 items-center justify-center rounded bg-gradient-to-b from-neutral-200 to-neutral-100 ring-1 ring-black/5 dark:from-neutral-800 dark:to-neutral-900 dark:ring-white/5", children: /* @__PURE__ */ r(C, { className: "size-6 text-neutral-700 dark:text-neutral-200" }) }),
73
+ /* @__PURE__ */ r("div", { className: "flex size-9 items-center justify-center rounded bg-gradient-to-b from-neutral-200 to-neutral-100 ring-1 ring-black/5 dark:from-neutral-800 dark:to-neutral-900 dark:ring-white/5", children: /* @__PURE__ */ r(k, { className: "size-6 text-neutral-700 dark:text-neutral-200" }) }),
74
74
  /* @__PURE__ */ a("div", { className: "flex h-9 min-w-0 flex-col justify-center space-y-0.5", children: [
75
- /* @__PURE__ */ r("h3", { className: "truncate font-semibold text-base text-neutral-900 leading-tight dark:text-neutral-100", children: k ?? u }),
76
- p && /* @__PURE__ */ r("span", { className: "font-medium text-neutral-500 text-xs leading-tight dark:text-neutral-400", children: p })
75
+ /* @__PURE__ */ r("h3", { className: "truncate font-semibold text-base text-neutral-900 leading-tight dark:text-neutral-100", children: b ?? p }),
76
+ u && /* @__PURE__ */ r("span", { className: "font-medium text-neutral-500 text-xs leading-tight dark:text-neutral-400", children: u })
77
77
  ] })
78
78
  ] }),
79
- n && /* @__PURE__ */ a(T, { onOpenChange: x, open: i, children: [
79
+ o && /* @__PURE__ */ a(T, { onOpenChange: x, open: i, children: [
80
80
  /* @__PURE__ */ a("div", { className: "space-y-1", children: [
81
81
  /* @__PURE__ */ r(
82
82
  "p",
@@ -85,10 +85,10 @@ function z({
85
85
  "text-neutral-600 text-sm dark:text-neutral-400",
86
86
  !i && "line-clamp-3"
87
87
  ),
88
- children: n
88
+ children: o
89
89
  }
90
90
  ),
91
- w && /* @__PURE__ */ r(_, { asChild: !0, children: /* @__PURE__ */ a(
91
+ y && /* @__PURE__ */ r(_, { asChild: !0, children: /* @__PURE__ */ a(
92
92
  E,
93
93
  {
94
94
  className: "h-auto px-0",
@@ -6,7 +6,7 @@ import "../atoms/card.js";
6
6
  import "../atoms/checkbox.js";
7
7
  import "../atoms/view-tools-control.js";
8
8
  import "../../../utils-Db4QWi-E.js";
9
- import { T as k } from "../../../toolkit-card-DgjPGtsJ.js";
9
+ import { T as k } from "../../../toolkit-card-BWuG_NJi.js";
10
10
  import "../utils/memo.js";
11
11
  export {
12
12
  k as ToolkitCard
@@ -7,7 +7,7 @@ import "../../../react-resizable-panels.browser-DggUboAp.js";
7
7
  import "../atoms/sidebar.js";
8
8
  import "react";
9
9
  import "../atoms/table.js";
10
- import "../../../toolkit-card-DgjPGtsJ.js";
10
+ import "../../../toolkit-card-BWuG_NJi.js";
11
11
  import "./tool-card.js";
12
12
  import { getToolkitIcon as z } from "../atoms/icons/utils.js";
13
13
  import "../organisms/toolkit-picker/hooks/use-toolkit-picker.js";
@@ -0,0 +1,6 @@
1
+ import { SelectionMode } from '../index';
2
+ type ActionButtonsProps = {
3
+ selectionMode: SelectionMode;
4
+ };
5
+ export declare function ActionButtons({ selectionMode }: ActionButtonsProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,54 @@
1
+ import { jsxs as l, jsx as r } from "react/jsx-runtime";
2
+ import { X as v, CheckSquare as x } from "lucide-react";
3
+ import { Button as s } from "../../../atoms/button.js";
4
+ import { useToolkitPicker as b } from "../hooks/use-toolkit-picker.js";
5
+ function y({ selectionMode: o }) {
6
+ const {
7
+ state: {
8
+ selectedToolkits: i,
9
+ selectedTools: a,
10
+ activeTab: n,
11
+ filteredToolkits: c,
12
+ filteredTools: d
13
+ },
14
+ clearSelections: m,
15
+ selectAll: u
16
+ } = b(), h = i.size > 0 || a.size > 0, t = n === "toolkits" ? Array.from(c).flatMap(
17
+ (e) => e.tools.map((k) => k.fully_qualified_name)
18
+ ) : Array.from(d).map((e) => e.fully_qualified_name), f = t.length > 0 && t.every((e) => a.has(e));
19
+ return /* @__PURE__ */ l("div", { className: "hidden items-center gap-2 sm:flex", children: [
20
+ h && /* @__PURE__ */ l(
21
+ s,
22
+ {
23
+ className: "h-8 border-neutral-300 text-neutral-700 hover:bg-neutral-50 hover:text-neutral-900 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-900/40 dark:hover:text-neutral-100",
24
+ "data-testid": "clear-selections",
25
+ onClick: m,
26
+ size: "sm",
27
+ variant: "outline",
28
+ children: [
29
+ /* @__PURE__ */ r(v, { className: "h-4 w-4 text-red-600 dark:text-red-400" }),
30
+ "Clear All"
31
+ ]
32
+ }
33
+ ),
34
+ o === "multi" && !f && /* @__PURE__ */ l(
35
+ s,
36
+ {
37
+ className: "h-8",
38
+ "data-testid": "select-all",
39
+ onClick: () => {
40
+ u(t);
41
+ },
42
+ size: "sm",
43
+ variant: "outline",
44
+ children: [
45
+ /* @__PURE__ */ r(x, { className: "h-4 w-4" }),
46
+ "Select all"
47
+ ]
48
+ }
49
+ )
50
+ ] });
51
+ }
52
+ export {
53
+ y as ActionButtons
54
+ };
@@ -0,0 +1 @@
1
+ export declare function FilterBadges(): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,92 @@
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { FilterIcon as u, X as l, Search as x } from "lucide-react";
3
+ import { Badge as i } from "../../../atoms/badge.js";
4
+ import { getToolkitIcon as b } from "../../../atoms/icons/utils.js";
5
+ import { useToolkitPicker as h } from "../hooks/use-toolkit-picker.js";
6
+ function y() {
7
+ const {
8
+ state: { toolkitFilter: t, searchQuery: a, filteredToolkits: d },
9
+ setActiveTab: n,
10
+ clearFilter: s,
11
+ clearSearchQuery: o
12
+ } = h();
13
+ return t || a ? /* @__PURE__ */ r("div", { className: "mb-2 flex flex-wrap items-center gap-2", children: [
14
+ t && /* @__PURE__ */ r(
15
+ i,
16
+ {
17
+ className: "h-8 border border-purple-200 bg-purple-50 pr-1.5 pl-2 text-purple-800 shadow-sm ring-1 ring-purple-200/50 dark:border-purple-800/60 dark:bg-purple-950/40 dark:text-purple-200 dark:ring-purple-800/30",
18
+ variant: "secondary",
19
+ children: [
20
+ /* @__PURE__ */ r("span", { className: "mr-1.5 inline-flex items-center gap-1 rounded-full bg-purple-100 px-1.5 py-0.5 text-[10px] text-purple-700 dark:bg-purple-800/60 dark:text-purple-200", children: [
21
+ /* @__PURE__ */ e(u, { className: "h-3 w-3" }),
22
+ "Filter"
23
+ ] }),
24
+ /* @__PURE__ */ r(
25
+ "button",
26
+ {
27
+ className: "inline-flex h-full items-center gap-1.5",
28
+ "data-testid": "filter-badge",
29
+ onClick: () => n("toolkits"),
30
+ type: "button",
31
+ children: [
32
+ (() => {
33
+ const c = Array.from(d).find(
34
+ (m) => m.name === t
35
+ ), p = b({
36
+ metadataIcon: c?.metadata?.icon,
37
+ toolkitName: t
38
+ });
39
+ return /* @__PURE__ */ e(p, { className: "h-3.5 w-3.5" });
40
+ })(),
41
+ /* @__PURE__ */ e("span", { className: "font-medium text-xs", children: t })
42
+ ]
43
+ }
44
+ ),
45
+ /* @__PURE__ */ e(
46
+ "button",
47
+ {
48
+ "aria-label": "Clear toolkit filter",
49
+ className: "ml-1 inline-flex h-5 w-5 items-center justify-center rounded-full bg-purple-100 text-red-600 hover:bg-red-100 hover:text-red-700 focus-visible:ring-[3px] focus-visible:ring-red-200 dark:bg-purple-800/60 dark:text-red-400 dark:hover:bg-red-950/40 dark:hover:text-red-300",
50
+ "data-testid": "clear-filter",
51
+ onClick: s,
52
+ type: "button",
53
+ children: /* @__PURE__ */ e(l, { className: "h-3.5 w-3.5" })
54
+ }
55
+ )
56
+ ]
57
+ }
58
+ ),
59
+ a && /* @__PURE__ */ r(
60
+ i,
61
+ {
62
+ className: "h-8 border border-teal-200 bg-teal-50 pr-1.5 pl-2 text-teal-800 shadow-sm ring-1 ring-teal-200/50 dark:border-teal-800/60 dark:bg-teal-950/40 dark:text-teal-200 dark:ring-teal-800/30",
63
+ variant: "secondary",
64
+ children: [
65
+ /* @__PURE__ */ r("span", { className: "mr-1.5 inline-flex items-center gap-1 rounded-full bg-teal-100 px-1.5 py-0.5 text-[10px] text-teal-700 dark:bg-teal-800/60 dark:text-teal-200", children: [
66
+ /* @__PURE__ */ e(x, { className: "h-3 w-3" }),
67
+ "Search"
68
+ ] }),
69
+ /* @__PURE__ */ r("span", { className: "font-medium text-xs", children: [
70
+ '"',
71
+ a,
72
+ '"'
73
+ ] }),
74
+ /* @__PURE__ */ e(
75
+ "button",
76
+ {
77
+ "aria-label": "Clear search query",
78
+ className: "ml-1 inline-flex h-5 w-5 items-center justify-center rounded-full bg-teal-100 text-red-600 hover:bg-red-100 hover:text-red-700 focus-visible:ring-[3px] focus-visible:ring-red-200 dark:bg-teal-800/60 dark:text-red-400 dark:hover:bg-red-950/40 dark:hover:text-red-300",
79
+ "data-testid": "clear-search",
80
+ onClick: o,
81
+ type: "button",
82
+ children: /* @__PURE__ */ e(l, { className: "h-3.5 w-3.5" })
83
+ }
84
+ )
85
+ ]
86
+ }
87
+ )
88
+ ] }) : null;
89
+ }
90
+ export {
91
+ y as FilterBadges
92
+ };
@@ -1,35 +1,69 @@
1
- import { jsxs as a, jsx as t } from "react/jsx-runtime";
2
- import { Search as i } from "lucide-react";
1
+ import { jsxs as d, jsx as e } from "react/jsx-runtime";
2
+ import { Search as y } from "lucide-react";
3
+ import { useRef as T } from "react";
3
4
  import "../../../atoms/mobile-tooltip.js";
4
5
  import "../../../atoms/chart.js";
5
- import { Input as s } from "../../../atoms/input.js";
6
+ import { Input as k } from "../../../atoms/input.js";
6
7
  import "../../../../../react-resizable-panels.browser-DggUboAp.js";
7
8
  import "../../../atoms/sidebar.js";
8
- import "react";
9
9
  import "../../../atoms/table.js";
10
- import "../../../../../toolkit-card-DgjPGtsJ.js";
10
+ import "../../../../../toolkit-card-BWuG_NJi.js";
11
11
  import "../../../molecules/tool-card.js";
12
12
  import "../../../../../metadata/toolkits.js";
13
- import { useToolkitPicker as m } from "../hooks/use-toolkit-picker.js";
14
- function k() {
15
- const {
16
- state: { searchQuery: r },
17
- setSearchQuery: e
18
- } = m();
19
- return /* @__PURE__ */ a("div", { className: "relative flex-1", children: [
20
- /* @__PURE__ */ t(i, { className: "-translate-y-1/2 absolute top-1/2 left-3.5 size-4 text-gray-400" }),
21
- /* @__PURE__ */ t(
22
- s,
13
+ import { useToolkitPicker as g } from "../hooks/use-toolkit-picker.js";
14
+ function z() {
15
+ const r = T(null), {
16
+ state: {
17
+ searchQuery: o,
18
+ activeTab: i,
19
+ filteredToolkits: s,
20
+ filteredTools: l,
21
+ selectionMode: a
22
+ },
23
+ setSearchQuery: n,
24
+ toggleToolkit: c,
25
+ toggleTool: u,
26
+ setActiveTab: m,
27
+ setToolkitFilter: f
28
+ } = g(), p = () => {
29
+ const t = Array.from(s)[0];
30
+ if (t) {
31
+ if (a === "single") {
32
+ f(t.name), m("tools");
33
+ return;
34
+ }
35
+ c(t);
36
+ }
37
+ }, h = () => {
38
+ const t = Array.from(l)[0];
39
+ t && u(t);
40
+ };
41
+ return /* @__PURE__ */ d("div", { className: "relative flex-1", children: [
42
+ /* @__PURE__ */ e(y, { className: "-translate-y-1/2 absolute top-1/2 left-3.5 size-4 text-gray-400" }),
43
+ /* @__PURE__ */ e(
44
+ k,
23
45
  {
46
+ "aria-label": "Search toolkits and tools",
47
+ autoFocus: !0,
24
48
  className: "h-9 pl-10",
25
49
  "data-testid": "search-input",
26
- onChange: (o) => e(o.target.value),
50
+ onChange: (t) => n(t.target.value),
51
+ onKeyDown: (t) => {
52
+ if (!(t.key !== "Enter" || !(o.trim().length > 0))) {
53
+ if (t.preventDefault(), t.stopPropagation(), i === "toolkits") {
54
+ p();
55
+ return;
56
+ }
57
+ h();
58
+ }
59
+ },
27
60
  placeholder: "Search toolkits and tools",
28
- value: r
61
+ ref: r,
62
+ value: o
29
63
  }
30
64
  )
31
65
  ] });
32
66
  }
33
67
  export {
34
- k as SearchInput
68
+ z as SearchInput
35
69
  };
@@ -7,7 +7,7 @@ import "../../../../../react-resizable-panels.browser-DggUboAp.js";
7
7
  import "../../../atoms/sidebar.js";
8
8
  import "react";
9
9
  import "../../../atoms/table.js";
10
- import "../../../../../toolkit-card-DgjPGtsJ.js";
10
+ import "../../../../../toolkit-card-BWuG_NJi.js";
11
11
  import "../../../molecules/tool-card.js";
12
12
  import "../../../../../metadata/toolkits.js";
13
13
  import "../hooks/use-toolkit-picker.js";
@@ -1,6 +1,6 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
2
  import { getToolkitIcon as c } from "../../../atoms/icons/utils.js";
3
- import { T as d } from "../../../../../toolkit-card-DgjPGtsJ.js";
3
+ import { T as d } from "../../../../../toolkit-card-BWuG_NJi.js";
4
4
  function g({
5
5
  toolkit: e,
6
6
  selectedTools: o,
@@ -0,0 +1,6 @@
1
+ import { SelectionMode } from '../index';
2
+ type ToolkitListProps = {
3
+ selectionMode: SelectionMode;
4
+ };
5
+ export declare function ToolkitList({ selectionMode }: ToolkitListProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,90 @@
1
+ import { jsx as t, jsxs as l } from "react/jsx-runtime";
2
+ import { EmptyState as k } from "../../../molecules/empty-state.js";
3
+ import "../../../../../toolkit-card-BWuG_NJi.js";
4
+ import "../../../molecules/tool-card.js";
5
+ import "lucide-react";
6
+ import "../../../../../metadata/toolkits.js";
7
+ import { useToolkitPicker as f } from "../hooks/use-toolkit-picker.js";
8
+ import "../../../atoms/mobile-tooltip.js";
9
+ import "../../../atoms/chart.js";
10
+ import "../../../../../react-resizable-panels.browser-DggUboAp.js";
11
+ import "../../../atoms/sidebar.js";
12
+ import "react";
13
+ import "../../../atoms/table.js";
14
+ import { ToolkitCardWithSelection as h } from "./toolkit-card-with-selection.js";
15
+ function F({ selectionMode: s }) {
16
+ const {
17
+ state: { filteredToolkits: i, selectedToolkits: r, selectedTools: a },
18
+ toggleToolkit: x,
19
+ setActiveTab: d,
20
+ setToolkitFilter: n
21
+ } = f();
22
+ if (i.size === 0)
23
+ return /* @__PURE__ */ t(
24
+ k,
25
+ {
26
+ "data-testid": "empty-toolkits",
27
+ description: "Try a different search term",
28
+ title: "No toolkits found"
29
+ }
30
+ );
31
+ const m = Array.from(i), o = m.filter(
32
+ (e) => r.has(e.name)
33
+ ), c = m.filter(
34
+ (e) => !r.has(e.name)
35
+ ), p = (e) => (u) => {
36
+ if (s === "single") {
37
+ d("tools"), n(e.name);
38
+ return;
39
+ }
40
+ x(e);
41
+ }, g = (e) => () => {
42
+ n(e.name), d("tools");
43
+ };
44
+ return /* @__PURE__ */ l("div", { className: "space-y-4", "data-testid": "toolkits-grid", children: [
45
+ o.length > 0 && /* @__PURE__ */ l(
46
+ "div",
47
+ {
48
+ className: "mt-0.5 space-y-2",
49
+ "data-testid": "selected-toolkits-section",
50
+ children: [
51
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-1.5", children: [
52
+ /* @__PURE__ */ t("h3", { className: "font-semibold text-neutral-700 text-sm dark:text-neutral-200", children: "Selected" }),
53
+ /* @__PURE__ */ t("span", { className: "rounded-full bg-emerald-300 px-1.5 py-0.5 text-emerald-900 text-xs dark:bg-emerald-500/25 dark:text-emerald-200", children: o.length })
54
+ ] }),
55
+ /* @__PURE__ */ t("div", { className: "mt-3 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3", children: o.map((e) => /* @__PURE__ */ t(
56
+ h,
57
+ {
58
+ onSelect: p(e),
59
+ onView: g(e),
60
+ selectedTools: new Set(a.keys()),
61
+ selectionMode: s,
62
+ toolkit: e
63
+ },
64
+ e.name
65
+ )) })
66
+ ]
67
+ }
68
+ ),
69
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
70
+ o.length > 0 && /* @__PURE__ */ l("div", { className: "flex items-center gap-1.5", children: [
71
+ /* @__PURE__ */ t("h3", { className: "font-semibold text-neutral-700 text-sm dark:text-neutral-200", children: "All toolkits" }),
72
+ /* @__PURE__ */ t("span", { className: "rounded-full bg-neutral-200 px-1.5 py-0.5 text-neutral-800 text-xs dark:bg-neutral-800 dark:text-neutral-200", children: c.length })
73
+ ] }),
74
+ /* @__PURE__ */ t("div", { className: "mt-2 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3", children: c.map((e) => /* @__PURE__ */ t(
75
+ h,
76
+ {
77
+ onSelect: p(e),
78
+ onView: g(e),
79
+ selectedTools: new Set(a.keys()),
80
+ selectionMode: s,
81
+ toolkit: e
82
+ },
83
+ e.name
84
+ )) })
85
+ ] })
86
+ ] });
87
+ }
88
+ export {
89
+ F as ToolkitList
90
+ };
@@ -0,0 +1,6 @@
1
+ import { SelectionMode } from '../index';
2
+ type ToolsListProps = {
3
+ selectionMode: SelectionMode;
4
+ };
5
+ export declare function ToolsList({ selectionMode }: ToolsListProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,97 @@
1
+ import { jsx as t, jsxs as a } from "react/jsx-runtime";
2
+ import { getToolIconByToolkitName as u } from "../../../atoms/icons/utils.js";
3
+ import { EmptyState as h } from "../../../molecules/empty-state.js";
4
+ import "../../../../../toolkit-card-BWuG_NJi.js";
5
+ import { ToolCard as p } from "../../../molecules/tool-card.js";
6
+ import "lucide-react";
7
+ import { useToolkitPicker as x } from "../hooks/use-toolkit-picker.js";
8
+ import "../../../atoms/mobile-tooltip.js";
9
+ import "../../../atoms/chart.js";
10
+ import "../../../../../react-resizable-panels.browser-DggUboAp.js";
11
+ import "../../../atoms/sidebar.js";
12
+ import "react";
13
+ import "../../../atoms/table.js";
14
+ function $({ selectionMode: d }) {
15
+ const {
16
+ state: { filteredTools: n, filteredToolkits: o, selectedTools: l },
17
+ toggleTool: m
18
+ } = x();
19
+ if (n.size === 0)
20
+ return /* @__PURE__ */ t(
21
+ h,
22
+ {
23
+ "data-testid": "empty-tools",
24
+ description: "Try a different search term",
25
+ title: "No tools found"
26
+ }
27
+ );
28
+ const c = Array.from(n), i = c.filter(
29
+ (e) => l.has(e.fully_qualified_name)
30
+ ), f = c.filter(
31
+ (e) => !l.has(e.fully_qualified_name)
32
+ );
33
+ return /* @__PURE__ */ a("div", { className: "space-y-4", "data-testid": "tools-grid", children: [
34
+ i.length > 0 && /* @__PURE__ */ a("div", { className: "mt-0.5 space-y-2", "data-testid": "selected-tools-section", children: [
35
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-1.5", children: [
36
+ /* @__PURE__ */ t("h3", { className: "font-semibold text-neutral-700 text-sm dark:text-neutral-200", children: "Selected" }),
37
+ /* @__PURE__ */ t("span", { className: "rounded-full bg-emerald-300 px-1.5 py-0.5 text-emerald-900 text-xs dark:bg-emerald-600 dark:text-emerald-200", children: i.length })
38
+ ] }),
39
+ /* @__PURE__ */ t(
40
+ "div",
41
+ {
42
+ className: "mt-3 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3",
43
+ "data-testid": "selected-tools-grid",
44
+ children: i.map((e) => {
45
+ const r = Array.from(o).find(
46
+ (s) => s.name === e.toolkit.name
47
+ )?.metadata?.icon ?? u(e.toolkit.name);
48
+ return /* @__PURE__ */ t(
49
+ p,
50
+ {
51
+ "data-testid": `tool-card-${e.fully_qualified_name}`,
52
+ description: e.description,
53
+ fully_qualified_name: e.fully_qualified_name,
54
+ hideCheckbox: d === "single",
55
+ Icon: r,
56
+ isSelected: l.has(e.fully_qualified_name),
57
+ name: e.name,
58
+ onSelect: () => m(e),
59
+ toolkitName: e.toolkit.name
60
+ },
61
+ e.fully_qualified_name
62
+ );
63
+ })
64
+ }
65
+ )
66
+ ] }),
67
+ /* @__PURE__ */ a("div", { className: "space-y-2", children: [
68
+ i.length > 0 && /* @__PURE__ */ a("div", { className: "flex items-center gap-1.5", children: [
69
+ /* @__PURE__ */ t("h3", { className: "font-semibold text-neutral-700 text-sm dark:text-neutral-200", children: "All tools" }),
70
+ /* @__PURE__ */ t("span", { className: "rounded-full bg-neutral-200 px-1.5 py-0.5 text-neutral-800 text-xs dark:bg-neutral-800 dark:text-neutral-200", children: f.length })
71
+ ] }),
72
+ /* @__PURE__ */ t("div", { className: "mt-2 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3", children: f.map((e) => {
73
+ const r = Array.from(o).find(
74
+ (s) => s.name === e.toolkit.name
75
+ )?.metadata?.icon ?? u(e.toolkit.name);
76
+ return /* @__PURE__ */ t(
77
+ p,
78
+ {
79
+ "data-testid": `tool-card-${e.fully_qualified_name}`,
80
+ description: e.description,
81
+ fully_qualified_name: e.fully_qualified_name,
82
+ hideCheckbox: d === "single",
83
+ Icon: r,
84
+ isSelected: l.has(e.fully_qualified_name),
85
+ name: e.name,
86
+ onSelect: () => m(e),
87
+ toolkitName: e.toolkit.name
88
+ },
89
+ e.fully_qualified_name
90
+ );
91
+ }) })
92
+ ] })
93
+ ] });
94
+ }
95
+ export {
96
+ $ as ToolsList
97
+ };