@adecore/agents-react 0.37.1 → 0.37.3

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 (105) hide show
  1. package/dist/chat/chat-client.d.ts +1 -0
  2. package/dist/chat/chat-client.js +2 -1
  3. package/dist/chat/chat-references.d.ts +16 -1
  4. package/dist/chat/chat-references.js +29 -3
  5. package/dist/chat/drafts.d.ts +2 -0
  6. package/dist/chat/drafts.js +21 -5
  7. package/dist/chat/index.d.ts +1 -1
  8. package/dist/chat/logic/picker-entries.d.ts +6 -1
  9. package/dist/chat/logic/picker-entries.js +10 -0
  10. package/dist/chat/mentions.d.ts +31 -14
  11. package/dist/chat/mentions.js +186 -41
  12. package/dist/chat/stash.d.ts +1 -0
  13. package/dist/chat/stash.js +4 -2
  14. package/dist/chat/ui/Composer.js +438 -429
  15. package/dist/chat/ui/ComposerInput.d.ts +1 -0
  16. package/dist/chat/ui/ComposerInput.js +2 -0
  17. package/dist/chat/ui/Markdown.d.ts +3 -1
  18. package/dist/chat/ui/Markdown.js +194 -120
  19. package/dist/chat/ui/MessageActions.js +70 -66
  20. package/dist/chat/ui/Pickers.js +151 -207
  21. package/dist/chat/ui/ReferenceChip.d.ts +15 -0
  22. package/dist/chat/ui/ReferenceChip.js +255 -0
  23. package/dist/chat/ui/RunSettings.js +25 -21
  24. package/dist/chat/ui/Timeline.js +52 -29
  25. package/dist/chat/ui/TimelineMenu.js +84 -78
  26. package/dist/chat/ui/chip-clipboard.d.ts +9 -0
  27. package/dist/chat/ui/chip-clipboard.js +105 -0
  28. package/dist/chat/ui/chips.d.ts +5 -0
  29. package/dist/chat/ui/chips.js +15 -1
  30. package/dist/chat/ui/composer/ComposerMenu.js +140 -79
  31. package/dist/chat/ui/composer/DraftParts.d.ts +0 -4
  32. package/dist/chat/ui/composer/DraftParts.js +0 -41
  33. package/dist/chat/ui/composer/chip-paste.d.ts +15 -0
  34. package/dist/chat/ui/composer/chip-paste.js +104 -0
  35. package/dist/chat/ui/composer/chips.d.ts +5 -0
  36. package/dist/chat/ui/composer/chips.js +59 -9
  37. package/dist/chat/ui/composer/key-handler.js +9 -0
  38. package/dist/chat/ui/composer/use-composer-draft.d.ts +0 -1
  39. package/dist/chat/ui/composer/use-composer-draft.js +2 -10
  40. package/dist/chat/ui/composer/use-composer-menus.d.ts +12 -2
  41. package/dist/chat/ui/composer/use-composer-menus.js +192 -149
  42. package/dist/chat/ui/composer/use-composer-submit.js +17 -12
  43. package/dist/chat/ui/composer/use-draft-files.d.ts +7 -1
  44. package/dist/chat/ui/composer/use-draft-files.js +90 -58
  45. package/dist/chat/ui/composer/use-take-back.js +2 -1
  46. package/dist/chat/ui/index.d.ts +0 -1
  47. package/dist/chat/ui/index.js +0 -1
  48. package/dist/chat/ui/reference-icons.d.ts +3 -0
  49. package/dist/chat/ui/reference-icons.js +15 -0
  50. package/dist/chat/ui/reference-lookup.d.ts +7 -0
  51. package/dist/chat/ui/reference-lookup.js +6 -0
  52. package/dist/chat/ui/rehype-chips.d.ts +8 -1
  53. package/dist/chat/ui/rehype-chips.js +35 -11
  54. package/dist/chat/ui/rows/MessageRows.js +218 -158
  55. package/dist/chat/ui/thread-references.d.ts +4 -0
  56. package/dist/chat/ui/thread-references.js +78 -0
  57. package/dist/host-hooks.d.ts +2 -0
  58. package/dist/host-hooks.js +7 -0
  59. package/dist/host.d.ts +3 -0
  60. package/dist/locales/en/agent-chat.d.ts +20 -3
  61. package/dist/locales/en/agent-chat.js +24 -7
  62. package/dist/locales/nl/agent-chat.d.ts +20 -3
  63. package/dist/locales/nl/agent-chat.js +24 -7
  64. package/package.json +8 -8
  65. package/src/chat/chat-client.ts +4 -1
  66. package/src/chat/chat-references.ts +44 -3
  67. package/src/chat/drafts.ts +24 -6
  68. package/src/chat/index.ts +1 -1
  69. package/src/chat/logic/picker-entries.ts +12 -1
  70. package/src/chat/mentions.ts +202 -36
  71. package/src/chat/stash.ts +6 -2
  72. package/src/chat/ui/Composer.tsx +14 -4
  73. package/src/chat/ui/ComposerInput.tsx +4 -0
  74. package/src/chat/ui/Markdown.tsx +57 -25
  75. package/src/chat/ui/MessageActions.tsx +5 -2
  76. package/src/chat/ui/Pickers.tsx +8 -2
  77. package/src/chat/ui/ReferenceChip.tsx +74 -0
  78. package/src/chat/ui/RunSettings.tsx +29 -23
  79. package/src/chat/ui/Timeline.tsx +24 -2
  80. package/src/chat/ui/TimelineMenu.tsx +7 -3
  81. package/src/chat/ui/chip-clipboard.ts +115 -0
  82. package/src/chat/ui/chips.ts +20 -1
  83. package/src/chat/ui/composer/ComposerMenu.tsx +53 -37
  84. package/src/chat/ui/composer/DraftParts.tsx +0 -12
  85. package/src/chat/ui/composer/chip-paste.ts +122 -0
  86. package/src/chat/ui/composer/chips.ts +60 -10
  87. package/src/chat/ui/composer/key-handler.ts +9 -0
  88. package/src/chat/ui/composer/use-composer-draft.ts +1 -7
  89. package/src/chat/ui/composer/use-composer-menus.ts +68 -29
  90. package/src/chat/ui/composer/use-composer-submit.ts +13 -6
  91. package/src/chat/ui/composer/use-draft-files.ts +39 -5
  92. package/src/chat/ui/composer/use-take-back.ts +2 -1
  93. package/src/chat/ui/index.ts +0 -1
  94. package/src/chat/ui/reference-icons.ts +17 -0
  95. package/src/chat/ui/reference-lookup.ts +13 -0
  96. package/src/chat/ui/rehype-chips.ts +38 -13
  97. package/src/chat/ui/rows/MessageRows.tsx +88 -64
  98. package/src/chat/ui/thread-references.ts +47 -0
  99. package/src/host-hooks.ts +9 -0
  100. package/src/host.ts +6 -1
  101. package/src/locales/en/agent-chat.ts +24 -7
  102. package/src/locales/nl/agent-chat.ts +24 -7
  103. package/dist/chat/ui/ChatReferenceChip.d.ts +0 -4
  104. package/dist/chat/ui/ChatReferenceChip.js +0 -110
  105. package/src/chat/ui/ChatReferenceChip.tsx +0 -26
