artifactuse 0.2.0 → 0.2.2

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.
@@ -131,6 +131,40 @@ function getLanguageDisplayName(language) {
131
131
  form: 'Form',
132
132
  social: 'Social Preview',
133
133
  txt: 'Plain Text',
134
+ plaintext: 'Plain Text',
135
+ text: 'Plain Text',
136
+ less: 'Less',
137
+ sass: 'Sass',
138
+ scss: 'SCSS',
139
+ lua: 'Lua',
140
+ perl: 'Perl',
141
+ pl: 'Perl',
142
+ r: 'R',
143
+ dart: 'Dart',
144
+ elixir: 'Elixir',
145
+ ex: 'Elixir',
146
+ haskell: 'Haskell',
147
+ hs: 'Haskell',
148
+ clojure: 'Clojure',
149
+ clj: 'Clojure',
150
+ erlang: 'Erlang',
151
+ erl: 'Erlang',
152
+ objectivec: 'Objective-C',
153
+ objc: 'Objective-C',
154
+ m: 'Objective-C',
155
+ toml: 'TOML',
156
+ ini: 'INI',
157
+ env: 'Environment',
158
+ makefile: 'Makefile',
159
+ cmake: 'CMake',
160
+ terraform: 'Terraform',
161
+ tf: 'Terraform',
162
+ hcl: 'HCL',
163
+ protobuf: 'Protocol Buffers',
164
+ proto: 'Protocol Buffers',
165
+ zig: 'Zig',
166
+ nim: 'Nim',
167
+ v: 'V',
134
168
  };
135
169
  return names[language?.toLowerCase()] || language?.toUpperCase() || 'Code';
136
170
  }
@@ -180,6 +214,41 @@ function getFileExtension$1(language) {
180
214
  svg: 'svg',
181
215
  form: 'json',
182
216
  social: 'json',
217
+ txt: 'txt',
218
+ plaintext: 'txt',
219
+ text: 'txt',
220
+ less: 'less',
221
+ sass: 'sass',
222
+ scss: 'scss',
223
+ lua: 'lua',
224
+ perl: 'pl',
225
+ pl: 'pl',
226
+ r: 'r',
227
+ dart: 'dart',
228
+ elixir: 'ex',
229
+ ex: 'ex',
230
+ haskell: 'hs',
231
+ hs: 'hs',
232
+ clojure: 'clj',
233
+ clj: 'clj',
234
+ erlang: 'erl',
235
+ erl: 'erl',
236
+ objectivec: 'm',
237
+ objc: 'm',
238
+ m: 'm',
239
+ toml: 'toml',
240
+ ini: 'ini',
241
+ env: 'env',
242
+ makefile: 'mk',
243
+ cmake: 'cmake',
244
+ terraform: 'tf',
245
+ tf: 'tf',
246
+ hcl: 'hcl',
247
+ protobuf: 'proto',
248
+ proto: 'proto',
249
+ zig: 'zig',
250
+ nim: 'nim',
251
+ v: 'v',
183
252
  };
184
253
  return extensions[language?.toLowerCase()] || 'txt';
185
254
  }
@@ -217,6 +286,30 @@ function getLanguageFromExtension(ext) {
217
286
  svg: 'svg',
218
287
  diff: 'diff',
219
288
  patch: 'patch',
289
+ txt: 'txt',
290
+ less: 'less',
291
+ sass: 'sass',
292
+ scss: 'scss',
293
+ lua: 'lua',
294
+ pl: 'perl',
295
+ r: 'r',
296
+ dart: 'dart',
297
+ ex: 'elixir',
298
+ exs: 'elixir',
299
+ hs: 'haskell',
300
+ clj: 'clojure',
301
+ erl: 'erlang',
302
+ m: 'objectivec',
303
+ toml: 'toml',
304
+ ini: 'ini',
305
+ env: 'env',
306
+ cmake: 'cmake',
307
+ tf: 'terraform',
308
+ hcl: 'hcl',
309
+ proto: 'proto',
310
+ zig: 'zig',
311
+ nim: 'nim',
312
+ v: 'v',
220
313
  };
221
314
  return map[ext?.toLowerCase()] || null;
222
315
  }
