@ttt-productions/chat-core 0.4.22 → 0.5.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 (51) hide show
  1. package/dist/constants.d.ts +6 -1
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +6 -3
  4. package/dist/constants.js.map +1 -1
  5. package/dist/index.d.ts +3 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/mentions/MentionAutocomplete.d.ts +22 -0
  10. package/dist/mentions/MentionAutocomplete.d.ts.map +1 -0
  11. package/dist/mentions/MentionAutocomplete.js +21 -0
  12. package/dist/mentions/MentionAutocomplete.js.map +1 -0
  13. package/dist/mentions/MessageText.d.ts +27 -0
  14. package/dist/mentions/MessageText.d.ts.map +1 -0
  15. package/dist/mentions/MessageText.js +20 -0
  16. package/dist/mentions/MessageText.js.map +1 -0
  17. package/dist/mentions/parser.d.ts +33 -0
  18. package/dist/mentions/parser.d.ts.map +1 -0
  19. package/dist/mentions/parser.js +61 -0
  20. package/dist/mentions/parser.js.map +1 -0
  21. package/dist/mentions/types.d.ts +91 -0
  22. package/dist/mentions/types.d.ts.map +1 -0
  23. package/dist/mentions/types.js +14 -0
  24. package/dist/mentions/types.js.map +1 -0
  25. package/dist/mentions/use-mention-autocomplete.d.ts +81 -0
  26. package/dist/mentions/use-mention-autocomplete.d.ts.map +1 -0
  27. package/dist/mentions/use-mention-autocomplete.js +323 -0
  28. package/dist/mentions/use-mention-autocomplete.js.map +1 -0
  29. package/dist/react/index.d.ts +3 -0
  30. package/dist/react/index.d.ts.map +1 -1
  31. package/dist/react/index.js +3 -0
  32. package/dist/react/index.js.map +1 -1
  33. package/dist/schemas/index.d.ts +14 -0
  34. package/dist/schemas/index.d.ts.map +1 -0
  35. package/dist/schemas/index.js +14 -0
  36. package/dist/schemas/index.js.map +1 -0
  37. package/dist/types.d.ts +72 -5
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/types.js.map +1 -1
  40. package/dist/ui/ChatShell.d.ts.map +1 -1
  41. package/dist/ui/ChatShell.js +1 -1
  42. package/dist/ui/ChatShell.js.map +1 -1
  43. package/dist/ui/Composer.d.ts +1 -0
  44. package/dist/ui/Composer.d.ts.map +1 -1
  45. package/dist/ui/Composer.js +30 -14
  46. package/dist/ui/Composer.js.map +1 -1
  47. package/dist/ui/MessageItemDefault.d.ts.map +1 -1
  48. package/dist/ui/MessageItemDefault.js +3 -2
  49. package/dist/ui/MessageItemDefault.js.map +1 -1
  50. package/package.json +8 -4
  51. package/src/styles/chat.css +14 -0
