@haklex/rich-ext-chat 0.4.0 → 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.
package/dist/index.mjs CHANGED
@@ -1,421 +1,6 @@
1
- import { A as participantPillUser, C as modalFooter, D as participantInput, E as participantCard, F as variantPill, I as variantPillActive, L as variantPillHint, M as rail, N as sectionLabel, O as participantLabel, P as semanticClassNames, R as variantPillName, S as modalBody, T as pane, _ as messageCard, a as ChatRenderer, b as messageTextarea, c as addMessageButton, d as buttonPrimary, f as editContainer, g as messageActions, h as editorDialogPopup, i as _defineProperty, j as participantRow, k as participantPill, l as button, m as editOverlay, n as $isChatNode, o as createMessageId, p as editLabel, r as ChatNode, s as addMessage, t as $createChatNode, u as buttonGhost, v as messageHead, w as modalHeader, x as modal, y as messageSelect, z as variantStack } from "./ChatNode-D4OK247K.js";
2
- import { createContext, createElement, useCallback, useContext, useEffect, useRef, useState } from "react";
3
- import { $getNodeByKey, $insertNodes } from "lexical";
4
- import { useColorScheme } from "@haklex/rich-editor";
5
- import { presentDialog } from "@haklex/rich-editor-ui";
6
- import { usePortalTheme } from "@haklex/rich-style-token";
7
- import { ArrowDown, ArrowUp, MessageSquare, Pencil, Trash2 } from "lucide-react";
8
- import { jsx, jsxs } from "react/jsx-runtime";
9
- //#region ../../node_modules/.pnpm/@lexical+react@0.44.0_react-dom@19.2.5_react@19.2.5__react@19.2.5_yjs@13.6.29/node_modules/@lexical/react/LexicalComposerContext.prod.mjs
10
- /**
11
- * Copyright (c) Meta Platforms, Inc. and affiliates.
12
- *
13
- * This source code is licensed under the MIT license found in the
14
- * LICENSE file in the root directory of this source tree.
15
- *
16
- */
17
- var r = createContext(null);
18
- function o() {
19
- const n = useContext(r);
20
- return n ?? function(n, ...e) {
21
- const r = new URL("https://lexical.dev/docs/error"), t = new URLSearchParams();
22
- t.append("code", n);
23
- for (const n of e) t.append("v", n);
24
- throw r.search = t.toString(), Error(`Minified Lexical error #${n}; visit ${r.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`);
25
- }(8), n;
26
- }
27
- //#endregion
28
- //#region src/variant-reducer.ts
29
- function switchVariant(next, participants) {
30
- return participants.map((p, idx) => {
31
- if (idx !== 1) return p;
32
- if (next === "user-user") return {
33
- ...p,
34
- kind: "user"
35
- };
36
- return {
37
- ...p,
38
- kind: "agent"
39
- };
40
- });
41
- }
42
- //#endregion
43
- //#region src/ChatEditorModal.tsx
44
- var VARIANT_LABELS = {
45
- "user-agent": {
46
- name: "user · agent",
47
- hint: "Bubble + article"
48
- },
49
- "user-user": {
50
- name: "user · user",
51
- hint: "Both bubbles"
52
- }
53
- };
54
- function defaultName(p) {
55
- return p.name ?? (p.kind === "agent" ? "Assistant" : "User");
56
- }
57
- var ChatEditorModal = ({ initial, dismiss, onCommit, onCancel }) => {
58
- const [variant, setVariant] = useState(initial.variant);
59
- const [participants, setParticipants] = useState(initial.participants);
60
- const [messages, setMessages] = useState(initial.messages);
61
- const handleVariantChange = useCallback((next) => {
62
- setVariant(next);
63
- setParticipants((current) => switchVariant(next, current));
64
- }, []);
65
- const updateParticipant = useCallback((id, patch) => {
66
- setParticipants((prev) => prev.map((p) => p.id === id ? {
67
- ...p,
68
- ...patch
69
- } : p));
70
- }, []);
71
- const addMessage$1 = useCallback(() => {
72
- setMessages((prev) => {
73
- const recent = prev.at(-1);
74
- const fallback = participants[0]?.id ?? "";
75
- const participantId = recent ? recent.participantId : fallback;
76
- return [...prev, {
77
- id: createMessageId(),
78
- participantId,
79
- content: ""
80
- }];
81
- });
82
- }, [participants]);
83
- const updateMessage = useCallback((id, patch) => {
84
- setMessages((prev) => prev.map((m) => m.id === id ? {
85
- ...m,
86
- ...patch
87
- } : m));
88
- }, []);
89
- const moveMessage = useCallback((id, direction) => {
90
- setMessages((prev) => {
91
- const idx = prev.findIndex((m) => m.id === id);
92
- if (idx < 0) return prev;
93
- const target = idx + direction;
94
- if (target < 0 || target >= prev.length) return prev;
95
- const next = [...prev];
96
- [next[idx], next[target]] = [next[target], next[idx]];
97
- return next;
98
- });
99
- }, []);
100
- const deleteMessage = useCallback((id) => {
101
- setMessages((prev) => prev.filter((m) => m.id !== id));
102
- }, []);
103
- const handleDone = useCallback(() => {
104
- onCommit?.({
105
- variant,
106
- participants,
107
- messages
108
- });
109
- dismiss();
110
- }, [
111
- onCommit,
112
- variant,
113
- participants,
114
- messages,
115
- dismiss
116
- ]);
117
- const handleCancel = useCallback(() => {
118
- onCancel?.();
119
- dismiss();
120
- }, [onCancel, dismiss]);
121
- return /* @__PURE__ */ jsxs("div", {
122
- className: modal,
123
- children: [
124
- /* @__PURE__ */ jsx("div", {
125
- className: modalHeader,
126
- children: "Edit chat"
127
- }),
128
- /* @__PURE__ */ jsxs("div", {
129
- className: modalBody,
130
- children: [/* @__PURE__ */ jsxs("aside", {
131
- className: rail,
132
- children: [
133
- /* @__PURE__ */ jsx("div", {
134
- className: sectionLabel,
135
- children: "Variant"
136
- }),
137
- /* @__PURE__ */ jsx("div", {
138
- className: variantStack,
139
- children: Object.keys(VARIANT_LABELS).map((key) => /* @__PURE__ */ jsxs("button", {
140
- className: `${variantPill} ${variant === key ? variantPillActive : ""}`,
141
- type: "button",
142
- onClick: () => handleVariantChange(key),
143
- children: [/* @__PURE__ */ jsx("div", {
144
- className: variantPillName,
145
- children: VARIANT_LABELS[key].name
146
- }), /* @__PURE__ */ jsx("div", {
147
- className: variantPillHint,
148
- children: VARIANT_LABELS[key].hint
149
- })]
150
- }, key))
151
- }),
152
- /* @__PURE__ */ jsx("div", {
153
- className: sectionLabel,
154
- children: "Participants"
155
- }),
156
- participants.map((p) => /* @__PURE__ */ jsxs("div", {
157
- className: participantCard,
158
- children: [/* @__PURE__ */ jsxs("div", {
159
- className: participantRow,
160
- children: [/* @__PURE__ */ jsx("span", {
161
- className: `${participantPill} ${p.kind === "user" ? participantPillUser : ""}`,
162
- children: p.kind
163
- }), /* @__PURE__ */ jsx("input", {
164
- className: participantInput,
165
- placeholder: "Display name",
166
- type: "text",
167
- value: p.name ?? "",
168
- onChange: (e) => updateParticipant(p.id, { name: e.target.value || void 0 })
169
- })]
170
- }), /* @__PURE__ */ jsxs("div", {
171
- className: participantRow,
172
- children: [/* @__PURE__ */ jsx("span", {
173
- className: participantLabel,
174
- children: "Avatar"
175
- }), /* @__PURE__ */ jsx("input", {
176
- className: participantInput,
177
- placeholder: "URL (optional)",
178
- type: "text",
179
- value: p.avatar ?? "",
180
- onChange: (e) => updateParticipant(p.id, { avatar: e.target.value || void 0 })
181
- })]
182
- })]
183
- }, p.id))
184
- ]
185
- }), /* @__PURE__ */ jsxs("main", {
186
- className: pane,
187
- children: [
188
- /* @__PURE__ */ jsxs("div", {
189
- className: sectionLabel,
190
- children: ["Messages — ", messages.length]
191
- }),
192
- messages.map((m) => /* @__PURE__ */ jsxs("div", {
193
- className: messageCard,
194
- children: [/* @__PURE__ */ jsxs("div", {
195
- className: messageHead,
196
- children: [/* @__PURE__ */ jsx("select", {
197
- className: messageSelect,
198
- value: m.participantId,
199
- onChange: (e) => updateMessage(m.id, { participantId: e.target.value }),
200
- children: participants.map((p) => /* @__PURE__ */ jsxs("option", {
201
- value: p.id,
202
- children: [
203
- defaultName(p),
204
- " (",
205
- p.kind,
206
- ")"
207
- ]
208
- }, p.id))
209
- }), /* @__PURE__ */ jsxs("div", {
210
- className: messageActions,
211
- children: [
212
- /* @__PURE__ */ jsx("button", {
213
- "aria-label": "Move up",
214
- className: `${button} ${buttonGhost}`,
215
- type: "button",
216
- onClick: () => moveMessage(m.id, -1),
217
- children: /* @__PURE__ */ jsx(ArrowUp, { size: 12 })
218
- }),
219
- /* @__PURE__ */ jsx("button", {
220
- "aria-label": "Move down",
221
- className: `${button} ${buttonGhost}`,
222
- type: "button",
223
- onClick: () => moveMessage(m.id, 1),
224
- children: /* @__PURE__ */ jsx(ArrowDown, { size: 12 })
225
- }),
226
- /* @__PURE__ */ jsx("button", {
227
- "aria-label": "Delete",
228
- className: `${button} ${buttonGhost}`,
229
- type: "button",
230
- onClick: () => deleteMessage(m.id),
231
- children: /* @__PURE__ */ jsx(Trash2, { size: 12 })
232
- })
233
- ]
234
- })]
235
- }), /* @__PURE__ */ jsx("textarea", {
236
- className: messageTextarea,
237
- value: m.content,
238
- onChange: (e) => updateMessage(m.id, { content: e.target.value })
239
- })]
240
- }, m.id)),
241
- /* @__PURE__ */ jsx("div", {
242
- className: addMessage,
243
- children: /* @__PURE__ */ jsx("button", {
244
- className: addMessageButton,
245
- type: "button",
246
- onClick: addMessage$1,
247
- children: "+ Add message"
248
- })
249
- })
250
- ]
251
- })]
252
- }),
253
- /* @__PURE__ */ jsxs("div", {
254
- className: modalFooter,
255
- children: [/* @__PURE__ */ jsx("button", {
256
- className: button,
257
- type: "button",
258
- onClick: handleCancel,
259
- children: "Cancel"
260
- }), /* @__PURE__ */ jsx("button", {
261
- className: `${button} ${buttonPrimary}`,
262
- type: "button",
263
- onClick: handleDone,
264
- children: "Done"
265
- })]
266
- })
267
- ]
268
- });
269
- };
270
- //#endregion
271
- //#region src/ChatEditRenderer.tsx
272
- var ChatEditRenderer = ({ variant, participants, messages, onChange, onCancel, registerOpenTrigger }) => {
273
- const { className: portalClassName } = usePortalTheme();
274
- const colorScheme = useColorScheme();
275
- const openEditor = useCallback(() => {
276
- presentDialog({
277
- content: ({ dismiss }) => /* @__PURE__ */ jsx(ChatEditorModal, {
278
- dismiss,
279
- initial: {
280
- variant,
281
- participants,
282
- messages
283
- },
284
- onCancel,
285
- onCommit: onChange
286
- }),
287
- className: editorDialogPopup,
288
- portalClassName,
289
- theme: colorScheme,
290
- showCloseButton: false,
291
- clickOutsideToDismiss: false
292
- });
293
- }, [
294
- variant,
295
- participants,
296
- messages,
297
- onChange,
298
- onCancel,
299
- portalClassName,
300
- colorScheme
301
- ]);
302
- useEffect(() => {
303
- registerOpenTrigger?.(openEditor);
304
- }, [openEditor, registerOpenTrigger]);
305
- return /* @__PURE__ */ jsxs("div", {
306
- className: `${editContainer} ${semanticClassNames.editContainer}`,
307
- children: [/* @__PURE__ */ jsx(ChatRenderer, {
308
- messages,
309
- participants,
310
- variant
311
- }), /* @__PURE__ */ jsx("button", {
312
- "aria-label": "Edit chat",
313
- className: `${editOverlay} ${semanticClassNames.editOverlay}`,
314
- type: "button",
315
- onClick: openEditor,
316
- children: /* @__PURE__ */ jsxs("span", {
317
- className: `${editLabel} ${semanticClassNames.editLabel}`,
318
- children: [/* @__PURE__ */ jsx(Pencil, { size: 14 }), " Edit"]
319
- })
320
- })]
321
- });
322
- };
323
- //#endregion
324
- //#region src/ChatEditDecorator.tsx
325
- var ChatEditDecorator = ({ nodeKey, variant, participants, messages }) => {
326
- const [editor] = o();
327
- const hasOpenedRef = useRef(false);
328
- const openTriggerRef = useRef(null);
329
- const messagesLengthRef = useRef(messages.length);
330
- const onChange = useCallback((next) => {
331
- editor.update(() => {
332
- const node = $getNodeByKey(nodeKey);
333
- if ($isChatNode(node)) {
334
- node.setVariant(next.variant);
335
- node.setParticipants(next.participants);
336
- node.setMessages(next.messages);
337
- }
338
- });
339
- }, [editor, nodeKey]);
340
- const onCancel = useCallback(() => {
341
- editor.update(() => {
342
- const node = $getNodeByKey(nodeKey);
343
- if ($isChatNode(node) && node.getMessages().length === 0) node.remove();
344
- });
345
- }, [editor, nodeKey]);
346
- useEffect(() => {
347
- if (hasOpenedRef.current) return;
348
- if (messagesLengthRef.current > 0) return;
349
- const trigger = openTriggerRef.current;
350
- if (!trigger) return;
351
- hasOpenedRef.current = true;
352
- trigger();
353
- }, []);
354
- return /* @__PURE__ */ jsx(ChatEditRenderer, {
355
- messages,
356
- participants,
357
- variant,
358
- registerOpenTrigger: (open) => {
359
- openTriggerRef.current = open;
360
- },
361
- onCancel,
362
- onChange
363
- });
364
- };
365
- //#endregion
366
- //#region src/nodes/ChatEditNode.ts
367
- var ChatEditNode = class ChatEditNode extends ChatNode {
368
- static clone(node) {
369
- return new ChatEditNode({
370
- variant: node.__variant,
371
- participants: node.__participants,
372
- messages: node.__messages
373
- }, node.__key);
374
- }
375
- static importJSON(serializedNode) {
376
- return new ChatEditNode({
377
- variant: serializedNode.variant,
378
- participants: serializedNode.participants,
379
- messages: serializedNode.messages
380
- });
381
- }
382
- decorate(_editor, _config) {
383
- return createElement(ChatEditDecorator, {
384
- nodeKey: this.__key,
385
- variant: this.__variant,
386
- participants: this.__participants,
387
- messages: this.__messages
388
- });
389
- }
390
- };
391
- _defineProperty(ChatEditNode, "commandItems", [{
392
- title: "Chat",
393
- icon: createElement(MessageSquare, { size: 20 }),
394
- description: "Embed a conversation snapshot",
395
- keywords: [
396
- "chat",
397
- "conversation",
398
- "dialog",
399
- "agent"
400
- ],
401
- section: "MEDIA",
402
- placement: ["slash", "toolbar"],
403
- group: "insert",
404
- onSelect: (editor) => {
405
- editor.update(() => {
406
- $insertNodes([$createChatEditNode({ variant: "user-agent" })]);
407
- });
408
- }
409
- }]);
410
- function $createChatEditNode(payload) {
411
- return new ChatEditNode(payload);
412
- }
413
- function $isChatEditNode(node) {
414
- return node instanceof ChatEditNode;
415
- }
416
- //#endregion
417
- //#region src/nodes/index.ts
418
- var chatNodes = [ChatNode];
419
- var chatEditNodes = [ChatEditNode];
420
- //#endregion
421
- export { $createChatEditNode, $createChatNode, $isChatEditNode, $isChatNode, ChatEditDecorator, ChatEditNode, ChatEditRenderer, ChatEditorModal, ChatNode, ChatRenderer, chatEditNodes, chatNodes };
1
+ import { t as ChatRenderer } from "./ChatRenderer-DYZpPFed.js";
2
+ import { a as ChatEditDecorator, i as ChatEditNode, n as $createChatEditNode, o as ChatEditRenderer, r as $isChatEditNode, s as ChatEditorModal, t as chatEditNodes } from "./edit-C2JFybx6.js";
3
+ import { a as CHAT_NODE_KEY, n as $isChatNode, r as ChatNode, t as $createChatNode } from "./ChatNode-DIZ2_6jG.js";
4
+ import { chatNodes } from "./node.mjs";
5
+ import "./renderer.mjs";
6
+ export { $createChatEditNode, $createChatNode, $isChatEditNode, $isChatNode, CHAT_NODE_KEY, ChatEditDecorator, ChatEditNode, ChatEditRenderer, ChatEditorModal, ChatNode, ChatRenderer, chatEditNodes, chatNodes };
package/dist/node.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { Klass, LexicalNode } from 'lexical';
2
+ export { $createChatNode, $isChatNode, ChatNode } from './nodes/ChatNode';
3
+ export { CHAT_NODE_KEY } from './slot';
4
+ export type { ChatMessage, ChatParticipant, ChatParticipantKind, ChatRendererProps, ChatVariant, SerializedChatNode, } from './types';
5
+ export declare const chatNodes: Array<Klass<LexicalNode>>;
6
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIlD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,YAAY,EACV,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAc,CAAC"}
package/dist/node.mjs ADDED
@@ -0,0 +1,5 @@
1
+ import { a as CHAT_NODE_KEY, n as $isChatNode, r as ChatNode, t as $createChatNode } from "./ChatNode-DIZ2_6jG.js";
2
+ //#region src/node.ts
3
+ var chatNodes = [ChatNode];
4
+ //#endregion
5
+ export { $createChatNode, $isChatNode, CHAT_NODE_KEY, ChatNode, chatNodes };
@@ -1 +1 @@
1
- {"version":3,"file":"ChatNode.d.ts","sourceRoot":"","sources":["../../src/nodes/ChatNode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG9F,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,QAAS,SAAQ,aAAa,CAAC,YAAY,CAAC;IACvD,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,UAAU,EAAE,WAAW,EAAE,CAAC;IAE1B,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;gBAW1B,OAAO,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,OAAO;IAUnD,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;IAM7C,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,WAAW;IAIzB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKtC,eAAe,IAAI,eAAe,EAAE;IAIpC,eAAe,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI;IAKtD,WAAW,IAAI,WAAW,EAAE;IAI5B,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAK1C,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAQ/D,UAAU,IAAI,kBAAkB;IAWhC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;CAOtE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAElE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAElF"}
1
+ {"version":3,"file":"ChatNode.d.ts","sourceRoot":"","sources":["../../src/nodes/ChatNode.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG9F,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,QAAS,SAAQ,aAAa,CAAC,YAAY,CAAC;IACvD,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,UAAU,EAAE,WAAW,EAAE,CAAC;IAE1B,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;gBAW1B,OAAO,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,OAAO;IAUnD,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;IAM7C,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,WAAW;IAIzB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKtC,eAAe,IAAI,eAAe,EAAE;IAIpC,eAAe,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI;IAKtD,WAAW,IAAI,WAAW,EAAE;IAI5B,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAK1C,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,kBAAkB,GAAG,QAAQ;IAQ/D,UAAU,IAAI,kBAAkB;IAWhC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;CAOtE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAElE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAElF"}
@@ -0,0 +1,5 @@
1
+ import { ChatRenderer } from './ChatRenderer';
2
+ export type { ChatMessage, ChatParticipant, ChatParticipantKind, ChatRendererProps, ChatVariant, } from './types';
3
+ export { ChatRenderer };
4
+ export default ChatRenderer;
5
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY,EACV,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,eAAe,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { t as ChatRenderer } from "./ChatRenderer-DYZpPFed.js";
2
+ //#region src/renderer.ts
3
+ var renderer_default = ChatRenderer;
4
+ //#endregion
5
+ export { ChatRenderer, renderer_default as default };
@@ -1,2 +1,2 @@
1
- ._7z1aq60{flex-direction:column;gap:20px;padding:12px 0;display:flex}._7z1aq61{align-items:flex-start;gap:10px;display:flex}._7z1aq62{justify-content:flex-end}._7z1aq63{background:var(--rc-bg-tertiary);border:1px solid var(--rc-border);width:28px;height:28px;color:var(--rc-text-tertiary);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex;overflow:hidden}._7z1aq64{width:24px;height:24px;font-size:11px}._7z1aq65{background:var(--rc-text);color:var(--rc-bg);border-color:var(--rc-text)}._7z1aq66{object-fit:cover;width:100%;height:100%}._7z1aq67{background:var(--rc-bg-tertiary);max-width:70%;color:var(--rc-text);padding:10px 14px;font-size:15px;line-height:1.6}._7z1aq68{border-radius:14px 14px 4px}._7z1aq69{border-radius:14px 14px 14px 4px}._7z1aq6a{flex-direction:column;flex:1;min-width:0;display:flex}._7z1aq6b{align-items:center;gap:8px;margin-bottom:8px;display:flex}._7z1aq6c{color:var(--rc-text);font-size:13px;font-weight:500}._7z1aq6d{color:inherit;font-size:15px;line-height:1.7}._7z1aq6e{flex-direction:column;min-width:0;max-width:70%;display:flex}._7z1aq6f{align-items:flex-end}._7z1aq6g{color:var(--rc-text-tertiary);margin-bottom:4px;padding:0 4px;font-size:12px;font-weight:500}._7z1aq6h{color:var(--rc-text-tertiary);padding:8px 0;font-size:13px;font-style:italic}._7z1aq6i{position:relative}._7z1aq6j{background:var(--rc-bg);border:1px solid var(--rc-border);color:var(--rc-text);opacity:0;cursor:pointer;border-radius:6px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;font-weight:500;transition:opacity .12s;display:inline-flex;position:absolute;top:8px;right:8px}._7z1aq6i:hover ._7z1aq6j{opacity:1}._7z1aq6k{align-items:center;gap:4px;display:inline-flex}._7z1aq6l{width:920px;max-width:95vw}._7z1aq6m{background:var(--rc-bg);color:var(--rc-text);border-radius:14px;flex-direction:column;width:920px;max-width:95vw;display:flex;overflow:hidden}._7z1aq6n{border-bottom:1px solid var(--rc-border);color:var(--rc-text);padding:14px 22px;font-size:14px;font-weight:600}._7z1aq6o{height:540px;display:flex}._7z1aq6p{border-right:1px solid var(--rc-border);background:var(--rc-bg-secondary);flex-shrink:0;width:280px;padding:18px 18px 14px;overflow-y:auto}._7z1aq6q{flex:1;min-width:0;padding:14px 22px 18px;overflow-y:auto}._7z1aq6r{text-transform:uppercase;letter-spacing:.08em;color:var(--rc-text-tertiary);margin-bottom:8px;font-size:11px;font-weight:500}._7z1aq6r:not(:first-child){margin-top:22px}._7z1aq6s{flex-direction:column;gap:6px;display:flex}._7z1aq6t{border:1px solid var(--rc-border);cursor:pointer;background:var(--rc-bg);color:var(--rc-text);text-align:left;border-radius:8px;padding:9px 11px}._7z1aq6u{border-color:var(--rc-text)}._7z1aq6v{font-size:13px;font-weight:600}._7z1aq6w{color:var(--rc-text-tertiary);font-size:11px}._7z1aq6x{border:1px solid var(--rc-border);background:var(--rc-bg);border-radius:8px;margin-bottom:8px;padding:9px 10px}._7z1aq6y{align-items:center;gap:6px;margin-bottom:5px;display:flex}._7z1aq6z{text-transform:uppercase;letter-spacing:.08em;background:var(--rc-text);color:var(--rc-bg);border-radius:4px;padding:2px 6px;font-size:9.5px;font-weight:600}._7z1aq610{background:var(--rc-text-tertiary)}._7z1aq611{color:var(--rc-text-tertiary);width:42px;font-size:10.5px}._7z1aq612{border:1px solid var(--rc-border);background:var(--rc-bg);color:var(--rc-text);border-radius:5px;outline:none;flex:1;width:0;padding:4px 7px;font-size:12.5px}._7z1aq612:focus{border-color:color-mix(in srgb, var(--rc-text) 40%, transparent)}._7z1aq613{border:1px solid var(--rc-border);background:var(--rc-bg);border-radius:10px;margin-bottom:10px;overflow:hidden}._7z1aq614{background:var(--rc-bg-secondary);border-bottom:1px solid var(--rc-border);justify-content:space-between;align-items:center;padding:7px 12px;display:flex}._7z1aq615{background:var(--rc-bg);color:var(--rc-text);border:1px solid var(--rc-border);border-radius:5px;padding:3px 6px;font-size:12px}._7z1aq616{gap:2px;display:flex}._7z1aq617{width:100%;color:var(--rc-text);background:var(--rc-bg);resize:vertical;box-sizing:border-box;border:0;outline:none;min-height:70px;padding:10px 12px;font-family:-apple-system,JetBrains Mono,monospace;font-size:13px;line-height:1.55}._7z1aq618{justify-content:center;margin:10px 0 4px;display:flex}._7z1aq619{border:1px dashed var(--rc-border);color:var(--rc-text-tertiary);cursor:pointer;background:0 0;border-radius:6px;padding:6px 14px;font-size:13px}._7z1aq619:hover{color:var(--rc-text);border-color:color-mix(in srgb, var(--rc-text) 40%, transparent)}._7z1aq61a{border-top:1px solid var(--rc-border);background:var(--rc-bg-secondary);justify-content:flex-end;gap:8px;padding:12px 22px;display:flex}._7z1aq61b{border:1px solid var(--rc-border);background:var(--rc-bg);color:var(--rc-text);cursor:pointer;border-radius:6px;padding:6px 12px;font-size:13px}._7z1aq61c{background:var(--rc-text);color:var(--rc-bg);border-color:var(--rc-text)}._7z1aq61d{color:var(--rc-text-tertiary);background:0 0;border-color:#0000}._7z1aq61d:hover{color:var(--rc-text);background:color-mix(in srgb, var(--rc-text) 8%, transparent)}@media (max-width:600px){._7z1aq67,._7z1aq6e{max-width:85%}}
1
+ :root{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}:root.dark,[data-theme=dark]{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._14jgd8k0{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.7;--rc-line-height-tight:1.4;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._14jgd8k1{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#2563eb;--rc-quote-bg:#f5f5f5;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:700px;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:4px;--rc-space-sm:8px;--rc-space-md:16px;--rc-space-lg:24px;--rc-space-xl:32px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:16px;--rc-font-size-small:14px;--rc-line-height:1.8;--rc-line-height-tight:1.4;--rc-font-family:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-radius-sm:4px;--rc-radius-md:8px;--rc-radius-lg:12px}._14jgd8k2{--rc-text:#000;--rc-text-secondary:#262626;--rc-text-tertiary:#737373;--rc-text-quaternary:#a3a3a3;--rc-bg:#fff;--rc-bg-secondary:#fafafa;--rc-bg-tertiary:#f5f5f5;--rc-fill:#e8e8e8;--rc-fill-secondary:#eee;--rc-fill-tertiary:#f5f5f5;--rc-fill-quaternary:#fafafa;--rc-border:#f5f5f5;--rc-accent:#2563eb;--rc-accent-light:#2563eb20;--rc-link:#2563eb;--rc-code-text:#404040;--rc-code-bg:#f5f5f5;--rc-hr-border:#e5e5e5;--rc-quote-border:#a3a3a3;--rc-quote-bg:#fafafa;--rc-alert-info:#006bb7;--rc-alert-warning:#c50;--rc-alert-tip:#1c0;--rc-alert-caution:#c01;--rc-alert-important:#50c;--rc-max-width:none;--rc-shadow-top-bar:0 8px 30px #0000001f, 0 2px 8px #0000000f;--rc-shadow-modal:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--rc-shadow-menu:0 1px 4px #0000000a, 0 4px 16px #00000014;--rc-space-xs:2px;--rc-space-sm:4px;--rc-space-md:10px;--rc-space-lg:16px;--rc-space-xl:20px;--rc-font-family-sans:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-font-family-serif:"Noto Serif CJK SC", "Source Han Serif SC", "Source Han Serif", "source-han-serif-sc", "Songti SC", STSong, "华文宋体", serif;--rc-font-family-kai:"楷体", KaiTi, STKaiti, "Kaiti SC", "LXGW WenKai", "霞鹜文楷", "Noto Serif CJK SC", serif;--rc-font-mono:"SF Mono", SFMono-Regular, ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;--rc-font-size-2xs:.625em;--rc-font-size-xs:.75em;--rc-font-size-sm:.8125em;--rc-font-size-md:.875em;--rc-font-size-lg:1.25em;--rc-font-size-base:14px;--rc-font-size-small:12px;--rc-line-height:1.5;--rc-line-height-tight:1.3;--rc-font-family:"PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, Helvetica, "noto sans sc", "hiragino sans gb", -apple-system, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Not Color Emoji;--rc-radius-sm:3px;--rc-radius-md:6px;--rc-radius-lg:12px}.dark ._14jgd8k0,[data-theme=dark] ._14jgd8k0,.dark._14jgd8k0,[data-theme=dark]._14jgd8k0,.dark ._14jgd8k1,[data-theme=dark] ._14jgd8k1,.dark._14jgd8k1,[data-theme=dark]._14jgd8k1,.dark ._14jgd8k2,[data-theme=dark] ._14jgd8k2,.dark._14jgd8k2,[data-theme=dark]._14jgd8k2{--rc-text:#fafafa;--rc-text-secondary:#a3a3a3;--rc-text-tertiary:#737373;--rc-text-quaternary:#525252;--rc-bg:#0a0a0a;--rc-bg-secondary:#171717;--rc-bg-tertiary:#262626;--rc-fill:#2a2a2a;--rc-fill-secondary:#222;--rc-fill-tertiary:#1a1a1a;--rc-fill-quaternary:#141414;--rc-border:#262626;--rc-accent:#60a5fa;--rc-accent-light:#60a5fa20;--rc-link:#60a5fa;--rc-code-text:#d4d4d4;--rc-code-bg:#262626;--rc-hr-border:#262626;--rc-quote-border:#60a5fa;--rc-quote-bg:#262626;--rc-alert-info:#7db9e5;--rc-alert-warning:#da864a;--rc-alert-tip:#54da48;--rc-alert-caution:#e16973;--rc-alert-important:#9966e0;--rc-shadow-top-bar:0 8px 30px #00000073, 0 2px 8px #0000004d;--rc-shadow-modal:0 10px 15px -3px #0006, 0 4px 6px -4px #00000059;--rc-shadow-menu:0 1px 4px #00000040, 0 4px 16px #0006}._7z1aq60{flex-direction:column;gap:20px;padding:12px 0;display:flex}._7z1aq61{align-items:flex-start;gap:10px;display:flex}._7z1aq62{justify-content:flex-end}._7z1aq63{background:var(--rc-bg-tertiary);border:1px solid var(--rc-border);width:28px;height:28px;color:var(--rc-text-tertiary);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex;overflow:hidden}._7z1aq64{width:24px;height:24px;font-size:11px}._7z1aq65{background:var(--rc-text);color:var(--rc-bg);border-color:var(--rc-text)}._7z1aq66{object-fit:cover;width:100%;height:100%}._7z1aq67{background:var(--rc-bg-tertiary);max-width:70%;color:var(--rc-text);padding:10px 14px;font-size:15px;line-height:1.6}._7z1aq68{border-radius:14px 14px 4px}._7z1aq69{border-radius:14px 14px 14px 4px}._7z1aq6a{flex-direction:column;flex:1;min-width:0;display:flex}._7z1aq6b{align-items:center;gap:8px;margin-bottom:8px;display:flex}._7z1aq6c{color:var(--rc-text);font-size:13px;font-weight:500}._7z1aq6d{color:inherit;font-size:15px;line-height:1.7}._7z1aq6e{flex-direction:column;min-width:0;max-width:70%;display:flex}._7z1aq6f{align-items:flex-end}._7z1aq6g{color:var(--rc-text-tertiary);margin-bottom:4px;padding:0 4px;font-size:12px;font-weight:500}._7z1aq6h{color:var(--rc-text-tertiary);padding:8px 0;font-size:13px;font-style:italic}._7z1aq6i{position:relative}._7z1aq6j{background:var(--rc-bg);border:1px solid var(--rc-border);color:var(--rc-text);opacity:0;cursor:pointer;border-radius:6px;align-items:center;gap:4px;padding:4px 10px;font-size:12px;font-weight:500;transition:opacity .12s;display:inline-flex;position:absolute;top:8px;right:8px}._7z1aq6i:hover ._7z1aq6j{opacity:1}._7z1aq6k{align-items:center;gap:4px;display:inline-flex}._7z1aq6l{width:920px;max-width:95vw}._7z1aq6m{background:var(--rc-bg);color:var(--rc-text);border-radius:14px;flex-direction:column;width:920px;max-width:95vw;display:flex;overflow:hidden}._7z1aq6n{border-bottom:1px solid var(--rc-border);color:var(--rc-text);padding:14px 22px;font-size:14px;font-weight:600}._7z1aq6o{height:540px;display:flex}._7z1aq6p{border-right:1px solid var(--rc-border);background:var(--rc-bg-secondary);flex-shrink:0;width:280px;padding:18px 18px 14px;overflow-y:auto}._7z1aq6q{flex:1;min-width:0;padding:14px 22px 18px;overflow-y:auto}._7z1aq6r{text-transform:uppercase;letter-spacing:.08em;color:var(--rc-text-tertiary);margin-bottom:8px;font-size:11px;font-weight:500}._7z1aq6r:not(:first-child){margin-top:22px}._7z1aq6s{flex-direction:column;gap:6px;display:flex}._7z1aq6t{border:1px solid var(--rc-border);cursor:pointer;background:var(--rc-bg);color:var(--rc-text);text-align:left;border-radius:8px;padding:9px 11px}._7z1aq6u{border-color:var(--rc-text)}._7z1aq6v{font-size:13px;font-weight:600}._7z1aq6w{color:var(--rc-text-tertiary);font-size:11px}._7z1aq6x{border:1px solid var(--rc-border);background:var(--rc-bg);border-radius:8px;margin-bottom:8px;padding:9px 10px}._7z1aq6y{align-items:center;gap:6px;margin-bottom:5px;display:flex}._7z1aq6z{text-transform:uppercase;letter-spacing:.08em;background:var(--rc-text);color:var(--rc-bg);border-radius:4px;padding:2px 6px;font-size:9.5px;font-weight:600}._7z1aq610{background:var(--rc-text-tertiary)}._7z1aq611{color:var(--rc-text-tertiary);width:42px;font-size:10.5px}._7z1aq612{border:1px solid var(--rc-border);background:var(--rc-bg);color:var(--rc-text);border-radius:5px;outline:none;flex:1;width:0;padding:4px 7px;font-size:12.5px}._7z1aq612:focus{border-color:color-mix(in srgb, var(--rc-text) 40%, transparent)}._7z1aq613{border:1px solid var(--rc-border);background:var(--rc-bg);border-radius:10px;margin-bottom:10px;overflow:hidden}._7z1aq614{background:var(--rc-bg-secondary);border-bottom:1px solid var(--rc-border);justify-content:space-between;align-items:center;padding:7px 12px;display:flex}._7z1aq615{background:var(--rc-bg);color:var(--rc-text);border:1px solid var(--rc-border);border-radius:5px;padding:3px 6px;font-size:12px}._7z1aq616{gap:2px;display:flex}._7z1aq617{width:100%;color:var(--rc-text);background:var(--rc-bg);resize:vertical;box-sizing:border-box;border:0;outline:none;min-height:70px;padding:10px 12px;font-family:-apple-system,JetBrains Mono,monospace;font-size:13px;line-height:1.55}._7z1aq618{justify-content:center;margin:10px 0 4px;display:flex}._7z1aq619{border:1px dashed var(--rc-border);color:var(--rc-text-tertiary);cursor:pointer;background:0 0;border-radius:6px;padding:6px 14px;font-size:13px}._7z1aq619:hover{color:var(--rc-text);border-color:color-mix(in srgb, var(--rc-text) 40%, transparent)}._7z1aq61a{border-top:1px solid var(--rc-border);background:var(--rc-bg-secondary);justify-content:flex-end;gap:8px;padding:12px 22px;display:flex}._7z1aq61b{border:1px solid var(--rc-border);background:var(--rc-bg);color:var(--rc-text);cursor:pointer;border-radius:6px;padding:6px 12px;font-size:13px}._7z1aq61c{background:var(--rc-text);color:var(--rc-bg);border-color:var(--rc-text)}._7z1aq61d{color:var(--rc-text-tertiary);background:0 0;border-color:#0000}._7z1aq61d:hover{color:var(--rc-text);background:color-mix(in srgb, var(--rc-text) 8%, transparent)}@media (max-width:600px){._7z1aq67,._7z1aq6e{max-width:85%}}
2
2
  /*$vite$:1*/
package/dist/slot.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * RendererConfig slot key for `@haklex/rich-ext-chat`.
3
+ *
4
+ * Override modules should reference this constant instead of the bare string
5
+ * literal so renames stay searchable across the workspace.
6
+ */
7
+ export declare const CHAT_NODE_KEY: "Chat";
8
+ //# sourceMappingURL=slot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot.d.ts","sourceRoot":"","sources":["../src/slot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAG,MAAe,CAAC"}
package/dist/static.d.ts CHANGED
@@ -1,7 +1,3 @@
1
- import { Klass, LexicalNode } from 'lexical';
2
- export { ChatRenderer } from './ChatRenderer';
3
- export type { SerializedChatNode } from './nodes/ChatNode';
4
- export { $createChatNode, $isChatNode, ChatNode } from './nodes/ChatNode';
5
- export type { ChatMessage, ChatParticipant, ChatParticipantKind, ChatRendererProps, ChatVariant, } from './types';
6
- export declare const chatNodes: Array<Klass<LexicalNode>>;
1
+ export * from './node';
2
+ export * from './renderer';
7
3
  //# sourceMappingURL=static.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIlD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EACV,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAc,CAAC"}
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
package/dist/static.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { a as ChatRenderer, n as $isChatNode, r as ChatNode, t as $createChatNode } from "./ChatNode-D4OK247K.js";
2
- //#region src/static.ts
3
- var chatNodes = [ChatNode];
4
- //#endregion
5
- export { $createChatNode, $isChatNode, ChatNode, ChatRenderer, chatNodes };
1
+ import { t as ChatRenderer } from "./ChatRenderer-DYZpPFed.js";
2
+ import { a as CHAT_NODE_KEY, n as $isChatNode, r as ChatNode, t as $createChatNode } from "./ChatNode-DIZ2_6jG.js";
3
+ import { chatNodes } from "./node.mjs";
4
+ import "./renderer.mjs";
5
+ export { $createChatNode, $isChatNode, CHAT_NODE_KEY, ChatNode, ChatRenderer, chatNodes };
package/dist/types.d.ts CHANGED
@@ -1,6 +1,22 @@
1
- import { ChatMessage, ChatParticipant, ChatParticipantKind, ChatRendererProps, ChatVariant } from '@haklex/rich-editor/renderers';
2
1
  import { SerializedLexicalNode } from 'lexical';
3
- export type { ChatMessage, ChatParticipant, ChatParticipantKind, ChatRendererProps, ChatVariant };
2
+ export type ChatVariant = 'user-agent' | 'user-user';
3
+ export type ChatParticipantKind = 'user' | 'agent';
4
+ export interface ChatParticipant {
5
+ avatar?: string;
6
+ id: string;
7
+ kind: ChatParticipantKind;
8
+ name?: string;
9
+ }
10
+ export interface ChatMessage {
11
+ content: string;
12
+ id: string;
13
+ participantId: string;
14
+ }
15
+ export interface ChatRendererProps {
16
+ messages: ChatMessage[];
17
+ participants: ChatParticipant[];
18
+ variant: ChatVariant;
19
+ }
4
20
  export interface SerializedChatNode extends SerializedLexicalNode {
5
21
  messages: ChatMessage[];
6
22
  participants: ChatParticipant[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC;AAElG,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC;CACZ"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;AACrD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC;CACZ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-ext-chat",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Static chat-snapshot node for the haklex rich editor",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,6 +14,18 @@
14
14
  "import": "./dist/index.mjs",
15
15
  "types": "./dist/index.d.ts"
16
16
  },
17
+ "./node": {
18
+ "import": "./dist/node.mjs",
19
+ "types": "./dist/node.d.ts"
20
+ },
21
+ "./renderer": {
22
+ "import": "./dist/renderer.mjs",
23
+ "types": "./dist/renderer.d.ts"
24
+ },
25
+ "./edit": {
26
+ "import": "./dist/edit.mjs",
27
+ "types": "./dist/edit.d.ts"
28
+ },
17
29
  "./static": {
18
30
  "import": "./dist/static.mjs",
19
31
  "types": "./dist/static.d.ts"
@@ -41,15 +53,15 @@
41
53
  "typescript": "^5.9.3",
42
54
  "vite": "^8.0.10",
43
55
  "vite-plugin-dts": "^4.5.4",
44
- "@haklex/rich-editor": "0.4.0"
56
+ "@haklex/rich-editor": "0.5.0"
45
57
  },
46
58
  "peerDependencies": {
47
- "@haklex/rich-editor": ">=0.3.0",
48
- "@haklex/rich-editor-ui": ">=0.3.0",
49
- "@haklex/rich-style-token": ">=0.3.0",
50
59
  "lexical": "^0.44.0",
51
60
  "lucide-react": "^1.0.0",
52
- "react": ">=19"
61
+ "react": ">=19",
62
+ "@haklex/rich-editor": "0.5.0",
63
+ "@haklex/rich-editor-ui": "0.5.0",
64
+ "@haklex/rich-style-token": "0.5.0"
53
65
  },
54
66
  "publishConfig": {
55
67
  "access": "public"
@@ -1,7 +0,0 @@
1
- import { ChatEditNode } from './ChatEditNode';
2
- import { ChatNode } from './ChatNode';
3
- export { ChatEditNode } from './ChatEditNode';
4
- export { ChatNode } from './ChatNode';
5
- export declare const chatNodes: (typeof ChatNode)[];
6
- export declare const chatEditNodes: (typeof ChatEditNode)[];
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nodes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAO,MAAM,SAAS,qBAAa,CAAC;AACpC,eAAO,MAAM,aAAa,yBAAiB,CAAC"}