|
62 | 62 | */ |
63 | 63 | export let functions = false; |
64 | 64 |
|
| 65 | + /** |
| 66 | + * Theme, which can also be customized with CSS variables: |
| 67 | + * --sd-bg-color |
| 68 | + * --sd-label-color |
| 69 | + * --sd-promise-loading-color |
| 70 | + * --sd-promise-error-color |
| 71 | + * --sd-code-default |
| 72 | + * --sd-info |
| 73 | + * --sd-success |
| 74 | + * --sd-redirect |
| 75 | + * --sd-error |
| 76 | + * --sd-code-key |
| 77 | + * --sd-code-string |
| 78 | + * --sd-code-date |
| 79 | + * --sd-code-boolean |
| 80 | + * --sd-code-number |
| 81 | + * --sd-code-bigint |
| 82 | + * --sd-code-null |
| 83 | + * --sd-code-nan |
| 84 | + * --sd-code-undefined |
| 85 | + * --sd-code-function |
| 86 | + * --sd-sb-width |
| 87 | + * --sd-sb-height |
| 88 | + * --sd-sb-track-color |
| 89 | + * --sd-sb-track-color-focus |
| 90 | + * --sd-sb-thumb-color |
| 91 | + * --sd-sb-thumb-color-focus |
| 92 | + * @type {"default" | "vscode"} |
| 93 | + */ |
| 94 | + export let theme = 'default'; |
| 95 | +
|
65 | 96 | /** |
66 | 97 | * @param {unknown} json |
67 | 98 | * @returns {string} |
|
182 | 213 | ); |
183 | 214 | } |
184 | 215 |
|
| 216 | + const themeStyle = |
| 217 | + theme == 'vscode' |
| 218 | + ? ` |
| 219 | + --sd-vscode-bg-color:#1f1f1f; |
| 220 | + --sd-vscode-label-color:#cccccc; |
| 221 | + --sd-vscode-code-default:#8c8a89; |
| 222 | + --sd-vscode-code-key:#9cdcfe; |
| 223 | + --sd-vscode-code-string:#ce9171; |
| 224 | + --sd-vscode-code-number:#b5c180; |
| 225 | + --sd-vscode-code-boolean:#4a9cd6; |
| 226 | + --sd-vscode-code-null:#4a9cd6; |
| 227 | + --sd-vscode-code-undefined:#4a9cd6; |
| 228 | + --sd-vscode-sb-thumb-color:#35373a; |
| 229 | + --sd-vscode-sb-thumb-color-focus:#4b4d50; |
| 230 | + ` |
| 231 | + : undefined; |
| 232 | +
|
185 | 233 | /** @type {EncodeableData} */ |
186 | 234 | let debugData; |
187 | 235 |
|
|
200 | 248 | </script> |
201 | 249 |
|
202 | 250 | {#if display} |
203 | | - <div class="super-debug"> |
| 251 | + <div class="super-debug" style={themeStyle}> |
204 | 252 | <div |
205 | 253 | class="super-debug--status {label === '' |
206 | 254 | ? 'absolute inset-x-0 top-0' |
|
222 | 270 | class="super-debug--pre {label === '' ? 'pt-4' : 'pt-0'}" |
223 | 271 | bind:this={ref}><code class="super-debug--code" |
224 | 272 | ><slot |
225 | | - >{#if assertPromise(debugData, raw, promise)}{#await promiseSyntaxHighlight(debugData)}<div>Loading data...</div>{:then result}{@html result}{/await}{:else}{@html syntaxHighlight( |
| 273 | + >{#if assertPromise(debugData, raw, promise)}{#await promiseSyntaxHighlight(debugData)}<div |
| 274 | + class="super-debug--promise-loading">Loading data...</div>{:then result}{@html result}{:catch error}<div |
| 275 | + class="super-debug--promise-error">{error}</div>{/await}{:else}{@html syntaxHighlight( |
226 | 276 | debugData |
227 | 277 | )}{/if}</slot |
228 | 278 | ></code |
|
302 | 352 | } |
303 | 353 |
|
304 | 354 | .super-debug { |
305 | | - --_sd-bg-color: var(--sd-bg-color, rgb(30, 41, 59)); |
| 355 | + --_sd-bg-color: var( |
| 356 | + --sd-bg-color, |
| 357 | + var(--sd-vscode-bg-color, rgb(30, 41, 59)) |
| 358 | + ); |
306 | 359 | position: relative; |
307 | 360 | background-color: var(--_sd-bg-color); |
308 | 361 | border-radius: 0.5rem; |
|
318 | 371 | } |
319 | 372 |
|
320 | 373 | .super-debug--label { |
321 | | - color: var(--sd-label-color, white); |
| 374 | + color: var(--sd-label-color, var(--sd-vscode-label-color, white)); |
| 375 | + } |
| 376 | +
|
| 377 | + .super-debug--promise-loading { |
| 378 | + color: var( |
| 379 | + --sd-promise-loading-color, |
| 380 | + var(--sd-vscode-promise-loading-color, #999) |
| 381 | + ); |
| 382 | + } |
| 383 | +
|
| 384 | + .super-debug--promise-error { |
| 385 | + color: var( |
| 386 | + --sd-promise-error-color, |
| 387 | + var(--sd-vscode-promise-error-color, #ff475d) |
| 388 | + ); |
322 | 389 | } |
323 | 390 |
|
324 | 391 | .super-debug pre { |
325 | | - color: var(--sd-code-default, #999); |
| 392 | + color: var(--sd-code-default, var(--sd-vscode-code-default, #999)); |
326 | 393 | background-color: var(--_sd-bg-color); |
327 | 394 | margin-bottom: 0px; |
328 | 395 | /** Sakura is doing 0.9em, turn font-size back to 1em **/ |
329 | 396 | font-size: 1em; |
330 | 397 | } |
331 | 398 |
|
332 | 399 | .info { |
333 | | - color: var(--sd-info, rgb(85, 85, 255)); |
| 400 | + color: var(--sd-info, var(--sd-vscode-info, rgb(85, 85, 255))); |
334 | 401 | } |
335 | 402 |
|
336 | 403 | .success { |
337 | | - color: var(--sd-success, #2cd212); |
| 404 | + color: var(--sd-success, var(--sd-vscode-success, #2cd212)); |
338 | 405 | } |
339 | 406 |
|
340 | 407 | .redirect { |
341 | | - color: var(--sd-redirect, #03cae5); |
| 408 | + color: var(--sd-redirect, var(--sd-vscode-redirect, #03cae5)); |
342 | 409 | } |
343 | 410 |
|
344 | 411 | .error { |
345 | | - color: var(--sd-error, #ff475d); |
| 412 | + color: var(--sd-error, var(--sd-vscode-error, #ff475d)); |
346 | 413 | } |
347 | 414 |
|
348 | 415 | :global(.super-debug--code .key) { |
349 | | - color: var(--sd-code-key, #eab308); |
| 416 | + color: var(--sd-code-key, var(--sd-vscode-code-key, #eab308)); |
350 | 417 | } |
351 | 418 |
|
352 | 419 | :global(.super-debug--code .string) { |
353 | | - color: var(--sd-code-string, #6ec687); |
| 420 | + color: var(--sd-code-string, var(--sd-vscode-code-string, #6ec687)); |
354 | 421 | } |
355 | 422 |
|
356 | 423 | :global(.super-debug--code .date) { |
357 | | - color: var(--sd-code-date, #f06962); |
| 424 | + color: var(--sd-code-date, var(--sd-vscode-code-date, #f06962)); |
358 | 425 | } |
359 | 426 |
|
360 | 427 | :global(.super-debug--code .boolean) { |
361 | | - color: var(--sd-code-boolean, #79b8ff); |
| 428 | + color: var(--sd-code-boolean, var(--sd-vscode-code-boolean, #79b8ff)); |
362 | 429 | } |
363 | 430 |
|
364 | 431 | :global(.super-debug--code .number) { |
365 | | - color: var(--sd-code-number, #af77e9); |
| 432 | + color: var(--sd-code-number, var(--sd-vscode-code-number, #af77e9)); |
366 | 433 | } |
367 | 434 |
|
368 | 435 | :global(.super-debug--code .bigint) { |
369 | | - color: var(--sd-code-bigint, #af77e9); |
| 436 | + color: var(--sd-code-bigint, var(--sd-vscode-code-bigint, #af77e9)); |
370 | 437 | } |
371 | 438 |
|
372 | 439 | :global(.super-debug--code .null) { |
373 | | - color: var(--sd-code-null, #238afe); |
| 440 | + color: var(--sd-code-null, var(--sd-vscode-code-null, #238afe)); |
374 | 441 | } |
375 | 442 |
|
376 | 443 | :global(.super-debug--code .nan) { |
377 | | - color: var(--sd-code-nan, #af77e9); |
| 444 | + color: var(--sd-code-nan, var(--sd-vscode-code-nan, #af77e9)); |
378 | 445 | } |
379 | 446 |
|
380 | 447 | :global(.super-debug--code .undefined) { |
381 | | - color: var(--sd-code-undefined, #238afe); |
| 448 | + color: var( |
| 449 | + --sd-code-undefined, |
| 450 | + var(--sd-vscode-code-undefined, #238afe) |
| 451 | + ); |
382 | 452 | } |
383 | 453 |
|
384 | 454 | :global(.super-debug--code .function) { |
385 | | - color: var(--sd-code-function, #f06962); |
| 455 | + color: var(--sd-code-function, var(--sd-vscode-code-function, #f06962)); |
386 | 456 | } |
387 | 457 |
|
388 | 458 | .super-debug pre::-webkit-scrollbar { |
389 | | - width: var(--sd-sb-width, 1.25rem); |
390 | | - height: var(--sd-sb-height, 1.25rem); |
| 459 | + width: var(--sd-sb-width, var(--sd-vscode-sb-width, 1.25rem)); |
| 460 | + height: var(--sd-sb-height, var(--sd-vscode-sb-height, 1.25rem)); |
391 | 461 | opacity: 0.5; |
392 | 462 | } |
393 | 463 |
|
394 | 464 | .super-debug pre::-webkit-scrollbar-track { |
395 | | - background-color: var(--sd-sb-track-color, hsl(0, 0%, 40%, 0.2)); |
| 465 | + background-color: var( |
| 466 | + --sd-sb-track-color, |
| 467 | + --sd-vscode-sb-track-color, |
| 468 | + hsl(0, 0%, 40%, 0.2) |
| 469 | + ); |
396 | 470 | } |
397 | 471 | .super-debug:is(:focus-within, :hover) pre::-webkit-scrollbar-track { |
398 | | - background-color: var(--sd-sb-track-color-focus, hsl(0, 0%, 50%, 0.2)); |
| 472 | + background-color: var( |
| 473 | + --sd-sb-track-color-focus, |
| 474 | + --sd-vscode-sb-track-color-focus, |
| 475 | + hsl(0, 0%, 50%, 0.2) |
| 476 | + ); |
399 | 477 | } |
400 | 478 |
|
401 | 479 | .super-debug pre::-webkit-scrollbar-thumb { |
402 | | - background-color: var(--sd-sb-thumb-color, hsl(217, 50%, 50%, 0.5)); |
| 480 | + background-color: var( |
| 481 | + --sd-sb-thumb-color, |
| 482 | + --sd-vscode-sb-thumb-color, |
| 483 | + hsl(217, 50%, 50%, 0.5) |
| 484 | + ); |
403 | 485 | } |
404 | 486 | .super-debug:is(:focus-within, :hover) pre::-webkit-scrollbar-thumb { |
405 | | - background-color: var(--sd-sb-thumb-color-focus, hsl(217, 50%, 50%)); |
| 487 | + background-color: var( |
| 488 | + --sd-sb-thumb-color-focus, |
| 489 | + --sd-vscode-sb-thumb-color-focus, |
| 490 | + hsl(217, 50%, 50%) |
| 491 | + ); |
406 | 492 | } |
407 | 493 | </style> |
0 commit comments