@@ -259,9 +352,71 @@ function getLanguageIcon(language) {
259
352
  timeline: '<line x1="2" y1="12" x2="22" y2="12"/><circle cx="6" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="18" cy="12" r="2"/>',
260
353
  form: '<path d="M4 4h16v2H4V4zm0 4h10v2H4V8zm0 4h16v2H4v-2zm0 4h10v2H4v-2z"/><rect x="16" y="8" width="4" height="4" rx="1"/><rect x="16" y="16" width="4" height="4" rx="1"/>',
261
354
  social: '<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"/>',
355
+ // Languages with display names that were missing icons
356
+ java: '<path d="M8.851 18.56s-.917.534.653.714c1.902.218 2.874.187 4.969-.211 0 0 .552.346 1.321.646-4.699 2.013-10.633-.118-6.943-1.149m-.575-2.627s-1.028.761.542.924c2.032.209 3.636.227 6.413-.308 0 0 .384.389.987.602-5.679 1.661-12.007.13-7.942-1.218m4.84-4.458c1.158 1.333-.304 2.533-.304 2.533s2.939-1.518 1.589-3.418c-1.261-1.772-2.228-2.652 3.007-5.688 0 0-8.216 2.051-4.292 6.573"/><path d="M16.205 20.196s.678.559-.747.991c-2.712.822-11.288 1.069-13.669.033-.856-.373.75-.89 1.254-.998.527-.114.828-.093.828-.093-.953-.671-6.156 1.317-2.643 1.887 9.58 1.553 17.462-.7 14.977-1.82M9.6 13.116s-4.362 1.036-1.544 1.412c1.189.159 3.561.123 5.77-.062 1.806-.152 3.618-.477 3.618-.477s-.637.272-1.098.587c-4.429 1.165-12.986.623-10.522-.568 2.082-1.006 3.776-.892 3.776-.892m7.816 4.368c4.502-2.34 2.421-4.589.968-4.285-.356.075-.515.14-.515.14s.132-.207.385-.296c2.874-1.01 5.086 2.981-.928 4.562 0 0 .07-.062.09-.121"/>',
357
+ c: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/><path d="M10.5 7.5C8.01 7.5 6 9.51 6 12s2.01 4.5 4.5 4.5c1.74 0 3.26-1 4-2.5h-2.18c-.5.63-1.27 1-2.12 1A2.75 2.75 0 0 1 7.5 12a2.75 2.75 0 0 1 2.7-2.5c.85 0 1.62.37 2.12 1h2.18c-.74-1.5-2.26-2.5-4-2.5z"/>',
358
+ cpp: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/><path d="M9.5 7.5C7.01 7.5 5 9.51 5 12s2.01 4.5 4.5 4.5c1.74 0 3.26-1 4-2.5h-2.18c-.5.63-1.27 1-2.12 1A2.75 2.75 0 0 1 6.5 12 2.75 2.75 0 0 1 9.2 9.5c.85 0 1.62.37 2.12 1h2.18c-.74-1.5-2.26-2.5-4-2.5z"/><path d="M16 11h1v-1h1v1h1v1h-1v1h-1v-1h-1zm-3 0h1v-1h1v1h1v1h-1v1h-1v-1h-1z"/>',
359
+ csharp: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/><path d="M9.5 7.5C7.01 7.5 5 9.51 5 12s2.01 4.5 4.5 4.5c1.74 0 3.26-1 4-2.5h-2.18c-.5.63-1.27 1-2.12 1A2.75 2.75 0 0 1 6.5 12 2.75 2.75 0 0 1 9.2 9.5c.85 0 1.62.37 2.12 1h2.18c-.74-1.5-2.26-2.5-4-2.5z"/><path d="M16.5 10.5h-1v-1h-1v1h-1v1h1v1h1v-1h1zM16.5 13.5h-1v-1h-1v1h-1v1h1v1h1v-1h1z"/>',
360
+ cs: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/><path d="M9.5 7.5C7.01 7.5 5 9.51 5 12s2.01 4.5 4.5 4.5c1.74 0 3.26-1 4-2.5h-2.18c-.5.63-1.27 1-2.12 1A2.75 2.75 0 0 1 6.5 12 2.75 2.75 0 0 1 9.2 9.5c.85 0 1.62.37 2.12 1h2.18c-.74-1.5-2.26-2.5-4-2.5z"/><path d="M16.5 10.5h-1v-1h-1v1h-1v1h1v1h1v-1h1zM16.5 13.5h-1v-1h-1v1h-1v1h1v1h1v-1h1z"/>',
361
+ go: '<path d="M3.5 10.83s-.1-.16.06-.21c0 0 2.61-1.05 5.25-1.05h.2c2.64 0 5.25 1.05 5.25 1.05.16.05.06.21.06.21"/><path d="M4.3 11.2c-.15 0-.15-.23 0-.23h4.96c.15 0 .15.23 0 .23H4.3z"/><ellipse cx="6.27" cy="10" rx=".35" ry=".4"/><path d="M14.26 10.83s-.1-.16.06-.21c0 0 1.61-.65 3.25-.65h.2c1.64 0 3.25.65 3.25.65.16.05.06.21.06.21"/><path d="M14.85 11.2c-.15 0-.15-.23 0-.23h4.26c.15 0 .15.23 0 .23h-4.26z"/><ellipse cx="16.57" cy="10" rx=".35" ry=".4"/><path d="M8.98 15.53c-2.6 0-4.72-1.68-4.72-3.75 0-2.07 2.12-3.75 4.72-3.75s4.72 1.68 4.72 3.75-2.12 3.75-4.72 3.75z" fill="none" stroke="currentColor" stroke-width="1"/>',
362
+ rust: '<path d="M12 2l1.09 3.41L15 3.5l-.47 3.53 2.97-1.87-.94 3.42 3.54.16-2.7 2.27 3.15 1.63-3.38.86 2.13 2.87-3.47-.57.78 3.45-3.05-1.73L12 21l-1.56-3.07-3.05 1.73.78-3.45-3.47.57 2.13-2.87-3.38-.86 3.15-1.63L3.9 9.15l3.54-.16-.94-3.42 2.97 1.87L9 3.5l1.91 1.91L12 2z" fill="none" stroke="currentColor" stroke-width="1.2"/><circle cx="12" cy="12" r="3" fill="none" stroke="currentColor" stroke-width="1.2"/>',
363
+ ruby: '<path d="M5.5 18.5L3 14l3-9 4-2h4l4 2 3 9-2.5 4.5L12 21l-6.5-2.5z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M12 3v18M3 14h18M6 5l12 14M18 5L6 19" fill="none" stroke="currentColor" stroke-width=".8"/>',
364
+ rb: '<path d="M5.5 18.5L3 14l3-9 4-2h4l4 2 3 9-2.5 4.5L12 21l-6.5-2.5z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M12 3v18M3 14h18M6 5l12 14M18 5L6 19" fill="none" stroke="currentColor" stroke-width=".8"/>',
365
+ php: '<ellipse cx="12" cy="12" rx="10" ry="6" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M7 9.5h2a1.5 1.5 0 0 1 0 3H8v2M12.5 9.5h2a1.5 1.5 0 0 1 0 3H13.5v2M17 9.5v5"/>',
366
+ swift: '<path d="M20.5 8c.3-1.7-.4-3.6-1.8-5-.5 2.1-1.8 3.7-3.5 4.8C12.6 5.5 9.4 3.3 6 2c.9 1.5 1.7 3 2.3 4.5C5.3 4.4 3 3 3 3s1.3 3.5 4 6.3C5.2 9 3.5 8.6 2 8c1.1 1.8 2.7 3.2 4.5 4.2-.7.2-1.5.3-2.5.3 1.5 1.5 3.5 2.5 5.5 2.5-2 2-5 3-8 3 3.5 2 7.5 3 11 1.5 5-2.2 7.5-7.5 7.5-11.5z"/>',
367
+ kotlin: '<path d="M3 3h18v18H3V3z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M3 3l9 9L3 21M12 3l9 9-9 9"/>',
368
+ scala: '<path d="M4 4c0 0 8 1 16 1v5c-8 0-16-1-16-1V4z"/><path d="M4 10c0 0 8 1 16 1v5c-8 0-16-1-16-1V10z"/><path d="M4 16c0 0 8 1 16 1v4c-8 0-16-1-16-1V16z"/>',
369
+ powershell: '<path d="M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m0 2v12h16V6H4m2 2l5 3.5L6 15m6 0h5"/>',
370
+ ps1: '<path d="M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m0 2v12h16V6H4m2 2l5 3.5L6 15m6 0h5"/>',
371
+ xml: '<path d="M7 4l-4 8 4 8M17 4l4 8-4 8M14 4l-4 16"/>',
372
+ yaml: '<path d="M3 4l4.5 5.5L12 4M12 4l4.5 5.5L21 4M12 9.5V20M3 12h18" fill="none" stroke="currentColor" stroke-width="1.5"/>',
373
+ yml: '<path d="M3 4l4.5 5.5L12 4M12 4l4.5 5.5L21 4M12 9.5V20M3 12h18" fill="none" stroke="currentColor" stroke-width="1.5"/>',
374
+ graphql: '<circle cx="12" cy="4" r="1.5"/><circle cx="5" cy="8" r="1.5"/><circle cx="19" cy="8" r="1.5"/><circle cx="5" cy="16" r="1.5"/><circle cx="19" cy="16" r="1.5"/><circle cx="12" cy="20" r="1.5"/><path d="M5.5 8.5l6.5 11M12.5 4.5l6 3.5M5.5 8l13 0M5.5 16l13 0M18 16.5l-6 3.5M5.5 16l6.5-12" fill="none" stroke="currentColor" stroke-width="1"/>',
375
+ dockerfile: '<path d="M2 12.5h3v-3h3v-3h3V3.5h3v3h3v3h1.5a2.5 2.5 0 0 1 0 5H2v-2z"/><path d="M5 9.5h2v2H5zM8 9.5h2v2H8zM8 6.5h2v2H8zM11 6.5h2v2h-2zM11 9.5h2v2h-2zM14 9.5h2v2h-2zM11 3.5h2v2h-2z"/>',
376
+ docker: '<path d="M2 12.5h3v-3h3v-3h3V3.5h3v3h3v3h1.5a2.5 2.5 0 0 1 0 5H2v-2z"/><path d="M5 9.5h2v2H5zM8 9.5h2v2H8zM8 6.5h2v2H8zM11 6.5h2v2h-2zM11 9.5h2v2h-2zM14 9.5h2v2h-2zM11 3.5h2v2h-2z"/>',
377
+ // CSS preprocessors
378
+ less: '<path d="M5 3l.65 3.34h12.59l-.44 2.16H6.11l.65 3.34h11.04l-.78 3.86-5.02 1.67-4.96-1.67-.33-1.69H4.38l.65 3.35L12 19.31l7.02-2.31L20.93 3H5z"/>',
379
+ sass: '<path d="M5 3l.65 3.34h12.59l-.44 2.16H6.11l.65 3.34h11.04l-.78 3.86-5.02 1.67-4.96-1.67-.33-1.69H4.38l.65 3.35L12 19.31l7.02-2.31L20.93 3H5z"/>',
380
+ scss: '<path d="M5 3l.65 3.34h12.59l-.44 2.16H6.11l.65 3.34h11.04l-.78 3.86-5.02 1.67-4.96-1.67-.33-1.69H4.38l.65 3.35L12 19.31l7.02-2.31L20.93 3H5z"/>',
381
+ // New languages
382
+ lua: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z" fill="none" stroke="currentColor" stroke-width="1.5"/><circle cx="12" cy="12" r="4" fill="none" stroke="currentColor" stroke-width="1.5"/><circle cx="18" cy="5" r="2"/>',
383
+ perl: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M9 8v8M9 12h3a2 2 0 1 0 0-4H9"/>',
384
+ pl: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M9 8v8M9 12h3a2 2 0 1 0 0-4H9"/>',
385
+ r: '<path d="M3 5h14a4 4 0 0 1 4 4v0a4 4 0 0 1-4 4H3V5z" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M3 5v14M13 13l5 6" fill="none" stroke="currentColor" stroke-width="1.5"/>',
386
+ dart: '<path d="M4 12L2 6l4-4h6l10 10-6 10H8l-4-4v-6z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M6 2l16 10M2 6l10 16"/>',
387
+ elixir: '<path d="M12 2c-3 4-6 8-6 13a6 6 0 0 0 12 0c0-5-3-9-6-13z" fill="none" stroke="currentColor" stroke-width="1.5"/><ellipse cx="12" cy="16" rx="3" ry="2" fill="none" stroke="currentColor" stroke-width="1"/>',
388
+ ex: '<path d="M12 2c-3 4-6 8-6 13a6 6 0 0 0 12 0c0-5-3-9-6-13z" fill="none" stroke="currentColor" stroke-width="1.5"/><ellipse cx="12" cy="16" rx="3" ry="2" fill="none" stroke="currentColor" stroke-width="1"/>',
389
+ haskell: '<path d="M2 4l5 8-5 8M7 4l5 8-5 8" fill="none" stroke="currentColor" stroke-width="2"/><path d="M12 8l2 4-2 4M14 10h8M14 14h8" fill="none" stroke="currentColor" stroke-width="1.5"/>',
390
+ hs: '<path d="M2 4l5 8-5 8M7 4l5 8-5 8" fill="none" stroke="currentColor" stroke-width="2"/><path d="M12 8l2 4-2 4M14 10h8M14 14h8" fill="none" stroke="currentColor" stroke-width="1.5"/>',
391
+ clojure: '<circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M8 6a7.5 7.5 0 0 0 0 12M16 6a7.5 7.5 0 0 1 0 12"/>',
392
+ clj: '<circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M8 6a7.5 7.5 0 0 0 0 12M16 6a7.5 7.5 0 0 1 0 12"/>',
393
+ erlang: '<path d="M4 18c2-1.5 3-4 3-6s-1-4.5-3-6M20 18c-3-1-5.5-3.5-5.5-6S17 5.5 20 6" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M4 12h16" fill="none" stroke="currentColor" stroke-width="1.5"/>',
394
+ erl: '<path d="M4 18c2-1.5 3-4 3-6s-1-4.5-3-6M20 18c-3-1-5.5-3.5-5.5-6S17 5.5 20 6" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M4 12h16" fill="none" stroke="currentColor" stroke-width="1.5"/>',
395
+ objectivec: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/><path d="M10.5 7.5C8.01 7.5 6 9.51 6 12s2.01 4.5 4.5 4.5c1.74 0 3.26-1 4-2.5h-2.18c-.5.63-1.27 1-2.12 1A2.75 2.75 0 0 1 7.5 12a2.75 2.75 0 0 1 2.7-2.5c.85 0 1.62.37 2.12 1h2.18c-.74-1.5-2.26-2.5-4-2.5z"/>',
396
+ objc: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/><path d="M10.5 7.5C8.01 7.5 6 9.51 6 12s2.01 4.5 4.5 4.5c1.74 0 3.26-1 4-2.5h-2.18c-.5.63-1.27 1-2.12 1A2.75 2.75 0 0 1 7.5 12a2.75 2.75 0 0 1 2.7-2.5c.85 0 1.62.37 2.12 1h2.18c-.74-1.5-2.26-2.5-4-2.5z"/>',
397
+ m: '<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/><path d="M10.5 7.5C8.01 7.5 6 9.51 6 12s2.01 4.5 4.5 4.5c1.74 0 3.26-1 4-2.5h-2.18c-.5.63-1.27 1-2.12 1A2.75 2.75 0 0 1 7.5 12a2.75 2.75 0 0 1 2.7-2.5c.85 0 1.62.37 2.12 1h2.18c-.74-1.5-2.26-2.5-4-2.5z"/>',
398
+ // Config/build files
399
+ toml: '<path d="M3 3h18v18H3V3z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M7 7h10M7 11h7M7 15h10"/>',
400
+ ini: '<path d="M3 3h18v18H3V3z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M7 7h10M7 11h7M7 15h10"/>',
401
+ env: '<path d="M3 3h18v18H3V3z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M7 7h10M7 11h7M7 15h10"/>',
402
+ makefile: '<path d="M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m0 2v12h16V6H4m2 2l4 3-4 3V8m5 5h5v2h-5v-2z"/>',
403
+ cmake: '<path d="M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m0 2v12h16V6H4m2 2l4 3-4 3V8m5 5h5v2h-5v-2z"/>',
404
+ terraform: '<path d="M1 5l7 4v8l-7-4V5zM9 1l7 4v8l-7-4V1zM9 13l7 4v8l-7-4v-8zM17 5l7 4v8l-7-4V5z"/>',
405
+ tf: '<path d="M1 5l7 4v8l-7-4V5zM9 1l7 4v8l-7-4V1zM9 13l7 4v8l-7-4v-8zM17 5l7 4v8l-7-4V5z"/>',
406
+ hcl: '<path d="M1 5l7 4v8l-7-4V5zM9 1l7 4v8l-7-4V1zM9 13l7 4v8l-7-4v-8zM17 5l7 4v8l-7-4V5z"/>',
407
+ protobuf: '<path d="M4 4h16v16H4V4z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M8 8h8M8 12h5M8 16h8"/>',
408
+ proto: '<path d="M4 4h16v16H4V4z" fill="none" stroke="currentColor" stroke-width="1.2"/><path d="M8 8h8M8 12h5M8 16h8"/>',
409
+ zig: '<path d="M2 6h7l-5 12h7l5-12h7l-5 12h7" fill="none" stroke="currentColor" stroke-width="1.5"/>',
410
+ nim: '<path d="M12 2l3 5h5l-3 5 3 5h-5l-3 5-3-5H4l3-5-3-5h5l3-5z" fill="none" stroke="currentColor" stroke-width="1.2"/>',
411
+ v: '<path d="M4 4l8 16 8-16" fill="none" stroke="currentColor" stroke-width="2"/>',
412
+ // Text/document icon
413
+ txt: '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="13" y2="17"/>',
414
+ plaintext: '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="13" y2="17"/>',
415
+ text: '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="13" y2="17"/>',
262
416
  };
