@gitlab/duo-ui 15.3.0 → 15.4.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.
Files changed (42) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/components/agentic_chat/agentic_duo_chat.js +1 -1
  3. package/dist/components/agentic_chat/web_agentic_duo_chat.js +1 -1
  4. package/dist/components/chat/components/duo_chat_message/duo_chat_message.js +21 -28
  5. package/dist/components/chat/components/duo_chat_message/markdown_renderer.js +102 -0
  6. package/dist/components/chat/components/duo_chat_message/message_types/message_agent.js +5 -6
  7. package/dist/components/chat/components/duo_chat_message/message_types/message_base.js +27 -14
  8. package/dist/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.js +1 -1
  9. package/dist/components/chat/components/duo_chat_message_tool_approval/components/base_tool_params.js +1 -1
  10. package/dist/components/chat/components/duo_chat_message_tool_approval/components/create_commit_tool_params.js +9 -3
  11. package/dist/components/chat/components/duo_chat_message_tool_approval/components/pre_block.js +11 -6
  12. package/dist/components/chat/components/duo_chat_message_tool_approval/components/tool_params_json_view.js +1 -1
  13. package/dist/components/chat/duo_chat.js +1 -1
  14. package/dist/components/chat/markdown_renderer.js +31 -5
  15. package/dist/components/chat/mock_data.js +28 -2
  16. package/dist/components/chat/web_duo_chat.js +1 -1
  17. package/dist/components/ui/duo_layout/duo_layout.js +1 -1
  18. package/dist/components.css +1 -1
  19. package/dist/components.css.map +1 -1
  20. package/dist/utils/highlight.js +483 -0
  21. package/package.json +3 -2
  22. package/src/components/agentic_chat/agentic_duo_chat.scss +2 -1
  23. package/src/components/agentic_chat/agentic_duo_chat.vue +1 -1
  24. package/src/components/agentic_chat/web_agentic_duo_chat.vue +1 -1
  25. package/src/components/chat/components/duo_chat_message/duo_chat_message.scss +15 -19
  26. package/src/components/chat/components/duo_chat_message/duo_chat_message.vue +30 -28
  27. package/src/components/chat/components/duo_chat_message/markdown_renderer.vue +71 -0
  28. package/src/components/chat/components/duo_chat_message/message_types/message_agent.vue +8 -8
  29. package/src/components/chat/components/duo_chat_message/message_types/message_base.vue +24 -14
  30. package/src/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.vue +1 -1
  31. package/src/components/chat/components/duo_chat_message_tool_approval/components/base_tool_params.vue +1 -1
  32. package/src/components/chat/components/duo_chat_message_tool_approval/components/create_commit_tool_params.vue +7 -2
  33. package/src/components/chat/components/duo_chat_message_tool_approval/components/pre_block.vue +11 -6
  34. package/src/components/chat/components/duo_chat_message_tool_approval/components/tool_params_json_view.vue +1 -1
  35. package/src/components/chat/duo_chat.vue +1 -1
  36. package/src/components/chat/markdown_renderer.js +37 -6
  37. package/src/components/chat/mock_data.js +30 -1
  38. package/src/components/chat/web_duo_chat.vue +1 -1
  39. package/src/components/ui/duo_layout/duo_layout.vue +1 -1
  40. package/src/utils/highlight.js +562 -0
  41. package/dist/components/chat/components/duo_chat_message_tool_approval/services/highlight.js +0 -21
  42. package/src/components/chat/components/duo_chat_message_tool_approval/services/highlight.js +0 -18
