@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/ChatNode-DIZ2_6jG.js +163 -0
- package/dist/{ChatNode-D4OK247K.js → ChatRenderer-DYZpPFed.js} +1 -154
- package/dist/augment.d.ts +9 -0
- package/dist/augment.d.ts.map +1 -0
- package/dist/edit-C2JFybx6.js +421 -0
- package/dist/edit.d.ts +10 -0
- package/dist/edit.d.ts.map +1 -0
- package/dist/edit.mjs +2 -0
- package/dist/index.d.ts +3 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +6 -421
- package/dist/node.d.ts +6 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.mjs +5 -0
- package/dist/nodes/ChatNode.d.ts.map +1 -1
- package/dist/renderer.d.ts +5 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.mjs +5 -0
- package/dist/rich-ext-chat.css +1 -1
- package/dist/slot.d.ts +8 -0
- package/dist/slot.d.ts.map +1 -0
- package/dist/static.d.ts +2 -6
- package/dist/static.d.ts.map +1 -1
- package/dist/static.mjs +5 -5
- package/dist/types.d.ts +18 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +18 -6
- package/dist/nodes/index.d.ts +0 -7
- package/dist/nodes/index.d.ts.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -1,421 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { $
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
|
|
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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatNode.d.ts","sourceRoot":"","sources":["../../src/nodes/ChatNode.ts"],"names":[],"mappings":"
|
|
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 @@
|
|
|
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"}
|
package/dist/rich-ext-chat.css
CHANGED
|
@@ -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
|
-
|
|
2
|
-
export
|
|
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
|
package/dist/static.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA,
|
|
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 {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
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[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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.
|
|
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.
|
|
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"
|
package/dist/nodes/index.d.ts
DELETED
|
@@ -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"}
|