263
-
264
- const defaultIcon = '<polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/>';
417
+
418
+ // Text/document fallback for unknown extensions
419
+ const defaultIcon = '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="13" y2="17"/>';
265
420
  return icons[language?.toLowerCase()] || defaultIcon;
266
421
  }
267
422
 
@@ -739,11 +894,14 @@ function createState() {
739
894
  isPanelOpen: false,
740
895
  viewMode: 'preview', // 'preview' | 'code' | 'split'
741
896
  isFullscreen: false,
897
+ // Multi-tab support
898
+ openTabs: [], // Array of artifact IDs open as tabs (ordered)
899
+ tabViewModes: {}, // { [artifactId]: 'preview' | 'code' | 'split' | 'edit' }
742
900
  };
743
-
901
+
744
902
  // Subscribers
745
903
  const subscribers = new Set();
746
-
904
+
747
905
  /**
748
906
  * Notify all subscribers of state change
749
907
  */
@@ -756,35 +914,35 @@ function createState() {
756
914
  }
757
915
  });
758
916
  }
759
-
917
+
760
918
  /**
761
919
  * Subscribe to state changes
762
920
  */
763
921
  function subscribe(callback) {
764
922
  subscribers.add(callback);
765
-
923
+
766
924
  // Call immediately with current state
767
925
  callback(state);
768
-
926
+
769
927
  // Return unsubscribe function
770
928
  return () => {
771
929
  subscribers.delete(callback);
772
930
  };
773
931
  }