@@ -0,0 +1,323 @@
1
+ 'use client';
2
+ /**
3
+ * Composer-side mention autocomplete state hook.
4
+ *
5
+ * Detects when the user types the trigger character (default `@`) inside the
6
+ * provided textarea, captures the live query (the text between the trigger
7
+ * and the cursor), debounces searches across all configured providers, and
8
+ * tracks the anchor positions of inserted mentions so the composer can
9
+ * convert display text back to wire tokens on send.
10
+ *
11
+ * Returns an `AutocompleteState` value tailored for the `<MentionAutocomplete>`
12
+ * UI component, plus an `insertMention` action and a `getValueWithTokens`
13
+ * accessor the composer calls on send.
14
+ *
15
+ * Generic over `TKind` and `TContext`; chat-core inspects neither.
16
+ */
17
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
18
+ import { formatMentionToken } from './parser.js';
19
+ function isWordBoundary(ch) {
20
+ return ch === undefined || /\s/.test(ch);
21
+ }
22
+ export function useMentionAutocomplete(args) {
23
+ const { textareaRef, value, onChange, providers, context, recent, trigger = '@', minQueryLength = 0, searchDebounceMs = 200, } = args;
24
+ if (trigger.length !== 1) {
25
+ throw new Error(`useMentionAutocomplete: trigger must be a single character, got ${JSON.stringify(trigger)}`);
26
+ }
27
+ const [open, setOpen] = useState(false);
28
+ const [triggerIndex, setTriggerIndex] = useState(null);
29
+ const [query, setQuery] = useState('');
30
+ const [groups, setGroups] = useState([]);
31
+ const [showingRecent, setShowingRecent] = useState(false);
32
+ const [highlightedIndex, setHighlightedIndex] = useState(0);
33
+ const [anchors, setAnchors] = useState([]);
34
+ // Refs for the latest values so the debounced search reads fresh.
35
+ const valueRef = useRef(value);
36
+ const triggerIndexRef = useRef(triggerIndex);
37
+ const providersRef = useRef(providers);
38
+ const contextRef = useRef(context);
39
+ useEffect(() => {
40
+ valueRef.current = value;
41
+ triggerIndexRef.current = triggerIndex;
42
+ providersRef.current = providers;
43
+ contextRef.current = context;
44
+ });
45
+ const flatResults = useMemo(() => groups.flatMap((g) => g.results), [groups]);
46
+ const close = useCallback(() => {
47
+ setOpen(false);
48
+ setTriggerIndex(null);
49
+ setQuery('');
50
+ setGroups([]);
51
+ setHighlightedIndex(0);
52
+ setShowingRecent(false);
53
+ }, []);
54
+ /**
55
+ * Detect trigger state based on current value + cursor position.
56
+ * Called from useEffect on value changes.
57
+ */
58
+ useEffect(() => {
59
+ const ta = textareaRef.current;
60
+ if (!ta)
61
+ return;
62
+ const cursor = ta.selectionStart;
63
+ if (cursor === null)
64
+ return;
65
+ // Walk backwards from the cursor to find the trigger character, stopping
66
+ // at a whitespace boundary or the start of the string.
67
+ let i = cursor - 1;
68
+ while (i >= 0) {
69
+ const ch = value[i];
70
+ if (ch === trigger) {
71
+ // Trigger only counts if the character before it is whitespace or BoL.
72
+ if (i === 0 || /\s/.test(value[i - 1])) {
73
+ const q = value.slice(i + 1, cursor);
74
+ // If the slice contains whitespace, the trigger run has been broken.
75
+ if (/\s/.test(q)) {
76
+ close();
77
+ return;
78
+ }
79
+ setTriggerIndex(i);
80
+ setQuery(q);
81
+ setOpen(true);
82
+ setHighlightedIndex(0);
83
+ return;
84
+ }
85
+ // Inline `@` not at word boundary — not a trigger.
86
+ close();
87
+ return;
88
+ }
89
+ if (/\s/.test(ch)) {
90
+ close();
91
+ return;
92
+ }
93
+ i -= 1;
94
+ }
95
+ close();
96
+ // We intentionally watch value AND the textarea's cursor position via the
97
+ // event chain — selectionStart updates synchronously with input/key events.
98
+ // eslint-disable-next-line react-hooks/exhaustive-deps
99
+ }, [value, trigger]);
100
+ /**
101
+ * Recompute anchor offsets when the textarea value changes externally
102
+ * (e.g. user deletes text). Drop anchors whose displayed text no longer
103
+ * matches the underlying displayText at their range.
104
+ */
105
+ useEffect(() => {
106
+ setAnchors((prev) => prev.filter((a) => {
107
+ const expected = `${trigger}${a.ref.displayText}`;
108
+ return value.slice(a.start, a.end) === expected;
109
+ }));
110
+ }, [value, trigger]);
111
+ /**
112
+ * Search: fires whenever query opens / changes. Debounced. Cancels in-flight
113
+ * via AbortController.
114
+ */
115
+ useEffect(() => {
116
+ if (!open) {
117
+ setGroups([]);
118
+ setShowingRecent(false);
119
+ return;
120
+ }
121
+ let cancelled = false;
122
+ const controller = new AbortController();
123
+ if (query.length < minQueryLength) {
124
+ // Below threshold: show recent picks if adapter supplied.
125
+ if (recent) {
126
+ Promise.resolve(recent.getRecent())
127
+ .then((items) => {
128
+ if (cancelled)
129
+ return;
130
+ // Group recent by kind, preserving provider order.
131
+ const byKind = new Map();
132
+ for (const item of items) {
133
+ const arr = byKind.get(item.kind) ?? [];
134
+ arr.push(item);
135
+ byKind.set(item.kind, arr);
136
+ }
137
+ const recentGroups = providers
138
+ .map((p) => ({
139
+ kind: p.kind,
140
+ label: p.label,
141
+ results: byKind.get(p.kind) ?? [],
142
+ loading: false,
143
+ renderResult: p.renderResult,
144
+ }))
145
+ .filter((g) => g.results.length > 0);
146
+ setGroups(recentGroups);
147
+ setShowingRecent(true);
148
+ setHighlightedIndex(0);
149
+ })
150
+ .catch(() => {
151
+ if (!cancelled) {
152
+ setGroups([]);
153
+ setShowingRecent(false);
154
+ }
155
+ });
156
+ }
157
+ else {
158
+ setGroups([]);
159
+ setShowingRecent(false);
160
+ }
161
+ return () => {
162
+ cancelled = true;
163
+ controller.abort();
164
+ };
165
+ }
166
+ setShowingRecent(false);
167
+ // Initial: each group loading.
168
+ setGroups(providers.map((p) => ({
169
+ kind: p.kind,
170
+ label: p.label,
171
+ results: [],
172
+ loading: true,
173
+ renderResult: p.renderResult,
174
+ })));
175
+ const timer = setTimeout(() => {
176
+ providers.forEach((provider, i) => {
177
+ provider
178
+ .search({ query, context, signal: controller.signal })
179
+ .then((results) => {
180
+ if (cancelled)
181
+ return;
182
+ setGroups((prev) => {
183
+ const next = prev.slice();
184
+ next[i] = { ...next[i], results, loading: false };
185
+ return next;
186
+ });
187
+ })
188
+ .catch(() => {
189
+ if (cancelled)
190
+ return;
191
+ setGroups((prev) => {
192
+ const next = prev.slice();
193
+ next[i] = { ...next[i], results: [], loading: false };
194
+ return next;
195
+ });
196
+ });
197
+ });
198
+ }, searchDebounceMs);
199
+ return () => {
200
+ cancelled = true;
201
+ controller.abort();
202
+ clearTimeout(timer);
203
+ };
204
+ // We deliberately depend on `query` + `open` only; `providers` / `context`
205
+ // are read via refs to avoid re-firing on identity changes.
206
+ // eslint-disable-next-line react-hooks/exhaustive-deps
207
+ }, [open, query, minQueryLength, searchDebounceMs, recent]);
208
+ const insertMention = useCallback((ref) => {
209
+ const ti = triggerIndexRef.current;
210
+ if (ti === null)
211
+ return;
212
+ const ta = textareaRef.current;
213
+ if (!ta)
214
+ return;
215
+ const before = valueRef.current.slice(0, ti);
216
+ // Cursor at point of insertion — current selection end captures the
217
+ // typed query.
218
+ const cursor = ta.selectionStart ?? ti + 1 + query.length;
219
+ const after = valueRef.current.slice(cursor);
220
+ const insertion = `${trigger}${ref.displayText}`;
221
+ // Add a trailing space unless there is an explicit whitespace character
222
+ // immediately after the insertion point (don't double-space). End-of-string
223
+ // (after[0] === undefined) always adds a space so the cursor clears the
224
+ // trigger run and the autocomplete doesn't re-open.
225
+ const trailing = (after[0] !== undefined && isWordBoundary(after[0])) ? '' : ' ';
226
+ const next = `${before}${insertion}${trailing}${after}`;
227
+ const anchorStart = ti;
228
+ const anchorEnd = ti + insertion.length;
229
+ onChange(next);
230
+ setAnchors((prev) => {
231
+ // Shift any later anchors by the net change in length.
232
+ const delta = insertion.length + trailing.length - (cursor - ti);
233
+ const shifted = prev.map((a) => a.start >= cursor ? { ...a, start: a.start + delta, end: a.end + delta } : a);
234
+ return [...shifted, { start: anchorStart, end: anchorEnd, ref }];
235
+ });
236
+ // Fire recent-use without awaiting.
237
+ if (recent?.recordUse) {
238
+ try {
239
+ const result = recent.recordUse(ref);
240
+ if (result && typeof result.then === 'function') {
241
+ result.catch(() => undefined);
242
+ }
243
+ }
244
+ catch {
245
+ // Swallow — recent-use is best-effort.
246
+ }
247
+ }
248
+ close();
249
+ // Move cursor to just after the inserted mention (+ optional trailing space).
250
+ // Defer so the controlled value flush completes first.
251
+ const newCursor = anchorEnd + trailing.length;
252
+ queueMicrotask(() => {
253
+ const t = textareaRef.current;
254
+ if (t) {
255
+ t.focus();
256
+ t.setSelectionRange(newCursor, newCursor);
257
+ }
258
+ });
259
+ }, [trigger, query.length, onChange, recent, close, textareaRef]);
260
+ const handleKeyDown = useCallback((event) => {
261
+ if (!open)
262
+ return false;
263
+ if (flatResults.length === 0 && event.key !== 'Escape') {
264
+ // Allow Escape to close even with no results; otherwise pass through.
265
+ return false;
266
+ }
267
+ switch (event.key) {
268
+ case 'ArrowDown':
269
+ event.preventDefault();
270
+ setHighlightedIndex((i) => (i + 1) % Math.max(flatResults.length, 1));
271
+ return true;
272
+ case 'ArrowUp':
273
+ event.preventDefault();
274
+ setHighlightedIndex((i) => (i - 1 + flatResults.length) % Math.max(flatResults.length, 1));
275
+ return true;
276
+ case 'Enter':
277
+ case 'Tab': {
278
+ if (flatResults.length === 0)
279
+ return false;
280
+ event.preventDefault();
281
+ const pick = flatResults[Math.min(highlightedIndex, flatResults.length - 1)];
282
+ if (pick)
283
+ insertMention(pick);
284
+ return true;
285
+ }
286
+ case 'Escape':
287
+ event.preventDefault();
288
+ close();
289
+ return true;
290
+ default:
291
+ return false;
292
+ }
293
+ }, [open, flatResults, highlightedIndex, insertMention, close]);
294
+ const getValueWithTokens = useCallback(() => {
295
+ if (anchors.length === 0)
296
+ return valueRef.current;
297
+ // Sort anchors by start ASC, then substitute. Walk the value left → right
298
+ // building the result with mention tokens swapped in at each anchor's range.
299
+ const sorted = [...anchors].sort((a, b) => a.start - b.start);
300
+ const v = valueRef.current;
301
+ let out = '';
302
+ let cursor = 0;
303
+ for (const a of sorted) {
304
+ if (a.start < cursor)
305
+ continue; // overlapping; drop (shouldn't happen)
306
+ out += v.slice(cursor, a.start);
307
+ out += formatMentionToken(a.ref);
308
+ cursor = a.end;
309
+ }
310
+ out += v.slice(cursor);
311
+ return out;
312
+ }, [anchors]);
313
+ const state = {
314
+ open,
315
+ query,
316
+ groups,
317
+ showingRecent,
318
+ highlightedIndex,
319
+ flatResults,
320
+ };
321
+ return { state, handleKeyDown, insertMention, getValueWithTokens, anchors, close };
322
+ }
323
+ //# sourceMappingURL=use-mention-autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-mention-autocomplete.js","sourceRoot":"","sources":["../../src/mentions/use-mention-autocomplete.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,7 @@ export { Composer } from "../ui/Composer.js";
11
11
  export type { MessageItemDefaultProps } from "../ui/MessageItemDefault.js";
