@assistant-ui/react-devtools 1.2.16 → 1.2.18

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.
@@ -4,12 +4,12 @@ import { useDevToolsClient } from "../data/useDevToolsClient.js";
4
4
  import { CenteredMessage } from "../views/ui/CenteredMessage.js";
5
5
  import { builtinPlugins } from "./registry.js";
6
6
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
7
- import { useEffect, useState } from "@assistant-ui/tap/react-shim";
7
+ import { useState } from "@assistant-ui/tap/react-shim";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import clsx from "clsx";
10
10
  //#region src/shell/DevToolsPanel.tsx
11
11
  const DevToolsPanel = (t0) => {
12
- const $ = c(54);
12
+ const $ = c(50);
13
13
  const { plugins, theme: t1, onClose, client } = t0;
14
14
  const theme = t1 === void 0 ? "light" : t1;
15
15
  const resolvedClient = client ?? inProcessClient;
@@ -22,33 +22,18 @@ const DevToolsPanel = (t0) => {
22
22
  } else t2 = $[0];
23
23
  const [selectionByApi, setSelectionByApi] = useState(t2);
24
24
  const { apiIds, selected, clearEvents, switchToThread } = useDevToolsClient(selectedApiId, resolvedClient);
25
+ const resolvedApiId = selectedApiId !== null && apiIds.includes(selectedApiId) ? selectedApiId : apiIds[0] ?? null;
26
+ if (resolvedApiId !== selectedApiId) setSelectedApiId(resolvedApiId);
25
27
  let t3;
28
+ if ($[1] !== plugins) {
29
+ t3 = [...builtinPlugins, ...plugins ?? []].sort(_temp);
30
+ $[1] = plugins;
31
+ $[2] = t3;
32
+ } else t3 = $[2];
33
+ const allPlugins = t3;
26
34
  let t4;
27
- if ($[1] !== apiIds || $[2] !== selectedApiId) {
28
- t3 = () => {
29
- if (selectedApiId !== null && apiIds.includes(selectedApiId)) return;
30
- setSelectedApiId(apiIds[0] ?? null);
31
- };
32
- t4 = [apiIds, selectedApiId];
33
- $[1] = apiIds;
34
- $[2] = selectedApiId;
35
- $[3] = t3;
36
- $[4] = t4;
37
- } else {
38
- t3 = $[3];
39
- t4 = $[4];
40
- }
41
- useEffect(t3, t4);
42
- let t5;
43
- if ($[5] !== plugins) {
44
- t5 = [...builtinPlugins, ...plugins ?? []].sort(_temp);
45
- $[5] = plugins;
46
- $[6] = t5;
47
- } else t5 = $[6];
48
- const allPlugins = t5;
49
- let t6;
50
- if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
51
- t6 = (apiId, tabId, nodeId) => {
35
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
36
+ t4 = (apiId, tabId, nodeId) => {
52
37
  setSelectionByApi((prev) => ({
53
38
  ...prev,
54
39
  [apiId]: {
@@ -57,12 +42,12 @@ const DevToolsPanel = (t0) => {
57
42
  }
58
43
  }));
59
44
  };
60
- $[7] = t6;
61
- } else t6 = $[7];
62
- const setSelectionFor = t6;
63
- let t7;
64
- if ($[8] !== allPlugins || $[9] !== clearEvents || $[10] !== selected || $[11] !== selectedApiId || $[12] !== theme) {
65
- t7 = selected && selectedApiId !== null ? allPlugins.filter((plugin) => plugin.isAvailable ? plugin.isAvailable({
45
+ $[3] = t4;
46
+ } else t4 = $[3];
47
+ const setSelectionFor = t4;
48
+ let t5;
49
+ if ($[4] !== allPlugins || $[5] !== clearEvents || $[6] !== selected || $[7] !== selectedApiId || $[8] !== theme) {
50
+ t5 = selected && selectedApiId !== null ? allPlugins.filter((plugin) => plugin.isAvailable ? plugin.isAvailable({
66
51
  apiId: selectedApiId,
67
52
  data: selected,
68
53
  clearEvents,
@@ -70,25 +55,25 @@ const DevToolsPanel = (t0) => {
70
55
  selection: null,
71
56
  setSelection: _temp2
72
57
  }) : true) : allPlugins;
73
- $[8] = allPlugins;
74
- $[9] = clearEvents;
75
- $[10] = selected;
76
- $[11] = selectedApiId;
77
- $[12] = theme;
78
- $[13] = t7;
79
- } else t7 = $[13];
80
- const visiblePlugins = t7;
81
- let t8;
82
- if ($[14] !== activeTabId || $[15] !== visiblePlugins) {
83
- t8 = visiblePlugins.find((plugin_0) => plugin_0.id === activeTabId) ?? visiblePlugins[0];
84
- $[14] = activeTabId;
85
- $[15] = visiblePlugins;
86
- $[16] = t8;
87
- } else t8 = $[16];
88
- const activePlugin = t8;
89
- let t9;
90
- if ($[17] !== activePlugin || $[18] !== clearEvents || $[19] !== resolvedClient || $[20] !== selected || $[21] !== selectedApiId || $[22] !== selectionByApi || $[23] !== switchToThread || $[24] !== theme) {
91
- t9 = selected && selectedApiId !== null && activePlugin ? {
58
+ $[4] = allPlugins;
59
+ $[5] = clearEvents;
60
+ $[6] = selected;
61
+ $[7] = selectedApiId;
62
+ $[8] = theme;
63
+ $[9] = t5;
64
+ } else t5 = $[9];
65
+ const visiblePlugins = t5;
66
+ let t6;
67
+ if ($[10] !== activeTabId || $[11] !== visiblePlugins) {
68
+ t6 = visiblePlugins.find((plugin_0) => plugin_0.id === activeTabId) ?? visiblePlugins[0];
69
+ $[10] = activeTabId;
70
+ $[11] = visiblePlugins;
71
+ $[12] = t6;
72
+ } else t6 = $[12];
73
+ const activePlugin = t6;
74
+ let t7;
75
+ if ($[13] !== activePlugin || $[14] !== clearEvents || $[15] !== resolvedClient || $[16] !== selected || $[17] !== selectedApiId || $[18] !== selectionByApi || $[19] !== switchToThread || $[20] !== theme) {
76
+ t7 = selected && selectedApiId !== null && activePlugin ? {
92
77
  apiId: selectedApiId,
93
78
  data: selected,
94
79
  clearEvents,
@@ -97,22 +82,22 @@ const DevToolsPanel = (t0) => {
97
82
  setSelection: (nodeId_0) => setSelectionFor(selectedApiId, activePlugin.id, nodeId_0),
98
83
  switchToThread: resolvedClient.switchToThread ? (threadId) => switchToThread(selectedApiId, threadId) : void 0
99
84
  } : null;
100
- $[17] = activePlugin;
101
- $[18] = clearEvents;
102
- $[19] = resolvedClient;
103
- $[20] = selected;
104
- $[21] = selectedApiId;
105
- $[22] = selectionByApi;
106
- $[23] = switchToThread;
107
- $[24] = theme;
108
- $[25] = t9;
109
- } else t9 = $[25];
110
- const ctx = t9;
111
- let t10;
112
- if ($[26] !== activePlugin?.id || $[27] !== visiblePlugins) {
113
- let t11;
114
- if ($[29] !== activePlugin?.id) {
115
- t11 = (plugin_1) => {
85
+ $[13] = activePlugin;
86
+ $[14] = clearEvents;
87
+ $[15] = resolvedClient;
88
+ $[16] = selected;
89
+ $[17] = selectedApiId;
90
+ $[18] = selectionByApi;
91
+ $[19] = switchToThread;
92
+ $[20] = theme;
93
+ $[21] = t7;
94
+ } else t7 = $[21];
95
+ const ctx = t7;
96
+ let t8;
97
+ if ($[22] !== activePlugin?.id || $[23] !== visiblePlugins) {
98
+ let t9;
99
+ if ($[25] !== activePlugin?.id) {
100
+ t9 = (plugin_1) => {
116
101
  const active = activePlugin?.id === plugin_1.id;
117
102
  return /* @__PURE__ */ jsxs("button", {
118
103
  type: "button",
@@ -121,26 +106,26 @@ const DevToolsPanel = (t0) => {
121
106
  children: [plugin_1.label, active ? /* @__PURE__ */ jsx("span", { className: "bg-foreground absolute inset-x-2 -bottom-px h-0.5 rounded-full" }) : null]
122
107
  }, plugin_1.id);
123
108
  };
124
- $[29] = activePlugin?.id;
125
- $[30] = t11;
126
- } else t11 = $[30];
127
- t10 = visiblePlugins.map(t11);
128
- $[26] = activePlugin?.id;
129
- $[27] = visiblePlugins;
130
- $[28] = t10;
131
- } else t10 = $[28];
132
- let t11;
133
- if ($[31] !== t10) {
134
- t11 = /* @__PURE__ */ jsx("div", {
109
+ $[25] = activePlugin?.id;
110
+ $[26] = t9;
111
+ } else t9 = $[26];
112
+ t8 = visiblePlugins.map(t9);
113
+ $[22] = activePlugin?.id;
114
+ $[23] = visiblePlugins;
115
+ $[24] = t8;
116
+ } else t8 = $[24];
117
+ let t9;
118
+ if ($[27] !== t8) {
119
+ t9 = /* @__PURE__ */ jsx("div", {
135
120
  className: "flex h-full items-center",
136
- children: t10
121
+ children: t8
137
122
  });
138
- $[31] = t10;
139
- $[32] = t11;
140
- } else t11 = $[32];
141
- let t12;
142
- if ($[33] !== apiIds || $[34] !== selectedApiId) {
143
- t12 = apiIds.length > 1 ? /* @__PURE__ */ jsx("select", {
123
+ $[27] = t8;
124
+ $[28] = t9;
125
+ } else t9 = $[28];
126
+ let t10;
127
+ if ($[29] !== apiIds || $[30] !== selectedApiId) {
128
+ t10 = apiIds.length > 1 ? /* @__PURE__ */ jsx("select", {
144
129
  value: selectedApiId ?? "",
145
130
  onChange: (event) => {
146
131
  const value = Number(event.target.value);
@@ -149,28 +134,28 @@ const DevToolsPanel = (t0) => {
149
134
  className: "border-border text-muted-foreground hover:text-foreground h-7 rounded-md border bg-transparent px-2 text-[12px] transition-colors",
150
135
  children: apiIds.map(_temp3)
151
136
  }) : null;
152
- $[33] = apiIds;
153
- $[34] = selectedApiId;
154
- $[35] = t12;
155
- } else t12 = $[35];
137
+ $[29] = apiIds;
138
+ $[30] = selectedApiId;
139
+ $[31] = t10;
140
+ } else t10 = $[31];
141
+ let t11;
142
+ if ($[32] === Symbol.for("react.memo_cache_sentinel")) {
143
+ t11 = /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-emerald-500" });
144
+ $[32] = t11;
145
+ } else t11 = $[32];
146
+ const t12 = apiIds.length > 0 ? `${apiIds.length} instance${apiIds.length > 1 ? "s" : ""}` : "Waiting";
156
147
  let t13;
157
- if ($[36] === Symbol.for("react.memo_cache_sentinel")) {
158
- t13 = /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-emerald-500" });
159
- $[36] = t13;
160
- } else t13 = $[36];
161
- const t14 = apiIds.length > 0 ? `${apiIds.length} instance${apiIds.length > 1 ? "s" : ""}` : "Waiting";
162
- let t15;
163
- if ($[37] !== t14) {
164
- t15 = /* @__PURE__ */ jsxs("span", {
148
+ if ($[33] !== t12) {
149
+ t13 = /* @__PURE__ */ jsxs("span", {
165
150
  className: "text-muted-foreground flex items-center gap-1.5 text-[11px]",
166
- children: [t13, t14]
151
+ children: [t11, t12]
167
152
  });
168
- $[37] = t14;
169
- $[38] = t15;
170
- } else t15 = $[38];
171
- let t16;
172
- if ($[39] !== onClose) {
173
- t16 = onClose ? /* @__PURE__ */ jsx("button", {
153
+ $[33] = t12;
154
+ $[34] = t13;
155
+ } else t13 = $[34];
156
+ let t14;
157
+ if ($[35] !== onClose) {
158
+ t14 = onClose ? /* @__PURE__ */ jsx("button", {
174
159
  type: "button",
175
160
  onClick: onClose,
176
161
  "aria-label": "Close DevTools",
@@ -190,55 +175,55 @@ const DevToolsPanel = (t0) => {
190
175
  })
191
176
  })
192
177
  }) : null;
193
- $[39] = onClose;
194
- $[40] = t16;
195
- } else t16 = $[40];
196
- let t17;
197
- if ($[41] !== t12 || $[42] !== t15 || $[43] !== t16) {
198
- t17 = /* @__PURE__ */ jsxs("div", {
178
+ $[35] = onClose;
179
+ $[36] = t14;
180
+ } else t14 = $[36];
181
+ let t15;
182
+ if ($[37] !== t10 || $[38] !== t13 || $[39] !== t14) {
183
+ t15 = /* @__PURE__ */ jsxs("div", {
199
184
  className: "flex items-center gap-2 pe-1",
200
185
  children: [
201
- t12,
202
- t15,
203
- t16
186
+ t10,
187
+ t13,
188
+ t14
204
189
  ]
205
190
  });
206
- $[41] = t12;
207
- $[42] = t15;
208
- $[43] = t16;
209
- $[44] = t17;
210
- } else t17 = $[44];
211
- let t18;
212
- if ($[45] !== t11 || $[46] !== t17) {
213
- t18 = /* @__PURE__ */ jsxs("nav", {
191
+ $[37] = t10;
192
+ $[38] = t13;
193
+ $[39] = t14;
194
+ $[40] = t15;
195
+ } else t15 = $[40];
196
+ let t16;
197
+ if ($[41] !== t15 || $[42] !== t9) {
198
+ t16 = /* @__PURE__ */ jsxs("nav", {
214
199
  className: "border-border flex h-10 shrink-0 items-center justify-between gap-2 border-b px-2 select-none",
215
- children: [t11, t17]
200
+ children: [t9, t15]
216
201
  });
217
- $[45] = t11;
218
- $[46] = t17;
219
- $[47] = t18;
220
- } else t18 = $[47];
221
- let t19;
222
- if ($[48] !== activePlugin || $[49] !== ctx) {
223
- t19 = /* @__PURE__ */ jsx("section", {
202
+ $[41] = t15;
203
+ $[42] = t9;
204
+ $[43] = t16;
205
+ } else t16 = $[43];
206
+ let t17;
207
+ if ($[44] !== activePlugin || $[45] !== ctx) {
208
+ t17 = /* @__PURE__ */ jsx("section", {
224
209
  className: "bg-background min-h-0 flex-1 overflow-hidden",
225
210
  children: ctx && activePlugin ? /* @__PURE__ */ jsx(activePlugin.Component, { ...ctx }) : /* @__PURE__ */ jsx(CenteredMessage, { children: "Waiting for assistant-ui instance..." })
226
211
  });
227
- $[48] = activePlugin;
228
- $[49] = ctx;
229
- $[50] = t19;
230
- } else t19 = $[50];
231
- let t20;
232
- if ($[51] !== t18 || $[52] !== t19) {
233
- t20 = /* @__PURE__ */ jsxs("div", {
212
+ $[44] = activePlugin;
213
+ $[45] = ctx;
214
+ $[46] = t17;
215
+ } else t17 = $[46];
216
+ let t18;
217
+ if ($[47] !== t16 || $[48] !== t17) {
218
+ t18 = /* @__PURE__ */ jsxs("div", {
234
219
  className: "text-foreground flex h-full flex-col text-[13px]",
235
- children: [t18, t19]
220
+ children: [t16, t17]
236
221
  });
237
- $[51] = t18;
238
- $[52] = t19;
239
- $[53] = t20;
240
- } else t20 = $[53];
241
- return t20;
222
+ $[47] = t16;
223
+ $[48] = t17;
224
+ $[49] = t18;
225
+ } else t18 = $[49];
226
+ return t18;
242
227
  };
243
228
  function _temp(a, b) {
244
229
  return (a.order ?? 0) - (b.order ?? 0);
@@ -1 +1 @@
1
- {"version":3,"file":"DevToolsPanel.js","names":["c","_c","useCallback","useEffect","useMemo","useState","clsx","useDevToolsClient","inProcessClient","DevToolsClient","CenteredMessage","builtinPlugins","DevToolsPanelPlugin","DevToolsTabContext","DevToolsPanelProps","plugins","theme","onClose","client","DevToolsPanel","t0","$","t1","undefined","resolvedClient","selectedApiId","setSelectedApiId","activeTabId","setActiveTabId","t2","Symbol","for","selectionByApi","setSelectionByApi","apiIds","selected","clearEvents","switchToThread","t3","t4","includes","t5","sort","_temp","allPlugins","t6","apiId","tabId","nodeId","prev","setSelectionFor","t7","filter","plugin","isAvailable","data","selection","setSelection","_temp2","visiblePlugins","t8","find","plugin_0","id","activePlugin","t9","nodeId_0","threadId","ctx","t10","t11","plugin_1","active","label","map","t12","length","event","value","Number","target","isNaN","_temp3","t13","t14","t15","t16","t17","t18","t19","t20","a","b","order"],"sources":["../../src/shell/DevToolsPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { useDevToolsClient } from \"../data/useDevToolsClient\";\nimport { inProcessClient } from \"../data/createInProcessClient\";\nimport type { DevToolsClient } from \"../data/types\";\nimport { CenteredMessage } from \"../views/ui\";\nimport {\n builtinPlugins,\n type DevToolsPanelPlugin,\n type DevToolsTabContext,\n} from \"./registry\";\n\nexport interface DevToolsPanelProps {\n /** Additional inspector tabs appended after the builtins. */\n plugins?: DevToolsPanelPlugin[] | undefined;\n /** Resolved theme, used to style plugin content and the dark variant. */\n theme?: \"light\" | \"dark\";\n /** When provided, a close control is rendered at the end of the tab bar. */\n onClose?: (() => void) | undefined;\n /** Data source. Defaults to the in-process DevToolsHooks client. */\n client?: DevToolsClient | undefined;\n}\n\nexport const DevToolsPanel = ({\n plugins,\n theme = \"light\",\n onClose,\n client,\n}: DevToolsPanelProps) => {\n const resolvedClient = client ?? inProcessClient;\n const [selectedApiId, setSelectedApiId] = useState<number | null>(null);\n const [activeTabId, setActiveTabId] = useState<string>(\"thread\");\n const [selectionByApi, setSelectionByApi] = useState<\n Record<number, Record<string, string | null>>\n >({});\n const { apiIds, selected, clearEvents, switchToThread } = useDevToolsClient(\n selectedApiId,\n resolvedClient,\n );\n\n useEffect(() => {\n if (selectedApiId !== null && apiIds.includes(selectedApiId)) return;\n setSelectedApiId(apiIds[0] ?? null);\n }, [apiIds, selectedApiId]);\n\n const allPlugins = useMemo(\n () =>\n [...builtinPlugins, ...(plugins ?? [])].sort(\n (a, b) => (a.order ?? 0) - (b.order ?? 0),\n ),\n [plugins],\n );\n\n const setSelectionFor = useCallback(\n (apiId: number, tabId: string, nodeId: string | null) => {\n setSelectionByApi((prev) => ({\n ...prev,\n [apiId]: { ...prev[apiId], [tabId]: nodeId },\n }));\n },\n [],\n );\n\n const visiblePlugins =\n selected && selectedApiId !== null\n ? allPlugins.filter((plugin) =>\n plugin.isAvailable\n ? plugin.isAvailable({\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: null,\n setSelection: () => {},\n })\n : true,\n )\n : allPlugins;\n\n const activePlugin =\n visiblePlugins.find((plugin) => plugin.id === activeTabId) ??\n visiblePlugins[0];\n\n const ctx: DevToolsTabContext | null =\n selected && selectedApiId !== null && activePlugin\n ? {\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: selectionByApi[selectedApiId]?.[activePlugin.id] ?? null,\n setSelection: (nodeId) =>\n setSelectionFor(selectedApiId, activePlugin.id, nodeId),\n switchToThread: resolvedClient.switchToThread\n ? (threadId) => switchToThread(selectedApiId, threadId)\n : undefined,\n }\n : null;\n\n return (\n <div className=\"text-foreground flex h-full flex-col text-[13px]\">\n <nav className=\"border-border flex h-10 shrink-0 items-center justify-between gap-2 border-b px-2 select-none\">\n <div className=\"flex h-full items-center\">\n {visiblePlugins.map((plugin) => {\n const active = activePlugin?.id === plugin.id;\n return (\n <button\n type=\"button\"\n key={plugin.id}\n onClick={() => setActiveTabId(plugin.id)}\n className={clsx(\n \"relative flex h-full items-center px-3 font-medium transition-colors\",\n active\n ? \"text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {plugin.label}\n {active ? (\n <span className=\"bg-foreground absolute inset-x-2 -bottom-px h-0.5 rounded-full\" />\n ) : null}\n </button>\n );\n })}\n </div>\n\n <div className=\"flex items-center gap-2 pe-1\">\n {apiIds.length > 1 ? (\n <select\n value={selectedApiId ?? \"\"}\n onChange={(event) => {\n const value = Number(event.target.value);\n setSelectedApiId(Number.isNaN(value) ? null : value);\n }}\n className=\"border-border text-muted-foreground hover:text-foreground h-7 rounded-md border bg-transparent px-2 text-[12px] transition-colors\"\n >\n {apiIds.map((id) => (\n <option key={id} value={id}>\n API #{id}\n </option>\n ))}\n </select>\n ) : null}\n\n <span className=\"text-muted-foreground flex items-center gap-1.5 text-[11px]\">\n <span className=\"size-1.5 rounded-full bg-emerald-500\" />\n {apiIds.length > 0\n ? `${apiIds.length} instance${apiIds.length > 1 ? \"s\" : \"\"}`\n : \"Waiting\"}\n </span>\n\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close DevTools\"\n className=\"text-muted-foreground hover:bg-accent hover:text-foreground flex size-7 items-center justify-center rounded-md transition-colors\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M18 6 6 18M6 6l12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n ) : null}\n </div>\n </nav>\n\n <section className=\"bg-background min-h-0 flex-1 overflow-hidden\">\n {ctx && activePlugin ? (\n <activePlugin.Component {...ctx} />\n ) : (\n <CenteredMessage>\n Waiting for assistant-ui instance...\n </CenteredMessage>\n )}\n </section>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DevToolsPanel.js","names":["c","_c","useCallback","useMemo","useState","clsx","useDevToolsClient","inProcessClient","DevToolsClient","CenteredMessage","builtinPlugins","DevToolsPanelPlugin","DevToolsTabContext","DevToolsPanelProps","plugins","theme","onClose","client","DevToolsPanel","t0","$","t1","undefined","resolvedClient","selectedApiId","setSelectedApiId","activeTabId","setActiveTabId","t2","Symbol","for","selectionByApi","setSelectionByApi","apiIds","selected","clearEvents","switchToThread","resolvedApiId","includes","t3","sort","_temp","allPlugins","t4","apiId","tabId","nodeId","prev","setSelectionFor","t5","filter","plugin","isAvailable","data","selection","setSelection","_temp2","visiblePlugins","t6","find","plugin_0","id","activePlugin","t7","nodeId_0","threadId","ctx","t8","t9","plugin_1","active","label","map","t10","length","event","value","Number","target","isNaN","_temp3","t11","t12","t13","t14","t15","t16","t17","t18","a","b","order"],"sources":["../../src/shell/DevToolsPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { useDevToolsClient } from \"../data/useDevToolsClient\";\nimport { inProcessClient } from \"../data/createInProcessClient\";\nimport type { DevToolsClient } from \"../data/types\";\nimport { CenteredMessage } from \"../views/ui\";\nimport {\n builtinPlugins,\n type DevToolsPanelPlugin,\n type DevToolsTabContext,\n} from \"./registry\";\n\nexport interface DevToolsPanelProps {\n /** Additional inspector tabs appended after the builtins. */\n plugins?: DevToolsPanelPlugin[] | undefined;\n /** Resolved theme, used to style plugin content and the dark variant. */\n theme?: \"light\" | \"dark\";\n /** When provided, a close control is rendered at the end of the tab bar. */\n onClose?: (() => void) | undefined;\n /** Data source. Defaults to the in-process DevToolsHooks client. */\n client?: DevToolsClient | undefined;\n}\n\nexport const DevToolsPanel = ({\n plugins,\n theme = \"light\",\n onClose,\n client,\n}: DevToolsPanelProps) => {\n const resolvedClient = client ?? inProcessClient;\n const [selectedApiId, setSelectedApiId] = useState<number | null>(null);\n const [activeTabId, setActiveTabId] = useState<string>(\"thread\");\n const [selectionByApi, setSelectionByApi] = useState<\n Record<number, Record<string, string | null>>\n >({});\n const { apiIds, selected, clearEvents, switchToThread } = useDevToolsClient(\n selectedApiId,\n resolvedClient,\n );\n\n const resolvedApiId =\n selectedApiId !== null && apiIds.includes(selectedApiId)\n ? selectedApiId\n : (apiIds[0] ?? null);\n\n if (resolvedApiId !== selectedApiId) setSelectedApiId(resolvedApiId);\n\n const allPlugins = useMemo(\n () =>\n [...builtinPlugins, ...(plugins ?? [])].sort(\n (a, b) => (a.order ?? 0) - (b.order ?? 0),\n ),\n [plugins],\n );\n\n const setSelectionFor = useCallback(\n (apiId: number, tabId: string, nodeId: string | null) => {\n setSelectionByApi((prev) => ({\n ...prev,\n [apiId]: { ...prev[apiId], [tabId]: nodeId },\n }));\n },\n [],\n );\n\n const visiblePlugins =\n selected && selectedApiId !== null\n ? allPlugins.filter((plugin) =>\n plugin.isAvailable\n ? plugin.isAvailable({\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: null,\n setSelection: () => {},\n })\n : true,\n )\n : allPlugins;\n\n const activePlugin =\n visiblePlugins.find((plugin) => plugin.id === activeTabId) ??\n visiblePlugins[0];\n\n const ctx: DevToolsTabContext | null =\n selected && selectedApiId !== null && activePlugin\n ? {\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: selectionByApi[selectedApiId]?.[activePlugin.id] ?? null,\n setSelection: (nodeId) =>\n setSelectionFor(selectedApiId, activePlugin.id, nodeId),\n switchToThread: resolvedClient.switchToThread\n ? (threadId) => switchToThread(selectedApiId, threadId)\n : undefined,\n }\n : null;\n\n return (\n <div className=\"text-foreground flex h-full flex-col text-[13px]\">\n <nav className=\"border-border flex h-10 shrink-0 items-center justify-between gap-2 border-b px-2 select-none\">\n <div className=\"flex h-full items-center\">\n {visiblePlugins.map((plugin) => {\n const active = activePlugin?.id === plugin.id;\n return (\n <button\n type=\"button\"\n key={plugin.id}\n onClick={() => setActiveTabId(plugin.id)}\n className={clsx(\n \"relative flex h-full items-center px-3 font-medium transition-colors\",\n active\n ? \"text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {plugin.label}\n {active ? (\n <span className=\"bg-foreground absolute inset-x-2 -bottom-px h-0.5 rounded-full\" />\n ) : null}\n </button>\n );\n })}\n </div>\n\n <div className=\"flex items-center gap-2 pe-1\">\n {apiIds.length > 1 ? (\n <select\n value={selectedApiId ?? \"\"}\n onChange={(event) => {\n const value = Number(event.target.value);\n setSelectedApiId(Number.isNaN(value) ? null : value);\n }}\n className=\"border-border text-muted-foreground hover:text-foreground h-7 rounded-md border bg-transparent px-2 text-[12px] transition-colors\"\n >\n {apiIds.map((id) => (\n <option key={id} value={id}>\n API #{id}\n </option>\n ))}\n </select>\n ) : null}\n\n <span className=\"text-muted-foreground flex items-center gap-1.5 text-[11px]\">\n <span className=\"size-1.5 rounded-full bg-emerald-500\" />\n {apiIds.length > 0\n ? `${apiIds.length} instance${apiIds.length > 1 ? \"s\" : \"\"}`\n : \"Waiting\"}\n </span>\n\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close DevTools\"\n className=\"text-muted-foreground hover:bg-accent hover:text-foreground flex size-7 items-center justify-center rounded-md transition-colors\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M18 6 6 18M6 6l12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n ) : null}\n </div>\n </nav>\n\n <section className=\"bg-background min-h-0 flex-1 overflow-hidden\">\n {ctx && activePlugin ? (\n <activePlugin.Component {...ctx} />\n ) : (\n <CenteredMessage>\n Waiting for assistant-ui instance...\n </CenteredMessage>\n )}\n </section>\n </div>\n );\n};\n"],"mappings":"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"}