774
-
932
+
775
933
  /**
776
934
  * Get current state (immutable copy)
777
935
  */
778
936
  function getState() {
779
937
  return { ...state };
780
938
  }
781
-
939
+
782
940
  /**
783
941
  * Add artifact
784
942
  */
785
943
  function addArtifact(artifact) {
786
944
  const existingIndex = state.artifacts.findIndex(a => a.id === artifact.id);
787
-
945
+
788
946
  if (existingIndex === -1) {
789
947
  state = {
790
948
  ...state,
@@ -799,38 +957,43 @@ function createState() {
799
957
  artifacts: newArtifacts,
800
958
  };
801
959
  }
802
-
960
+
803
961
  notify();
804
962
  }
805
-
963
+
806
964
  /**
807
965
  * Add multiple artifacts
808
966
  */
809
967
  function addArtifacts(artifacts) {
810
968
  artifacts.forEach(addArtifact);
811
969
  }
812
-
970
+
813
971
  /**
814
972
  * Remove artifact
815
973
  */
816
974
  function removeArtifact(artifactId) {
975
+ const newTabs = state.openTabs.filter(id => id !== artifactId);
976
+ const { [artifactId]: _, ...remainingViewModes } = state.tabViewModes;
977
+
817
978
  state = {
818
979
  ...state,
819
980
  artifacts: state.artifacts.filter(a => a.id !== artifactId),
820
981
  activeArtifactId: state.activeArtifactId === artifactId ? null : state.activeArtifactId,
821
982
  isPanelOpen: state.activeArtifactId === artifactId ? false : state.isPanelOpen,
983
+ openTabs: newTabs,
984
+ tabViewModes: remainingViewModes,
822
985
  };
823
-
986
+
824
987
  notify();
825
988
  }
826
-
989
+
827
990
  /**
828
991
  * Get artifact by ID
829
992
  */
830
993
  function getArtifact(artifactId) {
831
994
  return state.artifacts.find(a => a.id === artifactId) || null;
832
995
  }
833
-
996
+
834
997
  /**
835
998
  * Get active artifact
836
999
  */
@@ -838,16 +1001,20 @@ function createState() {
838
1001
  if (!state.activeArtifactId) return null;
839
1002
  return getArtifact(state.activeArtifactId);
840
1003
  }
841
-
1004
+
842
1005
  /**
843
1006
  * Set active artifact
844
1007
  */
845
1008
  function setActiveArtifact(artifactId) {
846
1009
  const artifact = getArtifact(artifactId);
847
1010
 
848
- let viewMode = artifact?.isPreviewable === false ? 'code' : 'preview';
849
- if (artifact?.tabs && !artifact.tabs.includes(viewMode)) {
850
- viewMode = artifact.tabs[0];
1011
+ // Try tab-specific viewMode first, then compute from artifact
1012
+ let viewMode = state.tabViewModes[artifactId];
1013
+ if (!viewMode) {
1014
+ viewMode = artifact?.isPreviewable === false ? 'code' : 'preview';
1015
+ if (artifact?.tabs && !artifact.tabs.includes(viewMode)) {
1016
+ viewMode = artifact.tabs[0];
1017
+ }
851
1018
  }
852
1019
 
853
1020
  state = {
@@ -858,7 +1025,7 @@ function createState() {
858
1025
 
859
1026
  notify();
860
1027
  }
861
-
1028
+
862
1029
  /**
863
1030
  * Clear active artifact (return to list view)
864
1031
  */
@@ -867,10 +1034,10 @@ function createState() {
867
1034
  ...state,
868
1035
  activeArtifactId: null,
869
1036
  };
870
-
1037
+
871
1038
  notify();
872
1039
  }
873
-
1040
+
874
1041
  /**
875
1042
  * Set panel open state
876
1043
  */
@@ -880,10 +1047,10 @@ function createState() {
880
1047
  isPanelOpen: isOpen,
881
1048
  isFullscreen: isOpen ? state.isFullscreen : false,
882
1049
  };
883
-
1050
+
884
1051
  notify();
885
1052
  }
886
-
1053
+
887
1054
  /**
888
1055
  * Set view mode
889
1056
  */
@@ -892,15 +1059,21 @@ function createState() {
892
1059
  console.warn(`Invalid view mode: ${mode}`);
893
1060
  return;
894
1061
  }
895
-
1062
+
1063
+ // Also store per-tab viewMode for the active artifact
1064
+ const newTabViewModes = state.activeArtifactId
1065
+ ? { ...state.tabViewModes, [state.activeArtifactId]: mode }
1066
+ : state.tabViewModes;
1067
+
896
1068
  state = {
897
1069
  ...state,
898
1070
  viewMode: mode,
1071
+ tabViewModes: newTabViewModes,
899
1072
  };
900
-
1073
+
901
1074
  notify();
902
1075
  }
903
-
1076
+
904
1077
  /**
905
1078
  * Set fullscreen state
906
1079
  */
@@ -909,31 +1082,130 @@ function createState() {
909
1082
  ...state,
910
1083
  isFullscreen,
911
1084
  };
912
-
1085
+
913
1086
  notify();
914
1087
  }
