@aleph-alpha/chat-kit 3.2.0 → 4.0.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/{CkInput.vue_vue_type_script_setup_true_lang-B-4xnH2c.js → CkInput.vue_vue_type_script_setup_true_lang-DJN-nZ2-.js} +391 -113
- package/dist/adapters/responses-api.d.ts +11 -5
- package/dist/adapters/responses-api.d.ts.map +1 -1
- package/dist/adapters/responses-api.js +9 -3
- package/dist/chat-kit.css +14 -8
- package/dist/components/base/CkAgentMessage/CkAgentMessage.stories.d.ts +7 -0
- package/dist/components/base/CkAgentMessage/CkAgentMessage.stories.d.ts.map +1 -1
- package/dist/components/base/CkAgentMessage/types.d.ts +1 -1
- package/dist/components/base/CkCitation/CkCitation.stories.d.ts +47 -0
- package/dist/components/base/CkCitation/CkCitation.stories.d.ts.map +1 -0
- package/dist/components/base/CkCitation/CkCitation.vue.d.ts +15 -0
- package/dist/components/base/CkCitation/CkCitation.vue.d.ts.map +1 -0
- package/dist/components/base/CkCitation/index.d.ts +3 -0
- package/dist/components/base/CkCitation/index.d.ts.map +1 -0
- package/dist/components/base/CkCitation/types.d.ts +79 -0
- package/dist/components/base/CkCitation/types.d.ts.map +1 -0
- package/dist/components/base/CkCitationCard/CkCitationCard.stories.d.ts +51 -0
- package/dist/components/base/CkCitationCard/CkCitationCard.stories.d.ts.map +1 -0
- package/dist/components/base/CkCitationCard/CkCitationCard.vue.d.ts +13 -0
- package/dist/components/base/CkCitationCard/CkCitationCard.vue.d.ts.map +1 -0
- package/dist/components/base/CkCitationCard/index.d.ts +3 -0
- package/dist/components/base/CkCitationCard/index.d.ts.map +1 -0
- package/dist/components/base/CkCitationCard/types.d.ts +51 -0
- package/dist/components/base/CkCitationCard/types.d.ts.map +1 -0
- package/dist/components/base/{CkCopyMessageActionButton/CkCopyMessageActionButton.stories.d.ts → CkCopyMessageButton/CkCopyMessageButton.stories.d.ts} +3 -3
- package/dist/components/base/CkCopyMessageButton/CkCopyMessageButton.stories.d.ts.map +1 -0
- package/dist/components/base/{CkCopyMessageActionButton/CkCopyMessageActionButton.vue.d.ts → CkCopyMessageButton/CkCopyMessageButton.vue.d.ts} +4 -4
- package/dist/components/base/CkCopyMessageButton/CkCopyMessageButton.vue.d.ts.map +1 -0
- package/dist/components/base/CkCopyMessageButton/index.d.ts +3 -0
- package/dist/components/base/CkCopyMessageButton/index.d.ts.map +1 -0
- package/dist/components/base/{CkCopyMessageActionButton → CkCopyMessageButton}/types.d.ts +3 -3
- package/dist/components/base/CkCopyMessageButton/types.d.ts.map +1 -0
- package/dist/components/base/CkDropZoneOverlay/CkDropZoneOverlay.vue.d.ts +1 -1
- package/dist/components/base/CkFeedbackButton/types.d.ts +1 -1
- package/dist/components/base/CkFeedbackDialog/CkFeedbackDialog.vue.d.ts +2 -2
- package/dist/components/base/CkFeedbackDialog/types.d.ts +1 -1
- package/dist/components/base/CkFileItemsList/CkFileItemsList.vue.d.ts +1 -1
- package/dist/components/base/CkMarkdownRenderer/CkMarkdownRenderer.stories.d.ts +15 -0
- package/dist/components/base/CkMarkdownRenderer/CkMarkdownRenderer.stories.d.ts.map +1 -1
- package/dist/components/base/CkMarkdownRenderer/CkMarkdownRenderer.vue.d.ts +16 -2
- package/dist/components/base/CkMarkdownRenderer/CkMarkdownRenderer.vue.d.ts.map +1 -1
- package/dist/components/base/CkMarkdownRenderer/index.d.ts +1 -1
- package/dist/components/base/CkMarkdownRenderer/index.d.ts.map +1 -1
- package/dist/components/base/CkMarkdownRenderer/types.d.ts +25 -0
- package/dist/components/base/CkMarkdownRenderer/types.d.ts.map +1 -1
- package/dist/components/base/CkMarkdownRenderer/useCitationRendering.d.ts +17 -0
- package/dist/components/base/CkMarkdownRenderer/useCitationRendering.d.ts.map +1 -0
- package/dist/components/base/{CkMessageActionButton/CkMessageActionButton.stories.d.ts → CkMessageButton/CkMessageButton.stories.d.ts} +3 -3
- package/dist/components/base/CkMessageButton/CkMessageButton.stories.d.ts.map +1 -0
- package/dist/components/base/{CkMessageActionButton/CkMessageActionButton.vue.d.ts → CkMessageButton/CkMessageButton.vue.d.ts} +3 -3
- package/dist/components/base/CkMessageButton/CkMessageButton.vue.d.ts.map +1 -0
- package/dist/components/base/CkMessageButton/index.d.ts +3 -0
- package/dist/components/base/CkMessageButton/index.d.ts.map +1 -0
- package/dist/components/base/{CkMessageActionButton → CkMessageButton}/types.d.ts +2 -2
- package/dist/components/base/CkMessageButton/types.d.ts.map +1 -0
- package/dist/components/base/CkPromptSendButton/CkPromptSendButton.vue.d.ts +1 -1
- package/dist/components/base/CkRegenerateMessageButton/CkRegenerateMessageButton.stories.d.ts +16 -0
- package/dist/components/base/CkRegenerateMessageButton/CkRegenerateMessageButton.stories.d.ts.map +1 -0
- package/dist/components/base/CkRegenerateMessageButton/CkRegenerateMessageButton.vue.d.ts +12 -0
- package/dist/components/base/CkRegenerateMessageButton/CkRegenerateMessageButton.vue.d.ts.map +1 -0
- package/dist/components/base/CkRegenerateMessageButton/index.d.ts +3 -0
- package/dist/components/base/{CkCopyMessageActionButton → CkRegenerateMessageButton}/index.d.ts.map +1 -1
- package/dist/components/base/CkRegenerateMessageButton/types.d.ts +27 -0
- package/dist/components/base/CkRegenerateMessageButton/types.d.ts.map +1 -0
- package/dist/components/base/index.d.ts +8 -3
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/composed/CkConversation/CkConversation.stories.d.ts +1 -1
- package/dist/components/composed/CkConversation/types.d.ts +1 -1
- package/dist/components/composed/CkInput/CkInput.vue.d.ts +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +26 -23
- package/dist/composables/fileUpload/useFileUpload.d.ts.map +1 -1
- package/dist/composables/fileUpload/useFileUploadWrapper.d.ts.map +1 -1
- package/dist/composables/index.js +1 -1
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +4 -3
- package/dist/handlers/useChatKitLabels.d.ts +13 -0
- package/dist/handlers/useChatKitLabels.d.ts.map +1 -1
- package/dist/handlers/useMarkdownParser.d.ts.map +1 -1
- package/dist/handlers/useMessageHandler.d.ts +37 -0
- package/dist/handlers/useMessageHandler.d.ts.map +1 -1
- package/dist/helpers/conversationTree.d.ts +15 -0
- package/dist/helpers/conversationTree.d.ts.map +1 -1
- package/dist/helpers/unified/remarkCitations.d.ts +17 -0
- package/dist/helpers/unified/remarkCitations.d.ts.map +1 -0
- package/dist/{index-DAmWGYNH.js → index-CyrVnbS9.js} +86 -71
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -27
- package/dist/{useChatKitLabels-D5gNv8se.js → useChatKitLabels-zMFV7aEz.js} +31 -3
- package/dist/{useMessageHandler-CMdy-lm0.js → useMessageHandler-N50Yj-NU.js} +45 -7
- package/package.json +5 -3
- package/src/adapters/responses-api.spec.ts +52 -5
- package/src/adapters/responses-api.ts +26 -7
- package/src/components/base/CkAgentMessage/CkAgentMessage.stories.ts +112 -0
- package/src/components/base/CkAgentMessage/types.ts +1 -1
- package/src/components/base/CkCitation/CkCitation.spec.ts +79 -0
- package/src/components/base/CkCitation/CkCitation.stories.ts +136 -0
- package/src/components/base/CkCitation/CkCitation.vue +145 -0
- package/src/components/base/CkCitation/index.ts +2 -0
- package/src/components/base/CkCitation/types.ts +80 -0
- package/src/components/base/CkCitationCard/CkCitationCard.spec.ts +77 -0
- package/src/components/base/CkCitationCard/CkCitationCard.stories.ts +144 -0
- package/src/components/base/CkCitationCard/CkCitationCard.vue +76 -0
- package/src/components/base/CkCitationCard/index.ts +2 -0
- package/src/components/base/CkCitationCard/types.ts +51 -0
- package/src/components/base/{CkCopyMessageActionButton/CkCopyMessageActionButton.spec.ts → CkCopyMessageButton/CkCopyMessageButton.spec.ts} +6 -6
- package/src/components/base/{CkCopyMessageActionButton/CkCopyMessageActionButton.stories.ts → CkCopyMessageButton/CkCopyMessageButton.stories.ts} +8 -8
- package/src/components/base/{CkCopyMessageActionButton/CkCopyMessageActionButton.vue → CkCopyMessageButton/CkCopyMessageButton.vue} +6 -6
- package/src/components/base/CkCopyMessageButton/index.ts +2 -0
- package/src/components/base/{CkCopyMessageActionButton → CkCopyMessageButton}/types.ts +3 -3
- package/src/components/base/CkFeedbackButton/CkFeedbackButton.vue +5 -5
- package/src/components/base/CkFeedbackButton/types.ts +1 -1
- package/src/components/base/CkFeedbackDialog/types.ts +1 -1
- package/src/components/base/CkMarkdownRenderer/CkMarkdownRenderer.spec.ts +124 -0
- package/src/components/base/CkMarkdownRenderer/CkMarkdownRenderer.stories.ts +118 -0
- package/src/components/base/CkMarkdownRenderer/CkMarkdownRenderer.vue +70 -28
- package/src/components/base/CkMarkdownRenderer/index.ts +1 -0
- package/src/components/base/CkMarkdownRenderer/types.ts +26 -0
- package/src/components/base/CkMarkdownRenderer/useCitationRendering.spec.ts +94 -0
- package/src/components/base/CkMarkdownRenderer/useCitationRendering.ts +52 -0
- package/src/components/base/{CkMessageActionButton/CkMessageActionButton.spec.ts → CkMessageButton/CkMessageButton.spec.ts} +6 -6
- package/src/components/base/{CkMessageActionButton/CkMessageActionButton.stories.ts → CkMessageButton/CkMessageButton.stories.ts} +10 -10
- package/src/components/base/{CkMessageActionButton/CkMessageActionButton.vue → CkMessageButton/CkMessageButton.vue} +3 -3
- package/src/components/base/CkMessageButton/index.ts +2 -0
- package/src/components/base/{CkMessageActionButton → CkMessageButton}/types.ts +2 -2
- package/src/components/base/CkRegenerateMessageButton/CkRegenerateMessageButton.spec.ts +49 -0
- package/src/components/base/CkRegenerateMessageButton/CkRegenerateMessageButton.stories.ts +63 -0
- package/src/components/base/CkRegenerateMessageButton/CkRegenerateMessageButton.vue +43 -0
- package/src/components/base/CkRegenerateMessageButton/index.ts +2 -0
- package/src/components/base/CkRegenerateMessageButton/types.ts +27 -0
- package/src/components/base/index.ts +15 -2
- package/src/components/composed/CkConversation/CkConversation.stories.ts +6 -6
- package/src/components/composed/CkConversation/CkConversation.vue +2 -2
- package/src/components/composed/CkConversation/types.ts +1 -1
- package/src/components/index.ts +11 -2
- package/src/composables/fileUpload/useFileUpload.spec.ts +2 -61
- package/src/composables/fileUpload/useFileUpload.ts +2 -9
- package/src/composables/fileUpload/useFileUploadWrapper.spec.ts +195 -14
- package/src/composables/fileUpload/useFileUploadWrapper.ts +114 -81
- package/src/handlers/index.ts +2 -0
- package/src/handlers/useChatKitLabels.spec.ts +1 -0
- package/src/handlers/useChatKitLabels.ts +16 -0
- package/src/handlers/useMarkdownParser.ts +5 -2
- package/src/handlers/useMessageHandler.spec.ts +79 -0
- package/src/handlers/useMessageHandler.ts +50 -2
- package/src/helpers/conversationTree.spec.ts +120 -0
- package/src/helpers/conversationTree.ts +57 -8
- package/src/helpers/unified/remarkCitations.spec.ts +112 -0
- package/src/helpers/unified/remarkCitations.ts +55 -0
- package/src/index.ts +11 -2
- package/dist/components/base/CkCopyMessageActionButton/CkCopyMessageActionButton.stories.d.ts.map +0 -1
- package/dist/components/base/CkCopyMessageActionButton/CkCopyMessageActionButton.vue.d.ts.map +0 -1
- package/dist/components/base/CkCopyMessageActionButton/index.d.ts +0 -3
- package/dist/components/base/CkCopyMessageActionButton/types.d.ts.map +0 -1
- package/dist/components/base/CkMessageActionButton/CkMessageActionButton.stories.d.ts.map +0 -1
- package/dist/components/base/CkMessageActionButton/CkMessageActionButton.vue.d.ts.map +0 -1
- package/dist/components/base/CkMessageActionButton/index.d.ts +0 -3
- package/dist/components/base/CkMessageActionButton/index.d.ts.map +0 -1
- package/dist/components/base/CkMessageActionButton/types.d.ts.map +0 -1
- package/src/components/base/CkCopyMessageActionButton/index.ts +0 -2
- package/src/components/base/CkMessageActionButton/index.ts +0 -2
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
addNode as treeAddNode,
|
|
4
4
|
createEmptyTree,
|
|
5
5
|
cutBranchAfter as treeCutBranchAfter,
|
|
6
|
+
cutBranchAt as treeCutBranchAt,
|
|
6
7
|
getLinearPath,
|
|
7
8
|
navigate as treeNavigate,
|
|
8
9
|
updateNode,
|
|
@@ -30,6 +31,19 @@ export const useMessageHandler = () => {
|
|
|
30
31
|
return list.length > 0 ? list[list.length - 1].id : null;
|
|
31
32
|
});
|
|
32
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Resolve the parent a new node should hang off. When an explicit
|
|
36
|
+
* `parentId` is given it must reference an existing node; otherwise the
|
|
37
|
+
* current leaf is used so messages append to the active branch.
|
|
38
|
+
*/
|
|
39
|
+
function resolveParentId(parentId?: string): string | null {
|
|
40
|
+
if (parentId === undefined) return currentLeafId.value;
|
|
41
|
+
if (!tree.nodes[parentId]) {
|
|
42
|
+
throw new Error(`Unknown parent message id: ${parentId}`);
|
|
43
|
+
}
|
|
44
|
+
return parentId;
|
|
45
|
+
}
|
|
46
|
+
|
|
33
47
|
function setCurrentUserMessage(text: string) {
|
|
34
48
|
currentUserMessage.value = text;
|
|
35
49
|
}
|
|
@@ -38,20 +52,31 @@ export const useMessageHandler = () => {
|
|
|
38
52
|
currentUserMessage.value = '';
|
|
39
53
|
}
|
|
40
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Commit the pending user message as a new node.
|
|
57
|
+
*
|
|
58
|
+
* By default the node is appended to the current leaf. Pass `parentId` to
|
|
59
|
+
* branch off an arbitrary message instead: the new node becomes a sibling
|
|
60
|
+
* of that parent's existing children, the parent's `childrenIds` gains the
|
|
61
|
+
* new id, and the branch is made active.
|
|
62
|
+
*/
|
|
41
63
|
function commitUserMessage(opts?: {
|
|
42
64
|
metadata?: MessageMetadata;
|
|
65
|
+
parentId?: string;
|
|
43
66
|
}): BaseMessage {
|
|
44
67
|
const id = generateId();
|
|
45
68
|
const text = currentUserMessage.value.trim();
|
|
46
69
|
if (!text) throw new Error('No message');
|
|
47
70
|
|
|
71
|
+
const parentId = resolveParentId(opts?.parentId);
|
|
72
|
+
|
|
48
73
|
const content: MessageContent[] = [
|
|
49
74
|
{ type: 'text', id: generateId(), text, status: 'completed' },
|
|
50
75
|
];
|
|
51
76
|
|
|
52
77
|
const node: TreeMessage = {
|
|
53
78
|
id,
|
|
54
|
-
parentId
|
|
79
|
+
parentId,
|
|
55
80
|
childrenIds: [],
|
|
56
81
|
activeChildIndex: 0,
|
|
57
82
|
role: 'user',
|
|
@@ -75,12 +100,20 @@ export const useMessageHandler = () => {
|
|
|
75
100
|
return base;
|
|
76
101
|
}
|
|
77
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Upsert a message by id. When the node does not yet exist it is created;
|
|
105
|
+
* pass `parentId` to branch the new node off an arbitrary message instead
|
|
106
|
+
* of the current leaf (the parent's `childrenIds` is updated and the new
|
|
107
|
+
* branch is made active). `parentId` is ignored when the node already
|
|
108
|
+
* exists.
|
|
109
|
+
*/
|
|
78
110
|
function updateMessage(message: {
|
|
79
111
|
id: string;
|
|
80
112
|
content: MessageContent[];
|
|
81
113
|
role: MessageRole;
|
|
82
114
|
status: MessageStatus;
|
|
83
115
|
metadata?: MessageMetadata;
|
|
116
|
+
parentId?: string;
|
|
84
117
|
}) {
|
|
85
118
|
const existing = tree.nodes[message.id];
|
|
86
119
|
|
|
@@ -96,7 +129,7 @@ export const useMessageHandler = () => {
|
|
|
96
129
|
} else {
|
|
97
130
|
const node: TreeMessage = {
|
|
98
131
|
id: message.id,
|
|
99
|
-
parentId:
|
|
132
|
+
parentId: resolveParentId(message.parentId),
|
|
100
133
|
childrenIds: [],
|
|
101
134
|
activeChildIndex: 0,
|
|
102
135
|
role: message.role,
|
|
@@ -159,6 +192,19 @@ export const useMessageHandler = () => {
|
|
|
159
192
|
treeCutBranchAfter(tree, messageId);
|
|
160
193
|
}
|
|
161
194
|
|
|
195
|
+
/**
|
|
196
|
+
* Drop the message with `messageId` and its whole subtree, leaving sibling
|
|
197
|
+
* branches intact (the parent's active branch is clamped to a survivor).
|
|
198
|
+
* Use to discard one answer among several without cropping the others.
|
|
199
|
+
*/
|
|
200
|
+
function cutBranchAt(messageId: string) {
|
|
201
|
+
treeCutBranchAt(tree, messageId);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function getTree() {
|
|
205
|
+
return readonly(tree);
|
|
206
|
+
}
|
|
207
|
+
|
|
162
208
|
return {
|
|
163
209
|
messages: messages as Ref<BaseMessage[]>,
|
|
164
210
|
currentUserMessage: readonly(currentUserMessage),
|
|
@@ -173,5 +219,7 @@ export const useMessageHandler = () => {
|
|
|
173
219
|
setTree,
|
|
174
220
|
navigate,
|
|
175
221
|
cutBranchAfter,
|
|
222
|
+
cutBranchAt,
|
|
223
|
+
getTree,
|
|
176
224
|
};
|
|
177
225
|
};
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
addNode,
|
|
9
9
|
createEmptyTree,
|
|
10
10
|
cutBranchAfter,
|
|
11
|
+
cutBranchAt,
|
|
11
12
|
getLinearPath,
|
|
12
13
|
navigate,
|
|
13
14
|
updateNode,
|
|
@@ -519,6 +520,125 @@ describe('cutBranchAfter', () => {
|
|
|
519
520
|
});
|
|
520
521
|
});
|
|
521
522
|
|
|
523
|
+
describe('cutBranchAt', () => {
|
|
524
|
+
it('removes the target node and its entire subtree', () => {
|
|
525
|
+
const tree = makeBranchingTree();
|
|
526
|
+
|
|
527
|
+
cutBranchAt(tree, 'a1');
|
|
528
|
+
|
|
529
|
+
expect(tree.nodes.a1).toBeUndefined();
|
|
530
|
+
expect(tree.nodes.u2).toBeUndefined();
|
|
531
|
+
expect(tree.nodes.a2).toBeUndefined();
|
|
532
|
+
expect(tree.nodes.a3).toBeUndefined();
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
it('leaves sibling branches intact and unlinks from the parent', () => {
|
|
536
|
+
const tree = makeBranchingTree();
|
|
537
|
+
|
|
538
|
+
cutBranchAt(tree, 'a1');
|
|
539
|
+
|
|
540
|
+
expect(tree.nodes.a1b).toBeDefined();
|
|
541
|
+
expect(tree.nodes.u3).toBeDefined();
|
|
542
|
+
expect(tree.nodes.u1.childrenIds).toEqual(['a1b']);
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
it('clamps the parent activeChildIndex to a surviving sibling', () => {
|
|
546
|
+
const tree = makeBranchingTree();
|
|
547
|
+
// u2 → [a2, a3] with a3 active; removing a3 must not leave a dangling index.
|
|
548
|
+
tree.nodes.u2.activeChildIndex = 1;
|
|
549
|
+
|
|
550
|
+
cutBranchAt(tree, 'a3');
|
|
551
|
+
|
|
552
|
+
expect(tree.nodes.u2.childrenIds).toEqual(['a2']);
|
|
553
|
+
expect(tree.nodes.u2.activeChildIndex).toBe(0);
|
|
554
|
+
expect(getLinearPath(tree).map((m) => m.id)).toEqual([
|
|
555
|
+
'u1',
|
|
556
|
+
'a1',
|
|
557
|
+
'u2',
|
|
558
|
+
'a2',
|
|
559
|
+
]);
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
// Parent with three sibling branches; needs ≥3 so removing an earlier
|
|
563
|
+
// sibling leaves the active index in-bounds (the clamp alone wouldn't catch
|
|
564
|
+
// a stale index, only an out-of-range one).
|
|
565
|
+
function makeThreeSiblingTree(): ConversationTree {
|
|
566
|
+
return makeTree(
|
|
567
|
+
{
|
|
568
|
+
p: makeTreeMessage({ id: 'p', role: 'user', content: [text('Q')] }),
|
|
569
|
+
cA: makeTreeMessage({
|
|
570
|
+
id: 'cA',
|
|
571
|
+
parentId: 'p',
|
|
572
|
+
role: 'assistant',
|
|
573
|
+
content: [text('A')],
|
|
574
|
+
}),
|
|
575
|
+
cB: makeTreeMessage({
|
|
576
|
+
id: 'cB',
|
|
577
|
+
parentId: 'p',
|
|
578
|
+
role: 'assistant',
|
|
579
|
+
content: [text('B')],
|
|
580
|
+
}),
|
|
581
|
+
cC: makeTreeMessage({
|
|
582
|
+
id: 'cC',
|
|
583
|
+
parentId: 'p',
|
|
584
|
+
role: 'assistant',
|
|
585
|
+
content: [text('C')],
|
|
586
|
+
}),
|
|
587
|
+
},
|
|
588
|
+
'p',
|
|
589
|
+
);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
it('keeps the active branch on the same child when an earlier sibling is removed', () => {
|
|
593
|
+
const tree = makeThreeSiblingTree();
|
|
594
|
+
tree.nodes.p.activeChildIndex = 1; // cB active
|
|
595
|
+
// Removing cA shifts cB/cC down one slot; the active pointer must follow.
|
|
596
|
+
cutBranchAt(tree, 'cA');
|
|
597
|
+
|
|
598
|
+
expect(tree.nodes.p.childrenIds).toEqual(['cB', 'cC']);
|
|
599
|
+
expect(tree.nodes.p.activeChildIndex).toBe(0);
|
|
600
|
+
expect(getLinearPath(tree).map((m) => m.id)).toEqual(['p', 'cB']);
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
it('leaves the active index unchanged when a later sibling is removed', () => {
|
|
604
|
+
const tree = makeThreeSiblingTree();
|
|
605
|
+
tree.nodes.p.activeChildIndex = 0; // cA active
|
|
606
|
+
cutBranchAt(tree, 'cC');
|
|
607
|
+
|
|
608
|
+
expect(tree.nodes.p.childrenIds).toEqual(['cA', 'cB']);
|
|
609
|
+
expect(tree.nodes.p.activeChildIndex).toBe(0);
|
|
610
|
+
expect(getLinearPath(tree).map((m) => m.id)).toEqual(['p', 'cA']);
|
|
611
|
+
});
|
|
612
|
+
|
|
613
|
+
it('falls through to the next sibling when the active child itself is removed', () => {
|
|
614
|
+
const tree = makeThreeSiblingTree();
|
|
615
|
+
tree.nodes.p.activeChildIndex = 0; // cA active
|
|
616
|
+
cutBranchAt(tree, 'cA');
|
|
617
|
+
|
|
618
|
+
expect(tree.nodes.p.childrenIds).toEqual(['cB', 'cC']);
|
|
619
|
+
expect(tree.nodes.p.activeChildIndex).toBe(0);
|
|
620
|
+
expect(getLinearPath(tree).map((m) => m.id)).toEqual(['p', 'cB']);
|
|
621
|
+
});
|
|
622
|
+
|
|
623
|
+
it('clears the tree when the root is removed', () => {
|
|
624
|
+
const tree = makeBranchingTree();
|
|
625
|
+
|
|
626
|
+
cutBranchAt(tree, 'u1');
|
|
627
|
+
|
|
628
|
+
expect(tree.nodes).toEqual({});
|
|
629
|
+
expect(tree.rootId).toBeNull();
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
it('is a no-op for a nonexistent id', () => {
|
|
633
|
+
const tree = makeBranchingTree();
|
|
634
|
+
const before = Object.keys(tree.nodes).sort();
|
|
635
|
+
|
|
636
|
+
cutBranchAt(tree, 'nonexistent');
|
|
637
|
+
|
|
638
|
+
expect(Object.keys(tree.nodes).sort()).toEqual(before);
|
|
639
|
+
});
|
|
640
|
+
});
|
|
641
|
+
|
|
522
642
|
describe('integration: full branching scenario', () => {
|
|
523
643
|
it('simulates send → regenerate → navigate workflow', () => {
|
|
524
644
|
const tree = createEmptyTree();
|
|
@@ -105,6 +105,21 @@ export function updateNodeId(
|
|
|
105
105
|
if (tree.rootId === oldId) tree.rootId = newId;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Delete the given node ids and every descendant beneath them from
|
|
110
|
+
* `tree.nodes`. Does not touch parent links — callers fix those up.
|
|
111
|
+
*/
|
|
112
|
+
function deleteSubtrees(tree: ConversationTree, ids: readonly string[]): void {
|
|
113
|
+
const stack: string[] = [...ids];
|
|
114
|
+
while (stack.length > 0) {
|
|
115
|
+
const currentId = stack.pop() as string;
|
|
116
|
+
const current = tree.nodes[currentId];
|
|
117
|
+
if (!current) continue;
|
|
118
|
+
stack.push(...current.childrenIds);
|
|
119
|
+
delete tree.nodes[currentId];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
108
123
|
/**
|
|
109
124
|
* Remove every descendant of the node with the given id, keeping the node
|
|
110
125
|
* itself intact. The node's `childrenIds` is cleared and `activeChildIndex`
|
|
@@ -117,19 +132,53 @@ export function cutBranchAfter(tree: ConversationTree, id: string): void {
|
|
|
117
132
|
const node = tree.nodes[id];
|
|
118
133
|
if (!node) return;
|
|
119
134
|
|
|
120
|
-
|
|
121
|
-
while (stack.length > 0) {
|
|
122
|
-
const currentId = stack.pop() as string;
|
|
123
|
-
const current = tree.nodes[currentId];
|
|
124
|
-
if (!current) continue;
|
|
125
|
-
stack.push(...current.childrenIds);
|
|
126
|
-
delete tree.nodes[currentId];
|
|
127
|
-
}
|
|
135
|
+
deleteSubtrees(tree, node.childrenIds);
|
|
128
136
|
|
|
129
137
|
node.childrenIds = [];
|
|
130
138
|
node.activeChildIndex = 0;
|
|
131
139
|
}
|
|
132
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Remove the node with the given id *and* its entire subtree, then unlink it
|
|
143
|
+
* from its parent. Unlike {@link cutBranchAfter} (which keeps the target and
|
|
144
|
+
* drops only its descendants), this drops the target branch as a whole while
|
|
145
|
+
* leaving sibling branches intact — use it to discard one answer among several
|
|
146
|
+
* (e.g. an interrupted regenerate) without cropping the others.
|
|
147
|
+
*
|
|
148
|
+
* The parent's `activeChildIndex` is clamped to a remaining sibling so the
|
|
149
|
+
* active path stays valid. Removing the root clears the tree.
|
|
150
|
+
*
|
|
151
|
+
* Prefer {@link cutBranchAfter} when it fits the case: unlinking here scans
|
|
152
|
+
* and splices the parent's `childrenIds` (O(siblings)), whereas
|
|
153
|
+
* `cutBranchAfter` only clears the target's own `childrenIds`.
|
|
154
|
+
*/
|
|
155
|
+
export function cutBranchAt(tree: ConversationTree, id: string): void {
|
|
156
|
+
const node = tree.nodes[id];
|
|
157
|
+
if (!node) return;
|
|
158
|
+
|
|
159
|
+
deleteSubtrees(tree, [id]);
|
|
160
|
+
|
|
161
|
+
if (node.parentId === null) {
|
|
162
|
+
if (tree.rootId === id) tree.rootId = null;
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const parent = tree.nodes[node.parentId];
|
|
167
|
+
if (!parent) return;
|
|
168
|
+
|
|
169
|
+
const idx = parent.childrenIds.indexOf(id);
|
|
170
|
+
if (idx !== -1) {
|
|
171
|
+
parent.childrenIds.splice(idx, 1);
|
|
172
|
+
// Removing a sibling positioned before the active one shifts every later
|
|
173
|
+
// child's index down by one; decrement so the active branch keeps pointing
|
|
174
|
+
// at the same child rather than silently jumping to its neighbour.
|
|
175
|
+
if (idx < parent.activeChildIndex) parent.activeChildIndex -= 1;
|
|
176
|
+
}
|
|
177
|
+
if (parent.activeChildIndex >= parent.childrenIds.length) {
|
|
178
|
+
parent.activeChildIndex = Math.max(0, parent.childrenIds.length - 1);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
133
182
|
/**
|
|
134
183
|
* Navigate to a different branch by updating the parent's activeChildIndex
|
|
135
184
|
* to point at the target sibling.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { remarkCitations } from './remarkCitations';
|
|
2
|
+
|
|
3
|
+
// The plugin is a pure mdast transformer, so we can exercise it directly on a
|
|
4
|
+
// hand-built tree without spinning up the full unified/remark parser.
|
|
5
|
+
interface MdNode {
|
|
6
|
+
type: string;
|
|
7
|
+
value?: string;
|
|
8
|
+
children?: MdNode[];
|
|
9
|
+
data?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function rootWithText(text: string): MdNode {
|
|
13
|
+
return { type: 'root', children: [{ type: 'text', value: text }] };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// `remarkCitations` is typed as a unified `Plugin` (it expects a `Processor`
|
|
17
|
+
// `this`). In these unit tests we call it as a plain factory, so cast away the
|
|
18
|
+
// `this` context to invoke it directly on a hand-built tree.
|
|
19
|
+
const makeTransformer = remarkCitations as unknown as (options: {
|
|
20
|
+
indices?: ReadonlySet<number>;
|
|
21
|
+
}) => (tree: MdNode) => void;
|
|
22
|
+
|
|
23
|
+
function run(text: string, indices?: ReadonlySet<number>): MdNode[] {
|
|
24
|
+
const tree = rootWithText(text);
|
|
25
|
+
makeTransformer({ indices })(tree);
|
|
26
|
+
return tree.children!;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe('remarkCitations', () => {
|
|
30
|
+
it('replaces a known [n] marker with a citation placeholder node', () => {
|
|
31
|
+
const out = run('see this [1] here', new Set([1]));
|
|
32
|
+
expect(out.map((n) => n.type)).toEqual([
|
|
33
|
+
'text',
|
|
34
|
+
'citationReference',
|
|
35
|
+
'text',
|
|
36
|
+
]);
|
|
37
|
+
expect(out[0]).toEqual({ type: 'text', value: 'see this ' });
|
|
38
|
+
expect(out[2]).toEqual({ type: 'text', value: ' here' });
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('emits a span placeholder with the index as a data attribute', () => {
|
|
42
|
+
const [citation] = run('[1]', new Set([1]));
|
|
43
|
+
expect(citation.data).toEqual({
|
|
44
|
+
hName: 'span',
|
|
45
|
+
hProperties: { 'data-citation-index': 1 },
|
|
46
|
+
hChildren: [{ type: 'text', value: '1' }],
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('handles adjacent markers', () => {
|
|
51
|
+
const out = run('claim [1][2] end', new Set([1, 2]));
|
|
52
|
+
expect(out.map((n) => n.type)).toEqual([
|
|
53
|
+
'text',
|
|
54
|
+
'citationReference',
|
|
55
|
+
'citationReference',
|
|
56
|
+
'text',
|
|
57
|
+
]);
|
|
58
|
+
expect(
|
|
59
|
+
(out[1].data!.hProperties as Record<string, number>)[
|
|
60
|
+
'data-citation-index'
|
|
61
|
+
],
|
|
62
|
+
).toBe(1);
|
|
63
|
+
expect(
|
|
64
|
+
(out[2].data!.hProperties as Record<string, number>)[
|
|
65
|
+
'data-citation-index'
|
|
66
|
+
],
|
|
67
|
+
).toBe(2);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('leaves unsupported markers (no matching source) as literal text', () => {
|
|
71
|
+
const out = run('real [1] but [9] is not', new Set([1]));
|
|
72
|
+
expect(out.map((n) => n.type)).toEqual([
|
|
73
|
+
'text',
|
|
74
|
+
'citationReference',
|
|
75
|
+
'text',
|
|
76
|
+
]);
|
|
77
|
+
// The [9] survives verbatim in the trailing text node.
|
|
78
|
+
expect(out[2].value).toBe(' but [9] is not');
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('treats every [n] as a citation when no index set is given', () => {
|
|
82
|
+
const out = run('a [1] b [2]');
|
|
83
|
+
expect(out.filter((n) => n.type === 'citationReference')).toHaveLength(2);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('never converts [0] — citations are 1-based', () => {
|
|
87
|
+
const out = run('the value arr[0] here'); // no allow-list: every [n] except 0
|
|
88
|
+
expect(out.some((n) => n.type === 'citationReference')).toBe(false);
|
|
89
|
+
expect(out.map((n) => n.value ?? '').join('')).toContain('[0]');
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('leaves text without markers untouched', () => {
|
|
93
|
+
const out = run('no citations here', new Set([1]));
|
|
94
|
+
expect(out).toEqual([{ type: 'text', value: 'no citations here' }]);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('does not descend into code/inlineCode value nodes', () => {
|
|
98
|
+
const tree: MdNode = {
|
|
99
|
+
type: 'root',
|
|
100
|
+
children: [
|
|
101
|
+
{ type: 'inlineCode', value: 'arr[1]' },
|
|
102
|
+
{ type: 'text', value: ' and [1]' },
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
makeTransformer({ indices: new Set([1]) })(tree);
|
|
106
|
+
// inlineCode is untouched; only the text node's [1] becomes a citation.
|
|
107
|
+
expect(tree.children![0]).toEqual({ type: 'inlineCode', value: 'arr[1]' });
|
|
108
|
+
expect(tree.children!.some((n) => n.type === 'citationReference')).toBe(
|
|
109
|
+
true,
|
|
110
|
+
);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Plugin } from 'unified';
|
|
2
|
+
import type { PhrasingContent } from 'mdast';
|
|
3
|
+
import { findAndReplace } from 'mdast-util-find-and-replace';
|
|
4
|
+
|
|
5
|
+
export interface RemarkCitationsOptions {
|
|
6
|
+
/**
|
|
7
|
+
* When provided, only `[n]` markers whose number is in this set are turned
|
|
8
|
+
* into citation placeholders; any other `[n]` is left as literal text
|
|
9
|
+
* (an "unsupported" marker with no backing source). When omitted, every
|
|
10
|
+
* `[n]` is treated as a citation.
|
|
11
|
+
*/
|
|
12
|
+
indices?: ReadonlySet<number>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Matches a bare `[n]` reference, e.g. `[1]`. Because this runs on the parsed
|
|
16
|
+
// mdast tree (via `findAndReplace`, which only visits `text` nodes), `[n]`
|
|
17
|
+
// inside code spans/blocks and bracketed links never reaches it — only a
|
|
18
|
+
// literal `[n]` typed in prose does.
|
|
19
|
+
const CITATION_RE = /\[(\d+)\]/g;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Replaces inline `[n]` citation references in the parsed markdown with a
|
|
23
|
+
* placeholder element (`<span data-citation-index="n">n</span>`) that survives
|
|
24
|
+
* stringify + sanitisation (`data-*` attributes are allowed by default).
|
|
25
|
+
*/
|
|
26
|
+
// The tree type is left as unified's default (a unist `Node`) so the public
|
|
27
|
+
// type signature — and therefore the published `.d.ts` — doesn't depend on
|
|
28
|
+
// `mdast` types; the cast below keeps the internal `findAndReplace` call typed.
|
|
29
|
+
export const remarkCitations: Plugin<[RemarkCitationsOptions?]> = (
|
|
30
|
+
options = {},
|
|
31
|
+
) => {
|
|
32
|
+
const { indices } = options;
|
|
33
|
+
|
|
34
|
+
return (tree) => {
|
|
35
|
+
findAndReplace(tree as Parameters<typeof findAndReplace>[0], [
|
|
36
|
+
CITATION_RE,
|
|
37
|
+
(_match: string, digits: string) => {
|
|
38
|
+
const index = Number(digits);
|
|
39
|
+
if (index < 1) return false; // citations are 1-based
|
|
40
|
+
// Leave unsupported markers (no backing source) as literal text.
|
|
41
|
+
if (indices && !indices.has(index)) return false;
|
|
42
|
+
return {
|
|
43
|
+
type: 'citationReference',
|
|
44
|
+
data: {
|
|
45
|
+
hName: 'span',
|
|
46
|
+
// Use the literal attribute name so the placeholder contract matches
|
|
47
|
+
// the renderer's `getAttribute('data-citation-index')` lookup exactly.
|
|
48
|
+
hProperties: { 'data-citation-index': index },
|
|
49
|
+
hChildren: [{ type: 'text', value: String(index) }],
|
|
50
|
+
},
|
|
51
|
+
} as unknown as PhrasingContent;
|
|
52
|
+
},
|
|
53
|
+
]);
|
|
54
|
+
};
|
|
55
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -63,9 +63,11 @@ export type {
|
|
|
63
63
|
// Components
|
|
64
64
|
export {
|
|
65
65
|
CkAgentMessage,
|
|
66
|
+
CkCitation,
|
|
67
|
+
CkCitationCard,
|
|
66
68
|
CkConversation,
|
|
67
69
|
CkConversationLayout,
|
|
68
|
-
|
|
70
|
+
CkCopyMessageButton,
|
|
69
71
|
CkDropZoneOverlay,
|
|
70
72
|
CkFeedbackButton,
|
|
71
73
|
CkFeedbackDialog,
|
|
@@ -75,18 +77,24 @@ export {
|
|
|
75
77
|
CkHistoryWrapper,
|
|
76
78
|
CkInput,
|
|
77
79
|
CkMarkdownRenderer,
|
|
78
|
-
|
|
80
|
+
CkMessageButton,
|
|
79
81
|
CkModelSelector,
|
|
80
82
|
CkPromptSendButton,
|
|
81
83
|
CkPromptMenuButton,
|
|
82
84
|
CkPromptStopButton,
|
|
83
85
|
CkPromptInput,
|
|
84
86
|
CkPromptInputDisclaimer,
|
|
87
|
+
CkRegenerateMessageButton,
|
|
85
88
|
CkSendIcon,
|
|
86
89
|
CkStopIcon,
|
|
87
90
|
CkUserMessage,
|
|
88
91
|
} from './components';
|
|
89
92
|
export type {
|
|
93
|
+
CkCitationProps,
|
|
94
|
+
CkCitationEmits,
|
|
95
|
+
CkCitationSource,
|
|
96
|
+
CkCitationCardProps,
|
|
97
|
+
CkCitationCardEmits,
|
|
90
98
|
CkConversationLayoutProps,
|
|
91
99
|
CkConversationProps,
|
|
92
100
|
CkDropZoneOverlayProps,
|
|
@@ -110,6 +118,7 @@ export type {
|
|
|
110
118
|
CkHistoryWrapperProps,
|
|
111
119
|
CkMarkdownElementClasses,
|
|
112
120
|
CkMarkdownRendererProps,
|
|
121
|
+
CkMarkdownRendererEmits,
|
|
113
122
|
CkModelOption,
|
|
114
123
|
CkModelSelectorProps,
|
|
115
124
|
CkModelSelectorEmits,
|
package/dist/components/base/CkCopyMessageActionButton/CkCopyMessageActionButton.stories.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CkCopyMessageActionButton.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/base/CkCopyMessageActionButton/CkCopyMessageActionButton.stories.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE3D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,yBAAyB,CAwBhD,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAkBnC;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC"}
|
package/dist/components/base/CkCopyMessageActionButton/CkCopyMessageActionButton.vue.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CkCopyMessageActionButton.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/base/CkCopyMessageActionButton/CkCopyMessageActionButton.vue"],"names":[],"mappings":"AAkHA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AA+M9D,QAAA,MAAM,YAAY;;iBA7LW,OAAO;;;;iBAAP,OAAO;;;;;;;;6EAiMlC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/base/CkCopyMessageActionButton/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,8BAA8B;IAC7C,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,8BAA8B;IAC7C,2EAA2E;IAC3E,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAClD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CkMessageActionButton.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/base/CkMessageActionButton/CkMessageActionButton.stories.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG3D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAqB5C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAanC;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CkMessageActionButton.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/base/CkMessageActionButton/CkMessageActionButton.vue"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAwD1D,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK/C,QAAA,MAAM,UAAU;;6EAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/base/CkMessageActionButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,mBAAmB,SAAS,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/base/CkMessageActionButton/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|