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.
- package/dist/core/index.d.ts +11 -0
- package/dist/core/state.d.ts +6 -0
- package/dist/{index-llShix6s.js → index-INYOxlcg.js} +1134 -910
- package/dist/index.js +1 -1
- package/dist/react/index.js +408 -389
- package/dist/styles/components/panel.css +106 -0
- package/dist/svelte/index.d.ts +42 -0
- package/dist/svelte/index.js +1915 -1875
- package/dist/vue/index.d.ts +32 -0
- package/dist/vue/index.js +1258 -1191
- package/dist/vue2/composables.d.ts +32 -0
- package/dist/vue2/index.js +535 -57
- package/package.json +1 -1
package/dist/vue2/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
849
|
-
|
|
850
|
-
|
|
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
|
-
|
|
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: {
|
|
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",
|