915
-
1088
+
916
1089
  /**
917
1090
  * Get artifacts by message ID
918
1091
  */
919
1092
  function getArtifactsByMessageId(messageId) {
920
1093
  return state.artifacts.filter(a => a.messageId === messageId);
921
1094
  }
922
-
1095
+
923
1096
  /**
924
1097
  * Get artifacts by type
925
1098
  */
926
1099
  function getArtifactsByType(type) {
927
1100
  return state.artifacts.filter(a => a.type === type);
928
1101
  }
929
-
1102
+
930
1103
  /**
931
1104
  * Get artifact count
932
1105
  */
933
1106
  function getArtifactCount() {
934
1107
  return state.artifacts.length;
935
1108
  }
936
-
1109
+
1110
+ // ============================================
1111
+ // Multi-tab methods
1112
+ // ============================================
1113
+
1114
+ /**
1115
+ * Open artifact in a new tab (or focus if already open)
1116
+ */
1117
+ function openTab(artifactId) {
1118
+ const artifact = getArtifact(artifactId);
1119
+ if (!artifact) return;
1120
+
1121
+ const alreadyOpen = state.openTabs.includes(artifactId);
1122
+ const newTabs = alreadyOpen ? state.openTabs : [...state.openTabs, artifactId];
1123
+
1124
+ // Determine view mode for this tab
1125
+ let viewMode = state.tabViewModes[artifactId];
1126
+ if (!viewMode) {
1127
+ viewMode = artifact.isPreviewable === false ? 'code' : 'preview';
1128
+ if (artifact.tabs && !artifact.tabs.includes(viewMode)) {
1129
+ viewMode = artifact.tabs[0];
1130
+ }
1131
+ }
1132
+
1133
+ state = {
1134
+ ...state,
1135
+ openTabs: newTabs,
1136
+ activeArtifactId: artifactId,
1137
+ tabViewModes: { ...state.tabViewModes, [artifactId]: viewMode },
1138
+ viewMode,
1139
+ };
1140
+ notify();
1141
+ }
1142
+
1143
+ /**
1144
+ * Close a tab
1145
+ */
1146
+ function closeTab(artifactId) {
1147
+ const idx = state.openTabs.indexOf(artifactId);
1148
+ if (idx === -1) return;
1149
+
1150
+ const newTabs = state.openTabs.filter(id => id !== artifactId);
1151
+ const { [artifactId]: _, ...remainingViewModes } = state.tabViewModes;
1152
+
1153
+ // If closing the active tab, switch to adjacent
1154
+ let newActiveId = state.activeArtifactId;
1155
+ if (state.activeArtifactId === artifactId) {
1156
+ if (newTabs.length === 0) {
1157
+ newActiveId = null;
1158
+ } else if (idx >= newTabs.length) {
1159
+ newActiveId = newTabs[newTabs.length - 1];
1160
+ } else {
1161
+ newActiveId = newTabs[idx];
1162
+ }
1163
+ }
1164
+
1165
+ const newViewMode = newActiveId ? (remainingViewModes[newActiveId] || 'preview') : 'preview';
1166
+
1167
+ state = {
1168
+ ...state,
1169
+ openTabs: newTabs,
1170
+ activeArtifactId: newActiveId,
1171
+ tabViewModes: remainingViewModes,
1172
+ viewMode: newViewMode,
1173
+ };
1174
+ notify();
1175
+ }
1176
+
1177
+ /**
1178
+ * Close all tabs except one
1179
+ */
1180
+ function closeOtherTabs(keepArtifactId) {
1181
+ const artifact = getArtifact(keepArtifactId);
1182
+ if (!artifact) return;
1183
+
1184
+ const viewMode = state.tabViewModes[keepArtifactId] || state.viewMode;
1185
+
1186
+ state = {
1187
+ ...state,
1188
+ openTabs: [keepArtifactId],
1189
+ activeArtifactId: keepArtifactId,
1190
+ tabViewModes: { [keepArtifactId]: viewMode },
1191
+ viewMode,
1192
+ };
1193
+ notify();
1194
+ }
1195
+
1196
+ /**
1197
+ * Close all tabs
1198
+ */
1199
+ function closeAllTabs() {
1200
+ state = {
1201
+ ...state,
1202
+ openTabs: [],
1203
+ activeArtifactId: null,
1204
+ tabViewModes: {},
1205
+ };
1206
+ notify();
1207
+ }
1208
+
937
1209
  /**
938
1210
  * Clear all state
939
1211
  */
