@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
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Theme for CkMilkdownEditor.
|
|
3
|
+
*
|
|
4
|
+
* Crepe's colours, fonts and shadows are all CSS custom properties, so this
|
|
5
|
+
* file maps them to the design tokens ui-library emits on `:root` (oklch
|
|
6
|
+
* component triples, hence `oklch(var(--token))`). Because the tokens flip
|
|
7
|
+
* under `html.dark`, the accessible theme and the brand theme, the editor
|
|
8
|
+
* follows every theme without separate Crepe theme files.
|
|
9
|
+
*
|
|
10
|
+
* It also replaces Crepe's `reset.css`, which is not imported: that file
|
|
11
|
+
* styles headings, paragraphs, code, links and quotes with two-class selectors
|
|
12
|
+
* that would beat the utility classes `applyMarkdownClasses` puts on the nodes
|
|
13
|
+
* (the very classes CkMarkdownRenderer uses), forces a 60px/120px document
|
|
14
|
+
* padding and removes every focus outline.
|
|
15
|
+
*
|
|
16
|
+
* Selectors are written with at least the `.ck-milkdown .milkdown` prefix so
|
|
17
|
+
* they beat Crepe's own `.milkdown …` rules regardless of stylesheet order.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
.ck-milkdown {
|
|
21
|
+
/* Crepe colour variables → design tokens */
|
|
22
|
+
--crepe-color-background: oklch(var(--background-surface-primary));
|
|
23
|
+
--crepe-color-on-background: oklch(var(--content-on-surface-primary));
|
|
24
|
+
--crepe-color-surface: oklch(var(--background-surface-floating));
|
|
25
|
+
--crepe-color-surface-low: oklch(var(--background-surface-muted));
|
|
26
|
+
--crepe-color-on-surface: oklch(var(--content-on-surface-primary));
|
|
27
|
+
--crepe-color-on-surface-variant: oklch(var(--content-on-surface-secondary));
|
|
28
|
+
/* "outline" drives icon colours and (mixed to 20%) hairline borders. */
|
|
29
|
+
--crepe-color-outline: oklch(var(--content-on-surface-secondary));
|
|
30
|
+
--crepe-color-primary: oklch(var(--content-on-surface-link));
|
|
31
|
+
--crepe-color-secondary: oklch(var(--background-accent-soft));
|
|
32
|
+
--crepe-color-on-secondary: oklch(var(--content-on-accent-soft));
|
|
33
|
+
--crepe-color-inverse: oklch(var(--content-on-surface-primary));
|
|
34
|
+
--crepe-color-on-inverse: oklch(var(--background-surface-primary));
|
|
35
|
+
--crepe-color-inline-code: oklch(var(--content-on-surface-primary));
|
|
36
|
+
--crepe-color-error: oklch(var(--border-input-error));
|
|
37
|
+
--crepe-color-hover: oklch(var(--overlay-hover-subtle));
|
|
38
|
+
--crepe-color-selected: oklch(var(--background-accent-soft));
|
|
39
|
+
--crepe-color-inline-area: oklch(var(--background-surface-muted-subtle));
|
|
40
|
+
|
|
41
|
+
--crepe-base-font-size: 1rem;
|
|
42
|
+
--crepe-font-default: var(--font-sans, inherit);
|
|
43
|
+
/* CkMarkdownRenderer headings use the body font, so the editor does too. */
|
|
44
|
+
--crepe-font-title: var(--font-sans, inherit);
|
|
45
|
+
--crepe-font-code:
|
|
46
|
+
ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono',
|
|
47
|
+
monospace;
|
|
48
|
+
|
|
49
|
+
--crepe-shadow-1: var(--shadow-md);
|
|
50
|
+
--crepe-shadow-2: var(--shadow-lg);
|
|
51
|
+
|
|
52
|
+
/* CodeMirror palette ≈ Shiki `github-light` (what UiCodeBlock renders). */
|
|
53
|
+
--ck-cm-bg: #ffffff;
|
|
54
|
+
--ck-cm-foreground: #24292f;
|
|
55
|
+
--ck-cm-keyword: #cf222e;
|
|
56
|
+
--ck-cm-string: #0a3069;
|
|
57
|
+
--ck-cm-comment: #6e7781;
|
|
58
|
+
--ck-cm-function: #8250df;
|
|
59
|
+
--ck-cm-constant: #0550ae;
|
|
60
|
+
/* UiCodeBlock rewrites Shiki's orange entity colour to the primary text token. */
|
|
61
|
+
--ck-cm-entity: oklch(var(--content-on-surface-primary));
|
|
62
|
+
--ck-cm-tag: #116329;
|
|
63
|
+
--ck-cm-error: #82071e;
|
|
64
|
+
--ck-cm-selection: oklch(var(--background-accent-soft));
|
|
65
|
+
|
|
66
|
+
position: relative;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* CodeMirror palette ≈ Shiki `github-dark`. */
|
|
70
|
+
html.dark .ck-milkdown {
|
|
71
|
+
--ck-cm-bg: #24292e;
|
|
72
|
+
--ck-cm-foreground: #c9d1d9;
|
|
73
|
+
--ck-cm-keyword: #ff7b72;
|
|
74
|
+
--ck-cm-string: #a5d6ff;
|
|
75
|
+
--ck-cm-comment: #8b949e;
|
|
76
|
+
--ck-cm-function: #d2a8ff;
|
|
77
|
+
--ck-cm-constant: #79c0ff;
|
|
78
|
+
--ck-cm-tag: #7ee787;
|
|
79
|
+
--ck-cm-error: #ffa198;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* ------------------------------------------------------------------------ */
|
|
83
|
+
/* Minimal reset (replaces Crepe's reset.css) */
|
|
84
|
+
/* ------------------------------------------------------------------------ */
|
|
85
|
+
|
|
86
|
+
.ck-milkdown .milkdown {
|
|
87
|
+
position: relative;
|
|
88
|
+
/* Inherit like CkMarkdownRenderer does: the parent sets font and colour. */
|
|
89
|
+
font: inherit;
|
|
90
|
+
color: inherit;
|
|
91
|
+
background: transparent;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.ck-milkdown .milkdown button,
|
|
95
|
+
.ck-milkdown .milkdown input {
|
|
96
|
+
margin: 0;
|
|
97
|
+
border: none;
|
|
98
|
+
background: none;
|
|
99
|
+
box-shadow: none;
|
|
100
|
+
font: inherit;
|
|
101
|
+
color: inherit;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.ck-milkdown .milkdown button:focus-visible,
|
|
105
|
+
.ck-milkdown .milkdown input:focus-visible,
|
|
106
|
+
.ck-milkdown .milkdown [role='option']:focus-visible {
|
|
107
|
+
outline: 2px solid oklch(var(--border-surface-focus-ring));
|
|
108
|
+
outline-offset: 1px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.ck-milkdown .milkdown .milkdown-icon {
|
|
112
|
+
display: inline-flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
justify-content: center;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.ck-milkdown .milkdown .ProseMirror {
|
|
118
|
+
padding: 0;
|
|
119
|
+
min-height: 1lh;
|
|
120
|
+
outline: none;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.ck-milkdown .milkdown .ProseMirror .ProseMirror-selectednode {
|
|
124
|
+
outline: none;
|
|
125
|
+
background: color-mix(in srgb, var(--crepe-color-selected), transparent 60%);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.ck-milkdown .milkdown .ProseMirror img {
|
|
129
|
+
max-width: 100%;
|
|
130
|
+
vertical-align: bottom;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.ck-milkdown .milkdown .crepe-placeholder::before {
|
|
134
|
+
color: oklch(var(--content-on-surface-muted));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* ------------------------------------------------------------------------ */
|
|
138
|
+
/* Lists — Crepe renders `li` through a node view with an SVG marker. */
|
|
139
|
+
/* Reproduce `li: 'my-0.5'` and hang the marker into the `ml-6` gutter the */
|
|
140
|
+
/* `ul`/`ol` classes create, so text starts where the renderer's text does. */
|
|
141
|
+
/* ------------------------------------------------------------------------ */
|
|
142
|
+
|
|
143
|
+
.ck-milkdown .milkdown .milkdown-list-item-block {
|
|
144
|
+
display: block;
|
|
145
|
+
margin: 0.125rem 0;
|
|
146
|
+
padding: 0;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.ck-milkdown .milkdown .milkdown-list-item-block > li.list-item {
|
|
150
|
+
display: flex;
|
|
151
|
+
align-items: flex-start;
|
|
152
|
+
gap: 0;
|
|
153
|
+
margin: 0;
|
|
154
|
+
padding: 0;
|
|
155
|
+
list-style: none;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.ck-milkdown .milkdown .milkdown-list-item-block li .label-wrapper {
|
|
159
|
+
flex: none;
|
|
160
|
+
display: flex;
|
|
161
|
+
align-items: center;
|
|
162
|
+
justify-content: flex-end;
|
|
163
|
+
box-sizing: border-box;
|
|
164
|
+
width: 1.5rem;
|
|
165
|
+
height: 1.75rem; /* = leading-7, the renderer's body line height */
|
|
166
|
+
margin-left: -1.5rem;
|
|
167
|
+
padding-right: 0.375rem;
|
|
168
|
+
color: inherit;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.ck-milkdown .milkdown .milkdown-list-item-block li .label-wrapper .label {
|
|
172
|
+
width: auto;
|
|
173
|
+
height: auto;
|
|
174
|
+
padding: 0;
|
|
175
|
+
font-variant-numeric: tabular-nums;
|
|
176
|
+
text-align: right;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.ck-milkdown .milkdown .milkdown-list-item-block li .label-wrapper svg {
|
|
180
|
+
width: 1.125rem;
|
|
181
|
+
height: 1.125rem;
|
|
182
|
+
color: inherit;
|
|
183
|
+
fill: none;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.ck-milkdown
|
|
187
|
+
.milkdown
|
|
188
|
+
.milkdown-list-item-block
|
|
189
|
+
li
|
|
190
|
+
.label-wrapper
|
|
191
|
+
svg.ck-icon--bullet {
|
|
192
|
+
width: 1.5rem;
|
|
193
|
+
height: 1.5rem;
|
|
194
|
+
fill: currentColor;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.ck-milkdown .milkdown .milkdown-list-item-block li .label-wrapper .checked,
|
|
198
|
+
.ck-milkdown .milkdown .milkdown-list-item-block li .label-wrapper .unchecked {
|
|
199
|
+
color: oklch(var(--content-on-surface-secondary));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* Task-list boxes: about the size of the native checkbox the renderer shows. */
|
|
203
|
+
.ck-milkdown .milkdown .milkdown-list-item-block li .label-wrapper .checked svg,
|
|
204
|
+
.ck-milkdown
|
|
205
|
+
.milkdown
|
|
206
|
+
.milkdown-list-item-block
|
|
207
|
+
li
|
|
208
|
+
.label-wrapper
|
|
209
|
+
.unchecked
|
|
210
|
+
svg {
|
|
211
|
+
width: 0.875rem;
|
|
212
|
+
height: 0.875rem;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/* The disc marker sits closer to the text, like the browser's own `list-disc`. */
|
|
216
|
+
.ck-milkdown
|
|
217
|
+
.milkdown
|
|
218
|
+
.milkdown-list-item-block
|
|
219
|
+
li
|
|
220
|
+
.label-wrapper:has(.ck-icon--bullet) {
|
|
221
|
+
padding-right: 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.ck-milkdown .milkdown .milkdown-list-item-block > li.list-item > .children {
|
|
225
|
+
flex: 1;
|
|
226
|
+
min-width: 0;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/* Milkdown always wraps list-item text in <p>; remark only does so for loose
|
|
230
|
+
* lists. Zero the paragraph margin so tight lists match the renderer. */
|
|
231
|
+
.ck-milkdown .milkdown .milkdown-list-item-block > li.list-item > .children p {
|
|
232
|
+
margin-top: 0;
|
|
233
|
+
margin-bottom: 0;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* ------------------------------------------------------------------------ */
|
|
237
|
+
/* Code blocks — mirror UiCodeBlock: rounded-lg border, muted header with */
|
|
238
|
+
/* the language label and an always-visible copy button, github palette. */
|
|
239
|
+
/* ------------------------------------------------------------------------ */
|
|
240
|
+
|
|
241
|
+
.ck-milkdown .milkdown .milkdown-code-block {
|
|
242
|
+
position: relative;
|
|
243
|
+
display: block;
|
|
244
|
+
margin: 0.5rem 0; /* = pre: 'my-2' */
|
|
245
|
+
padding: 0;
|
|
246
|
+
max-width: 100%;
|
|
247
|
+
overflow: hidden;
|
|
248
|
+
border: 1px solid oklch(var(--border-surface-default));
|
|
249
|
+
border-radius: 0.5rem;
|
|
250
|
+
background: var(--ck-cm-bg);
|
|
251
|
+
color: var(--ck-cm-foreground);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.ck-milkdown .milkdown .milkdown-code-block.selected {
|
|
255
|
+
outline: 2px solid oklch(var(--border-surface-focus-ring));
|
|
256
|
+
outline-offset: 1px;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.ck-milkdown .milkdown .milkdown-code-block .tools {
|
|
260
|
+
display: flex;
|
|
261
|
+
align-items: center;
|
|
262
|
+
justify-content: space-between;
|
|
263
|
+
gap: 0.5rem;
|
|
264
|
+
padding: 0.5rem 1rem;
|
|
265
|
+
border-bottom: 1px solid oklch(var(--border-surface-default));
|
|
266
|
+
background: oklch(var(--background-surface-muted));
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.ck-milkdown .milkdown .milkdown-code-block .tools .language-button {
|
|
270
|
+
display: inline-flex;
|
|
271
|
+
align-items: center;
|
|
272
|
+
gap: 0.25rem;
|
|
273
|
+
margin: 0;
|
|
274
|
+
padding: 0.125rem 0.375rem;
|
|
275
|
+
border-radius: 0.375rem;
|
|
276
|
+
background: transparent;
|
|
277
|
+
opacity: 1;
|
|
278
|
+
font-family: var(--crepe-font-code);
|
|
279
|
+
font-size: 0.875rem;
|
|
280
|
+
font-weight: 400;
|
|
281
|
+
line-height: 1.25rem;
|
|
282
|
+
color: oklch(var(--content-on-surface-secondary));
|
|
283
|
+
cursor: pointer;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.ck-milkdown .milkdown .milkdown-code-block .tools .language-button:hover {
|
|
287
|
+
background: oklch(var(--overlay-hover-subtle));
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.ck-milkdown
|
|
291
|
+
.milkdown
|
|
292
|
+
.milkdown-code-block
|
|
293
|
+
.tools
|
|
294
|
+
.language-button
|
|
295
|
+
.expand-icon
|
|
296
|
+
svg {
|
|
297
|
+
width: 0.875rem;
|
|
298
|
+
height: 0.875rem;
|
|
299
|
+
color: inherit;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.ck-milkdown .milkdown .milkdown-code-block .tools .tools-button-group {
|
|
303
|
+
display: flex;
|
|
304
|
+
gap: 0.25rem;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.ck-milkdown .milkdown .milkdown-code-block .tools .tools-button-group button {
|
|
308
|
+
display: inline-flex;
|
|
309
|
+
align-items: center;
|
|
310
|
+
justify-content: center;
|
|
311
|
+
gap: 0.25rem;
|
|
312
|
+
height: 1.75rem;
|
|
313
|
+
min-width: 1.75rem;
|
|
314
|
+
padding: 0 0.5rem;
|
|
315
|
+
border-radius: 0.375rem;
|
|
316
|
+
background: transparent;
|
|
317
|
+
opacity: 1;
|
|
318
|
+
font-family: var(--crepe-font-default);
|
|
319
|
+
font-size: 0.75rem;
|
|
320
|
+
font-weight: 500;
|
|
321
|
+
line-height: 1rem;
|
|
322
|
+
color: oklch(var(--content-on-surface-secondary));
|
|
323
|
+
cursor: pointer;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.ck-milkdown
|
|
327
|
+
.milkdown
|
|
328
|
+
.milkdown-code-block
|
|
329
|
+
.tools
|
|
330
|
+
.tools-button-group
|
|
331
|
+
button:first-child,
|
|
332
|
+
.ck-milkdown
|
|
333
|
+
.milkdown
|
|
334
|
+
.milkdown-code-block
|
|
335
|
+
.tools
|
|
336
|
+
.tools-button-group
|
|
337
|
+
button:last-child {
|
|
338
|
+
border-radius: 0.375rem;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
.ck-milkdown
|
|
342
|
+
.milkdown
|
|
343
|
+
.milkdown-code-block
|
|
344
|
+
.tools
|
|
345
|
+
.tools-button-group
|
|
346
|
+
button:hover {
|
|
347
|
+
background: oklch(var(--overlay-hover-subtle));
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.ck-milkdown
|
|
351
|
+
.milkdown
|
|
352
|
+
.milkdown-code-block
|
|
353
|
+
.tools
|
|
354
|
+
.tools-button-group
|
|
355
|
+
button
|
|
356
|
+
svg {
|
|
357
|
+
width: 0.875rem;
|
|
358
|
+
height: 0.875rem;
|
|
359
|
+
color: inherit;
|
|
360
|
+
fill: none;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/* Language picker dropdown: a floating surface like UiPopover. */
|
|
364
|
+
.ck-milkdown .milkdown .milkdown-code-block .list-wrapper {
|
|
365
|
+
border: 1px solid oklch(var(--border-surface-default));
|
|
366
|
+
border-radius: 0.5rem;
|
|
367
|
+
background: oklch(var(--background-surface-floating));
|
|
368
|
+
box-shadow: var(--shadow-md);
|
|
369
|
+
color: oklch(var(--content-on-surface-primary));
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.ck-milkdown .milkdown .milkdown-code-block .search-box {
|
|
373
|
+
outline-color: oklch(var(--border-surface-default));
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.ck-milkdown .milkdown .milkdown-code-block .search-box:has(input:focus) {
|
|
377
|
+
outline: 2px solid oklch(var(--border-surface-focus-ring));
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.ck-milkdown .milkdown .milkdown-code-block .language-list-item {
|
|
381
|
+
font-weight: 400;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/* The CodeMirror surface. `EditorView.theme` emits single-class rules that
|
|
385
|
+
* lose to Crepe's `.milkdown .milkdown-code-block .cm-editor`, so repeat the
|
|
386
|
+
* palette here. */
|
|
387
|
+
.ck-milkdown .milkdown .milkdown-code-block .cm-editor {
|
|
388
|
+
background: var(--ck-cm-bg);
|
|
389
|
+
color: var(--ck-cm-foreground);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.ck-milkdown .milkdown .milkdown-code-block .cm-gutters {
|
|
393
|
+
display: none;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/* Shown while the CodeMirror instance is still mounting. */
|
|
397
|
+
.ck-milkdown .milkdown .milkdown-code-block .milkdown-code-block-placeholder {
|
|
398
|
+
margin: 0;
|
|
399
|
+
padding: 1rem;
|
|
400
|
+
font-family: var(--crepe-font-code);
|
|
401
|
+
font-size: 0.875rem;
|
|
402
|
+
line-height: 1.625;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/* ------------------------------------------------------------------------ */
|
|
406
|
+
/* Floating toolbar and link tooltip */
|
|
407
|
+
/* ------------------------------------------------------------------------ */
|
|
408
|
+
|
|
409
|
+
.ck-milkdown .milkdown .milkdown-toolbar,
|
|
410
|
+
.ck-milkdown .milkdown .milkdown-link-preview > .link-preview,
|
|
411
|
+
.ck-milkdown .milkdown .milkdown-link-edit > .link-edit {
|
|
412
|
+
border: 1px solid oklch(var(--border-surface-default));
|
|
413
|
+
color: oklch(var(--content-on-surface-primary));
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.ck-milkdown .milkdown .milkdown-toolbar .toolbar-item svg {
|
|
417
|
+
width: 1.125rem;
|
|
418
|
+
height: 1.125rem;
|
|
419
|
+
fill: none;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.ck-milkdown .milkdown .milkdown-link-preview svg,
|
|
423
|
+
.ck-milkdown .milkdown .milkdown-link-edit svg {
|
|
424
|
+
fill: none;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
.ck-milkdown .milkdown .milkdown-link-preview > .link-preview > .link-display {
|
|
428
|
+
color: oklch(var(--content-on-surface-link));
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
.ck-milkdown .milkdown .milkdown-link-edit > .link-edit > .input-area {
|
|
432
|
+
color: oklch(var(--content-on-surface-primary));
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.ck-milkdown
|
|
436
|
+
.milkdown
|
|
437
|
+
.milkdown-link-edit
|
|
438
|
+
> .link-edit
|
|
439
|
+
> .input-area::placeholder {
|
|
440
|
+
color: oklch(var(--content-on-surface-muted));
|
|
441
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { CkMarkdownElementClasses } from '../CkMarkdownRenderer';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Markdown WYSIWYG editor built on [Milkdown Crepe](https://milkdown.dev/docs/guide/using-crepe).
|
|
5
|
+
* Its content is styled with the very same per-tag class map that
|
|
6
|
+
* {@link CkMarkdownRenderer} uses, so a message edited here looks identical to
|
|
7
|
+
* the rendered reply — no visual jump between reading and editing.
|
|
8
|
+
*
|
|
9
|
+
* The feature set is deliberately small and chat-oriented: a floating toolbar
|
|
10
|
+
* (bold, italic, strikethrough, inline code, link), bullet / ordered / task
|
|
11
|
+
* lists, blockquotes, links with a hover tooltip, fenced code blocks with syntax
|
|
12
|
+
* highlighting and a copy button, and an empty-document placeholder. Tables,
|
|
13
|
+
* images, LaTeX, slash menus and drag handles are intentionally not enabled.
|
|
14
|
+
*
|
|
15
|
+
* The editor itself loads lazily on mount, so importing this component does not
|
|
16
|
+
* pull ProseMirror / CodeMirror into the consumer's initial bundle.
|
|
17
|
+
*
|
|
18
|
+
* @category Form Inputs
|
|
19
|
+
* @useCases edit an assistant reply before sending, compose a rich prompt, edit a saved note in markdown, inline WYSIWYG editing of a user message
|
|
20
|
+
* @keywords markdown, editor, wysiwyg, milkdown, crepe, prosemirror, rich text, v-model, compose
|
|
21
|
+
* @related CkMarkdownRenderer, CkPromptInput, CkEditableUserMessage
|
|
22
|
+
*/
|
|
23
|
+
export interface CkMilkdownEditorProps {
|
|
24
|
+
/**
|
|
25
|
+
* Markdown source of the document. Supports `v-model`.
|
|
26
|
+
*
|
|
27
|
+
* Changes made in the editor are emitted through `update:modelValue` after
|
|
28
|
+
* Milkdown's ~200 ms debounce. External changes are applied by replacing the
|
|
29
|
+
* whole document; the editor may then emit the same content once in its
|
|
30
|
+
* normalised form (e.g. `*x*` becomes `_x_`).
|
|
31
|
+
*
|
|
32
|
+
* @default ''
|
|
33
|
+
*/
|
|
34
|
+
modelValue?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Text shown when the document is empty. Read once when the editor is
|
|
37
|
+
* created; later changes are ignored.
|
|
38
|
+
*/
|
|
39
|
+
placeholder?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Render the content without allowing edits. The floating toolbar is not
|
|
42
|
+
* shown and the caret is hidden.
|
|
43
|
+
*
|
|
44
|
+
* @default false
|
|
45
|
+
*/
|
|
46
|
+
readonly?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Like `readonly`, but also mutes the content and marks the editor as
|
|
49
|
+
* `aria-disabled`.
|
|
50
|
+
*
|
|
51
|
+
* @default false
|
|
52
|
+
*/
|
|
53
|
+
disabled?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Accessible name of the editable region (`role="textbox"`). Read once when
|
|
56
|
+
* the editor is created.
|
|
57
|
+
*/
|
|
58
|
+
ariaLabel?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Per-tag class overrides, merged over the same defaults
|
|
61
|
+
* {@link CkMarkdownRenderer} uses. Pass the same object to both components to
|
|
62
|
+
* keep them in sync.
|
|
63
|
+
*
|
|
64
|
+
* `li` and `pre` are rendered by Crepe's own node views and are styled by the
|
|
65
|
+
* editor stylesheet instead, so overrides for those two tags are ignored.
|
|
66
|
+
*/
|
|
67
|
+
classes?: CkMarkdownElementClasses;
|
|
68
|
+
/**
|
|
69
|
+
* Move focus into the editor once it has been created.
|
|
70
|
+
*
|
|
71
|
+
* @default false
|
|
72
|
+
*/
|
|
73
|
+
autofocus?: boolean;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Events emitted by {@link CkMilkdownEditor}. */
|
|
77
|
+
export interface CkMilkdownEditorEmits {
|
|
78
|
+
/**
|
|
79
|
+
* Emitted when the document changes. Debounced by Milkdown (~200 ms), so a
|
|
80
|
+
* consumer that submits on a key press should read the exposed
|
|
81
|
+
* `getMarkdown()` instead of relying on the last emitted value.
|
|
82
|
+
*/
|
|
83
|
+
'update:modelValue': [value: string];
|
|
84
|
+
/** Emitted when focus enters the editor (including its toolbar). */
|
|
85
|
+
focus: [];
|
|
86
|
+
/** Emitted when focus leaves the editor and its toolbar entirely. */
|
|
87
|
+
blur: [];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Methods exposed by {@link CkMilkdownEditor} through a template ref. */
|
|
91
|
+
export interface CkMilkdownEditorExposed {
|
|
92
|
+
/** Focus the editable region. No-op until the editor has been created. */
|
|
93
|
+
focus: () => void;
|
|
94
|
+
/**
|
|
95
|
+
* Serialise the current document to markdown synchronously, bypassing the
|
|
96
|
+
* `update:modelValue` debounce. Returns the `modelValue` prop until the
|
|
97
|
+
* editor has been created.
|
|
98
|
+
*/
|
|
99
|
+
getMarkdown: () => string;
|
|
100
|
+
}
|
|
@@ -32,17 +32,17 @@ const labels = useChatKitLabels();
|
|
|
32
32
|
const triggerAriaLabel = computed(
|
|
33
33
|
() =>
|
|
34
34
|
labels.value.modelSelectorAriaLabel ??
|
|
35
|
-
defaultChatKitLabels.modelSelectorAriaLabel
|
|
35
|
+
defaultChatKitLabels.modelSelectorAriaLabel,
|
|
36
36
|
);
|
|
37
37
|
const listAriaLabel = computed(
|
|
38
38
|
() =>
|
|
39
39
|
labels.value.modelSelectorListAriaLabel ??
|
|
40
|
-
defaultChatKitLabels.modelSelectorListAriaLabel
|
|
40
|
+
defaultChatKitLabels.modelSelectorListAriaLabel,
|
|
41
41
|
);
|
|
42
42
|
const placeholderLabel = computed(
|
|
43
43
|
() =>
|
|
44
44
|
labels.value.modelSelectorPlaceholder ??
|
|
45
|
-
defaultChatKitLabels.modelSelectorPlaceholder
|
|
45
|
+
defaultChatKitLabels.modelSelectorPlaceholder,
|
|
46
46
|
);
|
|
47
47
|
|
|
48
48
|
const open = ref(false);
|
|
@@ -29,7 +29,7 @@ import { CkPromptInputDisclaimer } from '@aleph-alpha/chat-kit';
|
|
|
29
29
|
|
|
30
30
|
<template>
|
|
31
31
|
<CkPromptInputDisclaimer
|
|
32
|
-
text="
|
|
32
|
+
text="Chat is an AI system and can make mistakes. Verify answers before you act on them."
|
|
33
33
|
/>
|
|
34
34
|
</template>`;
|
|
35
35
|
|
|
@@ -60,7 +60,7 @@ export const Default: Story = {
|
|
|
60
60
|
components: { CkPromptInputDisclaimer },
|
|
61
61
|
template: `
|
|
62
62
|
<CkPromptInputDisclaimer
|
|
63
|
-
text="
|
|
63
|
+
text="Chat is an AI system and can make mistakes. Verify answers before you act on them."
|
|
64
64
|
/>
|
|
65
65
|
`,
|
|
66
66
|
}),
|
|
@@ -80,3 +80,9 @@ export type {
|
|
|
80
80
|
CkEditableUserMessageEmits,
|
|
81
81
|
CkEditableUserMessageProps,
|
|
82
82
|
} from './CkEditableUserMessage';
|
|
83
|
+
export { CkMilkdownEditor } from './CkMilkdownEditor';
|
|
84
|
+
export type {
|
|
85
|
+
CkMilkdownEditorEmits,
|
|
86
|
+
CkMilkdownEditorExposed,
|
|
87
|
+
CkMilkdownEditorProps,
|
|
88
|
+
} from './CkMilkdownEditor';
|
package/src/components/index.ts
CHANGED
|
@@ -27,6 +27,7 @@ export {
|
|
|
27
27
|
CkStopIcon,
|
|
28
28
|
CkUserMessage,
|
|
29
29
|
CkEditableUserMessage,
|
|
30
|
+
CkMilkdownEditor,
|
|
30
31
|
} from './base';
|
|
31
32
|
export type {
|
|
32
33
|
CkAgentMessageHeaderProps,
|
|
@@ -66,6 +67,9 @@ export type {
|
|
|
66
67
|
CkUserMessageProps,
|
|
67
68
|
CkEditableUserMessageProps,
|
|
68
69
|
CkEditableUserMessageEmits,
|
|
70
|
+
CkMilkdownEditorEmits,
|
|
71
|
+
CkMilkdownEditorExposed,
|
|
72
|
+
CkMilkdownEditorProps,
|
|
69
73
|
} from './base';
|
|
70
74
|
|
|
71
75
|
// Composed (pattern) components
|