@aleph-alpha/chat-kit 5.13.0 → 6.1.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/{CkHistory.vue_vue_type_script_setup_true_lang-BNcJURkq.js → CkHistory.vue_vue_type_script_setup_true_lang-Cr8vF94e.js} +221 -115
- package/dist/adapters/responses-api.d.ts +1 -1
- package/dist/adapters/responses-api.d.ts.map +1 -1
- package/dist/adapters/responses-api.js +9 -7
- package/dist/apl-fqmucPXA.js +140 -0
- package/dist/asciiarmor-DucZyvP0.js +56 -0
- package/dist/asn1-BnOEsgAm.js +144 -0
- package/dist/asterisk-QAlztEwS.js +345 -0
- package/dist/brainfuck-DZVCuF_t.js +53 -0
- package/dist/chat-kit.css +1177 -12
- package/dist/clike-CTYGlS6x.js +799 -0
- package/dist/clojure-BhXMqnxz.js +849 -0
- package/dist/cmake-BGaNd9E7.js +71 -0
- package/dist/cobol-4yqQntpt.js +120 -0
- package/dist/coffeescript-D2dXvhEc.js +308 -0
- package/dist/commonlisp-CF_VNHQR.js +130 -0
- package/dist/components/base/CkHistoryItem/CkHistoryItem.vue.d.ts.map +1 -1
- package/dist/components/base/CkHistoryWrapper/CkHistoryWrapper.vue.d.ts.map +1 -1
- package/dist/components/base/CkMarkdownRenderer/CkMarkdownRenderer.stories.d.ts.map +1 -1
- package/dist/components/base/CkMilkdownEditor/CkMilkdownEditor.stories.d.ts +41 -0
- package/dist/components/base/CkMilkdownEditor/CkMilkdownEditor.stories.d.ts.map +1 -0
- package/dist/components/base/CkMilkdownEditor/CkMilkdownEditor.vue.d.ts +26 -0
- package/dist/components/base/CkMilkdownEditor/CkMilkdownEditor.vue.d.ts.map +1 -0
- package/dist/components/base/CkMilkdownEditor/codeMirrorTheme.d.ts +20 -0
- package/dist/components/base/CkMilkdownEditor/codeMirrorTheme.d.ts.map +1 -0
- package/dist/components/base/CkMilkdownEditor/createCrepeEditor.d.ts +42 -0
- package/dist/components/base/CkMilkdownEditor/createCrepeEditor.d.ts.map +1 -0
- package/dist/components/base/CkMilkdownEditor/crepeIcons.d.ts +33 -0
- package/dist/components/base/CkMilkdownEditor/crepeIcons.d.ts.map +1 -0
- package/dist/components/base/CkMilkdownEditor/index.d.ts +3 -0
- package/dist/components/base/CkMilkdownEditor/index.d.ts.map +1 -0
- package/dist/components/base/CkMilkdownEditor/markdownClassAttrs.d.ts +16 -0
- package/dist/components/base/CkMilkdownEditor/markdownClassAttrs.d.ts.map +1 -0
- package/dist/components/base/CkMilkdownEditor/types.d.ts +98 -0
- package/dist/components/base/CkMilkdownEditor/types.d.ts.map +1 -0
- package/dist/components/base/index.d.ts +2 -0
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +12 -11
- package/dist/composables/fileUpload/useFileUpload.d.ts.map +1 -1
- package/dist/composables/index.js +1 -1
- package/dist/composables/useChat.d.ts.map +1 -1
- package/dist/composables/useConversations.d.ts.map +1 -1
- package/dist/createCrepeEditor-CFbvSH3s.js +74141 -0
- package/dist/crystal-DyuLTqLs.js +398 -0
- package/dist/css-DkSyTW67.js +1772 -0
- package/dist/cypher-Dlu_3r4V.js +121 -0
- package/dist/d-UURgV0Ux.js +179 -0
- package/dist/diff-B_Bi2Crb.js +25 -0
- package/dist/dockerfile-Bvk733Ga.js +201 -0
- package/dist/dtd-Dy74G54E.js +114 -0
- package/dist/dylan-TSb-Nfix.js +314 -0
- package/dist/ebnf-4fKAGW3a.js +140 -0
- package/dist/ecl-B59qGGVg.js +178 -0
- package/dist/eiffel-Dze7nlu3.js +134 -0
- package/dist/elm-DG7jkhNZ.js +176 -0
- package/dist/erlang-BO6gOnGA.js +674 -0
- package/dist/factor-CMxFHDqz.js +65 -0
- package/dist/fcl-CDDUNjTj.js +141 -0
- package/dist/forth-B9D2JCeE.js +116 -0
- package/dist/fortran-CAG2BFbe.js +467 -0
- package/dist/gas-0Aw8zDr5.js +293 -0
- package/dist/gherkin-DhZlEZiy.js +115 -0
- package/dist/groovy-CpwJiBl7.js +223 -0
- package/dist/handlers/index.js +1 -1
- package/dist/handlers/useChatKitLabels.d.ts +62 -1
- package/dist/handlers/useChatKitLabels.d.ts.map +1 -1
- package/dist/haskell-ySd-OUo8.js +459 -0
- package/dist/haxe-7MlzfeYV.js +514 -0
- package/dist/http-BqypyemW.js +79 -0
- package/dist/idl-4HIGJlDI.js +985 -0
- package/dist/index-A5rWjRtZ.js +689 -0
- package/dist/index-B0ldhzaj.js +385 -0
- package/dist/index-BVOjyn3y.js +2490 -0
- package/dist/index-BWvkps_G.js +309 -0
- package/dist/index-BaS8OW8V.js +151 -0
- package/dist/index-BlHHEbV-.js +406 -0
- package/dist/index-BoqzHVNB.js +82 -0
- package/dist/index-C6zYjwIQ.js +704 -0
- package/dist/{index-Dn4ctxk8.js → index-C72e57-5.js} +48 -24
- package/dist/index-CMJGuXap.js +330 -0
- package/dist/index-CRfGWVdQ.js +116 -0
- package/dist/index-C_gTb50u.js +81 -0
- package/dist/index-DSU7cBGz.js +178 -0
- package/dist/index-DSq3gvqU.js +1767 -0
- package/dist/index-Da3777l2.js +289 -0
- package/dist/index-DdlzabmR.js +1021 -0
- package/dist/index-DhY_9bdS.js +61 -0
- package/dist/index-Dm6C1blN.js +1052 -0
- package/dist/index-Tj3pzx-E.js +327 -0
- package/dist/index-ZeRS5rER.js +97 -0
- package/dist/index-gzleljO6.js +157 -0
- package/dist/index-naWlQpaL.js +642 -0
- package/dist/index-sKO1lHHC.js +312 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -14
- package/dist/javascript-Bt8B7yTi.js +992 -0
- package/dist/julia-Bs6JJhYG.js +407 -0
- package/dist/livescript-DmzgM3Yt.js +296 -0
- package/dist/lua-Cvg8VrAA.js +256 -0
- package/dist/mathematica-DNLOL9PQ.js +110 -0
- package/dist/mbox-Ga7d4MMN.js +117 -0
- package/dist/mirc-Dma3B8rS.js +107 -0
- package/dist/mllike-DHn7xckP.js +334 -0
- package/dist/modelica-0d55jYY0.js +147 -0
- package/dist/mscgen-DdqZYINH.js +135 -0
- package/dist/mumps-Btr8VblO.js +93 -0
- package/dist/nginx-DTDtBDVN.js +141 -0
- package/dist/nsis-CyKBdPWp.js +62 -0
- package/dist/ntriples-CvgOYMpL.js +153 -0
- package/dist/octave-DYBj3-tl.js +200 -0
- package/dist/oz-R_e8WMIi.js +231 -0
- package/dist/pascal-GD8iposT.js +105 -0
- package/dist/perl-DL9mHpoi.js +1105 -0
- package/dist/pig-C_4T4YIV.js +101 -0
- package/dist/powershell-B0suO7Vd.js +328 -0
- package/dist/properties-BR-vP1aU.js +58 -0
- package/dist/protobuf-BxgpyhoW.js +77 -0
- package/dist/pug-vHnWR0UE.js +405 -0
- package/dist/puppet-Bdao66PW.js +137 -0
- package/dist/python-BFGRmuZ9.js +426 -0
- package/dist/q-CrbCVq4a.js +131 -0
- package/dist/r-V7nswm59.js +170 -0
- package/dist/rpm-C-DLY-If.js +109 -0
- package/dist/ruby-CQTpZw6f.js +331 -0
- package/dist/sas-D2UG-yhZ.js +207 -0
- package/dist/scheme-BKzrkGJD.js +222 -0
- package/dist/shell-BlsXDxCn.js +222 -0
- package/dist/sieve-CjwBwOY5.js +135 -0
- package/dist/simple-mode-DMneyfDu.js +130 -0
- package/dist/smalltalk-BOIGQuhN.js +121 -0
- package/dist/solr-CwD7U71z.js +69 -0
- package/dist/sparql-DYskk2vE.js +249 -0
- package/dist/spreadsheet-Bgtt3oLP.js +87 -0
- package/dist/sql-Cei9CMfk.js +342 -0
- package/dist/stex-C1nZSzAw.js +230 -0
- package/dist/stylus-BkS-boTH.js +565 -0
- package/dist/swift-FRZi1uvB.js +291 -0
- package/dist/tcl-CUcaCdmq.js +114 -0
- package/dist/test-utils/createTextPlugin.d.ts +7 -1
- package/dist/test-utils/createTextPlugin.d.ts.map +1 -1
- package/dist/textile-BnFpjsrl.js +414 -0
- package/dist/tiddlywiki-CjprD-Qp.js +218 -0
- package/dist/tiki-DK9DOeWn.js +268 -0
- package/dist/toml-BOuWGMcf.js +76 -0
- package/dist/troff-E1bJ0PPL.js +61 -0
- package/dist/ttcn-cfg-Dc39-fIP.js +133 -0
- package/dist/ttcn-tKd4HLu4.js +192 -0
- package/dist/turtle-Dq7-1WAf.js +124 -0
- package/dist/{useChatKitLabels-CMOr3Kjq.js → useChatKitLabels-Ww1Q7xUr.js} +26 -3
- package/dist/vb-Dp90gtsv.js +196 -0
- package/dist/vbscript-Bfn8O8I7.js +478 -0
- package/dist/velocity-BwIZK1TH.js +149 -0
- package/dist/verilog-CnT9bMk0.js +429 -0
- package/dist/vhdl-DCkMIyT9.js +158 -0
- package/dist/webidl-BTLTThCm.js +204 -0
- package/dist/xquery-BrBUuxMR.js +525 -0
- package/dist/yacas-b5lAVEIl.js +130 -0
- package/dist/z80-ClgwfNdB.js +92 -0
- package/package.json +11 -5
- package/src/adapters/responses-api.spec.ts +86 -0
- package/src/adapters/responses-api.ts +13 -9
- package/src/components/base/CkCitationCard/CkCitationCard.vue +1 -1
- package/src/components/base/CkCitationLabel/CkCitationLabel.vue +1 -1
- package/src/components/base/CkConversationLayout/CkConversationLayout.spec.ts +1 -5
- package/src/components/base/CkCopyMessageButton/CkCopyMessageButton.spec.ts +1 -1
- package/src/components/base/CkFeedbackButton/CkFeedbackButton.vue +3 -3
- package/src/components/base/CkFeedbackDialog/CkFeedbackDialog.vue +9 -9
- package/src/components/base/CkHistoryItem/CkHistoryItem.vue +5 -7
- package/src/components/base/CkHistoryWrapper/CkHistoryWrapper.vue +2 -1
- package/src/components/base/CkMarkdownRenderer/CkMarkdownRenderer.stories.ts +9 -4
- package/src/components/base/CkMarkdownRenderer/CkMarkdownRenderer.vue +1 -1
- package/src/components/base/CkMilkdownEditor/CkMilkdownEditor.spec.ts +221 -0
- package/src/components/base/CkMilkdownEditor/CkMilkdownEditor.stories.ts +274 -0
- package/src/components/base/CkMilkdownEditor/CkMilkdownEditor.vue +151 -0
- package/src/components/base/CkMilkdownEditor/codeMirrorTheme.ts +132 -0
- package/src/components/base/CkMilkdownEditor/createCrepeEditor.ts +192 -0
- package/src/components/base/CkMilkdownEditor/crepeIcons.ts +77 -0
- package/src/components/base/CkMilkdownEditor/index.ts +2 -0
- package/src/components/base/CkMilkdownEditor/markdownClassAttrs.ts +64 -0
- package/src/components/base/CkMilkdownEditor/milkdown-theme.css +441 -0
- package/src/components/base/CkMilkdownEditor/types.ts +100 -0
- package/src/components/base/CkModelSelector/CkModelSelector.vue +3 -3
- package/src/components/base/CkPromptInputDisclaimer/CkPromptInputDisclaimer.stories.ts +2 -2
- package/src/components/base/index.ts +6 -0
- package/src/components/index.ts +4 -0
- package/src/composables/fileUpload/useFileUpload.ts +45 -30
- package/src/composables/fileUpload/useFileUploadWrapper.spec.ts +1 -1
- package/src/composables/fileUpload/useFileUploadWrapper.ts +3 -3
- package/src/composables/useChat.ts +3 -1
- package/src/composables/useConversations.ts +8 -5
- package/src/handlers/useChatKitLabels.spec.ts +0 -1
- package/src/handlers/useChatKitLabels.ts +29 -2
- package/src/handlers/useMarkdownParser.ts +1 -1
- package/src/index.ts +4 -0
- package/src/test-setup.ts +3 -3
- package/src/test-utils/createTextPlugin.ts +11 -3
|
@@ -137,8 +137,9 @@ class Semaphore {
|
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
release(): void {
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
const next = this.queue.shift();
|
|
141
|
+
if (next) {
|
|
142
|
+
next();
|
|
142
143
|
} else {
|
|
143
144
|
this.permits++;
|
|
144
145
|
}
|
|
@@ -184,7 +185,12 @@ function generateCanvasThumbnail(
|
|
|
184
185
|
const canvas = document.createElement('canvas');
|
|
185
186
|
canvas.width = w;
|
|
186
187
|
canvas.height = h;
|
|
187
|
-
const ctx = canvas.getContext('2d')
|
|
188
|
+
const ctx = canvas.getContext('2d');
|
|
189
|
+
if (!ctx) {
|
|
190
|
+
URL.revokeObjectURL(url);
|
|
191
|
+
reject(new Error('Canvas 2D context is not available'));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
188
194
|
ctx.drawImage(img, 0, 0, w, h);
|
|
189
195
|
|
|
190
196
|
const dataUrl = canvas.toDataURL('image/png');
|
|
@@ -284,12 +290,18 @@ async function runCustomValidators(
|
|
|
284
290
|
// Retry
|
|
285
291
|
// ---------------------------------------------------------------------------
|
|
286
292
|
|
|
293
|
+
function extractHttpStatus(err: unknown): number | undefined {
|
|
294
|
+
const e = err as {
|
|
295
|
+
httpStatus?: number;
|
|
296
|
+
status?: number;
|
|
297
|
+
response?: { status?: number };
|
|
298
|
+
} | null;
|
|
299
|
+
return e?.httpStatus ?? e?.status ?? e?.response?.status;
|
|
300
|
+
}
|
|
301
|
+
|
|
287
302
|
function isRetryable(err: unknown, policy: RetryPolicy): boolean {
|
|
288
303
|
if (!policy.retryableStatusCodes?.length) return true;
|
|
289
|
-
const status =
|
|
290
|
-
(err as any)?.httpStatus ??
|
|
291
|
-
(err as any)?.status ??
|
|
292
|
-
(err as any)?.response?.status;
|
|
304
|
+
const status = extractHttpStatus(err);
|
|
293
305
|
return status != null && policy.retryableStatusCodes.includes(status);
|
|
294
306
|
}
|
|
295
307
|
|
|
@@ -608,10 +620,11 @@ export function useFileUpload(
|
|
|
608
620
|
|
|
609
621
|
for (let i = 0; i < uploadReady.length; i++) {
|
|
610
622
|
const { stateKey } = uploadReady[i] as { file: File; stateKey: string };
|
|
611
|
-
const entry = files.value.get(stateKey)
|
|
623
|
+
const entry = files.value.get(stateKey);
|
|
624
|
+
if (!entry) continue;
|
|
625
|
+
const startedAt = entry.uploadStartedAt ?? completedAt;
|
|
612
626
|
const durationMs =
|
|
613
|
-
new Date(completedAt).getTime() -
|
|
614
|
-
new Date(entry.uploadStartedAt!).getTime();
|
|
627
|
+
new Date(completedAt).getTime() - new Date(startedAt).getTime();
|
|
615
628
|
|
|
616
629
|
const remoteResult = results[i] as
|
|
617
630
|
| { id?: string; documentId?: string }
|
|
@@ -682,12 +695,13 @@ export function useFileUpload(
|
|
|
682
695
|
const uploadErr: FileUploadError = {
|
|
683
696
|
code: 'UPLOAD_FAILED',
|
|
684
697
|
message: (err as Error).message ?? 'Upload failed.',
|
|
685
|
-
httpStatus: (err
|
|
698
|
+
httpStatus: extractHttpStatus(err),
|
|
686
699
|
occurredAt: completedAt,
|
|
687
700
|
};
|
|
688
701
|
|
|
689
702
|
for (const { stateKey } of uploadReady) {
|
|
690
|
-
const entry = files.value.get(stateKey)
|
|
703
|
+
const entry = files.value.get(stateKey);
|
|
704
|
+
if (!entry) continue;
|
|
691
705
|
const durationMs = entry.uploadStartedAt
|
|
692
706
|
? new Date(completedAt).getTime() -
|
|
693
707
|
new Date(entry.uploadStartedAt).getTime()
|
|
@@ -764,16 +778,17 @@ export function useFileUpload(
|
|
|
764
778
|
|
|
765
779
|
const uploadStarted = now();
|
|
766
780
|
for (const { stateKey } of uploadReady) {
|
|
781
|
+
const attemptCount = (files.value.get(stateKey)?.attemptCount ?? 0) + 1;
|
|
767
782
|
updateEntry(stateKey, {
|
|
768
783
|
status: 'uploading',
|
|
769
784
|
uploadStartedAt: uploadStarted,
|
|
770
|
-
attemptCount
|
|
785
|
+
attemptCount,
|
|
771
786
|
lastAttemptAt: uploadStarted,
|
|
772
787
|
});
|
|
773
788
|
emit({
|
|
774
789
|
type: 'file:uploading',
|
|
775
790
|
fileId: stateKey,
|
|
776
|
-
attemptCount
|
|
791
|
+
attemptCount,
|
|
777
792
|
});
|
|
778
793
|
}
|
|
779
794
|
|
|
@@ -863,17 +878,20 @@ export function useFileUpload(
|
|
|
863
878
|
): UploadResult {
|
|
864
879
|
return {
|
|
865
880
|
id: groupId,
|
|
866
|
-
results: batch.
|
|
867
|
-
const entry = files.value.get(stateKey)
|
|
868
|
-
return
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
881
|
+
results: batch.flatMap(({ stateKey }) => {
|
|
882
|
+
const entry = files.value.get(stateKey);
|
|
883
|
+
if (!entry) return [];
|
|
884
|
+
return [
|
|
885
|
+
{
|
|
886
|
+
fileId: stateKey,
|
|
887
|
+
success: entry.status === 'success',
|
|
888
|
+
status: entry.status,
|
|
889
|
+
remoteFileId: entry.remoteFileId ?? undefined,
|
|
890
|
+
error: entry.error ?? undefined,
|
|
891
|
+
uploadDate: entry.uploadCompletedAt ?? entry.queuedAt,
|
|
892
|
+
metadata: entry.metadata,
|
|
893
|
+
} satisfies UploadFileResult,
|
|
894
|
+
];
|
|
877
895
|
}),
|
|
878
896
|
};
|
|
879
897
|
}
|
|
@@ -927,10 +945,7 @@ export function useFileUpload(
|
|
|
927
945
|
try {
|
|
928
946
|
await client.delete(endpoints.file(storeId, entry.remoteFileId));
|
|
929
947
|
} catch (err) {
|
|
930
|
-
const status =
|
|
931
|
-
(err as any)?.httpStatus ??
|
|
932
|
-
(err as any)?.status ??
|
|
933
|
-
(err as any)?.response?.status;
|
|
948
|
+
const status = extractHttpStatus(err);
|
|
934
949
|
|
|
935
950
|
if (status === 404) {
|
|
936
951
|
// File no longer exists on the server — proceed with local removal.
|
|
@@ -1022,7 +1037,7 @@ export function useFileUpload(
|
|
|
1022
1037
|
files.value.delete(entry.id);
|
|
1023
1038
|
if (db) {
|
|
1024
1039
|
deletePersistedEntry(db, persistStoreName, entry.id).catch(
|
|
1025
|
-
() =>
|
|
1040
|
+
() => undefined,
|
|
1026
1041
|
);
|
|
1027
1042
|
}
|
|
1028
1043
|
}
|
|
@@ -206,7 +206,7 @@ describe('useFileUploadWrapper handleFilesSelected', () => {
|
|
|
206
206
|
const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
|
|
207
207
|
|
|
208
208
|
const event = makeInputEvent([createFile('a.pdf')]);
|
|
209
|
-
const input =
|
|
209
|
+
const input = event.target as unknown as HTMLInputElement;
|
|
210
210
|
|
|
211
211
|
const valueSetter = vi.spyOn(input, 'value', 'set');
|
|
212
212
|
|
|
@@ -401,9 +401,9 @@ export function createDocumentUploadProvider(
|
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
-
const successFileIds = result.results
|
|
405
|
-
.
|
|
406
|
-
|
|
404
|
+
const successFileIds = result.results.flatMap((r) =>
|
|
405
|
+
r.success && r.remoteFileId ? [r.remoteFileId] : [],
|
|
406
|
+
);
|
|
407
407
|
|
|
408
408
|
if (successFileIds.length > 0) {
|
|
409
409
|
await upload.runWorkflow(successFileIds);
|
|
@@ -216,11 +216,14 @@ export function useConversations(
|
|
|
216
216
|
const raw = await http.post<RawConversation>(path, body);
|
|
217
217
|
const created = mapConversation(raw);
|
|
218
218
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
219
|
+
if (placeholder) {
|
|
220
|
+
const placeholderId = placeholder.id;
|
|
221
|
+
conversations.value = conversations.value.map((c) =>
|
|
222
|
+
c.id === placeholderId ? created : c,
|
|
223
|
+
);
|
|
224
|
+
} else {
|
|
225
|
+
conversations.value = [created, ...conversations.value];
|
|
226
|
+
}
|
|
224
227
|
|
|
225
228
|
return created;
|
|
226
229
|
} catch (e) {
|
|
@@ -111,10 +111,28 @@ export type ChatKitLabels = {
|
|
|
111
111
|
* set and more conversations exist than the limit.
|
|
112
112
|
*/
|
|
113
113
|
historyShowAll?: string;
|
|
114
|
+
/** Accessible name of the "Bold" button in the `CkMilkdownEditor` toolbar. */
|
|
115
|
+
markdownEditorBold?: string;
|
|
116
|
+
/** Accessible name of the "Italic" button in the `CkMilkdownEditor` toolbar. */
|
|
117
|
+
markdownEditorItalic?: string;
|
|
118
|
+
/** Accessible name of the "Strikethrough" button in the `CkMilkdownEditor` toolbar. */
|
|
119
|
+
markdownEditorStrikethrough?: string;
|
|
120
|
+
/** Accessible name of the "Inline code" button in the `CkMilkdownEditor` toolbar. */
|
|
121
|
+
markdownEditorInlineCode?: string;
|
|
122
|
+
/** Accessible name of the "Link" button in the `CkMilkdownEditor` toolbar. */
|
|
123
|
+
markdownEditorLink?: string;
|
|
124
|
+
/** Placeholder of the URL input in the `CkMilkdownEditor` link tooltip. */
|
|
125
|
+
markdownEditorLinkPlaceholder?: string;
|
|
126
|
+
/** Label of the copy button on a `CkMilkdownEditor` code block. */
|
|
127
|
+
markdownEditorCopyCode?: string;
|
|
128
|
+
/** Placeholder of the language search input on a `CkMilkdownEditor` code block. */
|
|
129
|
+
markdownEditorSearchLanguage?: string;
|
|
130
|
+
/** Empty-state text of the language search on a `CkMilkdownEditor` code block. */
|
|
131
|
+
markdownEditorNoLanguageFound?: string;
|
|
114
132
|
};
|
|
115
133
|
|
|
116
134
|
/** English defaults used when no labels are provided by the consumer. */
|
|
117
|
-
export const defaultChatKitLabels
|
|
135
|
+
export const defaultChatKitLabels = {
|
|
118
136
|
agentAvatarAlt: 'Agent avatar',
|
|
119
137
|
agentLoadingAvatarAlt: 'Agent loading',
|
|
120
138
|
inputPlaceholder: 'Type a message...',
|
|
@@ -150,7 +168,16 @@ export const defaultChatKitLabels: ChatKitLabels = {
|
|
|
150
168
|
historyItemEditAction: 'Edit',
|
|
151
169
|
historyItemDeleteAction: 'Delete',
|
|
152
170
|
historyShowAll: 'Show all',
|
|
153
|
-
|
|
171
|
+
markdownEditorBold: 'Bold',
|
|
172
|
+
markdownEditorItalic: 'Italic',
|
|
173
|
+
markdownEditorStrikethrough: 'Strikethrough',
|
|
174
|
+
markdownEditorInlineCode: 'Inline code',
|
|
175
|
+
markdownEditorLink: 'Link',
|
|
176
|
+
markdownEditorLinkPlaceholder: 'Paste or type a link…',
|
|
177
|
+
markdownEditorCopyCode: 'Copy code',
|
|
178
|
+
markdownEditorSearchLanguage: 'Search language…',
|
|
179
|
+
markdownEditorNoLanguageFound: 'No language found',
|
|
180
|
+
} satisfies Required<ChatKitLabels>;
|
|
154
181
|
|
|
155
182
|
/** Vue injection key for ChatKit labels. */
|
|
156
183
|
export const CHAT_KIT_LABELS: InjectionKey<ComputedRef<ChatKitLabels>> =
|
|
@@ -100,7 +100,7 @@ export function useMarkdownParser(
|
|
|
100
100
|
let cachedProcessor: SyncProcessor | undefined;
|
|
101
101
|
|
|
102
102
|
function getProcessor(list: PluggableList): SyncProcessor {
|
|
103
|
-
if (list === cachedPlugins) return cachedProcessor
|
|
103
|
+
if (list === cachedPlugins && cachedProcessor) return cachedProcessor;
|
|
104
104
|
cachedPlugins = list;
|
|
105
105
|
cachedProcessor = buildProcessor(list);
|
|
106
106
|
return cachedProcessor;
|
package/src/index.ts
CHANGED
|
@@ -99,6 +99,7 @@ export {
|
|
|
99
99
|
CkStopIcon,
|
|
100
100
|
CkUserMessage,
|
|
101
101
|
CkEditableUserMessage,
|
|
102
|
+
CkMilkdownEditor,
|
|
102
103
|
} from './components';
|
|
103
104
|
export type {
|
|
104
105
|
CkAgentMessageHeaderProps,
|
|
@@ -141,6 +142,9 @@ export type {
|
|
|
141
142
|
CkUserMessageProps,
|
|
142
143
|
CkEditableUserMessageProps,
|
|
143
144
|
CkEditableUserMessageEmits,
|
|
145
|
+
CkMilkdownEditorEmits,
|
|
146
|
+
CkMilkdownEditorExposed,
|
|
147
|
+
CkMilkdownEditorProps,
|
|
144
148
|
} from './components';
|
|
145
149
|
|
|
146
150
|
// Helpers
|
package/src/test-setup.ts
CHANGED
|
@@ -6,7 +6,7 @@ import '@testing-library/jest-dom/vitest';
|
|
|
6
6
|
|
|
7
7
|
// ResizeObserver is not available in JSDOM
|
|
8
8
|
global.ResizeObserver = class ResizeObserver {
|
|
9
|
-
observe(): void
|
|
10
|
-
unobserve(): void
|
|
11
|
-
disconnect(): void
|
|
9
|
+
observe = (): void => undefined;
|
|
10
|
+
unobserve = (): void => undefined;
|
|
11
|
+
disconnect = (): void => undefined;
|
|
12
12
|
};
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
type TextPluginNode = {
|
|
2
|
+
type: string;
|
|
3
|
+
value?: string;
|
|
4
|
+
children?: TextPluginNode[];
|
|
5
|
+
};
|
|
6
|
+
|
|
1
7
|
export function createTextPlugin(transform: (text: string) => string) {
|
|
2
|
-
return () => (tree:
|
|
3
|
-
const visit = (node:
|
|
4
|
-
if (node.type === 'text'
|
|
8
|
+
return () => (tree: TextPluginNode) => {
|
|
9
|
+
const visit = (node: TextPluginNode) => {
|
|
10
|
+
if (node.type === 'text' && node.value !== undefined) {
|
|
11
|
+
node.value = transform(node.value);
|
|
12
|
+
}
|
|
5
13
|
if (node.children) node.children.forEach(visit);
|
|
6
14
|
};
|
|
7
15
|
visit(tree);
|