@@ -0,0 +1,483 @@
1
+ import highlightjs from 'highlight.js/lib/core';
2
+
3
+ const languageLoaders = {
4
+ '1c': () => import('highlight.js/lib/languages/1c'),
5
+ abnf: () => import('highlight.js/lib/languages/abnf'),
6
+ accesslog: () => import('highlight.js/lib/languages/accesslog'),
7
+ actionscript: () => import('highlight.js/lib/languages/actionscript'),
8
+ ada: () => import('highlight.js/lib/languages/ada'),
9
+ angelscript: () => import('highlight.js/lib/languages/angelscript'),
10
+ apache: () => import('highlight.js/lib/languages/apache'),
11
+ applescript: () => import('highlight.js/lib/languages/applescript'),
12
+ arcade: () => import('highlight.js/lib/languages/arcade'),
13
+ arduino: () => import('highlight.js/lib/languages/arduino'),
14
+ armasm: () => import('highlight.js/lib/languages/armasm'),
15
+ asciidoc: () => import('highlight.js/lib/languages/asciidoc'),
16
+ aspectj: () => import('highlight.js/lib/languages/aspectj'),
17
+ autohotkey: () => import('highlight.js/lib/languages/autohotkey'),
18
+ autoit: () => import('highlight.js/lib/languages/autoit'),
19
+ avrasm: () => import('highlight.js/lib/languages/avrasm'),
20
+ awk: () => import('highlight.js/lib/languages/awk'),
21
+ axapta: () => import('highlight.js/lib/languages/axapta'),
22
+ bash: () => import('highlight.js/lib/languages/bash'),
23
+ basic: () => import('highlight.js/lib/languages/basic'),
24
+ bnf: () => import('highlight.js/lib/languages/bnf'),
25
+ brainfuck: () => import('highlight.js/lib/languages/brainfuck'),
26
+ c: () => import('highlight.js/lib/languages/c'),
27
+ cal: () => import('highlight.js/lib/languages/cal'),
28
+ capnproto: () => import('highlight.js/lib/languages/capnproto'),
29
+ ceylon: () => import('highlight.js/lib/languages/ceylon'),
30
+ clean: () => import('highlight.js/lib/languages/clean'),
31
+ 'clojure-repl': () => import('highlight.js/lib/languages/clojure-repl'),
32
+ clojure: () => import('highlight.js/lib/languages/clojure'),
33
+ cmake: () => import('highlight.js/lib/languages/cmake'),
34
+ coffeescript: () => import('highlight.js/lib/languages/coffeescript'),
35
+ coq: () => import('highlight.js/lib/languages/coq'),
36
+ cos: () => import('highlight.js/lib/languages/cos'),
37
+ cpp: () => import('highlight.js/lib/languages/cpp'),
38
+ crmsh: () => import('highlight.js/lib/languages/crmsh'),
39
+ crystal: () => import('highlight.js/lib/languages/crystal'),
40
+ csharp: () => import('highlight.js/lib/languages/csharp'),
41
+ csp: () => import('highlight.js/lib/languages/csp'),
42
+ css: () => import('highlight.js/lib/languages/css'),
43
+ d: () => import('highlight.js/lib/languages/d'),
44
+ dart: () => import('highlight.js/lib/languages/dart'),
45
+ delphi: () => import('highlight.js/lib/languages/delphi'),
46
+ diff: () => import('highlight.js/lib/languages/diff'),
47
+ django: () => import('highlight.js/lib/languages/django'),
48
+ dns: () => import('highlight.js/lib/languages/dns'),
49
+ dockerfile: () => import('highlight.js/lib/languages/dockerfile'),
50
+ dos: () => import('highlight.js/lib/languages/dos'),
51
+ dsconfig: () => import('highlight.js/lib/languages/dsconfig'),
52
+ dts: () => import('highlight.js/lib/languages/dts'),
53
+ dust: () => import('highlight.js/lib/languages/dust'),
54
+ ebnf: () => import('highlight.js/lib/languages/ebnf'),
55
+ elixir: () => import('highlight.js/lib/languages/elixir'),
56
+ elm: () => import('highlight.js/lib/languages/elm'),
57
+ erb: () => import('highlight.js/lib/languages/erb'),
58
+ 'erlang-repl': () => import('highlight.js/lib/languages/erlang-repl'),
59
+ erlang: () => import('highlight.js/lib/languages/erlang'),
60
+ excel: () => import('highlight.js/lib/languages/excel'),
61
+ fix: () => import('highlight.js/lib/languages/fix'),
62
+ flix: () => import('highlight.js/lib/languages/flix'),
63
+ fortran: () => import('highlight.js/lib/languages/fortran'),
64
+ fsharp: () => import('highlight.js/lib/languages/fsharp'),
65
+ gams: () => import('highlight.js/lib/languages/gams'),
66
+ gauss: () => import('highlight.js/lib/languages/gauss'),
67
+ gcode: () => import('highlight.js/lib/languages/gcode'),
68
+ gherkin: () => import('highlight.js/lib/languages/gherkin'),
69
+ glsl: () => import('highlight.js/lib/languages/glsl'),
70
+ gml: () => import('highlight.js/lib/languages/gml'),
71
+ go: () => import('highlight.js/lib/languages/go'),
72
+ golo: () => import('highlight.js/lib/languages/golo'),
73
+ gradle: () => import('highlight.js/lib/languages/gradle'),
74
+ graphql: () => import('highlight.js/lib/languages/graphql'),
75
+ groovy: () => import('highlight.js/lib/languages/groovy'),
76
+ haml: () => import('highlight.js/lib/languages/haml'),
77
+ handlebars: () => import('highlight.js/lib/languages/handlebars'),
78
+ haskell: () => import('highlight.js/lib/languages/haskell'),
79
+ haxe: () => import('highlight.js/lib/languages/haxe'),
80
+ hsp: () => import('highlight.js/lib/languages/hsp'),
81
+ html: () => import('highlight.js/lib/languages/xml'),
82
+ http: () => import('highlight.js/lib/languages/http'),
83
+ hy: () => import('highlight.js/lib/languages/hy'),
84
+ inform7: () => import('highlight.js/lib/languages/inform7'),
85
+ ini: () => import('highlight.js/lib/languages/ini'),
86
+ irpf90: () => import('highlight.js/lib/languages/irpf90'),
87
+ isbl: () => import('highlight.js/lib/languages/isbl'),
88
+ java: () => import('highlight.js/lib/languages/java'),
89
+ javascript: () => import('highlight.js/lib/languages/javascript'),
90
+ 'jboss-cli': () => import('highlight.js/lib/languages/jboss-cli'),
91
+ json: () => import('highlight.js/lib/languages/json'),
92
+ 'julia-repl': () => import('highlight.js/lib/languages/julia-repl'),
93
+ julia: () => import('highlight.js/lib/languages/julia'),
94
+ kotlin: () => import('highlight.js/lib/languages/kotlin'),
95
+ lasso: () => import('highlight.js/lib/languages/lasso'),
96
+ latex: () => import('highlight.js/lib/languages/latex'),
97
+ ldif: () => import('highlight.js/lib/languages/ldif'),
98
+ leaf: () => import('highlight.js/lib/languages/leaf'),
99
+ less: () => import('highlight.js/lib/languages/less'),
100
+ lisp: () => import('highlight.js/lib/languages/lisp'),
101
+ livecodeserver: () => import('highlight.js/lib/languages/livecodeserver'),
102
+ livescript: () => import('highlight.js/lib/languages/livescript'),
103
+ llvm: () => import('highlight.js/lib/languages/llvm'),
104
+ lsl: () => import('highlight.js/lib/languages/lsl'),
105
+ lua: () => import('highlight.js/lib/languages/lua'),
106
+ makefile: () => import('highlight.js/lib/languages/makefile'),
107
+ markdown: () => import('highlight.js/lib/languages/markdown'),
108
+ mathematica: () => import('highlight.js/lib/languages/mathematica'),
109
+ matlab: () => import('highlight.js/lib/languages/matlab'),
110
+ maxima: () => import('highlight.js/lib/languages/maxima'),
111
+ mel: () => import('highlight.js/lib/languages/mel'),
112
+ mercury: () => import('highlight.js/lib/languages/mercury'),
113
+ mipsasm: () => import('highlight.js/lib/languages/mipsasm'),
114
+ mizar: () => import('highlight.js/lib/languages/mizar'),
115
+ mojolicious: () => import('highlight.js/lib/languages/mojolicious'),
116
+ monkey: () => import('highlight.js/lib/languages/monkey'),
117
+ moonscript: () => import('highlight.js/lib/languages/moonscript'),
118
+ n1ql: () => import('highlight.js/lib/languages/n1ql'),
119
+ nestedtext: () => import('highlight.js/lib/languages/nestedtext'),
120
+ nginx: () => import('highlight.js/lib/languages/nginx'),
121
+ nim: () => import('highlight.js/lib/languages/nim'),
122
+ nix: () => import('highlight.js/lib/languages/nix'),
123
+ 'node-repl': () => import('highlight.js/lib/languages/node-repl'),
124
+ nsis: () => import('highlight.js/lib/languages/nsis'),
125
+ objectivec: () => import('highlight.js/lib/languages/objectivec'),
126
+ ocaml: () => import('highlight.js/lib/languages/ocaml'),
127
+ openscad: () => import('highlight.js/lib/languages/openscad'),
128
+ oxygene: () => import('highlight.js/lib/languages/oxygene'),
129
+ parser3: () => import('highlight.js/lib/languages/parser3'),
130
+ perl: () => import('highlight.js/lib/languages/perl'),
131
+ pf: () => import('highlight.js/lib/languages/pf'),
132
+ pgsql: () => import('highlight.js/lib/languages/pgsql'),
133
+ 'php-template': () => import('highlight.js/lib/languages/php-template'),
134
+ php: () => import('highlight.js/lib/languages/php'),
135
+ plaintext: () => import('highlight.js/lib/languages/plaintext'),
136
+ pony: () => import('highlight.js/lib/languages/pony'),
137
+ powershell: () => import('highlight.js/lib/languages/powershell'),
138
+ processing: () => import('highlight.js/lib/languages/processing'),
139
+ profile: () => import('highlight.js/lib/languages/profile'),
140
+ prolog: () => import('highlight.js/lib/languages/prolog'),
141
+ properties: () => import('highlight.js/lib/languages/properties'),
142
+ protobuf: () => import('highlight.js/lib/languages/protobuf'),
143
+ puppet: () => import('highlight.js/lib/languages/puppet'),
144
+ purebasic: () => import('highlight.js/lib/languages/purebasic'),
145
+ 'python-repl': () => import('highlight.js/lib/languages/python-repl'),
146
+ python: () => import('highlight.js/lib/languages/python'),
147
+ q: () => import('highlight.js/lib/languages/q'),
148
+ qml: () => import('highlight.js/lib/languages/qml'),
149
+ r: () => import('highlight.js/lib/languages/r'),
150
+ reasonml: () => import('highlight.js/lib/languages/reasonml'),
151
+ rib: () => import('highlight.js/lib/languages/rib'),
152
+ roboconf: () => import('highlight.js/lib/languages/roboconf'),
153
+ routeros: () => import('highlight.js/lib/languages/routeros'),
154
+ rsl: () => import('highlight.js/lib/languages/rsl'),
155
+ ruby: () => import('highlight.js/lib/languages/ruby'),
156
+ ruleslanguage: () => import('highlight.js/lib/languages/ruleslanguage'),
157
+ rust: () => import('highlight.js/lib/languages/rust'),
158
+ sas: () => import('highlight.js/lib/languages/sas'),
159
+ scala: () => import('highlight.js/lib/languages/scala'),
160
+ scheme: () => import('highlight.js/lib/languages/scheme'),
161
+ scilab: () => import('highlight.js/lib/languages/scilab'),
162
+ scss: () => import('highlight.js/lib/languages/scss'),
163
+ shell: () => import('highlight.js/lib/languages/shell'),
164
+ smali: () => import('highlight.js/lib/languages/smali'),
165
+ smalltalk: () => import('highlight.js/lib/languages/smalltalk'),
166
+ sml: () => import('highlight.js/lib/languages/sml'),
167
+ sqf: () => import('highlight.js/lib/languages/sqf'),
168
+ sql: () => import('highlight.js/lib/languages/sql'),
169
+ stan: () => import('highlight.js/lib/languages/stan'),
170
+ stata: () => import('highlight.js/lib/languages/stata'),
171
+ step21: () => import('highlight.js/lib/languages/step21'),
172
+ stylus: () => import('highlight.js/lib/languages/stylus'),
173
+ subunit: () => import('highlight.js/lib/languages/subunit'),
174
+ swift: () => import('highlight.js/lib/languages/swift'),
175
+ taggerscript: () => import('highlight.js/lib/languages/taggerscript'),
176
+ tap: () => import('highlight.js/lib/languages/tap'),
177
+ tcl: () => import('highlight.js/lib/languages/tcl'),
178
+ thrift: () => import('highlight.js/lib/languages/thrift'),
179
+ tp: () => import('highlight.js/lib/languages/tp'),
180
+ twig: () => import('highlight.js/lib/languages/twig'),
181
+ typescript: () => import('highlight.js/lib/languages/typescript'),
182
+ vala: () => import('highlight.js/lib/languages/vala'),
183
+ vbnet: () => import('highlight.js/lib/languages/vbnet'),
184
+ 'vbscript-html': () => import('highlight.js/lib/languages/vbscript-html'),
185
+ vbscript: () => import('highlight.js/lib/languages/vbscript'),
186
+ verilog: () => import('highlight.js/lib/languages/verilog'),
187
+ vhdl: () => import('highlight.js/lib/languages/vhdl'),
188
+ vim: () => import('highlight.js/lib/languages/vim'),
189
+ wasm: () => import('highlight.js/lib/languages/wasm'),
190
+ wren: () => import('highlight.js/lib/languages/wren'),
191
+ x86asm: () => import('highlight.js/lib/languages/x86asm'),
192
+ xl: () => import('highlight.js/lib/languages/xl'),
193
+ xml: () => import('highlight.js/lib/languages/xml'),
194
+ xquery: () => import('highlight.js/lib/languages/xquery'),
195
+ yaml: () => import('highlight.js/lib/languages/yaml'),
196
+ zephir: () => import('highlight.js/lib/languages/zephir')
197
+ };
198
+ const fileExtensionToLanguage = {
199
+ // JavaScript/TypeScript
200
+ js: 'javascript',
201
+ mjs: 'javascript',
202
+ cjs: 'javascript',
203
+ jsx: 'javascript',
204
+ ts: 'typescript',
205
+ tsx: 'typescript',
206
+ mts: 'typescript',
207
+ cts: 'typescript',
208
+ // Web
209
+ html: 'html',
210
+ htm: 'html',
211
+ xml: 'xml',
212
+ svg: 'xml',
213
+ css: 'css',
214
+ scss: 'scss',
215
+ sass: 'scss',
216
+ less: 'less',
217
+ // Python
218
+ py: 'python',
219
+ pyw: 'python',
220
+ pyi: 'python',
221
+ // Java/JVM
222
+ java: 'java',
223
+ kt: 'kotlin',
224
+ kts: 'kotlin',
225
+ scala: 'scala',
226
+ groovy: 'groovy',
227
+ gradle: 'gradle',
228
+ // C/C++
229
+ c: 'c',
230
+ h: 'c',
231
+ cpp: 'cpp',
232
+ cc: 'cpp',
233
+ cxx: 'cpp',
234
+ hpp: 'cpp',
235
+ hh: 'cpp',
236
+ hxx: 'cpp',
237
+ // C#
238
+ cs: 'csharp',
239
+ csx: 'csharp',
240
+ // PHP
241
+ php: 'php',
242
+ phtml: 'php',
243
+ php3: 'php',
244
+ php4: 'php',
245
+ php5: 'php',
246
+ phps: 'php',
247
+ // Ruby
248
+ rb: 'ruby',
249
+ rake: 'ruby',
250
+ gemspec: 'ruby',
251
+ // Go
252
+ go: 'go',
253
+ // Rust
254
+ rs: 'rust',
255
+ // Swift
256
+ swift: 'swift',
257
+ // Shell
258
+ sh: 'bash',
259
+ bash: 'bash',
260
+ zsh: 'bash',
261
+ fish: 'shell',
262
+ bat: 'dos',
263
+ cmd: 'dos',
264
+ ps1: 'powershell',
265
+ // Config/Data
266
+ json: 'json',
267
+ yaml: 'yaml',
268
+ yml: 'yaml',
269
+ toml: 'ini',
270
+ ini: 'ini',
271
+ cfg: 'ini',
272
+ conf: 'ini',
273
+ properties: 'properties',
274
+ // Markdown/Docs
275
+ md: 'markdown',
276
+ markdown: 'markdown',
277
+ adoc: 'asciidoc',
278
+ asciidoc: 'asciidoc',
279
+ rst: 'plaintext',
280
+ tex: 'latex',
281
+ // SQL
282
+ sql: 'sql',
283
+ // Perl
284
+ pl: 'perl',
285
+ pm: 'perl',
286
+ // R
287
+ r: 'r',
288
+ R: 'r',
289
+ // Lua
290
+ lua: 'lua',
291
+ // Vim
292
+ vim: 'vim',
293
+ // Dockerfile
294
+ Dockerfile: 'dockerfile',
295
+ dockerfile: 'dockerfile',
296
+ // Makefile
297
+ Makefile: 'makefile',
298
+ mk: 'makefile',
299
+ // Diff/Patch
300
+ diff: 'diff',
301
+ patch: 'diff',
302
+ // Elixir
303
+ ex: 'elixir',
304
+ exs: 'elixir',
305
+ // Erlang
306
+ erl: 'erlang',
307
+ hrl: 'erlang',
308
+ // Haskell
309
+ hs: 'haskell',
310
+ lhs: 'haskell',
311
+ // Clojure
312
+ clj: 'clojure',
313
+ cljs: 'clojure',
314
+ cljc: 'clojure',
315
+ // Dart
316
+ dart: 'dart',
317
+ // F#
318
+ fs: 'fsharp',
319
+ fsi: 'fsharp',
320
+ fsx: 'fsharp',
321
+ // OCaml
322
+ ml: 'ocaml',
323
+ mli: 'ocaml',
324
+ // Lisp
325
+ lisp: 'lisp',
326
+ lsp: 'lisp',
327
+ // Scheme
328
+ scm: 'scheme',
329
+ ss: 'scheme',
330
+ // Julia
331
+ jl: 'julia',
332
+ // Nim
333
+ nim: 'nim',
334
+ // Crystal
335
+ cr: 'crystal',
336
+ // D
337
+ d: 'd',
338
+ // Fortran
339
+ f: 'fortran',
340
+ f90: 'fortran',
341
+ f95: 'fortran',
342
+ // Pascal/Delphi
343
+ pas: 'delphi',
344
+ dpr: 'delphi',
345
+ // Ada
346
+ ada: 'ada',
347
+ adb: 'ada',
348
+ ads: 'ada',
349
+ // COBOL
350
+ cob: 'coq',
351
+ cbl: 'coq',
352
+ // Assembly
353
+ asm: 'x86asm',
354
+ s: 'armasm',
355
+ // Verilog/VHDL
356
+ v: 'verilog',
357
+ vh: 'verilog',
358
+ vhd: 'vhdl',
359
+ vhdl: 'vhdl',
360
+ // GraphQL
361
+ graphql: 'graphql',
362
+ gql: 'graphql',
363
+ // Protobuf
364
+ proto: 'protobuf',
365
+ // Nginx
366
+ nginx: 'nginx',
367
+ // Apache
368
+ htaccess: 'apache',
369
+ // CMake
370
+ 'CMakeLists.txt': 'cmake',
371
+ cmake: 'cmake',
372
+ // Handlebars
373
+ hbs: 'handlebars',
374
+ handlebars: 'handlebars',
375
+ // Django
376
+ djhtml: 'django',
377
+ // ERB
378
+ erb: 'erb',
379
+ // Haml
380
+ haml: 'haml',
381
+ // Pug
382
+ pug: 'plaintext',
383
+ jade: 'plaintext',
384
+ // CoffeeScript
385
+ coffee: 'coffeescript',
386
+ // Elm
387
+ elm: 'elm',
388
+ // ReasonML
389
+ re: 'reasonml',
390
+ rei: 'reasonml',
391
+ // Haxe
392
+ hx: 'haxe',
393
+ // ActionScript
394
+ as: 'actionscript',
395
+ // VB.NET
396
+ vb: 'vbnet',
397
+ // VBScript
398
+ vbs: 'vbscript',
399
+ // AutoHotkey
400
+ ahk: 'autohotkey',
401
+ // PowerShell
402
+ psm1: 'powershell',
403
+ psd1: 'powershell',
404
+ // Puppet
405
+ pp: 'puppet',
406
+ // Terraform
407
+ tf: 'plaintext',
408
+ tfvars: 'plaintext',
409
+ // Nix
410
+ nix: 'nix',
411
+ // Awk
412
+ awk: 'awk',
413
+ // Tcl
414
+ tcl: 'tcl',
415
+ // Prolog
416
+ pro: 'prolog',
417
+ // MATLAB
418
+ m: 'matlab',
419
+ // Mathematica
420
+ nb: 'mathematica',
421
+ wl: 'mathematica',
422
+ // SAS
423
+ sas: 'sas',
424
+ // Stata
425
+ do: 'stata',
426
+ ado: 'stata',
427
+ // GLSL
428
+ glsl: 'glsl',
429
+ vert: 'glsl',
430
+ frag: 'glsl',
431
+ // WebAssembly
432
+ wasm: 'wasm',
433
+ wat: 'wasm',
434
+ // Thrift
435
+ thrift: 'thrift',
436
+ // Stylus
437
+ styl: 'stylus',
438
+ // Twig
439
+ twig: 'twig',
440
+ // Smarty
441
+ tpl: 'plaintext',
442
+ // Dust
443
+ dust: 'dust'
444
+ };
445
+ const loadLanguagePackages = async function () {
446
+ let languages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
447
+ try {
448
+ await Promise.all(languages.map(async language => {
449
+ // Check if language is a file extension and map it to the actual language
450
+ const actualLanguage = fileExtensionToLanguage[language] || language;
451
+ const loader = languageLoaders[actualLanguage];
452
+ if (!highlightjs.listLanguages().includes(actualLanguage) && loader) {
453
+ const languageModule = await loader();
454
+ highlightjs.registerLanguage(actualLanguage, languageModule.default);
455
+ highlightjs.registerAliases([language], {
456
+ languageName: actualLanguage
457
+ });
458
+ }
459
+ }));
460
+ } catch (e) {
461
+ throw Error('Could not load highlight.js languages for duo chat syntax highlighting');
462
+ }
463
+ };
464
+ const highlightElement = async (element, languages) => {
465
+ // eslint-disable-next-line no-console
466
+ await loadLanguagePackages(languages);
467
+ if (typeof window.requestIdleCallback === 'function') {
468
+ window.requestIdleCallback(() => highlightjs.highlightElement(element), {
469
+ timeout: 500
470
+ });
471
+ } else {
472
+ window.requestAnimationFrame(() => highlightjs.highlightElement(element));
473
+ }
474
+ };
475
+ const highlightCode = async (code, languages) => {
476
+ await loadLanguagePackages(languages);
477
+ const language = languages.pop();
478
+ return highlightjs.listLanguages().includes(language) ? highlightjs.highlight(code, {
479
+ language
480
+ }).value : code;
481
+ };
482
+
483
+ export { fileExtensionToLanguage, highlightCode, highlightElement, languageLoaders };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/duo-ui",
3
- "version": "15.3.0",
3
+ "version": "15.4.0",
4
4
  "description": "Duo UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -70,6 +70,7 @@
