@arbidocs/blocks 0.4.16 → 0.4.17

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 (98) hide show
  1. package/dist/agents/index.cjs +369 -171
  2. package/dist/agents/index.js +4 -2
  3. package/dist/agents/tasks/DueDateMenu.d.ts +32 -0
  4. package/dist/agents/tasks/NewThreadDialog.d.ts +53 -0
  5. package/dist/agents/tasks/PersonPill.d.ts +22 -0
  6. package/dist/agents/tasks/PillSelect.d.ts +39 -0
  7. package/dist/agents/tasks/TaskActivityDialog.d.ts +14 -0
  8. package/dist/agents/tasks/TaskActivityTimeline.d.ts +54 -0
  9. package/dist/agents/tasks/TaskComposer.d.ts +6 -106
  10. package/dist/agents/tasks/TaskMoveDialog.d.ts +25 -0
  11. package/dist/agents/tasks/TaskOutputsCell.d.ts +23 -0
  12. package/dist/agents/tasks/TaskPlan.d.ts +4 -2
  13. package/dist/agents/tasks/TaskReviewActions.d.ts +44 -0
  14. package/dist/agents/tasks/TaskRowMenu.d.ts +28 -0
  15. package/dist/agents/tasks/TaskStatusPill.d.ts +24 -0
  16. package/dist/agents/tasks/TaskTable.d.ts +99 -0
  17. package/dist/agents/tasks/TaskThreadChip.d.ts +19 -0
  18. package/dist/agents/tasks/TaskTriggerChip.d.ts +24 -0
  19. package/dist/agents/tasks/TasksChrome.d.ts +17 -17
  20. package/dist/agents/tasks/WorkflowComposer.d.ts +10 -0
  21. package/dist/agents/tasks/WorkflowsTable.d.ts +72 -0
  22. package/dist/agents/tasks/gridWidth.d.ts +11 -0
  23. package/dist/agents/tasks/index.d.ts +23 -7
  24. package/dist/agents/tasks/taskColumns.d.ts +39 -63
  25. package/dist/agents/tasks/taskComposerTypes.d.ts +217 -0
  26. package/dist/agents/tasks/taskLabels.d.ts +27 -10
  27. package/dist/agents/tasks/taskRequest.d.ts +151 -25
  28. package/dist/agents/tasks/taskRows.d.ts +111 -0
  29. package/dist/agents/tasks/taskTableLabels.d.ts +64 -0
  30. package/dist/agents/tasks/workflowColumns.d.ts +23 -0
  31. package/dist/agents/tasks/workflowRows.d.ts +44 -0
  32. package/dist/agents/tasks/workflowTableLabels.d.ts +53 -0
  33. package/dist/agents/workflows/WorkflowConfigDialog.d.ts +5 -0
  34. package/dist/agents/workflows/index.d.ts +1 -0
  35. package/dist/agents/workflows/scopeRender.d.ts +10 -0
  36. package/dist/agents/workflows/types.d.ts +2 -0
  37. package/dist/chat/AssistantModeToggle.d.ts +25 -0
  38. package/dist/chat/MentionMenu.d.ts +52 -0
  39. package/dist/chat/index.cjs +119 -63
  40. package/dist/chat/index.d.ts +4 -0
  41. package/dist/chat/index.js +1 -1
  42. package/dist/chat/mentions.d.ts +64 -0
  43. package/dist/chat/useMentionAutocomplete.d.ts +33 -0
  44. package/dist/{chunk-IMA6I73C.js → chunk-ABSII3ND.js} +336 -4
  45. package/dist/chunk-ABSII3ND.js.map +1 -0
  46. package/dist/{chunk-22T6KHGB.cjs → chunk-C2V6HQKG.cjs} +348 -2
  47. package/dist/chunk-C2V6HQKG.cjs.map +1 -0
  48. package/dist/chunk-IC2VHFWR.js +158 -0
  49. package/dist/chunk-IC2VHFWR.js.map +1 -0
  50. package/dist/{chunk-67HGXV4I.cjs → chunk-IWOOGRNG.cjs} +4276 -855
  51. package/dist/chunk-IWOOGRNG.cjs.map +1 -0
  52. package/dist/{chunk-D6XY3C4O.cjs → chunk-JGZTRLKL.cjs} +207 -139
  53. package/dist/chunk-JGZTRLKL.cjs.map +1 -0
  54. package/dist/{chunk-H7OD4CHN.js → chunk-NUPVHEJW.js} +208 -140
  55. package/dist/chunk-NUPVHEJW.js.map +1 -0
  56. package/dist/{chunk-CVFBSUXL.js → chunk-OMF7444S.js} +4223 -851
  57. package/dist/chunk-OMF7444S.js.map +1 -0
  58. package/dist/chunk-ZPERNIMP.cjs +162 -0
  59. package/dist/chunk-ZPERNIMP.cjs.map +1 -0
  60. package/dist/connection/ai.d.ts +4 -1
  61. package/dist/facts/FactRowActions.d.ts +5 -1
  62. package/dist/facts/factColumns.d.ts +1 -1
  63. package/dist/facts/index.cjs +19 -10
  64. package/dist/facts/index.cjs.map +1 -1
  65. package/dist/facts/index.js +14 -5
  66. package/dist/facts/index.js.map +1 -1
  67. package/dist/files/GridView.d.ts +5 -0
  68. package/dist/files/index.cjs +18 -18
  69. package/dist/files/index.js +4 -5
  70. package/dist/files/index.js.map +1 -1
  71. package/dist/index.cjs +539 -287
  72. package/dist/index.js +6 -6
  73. package/dist/settings/ConversationSettingsParts.d.ts +5 -1
  74. package/dist/settings/index.cjs +8 -3
  75. package/dist/settings/index.cjs.map +1 -1
  76. package/dist/settings/index.js +8 -3
  77. package/dist/settings/index.js.map +1 -1
  78. package/dist/shell/index.cjs +1 -1
  79. package/dist/shell/index.js +1 -1
  80. package/dist/site/index.cjs +9 -9
  81. package/dist/site/index.js +1 -1
  82. package/dist/workspaces/index.cjs +1 -1
  83. package/dist/workspaces/index.cjs.map +1 -1
  84. package/dist/workspaces/index.js +1 -1
  85. package/dist/workspaces/index.js.map +1 -1
  86. package/package.json +3 -3
  87. package/dist/agents/tasks/LiveRunsBanner.d.ts +0 -26
  88. package/dist/agents/tasks/TaskRowActions.d.ts +0 -43
  89. package/dist/chunk-22T6KHGB.cjs.map +0 -1
  90. package/dist/chunk-67HGXV4I.cjs.map +0 -1
  91. package/dist/chunk-CVFBSUXL.js.map +0 -1
  92. package/dist/chunk-D6XY3C4O.cjs.map +0 -1
  93. package/dist/chunk-H7OD4CHN.js.map +0 -1
  94. package/dist/chunk-IMA6I73C.js.map +0 -1
  95. package/dist/chunk-NUNKSZKU.js +0 -203
  96. package/dist/chunk-NUNKSZKU.js.map +0 -1
  97. package/dist/chunk-V4ISCZJ7.cjs +0 -207
  98. package/dist/chunk-V4ISCZJ7.cjs.map +0 -1