@@ -944,47 +1216,49 @@ function createState() {
944
1216
  isPanelOpen: false,
945
1217
  viewMode: 'preview',
946
1218
  isFullscreen: false,
1219
+ openTabs: [],
1220
+ tabViewModes: {},
947
1221
  };
948
-
1222
+
949
1223
  notify();
950
1224
  }
951
-
1225
+
952
1226
  /**
953
1227
  * Batch update (for performance)
954
1228
  */
955
1229
  function batch(updateFn) {
956
1230
  const oldNotify = notify;
957
1231
  let notifyPending = false;
958
-
1232
+
959
1233
  // Suppress notifications during batch
960
1234
  const suppressedNotify = () => {
961
1235
  notifyPending = true;
962
1236
  };
963
-
1237
+
964
1238
  try {
965
1239
  // Replace notify temporarily
966
1240
  Object.defineProperty(window, '__artifactuse_notify__', {
967
1241
  value: suppressedNotify,
968
1242
  configurable: true,
969
1243
  });
970
-
1244
+
971
1245
  updateFn();
972
1246
  } finally {
973
1247
  delete window.__artifactuse_notify__;
974
-
1248
+
975
1249
  // Notify once at end if needed
976
1250
  if (notifyPending) {
977
1251
  oldNotify();
978
1252
  }
979
1253
  }
980
1254
  }
981
-
1255
+
982
1256
  // Public API