@@ -10,7 +10,7 @@ import { useChatHost } from '../../host.js';
10
10
  import { ChatScopeContext } from '../../scope.js';
11
11
  import { useReportedModels } from '../../state/chats.js';
12
12
  import { ModelMarks } from './ModelMarks.js';
13
- import { pickerEntriesOf } from '../logic/picker-entries.js';
13
+ import { inPickerOrder, pickerEntriesOf, separatesGroups } from '../logic/picker-entries.js';
14
14
  import { favoriteModelsOf, toggleFavoriteModel, useChatPreferences } from '../preferences.js';
15
15
  import { forgetStashed, STASH_SHORTCUT, useStash } from '../stash.js';
16
16
  import { Button, Icon, IconButton, Menu, Popover, Tooltip } from '@adecore/ui';
@@ -23,7 +23,7 @@ const triggerClass = 'flex h-7 shrink-0 items-center gap-1 whitespace-nowrap rou
23
23
  * provider's model is also how a chat picks its provider; with one CLI the group headers drop.
24
24
  */
25
25
  export function ModelPicker(t0) {
26
- const $ = _c(76);
26
+ const $ = _c(49);
27
27
  const {
28
28
  providers,
29
29
  provider,
@@ -111,7 +111,7 @@ export function ModelPicker(t0) {
111
111
  } else {
112
112
  t8 = $[15];
113
113
  }
114
- const entries = pickerEntriesOf(providers, trimmed, legacyOpen, expanded, {
114
+ const entries = pickerEntriesOf(inPickerOrder(providers), trimmed, legacyOpen, expanded, {
115
115
  provider,
116
116
  model: selection.model
117
117
  }, t8);
@@ -127,6 +127,10 @@ export function ModelPicker(t0) {
127
127
  t9 = $[17];
128
128
  }
129
129
  const requirementOf = t9;
130
+ const kindBefore = i => {
131
+ const before = entries[i - 1];
132
+ return before === undefined || before.kind === "legacy" ? undefined : before.provider.kind;
133
+ };
130
134
  let t10;
131
135
  if ($[18] !== requirementOf) {
132
136
  t10 = entry_1 => entry_1.kind === "model" && requirementOf(entry_1) !== null ? [entry_1.provider.kind] : [];
@@ -173,83 +177,63 @@ export function ModelPicker(t0) {
173
177
  t13 = $[24];
174
178
  }
175
179
  useEffect(t12, t13);
176
- let t14;
177
- if ($[25] !== onChange || $[26] !== requirementOf || $[27] !== setOpen) {
178
- t14 = entry_2 => {
179
- if (!entry_2) {
180
- return;
181
- }
182
- if (entry_2.kind === "legacy") {
183
- setLegacyOpen(true);
184
- inputRef.current?.focus();
185
- return;
186
- }
187
- if (entry_2.kind === "all") {
188
- const kind_0 = entry_2.provider.kind;
189
- setExpanded(now => {
190
- const next_0 = new Set(now);
191
- if (!next_0.delete(kind_0)) {
192
- next_0.add(kind_0);
193
- }
194
- return next_0;
195
- });
196
- inputRef.current?.focus();
197
- return;
198
- }
199
- if (requirementOf(entry_2) !== null) {
200
- return;
201
- }
202
- onChange(entry_2.provider.kind, entry_2.model.slug);
203
- setOpen(false);
204
- };
205
- $[25] = onChange;
206
- $[26] = requirementOf;
207
- $[27] = setOpen;
208
- $[28] = t14;
209
- } else {
210
- t14 = $[28];
211
- }
212
- const choose = t14;
213
- let t15;
214
- if ($[29] !== choose || $[30] !== entries || $[31] !== index) {
215
- t15 = e => {
216
- if (e.key === "ArrowDown") {
180
+ const choose = entry_2 => {
181
+ if (!entry_2) {
182
+ return;
183
+ }
184
+ if (entry_2.kind === "legacy") {
185
+ setLegacyOpen(true);
186
+ inputRef.current?.focus();
187
+ return;
188
+ }
189
+ if (entry_2.kind === "all") {
190
+ const kind_0 = entry_2.provider.kind;
191
+ setExpanded(now => {
192
+ const next_0 = new Set(now);
193
+ if (!next_0.delete(kind_0)) {
194
+ next_0.add(kind_0);
195
+ }
196
+ return next_0;
197
+ });
198
+ inputRef.current?.focus();
199
+ return;
200
+ }
201
+ if (requirementOf(entry_2) !== null) {
202
+ return;
203
+ }
204
+ onChange(entry_2.provider.kind, entry_2.model.slug);
205
+ setOpen(false);
206
+ };
207
+ const onKeyDown = e => {
208
+ if (e.key === "ArrowDown") {
209
+ e.preventDefault();
210
+ setIndex(i_0 => entries.length === 0 ? 0 : (i_0 + 1) % entries.length);
211
+ } else {
212
+ if (e.key === "ArrowUp") {
217
213
  e.preventDefault();
218
- setIndex(i => entries.length === 0 ? 0 : (i + 1) % entries.length);
214
+ setIndex(i_1 => entries.length === 0 ? 0 : (i_1 - 1 + entries.length) % entries.length);
219
215
  } else {
220
- if (e.key === "ArrowUp") {
216
+ if (e.key === "Enter") {
221
217
  e.preventDefault();
222
- setIndex(i_0 => entries.length === 0 ? 0 : (i_0 - 1 + entries.length) % entries.length);
223
- } else {
224
- if (e.key === "Enter") {
225
- e.preventDefault();
226
- choose(entries[index]);
227
- }
218
+ choose(entries[index]);
228
219
  }
229
220
  }
230
- };
231
- $[29] = choose;
232
- $[30] = entries;
233
- $[31] = index;
234
- $[32] = t15;
221
+ }
222
+ };
223
+ let t14;
224
+ if ($[25] !== current || $[26] !== owner || $[27] !== t) {
225
+ t14 = owner ? `${owner.name} · ${current}` : t("pickers.model.choose");
226
+ $[25] = current;
227
+ $[26] = owner;
228
+ $[27] = t;
229
+ $[28] = t14;
235
230
  } else {
236
- t15 = $[32];
231
+ t14 = $[28];
237
232
  }
238
- const onKeyDown = t15;
233
+ const t15 = kbd ?? undefined;
239
234
  let t16;
240
- if ($[33] !== current || $[34] !== owner || $[35] !== t) {
241
- t16 = owner ? `${owner.name} · ${current}` : t("pickers.model.choose");
242
- $[33] = current;
243
- $[34] = owner;
244
- $[35] = t;
245
- $[36] = t16;
246
- } else {
247
- t16 = $[36];
248
- }
249
- const t17 = kbd ?? undefined;
250
- let t18;
251
- if ($[37] !== chip || $[38] !== current || $[39] !== provider || $[40] !== trigger) {
252
- t18 = trigger === "chip" ? /*#__PURE__*/_jsxs(Popover.Trigger, {
235
+ if ($[29] !== chip || $[30] !== current || $[31] !== provider || $[32] !== trigger) {
236
+ t16 = trigger === "chip" ? /*#__PURE__*/_jsxs(Popover.Trigger, {
253
237
  render: /*#__PURE__*/_jsx(Button, {
254
238
  variant: "secondary",
255
239
  size: "sm",
@@ -286,117 +270,89 @@ export function ModelPicker(t0) {
286
270
  className: "text-text-faint"
287
271
  })]
288
272
  });
289
- $[37] = chip;
290
- $[38] = current;
291
- $[39] = provider;
292
- $[40] = trigger;
293
- $[41] = t18;
294
- } else {
295
- t18 = $[41];
296
- }
297
- let t19;
298
- if ($[42] !== t16 || $[43] !== t17 || $[44] !== t18) {
299
- t19 = /*#__PURE__*/_jsx(Tooltip, {
300
- label: t16,
301
- kbd: t17,
302
- children: t18
273
+ $[29] = chip;
274
+ $[30] = current;
275
+ $[31] = provider;
276
+ $[32] = trigger;
277
+ $[33] = t16;
278
+ } else {
279
+ t16 = $[33];
280
+ }
281
+ let t17;
282
+ if ($[34] !== t14 || $[35] !== t15 || $[36] !== t16) {
283
+ t17 = /*#__PURE__*/_jsx(Tooltip, {
284
+ label: t14,
285
+ kbd: t15,
286
+ children: t16
303
287
  });
304
- $[42] = t16;
305
- $[43] = t17;
306
- $[44] = t18;
307
- $[45] = t19;
288
+ $[34] = t14;
289
+ $[35] = t15;
290
+ $[36] = t16;
291
+ $[37] = t17;
308
292
  } else {
309
- t19 = $[45];
293
+ t17 = $[37];
310
294
  }
311
- let t20;
312
- if ($[46] !== finalFocus) {
313
- t20 = finalFocus === undefined ? {} : {
295
+ let t18;
296
+ if ($[38] !== finalFocus) {
297
+ t18 = finalFocus === undefined ? {} : {
314
298
  finalFocus
315
299
  };
316
- $[46] = finalFocus;
317
- $[47] = t20;
300
+ $[38] = finalFocus;
301
+ $[39] = t18;
318
302
  } else {
319
- t20 = $[47];
303
+ t18 = $[39];
320
304
  }
321
- let t21;
322
- if ($[48] === Symbol.for("react.memo_cache_sentinel")) {
323
- t21 = /*#__PURE__*/_jsx(Icon, {
305
+ let t19;
306
+ if ($[40] === Symbol.for("react.memo_cache_sentinel")) {
307
+ t19 = /*#__PURE__*/_jsx(Icon, {
324
308
  icon: Search,
325
309
  size: 14,
326
310
  className: "shrink-0 text-text-faint"
327
311
  });
328
- $[48] = t21;
312
+ $[40] = t19;
329
313
  } else {
330
- t21 = $[48];
314
+ t19 = $[40];
331
315
  }
332
- let t22;
333
- if ($[49] !== t) {
334
- t22 = t("pickers.model.search");
335
- $[49] = t;
336
- $[50] = t22;
316
+ let t20;
317
+ if ($[41] !== t) {
318
+ t20 = t("pickers.model.search");
319
+ $[41] = t;
320
+ $[42] = t20;
337
321
  } else {
338
- t22 = $[50];
322
+ t20 = $[42];
339
323
  }
340
- let t23;
341
- if ($[51] === Symbol.for("react.memo_cache_sentinel")) {
342
- t23 = e_0 => {
324
+ let t21;
325
+ if ($[43] === Symbol.for("react.memo_cache_sentinel")) {
326
+ t21 = e_0 => {
343
327
  setQuery(e_0.target.value);
344
328
  setIndex(0);
345
329
  };
346
- $[51] = t23;
330
+ $[43] = t21;
347
331
  } else {
348
- t23 = $[51];
332
+ t21 = $[43];
349
333
  }
350
- let t24;
351
- if ($[52] !== onKeyDown || $[53] !== query || $[54] !== t22) {
352
- t24 = /*#__PURE__*/_jsxs("div", {
353
- className: "flex items-center gap-2 border-b border-border px-2.5",
354
- children: [t21, /*#__PURE__*/_jsx("input", {
355
- ref: inputRef,
356
- className: "h-8 w-full bg-transparent text-sm text-text outline-none placeholder:text-text-faint",
357
- placeholder: t22,
358
- spellCheck: false,
359
- value: query,
360
- onChange: t23,
361
- onKeyDown: onKeyDown
362
- })]
363
- });
364
- $[52] = onKeyDown;
365
- $[53] = query;
366
- $[54] = t22;
367
- $[55] = t24;
368
- } else {
369
- t24 = $[55];
370
- }
371
- let t25;
372
- if ($[56] !== entries.length || $[57] !== providers.length || $[58] !== t) {
373
- t25 = entries.length === 0 && /*#__PURE__*/_jsx("div", {
374
- className: "px-3 py-6 text-center text-xs text-text-faint",
375
- children: providers.length === 0 ? t("pickers.model.noProvider") : t("pickers.model.noMatch")
376
- });
377
- $[56] = entries.length;
378
- $[57] = providers.length;
379
- $[58] = t;
380
- $[59] = t25;
381
- } else {
382
- t25 = $[59];
383
- }
384
- const t26 = entries.map((entry_3, i_1) => {
334
+ const t22 = "max-h-72 overflow-auto p-1";
335
+ const t23 = "listbox";
336
+ const t24 = entries.length === 0 && /*#__PURE__*/_jsx("div", {
337
+ className: "px-3 py-6 text-center text-xs text-text-faint",
338
+ children: providers.length === 0 ? t("pickers.model.noProvider") : t("pickers.model.noMatch")
339
+ });
340
+ const t25 = entries.map((entry_3, i_2) => {
385
341
  if (entry_3.kind === "all") {
386
- const before = entries[i_1 - 1];
387
- const header = grouped && (before === undefined || before.kind === "legacy" || before.provider.kind !== entry_3.provider.kind);
342
+ const before_0 = entries[i_2 - 1];
343
+ const header = grouped && (before_0 === undefined || before_0.kind === "legacy" || before_0.provider.kind !== entry_3.provider.kind);
388
344
  return /*#__PURE__*/_jsxs("div", {
389
- children: [header && /*#__PURE__*/_jsxs(Menu.Label, {
345
+ children: [separatesGroups(kindBefore(i_2), entry_3.provider.kind) && /*#__PURE__*/_jsx(Menu.Separator, {}), header && /*#__PURE__*/_jsxs(Menu.Label, {
390
346
  className: "flex items-center gap-1.5",
391
347
  children: [/*#__PURE__*/_jsx(AgentIcon, {
392
348
  kind: entry_3.provider.kind,
393
349
  size: 12
394
350
  }), entry_3.provider.name]
395
351
  }), /*#__PURE__*/_jsxs("button", {
396
- "data-active": i_1 === index,
352
+ "data-active": i_2 === index,
397
353
  "aria-expanded": entry_3.open,
398
354
  className: "cursor-row flex w-full items-center gap-2 rounded-md px-2.5 py-1.5 text-left text-xs text-text-muted",
399
- onMouseEnter: () => setIndex(i_1),
355
+ onMouseEnter: () => setIndex(i_2),
400
356
  onClick: () => choose(entry_3),
401
357
  children: [/*#__PURE__*/_jsx(Icon, {
402
358
  icon: entry_3.open ? ChevronDown : ChevronRight,
@@ -409,9 +365,9 @@ export function ModelPicker(t0) {
409
365
  }
410
366
  if (entry_3.kind === "legacy") {
411
367
  return /*#__PURE__*/_jsxs("button", {
412
- "data-active": i_1 === index,
368
+ "data-active": i_2 === index,
413
369
  className: "cursor-row flex w-full items-center gap-2 rounded-md px-2.5 py-1.5 text-left text-xs text-text-faint",
414
- onMouseEnter: () => setIndex(i_1),
370
+ onMouseEnter: () => setIndex(i_2),
415
371
  onClick: () => choose(entry_3),
416
372
  children: [/*#__PURE__*/_jsx(Icon, {
417
373
  icon: legacyOpen ? ChevronDown : ChevronRight,
@@ -421,17 +377,17 @@ export function ModelPicker(t0) {
421
377
  })]
422
378
  }, "legacy");
423
379
  }
424
- const previous = entries[i_1 - 1];
380
+ const previous = entries[i_2 - 1];
425
381
  const first = grouped && (previous === undefined || previous.kind === "legacy" || previous.provider.kind !== entry_3.provider.kind);
426
382
  const vendorOpen = trimmed !== "" || expanded.has(entry_3.provider.kind);
427
383
  const vendorFirst = vendorOpen && entry_3.model.vendor !== undefined && !starredHere(entry_3) && (previous === undefined || previous.kind !== "model" || previous.provider.kind !== entry_3.provider.kind || starredHere(previous) || previous.model.vendor !== entry_3.model.vendor);
428
384
  const requirement = requirementOf(entry_3);
429
- const next_1 = entries[i_1 + 1];
385
+ const next_1 = entries[i_2 + 1];
430
386
  const lastOfGroup = next_1 === undefined || next_1.kind !== "model" || next_1.provider.kind !== entry_3.provider.kind;
431
387
  const chosen = entry_3.provider.kind === provider && entry_3.model.slug === selection.model;
432
388
  const starred = starredHere(entry_3);
433
389
  return /*#__PURE__*/_jsxs("div", {
434
- children: [first && /*#__PURE__*/_jsxs(Menu.Label, {
390
+ children: [separatesGroups(kindBefore(i_2), entry_3.provider.kind) && /*#__PURE__*/_jsx(Menu.Separator, {}), first && /*#__PURE__*/_jsxs(Menu.Label, {
435
391
  className: "flex items-center gap-1.5",
436
392
  children: [/*#__PURE__*/_jsx(AgentIcon, {
437
393
  kind: entry_3.provider.kind,
@@ -445,9 +401,9 @@ export function ModelPicker(t0) {
445
401
  role: "option",
446
402
  "aria-selected": chosen,
447
403
  "aria-disabled": requirement !== null || undefined,
448
- "data-active": i_1 === index,
404
+ "data-active": i_2 === index,
449
405
  className: `cursor-row flex min-w-0 grow flex-col items-stretch gap-0.5 rounded-md px-2.5 py-1.5 text-left text-sm ${requirement === null ? "text-text-muted" : "text-text-faint"}`,
450
- onMouseEnter: () => setIndex(i_1),
406
+ onMouseEnter: () => setIndex(i_2),
451
407
  onClick: () => choose(entry_3),
452
408
  children: [/*#__PURE__*/_jsxs("span", {
453
409
  className: "flex w-full items-center gap-2",
@@ -496,65 +452,53 @@ export function ModelPicker(t0) {
496
452
  })]
497
453
  }, `${entry_3.provider.kind}/${entry_3.model.slug}`);
498
454
  });
499
- let t27;
500
- if ($[60] !== t25 || $[61] !== t26) {
501
- t27 = /*#__PURE__*/_jsxs("div", {
455
+ let t26;
456
+ if ($[44] !== t24 || $[45] !== t25) {
457
+ t26 = /*#__PURE__*/_jsxs("div", {
502
458
  ref: listRef,
503
- className: "max-h-72 overflow-auto p-1",
504
- role: "listbox",
505
- children: [t25, t26]
459
+ className: t22,
460
+ role: t23,
461
+ children: [t24, t25]
506
462
  });
507
- $[60] = t25;
508
- $[61] = t26;
509
- $[62] = t27;
463
+ $[44] = t24;
464
+ $[45] = t25;
465
+ $[46] = t26;
510
466
  } else {
511
- t27 = $[62];
467
+ t26 = $[46];
512
468
  }
513
- let t28;
514
- if ($[63] !== footer) {
515
- t28 = footer !== undefined && /*#__PURE__*/_jsx("div", {
469
+ let t27;
470
+ if ($[47] !== footer) {
471
+ t27 = footer !== undefined && /*#__PURE__*/_jsx("div", {
516
472
  className: "border-t border-border-soft px-3 py-2 text-xs text-text-faint",
517
473
  children: footer
518
474
  });
519
- $[63] = footer;
520
- $[64] = t28;
475
+ $[47] = footer;
476
+ $[48] = t27;
521
477
  } else {
522
- t28 = $[64];
478
+ t27 = $[48];
523
479
  }
524
- let t29;
525
- if ($[65] !== side || $[66] !== t20 || $[67] !== t24 || $[68] !== t27 || $[69] !== t28) {
526
- t29 = /*#__PURE__*/_jsxs(Popover.Popup, {
480
+ return /*#__PURE__*/_jsxs(Popover.Root, {
481
+ open: open,
482
+ onOpenChange: setOpen,
483
+ children: [t17, /*#__PURE__*/_jsxs(Popover.Popup, {
527
484
  variant: "picker",
528
485
  side: side,
529
486
  initialFocus: inputRef,
530
- ...t20,
531
- children: [t24, t27, t28]
532
- });
533
- $[65] = side;
534
- $[66] = t20;
535
- $[67] = t24;
536
- $[68] = t27;
537
- $[69] = t28;
538
- $[70] = t29;
539
- } else {
540
- t29 = $[70];
541
- }
542
- let t30;
543
- if ($[71] !== open || $[72] !== setOpen || $[73] !== t19 || $[74] !== t29) {
544
- t30 = /*#__PURE__*/_jsxs(Popover.Root, {
545
- open: open,
546
- onOpenChange: setOpen,
547
- children: [t19, t29]
548
- });
549
- $[71] = open;
550
- $[72] = setOpen;
551
- $[73] = t19;
552
- $[74] = t29;
553
- $[75] = t30;
554
- } else {
555
- t30 = $[75];
556
- }
557
- return t30;
487
+ ...t18,
488
+ children: [/*#__PURE__*/_jsxs("div", {
489
+ className: "flex items-center gap-2 border-b border-border px-2.5",
490
+ children: [t19, /*#__PURE__*/_jsx("input", {
491
+ ref: inputRef,
492
+ className: "h-8 w-full bg-transparent text-sm text-text outline-none placeholder:text-text-faint",
493
+ placeholder: t20,
494
+ spellCheck: false,
495
+ value: query,
496
+ onChange: t21,
497
+ onKeyDown: onKeyDown
498
+ })]
499
+ }), t26, t27]
500
+ })]
501
+ });
558
502
  }
559
503
  /*
560
504
  * Prompts put aside with Cmd+S, on a shelf the whole app shares, since a stashed prompt usually moves
@@ -0,0 +1,15 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ interface TokenChipProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
3
+ kind: 'mention' | 'skill' | 'reference' | 'gone';
4
+ value?: string;
5
+ sigil?: string;
6
+ icon: ReactNode;
7
+ label: string;
8
+ tone: string;
9
+ onOpen?: () => void;
10
+ }
11
+ export declare function TokenChip({ kind, value, sigil, icon, label, tone, onOpen, className, ...rest }: TokenChipProps): import("react").JSX.Element;
12
+ export declare function ReferenceChip({ id }: {
13
+ id: string;
14
+ }): import("react").JSX.Element;
15
+ export {};