@@ -227,6 +227,338 @@ var SlashMenu = react.memo(function SlashMenu2({
227
227
  }
228
228
  );
229
229
  });
230
+ var DEFAULT_MENTION_LABELS = {
231
+ hint: "Enter or Tab to mention, Esc to dismiss",
232
+ list: "People and assistant to mention",
233
+ resultCount: (count) => `${count} ${count === 1 ? "match" : "matches"}`,
234
+ assistantBadge: "AI",
235
+ chipTitle: (label, kind) => kind === "assistant" ? `${label} (AI assistant)` : label
236
+ };
237
+ var MentionMenu = react.memo(function MentionMenu2({
238
+ open,
239
+ placement = "above",
240
+ items,
241
+ selectedIndex,
242
+ setSelectedIndex,
243
+ listboxId: listboxIdProp,
244
+ onSelect,
245
+ className,
246
+ labels,
247
+ testId,
248
+ itemTestIdPrefix
249
+ }) {
250
+ const l = { ...DEFAULT_MENTION_LABELS, ...labels };
251
+ const ownId = react.useId();
252
+ const listboxId = listboxIdProp ?? ownId;
253
+ const scrollRef = react.useRef(null);
254
+ react.useEffect(() => {
255
+ if (!open) return;
256
+ const el = scrollRef.current?.querySelector(
257
+ `[data-mention-index="${selectedIndex}"]`
258
+ );
259
+ el?.scrollIntoView?.({ block: "nearest" });
260
+ }, [open, selectedIndex]);
261
+ if (!open || items.length === 0) return null;
262
+ return /* @__PURE__ */ jsxRuntime.jsxs(
263
+ "div",
264
+ {
265
+ "data-slot": "mention-menu",
266
+ className: ui.cn(
267
+ "absolute left-0 right-0 z-30 max-h-64 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-lg",
268
+ placement === "above" ? "bottom-full mb-2" : "top-full mt-2",
269
+ className
270
+ ),
271
+ onMouseDown: (e) => e.preventDefault(),
272
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "mention-menu" }),
273
+ children: [
274
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border/50 px-3 py-1.5 text-xs text-muted-foreground", children: l.hint }),
275
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sr-only", role: "status", "aria-live": "polite", "aria-atomic": "true", children: l.resultCount(items.length) }),
276
+ /* @__PURE__ */ jsxRuntime.jsx(
277
+ "div",
278
+ {
279
+ ref: scrollRef,
280
+ id: listboxId,
281
+ role: "listbox",
282
+ "aria-label": l.list,
283
+ className: "scrollbar-subtle max-h-56 overflow-y-auto py-1",
284
+ children: items.map((item, index) => {
285
+ const isActive = index === selectedIndex;
286
+ const Icon = item.kind === "assistant" ? lucideReact.Bot : lucideReact.AtSign;
287
+ return /* @__PURE__ */ jsxRuntime.jsxs(
288
+ "div",
289
+ {
290
+ id: listOptionId(listboxId, index),
291
+ role: "option",
292
+ "aria-selected": isActive,
293
+ "data-mention-index": index,
294
+ className: ui.cn(
295
+ "flex cursor-pointer items-center gap-2 px-3 py-1.5 text-sm pointer-coarse:min-h-11",
296
+ isActive ? "bg-accent text-accent-foreground" : "hover:bg-accent/50"
297
+ ),
298
+ onMouseEnter: () => setSelectedIndex(index),
299
+ onClick: () => onSelect(item),
300
+ "data-testid": chunkMHVNT4J3_cjs.prefixedTestId(itemTestIdPrefix, item.id, {
301
+ testId: `mention-item-${item.id}`
302
+ }),
303
+ children: [
304
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
305
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 font-medium text-foreground", children: item.label }),
306
+ item.kind === "assistant" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 rounded bg-muted px-1 text-[10px] font-medium uppercase text-muted-foreground", children: l.assistantBadge }),
307
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-muted-foreground", children: item.description })
308
+ ]
309
+ },
310
+ item.id
311
+ );
312
+ })
313
+ }
314
+ )
315
+ ]
316
+ }
317
+ );
318
+ });
319
+ function MentionChip({
320
+ label,
321
+ kind,
322
+ id,
323
+ isSelf,
324
+ labels,
325
+ className,
326
+ testId
327
+ }) {
328
+ const l = { ...DEFAULT_MENTION_LABELS, ...labels };
329
+ return /* @__PURE__ */ jsxRuntime.jsxs(
330
+ "span",
331
+ {
332
+ "data-slot": "mention-chip",
333
+ "data-mention-kind": kind,
334
+ "data-mention-id": id,
335
+ title: l.chipTitle(label, kind),
336
+ className: ui.cn(
337
+ "inline-flex items-baseline rounded px-1 font-medium",
338
+ isSelf ? "bg-primary/15 text-primary" : "bg-accent text-accent-foreground",
339
+ className
340
+ ),
341
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: `mention-chip-${id ?? kind}` }),
342
+ children: [
343
+ "@",
344
+ label
345
+ ]
346
+ }
347
+ );
348
+ }
349
+
350
+ // src/chat/mentions.ts
351
+ var MAX_QUERY_LENGTH = 40;
352
+ function findMentionQuery(text, caret) {
353
+ const before = text.slice(0, caret);
354
+ const at = before.lastIndexOf("@");
355
+ if (at < 0) return null;
356
+ if (at > 0 && !/\s/.test(before[at - 1])) return null;
357
+ const query = before.slice(at + 1);
358
+ if (query.length > MAX_QUERY_LENGTH || query.includes("\n") || query.startsWith(" ")) return null;
359
+ return { start: at, query };
360
+ }
361
+ function filterMentionCandidates(candidates, query) {
362
+ const q = query.trim().toLowerCase();
363
+ if (!q) return candidates.slice();
364
+ const scored = [];
365
+ for (const c of candidates) {
366
+ const label = c.label.toLowerCase();
367
+ if (label.startsWith(q)) scored.push({ c, score: 0 });
368
+ else if (label.split(/\s+/).some((word) => word.startsWith(q))) scored.push({ c, score: 1 });
369
+ else if (c.description?.toLowerCase().startsWith(q)) scored.push({ c, score: 2 });
370
+ }
371
+ return scored.sort((a, b) => a.score - b.score).map((s) => s.c);
372
+ }
373
+ function insertMention(text, start, caret, label) {
374
+ const inserted = `@${label} `;
375
+ return {
376
+ text: text.slice(0, start) + inserted + text.slice(caret),
377
+ caret: start + inserted.length
378
+ };
379
+ }
380
+ function tokenRanges(text, label) {
381
+ const needle = `@${label}`;
382
+ const ranges = [];
383
+ let from = 0;
384
+ for (; ; ) {
385
+ const i = text.indexOf(needle, from);
386
+ if (i < 0) break;
387
+ const end = i + needle.length;
388
+ const startsToken = i === 0 || /\s|\(|\[/.test(text[i - 1]);
389
+ const endsToken = end === text.length || !/[\p{L}\p{N}_]/u.test(text[end]);
390
+ if (startsToken && endsToken) ranges.push([i, end]);
391
+ from = end;
392
+ }
393
+ return ranges;
394
+ }
395
+ function extractMentions(text, candidates) {
396
+ const taken = [];
397
+ const found = [];
398
+ const byLength = [...candidates].sort((a, b) => b.label.length - a.label.length);
399
+ for (const c of byLength) {
400
+ if (!c.label) continue;
401
+ for (const [from, to] of tokenRanges(text, c.label)) {
402
+ if (taken.some(([a, b]) => from < b && to > a)) continue;
403
+ taken.push([from, to]);
404
+ if (!found.some((f) => f.c.id === c.id)) found.push({ c, at: from });
405
+ }
406
+ }
407
+ return found.sort((a, b) => a.at - b.at).map((f) => f.c);
408
+ }
409
+ function toMessageMentions(mentioned) {
410
+ return mentioned.map(
411
+ (c) => c.kind === "assistant" ? { type: "assistant" } : { type: "user", user_ext_id: c.id }
412
+ );
413
+ }
414
+ var MENTION_HREF_PREFIX = "#mention-";
415
+ function escapeLinkText(label) {
416
+ return label.replace(/[[\]\\]/g, (ch) => `\\${ch}`);
417
+ }
418
+ function linkMentions(content, mentions, assistantLabels = []) {
419
+ if (!mentions || mentions.length === 0 || !content) return content;
420
+ const targets = [];
421
+ for (const m of mentions) {
422
+ const id = m.type === "assistant" ? "assistant" : m.user_ext_id;
423
+ if (!id) continue;
424
+ const labels = m.type === "assistant" ? [m.label ?? "", ...assistantLabels] : [m.label ?? ""];
425
+ for (const label of labels) if (label) targets.push({ label, id });
426
+ }
427
+ targets.sort((a, b) => b.label.length - a.label.length);
428
+ const replacements = [];
429
+ for (const { label, id } of targets) {
430
+ for (const [from, to] of tokenRanges(content, label)) {
431
+ if (replacements.some((r) => from < r.to && to > r.from)) continue;
432
+ replacements.push({
433
+ from,
434
+ to,
435
+ text: `[@${escapeLinkText(label)}](${MENTION_HREF_PREFIX}${id})`
436
+ });
437
+ }
438
+ }
439
+ replacements.sort((a, b) => b.from - a.from);
440
+ let out = content;
441
+ for (const r of replacements) out = out.slice(0, r.from) + r.text + out.slice(r.to);
442
+ return out;
443
+ }
444
+ function mentionFromHref(href) {
445
+ if (!href?.startsWith(MENTION_HREF_PREFIX)) return null;
446
+ const id = href.slice(MENTION_HREF_PREFIX.length);
447
+ if (!id) return null;
448
+ return { kind: id === "assistant" ? "assistant" : "user", id };
449
+ }
450
+ function useMentionAutocomplete({
451
+ value,
452
+ onValueChange,
453
+ candidates,
454
+ textareaRef
455
+ }) {
456
+ const [caret, setCaret] = react.useState(null);
457
+ const [dismissedAt, setDismissedAt] = react.useState(null);
458
+ react.useEffect(() => {
459
+ if (dismissedAt !== null && value[dismissedAt] !== "@") setDismissedAt(null);
460
+ }, [value, dismissedAt]);
461
+ const match = react.useMemo(
462
+ () => caret === null ? null : findMentionQuery(value, Math.min(caret, value.length)),
463
+ [value, caret]
464
+ );
465
+ const items = react.useMemo(
466
+ () => match ? filterMentionCandidates(candidates, match.query) : [],
467
+ [match, candidates]
468
+ );
469
+ const isOpen = !!match && items.length > 0 && dismissedAt !== match.start;
470
+ const readCaret = react.useCallback(() => {
471
+ const ta = textareaRef.current;
472
+ setCaret(ta ? ta.selectionStart : null);
473
+ }, [textareaRef]);
474
+ const pick = react.useCallback(
475
+ (candidate) => {
476
+ if (!match || caret === null) return;
477
+ const next = insertMention(value, match.start, Math.min(caret, value.length), candidate.label);
478
+ onValueChange(next.text);
479
+ setCaret(next.caret);
480
+ setDismissedAt(match.start);
481
+ requestAnimationFrame(() => {
482
+ const ta = textareaRef.current;
483
+ if (!ta) return;
484
+ ta.focus();
485
+ ta.setSelectionRange(next.caret, next.caret);
486
+ });
487
+ },
488
+ [match, caret, value, onValueChange, textareaRef]
489
+ );
490
+ const nav = useListKeyNav({
491
+ open: isOpen,
492
+ items,
493
+ onPick: pick,
494
+ onDismiss: () => setDismissedAt(match?.start ?? null),
495
+ resetKey: match?.query
496
+ });
497
+ const handleValueChange = react.useCallback(
498
+ (next) => {
499
+ onValueChange(next);
500
+ const ta = textareaRef.current;
501
+ setCaret(ta ? ta.selectionStart : next.length);
502
+ if (dismissedAt !== null && (next.length < value.length || next[dismissedAt] !== "@")) {
503
+ setDismissedAt(null);
504
+ }
505
+ },
506
+ [onValueChange, textareaRef, dismissedAt, value]
507
+ );
508
+ return {
509
+ isOpen,
510
+ items,
511
+ nav,
512
+ pick,
513
+ onValueChange: handleValueChange,
514
+ textareaProps: { onSelect: readCaret }
515
+ };
516
+ }
517
+ var DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS = {
518
+ always: "Assistant replies",
519
+ mentioned: "Thread",
520
+ alwaysHint: "The assistant answers every message. Click to make this a thread.",
521
+ mentionedHint: "A thread: messages are comments between people. @mention the assistant to get an answer. Click to have it answer every message."
522
+ };
523
+ function AssistantModeToggle({
524
+ mode,
525
+ onModeChange,
526
+ disabled,
527
+ labels,
528
+ className,
529
+ testId
530
+ }) {
531
+ const l = { ...DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS, ...labels };
532
+ const isThread = mode === "mentioned";
533
+ const hint = isThread ? l.mentionedHint : l.alwaysHint;
534
+ const Icon = isThread ? lucideReact.MessagesSquare : lucideReact.Bot;
535
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
536
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
537
+ ui.Button,
538
+ {
539
+ type: "button",
540
+ variant: "ghost",
541
+ size: "sm",
542
+ disabled,
543
+ "aria-pressed": isThread,
544
+ "aria-label": `${isThread ? l.mentioned : l.always}. ${hint}`,
545
+ onClick: () => onModeChange(isThread ? "always" : "mentioned"),
546
+ className: ui.cn(
547
+ "h-8 gap-1.5 px-2 text-xs text-muted-foreground hover:bg-muted pointer-coarse:h-11",
548
+ isThread && "bg-accent text-accent-foreground",
549
+ className
550
+ ),
551
+ "data-mode": mode,
552
+ "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "assistant-mode-toggle" }),
553
+ children: [
554
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-3.5 w-3.5", "aria-hidden": "true" }),
555
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: isThread ? l.mentioned : l.always })
556
+ ]
557
+ }
558
+ ) }),
559
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "top", className: "max-w-xs", children: hint })
560
+ ] });
561
+ }
230
562
  var DEFAULT_PINNED_DOC_CHIP_LABELS = {
231
563
  unpin: "Unpin",
232
564
  unpinDocument: (title) => `Unpin ${title}`
@@ -1633,6 +1965,7 @@ function AssistantToaster(props) {
1633
1965
  return /* @__PURE__ */ jsxRuntime.jsx(chunkTO4FAMQP_cjs.Toaster, { ...props, dockOpen: dock.isOpen && isDockAvailable });
1634
1966
  }
1635
1967
 
1968
+ exports.AssistantModeToggle = AssistantModeToggle;
1636
1969
  exports.AssistantToaster = AssistantToaster;
1637
1970
  exports.BranchControls = BranchControls;
1638
1971
  exports.ComposerAccessories = ComposerAccessories;
@@ -1657,17 +1990,22 @@ exports.ConversationMain = ConversationMain;
1657
1990
  exports.ConversationRoot = ConversationRoot;
1658
1991
  exports.ConversationSearchView = ConversationSearchView;
1659
1992
  exports.ConversationSettingsButton = ConversationSettingsButton;
1993
+ exports.DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS = DEFAULT_ASSISTANT_MODE_TOGGLE_LABELS;
1660
1994
  exports.DEFAULT_BRANCH_CONTROLS_LABELS = DEFAULT_BRANCH_CONTROLS_LABELS;
1661
1995
  exports.DEFAULT_CONVERSATION_LAYOUT_LABELS = DEFAULT_CONVERSATION_LAYOUT_LABELS;
1662
1996
  exports.DEFAULT_CONVERSATION_PARTS_LABELS = DEFAULT_CONVERSATION_PARTS_LABELS;
1663
1997
  exports.DEFAULT_CONVERSATION_SEARCH_LABELS = DEFAULT_CONVERSATION_SEARCH_LABELS;
1664
1998
  exports.DEFAULT_LABEL_PIN_ROW_LABELS = DEFAULT_LABEL_PIN_ROW_LABELS;
1999
+ exports.DEFAULT_MENTION_LABELS = DEFAULT_MENTION_LABELS;
1665
2000
  exports.DEFAULT_MODEL_PRICING_TIP_LABELS = DEFAULT_MODEL_PRICING_TIP_LABELS;
1666
2001
  exports.DEFAULT_PENDING_ANSWER_BAR_LABELS = DEFAULT_PENDING_ANSWER_BAR_LABELS;
1667
2002
  exports.DEFAULT_PINNED_DOC_CHIP_LABELS = DEFAULT_PINNED_DOC_CHIP_LABELS;
1668
2003
  exports.DEFAULT_SLASH_MENU_LABELS = DEFAULT_SLASH_MENU_LABELS;
1669
2004
  exports.DEFAULT_THREAD_MAP_LABELS = DEFAULT_THREAD_MAP_LABELS;
1670
2005
  exports.LabelPinRow = LabelPinRow;
2006
+ exports.MENTION_HREF_PREFIX = MENTION_HREF_PREFIX;
2007
+ exports.MentionChip = MentionChip;
2008
+ exports.MentionMenu = MentionMenu;
1671
2009
  exports.ModelAutoIcon = ModelAutoIcon;
1672
2010
  exports.ModelConfigureButton = ModelConfigureButton;
1673
2011
  exports.ModelDot = ModelDot;
@@ -1691,9 +2029,17 @@ exports.ThreadMap = ThreadMap;
1691
2029
  exports.ThreadMapDiagram = ThreadMapDiagram;
1692
2030
  exports.ThreadMapError = ThreadMapError;
1693
2031
  exports.ThreadMapLoading = ThreadMapLoading;
2032
+ exports.extractMentions = extractMentions;
2033
+ exports.filterMentionCandidates = filterMentionCandidates;
2034
+ exports.findMentionQuery = findMentionQuery;
2035
+ exports.insertMention = insertMention;
1694
2036
  exports.isLongPastedText = isLongPastedText;
2037
+ exports.linkMentions = linkMentions;
2038
+ exports.mentionFromHref = mentionFromHref;
2039
+ exports.toMessageMentions = toMessageMentions;
1695
2040
  exports.useDismissibleCard = useDismissibleCard;
1696
2041
  exports.useListKeyNav = useListKeyNav;
1697
2042
  exports.useLongPaste = useLongPaste;
1698
- //# sourceMappingURL=chunk-22T6KHGB.cjs.map
1699
- //# sourceMappingURL=chunk-22T6KHGB.cjs.map
2043
+ exports.useMentionAutocomplete = useMentionAutocomplete;
2044
+ //# sourceMappingURL=chunk-C2V6HQKG.cjs.map
2045
+ //# sourceMappingURL=chunk-C2V6HQKG.cjs.map