983
1257
  return {
984
1258
  // State access
985
1259
  getState,
986
1260
  subscribe,
987
-
1261
+
988
1262
  // Artifacts
989
1263
  addArtifact,
990
1264
  addArtifacts,
@@ -994,14 +1268,20 @@ function createState() {
994
1268
  getArtifactsByMessageId,
995
1269
  getArtifactsByType,
996
1270
  getArtifactCount,
997
-
1271
+
998
1272
  // Panel state
999
1273
  setActiveArtifact,
1000
1274
  clearActiveArtifact,
1001
1275
  setPanelOpen,
1002
1276
  setViewMode,
1003
1277
  setFullscreen,
1004
-
1278
+
1279
+ // Multi-tab
1280
+ openTab,
1281
+ closeTab,
1282
+ closeOtherTabs,
1283
+ closeAllTabs,
1284
+
1005
1285
  // Utilities
1006
1286
  clear,
1007
1287
  batch,
@@ -6543,6 +6823,9 @@ const DEFAULT_CONFIG = {
6543
6823
  // Can be overridden per-component via props
6544
6824
  splitPosition: 50,
6545
6825
 
6826
+ // Enable multi-tab mode (open multiple artifacts as tabs)
6827
+ multiTab: false,
6828
+
6546
6829
  // Panel configuration
6547
6830
  // Users can add/override/disable panels here
6548
6831
  //
@@ -7048,7 +7331,12 @@ function createArtifactuse(userConfig = {}) {
7048
7331
  return;
7049
7332
  }
7050
7333
 
7051
- state.setActiveArtifact(artifact.id);
7334
+ if (config.multiTab) {
7335
+ state.openTab(artifact.id);
7336
+ } else {
7337
+ state.setActiveArtifact(artifact.id);
7338
+ }
7339
+
7052
7340
  state.setPanelOpen(true);
7053
7341
  if (artifact.viewMode) {
7054
7342
  state.setViewMode(artifact.viewMode);
@@ -7348,6 +7636,11 @@ function createArtifactuse(userConfig = {}) {
7348
7636
  getPanelUrl,
7349
7637
  sendToPanel,
7350
7638
 
7639
+ // Multi-tab
7640
+ closeTab: (artifactId) => state.closeTab(artifactId),
7641
+ closeOtherTabs: (artifactId) => state.closeOtherTabs(artifactId),
7642
+ closeAllTabs: () => state.closeAllTabs(),
7643
+
7351
7644
  // Panel management (new)
7352
7645
  hasPanel,
7353
7646
  registerPanel,
@@ -7473,8 +7766,10 @@ function provideArtifactuse(config = {}) {
7473
7766
  isPanelOpen: false,
7474
7767
  viewMode: 'preview',
7475
7768
  isFullscreen: false,
7769
+ openTabs: [],
7770
+ tabViewModes: {},
7476
7771
  });
7477
-
7772
+
7478
7773
  // Subscribe to state changes
7479
7774
  instance.state.subscribe((newState) => {
7480
7775
  state.artifacts = newState.artifacts;
@@ -7482,14 +7777,16 @@ function provideArtifactuse(config = {}) {
7482
7777
  state.isPanelOpen = newState.isPanelOpen;
7483
7778
  state.viewMode = newState.viewMode;
7484
7779
  state.isFullscreen = newState.isFullscreen;
7780
+ state.openTabs = newState.openTabs;
7781
+ state.tabViewModes = newState.tabViewModes;
7485
7782
  });
7486
-
7783
+
7487
7784
  // Computed
7488
7785
  const activeArtifact = computed(() => {
7489
7786
  if (!state.activeArtifactId) return null;
7490
7787
  return state.artifacts.find(a => a.id === state.activeArtifactId) || null;
7491
7788
  });
7492
-
7789
+
7493
7790
  // Only count non-inline artifacts (inline artifacts render in message content)
7494
7791
  const artifactCount = computed(() => state.artifacts.filter(a => !a.isInline).length);
7495
7792
 
@@ -7505,7 +7802,7 @@ function provideArtifactuse(config = {}) {
7505
7802
 
7506
7803
  // Apply theme immediately on initialization
7507
7804
  instance.applyTheme();
7508
-
7805
+
7509
7806
  // Provide value
7510
7807
  const provided = {
7511
7808
  instance,
@@ -7513,11 +7810,11 @@ function provideArtifactuse(config = {}) {
7513
7810
  activeArtifact,
7514
7811
  artifactCount,
7515
7812
  hasArtifacts,
7516
-
7813
+
7517
7814
  // Panel computed
7518
7815
  panelTypes,
7519
7816
  activePanelUrl,
7520
-
7817
+
7521
7818
  // Methods
7522
7819
  processMessage: instance.processMessage,
7523
7820
  initializeContent: instance.initializeContent,
@@ -7531,13 +7828,18 @@ function provideArtifactuse(config = {}) {
7531
7828
  setViewMode: instance.setViewMode,
7532
7829
  getPanelUrl: instance.getPanelUrl,
7533
7830
  sendToPanel: instance.sendToPanel,
7534
-
7831
+
7535
7832
  // Panel management
7536
7833
  hasPanel: instance.hasPanel,
7537
7834
  registerPanel: instance.registerPanel,
7538
7835
  unregisterPanel: instance.unregisterPanel,
7539
7836
  getPanelTypes: instance.getPanelTypes,
7540
-
7837
+
7838
+ // Multi-tab
7839
+ closeTab: instance.closeTab,
7840
+ closeOtherTabs: instance.closeOtherTabs,
7841
+ closeAllTabs: instance.closeAllTabs,
7842
+
7541
7843
  // Events
7542
7844
  on: instance.on,
7543
7845
  off: instance.off,
@@ -7586,11 +7888,13 @@ function createArtifactuseComposable(config = {}) {
7586
7888
  isPanelOpen: false,
7587
7889
  viewMode: 'preview',
7588
7890
  isFullscreen: false,
7891
+ openTabs: [],
7892
+ tabViewModes: {},
7589
7893
  });
7590
-
7894
+
7591
7895
  // Subscribe to state changes
7592
7896
  let unsubscribe;
7593
-
7897
+
7594
7898
  onMounted(() => {
7595
7899
  unsubscribe = instance.state.subscribe((newState) => {
7596
7900
  state.artifacts = newState.artifacts;
@@ -7598,6 +7902,8 @@ function createArtifactuseComposable(config = {}) {
7598
7902
  state.isPanelOpen = newState.isPanelOpen;
7599
7903
  state.viewMode = newState.viewMode;
7600
7904
  state.isFullscreen = newState.isFullscreen;
7905
+ state.openTabs = newState.openTabs;
7906
+ state.tabViewModes = newState.tabViewModes;
7601
7907
  });
7602
7908
 
7603
7909
  // Apply theme
@@ -7658,7 +7964,12 @@ function createArtifactuseComposable(config = {}) {
7658
7964
  registerPanel: instance.registerPanel,
7659
7965
  unregisterPanel: instance.unregisterPanel,
7660
7966
  getPanelTypes: instance.getPanelTypes,
7661
-
7967
+
7968
+ // Multi-tab
7969
+ closeTab: instance.closeTab,
7970
+ closeOtherTabs: instance.closeOtherTabs,
7971
+ closeAllTabs: instance.closeAllTabs,
7972
+
7662
7973
  // Events
7663
7974
  on: instance.on,
7664
7975
  off: instance.off,
@@ -27229,6 +27540,32 @@ var JSZip = /*@__PURE__*/getDefaultExportFromCjs(libExports);
27229
27540
  //
27230
27541
  //
27231
27542
  //
27543
+ //
27544
+ //
27545
+ //
27546
+ //
27547
+ //
27548
+ //
27549
+ //
27550
+ //
27551
+ //
27552
+ //
27553
+ //
27554
+ //
27555
+ //
27556
+ //
27557
+ //
27558
+ //
27559
+ //
27560
+ //
27561
+ //
27562
+ //
27563
+ //
27564
+ //
27565
+ //
27566
+ //
27567
+ //
27568
+ //
27232
27569
 
27233
27570
 
27234
27571
  var script$1 = defineComponent({
@@ -27353,6 +27690,16 @@ var script$1 = defineComponent({
27353
27690
  return instance.config?.branding !== false;
27354
27691
  });
27355
27692
 
27693
+ // Multi-tab computed
27694
+ const isMultiTab = computed(() => instance.config?.multiTab === true);
27695
+
27696
+ const openTabArtifacts = computed(() => {
27697
+ if (!isMultiTab.value) return [];
27698
+ return state.openTabs
27699
+ .map(id => state.artifacts.find(a => a.id === id))
27700
+ .filter(Boolean);
27701
+ });
27702
+
27356
27703
  const sharingEnabled = computed(() => {
27357
27704
  return instance.share?.enabled !== false;
27358
27705
  });
@@ -27757,6 +28104,18 @@ var script$1 = defineComponent({
27757
28104
  }
27758
28105
  }
27759
28106
 
28107
+ // Multi-tab methods
28108
+ function selectTab(artifact) {
28109
+ openArtifact(artifact);
28110
+ }
28111
+
28112
+ function handleCloseTab(artifactId) {
28113
+ instance.closeTab(artifactId);
28114
+ if (state.openTabs.length === 0) {
28115
+ cameFromList.value = false;
28116
+ }
28117
+ }
28118
+
27760
28119
  function goBackToList() {
27761
28120
  cameFromList.value = false;
27762
28121
  instance.state.clearActiveArtifact();
@@ -28026,6 +28385,8 @@ var script$1 = defineComponent({
28026
28385
  sharingEnabled,
28027
28386
  isAuthenticated,
28028
28387
  isEditorAvailable,
28388
+ isMultiTab,
28389
+ openTabArtifacts,
28029
28390
 
28030
28391
  // Methods
28031
28392
  handleIframeLoad,
@@ -28043,6 +28404,10 @@ var script$1 = defineComponent({
28043
28404
  startSplitResize,
28044
28405
  handleEditorSave,
28045
28406
 
28407
+ // Multi-tab methods
28408
+ selectTab,
28409
+ handleCloseTab,
28410
+
28046
28411
  // Share methods
28047
28412
  toggleSharePopup,
28048
28413
  closeShareModal,
@@ -28683,12 +29048,16 @@ var __vue_render__$1 = function () {
28683
29048
  "header",
28684
29049
  { staticClass: "artifactuse-panel__header" },
28685
29050
  [
28686
- _vm.cameFromList
29051
+ _vm.isMultiTab || _vm.cameFromList
28687
29052
  ? _c(
28688
29053
  "button",
28689
29054
  {
28690
29055
  staticClass: "artifactuse-panel__back",
28691
- attrs: { title: "Back to list" },
29056
+ attrs: {
29057
+ title: _vm.isMultiTab
29058
+ ? "Browse artifacts"
29059
+ : "Back to list",
29060
+ },
28692
29061
  on: { click: _vm.goBackToList },
28693
29062
  },
28694
29063
  [
@@ -29164,6 +29533,114 @@ var __vue_render__$1 = function () {
29164
29533
  ]
29165
29534
  ),
29166
29535
  _vm._v(" "),
29536
+ _vm.isMultiTab && _vm.openTabArtifacts.length > 0
29537
+ ? _c(
29538
+ "div",
29539
+ { staticClass: "artifactuse-panel__file-tabs" },
29540
+ [
29541
+ _c(
29542
+ "div",
29543
+ {
29544
+ staticClass:
29545
+ "artifactuse-panel__file-tabs-scroll",
29546
+ },
29547
+ _vm._l(_vm.openTabArtifacts, function (tab) {
29548
+ return _c(
29549
+ "button",
29550
+ {
29551
+ key: tab.id,
29552
+ staticClass:
29553
+ "artifactuse-panel__file-tab",
29554
+ class: {
29555
+ "artifactuse-panel__file-tab--active":
29556
+ _vm.activeArtifact &&
29557
+ tab.id === _vm.activeArtifact.id,
29558
+ },
29559
+ on: {
29560
+ click: function ($event) {
29561
+ return _vm.selectTab(tab)
29562
+ },
29563
+ },
29564
+ },
29565
+ [
29566
+ _c("span", {
29567
+ staticClass:
29568
+ "artifactuse-panel__file-tab-icon",
29569
+ domProps: {
29570
+ innerHTML: _vm._s(
29571
+ _vm.getArtifactIconHtml(tab)
29572
+ ),
29573
+ },
29574
+ }),
29575
+ _vm._v(" "),
29576
+ _c(
29577
+ "span",
29578
+ {
29579
+ staticClass:
29580
+ "artifactuse-panel__file-tab-title",
29581
+ },
29582
+ [
29583
+ _vm._v(
29584
+ _vm._s(tab.title || "Untitled")
29585
+ ),
29586
+ ]
29587
+ ),
29588
+ _vm._v(" "),
29589
+ _c(
29590
+ "button",
29591
+ {
29592
+ staticClass:
29593
+ "artifactuse-panel__file-tab-close",
29594
+ attrs: { title: "Close tab" },
29595
+ on: {
29596
+ click: function ($event) {
29597
+ $event.stopPropagation();
29598
+ return _vm.handleCloseTab(tab.id)
29599
+ },
29600
+ },
29601
+ },
29602
+ [
29603
+ _c(
29604
+ "svg",
29605
+ {
29606
+ attrs: {
29607
+ viewBox: "0 0 24 24",
29608
+ fill: "none",
29609
+ stroke: "currentColor",
29610
+ "stroke-width": "2",
29611
+ },
29612
+ },
29613
+ [
29614
+ _c("line", {
29615
+ attrs: {
29616
+ x1: "18",
29617
+ y1: "6",
29618
+ x2: "6",
29619
+ y2: "18",
29620
+ },
29621
+ }),
29622
+ _vm._v(" "),
29623
+ _c("line", {
29624
+ attrs: {
29625
+ x1: "6",
29626
+ y1: "6",
29627
+ x2: "18",
29628
+ y2: "18",
29629
+ },
29630
+ }),
29631
+ ]
29632
+ ),
29633
+ ]
29634
+ ),
29635
+ ]
29636
+ )
29637
+ }),
29638
+ 0
29639
+ ),
29640
+ ]
29641
+ )
29642
+ : _vm._e(),
29643
+ _vm._v(" "),
29167
29644
  _c(
29168
29645
  "div",
29169
29646
  {
@@ -30659,6 +31136,7 @@ var __vue_render__$1 = function () {
30659
31136
  )
30660
31137
  : _vm._e(),
30661
31138
  _vm._v(" "),
31139
+ !_vm.isMultiTab &&
30662
31140
  _vm.nonInlineArtifacts.length > 1
30663
31141
  ? _c(
30664
31142
  "div",