12
12
  export { MessageItemDefault } from "../ui/MessageItemDefault.js";
13
13
  export { MessageActions, ThreadActions } from "../ui/menus.js";
14
+ export { MessageText, type MessageTextProps } from "../mentions/MessageText.js";
15
+ export { MentionAutocomplete, type MentionAutocompleteProps, } from "../mentions/MentionAutocomplete.js";
16
+ export { useMentionAutocomplete, type UseMentionAutocompleteArgs, type UseMentionAutocompleteResult, type AutocompleteState, type AutocompleteResultGroup, } from "../mentions/use-mention-autocomplete.js";
14
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE1J,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,YAAY,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE1J,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,YAAY,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,yCAAyC,CAAC"}
@@ -7,4 +7,7 @@ export { MessageList } from "../ui/MessageList.js";
7
7
  export { Composer } from "../ui/Composer.js";
8
8
  export { MessageItemDefault } from "../ui/MessageItemDefault.js";
9
9
  export { MessageActions, ThreadActions } from "../ui/menus.js";
10
+ export { MessageText } from "../mentions/MessageText.js";
11
+ export { MentionAutocomplete, } from "../mentions/MentionAutocomplete.js";
12
+ export { useMentionAutocomplete, } from "../mentions/use-mention-autocomplete.js";
10
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAG1J,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAG1J,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAyB,MAAM,4BAA4B,CAAC;AAChF,OAAO,EACL,mBAAmB,GAEpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,GAKvB,MAAM,yCAAyC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * chat-core's schema-only subpath.
3
+ *
4
+ * Thin re-export of `@ttt-productions/chat-schemas`. Kept here for backward
5
+ * compatibility with consumers importing from `@ttt-productions/chat-core/schemas`
6
+ * and to satisfy the F21 subpath contract — the actual canonical Zod source
7
+ * lives in the tier-0 `chat-schemas` package, where it can be consumed by both
8
+ * chat-core (UI) and ttt-core (callable composition) without forcing the chat
9
+ * UI dependency graph on backend / schema callers.
10
+ *
11
+ * No React. No upload-ui. No browser code. No styles.
12
+ */
13
+ export { ChatAttachmentSchema, ReplyToSchema, type ChatAttachment, type ReplyTo, } from '@ttt-productions/chat-schemas';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,OAAO,GACb,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * chat-core's schema-only subpath.
3
+ *
4
+ * Thin re-export of `@ttt-productions/chat-schemas`. Kept here for backward
5
+ * compatibility with consumers importing from `@ttt-productions/chat-core/schemas`
6
+ * and to satisfy the F21 subpath contract — the actual canonical Zod source
7
+ * lives in the tier-0 `chat-schemas` package, where it can be consumed by both
8
+ * chat-core (UI) and ttt-core (callable composition) without forcing the chat
9
+ * UI dependency graph on backend / schema callers.
10
+ *
11
+ * No React. No upload-ui. No browser code. No styles.
12
+ */
13
+ export { ChatAttachmentSchema, ReplyToSchema, } from '@ttt-productions/chat-schemas';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,oBAAoB,EACpB,aAAa,GAGd,MAAM,+BAA+B,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Firestore } from "firebase/firestore";
2
2
  import type { FirebaseStorage } from "firebase/storage";