70
70
  "lodash": "^4.17.20",
71
71
  "marked": "^12.0.0",
72
72
  "marked-bidi": "^1.0.8",
73
+ "marked-highlight": "^2.2.3",
73
74
  "popper.js": "^1.16.1",
74
75
  "portal-vue": "^2.1.7",
75
76
  "vue-functional-data-merge": "^3.1.0",
@@ -103,7 +104,7 @@
103
104
  "@gitlab/eslint-plugin": "21.2.1",
104
105
  "@gitlab/fonts": "^1.3.1",
105
106
  "@gitlab/stylelint-config": "6.2.2",
106
- "@gitlab/svgs": "^3.150.0",
107
+ "@gitlab/svgs": "^3.152.0",
107
108
  "@gitlab/ui": "^125.0.0",
108
109
  "@jest/test-sequencer": "^29.7.0",
109
110
  "@rollup/plugin-commonjs": "^11.1.0",
@@ -290,7 +290,6 @@ $drawer-width: 400px;
290
290
  @apply gl-py-3;
291
291
  @apply gl-px-4;
292
292
  box-shadow: inset 0 0 0 $gl-border-size-1 $gray-100;
293
- @apply gl-my-7;
294
293
  @apply gl-overflow-auto;
295
294
 
296
295
  code {
@@ -298,6 +297,8 @@ $drawer-width: 400px;
298
297
  @apply gl-rounded-none;
299
298
  @apply gl-text-gray-900;
300
299
  @apply gl-p-0;
300
+ @apply gl-overflow-initial;
301
+ @apply gl-inline;
301
302
  }
