@@ -272,6 +272,12 @@ export class ReleaseNotesManager {
272
272
}
273
273
} ]
274
274
} ) ;
275
+
276
+ // Remove HTML comment markers around table of contents navigation
277
+ const processedContent = content
278
+ . replace ( / < ! - - \s * T O C \s * / gi, '' )
279
+ . replace ( / \s * N a v i g a t i o n E n d \s * - - > / gi, '' ) ;
280
+
275
281
const colorMap = TokenizationRegistry . getColorMap ( ) ;
276
282
const css = colorMap ? generateTokensCSSForColorMap ( colorMap ) : '' ;
277
283
const showReleaseNotes = Boolean ( this . _configurationService . getValue < boolean > ( 'update.showReleaseNotes' ) ) ;
@@ -366,10 +372,179 @@ export class ReleaseNotesManager {
366
372
}
367
373
368
374
header { display: flex; align-items: center; padding-top: 1em; }
375
+
376
+ /* Release notes enhancements from vscode-docs */
377
+ html {
378
+ font-size: 10px;
379
+ height: 100%;
380
+ overscroll-behavior: none;
381
+ }
382
+
383
+ body {
384
+ margin: 0 auto;
385
+ max-width: 980px;
386
+ height: auto;
387
+ overflow-y: auto;
388
+ overscroll-behavior: none;
389
+ }
390
+
391
+ /* Scroll to top button */
392
+ #scroll-to-top {
393
+ position: fixed;
394
+ width: 40px;
395
+ height: 40px;
396
+ right: 25px;
397
+ bottom: 25px;
398
+ background-color: var(--vscode-button-background, #444);
399
+ border-color: var(--vscode-button-border);
400
+ border-radius: 50%;
401
+ cursor: pointer;
402
+ box-shadow: 1px 1px 1px rgba(0,0,0,.25);
403
+ outline: none;
404
+ display: flex;
405
+ justify-content: center;
406
+ align-items: center;
407
+ }
408
+
409
+ #scroll-to-top:hover {
410
+ background-color: var(--vscode-button-hoverBackground);
411
+ box-shadow: 2px 2px 2px rgba(0,0,0,.25);
412
+ }
413
+
414
+ body.vscode-high-contrast #scroll-to-top {
415
+ border-width: 2px;
416
+ border-style: solid;
417
+ box-shadow: none;
418
+ }
419
+
420
+ #scroll-to-top span.icon::before {
421
+ content: "";
422
+ display: block;
423
+ background: var(--vscode-button-foreground);
424
+ /* Chevron up icon */
425
+ -webkit-mask-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KCS5zdDF7ZmlsbDpub25lO30KPC9zdHlsZT4KPHRpdGxlPnVwY2hldnJvbjwvdGl0bGU+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik04LDUuMWwtNy4zLDcuM0wwLDExLjZsOC04bDgsOGwtMC43LDAuN0w4LDUuMXoiLz4KPHJlY3QgY2xhc3M9InN0MSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+Cjwvc3ZnPgo=');
426
+ mask-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KCS5zdDF7ZmlsbDpub25lO30KPC9zdHlsZT4KPHRpdGxlPnVwY2hldnJvbjwvdGl0bGU+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik04LDUuMWwtNy4zLDcuM0wwLDExLjZsOC04bDgsOGwtMC43LDAuN0w4LDUuMXoiLz4KPHJlY3QgY2xhc3M9InN0MSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+Cjwvc3ZnPgo=');
427
+ width: 16px;
428
+ height: 16px;
429
+ }
430
+
431
+ /* Header styling */
432
+ h2 {
433
+ margin-top: 1.2em;
434
+ scroll-margin-top: 1.2em;
435
+ }
436
+
437
+ h2:not(:first-of-type) {
438
+ margin-top: 4em;
439
+ scroll-margin-top: 1em;
440
+ }
441
+
442
+ h3 {
443
+ margin-top: 4em;
444
+ scroll-margin-top: 1em;
445
+ }
446
+
447
+ h2 + h3 {
448
+ margin-top: 0;
449
+ }
450
+
451
+ /* Highlights table styling */
452
+ .highlights-table {
453
+ border-collapse: collapse;
454
+ border: none;
455
+ }
456
+
457
+ .highlights-table th {
458
+ vertical-align: top;
459
+ border: none;
460
+ padding-top: 2em;
461
+ font-weight: bold;
462
+ }
463
+
464
+ .highlights-table td {
465
+ vertical-align: top;
466
+ border: none;
467
+ }
468
+
469
+ .highlights-table tr:nth-child(2) td {
470
+ padding-bottom: 1em;
471
+ }
472
+
473
+ /* Main content layout */
474
+ .toc-nav-layout {
475
+ display: flex;
476
+ align-items: flex-start;
477
+ }
478
+
479
+ /* TOC Navigation */
480
+ #toc-nav {
481
+ position: sticky;
482
+ top: 20px;
483
+ width: 10vw;
484
+ min-width: 120px;
485
+ margin-right: 32px;
486
+ margin-top: 2em;
487
+ }
488
+
489
+ #toc-nav > div {
490
+ font-weight: bold;
491
+ font-size: 1em;
492
+ margin-bottom: 1em;
493
+ text-transform: uppercase;
494
+ }
495
+
496
+ #toc-nav ul {
497
+ list-style: none;
498
+ padding: 0;
499
+ margin: 0;
500
+ }
501
+
502
+ #toc-nav ul li {
503
+ margin-bottom: 0.5em;
504
+ }
505
+
506
+ #toc-nav a {
507
+ color: var(--vscode-editor-foreground, #ccc);
508
+ text-decoration: none !important;
509
+ transition: background-color 0.2s, color 0.2s;
510
+ padding: 4px 6px;
511
+ margin: -4px -6px;
512
+ border-radius: 4px;
513
+ display: block;
514
+ outline: none;
515
+ }
516
+
517
+ #toc-nav a:hover {
518
+ background-color: var(--vscode-button-secondaryHoverBackground, #1177bb);
519
+ color: var(--vscode-button-secondaryForeground, #ffffff);
520
+ cursor: pointer;
521
+ text-decoration: none !important;
522
+ }
523
+
524
+ /* Main content area */
525
+ .notes-main {
526
+ flex: 1;
527
+ min-width: 0;
528
+ }
529
+
530
+ /* Responsive breakpoint - Hide TOC on smaller screens */
531
+ @media (max-width: 576px) {
532
+ #toc-nav {
533
+ display: none;
534
+ }
535
+
536
+ .toc-nav-layout {
537
+ flex-direction: column;
538
+ }
539
+
540
+ .notes-main {
541
+ margin-left: 0;
542
+ }
543
+ }
369
544
</style>
370
545
</head>
371
546
<body>
372
- ${ content }
547
+ ${ processedContent }
373
548
<script nonce="${ nonce } ">
374
549
const vscode = acquireVsCodeApi();
375
550
const container = document.createElement('p');
0 commit comments