3
- import type { TTTMediaOriginEntry } from "@ttt-productions/media-contracts";
3
+ import type { MediaOriginSpec } from "@ttt-productions/media-schemas";
4
4
  export type ChatAttachment = {
5
5
  id: string;
6
6
  name: string;
@@ -70,15 +70,51 @@ export type ChatCoreConfig = {
70
70
  threadAllowedUserIds?: string[];
71
71
  createdAtField?: string;
72
72
  pageSize?: number;
73
+ /**
74
+ * Optional mention system configuration. When present, the composer enables
75
+ * `@`-trigger autocomplete using the supplied providers and renders mention
76
+ * chips in messages. Each provider corresponds to one mention kind.
77
+ */
78
+ mentionConfig?: ChatMentionConfig;
79
+ };
80
+ /**
81
+ * Pluggable upload-path strategy for chat attachments.
82
+ *
83
+ * Consumers supply this to tell chat-core (a) what opaque origin identifier
84
+ * to record for the upload, (b) how to build the Firebase Storage path for
85
+ * the temporary upload, and (c) optional extra metadata to attach to the
86
+ * Storage object.
87
+ *
88
+ * `buildUploadPath` and `buildUploadMetadata` receive the userId and
89
+ * attachmentId so consumers can interpolate them per their own conventions.
90
+ * chat-core does not interpret `originId` — it forwards it via callbacks
91
+ * and uses it for adapter identity only.
92
+ */
93
+ export type ChatUploadAdapter = {
94
+ /** Opaque origin identifier (e.g. "chat-attachment"). Not interpreted by chat-core. */
95
+ originId: string;
96
+ /** Build the Firebase Storage path for the upload. Called once per attachment. */
97
+ buildUploadPath: (args: {
98
+ userId: string;
99
+ attachmentId: string;
100
+ }) => string;
101
+ /** Optional extra metadata merged onto the Storage object metadata (e.g. customMetadata). */
102
+ buildUploadMetadata?: (args: {
103
+ userId: string;
104
+ attachmentId: string;
105
+ }) => Record<string, unknown>;
73
106
  };
74
107
  export type ChatAttachmentConfig = {
75
- attachmentSpec: TTTMediaOriginEntry;
108
+ attachmentSpec: MediaOriginSpec;
76
109
  storage: FirebaseStorage;
110
+ /** The current user's auth uid. Forwarded to `uploadAdapter` callbacks. */
111
+ userId: string;
77
112
  /**
78
- * The current user's auth uid. chat-core builds the canonical
79
- * `uploads/chat-attachment/{userId}/{pendingMediaDocId}` storage path internally.
113
+ * Pluggable upload-path strategy. Consumers wire this to their app's
114
+ * conventions (e.g. for TTT: originId "chat-attachment", path
115
+ * `uploads/chat-attachment/{userId}/{attachmentId}`).
80
116
  */
81
- userId: string;
117
+ uploadAdapter: ChatUploadAdapter;
82
118
  };
83
119
  /**
84
120
  * Called by Composer after the file has been uploaded to Storage. The consumer
@@ -102,6 +138,37 @@ export type SendAttachmentInput = {
102
138
  replyTo?: ChatMessageV1["replyTo"];
103
139
  };
104
140
  export type SendAttachmentFn = (input: SendAttachmentInput) => Promise<void>;
141
+ /**
142
+ * Pluggable mention system config. When attached to ChatCoreConfig, the
143
+ * composer enables `@`-trigger autocomplete and the message renderer parses
144
+ * mention tokens out of `text`.
145
+ *
146
+ * Generic over `TKind` and `TContext` is intentionally NOT exposed here at
147
+ * the type level — `ChatCoreConfig` would have to become generic too, which
148
+ * cascades. Instead this type accepts permissive `string`-keyed providers;
149
+ * consumers binding stricter kind unions narrow at the call site via their
150
+ * provider definitions.
151
+ */
152
+ export type ChatMentionConfig = {
153
+ /** Providers in display order. */
154
+ providers: import('./mentions/types.js').MentionProvider<string, unknown>[];
155
+ /** Context object forwarded to every provider's `search`. */
156
+ context: unknown;
157
+ /** Optional recent-mentions adapter. */
158
+ recent?: import('./mentions/types.js').RecentMentionsAdapter<string>;
159
+ /** Trigger character. Defaults to `'@'`. */
160
+ trigger?: string;
161
+ /** Minimum query length before search fires. Default: 0. */
162
+ minQueryLength?: number;
163
+ /** Search debounce window in ms. Default: 200. */
164
+ searchDebounceMs?: number;
165
+ /**
166
+ * Optional custom renderer for mentions inside rendered message text.
167
+ * When omitted, the default chip (`<span class="chat-mention-chip">`) is
168
+ * used. Receives the resolved MentionRef.
169
+ */
170
+ renderMention?: (ref: import('./mentions/types.js').MentionRef) => import('react').ReactNode;
171
+ };
105
172
  export type ModerationHandlers = {
106
173
  onReportMessage?: (messageId: string, reason?: string) => void | Promise<void>;
107
174
  onReportThread?: (threadId: string, reason?: string) => void | Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA8JA,+CAA+C;AAC/C,kDAAkD;AAClD,+CAA+C;AAE/C,iEAAiE;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAuOA,+CAA+C;AAC/C,kDAAkD;AAClD,+CAA+C;AAE/C,iEAAiE;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatShell.d.ts","sourceRoot":"","sources":["../../src/ui/ChatShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAQrB,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,cAAc,CAAC;IAGvB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAGzB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5E,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAG9B,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,mBAAmB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAC5C,mBAAmB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAC5C,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAGrC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAGhE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CA0G9C"}
1
+ {"version":3,"file":"ChatShell.d.ts","sourceRoot":"","sources":["../../src/ui/ChatShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAQrB,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,cAAc,CAAC;IAGvB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAGzB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5E,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAG9B,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,mBAAmB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAC5C,mBAAmB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAC5C,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IAGrC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAGhE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CA2G9C"}
@@ -17,6 +17,6 @@ export function ChatShell(props) {
17
17
  if (isInitialLoading) {
18
18
  return (_jsxs(Card, { className: "w-full", children: [_jsxs(CardHeader, { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-5 w-40" }), _jsx(Skeleton, { className: "h-3 w-56" })] }), _jsx(CardContent, { children: _jsx(Skeleton, { className: "h-[240px] w-full" }) }), _jsx(CardFooter, { children: _jsx(Skeleton, { className: "h-10 w-full" }) })] }));
19
19
  }
20
- return (_jsxs(Card, { className: "w-full", children: [(header || handlers) && (_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4 space-y-0", children: [_jsx("div", { children: header }), _jsx("div", { className: "flex flex-col items-end gap-2", children: _jsx(ThreadActions, { threadId: config.threadId, isAdmin: config.isAdmin, handlers: handlers }) })] })), renderAboveMessages && (_jsx("div", { className: "border-b", children: renderAboveMessages() })), _jsx(CardContent, { className: "p-0", children: _jsx(MessageList, { messages: messages, currentUserId: config.currentUserId, isAdmin: config.isAdmin, isFetchingOlder: isFetchingOlder, hasOlder: hasOlder, onLoadOlder: () => fetchOlder(), renderMessage: renderMessage, messageRenderers: messageRenderers, showScrollToBottom: showScrollToBottom, onScrollToBottom: () => setShowScrollToBottom(false), handlers: handlers, onSenderClick: onSenderClick }) }), renderBelowMessages && (_jsx("div", { className: "border-t", children: renderBelowMessages() })), renderFooter ? (_jsx(CardFooter, { className: "border-t", children: renderFooter() })) : (_jsx(CardFooter, { className: "border-t", children: _jsx(KeyboardAvoidingView, { padding: true, offset: 8, className: "w-full", children: _jsx(Composer, { onSend: onSend, attachmentConfig: attachmentConfig, sendAttachment: sendAttachment, disabled: composerDisabled, autoFocus: autoFocus, placeholder: composerPlaceholder }) }) }))] }));
20
+ return (_jsxs(Card, { className: "w-full", children: [(header || handlers) && (_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4 space-y-0", children: [_jsx("div", { children: header }), _jsx("div", { className: "flex flex-col items-end gap-2", children: _jsx(ThreadActions, { threadId: config.threadId, isAdmin: config.isAdmin, handlers: handlers }) })] })), renderAboveMessages && (_jsx("div", { className: "border-b", children: renderAboveMessages() })), _jsx(CardContent, { className: "p-0", children: _jsx(MessageList, { messages: messages, currentUserId: config.currentUserId, isAdmin: config.isAdmin, isFetchingOlder: isFetchingOlder, hasOlder: hasOlder, onLoadOlder: () => fetchOlder(), renderMessage: renderMessage, messageRenderers: messageRenderers, showScrollToBottom: showScrollToBottom, onScrollToBottom: () => setShowScrollToBottom(false), handlers: handlers, onSenderClick: onSenderClick }) }), renderBelowMessages && (_jsx("div", { className: "border-t", children: renderBelowMessages() })), renderFooter ? (_jsx(CardFooter, { className: "border-t", children: renderFooter() })) : (_jsx(CardFooter, { className: "border-t", children: _jsx(KeyboardAvoidingView, { padding: true, offset: 8, className: "w-full", children: _jsx(Composer, { onSend: onSend, attachmentConfig: attachmentConfig, sendAttachment: sendAttachment, disabled: composerDisabled, autoFocus: autoFocus, placeholder: composerPlaceholder, mentionConfig: config.mentionConfig }) }) }))] }));
21
21
  }
22
22
  //# sourceMappingURL=ChatShell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatShell.js","sourceRoot":"","sources":["../../src/ui/ChatShell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatShell.js","sourceRoot":"","sources":["../../src/ui/ChatShell.tsx"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export type ComposerProps = {
17
17
  disabled?: boolean;
18
18
  autoFocus?: boolean;
19
19
  placeholder?: string;
20
+ mentionConfig?: import('../types.js').ChatMentionConfig;
20
21
  };
21
22
  export declare function Composer(props: ComposerProps): import("react/jsx-runtime").JSX.Element;
22
23
  //# sourceMappingURL=Composer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/ui/Composer.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAkB,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAsBzG,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5E,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAElC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAuJ5C"}
1
+ {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/ui/Composer.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAkB,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAwBzG,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5E,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAElC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,aAAa,EAAE,iBAAiB,CAAC;CACzD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAkL5C"}