302
303
  }
303
304
 
@@ -840,7 +840,7 @@ export default {
840
840
  'resizable-content': shouldRenderResizable,
841
841
  'duo-chat-drawer': !shouldRenderResizable,
842
842
  }"
843
- class="markdown-code-block duo-chat gl-bottom-0 gl-flex gl-max-h-full gl-flex-col"
843
+ class="duo-chat gl-bottom-0 gl-flex gl-max-h-full gl-flex-col"
844
844
  role="complementary"
845
845
  data-testid="chat-component"
846
846
  >
@@ -846,7 +846,7 @@ export default {
846
846
  <template>
847
847
  <div
848
848
  id="chat-component"
849
- class="markdown-code-block duo-chat web-only gl-bottom-0 gl-flex gl-max-h-full gl-flex-grow gl-flex-col"
849
+ class="duo-chat web-only gl-bottom-0 gl-flex gl-max-h-full gl-flex-grow gl-flex-col"
850
850
  role="complementary"
851
851
  data-testid="chat-component"
852
852
  >
@@ -13,8 +13,7 @@ $duo-code-scrim-top-gradient: linear-gradient(to top, rgba($gray-10, 0), $gray-1
13
13
 
14
14
  pre {
15
15
  box-shadow: none !important;
16
- color: var(--duo-chat-message-pre-color, inherit) !important;
17
- @apply gl-border gl-max-h-[60vh] gl-px-4 gl-py-3 gl-text-inherit;
16
+ @apply gl-border gl-max-h-[60vh] gl-scroll-smooth gl-px-4 gl-py-3 gl-text-inherit;
18
17
  background-color: var(--gl-background-color-preformat, var(--gl-background-color-default));
19
18
 
20
19
  &::before,
@@ -44,9 +43,10 @@ $duo-code-scrim-top-gradient: linear-gradient(to top, rgba($gray-10, 0), $gray-1
44
43
 
45
44
  pre code {
46
45
  @apply gl-text-sm;
47
- @apply gl-leading-1;
48
46
  @apply gl-bg-transparent;
49
- white-space: inherit;
47
+ @apply gl-block;
48
+ @apply gl-whitespace-pre-wrap;
49
+ @apply gl-break-all;
50
50
  }
51
51
 
52
52
  p:not(:last-of-type) {
@@ -87,15 +87,6 @@ $duo-code-scrim-top-gradient: linear-gradient(to top, rgba($gray-10, 0), $gray-1
87
87
  copy-code {
88
88
  margin-right: $gl-spacing-scale-8;
89
89
  }
90
-
91
- .js-markdown-code.markdown-code-block:hover {
92
- copy-code,
93
- copy-code:focus-within,
94
- insert-code-snippet,
95
- insert-code-snippet:focus-within {
96
- @apply gl-opacity-10;
97
- }
98
- }
99
90
  }
100
91
 
101
92
  .insert-code-hidden {
@@ -108,13 +99,18 @@ $duo-code-scrim-top-gradient: linear-gradient(to top, rgba($gray-10, 0), $gray-1
108
99
  }
109
100
  }
110
101
 
111
- .duo-message-pre-block:focus,
112
- .duo-message-pre-block:hover {
113
- .copy-to-clipboard-button-container {
114
- opacity: 1;
102
+ .duo-chat-message-complete {
103
+ .duo-message-pre-block:focus,
104
+ .duo-message-pre-block:hover,
105
+ .duo-message-pre-block:has(button:focus) {
106
+ copy-code,
107
+ insert-code-snippet,
108
+ .copy-to-clipboard-button-container {
109
+ opacity: 1;
110
+ }
115
111
  }
116
112
  }
117
113
 
118
- .duo-message-pre-block .copy-to-clipboard-button-container:has(button:focus) {
119
- opacity: 1;
114
+ .duo-chat-message-error > p {
115
+ margin: 0;
120
116
  }