From 859e1f1a1c990e2699814a718e4896c5f159a3f7 Mon Sep 17 00:00:00 2001 From: xiaolai Date: Fri, 12 Dec 2025 06:49:43 +0800 Subject: [PATCH 01/22] feat: add configurable sidebar font sizes Add two new workbench settings for controlling font sizes in sidebars: - workbench.sideBar.fontSize: Controls primary sidebar font size (6-32px) - workbench.secondarySideBar.fontSize: Controls secondary sidebar font size This improves accessibility by allowing users to independently scale sidebar content without requiring full UI zoom or source code edits. Implementation uses CSS custom properties for live updates without reload. Default of 13px preserves existing behavior. Based on rejected VS Code PR #270851 - rejected with "In this area we do not accept PRs" despite 18 positive reactions and community support. --- patches/feat-sidebar-font-size.patch | 104 +++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 patches/feat-sidebar-font-size.patch diff --git a/patches/feat-sidebar-font-size.patch b/patches/feat-sidebar-font-size.patch new file mode 100644 index 0000000..cbccb67 --- /dev/null +++ b/patches/feat-sidebar-font-size.patch @@ -0,0 +1,104 @@ +diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +--- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts ++++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +@@ -131,2 +131,5 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { + } ++ if (e.affectsConfiguration('workbench.secondarySideBar.fontSize')) { ++ this.applyAuxiliaryBarFontSize(); ++ } + })); +@@ -173,2 +176,4 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { + container.style.borderRightWidth = borderColor && isPositionLeft ? '1px' : '0px'; ++ ++ this.applyAuxiliaryBarFontSize(container); + } +@@ -234,2 +239,16 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { + ++ private applyAuxiliaryBarFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const configuredSize = this.configurationService.getValue('workbench.secondarySideBar.fontSize'); ++ if (typeof configuredSize === 'number' && configuredSize > 0) { ++ target.style.setProperty('--vscode-workbench-secondary-sidebar-font-size', `${configuredSize}px`); ++ } else { ++ target.style.removeProperty('--vscode-workbench-secondary-sidebar-font-size'); ++ } ++ } ++ + protected shouldShowCompositeBar(): boolean { +diff --git a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +--- a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css ++++ b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +@@ -26,2 +26,6 @@ + } ++ ++.monaco-workbench .part.auxiliarybar > .content { ++ font-size: var(--vscode-workbench-secondary-sidebar-font-size, 13px); ++} + +diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +--- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css ++++ b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +@@ -20,2 +20,6 @@ + } ++ ++.monaco-workbench .part.sidebar > .content { ++ font-size: var(--vscode-workbench-sidebar-font-size, 13px); ++} + +diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +--- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts ++++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +@@ -111,2 +111,5 @@ export class SidebarPart extends AbstractPaneCompositePart { + } ++ if (e.affectsConfiguration('workbench.sideBar.fontSize')) { ++ this.applySidebarFontSize(); ++ } + })); +@@ -150,2 +153,4 @@ export class SidebarPart extends AbstractPaneCompositePart { + container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? ''; ++ ++ this.applySidebarFontSize(container); + } +@@ -275,2 +280,16 @@ export class SidebarPart extends AbstractPaneCompositePart { + ++ private applySidebarFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const configuredSize = this.configurationService.getValue('workbench.sideBar.fontSize'); ++ if (typeof configuredSize === 'number' && configuredSize > 0) { ++ target.style.setProperty('--vscode-workbench-sidebar-font-size', `${configuredSize}px`); ++ } else { ++ target.style.removeProperty('--vscode-workbench-sidebar-font-size'); ++ } ++ } ++ + private registerActions(): void { +diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts +--- a/src/vs/workbench/browser/workbench.contribution.ts ++++ b/src/vs/workbench/browser/workbench.contribution.ts +@@ -533,2 +533,18 @@ const registry = Registry.as(ConfigurationExtensions.Con + }, ++ 'workbench.sideBar.fontSize': { ++ 'type': 'number', ++ 'default': 13, ++ 'minimum': 6, ++ 'maximum': 32, ++ 'markdownDescription': localize('sideBarFontSize', "Controls the font size used for content inside the primary side bar."), ++ 'tags': ['accessibility'] ++ }, ++ 'workbench.secondarySideBar.fontSize': { ++ 'type': 'number', ++ 'default': 13, ++ 'minimum': 6, ++ 'maximum': 32, ++ 'markdownDescription': localize('secondarySideBarFontSize', "Controls the font size used for content inside the secondary side bar."), ++ 'tags': ['accessibility'] ++ }, + 'workbench.panel.showLabels': { From 47e2863d9e9795712dba2bb9230d64a3a5efbc7e Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Sun, 8 Feb 2026 19:20:15 +0100 Subject: [PATCH 02/22] feat(1.109): update patches (#2688) --- patches/brand.patch | 165 +++--- patches/cli.patch | 12 +- patches/disable-copilot.patch | 51 +- patches/fix-keymap.patch | 48 +- patches/fix-policies.patch | 38 +- patches/linux/arch-0-support.patch | 16 +- patches/linux/fix-build.patch | 535 ++++++++++-------- patches/version-1-update.patch | 114 ++-- ...h => disable-versioned-resources.patch.no} | 0 prepare_vscode.sh | 12 +- product.json | 32 +- upstream/insider.json | 4 +- 12 files changed, 534 insertions(+), 493 deletions(-) rename patches/windows/{disable-versioned-resources.patch => disable-versioned-resources.patch.no} (100%) diff --git a/patches/brand.patch b/patches/brand.patch index d21e506..2df46f0 100644 --- a/patches/brand.patch +++ b/patches/brand.patch @@ -62,48 +62,46 @@ index 1be4d0e..647b147 100644 -export const redundantImplicitActivationEvent = l10n.t("This activation event can be removed as VS Code generates these automatically from your package.json contribution declarations."); +export const redundantImplicitActivationEvent = l10n.t("This activation event can be removed as !!APP_NAME!! generates these automatically from your package.json contribution declarations."); diff --git a/extensions/extension-editing/src/extensionLinter.ts b/extensions/extension-editing/src/extensionLinter.ts -index 187100b..7514367 100644 +index 5c73304..3294fd8 100644 --- a/extensions/extension-editing/src/extensionLinter.ts +++ b/extensions/extension-editing/src/extensionLinter.ts -@@ -34,4 +34,4 @@ const relativeUrlRequiresHttpsRepository = l10n.t("Relative image URLs require a +@@ -34,3 +34,3 @@ const relativeUrlRequiresHttpsRepository = l10n.t("Relative image URLs require a const relativeBadgeUrlRequiresHttpsRepository = l10n.t("Relative badge URLs require a repository with HTTPS protocol to be specified in this package.json."); -const apiProposalNotListed = l10n.t("This proposal cannot be used because for this extension the product defines a fixed set of API proposals. You can test your extension but before publishing you MUST reach out to the VS Code team."); --const bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75.0 as VS Code will generate these automatically from your package.json contribution declarations."); +const apiProposalNotListed = l10n.t("This proposal cannot be used because for this extension the product defines a fixed set of API proposals. You can test your extension but before publishing you MUST reach out to the !!APP_NAME!! team."); -+const bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75.0 as !!APP_NAME!! will generate these automatically from your package.json contribution declarations."); - const starActivation = l10n.t("Using '*' activation is usually a bad idea as it impacts performance."); + diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json -index c883415..b3552db 100644 +index 94a1f61..c0ac9ea 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json -@@ -247,3 +247,3 @@ +@@ -250,3 +250,3 @@ "{Locked='](command:git.showOutput'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -275,4 +275,4 @@ +@@ -278,4 +278,4 @@ "config.showCommitInput": "Controls whether to show the commit input in the Git source control panel.", - "config.terminalAuthentication": "Controls whether to enable VS Code to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.", - "config.terminalGitEditor": "Controls whether to enable VS Code to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.", + "config.terminalAuthentication": "Controls whether to enable !!APP_NAME!! to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.", + "config.terminalGitEditor": "Controls whether to enable !!APP_NAME!! to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.", "config.timeline.showAuthor": "Controls whether to show the commit author in the Timeline view.", -@@ -346,3 +346,3 @@ +@@ -349,3 +349,3 @@ "{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -356,3 +356,3 @@ +@@ -359,3 +359,3 @@ "{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -366,3 +366,3 @@ +@@ -369,3 +369,3 @@ "{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -378,6 +378,6 @@ +@@ -381,6 +381,6 @@ "view.workbench.scm.disabled": { - "message": "If you would like to use Git features, please enable Git in your [settings](command:workbench.action.openSettings?%5B%22git.enabled%22%5D).\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "If you would like to use Git features, please enable Git in your [settings](command:workbench.action.openSettings?%5B%22git.enabled%22%5D).\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -112,7 +110,7 @@ index c883415..b3552db 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -386,6 +386,6 @@ +@@ -389,6 +389,6 @@ "view.workbench.scm.empty": { - "message": "In order to use Git features, you can open a folder containing a Git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.cloneRecursive)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "In order to use Git features, you can open a folder containing a Git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.cloneRecursive)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -121,7 +119,7 @@ index c883415..b3552db 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -394,6 +394,6 @@ +@@ -397,6 +397,6 @@ "view.workbench.scm.folder": { - "message": "The folder currently open doesn't have a Git repository. You can initialize a repository which will enable source control features powered by Git.\n[Initialize Repository](command:git.init?%5Btrue%5D)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "The folder currently open doesn't have a Git repository. You can initialize a repository which will enable source control features powered by Git.\n[Initialize Repository](command:git.init?%5Btrue%5D)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -130,7 +128,7 @@ index c883415..b3552db 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -402,6 +402,6 @@ +@@ -405,6 +405,6 @@ "view.workbench.scm.workspace": { - "message": "The workspace currently open doesn't have any folders containing Git repositories. You can initialize a repository on a folder which will enable source control features powered by Git.\n[Initialize Repository](command:git.init)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "The workspace currently open doesn't have any folders containing Git repositories. You can initialize a repository on a folder which will enable source control features powered by Git.\n[Initialize Repository](command:git.init)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -139,7 +137,7 @@ index c883415..b3552db 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -410,6 +410,6 @@ +@@ -413,6 +413,6 @@ "view.workbench.scm.emptyWorkspace": { - "message": "The workspace currently open doesn't have any folders containing Git repositories.\n[Add Folder to Workspace](command:workbench.action.addRootFolder)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "The workspace currently open doesn't have any folders containing Git repositories.\n[Add Folder to Workspace](command:workbench.action.addRootFolder)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -148,27 +146,27 @@ index c883415..b3552db 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -428,3 +428,3 @@ +@@ -431,3 +431,3 @@ "{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -437,3 +437,3 @@ +@@ -440,3 +440,3 @@ "{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -445,3 +445,3 @@ +@@ -448,3 +448,3 @@ "{Locked='](command:git.manageUnsafeRepositories'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -453,3 +453,3 @@ +@@ -456,3 +456,3 @@ "{Locked='](command:git.manageUnsafeRepositories'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -458,6 +458,6 @@ +@@ -461,6 +461,6 @@ "view.workbench.scm.closedRepository": { - "message": "A Git repository was found that was previously closed.\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "A Git repository was found that was previously closed.\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -177,7 +175,7 @@ index c883415..b3552db 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -466,6 +466,6 @@ +@@ -469,6 +469,6 @@ "view.workbench.scm.closedRepositories": { - "message": "Git repositories were found that were previously closed.\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "Git repositories were found that were previously closed.\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -186,12 +184,12 @@ index c883415..b3552db 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -477,3 +477,3 @@ +@@ -480,3 +480,3 @@ "{Locked='](command:git.clone'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -481,3 +481,3 @@ +@@ -484,3 +484,3 @@ }, - "view.workbench.learnMore": "To learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm)." + "view.workbench.learnMore": "To learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm)." @@ -275,7 +273,7 @@ index e82030e..ac999f6 100644 + "displayName": "Jake support for !!APP_NAME!!", "jake.taskDefinition.type.description": "The Jake task to customize.", diff --git a/extensions/json-language-features/package.nls.json b/extensions/json-language-features/package.nls.json -index abc07c9..2a6de09 100644 +index 9052d37..f505551 100644 --- a/extensions/json-language-features/package.nls.json +++ b/extensions/json-language-features/package.nls.json @@ -11,3 +11,3 @@ @@ -361,7 +359,7 @@ index a8bbe5d..00694dc 100644 + "comment": "The simpler (?<=\\bProcess\\.|\\bCommandLine\\.) breaks !!APP_NAME!! / Atom, see https://github.com/textmate/swift.tmbundle/issues/29", "name": "support.variable.swift", diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json -index fb28b2a..788780a 100644 +index e01e4de..1797d03 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json @@ -82,4 +82,4 @@ @@ -452,7 +450,7 @@ index 207698d..9948527 100644 + vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json -index 3f586a8..ece1d67 100644 +index c3c08b1..d0f4d3d 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -2,3 +2,3 @@ @@ -539,15 +537,15 @@ index 74d25c6..878e228 100644 + progress.report({ message: 'Installing !!APP_NAME!! Server' }); serverLocation = await downloadAndUnzipVSCodeServer(updateUrl, commit, quality, serverBin, m => outputChannel.appendLine(m)); diff --git a/src/main.ts b/src/main.ts -index ec2e45c..8d89e2b 100644 +index ecbbb16..a61b2d3 100644 --- a/src/main.ts +++ b/src/main.ts -@@ -412,3 +412,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { +@@ -416,3 +416,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { const defaultArgvConfigContent = [ - '// This configuration file allows you to pass permanent command line arguments to VS Code.', + '// This configuration file allows you to pass permanent command line arguments to !!APP_NAME!!.', '// Only a subset of arguments is currently supported to reduce the likelihood of breaking', -@@ -418,6 +418,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { +@@ -422,6 +422,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { '//', - '// NOTE: Changing this file requires a restart of VS Code.', + '// NOTE: Changing this file requires a restart of !!APP_NAME!!.', @@ -557,10 +555,10 @@ index ec2e45c..8d89e2b 100644 + ' // This can help in cases where you see rendering issues in !!APP_NAME!!.', ' // "disable-hardware-acceleration": true', diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts -index 43aba01..23b55ea 100644 +index a3efce9..ba6055d 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts -@@ -526,3 +526,3 @@ export class CodeApplication extends Disposable { +@@ -532,3 +532,3 @@ export class CodeApplication extends Disposable { async startup(): Promise { - this.logService.debug('Starting VS Code'); + this.logService.debug('Starting !!APP_NAME!!'); @@ -603,10 +601,10 @@ index cdf0c67..d567815 100644 + throw new Error(nls.localize('restartCode', "Please restart !!APP_NAME!! before reinstalling {0}.", this.manifest.displayName || this.manifest.name)); } diff --git a/src/vs/platform/extensions/common/extensionValidator.ts b/src/vs/platform/extensions/common/extensionValidator.ts -index 8740151..dfa35a5 100644 +index 6346b9d..77ff0f9 100644 --- a/src/vs/platform/extensions/common/extensionValidator.ts +++ b/src/vs/platform/extensions/common/extensionValidator.ts -@@ -374,5 +374,5 @@ export function areApiProposalsCompatible(apiProposals: string[], arg1?: string[ +@@ -380,5 +380,5 @@ export function areApiProposalsCompatible(apiProposals: string[], arg1?: string[ if (incompatibleProposals.length === 1) { - notices.push(nls.localize('apiProposalMismatch1', "This extension is using the API proposal '{0}' that is not compatible with the current version of VS Code.", incompatibleProposals[0])); + notices.push(nls.localize('apiProposalMismatch1', "This extension is using the API proposal '{0}' that is not compatible with the current version of !!APP_NAME!!.", incompatibleProposals[0])); @@ -642,25 +640,14 @@ index e5fb1ab..bd4740b 100644 + description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new !!APP_NAME!! versions in the background on Windows."), included: isWindows && !isWeb diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index ed8043f..ca7a4dc 100644 +index 0e63d40..5b8085e 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts -@@ -23,3 +23,3 @@ export type UpdateErrorClassification = { +@@ -33,3 +33,3 @@ export type UpdateErrorClassification = { messageHash: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The hash of the error message.' }; - comment: 'This is used to know how often VS Code updates have failed.'; + comment: 'This is used to know how often !!APP_NAME!! updates have failed.'; }; -diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts -index b78ebc5..9b0eb56 100644 ---- a/src/vs/platform/update/electron-main/updateService.darwin.ts -+++ b/src/vs/platform/update/electron-main/updateService.darwin.ts -@@ -122,4 +122,4 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau - owner: 'joaomoreno'; -- newVersion: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The version number of the new VS Code that has been downloaded.' }; -- comment: 'This is used to know how often VS Code has successfully downloaded the update.'; -+ newVersion: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The version number of the new !!APP_NAME!! that has been downloaded.' }; -+ comment: 'This is used to know how often !!APP_NAME!! has successfully downloaded the update.'; - }; diff --git a/src/vs/server/node/server.cli.ts b/src/vs/server/node/server.cli.ts index 6a0eacf..2959dad 100644 --- a/src/vs/server/node/server.cli.ts @@ -689,10 +676,10 @@ index 8337870..fdf02ac 100644 + description: localize({ key: 'vscode.extension.contributes.views.containers.id', comment: ['Contribution refers to those that an extension contributes to !!APP_NAME!! through an extension/contribution point. '] }, "Unique id used to identify the container in which views can be contributed using 'views' contribution point"), type: 'string', diff --git a/src/vs/workbench/api/common/extHostApiCommands.ts b/src/vs/workbench/api/common/extHostApiCommands.ts -index 9349335..a94ff8d 100644 +index a04bbd0..202f130 100644 --- a/src/vs/workbench/api/common/extHostApiCommands.ts +++ b/src/vs/workbench/api/common/extHostApiCommands.ts -@@ -443,3 +443,3 @@ const newCommands: ApiCommand[] = [ +@@ -445,3 +445,3 @@ const newCommands: ApiCommand[] = [ ApiCommandArgument.Uri.with('resource', 'Resource to open'), - ApiCommandArgument.String.with('viewId', 'Custom editor view id. This should be the viewType string for custom editors or the notebookType string for notebooks. Use \'default\' to use VS Code\'s default text editor'), + ApiCommandArgument.String.with('viewId', 'Custom editor view id. This should be the viewType string for custom editors or the notebookType string for notebooks. Use \'default\' to use !!APP_NAME!!\'s default text editor'), @@ -718,7 +705,7 @@ index 0d71384..ae8d169 100644 + test('Opening a notebook results in !!APP_NAME!! firing the event onDidChangeActiveNotebookEditor twice #118470', function () { let count = 0; diff --git a/src/vs/workbench/browser/actions/developerActions.ts b/src/vs/workbench/browser/actions/developerActions.ts -index 1fda3db..bbadf28 100644 +index 91f52f5..dbb0ad4 100644 --- a/src/vs/workbench/browser/actions/developerActions.ts +++ b/src/vs/workbench/browser/actions/developerActions.ts @@ -688,3 +688,3 @@ class PolicyDiagnosticsAction extends Action2 { @@ -745,47 +732,47 @@ index e342f83..7c314e6 100644 + throw new Error('Unable to create the !!APP_NAME!! workbench more than once.'); } else { diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index dd9f46e..fa0c391 100644 +index 5ea32fb..23584f4 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -731,3 +731,3 @@ const registry = Registry.as(ConfigurationExtensions.Con +@@ -748,3 +748,3 @@ const registry = Registry.as(ConfigurationExtensions.Con localize('profileName', "`${profileName}`: name of the profile in which the workspace is opened (e.g. Data Science (Profile)). Ignored if default profile is used."), - localize('appName', "`${appName}`: e.g. VS Code."), + localize('appName', "`${appName}`: e.g. !!APP_NAME!!."), localize('remoteName', "`${remoteName}`: e.g. SSH"), diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts -index c0528fe..d1fd07f 100644 +index 3a27ea1..684e2c7 100644 --- a/src/vs/workbench/common/contextkeys.ts +++ b/src/vs/workbench/common/contextkeys.ts -@@ -39,3 +39,3 @@ export const EmbedderIdentifierContext = new RawContextKey(' +@@ -43,3 +43,3 @@ export const EmbedderIdentifierContext = new RawContextKey(' -export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether VS Code is running under automation/smoke test")); +export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether !!APP_NAME!! is running under automation/smoke test")); diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -index fac472c..40e59c7 100644 +index d211a1d..bfb973c 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -@@ -415,3 +415,3 @@ configurationRegistry.registerConfiguration({ +@@ -467,3 +467,3 @@ configurationRegistry.registerConfiguration({ nls.localize('chat.mcp.access.none', "No access to MCP servers."), - nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), + nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), nls.localize('chat.mcp.access.any', "Allow access to any installed MCP server.") -@@ -442,3 +442,3 @@ configurationRegistry.registerConfiguration({ +@@ -494,3 +494,3 @@ configurationRegistry.registerConfiguration({ { - key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), + key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), }, diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts -index b7c9c49..137d77e 100644 +index 88a46ef..6efa8ab 100644 --- a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts +++ b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts -@@ -104,3 +104,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { +@@ -115,3 +115,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { // Register VSCode agent -- const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about VS Code").value, ChatAgentLocation.Chat, undefined, context, controller); -+ const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about !!APP_NAME!!").value, ChatAgentLocation.Chat, undefined, context, controller); +- const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about VS Code").value, ChatAgentLocation.Chat, ChatModeKind.Agent, context, controller); ++ const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about !!APP_NAME!!").value, ChatAgentLocation.Chat, ChatModeKind.Agent, context, controller); disposables.add(vscodeDisposable); -@@ -121,4 +121,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { +@@ -132,4 +132,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { displayName: localize('setupToolDisplayName', "New Workspace"), - modelDescription: 'Scaffold a new workspace in VS Code', - userDescription: localize('setupToolsDescription', "Scaffold a new workspace in VS Code"), @@ -793,10 +780,10 @@ index b7c9c49..137d77e 100644 + userDescription: localize('setupToolsDescription', "Scaffold a new workspace in !!APP_NAME!!"), canBeReferencedInPrompt: true, diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts -index b7e91c4..6e0c67e 100644 +index d582ca6..b721308 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts -@@ -179,5 +179,5 @@ export class PromptValidator { +@@ -218,5 +218,5 @@ export class PromptValidator { if (validGithubCopilotAttributeNames.value.has(attribute.key)) { - report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in VS Code.", attribute.key), attribute.range, MarkerSeverity.Info)); + report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in !!APP_NAME!!.", attribute.key), attribute.range, MarkerSeverity.Info)); @@ -814,7 +801,7 @@ index 7504a9c..2e485bb 100644 + description: nls.localize('debugServer', "For debug extension development only: if a port is specified !!APP_NAME!! tries to connect to a debug adapter running in server mode"), default: 4711 diff --git a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -index f6c294e..6fd209d 100644 +index 6956d79..ea5fa28 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts @@ -353,3 +353,3 @@ CommandsRegistry.registerCommand({ @@ -845,7 +832,7 @@ index f6c294e..6fd209d 100644 + : localize('InstallVSIXAction.successReload', "Completed installing extension. Please reload VSCodium to enable it."), [{ diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts -index 2b8d2e6..46fb2ca 100644 +index f2a1f70..4bbabd2 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts @@ -109,3 +109,3 @@ export class PromptExtensionInstallFailureAction extends Action { @@ -869,7 +856,7 @@ index 2b8d2e6..46fb2ca 100644 + this.updateStatus({ icon: warningIcon, message: new MarkdownString(localize('deprecated with alternate settings tooltip', "This extension is deprecated as this functionality is now built-in to !!APP_NAME!!. Configure these {0} to use this functionality.", link)) }, true); } else { diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -index 8574e03..bb1f721 100644 +index 23ea0f7..0e2c889 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts @@ -477,3 +477,3 @@ export class Extension implements IExtension { @@ -1038,7 +1025,7 @@ index e89f6ec..1228544 100644 + Write-Host "`e[0m`e[7m * `e[0;103m !!APP_NAME!! Python powershell activation failed with exit code $($activationError.Exception.Message) `e[0m" } diff --git a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts -index 82345c4..12861a6 100644 +index 7431c14..b9ad2c7 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts @@ -311,3 +311,3 @@ const terminalConfiguration: IStringDictionary = { @@ -1081,7 +1068,7 @@ index 82345c4..12861a6 100644 - markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.23.251008001) shipped with VS Code, instead of the one bundled with Windows."), + markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.23.251008001) shipped with !!APP_NAME!!, instead of the one bundled with Windows."), type: 'boolean', -@@ -591,3 +591,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -606,3 +606,3 @@ const terminalConfiguration: IStringDictionary = { restricted: true, - markdownDescription: localize('terminal.integrated.shellIntegration.enabled', "Determines whether or not shell integration is auto-injected to support features like enhanced command tracking and current working directory detection. \n\nShell integration works by injecting the shell with a startup script. The script gives VS Code insight into what is happening within the terminal.\n\nSupported shells:\n\n- Linux/macOS: bash, fish, pwsh, zsh\n - Windows: pwsh, git bash\n\nThis setting applies only when terminals are created, so you will need to restart your terminals for it to take effect.\n\n Note that the script injection may not work if you have custom arguments defined in the terminal profile, have enabled {1}, have a [complex bash `PROMPT_COMMAND`](https://code.visualstudio.com/docs/editor/integrated-terminal#_complex-bash-promptcommand), or other unsupported setup. To disable decorations, see {0}", '`#terminal.integrated.shellIntegration.decorationsEnabled#`', '`#editor.accessibilitySupport#`'), + markdownDescription: localize('terminal.integrated.shellIntegration.enabled', "Determines whether or not shell integration is auto-injected to support features like enhanced command tracking and current working directory detection. \n\nShell integration works by injecting the shell with a startup script. The script gives !!APP_NAME!! insight into what is happening within the terminal.\n\nSupported shells:\n\n- Linux/macOS: bash, fish, pwsh, zsh\n - Windows: pwsh, git bash\n\nThis setting applies only when terminals are created, so you will need to restart your terminals for it to take effect.\n\n Note that the script injection may not work if you have custom arguments defined in the terminal profile, have enabled {1}, have a [complex bash `PROMPT_COMMAND`](https://code.visualstudio.com/docs/editor/integrated-terminal#_complex-bash-promptcommand), or other unsupported setup. To disable decorations, see {0}", '`#terminal.integrated.shellIntegration.decorationsEnabled#`', '`#editor.accessibilitySupport#`'), @@ -1096,22 +1083,22 @@ index 4979520..30ae11b 100644 + markdownDescription: localize('terminal.integrated.autoReplies', "A set of messages that, when encountered in the terminal, will be automatically responded to. Provided the message is specific enough, this can help automate away common responses.\n\nRemarks:\n\n- Use {0} to automatically respond to the terminate batch job prompt on Windows.\n- The message includes escape sequences so the reply might not happen with styled text.\n- Each reply can only happen once every second.\n- Use {1} in the reply to mean the enter key.\n- To unset a default key, set the value to null.\n- Restart !!APP_NAME!! if new don't apply.", '`"Terminate batch job (Y/N)": "Y\\r"`', '`"\\r"`'), type: 'object', diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts -index b5ec1c1..737f2be 100644 +index 5913bb7..ae402ea 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts -@@ -240,3 +240,3 @@ export const CreateAndRunTaskToolData: IToolData = { +@@ -241,3 +241,3 @@ export const CreateAndRunTaskToolData: IToolData = { 'type': 'array', - 'description': `The problem matcher to use to parse task output for errors and warnings. Can be a predefined matcher like '$tsc' (TypeScript), '$eslint - stylish', '$gcc', etc., or a custom pattern defined in tasks.json. This helps VS Code display errors in the Problems panel and enables quick navigation to error locations.`, + 'description': `The problem matcher to use to parse task output for errors and warnings. Can be a predefined matcher like '$tsc' (TypeScript), '$eslint - stylish', '$gcc', etc., or a custom pattern defined in tasks.json. This helps !!APP_NAME!! display errors in the Problems panel and enables quick navigation to error locations.`, 'items': { diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts -index f92fe12..a5a7e02 100644 +index f469f6e..11e2249 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts -@@ -152,3 +152,3 @@ export const RunTaskToolData: IToolData = { +@@ -153,3 +153,3 @@ export const RunTaskToolData: IToolData = { displayName: localize('runInTerminalTool.displayName', 'Run Task'), -- modelDescription: 'Runs a VS Code task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the run_in_terminal tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.', -+ modelDescription: 'Runs a !!APP_NAME!! task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the run_in_terminal tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.', +- modelDescription: `Runs a VS Code task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the ${TerminalToolId.RunInTerminal} tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.`, ++ modelDescription: `Runs a !!APP_NAME!! task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the ${TerminalToolId.RunInTerminal} tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.`, userDescription: localize('runInTerminalTool.userDescription', 'Run tasks in the workspace'), diff --git a/src/vs/workbench/contrib/terminalContrib/voice/browser/terminalVoiceActions.ts b/src/vs/workbench/contrib/terminalContrib/voice/browser/terminalVoiceActions.ts index 0f23e5a..27f311e 100644 @@ -1123,17 +1110,17 @@ index 0f23e5a..27f311e 100644 + message = localize('terminal.voice.installSpeechExtension', "Would you like to install '!!APP_NAME!! Speech' extension from 'Microsoft'?"); run = () => commandService.executeCommand('workbench.extensions.installExtension', 'ms-vscode.vscode-speech'); diff --git a/src/vs/workbench/contrib/update/browser/update.ts b/src/vs/workbench/contrib/update/browser/update.ts -index cc12ca6..056d2d8 100644 +index 55cc7d3..b2a7789 100644 --- a/src/vs/workbench/contrib/update/browser/update.ts +++ b/src/vs/workbench/contrib/update/browser/update.ts -@@ -583,4 +583,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor +@@ -621,4 +621,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor detail: newQuality === 'insider' ? - nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of VS Code.") : - nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of VS Code."), + nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of !!APP_NAME!!.") : + nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of !!APP_NAME!!."), primaryButton: nls.localize({ key: 'reload', comment: ['&& denotes a mnemonic'] }, "&&Reload") -@@ -619,3 +619,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor +@@ -657,3 +657,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor message: nls.localize('selectSyncService.message', "Choose the settings sync service to use after changing the version"), - detail: nls.localize('selectSyncService.detail', "The Insiders version of VS Code will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."), + detail: nls.localize('selectSyncService.detail', "The Insiders version of !!APP_NAME!! will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."), @@ -1153,15 +1140,15 @@ index 393c8c3..9268a6c 100644 + content += `// By default, !!APP_NAME!! trusts "localhost".\n`; } diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts -index b63e894..2798ab1 100644 +index 2b50e71..f322981 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts -@@ -49,3 +49,3 @@ registerAction2(class extends Action2 { +@@ -52,3 +52,3 @@ registerAction2(class extends Action2 { metadata: { - description: localize2('minWelcomeDescription', 'Opens a Walkthrough to help you get started in VS Code.') + description: localize2('minWelcomeDescription', 'Opens a Walkthrough to help you get started in !!APP_NAME!!.') } -@@ -311,3 +311,3 @@ configurationRegistry.registerConfiguration({ +@@ -322,3 +322,3 @@ configurationRegistry.registerConfiguration({ localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.none' }, "Start without an editor."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page, with content to aid in getting started with VS Code and extensions."), + localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page, with content to aid in getting started with !!APP_NAME!! and extensions."), @@ -1345,15 +1332,15 @@ index bdd30bf..317d11c 100644 +Well if you have got this far then you will have touched on some of the editing features in !!APP_NAME!!. But don't stop now :) We have lots of additional [documentation](https://code.visualstudio.com/docs), [introductory videos](https://code.visualstudio.com/docs/getstarted/introvideos) and [tips and tricks](https://go.microsoft.com/fwlink/?linkid=852118) for the product that will help you learn how to use it. And while you are here, here are a few additional things you can try: - Open the Integrated Terminal by pressing kb(workbench.action.terminal.toggleTerminal), then see what's possible by [reviewing the terminal documentation](https://code.visualstudio.com/docs/editor/integrated-terminal) diff --git a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts -index c512b64..dfa2150 100644 +index d134535..93cae5f 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts -@@ -733,3 +733,3 @@ Registry.as(ConfigurationExtensions.Configuration) +@@ -765,3 +765,3 @@ Registry.as(ConfigurationExtensions.Configuration) default: true, - description: localize('workspace.trust.description', "Controls whether or not Workspace Trust is enabled within VS Code."), + description: localize('workspace.trust.description', "Controls whether or not Workspace Trust is enabled within !!APP_NAME!!."), tags: [WORKSPACE_TRUST_SETTING_TAG], -@@ -779,3 +779,3 @@ Registry.as(ConfigurationExtensions.Configuration) +@@ -811,3 +811,3 @@ Registry.as(ConfigurationExtensions.Configuration) default: true, - markdownDescription: localize('workspace.trust.emptyWindow.description', "Controls whether or not the empty window is trusted by default within VS Code. When used with `#{0}#`, you can enable the full functionality of VS Code without prompting in an empty window.", WORKSPACE_TRUST_UNTRUSTED_FILES), + markdownDescription: localize('workspace.trust.emptyWindow.description', "Controls whether or not the empty window is trusted by default within !!APP_NAME!!. When used with `#{0}#`, you can enable the full functionality of !!APP_NAME!! without prompting in an empty window.", WORKSPACE_TRUST_UNTRUSTED_FILES), @@ -1373,7 +1360,7 @@ index 5fad6f9..4edfd81 100644 + description: localize('argv.useInMemorySecretStorage', "Ensures that an in-memory store will be used for secret storage instead of using the OS's credential store. This is often used when running !!APP_NAME!! extension tests or when you're experiencing difficulties with the credential store.") }, diff --git a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts -index df1a6e3..14db691 100644 +index ea7f364..25c4fda 100644 --- a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts +++ b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts @@ -1044,3 +1044,3 @@ export class ExtensionManagementService extends CommontExtensionManagementServic @@ -1382,7 +1369,7 @@ index df1a6e3..14db691 100644 + const productName = localize('!!APP_NAME!! for Web', "{0} for the Web", this.productService.nameLong); const virtualWorkspaceSupport = this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(manifest); diff --git a/src/vs/workbench/services/extensions/common/extensionsRegistry.ts b/src/vs/workbench/services/extensions/common/extensionsRegistry.ts -index f6c18c6..6d6b39c 100644 +index 6704355..1d58ea0 100644 --- a/src/vs/workbench/services/extensions/common/extensionsRegistry.ts +++ b/src/vs/workbench/services/extensions/common/extensionsRegistry.ts @@ -181,3 +181,3 @@ export const schema: IJSONSchema = { @@ -1424,17 +1411,17 @@ index f6c18c6..6d6b39c 100644 - description: nls.localize('vscode.extension.activationEvents', 'Activation events for the VS Code extension.'), + description: nls.localize('vscode.extension.activationEvents', 'Activation events for the !!APP_NAME!! extension.'), type: 'array', -@@ -423,3 +423,3 @@ export const schema: IJSONSchema = { +@@ -428,3 +428,3 @@ export const schema: IJSONSchema = { label: '*', - description: nls.localize('vscode.extension.activationEvents.star', 'An activation event emitted on VS Code startup. To ensure a great end user experience, please use this activation event in your extension only when no other activation events combination works in your use-case.'), + description: nls.localize('vscode.extension.activationEvents.star', 'An activation event emitted on !!APP_NAME!! startup. To ensure a great end user experience, please use this activation event in your extension only when no other activation events combination works in your use-case.'), body: '*' -@@ -595,3 +595,3 @@ export const schema: IJSONSchema = { +@@ -609,3 +609,3 @@ export const schema: IJSONSchema = { 'vscode:prepublish': { - description: nls.localize('vscode.extension.scripts.prepublish', 'Script executed before the package is published as a VS Code extension.'), + description: nls.localize('vscode.extension.scripts.prepublish', 'Script executed before the package is published as a !!APP_NAME!! extension.'), type: 'string' -@@ -599,3 +599,3 @@ export const schema: IJSONSchema = { +@@ -613,3 +613,3 @@ export const schema: IJSONSchema = { 'vscode:uninstall': { - description: nls.localize('vscode.extension.scripts.uninstall', 'Uninstall hook for VS Code extension. Script that gets executed when the extension is completely uninstalled from VS Code which is when VS Code is restarted (shutdown and start) after the extension is uninstalled. Only Node scripts are supported.'), + description: nls.localize('vscode.extension.scripts.uninstall', 'Uninstall hook for !!APP_NAME!! extension. Script that gets executed when the extension is completely uninstalled from !!APP_NAME!! which is when !!APP_NAME!! is restarted (shutdown and start) after the extension is uninstalled. Only Node scripts are supported.'), diff --git a/patches/cli.patch b/patches/cli.patch index 22ac8d4..7e81ed8 100644 --- a/patches/cli.patch +++ b/patches/cli.patch @@ -303,11 +303,11 @@ index 55f1dad..3b7ef5c 100644 - pub fn env_default() -> Option { diff --git a/extensions/tunnel-forwarding/src/extension.ts b/extensions/tunnel-forwarding/src/extension.ts -index 299c728..9fb635d 100644 +index 2f71999..e689f62 100644 --- a/extensions/tunnel-forwarding/src/extension.ts +++ b/extensions/tunnel-forwarding/src/extension.ts -@@ -28,3 +28,3 @@ const cliPath = process.env.VSCODE_FORWARDING_IS_DEV - process.platform === 'darwin' ? 'bin' : '../../bin', -- vscode.env.appQuality === 'stable' ? 'code-tunnel' : 'code-tunnel-insiders', -+ '!!TUNNEL_APP_NAME!!' - ) + (process.platform === 'win32' ? '.exe' : ''); +@@ -37,3 +37,3 @@ if (process.env.VSCODE_FORWARDING_IS_DEV) { + +- const cliName = vscode.env.appQuality === 'stable' ? 'code-tunnel' : 'code-tunnel-insiders'; ++ const cliName = '!!TUNNEL_APP_NAME!!'; + const extension = process.platform === 'win32' ? '.exe' : ''; diff --git a/patches/disable-copilot.patch b/patches/disable-copilot.patch index f00ec4b..e5f57d2 100644 --- a/patches/disable-copilot.patch +++ b/patches/disable-copilot.patch @@ -1,61 +1,38 @@ diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts -index 2543324..338c0ca 100644 +index 7b64c28..bea3a3f 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts -@@ -170,3 +170,4 @@ abstract class OpenChatGlobalAction extends Action2 { +@@ -192,3 +192,4 @@ abstract class OpenChatGlobalAction extends Action2 { ChatContextKeys.Setup.hidden.negate(), - ChatContextKeys.Setup.disabled.negate() + ChatContextKeys.Setup.disabled.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate() ) -@@ -734,3 +735,3 @@ export function registerChatActions() { +@@ -806,3 +807,3 @@ export function registerChatActions() { precondition: ContextKeyExpr.and( - ChatContextKeys.Setup.installed, + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.disabled.negate(), -@@ -947,3 +948,4 @@ MenuRegistry.appendMenuItem(MenuId.CommandCenter, { - ChatContextKeys.Setup.hidden.negate(), -- ChatContextKeys.Setup.disabled.negate() -+ ChatContextKeys.Setup.disabled.negate(), -+ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() - ), -@@ -964,3 +966,4 @@ MenuRegistry.appendMenuItem(MenuId.TitleBar, { - ChatContextKeys.Setup.hidden.negate(), -- ChatContextKeys.Setup.disabled.negate() -+ ChatContextKeys.Setup.disabled.negate(), -+ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() - ), -@@ -981,3 +984,4 @@ registerAction2(class ToggleCopilotControl extends ToggleTitleBarConfigAction { - ChatContextKeys.Setup.hidden.negate(), -- ChatContextKeys.Setup.disabled.negate() -+ ChatContextKeys.Setup.disabled.negate(), -+ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() - ), -@@ -1119,3 +1123,4 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, { +@@ -1232,3 +1233,4 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, { ChatContextKeys.Setup.hidden.negate(), - ChatContextKeys.Setup.disabled.negate() + ChatContextKeys.Setup.disabled.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate() ) diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -index fac472c..107a3b1 100644 +index d211a1d..cfbcdf5 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -@@ -186,3 +186,3 @@ configurationRegistry.registerConfiguration({ - markdownDescription: nls.localize('chat.commandCenter.enabled', "Controls whether the command center shows a menu for actions to control chat (requires {0}).", '`#window.commandCenter#`'), -- default: true -+ default: false - }, -@@ -802,3 +802,3 @@ configurationRegistry.registerConfiguration({ +@@ -969,3 +969,3 @@ configurationRegistry.registerConfiguration({ description: nls.localize('chat.disableAIFeatures', "Disable and hide built-in AI features provided by GitHub Copilot, including chat and inline suggestions."), - default: false, + default: true, scope: ConfigurationScope.WINDOW diff --git a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts -index 8953884..cf0c2d2 100644 +index ddb5df4..7831288 100644 --- a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts -@@ -67,10 +67,9 @@ const chatViewDescriptor: IViewDescriptor = { +@@ -70,10 +70,9 @@ const chatViewDescriptor: IViewDescriptor = { ctorDescriptor: new SyncDescriptor(ChatViewPane), - when: ContextKeyExpr.or( - ContextKeyExpr.or( @@ -74,10 +51,10 @@ index 8953884..cf0c2d2 100644 + ) }; diff --git a/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts b/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts -index 62efc91..12e97c6 100644 +index 9085864..4331066 100644 --- a/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts +++ b/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts -@@ -119,3 +119,3 @@ export namespace ChatContextKeyExprs { +@@ -126,3 +126,3 @@ export namespace ChatContextKeyExprs { export const chatSetupTriggerContext = ContextKeyExpr.or( - ChatContextKeys.Setup.installed.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), @@ -97,19 +74,19 @@ index 7f4dfea..5957267 100644 + when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), weight: 40, diff --git a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts -index 6f533f1..56c8f9d 100644 +index c38dc40..a3e398c 100644 --- a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts +++ b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts -@@ -685,3 +685,3 @@ registerAction2(class extends Action2 { +@@ -704,3 +704,3 @@ registerAction2(class extends Action2 { ChatContextKeys.Setup.disabled.negate(), - ChatContextKeys.Setup.installed.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ContextKeyExpr.in(ResourceContextKey.Resource.key, 'git.mergeChanges'), diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts -index cfea087..5f3efe3 100644 +index 012d3c5..2f53955 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts -@@ -1391,3 +1391,3 @@ registerAction2(class extends Action2 { +@@ -1417,3 +1417,3 @@ registerAction2(class extends Action2 { ChatContextKeys.Setup.disabled.negate(), - ChatContextKeys.Setup.installed.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), diff --git a/patches/fix-keymap.patch b/patches/fix-keymap.patch index 9f7f637..59728e8 100644 --- a/patches/fix-keymap.patch +++ b/patches/fix-keymap.patch @@ -1,5 +1,5 @@ diff --git a/.npmrc b/.npmrc -index 060337b..9292787 100644 +index 50d910c..472b622 100644 --- a/.npmrc +++ b/.npmrc @@ -5,2 +5,3 @@ runtime="electron" @@ -7,7 +7,7 @@ index 060337b..9292787 100644 +build_from_source_native_keymap="no" legacy-peer-deps="true" diff --git a/build/.moduleignore b/build/.moduleignore -index fc7c538..7aece0d 100644 +index ed36151..5b040cc 100644 --- a/build/.moduleignore +++ b/build/.moduleignore @@ -65,7 +65,7 @@ fsevents/test/** @@ -24,27 +24,27 @@ index fc7c538..7aece0d 100644 +!@vscodium/native-keymap/build/Release/*.node diff --git a/eslint.config.js b/eslint.config.js -index e9809e6..6065336 100644 +index 47eeebf..f8077c2 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1465,3 +1465,3 @@ export default tseslint.config( 'node:module', - 'native-keymap', + '@vscodium/native-keymap', - 'native-watchdog', + 'net', diff --git a/package-lock.json b/package-lock.json -index b7ae476..93692b8 100644 +index 801e87b..a991591 100644 --- a/package-lock.json +++ b/package-lock.json -@@ -29,2 +29,3 @@ +@@ -32,2 +32,3 @@ "@vscode/windows-registry": "^1.1.0", + "@vscodium/native-keymap": "3.3.7-258424", - "@xterm/addon-clipboard": "^0.3.0-beta.91", -@@ -46,3 +47,2 @@ - "native-is-elevated": "0.8.0", + "@xterm/addon-clipboard": "^0.3.0-beta.109", +@@ -49,3 +50,2 @@ + "native-is-elevated": "0.9.0", - "native-keymap": "^3.3.5", - "native-watchdog": "^1.4.1", -@@ -3300,2 +3300,9 @@ + "node-pty": "^1.2.0-beta.10", +@@ -3674,2 +3674,9 @@ }, + "node_modules/@vscodium/native-keymap": { + "version": "3.3.7-258424", @@ -54,7 +54,7 @@ index b7ae476..93692b8 100644 + "license": "MIT" + }, "node_modules/@webassemblyjs/ast": { -@@ -12516,5 +12523,6 @@ +@@ -12741,5 +12748,6 @@ "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -64,17 +64,17 @@ index b7ae476..93692b8 100644 + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" }, -@@ -12527,9 +12535,2 @@ +@@ -12752,9 +12760,2 @@ }, - "node_modules/native-keymap": { -- "version": "3.3.7", -- "resolved": "https://registry.npmjs.org/native-keymap/-/native-keymap-3.3.7.tgz", -- "integrity": "sha512-07n5kF0L9ERC9pilqEFucnhs1XG4WttbHAMWhhOSqQYXhB8mMNTSCzP4psTaVgDSp6si2HbIPhTIHuxSia6NPQ==", +- "version": "3.3.9", +- "resolved": "https://registry.npmjs.org/native-keymap/-/native-keymap-3.3.9.tgz", +- "integrity": "sha512-d/ydQ5x+GM5W0dyAjFPwexhtc9CDH1g/xWZESS5CXk16ThyFzSBLvlBJq1+FyzUIFf/F2g1MaHdOpa6G9150YQ==", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/native-watchdog": { -@@ -13922,5 +13923,6 @@ + "node_modules/natural-compare": { +@@ -14142,5 +14143,6 @@ "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -84,22 +84,22 @@ index b7ae476..93692b8 100644 + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", "dependencies": { -@@ -13931,3 +13933,3 @@ +@@ -14151,3 +14153,3 @@ "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", + "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", diff --git a/package.json b/package.json -index b9978d4..bffe52e 100644 +index efeaec1..b2a6703 100644 --- a/package.json +++ b/package.json -@@ -108,3 +108,3 @@ - "native-is-elevated": "0.8.0", +@@ -111,3 +111,3 @@ + "native-is-elevated": "0.9.0", - "native-keymap": "^3.3.5", + "@vscodium/native-keymap": "3.3.7-258424", - "native-watchdog": "^1.4.1", + "node-pty": "^1.2.0-beta.10", diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts -index d4ce18a..9db7f76 100644 +index c30c6da..ca6cea2 100644 --- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts @@ -44,8 +44,8 @@ flakySuite('Native Modules (all platforms)', () => { diff --git a/patches/fix-policies.patch b/patches/fix-policies.patch index 5e72399..4a28de9 100644 --- a/patches/fix-policies.patch +++ b/patches/fix-policies.patch @@ -1,5 +1,5 @@ diff --git a/build/.moduleignore b/build/.moduleignore -index 7aece0d..baebcd5 100644 +index 5b040cc..8d5fd71 100644 --- a/build/.moduleignore +++ b/build/.moduleignore @@ -128,9 +128,11 @@ vsda/** @@ -22,32 +22,32 @@ index 7aece0d..baebcd5 100644 +!@vscodium/policy-watcher/build/Release/vscodium-policy-watcher.node diff --git a/eslint.config.js b/eslint.config.js -index 6065336..1d36678 100644 +index f8077c2..182d6ce 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1448,3 +1448,3 @@ export default tseslint.config( - '@vscode/iconv-lite-umd', + '@vscode/native-watchdog', - '@vscode/policy-watcher', + '@vscodium/policy-watcher', '@vscode/proxy-agent', diff --git a/package-lock.json b/package-lock.json -index 93692b8..fd1d22a 100644 +index a991591..fb05fad 100644 --- a/package-lock.json +++ b/package-lock.json -@@ -17,3 +17,2 @@ - "@vscode/iconv-lite-umd": "0.7.1", +@@ -21,3 +21,2 @@ + "@vscode/native-watchdog": "^1.4.6", - "@vscode/policy-watcher": "^1.3.2", - "@vscode/proxy-agent": "^0.36.0", -@@ -30,2 +29,3 @@ + "@vscode/proxy-agent": "^0.37.0", +@@ -33,2 +32,3 @@ "@vscodium/native-keymap": "3.3.7-258424", + "@vscodium/policy-watcher": "^1.3.2-252465", - "@xterm/addon-clipboard": "^0.3.0-beta.91", -@@ -2952,22 +2952,2 @@ + "@xterm/addon-clipboard": "^0.3.0-beta.109", +@@ -3345,22 +3345,2 @@ }, - "node_modules/@vscode/policy-watcher": { -- "version": "1.3.5", -- "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.5.tgz", -- "integrity": "sha512-k1n9gaDBjyVRy5yJLABbZCnyFwgQ8OA4sR3vXmXnmB+mO9JA0nsl/XOXQfVCoLasBu3UHCOfAnDWGn2sRzCR+A==", +- "version": "1.3.7", +- "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.7.tgz", +- "integrity": "sha512-OvIczTbtGLZs7YU0ResbjM0KEB2ORBnlJ4ICxaB9fKHNVBwNVp4i2qIkDQGp3UBGtu7P8/+eg4/ZKk2oJGFcug==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { @@ -65,7 +65,7 @@ index 93692b8..fd1d22a 100644 - } - }, "node_modules/@vscode/proxy-agent": { -@@ -3307,2 +3287,22 @@ +@@ -3681,2 +3661,22 @@ }, + "node_modules/@vscodium/policy-watcher": { + "version": "1.3.2-252465", @@ -89,14 +89,14 @@ index 93692b8..fd1d22a 100644 + }, "node_modules/@webassemblyjs/ast": { diff --git a/package.json b/package.json -index bffe52e..d0e04d0 100644 +index b2a6703..3d03e9a 100644 --- a/package.json +++ b/package.json -@@ -79,3 +79,3 @@ - "@vscode/iconv-lite-umd": "0.7.1", +@@ -83,3 +83,3 @@ + "@vscode/native-watchdog": "^1.4.6", - "@vscode/policy-watcher": "^1.3.2", + "@vscodium/policy-watcher": "^1.3.2-252465", - "@vscode/proxy-agent": "^0.36.0", + "@vscode/proxy-agent": "^0.37.0", diff --git a/src/vs/base/test/node/uri.perf.data.txt b/src/vs/base/test/node/uri.perf.data.txt index ee0a24b..881ce36 100644 --- a/src/vs/base/test/node/uri.perf.data.txt @@ -197,7 +197,7 @@ index ee0a24b..881ce36 100644 +/Users/example/node_modules/@vscodium/policy-watcher/src/windows/NumberPolicy.hh /Users/example/node_modules/@vscode/vscode-languagedetection/CODE_OF_CONDUCT.md diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts -index 9db7f76..33beb8c 100644 +index ca6cea2..32b22fe 100644 --- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts @@ -62,5 +62,5 @@ flakySuite('Native Modules (all platforms)', () => { diff --git a/patches/linux/arch-0-support.patch b/patches/linux/arch-0-support.patch index cdc849c..753a647 100644 --- a/patches/linux/arch-0-support.patch +++ b/patches/linux/arch-0-support.patch @@ -1,5 +1,5 @@ diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh -index 2f25764..742aaef 100755 +index f0d5fe6..fdb3707 100755 --- a/build/azure-pipelines/linux/setup-env.sh +++ b/build/azure-pipelines/linux/setup-env.sh @@ -2,3 +2,3 @@ @@ -13,7 +13,7 @@ index 2f25764..742aaef 100755 + SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" node -e 'import { getVSCodeSysroot } from "./build/linux/debian/install-sysroot.ts"; (async () => { await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()' fi diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts -index cb1a0a5..6c21dd2 100644 +index 2714933..36396dc 100644 --- a/build/gulpfile.reh.ts +++ b/build/gulpfile.reh.ts @@ -235,9 +235,23 @@ function nodejs(platform: string, arch: string): NodeJS.ReadWriteStream | undefi @@ -48,10 +48,10 @@ index cb1a0a5..6c21dd2 100644 + } case 'alpine': diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts -index d3ab651..9dbe6f3 100644 +index 358bb3a..2cc6d9a 100644 --- a/build/gulpfile.vscode.ts +++ b/build/gulpfile.vscode.ts -@@ -375,2 +375,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d +@@ -372,2 +372,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + const electronOverride: { repo?: string; tag?: string } = {}; + if (process.env.VSCODE_ELECTRON_REPOSITORY) { @@ -64,13 +64,13 @@ index d3ab651..9dbe6f3 100644 + } + let result: NodeJS.ReadWriteStream = all -@@ -379,3 +389,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d +@@ -376,3 +386,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d .pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523 -- .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false, ...customElectronConfig })) -+ .pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false, ...customElectronConfig })) +- .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) ++ .pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) .pipe(filter(['**', '!LICENSE', '!version'], { dot: true })); diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts -index d00eb59..34ecdf1 100644 +index 46c257d..78bfb66 100644 --- a/build/linux/debian/dep-lists.ts +++ b/build/linux/debian/dep-lists.ts @@ -141,3 +141,3 @@ export const referenceGeneratedDepsByArch = { diff --git a/patches/linux/fix-build.patch b/patches/linux/fix-build.patch index 3bb1fcc..f9e03bb 100644 --- a/patches/linux/fix-build.patch +++ b/patches/linux/fix-build.patch @@ -1,5 +1,5 @@ diff --git a/build/linux/dependencies-generator.ts b/build/linux/dependencies-generator.ts -index 0ebeb41..c6f0d5c 100644 +index 874c802..04731cf 100644 --- a/build/linux/dependencies-generator.ts +++ b/build/linux/dependencies-generator.ts @@ -13,3 +13,3 @@ import { type DebianArchString, isDebianArchString } from './debian/types.ts'; @@ -18,14 +18,14 @@ index 0ebeb41..c6f0d5c 100644 + // files.push(path.join(buildDir, 'bin', product.tunnelApplicationName)); // Add the main executable. diff --git a/build/package-lock.json b/build/package-lock.json -index d3d0ae9..b47c35f 100644 +index 1a544ba..78337cd 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -17,3 +17,2 @@ "@electron/get": "^2.0.0", - "@electron/osx-sign": "^2.0.0", "@types/ansi-colors": "^3.2.0", -@@ -105,5 +104,5 @@ +@@ -107,5 +106,5 @@ "node_modules/@azure/core-auth": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", @@ -34,19 +34,19 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "dev": true, -@@ -111,4 +110,4 @@ +@@ -113,4 +112,4 @@ "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" -@@ -116,3 +115,3 @@ +@@ -118,3 +117,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -235,5 +234,5 @@ +@@ -237,5 +236,5 @@ "node_modules/@azure/core-rest-pipeline": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.0.tgz", @@ -55,7 +55,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", "dev": true, -@@ -241,9 +240,8 @@ +@@ -243,9 +242,8 @@ "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", @@ -71,12 +71,12 @@ index d3d0ae9..b47c35f 100644 + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" -@@ -251,3 +249,3 @@ +@@ -253,3 +251,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -268,5 +266,5 @@ +@@ -270,5 +268,5 @@ "node_modules/@azure/core-tracing": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", @@ -85,12 +85,12 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "dev": true, -@@ -277,3 +275,3 @@ +@@ -279,3 +277,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -281,5 +279,5 @@ +@@ -283,5 +281,5 @@ "node_modules/@azure/core-util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", @@ -99,18 +99,18 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", "dev": true, -@@ -287,3 +285,4 @@ +@@ -289,3 +287,4 @@ "dependencies": { - "@azure/abort-controller": "^2.0.0", + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" -@@ -291,3 +290,3 @@ +@@ -293,3 +292,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -370,11 +369,13 @@ +@@ -372,11 +371,13 @@ "node_modules/@azure/logger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.1.tgz", @@ -129,7 +129,7 @@ index d3d0ae9..b47c35f 100644 - "node": ">=8.0.0" + "node": ">=20.0.0" } -@@ -481,5 +482,5 @@ +@@ -483,5 +484,5 @@ "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", @@ -138,7 +138,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, -@@ -537,50 +538,2 @@ +@@ -766,50 +767,2 @@ }, - "node_modules/@electron/osx-sign": { - "version": "2.0.0", @@ -188,36 +188,8 @@ index d3d0ae9..b47c35f 100644 - "node": ">=10" - } - }, - "node_modules/@esbuild/aix-ppc64": { -@@ -1051,27 +1004,2 @@ - }, -- "node_modules/@isaacs/cliui/node_modules/emoji-regex": { -- "version": "9.2.2", -- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", -- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", -- "dev": true, -- "license": "MIT" -- }, -- "node_modules/@isaacs/cliui/node_modules/string-width": { -- "version": "5.1.2", -- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", -- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", -- "dev": true, -- "license": "MIT", -- "dependencies": { -- "eastasianwidth": "^0.2.0", -- "emoji-regex": "^9.2.2", -- "strip-ansi": "^7.0.1" -- }, -- "engines": { -- "node": ">=12" -- }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -- } -- }, - "node_modules/@malept/cross-spawn-promise": { -@@ -1348,5 +1276,5 @@ + "node_modules/@electron/rebuild": { +@@ -2029,5 +1982,5 @@ "node_modules/@textlint/ast-node-types": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz", @@ -226,7 +198,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.4.1.tgz", + "integrity": "sha512-XifMpBMdo0E1Fuh85YdcYAgy+okNg9WKBzIPIO4JUDnSWUVFihnogrM4cjDapeHkgzSgulwR8oJVJ17eyxI1bA==", "dev": true, -@@ -1355,5 +1283,5 @@ +@@ -2036,5 +1989,5 @@ "node_modules/@textlint/linter-formatter": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.2.tgz", @@ -235,7 +207,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.4.1.tgz", + "integrity": "sha512-kAV7Sup3vwvqxKvBbf9lx/JaPHkRybQp/LLvA73U1AorPZE6XyfBAFG24BbMiCs4OX1ax4g7kXRuFPgMLWRf+g==", "dev": true, -@@ -1363,8 +1291,8 @@ +@@ -2044,8 +1997,8 @@ "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.2.2", - "@textlint/resolver": "15.2.2", @@ -249,7 +221,7 @@ index d3d0ae9..b47c35f 100644 + "debug": "^4.4.3", + "js-yaml": "^4.1.0", "lodash": "^4.17.21", -@@ -1440,2 +1368,9 @@ +@@ -2121,2 +2074,9 @@ }, + "node_modules/@textlint/linter-formatter/node_modules/emoji-regex": { + "version": "8.0.0", @@ -259,7 +231,7 @@ index d3d0ae9..b47c35f 100644 + "license": "MIT" + }, "node_modules/@textlint/linter-formatter/node_modules/has-flag": { -@@ -1457,2 +1392,17 @@ +@@ -2138,2 +2098,17 @@ }, + "node_modules/@textlint/linter-formatter/node_modules/string-width": { + "version": "4.2.3", @@ -277,7 +249,7 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": { -@@ -1484,5 +1434,5 @@ +@@ -2165,5 +2140,5 @@ "node_modules/@textlint/module-interop": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.2.tgz", @@ -286,7 +258,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.4.1.tgz", + "integrity": "sha512-jHtM2E5CR68P3z/+FGrEU5pml2fQVzEo2sez9FEjrVHSPCrHtqHcPaKfsYbQJjc9C48ObwaWrCzRNaL3KedNCQ==", "dev": true, -@@ -1491,5 +1441,5 @@ +@@ -2172,5 +2147,5 @@ "node_modules/@textlint/resolver": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.2.tgz", @@ -295,7 +267,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.4.1.tgz", + "integrity": "sha512-uVssyG3XXXKNY+O7NOajGvQZTyOuhPviwlq7Xek6ZT9K1eDQtA8074cPkAQoLMYhi/TUyOE5P5kpz42UF8Lmdw==", "dev": true, -@@ -1498,5 +1448,5 @@ +@@ -2179,5 +2154,5 @@ "node_modules/@textlint/types": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.2.tgz", @@ -304,12 +276,12 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.4.1.tgz", + "integrity": "sha512-WByVZ3zblbvuI+voWQplUP7seSTKXI9z6TMVXEB3dY3JFrZCIXWKNfLbETX5lZV7fYkCMaDtILO1l6s11wdbQA==", "dev": true, -@@ -1504,3 +1454,3 @@ +@@ -2185,3 +2160,3 @@ "dependencies": { - "@textlint/ast-node-types": "15.2.2" + "@textlint/ast-node-types": "15.4.1" } -@@ -1597,12 +1547,2 @@ +@@ -2279,12 +2254,2 @@ }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", @@ -322,7 +294,23 @@ index d3d0ae9..b47c35f 100644 - } - }, "node_modules/@types/gulp": { -@@ -1924,2 +1864,17 @@ +@@ -2429,2 +2394,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -2594,2 +2560,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -2606,2 +2573,3 @@ + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -2621,2 +2589,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -2626,2 +2595,17 @@ }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.2", @@ -340,7 +328,11 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/@vscode/iconv-lite-umd": { -@@ -2176,5 +2131,5 @@ +@@ -2952,2 +2936,3 @@ + "dev": true, ++ "license": "ISC", + "bin": { +@@ -3056,5 +3041,5 @@ "node_modules/ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", @@ -349,7 +341,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "dev": true, -@@ -2251,17 +2206,7 @@ +@@ -3336,17 +3321,7 @@ "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -371,25 +363,31 @@ index d3d0ae9..b47c35f 100644 - "license": "BSD-3-Clause" + "license": "Python-2.0" }, -@@ -2393,2 +2338,3 @@ +@@ -3477,3 +3452,4 @@ + } +- ] ++ ], ++ "license": "BSD-2-Clause" + }, +@@ -3509,2 +3485,3 @@ "dev": true, -+ "license": "MIT", - "optional": true, -@@ -2404,3 +2350,4 @@ ++ "license": "ISC", + "dependencies": { +@@ -3519,3 +3496,4 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, -@@ -2462,2 +2409,3 @@ - ], -+ "license": "MIT", - "optional": true, -@@ -2506,2 +2454,3 @@ +@@ -3526,2 +3504,3 @@ "dev": true, -+ "license": "BSD-2-Clause", - "dependencies": { -@@ -2565,6 +2514,7 @@ ++ "license": "ISC", + "optional": true +@@ -3782,2 +3761,3 @@ + "dev": true, ++ "license": "MIT", + "engines": { +@@ -3980,6 +3960,7 @@ "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", @@ -400,7 +398,7 @@ index d3d0ae9..b47c35f 100644 "dev": true, + "license": "MIT", "dependencies": { -@@ -2573,9 +2523,13 @@ +@@ -3988,9 +3969,13 @@ "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", @@ -419,15 +417,107 @@ index d3d0ae9..b47c35f 100644 - "node": ">= 6" + "node": ">=20.18.1" }, -@@ -2628,2 +2582,3 @@ +@@ -4043,2 +4028,3 @@ "dev": true, -+ "license": "ISC", ++ "license": "MIT", "optional": true -@@ -2778,2 +2733,3 @@ +@@ -4112,2 +4098,13 @@ + }, ++ "node_modules/cli-truncate/node_modules/ansi-regex": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", ++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ "dev": true, ++ "license": "MIT", ++ "optional": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/cli-truncate/node_modules/ansi-styles": { +@@ -4151,2 +4148,10 @@ + }, ++ "node_modules/cli-truncate/node_modules/emoji-regex": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", ++ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "dev": true, ++ "license": "MIT", ++ "optional": true ++ }, + "node_modules/cli-truncate/node_modules/slice-ansi": { +@@ -4167,2 +4172,32 @@ + }, ++ "node_modules/cli-truncate/node_modules/string-width": { ++ "version": "4.2.3", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", ++ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", ++ "dev": true, ++ "license": "MIT", ++ "optional": true, ++ "dependencies": { ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/cli-truncate/node_modules/strip-ansi": { ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", ++ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", ++ "dev": true, ++ "license": "MIT", ++ "optional": true, ++ "dependencies": { ++ "ansi-regex": "^5.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/cliui": { +@@ -4228,2 +4263,24 @@ + }, ++ "node_modules/cliui/node_modules/emoji-regex": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", ++ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "dev": true, ++ "license": "MIT" ++ }, ++ "node_modules/cliui/node_modules/string-width": { ++ "version": "4.2.3", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", ++ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/cliui/node_modules/strip-ansi": { +@@ -4282,2 +4339,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -4372,3 +4430,3 @@ + "engines": { +- "node": ">=18" ++ "node": ">=20" + } +@@ -4428,2 +4486,3 @@ "dev": true, + "license": "MIT", "dependencies": { -@@ -2790,6 +2746,7 @@ +@@ -4440,6 +4499,7 @@ "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -438,25 +528,19 @@ index d3d0ae9..b47c35f 100644 "dev": true, + "license": "BSD-2-Clause", "engines": { -@@ -2824,2 +2781,3 @@ - "dev": true, -+ "license": "BSD-2-Clause", - "dependencies": { -@@ -2879,2 +2837,3 @@ +@@ -4501,2 +4561,3 @@ "dev": true, + "license": "(MIT OR WTFPL)", "optional": true, -@@ -2902,2 +2861,3 @@ +@@ -4552,2 +4613,3 @@ "dev": true, + "license": "MIT", "optional": true, -@@ -2948,3 +2908,4 @@ - } -- ] -+ ], -+ "license": "BSD-2-Clause" - }, -@@ -2966,6 +2927,7 @@ +@@ -4584,2 +4646,3 @@ + "dev": true, ++ "license": "ISC", + "optional": true +@@ -4766,6 +4829,7 @@ "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", @@ -467,12 +551,12 @@ index d3d0ae9..b47c35f 100644 "dev": true, + "license": "BSD-2-Clause", "dependencies": { -@@ -2973,3 +2935,3 @@ +@@ -4773,3 +4837,3 @@ "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" }, -@@ -3040,5 +3002,5 @@ +@@ -5029,5 +5093,5 @@ "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -481,7 +565,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, -@@ -3046,2 +3008,16 @@ +@@ -5046,2 +5110,16 @@ }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", @@ -498,7 +582,7 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/end-of-stream": { -@@ -3056,6 +3032,7 @@ +@@ -5056,6 +5134,7 @@ "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", @@ -509,11 +593,11 @@ index d3d0ae9..b47c35f 100644 "dev": true, + "license": "BSD-2-Clause", "engines": { -@@ -3143,2 +3120,3 @@ +@@ -5150,2 +5229,3 @@ "dev": true, + "license": "MIT", "optional": true -@@ -3195,16 +3173,2 @@ +@@ -5213,16 +5293,2 @@ }, - "node_modules/esprima": { - "version": "4.0.1", @@ -530,7 +614,15 @@ index d3d0ae9..b47c35f 100644 - } - }, "node_modules/events": { -@@ -3428,5 +3392,5 @@ +@@ -5241,2 +5307,3 @@ + "dev": true, ++ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, +@@ -5271,2 +5338,3 @@ + "dev": true, ++ "license": "ISC", + "dependencies": { +@@ -5515,5 +5583,5 @@ "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -539,19 +631,23 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, -@@ -3553,2 +3517,3 @@ +@@ -5536,2 +5604,3 @@ "dev": true, -+ "license": "ISC", ++ "license": "MIT", "optional": true -@@ -3677,2 +3642,3 @@ +@@ -5576,2 +5645,3 @@ + "hasInstallScript": true, ++ "license": "MIT", + "optional": true, +@@ -5703,2 +5773,3 @@ "dev": true, -+ "license": "ISC", - "dependencies": { -@@ -3756,2 +3722,3 @@ ++ "license": "MIT", + "optional": true, +@@ -5866,2 +5937,3 @@ "dev": true, + "license": "MIT", "engines": { -@@ -3815,5 +3782,5 @@ +@@ -5925,5 +5997,5 @@ "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", @@ -560,7 +656,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "dev": true, -@@ -3826,7 +3793,21 @@ +@@ -5936,7 +6008,21 @@ ], + "license": "MIT", "dependencies": { @@ -585,27 +681,7 @@ index d3d0ae9..b47c35f 100644 + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } -@@ -3880,2 +3861,15 @@ - }, -+ "node_modules/iconv-lite": { -+ "version": "0.6.3", -+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", -+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", -+ "dev": true, -+ "license": "MIT", -+ "dependencies": { -+ "safer-buffer": ">= 2.1.2 < 3.0.0" -+ }, -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, - "node_modules/ieee754": { -@@ -3899,2 +3893,3 @@ - ], -+ "license": "BSD-3-Clause", - "optional": true -@@ -3912,5 +3907,5 @@ +@@ -6070,5 +6156,5 @@ "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", @@ -614,7 +690,11 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "dev": true, -@@ -4120,5 +4115,5 @@ +@@ -6088,2 +6174,3 @@ + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -6359,5 +6446,5 @@ "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", @@ -623,25 +703,13 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, -@@ -4126,4 +4121,3 @@ +@@ -6365,4 +6452,3 @@ "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, -@@ -4157,2 +4151,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true -@@ -4266,2 +4261,3 @@ - "hasInstallScript": true, -+ "license": "MIT", - "optional": true, -@@ -4333,2 +4329,3 @@ - "dev": true, -+ "license": "BSD-2-Clause", - "dependencies": { -@@ -4358,9 +4355,2 @@ +@@ -6725,9 +6811,2 @@ }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", @@ -651,31 +719,7 @@ index d3d0ae9..b47c35f 100644 - "license": "Python-2.0" - }, "node_modules/matcher": { -@@ -4443,2 +4433,3 @@ - "dev": true, -+ "license": "ISC", - "bin": { -@@ -4487,2 +4478,3 @@ - "dev": true, -+ "license": "MIT", - "dependencies": { -@@ -4495,7 +4487,11 @@ - "node_modules/minimist": { -- "version": "1.2.6", -- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", -- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", -+ "version": "1.2.8", -+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", -+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, -- "optional": true -+ "license": "MIT", -+ "optional": true, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } - }, -@@ -4532,6 +4528,7 @@ +@@ -7047,6 +7126,7 @@ "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -686,11 +730,7 @@ index d3d0ae9..b47c35f 100644 "dev": true, + "license": "MIT", "optional": true -@@ -4578,2 +4575,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true -@@ -4593,5 +4591,5 @@ +@@ -7205,5 +7285,5 @@ "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", @@ -699,12 +739,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.3.1.tgz", + "integrity": "sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==", "dev": true, -@@ -4603,3 +4601,3 @@ - "engines": { -- "node": ">=18" -+ "node": ">=20" - } -@@ -4680,5 +4678,5 @@ +@@ -7308,5 +7388,5 @@ "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -713,7 +748,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, -@@ -4808,5 +4806,5 @@ +@@ -7575,5 +7655,5 @@ "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", @@ -722,7 +757,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, -@@ -4886,8 +4884,9 @@ +@@ -7653,8 +7733,9 @@ "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -736,7 +771,7 @@ index d3d0ae9..b47c35f 100644 - "entities": "^4.4.0" + "entities": "^6.0.0" }, -@@ -4898,8 +4897,9 @@ +@@ -7665,8 +7746,22 @@ "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", @@ -745,26 +780,26 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, -+ "license": "MIT", - "dependencies": { -- "domhandler": "^5.0.2", -+ "domhandler": "^5.0.3", - "parse5": "^7.0.0" -@@ -4910,2 +4910,28 @@ - }, -+ "node_modules/parse5-parser-stream": { -+ "version": "7.1.2", -+ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", -+ "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", -+ "dev": true, + "license": "MIT", + "dependencies": { ++ "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, ++ "node_modules/parse5-parser-stream": { ++ "version": "7.1.2", ++ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", ++ "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", ++ "dev": true, ++ "license": "MIT", + "dependencies": { +- "domhandler": "^5.0.2", + "parse5": "^7.0.0" +@@ -7677,2 +7772,15 @@ + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", @@ -779,7 +814,7 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/path-is-absolute": { -@@ -4929,5 +4955,5 @@ +@@ -7696,5 +7804,5 @@ "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", @@ -788,7 +823,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, -@@ -5056,6 +5082,7 @@ +@@ -7838,6 +7946,7 @@ "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", @@ -799,12 +834,12 @@ index d3d0ae9..b47c35f 100644 "dev": true, + "license": "MIT", "optional": true, -@@ -5067,3 +5094,3 @@ +@@ -7849,3 +7958,3 @@ "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", + "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", -@@ -5208,22 +5235,2 @@ +@@ -8024,22 +8133,2 @@ }, - "node_modules/rc-config-loader/node_modules/argparse": { - "version": "2.0.1", @@ -827,23 +862,7 @@ index d3d0ae9..b47c35f 100644 - } - }, "node_modules/read": { -@@ -5348,2 +5355,3 @@ - "dev": true, -+ "license": "ISC", - "dependencies": { -@@ -5371,2 +5379,3 @@ - "dev": true, -+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, -@@ -5414,7 +5423,15 @@ - }, -+ "node_modules/safer-buffer": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", -+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", -+ "dev": true, -+ "license": "MIT" -+ }, +@@ -8320,6 +8409,7 @@ "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -855,23 +874,15 @@ index d3d0ae9..b47c35f 100644 + "dev": true, + "license": "ISC" }, -@@ -5472,2 +5489,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true, -@@ -5612,2 +5630,3 @@ +@@ -8517,2 +8607,3 @@ ], -+ "license": "MIT", ++ "license": "BSD-3-Clause", "optional": true -@@ -5633,2 +5652,3 @@ +@@ -8538,2 +8629,3 @@ ], + "license": "MIT", "optional": true, -@@ -5764,2 +5784,3 @@ - "dev": true, -+ "license": "MIT", - "engines": { -@@ -5791,5 +5812,5 @@ +@@ -8771,5 +8863,5 @@ "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -880,7 +891,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, -@@ -5813,31 +5834,11 @@ +@@ -8793,31 +8885,11 @@ "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", @@ -918,7 +929,7 @@ index d3d0ae9..b47c35f 100644 + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } -@@ -5854,2 +5855,9 @@ +@@ -8834,2 +8906,9 @@ }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", @@ -928,14 +939,14 @@ index d3d0ae9..b47c35f 100644 + "license": "MIT" + }, "node_modules/string-width/node_modules/strip-ansi": { -@@ -5947,4 +5955,5 @@ +@@ -8927,4 +9006,5 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "optional": true, -@@ -6062,2 +6071,24 @@ +@@ -9042,2 +9122,24 @@ }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", @@ -960,11 +971,7 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/table/node_modules/strip-ansi": { -@@ -6128,2 +6159,3 @@ - "dev": true, -+ "license": "MIT", - "dependencies": { -@@ -6193,5 +6225,5 @@ +@@ -9310,5 +9412,5 @@ "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", @@ -973,7 +980,7 @@ index d3d0ae9..b47c35f 100644 + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, -@@ -6298,6 +6330,7 @@ +@@ -9435,6 +9537,7 @@ "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", @@ -985,14 +992,14 @@ index d3d0ae9..b47c35f 100644 + "dev": true, + "license": "0BSD" }, -@@ -6316,4 +6349,5 @@ +@@ -9453,4 +9556,5 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "optional": true, -@@ -6365,2 +6399,12 @@ +@@ -9502,2 +9606,12 @@ }, + "node_modules/undici": { + "version": "7.16.0", @@ -1005,13 +1012,13 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/undici-types": { -@@ -6404,3 +6448,4 @@ +@@ -9577,3 +9691,4 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true + "dev": true, + "license": "MIT" }, -@@ -6584,2 +6629,25 @@ +@@ -9790,2 +9905,25 @@ }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", @@ -1037,7 +1044,7 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/which": { -@@ -6688,2 +6756,24 @@ +@@ -9894,2 +10032,24 @@ }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", @@ -1062,7 +1069,7 @@ index d3d0ae9..b47c35f 100644 + } + }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { -@@ -6714,27 +6804,2 @@ +@@ -9920,27 +10080,2 @@ }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", @@ -1090,8 +1097,56 @@ index d3d0ae9..b47c35f 100644 - } - }, "node_modules/wrappy": { +@@ -10036,2 +10171,47 @@ + }, ++ "node_modules/yargs/node_modules/ansi-regex": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", ++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ "dev": true, ++ "license": "MIT", ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/yargs/node_modules/emoji-regex": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", ++ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "dev": true, ++ "license": "MIT" ++ }, ++ "node_modules/yargs/node_modules/string-width": { ++ "version": "4.2.3", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", ++ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/yargs/node_modules/strip-ansi": { ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", ++ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "ansi-regex": "^5.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/yauzl": { diff --git a/build/package.json b/build/package.json -index e084f0e..4517da3 100644 +index e45161d..30ba3c3 100644 --- a/build/package.json +++ b/build/package.json @@ -11,3 +11,2 @@ diff --git a/patches/version-1-update.patch b/patches/version-1-update.patch index dd88101..be046a8 100644 --- a/patches/version-1-update.patch +++ b/patches/version-1-update.patch @@ -1,14 +1,27 @@ +diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts +index a3efce9..be970c6 100644 +--- a/src/vs/code/electron-main/app.ts ++++ b/src/vs/code/electron-main/app.ts +@@ -78,3 +78,2 @@ import { DarwinUpdateService } from '../../platform/update/electron-main/updateS + import { LinuxUpdateService } from '../../platform/update/electron-main/updateService.linux.js'; +-import { SnapUpdateService } from '../../platform/update/electron-main/updateService.snap.js'; + import { Win32UpdateService } from '../../platform/update/electron-main/updateService.win32.js'; +@@ -997,3 +996,3 @@ export class CodeApplication extends Disposable { + if (isLinuxSnap) { +- services.set(IUpdateService, new SyncDescriptor(SnapUpdateService, [process.env['SNAP'], process.env['SNAP_REVISION']])); ++ // services.set(IUpdateService, new SyncDescriptor(SnapUpdateService, [process.env['SNAP'], process.env['SNAP_REVISION']])); + } else { diff --git a/src/vs/platform/update/common/update.ts b/src/vs/platform/update/common/update.ts -index 199f433..a6cbb10 100644 +index b859dfd..75e8987 100644 --- a/src/vs/platform/update/common/update.ts +++ b/src/vs/platform/update/common/update.ts -@@ -51,3 +51,4 @@ export const enum UpdateType { +@@ -54,3 +54,4 @@ export const enum UpdateType { Archive, - Snap + Snap, + WindowsInstaller, } -@@ -110 +111,38 @@ export interface IUpdateService { +@@ -116 +117,38 @@ export interface IUpdateService { } + +export type Architecture = @@ -49,30 +62,37 @@ index 199f433..a6cbb10 100644 + | "user"; \ No newline at end of file diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index ed8043f..e19c9e4 100644 +index 0e63d40..c8426ea 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts -@@ -14,6 +14,10 @@ import { IProductService } from '../../product/common/productService.js'; +@@ -14,3 +14,3 @@ import { IProductService } from '../../product/common/productService.js'; import { IRequestService } from '../../request/common/request.js'; -import { AvailableForDownload, DisablementReason, IUpdateService, State, StateType, UpdateType } from '../common/update.js'; +import { Architecture, AvailableForDownload, DisablementReason, IUpdateService, Platform, State, StateType, Target, UpdateType } from '../common/update.js'; --export function createUpdateURL(platform: string, quality: string, productService: IProductService): string { -- return `${productService.updateUrl}/api/update/${platform}/${quality}/${productService.commit}`; +@@ -20,10 +20,8 @@ export interface IUpdateURLOptions { + +-export function createUpdateURL(baseUpdateUrl: string, platform: string, quality: string, commit: string, options?: IUpdateURLOptions): string { +- const url = new URL(`${baseUpdateUrl}/api/update/${platform}/${quality}/${commit}`); +- +- if (options?.background) { +- url.searchParams.set('bg', 'true'); +export function createUpdateURL(productService: IProductService, quality: string, platform: Platform, architecture: Architecture, target?: Target): string { + if (target) { + return `${productService.updateUrl}/${quality}/${platform}/${architecture}/${target}/latest.json`; + } else { + return `${productService.updateUrl}/${quality}/${platform}/${architecture}/latest.json`; -+ } + } +- +- return url.toString(); } -@@ -205,3 +209,3 @@ export abstract class AbstractUpdateService implements IUpdateService { +@@ -265,3 +263,3 @@ export abstract class AbstractUpdateService implements IUpdateService { - if (mode === 'none') { + if (mode === 'none' || mode === 'manual') { - return false; + return undefined; diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts -index b78ebc5..a4a3b1d 100644 +index b20673b..af677f6 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts @@ -15,3 +15,3 @@ import { ILogService } from '../../log/common/log.js'; @@ -81,19 +101,15 @@ index b78ebc5..a4a3b1d 100644 +import { IRequestService, asJson } from '../../request/common/request.js'; import { ITelemetryService } from '../../telemetry/common/telemetry.js'; @@ -19,2 +19,4 @@ import { IUpdate, State, StateType, UpdateType } from '../common/update.js'; - import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification } from './abstractUpdateService.js'; + import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; +import { CancellationToken } from '../../../base/common/cancellation.js'; +import * as semver from 'semver'; -@@ -76,17 +78,3 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau - protected buildUpdateFeedUrl(quality: string): string | undefined { -- let assetID: string; -- if (!this.productService.darwinUniversalAssetId) { -- assetID = process.arch === 'x64' ? 'darwin' : 'darwin-arm64'; -- } else { -- assetID = this.productService.darwinUniversalAssetId; -- } -- const url = createUpdateURL(assetID, quality, this.productService); +@@ -75,13 +77,4 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau + +- protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string | undefined { +- const assetID = this.productService.darwinUniversalAssetId ?? (process.arch === 'x64' ? 'darwin' : 'darwin-arm64'); +- const url = createUpdateURL(this.productService.updateUrl!, assetID, quality, commit, options); - try { - electron.autoUpdater.setFeedURL({ url }); - } catch (e) { @@ -102,14 +118,13 @@ index b78ebc5..a4a3b1d 100644 - return undefined; - } - return url; ++ protected buildUpdateFeedUrl(quality: string, _commit: string, _options?: IUpdateURLOptions): string | undefined { + return createUpdateURL(this.productService, quality, process.platform, process.arch); } -@@ -100,5 +88,30 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau +@@ -112,3 +105,30 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau -- const url = explicit ? this.url : `${this.url}?bg=true`; -- electron.autoUpdater.setFeedURL({ url }); - electron.autoUpdater.checkForUpdates(); -+ this.requestService.request({ url: this.url }, CancellationToken.None) ++ this.requestService.request({ url }, CancellationToken.None) + .then(asJson) + .then(update => { + if (!update || !update.url || !update.version || !update.productVersion) { @@ -125,7 +140,7 @@ index b78ebc5..a4a3b1d 100644 + this.setState(State.Idle(UpdateType.Setup)); + } + else { -+ electron.autoUpdater.setFeedURL({ url: this.url! }); ++ electron.autoUpdater.setFeedURL({ url }); + electron.autoUpdater.checkForUpdates(); + } + @@ -139,27 +154,21 @@ index b78ebc5..a4a3b1d 100644 + }); } diff --git a/src/vs/platform/update/electron-main/updateService.linux.ts b/src/vs/platform/update/electron-main/updateService.linux.ts -index 8550ace..c2fddcb 100644 +index 32040dc..59cf109 100644 --- a/src/vs/platform/update/electron-main/updateService.linux.ts +++ b/src/vs/platform/update/electron-main/updateService.linux.ts @@ -15,2 +15,3 @@ import { AvailableForDownload, IUpdate, State, UpdateType } from '../common/upda - import { AbstractUpdateService, createUpdateURL } from './abstractUpdateService.js'; + import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions } from './abstractUpdateService.js'; +import * as semver from 'semver'; -@@ -31,3 +32,3 @@ export class LinuxUpdateService extends AbstractUpdateService { - protected buildUpdateFeedUrl(quality: string): string { -- return createUpdateURL(`linux-${process.arch}`, quality, this.productService); +@@ -30,4 +31,4 @@ export class LinuxUpdateService extends AbstractUpdateService { + +- protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string { +- return createUpdateURL(this.productService.updateUrl!, `linux-${process.arch}`, quality, commit, options); ++ protected buildUpdateFeedUrl(quality: string, _commit: string, _options?: IUpdateURLOptions): string { + return createUpdateURL(this.productService, quality, process.platform, process.arch); } -@@ -39,6 +40,5 @@ export class LinuxUpdateService extends AbstractUpdateService { - -- const url = explicit ? this.url : `${this.url}?bg=true`; - this.setState(State.CheckingForUpdates(explicit)); - -- this.requestService.request({ url }, CancellationToken.None) -+ this.requestService.request({ url: this.url }, CancellationToken.None) - .then(asJson) -@@ -47,5 +47,17 @@ export class LinuxUpdateService extends AbstractUpdateService { +@@ -48,5 +49,17 @@ export class LinuxUpdateService extends AbstractUpdateService { this.setState(State.Idle(UpdateType.Archive)); - } else { + @@ -179,7 +188,7 @@ index 8550ace..c2fddcb 100644 + return Promise.resolve(null); }) diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts -index ae4fd9c..7fc81a0 100644 +index 3edbd9d..6666876 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts @@ -13,3 +13,2 @@ import { CancellationToken } from '../../../base/common/cancellation.js'; @@ -189,9 +198,9 @@ index ae4fd9c..7fc81a0 100644 @@ -27,4 +26,5 @@ import { asJson, IRequestService } from '../../request/common/request.js'; import { ITelemetryService } from '../../telemetry/common/telemetry.js'; -import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, UpdateType } from '../common/update.js'; --import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification } from './abstractUpdateService.js'; +-import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; +import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, Target, UpdateType } from '../common/update.js'; -+import { AbstractUpdateService, createUpdateURL} from './abstractUpdateService.js'; ++import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions } from './abstractUpdateService.js'; +import * as semver from 'semver'; @@ -44,5 +44,9 @@ function getUpdateType(): UpdateType { @@ -211,14 +220,17 @@ index ae4fd9c..7fc81a0 100644 @IConfigurationService configurationService: IConfigurationService, + // @ts-expect-error @ITelemetryService private readonly telemetryService: ITelemetryService, -@@ -155,11 +160,21 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - protected buildUpdateFeedUrl(quality: string): string | undefined { +@@ -154,12 +159,22 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + +- protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string | undefined { - let platform = `win32-${process.arch}`; - - if (getUpdateType() === UpdateType.Archive) { - platform += '-archive'; - } else if (this.productService.target === 'user') { - platform += '-user'; +- } ++ protected buildUpdateFeedUrl(quality: string, _commit: string, _options?: IUpdateURLOptions): string | undefined { + let target: Target; + + switch (getUpdateType()) { @@ -235,12 +247,12 @@ index ae4fd9c..7fc81a0 100644 + else { + target = "system" + } - } ++ } -- return createUpdateURL(platform, quality, this.productService); +- return createUpdateURL(this.productService.updateUrl!, platform, quality, commit, options); + return createUpdateURL(this.productService, quality, process.platform, process.arch, target); } -@@ -184,2 +199,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -185,2 +200,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + const fetchedVersion = /\d+\.\d+\.\d+\.\d+/.test(update.productVersion) ? update.productVersion.replace(/(\d+\.\d+\.\d+)\.\d+(\-\w+)?/, '$1$2') : update.productVersion.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') + const currentVersion = this.productService.version.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') @@ -251,16 +263,16 @@ index ae4fd9c..7fc81a0 100644 + } + if (updateType === UpdateType.Archive) { -@@ -210,3 +233,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -211,3 +234,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - const fastUpdatesEnabled = this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); + const fastUpdatesEnabled = getUpdateType() == UpdateType.Setup && this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); if (fastUpdatesEnabled) { -@@ -222,3 +245,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -223,3 +246,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun .then(undefined, err => { - this.telemetryService.publicLog2<{ messageHash: string }, UpdateErrorClassification>('update:error', { messageHash: String(hash(String(err))) }); this.logService.error(err); -@@ -307,6 +329,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -309,6 +331,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun } else { - spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], { - detached: true, diff --git a/patches/windows/disable-versioned-resources.patch b/patches/windows/disable-versioned-resources.patch.no similarity index 100% rename from patches/windows/disable-versioned-resources.patch rename to patches/windows/disable-versioned-resources.patch.no diff --git a/prepare_vscode.sh b/prepare_vscode.sh index b582ade..d9d8f90 100755 --- a/prepare_vscode.sh +++ b/prepare_vscode.sh @@ -275,17 +275,11 @@ if [[ "${OS_NAME}" == "linux" ]]; then sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/rpm/code.spec.template # snapcraft.yaml - sed -i 's|Visual Studio Code|VSCodium|' resources/linux/rpm/code.spec.template + sed -i 's|Visual Studio Code|VSCodium|' resources/linux/rpm/code.spec.template elif [[ "${OS_NAME}" == "windows" ]]; then - if [[ "${VSCODE_QUALITY}" == "insider" ]]; then - ISS_PATH="build/win32/code-insider.iss" - else - ISS_PATH="build/win32/code.iss" - fi - # code.iss - sed -i 's|https://code.visualstudio.com|https://vscodium.com|' "${ISS_PATH}" - sed -i 's|Microsoft Corporation|VSCodium|' "${ISS_PATH}" + sed -i 's|https://code.visualstudio.com|https://vscodium.com|' build/win32/code.iss + sed -i 's|Microsoft Corporation|VSCodium|' build/win32/code.iss fi cd .. diff --git a/product.json b/product.json index 2f75e16..7acf85c 100644 --- a/product.json +++ b/product.json @@ -49,10 +49,12 @@ "extensionsEnabledWithApiProposalVersion": [ "GitHub.copilot-chat", "ms-vscode.vscode-commander", - "ms-vscode.vscode-copilot-vision", "GitHub.vscode-pull-request-github" ], "extensionEnabledApiProposals": { + "mrleemurray.theme-2026": [ + "css" + ], "ms-azuretools.vscode-containers": [ "authenticationChallenges" ], @@ -117,7 +119,8 @@ ], "ms-python.vscode-python-envs": [ "terminalShellEnv", - "terminalDataWriteEvent" + "terminalDataWriteEvent", + "taskExecutionTerminal" ], "ms-dotnettools.dotnet-interactive-vscode": [ "notebookMessaging" @@ -240,13 +243,18 @@ ], "GitHub.copilot": [ "inlineCompletionsAdditions", + "interactive", + "terminalDataWriteEvent", "devDeviceId" ], "GitHub.copilot-nightly": [ "inlineCompletionsAdditions", + "interactive", + "terminalDataWriteEvent", "devDeviceId" ], "GitHub.copilot-chat": [ + "agentSessionsWorkspace", "interactive", "terminalDataWriteEvent", "terminalExecuteCommandEvent", @@ -255,7 +263,6 @@ "chatParticipantAdditions", "defaultChatParticipant", "embeddings", - "chatEditing", "chatProvider", "mappedEditsProvider", "aiRelatedInformation", @@ -271,6 +278,8 @@ "contribCommentEditorActionsMenu", "contribCommentThreadAdditionalMenu", "contribCommentsViewThreadMenus", + "contribChatEditorInlineGutterMenu", + "extensionAffinity", "newSymbolNamesProvider", "findFiles2", "chatReferenceDiagnostic", @@ -286,6 +295,7 @@ "languageModelSystem", "languageModelCapabilities", "languageModelThinkingPart", + "languageModelToolSupportsModel", "chatStatusItem", "taskProblemMatcherStatus", "contribLanguageModelToolSets", @@ -296,7 +306,13 @@ "chatSessionsProvider", "devDeviceId", "contribEditorContentMenu", - "tokenInformation" + "tokenInformation", + "chatPromptFiles", + "mcpServerDefinitions", + "tabInputMultiDiff", + "workspaceTrust", + "chatHooks", + "environmentPower" ], "GitHub.remotehub": [ "contribRemoteHelp", @@ -362,7 +378,6 @@ "terminalDataWriteEvent", "chatParticipantAdditions" ], - "vscjava.vscode-java-pack": [], "ms-dotnettools.csdevkit": [ "inlineCompletionsAdditions" ], @@ -381,9 +396,6 @@ "chatParticipantAdditions", "languageModelSystem" ], - "ms-toolsai.datawrangler": [], - "ms-vscode.vscode-commander": [], - "ms-vscode.vscode-websearchforcopilot": [], "ms-vscode.vscode-copilot-vision": [ "chatReferenceBinaryData", "codeActionAI" @@ -391,6 +403,10 @@ "ms-autodev.vscode-autodev": [ "chatParticipantAdditions" ], + "codetrek.haystack-search": [ + "fileSearchProvider", + "textSearchProvider2" + ], "vscjava.vscode-java-upgrade": [ "chatParticipantAdditions", "chatParticipantPrivate" diff --git a/upstream/insider.json b/upstream/insider.json index 94204ea..e2fae29 100644 --- a/upstream/insider.json +++ b/upstream/insider.json @@ -1,4 +1,4 @@ { - "tag": "1.108.0", - "commit": "94e8ae2b28cb5cc932b86e1070569c4463565c37" + "tag": "1.109.0", + "commit": "bdd88df003631aaa0bcbe057cb0a940b80a476fa" } From 091907f2c04eef777eb4f2cb7b1df00e4432edb2 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Mon, 9 Feb 2026 15:20:52 +0100 Subject: [PATCH 03/22] feat(windows): use versioned update (#2690) --- .../disable-versioned-resources.patch.no | 854 ------------------ prepare_vscode.sh | 4 + 2 files changed, 4 insertions(+), 854 deletions(-) delete mode 100644 patches/windows/disable-versioned-resources.patch.no diff --git a/patches/windows/disable-versioned-resources.patch.no b/patches/windows/disable-versioned-resources.patch.no deleted file mode 100644 index 77c7bb6..0000000 --- a/patches/windows/disable-versioned-resources.patch.no +++ /dev/null @@ -1,854 +0,0 @@ -diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts -index ac70ecb..e04cca7 100644 ---- a/build/gulpfile.vscode.ts -+++ b/build/gulpfile.vscode.ts -@@ -41,3 +41,2 @@ const root = path.dirname(import.meta.dirname); - const commit = getVersion(root); --const versionedResourcesFolder = (product as typeof product & { quality?: string })?.quality === 'insider' ? commit!.substring(0, 10) : ''; - -@@ -356,8 +355,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d - ], { base: '.' })); -- if (quality && quality === 'insider') { -- customElectronConfig = { -- createVersionedResources: true, -- productVersionString: `${versionedResourcesFolder}`, -- }; -- } - } else if (platform === 'linux') { -@@ -398,3 +391,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d - .pipe(replace('@@NAME@@', product.nameShort)) -- .pipe(replace('@@VERSIONFOLDER@@', versionedResourcesFolder)) - .pipe(rename(function (f) { f.basename = product.applicationName; }))); -@@ -407,3 +399,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d - .pipe(replace('@@APPNAME@@', product.applicationName)) -- .pipe(replace('@@VERSIONFOLDER@@', versionedResourcesFolder)) - .pipe(replace('@@SERVERDATAFOLDER@@', product.serverDataFolderName || '.vscode-remote')) -@@ -473,4 +464,4 @@ function patchWin32DependenciesTask(destinationFolderName: string) { - const deps = await glob('**/*.node', { cwd, ignore: 'extensions/node_modules/@vscode/watcher/**' }); -- const packageJson = JSON.parse(await fs.promises.readFile(path.join(cwd, versionedResourcesFolder, 'resources', 'app', 'package.json'), 'utf8')); -- const product = JSON.parse(await fs.promises.readFile(path.join(cwd, versionedResourcesFolder, 'resources', 'app', 'product.json'), 'utf8')); -+ const packageJson = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'package.json'), 'utf8')); -+ const product = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'product.json'), 'utf8')); - const baseVersion = packageJson.version.replace(/-.*$/, ''); -diff --git a/build/gulpfile.vscode.win32.ts b/build/gulpfile.vscode.win32.ts -index a7b01f0..4409ce2 100644 ---- a/build/gulpfile.vscode.win32.ts -+++ b/build/gulpfile.vscode.win32.ts -@@ -74,9 +74,4 @@ function buildWin32Setup(arch: string, target: string): task.CallbackTask { - const quality = (product as typeof product & { quality?: string }).quality || 'dev'; -- let versionedResourcesFolder = ''; - let issPath = path.join(import.meta.dirname, 'win32', 'code.iss'); -- if (quality && quality === 'insider') { -- versionedResourcesFolder = commit!.substring(0, 10); -- issPath = path.join(import.meta.dirname, 'win32', 'code-insider.iss'); -- } -- const originalProductJsonPath = path.join(sourcePath, versionedResourcesFolder, 'resources/app/product.json'); -+ const originalProductJsonPath = path.join(sourcePath, 'resources/app/product.json'); - const productJsonPath = path.join(outputPath, 'product.json'); -@@ -113,3 +108,2 @@ function buildWin32Setup(arch: string, target: string): task.CallbackTask { - ProductJsonPath: productJsonPath, -- VersionedResourcesFolder: versionedResourcesFolder, - Quality: quality -diff --git a/build/win32/code-insider.iss b/build/win32/code-insider.iss -index 2cbf252..b8445fb 100644 ---- a/build/win32/code-insider.iss -+++ b/build/win32/code-insider.iss -@@ -69,9 +69,9 @@ Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl,{#RepoDir}\build\ - [InstallDelete] --Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\out"; Check: IsNotBackgroundUpdate --Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\plugins"; Check: IsNotBackgroundUpdate --Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\extensions"; Check: IsNotBackgroundUpdate --Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\node_modules"; Check: IsNotBackgroundUpdate --Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\node_modules.asar.unpacked"; Check: IsNotBackgroundUpdate --Type: files; Name: "{app}\{#VersionedResourcesFolder}\resources\app\node_modules.asar"; Check: IsNotBackgroundUpdate --Type: files; Name: "{app}\{#VersionedResourcesFolder}\resources\app\Credits_45.0.2454.85.html"; Check: IsNotBackgroundUpdate -+Type: filesandordirs; Name: "{app}\resources\app\out"; Check: IsNotBackgroundUpdate -+Type: filesandordirs; Name: "{app}\resources\app\plugins"; Check: IsNotBackgroundUpdate -+Type: filesandordirs; Name: "{app}\resources\app\extensions"; Check: IsNotBackgroundUpdate -+Type: filesandordirs; Name: "{app}\resources\app\node_modules"; Check: IsNotBackgroundUpdate -+Type: filesandordirs; Name: "{app}\resources\app\node_modules.asar.unpacked"; Check: IsNotBackgroundUpdate -+Type: files; Name: "{app}\resources\app\node_modules.asar"; Check: IsNotBackgroundUpdate -+Type: files; Name: "{app}\resources\app\Credits_45.0.2454.85.html"; Check: IsNotBackgroundUpdate - -@@ -100,4 +100,4 @@ Source: "{#ExeBasename}.exe"; DestDir: "{code:GetDestDir}"; DestName: "{code:Get - Source: "{#ExeBasename}.VisualElementsManifest.xml"; DestDir: "{code:GetDestDir}"; DestName: "{code:GetVisualElementsManifest}"; Flags: ignoreversion --Source: "tools\*"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\tools"; Flags: ignoreversion --Source: "policies\*"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\policies"; Flags: ignoreversion skipifsourcedoesntexist -+Source: "tools\*"; DestDir: "{code:GetDestDir}\tools"; Flags: ignoreversion -+Source: "policies\*"; DestDir: "{code:GetDestDir}\policies"; Flags: ignoreversion skipifsourcedoesntexist - Source: "bin\{#TunnelApplicationName}.exe"; DestDir: "{code:GetDestDir}\bin"; DestName: "{code:GetBinDirTunnelApplicationFilename}"; Flags: ignoreversion skipifsourcedoesntexist -@@ -105,7 +105,7 @@ Source: "bin\{#ApplicationName}.cmd"; DestDir: "{code:GetDestDir}\bin"; DestName - Source: "bin\{#ApplicationName}"; DestDir: "{code:GetDestDir}\bin"; DestName: "{code:GetBinDirApplicationFilename}"; Flags: ignoreversion --Source: "{#ProductJsonPath}"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\resources\app"; Flags: ignoreversion -+Source: "{#ProductJsonPath}"; DestDir: "{code:GetDestDir}\resources\app"; Flags: ignoreversion - #ifdef AppxPackageName - #if "user" == InstallTarget --Source: "appx\{#AppxPackage}"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\appx"; BeforeInstall: RemoveAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater --Source: "appx\{#AppxPackageDll}"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\appx"; AfterInstall: AddAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater -+Source: "appx\{#AppxPackage}"; DestDir: "{code:GetDestDir}\appx"; BeforeInstall: RemoveAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater -+Source: "appx\{#AppxPackageDll}"; DestDir: "{code:GetDestDir}\appx"; AfterInstall: AddAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater - #endif -@@ -133,3 +133,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -141,3 +141,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -149,3 +149,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -157,3 +157,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -165,3 +165,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_ - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -173,3 +173,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_ - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -181,3 +181,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_ - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -189,3 +189,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashr - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -197,3 +197,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -205,3 +205,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bower - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\bower.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\bower.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -213,3 +213,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles -@@ -220,3 +220,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c"; V - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -228,3 +228,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -236,3 +236,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -244,3 +244,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -252,3 +252,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -260,3 +260,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -268,3 +268,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -276,3 +276,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cloju - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -284,3 +284,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -292,3 +292,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code- - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -300,3 +300,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -308,3 +308,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffe - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -316,3 +316,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.confi - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -324,3 +324,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.conta - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles -@@ -331,3 +331,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -339,3 +339,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -347,3 +347,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtm - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -355,3 +355,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cspro - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -363,3 +363,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\css.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\css.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -371,3 +371,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -379,3 +379,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -387,3 +387,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -395,3 +395,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -403,3 +403,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -411,3 +411,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -419,3 +419,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.docke - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -427,3 +427,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -435,3 +435,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -443,3 +443,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edito - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -451,3 +451,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -459,3 +459,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -467,3 +467,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -475,3 +475,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -483,3 +483,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -491,3 +491,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -499,3 +499,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscr - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -507,3 +507,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -515,3 +515,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemsp - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -524,3 +524,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitat - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -533,3 +533,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitco - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -542,3 +542,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitig - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -550,3 +550,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\go.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\go.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -558,3 +558,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradl - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -566,3 +566,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groov - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -574,3 +574,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h"; V - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -582,3 +582,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handl - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -590,3 +590,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -598,3 +598,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles -@@ -605,3 +605,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -613,3 +613,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -621,3 +621,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -629,3 +629,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -637,3 +637,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -645,3 +645,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -653,3 +653,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -661,3 +661,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\jade.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\jade.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -669,3 +669,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -677,3 +677,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -685,3 +685,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -693,3 +693,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -701,3 +701,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsr - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -709,3 +709,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshin - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -717,3 +717,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -725,3 +725,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\json.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\json.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -733,3 +733,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -741,3 +741,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\less.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\less.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -749,3 +749,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -757,3 +757,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -765,3 +765,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m"; V - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -773,3 +773,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makef - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -781,3 +781,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markd - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -789,3 +789,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -797,3 +797,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -805,3 +805,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -813,3 +813,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtex - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -821,3 +821,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -829,3 +829,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -837,3 +837,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -845,3 +845,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -853,3 +853,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -861,3 +861,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -869,3 +869,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -877,3 +877,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -886,3 +886,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmig - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -894,3 +894,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\php.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\php.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -902,3 +902,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -910,3 +910,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -918,3 +918,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -926,3 +926,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -934,3 +934,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -942,3 +942,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -950,3 +950,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -958,3 +958,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -966,3 +966,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profi - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -974,3 +974,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.prope - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -982,3 +982,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -990,3 +990,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -998,3 +998,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1006,3 +1006,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1014,3 +1014,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1022,3 +1022,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1030,3 +1030,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r"; V - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1038,3 +1038,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1046,3 +1046,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhist - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1054,3 +1054,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprof - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1062,3 +1062,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1070,3 +1070,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1078,3 +1078,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1086,3 +1086,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1094,3 +1094,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1102,3 +1102,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1110,3 +1110,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1118,3 +1118,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\sql.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\sql.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1126,3 +1126,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1134,3 +1134,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t"; V - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1142,3 +1142,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1150,3 +1150,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\typescript.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\typescript.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1158,3 +1158,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1166,3 +1166,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1174,3 +1174,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1182,3 +1182,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1190,3 +1190,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\vue.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\vue.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1198,3 +1198,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1206,3 +1206,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1214,3 +1214,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1222,3 +1222,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1230,3 +1230,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1238,3 +1238,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1246,3 +1246,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1254,3 +1254,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1262,3 +1262,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh"; - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles -@@ -1267,3 +1267,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\s - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,{#NameLong}}"; Flags: uninsdeletekey --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico" -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\shell\open"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe""" -@@ -1272,3 +1272,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}Source - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe"; ValueType: none; ValueName: ""; Flags: uninsdeletekey --Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico" -+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico" - Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe""" -@@ -1557,3 +1557,3 @@ begin - Log('Installing appx ' + AppxPackageFullname + ' ...'); -- ShellExec('', 'powershell.exe', '-NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command ' + AddQuotes('Add-AppxPackage -Path ''' + ExpandConstant('{app}\{#VersionedResourcesFolder}\appx\{#AppxPackage}') + ''' -ExternalLocation ''' + ExpandConstant('{app}\{#VersionedResourcesFolder}\appx') + ''''), '', SW_HIDE, ewWaitUntilTerminated, AddAppxPackageResultCode); -+ ShellExec('', 'powershell.exe', '-NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command ' + AddQuotes('Add-AppxPackage -Path ''' + ExpandConstant('{app}\appx\{#AppxPackage}') + ''' -ExternalLocation ''' + ExpandConstant('{app}\appx') + ''''), '', SW_HIDE, ewWaitUntilTerminated, AddAppxPackageResultCode); - Log('Add-AppxPackage complete.'); -@@ -1614,3 +1614,3 @@ begin - Log('Invoking inno_updater for background update'); -- Exec(ExpandConstant('{app}\{#VersionedResourcesFolder}\tools\inno_updater.exe'), ExpandConstant('"{app}\{#ExeBasename}.exe" ' + BoolToStr(LockFileExists()) + ' "{cm:UpdatingVisualStudioCode}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); -+ Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"{app}\{#ExeBasename}.exe" ' + BoolToStr(LockFileExists()) + ' "{cm:UpdatingVisualStudioCode}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); - DeleteFile(ExpandConstant('{app}\updating_version')); -@@ -1619,3 +1619,3 @@ begin - Log('Invoking inno_updater to remove previous installation folder'); -- Exec(ExpandConstant('{app}\{#VersionedResourcesFolder}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe" "{#VersionedResourcesFolder}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); -+ Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); - Log('inno_updater completed gc successfully'); -@@ -1627,3 +1627,3 @@ begin - Log('Invoking inno_updater to remove previous installation folder'); -- Exec(ExpandConstant('{app}\{#VersionedResourcesFolder}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe" "{#VersionedResourcesFolder}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); -+ Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); - Log('inno_updater completed gc successfully'); -diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts -index ae4fd9c..eb77fcf 100644 ---- a/src/vs/platform/update/electron-main/updateService.win32.ts -+++ b/src/vs/platform/update/electron-main/updateService.win32.ts -@@ -94,10 +94,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - protected override async initialize(): Promise { -- if (this.environmentMainService.isBuilt) { -- const cachePath = await this.cachePath; -- app.setPath('appUpdate', cachePath); -- try { -- await unlink(path.join(cachePath, 'session-ending.flag')); -- } catch { } -- } -- - if (this.productService.target === 'user' && await this.nativeHostMainService.isAdmin(undefined)) { -@@ -140,6 +132,5 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - if (fastUpdatesEnabled && this.productService.target === 'user' && this.productService.commit) { -- const versionedResourcesFolder = this.productService.commit.substring(0, 10); -- const innoUpdater = path.join(exeDir, versionedResourcesFolder, 'tools', 'inno_updater.exe'); -+ const innoUpdater = path.join(exeDir, 'tools', 'inno_updater.exe'); - await new Promise(resolve => { -- const child = spawn(innoUpdater, ['--gc', exePath, versionedResourcesFolder], { -+ const child = spawn(innoUpdater, ['--gc', exePath], { - stdio: ['ignore', 'ignore', 'ignore'], diff --git a/prepare_vscode.sh b/prepare_vscode.sh index d9d8f90..9ac2bb8 100755 --- a/prepare_vscode.sh +++ b/prepare_vscode.sh @@ -58,6 +58,10 @@ if [[ "${DISABLE_UPDATE}" != "yes" ]]; then else setpath "product" "downloadUrl" "https://github.com/VSCodium/vscodium/releases" fi + + if [[ "${OS_NAME}" == "windows" ]]; then + setpath_json "product" "win32VersionedUpdate" "true" + fi fi if [[ "${VSCODE_QUALITY}" == "insider" ]]; then From 8a26e54d3eeb7607eb06b5510a111f66f7aa8769 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Mon, 9 Feb 2026 20:19:21 +0100 Subject: [PATCH 04/22] feat(windows): disable versioned update (#2691) --- prepare_vscode.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/prepare_vscode.sh b/prepare_vscode.sh index 9ac2bb8..1761c7f 100755 --- a/prepare_vscode.sh +++ b/prepare_vscode.sh @@ -59,9 +59,9 @@ if [[ "${DISABLE_UPDATE}" != "yes" ]]; then setpath "product" "downloadUrl" "https://github.com/VSCodium/vscodium/releases" fi - if [[ "${OS_NAME}" == "windows" ]]; then - setpath_json "product" "win32VersionedUpdate" "true" - fi + # if [[ "${OS_NAME}" == "windows" ]]; then + # setpath_json "product" "win32VersionedUpdate" "true" + # fi fi if [[ "${VSCODE_QUALITY}" == "insider" ]]; then From be3bb0ad5b9cb15f215cfa9574f03cbc59d7dd20 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Thu, 12 Feb 2026 10:47:50 +0100 Subject: [PATCH 05/22] fix(snap): re-add snap update service (#2697) --- patches/version-1-update.patch | 13 ------------- upstream/insider.json | 4 ++-- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/patches/version-1-update.patch b/patches/version-1-update.patch index be046a8..f7fcf56 100644 --- a/patches/version-1-update.patch +++ b/patches/version-1-update.patch @@ -1,16 +1,3 @@ -diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts -index a3efce9..be970c6 100644 ---- a/src/vs/code/electron-main/app.ts -+++ b/src/vs/code/electron-main/app.ts -@@ -78,3 +78,2 @@ import { DarwinUpdateService } from '../../platform/update/electron-main/updateS - import { LinuxUpdateService } from '../../platform/update/electron-main/updateService.linux.js'; --import { SnapUpdateService } from '../../platform/update/electron-main/updateService.snap.js'; - import { Win32UpdateService } from '../../platform/update/electron-main/updateService.win32.js'; -@@ -997,3 +996,3 @@ export class CodeApplication extends Disposable { - if (isLinuxSnap) { -- services.set(IUpdateService, new SyncDescriptor(SnapUpdateService, [process.env['SNAP'], process.env['SNAP_REVISION']])); -+ // services.set(IUpdateService, new SyncDescriptor(SnapUpdateService, [process.env['SNAP'], process.env['SNAP_REVISION']])); - } else { diff --git a/src/vs/platform/update/common/update.ts b/src/vs/platform/update/common/update.ts index b859dfd..75e8987 100644 --- a/src/vs/platform/update/common/update.ts diff --git a/upstream/insider.json b/upstream/insider.json index e2fae29..a743d2c 100644 --- a/upstream/insider.json +++ b/upstream/insider.json @@ -1,4 +1,4 @@ { - "tag": "1.109.0", - "commit": "bdd88df003631aaa0bcbe057cb0a940b80a476fa" + "tag": "1.109.2", + "commit": "591199df409fbf59b4b52d5ad4ee0470152a9b31" } From cf38c857b27821b135a19bd506ad137b9b6cc0ed Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Tue, 17 Feb 2026 12:22:40 +0100 Subject: [PATCH 06/22] feat(1.110): update patches (#2704) --- .nvmrc | 2 +- build/linux/package_reh.sh | 2 + patches/add-remote-url.patch | 14 +-- patches/binary-name.patch | 12 +-- patches/brand.patch | 152 ++++++++++++++--------------- patches/fix-build-vsce.patch | 78 +++++++++++---- patches/fix-keymap.patch | 24 ++--- patches/fix-policies.patch | 18 ++-- patches/helper/settings.patch | 15 ++- patches/linux/arch-0-support.patch | 12 +-- patches/linux/arch-1-ppc64le.patch | 30 +++--- patches/version-1-update.patch | 70 +++++++------ product.json | 8 ++ upstream/insider.json | 4 +- 14 files changed, 244 insertions(+), 197 deletions(-) diff --git a/.nvmrc b/.nvmrc index 5767036..85e5027 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.21.1 +22.22.0 diff --git a/build/linux/package_reh.sh b/build/linux/package_reh.sh index 834a209..eb49ade 100755 --- a/build/linux/package_reh.sh +++ b/build/linux/package_reh.sh @@ -141,6 +141,8 @@ if [[ -z "${VSCODE_SKIP_SETUPENV}" ]]; then if [[ -n "${VSCODE_SKIP_SYSROOT}" ]]; then source ./build/azure-pipelines/linux/setup-env.sh --skip-sysroot else + cat ./build/checksums/vscode-sysroot.txt + source ./build/azure-pipelines/linux/setup-env.sh fi diff --git a/patches/add-remote-url.patch b/patches/add-remote-url.patch index 3e86344..21f52b5 100644 --- a/patches/add-remote-url.patch +++ b/patches/add-remote-url.patch @@ -1,18 +1,18 @@ diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts -index cb1a0a5..dacedc3 100644 +index b935764..68067db 100644 --- a/build/gulpfile.reh.ts +++ b/build/gulpfile.reh.ts @@ -323,3 +323,3 @@ function packageTask(type: string, platform: string, arch: string, sourceFolderN const productJsonStream = gulp.src(['product.json'], { base: '.' }) -- .pipe(jsonEditor({ commit, date: readISODate('out-build'), version })) -+ .pipe(jsonEditor({ commit, date: readISODate('out-build'), version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) +- .pipe(jsonEditor({ commit, date: readISODate(sourceFolderName), version })) ++ .pipe(jsonEditor({ commit, date: readISODate(sourceFolderName), version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) .pipe(es.through(function (file) { diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts -index d3ab651..1000abc 100644 +index a103f11..82142a1 100644 --- a/build/gulpfile.vscode.ts +++ b/build/gulpfile.vscode.ts -@@ -272,3 +272,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d +@@ -374,3 +374,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d const productJsonStream = gulp.src(['product.json'], { base: '.' }) -- .pipe(jsonEditor({ commit, date: readISODate('out-build'), checksums, version })) -+ .pipe(jsonEditor({ commit, date: readISODate('out-build'), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) +- .pipe(jsonEditor({ commit, date: readISODate(out), checksums, version })) ++ .pipe(jsonEditor({ commit, date: readISODate(out), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) .pipe(es.through(function (file) { diff --git a/patches/binary-name.patch b/patches/binary-name.patch index b8214df..41f2950 100644 --- a/patches/binary-name.patch +++ b/patches/binary-name.patch @@ -1,22 +1,22 @@ diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts -index d3ab651..63cd71f 100644 +index a103f11..cc95785 100644 --- a/build/gulpfile.vscode.ts +++ b/build/gulpfile.vscode.ts -@@ -369,3 +369,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d - .pipe(replace('@@APPNAME@@', product.applicationName)) +@@ -466,3 +466,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + .pipe(replace('@@NAME@@', product.nameShort)) - .pipe(rename('bin/code')); + .pipe(rename('bin/' + product.applicationName)); const policyDest = gulp.src('.build/policies/darwin/**', { base: '.build/policies/darwin' }) diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts -index 2c3b710..8041f08 100644 +index 93d0008..a04d296 100644 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts -@@ -503,3 +503,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain +@@ -539,3 +539,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain private async getShellCommandLink(): Promise<{ readonly source: string; readonly target: string }> { - const target = resolve(this.environmentMainService.appRoot, 'bin', 'code'); + const target = resolve(this.environmentMainService.appRoot, 'bin', this.productService.applicationName); const source = `/usr/local/bin/${this.productService.applicationName}`; -@@ -772,3 +772,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain +@@ -808,3 +808,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain if (this.environmentMainService.isBuilt) { - return join(this.environmentMainService.appRoot, 'bin', 'code'); + return join(this.environmentMainService.appRoot, 'bin', `${this.productService.applicationName}`); diff --git a/patches/brand.patch b/patches/brand.patch index 2df46f0..4aef366 100644 --- a/patches/brand.patch +++ b/patches/brand.patch @@ -332,7 +332,7 @@ index 1cb74c5..3f5f892 100644 + ${vscode.l10n.t("Open file using !!APP_NAME!!'s standard text/binary editor?")} diff --git a/extensions/notebook-renderers/package.json b/extensions/notebook-renderers/package.json -index 77c042e..d262ee3 100644 +index e9890ca..6bed1e6 100644 --- a/extensions/notebook-renderers/package.json +++ b/extensions/notebook-renderers/package.json @@ -22,3 +22,3 @@ @@ -359,31 +359,31 @@ index a8bbe5d..00694dc 100644 + "comment": "The simpler (?<=\\bProcess\\.|\\bCommandLine\\.) breaks !!APP_NAME!! / Atom, see https://github.com/textmate/swift.tmbundle/issues/29", "name": "support.variable.swift", diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json -index e01e4de..1797d03 100644 +index 59a9ea9..7cc82d0 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json -@@ -82,4 +82,4 @@ +@@ -89,4 +89,4 @@ "configuration.tsserver.experimental.enableProjectDiagnostics": "Enables project wide error reporting.", - "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Defaults to use VS Code's locale.", - "typescript.locale.auto": "Use VS Code's configured display language.", + "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Defaults to use !!APP_NAME!!'s locale.", + "typescript.locale.auto": "Use !!APP_NAME!!'s configured display language.", "configuration.implicitProjectConfig.module": "Sets the module system for the program. See more: https://www.typescriptlang.org/tsconfig#module.", -@@ -166,3 +166,3 @@ +@@ -197,3 +197,3 @@ "typescript.workspaceSymbols.excludeLibrarySymbols": "Exclude symbols that come from library files in `Go to Symbol in Workspace` results. Requires using TypeScript 5.3+ in the workspace.", - "typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in VS Code.", + "typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in !!APP_NAME!!.", "typescript.updateImportsOnFileMove.enabled.prompt": "Prompt on each rename.", -@@ -173,5 +173,5 @@ - "configuration.suggest.completeJSDocs": "Enable/disable suggestion to complete JSDoc comments.", +@@ -206,5 +206,5 @@ + "configuration.suggest.completeJSDocs.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.suggest.completeJSDocs#` instead.", - "configuration.tsserver.useVsCodeWatcher": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", + "configuration.tsserver.useVsCodeWatcher": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", "configuration.tsserver.watchOptions": "Configure which watching strategies should be used to keep track of files and directories.", - "configuration.tsserver.watchOptions.vscode": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", + "configuration.tsserver.watchOptions.vscode": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", "configuration.tsserver.watchOptions.watchFile": "Strategy for how individual files are watched.", -@@ -225,6 +225,6 @@ - "configuration.suggest.objectLiteralMethodSnippets.enabled": "Enable/disable snippet completions for methods in object literals.", +@@ -260,6 +260,6 @@ + "configuration.suggest.objectLiteralMethodSnippets.enabled.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.suggest.objectLiteralMethodSnippets.enabled#` instead.", - "configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that VS Code is running in a trusted context.", + "configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that !!APP_NAME!! is running in a trusted context.", "configuration.tsserver.web.projectWideIntellisense.suppressSemanticErrors": "Suppresses semantic errors on web even when project wide IntelliSense is enabled. This is always on when project wide IntelliSense is not enabled or available. See `#typescript.tsserver.web.projectWideIntellisense.enabled#`", @@ -391,7 +391,7 @@ index e01e4de..1797d03 100644 - "configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want VS Code to detect a Node installation.", + "configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want !!APP_NAME!! to detect a Node installation.", "configuration.updateImportsOnPaste": "Automatically update imports when pasting code. Requires TypeScript 5.6+.", -@@ -240,7 +240,7 @@ +@@ -275,7 +275,7 @@ "walkthroughs.nodejsWelcome.debugJsFile.title": "Run and Debug your JavaScript", - "walkthroughs.nodejsWelcome.debugJsFile.description": "Once you've installed Node.js, you can run JavaScript programs at a terminal by entering ``node your-file-name.js``\nAnother easy way to run Node.js programs is by using VS Code's debugger which lets you run your code, pause at different points, and help you understand what's going on step-by-step.\n[Start Debugging](command:javascript-walkthrough.commands.debugJsFile)", - "walkthroughs.nodejsWelcome.debugJsFile.altText": "Debug and run your JavaScript code in Node.js with Visual Studio Code.", @@ -450,7 +450,7 @@ index 207698d..9948527 100644 + vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json -index c3c08b1..d0f4d3d 100644 +index cf23867..f5389b9 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -2,3 +2,3 @@ @@ -528,24 +528,24 @@ index a351aa7..c32e3ef 100644 + throw Error(`Failed to download and unzip !!APP_NAME!! ${quality} - ${commit}`); } diff --git a/extensions/vscode-test-resolver/src/extension.ts b/extensions/vscode-test-resolver/src/extension.ts -index 74d25c6..878e228 100644 +index 3e6c9f0..6d4176f 100644 --- a/extensions/vscode-test-resolver/src/extension.ts +++ b/extensions/vscode-test-resolver/src/extension.ts -@@ -178,3 +178,3 @@ export function activate(context: vscode.ExtensionContext) { +@@ -180,3 +180,3 @@ export function activate(context: vscode.ExtensionContext) { const serverBin = path.join(remoteDataDir, 'bin'); - progress.report({ message: 'Installing VSCode Server' }); + progress.report({ message: 'Installing !!APP_NAME!! Server' }); serverLocation = await downloadAndUnzipVSCodeServer(updateUrl, commit, quality, serverBin, m => outputChannel.appendLine(m)); diff --git a/src/main.ts b/src/main.ts -index ecbbb16..a61b2d3 100644 +index ec2e45c..8d89e2b 100644 --- a/src/main.ts +++ b/src/main.ts -@@ -416,3 +416,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { +@@ -412,3 +412,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { const defaultArgvConfigContent = [ - '// This configuration file allows you to pass permanent command line arguments to VS Code.', + '// This configuration file allows you to pass permanent command line arguments to !!APP_NAME!!.', '// Only a subset of arguments is currently supported to reduce the likelihood of breaking', -@@ -422,6 +422,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { +@@ -418,6 +418,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { '//', - '// NOTE: Changing this file requires a restart of VS Code.', + '// NOTE: Changing this file requires a restart of !!APP_NAME!!.', @@ -555,10 +555,10 @@ index ecbbb16..a61b2d3 100644 + ' // This can help in cases where you see rendering issues in !!APP_NAME!!.', ' // "disable-hardware-acceleration": true', diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts -index a3efce9..ba6055d 100644 +index 0c6cc59..16d8986 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts -@@ -532,3 +532,3 @@ export class CodeApplication extends Disposable { +@@ -539,3 +539,3 @@ export class CodeApplication extends Disposable { async startup(): Promise { - this.logService.debug('Starting VS Code'); + this.logService.debug('Starting !!APP_NAME!!'); @@ -631,7 +631,7 @@ index 27fd88b..ad97d7b 100644 + description: localize('terminal.integrated.inheritEnv', "Whether new shells should inherit their environment from !!APP_NAME!!, which may source a login shell to ensure $PATH and other development variables are initialized. This has no effect on Windows."), type: 'boolean', diff --git a/src/vs/platform/update/common/update.config.contribution.ts b/src/vs/platform/update/common/update.config.contribution.ts -index e5fb1ab..bd4740b 100644 +index 5d1a419..1d7d025 100644 --- a/src/vs/platform/update/common/update.config.contribution.ts +++ b/src/vs/platform/update/common/update.config.contribution.ts @@ -70,3 +70,3 @@ configurationRegistry.registerConfiguration({ @@ -640,19 +640,19 @@ index e5fb1ab..bd4740b 100644 + description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new !!APP_NAME!! versions in the background on Windows."), included: isWindows && !isWeb diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index 0e63d40..5b8085e 100644 +index 05c4489..f692f24 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts -@@ -33,3 +33,3 @@ export type UpdateErrorClassification = { +@@ -53,3 +53,3 @@ export type UpdateErrorClassification = { messageHash: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The hash of the error message.' }; - comment: 'This is used to know how often VS Code updates have failed.'; + comment: 'This is used to know how often !!APP_NAME!! updates have failed.'; }; diff --git a/src/vs/server/node/server.cli.ts b/src/vs/server/node/server.cli.ts -index 6a0eacf..2959dad 100644 +index 58ff362..9bf7ed9 100644 --- a/src/vs/server/node/server.cli.ts +++ b/src/vs/server/node/server.cli.ts -@@ -474,3 +474,3 @@ function asExtensionIdOrVSIX(inputs: string[] | undefined) { +@@ -475,3 +475,3 @@ function asExtensionIdOrVSIX(inputs: string[] | undefined) { function fatal(message: string, err: unknown): void { - console.error('Unable to connect to VS Code server: ' + message); + console.error('Unable to connect to !!APP_NAME!! server: ' + message); @@ -685,10 +685,10 @@ index a04bbd0..202f130 100644 + ApiCommandArgument.String.with('viewId', 'Custom editor view id. This should be the viewType string for custom editors or the notebookType string for notebooks. Use \'default\' to use !!APP_NAME!!\'s default text editor'), new ApiCommandArgument('columnOrOptions', 'Either the column in which to open or editor options, see vscode.TextDocumentShowOptions', diff --git a/src/vs/workbench/api/common/extHostCommands.ts b/src/vs/workbench/api/common/extHostCommands.ts -index 161e19b..b6bfeb2 100644 +index 15c7693..a8f1975 100644 --- a/src/vs/workbench/api/common/extHostCommands.ts +++ b/src/vs/workbench/api/common/extHostCommands.ts -@@ -466,4 +466,4 @@ export class ApiCommandArgument { +@@ -464,4 +464,4 @@ export class ApiCommandArgument { static readonly TypeHierarchyItem = new ApiCommandArgument('item', 'A type hierarchy item', v => v instanceof extHostTypes.TypeHierarchyItem, extHostTypeConverter.TypeHierarchyItem.from); - static readonly TestItem = new ApiCommandArgument('testItem', 'A VS Code TestItem', v => v instanceof TestItemImpl, extHostTypeConverter.TestItem.from); - static readonly TestProfile = new ApiCommandArgument('testProfile', 'A VS Code test profile', v => v instanceof extHostTypes.TestRunProfileBase, extHostTypeConverter.TestRunProfile.from); @@ -714,7 +714,7 @@ index 91f52f5..dbb0ad4 100644 + let content = '# !!APP_NAME!! Policy Diagnostics\n\n'; content += '*WARNING: This file may contain sensitive information.*\n\n'; diff --git a/src/vs/workbench/browser/actions/helpActions.ts b/src/vs/workbench/browser/actions/helpActions.ts -index 2487213..a22b4d1 100644 +index 7e4fb7b..b459421 100644 --- a/src/vs/workbench/browser/actions/helpActions.ts +++ b/src/vs/workbench/browser/actions/helpActions.ts @@ -163,3 +163,3 @@ class OpenNewsletterSignupUrlAction extends Action2 { @@ -732,47 +732,47 @@ index e342f83..7c314e6 100644 + throw new Error('Unable to create the !!APP_NAME!! workbench more than once.'); } else { diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index 5ea32fb..23584f4 100644 +index b1c5637..3619ee6 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -748,3 +748,3 @@ const registry = Registry.as(ConfigurationExtensions.Con +@@ -779,3 +779,3 @@ const registry = Registry.as(ConfigurationExtensions.Con localize('profileName', "`${profileName}`: name of the profile in which the workspace is opened (e.g. Data Science (Profile)). Ignored if default profile is used."), - localize('appName', "`${appName}`: e.g. VS Code."), + localize('appName', "`${appName}`: e.g. !!APP_NAME!!."), localize('remoteName', "`${remoteName}`: e.g. SSH"), diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts -index 3a27ea1..684e2c7 100644 +index 50cc224..7ace915 100644 --- a/src/vs/workbench/common/contextkeys.ts +++ b/src/vs/workbench/common/contextkeys.ts -@@ -43,3 +43,3 @@ export const EmbedderIdentifierContext = new RawContextKey(' +@@ -41,3 +41,3 @@ export const EmbedderIdentifierContext = new RawContextKey(' -export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether VS Code is running under automation/smoke test")); +export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether !!APP_NAME!! is running under automation/smoke test")); diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -index d211a1d..bfb973c 100644 +index 47b9c59..7043d55 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -@@ -467,3 +467,3 @@ configurationRegistry.registerConfiguration({ +@@ -492,3 +492,3 @@ configurationRegistry.registerConfiguration({ nls.localize('chat.mcp.access.none', "No access to MCP servers."), - nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), + nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), nls.localize('chat.mcp.access.any', "Allow access to any installed MCP server.") -@@ -494,3 +494,3 @@ configurationRegistry.registerConfiguration({ +@@ -519,3 +519,3 @@ configurationRegistry.registerConfiguration({ { - key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), + key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), }, diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts -index 88a46ef..6efa8ab 100644 +index ed6bad1..7d40581 100644 --- a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts +++ b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts -@@ -115,3 +115,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { +@@ -116,3 +116,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { // Register VSCode agent - const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about VS Code").value, ChatAgentLocation.Chat, ChatModeKind.Agent, context, controller); + const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about !!APP_NAME!!").value, ChatAgentLocation.Chat, ChatModeKind.Agent, context, controller); disposables.add(vscodeDisposable); -@@ -132,4 +132,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { +@@ -133,4 +133,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { displayName: localize('setupToolDisplayName', "New Workspace"), - modelDescription: 'Scaffold a new workspace in VS Code', - userDescription: localize('setupToolsDescription', "Scaffold a new workspace in VS Code"), @@ -780,10 +780,10 @@ index 88a46ef..6efa8ab 100644 + userDescription: localize('setupToolsDescription', "Scaffold a new workspace in !!APP_NAME!!"), canBeReferencedInPrompt: true, diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts -index d582ca6..b721308 100644 +index 55559b5..9ff882b 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts -@@ -218,5 +218,5 @@ export class PromptValidator { +@@ -227,5 +227,5 @@ export class PromptValidator { if (validGithubCopilotAttributeNames.value.has(attribute.key)) { - report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in VS Code.", attribute.key), attribute.range, MarkerSeverity.Info)); + report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in !!APP_NAME!!.", attribute.key), attribute.range, MarkerSeverity.Info)); @@ -792,7 +792,7 @@ index d582ca6..b721308 100644 + report(toMarker(localize('promptValidator.unknownAttribute.vscode-agent', "Attribute '{0}' is not supported in !!APP_NAME!! agent files. Supported: {1}.", attribute.key, supportedNames.value), attribute.range, MarkerSeverity.Warning)); } diff --git a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts b/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts -index 7504a9c..2e485bb 100644 +index 0b9ced3..731d952 100644 --- a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts +++ b/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts @@ -177,3 +177,3 @@ export class AdapterManager extends Disposable implements IAdapterManager { @@ -801,30 +801,30 @@ index 7504a9c..2e485bb 100644 + description: nls.localize('debugServer', "For debug extension development only: if a port is specified !!APP_NAME!! tries to connect to a debug adapter running in server mode"), default: 4711 diff --git a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -index 6956d79..ea5fa28 100644 +index 1d28ae5..2f7686c 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -@@ -353,3 +353,3 @@ CommandsRegistry.registerCommand({ +@@ -362,3 +362,3 @@ CommandsRegistry.registerCommand({ description: '(optional) Options for installing the extension. Object with the following properties: ' + - '`installOnlyNewlyAddedFromExtensionPackVSIX`: When enabled, VS Code installs only newly added extensions from the extension pack VSIX. This option is considered only when installing VSIX. ', + '`installOnlyNewlyAddedFromExtensionPackVSIX`: When enabled, !!APP_NAME!! installs only newly added extensions from the extension pack VSIX. This option is considered only when installing VSIX. ', isOptional: true, -@@ -360,3 +360,3 @@ CommandsRegistry.registerCommand({ +@@ -369,3 +369,3 @@ CommandsRegistry.registerCommand({ 'type': 'boolean', - 'description': localize('workbench.extensions.installExtension.option.installOnlyNewlyAddedFromExtensionPackVSIX', "When enabled, VS Code installs only newly added extensions from the extension pack VSIX. This option is considered only while installing a VSIX."), + 'description': localize('workbench.extensions.installExtension.option.installOnlyNewlyAddedFromExtensionPackVSIX', "When enabled, !!APP_NAME!! installs only newly added extensions from the extension pack VSIX. This option is considered only while installing a VSIX."), default: false -@@ -365,3 +365,3 @@ CommandsRegistry.registerCommand({ +@@ -374,3 +374,3 @@ CommandsRegistry.registerCommand({ 'type': 'boolean', - 'description': localize('workbench.extensions.installExtension.option.installPreReleaseVersion', "When enabled, VS Code installs the pre-release version of the extension if available."), + 'description': localize('workbench.extensions.installExtension.option.installPreReleaseVersion', "When enabled, !!APP_NAME!! installs the pre-release version of the extension if available."), default: false -@@ -370,3 +370,3 @@ CommandsRegistry.registerCommand({ +@@ -379,3 +379,3 @@ CommandsRegistry.registerCommand({ 'type': 'boolean', - 'description': localize('workbench.extensions.installExtension.option.donotSync', "When enabled, VS Code do not sync this extension when Settings Sync is on."), + 'description': localize('workbench.extensions.installExtension.option.donotSync', "When enabled, !!APP_NAME!! do not sync this extension when Settings Sync is on."), default: false -@@ -895,4 +895,4 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi +@@ -904,4 +904,4 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi Severity.Info, - vsixs.length > 1 ? localize('InstallVSIXs.successReload', "Completed installing extensions. Please reload Visual Studio Code to enable them.") - : localize('InstallVSIXAction.successReload', "Completed installing extension. Please reload Visual Studio Code to enable it."), @@ -832,7 +832,7 @@ index 6956d79..ea5fa28 100644 + : localize('InstallVSIXAction.successReload', "Completed installing extension. Please reload VSCodium to enable it."), [{ diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts -index f2a1f70..4bbabd2 100644 +index d1dacd0..035239a 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts @@ -109,3 +109,3 @@ export class PromptExtensionInstallFailureAction extends Action { @@ -856,15 +856,15 @@ index f2a1f70..4bbabd2 100644 + this.updateStatus({ icon: warningIcon, message: new MarkdownString(localize('deprecated with alternate settings tooltip', "This extension is deprecated as this functionality is now built-in to !!APP_NAME!!. Configure these {0} to use this functionality.", link)) }, true); } else { diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -index 23ea0f7..0e2c889 100644 +index 6735f7f..f860c4f 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -477,3 +477,3 @@ export class Extension implements IExtension { +@@ -478,3 +478,3 @@ export class Extension implements IExtension { return Promise.resolve(`# ${this.displayName || this.name} -**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled. +**Notice:** This extension is bundled with !!APP_NAME!!. It can be disabled but not uninstalled. ## Features -@@ -515,3 +515,3 @@ ${this.description} +@@ -516,3 +516,3 @@ ${this.description} if (this.type === ExtensionType.System) { - return Promise.resolve(`Please check the [VS Code Release Notes](command:${ShowCurrentReleaseNotesActionId}) for changes to the built-in extensions.`); + return Promise.resolve(`Please check the [!!APP_NAME!! Release Notes](command:${ShowCurrentReleaseNotesActionId}) for changes to the built-in extensions.`); @@ -923,10 +923,10 @@ index 050dde4..a8a61bd 100644 + description: localize2('configureLocaleDescription', "Changes the locale of !!APP_NAME!! based on installed language packs. Common languages include French, Chinese, Spanish, Japanese, German, Korean, and more.") } diff --git a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts -index 7f4dfea..2d4da89 100644 +index 9e82f11..690fe56 100644 --- a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +++ b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts -@@ -262,3 +262,3 @@ export class McpServersListView extends AbstractExtensionsListView = { +@@ -316,3 +316,3 @@ const terminalConfiguration: IStringDictionary = { [TerminalSettingId.DetectLocale]: { - markdownDescription: localize('terminal.integrated.detectLocale', "Controls whether to detect and set the `$LANG` environment variable to a UTF-8 compliant option since VS Code's terminal only supports UTF-8 encoded data coming from the shell."), + markdownDescription: localize('terminal.integrated.detectLocale', "Controls whether to detect and set the `$LANG` environment variable to a UTF-8 compliant option since !!APP_NAME!!'s terminal only supports UTF-8 encoded data coming from the shell."), type: 'string', -@@ -325,3 +325,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -330,3 +330,3 @@ const terminalConfiguration: IStringDictionary = { markdownEnumDescriptions: [ - localize('terminal.integrated.gpuAcceleration.auto', "Let VS Code detect which renderer will give the best experience."), + localize('terminal.integrated.gpuAcceleration.auto', "Let !!APP_NAME!! detect which renderer will give the best experience."), localize('terminal.integrated.gpuAcceleration.on', "Enable GPU acceleration within the terminal."), -@@ -413,3 +413,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -418,3 +418,3 @@ const terminalConfiguration: IStringDictionary = { 'terminal.integrated.commandsToSkipShell', - "A set of command IDs whose keybindings will not be sent to the shell but instead always be handled by VS Code. This allows keybindings that would normally be consumed by the shell to act instead the same as when the terminal is not focused, for example `Ctrl+P` to launch Quick Open.\n\n \n\nMany commands are skipped by default. To override a default and pass that command's keybinding to the shell instead, add the command prefixed with the `-` character. For example add `-workbench.action.quickOpen` to allow `Ctrl+P` to reach the shell.\n\n \n\nThe following list of default skipped commands is truncated when viewed in Settings Editor. To see the full list, {1} and search for the first command from the list below.\n\n \n\nDefault Skipped Commands:\n\n{0}", + "A set of command IDs whose keybindings will not be sent to the shell but instead always be handled by !!APP_NAME!!. This allows keybindings that would normally be consumed by the shell to act instead the same as when the terminal is not focused, for example `Ctrl+P` to launch Quick Open.\n\n \n\nMany commands are skipped by default. To override a default and pass that command's keybinding to the shell instead, add the command prefixed with the `-` character. For example add `-workbench.action.quickOpen` to allow `Ctrl+P` to reach the shell.\n\n \n\nThe following list of default skipped commands is truncated when viewed in Settings Editor. To see the full list, {1} and search for the first command from the list below.\n\n \n\nDefault Skipped Commands:\n\n{0}", DEFAULT_COMMANDS_TO_SKIP_SHELL.sort().map(command => `- ${command}`).join('\n'), -@@ -425,3 +425,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -430,3 +430,3 @@ const terminalConfiguration: IStringDictionary = { [TerminalSettingId.AllowChords]: { - markdownDescription: localize('terminal.integrated.allowChords', "Whether or not to allow chord keybindings in the terminal. Note that when this is true and the keystroke results in a chord it will bypass {0}, setting this to false is particularly useful when you want ctrl+k to go to your shell (not VS Code).", '`#terminal.integrated.commandsToSkipShell#`'), + markdownDescription: localize('terminal.integrated.allowChords', "Whether or not to allow chord keybindings in the terminal. Note that when this is true and the keystroke results in a chord it will bypass {0}, setting this to false is particularly useful when you want ctrl+k to go to your shell (not !!APP_NAME!!).", '`#terminal.integrated.commandsToSkipShell#`'), type: 'boolean', -@@ -436,3 +436,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -441,3 +441,3 @@ const terminalConfiguration: IStringDictionary = { restricted: true, - markdownDescription: localize('terminal.integrated.env.osx', "Object with environment variables that will be added to the VS Code process to be used by the terminal on macOS. Set to `null` to delete the environment variable."), + markdownDescription: localize('terminal.integrated.env.osx', "Object with environment variables that will be added to the !!APP_NAME!! process to be used by the terminal on macOS. Set to `null` to delete the environment variable."), type: 'object', -@@ -445,3 +445,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -450,3 +450,3 @@ const terminalConfiguration: IStringDictionary = { restricted: true, - markdownDescription: localize('terminal.integrated.env.linux', "Object with environment variables that will be added to the VS Code process to be used by the terminal on Linux. Set to `null` to delete the environment variable."), + markdownDescription: localize('terminal.integrated.env.linux', "Object with environment variables that will be added to the !!APP_NAME!! process to be used by the terminal on Linux. Set to `null` to delete the environment variable."), type: 'object', -@@ -454,3 +454,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -459,3 +459,3 @@ const terminalConfiguration: IStringDictionary = { restricted: true, - markdownDescription: localize('terminal.integrated.env.windows', "Object with environment variables that will be added to the VS Code process to be used by the terminal on Windows. Set to `null` to delete the environment variable."), + markdownDescription: localize('terminal.integrated.env.windows', "Object with environment variables that will be added to the !!APP_NAME!! process to be used by the terminal on Windows. Set to `null` to delete the environment variable."), type: 'object', -@@ -473,3 +473,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -478,3 +478,3 @@ const terminalConfiguration: IStringDictionary = { restricted: true, - markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.23.251008001) shipped with VS Code, instead of the one bundled with Windows."), + markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.23.251008001) shipped with !!APP_NAME!!, instead of the one bundled with Windows."), type: 'boolean', -@@ -606,3 +606,3 @@ const terminalConfiguration: IStringDictionary = { +@@ -608,3 +608,3 @@ const terminalConfiguration: IStringDictionary = { restricted: true, - markdownDescription: localize('terminal.integrated.shellIntegration.enabled', "Determines whether or not shell integration is auto-injected to support features like enhanced command tracking and current working directory detection. \n\nShell integration works by injecting the shell with a startup script. The script gives VS Code insight into what is happening within the terminal.\n\nSupported shells:\n\n- Linux/macOS: bash, fish, pwsh, zsh\n - Windows: pwsh, git bash\n\nThis setting applies only when terminals are created, so you will need to restart your terminals for it to take effect.\n\n Note that the script injection may not work if you have custom arguments defined in the terminal profile, have enabled {1}, have a [complex bash `PROMPT_COMMAND`](https://code.visualstudio.com/docs/editor/integrated-terminal#_complex-bash-promptcommand), or other unsupported setup. To disable decorations, see {0}", '`#terminal.integrated.shellIntegration.decorationsEnabled#`', '`#editor.accessibilitySupport#`'), + markdownDescription: localize('terminal.integrated.shellIntegration.enabled', "Determines whether or not shell integration is auto-injected to support features like enhanced command tracking and current working directory detection. \n\nShell integration works by injecting the shell with a startup script. The script gives !!APP_NAME!! insight into what is happening within the terminal.\n\nSupported shells:\n\n- Linux/macOS: bash, fish, pwsh, zsh\n - Windows: pwsh, git bash\n\nThis setting applies only when terminals are created, so you will need to restart your terminals for it to take effect.\n\n Note that the script injection may not work if you have custom arguments defined in the terminal profile, have enabled {1}, have a [complex bash `PROMPT_COMMAND`](https://code.visualstudio.com/docs/editor/integrated-terminal#_complex-bash-promptcommand), or other unsupported setup. To disable decorations, see {0}", '`#terminal.integrated.shellIntegration.decorationsEnabled#`', '`#editor.accessibilitySupport#`'), type: 'boolean', diff --git a/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.ts b/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.ts -index 4979520..30ae11b 100644 +index dc20533..2d2d488 100644 --- a/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.ts +++ b/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.ts @@ -19,3 +19,3 @@ export const terminalAutoRepliesConfiguration: IStringDictionary commandService.executeCommand('workbench.extensions.installExtension', 'ms-vscode.vscode-speech'); diff --git a/src/vs/workbench/contrib/update/browser/update.ts b/src/vs/workbench/contrib/update/browser/update.ts -index 55cc7d3..b2a7789 100644 +index f21d2bb..e8320e2 100644 --- a/src/vs/workbench/contrib/update/browser/update.ts +++ b/src/vs/workbench/contrib/update/browser/update.ts -@@ -621,4 +621,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor +@@ -631,4 +631,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor detail: newQuality === 'insider' ? - nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of VS Code.") : - nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of VS Code."), + nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of !!APP_NAME!!.") : + nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of !!APP_NAME!!."), primaryButton: nls.localize({ key: 'reload', comment: ['&& denotes a mnemonic'] }, "&&Reload") -@@ -657,3 +657,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor +@@ -667,3 +667,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor message: nls.localize('selectSyncService.message', "Choose the settings sync service to use after changing the version"), - detail: nls.localize('selectSyncService.detail', "The Insiders version of VS Code will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."), + detail: nls.localize('selectSyncService.detail', "The Insiders version of !!APP_NAME!! will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."), @@ -1140,7 +1140,7 @@ index 393c8c3..9268a6c 100644 + content += `// By default, !!APP_NAME!! trusts "localhost".\n`; } diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts -index 2b50e71..f322981 100644 +index f6e28df..86b8e78 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts @@ -52,3 +52,3 @@ registerAction2(class extends Action2 { @@ -1332,7 +1332,7 @@ index bdd30bf..317d11c 100644 +Well if you have got this far then you will have touched on some of the editing features in !!APP_NAME!!. But don't stop now :) We have lots of additional [documentation](https://code.visualstudio.com/docs), [introductory videos](https://code.visualstudio.com/docs/getstarted/introvideos) and [tips and tricks](https://go.microsoft.com/fwlink/?linkid=852118) for the product that will help you learn how to use it. And while you are here, here are a few additional things you can try: - Open the Integrated Terminal by pressing kb(workbench.action.terminal.toggleTerminal), then see what's possible by [reviewing the terminal documentation](https://code.visualstudio.com/docs/editor/integrated-terminal) diff --git a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts -index d134535..93cae5f 100644 +index 1159e4c..d8ebb47 100644 --- a/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts +++ b/src/vs/workbench/contrib/workspace/browser/workspace.contribution.ts @@ -765,3 +765,3 @@ Registry.as(ConfigurationExtensions.Configuration) diff --git a/patches/fix-build-vsce.patch b/patches/fix-build-vsce.patch index 6e3d407..1bda526 100644 --- a/patches/fix-build-vsce.patch +++ b/patches/fix-build-vsce.patch @@ -1,19 +1,50 @@ +diff --git a/build/.moduleignore b/build/.moduleignore +index ed36151..022d6ed 100644 +--- a/build/.moduleignore ++++ b/build/.moduleignore +@@ -82,7 +82,7 @@ native-is-elevated/deps/** + +-@vscode/vsce-sign/** +-!@vscode/vsce-sign/src/main.d.ts +-!@vscode/vsce-sign/src/main.js +-!@vscode/vsce-sign/package.json +-!@vscode/vsce-sign/bin/** ++@vscodium/vsce-sign/** ++!@vscodium/vsce-sign/src/main.d.ts ++!@vscodium/vsce-sign/src/main.js ++!@vscodium/vsce-sign/package.json ++!@vscodium/vsce-sign/bin/** + +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index a103f11..5211245 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -407,3 +407,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + '**/*.wasm', +- '**/@vscode/vsce-sign/bin/*', ++ '**/@vscodium/vsce-sign/bin/*', + ], [ diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts -index 24462a3..ecb43fd 100644 +index fac7946..a653269 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts -@@ -94,3 +94,3 @@ function fromLocal(extensionPath: string, forWeb: boolean, disableMangle: boolea +@@ -125,3 +125,3 @@ export function typeCheckExtensionStream(extensionPath: string, forWeb: boolean) function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, disableMangle: boolean): Stream { - const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce'); + const vsce = require('@vscodium/vsce') as typeof import('@vscodium/vsce'); const webpack = require('webpack'); -@@ -208,3 +208,3 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, +@@ -252,3 +252,3 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, function fromLocalNormal(extensionPath: string): Stream { - const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce'); ++ const vsce = require('@vscodium/vsce') as typeof import('@vscodium/vsce'); + const result = es.through(); +@@ -274,3 +274,3 @@ function fromLocalNormal(extensionPath: string): Stream { + function fromLocalEsbuild(extensionPath: string, esbuildConfigFileName: string): Stream { +- const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce'); + const vsce = require('@vscodium/vsce') as typeof import('@vscodium/vsce'); const result = es.through(); diff --git a/build/package-lock.json b/build/package-lock.json -index fe9be0c..9747dca 100644 +index 92ebc36..a610d36 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -51,3 +51,3 @@ @@ -21,7 +52,7 @@ index fe9be0c..9747dca 100644 - "@vscode/vsce": "3.6.1", + "@vscodium/vsce": "3.6.1-258428", "ansi-colors": "^3.2.3", -@@ -1944,6 +1944,6 @@ +@@ -2646,6 +2646,6 @@ }, - "node_modules/@vscode/vsce": { - "version": "3.6.1", @@ -32,11 +63,11 @@ index fe9be0c..9747dca 100644 + "resolved": "https://registry.npmjs.org/@vscodium/vsce/-/vsce-3.6.1-258428.tgz", + "integrity": "sha512-B2uys5YU5MGNmzQPHsMsRXxzlQvZanhxE8Sfkd4Sr/LBN9BaV5yhMCppV7jyLUOQajj9K3YZThLqUYm4CCBy3A==", "dev": true, -@@ -1956,3 +1956,2 @@ +@@ -2658,3 +2658,2 @@ "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", - "@vscode/vsce-sign": "^2.0.0", "azure-devops-node-api": "^12.5.0", -@@ -1991,148 +1990,3 @@ +@@ -2693,148 +2692,3 @@ }, - "node_modules/@vscode/vsce-sign": { - "version": "2.0.7", @@ -186,42 +217,42 @@ index fe9be0c..9747dca 100644 - "node_modules/@vscode/vsce/node_modules/ansi-styles": { + "node_modules/@vscodium/vsce/node_modules/ansi-styles": { "version": "4.3.0", -@@ -2152,3 +2006,3 @@ +@@ -2854,3 +2708,3 @@ }, - "node_modules/@vscode/vsce/node_modules/chalk": { + "node_modules/@vscodium/vsce/node_modules/chalk": { "version": "4.1.2", -@@ -2169,3 +2023,3 @@ +@@ -2871,3 +2725,3 @@ }, - "node_modules/@vscode/vsce/node_modules/color-convert": { + "node_modules/@vscodium/vsce/node_modules/color-convert": { "version": "2.0.1", -@@ -2182,3 +2036,3 @@ +@@ -2884,3 +2738,3 @@ }, - "node_modules/@vscode/vsce/node_modules/color-name": { + "node_modules/@vscodium/vsce/node_modules/color-name": { "version": "1.1.4", -@@ -2189,3 +2043,3 @@ +@@ -2891,3 +2745,3 @@ }, - "node_modules/@vscode/vsce/node_modules/glob": { + "node_modules/@vscodium/vsce/node_modules/glob": { "version": "11.1.0", -@@ -2213,3 +2067,3 @@ +@@ -2915,3 +2769,3 @@ }, - "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": { + "node_modules/@vscodium/vsce/node_modules/glob/node_modules/minimatch": { "version": "10.1.1", -@@ -2229,3 +2083,3 @@ +@@ -2931,3 +2785,3 @@ }, - "node_modules/@vscode/vsce/node_modules/has-flag": { + "node_modules/@vscodium/vsce/node_modules/has-flag": { "version": "4.0.0", -@@ -2239,3 +2093,3 @@ +@@ -2941,3 +2795,3 @@ }, - "node_modules/@vscode/vsce/node_modules/jsonc-parser": { + "node_modules/@vscodium/vsce/node_modules/jsonc-parser": { "version": "3.3.1", -@@ -2243,9 +2097,11 @@ +@@ -2945,9 +2799,11 @@ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true + "dev": true, @@ -238,12 +269,12 @@ index fe9be0c..9747dca 100644 "dev": true, + "license": "ISC", "bin": { -@@ -2257,3 +2113,3 @@ +@@ -2959,3 +2815,3 @@ }, - "node_modules/@vscode/vsce/node_modules/supports-color": { + "node_modules/@vscodium/vsce/node_modules/supports-color": { "version": "7.2.0", -@@ -2270,12 +2126,2 @@ +@@ -2972,12 +2828,2 @@ }, - "node_modules/@vscode/vsce/node_modules/yazl": { - "version": "2.5.1", @@ -256,7 +287,7 @@ index fe9be0c..9747dca 100644 - } - }, "node_modules/@xmldom/xmldom": { -@@ -6955,2 +6801,12 @@ +@@ -10046,2 +9892,12 @@ }, + "node_modules/yazl": { + "version": "2.5.1", @@ -270,7 +301,7 @@ index fe9be0c..9747dca 100644 + }, "node_modules/yocto-queue": { diff --git a/build/package.json b/build/package.json -index 39db6b7..55beb4a 100644 +index e889b6a..6ebd757 100644 --- a/build/package.json +++ b/build/package.json @@ -45,3 +45,3 @@ @@ -278,3 +309,12 @@ index 39db6b7..55beb4a 100644 - "@vscode/vsce": "3.6.1", + "@vscodium/vsce": "3.6.1-258428", "ansi-colors": "^3.2.3", +diff --git a/src/vs/platform/extensionManagement/node/extensionSignatureVerificationService.ts b/src/vs/platform/extensionManagement/node/extensionSignatureVerificationService.ts +index 98535c5..cc37d7b 100644 +--- a/src/vs/platform/extensionManagement/node/extensionSignatureVerificationService.ts ++++ b/src/vs/platform/extensionManagement/node/extensionSignatureVerificationService.ts +@@ -69,3 +69,3 @@ export class ExtensionSignatureVerificationService implements IExtensionSignatur + private async resolveVsceSign(): Promise { +- const mod = '@vscode/vsce-sign'; ++ const mod = '@vscodium/vsce-sign'; + return import(mod); diff --git a/patches/fix-keymap.patch b/patches/fix-keymap.patch index 59728e8..c91d63c 100644 --- a/patches/fix-keymap.patch +++ b/patches/fix-keymap.patch @@ -1,8 +1,8 @@ diff --git a/.npmrc b/.npmrc -index 50d910c..472b622 100644 +index e2305b4..b7863f9 100644 --- a/.npmrc +++ b/.npmrc -@@ -5,2 +5,3 @@ runtime="electron" +@@ -6,2 +6,3 @@ ignore-scripts=false build_from_source="true" +build_from_source_native_keymap="no" legacy-peer-deps="true" @@ -24,22 +24,22 @@ index ed36151..5b040cc 100644 +!@vscodium/native-keymap/build/Release/*.node diff --git a/eslint.config.js b/eslint.config.js -index 47eeebf..f8077c2 100644 +index c2b3e29..2a8250b 100644 --- a/eslint.config.js +++ b/eslint.config.js -@@ -1465,3 +1465,3 @@ export default tseslint.config( +@@ -1451,3 +1451,3 @@ export default tseslint.config( 'node:module', - 'native-keymap', + '@vscodium/native-keymap', 'net', diff --git a/package-lock.json b/package-lock.json -index 801e87b..a991591 100644 +index c44531c..cc77547 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,2 +32,3 @@ "@vscode/windows-registry": "^1.1.0", + "@vscodium/native-keymap": "3.3.7-258424", - "@xterm/addon-clipboard": "^0.3.0-beta.109", + "@xterm/addon-clipboard": "^0.3.0-beta.152", @@ -49,3 +50,2 @@ "native-is-elevated": "0.9.0", - "native-keymap": "^3.3.5", @@ -54,7 +54,7 @@ index 801e87b..a991591 100644 + "license": "MIT" + }, "node_modules/@webassemblyjs/ast": { -@@ -12741,5 +12748,6 @@ +@@ -12731,5 +12738,6 @@ "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -64,7 +64,7 @@ index 801e87b..a991591 100644 + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" }, -@@ -12752,9 +12760,2 @@ +@@ -12742,9 +12750,2 @@ }, - "node_modules/native-keymap": { - "version": "3.3.9", @@ -74,7 +74,7 @@ index 801e87b..a991591 100644 - "license": "MIT" - }, "node_modules/natural-compare": { -@@ -14142,5 +14143,6 @@ +@@ -14132,5 +14133,6 @@ "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -84,16 +84,16 @@ index 801e87b..a991591 100644 + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", "dependencies": { -@@ -14151,3 +14153,3 @@ +@@ -14141,3 +14143,3 @@ "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", + "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", diff --git a/package.json b/package.json -index efeaec1..b2a6703 100644 +index c5522f4..dcd9913 100644 --- a/package.json +++ b/package.json -@@ -111,3 +111,3 @@ +@@ -114,3 +114,3 @@ "native-is-elevated": "0.9.0", - "native-keymap": "^3.3.5", + "@vscodium/native-keymap": "3.3.7-258424", diff --git a/patches/fix-policies.patch b/patches/fix-policies.patch index 4a28de9..bd4c6ee 100644 --- a/patches/fix-policies.patch +++ b/patches/fix-policies.patch @@ -22,26 +22,26 @@ index 5b040cc..8d5fd71 100644 +!@vscodium/policy-watcher/build/Release/vscodium-policy-watcher.node diff --git a/eslint.config.js b/eslint.config.js -index f8077c2..182d6ce 100644 +index 2a8250b..1df17ec 100644 --- a/eslint.config.js +++ b/eslint.config.js -@@ -1448,3 +1448,3 @@ export default tseslint.config( +@@ -1434,3 +1434,3 @@ export default tseslint.config( '@vscode/native-watchdog', - '@vscode/policy-watcher', + '@vscodium/policy-watcher', '@vscode/proxy-agent', diff --git a/package-lock.json b/package-lock.json -index a991591..fb05fad 100644 +index cc77547..622093b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,3 +21,2 @@ "@vscode/native-watchdog": "^1.4.6", - "@vscode/policy-watcher": "^1.3.2", - "@vscode/proxy-agent": "^0.37.0", + "@vscode/proxy-agent": "^0.38.0", @@ -33,2 +32,3 @@ "@vscodium/native-keymap": "3.3.7-258424", + "@vscodium/policy-watcher": "^1.3.2-252465", - "@xterm/addon-clipboard": "^0.3.0-beta.109", + "@xterm/addon-clipboard": "^0.3.0-beta.152", @@ -3345,22 +3345,2 @@ }, - "node_modules/@vscode/policy-watcher": { @@ -89,14 +89,14 @@ index a991591..fb05fad 100644 + }, "node_modules/@webassemblyjs/ast": { diff --git a/package.json b/package.json -index b2a6703..3d03e9a 100644 +index dcd9913..8becea3 100644 --- a/package.json +++ b/package.json -@@ -83,3 +83,3 @@ +@@ -86,3 +86,3 @@ "@vscode/native-watchdog": "^1.4.6", - "@vscode/policy-watcher": "^1.3.2", + "@vscodium/policy-watcher": "^1.3.2-252465", - "@vscode/proxy-agent": "^0.37.0", + "@vscode/proxy-agent": "^0.38.0", diff --git a/src/vs/base/test/node/uri.perf.data.txt b/src/vs/base/test/node/uri.perf.data.txt index ee0a24b..881ce36 100644 --- a/src/vs/base/test/node/uri.perf.data.txt @@ -210,7 +210,7 @@ index ca6cea2..32b22fe 100644 + assert.ok(typeof watcher.createWatcher === 'function', testErrorMessage('@vscodium/policy-watcher')); }); diff --git a/src/vs/platform/policy/node/nativePolicyService.ts b/src/vs/platform/policy/node/nativePolicyService.ts -index 5b08cd9..728d7bd 100644 +index feb4ba1..4d9e0c3 100644 --- a/src/vs/platform/policy/node/nativePolicyService.ts +++ b/src/vs/platform/policy/node/nativePolicyService.ts @@ -8,3 +8,3 @@ import { IStringDictionary } from '../../../base/common/collections.js'; diff --git a/patches/helper/settings.patch b/patches/helper/settings.patch index fcee390..3655758 100644 --- a/patches/helper/settings.patch +++ b/patches/helper/settings.patch @@ -1,30 +1,29 @@ diff --git a/.vscode/settings.json b/.vscode/settings.json -index 514edcd..9aa6920 100644 +index 3e903f6..fb3b3a8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json -@@ -26,3 +26,3 @@ - "editor.defaultFormatter": "vscode.typescript-language-features", +@@ -26,6 +26,6 @@ + "[typescript]": { - "editor.formatOnSave": true + // "editor.formatOnSave": true }, -@@ -30,3 +30,3 @@ - "editor.defaultFormatter": "vscode.typescript-language-features", + "[javascript]": { - "editor.formatOnSave": true + // "editor.formatOnSave": true }, -@@ -34,3 +34,3 @@ +@@ -33,3 +33,3 @@ "editor.defaultFormatter": "rust-lang.rust-analyzer", - "editor.formatOnSave": true, + // "editor.formatOnSave": true, }, -@@ -41,4 +41,4 @@ +@@ -39,4 +39,4 @@ // --- Files --- - "files.trimTrailingWhitespace": true, - "files.insertFinalNewline": true, + // "files.trimTrailingWhitespace": true, + // "files.insertFinalNewline": true, "files.exclude": { -@@ -51,5 +51,5 @@ +@@ -49,5 +49,5 @@ "build/**/*.js.map": true, - "build/**/*.js": { - "when": "$(basename).ts" diff --git a/patches/linux/arch-0-support.patch b/patches/linux/arch-0-support.patch index 753a647..10b1bc1 100644 --- a/patches/linux/arch-0-support.patch +++ b/patches/linux/arch-0-support.patch @@ -13,7 +13,7 @@ index f0d5fe6..fdb3707 100755 + SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" node -e 'import { getVSCodeSysroot } from "./build/linux/debian/install-sysroot.ts"; (async () => { await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()' fi diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts -index 2714933..36396dc 100644 +index b935764..012df0b 100644 --- a/build/gulpfile.reh.ts +++ b/build/gulpfile.reh.ts @@ -235,9 +235,23 @@ function nodejs(platform: string, arch: string): NodeJS.ReadWriteStream | undefi @@ -48,10 +48,10 @@ index 2714933..36396dc 100644 + } case 'alpine': diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts -index 358bb3a..2cc6d9a 100644 +index a103f11..ce46a41 100644 --- a/build/gulpfile.vscode.ts +++ b/build/gulpfile.vscode.ts -@@ -372,2 +372,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d +@@ -472,2 +472,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + const electronOverride: { repo?: string; tag?: string } = {}; + if (process.env.VSCODE_ELECTRON_REPOSITORY) { @@ -64,11 +64,11 @@ index 358bb3a..2cc6d9a 100644 + } + let result: NodeJS.ReadWriteStream = all -@@ -376,3 +386,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d +@@ -476,3 +486,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d .pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523 - .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) + .pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) - .pipe(filter(['**', '!LICENSE', '!version'], { dot: true })); + .pipe(filter(['**', '!LICENSE', '!version', ...(platform === 'darwin' ? ['!**/Contents/Applications/**'] : [])], { dot: true })); diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts index 46c257d..78bfb66 100644 --- a/build/linux/debian/dep-lists.ts @@ -79,7 +79,7 @@ index 46c257d..78bfb66 100644 + ], }; diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts -index 2cab657..0d9dc55 100644 +index 0dfc69a..7b6ac8b 100644 --- a/build/linux/debian/install-sysroot.ts +++ b/build/linux/debian/install-sysroot.ts @@ -82,3 +82,5 @@ async function fetchUrl(options: IFetchOptions, retries = 10, retryDelay = 1000) diff --git a/patches/linux/arch-1-ppc64le.patch b/patches/linux/arch-1-ppc64le.patch index dbe7397..f94aa0f 100644 --- a/patches/linux/arch-1-ppc64le.patch +++ b/patches/linux/arch-1-ppc64le.patch @@ -1,5 +1,5 @@ diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh -index 2c98e50..6ff90d4 100755 +index fdb3707..67bc741 100755 --- a/build/azure-pipelines/linux/setup-env.sh +++ b/build/azure-pipelines/linux/setup-env.sh @@ -76,2 +76,14 @@ elif [ "$npm_config_arch" == "arm" ]; then @@ -18,7 +18,7 @@ index 2c98e50..6ff90d4 100755 + export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot -L$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/usr/lib/powerpc64le-linux-gnu -L$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/lib/powerpc64le-linux-gnu" fi diff --git a/build/azure-pipelines/linux/verify-glibc-requirements.sh b/build/azure-pipelines/linux/verify-glibc-requirements.sh -index 3db9047..1418fee 100755 +index 5294177..1e33aeb 100755 --- a/build/azure-pipelines/linux/verify-glibc-requirements.sh +++ b/build/azure-pipelines/linux/verify-glibc-requirements.sh @@ -9,2 +9,4 @@ elif [ "$VSCODE_ARCH" == "armhf" ]; then @@ -27,14 +27,14 @@ index 3db9047..1418fee 100755 + TRIPLE="powerpc64le-linux-gnu" fi diff --git a/build/checksums/vscode-sysroot.txt b/build/checksums/vscode-sysroot.txt -index 5744a5f..3fedbe9 100644 +index 847383e..37186f4 100644 --- a/build/checksums/vscode-sysroot.txt +++ b/build/checksums/vscode-sysroot.txt -@@ -7 +7,2 @@ f82c8dacbb9dd85819e4801909eb4e842ac12c899632aa75b4839383a18c7501 arm-rpi-linux- - 84acc5a15566c98ddf80631731d672e0ce9febcf3f2e969101e0dfd7ef2405e3 x86_64-linux-gnu-glibc-2.28-gcc-8.5.0.tar.gz +@@ -7 +7,2 @@ ac4b6b14b4cec027a22a51bbbb049b3504958a78106c8a8d5cec144206b767d1 x86_64-linux-g + 1ebb6ef1fe2983269fd0855a88f9c9a37f9b515d16524a9146198e4cabdf34f7 x86_64-linux-gnu-glibc-2.28-gcc-8.5.0.tar.gz +fa8176d27be18bb0eeb7f55b0fa22255050b430ef68c29136599f02976eb0b1b powerpc64le-linux-gnu-glibc-2.28.tar.gz diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts -index 6c21dd2..f986b4e 100644 +index 012df0b..a7da071 100644 --- a/build/gulpfile.reh.ts +++ b/build/gulpfile.reh.ts @@ -52,2 +52,3 @@ const BUILD_TARGETS = [ @@ -66,10 +66,10 @@ index c5d2163..da4fc1f 100644 + { arch: 'ppc64le' }, ]; diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts -index d5efbdb..1d7e9d5 100644 +index ce46a41..3389ede 100644 --- a/build/gulpfile.vscode.ts +++ b/build/gulpfile.vscode.ts -@@ -517,2 +517,3 @@ const BUILD_TARGETS = [ +@@ -614,2 +614,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'arm64' }, + { platform: 'linux', arch: 'ppc64le' }, ]; @@ -88,7 +88,7 @@ index 98a9630..6c6bbf5 100644 + break; } diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts -index 34ecdf1..73d451f 100644 +index 78bfb66..5acd3a0 100644 --- a/build/linux/debian/dep-lists.ts +++ b/build/linux/debian/dep-lists.ts @@ -142,2 +142,41 @@ export const referenceGeneratedDepsByArch = { @@ -134,7 +134,7 @@ index 34ecdf1..73d451f 100644 + ], }; diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts -index 0d9dc55..3086928 100644 +index 7b6ac8b..dde47ba 100644 --- a/build/linux/debian/install-sysroot.ts +++ b/build/linux/debian/install-sysroot.ts @@ -158,2 +158,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean = @@ -158,10 +158,10 @@ index e97485e..c56d067 100644 + return ['amd64', 'armhf', 'arm64', 'ppc64el', 'ppc64le'].includes(s); } diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts -index 783923f..fba6ee4 100644 +index 0424c8d..c7e0820 100644 --- a/build/linux/rpm/dep-lists.ts +++ b/build/linux/rpm/dep-lists.ts -@@ -316,2 +316,102 @@ export const referenceGeneratedDepsByArch = { +@@ -318,2 +318,102 @@ export const referenceGeneratedDepsByArch = { 'xdg-utils' + ], + "ppc64le": [ @@ -320,7 +320,7 @@ index 8ea4c0b..94028e3 100644 + ppc64le) LDCONFIG_ARCH="64bit";; esac diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts -index 34eaca0..a754ff3 100644 +index ab11f6b..fd1ec31 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts @@ -48,2 +48,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { @@ -338,10 +338,10 @@ index 34eaca0..a754ff3 100644 + } return TargetPlatform.UNKNOWN; diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts -index 8961b90..b605be0 100644 +index 021ad01..60cd058 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts -@@ -331,2 +331,3 @@ export const enum TargetPlatform { +@@ -342,2 +342,3 @@ export const enum TargetPlatform { LINUX_ARMHF = 'linux-armhf', + LINUX_PPC64LE = 'linux-ppc64le', diff --git a/patches/version-1-update.patch b/patches/version-1-update.patch index f7fcf56..98a1914 100644 --- a/patches/version-1-update.patch +++ b/patches/version-1-update.patch @@ -1,5 +1,5 @@ diff --git a/src/vs/platform/update/common/update.ts b/src/vs/platform/update/common/update.ts -index b859dfd..75e8987 100644 +index 8e3db7c..1a3226c 100644 --- a/src/vs/platform/update/common/update.ts +++ b/src/vs/platform/update/common/update.ts @@ -54,3 +54,4 @@ export const enum UpdateType { @@ -49,15 +49,15 @@ index b859dfd..75e8987 100644 + | "user"; \ No newline at end of file diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index 0e63d40..c8426ea 100644 +index 05c4489..59d0bd7 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts -@@ -14,3 +14,3 @@ import { IProductService } from '../../product/common/productService.js'; +@@ -17,3 +17,3 @@ import { IProductService } from '../../product/common/productService.js'; import { IRequestService } from '../../request/common/request.js'; -import { AvailableForDownload, DisablementReason, IUpdateService, State, StateType, UpdateType } from '../common/update.js'; +import { Architecture, AvailableForDownload, DisablementReason, IUpdateService, Platform, State, StateType, Target, UpdateType } from '../common/update.js'; -@@ -20,10 +20,8 @@ export interface IUpdateURLOptions { +@@ -23,10 +23,8 @@ export interface IUpdateURLOptions { -export function createUpdateURL(baseUpdateUrl: string, platform: string, quality: string, commit: string, options?: IUpdateURLOptions): string { - const url = new URL(`${baseUpdateUrl}/api/update/${platform}/${quality}/${commit}`); @@ -73,43 +73,41 @@ index 0e63d40..c8426ea 100644 - - return url.toString(); } -@@ -265,3 +263,3 @@ export abstract class AbstractUpdateService implements IUpdateService { +@@ -299,3 +297,3 @@ export abstract class AbstractUpdateService implements IUpdateService { - if (mode === 'none') { + if (mode === 'none' || mode === 'manual') { return undefined; diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts -index b20673b..af677f6 100644 +index e65a982..950291b 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts -@@ -15,3 +15,3 @@ import { ILogService } from '../../log/common/log.js'; - import { IProductService } from '../../product/common/productService.js'; --import { IRequestService } from '../../request/common/request.js'; -+import { IRequestService, asJson } from '../../request/common/request.js'; - import { ITelemetryService } from '../../telemetry/common/telemetry.js'; -@@ -19,2 +19,4 @@ import { IUpdate, State, StateType, UpdateType } from '../common/update.js'; - import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; -+import { CancellationToken } from '../../../base/common/cancellation.js'; +@@ -21,2 +21,3 @@ import { IMeteredConnectionService } from '../../meteredConnection/common/metere + import { AbstractUpdateService, createUpdateURL, getUpdateRequestHeaders, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; +import * as semver from 'semver'; -@@ -75,13 +77,4 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau +@@ -90,16 +91,5 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau - protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string | undefined { - const assetID = this.productService.darwinUniversalAssetId ?? (process.arch === 'x64' ? 'darwin' : 'darwin-arm64'); - const url = createUpdateURL(this.productService.updateUrl!, assetID, quality, commit, options); +- const headers = getUpdateRequestHeaders(this.productService.version); - try { -- electron.autoUpdater.setFeedURL({ url }); +- this.logService.trace('update#buildUpdateFeedUrl - setting feed URL for Electron autoUpdater', { url, assetID, quality, commit, headers }); +- electron.autoUpdater.setFeedURL({ url, headers }); - } catch (e) { - // application is very likely not signed - this.logService.error('Failed to set update feed URL', e); - return undefined; - } - return url; +- } + protected buildUpdateFeedUrl(quality: string, _commit: string, _options?: IUpdateURLOptions): string | undefined { + return createUpdateURL(this.productService, quality, process.platform, process.arch); - } -@@ -112,3 +105,30 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau ++ } +@@ -137,3 +127,30 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau + this.logService.trace('update#doCheckForUpdates - using Electron autoUpdater', { url, explicit, background }); - electron.autoUpdater.checkForUpdates(); + this.requestService.request({ url }, CancellationToken.None) + .then(asJson) @@ -141,21 +139,21 @@ index b20673b..af677f6 100644 + }); } diff --git a/src/vs/platform/update/electron-main/updateService.linux.ts b/src/vs/platform/update/electron-main/updateService.linux.ts -index 32040dc..59cf109 100644 +index ee4b291..01d0d9d 100644 --- a/src/vs/platform/update/electron-main/updateService.linux.ts +++ b/src/vs/platform/update/electron-main/updateService.linux.ts -@@ -15,2 +15,3 @@ import { AvailableForDownload, IUpdate, State, UpdateType } from '../common/upda +@@ -16,2 +16,3 @@ import { AvailableForDownload, IUpdate, State, UpdateType } from '../common/upda import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions } from './abstractUpdateService.js'; +import * as semver from 'semver'; -@@ -30,4 +31,4 @@ export class LinuxUpdateService extends AbstractUpdateService { +@@ -32,4 +33,4 @@ export class LinuxUpdateService extends AbstractUpdateService { - protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string { - return createUpdateURL(this.productService.updateUrl!, `linux-${process.arch}`, quality, commit, options); + protected buildUpdateFeedUrl(quality: string, _commit: string, _options?: IUpdateURLOptions): string { + return createUpdateURL(this.productService, quality, process.platform, process.arch); } -@@ -48,5 +49,17 @@ export class LinuxUpdateService extends AbstractUpdateService { +@@ -50,5 +51,17 @@ export class LinuxUpdateService extends AbstractUpdateService { this.setState(State.Idle(UpdateType.Archive)); - } else { + @@ -175,14 +173,14 @@ index 32040dc..59cf109 100644 + return Promise.resolve(null); }) diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts -index 3edbd9d..6666876 100644 +index da4c875..fa634dc 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts -@@ -13,3 +13,2 @@ import { CancellationToken } from '../../../base/common/cancellation.js'; +@@ -14,3 +14,2 @@ import { CancellationToken, CancellationTokenSource } from '../../../base/common import { memoize } from '../../../base/common/decorators.js'; -import { hash } from '../../../base/common/hash.js'; import * as path from '../../../base/common/path.js'; -@@ -27,4 +26,5 @@ import { asJson, IRequestService } from '../../request/common/request.js'; +@@ -31,4 +30,5 @@ import { asJson, IRequestService } from '../../request/common/request.js'; import { ITelemetryService } from '../../telemetry/common/telemetry.js'; -import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, UpdateType } from '../common/update.js'; -import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; @@ -190,7 +188,7 @@ index 3edbd9d..6666876 100644 +import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions } from './abstractUpdateService.js'; +import * as semver from 'semver'; -@@ -44,5 +44,9 @@ function getUpdateType(): UpdateType { +@@ -46,5 +46,9 @@ function getUpdateType(): UpdateType { if (typeof _updateType === 'undefined') { - _updateType = existsSync(path.join(path.dirname(process.execPath), 'unins000.exe')) - ? UpdateType.Setup @@ -203,11 +201,16 @@ index 3edbd9d..6666876 100644 + _updateType = UpdateType.Archive; + } } -@@ -65,2 +69,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -68,2 +72,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun @IConfigurationService configurationService: IConfigurationService, + // @ts-expect-error @ITelemetryService private readonly telemetryService: ITelemetryService, -@@ -154,12 +159,22 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -140,3 +145,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + } else { +- const fastUpdatesEnabled = this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); ++ const fastUpdatesEnabled = getUpdateType() === UpdateType.Setup && this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); + // GC for background updates in system setup happens via inno_setup since it requires +@@ -158,12 +163,22 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string | undefined { - let platform = `win32-${process.arch}`; @@ -239,7 +242,7 @@ index 3edbd9d..6666876 100644 - return createUpdateURL(this.productService.updateUrl!, platform, quality, commit, options); + return createUpdateURL(this.productService, quality, process.platform, process.arch, target); } -@@ -185,2 +200,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -200,2 +215,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + const fetchedVersion = /\d+\.\d+\.\d+\.\d+/.test(update.productVersion) ? update.productVersion.replace(/(\d+\.\d+\.\d+)\.\d+(\-\w+)?/, '$1$2') : update.productVersion.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') + const currentVersion = this.productService.version.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') @@ -250,16 +253,11 @@ index 3edbd9d..6666876 100644 + } + if (updateType === UpdateType.Archive) { -@@ -211,3 +234,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - -- const fastUpdatesEnabled = this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); -+ const fastUpdatesEnabled = getUpdateType() == UpdateType.Setup && this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); - if (fastUpdatesEnabled) { -@@ -223,3 +246,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -271,3 +294,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun .then(undefined, err => { - this.telemetryService.publicLog2<{ messageHash: string }, UpdateErrorClassification>('update:error', { messageHash: String(hash(String(err))) }); this.logService.error(err); -@@ -309,6 +331,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -494,6 +516,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun } else { - spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], { - detached: true, diff --git a/product.json b/product.json index 7acf85c..1b906f8 100644 --- a/product.json +++ b/product.json @@ -384,6 +384,10 @@ "ms-dotnettools.vscodeintellicode-csharp": [ "inlineCompletionsAdditions" ], + "ms-dotnettools.vscode-dotnet-modernize": [ + "chatParticipantAdditions", + "chatPromptFiles" + ], "microsoft-IsvExpTools.powerplatform-vscode": [ "fileSearchProvider", "textSearchProvider" @@ -424,6 +428,10 @@ "languageModelProxy", "chatSessionsProvider" ], + "TypeScriptTeam.native-preview": [ + "editorHoverVerbosityLevel", + "multiDocumentHighlightProvider" + ], "jeanp413.open-remote-ssh": [ "resolvers", "tunnels", diff --git a/upstream/insider.json b/upstream/insider.json index a743d2c..b533d50 100644 --- a/upstream/insider.json +++ b/upstream/insider.json @@ -1,4 +1,4 @@ { - "tag": "1.109.2", - "commit": "591199df409fbf59b4b52d5ad4ee0470152a9b31" + "tag": "1.110.0", + "commit": "547a36e89fec78f3c1a33302cdd7d8d8143cb09e" } From 15cc1eadd284d164a3e53425bca82d66316e9862 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Tue, 17 Feb 2026 17:21:19 +0100 Subject: [PATCH 07/22] wip: fixing explorer panel --- patches/feat-sidebar-font-size.patch | 279 ++++++++++++++++++++++++--- 1 file changed, 252 insertions(+), 27 deletions(-) diff --git a/patches/feat-sidebar-font-size.patch b/patches/feat-sidebar-font-size.patch index cbccb67..649c5dc 100644 --- a/patches/feat-sidebar-font-size.patch +++ b/patches/feat-sidebar-font-size.patch @@ -1,19 +1,43 @@ +diff --git a/src/vs/base/browser/ui/splitview/paneview.ts b/src/vs/base/browser/ui/splitview/paneview.ts +index fb2e1f4..268d2cb 100644 +--- a/src/vs/base/browser/ui/splitview/paneview.ts ++++ b/src/vs/base/browser/ui/splitview/paneview.ts +@@ -21,2 +21,3 @@ import { IView, Sizing, SplitView } from './splitview.js'; + import { applyDragImage } from '../dnd/dnd.js'; ++import { SidebarPart } from '../../../../workbench/browser/parts/sidebar/sidebarPart.js'; + +@@ -50,3 +51,3 @@ export abstract class Pane extends Disposable implements IView { + +- private static readonly HEADER_SIZE = 22; ++ static readonly COEFFICIENT = 22 / 13; + +@@ -121,3 +122,3 @@ export abstract class Pane extends Disposable implements IView { + private get headerSize(): number { +- return this.headerVisible ? Pane.HEADER_SIZE : 0; ++ return this.headerVisible ? SidebarPart.getFontSize() * Pane.COEFFICIENT : 0; + } +@@ -300,3 +301,3 @@ export abstract class Pane extends Disposable implements IView { + layout(size: number): void { +- const headerSize = this.headerVisible ? Pane.HEADER_SIZE : 0; ++ const headerSize = this.headerSize; + diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +index d32082b..c786715 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts -@@ -131,2 +131,5 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { +@@ -147,2 +147,5 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { } + if (e.affectsConfiguration('workbench.secondarySideBar.fontSize')) { + this.applyAuxiliaryBarFontSize(); + } })); -@@ -173,2 +176,4 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { +@@ -198,2 +201,4 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { container.style.borderRightWidth = borderColor && isPositionLeft ? '1px' : '0px'; + + this.applyAuxiliaryBarFontSize(container); } -@@ -234,2 +239,16 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { - +@@ -262,2 +267,16 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { + + private applyAuxiliaryBarFontSize(container?: HTMLElement): void { + const target = container ?? this.getContainer(); + if (!target) { @@ -30,75 +54,276 @@ diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/s + protected shouldShowCompositeBar(): boolean { diff --git a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +index aec3de2..e582843 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +++ b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css -@@ -26,2 +26,6 @@ - } -+ +@@ -28,2 +28,6 @@ + +.monaco-workbench .part.auxiliarybar > .content { + font-size: var(--vscode-workbench-secondary-sidebar-font-size, 13px); +} - ++ + .monaco-workbench .part.auxiliarybar > .title > .title-label { diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +index decb51a..70394be 100644 --- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +++ b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css -@@ -20,2 +20,6 @@ +@@ -15,3 +15,3 @@ + .monaco-workbench .part.sidebar .title-actions .action-item { +- margin-right: 4px; ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.308); + } +@@ -22,4 +22,10 @@ + ++.monaco-workbench .part.sidebar > .content { ++ font-size: var(--vscode-workbench-sidebar-font-size); ++ line-height: 1.4em; ++} ++ + .monaco-workbench .part.sidebar > .title > .title-label h2 { + text-transform: uppercase; ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); + } +@@ -43,4 +49,4 @@ + .monaco-workbench .viewlet .collapsible.header .actions .action-label { +- width: 28px; +- background-size: 16px; ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 2.154); ++ background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); + background-position: center center; +@@ -48,3 +54,3 @@ + margin-right: 0; +- height: 22px; ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); + } +@@ -60,6 +66,6 @@ + .monaco-workbench .viewlet .collapsible.header .action-label { +- margin-right: 0.2em; ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.2); + background-repeat: no-repeat; +- width: 16px; +- height: 16px; ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); + } +@@ -86,3 +92,3 @@ + position: absolute; +- left: 5px; /* place icon in center */ ++ left: calc(var(--vscode-workbench-sidebar-font-size) * 0.385); /* place icon in center */ + } +@@ -124,3 +130,55 @@ + .monaco-workbench .sidebar.pane-composite-part > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item { +- max-width: 150px; ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 11.538); ++} ++ ++.monaco-workbench .part.sidebar .pane > .pane-header h3.title { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); ++} ++ ++.monaco-workbench .part.sidebar .monaco-text-button { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923); ++} ++ ++.monaco-workbench .part.sidebar .monaco-icon-label::before { ++ background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.462); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); ++} ++ ++.monaco-workbench .part.sidebar .open-editors .open-editor, ++.monaco-workbench .part.sidebar .open-editors .editor-group { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); ++} ++ ++.monaco-workbench .part.sidebar > .title, ++.monaco-workbench .part.sidebar > .header-or-footer { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 2.692); } + -+.monaco-workbench .part.sidebar > .content { -+ font-size: var(--vscode-workbench-sidebar-font-size, 13px); ++.monaco-workbench .part.sidebar > .title > .title-label { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 2.692); +} - ++ ++.monaco-workbench .part.sidebar .pane > .pane-header { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); ++} ++ ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item .codicon { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); ++} ++.monaco-workbench .part.sidebar .codicon[class*='codicon-'] { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); ++} ++ ++.monaco-workbench .part.sidebar .pane > .pane-header > .actions { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.616); ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .actions .action-item { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.308); ++} ++ ++} +\ No newline at end of file diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +index 101b9c6..95cb622 100644 --- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts -@@ -111,2 +111,5 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -37,2 +37,4 @@ import { Extensions } from '../../panecomposite.js'; + ++let fontSize = 13; ++ + export class SidebarPart extends AbstractPaneCompositePart { +@@ -40,2 +42,3 @@ export class SidebarPart extends AbstractPaneCompositePart { + static readonly activeViewletSettingsKey = 'workbench.sidebar.activeviewletid'; ++ static readonly fontSizeSettingsKey = 'workbench.sideBar.experimental.fontSize'; + +@@ -126,2 +129,5 @@ export class SidebarPart extends AbstractPaneCompositePart { } -+ if (e.affectsConfiguration('workbench.sideBar.fontSize')) { ++ if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { + this.applySidebarFontSize(); + } })); -@@ -150,2 +153,4 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -131,2 +137,6 @@ export class SidebarPart extends AbstractPaneCompositePart { + ++ public static getFontSize() { ++ return fontSize; ++ } ++ + private onDidChangeAutoHideViewContainers(e: { before: number; after: number }): void { +@@ -178,2 +188,4 @@ export class SidebarPart extends AbstractPaneCompositePart { container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? ''; + + this.applySidebarFontSize(container); } -@@ -275,2 +280,16 @@ export class SidebarPart extends AbstractPaneCompositePart { - +@@ -320,2 +332,18 @@ export class SidebarPart extends AbstractPaneCompositePart { + + private applySidebarFontSize(container?: HTMLElement): void { + const target = container ?? this.getContainer(); + if (!target) { + return; + } + -+ const configuredSize = this.configurationService.getValue('workbench.sideBar.fontSize'); ++ fontSize = 13 ++ ++ const configuredSize = this.configurationService.getValue(SidebarPart.fontSizeSettingsKey); + if (typeof configuredSize === 'number' && configuredSize > 0) { -+ target.style.setProperty('--vscode-workbench-sidebar-font-size', `${configuredSize}px`); -+ } else { -+ target.style.removeProperty('--vscode-workbench-sidebar-font-size'); ++ fontSize = Math.trunc(configuredSize) + } ++ ++ target.style.setProperty('--vscode-workbench-sidebar-font-size', `${fontSize}px`); + } + private registerActions(): void { diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts +index b1c5637..ce89429 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -533,2 +533,18 @@ const registry = Registry.as(ConfigurationExtensions.Con +@@ -561,2 +561,10 @@ const registry = Registry.as(ConfigurationExtensions.Con }, -+ 'workbench.sideBar.fontSize': { ++ 'workbench.sideBar.experimental.fontSize': { + 'type': 'number', + 'default': 13, + 'minimum': 6, + 'maximum': 32, + 'markdownDescription': localize('sideBarFontSize', "Controls the font size used for content inside the primary side bar."), -+ 'tags': ['accessibility'] ++ 'tags': ['accessibility', 'experimental'] + }, -+ 'workbench.secondarySideBar.fontSize': { + 'workbench.panel.showLabels': { +@@ -607,2 +615,10 @@ const registry = Registry.as(ConfigurationExtensions.Con + }, ++ 'workbench.secondarySideBar.experimental.fontSize': { + 'type': 'number', + 'default': 13, + 'minimum': 6, + 'maximum': 32, + 'markdownDescription': localize('secondarySideBarFontSize', "Controls the font size used for content inside the secondary side bar."), -+ 'tags': ['accessibility'] ++ 'tags': ['accessibility', 'experimental'] + }, - 'workbench.panel.showLabels': { + 'workbench.statusBar.visible': { +diff --git a/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts b/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts +index c6298b3..3eb7fcb 100644 +--- a/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts ++++ b/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts +@@ -31,2 +31,3 @@ import { IThemeService } from '../../../../../platform/theme/common/themeService + import { fillEditorsDragData } from '../../../../browser/dnd.js'; ++import { SidebarPart } from '../../../../browser/parts/sidebar/sidebarPart.js'; + import { IOutlineComparator, OutlineConfigKeys, OutlineTarget } from '../../../../services/outline/browser/outline.js'; +@@ -159,4 +160,6 @@ export class DocumentSymbolVirtualDelegate implements IListVirtualDelegate { + +- static readonly ITEM_HEIGHT = 22; ++ static readonly COEFFICIENT = 22 / 13; + + getHeight(element: ExplorerItem): number { +- return ExplorerDelegate.ITEM_HEIGHT; ++ return SidebarPart.getFontSize() * ExplorerDelegate.COEFFICIENT; + } +@@ -852,3 +853,3 @@ export class FilesRenderer implements ICompressibleTreeRenderer('workbench.tree.indent'); +- const offset = Math.max(22 - indent, 0); // derived via inspection ++ const offset = Math.max(39 - indent, 0); // derived via inspection + container.style.setProperty(`--vscode-explorer-align-offset-margin-left`, `${offset}px`); +diff --git a/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts b/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts +index 7229c14..1e52c37 100644 +--- a/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts ++++ b/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts +@@ -58,2 +58,3 @@ import { IHoverService } from '../../../../../platform/hover/browser/hover.js'; + import { IFileService } from '../../../../../platform/files/common/files.js'; ++import { SidebarPart } from '../../../../browser/parts/sidebar/sidebarPart.js'; + +@@ -519,3 +520,3 @@ export class OpenEditorsView extends ViewPane { + +- return (Math.max(this.elementCount, minVisibleOpenEditors)) * OpenEditorsDelegate.ITEM_HEIGHT; ++ return (Math.max(this.elementCount, minVisibleOpenEditors)) * OpenEditorsDelegate.COEFFICIENT * SidebarPart.getFontSize(); + } +@@ -533,3 +534,3 @@ export class OpenEditorsView extends ViewPane { + const itemsToShow = Math.min(Math.max(visibleOpenEditors, 1), this.elementCount); +- return itemsToShow * OpenEditorsDelegate.ITEM_HEIGHT; ++ return itemsToShow * OpenEditorsDelegate.COEFFICIENT * SidebarPart.getFontSize(); + } +@@ -581,6 +582,6 @@ class OpenEditorsDelegate implements IListVirtualDelegate { + +- public static ITEM_HEIGHT = 22; ++ static readonly COEFFICIENT = 22 / 13; + + getHeight(element: RenderableMatch): number { +- return SearchDelegate.ITEM_HEIGHT; ++ return SidebarPart.getFontSize() * SearchDelegate.COEFFICIENT; + } From be4746a77581623d6f995c1f245a123b91783ebd Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Tue, 17 Feb 2026 19:25:48 +0100 Subject: [PATCH 08/22] feat: add patch for workbench's font family (#2706) --- patches/feat-workbench-font-family.patch | 117 +++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 patches/feat-workbench-font-family.patch diff --git a/patches/feat-workbench-font-family.patch b/patches/feat-workbench-font-family.patch new file mode 100644 index 0000000..94c4d4f --- /dev/null +++ b/patches/feat-workbench-font-family.patch @@ -0,0 +1,117 @@ +diff --git a/src/vs/workbench/browser/media/style.css b/src/vs/workbench/browser/media/style.css +index 13ff794..c19b125 100644 +--- a/src/vs/workbench/browser/media/style.css ++++ b/src/vs/workbench/browser/media/style.css +@@ -11,20 +11,20 @@ + +-.monaco-workbench.mac { font-family: -apple-system, BlinkMacSystemFont, sans-serif; } +-.monaco-workbench.mac:lang(zh-Hans) { font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; } +-.monaco-workbench.mac:lang(zh-Hant) { font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; } +-.monaco-workbench.mac:lang(ja) { font-family: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; } +-.monaco-workbench.mac:lang(ko) { font-family: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Nanum Gothic", "AppleGothic", sans-serif; } +- +-.monaco-workbench.windows { font-family: "Segoe WPC", "Segoe UI", sans-serif; } +-.monaco-workbench.windows:lang(zh-Hans) { font-family: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; } +-.monaco-workbench.windows:lang(zh-Hant) { font-family: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; } +-.monaco-workbench.windows:lang(ja) { font-family: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; } +-.monaco-workbench.windows:lang(ko) { font-family: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; } ++.monaco-workbench.mac { --monaco-font: -apple-system, BlinkMacSystemFont, sans-serif; } ++.monaco-workbench.mac:lang(zh-Hans) { --monaco-font: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; } ++.monaco-workbench.mac:lang(zh-Hant) { --monaco-font: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; } ++.monaco-workbench.mac:lang(ja) { --monaco-font: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; } ++.monaco-workbench.mac:lang(ko) { --monaco-font: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Nanum Gothic", "AppleGothic", sans-serif; } ++ ++.monaco-workbench.windows { --monaco-font: "Segoe WPC", "Segoe UI", sans-serif; } ++.monaco-workbench.windows:lang(zh-Hans) { --monaco-font: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; } ++.monaco-workbench.windows:lang(zh-Hant) { --monaco-font: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; } ++.monaco-workbench.windows:lang(ja) { --monaco-font: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; } ++.monaco-workbench.windows:lang(ko) { --monaco-font: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; } + + /* Linux: add `system-ui` as first font and not `Ubuntu` to allow other distribution pick their standard OS font */ +-.monaco-workbench.linux { font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif; } +-.monaco-workbench.linux:lang(zh-Hans) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; } +-.monaco-workbench.linux:lang(zh-Hant) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; } +-.monaco-workbench.linux:lang(ja) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; } +-.monaco-workbench.linux:lang(ko) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; } ++.monaco-workbench.linux { --monaco-font: system-ui, "Ubuntu", "Droid Sans", sans-serif; } ++.monaco-workbench.linux:lang(zh-Hans) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; } ++.monaco-workbench.linux:lang(zh-Hant) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; } ++.monaco-workbench.linux:lang(ja) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; } ++.monaco-workbench.linux:lang(ko) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; } + +@@ -55,2 +55,3 @@ body { + color: var(--vscode-foreground); ++ font-family: var(--vscode-workbench-font-family, var(--monaco-font)); + } +diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts +index b1c5637..a09585e 100644 +--- a/src/vs/workbench/browser/workbench.contribution.ts ++++ b/src/vs/workbench/browser/workbench.contribution.ts +@@ -675,2 +675,7 @@ const registry = Registry.as(ConfigurationExtensions.Con + }, ++ 'workbench.experimental.fontFamily': { ++ type: 'string', ++ description: localize('workbench.fontFamily', "Controls the font family in the workbench."), ++ 'tags': ['experimental'] ++ }, + 'workbench.settings.editor': { +diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts +index 10e2c3e..7259aff 100644 +--- a/src/vs/workbench/browser/workbench.ts ++++ b/src/vs/workbench/browser/workbench.ts +@@ -19,3 +19,3 @@ import { Position, Parts, IWorkbenchLayoutService, positionToString } from '../s + import { IStorageService, WillSaveStateReason, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; +-import { IConfigurationChangeEvent, IConfigurationService } from '../../platform/configuration/common/configuration.js'; ++import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; + import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +@@ -233,3 +233,10 @@ export class Workbench extends Layout { + // Configuration changes +- this._register(configurationService.onDidChangeConfiguration(e => this.updateFontAliasing(e, configurationService))); ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.fontAliasing')) { ++ this.updateFontAliasing(configurationService); ++ } ++ else if (e.affectsConfiguration('workbench.experimental.fontFamily')) { ++ this.updateFontFamily(configurationService); ++ } ++ })); + +@@ -270,3 +277,3 @@ export class Workbench extends Layout { + private fontAliasing: 'default' | 'antialiased' | 'none' | 'auto' | undefined; +- private updateFontAliasing(e: IConfigurationChangeEvent | undefined, configurationService: IConfigurationService) { ++ private updateFontAliasing(configurationService: IConfigurationService) { + if (!isMacintosh) { +@@ -275,6 +282,2 @@ export class Workbench extends Layout { + +- if (e && !e.affectsConfiguration('workbench.fontAliasing')) { +- return; +- } +- + const aliasing = configurationService.getValue<'default' | 'antialiased' | 'none' | 'auto'>('workbench.fontAliasing'); +@@ -296,2 +299,19 @@ export class Workbench extends Layout { + ++ private fontFamily: string | undefined; ++ private updateFontFamily(configurationService: IConfigurationService) { ++ let family = configurationService.getValue('workbench.experimental.fontFamily'); ++ ++ if (this.fontFamily === family) { ++ return; ++ } ++ ++ this.fontFamily = family; ++ ++ if (family) { ++ this.mainContainer.style.setProperty('--vscode-workbench-font-family', family); ++ } else { ++ this.mainContainer.style.removeProperty('--vscode-workbench-font-family'); ++ } ++ } ++ + private restoreFontInfo(storageService: IStorageService, configurationService: IConfigurationService): void { +@@ -339,3 +359,5 @@ export class Workbench extends Layout { + // Apply font aliasing +- this.updateFontAliasing(undefined, configurationService); ++ this.updateFontAliasing(configurationService); ++ ++ this.updateFontFamily(configurationService); + From 5ea412eee4fe6df6845d234a7481ca899b138043 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Thu, 19 Feb 2026 17:10:12 +0100 Subject: [PATCH 09/22] feat: use global variable and helper script --- .gitignore | 2 + font-size/.artifactrc.yml | 7 + font-size/.editorconfig | 17 + font-size/.fixpackrc | 29 + font-size/.gitignore | 2 + font-size/.nvmrc | 1 + font-size/.vscode/settings.json | 9 + font-size/.xo-config.json | 153 + font-size/generate-css.ts | 139 + font-size/package-lock.json | 7436 ++++++++++++++++++++++++++ font-size/package.json | 30 + font-size/tsconfig.base.json | 78 + font-size/tsconfig.json | 15 + patches/feat-sidebar-font-size.patch | 1895 ++++++- 14 files changed, 9731 insertions(+), 82 deletions(-) create mode 100644 font-size/.artifactrc.yml create mode 100644 font-size/.editorconfig create mode 100644 font-size/.fixpackrc create mode 100644 font-size/.gitignore create mode 100644 font-size/.nvmrc create mode 100644 font-size/.vscode/settings.json create mode 100644 font-size/.xo-config.json create mode 100755 font-size/generate-css.ts create mode 100644 font-size/package-lock.json create mode 100644 font-size/package.json create mode 100644 font-size/tsconfig.base.json create mode 100644 font-size/tsconfig.json diff --git a/.gitignore b/.gitignore index 9bc350f..7119d29 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ build/windows/msi/Files*.wixobj sourcemaps/ stores/snapcraft/insider/*.snap stores/snapcraft/stable/*.snap +font-size/node_modules/ +font-size/generate-css.js diff --git a/font-size/.artifactrc.yml b/font-size/.artifactrc.yml new file mode 100644 index 0000000..007a8d3 --- /dev/null +++ b/font-size/.artifactrc.yml @@ -0,0 +1,7 @@ +artifacts: + "@daiyam/artifact-lang-js": + version: 0.9.3 + requires: + - "22" + "@daiyam/artifact-lang-ts": + version: 0.6.3 diff --git a/font-size/.editorconfig b/font-size/.editorconfig new file mode 100644 index 0000000..255114e --- /dev/null +++ b/font-size/.editorconfig @@ -0,0 +1,17 @@ +root = true + +[*] +indent_style = tab +tab_width = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[{*.yml,*.yaml}] +indent_style = space +indent_size = 2 + +[*.md] +indent_style = space +indent_size = 4 diff --git a/font-size/.fixpackrc b/font-size/.fixpackrc new file mode 100644 index 0000000..b871313 --- /dev/null +++ b/font-size/.fixpackrc @@ -0,0 +1,29 @@ +{ + "sortToTop": [ + "name", + "displayName", + "description", + "version", + "private", + "author", + "publisher", + "license", + "homepage", + "repository", + "bugs", + "engines", + "type", + "bin", + "exports", + "main", + "module", + "types", + "typesVersions", + "scripts", + "dependencies", + "devDependencies", + "optionalDependencies", + "keywords" + ], + "finalNewLine": true +} diff --git a/font-size/.gitignore b/font-size/.gitignore new file mode 100644 index 0000000..8f028e4 --- /dev/null +++ b/font-size/.gitignore @@ -0,0 +1,2 @@ +/node_modules/ +/lib/ diff --git a/font-size/.nvmrc b/font-size/.nvmrc new file mode 100644 index 0000000..c6a66a6 --- /dev/null +++ b/font-size/.nvmrc @@ -0,0 +1 @@ +v22.21.1 diff --git a/font-size/.vscode/settings.json b/font-size/.vscode/settings.json new file mode 100644 index 0000000..0c56e15 --- /dev/null +++ b/font-size/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "search.exclude": { + "package-lock.json": true, + "lib/**": true, + }, + "taskExplorer.exclude": [ + ".husky", + ], +} diff --git a/font-size/.xo-config.json b/font-size/.xo-config.json new file mode 100644 index 0000000..7c4c8c8 --- /dev/null +++ b/font-size/.xo-config.json @@ -0,0 +1,153 @@ +{ + "ignores": [ + "*.config.js", + "*.config.ts" + ], + "rules": { + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/brace-style": [ + "error", + "stroustrup" + ], + "@typescript-eslint/class-literal-property-style": [ + "error", + "fields" + ], + "@typescript-eslint/keyword-spacing": [ + "error", + { + "overrides": { + "if": { + "after": false + }, + "for": { + "after": false + }, + "switch": { + "after": false + }, + "while": { + "after": false + } + } + } + ], + "@typescript-eslint/member-ordering": [ + "error", + { + "default": [ + "field", + "constructor", + "get", + "set", + "method" + ] + } + ], + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "variable", + "modifiers": ["const", "global"], + "format": ["camelCase", "UPPER_CASE"], + "filter": { + "regex": "^(__filename|__dirname)$", + "match": false + } + }, + { + "selector": "variable", + "format": ["camelCase"], + "filter": { + "regex": "^(__filename|__dirname)$", + "match": false + } + } + ], + "@typescript-eslint/no-confusing-void-expression": "off", + "@typescript-eslint/no-dynamic-delete": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/object-curly-spacing": [ + "error", + "always" + ], + "@typescript-eslint/parameter-properties": "off", + "@typescript-eslint/prefer-promise-reject-errors": "off", + "@typescript-eslint/return-await": "off", + "arrow-parens": [ + "error", + "always" + ], + "capitalized-comments": "off", + "complexity": "off", + "default-case": "off", + "import/extensions": [ + "error", + "never" + ], + "import/order": [ + "error", + { + "groups": [ + "builtin", + "external", + "internal", + "parent", + "sibling", + "index", + "object" + ], + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ], + "max-depth": [ + "error", + 8 + ], + "max-params": [ + "error", + 12 + ], + "no-await-in-loop": "off", + "no-else-return": "off", + "no-lonely-if": "off", + "no-negated-condition": "off", + "object-curly-newline": "off", + "one-var": [ + "error", + "never" + ], + "unicorn/empty-brace-spaces": "off", + "unicorn/no-array-callback-reference": "off", + "unicorn/no-length-as-slice-end": "off", + "unicorn/no-object-as-default-parameter": "off", + "unicorn/prefer-json-parse-buffer": "off", + "unicorn/prefer-module": "off", + "unicorn/prefer-node-protocol": "off", + "unicorn/prefer-switch": "off", + "unicorn/prefer-ternary": "off", + "unicorn/prevent-abbreviations": [ + "error", + { + "replacements": { + "arg": false, + "args": false, + "dir": false, + "err": false, + "fn": false, + "func": false, + "i": false, + "j": false, + "mod": false, + "num": false, + "pkg": false, + "str": false + } + } + ] + } +} diff --git a/font-size/generate-css.ts b/font-size/generate-css.ts new file mode 100755 index 0000000..a7c1be6 --- /dev/null +++ b/font-size/generate-css.ts @@ -0,0 +1,139 @@ +#!/usr/bin/env node + +import process from 'node:process'; +import fse from '@zokugun/fs-extra-plus/async'; +import { err, OK, type Result, stringifyError, xtry } from '@zokugun/xtry'; +import fg from 'fast-glob'; +import postcss, { type Rule } from 'postcss'; + +const PREFIX_MAIN = '.monaco-workbench .part.sidebar'; +const PREFIX_AUX = '.monaco-workbench .part.auxiliarybar'; +const DEFAULT_GLOB = '../vscode/**/*.css'; +const PX_REGEX = /(-?\d+(\.\d+)?)px\b/g; +const COEFF_PRECISION = 6; + +function formatCoefficient(n: number): string { + const fixed = n.toFixed(COEFF_PRECISION); + return fixed.replace(/\.?0+$/, ''); +} + +function replacePx(_match: string, numStr: string): string { + const pxValue = Number.parseFloat(numStr); + const coeff = formatCoefficient(pxValue / 13); + + return `calc(var(--vscode-workbench-sidebar-font-size) * ${coeff})`; +} + +function transformPxValue(value: string): string { + return value.replaceAll(PX_REGEX, replacePx); +} + +async function processFile(filePath: string): Promise> { + const cssResult = await fse.readFile(filePath, 'utf8'); + if(cssResult.fails) { + return err(stringifyError(cssResult.error)); + } + + const postcssResult = xtry(() => postcss.parse(cssResult.value, { from: filePath })); + if(postcssResult.fails) { + return err(`Failed to parse ${filePath}: ${stringifyError(postcssResult.error)}`); + } + + const generatedRoot = postcss.root(); + + postcssResult.value.walkRules((rule: Rule) => { + let hasPx = false; + const declarationsToAdd: Array<{ prop: string; value: string }> = []; + + rule.walkDecls((declaration) => { + if(PX_REGEX.test(declaration.value)) { + const newValue = transformPxValue(declaration.value); + + declarationsToAdd.push({ prop: declaration.prop, value: newValue }); + + hasPx = true; + } + }); + + if(hasPx && declarationsToAdd.length > 0) { + const selectors = (rule.selectors && rule.selectors.length > 0) ? rule.selectors : [rule.selector]; + const mainSelectors = selectors.map((selector) => prefixSelector(selector, PREFIX_MAIN)).join(', '); + const auxSelectors = selectors.map((selector) => prefixSelector(selector, PREFIX_AUX)).join(', '); + const newRule = postcss.rule({ selector: `${mainSelectors}, ${auxSelectors}` }); + + let length = 0; + + for(const declaration of declarationsToAdd) { + if(!declaration.prop.startsWith('border')) { + newRule.append({ ...declaration }); + length += 1; + } + } + + if(length > 0) { + generatedRoot.append(newRule); + } + } + }); + + if(generatedRoot.nodes && generatedRoot.nodes.length > 0) { + const writeResult = await fse.writeFile(filePath, cssResult.value + '\n\n\n' + generatedRoot.toString(), 'utf8'); + if(writeResult.fails) { + return err(stringifyError(cssResult.error)); + } + + console.log(`Generated: ${filePath}`); + } + else { + console.log(`No px sizes found in: ${filePath}`); + } + + return OK; +} + +async function main(): Promise { + const pattern = process.argv[2] || DEFAULT_GLOB; + const entries = await fg(pattern, { dot: true, onlyFiles: true }); + + if(entries.length === 0) { + console.log(`No files matched pattern: ${pattern}`); + return; + } + + for(const file of entries) { + const result = await processFile(file); + if(result.fails) { + console.error(`Error processing ${file}:`, result.error); + } + } +} + +function prefixSelector(selector: string, prefix: string): string { + const parts = selector.split(' '); + if(parts[0].startsWith('.monaco-workbench')) { + if(parts[1] === '.part') { + parts.splice(0, 2); + } + else { + parts.splice(0, 1); + } + + parts.unshift(prefix); + + return parts.join(' '); + } + else if(parts[0] === '.mac' || parts[0] === '.linux' || parts[0] === '.windows') { + const prefixParts = prefix.split(' '); + + parts[0] = `${prefixParts.shift()}${parts[0]}`; + + parts.splice(1, 0, ...prefixParts); + + return parts.join(' '); + } + else { + return `${prefix} ${selector}`; + } +} + +await main(); diff --git a/font-size/package-lock.json b/font-size/package-lock.json new file mode 100644 index 0000000..7f96df2 --- /dev/null +++ b/font-size/package-lock.json @@ -0,0 +1,7436 @@ +{ + "name": "font-size", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "font-size", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@zokugun/fs-extra-plus": "^0.3.3", + "@zokugun/xtry": "^0.10.1", + "fast-glob": "^3.3.3", + "postcss": "^8.5.6" + }, + "devDependencies": { + "@types/node": "^22.9.0", + "fixpack": "^4.0.0", + "xo": "0.60.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", + "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", + "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/@zokugun/fs-extra-plus": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@zokugun/fs-extra-plus/-/fs-extra-plus-0.3.3.tgz", + "integrity": "sha512-GzLdcuSttjzcWL3dkdoxKPm9MZVVOVv5q2tWjCn4KUlIu27FBTx3pyvZMmpJf8u6ZNw0bqafWVYYppBiFqJ23g==", + "license": "MIT", + "dependencies": { + "@zokugun/is-it-type": "^0.5.2", + "@zokugun/xtry": "^0.10.1" + }, + "optionalDependencies": { + "mime-types": "*" + } + }, + "node_modules/@zokugun/is-it-type": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@zokugun/is-it-type/-/is-it-type-0.5.2.tgz", + "integrity": "sha512-Gj6H+nvhwJt4Q5UeIntwRQY4/JTs9ZVaJ/Ac2na3LUdN//dgSyH4gZrXzGqzDu31ZyaEySppvF+frN7L2Rg7Pg==", + "license": "MIT" + }, + "node_modules/@zokugun/xtry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@zokugun/xtry/-/xtry-0.10.1.tgz", + "integrity": "sha512-nB3KpyjpFdK69EFTT9SLcIpec9EFA9ysiOuWS1B8lpnbJtzm4woMxHT22ZEEDKl9ykIhHKfpFQc2emaJMUi5oQ==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/alce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/alce/-/alce-1.2.0.tgz", + "integrity": "sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==", + "dev": true, + "license": "MIT", + "dependencies": { + "esprima": "^1.2.0", + "estraverse": "^1.5.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", + "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhance-visitors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", + "integrity": "sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.13.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.2.0", + "tapable": "^0.1.8" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/env-editor": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-1.3.0.tgz", + "integrity": "sha512-EqiD/j01PooUbeWk+etUo2TWoocjoxMfGNYpS9e47glIJ5r8WepycIki+LCbonFbPdwlqY5ETeSTAJVMih4z4w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-xo": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.45.0.tgz", + "integrity": "sha512-T30F2S2HKKmr/RoHopKE7wMUMWrsLMab1qFl2WyFJjETbD+l7p4hSQWpTVGW7TEbSKG1QBekwf6Jn9ZDPA6thA==", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "1.0.11" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "eslint": ">=8.56.0" + } + }, + "node_modules/eslint-config-xo-typescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-xo-typescript/-/eslint-config-xo-typescript-5.0.0.tgz", + "integrity": "sha512-ukAYCKf3p039pRai7hb6xaomZzsKlCjV5qx3NbYe27UC7Nz75If1HcpQL5sNW2b5aH8+Axb6dIIv28+bVtwlVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">=7.16.0", + "@typescript-eslint/parser": ">=7.16.0", + "eslint": ">=8.56.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/eslint-formatter-pretty": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-6.0.1.tgz", + "integrity": "sha512-znAUcXmBthdIUmlnRkPSxz3zSJHFUhfHF/nJPcCMVKg/mOa4yUie2Olqg1Ghbi5JJRBZVU3rIgzWSObvIspxMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "^8.44.6", + "ansi-escapes": "^6.2.0", + "chalk": "^5.3.0", + "eslint-rule-docs": "^1.1.235", + "log-symbols": "^6.0.0", + "plur": "^5.1.0", + "string-width": "^7.0.0", + "supports-hyperlinks": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-formatter-pretty/node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-formatter-pretty/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-formatter-pretty/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-import-resolver-webpack": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.10.tgz", + "integrity": "sha512-ciVTEg7sA56wRMR772PyjcBRmyBMLS46xgzQZqt6cWBEKc7cK65ZSSLCTLVRu2gGtKyXUb5stwf4xxLBfERLFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "enhanced-resolve": "^0.9.1", + "find-root": "^1.1.0", + "hasown": "^2.0.2", + "interpret": "^1.4.0", + "is-core-module": "^2.15.1", + "is-regex": "^1.2.0", + "lodash": "^4.17.21", + "resolve": "^2.0.0-next.5", + "semver": "^5.7.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint-plugin-import": ">=1.4.0", + "webpack": ">=1.11.0" + } + }, + "node_modules/eslint-import-resolver-webpack/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-webpack/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-ava": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-14.0.0.tgz", + "integrity": "sha512-XmKT6hppaipwwnLVwwvQliSU6AF1QMHiNoLD5JQfzhUhf0jY7CO0O624fQrE+Y/fTb9vbW8r77nKf7M/oHulxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "enhance-visitors": "^1.0.0", + "eslint-utils": "^3.0.0", + "espree": "^9.0.0", + "espurify": "^2.1.1", + "import-modules": "^2.1.0", + "micro-spelling-correcter": "^1.1.1", + "pkg-dir": "^5.0.0", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=14.17 <15 || >=16.4" + }, + "peerDependencies": { + "eslint": ">=8.26.0" + } + }, + "node_modules/eslint-plugin-ava/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "engines": { + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-n": { + "version": "17.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz", + "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3", + "ts-declaration-location": "^1.0.6" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.23.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-n/node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-plugin-no-use-extend-native": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.5.0.tgz", + "integrity": "sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-get-set-prop": "^1.0.0", + "is-js-type": "^2.0.0", + "is-obj-prop": "^1.0.0", + "is-proto-prop": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-unicorn": { + "version": "56.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz", + "integrity": "sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^4.0.0", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.38.1", + "esquery": "^1.6.0", + "globals": "^15.9.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.6.3", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=18.18" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.56.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-rule-docs": { + "version": "1.1.235", + "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", + "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm-utils": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/esm-utils/-/esm-utils-4.4.2.tgz", + "integrity": "sha512-oG7oQZRniJEUSRYzdeWHOAe3n6mW5lNouDFm2b7pfPounjyuSaJSTVybDuiMnBizALdOBfM1r0QKlDh4psOY9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-meta-resolve": "^4.1.0", + "url-or-path": "^2.6.1" + }, + "funding": { + "url": "https://github.com/fisker/esm-utils?sponsor=1" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", + "integrity": "sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espurify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", + "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extend-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz", + "integrity": "sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-5.0.0.tgz", + "integrity": "sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true, + "license": "MIT" + }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fixpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fixpack/-/fixpack-4.0.0.tgz", + "integrity": "sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "alce": "1.2.0", + "chalk": "^3.0.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "extend-object": "^1.0.0", + "rc": "^1.2.8" + }, + "bin": { + "fixpack": "bin/fixpack" + } + }, + "node_modules/fixpack/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fixpack/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-set-props": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", + "integrity": "sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globby/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/import-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/irregular-plurals": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", + "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-get-set-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", + "integrity": "sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-set-props": "^0.1.0", + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-js-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", + "integrity": "sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-types": "^1.0.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", + "integrity": "sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0", + "obj-props": "^1.0.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-proto-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", + "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0", + "proto-props": "^2.0.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", + "integrity": "sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/line-column-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/line-column-path/-/line-column-path-3.0.0.tgz", + "integrity": "sha512-Atocnm7Wr9nuvAn97yEPQa3pcQI5eLQGBz+m6iTb+CVw+IOzYB9MrYK7jI7BfC9ISnT4Fu0eiwhAScV//rp4Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-spelling-correcter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", + "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/obj-props": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.4.0.tgz", + "integrity": "sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open-editor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/open-editor/-/open-editor-5.1.0.tgz", + "integrity": "sha512-KkNqM6FdoegD6WhY2YXmWcovOux45NV+zBped2+G3+V74zkDPkIl4cqh6hte2zNDojtwO2nBOV8U+sgziWfPrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-editor": "^1.1.0", + "execa": "^9.3.0", + "line-column-path": "^3.0.0", + "open": "^10.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/plur": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", + "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "irregular-plurals": "^3.3.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proto-props": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", + "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-absolute-glob": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-3.0.0.tgz", + "integrity": "sha512-loO/XEWTRqpfcpI7+Jr2RR2Umaaozx1t6OSVWtMi0oy5F/Fxg3IC+D/TToDnxyAGs7uZBGT/6XmyDUxgsObJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-declaration-location": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz", + "integrity": "sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==", + "dev": true, + "funding": [ + { + "type": "ko-fi", + "url": "https://ko-fi.com/rebeccastevens" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/ts-declaration-location" + } + ], + "license": "BSD-3-Clause", + "dependencies": { + "picomatch": "^4.0.2" + }, + "peerDependencies": { + "typescript": ">=4.0.0" + } + }, + "node_modules/ts-declaration-location/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-or-path": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/url-or-path/-/url-or-path-2.6.1.tgz", + "integrity": "sha512-fgFGHE43YhtMpv/1ZAdwKE9q2lFfEa9NfJ4yriBtjXbb1GAZxuVQVhsHXhHQjHd6W5A4FcMWQ25gxWmxVglDTw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/fisker/url-or-path?sponsor=1" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.105.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", + "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xo": { + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/xo/-/xo-0.60.0.tgz", + "integrity": "sha512-Il6Ap/bkYQm2CvocfiNY8yR52OospMdlxwbT2V/8KBRRCc+JKI1ARyFJpemuze9ZHBy/AAaDurjqWNj0C2DCYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^7.16.1", + "@typescript-eslint/parser": "^7.16.1", + "arrify": "^3.0.0", + "cosmiconfig": "^9.0.0", + "define-lazy-prop": "^3.0.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-config-xo": "^0.45.0", + "eslint-config-xo-typescript": "^5.0.0", + "eslint-formatter-pretty": "^6.0.1", + "eslint-import-resolver-webpack": "^0.13.9", + "eslint-plugin-ava": "^14.0.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-n": "^17.14.0", + "eslint-plugin-no-use-extend-native": "^0.5.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-promise": "^6.4.0", + "eslint-plugin-unicorn": "^56.0.1", + "esm-utils": "^4.3.0", + "find-cache-dir": "^5.0.0", + "find-up-simple": "^1.0.0", + "get-stdin": "^9.0.0", + "get-tsconfig": "^4.8.1", + "globby": "^14.0.2", + "imurmurhash": "^0.1.4", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash-es": "^4.17.21", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "open-editor": "^5.0.0", + "prettier": "^3.4.2", + "semver": "^7.6.3", + "slash": "^5.1.0", + "to-absolute-glob": "^3.0.0", + "typescript": "^5.7.2" + }, + "bin": { + "xo": "cli.js" + }, + "engines": { + "node": ">=18.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xo/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/font-size/package.json b/font-size/package.json new file mode 100644 index 0000000..2f3a8e6 --- /dev/null +++ b/font-size/package.json @@ -0,0 +1,30 @@ +{ + "name": "font-size", + "description": "", + "version": "1.0.0", + "author": { + "name": "Baptiste Augrain", + "email": "daiyam@zokugun.org" + }, + "license": "MIT", + "type": "module", + "main": "generate-css.ts", + "scripts": { + "clean": "rimraf lib", + "lint": "xo", + "lint:fix": "xo --fix", + "prepare": "fixpack || true" + }, + "dependencies": { + "@zokugun/fs-extra-plus": "^0.3.3", + "@zokugun/xtry": "^0.10.1", + "fast-glob": "^3.3.3", + "postcss": "^8.5.6" + }, + "devDependencies": { + "@types/node": "^22.9.0", + "fixpack": "^4.0.0", + "xo": "0.60.0" + }, + "keywords": [] +} diff --git a/font-size/tsconfig.base.json b/font-size/tsconfig.base.json new file mode 100644 index 0000000..3b4412c --- /dev/null +++ b/font-size/tsconfig.base.json @@ -0,0 +1,78 @@ +{ + "compilerOptions": { + /* Language and Environment */ + "target": "ES2022", /* Specify ECMAScript target version. */ + "lib": [ /* Specify library files to be included in the compilation. */ + "ES2022", + ], + + /* Modules */ + "module": "node16", /* Specify what module code is generated. */ + + /* Basic Options */ + // "allowJs": false, /* Allow javascript files to be compiled. */ + // "checkJs": false, /* Report errors in '.js' files. */ + // "jsx": undefined, /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + // "declaration": false, /* Generates corresponding '.d.ts' file. */ + // "declarationDir": "" /* Specify the output directory for generated declaration files. */ + // "declarationMap": false, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "outFile": "", /* Specify a file that bundles all outputs into one JavaScript file. */ + // "outDir": "", /* Specify an output folder for all emitted files. */ + // "rootDir": "", /* Specify the root directory of input files. */ + // "incremental": false, /* Save '.tsbuildinfo' files to allow for incremental compilation of projects. */ + // "composite": false, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": ".tsbuildinfo", /* Specify the folder for '.tsbuildinfo' incremental compilation files. */ + // "removeComments": false, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting file from a compilation. */ + // "importHelpers": false, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": false, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": false, /* Ensure that each file can be safely transpiled without relying on other imports. */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + "strictNullChecks": true, /* When type checking, take into account null and undefined. */ + // "strictFunctionTypes": false, /* Enable strict checking of function types. */ + // "strictBindCallApply": false, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": false, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": false, /* Enable error reporting when 'this' is given the type 'any'. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": false, /* Report errors on unused parameters. */ + "noImplicitAny": false, /* Report error for expressions and declarations with an implied any type.. */ + "noImplicitReturns": false, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": false, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": false, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": false, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */ + // "noPropertyAccessFromIndexSignature": false, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + // "preserveSymlinks": false, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + // "allowUmdGlobalAccess": false, /* Allow accessing UMD globals from modules. */ + // "resolveJsonModule": false, /* Enable importing .json files */ + + /* Source Map Options */ + // "sourceMap": false, /* Create source map files for emitted JavaScript files. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": false, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": false, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + + /* Experimental Options */ + // "experimentalDecorators": false, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": false, /* Emit design-type metadata for decorated declarations in source files. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking all .d.ts files. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + }, +} diff --git a/font-size/tsconfig.json b/font-size/tsconfig.json new file mode 100644 index 0000000..b3254f0 --- /dev/null +++ b/font-size/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + /* Basic Options */ + "outDir": ".", + "rootDir": ".", + "declaration": true, + + /* Module Resolution Options */ + "resolveJsonModule": true, /* Enable importing .json files */ + }, + "files": [ + "package.json", + ], +} diff --git a/patches/feat-sidebar-font-size.patch b/patches/feat-sidebar-font-size.patch index 649c5dc..278692f 100644 --- a/patches/feat-sidebar-font-size.patch +++ b/patches/feat-sidebar-font-size.patch @@ -1,42 +1,406 @@ +diff --git a/src/vs/base/browser/ui/actionbar/actionbar.css b/src/vs/base/browser/ui/actionbar/actionbar.css +index 467b1ff..91fd5a0 100644 +--- a/src/vs/base/browser/ui/actionbar/actionbar.css ++++ b/src/vs/base/browser/ui/actionbar/actionbar.css +@@ -127 +127,33 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item .codicon, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .codicon { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-label, .monaco-workbench .part.sidebar .monaco-action-bar .action-item .keybinding, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .keybinding { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar.vertical .action-item .action-label.separator, .monaco-workbench .part.auxiliarybar .monaco-action-bar.vertical .action-item .action-label.separator { ++ padding-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) .8em ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item .action-label.separator, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .action-label.separator { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .secondary-actions .monaco-action-bar .action-label, .monaco-workbench .part.auxiliarybar .secondary-actions .monaco-action-bar .action-label { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item.select-container, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item.select-container { ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 13.076923); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 4.615385); ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator > div, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator > div { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} +\ No newline at end of file +diff --git a/src/vs/base/browser/ui/codicons/codicon/codicon.css b/src/vs/base/browser/ui/codicons/codicon/codicon.css +index d7f257d..af55bdd 100644 +--- a/src/vs/base/browser/ui/codicons/codicon/codicon.css ++++ b/src/vs/base/browser/ui/codicons/codicon/codicon.css +@@ -25 +25,7 @@ + /* icon rules are dynamically created by the platform theme service (see iconsStyleSheet.ts) */ ++ ++ ++ ++.monaco-workbench .part.sidebar .codicon[class*='codicon-'], .monaco-workbench .part.auxiliarybar .codicon[class*='codicon-'] { ++ font: normal normal normal calc(var(--vscode-workbench-sidebar-font-size) * 1.230769)/1 codicon ++} +\ No newline at end of file +diff --git a/src/vs/base/browser/ui/iconLabel/iconlabel.css b/src/vs/base/browser/ui/iconLabel/iconlabel.css +index d3dfd9a..cf59627 100644 +--- a/src/vs/base/browser/ui/iconLabel/iconlabel.css ++++ b/src/vs/base/browser/ui/iconLabel/iconlabel.css +@@ -119 +119,21 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .monaco-icon-label::before, .monaco-workbench .part.auxiliarybar .monaco-icon-label::before { ++ background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .monaco-icon-label-iconpath, .monaco-workbench .part.auxiliarybar .monaco-icon-label-iconpath { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name > .label-separator, .monaco-workbench .part.auxiliarybar .monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name > .label-separator { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-icon-label::after, .monaco-workbench .part.auxiliarybar .monaco-icon-label::after { ++ margin: auto calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) ++} +\ No newline at end of file +diff --git a/src/vs/base/browser/ui/inputbox/inputBox.css b/src/vs/base/browser/ui/inputbox/inputBox.css +index 827a19f..43a1996 100644 +--- a/src/vs/base/browser/ui/inputbox/inputBox.css ++++ b/src/vs/base/browser/ui/inputbox/inputBox.css +@@ -106 +106,26 @@ + } ++ ++.monaco-workbench .part.sidebar .monaco-inputbox > .ibwrapper { ++ line-height: var(--vscode-workbench-sidebar-font-size); ++ font-size: var(--vscode-workbench-sidebar-font-size); ++} ++ ++.monaco-workbench .part.sidebar .monaco-inputbox > .ibwrapper > .input, .monaco-workbench .part.sidebar .monaco-inputbox > .ibwrapper > .mirror, .monaco-workbench .part.auxiliarybar .monaco-inputbox > .ibwrapper > .input, .monaco-workbench .part.auxiliarybar .monaco-inputbox > .ibwrapper > .mirror { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .monaco-inputbox-container .monaco-inputbox-message, .monaco-workbench .part.auxiliarybar .monaco-inputbox-container .monaco-inputbox-message { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.307692); ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .monaco-inputbox .monaco-action-bar, .monaco-workbench .part.auxiliarybar .monaco-inputbox .monaco-action-bar { ++ right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846); ++ top: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-inputbox .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar .monaco-inputbox .monaco-action-bar .action-item { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-inputbox .monaco-action-bar .action-item .codicon, .monaco-workbench .part.auxiliarybar .monaco-inputbox .monaco-action-bar .action-item .codicon { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} +\ No newline at end of file +diff --git a/src/vs/base/browser/ui/selectBox/selectBox.css b/src/vs/base/browser/ui/selectBox/selectBox.css +index 2b0011a..327fe0f 100644 +--- a/src/vs/base/browser/ui/selectBox/selectBox.css ++++ b/src/vs/base/browser/ui/selectBox/selectBox.css +@@ -35 +35,16 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .monaco-select-box-dropdown-container, .monaco-workbench .part.auxiliarybar .monaco-select-box-dropdown-container { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item .monaco-select-box, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .monaco-select-box { ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 7.692308); ++ min-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) calc(var(--vscode-workbench-sidebar-font-size) * 1.769231) calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench.mac .part.sidebar .monaco-action-bar .action-item .monaco-select-box, .monaco-workbench.mac .part.auxiliarybar .monaco-action-bar .action-item .monaco-select-box { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ min-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.846154) ++} +\ No newline at end of file +diff --git a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts +index f6c2ff1..a7da491 100644 +--- a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts ++++ b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts +@@ -8,2 +8,3 @@ import * as arrays from '../../../common/arrays.js'; + import { Emitter, Event } from '../../../common/event.js'; ++import { FONT } from '../../../common/font.js'; + import { KeyCode, KeyCodeUtils } from '../../../common/keyCodes.js'; +@@ -164,3 +165,3 @@ export class SelectBoxList extends Disposable implements ISelectBoxDelegate, ILi + getHeight(): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/base/browser/ui/splitview/paneview.css b/src/vs/base/browser/ui/splitview/paneview.css +index 7bb4282..92c027a 100644 +--- a/src/vs/base/browser/ui/splitview/paneview.css ++++ b/src/vs/base/browser/ui/splitview/paneview.css +@@ -153 +153,38 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane.horizontal:not(.expanded) > .pane-header, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane.horizontal:not(.expanded) > .pane-header { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .codicon:first-of-type, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header > .codicon:first-of-type { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane.horizontal:not(.expanded) > .pane-header > .codicon:first-of-type, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane.horizontal:not(.expanded) > .pane-header > .codicon:first-of-type { ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .actions, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header > .actions { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .actions .action-item, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header > .actions .action-item { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .actions .action-label, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header > .actions .action-label { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box { ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 8.461538); ++ min-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) calc(var(--vscode-workbench-sidebar-font-size) * 1.769231) calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .linux .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box, .monaco-workbench .part.sidebar .windows .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box, .monaco-workbench .part.auxiliarybar .linux .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box, .monaco-workbench .part.auxiliarybar .windows .monaco-pane-view .pane > .pane-header .action-item .monaco-select-box { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0) calc(var(--vscode-workbench-sidebar-font-size) * 1.769231) calc(var(--vscode-workbench-sidebar-font-size) * 0) calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar #monaco-pane-drop-overlay > .pane-overlay-indicator, .monaco-workbench .part.auxiliarybar #monaco-pane-drop-overlay > .pane-overlay-indicator { ++ min-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 1.461538) ++} +\ No newline at end of file diff --git a/src/vs/base/browser/ui/splitview/paneview.ts b/src/vs/base/browser/ui/splitview/paneview.ts -index fb2e1f4..268d2cb 100644 +index fb2e1f4..3b1e23f 100644 --- a/src/vs/base/browser/ui/splitview/paneview.ts +++ b/src/vs/base/browser/ui/splitview/paneview.ts @@ -21,2 +21,3 @@ import { IView, Sizing, SplitView } from './splitview.js'; import { applyDragImage } from '../dnd/dnd.js'; -+import { SidebarPart } from '../../../../workbench/browser/parts/sidebar/sidebarPart.js'; ++import { FONT } from '../../../common/font.js'; -@@ -50,3 +51,3 @@ export abstract class Pane extends Disposable implements IView { +@@ -50,4 +51,2 @@ export abstract class Pane extends Disposable implements IView { - private static readonly HEADER_SIZE = 22; -+ static readonly COEFFICIENT = 22 / 13; - -@@ -121,3 +122,3 @@ export abstract class Pane extends Disposable implements IView { +- + readonly element: HTMLElement; +@@ -121,3 +120,3 @@ export abstract class Pane extends Disposable implements IView { private get headerSize(): number { - return this.headerVisible ? Pane.HEADER_SIZE : 0; -+ return this.headerVisible ? SidebarPart.getFontSize() * Pane.COEFFICIENT : 0; ++ return this.headerVisible ? FONT.sidebarSize22 : 0; } -@@ -300,3 +301,3 @@ export abstract class Pane extends Disposable implements IView { +@@ -300,3 +299,3 @@ export abstract class Pane extends Disposable implements IView { layout(size: number): void { - const headerSize = this.headerVisible ? Pane.HEADER_SIZE : 0; + const headerSize = this.headerSize; +diff --git a/src/vs/base/browser/ui/toggle/toggle.css b/src/vs/base/browser/ui/toggle/toggle.css +index e2d206d..e69352c 100644 +--- a/src/vs/base/browser/ui/toggle/toggle.css ++++ b/src/vs/base/browser/ui/toggle/toggle.css +@@ -69 +69,27 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .monaco-custom-toggle, .monaco-workbench .part.auxiliarybar .monaco-custom-toggle { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .monaco-custom-toggle.monaco-checkbox, .monaco-workbench .part.auxiliarybar .monaco-custom-toggle.monaco-checkbox { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.692308); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0); ++ background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .checkbox-action-item, .monaco-workbench .part.auxiliarybar .monaco-action-bar .checkbox-action-item { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .checkbox-action-item > .monaco-custom-toggle.monaco-checkbox, .monaco-workbench .part.auxiliarybar .monaco-action-bar .checkbox-action-item > .monaco-custom-toggle.monaco-checkbox { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .checkbox-action-item > .checkbox-label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .checkbox-action-item > .checkbox-label { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} +\ No newline at end of file +diff --git a/src/vs/base/browser/ui/toggle/toggle.ts b/src/vs/base/browser/ui/toggle/toggle.ts +index 0b2fcbb..6370e6f 100644 +--- a/src/vs/base/browser/ui/toggle/toggle.ts ++++ b/src/vs/base/browser/ui/toggle/toggle.ts +@@ -5,2 +5,3 @@ + ++import { FONT } from '../../../common/font.js'; + import { IAction } from '../../../common/actions.js'; +@@ -230,3 +231,4 @@ export class Toggle extends Widget { + width(): number { +- return 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */; ++ // return 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */; ++ return 2 + FONT.sidebarSize20 + } +diff --git a/src/vs/base/common/font.ts b/src/vs/base/common/font.ts +new file mode 100644 +index 0000000..2be97d7 +--- /dev/null ++++ b/src/vs/base/common/font.ts +@@ -0,0 +1,56 @@ ++export const FONT = { ++ sidebarSize: 13, ++ sidebarSize8: 8, ++ sidebarSize10: 10, ++ sidebarSize16: 16, ++ sidebarSize17: 17, ++ sidebarSize18: 18, ++ sidebarSize20: 20, ++ sidebarSize22: 22, ++ sidebarSize23: 23, ++ sidebarSize24: 24, ++ sidebarSize26: 26, ++ sidebarSize28: 28, ++ sidebarSize34: 34, ++ sidebarSize39: 39, ++ sidebarSize44: 44, ++ sidebarSize62: 62, ++ sidebarSize72: 72, ++}; ++ ++const COEFF_8 = 8/13; ++const COEFF_10 = 10/13; ++const COEFF_16 = 16/13; ++const COEFF_17 = 17/13; ++const COEFF_18 = 18/13; ++const COEFF_20 = 20/13; ++const COEFF_22 = 22/13; ++const COEFF_23 = 23/13; ++const COEFF_24 = 24/13; ++const COEFF_26 = 26/13; ++const COEFF_28 = 28/13; ++const COEFF_34 = 34/13; ++const COEFF_39 = 39/13; ++const COEFF_44 = 44/13; ++const COEFF_62 = 62/13; ++const COEFF_72 = 72/13; ++ ++export function updateSidebarSize(size: number): void { ++ FONT.sidebarSize = size; ++ FONT.sidebarSize8 = size * COEFF_8; ++ FONT.sidebarSize10 = size * COEFF_10; ++ FONT.sidebarSize16 = size * COEFF_16; ++ FONT.sidebarSize17 = size * COEFF_17; ++ FONT.sidebarSize18 = size * COEFF_18; ++ FONT.sidebarSize20 = size * COEFF_20; ++ FONT.sidebarSize22 = size * COEFF_22; ++ FONT.sidebarSize23 = size * COEFF_23; ++ FONT.sidebarSize24 = size * COEFF_24; ++ FONT.sidebarSize26 = size * COEFF_26; ++ FONT.sidebarSize28 = size * COEFF_28; ++ FONT.sidebarSize34 = size * COEFF_34; ++ FONT.sidebarSize39 = size * COEFF_39; ++ FONT.sidebarSize44 = size * COEFF_44; ++ FONT.sidebarSize62 = size * COEFF_62; ++ FONT.sidebarSize72 = size * COEFF_72; ++} +diff --git a/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts b/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts +index 328285f..0735dfa 100644 +--- a/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts ++++ b/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts +@@ -6,2 +6,3 @@ + import { IListVirtualDelegate } from '../../../../base/browser/ui/list/list.js'; ++import { FONT } from '../../../../base/common/font.js'; + import { IQuickTreeItem } from '../../common/quickInput.js'; +@@ -14,3 +15,3 @@ export class QuickInputTreeDelegate implements IListVi + getHeight(_element: T): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/browser/media/style.css b/src/vs/workbench/browser/media/style.css +index 13ff794..e5025e1 100644 +--- a/src/vs/workbench/browser/media/style.css ++++ b/src/vs/workbench/browser/media/style.css +@@ -322 +322,41 @@ body { + } ++ ++ ++ ++.monaco-workbench .part.sidebar body, .monaco-workbench .part.auxiliarybar body { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar, .monaco-workbench .part.auxiliarybar { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1) ++} ++.monaco-workbench .part.sidebar .codicon[class*='codicon-'], .monaco-workbench .part.auxiliarybar .codicon[class*='codicon-'] { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .predefined-file-icon[class*='codicon-']::before, .monaco-workbench .part.auxiliarybar .predefined-file-icon[class*='codicon-']::before { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .select-container:after, .monaco-workbench .part.auxiliarybar .select-container:after { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar [tabindex="0"]:focus, .monaco-workbench .part.sidebar [tabindex="-1"]:focus, .monaco-workbench .part.sidebar .synthetic-focus, .monaco-workbench .part.sidebar select:focus, .monaco-workbench .part.sidebar input[type="button"]:focus, .monaco-workbench .part.sidebar input[type="text"]:focus, .monaco-workbench .part.sidebar button:focus, .monaco-workbench .part.sidebar textarea:focus, .monaco-workbench .part.sidebar input[type="search"]:focus, .monaco-workbench .part.sidebar input[type="checkbox"]:focus, .monaco-workbench .part.auxiliarybar [tabindex="0"]:focus, .monaco-workbench .part.auxiliarybar [tabindex="-1"]:focus, .monaco-workbench .part.auxiliarybar .synthetic-focus, .monaco-workbench .part.auxiliarybar select:focus, .monaco-workbench .part.auxiliarybar input[type="button"]:focus, .monaco-workbench .part.auxiliarybar input[type="text"]:focus, .monaco-workbench .part.auxiliarybar button:focus, .monaco-workbench .part.auxiliarybar textarea:focus, .monaco-workbench .part.auxiliarybar input[type="search"]:focus, .monaco-workbench .part.auxiliarybar input[type="checkbox"]:focus { ++ outline-width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar input[type="checkbox"]:focus, .monaco-workbench .part.auxiliarybar input[type="checkbox"]:focus { ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-list:not(.element-focused):not(:active):focus:before, .monaco-workbench .part.auxiliarybar .monaco-list:not(.element-focused):not(:active):focus:before { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid; ++ outline-width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar:not(.vertical) .action-item .action-label:hover:not(.disabled), .monaco-workbench .part.auxiliarybar .monaco-action-bar:not(.vertical) .action-item .action-label:hover:not(.disabled) { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) dashed var(--vscode-toolbar-hoverOutline); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} +\ No newline at end of file diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts -index d32082b..c786715 100644 +index d32082b..f9272c6 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts -@@ -147,2 +147,5 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { +@@ -36,2 +36,4 @@ import { VisibleViewContainersTracker } from '../visibleViewContainersTracker.js + import { Extensions } from '../../panecomposite.js'; ++import { FONT, updateSidebarSize } from '../../../../base/common/font.js'; ++import { SidebarPart } from '../sidebar/sidebarPart.js'; + +@@ -147,2 +149,5 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { } -+ if (e.affectsConfiguration('workbench.secondarySideBar.fontSize')) { ++ if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { + this.applyAuxiliaryBarFontSize(); + } })); -@@ -198,2 +201,4 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { +@@ -198,2 +203,4 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { container.style.borderRightWidth = borderColor && isPositionLeft ? '1px' : '0px'; + + this.applyAuxiliaryBarFontSize(container); } -@@ -262,2 +267,16 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { +@@ -262,2 +269,18 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { + private applyAuxiliaryBarFontSize(container?: HTMLElement): void { + const target = container ?? this.getContainer(); @@ -44,12 +408,14 @@ index d32082b..c786715 100644 + return; + } + -+ const configuredSize = this.configurationService.getValue('workbench.secondarySideBar.fontSize'); ++ const configuredSize = this.configurationService.getValue(SidebarPart.fontSizeSettingsKey); + if (typeof configuredSize === 'number' && configuredSize > 0) { -+ target.style.setProperty('--vscode-workbench-secondary-sidebar-font-size', `${configuredSize}px`); ++ updateSidebarSize(Math.trunc(configuredSize)); + } else { -+ target.style.removeProperty('--vscode-workbench-secondary-sidebar-font-size'); ++ updateSidebarSize(13); + } ++ ++ target.style.setProperty('--vscode-workbench-sidebar-font-size', `${FONT.sidebarSize}px`); + } + protected shouldShowCompositeBar(): boolean { @@ -65,7 +431,7 @@ index aec3de2..e582843 100644 + .monaco-workbench .part.auxiliarybar > .title > .title-label { diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css -index decb51a..70394be 100644 +index decb51a..7088a97 100644 --- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +++ b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css @@ -15,3 +15,3 @@ @@ -111,19 +477,24 @@ index decb51a..70394be 100644 - left: 5px; /* place icon in center */ + left: calc(var(--vscode-workbench-sidebar-font-size) * 0.385); /* place icon in center */ } -@@ -124,3 +130,55 @@ +@@ -124,3 +130,72 @@ .monaco-workbench .sidebar.pane-composite-part > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item { - max-width: 150px; + max-width: calc(var(--vscode-workbench-sidebar-font-size) * 11.538); +} + -+.monaco-workbench .part.sidebar .pane > .pane-header h3.title { ++.monaco-workbench .part.sidebar .monaco-tl-contents { ++ display: flex; ++ align-items: center; ++} ++ ++/* .monaco-workbench .part.sidebar .pane > .pane-header h3.title { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); +} + +.monaco-workbench .part.sidebar .monaco-text-button { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923); -+} + } + +.monaco-workbench .part.sidebar .monaco-icon-label::before { + background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); @@ -141,7 +512,7 @@ index decb51a..70394be 100644 +.monaco-workbench .part.sidebar > .title, +.monaco-workbench .part.sidebar > .header-or-footer { + height: calc(var(--vscode-workbench-sidebar-font-size) * 2.692); - } ++} + +.monaco-workbench .part.sidebar > .title > .title-label { + line-height: calc(var(--vscode-workbench-sidebar-font-size) * 2.692); @@ -167,40 +538,44 @@ index decb51a..70394be 100644 + margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.308); +} + ++.monaco-workbench .part.sidebar .monaco-inputbox > .ibwrapper > .input { ++ font-size: var(--vscode-workbench-sidebar-font-size); +} ++ ++.monaco-workbench .part.sidebar .monaco-tl-contents { ++ display: flex; ++ align-items: center; ++} ++ ++.monaco-workbench .part.sidebar .monaco-custom-toggle { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); ++} */ \ No newline at end of file diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts -index 101b9c6..95cb622 100644 +index 101b9c6..6e22f7a 100644 --- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts -@@ -37,2 +37,4 @@ import { Extensions } from '../../panecomposite.js'; +@@ -36,2 +36,3 @@ import { VisibleViewContainersTracker } from '../visibleViewContainersTracker.js + import { Extensions } from '../../panecomposite.js'; ++import { FONT, updateSidebarSize } from '../../../../base/common/font.js'; -+let fontSize = 13; -+ - export class SidebarPart extends AbstractPaneCompositePart { -@@ -40,2 +42,3 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -40,2 +41,3 @@ export class SidebarPart extends AbstractPaneCompositePart { static readonly activeViewletSettingsKey = 'workbench.sidebar.activeviewletid'; + static readonly fontSizeSettingsKey = 'workbench.sideBar.experimental.fontSize'; -@@ -126,2 +129,5 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -126,2 +128,5 @@ export class SidebarPart extends AbstractPaneCompositePart { } + if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { + this.applySidebarFontSize(); + } })); -@@ -131,2 +137,6 @@ export class SidebarPart extends AbstractPaneCompositePart { - -+ public static getFontSize() { -+ return fontSize; -+ } -+ - private onDidChangeAutoHideViewContainers(e: { before: number; after: number }): void { -@@ -178,2 +188,4 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -178,2 +183,4 @@ export class SidebarPart extends AbstractPaneCompositePart { container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? ''; + + this.applySidebarFontSize(container); } -@@ -320,2 +332,18 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -320,2 +327,18 @@ export class SidebarPart extends AbstractPaneCompositePart { + private applySidebarFontSize(container?: HTMLElement): void { + const target = container ?? this.getContainer(); @@ -208,19 +583,72 @@ index 101b9c6..95cb622 100644 + return; + } + -+ fontSize = 13 -+ + const configuredSize = this.configurationService.getValue(SidebarPart.fontSizeSettingsKey); + if (typeof configuredSize === 'number' && configuredSize > 0) { -+ fontSize = Math.trunc(configuredSize) ++ updateSidebarSize(Math.trunc(configuredSize)); ++ } else { ++ updateSidebarSize(13); + } + -+ target.style.setProperty('--vscode-workbench-sidebar-font-size', `${fontSize}px`); ++ target.style.setProperty('--vscode-workbench-sidebar-font-size', `${FONT.sidebarSize}px`); + } + private registerActions(): void { +diff --git a/src/vs/workbench/browser/parts/views/media/paneviewlet.css b/src/vs/workbench/browser/parts/views/media/paneviewlet.css +index aca98de..5bf9bf7 100644 +--- a/src/vs/workbench/browser/parts/views/media/paneviewlet.css ++++ b/src/vs/workbench/browser/parts/views/media/paneviewlet.css +@@ -87 +87,30 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header.not-collapsible .title, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header.not-collapsible .title { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .icon, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header > .icon { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane.pane.horizontal:not(.expanded) > .pane-header > .icon, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane.pane.horizontal:not(.expanded) > .pane-header > .icon { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header h3.title, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header h3.title { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header .description, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header .description { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header .description .codicon, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane > .pane-header .description .codicon { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.692308); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane .monaco-progress-container, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane .monaco-progress-container { ++ top: calc(var(--vscode-workbench-sidebar-font-size) * -0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-pane-view .pane:not(.merged-header) .monaco-progress-container, .monaco-workbench .part.auxiliarybar .monaco-pane-view .pane:not(.merged-header) .monaco-progress-container { ++ top: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/views/treeView.ts b/src/vs/workbench/browser/parts/views/treeView.ts +index 1c9305b..6471a0d 100644 +--- a/src/vs/workbench/browser/parts/views/treeView.ts ++++ b/src/vs/workbench/browser/parts/views/treeView.ts +@@ -79,2 +79,3 @@ import { IAccessibleViewInformationService } from '../../../services/accessibili + import { Command } from '../../../../editor/common/languages.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -1166,3 +1167,3 @@ class TreeViewDelegate implements IListVirtualDelegate { + getHeight(element: ITreeItem): number { +- return TreeRenderer.ITEM_HEIGHT; ++ return FONT.sidebarSize22; + } +@@ -1242,3 +1243,2 @@ interface ITreeExplorerTemplateData { + class TreeRenderer extends Disposable implements ITreeRenderer { +- static readonly ITEM_HEIGHT = 22; + static readonly TREE_TEMPLATE_ID = 'treeExplorer'; diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index b1c5637..ce89429 100644 +index b1c5637..3bcdefb 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts @@ -561,2 +561,10 @@ const registry = Registry.as(ConfigurationExtensions.Con @@ -234,96 +662,1399 @@ index b1c5637..ce89429 100644 + 'tags': ['accessibility', 'experimental'] + }, 'workbench.panel.showLabels': { -@@ -607,2 +615,10 @@ const registry = Registry.as(ConfigurationExtensions.Con - }, -+ 'workbench.secondarySideBar.experimental.fontSize': { -+ 'type': 'number', -+ 'default': 13, -+ 'minimum': 6, -+ 'maximum': 32, -+ 'markdownDescription': localize('secondarySideBarFontSize', "Controls the font size used for content inside the secondary side bar."), -+ 'tags': ['accessibility', 'experimental'] -+ }, - 'workbench.statusBar.visible': { +diff --git a/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyTree.ts b/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyTree.ts +index 6f58865..3ab0ee4 100644 +--- a/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyTree.ts ++++ b/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyTree.ts +@@ -17,2 +17,3 @@ import { localize } from '../../../../nls.js'; + import { ThemeIcon } from '../../../../base/common/themables.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -137,3 +138,3 @@ export class VirtualDelegate implements IListVirtualDelegate { + getHeight(_element: Call): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts +index 2a89832..d2cfdbf 100644 +--- a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts ++++ b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts +@@ -45,2 +45,3 @@ import { AgentSessionProviders, getAgentSessionTime } from './agentSessions.js'; + import { AgentSessionsGrouping } from './agentSessionsFilter.js'; ++import { FONT } from '../../../../../base/common/font.js'; + +@@ -504,11 +505,8 @@ export class AgentSessionsListDelegate implements IListVirtualDelegate { + getHeight(element: SectionItem) { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts b/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts +index 4fd9d3e..fce1aad 100644 +--- a/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts ++++ b/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.ts +@@ -34,2 +34,3 @@ import { ResourcePool } from './chatCollections.js'; + import { IChatContentPart, IChatContentPartRenderContext } from './chatContentParts.js'; ++import { FONT } from '../../../../../../base/common/font.js'; + +@@ -246,3 +247,3 @@ class CollapsibleChangesSummaryListDelegate implements IListVirtualDelegate { + getHeight(element: IChatTodo): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.ts b/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.ts +index 703940e..e0fa9eb 100644 +--- a/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.ts ++++ b/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.ts +@@ -12,2 +12,3 @@ import { IAsyncDataSource, ITreeNode } from '../../../../../../base/browser/ui/t + import { Event } from '../../../../../../base/common/event.js'; ++import { FONT } from '../../../../../../base/common/font.js'; + import { Disposable, DisposableStore, IDisposable } from '../../../../../../base/common/lifecycle.js'; +@@ -155,6 +156,5 @@ export class TreePool extends Disposable { + class ChatListTreeDelegate implements IListVirtualDelegate { +- static readonly ITEM_HEIGHT = 22; + + getHeight(element: IChatResponseProgressFileTreeData): number { +- return ChatListTreeDelegate.ITEM_HEIGHT; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +index f57aca1..2c34fb8 100644 +--- a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css ++++ b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +@@ -161 +161,68 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .chat-viewpane.has-sessions-control .agent-sessions-container, .monaco-workbench .part.auxiliarybar .chat-viewpane.has-sessions-control .agent-sessions-container { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ letter-spacing: calc(var(--vscode-workbench-sidebar-font-size) * 0.038462); ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .agent-sessions-title-container, .monaco-workbench .part.auxiliarybar .agent-sessions-title-container { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ letter-spacing: calc(var(--vscode-workbench-sidebar-font-size) * 0.038462) ++} ++.monaco-workbench .part.sidebar .agent-sessions-toolbar, .monaco-workbench .part.auxiliarybar .agent-sessions-toolbar { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .action-item, .monaco-workbench .part.auxiliarybar .action-item { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .chat-viewpane.has-sessions-control.sessions-control-orientation-stacked, .monaco-workbench .part.auxiliarybar .chat-viewpane.has-sessions-control.sessions-control-orientation-stacked { ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 73.076923) ++} ++.monaco-workbench .part.sidebar .agent-sessions-container, .monaco-workbench .part.auxiliarybar .agent-sessions-container { ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 73.076923) ++} ++.monaco-workbench .part.sidebar .chat-viewpane.has-sessions-control.sessions-control-orientation-sidebyside, .monaco-workbench .part.auxiliarybar .chat-viewpane.has-sessions-control.sessions-control-orientation-sidebyside { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .agent-sessions-new-button-container, .monaco-workbench .part.auxiliarybar .agent-sessions-new-button-container { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .chat-viewpane.has-sessions-control, .monaco-workbench .part.auxiliarybar .chat-viewpane.has-sessions-control { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.538462); ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385); ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .agent-sessions-title-container, .monaco-workbench .part.auxiliarybar .agent-sessions-title-container { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} ++.monaco-workbench .part.sidebar .agent-session-section, .monaco-workbench .part.auxiliarybar .agent-session-section { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.076923) ++} ++.monaco-workbench .part.sidebar &.sessions-control-orientation-sidebyside.chat-view-position-right, .monaco-workbench .part.auxiliarybar &.sessions-control-orientation-sidebyside.chat-view-position-right { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385); ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .agent-sessions-title-container, .monaco-workbench .part.auxiliarybar .agent-sessions-title-container { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .agent-session-section, .monaco-workbench .part.auxiliarybar .agent-session-section { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar &.activity-bar-location-other.chat-view-location-auxiliarybar, .monaco-workbench .part.auxiliarybar &.activity-bar-location-other.chat-view-location-auxiliarybar { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .agent-sessions-title-container, .monaco-workbench .part.auxiliarybar .agent-sessions-title-container { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar &.sessions-control-orientation-sidebyside.chat-view-position-right, .monaco-workbench .part.auxiliarybar &.sessions-control-orientation-sidebyside.chat-view-position-right { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .agent-sessions-title-container, .monaco-workbench .part.sidebar .agent-session-section, .monaco-workbench .part.auxiliarybar .agent-sessions-title-container, .monaco-workbench .part.auxiliarybar .agent-session-section { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} +\ No newline at end of file diff --git a/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts b/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts -index c6298b3..3eb7fcb 100644 +index c6298b3..8fcab5f 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts -@@ -31,2 +31,3 @@ import { IThemeService } from '../../../../../platform/theme/common/themeService - import { fillEditorsDragData } from '../../../../browser/dnd.js'; -+import { SidebarPart } from '../../../../browser/parts/sidebar/sidebarPart.js'; - import { IOutlineComparator, OutlineConfigKeys, OutlineTarget } from '../../../../services/outline/browser/outline.js'; -@@ -159,4 +160,6 @@ export class DocumentSymbolVirtualDelegate implements IListVirtualDelegate + getHeight(_element: BreakpointTreeElement): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/debug/browser/callStackView.ts b/src/vs/workbench/contrib/debug/browser/callStackView.ts +index 35c9c1e..f8bf9c5 100644 +--- a/src/vs/workbench/contrib/debug/browser/callStackView.ts ++++ b/src/vs/workbench/contrib/debug/browser/callStackView.ts +@@ -22,2 +22,3 @@ import { Event } from '../../../../base/common/event.js'; + import { createMatches, FuzzyScore, IMatch } from '../../../../base/common/filters.js'; ++import { FONT } from '../../../../base/common/font.js'; + import { DisposableStore, dispose, IDisposable } from '../../../../base/common/lifecycle.js'; +@@ -898,9 +899,9 @@ class CallStackDelegate implements IListVirtualDelegate { + if (element instanceof StackFrame && element.presentationHint === 'label') { +- return 16; ++ return FONT.sidebarSize16; + } + if (element instanceof ThreadAndSessionIds || element instanceof Array) { +- return 16; ++ return FONT.sidebarSize16; + } + +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/debug/browser/callStackWidget.ts b/src/vs/workbench/contrib/debug/browser/callStackWidget.ts +index 42e4cbe..bfaf21e 100644 +--- a/src/vs/workbench/contrib/debug/browser/callStackWidget.ts ++++ b/src/vs/workbench/contrib/debug/browser/callStackWidget.ts +@@ -13,2 +13,3 @@ import { Codicon } from '../../../../base/common/codicons.js'; + import { Emitter, Event } from '../../../../base/common/event.js'; ++import { FONT } from '../../../../base/common/font.js'; + import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +@@ -84,3 +85,3 @@ class WrappedCallStackFrame extends CallStackFrame implements IFrameLikeItem { + public readonly height = derived(reader => { +- return this.collapsed.read(reader) ? CALL_STACK_WIDGET_HEADER_HEIGHT : CALL_STACK_WIDGET_HEADER_HEIGHT + this.editorHeight.read(reader); ++ return this.collapsed.read(reader) ? FONT.sidebarSize24 : FONT.sidebarSize24 + this.editorHeight.read(reader); + }); +@@ -96,3 +97,3 @@ class WrappedCustomStackFrame implements IFrameLikeItem { + public readonly height = derived(reader => { +- const headerHeight = this.original.showHeader.read(reader) ? CALL_STACK_WIDGET_HEADER_HEIGHT : 0; ++ const headerHeight = this.original.showHeader.read(reader) ? FONT.sidebarSize24 : 0; + return this.collapsed.read(reader) ? headerHeight : headerHeight + this.original.height.read(reader); +@@ -267,3 +268,3 @@ class StackDelegate implements IListVirtualDelegate { + if (element instanceof SkippedCallFrames) { +- return CALL_STACK_WIDGET_HEADER_HEIGHT; ++ return FONT.sidebarSize24; + } +@@ -322,4 +323,2 @@ const makeFrameElements = () => dom.h('div.multiCallStackFrame', [ + +-export const CALL_STACK_WIDGET_HEADER_HEIGHT = 24; +- + interface IAbstractFrameRendererTemplateData { +diff --git a/src/vs/workbench/contrib/debug/browser/debugHover.ts b/src/vs/workbench/contrib/debug/browser/debugHover.ts +index fe8ae2b..5830976 100644 +--- a/src/vs/workbench/contrib/debug/browser/debugHover.ts ++++ b/src/vs/workbench/contrib/debug/browser/debugHover.ts +@@ -15,2 +15,3 @@ import { coalesce } from '../../../../base/common/arrays.js'; + import { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js'; ++import { FONT } from '../../../../base/common/font.js'; + import { KeyCode } from '../../../../base/common/keyCodes.js'; +@@ -446,3 +447,3 @@ class DebugHoverDelegate implements IListVirtualDelegate { + getHeight(element: IExpression): number { +- return 18; ++ return FONT.sidebarSize18; + } +diff --git a/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts b/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts +index 531c114..909a66d 100644 +--- a/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts ++++ b/src/vs/workbench/contrib/debug/browser/loadedScriptsView.ts +@@ -14,2 +14,3 @@ import { Codicon } from '../../../../base/common/codicons.js'; + import { createMatches, FuzzyScore } from '../../../../base/common/filters.js'; ++import { FONT } from '../../../../base/common/font.js'; + import { normalizeDriveLetter, tildify } from '../../../../base/common/labels.js'; +@@ -652,3 +653,3 @@ class LoadedScriptsDelegate implements IListVirtualDelegate { + getHeight(element: LoadedScriptsItem): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css b/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css +index 090c53e..d5c4b9f 100644 +--- a/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css ++++ b/src/vs/workbench/contrib/debug/browser/media/debugToolBar.css +@@ -54 +54,23 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .debug-toolbar, .monaco-workbench .part.auxiliarybar .debug-toolbar { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 2.153846); ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .debug-toolbar .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar .debug-toolbar .monaco-action-bar .action-item { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .debug-toolbar .monaco-action-bar .action-item.select-container, .monaco-workbench .part.auxiliarybar .debug-toolbar .monaco-action-bar .action-item.select-container { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .debug-toolbar .monaco-action-bar .action-item.select-container .monaco-select-box, .monaco-workbench .part.sidebar .start-debug-action-item .select-container .monaco-select-box, .monaco-workbench .part.auxiliarybar .debug-toolbar .monaco-action-bar .action-item.select-container .monaco-select-box, .monaco-workbench .part.auxiliarybar .start-debug-action-item .select-container .monaco-select-box { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.846154) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .debug-toolbar .drag-area, .monaco-workbench .part.auxiliarybar .debug-toolbar .drag-area { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} ++.monaco-workbench .part.sidebar .debug-toolbar .monaco-action-bar .action-item .action-label, .monaco-workbench .part.auxiliarybar .debug-toolbar .monaco-action-bar .action-item .action-label { ++ background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css b/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css +index f6ca5b3..ac13e94 100644 +--- a/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css ++++ b/src/vs/workbench/contrib/debug/browser/media/debugViewlet.css +@@ -370 +370,90 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .debug-action.notification:after, .monaco-workbench .part.auxiliarybar .debug-action.notification:after { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538); ++ top: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231); ++ right: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar > .title > .title-actions .start-debug-action-item, .monaco-workbench .part.auxiliarybar > .title > .title-actions .start-debug-action-item { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} ++.monaco-workbench .part.sidebar > .title > .title-actions .start-debug-action-item .codicon-debug-start, .monaco-workbench .part.auxiliarybar > .title > .title-actions .start-debug-action-item .codicon-debug-start { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .start-debug-action-item .configuration .monaco-select-box, .monaco-workbench .part.auxiliarybar .monaco-action-bar .start-debug-action-item .configuration .monaco-select-box { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 6.923077) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .start-debug-action-item .configuration .monaco-select-box, .monaco-workbench .part.auxiliarybar .monaco-action-bar .start-debug-action-item .configuration .monaco-select-box { ++ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0) ++} ++.monaco-workbench .part.sidebar .debug-pane .line-number, .monaco-workbench .part.auxiliarybar .debug-pane .line-number { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .debug-pane .call-stack-state-message, .monaco-workbench .part.auxiliarybar .debug-pane .call-stack-state-message { ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0) calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} ++.monaco-workbench .part.sidebar .debug-pane .call-stack-state-message > .label, .monaco-workbench .part.auxiliarybar .debug-pane .call-stack-state-message > .label { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.153846); ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.692308) ++} ++.monaco-workbench .part.sidebar .debug-pane .debug-call-stack .thread, .monaco-workbench .part.sidebar .debug-pane .debug-call-stack .session, .monaco-workbench .part.sidebar .debug-pane .debug-call-stack .stack-frame, .monaco-workbench .part.auxiliarybar .debug-pane .debug-call-stack .thread, .monaco-workbench .part.auxiliarybar .debug-pane .debug-call-stack .session, .monaco-workbench .part.auxiliarybar .debug-pane .debug-call-stack .stack-frame { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} ++.monaco-workbench .part.sidebar .debug-pane .debug-call-stack .thread > .state.label, .monaco-workbench .part.sidebar .debug-pane .debug-call-stack .session > .state.label, .monaco-workbench .part.auxiliarybar .debug-pane .debug-call-stack .thread > .state.label, .monaco-workbench .part.auxiliarybar .debug-pane .debug-call-stack .session > .state.label { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} ++.monaco-workbench .part.sidebar .debug-pane .monaco-list-row .monaco-action-bar .action-label, .monaco-workbench .part.auxiliarybar .debug-pane .monaco-list-row .monaco-action-bar .action-label { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .debug-pane .session .codicon, .monaco-workbench .part.auxiliarybar .debug-pane .session .codicon { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .debug-pane .scope, .monaco-workbench .part.auxiliarybar .debug-pane .scope { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .debug-pane .monaco-list-row .expression .value, .monaco-workbench .part.auxiliarybar .debug-pane .monaco-list-row .expression .value { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .debug-pane .monaco-inputbox > .ibwrapper, .monaco-workbench .part.auxiliarybar .debug-pane .monaco-inputbox > .ibwrapper { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.461538) ++} ++.monaco-workbench .part.sidebar .debug-pane .monaco-inputbox > .ibwrapper > .input, .monaco-workbench .part.auxiliarybar .debug-pane .monaco-inputbox > .ibwrapper > .input { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0) ++} ++.monaco-workbench .part.sidebar .debug-view-content .monaco-tl-contents .highlight, .monaco-workbench .part.auxiliarybar .debug-view-content .monaco-tl-contents .highlight { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) dotted var(--vscode-list-filterMatchBorder); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .debug-pane .monaco-list-row, .monaco-workbench .part.auxiliarybar .debug-pane .monaco-list-row { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .debug-pane .debug-breakpoints .breakpoint, .monaco-workbench .part.auxiliarybar .debug-pane .debug-breakpoints .breakpoint { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * -1.461538) ++} ++.monaco-workbench .part.sidebar .debug-pane .debug-breakpoints .breakpoint .monaco-custom-toggle, .monaco-workbench .part.auxiliarybar .debug-pane .debug-breakpoints .breakpoint .monaco-custom-toggle { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .debug-pane .debug-breakpoints .breakpoint .monaco-custom-toggle.monaco-checkbox, .monaco-workbench .part.auxiliarybar .debug-pane .debug-breakpoints .breakpoint .monaco-custom-toggle.monaco-checkbox { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615) ++} ++.monaco-workbench .part.sidebar .debug-pane .debug-breakpoints .breakpoint > .codicon, .monaco-workbench .part.auxiliarybar .debug-pane .debug-breakpoints .breakpoint > .codicon { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.461538); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.461538); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 1.461538) ++} ++.monaco-workbench .part.sidebar .debug-pane .pane-header .breakpoint-warning, .monaco-workbench .part.auxiliarybar .debug-pane .pane-header .breakpoint-warning { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/contrib/debug/browser/variablesView.ts b/src/vs/workbench/contrib/debug/browser/variablesView.ts +index f18d41b..8863b19 100644 +--- a/src/vs/workbench/contrib/debug/browser/variablesView.ts ++++ b/src/vs/workbench/contrib/debug/browser/variablesView.ts +@@ -18,2 +18,3 @@ import { Codicon } from '../../../../base/common/codicons.js'; + import { FuzzyScore, createMatches } from '../../../../base/common/filters.js'; ++import { FONT } from '../../../../base/common/font.js'; + import { IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; +@@ -370,3 +371,3 @@ class VariablesDelegate implements IListVirtualDelegate { + getHeight(element: IExpression | IScope): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts b/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts +index f290f70..3269808 100644 +--- a/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts ++++ b/src/vs/workbench/contrib/debug/browser/watchExpressionsView.ts +@@ -42,2 +42,3 @@ import { watchExpressionsAdd, watchExpressionsRemoveAll } from './debugIcons.js' + import { VariablesRenderer, VisualizedVariableRenderer } from './variablesView.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -240,3 +241,3 @@ class WatchExpressionsDelegate implements IListVirtualDelegate { + getHeight(_element: IExpression): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.ts b/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.ts +index 3cd48a5..3238df4 100644 +--- a/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.ts ++++ b/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.ts +@@ -40,2 +40,3 @@ import { IHoverService } from '../../../../platform/hover/browser/hover.js'; + import { IMarkdownRendererService } from '../../../../platform/markdown/browser/markdownRenderer.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -474,3 +475,3 @@ interface IExtensionFeatureItemTemplateData { + class ExtensionFeatureItemDelegate implements IListVirtualDelegate { +- getHeight() { return 22; } ++ getHeight() { return FONT.sidebarSize22; } + getTemplateId() { return 'extensionFeatureDescriptor'; } +diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsList.ts b/src/vs/workbench/contrib/extensions/browser/extensionsList.ts +index 95226c5..dcea716 100644 +--- a/src/vs/workbench/contrib/extensions/browser/extensionsList.ts ++++ b/src/vs/workbench/contrib/extensions/browser/extensionsList.ts +@@ -27,4 +27,3 @@ import { IActionViewItemOptions } from '../../../../base/browser/ui/actionbar/ac + import { extensionVerifiedPublisherIconColor, verifiedPublisherIcon } from '../../../services/extensionManagement/common/extensionsIcons.js'; +- +-const EXTENSION_LIST_ELEMENT_HEIGHT = 72; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -44,3 +43,3 @@ export interface ITemplateData { + export class Delegate implements IListVirtualDelegate { +- getHeight() { return EXTENSION_LIST_ELEMENT_HEIGHT; } ++ getHeight() { return FONT.sidebarSize72; } + getTemplateId() { return 'extension'; } +diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts +index 418cb12..fbb30c5 100644 +--- a/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts ++++ b/src/vs/workbench/contrib/extensions/browser/extensionsViewer.ts +@@ -40,2 +40,3 @@ import { ILogService } from '../../../../platform/log/common/log.js'; + import { isCancellationError } from '../../../../base/common/errors.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -262,3 +263,3 @@ class VirualDelegate implements IListVirtualDelegate { + public getHeight(element: IExtensionData): number { +- return 62; ++ return FONT.sidebarSize62; + } +diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts b/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts +index 6b63799..9cec063 100644 +--- a/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts ++++ b/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts +@@ -72,2 +72,3 @@ import { DEFAULT_ACCOUNT_SIGN_IN_COMMAND } from '../../../services/accounts/brow + import { IHoverService } from '../../../../platform/hover/browser/hover.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -727,5 +728,5 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer .icon-container .extension-badge, .monaco-workbench .part.auxiliarybar .extension-list-item > .icon-container .extension-badge { ++ bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231); ++ left: calc(var(--vscode-workbench-sidebar-font-size) * -0.615385) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .icon-container .extension-badge.extension-icon-badge, .monaco-workbench .part.auxiliarybar .extension-list-item > .icon-container .extension-badge.extension-icon-badge { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ right: calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.461538); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header .extension-kind-indicator, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header .extension-kind-indicator { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .install-count:not(:empty), .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .install-count:not(:empty) { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .activation-status:not(:empty), .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .activation-status:not(:empty) { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .activation-status .activationTime, .monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .activation-status:not(:empty) .codicon, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .activation-status .activationTime, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .activation-status:not(:empty) .codicon { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header .codicon, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header .codicon { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header .extension-icon-badge, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header .extension-icon-badge { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header .extension-icon-badge > .codicon, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header .extension-icon-badge > .codicon { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .description, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .description { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .footer, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .footer { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.538462); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.846154) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .footer > .publisher-container, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .footer > .publisher-container { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.846154) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .footer .publisher > .publisher-name:not(:first-child), .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .footer .publisher > .publisher-name:not(:first-child) { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .footer > .monaco-action-bar > .actions-container .extension-action.label, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .footer > .monaco-action-bar > .actions-container .extension-action.label { ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 11.538462); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .extension-list-item .footer .monaco-action-bar .action-item.action-dropdown-item.empty > .action-label, .monaco-workbench .part.auxiliarybar .extension-list-item .footer .monaco-action-bar .action-item.action-dropdown-item.empty > .action-label { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.auxiliarybar .extension-list-item .monaco-action-bar .action-label.icon { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .hc-black .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.sidebar .hc-light .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.auxiliarybar .hc-black .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.auxiliarybar .hc-light .extension-list-item .monaco-action-bar .action-label.icon { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0) calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item, .monaco-workbench .part.sidebar .extension-list-item .monaco-action-bar > .actions-container > .action-item:not(.action-dropdown-item) > .extension-action, .monaco-workbench .part.auxiliarybar .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item, .monaco-workbench .part.auxiliarybar .extension-list-item .monaco-action-bar > .actions-container > .action-item:not(.action-dropdown-item) > .extension-action { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item > .action-dropdown-item-separator, .monaco-workbench .part.auxiliarybar .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item > .action-dropdown-item-separator { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item > .action-dropdown-item-separator > div, .monaco-workbench .part.auxiliarybar .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item > .action-dropdown-item-separator > div { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/contrib/files/browser/media/explorerviewlet.css b/src/vs/workbench/contrib/files/browser/media/explorerviewlet.css +index db5712f..0f75b63 100644 +--- a/src/vs/workbench/contrib/files/browser/media/explorerviewlet.css ++++ b/src/vs/workbench/contrib/files/browser/media/explorerviewlet.css +@@ -108 +108,24 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .explorer-folders-view .explorer-item, .monaco-workbench .part.sidebar .explorer-folders-view .editor-group, .monaco-workbench .part.auxiliarybar .explorer-folders-view .explorer-item, .monaco-workbench .part.auxiliarybar .explorer-folders-view .editor-group { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .explorer-folders-view .monaco-list-row .explorer-item .monaco-count-badge, .monaco-workbench .part.auxiliarybar .explorer-folders-view .monaco-list-row .explorer-item .monaco-count-badge { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) ++} ++.monaco-workbench.linux .part.sidebar .explorer-folders-view .explorer-item .monaco-inputbox, .monaco-workbench.mac .part.sidebar .explorer-folders-view .explorer-item .monaco-inputbox, .monaco-workbench.linux .part.auxiliarybar .explorer-folders-view .explorer-item .monaco-inputbox, .monaco-workbench.mac .part.auxiliarybar .explorer-folders-view .explorer-item .monaco-inputbox { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .explorer-folders-view .explorer-item .monaco-inputbox > .ibwrapper > .input, .monaco-workbench .part.auxiliarybar .explorer-folders-view .explorer-item .monaco-inputbox > .ibwrapper > .input { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} ++.monaco-workbench.hc-black .part.sidebar .explorer-folders-view .explorer-item, .monaco-workbench.hc-light .part.sidebar .explorer-folders-view .explorer-item, .monaco-workbench.hc-black .part.auxiliarybar .explorer-folders-view .explorer-item, .monaco-workbench.hc-light .part.auxiliarybar .explorer-folders-view .explorer-item { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} ++.monaco-workbench .part.sidebar .explorer-folders-view .explorer-item .monaco-inputbox input[type="text"], .monaco-workbench .part.auxiliarybar .explorer-folders-view .explorer-item .monaco-inputbox input[type="text"] { ++ outline-width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/contrib/files/browser/views/explorerView.ts b/src/vs/workbench/contrib/files/browser/views/explorerView.ts +index 5b11568..d276b5c 100644 +--- a/src/vs/workbench/contrib/files/browser/views/explorerView.ts ++++ b/src/vs/workbench/contrib/files/browser/views/explorerView.ts +@@ -511,3 +511,3 @@ export class ExplorerView extends ViewPane implements IExplorerView { + }, +- paddingBottom: ExplorerDelegate.ITEM_HEIGHT, ++ paddingBottom: ExplorerDelegate.getHeight(), + overrideStyles: this.getLocationBasedColors().listOverrideStyles, diff --git a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts -index ed7dbe0..674088d 100644 +index ed7dbe0..dba05e8 100644 --- a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts +++ b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts @@ -76,2 +76,3 @@ import { listFilterMatchHighlight, listFilterMatchHighlightBorder } from '../../ import { asCssVariable } from '../../../../../platform/theme/common/colorUtils.js'; -+import { SidebarPart } from '../../../../browser/parts/sidebar/sidebarPart.js'; ++import { FONT } from '../../../../../base/common/font.js'; -@@ -79,6 +80,6 @@ export class ExplorerDelegate implements IListVirtualDelegate { +@@ -79,6 +80,8 @@ export class ExplorerDelegate implements IListVirtualDelegate { - static readonly ITEM_HEIGHT = 22; -+ static readonly COEFFICIENT = 22 / 13; ++ static getHeight(): number { ++ return FONT.sidebarSize22; ++ } getHeight(element: ExplorerItem): number { - return ExplorerDelegate.ITEM_HEIGHT; -+ return SidebarPart.getFontSize() * ExplorerDelegate.COEFFICIENT; ++ return FONT.sidebarSize22; } -@@ -852,3 +853,3 @@ export class FilesRenderer implements ICompressibleTreeRenderer('workbench.tree.indent'); - const offset = Math.max(22 - indent, 0); // derived via inspection + const offset = Math.max(39 - indent, 0); // derived via inspection container.style.setProperty(`--vscode-explorer-align-offset-margin-left`, `${offset}px`); +diff --git a/src/vs/workbench/contrib/files/browser/views/media/openeditors.css b/src/vs/workbench/contrib/files/browser/views/media/openeditors.css +index d933ff9..3995b14 100644 +--- a/src/vs/workbench/contrib/files/browser/views/media/openeditors.css ++++ b/src/vs/workbench/contrib/files/browser/views/media/openeditors.css +@@ -108 +108,28 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .pane-header .open-editors-dirty-count-container > .dirty-count.monaco-count-badge, .monaco-workbench .part.auxiliarybar .pane-header .open-editors-dirty-count-container > .dirty-count.monaco-count-badge { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .open-editors .monaco-list .monaco-list-row > .monaco-action-bar .action-label, .monaco-workbench .part.auxiliarybar .open-editors .monaco-list .monaco-list-row > .monaco-action-bar .action-label { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .open-editors .monaco-list .monaco-list-row > .monaco-action-bar .action-close-all-files, .monaco-workbench .part.sidebar .open-editors .monaco-list .monaco-list-row > .monaco-action-bar .save-all, .monaco-workbench .part.auxiliarybar .open-editors .monaco-list .monaco-list-row > .monaco-action-bar .action-close-all-files, .monaco-workbench .part.auxiliarybar .open-editors .monaco-list .monaco-list-row > .monaco-action-bar .save-all { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.769231); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .open-editors .monaco-list .monaco-list-row, .monaco-workbench .part.auxiliarybar .open-editors .monaco-list .monaco-list-row { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .open-editors .monaco-list .monaco-list-row .editor-group, .monaco-workbench .part.auxiliarybar .open-editors .monaco-list .monaco-list-row .editor-group { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .open-editors .open-editor, .monaco-workbench .part.sidebar .open-editors .editor-group, .monaco-workbench .part.auxiliarybar .open-editors .open-editor, .monaco-workbench .part.auxiliarybar .open-editors .editor-group { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench.hc-black .part.sidebar .open-editors .open-editor, .monaco-workbench.hc-black .part.sidebar .open-editors .editor-group, .monaco-workbench.hc-light .part.sidebar .open-editors .open-editor, .monaco-workbench.hc-light .part.sidebar .open-editors .editor-group, .monaco-workbench.hc-black .part.auxiliarybar .open-editors .open-editor, .monaco-workbench.hc-black .part.auxiliarybar .open-editors .editor-group, .monaco-workbench.hc-light .part.auxiliarybar .open-editors .open-editor, .monaco-workbench.hc-light .part.auxiliarybar .open-editors .editor-group { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} +\ No newline at end of file diff --git a/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts b/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts -index 7229c14..1e52c37 100644 +index 7229c14..33cae40 100644 --- a/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts +++ b/src/vs/workbench/contrib/files/browser/views/openEditorsView.ts @@ -58,2 +58,3 @@ import { IHoverService } from '../../../../../platform/hover/browser/hover.js'; import { IFileService } from '../../../../../platform/files/common/files.js'; -+import { SidebarPart } from '../../../../browser/parts/sidebar/sidebarPart.js'; ++import { FONT } from '../../../../../base/common/font.js'; @@ -519,3 +520,3 @@ export class OpenEditorsView extends ViewPane { - return (Math.max(this.elementCount, minVisibleOpenEditors)) * OpenEditorsDelegate.ITEM_HEIGHT; -+ return (Math.max(this.elementCount, minVisibleOpenEditors)) * OpenEditorsDelegate.COEFFICIENT * SidebarPart.getFontSize(); ++ return (Math.max(this.elementCount, minVisibleOpenEditors)) * FONT.sidebarSize22; } @@ -533,3 +534,3 @@ export class OpenEditorsView extends ViewPane { const itemsToShow = Math.min(Math.max(visibleOpenEditors, 1), this.elementCount); - return itemsToShow * OpenEditorsDelegate.ITEM_HEIGHT; -+ return itemsToShow * OpenEditorsDelegate.COEFFICIENT * SidebarPart.getFontSize(); ++ return itemsToShow * FONT.sidebarSize22; } -@@ -581,6 +582,6 @@ class OpenEditorsDelegate implements IListVirtualDelegate { + class VirtualDelegate implements IListVirtualDelegate { +- getHeight() { return 20; } ++ getHeight() { return FONT.sidebarSize20; } + getTemplateId(element: ExplorerItem): string { return 'default'; } +diff --git a/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts b/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts +index 0176fb6..140cda1 100644 +--- a/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts ++++ b/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts +@@ -54,2 +54,3 @@ import type { IManagedHover } from '../../../../base/browser/ui/hover/hover.js'; + import { IHoverService } from '../../../../platform/hover/browser/hover.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -101,4 +102,2 @@ export class VirtualDelegate implements IListVirtualDelegate { + +- static LINE_HEIGHT: number = 22; +- + constructor(private readonly markersViewState: MarkersViewModel) { } +@@ -109,5 +108,5 @@ export class VirtualDelegate implements IListVirtualDelegate { + const noOfLines = !viewModel || viewModel.multiline ? element.lines.length : 1; +- return noOfLines * VirtualDelegate.LINE_HEIGHT; ++ return noOfLines * FONT.sidebarSize22; + } +- return VirtualDelegate.LINE_HEIGHT; ++ return FONT.sidebarSize22; + } +@@ -377,3 +376,3 @@ class MarkerWidget extends Disposable { + if (lines[index] === '') { +- lineElement.style.height = `${VirtualDelegate.LINE_HEIGHT}px`; ++ lineElement.style.height = `${FONT.sidebarSize22}px`; + } +diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariablesTree.ts b/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariablesTree.ts +index 4c95a37..fcb18e0 100644 +--- a/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariablesTree.ts ++++ b/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariablesTree.ts +@@ -10,2 +10,3 @@ import { ITreeNode, ITreeRenderer } from '../../../../../../base/browser/ui/tree + import { FuzzyScore } from '../../../../../../base/common/filters.js'; ++import { FONT } from '../../../../../../base/common/font.js'; + import { DisposableStore } from '../../../../../../base/common/lifecycle.js'; +@@ -29,3 +30,3 @@ export class NotebookVariablesDelegate implements IListVirtualDelegate { + getHeight(element: SettingsTreeElement): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/processExplorer/browser/processExplorerControl.ts b/src/vs/workbench/contrib/processExplorer/browser/processExplorerControl.ts +index b54812a..05e5f75 100644 +--- a/src/vs/workbench/contrib/processExplorer/browser/processExplorerControl.ts ++++ b/src/vs/workbench/contrib/processExplorer/browser/processExplorerControl.ts +@@ -35,2 +35,3 @@ import { Schemas } from '../../../../base/common/network.js'; + import { isWeb } from '../../../../base/common/platform.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -75,3 +76,3 @@ class ProcessListDelegate implements IListVirtualDelegate { + getHeight(element: IHelpItem): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/scm/browser/media/scm.css b/src/vs/workbench/contrib/scm/browser/media/scm.css +index 20c78c3..eb5a61d 100644 +--- a/src/vs/workbench/contrib/scm/browser/media/scm.css ++++ b/src/vs/workbench/contrib/scm/browser/media/scm.css +@@ -799 +799,207 @@ + } ++ ++.monaco-workbench .part.sidebar .scm-view .monaco-tl-contents > div, .monaco-workbench .part.auxiliarybar .scm-view .monaco-tl-contents > div { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} ++.monaco-workbench .part.sidebar .scm-view .count, .monaco-workbench .part.auxiliarybar .scm-view .count { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-provider > .codicon, .monaco-workbench .part.auxiliarybar .scm-view .scm-provider > .codicon { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-provider > .actions, .monaco-workbench .part.auxiliarybar .scm-view .scm-provider > .actions { ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 1.846154) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item, .monaco-workbench .part.auxiliarybar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item.scm-status-bar-action, .monaco-workbench .part.auxiliarybar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item.scm-status-bar-action { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .action-label > span:not(.codicon), .monaco-workbench .part.auxiliarybar .action-label > span:not(.codicon) { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item > .action-label, .monaco-workbench .part.sidebar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item > .monaco-dropdown > .dropdown-label > .action-label, .monaco-workbench .part.auxiliarybar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item > .action-label, .monaco-workbench .part.auxiliarybar .scm-view .scm-provider > .actions > .monaco-toolbar > .monaco-action-bar > .actions-container > .action-item > .monaco-dropdown > .dropdown-label > .action-label { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .monaco-icon-label-container, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .monaco-icon-label-container { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .monaco-tl-twistie:not(.collapsed) + .monaco-tl-contents > .history-item > .graph-container > svg > path:last-of-type, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .monaco-tl-twistie:not(.collapsed) + .monaco-tl-contents > .history-item > .graph-container > svg > path:last-of-type { ++ stroke-width: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .graph-container, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .graph-container { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ gap: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container > .label, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container > .label { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container > .label > .count, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container > .label > .count { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077); ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon.codicon-git-branch, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon.codicon-git-branch { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container > .label > .description, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container > .label > .description { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 7.692308) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item .monaco-icon-label .icon-container, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item .monaco-icon-label .icon-container { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item .monaco-icon-label .avatar, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item .monaco-icon-label .avatar { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .actions, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .actions { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .resource > .name > .monaco-icon-label::after, .monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item-change > .label-container > .monaco-icon-label::after, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .resource > .name > .monaco-icon-label::after, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item-change > .label-container > .monaco-icon-label::after { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .resource > .decoration-icon, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .resource > .decoration-icon { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .resource > .decoration-icon.codicon, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .resource > .decoration-icon.codicon { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .actions .action-label, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .actions .action-label { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-input, .monaco-workbench .part.auxiliarybar .scm-view .scm-input { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-input .scm-editor .scm-editor-toolbar, .monaco-workbench .part.auxiliarybar .scm-view .scm-input .scm-editor .scm-editor-toolbar { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-input .scm-editor .scm-editor-toolbar.scroll-decoration, .monaco-workbench .part.auxiliarybar .scm-view .scm-input .scm-editor .scm-editor-toolbar.scroll-decoration { ++ box-shadow: var(--vscode-scrollbar-shadow) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) calc(var(--vscode-workbench-sidebar-font-size) * -0.461538) inset ++} ++.monaco-workbench .part.sidebar .scm-view .button-container, .monaco-workbench .part.auxiliarybar .scm-view .button-container { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .scm-view .button-container .codicon.codicon-cloud-upload, .monaco-workbench .part.sidebar .scm-view .button-container .codicon.codicon-sync, .monaco-workbench .part.auxiliarybar .scm-view .button-container .codicon.codicon-cloud-upload, .monaco-workbench .part.auxiliarybar .scm-view .button-container .codicon.codicon-sync { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) 0 0 ++} ++.monaco-workbench .part.sidebar .scm-view .button-container .codicon.codicon-arrow-up, .monaco-workbench .part.sidebar .scm-view .button-container .codicon.codicon-arrow-down, .monaco-workbench .part.auxiliarybar .scm-view .button-container .codicon.codicon-arrow-up, .monaco-workbench .part.auxiliarybar .scm-view .button-container .codicon.codicon-arrow-down { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) 0 0 ++} ++.monaco-workbench .part.sidebar .scm-view .button-container > .monaco-button-dropdown > .monaco-dropdown-button, .monaco-workbench .part.auxiliarybar .scm-view .button-container > .monaco-button-dropdown > .monaco-dropdown-button { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .part.panel .scm-view .scm-editor-container, .monaco-workbench .part.auxiliarybar .part.panel .scm-view .scm-editor-container { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-panelInput-border) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.sidebar .part.panel .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.auxiliarybar .part.panel .scm-view .scm-editor.synthetic-focus { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-focusBorder); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-editor.validation-info, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.validation-info { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-inputValidation-infoBorder); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-editor.validation-warning, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.validation-warning { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-inputValidation-warningBorder); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .scm-view .scm-editor.validation-error, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.validation-error { ++ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-inputValidation-errorBorder); ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .scm-editor-validation-container, .monaco-workbench .part.auxiliarybar .scm-editor-validation-container { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .scm-editor-validation, .monaco-workbench .part.auxiliarybar .scm-editor-validation { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .scm-editor-validation-actions, .monaco-workbench .part.auxiliarybar .scm-editor-validation-actions { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .scm-repositories-view .scm-artifact-group, .monaco-workbench .part.sidebar .scm-repositories-view .scm-artifact, .monaco-workbench .part.auxiliarybar .scm-repositories-view .scm-artifact-group, .monaco-workbench .part.auxiliarybar .scm-repositories-view .scm-artifact { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .icon, .monaco-workbench .part.auxiliarybar .icon { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .scm-repositories-view .scm-artifact .timestamp-container, .monaco-workbench .part.auxiliarybar .scm-repositories-view .scm-artifact .timestamp-container { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846); ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .scm-repositories-view .scm-artifact .timestamp-container.duplicate, .monaco-workbench .part.auxiliarybar .scm-repositories-view .scm-artifact .timestamp-container.duplicate { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown:first-child > p, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown:first-child > p { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown:last-child p, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown:last-child p { ++ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown:last-child p span:not(.codicon), .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown:last-child p span:not(.codicon) { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) 0 ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown hr, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown hr { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown > p, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container > .rendered-markdown > p { ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) 0 ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container div:nth-of-type(3):nth-last-of-type(2) > p, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container div:nth-of-type(3):nth-last-of-type(2) > p { ++ gap: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-git-branch, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-git-branch { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077); ++ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-tag, .monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-target, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-tag, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-target { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); ++ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-cloud, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-cloud { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); ++ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++} ++.monaco-workbench .part.sidebar .pane-header .scm-graph-view-badge-container > .scm-graph-view-badge.monaco-count-badge.long, .monaco-workbench .part.auxiliarybar .pane-header .scm-graph-view-badge-container > .scm-graph-view-badge.monaco-count-badge.long { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .monaco-toolbar .action-item > .action-label.scm-graph-repository-picker, .monaco-workbench .part.sidebar .monaco-toolbar .action-item > .action-label.scm-graph-history-item-picker, .monaco-workbench .part.auxiliarybar .monaco-toolbar .action-item > .action-label.scm-graph-repository-picker, .monaco-workbench .part.auxiliarybar .monaco-toolbar .action-item > .action-label.scm-graph-history-item-picker { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .monaco-toolbar .action-label.scm-graph-repository-picker > .name, .monaco-workbench .part.sidebar .monaco-toolbar .action-label.scm-graph-history-item-picker > .name, .monaco-workbench .part.auxiliarybar .monaco-toolbar .action-label.scm-graph-repository-picker > .name, .monaco-workbench .part.auxiliarybar .monaco-toolbar .action-label.scm-graph-history-item-picker > .name { ++ max-width: calc(var(--vscode-workbench-sidebar-font-size) * 7.692308); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .scm-history-view .scm-provider .state-label.monaco-count-badge.long, .monaco-workbench .part.auxiliarybar .scm-history-view .scm-provider .state-label.monaco-count-badge.long { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} ++.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item-change > .graph-placeholder, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item-change > .graph-placeholder { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .scm-history-view .history-item-load-more, .monaco-workbench .part.auxiliarybar .scm-history-view .history-item-load-more { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .scm-history-view .history-item-load-more .history-item-placeholder .monaco-highlighted-label .codicon, .monaco-workbench .part.auxiliarybar .scm-history-view .history-item-load-more .history-item-placeholder .monaco-highlighted-label .codicon { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} ++.monaco-workbench .part.sidebar .scm-history-view .history-item-load-more .history-item-placeholder.shimmer, .monaco-workbench .part.auxiliarybar .scm-history-view .history-item-load-more .history-item-placeholder.shimmer { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) 0 ++} ++.monaco-workbench .part.sidebar .scm-history-view .history-item-load-more .history-item-placeholder.shimmer .monaco-icon-label-container, .monaco-workbench .part.auxiliarybar .scm-history-view .history-item-load-more .history-item-placeholder.shimmer .monaco-icon-label-container { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/contrib/scm/browser/scmHistoryViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmHistoryViewPane.ts +index ab1900f..5ea8f3c 100644 +--- a/src/vs/workbench/contrib/scm/browser/scmHistoryViewPane.ts ++++ b/src/vs/workbench/contrib/scm/browser/scmHistoryViewPane.ts +@@ -77,2 +77,3 @@ import { IMarkdownRendererService } from '../../../../platform/markdown/browser/ + import { MarkdownString } from '../../../../base/common/htmlContent.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -412,3 +413,3 @@ class ListDelegate implements IListVirtualDelegate { + getHeight(): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts +index 1523a82..fe78847 100644 +--- a/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts ++++ b/src/vs/workbench/contrib/scm/browser/scmRepositoriesViewPane.ts +@@ -49,2 +49,3 @@ import { IActionViewItemProvider } from '../../../../base/browser/ui/actionbar/a + import { fromNow } from '../../../../base/common/date.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -55,3 +56,3 @@ class ListDelegate implements IListVirtualDelegate { + getHeight(): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +index dd3439f..2120b2f 100644 +--- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts ++++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +@@ -113,2 +113,3 @@ import product from '../../../../platform/product/common/product.js'; + import { CHAT_SETUP_SUPPORT_ANONYMOUS_ACTION_ID } from '../../chat/browser/actions/chatActions.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -179,4 +180,2 @@ interface ActionButtonTemplate { + export class ActionButtonRenderer implements ICompressibleTreeRenderer { +- static readonly DEFAULT_HEIGHT = 28; +- + static readonly TEMPLATE_ID = 'actionButton'; +@@ -715,5 +714,5 @@ class ListDelegate implements IListVirtualDelegate { + } else if (isSCMActionButton(element)) { +- return ActionButtonRenderer.DEFAULT_HEIGHT + 8; ++ return FONT.sidebarSize28 + 8; + } else { +- return 22; ++ return FONT.sidebarSize22; + } +@@ -2171,4 +2170,4 @@ class SCMInputWidget { + return this.toolbar.dropdownActions.length === 0 ? +- 26 /* 22px action + 4px margin */ : +- 39 /* 35px action + 4px margin */; ++ FONT.sidebarSize26 /* 22px action + 4px margin */ : ++ FONT.sidebarSize39 /* 35px action + 4px margin */; + } +diff --git a/src/vs/workbench/contrib/search/browser/media/searchview.css b/src/vs/workbench/contrib/search/browser/media/searchview.css +index e493fe3..647d2e6 100644 +--- a/src/vs/workbench/contrib/search/browser/media/searchview.css ++++ b/src/vs/workbench/contrib/search/browser/media/searchview.css +@@ -443 +443,110 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar .search-view .search-widgets-container, .monaco-workbench .part.auxiliarybar .search-view .search-widgets-container { ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0) calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.153846); ++ padding-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538); ++ padding-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .search-view .search-widget .toggle-replace-button, .monaco-workbench .part.auxiliarybar .search-view .search-widget .toggle-replace-button { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .search-view .search-widget .search-container, .monaco-workbench .part.sidebar .search-view .search-widget .replace-container, .monaco-workbench .part.auxiliarybar .search-view .search-widget .search-container, .monaco-workbench .part.auxiliarybar .search-view .search-widget .replace-container { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615) ++} ++.monaco-workbench .part.sidebar .search-view .search-widget .monaco-inputbox > .ibwrapper > .mirror, .monaco-workbench .part.sidebar .search-view .search-widget .monaco-inputbox > .ibwrapper > textarea.input, .monaco-workbench .part.auxiliarybar .search-view .search-widget .monaco-inputbox > .ibwrapper > .mirror, .monaco-workbench .part.auxiliarybar .search-view .search-widget .monaco-inputbox > .ibwrapper > textarea.input { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) calc(var(--vscode-workbench-sidebar-font-size) * 0) calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .search-view .search-widget .monaco-inputbox > .ibwrapper > textarea.input, .monaco-workbench .part.auxiliarybar .search-view .search-widget .monaco-inputbox > .ibwrapper > textarea.input { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.846153) ++} ++.monaco-workbench .part.sidebar .search-view .search-widget .replace-container, .monaco-workbench .part.auxiliarybar .search-view .search-widget .replace-container { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .search-view .search-widget .replace-input > .controls, .monaco-workbench .part.auxiliarybar .search-view .search-widget .replace-input > .controls { ++ top: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769); ++ right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .search-view .search-widget .replace-container .monaco-action-bar, .monaco-workbench .part.auxiliarybar .search-view .search-widget .replace-container .monaco-action-bar { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.923077); ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .search-view .query-details, .monaco-workbench .part.auxiliarybar .search-view .query-details { ++ margin: 0 0 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.384615) ++} ++.monaco-workbench .part.sidebar .search-view .query-details .more, .monaco-workbench .part.auxiliarybar .search-view .query-details .more { ++ right: calc(var(--vscode-workbench-sidebar-font-size) * -0.153846); ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.923077); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar .search-view .query-details .file-types > .monaco-inputbox, .monaco-workbench .part.auxiliarybar .search-view .query-details .file-types > .monaco-inputbox { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.923077) ++} ++.monaco-workbench .part.sidebar .search-view .query-details.more .file-types:last-child, .monaco-workbench .part.auxiliarybar .search-view .query-details.more .file-types:last-child { ++ padding-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .search-view .query-details.more h4, .monaco-workbench .part.auxiliarybar .search-view .query-details.more h4 { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) 0 0; ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} ++.monaco-workbench .part.sidebar .search-view .messages, .monaco-workbench .part.auxiliarybar .search-view .messages { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * -0.384615) ++} ++.monaco-workbench .part.sidebar .search-view .message, .monaco-workbench .part.auxiliarybar .search-view .message { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .search-view .message.ai-keywords, .monaco-workbench .part.auxiliarybar .search-view .message.ai-keywords { ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) calc(var(--vscode-workbench-sidebar-font-size) * 0.615385); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0) ++} ++.monaco-workbench .part.sidebar .search-view .message p:first-child, .monaco-workbench .part.auxiliarybar .search-view .message p:first-child { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0); ++ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0); ++ padding-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .search-view .message .keyword-refresh, .monaco-workbench .part.auxiliarybar .search-view .message .keyword-refresh { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .search-view .foldermatch, .monaco-workbench .part.sidebar .search-view .filematch, .monaco-workbench .part.auxiliarybar .search-view .foldermatch, .monaco-workbench .part.auxiliarybar .search-view .filematch { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .search-view .textsearchresult, .monaco-workbench .part.auxiliarybar .search-view .textsearchresult { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .search-view .textsearchresult .monaco-icon-label .codicon, .monaco-workbench .part.auxiliarybar .search-view .textsearchresult .monaco-icon-label .codicon { ++ top: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .pane-body.wide .search-view .foldermatch .badge, .monaco-workbench .part.sidebar .pane-body.wide .search-view .filematch .badge, .monaco-workbench .part.auxiliarybar .pane-body.wide .search-view .foldermatch .badge, .monaco-workbench .part.auxiliarybar .pane-body.wide .search-view .filematch .badge { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} ++.monaco-workbench .part.sidebar .search-view .linematch, .monaco-workbench .part.auxiliarybar .search-view .linematch { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692308) ++} ++.monaco-workbench .part.sidebar .search-view .linematch .matchLineNum, .monaco-workbench .part.auxiliarybar .search-view .linematch .matchLineNum { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.538462); ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .search-view .monaco-list .monaco-list-row .monaco-action-bar .action-label, .monaco-workbench .part.auxiliarybar .search-view .monaco-list .monaco-list-row .monaco-action-bar .action-label { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench.hc-black .part.sidebar .search-view .monaco-list .monaco-list-row .monaco-action-bar .action-label, .monaco-workbench.hc-light .part.sidebar .search-view .monaco-list .monaco-list-row .monaco-action-bar .action-label, .monaco-workbench.hc-black .part.auxiliarybar .search-view .monaco-list .monaco-list-row .monaco-action-bar .action-label, .monaco-workbench.hc-light .part.auxiliarybar .search-view .monaco-list .monaco-list-row .monaco-action-bar .action-label { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .search-view .monaco-count-badge, .monaco-workbench .part.auxiliarybar .search-view .monaco-count-badge { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} ++.monaco-workbench.hc-black .part.sidebar .search-view .foldermatch, .monaco-workbench.hc-black .part.sidebar .search-view .filematch, .monaco-workbench.hc-black .part.sidebar .search-view .linematch, .monaco-workbench.hc-light .part.sidebar .search-view .foldermatch, .monaco-workbench.hc-light .part.sidebar .search-view .filematch, .monaco-workbench.hc-light .part.sidebar .search-view .linematch, .monaco-workbench.hc-black .part.auxiliarybar .search-view .foldermatch, .monaco-workbench.hc-black .part.auxiliarybar .search-view .filematch, .monaco-workbench.hc-black .part.auxiliarybar .search-view .linematch, .monaco-workbench.hc-light .part.auxiliarybar .search-view .foldermatch, .monaco-workbench.hc-light .part.auxiliarybar .search-view .filematch, .monaco-workbench.hc-light .part.auxiliarybar .search-view .linematch { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} ++.monaco-workbench .part.sidebar .text-search-provider-messages .providerMessage, .monaco-workbench .part.auxiliarybar .text-search-provider-messages .providerMessage { ++ padding-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .text-search-provider-messages .providerMessage .codicon, .monaco-workbench .part.auxiliarybar .text-search-provider-messages .providerMessage .codicon { ++ top: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar .search-container .find-filter-button, .monaco-workbench .part.auxiliarybar .search-container .find-filter-button { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} +\ No newline at end of file diff --git a/src/vs/workbench/contrib/search/browser/searchResultsView.ts b/src/vs/workbench/contrib/search/browser/searchResultsView.ts -index 62d5db9..e05aa2a 100644 +index 62d5db9..f86dba1 100644 --- a/src/vs/workbench/contrib/search/browser/searchResultsView.ts +++ b/src/vs/workbench/contrib/search/browser/searchResultsView.ts @@ -36,2 +36,3 @@ import { ISearchTreeMatch, isSearchTreeMatch, RenderableMatch, ITextSearchHeadin import { isSearchTreeAIFileMatch } from './AISearch/aiSearchModelBase.js'; -+import { SidebarPart } from '../../../browser/parts/sidebar/sidebarPart.js'; ++import { FONT } from '../../../../base/common/font.js'; -@@ -77,6 +78,6 @@ export class SearchDelegate implements IListVirtualDelegate { +@@ -77,6 +78,8 @@ export class SearchDelegate implements IListVirtualDelegate { - public static ITEM_HEIGHT = 22; -+ static readonly COEFFICIENT = 22 / 13; ++ static getHeight(): number { ++ return FONT.sidebarSize22; ++ } getHeight(element: RenderableMatch): number { - return SearchDelegate.ITEM_HEIGHT; -+ return SidebarPart.getFontSize() * SearchDelegate.COEFFICIENT; ++ return FONT.sidebarSize22; } +diff --git a/src/vs/workbench/contrib/search/browser/searchView.ts b/src/vs/workbench/contrib/search/browser/searchView.ts +index fb52bbb..09ca311 100644 +--- a/src/vs/workbench/contrib/search/browser/searchView.ts ++++ b/src/vs/workbench/contrib/search/browser/searchView.ts +@@ -87,2 +87,3 @@ import { ITelemetryService } from '../../../../platform/telemetry/common/telemet + import { forcedExpandRecursively } from './searchActionsTopBar.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -126,2 +127,3 @@ const SEARCH_CANCELLED_MESSAGE = nls.localize('searchCanceled', "Search was canc + const DEBOUNCE_DELAY = 75; ++ + export class SearchView extends ViewPane { +@@ -963,3 +965,3 @@ export class SearchView extends ViewPane { + overrideStyles: this.getLocationBasedColors().listOverrideStyles, +- paddingBottom: SearchDelegate.ITEM_HEIGHT, ++ paddingBottom: SearchDelegate.getHeight(), + collapseByDefault: (e: RenderableMatch) => { +@@ -1341,6 +1343,6 @@ export class SearchView extends ViewPane { + +- this.searchWidget.setWidth(this.size.width - 28 /* container margin */); ++ this.searchWidget.setWidth(this.size.width - FONT.sidebarSize28); + +- this.inputPatternExcludes.setWidth(this.size.width - 28 /* container margin */); +- this.inputPatternIncludes.setWidth(this.size.width - 28 /* container margin */); ++ this.inputPatternExcludes.setWidth(this.size.width - FONT.sidebarSize28); ++ this.inputPatternIncludes.setWidth(this.size.width - FONT.sidebarSize28); + +@@ -1348,3 +1350,3 @@ export class SearchView extends ViewPane { + const messagesHeight = dom.getTotalHeight(this.messagesElement); +- this.tree.layout(this.size.height - widgetHeight - messagesHeight, this.size.width - 28); ++ this.tree.layout(this.size.height - widgetHeight - messagesHeight, this.size.width - FONT.sidebarSize28); + } +diff --git a/src/vs/workbench/contrib/search/browser/searchWidget.ts b/src/vs/workbench/contrib/search/browser/searchWidget.ts +index e9c0fcd..7ee6d39 100644 +--- a/src/vs/workbench/contrib/search/browser/searchWidget.ts ++++ b/src/vs/workbench/contrib/search/browser/searchWidget.ts +@@ -47,2 +47,3 @@ import { IDisposable, MutableDisposable } from '../../../../base/common/lifecycl + import { NotebookFindScopeType } from '../../notebook/common/notebookCommon.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -113,3 +114,2 @@ function stopPropagationForMultiLineDownwards(event: IKeyboardEvent, value: stri + +- + export class SearchWidget extends Widget { +@@ -316,3 +316,3 @@ export class SearchWidget extends Widget { + if (this.replaceInput) { +- this.replaceInput.width = width - 28; ++ this.replaceInput.width = width - FONT.sidebarSize28; + this.replaceInput.inputBox.layout(); +diff --git a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts b/src/vs/workbench/contrib/testing/browser/testCoverageView.ts +index e19fc27..56e4bbc 100644 +--- a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts ++++ b/src/vs/workbench/contrib/testing/browser/testCoverageView.ts +@@ -16,2 +16,3 @@ import { memoize } from '../../../../base/common/decorators.js'; + import { FuzzyScore, createMatches } from '../../../../base/common/filters.js'; ++import { FONT } from '../../../../base/common/font.js'; + import { Iterable } from '../../../../base/common/iterator.js'; +@@ -429,3 +430,3 @@ class TestCoverageTreeListDelegate implements IListVirtualDelegate { + getHeight(element: TestExplorerTreeElement) { +- return element instanceof TestTreeErrorMessage ? 17 + 10 : 22; ++ return element instanceof TestTreeErrorMessage ? FONT.sidebarSize17 + 10 : FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/timeline/browser/timelinePane.ts b/src/vs/workbench/contrib/timeline/browser/timelinePane.ts +index c7c9cc7..84510c2 100644 +--- a/src/vs/workbench/contrib/timeline/browser/timelinePane.ts ++++ b/src/vs/workbench/contrib/timeline/browser/timelinePane.ts +@@ -59,4 +59,3 @@ import { IHoverService, WorkbenchHoverDelegate } from '../../../../platform/hove + import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js'; +- +-const ItemHeight = 22; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -330,3 +329,3 @@ export class TimelinePane extends ViewPane { + // If we are paging when scrolling, then add an extra item to the end to make sure the "Load more" item is out of view +- pageSize = Math.max(20, Math.floor((this.tree?.renderHeight ?? 0 / ItemHeight) + (this.pageOnScroll ? 1 : -1))); ++ pageSize = Math.max(20, Math.floor((this.tree?.renderHeight ?? 0 / FONT.sidebarSize22) + (this.pageOnScroll ? 1 : -1))); + } +@@ -1147,3 +1146,3 @@ export class TimelineListVirtualDelegate implements IListVirtualDelegate { + getHeight(_element: Type): number { +- return 22; ++ return FONT.sidebarSize22; + } +diff --git a/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts b/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts +index 34b8408..f8a72d9 100644 +--- a/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts ++++ b/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts +@@ -49,3 +49,2 @@ import { AgentSessionsControl, IAgentSessionsControlOptions } from '../../chat/b + import { AgentSessionsFilter } from '../../chat/browser/agentSessions/agentSessionsFilter.js'; +-import { AgentSessionsListDelegate } from '../../chat/browser/agentSessions/agentSessionsViewer.js'; + import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js'; +@@ -62,2 +61,3 @@ import { toErrorMessage } from '../../../../base/common/errorMessage.js'; + import { ILogService } from '../../../../platform/log/common/log.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -825,3 +825,3 @@ export class AgentSessionsWelcomePage extends EditorPane { + ); +- const sessionsHeight = visibleSessions * AgentSessionsListDelegate.ITEM_HEIGHT; ++ const sessionsHeight = visibleSessions * FONT.sidebarSize22; + this.sessionsControl.layout(sessionsHeight, sessionsWidth); +@@ -830,3 +830,3 @@ export class AgentSessionsWelcomePage extends EditorPane { + // Visual height = ceil(n/2) * ITEM_HEIGHT, so offset = floor(n/2) * ITEM_HEIGHT +- const marginOffset = Math.floor(visibleSessions / 2) * AgentSessionsListDelegate.ITEM_HEIGHT; ++ const marginOffset = Math.floor(visibleSessions / 2) * FONT.sidebarSize22; + this.sessionsControl.element!.style.marginBottom = `-${marginOffset}px`; From ff5eff419c6e8aa1bec34f1a72e894c73a873ba9 Mon Sep 17 00:00:00 2001 From: xiaolai Date: Fri, 20 Feb 2026 10:18:29 +0800 Subject: [PATCH 10/22] fix: address review feedback for sidebar font size - Fix CSS variable name mismatch in auxiliaryBarPart.css (was reading --vscode-workbench-secondary-sidebar-font-size while TS sets --vscode-workbench-sidebar-font-size) - Add line-height and title h2 scaling for auxiliary bar - Add composite bar tab font size scaling (paneCompositePart.css) - Update setting description to reflect both sidebars --- patches/feat-sidebar-font-size.patch | 59 ++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/patches/feat-sidebar-font-size.patch b/patches/feat-sidebar-font-size.patch index 278692f..b4e52da 100644 --- a/patches/feat-sidebar-font-size.patch +++ b/patches/feat-sidebar-font-size.patch @@ -423,13 +423,66 @@ diff --git a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart. index aec3de2..e582843 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +++ b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css -@@ -28,2 +28,6 @@ +@@ -28,2 +28,11 @@ +.monaco-workbench .part.auxiliarybar > .content { -+ font-size: var(--vscode-workbench-secondary-sidebar-font-size, 13px); ++ font-size: var(--vscode-workbench-sidebar-font-size, 13px); ++ line-height: 1.4em; ++} ++ ++.monaco-workbench .part.auxiliarybar > .title > .title-label h2 { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); +} + .monaco-workbench .part.auxiliarybar > .title > .title-label { +diff --git a/src/vs/workbench/browser/parts/media/paneCompositePart.css b/src/vs/workbench/browser/parts/media/paneCompositePart.css +index fe0f2ad..0000000 100644 +--- a/src/vs/workbench/browser/parts/media/paneCompositePart.css ++++ b/src/vs/workbench/browser/parts/media/paneCompositePart.css +@@ -369 +369,49 @@ + } ++ ++ ++ ++.monaco-workbench .part.sidebar > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item, .monaco-workbench .part.sidebar > .title.has-composite-bar > .global-actions .monaco-action-bar .action-item, .monaco-workbench .part.sidebar > .title.has-composite-bar > .global-actions-left .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .title.has-composite-bar > .global-actions .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .title.has-composite-bar > .global-actions-left .monaco-action-bar .action-item { ++ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar, .monaco-workbench .part.sidebar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar, .monaco-workbench .part.auxiliarybar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar, .monaco-workbench .part.auxiliarybar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 2.076923) ++} ++.monaco-workbench .part.sidebar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item, .monaco-workbench .part.sidebar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231); ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ padding-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846); ++ padding-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon, .monaco-workbench .part.sidebar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon, .monaco-workbench .part.auxiliarybar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon, .monaco-workbench .part.auxiliarybar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon { ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 2.692308); ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++} ++.monaco-workbench .part.sidebar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon .action-label:not(.codicon), .monaco-workbench .part.sidebar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon .action-label:not(.codicon), .monaco-workbench .part.auxiliarybar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon .action-label:not(.codicon), .monaco-workbench .part.auxiliarybar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item.icon .action-label:not(.codicon) { ++ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) ++} ++.monaco-workbench .part.sidebar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item .action-label, .monaco-workbench .part.sidebar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item .action-label, .monaco-workbench .part.auxiliarybar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item .action-label, .monaco-workbench .part.auxiliarybar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item .action-label { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .badge .badge-content, .monaco-workbench .part.sidebar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .badge .badge-content, .monaco-workbench .part.auxiliarybar > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .badge .badge-content, .monaco-workbench .part.auxiliarybar > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .badge .badge-content { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) calc(var(--vscode-workbench-sidebar-font-size) * 0.384615); ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231); ++ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) ++} ++.monaco-workbench .part.sidebar > .header-or-footer, .monaco-workbench .part.auxiliarybar > .header-or-footer { ++ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} ++.monaco-workbench .part.sidebar .empty-pane-message-area .empty-pane-message, .monaco-workbench .part.auxiliarybar .empty-pane-message-area .empty-pane-message { ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} +\ No newline at end of file diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css index decb51a..7088a97 100644 --- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css @@ -658,7 +711,7 @@ index b1c5637..3bcdefb 100644 + 'default': 13, + 'minimum': 6, + 'maximum': 32, -+ 'markdownDescription': localize('sideBarFontSize', "Controls the font size used for content inside the primary side bar."), ++ 'markdownDescription': localize('sideBarFontSize', "Controls the font size used for content inside the side bars."), + 'tags': ['accessibility', 'experimental'] + }, 'workbench.panel.showLabels': { From ccf4d751c82ac1859ed30a993a6c650d25c7f91e Mon Sep 17 00:00:00 2001 From: xiaolai Date: Sat, 21 Feb 2026 11:18:43 +0800 Subject: [PATCH 11/22] feat: add patches for per-area font customization Three new patches extending workbench font customization to all areas: - feat-workbench-zz-area-font-family: fontFamily for sidebar, statusbar, tabs, panel, activitybar + global fontSize setting - feat-workbench-zz-area-font-size-core: fontSize for statusbar, activitybar, panel with proportional scaling via FONT object - feat-workbench-zz-area-font-size-tabs: fontSize for tabs with CSS variable scaling for tab heights and widths Includes fixes from audit review: - Fix stale CSS var when fontSize reverts to default (cache isUserSet) - Fix else-if config listener blocking simultaneous updates - Trigger grid relayout after statusbar font-size change - Apply activitybar font before show() for correct initial sizing - Trigger tab relayout after font-size change - Standardize CSS fallback chains to include global font-size - Extract inspectFontSize() helper to reduce duplication - Replace magic 1.833333 ratio with explicit CSS height variable --- .../feat-workbench-zz-area-font-family.patch | 477 +++++++++ ...eat-workbench-zz-area-font-size-core.patch | 917 ++++++++++++++++++ ...eat-workbench-zz-area-font-size-tabs.patch | 223 +++++ 3 files changed, 1617 insertions(+) create mode 100644 patches/feat-workbench-zz-area-font-family.patch create mode 100644 patches/feat-workbench-zz-area-font-size-core.patch create mode 100644 patches/feat-workbench-zz-area-font-size-tabs.patch diff --git a/patches/feat-workbench-zz-area-font-family.patch b/patches/feat-workbench-zz-area-font-family.patch new file mode 100644 index 0000000..574afad --- /dev/null +++ b/patches/feat-workbench-zz-area-font-family.patch @@ -0,0 +1,477 @@ +diff --git a/src/vs/workbench/browser/media/style.css b/src/vs/workbench/browser/media/style.css +index 473c1f8..57ad58c 100644 +--- a/src/vs/workbench/browser/media/style.css ++++ b/src/vs/workbench/browser/media/style.css +@@ -54,6 +54,7 @@ body { + overflow: hidden; + color: var(--vscode-foreground); + font-family: var(--vscode-workbench-font-family, var(--monaco-font)); ++ font-size: var(--vscode-workbench-font-size, 13px); + } + + .monaco-workbench.web { +diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +index 080b687..cbd14af 100644 +--- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts ++++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +@@ -38,6 +38,7 @@ import { IExtensionService } from '../../../services/extensions/common/extension + import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; + import { IViewsService } from '../../../services/views/common/viewsService.js'; + import { SwitchCompositeViewAction } from '../compositeBarActions.js'; ++import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; + + export class ActivitybarPart extends Part { + +@@ -65,8 +66,15 @@ export class ActivitybarPart extends Part { + @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, + @IThemeService themeService: IThemeService, + @IStorageService storageService: IStorageService, ++ @IConfigurationService private readonly configurationService: IConfigurationService, + ) { + super(Parts.ACTIVITYBAR_PART, { hasTitle: false }, themeService, storageService, layoutService); ++ ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.activityBar.experimental.fontFamily')) { ++ this.applyActivityBarFontFamily(); ++ } ++ })); + } + + private createCompositeBar(): PaneCompositeBar { +@@ -107,9 +115,24 @@ export class ActivitybarPart extends Part { + this.show(); + } + ++ this.applyActivityBarFontFamily(parent); ++ + return this.content; + } + ++ private applyActivityBarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ const family = this.configurationService.getValue('workbench.activityBar.experimental.fontFamily'); ++ if (family) { ++ target.style.setProperty('--vscode-workbench-activitybar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-activitybar-font-family'); ++ } ++ } ++ + getPinnedPaneCompositeIds(): string[] { + return this.compositeBar.value?.getPinnedPaneCompositeIds() ?? []; + } +diff --git a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css +index abe1427..7cd25d0 100644 +--- a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css ++++ b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css +@@ -6,6 +6,7 @@ + .monaco-workbench .part.activitybar { + width: 48px; + height: 100%; ++ font-family: var(--vscode-workbench-activitybar-font-family, inherit); + } + + .monaco-workbench .activitybar.bordered::before { +diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +index d3fa112..31d8df8 100644 +--- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts ++++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +@@ -137,6 +137,9 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { + if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { + this.applyAuxiliaryBarFontSize(); + } ++ if (e.affectsConfiguration('workbench.sideBar.experimental.fontFamily')) { ++ this.applyAuxiliaryBarFontFamily(); ++ } + })); + } + +@@ -178,6 +181,20 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { + container.style.borderRightWidth = borderColor && isPositionLeft ? '1px' : '0px'; + + this.applyAuxiliaryBarFontSize(container); ++ this.applyAuxiliaryBarFontFamily(container); ++ } ++ ++ private applyAuxiliaryBarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ const family = this.configurationService.getValue('workbench.sideBar.experimental.fontFamily'); ++ if (family) { ++ target.style.setProperty('--vscode-workbench-sidebar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-sidebar-font-family'); ++ } + } + + protected getCompositeBarOptions(): IPaneCompositeBarOptions { +diff --git a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +index 6ec40df..398bbe1 100644 +--- a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css ++++ b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +@@ -28,6 +28,7 @@ + + .monaco-workbench .part.auxiliarybar > .content { + font-size: var(--vscode-workbench-sidebar-font-size, 13px); ++ font-family: var(--vscode-workbench-sidebar-font-family, inherit); + line-height: 1.4em; + } + +diff --git a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts +index b0a44e2..a946cb7 100644 +--- a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts ++++ b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts +@@ -46,6 +46,7 @@ import { ServiceCollection } from '../../../../platform/instantiation/common/ser + import { IBaseActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; + import { MarkdownString } from '../../../../base/common/htmlContent.js'; + import { IManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; ++import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; + import { applyDragImage } from '../../../../base/browser/ui/dnd/dnd.js'; + + export class EditorCommandsContextActionRunner extends ActionRunner { +@@ -140,6 +141,7 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + @IThemeService themeService: IThemeService, + @IEditorResolverService private readonly editorResolverService: IEditorResolverService, + @IHostService private readonly hostService: IHostService, ++ @IConfigurationService protected readonly configurationService: IConfigurationService, + ) { + super(themeService); + +@@ -147,6 +149,12 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + + const container = this.create(parent); + ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.tabs.experimental.fontFamily')) { ++ this.applyTabsFontFamily(); ++ } ++ })); ++ + // Context Keys + this.contextMenuContextKeyService = this._register(this.contextKeyService.createScoped(container)); + const scopedInstantiationService = this._register(this.instantiationService.createChild(new ServiceCollection( +@@ -169,9 +177,23 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + + protected create(parent: HTMLElement): HTMLElement { + this.updateTabHeight(); ++ this.applyTabsFontFamily(parent); + return parent; + } + ++ private applyTabsFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.parent; ++ if (!target) { ++ return; ++ } ++ const family = this.configurationService.getValue('workbench.tabs.experimental.fontFamily'); ++ if (family) { ++ target.style.setProperty('--vscode-workbench-tabs-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-tabs-font-family'); ++ } ++ } ++ + private get editorActionsEnabled(): boolean { + return this.groupsView.partOptions.editorActionsLocation === 'default' && this.groupsView.partOptions.showTabs !== 'none'; + } +diff --git a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css +index 57ab8ca..e9e0b2b 100644 +--- a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css ++++ b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css +@@ -7,6 +7,7 @@ + + .monaco-workbench .part.editor > .content .editor-group-container > .title { + cursor: pointer; ++ font-family: var(--vscode-workbench-tabs-font-family, inherit); + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .title-label, +diff --git a/src/vs/workbench/browser/parts/panel/media/panelpart.css b/src/vs/workbench/browser/parts/panel/media/panelpart.css +index e1c147d..76c7b07 100644 +--- a/src/vs/workbench/browser/parts/panel/media/panelpart.css ++++ b/src/vs/workbench/browser/parts/panel/media/panelpart.css +@@ -8,6 +8,10 @@ + visibility: hidden !important; + } + ++.monaco-workbench .part.panel > .content { ++ font-family: var(--vscode-workbench-panel-font-family, inherit); ++} ++ + .monaco-workbench .part.panel.bottom .composite.title { + border-top-width: 1px; + border-top-style: solid; +diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts +index 585bc16..a5d3ff4 100644 +--- a/src/vs/workbench/browser/parts/panel/panelPart.ts ++++ b/src/vs/workbench/browser/parts/panel/panelPart.ts +@@ -110,6 +110,9 @@ export class PanelPart extends AbstractPaneCompositePart { + if (e.affectsConfiguration('workbench.panel.showLabels')) { + this.updateCompositeBar(true); + } ++ if (e.affectsConfiguration('workbench.bottomPane.experimental.fontFamily')) { ++ this.applyPanelFontFamily(); ++ } + })); + } + +@@ -126,6 +129,21 @@ export class PanelPart extends AbstractPaneCompositePart { + if (this.titleArea) { + this.titleArea.style.borderTopColor = this.getColor(PANEL_BORDER) || this.getColor(contrastBorder) || ''; + } ++ ++ this.applyPanelFontFamily(container); ++ } ++ ++ private applyPanelFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ const family = this.configurationService.getValue('workbench.bottomPane.experimental.fontFamily'); ++ if (family) { ++ target.style.setProperty('--vscode-workbench-panel-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-panel-font-family'); ++ } + } + + protected getCompositeBarOptions(): IPaneCompositeBarOptions { +diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +index 7088a97..3a5ff82 100644 +--- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css ++++ b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +@@ -198,4 +198,8 @@ + .monaco-workbench .part.sidebar .monaco-custom-toggle { + height: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); + width: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); +-} */ +\ No newline at end of file ++} */ ++ ++.monaco-workbench .part.sidebar > .content { ++ font-family: var(--vscode-workbench-sidebar-font-family, inherit); ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +index 9b6ae18..322f69b 100644 +--- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts ++++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +@@ -114,6 +114,9 @@ export class SidebarPart extends AbstractPaneCompositePart { + if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { + this.applySidebarFontSize(); + } ++ if (e.affectsConfiguration('workbench.sideBar.experimental.fontFamily')) { ++ this.applySidebarFontFamily(); ++ } + })); + + this.registerActions(); +@@ -155,6 +158,7 @@ export class SidebarPart extends AbstractPaneCompositePart { + container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? ''; + + this.applySidebarFontSize(container); ++ this.applySidebarFontFamily(container); + } + + override layout(width: number, height: number, top: number, left: number): void { +@@ -297,6 +301,19 @@ export class SidebarPart extends AbstractPaneCompositePart { + target.style.setProperty('--vscode-workbench-sidebar-font-size', `${FONT.sidebarSize}px`); + } + ++ private applySidebarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ const family = this.configurationService.getValue('workbench.sideBar.experimental.fontFamily'); ++ if (family) { ++ target.style.setProperty('--vscode-workbench-sidebar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-sidebar-font-family'); ++ } ++ } ++ + private registerActions(): void { + const that = this; + this._register(registerAction2(class extends Action2 { +diff --git a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css +index 7faaf9e..b633ee1 100644 +--- a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css ++++ b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css +@@ -9,6 +9,7 @@ + width: 100%; + height: 22px; + font-size: 12px; ++ font-family: var(--vscode-workbench-statusbar-font-family, inherit); + display: flex; + overflow: hidden; + } +diff --git a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +index 4bd53d4..62e78d0 100644 +--- a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts ++++ b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +@@ -36,6 +36,7 @@ import { StatusBarFocused } from '../../../common/contextkeys.js'; + import { Emitter, Event } from '../../../../base/common/event.js'; + import { IView } from '../../../../base/browser/ui/grid/grid.js'; + import { isManagedHoverTooltipHTMLElement, isManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; ++import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; + + export interface IStatusbarEntryContainer extends IDisposable { + +@@ -160,9 +161,16 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, + @IContextMenuService private readonly contextMenuService: IContextMenuService, + @IContextKeyService private readonly contextKeyService: IContextKeyService, ++ @IConfigurationService private readonly configurationService: IConfigurationService, + ) { + super(id, { hasTitle: false }, themeService, storageService, layoutService); + ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.statusBar.experimental.fontFamily')) { ++ this.applyStatusBarFontFamily(); ++ } ++ })); ++ + this.viewModel = this._register(new StatusbarViewModel(storageService)); + this.onDidChangeEntryVisibility = this.viewModel.onDidChangeEntryVisibility; + +@@ -427,9 +435,24 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + // Initial status bar entries + this.createInitialStatusbarEntries(); + ++ this.applyStatusBarFontFamily(this.element); ++ + return this.element; + } + ++ private applyStatusBarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ const family = this.configurationService.getValue('workbench.statusBar.experimental.fontFamily'); ++ if (family) { ++ target.style.setProperty('--vscode-workbench-statusbar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-statusbar-font-family'); ++ } ++ } ++ + private createInitialStatusbarEntries(): void { + + // Add items in order according to alignment +diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts +index 3eaad2e..8a9eb0e 100644 +--- a/src/vs/workbench/browser/workbench.contribution.ts ++++ b/src/vs/workbench/browser/workbench.contribution.ts +@@ -667,6 +667,44 @@ const registry = Registry.as(ConfigurationExtensions.Con + description: localize('workbench.fontFamily', "Controls the font family in the workbench."), + 'tags': ['experimental'] + }, ++ 'workbench.experimental.fontSize': { ++ type: 'number', ++ default: 13, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('workbench.fontSize', "Controls the font size in pixels for the workbench."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.sideBar.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('sideBarFontFamily', "Controls the font family in the side bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.statusBar.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('statusBarFontFamily', "Controls the font family in the status bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.tabs.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('tabsFontFamily', "Controls the font family in editor tabs."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.bottomPane.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('bottomPaneFontFamily', "Controls the font family in the bottom panel."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.activityBar.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('activityBarFontFamily', "Controls the font family in the activity bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, + 'workbench.settings.editor': { + 'type': 'string', + 'enum': ['ui', 'json'], +diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts +index 7259aff..ee4cbf8 100644 +--- a/src/vs/workbench/browser/workbench.ts ++++ b/src/vs/workbench/browser/workbench.ts +@@ -235,9 +235,12 @@ export class Workbench extends Layout { + if (e.affectsConfiguration('workbench.fontAliasing')) { + this.updateFontAliasing(configurationService); + } +- else if (e.affectsConfiguration('workbench.experimental.fontFamily')) { ++ if (e.affectsConfiguration('workbench.experimental.fontFamily')) { + this.updateFontFamily(configurationService); + } ++ if (e.affectsConfiguration('workbench.experimental.fontSize')) { ++ this.updateFontSize(configurationService); ++ } + })); + + // Font Info +@@ -297,6 +300,33 @@ export class Workbench extends Layout { + } + } + ++ private fontSize: number | undefined; ++ private fontSizeUserSet: boolean | undefined; ++ private updateFontSize(configurationService: IConfigurationService) { ++ const raw = configurationService.getValue('workbench.experimental.fontSize'); ++ const size = Math.max(6, Math.min(32, typeof raw === 'number' ? raw : 13)); ++ ++ const inspected = configurationService.inspect('workbench.experimental.fontSize'); ++ const isUserSet = inspected.userValue !== undefined ++ || inspected.userLocalValue !== undefined ++ || inspected.userRemoteValue !== undefined ++ || inspected.workspaceValue !== undefined ++ || inspected.workspaceFolderValue !== undefined; ++ ++ if (this.fontSize === size && this.fontSizeUserSet === isUserSet) { ++ return; ++ } ++ ++ this.fontSize = size; ++ this.fontSizeUserSet = isUserSet; ++ ++ if (isUserSet) { ++ this.mainContainer.style.setProperty('--vscode-workbench-font-size', `${size}px`); ++ } else { ++ this.mainContainer.style.removeProperty('--vscode-workbench-font-size'); ++ } ++ } ++ + private fontFamily: string | undefined; + private updateFontFamily(configurationService: IConfigurationService) { + let family = configurationService.getValue('workbench.experimental.fontFamily'); +@@ -360,6 +390,7 @@ export class Workbench extends Layout { + this.updateFontAliasing(configurationService); + + this.updateFontFamily(configurationService); ++ this.updateFontSize(configurationService); + + // Warm up font cache information before building up too many dom elements + this.restoreFontInfo(storageService, configurationService); diff --git a/patches/feat-workbench-zz-area-font-size-core.patch b/patches/feat-workbench-zz-area-font-size-core.patch new file mode 100644 index 0000000..d4936a7 --- /dev/null +++ b/patches/feat-workbench-zz-area-font-size-core.patch @@ -0,0 +1,917 @@ +diff --git a/src/vs/base/common/font.ts b/src/vs/base/common/font.ts +index 2be97d7..8a8d60e 100644 +--- a/src/vs/base/common/font.ts ++++ b/src/vs/base/common/font.ts +@@ -1,3 +1,27 @@ ++/** ++ * Inspect a configuration value and return whether it was explicitly set by the user, ++ * along with the clamped numeric value. ++ */ ++export function inspectFontSize( ++ configurationService: { inspect(key: string): { userValue?: T; userLocalValue?: T; userRemoteValue?: T; workspaceValue?: T; workspaceFolderValue?: T }; getValue(key: string): T }, ++ key: string, ++ defaultSize: number, ++ min: number = 6, ++ max: number = 32 ++): { isUserSet: boolean; size: number } { ++ const inspected = configurationService.inspect(key); ++ const isUserSet = inspected.userValue !== undefined ++ || inspected.userLocalValue !== undefined ++ || inspected.userRemoteValue !== undefined ++ || inspected.workspaceValue !== undefined ++ || inspected.workspaceFolderValue !== undefined; ++ ++ const raw = configurationService.getValue(key); ++ const size = Math.max(min, Math.min(max, typeof raw === 'number' ? raw : defaultSize)); ++ ++ return { isUserSet, size }; ++} ++ + export const FONT = { + sidebarSize: 13, + sidebarSize8: 8, +@@ -16,8 +40,29 @@ export const FONT = { + sidebarSize44: 44, + sidebarSize62: 62, + sidebarSize72: 72, ++ ++ statusBarSize: 12, ++ statusBarSize22: 22, ++ ++ panelSize: 13, ++ panelSize22: 22, ++ ++ activityBarSize: 16, ++ activityBarSize16: 16, ++ activityBarSize24: 24, ++ activityBarSize32: 32, ++ activityBarSize36: 36, ++ activityBarSize48: 48, ++ ++ tabsSize: 13, ++ tabsSize22: 22, ++ tabsSize35: 35, ++ tabsSize38: 38, ++ tabsSize80: 80, ++ tabsSize120: 120, + }; + ++// Sidebar coefficients (base 13) + const COEFF_8 = 8/13; + const COEFF_10 = 10/13; + const COEFF_16 = 16/13; +@@ -54,3 +99,51 @@ export function updateSidebarSize(size: number): void { + FONT.sidebarSize62 = size * COEFF_62; + FONT.sidebarSize72 = size * COEFF_72; + } ++ ++// Status bar coefficients (base 12) ++const SB_COEFF_22 = 22/12; ++ ++export function updateStatusBarSize(size: number): void { ++ FONT.statusBarSize = size; ++ FONT.statusBarSize22 = size * SB_COEFF_22; ++} ++ ++// Panel coefficients (base 13) ++const PN_COEFF_22 = 22/13; ++ ++export function updatePanelSize(size: number): void { ++ FONT.panelSize = size; ++ FONT.panelSize22 = size * PN_COEFF_22; ++} ++ ++// Activity bar coefficients (base 16) ++const AB_COEFF_16 = 16/16; ++const AB_COEFF_24 = 24/16; ++const AB_COEFF_32 = 32/16; ++const AB_COEFF_36 = 36/16; ++const AB_COEFF_48 = 48/16; ++ ++export function updateActivityBarSize(size: number): void { ++ FONT.activityBarSize = size; ++ FONT.activityBarSize16 = size * AB_COEFF_16; ++ FONT.activityBarSize24 = size * AB_COEFF_24; ++ FONT.activityBarSize32 = size * AB_COEFF_32; ++ FONT.activityBarSize36 = size * AB_COEFF_36; ++ FONT.activityBarSize48 = size * AB_COEFF_48; ++} ++ ++// Tabs coefficients (base 13) ++const TB_COEFF_22 = 22/13; ++const TB_COEFF_35 = 35/13; ++const TB_COEFF_38 = 38/13; ++const TB_COEFF_80 = 80/13; ++const TB_COEFF_120 = 120/13; ++ ++export function updateTabsSize(size: number): void { ++ FONT.tabsSize = size; ++ FONT.tabsSize22 = size * TB_COEFF_22; ++ FONT.tabsSize35 = size * TB_COEFF_35; ++ FONT.tabsSize38 = size * TB_COEFF_38; ++ FONT.tabsSize80 = size * TB_COEFF_80; ++ FONT.tabsSize120 = size * TB_COEFF_120; ++} +diff --git a/src/vs/base/test/common/font.test.ts b/src/vs/base/test/common/font.test.ts +new file mode 100644 +index 0000000..dcde0e7 +--- /dev/null ++++ b/src/vs/base/test/common/font.test.ts +@@ -0,0 +1,482 @@ ++/*--------------------------------------------------------------------------------------------- ++ * Copyright (c) VSCodium. All rights reserved. ++ * Licensed under the MIT License. See License.txt in the project root for license information. ++ *--------------------------------------------------------------------------------------------*/ ++ ++import assert from 'assert'; ++import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../test/common/utils.js'; ++import { FONT, updateSidebarSize, updateStatusBarSize, updatePanelSize, updateActivityBarSize, updateTabsSize } from '../../common/font.js'; ++ ++/** ++ * Test file for src/vs/base/common/font.ts ++ * ++ * Tests all update*Size() functions for: ++ * - Default values match upstream VS Code hardcoded constants ++ * - Proportional scaling preserves ratios at non-default sizes ++ * - Boundary values (minimum=6, maximum=32) produce positive values ++ * - Reset to default restores original values ++ * - Non-divisible sizes produce consistent coefficient-based output ++ * - Cross-area updates do not mutate unrelated fields ++ */ ++ ++const EPSILON = 1e-9; ++ ++/** Assert two numbers are equal within floating-point tolerance */ ++function assertClose(actual: number, expected: number, message?: string): void { ++ const diff = Math.abs(actual - expected); ++ assert.ok(diff < EPSILON, `${message ?? ''} expected ${expected}, got ${actual} (diff: ${diff})`); ++} ++ ++/** ++ * Snapshot all FONT fields to detect unintended mutations. ++ * Returns a plain object copy of every enumerable property. ++ */ ++function snapshotFont(): Record { ++ const snap: Record = {}; ++ for (const key of Object.keys(FONT)) { ++ snap[key] = (FONT as Record)[key]; ++ } ++ return snap; ++} ++ ++/** Assert that specific fields in FONT have not changed from a snapshot */ ++function assertFieldsUnchanged(snapshot: Record, prefix: string, message: string): void { ++ for (const key of Object.keys(snapshot)) { ++ if (key.startsWith(prefix)) { ++ assertClose((FONT as Record)[key], snapshot[key], `${message}: ${key}`); ++ } ++ } ++} ++ ++suite('FONT - Sidebar Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ // Capture defaults before any test mutates them ++ const DEFAULTS = snapshotFont(); ++ ++ teardown(() => { ++ // Reset after each test ++ updateSidebarSize(13); ++ }); ++ ++ test('defaults match upstream VS Code constants', () => { ++ assert.strictEqual(FONT.sidebarSize, 13); ++ assert.strictEqual(FONT.sidebarSize8, 8); ++ assert.strictEqual(FONT.sidebarSize10, 10); ++ assert.strictEqual(FONT.sidebarSize16, 16); ++ assert.strictEqual(FONT.sidebarSize17, 17); ++ assert.strictEqual(FONT.sidebarSize18, 18); ++ assert.strictEqual(FONT.sidebarSize20, 20); ++ assert.strictEqual(FONT.sidebarSize22, 22); ++ assert.strictEqual(FONT.sidebarSize23, 23); ++ assert.strictEqual(FONT.sidebarSize24, 24); ++ assert.strictEqual(FONT.sidebarSize26, 26); ++ assert.strictEqual(FONT.sidebarSize28, 28); ++ assert.strictEqual(FONT.sidebarSize34, 34); ++ assert.strictEqual(FONT.sidebarSize39, 39); ++ assert.strictEqual(FONT.sidebarSize44, 44); ++ assert.strictEqual(FONT.sidebarSize62, 62); ++ assert.strictEqual(FONT.sidebarSize72, 72); ++ }); ++ ++ test('proportional scaling preserves ratios at 2x', () => { ++ updateSidebarSize(26); // 2x default ++ assert.strictEqual(FONT.sidebarSize, 26); ++ assert.strictEqual(FONT.sidebarSize8, 16); ++ assert.strictEqual(FONT.sidebarSize22, 44); ++ assert.strictEqual(FONT.sidebarSize44, 88); ++ assert.strictEqual(FONT.sidebarSize72, 144); ++ }); ++ ++ test('non-divisible size produces consistent coefficient-based values', () => { ++ updateSidebarSize(7); ++ assertClose(FONT.sidebarSize22, 7 * (22 / 13)); ++ assertClose(FONT.sidebarSize44, 7 * (44 / 13)); ++ assertClose(FONT.sidebarSize72, 7 * (72 / 13)); ++ }); ++ ++ test('another non-divisible size (31)', () => { ++ updateSidebarSize(31); ++ assertClose(FONT.sidebarSize22, 31 * (22 / 13)); ++ assertClose(FONT.sidebarSize44, 31 * (44 / 13)); ++ }); ++ ++ test('minimum value (6) produces positive values', () => { ++ updateSidebarSize(6); ++ assert.strictEqual(FONT.sidebarSize, 6); ++ assert.ok(FONT.sidebarSize8 > 0, 'sidebarSize8 must be positive'); ++ assert.ok(FONT.sidebarSize10 > 0, 'sidebarSize10 must be positive'); ++ assert.ok(FONT.sidebarSize22 > 0, 'sidebarSize22 must be positive'); ++ assert.ok(FONT.sidebarSize72 > 0, 'sidebarSize72 must be positive'); ++ }); ++ ++ test('maximum value (32) produces reasonable values', () => { ++ updateSidebarSize(32); ++ assert.strictEqual(FONT.sidebarSize, 32); ++ assert.ok(FONT.sidebarSize22 > 40, 'row height should scale up'); ++ assert.ok(FONT.sidebarSize22 < 80, 'row height should not be extreme'); ++ }); ++ ++ test('reset to default restores all values', () => { ++ updateSidebarSize(20); ++ assert.notStrictEqual(FONT.sidebarSize22, DEFAULTS.sidebarSize22); ++ updateSidebarSize(13); ++ assertFieldsUnchanged(DEFAULTS, 'sidebar', 'after reset'); ++ }); ++ ++ test('multiple updates in sequence are idempotent at same value', () => { ++ updateSidebarSize(18); ++ const snap = snapshotFont(); ++ updateSidebarSize(18); ++ assertFieldsUnchanged(snap, 'sidebar', 'idempotent'); ++ }); ++}); ++ ++suite('FONT - Status Bar Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateStatusBarSize(12); ++ }); ++ ++ test('defaults match upstream VS Code status bar constants', () => { ++ assert.strictEqual(FONT.statusBarSize, 12); ++ assert.strictEqual(FONT.statusBarSize22, 22); // StatusbarPart.HEIGHT ++ }); ++ ++ test('proportional scaling at 2x', () => { ++ updateStatusBarSize(24); ++ assert.strictEqual(FONT.statusBarSize, 24); ++ assert.strictEqual(FONT.statusBarSize22, 44); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updateStatusBarSize(7); ++ assertClose(FONT.statusBarSize22, 7 * (22 / 12)); ++ }); ++ ++ test('minimum value (6) produces positive height', () => { ++ updateStatusBarSize(6); ++ assert.strictEqual(FONT.statusBarSize, 6); ++ assert.ok(FONT.statusBarSize22 > 0, 'height must be positive'); ++ assertClose(FONT.statusBarSize22, 6 * (22 / 12)); ++ }); ++ ++ test('maximum value (32) produces reasonable height', () => { ++ updateStatusBarSize(32); ++ assertClose(FONT.statusBarSize22, 32 * (22 / 12)); ++ assert.ok(FONT.statusBarSize22 > 50, 'height should scale up'); ++ assert.ok(FONT.statusBarSize22 < 70, 'height should not be extreme'); ++ }); ++ ++ test('reset to default restores values', () => { ++ updateStatusBarSize(20); ++ updateStatusBarSize(12); ++ assert.strictEqual(FONT.statusBarSize, 12); ++ assert.strictEqual(FONT.statusBarSize22, 22); ++ }); ++}); ++ ++suite('FONT - Panel Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updatePanelSize(13); ++ }); ++ ++ test('defaults match sidebar defaults (same base size)', () => { ++ assert.strictEqual(FONT.panelSize, 13); ++ assert.strictEqual(FONT.panelSize22, 22); ++ }); ++ ++ test('panel and sidebar can have independent sizes', () => { ++ updatePanelSize(18); ++ assert.strictEqual(FONT.panelSize, 18); ++ assert.notStrictEqual(FONT.panelSize22, 22); ++ // Sidebar unchanged ++ assert.strictEqual(FONT.sidebarSize, 13); ++ assert.strictEqual(FONT.sidebarSize22, 22); ++ }); ++ ++ test('proportional scaling at 2x', () => { ++ updatePanelSize(26); ++ assert.strictEqual(FONT.panelSize22, 44); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updatePanelSize(7); ++ assertClose(FONT.panelSize22, 7 * (22 / 13)); ++ }); ++ ++ test('minimum value (6)', () => { ++ updatePanelSize(6); ++ assert.ok(FONT.panelSize22 > 0, 'row height must be positive'); ++ assert.ok(FONT.panelSize22 >= 10, 'row height at minimum should be usable'); ++ }); ++ ++ test('maximum value (32)', () => { ++ updatePanelSize(32); ++ assert.ok(FONT.panelSize22 > 50, 'row height should scale up'); ++ }); ++ ++ test('reset to default restores values', () => { ++ updatePanelSize(20); ++ updatePanelSize(13); ++ assert.strictEqual(FONT.panelSize, 13); ++ assert.strictEqual(FONT.panelSize22, 22); ++ }); ++}); ++ ++suite('FONT - Activity Bar Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateActivityBarSize(16); ++ }); ++ ++ test('defaults match upstream VS Code activity bar constants', () => { ++ assert.strictEqual(FONT.activityBarSize, 16); ++ assert.strictEqual(FONT.activityBarSize16, 16); // COMPACT_ICON_SIZE ++ assert.strictEqual(FONT.activityBarSize24, 24); // ICON_SIZE ++ assert.strictEqual(FONT.activityBarSize32, 32); // COMPACT_ACTION_HEIGHT ++ assert.strictEqual(FONT.activityBarSize36, 36); // COMPACT_ACTIVITYBAR_WIDTH ++ assert.strictEqual(FONT.activityBarSize48, 48); // ACTION_HEIGHT / ACTIVITYBAR_WIDTH ++ }); ++ ++ test('proportional scaling at 2x', () => { ++ updateActivityBarSize(32); ++ assert.strictEqual(FONT.activityBarSize, 32); ++ assert.strictEqual(FONT.activityBarSize16, 32); // compact icon = base size ++ assert.strictEqual(FONT.activityBarSize24, 48); ++ assert.strictEqual(FONT.activityBarSize32, 64); ++ assert.strictEqual(FONT.activityBarSize36, 72); ++ assert.strictEqual(FONT.activityBarSize48, 96); ++ }); ++ ++ test('compact constants scale correctly', () => { ++ updateActivityBarSize(20); ++ // Compact icon size = base size * (16/16) = 20 ++ assertClose(FONT.activityBarSize16, 20 * (16 / 16)); ++ // Compact width = base * (36/16) = 45 ++ assertClose(FONT.activityBarSize36, 20 * (36 / 16)); ++ // Compact action height = base * (32/16) = 40 ++ assertClose(FONT.activityBarSize32, 20 * (32 / 16)); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updateActivityBarSize(7); ++ assertClose(FONT.activityBarSize24, 7 * (24 / 16)); ++ assertClose(FONT.activityBarSize48, 7 * (48 / 16)); ++ assertClose(FONT.activityBarSize36, 7 * (36 / 16)); ++ }); ++ ++ test('minimum value (6) produces positive values', () => { ++ updateActivityBarSize(6); ++ assert.strictEqual(FONT.activityBarSize, 6); ++ assert.ok(FONT.activityBarSize16 > 0, 'compact icon size must be positive'); ++ assert.ok(FONT.activityBarSize24 > 0, 'icon size must be positive'); ++ assert.ok(FONT.activityBarSize36 > 0, 'compact width must be positive'); ++ assert.ok(FONT.activityBarSize48 > 0, 'action height must be positive'); ++ }); ++ ++ test('maximum value (32) produces reasonable values', () => { ++ updateActivityBarSize(32); ++ assert.strictEqual(FONT.activityBarSize48, 96); ++ assert.ok(FONT.activityBarSize48 <= 100, 'action height should be bounded'); ++ }); ++ ++ test('reset to default restores values', () => { ++ updateActivityBarSize(24); ++ updateActivityBarSize(16); ++ assert.strictEqual(FONT.activityBarSize, 16); ++ assert.strictEqual(FONT.activityBarSize16, 16); ++ assert.strictEqual(FONT.activityBarSize24, 24); ++ assert.strictEqual(FONT.activityBarSize32, 32); ++ assert.strictEqual(FONT.activityBarSize36, 36); ++ assert.strictEqual(FONT.activityBarSize48, 48); ++ }); ++}); ++ ++suite('FONT - Tabs Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateTabsSize(13); ++ }); ++ ++ test('defaults match upstream VS Code tab constants', () => { ++ assert.strictEqual(FONT.tabsSize, 13); ++ assert.strictEqual(FONT.tabsSize22, 22); // EDITOR_TAB_HEIGHT compact ++ assert.strictEqual(FONT.tabsSize35, 35); // EDITOR_TAB_HEIGHT normal ++ assert.strictEqual(FONT.tabsSize38, 38); // TAB_WIDTH compact ++ assert.strictEqual(FONT.tabsSize80, 80); // TAB_WIDTH shrink ++ assert.strictEqual(FONT.tabsSize120, 120); // TAB_WIDTH fit ++ }); ++ ++ test('proportional scaling preserves tab height/width ratios at 2x', () => { ++ updateTabsSize(26); ++ assert.strictEqual(FONT.tabsSize, 26); ++ assert.strictEqual(FONT.tabsSize22, 44); ++ assert.strictEqual(FONT.tabsSize35, 70); ++ assert.strictEqual(FONT.tabsSize38, 76); ++ assert.strictEqual(FONT.tabsSize80, 160); ++ assert.strictEqual(FONT.tabsSize120, 240); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updateTabsSize(7); ++ assertClose(FONT.tabsSize22, 7 * (22 / 13)); ++ assertClose(FONT.tabsSize35, 7 * (35 / 13)); ++ assertClose(FONT.tabsSize80, 7 * (80 / 13)); ++ assertClose(FONT.tabsSize120, 7 * (120 / 13)); ++ }); ++ ++ test('minimum value (6) produces usable tab dimensions', () => { ++ updateTabsSize(6); ++ assert.strictEqual(FONT.tabsSize, 6); ++ assert.ok(FONT.tabsSize35 > 10, 'normal tab height must be clickable'); ++ assert.ok(FONT.tabsSize22 > 8, 'compact tab height must be usable'); ++ assert.ok(FONT.tabsSize38 > 0, 'compact tab width must be positive'); ++ assert.ok(FONT.tabsSize80 > 0, 'shrink tab width must be positive'); ++ }); ++ ++ test('maximum value (32) produces reasonable tab dimensions', () => { ++ updateTabsSize(32); ++ assert.ok(FONT.tabsSize35 > 80, 'normal tab height should scale up'); ++ assert.ok(FONT.tabsSize35 < 100, 'normal tab height should be bounded'); ++ }); ++ ++ test('reset to default restores all values', () => { ++ updateTabsSize(20); ++ updateTabsSize(13); ++ assert.strictEqual(FONT.tabsSize, 13); ++ assert.strictEqual(FONT.tabsSize22, 22); ++ assert.strictEqual(FONT.tabsSize35, 35); ++ assert.strictEqual(FONT.tabsSize38, 38); ++ assert.strictEqual(FONT.tabsSize80, 80); ++ assert.strictEqual(FONT.tabsSize120, 120); ++ }); ++}); ++ ++suite('FONT - Cross-area independence', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateSidebarSize(13); ++ updateStatusBarSize(12); ++ updatePanelSize(13); ++ updateActivityBarSize(16); ++ updateTabsSize(13); ++ }); ++ ++ test('updating sidebar does not affect any other area (full derived field check)', () => { ++ const before = snapshotFont(); ++ updateSidebarSize(20); ++ ++ // All non-sidebar fields must be unchanged ++ assertFieldsUnchanged(before, 'statusBar', 'after sidebar update'); ++ assertFieldsUnchanged(before, 'panel', 'after sidebar update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after sidebar update'); ++ assertFieldsUnchanged(before, 'tabs', 'after sidebar update'); ++ }); ++ ++ test('updating statusBar does not affect any other area', () => { ++ const before = snapshotFont(); ++ updateStatusBarSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after statusBar update'); ++ assertFieldsUnchanged(before, 'panel', 'after statusBar update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after statusBar update'); ++ assertFieldsUnchanged(before, 'tabs', 'after statusBar update'); ++ }); ++ ++ test('updating panel does not affect any other area', () => { ++ const before = snapshotFont(); ++ updatePanelSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after panel update'); ++ assertFieldsUnchanged(before, 'statusBar', 'after panel update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after panel update'); ++ assertFieldsUnchanged(before, 'tabs', 'after panel update'); ++ }); ++ ++ test('updating activityBar does not affect any other area', () => { ++ const before = snapshotFont(); ++ updateActivityBarSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after activityBar update'); ++ assertFieldsUnchanged(before, 'statusBar', 'after activityBar update'); ++ assertFieldsUnchanged(before, 'panel', 'after activityBar update'); ++ assertFieldsUnchanged(before, 'tabs', 'after activityBar update'); ++ }); ++ ++ test('updating tabs does not affect any other area', () => { ++ const before = snapshotFont(); ++ updateTabsSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after tabs update'); ++ assertFieldsUnchanged(before, 'statusBar', 'after tabs update'); ++ assertFieldsUnchanged(before, 'panel', 'after tabs update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after tabs update'); ++ }); ++ ++ test('all areas set to same value produce different derived values due to different coefficients', () => { ++ const commonSize = 18; ++ updateSidebarSize(commonSize); ++ updateStatusBarSize(commonSize); ++ updatePanelSize(commonSize); ++ updateActivityBarSize(commonSize); ++ updateTabsSize(commonSize); ++ ++ assert.strictEqual(FONT.sidebarSize, commonSize); ++ assert.strictEqual(FONT.statusBarSize, commonSize); ++ assert.strictEqual(FONT.panelSize, commonSize); ++ assert.strictEqual(FONT.activityBarSize, commonSize); ++ assert.strictEqual(FONT.tabsSize, commonSize); ++ ++ // sidebarSize22 = 18 * (22/13), statusBarSize22 = 18 * (22/12) ++ // Different coefficients → different results ++ assert.notStrictEqual(FONT.sidebarSize22, FONT.statusBarSize22, ++ 'same base size should produce different derived values due to different coefficients'); ++ }); ++ ++ test('sequential updates across all areas and full reset', () => { ++ updateSidebarSize(8); ++ updateStatusBarSize(10); ++ updatePanelSize(15); ++ updateActivityBarSize(20); ++ updateTabsSize(25); ++ ++ // Verify all set correctly ++ assert.strictEqual(FONT.sidebarSize, 8); ++ assert.strictEqual(FONT.statusBarSize, 10); ++ assert.strictEqual(FONT.panelSize, 15); ++ assert.strictEqual(FONT.activityBarSize, 20); ++ assert.strictEqual(FONT.tabsSize, 25); ++ ++ // Reset all ++ updateSidebarSize(13); ++ updateStatusBarSize(12); ++ updatePanelSize(13); ++ updateActivityBarSize(16); ++ updateTabsSize(13); ++ ++ // All defaults restored ++ assert.strictEqual(FONT.sidebarSize, 13); ++ assert.strictEqual(FONT.sidebarSize22, 22); ++ assert.strictEqual(FONT.statusBarSize, 12); ++ assert.strictEqual(FONT.statusBarSize22, 22); ++ assert.strictEqual(FONT.panelSize, 13); ++ assert.strictEqual(FONT.panelSize22, 22); ++ assert.strictEqual(FONT.activityBarSize, 16); ++ assert.strictEqual(FONT.activityBarSize48, 48); ++ assert.strictEqual(FONT.tabsSize, 13); ++ assert.strictEqual(FONT.tabsSize35, 35); ++ }); ++}); +diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +index cbd14af..83153fe 100644 +--- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts ++++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +@@ -38,11 +38,11 @@ import { IExtensionService } from '../../../services/extensions/common/extension + import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; + import { IViewsService } from '../../../services/views/common/viewsService.js'; + import { SwitchCompositeViewAction } from '../compositeBarActions.js'; +-import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; ++import { FONT, inspectFontSize, updateActivityBarSize } from '../../../../base/common/font.js'; + + export class ActivitybarPart extends Part { + +- static readonly ACTION_HEIGHT = 48; ++ static get ACTION_HEIGHT() { return FONT.activityBarSize48; } + + static readonly pinnedViewContainersKey = 'workbench.activity.pinnedViewlets2'; + static readonly placeholderViewContainersKey = 'workbench.activity.placeholderViewlets'; +@@ -74,6 +74,9 @@ export class ActivitybarPart extends Part { + if (e.affectsConfiguration('workbench.activityBar.experimental.fontFamily')) { + this.applyActivityBarFontFamily(); + } ++ if (e.affectsConfiguration('workbench.activityBar.experimental.fontSize')) { ++ this.applyActivityBarFontSize(); ++ } + })); + } + +@@ -111,15 +114,34 @@ export class ActivitybarPart extends Part { + this.element = parent; + this.content = append(this.element, $('.content')); + ++ // Apply font settings before show() so composite bar uses correct sizes ++ this.applyActivityBarFontFamily(parent); ++ this.applyActivityBarFontSize(parent); ++ + if (this.layoutService.isVisible(Parts.ACTIVITYBAR_PART)) { + this.show(); + } + +- this.applyActivityBarFontFamily(parent); +- + return this.content; + } + ++ private applyActivityBarFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.activityBar.experimental.fontSize', 16); ++ ++ if (isUserSet) { ++ updateActivityBarSize(size); ++ target.style.setProperty('--vscode-workbench-activitybar-font-size', `${size}px`); ++ } else { ++ updateActivityBarSize(16); ++ target.style.removeProperty('--vscode-workbench-activitybar-font-size'); ++ } ++ } ++ + private applyActivityBarFontFamily(container?: HTMLElement): void { + const target = container ?? this.getContainer(); + if (!target) { +diff --git a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css +index 7cd25d0..680dc73 100644 +--- a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css ++++ b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css +@@ -7,6 +7,7 @@ + width: 48px; + height: 100%; + font-family: var(--vscode-workbench-activitybar-font-family, inherit); ++ font-size: var(--vscode-workbench-activitybar-font-size, var(--vscode-workbench-font-size, 16px)); + } + + .monaco-workbench .activitybar.bordered::before { +diff --git a/src/vs/workbench/browser/parts/panel/media/panelpart.css b/src/vs/workbench/browser/parts/panel/media/panelpart.css +index 76c7b07..6faf068 100644 +--- a/src/vs/workbench/browser/parts/panel/media/panelpart.css ++++ b/src/vs/workbench/browser/parts/panel/media/panelpart.css +@@ -10,6 +10,7 @@ + + .monaco-workbench .part.panel > .content { + font-family: var(--vscode-workbench-panel-font-family, inherit); ++ font-size: var(--vscode-workbench-panel-font-size, var(--vscode-workbench-font-size, 13px)); + } + + .monaco-workbench .part.panel.bottom .composite.title { +diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts +index a5d3ff4..b9b240d 100644 +--- a/src/vs/workbench/browser/parts/panel/panelPart.ts ++++ b/src/vs/workbench/browser/parts/panel/panelPart.ts +@@ -31,6 +31,7 @@ import { getContextMenuActions } from '../../../../platform/actions/browser/menu + import { IPaneCompositeBarOptions } from '../paneCompositeBar.js'; + import { IHoverService } from '../../../../platform/hover/browser/hover.js'; + import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; ++import { FONT, inspectFontSize, updatePanelSize } from '../../../../base/common/font.js'; + + export class PanelPart extends AbstractPaneCompositePart { + +@@ -113,6 +114,9 @@ export class PanelPart extends AbstractPaneCompositePart { + if (e.affectsConfiguration('workbench.bottomPane.experimental.fontFamily')) { + this.applyPanelFontFamily(); + } ++ if (e.affectsConfiguration('workbench.bottomPane.experimental.fontSize')) { ++ this.applyPanelFontSize(); ++ } + })); + } + +@@ -131,6 +135,24 @@ export class PanelPart extends AbstractPaneCompositePart { + } + + this.applyPanelFontFamily(container); ++ this.applyPanelFontSize(container); ++ } ++ ++ private applyPanelFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.bottomPane.experimental.fontSize', 13); ++ ++ if (isUserSet) { ++ updatePanelSize(size); ++ target.style.setProperty('--vscode-workbench-panel-font-size', `${size}px`); ++ } else { ++ updatePanelSize(13); ++ target.style.removeProperty('--vscode-workbench-panel-font-size'); ++ } + } + + private applyPanelFontFamily(container?: HTMLElement): void { +diff --git a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css +index b633ee1..7621d4e 100644 +--- a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css ++++ b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css +@@ -7,8 +7,8 @@ + box-sizing: border-box; + cursor: default; + width: 100%; +- height: 22px; +- font-size: 12px; ++ height: var(--vscode-workbench-statusbar-height, 22px); ++ font-size: var(--vscode-workbench-statusbar-font-size, var(--vscode-workbench-font-size, 12px)); + font-family: var(--vscode-workbench-statusbar-font-family, inherit); + display: flex; + overflow: hidden; +@@ -58,7 +58,7 @@ + + .monaco-workbench .part.statusbar > .items-container > .statusbar-item { + display: inline-block; +- line-height: 22px; ++ line-height: var(--vscode-workbench-statusbar-height, 22px); + height: 100%; + vertical-align: top; + max-width: 40vw; +diff --git a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +index 62e78d0..d5dc64a 100644 +--- a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts ++++ b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +@@ -37,6 +37,7 @@ import { Emitter, Event } from '../../../../base/common/event.js'; + import { IView } from '../../../../base/browser/ui/grid/grid.js'; + import { isManagedHoverTooltipHTMLElement, isManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; + import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; ++import { FONT, inspectFontSize, updateStatusBarSize } from '../../../../base/common/font.js'; + + export interface IStatusbarEntryContainer extends IDisposable { + +@@ -119,14 +120,14 @@ interface IPendingStatusbarEntry { + + class StatusbarPart extends Part implements IStatusbarEntryContainer { + +- static readonly HEIGHT = 22; ++ static get HEIGHT() { return FONT.statusBarSize22; } + + //#region IView + + readonly minimumWidth: number = 0; + readonly maximumWidth: number = Number.POSITIVE_INFINITY; +- readonly minimumHeight: number = StatusbarPart.HEIGHT; +- readonly maximumHeight: number = StatusbarPart.HEIGHT; ++ get minimumHeight(): number { return FONT.statusBarSize22; } ++ get maximumHeight(): number { return FONT.statusBarSize22; } + + //#endregion + +@@ -169,6 +170,9 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + if (e.affectsConfiguration('workbench.statusBar.experimental.fontFamily')) { + this.applyStatusBarFontFamily(); + } ++ if (e.affectsConfiguration('workbench.statusBar.experimental.fontSize')) { ++ this.applyStatusBarFontSize(); ++ } + })); + + this.viewModel = this._register(new StatusbarViewModel(storageService)); +@@ -436,10 +440,33 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + this.createInitialStatusbarEntries(); + + this.applyStatusBarFontFamily(this.element); ++ this.applyStatusBarFontSize(this.element); + + return this.element; + } + ++ private applyStatusBarFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.statusBar.experimental.fontSize', 12); ++ ++ if (isUserSet) { ++ updateStatusBarSize(size); ++ target.style.setProperty('--vscode-workbench-statusbar-font-size', `${size}px`); ++ target.style.setProperty('--vscode-workbench-statusbar-height', `${FONT.statusBarSize22}px`); ++ } else { ++ updateStatusBarSize(12); ++ target.style.removeProperty('--vscode-workbench-statusbar-font-size'); ++ target.style.removeProperty('--vscode-workbench-statusbar-height'); ++ } ++ ++ // Notify grid layout that height constraints changed ++ this._onDidChange.fire(undefined); ++ } ++ + private applyStatusBarFontFamily(container?: HTMLElement): void { + const target = container ?? this.getContainer(); + if (!target) { +@@ -761,7 +788,7 @@ export class AuxiliaryStatusbarPart extends StatusbarPart implements IAuxiliaryS + + private static COUNTER = 1; + +- readonly height = StatusbarPart.HEIGHT; ++ get height() { return StatusbarPart.HEIGHT; } + + constructor( + readonly container: HTMLElement, +diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts +index 8a9eb0e..5bb0959 100644 +--- a/src/vs/workbench/browser/workbench.contribution.ts ++++ b/src/vs/workbench/browser/workbench.contribution.ts +@@ -705,6 +705,38 @@ const registry = Registry.as(ConfigurationExtensions.Con + markdownDescription: localize('activityBarFontFamily', "Controls the font family in the activity bar."), + 'tags': ['accessibility', 'experimental'] + }, ++ 'workbench.statusBar.experimental.fontSize': { ++ type: 'number', ++ default: 12, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('statusBarFontSize', "Controls the font size in pixels for the status bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.bottomPane.experimental.fontSize': { ++ type: 'number', ++ default: 13, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('bottomPaneFontSize', "Controls the font size in pixels for the bottom panel."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.activityBar.experimental.fontSize': { ++ type: 'number', ++ default: 16, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('activityBarFontSize', "Controls the font size in pixels for the activity bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.tabs.experimental.fontSize': { ++ type: 'number', ++ default: 13, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('tabsFontSize', "Controls the font size in pixels for editor tabs."), ++ 'tags': ['accessibility', 'experimental'] ++ }, + 'workbench.settings.editor': { + 'type': 'string', + 'enum': ['ui', 'json'], +diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts +index ee4cbf8..4d7a787 100644 +--- a/src/vs/workbench/browser/workbench.ts ++++ b/src/vs/workbench/browser/workbench.ts +@@ -7,6 +7,7 @@ import './style.js'; + import { runWhenWindowIdle } from '../../base/browser/dom.js'; + import { Event, Emitter, setGlobalLeakWarningThreshold } from '../../base/common/event.js'; + import { RunOnceScheduler, timeout } from '../../base/common/async.js'; ++import { inspectFontSize } from '../../base/common/font.js'; + import { isFirefox, isSafari, isChrome } from '../../base/browser/browser.js'; + import { mark } from '../../base/common/performance.js'; + import { onUnexpectedError, setUnexpectedErrorHandler } from '../../base/common/errors.js'; +@@ -303,15 +304,7 @@ export class Workbench extends Layout { + private fontSize: number | undefined; + private fontSizeUserSet: boolean | undefined; + private updateFontSize(configurationService: IConfigurationService) { +- const raw = configurationService.getValue('workbench.experimental.fontSize'); +- const size = Math.max(6, Math.min(32, typeof raw === 'number' ? raw : 13)); +- +- const inspected = configurationService.inspect('workbench.experimental.fontSize'); +- const isUserSet = inspected.userValue !== undefined +- || inspected.userLocalValue !== undefined +- || inspected.userRemoteValue !== undefined +- || inspected.workspaceValue !== undefined +- || inspected.workspaceFolderValue !== undefined; ++ const { isUserSet, size } = inspectFontSize(configurationService, 'workbench.experimental.fontSize', 13); + + if (this.fontSize === size && this.fontSizeUserSet === isUserSet) { + return; diff --git a/patches/feat-workbench-zz-area-font-size-tabs.patch b/patches/feat-workbench-zz-area-font-size-tabs.patch new file mode 100644 index 0000000..0c2d341 --- /dev/null +++ b/patches/feat-workbench-zz-area-font-size-tabs.patch @@ -0,0 +1,223 @@ +diff --git a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts +index a946cb7..4db07a2 100644 +--- a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts ++++ b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts +@@ -47,6 +47,7 @@ import { IBaseActionViewItemOptions } from '../../../../base/browser/ui/actionba + import { MarkdownString } from '../../../../base/common/htmlContent.js'; + import { IManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; + import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; ++import { FONT, inspectFontSize, updateTabsSize } from '../../../../base/common/font.js'; + import { applyDragImage } from '../../../../base/browser/ui/dnd/dnd.js'; + + export class EditorCommandsContextActionRunner extends ActionRunner { +@@ -100,10 +101,12 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + protected readonly groupTransfer = LocalSelectionTransfer.getInstance(); + protected readonly treeItemsTransfer = LocalSelectionTransfer.getInstance(); + +- private static readonly EDITOR_TAB_HEIGHT = { +- normal: 35 as const, +- compact: 22 as const +- }; ++ private static get EDITOR_TAB_HEIGHT() { ++ return { ++ normal: FONT.tabsSize35, ++ compact: FONT.tabsSize22 ++ }; ++ } + + protected editorActionsToolbarContainer: HTMLElement | undefined; + private editorActionsToolbar: WorkbenchToolBar | undefined; +@@ -153,6 +156,11 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + if (e.affectsConfiguration('workbench.tabs.experimental.fontFamily')) { + this.applyTabsFontFamily(); + } ++ if (e.affectsConfiguration('workbench.tabs.experimental.fontSize')) { ++ this.applyTabsFontSize(); ++ this.updateTabHeight(); ++ this.groupView.relayout(); ++ } + })); + + // Context Keys +@@ -176,11 +184,37 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + } + + protected create(parent: HTMLElement): HTMLElement { ++ this.applyTabsFontSize(parent); + this.updateTabHeight(); + this.applyTabsFontFamily(parent); + return parent; + } + ++ private applyTabsFontSize(container?: HTMLElement): void { ++ const target = container ?? this.parent; ++ if (!target) { ++ return; ++ } ++ ++ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.tabs.experimental.fontSize', 13); ++ ++ if (isUserSet) { ++ updateTabsSize(size); ++ target.style.setProperty('--vscode-workbench-tabs-font-size', `${size}px`); ++ target.style.setProperty('--vscode-workbench-tabs-compact-height', `${FONT.tabsSize22}px`); ++ target.style.setProperty('--vscode-workbench-tabs-sticky-compact-width', `${FONT.tabsSize38}px`); ++ target.style.setProperty('--vscode-workbench-tabs-sticky-shrink-width', `${FONT.tabsSize80}px`); ++ target.style.setProperty('--vscode-workbench-tabs-fit-width', `${FONT.tabsSize120}px`); ++ } else { ++ updateTabsSize(13); ++ target.style.removeProperty('--vscode-workbench-tabs-font-size'); ++ target.style.removeProperty('--vscode-workbench-tabs-compact-height'); ++ target.style.removeProperty('--vscode-workbench-tabs-sticky-compact-width'); ++ target.style.removeProperty('--vscode-workbench-tabs-sticky-shrink-width'); ++ target.style.removeProperty('--vscode-workbench-tabs-fit-width'); ++ } ++ } ++ + private applyTabsFontFamily(container?: HTMLElement): void { + const target = container ?? this.parent; + if (!target) { +diff --git a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css +index e9e0b2b..fc1bebe 100644 +--- a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css ++++ b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css +@@ -23,7 +23,7 @@ + + .monaco-workbench .part.editor > .content .editor-group-container > .title .title-label a, + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab .tab-label a { +- font-size: 13px; ++ font-size: var(--vscode-workbench-tabs-font-size, var(--vscode-workbench-font-size, 13px)); + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .monaco-icon-label::before, +diff --git a/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css b/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css +index a24f761..8c72d17 100644 +--- a/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css ++++ b/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css +@@ -7,23 +7,23 @@ + + .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control { + flex: 1 100%; +- height: 22px; ++ height: var(--vscode-workbench-tabs-compact-height, 22px); + cursor: default; + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-icon-label { +- height: 22px; +- line-height: 22px; ++ height: var(--vscode-workbench-tabs-compact-height, 22px); ++ line-height: var(--vscode-workbench-tabs-compact-height, 22px); + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-icon-label::before { +- height: 22px; /* tweak the icon size of the editor labels when icons are enabled */ ++ height: var(--vscode-workbench-tabs-compact-height, 22px); /* tweak the icon size of the editor labels when icons are enabled */ + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .outline-element-icon { + padding-right: 3px; +- height: 22px; /* tweak the icon size of the editor labels when icons are enabled */ +- line-height: 22px; ++ height: var(--vscode-workbench-tabs-compact-height, 22px); /* tweak the icon size of the editor labels when icons are enabled */ ++ line-height: var(--vscode-workbench-tabs-compact-height, 22px); + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-breadcrumb-item { +@@ -32,7 +32,7 @@ + + .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-breadcrumb-item::before { + width: 16px; +- height: 22px; ++ height: var(--vscode-workbench-tabs-compact-height, 22px); + display: flex; + align-items: center; + justify-content: center; +diff --git a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css +index 924d9b3..58efc4d 100644 +--- a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css ++++ b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css +@@ -160,7 +160,7 @@ + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fit { +- width: 120px; ++ width: var(--vscode-workbench-tabs-fit-width, 120px); + min-width: fit-content; + flex-shrink: 0; + } +@@ -183,7 +183,7 @@ + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink { +- min-width: 80px; ++ min-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); + flex-basis: 0; /* all tabs are even */ + flex-grow: 1; /* all tabs grow even */ + max-width: fit-content; +@@ -210,9 +210,9 @@ + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.sticky-compact { + + /** Sticky compact tabs have a fixed width of 38px */ +- width: 38px; +- min-width: 38px; +- max-width: 38px; ++ width: var(--vscode-workbench-tabs-sticky-compact-width, 38px); ++ min-width: var(--vscode-workbench-tabs-sticky-compact-width, 38px); ++ max-width: var(--vscode-workbench-tabs-sticky-compact-width, 38px); + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fit.sticky-shrink, +@@ -220,9 +220,9 @@ + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.sticky-shrink { + + /** Sticky shrink tabs have a fixed width of 80px */ +- width: 80px; +- min-width: 80px; +- max-width: 80px; ++ width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); ++ min-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); ++ max-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); + } + + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container.disable-sticky-tabs > .tab.sizing-fit.sticky-compact, +@@ -257,7 +257,7 @@ + + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.tab-actions-left, + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.tab-actions-left { +- min-width: 80px; /* make more room for close button when it shows to the left */ ++ min-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); /* make more room for close button when it shows to the left */ + padding-right: 5px; /* we need less room when sizing is shrink/fixed */ + } + +diff --git a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts +index b0befd9..ef06bcc 100644 +--- a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts ++++ b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts +@@ -4,6 +4,7 @@ + *--------------------------------------------------------------------------------------------*/ + + import './media/multieditortabscontrol.css'; ++import { FONT } from '../../../../base/common/font.js'; + import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; + import { shorten } from '../../../../base/common/labels.js'; + import { EditorResourceAccessor, Verbosity, IEditorPartOptions, SideBySideEditor, DEFAULT_EDITOR_ASSOCIATION, EditorInputCapabilities, IUntypedEditorInput, preventEditorClose, EditorCloseMethod, EditorsOrder, IToolbarActions } from '../../../common/editor.js'; +@@ -94,11 +95,13 @@ export class MultiEditorTabsControl extends EditorTabsControl { + large: 10 as const + }; + +- private static readonly TAB_WIDTH = { +- compact: 38 as const, +- shrink: 80 as const, +- fit: 120 as const +- }; ++ private static get TAB_WIDTH() { ++ return { ++ compact: FONT.tabsSize38, ++ shrink: FONT.tabsSize80, ++ fit: FONT.tabsSize120 ++ }; ++ } + + private static readonly DRAG_OVER_OPEN_TAB_THRESHOLD = 1500; + From 1dec128c07e302ac827223ab534cbc05bfabd7a4 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Tue, 24 Feb 2026 20:51:31 +0100 Subject: [PATCH 12/22] fix: merge patches and build --- dev/merge-patches.sh | 64 + font-size/generate-css.ts | 189 +- ...ize.patch => feat-experimental-font.patch} | 1849 ++++++++++++++++- patches/feat-workbench-font-family.patch | 117 -- .../feat-workbench-zz-area-font-family.patch | 477 ----- ...eat-workbench-zz-area-font-size-core.patch | 917 -------- ...eat-workbench-zz-area-font-size-tabs.patch | 223 -- 7 files changed, 1959 insertions(+), 1877 deletions(-) create mode 100755 dev/merge-patches.sh rename patches/{feat-sidebar-font-size.patch => feat-experimental-font.patch} (63%) delete mode 100644 patches/feat-workbench-font-family.patch delete mode 100644 patches/feat-workbench-zz-area-font-family.patch delete mode 100644 patches/feat-workbench-zz-area-font-size-core.patch delete mode 100644 patches/feat-workbench-zz-area-font-size-tabs.patch diff --git a/dev/merge-patches.sh b/dev/merge-patches.sh new file mode 100755 index 0000000..a24e54b --- /dev/null +++ b/dev/merge-patches.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +set -e + +normalize_file() { + if [[ "${1}" == *patch ]]; then + FILE="${1}" + else + FILE="${1}.patch" + fi + + if [[ "${FILE}" == patches/* ]]; then + FILE="../${FILE}" + else + FILE="../patches/${FILE}" + fi +} + +cd vscode || { echo "'vscode' dir not found"; exit 1; } + +git add . +git reset -q --hard HEAD + +while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do + git reset -q --hard HEAD~ +done + +git apply --reject "../patches/helper/settings.patch" +git add . +git commit --no-verify -q -m "VSCODIUM HELPER" + +while [ $# -gt 1 ]; do + normalize_file "${1}" + + echo "FILE: ${FILE}" + + if [[ -f "${FILE}" ]]; then + if [[ -f "${FILE}.bak" ]]; then + mv -f $FILE{.bak,} + fi + + git apply --reject "${FILE}" || true + fi + + while [[ -n "$( find . -name '*.rej' -print )" ]]; do + echo + read -rp "Press any key when the conflict have been resolved..." -n1 -s + done + + shift +done + +normalize_file "${1}" + +git add . +git diff --staged -U1 > "${FILE}" + +if [[ "${FILE}" != "../patches/helper/settings.patch" ]]; then + git reset -q --hard HEAD +else + git reset -q --hard HEAD~ +fi + +echo "The patch has been generated." diff --git a/font-size/generate-css.ts b/font-size/generate-css.ts index a7c1be6..bae0e25 100755 --- a/font-size/generate-css.ts +++ b/font-size/generate-css.ts @@ -1,40 +1,81 @@ #!/usr/bin/env node +import path from 'node:path'; import process from 'node:process'; import fse from '@zokugun/fs-extra-plus/async'; import { err, OK, type Result, stringifyError, xtry } from '@zokugun/xtry'; -import fg from 'fast-glob'; import postcss, { type Rule } from 'postcss'; -const PREFIX_MAIN = '.monaco-workbench .part.sidebar'; -const PREFIX_AUX = '.monaco-workbench .part.auxiliarybar'; -const DEFAULT_GLOB = '../vscode/**/*.css'; +type Area = { + name: string; + defaultSize: number; + files: string[]; + prefixes: string[]; +}; + const PX_REGEX = /(-?\d+(\.\d+)?)px\b/g; const COEFF_PRECISION = 6; +const HEADER = '/*** Generated for Custom Font Size ***/'; + +const AREAS: Record = { + activitybar: { + name: 'activitybar', + defaultSize: 16, + files: ['src/vs/workbench/browser/parts/activitybar/media/activityaction.css'], + prefixes: ['.monaco-workbench .activitybar'], + }, + bottompane: { + name: 'bottompane', + defaultSize: 13, + files: ['src/vs/workbench/browser/parts/panel/media/panelpart.css'], + prefixes: ['.monaco-workbench .part.panel'], + }, + statusbar: { + name: 'statusbar', + defaultSize: 12, + files: ['src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css'], + prefixes: ['.monaco-workbench .part.statusbar'], + }, + tabs: { + name: 'tabs', + defaultSize: 13, + files: ['src/vs/workbench/browser/parts/editor/media/editortabscontrol.css', 'src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css', 'src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css'], + prefixes: ['.monaco-workbench .part.editor > .content .editor-group-container'], + }, +}; function formatCoefficient(n: number): string { const fixed = n.toFixed(COEFF_PRECISION); return fixed.replace(/\.?0+$/, ''); } -function replacePx(_match: string, numStr: string): string { - const pxValue = Number.parseFloat(numStr); - const coeff = formatCoefficient(pxValue / 13); +function replacePx(area: Area) { + return (match: string, numStr: string): string => { + const pxValue = Number.parseFloat(numStr); - return `calc(var(--vscode-workbench-sidebar-font-size) * ${coeff})`; + if(pxValue === 1) { + return match; + } + + const coeff = formatCoefficient(pxValue / area.defaultSize); + + return `calc(var(--vscode-workbench-${area.name}-font-size) * ${coeff})`; + }; } -function transformPxValue(value: string): string { - return value.replaceAll(PX_REGEX, replacePx); +function transformPxValue(value: string, area: Area): string { + return value.replaceAll(PX_REGEX, replacePx(area)); } -async function processFile(filePath: string): Promise> { - const cssResult = await fse.readFile(filePath, 'utf8'); - if(cssResult.fails) { - return err(stringifyError(cssResult.error)); +async function processFile(filePath: string, area: Area): Promise> { + const readResult = await fse.readFile(filePath, 'utf8'); + if(readResult.fails) { + return err(stringifyError(readResult.error)); } - const postcssResult = xtry(() => postcss.parse(cssResult.value, { from: filePath })); + const content = extractOriginal(readResult.value); + + const postcssResult = xtry(() => postcss.parse(content, { from: filePath })); if(postcssResult.fails) { return err(`Failed to parse ${filePath}: ${stringifyError(postcssResult.error)}`); } @@ -47,7 +88,7 @@ async function processFile(filePath: string): Promise> { rule.walkDecls((declaration) => { if(PX_REGEX.test(declaration.value)) { - const newValue = transformPxValue(declaration.value); + const newValue = transformPxValue(declaration.value, area); declarationsToAdd.push({ prop: declaration.prop, value: newValue }); @@ -57,9 +98,16 @@ async function processFile(filePath: string): Promise> { if(hasPx && declarationsToAdd.length > 0) { const selectors = (rule.selectors && rule.selectors.length > 0) ? rule.selectors : [rule.selector]; - const mainSelectors = selectors.map((selector) => prefixSelector(selector, PREFIX_MAIN)).join(', '); - const auxSelectors = selectors.map((selector) => prefixSelector(selector, PREFIX_AUX)).join(', '); - const newRule = postcss.rule({ selector: `${mainSelectors}, ${auxSelectors}` }); + const prefixeds: string[] = []; + + for(const prefix of area.prefixes) { + const parts = prefix.split(' '); + const prefixed = selectors.map((s) => prefixSelector(s, parts)).join(', '); + + prefixeds.push(prefixed); + } + + const newRule = postcss.rule({ selector: `${prefixeds.join(', ')}` }); let length = 0; @@ -77,9 +125,9 @@ async function processFile(filePath: string): Promise> { }); if(generatedRoot.nodes && generatedRoot.nodes.length > 0) { - const writeResult = await fse.writeFile(filePath, cssResult.value + '\n\n\n' + generatedRoot.toString(), 'utf8'); + const writeResult = await fse.writeFile(filePath, content + `\n\n\n${HEADER}\n\n` + generatedRoot.toString(), 'utf8'); if(writeResult.fails) { - return err(stringifyError(cssResult.error)); + return err(stringifyError(readResult.error)); } console.log(`Generated: ${filePath}`); @@ -91,49 +139,78 @@ async function processFile(filePath: string): Promise> { return OK; } -async function main(): Promise { - const pattern = process.argv[2] || DEFAULT_GLOB; - const entries = await fg(pattern, { dot: true, onlyFiles: true }); +function extractOriginal(content: string): string { + const index = content.indexOf(HEADER); - if(entries.length === 0) { - console.log(`No files matched pattern: ${pattern}`); + if(index === -1) { + return content; + } + + return content.slice(0, Math.max(0, index - 3)); +} + +function extractStyle(selector: string): string { + const match = /^(\.\w+)/.exec(selector); + + return match?.[1] ?? ''; +} + +function mergeSelector(selectors: string[], prefixes: string[], index: number): void { + if(index >= prefixes.length) { return; } - for(const file of entries) { - const result = await processFile(file); + const selector = selectors[index]; + const prefix = prefixes[index]; + + const style = extractStyle(prefix); + + if(selector === style) { + if(prefix.length > style.length) { + selectors[index] = prefix; + } + + mergeSelector(selectors, prefixes, index + 1); + } + else if(selector.startsWith(style)) { + mergeSelector(selectors, prefixes, index + 1); + } + else { + selectors.splice(index + 1, 0, ...prefixes.slice(index)); + } +} + +function prefixSelector(selector: string, prefixParts: string[]): string { + const parts = selector.split(' '); + + if(parts[0] === '.mac' || parts[0] === '.linux' || parts[0] === '.windows') { + parts[0] = `${prefixParts[0]}${parts[0]}`; + + parts.splice(1, 0, ...prefixParts.slice(1)); + } + else { + mergeSelector(parts, prefixParts, 0); + } + + return parts.join(' '); +} + +async function main(): Promise { + const name = process.argv[2] || 'sidebar'; + const area = AREAS[name]; + + if(!area) { + console.log(`No area found for ${name}`); + console.log(`\nAvailable areas:\n- ${Object.keys(AREAS).join('\n- ')}`); + return; + } + + for(const file of area.files) { + const result = await processFile(path.join('..', 'vscode', file), area); if(result.fails) { console.error(`Error processing ${file}:`, result.error); } } } -function prefixSelector(selector: string, prefix: string): string { - const parts = selector.split(' '); - if(parts[0].startsWith('.monaco-workbench')) { - if(parts[1] === '.part') { - parts.splice(0, 2); - } - else { - parts.splice(0, 1); - } - - parts.unshift(prefix); - - return parts.join(' '); - } - else if(parts[0] === '.mac' || parts[0] === '.linux' || parts[0] === '.windows') { - const prefixParts = prefix.split(' '); - - parts[0] = `${prefixParts.shift()}${parts[0]}`; - - parts.splice(1, 0, ...prefixParts); - - return parts.join(' '); - } - else { - return `${prefix} ${selector}`; - } -} - await main(); diff --git a/patches/feat-sidebar-font-size.patch b/patches/feat-experimental-font.patch similarity index 63% rename from patches/feat-sidebar-font-size.patch rename to patches/feat-experimental-font.patch index b4e52da..2a1c1ea 100644 --- a/patches/feat-sidebar-font-size.patch +++ b/patches/feat-experimental-font.patch @@ -260,11 +260,30 @@ index 0b2fcbb..6370e6f 100644 } diff --git a/src/vs/base/common/font.ts b/src/vs/base/common/font.ts new file mode 100644 -index 0000000..2be97d7 +index 0000000..9b2b46c --- /dev/null +++ b/src/vs/base/common/font.ts -@@ -0,0 +1,56 @@ +@@ -0,0 +1,184 @@ ++import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; ++ +export const FONT = { ++ activityBarSize: 16, ++ activityBarSize16: 16, ++ activityBarSize24: 24, ++ activityBarSize32: 32, ++ activityBarSize36: 36, ++ activityBarSize48: 48, ++ ++ bottomPaneSize: 13, ++ bottomPaneSize22: 22, ++ ++ defaultSize: 13, ++ defaultActivityBarSize: 16, ++ defaultBottomPaneSize: 13, ++ defaultSidebarSize: 13, ++ defaultStatusBarSize: 12, ++ defaultTabsSize: 13, ++ + sidebarSize: 13, + sidebarSize8: 8, + sidebarSize10: 10, @@ -282,44 +301,642 @@ index 0000000..2be97d7 + sidebarSize44: 44, + sidebarSize62: 62, + sidebarSize72: 72, ++ ++ statusBarSize: 12, ++ statusBarSize22: 22, ++ ++ tabsSize: 13, ++ tabsSize22: 22, ++ tabsSize35: 35, ++ tabsSize38: 38, ++ tabsSize80: 80, ++ tabsSize120: 120, +}; + -+const COEFF_8 = 8/13; -+const COEFF_10 = 10/13; -+const COEFF_16 = 16/13; -+const COEFF_17 = 17/13; -+const COEFF_18 = 18/13; -+const COEFF_20 = 20/13; -+const COEFF_22 = 22/13; -+const COEFF_23 = 23/13; -+const COEFF_24 = 24/13; -+const COEFF_26 = 26/13; -+const COEFF_28 = 28/13; -+const COEFF_34 = 34/13; -+const COEFF_39 = 39/13; -+const COEFF_44 = 44/13; -+const COEFF_62 = 62/13; -+const COEFF_72 = 72/13; ++// Activity bar coefficients (base 16) ++const ACTIVITY_BAR_COEFF_24 = 24/16; ++const ACTIVITY_BAR_COEFF_32 = 32/16; ++const ACTIVITY_BAR_COEFF_36 = 36/16; ++const ACTIVITY_BAR_COEFF_48 = 48/16; ++ ++// Panel coefficients (base 13) ++const BOTTOM_PANEL_COEFF_22 = 22/13; ++ ++// Workbench coefficients (base 13) ++const DEFAULT_COEFF_12 = 12/13; ++const DEFAULT_COEFF_16 = 16/13; ++ ++// Sidebar coefficients (base 13) ++const SIDE_BAR_COEFF_8 = 8/13; ++const SIDE_BAR_COEFF_10 = 10/13; ++const SIDE_BAR_COEFF_16 = 16/13; ++const SIDE_BAR_COEFF_17 = 17/13; ++const SIDE_BAR_COEFF_18 = 18/13; ++const SIDE_BAR_COEFF_20 = 20/13; ++const SIDE_BAR_COEFF_22 = 22/13; ++const SIDE_BAR_COEFF_23 = 23/13; ++const SIDE_BAR_COEFF_24 = 24/13; ++const SIDE_BAR_COEFF_26 = 26/13; ++const SIDE_BAR_COEFF_28 = 28/13; ++const SIDE_BAR_COEFF_34 = 34/13; ++const SIDE_BAR_COEFF_39 = 39/13; ++const SIDE_BAR_COEFF_44 = 44/13; ++const SIDE_BAR_COEFF_62 = 62/13; ++const SIDE_BAR_COEFF_72 = 72/13; ++ ++// Status bar coefficients (base 12) ++const STATUS_BAR_COEFF_22 = 22/12; ++ ++// Tabs coefficients (base 13) ++const TABS_COEFF_22 = 22/13; ++const TABS_COEFF_35 = 35/13; ++const TABS_COEFF_38 = 38/13; ++const TABS_COEFF_80 = 80/13; ++const TABS_COEFF_120 = 120/13; ++ ++/** ++ * Inspect a configuration value and return whether it was explicitly set by the user, ++ * along with the clamped numeric value. ++ */ ++export function inspectFontSize( ++ configurationService:IConfigurationService, ++ key: string, ++ defaultSize: number, ++ min: number = 6, ++ max: number = 32 ++): { isUserSet: boolean; size: number } { ++ const inspected = configurationService.inspect(key); ++ const isUserSet = inspected.userValue !== undefined ++ || inspected.userLocalValue !== undefined ++ || inspected.userRemoteValue !== undefined ++ || inspected.workspaceValue !== undefined ++ || inspected.workspaceFolderValue !== undefined; ++ ++ const raw = configurationService.getValue(key); ++ const size = Math.max(min, Math.min(max, typeof raw === 'number' ? raw : defaultSize)); ++ ++ return { isUserSet, size }; ++} ++ ++export function getFontSize(configurationService: IConfigurationService, key: string, defaultSize: number, min: number = 6, max: number = 32): number { ++ const inspected = configurationService.inspect(key); ++ const isUserSet = inspected.userValue !== undefined || inspected.userLocalValue !== undefined || inspected.userRemoteValue !== undefined || inspected.workspaceValue !== undefined || inspected.workspaceFolderValue !== undefined; ++ ++ if(isUserSet) { ++ const raw = configurationService.getValue(key); ++ const size = Math.max(min, Math.min(max, typeof raw === 'number' ? raw : defaultSize)); ++ ++ return size; ++ } ++ else { ++ return defaultSize ++ } ++} ++ ++export function updateActivityBarSize(size: number): void { ++ FONT.activityBarSize = size; ++ FONT.activityBarSize24 = size * ACTIVITY_BAR_COEFF_24; ++ FONT.activityBarSize32 = size * ACTIVITY_BAR_COEFF_32; ++ FONT.activityBarSize36 = size * ACTIVITY_BAR_COEFF_36; ++ FONT.activityBarSize48 = size * ACTIVITY_BAR_COEFF_48; ++} ++ ++export function updateDefaultSize(size: number): void { ++ FONT.defaultSize = size; ++ FONT.defaultActivityBarSize = size * DEFAULT_COEFF_16 ++ FONT.defaultBottomPaneSize = size ++ FONT.defaultSidebarSize = size ++ FONT.defaultStatusBarSize = size * DEFAULT_COEFF_12 ++ FONT.defaultTabsSize = size ++} ++ ++export function updatePanelSize(size: number): void { ++ FONT.bottomPaneSize = size; ++ FONT.bottomPaneSize22 = size * BOTTOM_PANEL_COEFF_22; ++} + +export function updateSidebarSize(size: number): void { + FONT.sidebarSize = size; -+ FONT.sidebarSize8 = size * COEFF_8; -+ FONT.sidebarSize10 = size * COEFF_10; -+ FONT.sidebarSize16 = size * COEFF_16; -+ FONT.sidebarSize17 = size * COEFF_17; -+ FONT.sidebarSize18 = size * COEFF_18; -+ FONT.sidebarSize20 = size * COEFF_20; -+ FONT.sidebarSize22 = size * COEFF_22; -+ FONT.sidebarSize23 = size * COEFF_23; -+ FONT.sidebarSize24 = size * COEFF_24; -+ FONT.sidebarSize26 = size * COEFF_26; -+ FONT.sidebarSize28 = size * COEFF_28; -+ FONT.sidebarSize34 = size * COEFF_34; -+ FONT.sidebarSize39 = size * COEFF_39; -+ FONT.sidebarSize44 = size * COEFF_44; -+ FONT.sidebarSize62 = size * COEFF_62; -+ FONT.sidebarSize72 = size * COEFF_72; ++ FONT.sidebarSize8 = size * SIDE_BAR_COEFF_8; ++ FONT.sidebarSize10 = size * SIDE_BAR_COEFF_10; ++ FONT.sidebarSize16 = size * SIDE_BAR_COEFF_16; ++ FONT.sidebarSize17 = size * SIDE_BAR_COEFF_17; ++ FONT.sidebarSize18 = size * SIDE_BAR_COEFF_18; ++ FONT.sidebarSize20 = size * SIDE_BAR_COEFF_20; ++ FONT.sidebarSize22 = size * SIDE_BAR_COEFF_22; ++ FONT.sidebarSize23 = size * SIDE_BAR_COEFF_23; ++ FONT.sidebarSize24 = size * SIDE_BAR_COEFF_24; ++ FONT.sidebarSize26 = size * SIDE_BAR_COEFF_26; ++ FONT.sidebarSize28 = size * SIDE_BAR_COEFF_28; ++ FONT.sidebarSize34 = size * SIDE_BAR_COEFF_34; ++ FONT.sidebarSize39 = size * SIDE_BAR_COEFF_39; ++ FONT.sidebarSize44 = size * SIDE_BAR_COEFF_44; ++ FONT.sidebarSize62 = size * SIDE_BAR_COEFF_62; ++ FONT.sidebarSize72 = size * SIDE_BAR_COEFF_72; +} ++ ++export function updateStatusBarSize(size: number): void { ++ FONT.statusBarSize = size; ++ FONT.statusBarSize22 = size * STATUS_BAR_COEFF_22; ++} ++ ++export function updateTabsSize(size: number): void { ++ FONT.tabsSize = size; ++ FONT.tabsSize22 = size * TABS_COEFF_22; ++ FONT.tabsSize35 = size * TABS_COEFF_35; ++ FONT.tabsSize38 = size * TABS_COEFF_38; ++ FONT.tabsSize80 = size * TABS_COEFF_80; ++ FONT.tabsSize120 = size * TABS_COEFF_120; ++} +\ No newline at end of file +diff --git a/src/vs/base/test/common/font.test.ts b/src/vs/base/test/common/font.test.ts +new file mode 100644 +index 0000000..62a49d5 +--- /dev/null ++++ b/src/vs/base/test/common/font.test.ts +@@ -0,0 +1,482 @@ ++/*--------------------------------------------------------------------------------------------- ++ * Copyright (c) VSCodium. All rights reserved. ++ * Licensed under the MIT License. See License.txt in the project root for license information. ++ *--------------------------------------------------------------------------------------------*/ ++ ++import assert from 'assert'; ++import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js'; ++import { FONT, updateSidebarSize, updateStatusBarSize, updatePanelSize, updateActivityBarSize, updateTabsSize } from '../../common/font.js'; ++ ++/** ++ * Test file for src/vs/base/common/font.ts ++ * ++ * Tests all update*Size() functions for: ++ * - Default values match upstream VS Code hardcoded constants ++ * - Proportional scaling preserves ratios at non-default sizes ++ * - Boundary values (minimum=6, maximum=32) produce positive values ++ * - Reset to default restores original values ++ * - Non-divisible sizes produce consistent coefficient-based output ++ * - Cross-area updates do not mutate unrelated fields ++ */ ++ ++const EPSILON = 1e-9; ++ ++/** Assert two numbers are equal within floating-point tolerance */ ++function assertClose(actual: number, expected: number, message?: string): void { ++ const diff = Math.abs(actual - expected); ++ assert.ok(diff < EPSILON, `${message ?? ''} expected ${expected}, got ${actual} (diff: ${diff})`); ++} ++ ++/** ++ * Snapshot all FONT fields to detect unintended mutations. ++ * Returns a plain object copy of every enumerable property. ++ */ ++function snapshotFont(): Record { ++ const snap: Record = {}; ++ for (const key of Object.keys(FONT)) { ++ snap[key] = (FONT as Record)[key]; ++ } ++ return snap; ++} ++ ++/** Assert that specific fields in FONT have not changed from a snapshot */ ++function assertFieldsUnchanged(snapshot: Record, prefix: string, message: string): void { ++ for (const key of Object.keys(snapshot)) { ++ if (key.startsWith(prefix)) { ++ assertClose((FONT as Record)[key], snapshot[key], `${message}: ${key}`); ++ } ++ } ++} ++ ++suite('FONT - Sidebar Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ // Capture defaults before any test mutates them ++ const DEFAULTS = snapshotFont(); ++ ++ teardown(() => { ++ // Reset after each test ++ updateSidebarSize(13); ++ }); ++ ++ test('defaults match upstream VS Code constants', () => { ++ assert.strictEqual(FONT.sidebarSize, 13); ++ assert.strictEqual(FONT.sidebarSize8, 8); ++ assert.strictEqual(FONT.sidebarSize10, 10); ++ assert.strictEqual(FONT.sidebarSize16, 16); ++ assert.strictEqual(FONT.sidebarSize17, 17); ++ assert.strictEqual(FONT.sidebarSize18, 18); ++ assert.strictEqual(FONT.sidebarSize20, 20); ++ assert.strictEqual(FONT.sidebarSize22, 22); ++ assert.strictEqual(FONT.sidebarSize23, 23); ++ assert.strictEqual(FONT.sidebarSize24, 24); ++ assert.strictEqual(FONT.sidebarSize26, 26); ++ assert.strictEqual(FONT.sidebarSize28, 28); ++ assert.strictEqual(FONT.sidebarSize34, 34); ++ assert.strictEqual(FONT.sidebarSize39, 39); ++ assert.strictEqual(FONT.sidebarSize44, 44); ++ assert.strictEqual(FONT.sidebarSize62, 62); ++ assert.strictEqual(FONT.sidebarSize72, 72); ++ }); ++ ++ test('proportional scaling preserves ratios at 2x', () => { ++ updateSidebarSize(26); // 2x default ++ assert.strictEqual(FONT.sidebarSize, 26); ++ assert.strictEqual(FONT.sidebarSize8, 16); ++ assert.strictEqual(FONT.sidebarSize22, 44); ++ assert.strictEqual(FONT.sidebarSize44, 88); ++ assert.strictEqual(FONT.sidebarSize72, 144); ++ }); ++ ++ test('non-divisible size produces consistent coefficient-based values', () => { ++ updateSidebarSize(7); ++ assertClose(FONT.sidebarSize22, 7 * (22 / 13)); ++ assertClose(FONT.sidebarSize44, 7 * (44 / 13)); ++ assertClose(FONT.sidebarSize72, 7 * (72 / 13)); ++ }); ++ ++ test('another non-divisible size (31)', () => { ++ updateSidebarSize(31); ++ assertClose(FONT.sidebarSize22, 31 * (22 / 13)); ++ assertClose(FONT.sidebarSize44, 31 * (44 / 13)); ++ }); ++ ++ test('minimum value (6) produces positive values', () => { ++ updateSidebarSize(6); ++ assert.strictEqual(FONT.sidebarSize, 6); ++ assert.ok(FONT.sidebarSize8 > 0, 'sidebarSize8 must be positive'); ++ assert.ok(FONT.sidebarSize10 > 0, 'sidebarSize10 must be positive'); ++ assert.ok(FONT.sidebarSize22 > 0, 'sidebarSize22 must be positive'); ++ assert.ok(FONT.sidebarSize72 > 0, 'sidebarSize72 must be positive'); ++ }); ++ ++ test('maximum value (32) produces reasonable values', () => { ++ updateSidebarSize(32); ++ assert.strictEqual(FONT.sidebarSize, 32); ++ assert.ok(FONT.sidebarSize22 > 40, 'row height should scale up'); ++ assert.ok(FONT.sidebarSize22 < 80, 'row height should not be extreme'); ++ }); ++ ++ test('reset to default restores all values', () => { ++ updateSidebarSize(20); ++ assert.notStrictEqual(FONT.sidebarSize22, DEFAULTS.sidebarSize22); ++ updateSidebarSize(13); ++ assertFieldsUnchanged(DEFAULTS, 'sidebar', 'after reset'); ++ }); ++ ++ test('multiple updates in sequence are idempotent at same value', () => { ++ updateSidebarSize(18); ++ const snap = snapshotFont(); ++ updateSidebarSize(18); ++ assertFieldsUnchanged(snap, 'sidebar', 'idempotent'); ++ }); ++}); ++ ++suite('FONT - Status Bar Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateStatusBarSize(12); ++ }); ++ ++ test('defaults match upstream VS Code status bar constants', () => { ++ assert.strictEqual(FONT.statusBarSize, 12); ++ assert.strictEqual(FONT.statusBarSize22, 22); // StatusbarPart.HEIGHT ++ }); ++ ++ test('proportional scaling at 2x', () => { ++ updateStatusBarSize(24); ++ assert.strictEqual(FONT.statusBarSize, 24); ++ assert.strictEqual(FONT.statusBarSize22, 44); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updateStatusBarSize(7); ++ assertClose(FONT.statusBarSize22, 7 * (22 / 12)); ++ }); ++ ++ test('minimum value (6) produces positive height', () => { ++ updateStatusBarSize(6); ++ assert.strictEqual(FONT.statusBarSize, 6); ++ assert.ok(FONT.statusBarSize22 > 0, 'height must be positive'); ++ assertClose(FONT.statusBarSize22, 6 * (22 / 12)); ++ }); ++ ++ test('maximum value (32) produces reasonable height', () => { ++ updateStatusBarSize(32); ++ assertClose(FONT.statusBarSize22, 32 * (22 / 12)); ++ assert.ok(FONT.statusBarSize22 > 50, 'height should scale up'); ++ assert.ok(FONT.statusBarSize22 < 70, 'height should not be extreme'); ++ }); ++ ++ test('reset to default restores values', () => { ++ updateStatusBarSize(20); ++ updateStatusBarSize(12); ++ assert.strictEqual(FONT.statusBarSize, 12); ++ assert.strictEqual(FONT.statusBarSize22, 22); ++ }); ++}); ++ ++suite('FONT - Panel Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updatePanelSize(13); ++ }); ++ ++ test('defaults match sidebar defaults (same base size)', () => { ++ assert.strictEqual(FONT.bottomPaneSize, 13); ++ assert.strictEqual(FONT.bottomPaneSize22, 22); ++ }); ++ ++ test('panel and sidebar can have independent sizes', () => { ++ updatePanelSize(18); ++ assert.strictEqual(FONT.bottomPaneSize, 18); ++ assert.notStrictEqual(FONT.bottomPaneSize22, 22); ++ // Sidebar unchanged ++ assert.strictEqual(FONT.sidebarSize, 13); ++ assert.strictEqual(FONT.sidebarSize22, 22); ++ }); ++ ++ test('proportional scaling at 2x', () => { ++ updatePanelSize(26); ++ assert.strictEqual(FONT.bottomPaneSize22, 44); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updatePanelSize(7); ++ assertClose(FONT.bottomPaneSize22, 7 * (22 / 13)); ++ }); ++ ++ test('minimum value (6)', () => { ++ updatePanelSize(6); ++ assert.ok(FONT.bottomPaneSize22 > 0, 'row height must be positive'); ++ assert.ok(FONT.bottomPaneSize22 >= 10, 'row height at minimum should be usable'); ++ }); ++ ++ test('maximum value (32)', () => { ++ updatePanelSize(32); ++ assert.ok(FONT.bottomPaneSize22 > 50, 'row height should scale up'); ++ }); ++ ++ test('reset to default restores values', () => { ++ updatePanelSize(20); ++ updatePanelSize(13); ++ assert.strictEqual(FONT.bottomPaneSize, 13); ++ assert.strictEqual(FONT.bottomPaneSize22, 22); ++ }); ++}); ++ ++suite('FONT - Activity Bar Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateActivityBarSize(16); ++ }); ++ ++ test('defaults match upstream VS Code activity bar constants', () => { ++ assert.strictEqual(FONT.activityBarSize, 16); ++ assert.strictEqual(FONT.activityBarSize16, 16); // COMPACT_ICON_SIZE ++ assert.strictEqual(FONT.activityBarSize24, 24); // ICON_SIZE ++ assert.strictEqual(FONT.activityBarSize32, 32); // COMPACT_ACTION_HEIGHT ++ assert.strictEqual(FONT.activityBarSize36, 36); // COMPACT_ACTIVITYBAR_WIDTH ++ assert.strictEqual(FONT.activityBarSize48, 48); // ACTION_HEIGHT / ACTIVITYBAR_WIDTH ++ }); ++ ++ test('proportional scaling at 2x', () => { ++ updateActivityBarSize(32); ++ assert.strictEqual(FONT.activityBarSize, 32); ++ assert.strictEqual(FONT.activityBarSize16, 32); // compact icon = base size ++ assert.strictEqual(FONT.activityBarSize24, 48); ++ assert.strictEqual(FONT.activityBarSize32, 64); ++ assert.strictEqual(FONT.activityBarSize36, 72); ++ assert.strictEqual(FONT.activityBarSize48, 96); ++ }); ++ ++ test('compact constants scale correctly', () => { ++ updateActivityBarSize(20); ++ // Compact icon size = base size * (16/16) = 20 ++ assertClose(FONT.activityBarSize16, 20 * (16 / 16)); ++ // Compact width = base * (36/16) = 45 ++ assertClose(FONT.activityBarSize36, 20 * (36 / 16)); ++ // Compact action height = base * (32/16) = 40 ++ assertClose(FONT.activityBarSize32, 20 * (32 / 16)); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updateActivityBarSize(7); ++ assertClose(FONT.activityBarSize24, 7 * (24 / 16)); ++ assertClose(FONT.activityBarSize48, 7 * (48 / 16)); ++ assertClose(FONT.activityBarSize36, 7 * (36 / 16)); ++ }); ++ ++ test('minimum value (6) produces positive values', () => { ++ updateActivityBarSize(6); ++ assert.strictEqual(FONT.activityBarSize, 6); ++ assert.ok(FONT.activityBarSize16 > 0, 'compact icon size must be positive'); ++ assert.ok(FONT.activityBarSize24 > 0, 'icon size must be positive'); ++ assert.ok(FONT.activityBarSize36 > 0, 'compact width must be positive'); ++ assert.ok(FONT.activityBarSize48 > 0, 'action height must be positive'); ++ }); ++ ++ test('maximum value (32) produces reasonable values', () => { ++ updateActivityBarSize(32); ++ assert.strictEqual(FONT.activityBarSize48, 96); ++ assert.ok(FONT.activityBarSize48 <= 100, 'action height should be bounded'); ++ }); ++ ++ test('reset to default restores values', () => { ++ updateActivityBarSize(24); ++ updateActivityBarSize(16); ++ assert.strictEqual(FONT.activityBarSize, 16); ++ assert.strictEqual(FONT.activityBarSize16, 16); ++ assert.strictEqual(FONT.activityBarSize24, 24); ++ assert.strictEqual(FONT.activityBarSize32, 32); ++ assert.strictEqual(FONT.activityBarSize36, 36); ++ assert.strictEqual(FONT.activityBarSize48, 48); ++ }); ++}); ++ ++suite('FONT - Tabs Size', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateTabsSize(13); ++ }); ++ ++ test('defaults match upstream VS Code tab constants', () => { ++ assert.strictEqual(FONT.tabsSize, 13); ++ assert.strictEqual(FONT.tabsSize22, 22); // EDITOR_TAB_HEIGHT compact ++ assert.strictEqual(FONT.tabsSize35, 35); // EDITOR_TAB_HEIGHT normal ++ assert.strictEqual(FONT.tabsSize38, 38); // TAB_WIDTH compact ++ assert.strictEqual(FONT.tabsSize80, 80); // TAB_WIDTH shrink ++ assert.strictEqual(FONT.tabsSize120, 120); // TAB_WIDTH fit ++ }); ++ ++ test('proportional scaling preserves tab height/width ratios at 2x', () => { ++ updateTabsSize(26); ++ assert.strictEqual(FONT.tabsSize, 26); ++ assert.strictEqual(FONT.tabsSize22, 44); ++ assert.strictEqual(FONT.tabsSize35, 70); ++ assert.strictEqual(FONT.tabsSize38, 76); ++ assert.strictEqual(FONT.tabsSize80, 160); ++ assert.strictEqual(FONT.tabsSize120, 240); ++ }); ++ ++ test('non-divisible size (7)', () => { ++ updateTabsSize(7); ++ assertClose(FONT.tabsSize22, 7 * (22 / 13)); ++ assertClose(FONT.tabsSize35, 7 * (35 / 13)); ++ assertClose(FONT.tabsSize80, 7 * (80 / 13)); ++ assertClose(FONT.tabsSize120, 7 * (120 / 13)); ++ }); ++ ++ test('minimum value (6) produces usable tab dimensions', () => { ++ updateTabsSize(6); ++ assert.strictEqual(FONT.tabsSize, 6); ++ assert.ok(FONT.tabsSize35 > 10, 'normal tab height must be clickable'); ++ assert.ok(FONT.tabsSize22 > 8, 'compact tab height must be usable'); ++ assert.ok(FONT.tabsSize38 > 0, 'compact tab width must be positive'); ++ assert.ok(FONT.tabsSize80 > 0, 'shrink tab width must be positive'); ++ }); ++ ++ test('maximum value (32) produces reasonable tab dimensions', () => { ++ updateTabsSize(32); ++ assert.ok(FONT.tabsSize35 > 80, 'normal tab height should scale up'); ++ assert.ok(FONT.tabsSize35 < 100, 'normal tab height should be bounded'); ++ }); ++ ++ test('reset to default restores all values', () => { ++ updateTabsSize(20); ++ updateTabsSize(13); ++ assert.strictEqual(FONT.tabsSize, 13); ++ assert.strictEqual(FONT.tabsSize22, 22); ++ assert.strictEqual(FONT.tabsSize35, 35); ++ assert.strictEqual(FONT.tabsSize38, 38); ++ assert.strictEqual(FONT.tabsSize80, 80); ++ assert.strictEqual(FONT.tabsSize120, 120); ++ }); ++}); ++ ++suite('FONT - Cross-area independence', () => { ++ ++ ensureNoDisposablesAreLeakedInTestSuite(); ++ ++ teardown(() => { ++ updateSidebarSize(13); ++ updateStatusBarSize(12); ++ updatePanelSize(13); ++ updateActivityBarSize(16); ++ updateTabsSize(13); ++ }); ++ ++ test('updating sidebar does not affect any other area (full derived field check)', () => { ++ const before = snapshotFont(); ++ updateSidebarSize(20); ++ ++ // All non-sidebar fields must be unchanged ++ assertFieldsUnchanged(before, 'statusBar', 'after sidebar update'); ++ assertFieldsUnchanged(before, 'panel', 'after sidebar update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after sidebar update'); ++ assertFieldsUnchanged(before, 'tabs', 'after sidebar update'); ++ }); ++ ++ test('updating statusBar does not affect any other area', () => { ++ const before = snapshotFont(); ++ updateStatusBarSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after statusBar update'); ++ assertFieldsUnchanged(before, 'panel', 'after statusBar update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after statusBar update'); ++ assertFieldsUnchanged(before, 'tabs', 'after statusBar update'); ++ }); ++ ++ test('updating panel does not affect any other area', () => { ++ const before = snapshotFont(); ++ updatePanelSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after panel update'); ++ assertFieldsUnchanged(before, 'statusBar', 'after panel update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after panel update'); ++ assertFieldsUnchanged(before, 'tabs', 'after panel update'); ++ }); ++ ++ test('updating activityBar does not affect any other area', () => { ++ const before = snapshotFont(); ++ updateActivityBarSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after activityBar update'); ++ assertFieldsUnchanged(before, 'statusBar', 'after activityBar update'); ++ assertFieldsUnchanged(before, 'panel', 'after activityBar update'); ++ assertFieldsUnchanged(before, 'tabs', 'after activityBar update'); ++ }); ++ ++ test('updating tabs does not affect any other area', () => { ++ const before = snapshotFont(); ++ updateTabsSize(20); ++ ++ assertFieldsUnchanged(before, 'sidebar', 'after tabs update'); ++ assertFieldsUnchanged(before, 'statusBar', 'after tabs update'); ++ assertFieldsUnchanged(before, 'panel', 'after tabs update'); ++ assertFieldsUnchanged(before, 'activityBar', 'after tabs update'); ++ }); ++ ++ test('all areas set to same value produce different derived values due to different coefficients', () => { ++ const commonSize = 18; ++ updateSidebarSize(commonSize); ++ updateStatusBarSize(commonSize); ++ updatePanelSize(commonSize); ++ updateActivityBarSize(commonSize); ++ updateTabsSize(commonSize); ++ ++ assert.strictEqual(FONT.sidebarSize, commonSize); ++ assert.strictEqual(FONT.statusBarSize, commonSize); ++ assert.strictEqual(FONT.bottomPaneSize, commonSize); ++ assert.strictEqual(FONT.activityBarSize, commonSize); ++ assert.strictEqual(FONT.tabsSize, commonSize); ++ ++ // sidebarSize22 = 18 * (22/13), statusBarSize22 = 18 * (22/12) ++ // Different coefficients → different results ++ assert.notStrictEqual(FONT.sidebarSize22, FONT.statusBarSize22, ++ 'same base size should produce different derived values due to different coefficients'); ++ }); ++ ++ test('sequential updates across all areas and full reset', () => { ++ updateSidebarSize(8); ++ updateStatusBarSize(10); ++ updatePanelSize(15); ++ updateActivityBarSize(20); ++ updateTabsSize(25); ++ ++ // Verify all set correctly ++ assert.strictEqual(FONT.sidebarSize, 8); ++ assert.strictEqual(FONT.statusBarSize, 10); ++ assert.strictEqual(FONT.bottomPaneSize, 15); ++ assert.strictEqual(FONT.activityBarSize, 20); ++ assert.strictEqual(FONT.tabsSize, 25); ++ ++ // Reset all ++ updateSidebarSize(13); ++ updateStatusBarSize(12); ++ updatePanelSize(13); ++ updateActivityBarSize(16); ++ updateTabsSize(13); ++ ++ // All defaults restored ++ assert.strictEqual(FONT.sidebarSize, 13); ++ assert.strictEqual(FONT.sidebarSize22, 22); ++ assert.strictEqual(FONT.statusBarSize, 12); ++ assert.strictEqual(FONT.statusBarSize22, 22); ++ assert.strictEqual(FONT.bottomPaneSize, 13); ++ assert.strictEqual(FONT.bottomPaneSize22, 22); ++ assert.strictEqual(FONT.activityBarSize, 16); ++ assert.strictEqual(FONT.activityBarSize48, 48); ++ assert.strictEqual(FONT.tabsSize, 13); ++ assert.strictEqual(FONT.tabsSize35, 35); ++ }); ++}); diff --git a/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts b/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts index 328285f..0735dfa 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts @@ -334,10 +951,52 @@ index 328285f..0735dfa 100644 + return FONT.sidebarSize22; } diff --git a/src/vs/workbench/browser/media/style.css b/src/vs/workbench/browser/media/style.css -index 13ff794..e5025e1 100644 +index 13ff794..57ad58c 100644 --- a/src/vs/workbench/browser/media/style.css +++ b/src/vs/workbench/browser/media/style.css -@@ -322 +322,41 @@ body { +@@ -11,20 +11,20 @@ + +-.monaco-workbench.mac { font-family: -apple-system, BlinkMacSystemFont, sans-serif; } +-.monaco-workbench.mac:lang(zh-Hans) { font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; } +-.monaco-workbench.mac:lang(zh-Hant) { font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; } +-.monaco-workbench.mac:lang(ja) { font-family: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; } +-.monaco-workbench.mac:lang(ko) { font-family: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Nanum Gothic", "AppleGothic", sans-serif; } +- +-.monaco-workbench.windows { font-family: "Segoe WPC", "Segoe UI", sans-serif; } +-.monaco-workbench.windows:lang(zh-Hans) { font-family: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; } +-.monaco-workbench.windows:lang(zh-Hant) { font-family: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; } +-.monaco-workbench.windows:lang(ja) { font-family: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; } +-.monaco-workbench.windows:lang(ko) { font-family: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; } ++.monaco-workbench.mac { --monaco-font: -apple-system, BlinkMacSystemFont, sans-serif; } ++.monaco-workbench.mac:lang(zh-Hans) { --monaco-font: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; } ++.monaco-workbench.mac:lang(zh-Hant) { --monaco-font: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; } ++.monaco-workbench.mac:lang(ja) { --monaco-font: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; } ++.monaco-workbench.mac:lang(ko) { --monaco-font: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Nanum Gothic", "AppleGothic", sans-serif; } ++ ++.monaco-workbench.windows { --monaco-font: "Segoe WPC", "Segoe UI", sans-serif; } ++.monaco-workbench.windows:lang(zh-Hans) { --monaco-font: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; } ++.monaco-workbench.windows:lang(zh-Hant) { --monaco-font: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; } ++.monaco-workbench.windows:lang(ja) { --monaco-font: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; } ++.monaco-workbench.windows:lang(ko) { --monaco-font: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; } + + /* Linux: add `system-ui` as first font and not `Ubuntu` to allow other distribution pick their standard OS font */ +-.monaco-workbench.linux { font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif; } +-.monaco-workbench.linux:lang(zh-Hans) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; } +-.monaco-workbench.linux:lang(zh-Hant) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; } +-.monaco-workbench.linux:lang(ja) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; } +-.monaco-workbench.linux:lang(ko) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; } ++.monaco-workbench.linux { --monaco-font: system-ui, "Ubuntu", "Droid Sans", sans-serif; } ++.monaco-workbench.linux:lang(zh-Hans) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; } ++.monaco-workbench.linux:lang(zh-Hant) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; } ++.monaco-workbench.linux:lang(ja) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; } ++.monaco-workbench.linux:lang(ko) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; } + +@@ -55,2 +55,4 @@ body { + color: var(--vscode-foreground); ++ font-family: var(--vscode-workbench-font-family, var(--monaco-font)); ++ font-size: var(--vscode-workbench-font-size, 13px); + } +@@ -322 +324,41 @@ body { } + + @@ -380,70 +1039,575 @@ index 13ff794..e5025e1 100644 + outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) +} \ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +index 0307cab..5e5f6f3 100644 +--- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts ++++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +@@ -40,2 +40,3 @@ import { IViewsService } from '../../../services/views/common/viewsService.js'; + import { SwitchCompositeViewAction } from '../compositeBarActions.js'; ++import { FONT, getFontSize, updateActivityBarSize } from '../../../../base/common/font.js'; + +@@ -45,2 +46,3 @@ export class ActivitybarPart extends Part { + static readonly COMPACT_ACTION_HEIGHT = 32; ++ static readonly COMPACT_ACTION_HEIGHT_RATIO = 32/48; + +@@ -48,2 +50,3 @@ export class ActivitybarPart extends Part { + static readonly COMPACT_ACTIVITYBAR_WIDTH = 36; ++ static readonly COMPACT_ACTIVITYBAR_WIDTH_RATIO = 36/48; + +@@ -51,2 +54,3 @@ export class ActivitybarPart extends Part { + static readonly COMPACT_ICON_SIZE = 16; ++ static readonly COMPACT_ICON_SIZE_RATIO = 16/24; + +@@ -58,4 +62,4 @@ export class ActivitybarPart extends Part { + +- get minimumWidth(): number { return this._isCompact ? ActivitybarPart.COMPACT_ACTIVITYBAR_WIDTH : ActivitybarPart.ACTIVITYBAR_WIDTH; } +- get maximumWidth(): number { return this._isCompact ? ActivitybarPart.COMPACT_ACTIVITYBAR_WIDTH : ActivitybarPart.ACTIVITYBAR_WIDTH; } ++ get minimumWidth(): number { return this._isCompact ? FONT.activityBarSize48 * ActivitybarPart.COMPACT_ACTIVITYBAR_WIDTH_RATIO : FONT.activityBarSize48; } ++ get maximumWidth(): number { return this._isCompact ? FONT.activityBarSize48 * ActivitybarPart.COMPACT_ACTIVITYBAR_WIDTH_RATIO : FONT.activityBarSize48; } + readonly minimumHeight: number = 0; +@@ -90,2 +94,11 @@ export class ActivitybarPart extends Part { + })); ++ ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.activityBar.experimental.fontFamily') || e.affectsConfiguration('workbench.activityBar.experimental.fontSize')) { ++ this.applyActivityBarFontFamily(); ++ this.applyActivityBarFontSize(); ++ this.recreateCompositeBar(); ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ })); + } +@@ -96,4 +109,4 @@ export class ActivitybarPart extends Part { + this.element.style.setProperty('--activity-bar-width', `${this.minimumWidth}px`); +- this.element.style.setProperty('--activity-bar-action-height', `${this._isCompact ? ActivitybarPart.COMPACT_ACTION_HEIGHT : ActivitybarPart.ACTION_HEIGHT}px`); +- this.element.style.setProperty('--activity-bar-icon-size', `${this._isCompact ? ActivitybarPart.COMPACT_ICON_SIZE : ActivitybarPart.ICON_SIZE}px`); ++ this.element.style.setProperty('--activity-bar-action-height', `${this._isCompact ? FONT.activityBarSize32 : FONT.activityBarSize48}px`); ++ this.element.style.setProperty('--activity-bar-icon-size', `${this._isCompact ? FONT.activityBarSize : FONT.activityBarSize24}px`); + } +@@ -153,2 +166,6 @@ export class ActivitybarPart extends Part { + ++ // Apply font settings before show() so composite bar uses correct sizes ++ this.applyActivityBarFontFamily(parent); ++ this.applyActivityBarFontSize(parent); ++ + this.updateCompactStyle(); +@@ -162,2 +179,34 @@ export class ActivitybarPart extends Part { + ++ private applyActivityBarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const family = this.configurationService.getValue('workbench.activityBar.experimental.fontFamily'); ++ ++ if (family) { ++ target.style.setProperty('--vscode-workbench-activitybar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-activitybar-font-family'); ++ } ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ ++ private applyActivityBarFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const configuredSize = getFontSize(this.configurationService, 'workbench.activityBar.experimental.fontSize', FONT.defaultActivityBarSize); ++ ++ updateActivityBarSize(configuredSize); ++ ++ target.style.setProperty('--vscode-workbench-activitybar-font-size', `${FONT.activityBarSize}px`); ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ + getPinnedPaneCompositeIds(): string[] { +diff --git a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css +index a40a351..aeae132 100644 +--- a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css ++++ b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css +@@ -230 +230,59 @@ + } ++ ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .activitybar > .content .composite-bar > .monaco-action-bar .action-item::before, .monaco-workbench .activitybar > .content .composite-bar > .monaco-action-bar .action-item::after { ++ width: var(--activity-bar-width, calc(var(--vscode-workbench-activitybar-font-size) * 3)); ++ height: calc(var(--vscode-workbench-activitybar-font-size) * 0.125) ++} ++.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-label { ++ width: var(--activity-bar-width, calc(var(--vscode-workbench-activitybar-font-size) * 3)); ++ height: var(--activity-bar-action-height, calc(var(--vscode-workbench-activitybar-font-size) * 3)) ++} ++.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-label:not(.codicon) { ++ font-size: calc(var(--vscode-workbench-activitybar-font-size) * 0.9375); ++ line-height: var(--activity-bar-action-height, calc(var(--vscode-workbench-activitybar-font-size) * 3)); ++ padding: 0 0 0 var(--activity-bar-width, calc(var(--vscode-workbench-activitybar-font-size) * 3)) ++} ++.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-label.codicon { ++ font-size: var(--activity-bar-icon-size, calc(var(--vscode-workbench-activitybar-font-size) * 1.5)) ++} ++.monaco-workbench.border .activitybar.right > .content :not(.monaco-menu) > .monaco-action-bar .active-item-indicator { ++ left: calc(var(--vscode-workbench-activitybar-font-size) * -0.125) ++} ++.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .badge .badge-content { ++ top: calc(var(--vscode-workbench-activitybar-font-size) * 1.5); ++ right: calc(var(--vscode-workbench-activitybar-font-size) * 0.5); ++ font-size: calc(var(--vscode-workbench-activitybar-font-size) * 0.5625); ++ min-width: calc(var(--vscode-workbench-activitybar-font-size) * 0.5); ++ height: calc(var(--vscode-workbench-activitybar-font-size) * 1); ++ line-height: calc(var(--vscode-workbench-activitybar-font-size) * 1); ++ padding: 0 calc(var(--vscode-workbench-activitybar-font-size) * 0.25) ++} ++.monaco-workbench .activitybar.compact > .content :not(.monaco-menu) > .monaco-action-bar .badge .badge-content { ++ top: calc(var(--vscode-workbench-activitybar-font-size) * 1.0625); ++ right: calc(var(--vscode-workbench-activitybar-font-size) * 0.375); ++ min-width: calc(var(--vscode-workbench-activitybar-font-size) * 0.5625); ++ height: calc(var(--vscode-workbench-activitybar-font-size) * 0.8125); ++ line-height: calc(var(--vscode-workbench-activitybar-font-size) * 0.8125); ++ padding: 0 calc(var(--vscode-workbench-activitybar-font-size) * 0.125) ++} ++.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .profile-badge .profile-text-overlay { ++ font-size: calc(var(--vscode-workbench-activitybar-font-size) * 0.5625); ++ line-height: calc(var(--vscode-workbench-activitybar-font-size) * 0.625); ++ top: calc(var(--vscode-workbench-activitybar-font-size) * 1.5); ++ right: calc(var(--vscode-workbench-activitybar-font-size) * 0.375); ++ padding: calc(var(--vscode-workbench-activitybar-font-size) * 0.125) calc(var(--vscode-workbench-activitybar-font-size) * 0.1875) ++} ++.monaco-workbench .activitybar.compact > .content :not(.monaco-menu) > .monaco-action-bar .profile-badge .profile-text-overlay { ++ font-size: calc(var(--vscode-workbench-activitybar-font-size) * 0.5); ++ line-height: calc(var(--vscode-workbench-activitybar-font-size) * 0.5); ++ top: calc(var(--vscode-workbench-activitybar-font-size) * 0.875); ++ right: calc(var(--vscode-workbench-activitybar-font-size) * 0.125); ++ padding: calc(var(--vscode-workbench-activitybar-font-size) * 0.125) calc(var(--vscode-workbench-activitybar-font-size) * 0.125) ++} ++.monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .badge .codicon.badge-content { ++ font-size: calc(var(--vscode-workbench-activitybar-font-size) * 0.8125) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css +index d903883..1bf9716 100644 +--- a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css ++++ b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css +@@ -8,2 +8,4 @@ + height: 100%; ++ font-family: var(--vscode-workbench-activitybar-font-family, inherit); ++ font-size: var(--vscode-workbench-activitybar-font-size); + } +@@ -58,3 +60,3 @@ + width: 100%; +- height: 35px; ++ height: calc(var(--vscode-workbench-activitybar-font-size) * 2.1875); + } +@@ -63,3 +65,3 @@ + width: 100%; +- height: 35px; ++ height: calc(var(--vscode-workbench-activitybar-font-size) * 2.1875); + } diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts -index d32082b..f9272c6 100644 +index d32082b..ad7e524 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts @@ -36,2 +36,4 @@ import { VisibleViewContainersTracker } from '../visibleViewContainersTracker.js import { Extensions } from '../../panecomposite.js'; -+import { FONT, updateSidebarSize } from '../../../../base/common/font.js'; ++import { FONT, getFontSize, updateSidebarSize } from '../../../../base/common/font.js'; +import { SidebarPart } from '../sidebar/sidebarPart.js'; -@@ -147,2 +149,5 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { +@@ -147,2 +149,8 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { } + if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { + this.applyAuxiliaryBarFontSize(); ++ } ++ if (e.affectsConfiguration('workbench.sideBar.experimental.fontFamily')) { ++ this.applyAuxiliaryBarFontFamily(); + } })); -@@ -198,2 +203,4 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { +@@ -198,2 +206,37 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { container.style.borderRightWidth = borderColor && isPositionLeft ? '1px' : '0px'; + + this.applyAuxiliaryBarFontSize(container); - } -@@ -262,2 +269,18 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { - ++ this.applyAuxiliaryBarFontFamily(container); ++ } ++ ++ private applyAuxiliaryBarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const family = this.configurationService.getValue('workbench.sideBar.experimental.fontFamily'); ++ ++ if (family) { ++ target.style.setProperty('--vscode-workbench-sidebar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-sidebar-font-family'); ++ } ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ + private applyAuxiliaryBarFontSize(container?: HTMLElement): void { + const target = container ?? this.getContainer(); + if (!target) { + return; + } + -+ const configuredSize = this.configurationService.getValue(SidebarPart.fontSizeSettingsKey); -+ if (typeof configuredSize === 'number' && configuredSize > 0) { -+ updateSidebarSize(Math.trunc(configuredSize)); -+ } else { -+ updateSidebarSize(13); -+ } ++ const configuredSize = getFontSize(this.configurationService, SidebarPart.fontSizeSettingsKey, FONT.defaultSidebarSize); ++ ++ updateSidebarSize(configuredSize); + + target.style.setProperty('--vscode-workbench-sidebar-font-size', `${FONT.sidebarSize}px`); -+ } + - protected shouldShowCompositeBar(): boolean { ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed + } diff --git a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css -index aec3de2..e582843 100644 +index aec3de2..b0e1fd8 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css +++ b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css -@@ -28,2 +28,11 @@ +@@ -28,2 +28,8 @@ +.monaco-workbench .part.auxiliarybar > .content { + font-size: var(--vscode-workbench-sidebar-font-size, 13px); -+ line-height: 1.4em; -+} -+ -+.monaco-workbench .part.auxiliarybar > .title > .title-label h2 { -+ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); ++ font-family: var(--vscode-workbench-sidebar-font-family, inherit); ++ line-height: 1.4em; +} + .monaco-workbench .part.auxiliarybar > .title > .title-label { -diff --git a/src/vs/workbench/browser/parts/media/paneCompositePart.css b/src/vs/workbench/browser/parts/media/paneCompositePart.css -index fe0f2ad..0000000 100644 ---- a/src/vs/workbench/browser/parts/media/paneCompositePart.css -+++ b/src/vs/workbench/browser/parts/media/paneCompositePart.css -@@ -369 +369,49 @@ +diff --git a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts +index b0a44e2..e711a80 100644 +--- a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts ++++ b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts +@@ -48,2 +48,4 @@ import { MarkdownString } from '../../../../base/common/htmlContent.js'; + import { IManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; ++import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; ++import { FONT, getFontSize, updateTabsSize } from '../../../../base/common/font.js'; + import { applyDragImage } from '../../../../base/browser/ui/dnd/dnd.js'; +@@ -101,6 +103,8 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + +- private static readonly EDITOR_TAB_HEIGHT = { +- normal: 35 as const, +- compact: 22 as const +- }; ++ private static get EDITOR_TAB_HEIGHT() { ++ return { ++ normal: FONT.tabsSize35, ++ compact: FONT.tabsSize22 ++ }; ++ } + +@@ -142,2 +146,3 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + @IHostService private readonly hostService: IHostService, ++ @IConfigurationService protected readonly configurationService: IConfigurationService, + ) { +@@ -149,2 +154,13 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.tabs.experimental.fontFamily')) { ++ this.applyTabsFontFamily(); ++ } ++ if (e.affectsConfiguration('workbench.tabs.experimental.fontSize')) { ++ this.applyTabsFontSize(); ++ this.updateTabHeight(); ++ this.groupView.relayout(); ++ } ++ })); ++ + // Context Keys +@@ -170,2 +186,4 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + protected create(parent: HTMLElement): HTMLElement { ++ this.applyTabsFontSize(parent); ++ this.applyTabsFontFamily(parent); + this.updateTabHeight(); +@@ -174,2 +192,30 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC + ++ private applyTabsFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.parent; ++ if (!target) { ++ return; ++ } ++ ++ const family = this.configurationService.getValue('workbench.tabs.experimental.fontFamily'); ++ ++ if (family) { ++ target.style.setProperty('--vscode-workbench-tabs-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-tabs-font-family'); ++ } ++ } ++ ++ private applyTabsFontSize(container?: HTMLElement): void { ++ const target = container ?? this.parent; ++ if (!target) { ++ return; ++ } ++ ++ const configuredSize = getFontSize(this.configurationService, 'workbench.tabs.experimental.fontSize', FONT.defaultTabsSize); ++ ++ updateTabsSize(configuredSize); ++ ++ target.style.setProperty('--vscode-workbench-tabs-font-size', `${FONT.tabsSize}px`); ++ } ++ + private get editorActionsEnabled(): boolean { +diff --git a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css +index 57ab8ca..56f5996 100644 +--- a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css ++++ b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css +@@ -9,2 +9,3 @@ + cursor: pointer; ++ font-family: var(--vscode-workbench-tabs-font-family, inherit); + } +@@ -47 +48,36 @@ } + + + ++/*** Handcrafted for Custom Font Size ***/ ++ ++.monaco-workbench .part.editor > .content .editor-group-container > .title { ++ font-size: var(--vscode-workbench-tabs-font-size); ++} ++ ++.monaco-workbench .part.editor > .content .editor-group-container .monaco-icon-label::before { ++ background-size: calc(var(--vscode-workbench-tabs-font-size) * 1.2307692308); ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 1.2307692308); ++ width: calc(var(--vscode-workbench-tabs-font-size) * 1.2307692308); ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.6923076923); ++} ++ ++.monaco-workbench .part.editor > .content .editor-group-container .show-file-icons .file-icon::before { ++ font-size: calc(var(--vscode-workbench-tabs-font-size) * 1.5); ++} ++ ++.monaco-workbench .part.editor > .content .editor-group-container .codicon[class*='codicon-'] { ++ font-size: calc(var(--vscode-workbench-tabs-font-size) * 1.2307692308); ++} ++.monaco-workbench .part.editor > .content .editor-group-container .monaco-action-bar .action-item .codicon { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 1.2307692308); ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.2307692308); ++} ++ ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .part.editor > .content .editor-group-container > .title .title-label a, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab .tab-label a { ++ font-size: calc(var(--vscode-workbench-tabs-font-size) * 1) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css b/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css +index a24f761..4f3bc89 100644 +--- a/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css ++++ b/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css +@@ -47 +47,28 @@ + } ++ ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control { ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.692308) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-icon-label { ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.692308); ++ line-height: calc(var(--vscode-workbench-tabs-font-size) * 1.692308) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-icon-label::before { ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.692308) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .outline-element-icon { ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 0.230769); ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.692308); ++ line-height: calc(var(--vscode-workbench-tabs-font-size) * 1.692308) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-breadcrumb-item::before { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.692308) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-breadcrumb-item:last-child { ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 0.615385) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css +index 924d9b3..9775338 100644 +--- a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css ++++ b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css +@@ -168,4 +168,4 @@ + .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed { +- min-width: var(--tab-sizing-current-width, var(--tab-sizing-fixed-min-width, 50px)); +- max-width: var(--tab-sizing-current-width, var(--tab-sizing-fixed-max-width, 160px)); ++ min-width: 50px; ++ max-width: 160px; + flex: 1 0 0; /* all tabs are evenly sized and grow */ +@@ -177,3 +177,3 @@ + * of the tabs container */ +- min-width: calc(var(--tab-sizing-current-width, var(--tab-sizing-fixed-min-width, 50px)) - 1px); ++ min-width: 50px - 1px; + } +@@ -560 +560,109 @@ + } ++ ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .part.editor > .content .editor-group-container > .title > .tabs-and-actions-container.tabs-border-bottom::after { ++ height: 1px ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab { ++ padding-left: calc(var(--vscode-workbench-tabs-font-size) * 0.769231); ++ outline-offset: calc(var(--vscode-workbench-tabs-font-size) * -0.153846) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.has-icon.tab-actions-right, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.has-icon.close-action-off:not(.sticky-compact), .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.has-icon.tab-actions-right, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.has-icon.close-action-off:not(.sticky-compact) { ++ padding-left: calc(var(--vscode-workbench-tabs-font-size) * 0.384615) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fit { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 9.230769) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed { ++ min-width: calc(var(--vscode-workbench-tabs-font-size) * 3.846154); ++ max-width: calc(var(--vscode-workbench-tabs-font-size) * 12.307692) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.last-in-row { ++ min-width: calc(var(--vscode-workbench-tabs-font-size) * 3.846154) - 1px ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink { ++ min-width: calc(var(--vscode-workbench-tabs-font-size) * 6.153846) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fit.sticky-compact, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.sticky-compact, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.sticky-compact { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 2.923077); ++ min-width: calc(var(--vscode-workbench-tabs-font-size) * 2.923077); ++ max-width: calc(var(--vscode-workbench-tabs-font-size) * 2.923077) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fit.sticky-shrink, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.sticky-shrink, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.sticky-shrink { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 6.153846); ++ min-width: calc(var(--vscode-workbench-tabs-font-size) * 6.153846); ++ max-width: calc(var(--vscode-workbench-tabs-font-size) * 6.153846) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.tab-actions-left .tab-fade-hider, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.close-action-off .tab-fade-hider, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.tab-actions-left .tab-fade-hider, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.close-action-off .tab-fade-hider { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 0.384615) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.tab-actions-left, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.tab-actions-left { ++ min-width: calc(var(--vscode-workbench-tabs-font-size) * 6.153846); ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 0.384615) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.tab-actions-left:not(.sticky-compact) { ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 0.769231) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.active.tab-border-top:not(:focus) > .tab-border-top-container, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.selected.tab-border-top:not(:focus) > .tab-border-top-container { ++ height: 1px ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.active.tab-border-bottom > .tab-border-bottom-container { ++ height: 1px ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.dirty-border-top:not(:focus) > .tab-border-top-container { ++ height: calc(var(--vscode-workbench-tabs-font-size) * 0.153846) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink > .tab-label > .monaco-icon-label-container::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed > .tab-label > .monaco-icon-label-container::after { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 0.384615); ++ top: 1px; ++ bottom: 1px; ++ height: calc(100% - calc(var(--vscode-workbench-tabs-font-size) * 0.153846)) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink > .tab-label.tab-label-has-badge::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed > .tab-label.tab-label-has-badge::after { ++ margin-right: calc(var(--vscode-workbench-tabs-font-size) * 0.384615) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink:not(.tab-actions-left):not(.close-action-off) .tab-label { ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 0.384615) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab > .monaco-icon-label.italic > .monaco-icon-label-container { ++ padding-right: 1px ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab > .tab-actions { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 2.153846) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab > .tab-actions > .monaco-action-bar { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 2.153846) ++} ++.monaco-workbench .part.editor > .content .editor-group-container.active > .title .tabs-container > .tab > .tab-actions .action-label.codicon { ++ font-size: calc(var(--vscode-workbench-tabs-font-size) * 1.230769); ++ padding: calc(var(--vscode-workbench-tabs-font-size) * 0.153846); ++ width: calc(var(--vscode-workbench-tabs-font-size) * 1.230769); ++ height: calc(var(--vscode-workbench-tabs-font-size) * 1.230769) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.close-action-off { ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 0.769231) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.close-action-off:not(.sticky-compact), .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.close-action-off:not(.sticky-compact) { ++ padding-right: calc(var(--vscode-workbench-tabs-font-size) * 0.384615) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .editor-actions { ++ padding: 0 calc(var(--vscode-workbench-tabs-font-size) * 0.615385) 0 calc(var(--vscode-workbench-tabs-font-size) * 0.307692) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .editor-actions .action-item { ++ margin-right: calc(var(--vscode-workbench-tabs-font-size) * 0.307692) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.drop-target-left::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.drop-target-right::before { ++ width: 1px ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.drop-target-left::after { ++ right: calc(var(--vscode-workbench-tabs-font-size) * -0.076923) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.last-in-row.drop-target-left:not(:last-child)::after { ++ right: calc(var(--vscode-workbench-tabs-font-size) * 0) ++} ++.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.last-in-row.drop-target-left::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.last-in-row + .tab.drop-target-right::before, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab:last-child.drop-target-left::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab:first-child.drop-target-right::before { ++ width: calc(var(--vscode-workbench-tabs-font-size) * 0.153846) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts +index b0befd9..7c25771 100644 +--- a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts ++++ b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts +@@ -6,2 +6,3 @@ + import './media/multieditortabscontrol.css'; ++import { FONT } from '../../../../base/common/font.js'; + import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; +@@ -60,2 +61,3 @@ import { BugIndicatingError } from '../../../../base/common/errors.js'; + import { applyDragImage } from '../../../../base/browser/ui/dnd/dnd.js'; ++import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; + +@@ -96,7 +98,9 @@ export class MultiEditorTabsControl extends EditorTabsControl { + +- private static readonly TAB_WIDTH = { +- compact: 38 as const, +- shrink: 80 as const, +- fit: 120 as const +- }; ++ private static get TAB_WIDTH() { ++ return { ++ compact: FONT.tabsSize38, ++ shrink: FONT.tabsSize80, ++ fit: FONT.tabsSize120 ++ }; ++ } + +@@ -154,4 +158,5 @@ export class MultiEditorTabsControl extends EditorTabsControl { + @IHostService hostService: IHostService, ++ @IConfigurationService configurationService: IConfigurationService, + ) { +- super(parent, editorPartsView, groupsView, groupView, tabsModel, contextMenuService, instantiationService, contextKeyService, keybindingService, notificationService, quickInputService, themeService, editorResolverService, hostService); ++ super(parent, editorPartsView, groupsView, groupView, tabsModel, contextMenuService, instantiationService, contextKeyService, keybindingService, notificationService, quickInputService, themeService, editorResolverService, hostService, configurationService); + +diff --git a/src/vs/workbench/browser/parts/media/paneCompositePart.css b/src/vs/workbench/browser/parts/media/paneCompositePart.css +index fe0f2ad..3c8087b 100644 +--- a/src/vs/workbench/browser/parts/media/paneCompositePart.css ++++ b/src/vs/workbench/browser/parts/media/paneCompositePart.css +@@ -369 +369,64 @@ + } ++ ++ ++ ++/*** Custom Font Size for SideBars ***/ ++ +.monaco-workbench .part.sidebar > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item, .monaco-workbench .part.sidebar > .title.has-composite-bar > .global-actions .monaco-action-bar .action-item, .monaco-workbench .part.sidebar > .title.has-composite-bar > .global-actions-left .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .title.has-composite-bar > .global-actions .monaco-action-bar .action-item, .monaco-workbench .part.auxiliarybar > .title.has-composite-bar > .global-actions-left .monaco-action-bar .action-item { + margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) +} @@ -482,9 +1646,149 @@ index fe0f2ad..0000000 100644 +.monaco-workbench .part.sidebar .empty-pane-message-area .empty-pane-message, .monaco-workbench .part.auxiliarybar .empty-pane-message-area .empty-pane-message { + margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) +} ++ ++ ++ ++/*** Custom Font Size for Bottom Pane ***/ ++ ++.monaco-workbench .pane-composite-part.bottom .monaco-action-bar .action-label, ++.monaco-workbench .pane-composite-part.bottom .monaco-action-bar .action-item .keybinding { ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 0.8461538462); ++ padding: calc(var(--vscode-workbench-bottompane-font-size) * 0.2307692308); ++} ++ ++.monaco-workbench .pane-composite-part.bottom > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .badge .badge-content, ++.monaco-workbench .pane-composite-part.bottom > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .badge .badge-content { ++ padding: calc(var(--vscode-workbench-bottompane-font-size) * 0.2307692308) calc(var(--vscode-workbench-bottompane-font-size) * 0.3846153846); ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 0.7692307692); ++ min-width: calc(var(--vscode-workbench-bottompane-font-size) * 1.2307692308); ++ height: calc(var(--vscode-workbench-bottompane-font-size) * 1.2307692308); ++ line-height: calc(var(--vscode-workbench-bottompane-font-size) * 0.7692307692); ++ border-radius: calc(var(--vscode-workbench-bottompane-font-size) * 0.7692307692); ++} \ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/panel/media/panelpart.css b/src/vs/workbench/browser/parts/panel/media/panelpart.css +index e1c147d..63d0e10 100644 +--- a/src/vs/workbench/browser/parts/panel/media/panelpart.css ++++ b/src/vs/workbench/browser/parts/panel/media/panelpart.css +@@ -10,2 +10,7 @@ + ++.monaco-workbench .part.panel > .content { ++ font-family: var(--vscode-workbench-bottompane-font-family, inherit); ++ font-size: 13px; ++} ++ + .monaco-workbench .part.panel.bottom .composite.title { +@@ -100 +105,51 @@ + } ++ ++ ++ ++/*** Handcrafted for Custom Font Size ***/ ++ ++.monaco-workbench .part.panel.bottom { ++ font-size: var(--vscode-workbench-bottompane-font-size) ++} ++ ++.monaco-workbench .pane-composite-part.bottom .monaco-action-bar .action-label, ++.monaco-workbench .pane-composite-part.bottom .monaco-action-bar .action-item .keybinding { ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 0.8461538462); ++ padding: calc(var(--vscode-workbench-bottompane-font-size) * 0.2307692308); ++} ++ ++.monaco-workbench .pane-composite-part.bottom > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item, ++.monaco-workbench .pane-composite-part.bottom > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .action-item { ++ padding-left: calc(var(--vscode-workbench-bottompane-font-size) * 0.7692307692); ++ padding-right: calc(var(--vscode-workbench-bottompane-font-size) * 0.7692307692); ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 0.8461538462); ++ padding-bottom: calc(var(--vscode-workbench-bottompane-font-size) * 0.1538461538); ++ padding-top: calc(var(--vscode-workbench-bottompane-font-size) * 0.1538461538); ++} ++ ++.monaco-workbench .pane-composite-part.bottom > .title > .composite-bar-container > .composite-bar > .monaco-action-bar .badge, ++.monaco-workbench .pane-composite-part.bottom > .header-or-footer > .composite-bar-container > .composite-bar > .monaco-action-bar .badge { ++ margin-left: calc(var(--vscode-workbench-bottompane-font-size) * 0.1538461538); ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 0.8461538462); ++} ++ ++.monaco-workbench .pane-composite-part.bottom .monaco-action-bar .action-item .codicon { ++ width: calc(var(--vscode-workbench-bottompane-font-size) * 1.2307692308); ++ height: calc(var(--vscode-workbench-bottompane-font-size) * 1.2307692308); ++} ++ ++.monaco-workbench .pane-composite-part.bottom .codicon[class*='codicon-'] { ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 1.2307692308); ++} ++ ++.monaco-workbench .pane-composite-part.bottom .monaco-dropdown-with-primary > .dropdown-action-container > .monaco-dropdown > .dropdown-label .codicon[class*='codicon-'] { ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 0.9230769231); ++ line-height: calc(var(--vscode-workbench-bottompane-font-size) * 1.2307692308); ++} ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .part.panel > .content { ++ font-size: calc(var(--vscode-workbench-bottompane-font-size) * 1) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts +index 9afcf59..a8d4c2e 100644 +--- a/src/vs/workbench/browser/parts/panel/panelPart.ts ++++ b/src/vs/workbench/browser/parts/panel/panelPart.ts +@@ -34,2 +34,3 @@ import { IConfigurationService } from '../../../../platform/configuration/common + import { Extensions } from '../../panecomposite.js'; ++import { FONT, getFontSize, updatePanelSize as updateBottomPaneSize } from '../../../../base/common/font.js'; + +@@ -117,2 +118,8 @@ export class PanelPart extends AbstractPaneCompositePart { + } ++ if (e.affectsConfiguration('workbench.bottomPane.experimental.fontFamily')) { ++ this.applyPanelFontFamily(); ++ } ++ if (e.affectsConfiguration('workbench.bottomPane.experimental.fontSize')) { ++ this.applyPanelFontSize(); ++ } + })); +@@ -133,2 +140,37 @@ export class PanelPart extends AbstractPaneCompositePart { + } ++ ++ this.applyPanelFontFamily(container); ++ this.applyPanelFontSize(container); ++ } ++ ++ private applyPanelFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const family = this.configurationService.getValue('workbench.bottomPane.experimental.fontFamily'); ++ ++ if (family) { ++ target.style.setProperty('--vscode-workbench-bottompane-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-bottompane-font-family'); ++ } ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ ++ private applyPanelFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const configuredSize = getFontSize(this.configurationService, 'workbench.bottomPane.experimental.fontSize', FONT.defaultBottomPaneSize); ++ ++ updateBottomPaneSize(configuredSize); ++ ++ target.style.setProperty('--vscode-workbench-bottompane-font-size', `${FONT.bottomPaneSize}px`); ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed + } diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css -index decb51a..7088a97 100644 +index decb51a..3a5ff82 100644 --- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +++ b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css @@ -15,3 +15,3 @@ @@ -530,7 +1834,7 @@ index decb51a..7088a97 100644 - left: 5px; /* place icon in center */ + left: calc(var(--vscode-workbench-sidebar-font-size) * 0.385); /* place icon in center */ } -@@ -124,3 +130,72 @@ +@@ -124,3 +130,76 @@ .monaco-workbench .sidebar.pane-composite-part > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item { - max-width: 150px; + max-width: calc(var(--vscode-workbench-sidebar-font-size) * 11.538); @@ -547,7 +1851,7 @@ index decb51a..7088a97 100644 + +.monaco-workbench .part.sidebar .monaco-text-button { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923); - } ++} + +.monaco-workbench .part.sidebar .monaco-icon-label::before { + background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); @@ -586,7 +1890,7 @@ index decb51a..7088a97 100644 + +.monaco-workbench .part.sidebar .pane > .pane-header > .actions { + margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.616); -+} + } +.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .actions .action-item { + margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.308); +} @@ -604,49 +1908,243 @@ index decb51a..7088a97 100644 + height: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); + width: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); +} */ ++ ++.monaco-workbench .part.sidebar > .content { ++ font-family: var(--vscode-workbench-sidebar-font-family, inherit); ++} \ No newline at end of file diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts -index 101b9c6..6e22f7a 100644 +index 101b9c6..970cdaa 100644 --- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts +++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts @@ -36,2 +36,3 @@ import { VisibleViewContainersTracker } from '../visibleViewContainersTracker.js import { Extensions } from '../../panecomposite.js'; -+import { FONT, updateSidebarSize } from '../../../../base/common/font.js'; ++import { FONT, getFontSize, updateSidebarSize } from '../../../../base/common/font.js'; @@ -40,2 +41,3 @@ export class SidebarPart extends AbstractPaneCompositePart { static readonly activeViewletSettingsKey = 'workbench.sidebar.activeviewletid'; + static readonly fontSizeSettingsKey = 'workbench.sideBar.experimental.fontSize'; -@@ -126,2 +128,5 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -126,2 +128,8 @@ export class SidebarPart extends AbstractPaneCompositePart { } + if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { + this.applySidebarFontSize(); ++ } ++ if (e.affectsConfiguration('workbench.sideBar.experimental.fontFamily')) { ++ this.applySidebarFontFamily(); + } })); -@@ -178,2 +183,4 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -178,2 +186,5 @@ export class SidebarPart extends AbstractPaneCompositePart { container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? ''; + + this.applySidebarFontSize(container); ++ this.applySidebarFontFamily(container); } -@@ -320,2 +327,18 @@ export class SidebarPart extends AbstractPaneCompositePart { +@@ -320,2 +331,34 @@ export class SidebarPart extends AbstractPaneCompositePart { ++ private applySidebarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const family = this.configurationService.getValue('workbench.sideBar.experimental.fontFamily'); ++ ++ if (family) { ++ target.style.setProperty('--vscode-workbench-sidebar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-sidebar-font-family'); ++ } ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ + private applySidebarFontSize(container?: HTMLElement): void { + const target = container ?? this.getContainer(); + if (!target) { + return; + } + -+ const configuredSize = this.configurationService.getValue(SidebarPart.fontSizeSettingsKey); -+ if (typeof configuredSize === 'number' && configuredSize > 0) { -+ updateSidebarSize(Math.trunc(configuredSize)); -+ } else { -+ updateSidebarSize(13); -+ } ++ const configuredSize = getFontSize(this.configurationService, SidebarPart.fontSizeSettingsKey, FONT.defaultSidebarSize); ++ ++ updateSidebarSize(configuredSize); + + target.style.setProperty('--vscode-workbench-sidebar-font-size', `${FONT.sidebarSize}px`); ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed + } + private registerActions(): void { +diff --git a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css +index 7faaf9e..a29027c 100644 +--- a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css ++++ b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css +@@ -11,2 +11,3 @@ + font-size: 12px; ++ font-family: var(--vscode-workbench-statusbar-font-family, inherit); + display: flex; +@@ -236 +237,64 @@ + } ++ ++ ++ ++/*** Handcrafted for Custom Font Size ***/ ++ ++.monaco-workbench .part.statusbar .codicon[class*='codicon-'] { ++ font-size: calc(var(--vscode-workbench-statusbar-font-size) * 1.333333); ++} ++ ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .part.statusbar { ++ height: calc(var(--vscode-workbench-statusbar-font-size) * 1.833333); ++ font-size: calc(var(--vscode-workbench-statusbar-font-size) * 1) ++} ++.monaco-workbench .part.statusbar:not(:focus).status-border-top::after { ++ height: calc(var(--vscode-workbench-statusbar-font-size) * 0.083333) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item { ++ line-height: calc(var(--vscode-workbench-statusbar-font-size) * 1.833333) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item.has-beak > .status-bar-item-beak-container { ++ left: calc(50% - calc(var(--vscode-workbench-statusbar-font-size) * 0.416667)); ++ top: calc(var(--vscode-workbench-statusbar-font-size) * -0.416667); ++ width: calc(var(--vscode-workbench-statusbar-font-size) * 0.833333); ++ height: calc(var(--vscode-workbench-statusbar-font-size) * 0.416667) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item > .statusbar-item-label { ++ margin-right: calc(var(--vscode-workbench-statusbar-font-size) * 0.25); ++ margin-left: calc(var(--vscode-workbench-statusbar-font-size) * 0.25); ++ padding: 0 calc(var(--vscode-workbench-statusbar-font-size) * 0.416667); ++ outline-width: calc(var(--vscode-workbench-statusbar-font-size) * 0) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item.compact-left > .statusbar-item-label { ++ margin-right: calc(var(--vscode-workbench-statusbar-font-size) * 0.416667); ++ padding: 0 calc(var(--vscode-workbench-statusbar-font-size) * 0.25) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item.compact-right > .statusbar-item-label { ++ margin-left: calc(var(--vscode-workbench-statusbar-font-size) * 0.416667); ++ padding: 0 calc(var(--vscode-workbench-statusbar-font-size) * 0.25) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item.left.first-visible-item > .statusbar-item-label, .monaco-workbench .part.statusbar > .items-container > .statusbar-item.right.last-visible-item > .statusbar-item-label, .monaco-workbench .part.statusbar > .items-container > .statusbar-item.has-background-color > .statusbar-item-label { ++ padding-left: calc(var(--vscode-workbench-statusbar-font-size) * 0.666667); ++ padding-right: calc(var(--vscode-workbench-statusbar-font-size) * 0.666667) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item.compact-left.has-background-color > .statusbar-item-label { ++ padding-left: calc(var(--vscode-workbench-statusbar-font-size) * 0.25); ++ padding-right: calc(var(--vscode-workbench-statusbar-font-size) * 0.833333) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item.compact-right.has-background-color > .statusbar-item-label { ++ padding-left: calc(var(--vscode-workbench-statusbar-font-size) * 0.833333); ++ padding-right: calc(var(--vscode-workbench-statusbar-font-size) * 0.25) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item a:active:not(.disabled) { ++ outline: calc(var(--vscode-workbench-statusbar-font-size) * 0.083333) solid var(--vscode-contrastActiveBorder); ++ outline-offset: calc(var(--vscode-workbench-statusbar-font-size) * -0.083333) ++} ++.monaco-workbench .part.statusbar > .items-container > .statusbar-item a:hover:not(.disabled) { ++ outline: calc(var(--vscode-workbench-statusbar-font-size) * 0.083333) dashed var(--vscode-contrastActiveBorder); ++ outline-offset: calc(var(--vscode-workbench-statusbar-font-size) * -0.083333) ++} +\ No newline at end of file +diff --git a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +index 18340a8..0a33ce0 100644 +--- a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts ++++ b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +@@ -38,2 +38,4 @@ import { IView } from '../../../../base/browser/ui/grid/grid.js'; + import { isManagedHoverTooltipHTMLElement, isManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; ++import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; ++import { FONT, getFontSize, updateStatusBarSize } from '../../../../base/common/font.js'; + +@@ -120,3 +122,3 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + +- static readonly HEIGHT = 22; ++ static get HEIGHT() { return FONT.statusBarSize22; } + +@@ -126,4 +128,4 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + readonly maximumWidth: number = Number.POSITIVE_INFINITY; +- readonly minimumHeight: number = StatusbarPart.HEIGHT; +- readonly maximumHeight: number = StatusbarPart.HEIGHT; ++ get minimumHeight(): number { return FONT.statusBarSize22; } ++ get maximumHeight(): number { return FONT.statusBarSize22; } + +@@ -162,2 +164,3 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + @IContextKeyService private readonly contextKeyService: IContextKeyService, ++ @IConfigurationService private readonly configurationService: IConfigurationService, + ) { +@@ -165,2 +168,11 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.statusBar.experimental.fontFamily')) { ++ this.applyStatusBarFontFamily(); ++ } ++ if (e.affectsConfiguration('workbench.statusBar.experimental.fontSize')) { ++ this.applyStatusBarFontSize(); ++ } ++ })); ++ + this.viewModel = this._register(new StatusbarViewModel(storageService)); +@@ -429,2 +441,5 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + ++ this.applyStatusBarFontFamily(this.element); ++ this.applyStatusBarFontSize(this.element); ++ + return this.element; +@@ -432,2 +447,32 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { + ++ private applyStatusBarFontFamily(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ const family = this.configurationService.getValue('workbench.statusBar.experimental.fontFamily'); ++ if (family) { ++ target.style.setProperty('--vscode-workbench-statusbar-font-family', family); ++ } else { ++ target.style.removeProperty('--vscode-workbench-statusbar-font-family'); ++ } ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ ++ private applyStatusBarFontSize(container?: HTMLElement): void { ++ const target = container ?? this.getContainer(); ++ if (!target) { ++ return; ++ } ++ ++ const configuredSize = getFontSize(this.configurationService, 'workbench.statusBar.experimental.fontSize', FONT.defaultStatusBarSize); ++ ++ updateStatusBarSize(configuredSize); ++ ++ target.style.setProperty('--vscode-workbench-statusbar-font-size', `${FONT.statusBarSize}px`); ++ ++ this._onDidChange.fire(undefined); // Signal grid that size constraints changed ++ } ++ + private createInitialStatusbarEntries(): void { +@@ -726,4 +771,5 @@ export class MainStatusbarPart extends StatusbarPart { + @IContextKeyService contextKeyService: IContextKeyService, ++ @IConfigurationService configurationService: IConfigurationService, + ) { +- super(Parts.STATUSBAR_PART, instantiationService, themeService, contextService, storageService, layoutService, contextMenuService, contextKeyService); ++ super(Parts.STATUSBAR_PART, instantiationService, themeService, contextService, storageService, layoutService, contextMenuService, contextKeyService, configurationService); + } +@@ -740,3 +786,3 @@ export class AuxiliaryStatusbarPart extends StatusbarPart implements IAuxiliaryS + +- readonly height = StatusbarPart.HEIGHT; ++ get height() { return StatusbarPart.HEIGHT; } + +@@ -751,5 +797,6 @@ export class AuxiliaryStatusbarPart extends StatusbarPart implements IAuxiliaryS + @IContextKeyService contextKeyService: IContextKeyService, ++ @IConfigurationService configurationService: IConfigurationService, + ) { + const id = AuxiliaryStatusbarPart.COUNTER++; +- super(`workbench.parts.auxiliaryStatus.${id}`, instantiationService, themeService, contextService, storageService, layoutService, contextMenuService, contextKeyService); ++ super(`workbench.parts.auxiliaryStatus.${id}`, instantiationService, themeService, contextService, storageService, layoutService, contextMenuService, contextKeyService, configurationService); + } diff --git a/src/vs/workbench/browser/parts/views/media/paneviewlet.css b/src/vs/workbench/browser/parts/views/media/paneviewlet.css index aca98de..5bf9bf7 100644 --- a/src/vs/workbench/browser/parts/views/media/paneviewlet.css @@ -701,20 +2199,175 @@ index 1c9305b..6471a0d 100644 - static readonly ITEM_HEIGHT = 22; static readonly TREE_TEMPLATE_ID = 'treeExplorer'; diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index b1c5637..3bcdefb 100644 +index b1c5637..2f8c047 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -561,2 +561,10 @@ const registry = Registry.as(ConfigurationExtensions.Con +@@ -675,2 +675,85 @@ const registry = Registry.as(ConfigurationExtensions.Con }, -+ 'workbench.sideBar.experimental.fontSize': { -+ 'type': 'number', -+ 'default': 13, -+ 'minimum': 6, -+ 'maximum': 32, -+ 'markdownDescription': localize('sideBarFontSize', "Controls the font size used for content inside the side bars."), ++ 'workbench.experimental.fontFamily': { ++ type: 'string', ++ description: localize('workbench.fontFamily', "Controls the font family in the workbench."), ++ 'tags': ['experimental'] ++ }, ++ 'workbench.experimental.fontSize': { ++ type: 'number', ++ default: 13, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('workbench.fontSize', "Controls the font size in pixels for the workbench."), + 'tags': ['accessibility', 'experimental'] + }, - 'workbench.panel.showLabels': { ++ 'workbench.activityBar.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('activityBarFontFamily', "Controls the font family for the activity bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.activityBar.experimental.fontSize': { ++ type: 'number', ++ default: 16, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('activityBarFontSize', "Controls the font size in pixels for the activity bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.bottomPane.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('bottomPaneFontFamily', "Controls the font family for the bottom panel."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.bottomPane.experimental.fontSize': { ++ type: 'number', ++ default: 13, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('bottomPaneFontSize', "Controls the font size in pixels for the bottom panel."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.sideBar.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('sideBarFontFamily', "Controls the font family for the side bars."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.sideBar.experimental.fontSize': { ++ type: 'number', ++ default: 13, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('sideBarFontSize', "Controls the font size in pixels for the side bars."), ++ tags: ['accessibility', 'experimental'] ++ }, ++ 'workbench.statusBar.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('statusBarFontFamily', "Controls the font family for the status bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.statusBar.experimental.fontSize': { ++ type: 'number', ++ default: 12, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('statusBarFontSize', "Controls the font size in pixels for the status bar."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.tabs.experimental.fontFamily': { ++ type: 'string', ++ default: '', ++ markdownDescription: localize('tabsFontFamily', "Controls the font family in editor tabs."), ++ 'tags': ['accessibility', 'experimental'] ++ }, ++ 'workbench.tabs.experimental.fontSize': { ++ type: 'number', ++ default: 13, ++ minimum: 6, ++ maximum: 32, ++ markdownDescription: localize('tabsFontSize', "Controls the font size in pixels for editor tabs."), ++ 'tags': ['accessibility', 'experimental'] ++ }, + 'workbench.settings.editor': { +diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts +index 10e2c3e..74e3bbe 100644 +--- a/src/vs/workbench/browser/workbench.ts ++++ b/src/vs/workbench/browser/workbench.ts +@@ -9,2 +9,3 @@ import { Event, Emitter, setGlobalLeakWarningThreshold } from '../../base/common + import { RunOnceScheduler, timeout } from '../../base/common/async.js'; ++import { FONT, getFontSize, updateDefaultSize } from '../../base/common/font.js'; + import { isFirefox, isSafari, isChrome } from '../../base/browser/browser.js'; +@@ -19,3 +20,3 @@ import { Position, Parts, IWorkbenchLayoutService, positionToString } from '../s + import { IStorageService, WillSaveStateReason, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; +-import { IConfigurationChangeEvent, IConfigurationService } from '../../platform/configuration/common/configuration.js'; ++import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; + import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; +@@ -233,3 +234,13 @@ export class Workbench extends Layout { + // Configuration changes +- this._register(configurationService.onDidChangeConfiguration(e => this.updateFontAliasing(e, configurationService))); ++ this._register(configurationService.onDidChangeConfiguration(e => { ++ if (e.affectsConfiguration('workbench.fontAliasing')) { ++ this.updateFontAliasing(configurationService); ++ } ++ if (e.affectsConfiguration('workbench.experimental.fontFamily')) { ++ this.updateFontFamily(configurationService); ++ } ++ if (e.affectsConfiguration('workbench.experimental.fontSize')) { ++ this.updateFontSize(configurationService); ++ } ++ })); + +@@ -270,3 +281,3 @@ export class Workbench extends Layout { + private fontAliasing: 'default' | 'antialiased' | 'none' | 'auto' | undefined; +- private updateFontAliasing(e: IConfigurationChangeEvent | undefined, configurationService: IConfigurationService) { ++ private updateFontAliasing(configurationService: IConfigurationService) { + if (!isMacintosh) { +@@ -275,6 +286,2 @@ export class Workbench extends Layout { + +- if (e && !e.affectsConfiguration('workbench.fontAliasing')) { +- return; +- } +- + const aliasing = configurationService.getValue<'default' | 'antialiased' | 'none' | 'auto'>('workbench.fontAliasing'); +@@ -296,2 +303,31 @@ export class Workbench extends Layout { + ++ private fontFamily: string | undefined; ++ private updateFontFamily(configurationService: IConfigurationService) { ++ let family = configurationService.getValue('workbench.experimental.fontFamily'); ++ ++ if (this.fontFamily === family) { ++ return; ++ } ++ ++ this.fontFamily = family; ++ ++ if (family) { ++ this.mainContainer.style.setProperty('--vscode-workbench-font-family', family); ++ } else { ++ this.mainContainer.style.removeProperty('--vscode-workbench-font-family'); ++ } ++ } ++ ++ private updateFontSize(configurationService: IConfigurationService) { ++ const configuredSize = getFontSize(configurationService, 'workbench.experimental.fontSize', 13); ++ ++ if (FONT.defaultSize === configuredSize) { ++ return; ++ } ++ ++ updateDefaultSize(configuredSize); ++ ++ this.mainContainer.style.setProperty('--vscode-workbench-font-size', `${FONT.defaultSize}px`); ++ } ++ + private restoreFontInfo(storageService: IStorageService, configurationService: IConfigurationService): void { +@@ -339,3 +375,6 @@ export class Workbench extends Layout { + // Apply font aliasing +- this.updateFontAliasing(undefined, configurationService); ++ this.updateFontAliasing(configurationService); ++ ++ this.updateFontFamily(configurationService); ++ this.updateFontSize(configurationService); + diff --git a/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyTree.ts b/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyTree.ts index 6f58865..3ab0ee4 100644 --- a/src/vs/workbench/contrib/callHierarchy/browser/callHierarchyTree.ts @@ -2013,6 +3666,28 @@ index e9c0fcd..7ee6d39 100644 - this.replaceInput.width = width - 28; + this.replaceInput.width = width - FONT.sidebarSize28; this.replaceInput.inputBox.layout(); +diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts +index 21118dd..9c788d8 100644 +--- a/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts ++++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts +@@ -58,2 +58,3 @@ import { TerminalStorageKeys } from '../common/terminalStorageKeys.js'; + import { isObject } from '../../../../base/common/types.js'; ++import { FONT } from '../../../../base/common/font.js'; + +@@ -62,3 +63,2 @@ const $ = DOM.$; + export const enum TerminalTabsListSizes { +- TabHeight = 22, + NarrowViewWidth = 46, +@@ -99,3 +99,3 @@ export class TerminalTabList extends WorkbenchList { + { +- getHeight: () => TerminalTabsListSizes.TabHeight, ++ getHeight: () => FONT.bottomPaneSize22, + getTemplateId: () => 'terminal.tabs' +@@ -113,3 +113,3 @@ export class TerminalTabList extends WorkbenchList { + multipleSelectionSupport: true, +- paddingBottom: TerminalTabsListSizes.TabHeight, ++ paddingBottom: FONT.bottomPaneSize22, + dnd: instantiationService.createInstance(TerminalTabsDragAndDrop), diff --git a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts b/src/vs/workbench/contrib/testing/browser/testCoverageView.ts index e19fc27..56e4bbc 100644 --- a/src/vs/workbench/contrib/testing/browser/testCoverageView.ts diff --git a/patches/feat-workbench-font-family.patch b/patches/feat-workbench-font-family.patch deleted file mode 100644 index 94c4d4f..0000000 --- a/patches/feat-workbench-font-family.patch +++ /dev/null @@ -1,117 +0,0 @@ -diff --git a/src/vs/workbench/browser/media/style.css b/src/vs/workbench/browser/media/style.css -index 13ff794..c19b125 100644 ---- a/src/vs/workbench/browser/media/style.css -+++ b/src/vs/workbench/browser/media/style.css -@@ -11,20 +11,20 @@ - --.monaco-workbench.mac { font-family: -apple-system, BlinkMacSystemFont, sans-serif; } --.monaco-workbench.mac:lang(zh-Hans) { font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; } --.monaco-workbench.mac:lang(zh-Hant) { font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; } --.monaco-workbench.mac:lang(ja) { font-family: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; } --.monaco-workbench.mac:lang(ko) { font-family: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Nanum Gothic", "AppleGothic", sans-serif; } -- --.monaco-workbench.windows { font-family: "Segoe WPC", "Segoe UI", sans-serif; } --.monaco-workbench.windows:lang(zh-Hans) { font-family: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; } --.monaco-workbench.windows:lang(zh-Hant) { font-family: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; } --.monaco-workbench.windows:lang(ja) { font-family: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; } --.monaco-workbench.windows:lang(ko) { font-family: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; } -+.monaco-workbench.mac { --monaco-font: -apple-system, BlinkMacSystemFont, sans-serif; } -+.monaco-workbench.mac:lang(zh-Hans) { --monaco-font: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; } -+.monaco-workbench.mac:lang(zh-Hant) { --monaco-font: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; } -+.monaco-workbench.mac:lang(ja) { --monaco-font: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; } -+.monaco-workbench.mac:lang(ko) { --monaco-font: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Nanum Gothic", "AppleGothic", sans-serif; } -+ -+.monaco-workbench.windows { --monaco-font: "Segoe WPC", "Segoe UI", sans-serif; } -+.monaco-workbench.windows:lang(zh-Hans) { --monaco-font: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; } -+.monaco-workbench.windows:lang(zh-Hant) { --monaco-font: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; } -+.monaco-workbench.windows:lang(ja) { --monaco-font: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; } -+.monaco-workbench.windows:lang(ko) { --monaco-font: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; } - - /* Linux: add `system-ui` as first font and not `Ubuntu` to allow other distribution pick their standard OS font */ --.monaco-workbench.linux { font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif; } --.monaco-workbench.linux:lang(zh-Hans) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; } --.monaco-workbench.linux:lang(zh-Hant) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; } --.monaco-workbench.linux:lang(ja) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; } --.monaco-workbench.linux:lang(ko) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; } -+.monaco-workbench.linux { --monaco-font: system-ui, "Ubuntu", "Droid Sans", sans-serif; } -+.monaco-workbench.linux:lang(zh-Hans) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; } -+.monaco-workbench.linux:lang(zh-Hant) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; } -+.monaco-workbench.linux:lang(ja) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; } -+.monaco-workbench.linux:lang(ko) { --monaco-font: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; } - -@@ -55,2 +55,3 @@ body { - color: var(--vscode-foreground); -+ font-family: var(--vscode-workbench-font-family, var(--monaco-font)); - } -diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index b1c5637..a09585e 100644 ---- a/src/vs/workbench/browser/workbench.contribution.ts -+++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -675,2 +675,7 @@ const registry = Registry.as(ConfigurationExtensions.Con - }, -+ 'workbench.experimental.fontFamily': { -+ type: 'string', -+ description: localize('workbench.fontFamily', "Controls the font family in the workbench."), -+ 'tags': ['experimental'] -+ }, - 'workbench.settings.editor': { -diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts -index 10e2c3e..7259aff 100644 ---- a/src/vs/workbench/browser/workbench.ts -+++ b/src/vs/workbench/browser/workbench.ts -@@ -19,3 +19,3 @@ import { Position, Parts, IWorkbenchLayoutService, positionToString } from '../s - import { IStorageService, WillSaveStateReason, StorageScope, StorageTarget } from '../../platform/storage/common/storage.js'; --import { IConfigurationChangeEvent, IConfigurationService } from '../../platform/configuration/common/configuration.js'; -+import { IConfigurationService } from '../../platform/configuration/common/configuration.js'; - import { IInstantiationService } from '../../platform/instantiation/common/instantiation.js'; -@@ -233,3 +233,10 @@ export class Workbench extends Layout { - // Configuration changes -- this._register(configurationService.onDidChangeConfiguration(e => this.updateFontAliasing(e, configurationService))); -+ this._register(configurationService.onDidChangeConfiguration(e => { -+ if (e.affectsConfiguration('workbench.fontAliasing')) { -+ this.updateFontAliasing(configurationService); -+ } -+ else if (e.affectsConfiguration('workbench.experimental.fontFamily')) { -+ this.updateFontFamily(configurationService); -+ } -+ })); - -@@ -270,3 +277,3 @@ export class Workbench extends Layout { - private fontAliasing: 'default' | 'antialiased' | 'none' | 'auto' | undefined; -- private updateFontAliasing(e: IConfigurationChangeEvent | undefined, configurationService: IConfigurationService) { -+ private updateFontAliasing(configurationService: IConfigurationService) { - if (!isMacintosh) { -@@ -275,6 +282,2 @@ export class Workbench extends Layout { - -- if (e && !e.affectsConfiguration('workbench.fontAliasing')) { -- return; -- } -- - const aliasing = configurationService.getValue<'default' | 'antialiased' | 'none' | 'auto'>('workbench.fontAliasing'); -@@ -296,2 +299,19 @@ export class Workbench extends Layout { - -+ private fontFamily: string | undefined; -+ private updateFontFamily(configurationService: IConfigurationService) { -+ let family = configurationService.getValue('workbench.experimental.fontFamily'); -+ -+ if (this.fontFamily === family) { -+ return; -+ } -+ -+ this.fontFamily = family; -+ -+ if (family) { -+ this.mainContainer.style.setProperty('--vscode-workbench-font-family', family); -+ } else { -+ this.mainContainer.style.removeProperty('--vscode-workbench-font-family'); -+ } -+ } -+ - private restoreFontInfo(storageService: IStorageService, configurationService: IConfigurationService): void { -@@ -339,3 +359,5 @@ export class Workbench extends Layout { - // Apply font aliasing -- this.updateFontAliasing(undefined, configurationService); -+ this.updateFontAliasing(configurationService); -+ -+ this.updateFontFamily(configurationService); - diff --git a/patches/feat-workbench-zz-area-font-family.patch b/patches/feat-workbench-zz-area-font-family.patch deleted file mode 100644 index 574afad..0000000 --- a/patches/feat-workbench-zz-area-font-family.patch +++ /dev/null @@ -1,477 +0,0 @@ -diff --git a/src/vs/workbench/browser/media/style.css b/src/vs/workbench/browser/media/style.css -index 473c1f8..57ad58c 100644 ---- a/src/vs/workbench/browser/media/style.css -+++ b/src/vs/workbench/browser/media/style.css -@@ -54,6 +54,7 @@ body { - overflow: hidden; - color: var(--vscode-foreground); - font-family: var(--vscode-workbench-font-family, var(--monaco-font)); -+ font-size: var(--vscode-workbench-font-size, 13px); - } - - .monaco-workbench.web { -diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -index 080b687..cbd14af 100644 ---- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -+++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -@@ -38,6 +38,7 @@ import { IExtensionService } from '../../../services/extensions/common/extension - import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; - import { IViewsService } from '../../../services/views/common/viewsService.js'; - import { SwitchCompositeViewAction } from '../compositeBarActions.js'; -+import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; - - export class ActivitybarPart extends Part { - -@@ -65,8 +66,15 @@ export class ActivitybarPart extends Part { - @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, - @IThemeService themeService: IThemeService, - @IStorageService storageService: IStorageService, -+ @IConfigurationService private readonly configurationService: IConfigurationService, - ) { - super(Parts.ACTIVITYBAR_PART, { hasTitle: false }, themeService, storageService, layoutService); -+ -+ this._register(configurationService.onDidChangeConfiguration(e => { -+ if (e.affectsConfiguration('workbench.activityBar.experimental.fontFamily')) { -+ this.applyActivityBarFontFamily(); -+ } -+ })); - } - - private createCompositeBar(): PaneCompositeBar { -@@ -107,9 +115,24 @@ export class ActivitybarPart extends Part { - this.show(); - } - -+ this.applyActivityBarFontFamily(parent); -+ - return this.content; - } - -+ private applyActivityBarFontFamily(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ const family = this.configurationService.getValue('workbench.activityBar.experimental.fontFamily'); -+ if (family) { -+ target.style.setProperty('--vscode-workbench-activitybar-font-family', family); -+ } else { -+ target.style.removeProperty('--vscode-workbench-activitybar-font-family'); -+ } -+ } -+ - getPinnedPaneCompositeIds(): string[] { - return this.compositeBar.value?.getPinnedPaneCompositeIds() ?? []; - } -diff --git a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css -index abe1427..7cd25d0 100644 ---- a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css -+++ b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css -@@ -6,6 +6,7 @@ - .monaco-workbench .part.activitybar { - width: 48px; - height: 100%; -+ font-family: var(--vscode-workbench-activitybar-font-family, inherit); - } - - .monaco-workbench .activitybar.bordered::before { -diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts -index d3fa112..31d8df8 100644 ---- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts -+++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts -@@ -137,6 +137,9 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { - if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { - this.applyAuxiliaryBarFontSize(); - } -+ if (e.affectsConfiguration('workbench.sideBar.experimental.fontFamily')) { -+ this.applyAuxiliaryBarFontFamily(); -+ } - })); - } - -@@ -178,6 +181,20 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { - container.style.borderRightWidth = borderColor && isPositionLeft ? '1px' : '0px'; - - this.applyAuxiliaryBarFontSize(container); -+ this.applyAuxiliaryBarFontFamily(container); -+ } -+ -+ private applyAuxiliaryBarFontFamily(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ const family = this.configurationService.getValue('workbench.sideBar.experimental.fontFamily'); -+ if (family) { -+ target.style.setProperty('--vscode-workbench-sidebar-font-family', family); -+ } else { -+ target.style.removeProperty('--vscode-workbench-sidebar-font-family'); -+ } - } - - protected getCompositeBarOptions(): IPaneCompositeBarOptions { -diff --git a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css -index 6ec40df..398bbe1 100644 ---- a/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css -+++ b/src/vs/workbench/browser/parts/auxiliarybar/media/auxiliaryBarPart.css -@@ -28,6 +28,7 @@ - - .monaco-workbench .part.auxiliarybar > .content { - font-size: var(--vscode-workbench-sidebar-font-size, 13px); -+ font-family: var(--vscode-workbench-sidebar-font-family, inherit); - line-height: 1.4em; - } - -diff --git a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts -index b0a44e2..a946cb7 100644 ---- a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts -+++ b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts -@@ -46,6 +46,7 @@ import { ServiceCollection } from '../../../../platform/instantiation/common/ser - import { IBaseActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; - import { MarkdownString } from '../../../../base/common/htmlContent.js'; - import { IManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; -+import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; - import { applyDragImage } from '../../../../base/browser/ui/dnd/dnd.js'; - - export class EditorCommandsContextActionRunner extends ActionRunner { -@@ -140,6 +141,7 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC - @IThemeService themeService: IThemeService, - @IEditorResolverService private readonly editorResolverService: IEditorResolverService, - @IHostService private readonly hostService: IHostService, -+ @IConfigurationService protected readonly configurationService: IConfigurationService, - ) { - super(themeService); - -@@ -147,6 +149,12 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC - - const container = this.create(parent); - -+ this._register(configurationService.onDidChangeConfiguration(e => { -+ if (e.affectsConfiguration('workbench.tabs.experimental.fontFamily')) { -+ this.applyTabsFontFamily(); -+ } -+ })); -+ - // Context Keys - this.contextMenuContextKeyService = this._register(this.contextKeyService.createScoped(container)); - const scopedInstantiationService = this._register(this.instantiationService.createChild(new ServiceCollection( -@@ -169,9 +177,23 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC - - protected create(parent: HTMLElement): HTMLElement { - this.updateTabHeight(); -+ this.applyTabsFontFamily(parent); - return parent; - } - -+ private applyTabsFontFamily(container?: HTMLElement): void { -+ const target = container ?? this.parent; -+ if (!target) { -+ return; -+ } -+ const family = this.configurationService.getValue('workbench.tabs.experimental.fontFamily'); -+ if (family) { -+ target.style.setProperty('--vscode-workbench-tabs-font-family', family); -+ } else { -+ target.style.removeProperty('--vscode-workbench-tabs-font-family'); -+ } -+ } -+ - private get editorActionsEnabled(): boolean { - return this.groupsView.partOptions.editorActionsLocation === 'default' && this.groupsView.partOptions.showTabs !== 'none'; - } -diff --git a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css -index 57ab8ca..e9e0b2b 100644 ---- a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css -+++ b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css -@@ -7,6 +7,7 @@ - - .monaco-workbench .part.editor > .content .editor-group-container > .title { - cursor: pointer; -+ font-family: var(--vscode-workbench-tabs-font-family, inherit); - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .title-label, -diff --git a/src/vs/workbench/browser/parts/panel/media/panelpart.css b/src/vs/workbench/browser/parts/panel/media/panelpart.css -index e1c147d..76c7b07 100644 ---- a/src/vs/workbench/browser/parts/panel/media/panelpart.css -+++ b/src/vs/workbench/browser/parts/panel/media/panelpart.css -@@ -8,6 +8,10 @@ - visibility: hidden !important; - } - -+.monaco-workbench .part.panel > .content { -+ font-family: var(--vscode-workbench-panel-font-family, inherit); -+} -+ - .monaco-workbench .part.panel.bottom .composite.title { - border-top-width: 1px; - border-top-style: solid; -diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts -index 585bc16..a5d3ff4 100644 ---- a/src/vs/workbench/browser/parts/panel/panelPart.ts -+++ b/src/vs/workbench/browser/parts/panel/panelPart.ts -@@ -110,6 +110,9 @@ export class PanelPart extends AbstractPaneCompositePart { - if (e.affectsConfiguration('workbench.panel.showLabels')) { - this.updateCompositeBar(true); - } -+ if (e.affectsConfiguration('workbench.bottomPane.experimental.fontFamily')) { -+ this.applyPanelFontFamily(); -+ } - })); - } - -@@ -126,6 +129,21 @@ export class PanelPart extends AbstractPaneCompositePart { - if (this.titleArea) { - this.titleArea.style.borderTopColor = this.getColor(PANEL_BORDER) || this.getColor(contrastBorder) || ''; - } -+ -+ this.applyPanelFontFamily(container); -+ } -+ -+ private applyPanelFontFamily(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ const family = this.configurationService.getValue('workbench.bottomPane.experimental.fontFamily'); -+ if (family) { -+ target.style.setProperty('--vscode-workbench-panel-font-family', family); -+ } else { -+ target.style.removeProperty('--vscode-workbench-panel-font-family'); -+ } - } - - protected getCompositeBarOptions(): IPaneCompositeBarOptions { -diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css -index 7088a97..3a5ff82 100644 ---- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css -+++ b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css -@@ -198,4 +198,8 @@ - .monaco-workbench .part.sidebar .monaco-custom-toggle { - height: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); - width: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); --} */ -\ No newline at end of file -+} */ -+ -+.monaco-workbench .part.sidebar > .content { -+ font-family: var(--vscode-workbench-sidebar-font-family, inherit); -+} -\ No newline at end of file -diff --git a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts -index 9b6ae18..322f69b 100644 ---- a/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts -+++ b/src/vs/workbench/browser/parts/sidebar/sidebarPart.ts -@@ -114,6 +114,9 @@ export class SidebarPart extends AbstractPaneCompositePart { - if (e.affectsConfiguration(SidebarPart.fontSizeSettingsKey)) { - this.applySidebarFontSize(); - } -+ if (e.affectsConfiguration('workbench.sideBar.experimental.fontFamily')) { -+ this.applySidebarFontFamily(); -+ } - })); - - this.registerActions(); -@@ -155,6 +158,7 @@ export class SidebarPart extends AbstractPaneCompositePart { - container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? ''; - - this.applySidebarFontSize(container); -+ this.applySidebarFontFamily(container); - } - - override layout(width: number, height: number, top: number, left: number): void { -@@ -297,6 +301,19 @@ export class SidebarPart extends AbstractPaneCompositePart { - target.style.setProperty('--vscode-workbench-sidebar-font-size', `${FONT.sidebarSize}px`); - } - -+ private applySidebarFontFamily(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ const family = this.configurationService.getValue('workbench.sideBar.experimental.fontFamily'); -+ if (family) { -+ target.style.setProperty('--vscode-workbench-sidebar-font-family', family); -+ } else { -+ target.style.removeProperty('--vscode-workbench-sidebar-font-family'); -+ } -+ } -+ - private registerActions(): void { - const that = this; - this._register(registerAction2(class extends Action2 { -diff --git a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css -index 7faaf9e..b633ee1 100644 ---- a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css -+++ b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css -@@ -9,6 +9,7 @@ - width: 100%; - height: 22px; - font-size: 12px; -+ font-family: var(--vscode-workbench-statusbar-font-family, inherit); - display: flex; - overflow: hidden; - } -diff --git a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts -index 4bd53d4..62e78d0 100644 ---- a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts -+++ b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts -@@ -36,6 +36,7 @@ import { StatusBarFocused } from '../../../common/contextkeys.js'; - import { Emitter, Event } from '../../../../base/common/event.js'; - import { IView } from '../../../../base/browser/ui/grid/grid.js'; - import { isManagedHoverTooltipHTMLElement, isManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; -+import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; - - export interface IStatusbarEntryContainer extends IDisposable { - -@@ -160,9 +161,16 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { - @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, - @IContextMenuService private readonly contextMenuService: IContextMenuService, - @IContextKeyService private readonly contextKeyService: IContextKeyService, -+ @IConfigurationService private readonly configurationService: IConfigurationService, - ) { - super(id, { hasTitle: false }, themeService, storageService, layoutService); - -+ this._register(configurationService.onDidChangeConfiguration(e => { -+ if (e.affectsConfiguration('workbench.statusBar.experimental.fontFamily')) { -+ this.applyStatusBarFontFamily(); -+ } -+ })); -+ - this.viewModel = this._register(new StatusbarViewModel(storageService)); - this.onDidChangeEntryVisibility = this.viewModel.onDidChangeEntryVisibility; - -@@ -427,9 +435,24 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { - // Initial status bar entries - this.createInitialStatusbarEntries(); - -+ this.applyStatusBarFontFamily(this.element); -+ - return this.element; - } - -+ private applyStatusBarFontFamily(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ const family = this.configurationService.getValue('workbench.statusBar.experimental.fontFamily'); -+ if (family) { -+ target.style.setProperty('--vscode-workbench-statusbar-font-family', family); -+ } else { -+ target.style.removeProperty('--vscode-workbench-statusbar-font-family'); -+ } -+ } -+ - private createInitialStatusbarEntries(): void { - - // Add items in order according to alignment -diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index 3eaad2e..8a9eb0e 100644 ---- a/src/vs/workbench/browser/workbench.contribution.ts -+++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -667,6 +667,44 @@ const registry = Registry.as(ConfigurationExtensions.Con - description: localize('workbench.fontFamily', "Controls the font family in the workbench."), - 'tags': ['experimental'] - }, -+ 'workbench.experimental.fontSize': { -+ type: 'number', -+ default: 13, -+ minimum: 6, -+ maximum: 32, -+ markdownDescription: localize('workbench.fontSize', "Controls the font size in pixels for the workbench."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.sideBar.experimental.fontFamily': { -+ type: 'string', -+ default: '', -+ markdownDescription: localize('sideBarFontFamily', "Controls the font family in the side bar."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.statusBar.experimental.fontFamily': { -+ type: 'string', -+ default: '', -+ markdownDescription: localize('statusBarFontFamily', "Controls the font family in the status bar."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.tabs.experimental.fontFamily': { -+ type: 'string', -+ default: '', -+ markdownDescription: localize('tabsFontFamily', "Controls the font family in editor tabs."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.bottomPane.experimental.fontFamily': { -+ type: 'string', -+ default: '', -+ markdownDescription: localize('bottomPaneFontFamily', "Controls the font family in the bottom panel."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.activityBar.experimental.fontFamily': { -+ type: 'string', -+ default: '', -+ markdownDescription: localize('activityBarFontFamily', "Controls the font family in the activity bar."), -+ 'tags': ['accessibility', 'experimental'] -+ }, - 'workbench.settings.editor': { - 'type': 'string', - 'enum': ['ui', 'json'], -diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts -index 7259aff..ee4cbf8 100644 ---- a/src/vs/workbench/browser/workbench.ts -+++ b/src/vs/workbench/browser/workbench.ts -@@ -235,9 +235,12 @@ export class Workbench extends Layout { - if (e.affectsConfiguration('workbench.fontAliasing')) { - this.updateFontAliasing(configurationService); - } -- else if (e.affectsConfiguration('workbench.experimental.fontFamily')) { -+ if (e.affectsConfiguration('workbench.experimental.fontFamily')) { - this.updateFontFamily(configurationService); - } -+ if (e.affectsConfiguration('workbench.experimental.fontSize')) { -+ this.updateFontSize(configurationService); -+ } - })); - - // Font Info -@@ -297,6 +300,33 @@ export class Workbench extends Layout { - } - } - -+ private fontSize: number | undefined; -+ private fontSizeUserSet: boolean | undefined; -+ private updateFontSize(configurationService: IConfigurationService) { -+ const raw = configurationService.getValue('workbench.experimental.fontSize'); -+ const size = Math.max(6, Math.min(32, typeof raw === 'number' ? raw : 13)); -+ -+ const inspected = configurationService.inspect('workbench.experimental.fontSize'); -+ const isUserSet = inspected.userValue !== undefined -+ || inspected.userLocalValue !== undefined -+ || inspected.userRemoteValue !== undefined -+ || inspected.workspaceValue !== undefined -+ || inspected.workspaceFolderValue !== undefined; -+ -+ if (this.fontSize === size && this.fontSizeUserSet === isUserSet) { -+ return; -+ } -+ -+ this.fontSize = size; -+ this.fontSizeUserSet = isUserSet; -+ -+ if (isUserSet) { -+ this.mainContainer.style.setProperty('--vscode-workbench-font-size', `${size}px`); -+ } else { -+ this.mainContainer.style.removeProperty('--vscode-workbench-font-size'); -+ } -+ } -+ - private fontFamily: string | undefined; - private updateFontFamily(configurationService: IConfigurationService) { - let family = configurationService.getValue('workbench.experimental.fontFamily'); -@@ -360,6 +390,7 @@ export class Workbench extends Layout { - this.updateFontAliasing(configurationService); - - this.updateFontFamily(configurationService); -+ this.updateFontSize(configurationService); - - // Warm up font cache information before building up too many dom elements - this.restoreFontInfo(storageService, configurationService); diff --git a/patches/feat-workbench-zz-area-font-size-core.patch b/patches/feat-workbench-zz-area-font-size-core.patch deleted file mode 100644 index d4936a7..0000000 --- a/patches/feat-workbench-zz-area-font-size-core.patch +++ /dev/null @@ -1,917 +0,0 @@ -diff --git a/src/vs/base/common/font.ts b/src/vs/base/common/font.ts -index 2be97d7..8a8d60e 100644 ---- a/src/vs/base/common/font.ts -+++ b/src/vs/base/common/font.ts -@@ -1,3 +1,27 @@ -+/** -+ * Inspect a configuration value and return whether it was explicitly set by the user, -+ * along with the clamped numeric value. -+ */ -+export function inspectFontSize( -+ configurationService: { inspect(key: string): { userValue?: T; userLocalValue?: T; userRemoteValue?: T; workspaceValue?: T; workspaceFolderValue?: T }; getValue(key: string): T }, -+ key: string, -+ defaultSize: number, -+ min: number = 6, -+ max: number = 32 -+): { isUserSet: boolean; size: number } { -+ const inspected = configurationService.inspect(key); -+ const isUserSet = inspected.userValue !== undefined -+ || inspected.userLocalValue !== undefined -+ || inspected.userRemoteValue !== undefined -+ || inspected.workspaceValue !== undefined -+ || inspected.workspaceFolderValue !== undefined; -+ -+ const raw = configurationService.getValue(key); -+ const size = Math.max(min, Math.min(max, typeof raw === 'number' ? raw : defaultSize)); -+ -+ return { isUserSet, size }; -+} -+ - export const FONT = { - sidebarSize: 13, - sidebarSize8: 8, -@@ -16,8 +40,29 @@ export const FONT = { - sidebarSize44: 44, - sidebarSize62: 62, - sidebarSize72: 72, -+ -+ statusBarSize: 12, -+ statusBarSize22: 22, -+ -+ panelSize: 13, -+ panelSize22: 22, -+ -+ activityBarSize: 16, -+ activityBarSize16: 16, -+ activityBarSize24: 24, -+ activityBarSize32: 32, -+ activityBarSize36: 36, -+ activityBarSize48: 48, -+ -+ tabsSize: 13, -+ tabsSize22: 22, -+ tabsSize35: 35, -+ tabsSize38: 38, -+ tabsSize80: 80, -+ tabsSize120: 120, - }; - -+// Sidebar coefficients (base 13) - const COEFF_8 = 8/13; - const COEFF_10 = 10/13; - const COEFF_16 = 16/13; -@@ -54,3 +99,51 @@ export function updateSidebarSize(size: number): void { - FONT.sidebarSize62 = size * COEFF_62; - FONT.sidebarSize72 = size * COEFF_72; - } -+ -+// Status bar coefficients (base 12) -+const SB_COEFF_22 = 22/12; -+ -+export function updateStatusBarSize(size: number): void { -+ FONT.statusBarSize = size; -+ FONT.statusBarSize22 = size * SB_COEFF_22; -+} -+ -+// Panel coefficients (base 13) -+const PN_COEFF_22 = 22/13; -+ -+export function updatePanelSize(size: number): void { -+ FONT.panelSize = size; -+ FONT.panelSize22 = size * PN_COEFF_22; -+} -+ -+// Activity bar coefficients (base 16) -+const AB_COEFF_16 = 16/16; -+const AB_COEFF_24 = 24/16; -+const AB_COEFF_32 = 32/16; -+const AB_COEFF_36 = 36/16; -+const AB_COEFF_48 = 48/16; -+ -+export function updateActivityBarSize(size: number): void { -+ FONT.activityBarSize = size; -+ FONT.activityBarSize16 = size * AB_COEFF_16; -+ FONT.activityBarSize24 = size * AB_COEFF_24; -+ FONT.activityBarSize32 = size * AB_COEFF_32; -+ FONT.activityBarSize36 = size * AB_COEFF_36; -+ FONT.activityBarSize48 = size * AB_COEFF_48; -+} -+ -+// Tabs coefficients (base 13) -+const TB_COEFF_22 = 22/13; -+const TB_COEFF_35 = 35/13; -+const TB_COEFF_38 = 38/13; -+const TB_COEFF_80 = 80/13; -+const TB_COEFF_120 = 120/13; -+ -+export function updateTabsSize(size: number): void { -+ FONT.tabsSize = size; -+ FONT.tabsSize22 = size * TB_COEFF_22; -+ FONT.tabsSize35 = size * TB_COEFF_35; -+ FONT.tabsSize38 = size * TB_COEFF_38; -+ FONT.tabsSize80 = size * TB_COEFF_80; -+ FONT.tabsSize120 = size * TB_COEFF_120; -+} -diff --git a/src/vs/base/test/common/font.test.ts b/src/vs/base/test/common/font.test.ts -new file mode 100644 -index 0000000..dcde0e7 ---- /dev/null -+++ b/src/vs/base/test/common/font.test.ts -@@ -0,0 +1,482 @@ -+/*--------------------------------------------------------------------------------------------- -+ * Copyright (c) VSCodium. All rights reserved. -+ * Licensed under the MIT License. See License.txt in the project root for license information. -+ *--------------------------------------------------------------------------------------------*/ -+ -+import assert from 'assert'; -+import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../test/common/utils.js'; -+import { FONT, updateSidebarSize, updateStatusBarSize, updatePanelSize, updateActivityBarSize, updateTabsSize } from '../../common/font.js'; -+ -+/** -+ * Test file for src/vs/base/common/font.ts -+ * -+ * Tests all update*Size() functions for: -+ * - Default values match upstream VS Code hardcoded constants -+ * - Proportional scaling preserves ratios at non-default sizes -+ * - Boundary values (minimum=6, maximum=32) produce positive values -+ * - Reset to default restores original values -+ * - Non-divisible sizes produce consistent coefficient-based output -+ * - Cross-area updates do not mutate unrelated fields -+ */ -+ -+const EPSILON = 1e-9; -+ -+/** Assert two numbers are equal within floating-point tolerance */ -+function assertClose(actual: number, expected: number, message?: string): void { -+ const diff = Math.abs(actual - expected); -+ assert.ok(diff < EPSILON, `${message ?? ''} expected ${expected}, got ${actual} (diff: ${diff})`); -+} -+ -+/** -+ * Snapshot all FONT fields to detect unintended mutations. -+ * Returns a plain object copy of every enumerable property. -+ */ -+function snapshotFont(): Record { -+ const snap: Record = {}; -+ for (const key of Object.keys(FONT)) { -+ snap[key] = (FONT as Record)[key]; -+ } -+ return snap; -+} -+ -+/** Assert that specific fields in FONT have not changed from a snapshot */ -+function assertFieldsUnchanged(snapshot: Record, prefix: string, message: string): void { -+ for (const key of Object.keys(snapshot)) { -+ if (key.startsWith(prefix)) { -+ assertClose((FONT as Record)[key], snapshot[key], `${message}: ${key}`); -+ } -+ } -+} -+ -+suite('FONT - Sidebar Size', () => { -+ -+ ensureNoDisposablesAreLeakedInTestSuite(); -+ -+ // Capture defaults before any test mutates them -+ const DEFAULTS = snapshotFont(); -+ -+ teardown(() => { -+ // Reset after each test -+ updateSidebarSize(13); -+ }); -+ -+ test('defaults match upstream VS Code constants', () => { -+ assert.strictEqual(FONT.sidebarSize, 13); -+ assert.strictEqual(FONT.sidebarSize8, 8); -+ assert.strictEqual(FONT.sidebarSize10, 10); -+ assert.strictEqual(FONT.sidebarSize16, 16); -+ assert.strictEqual(FONT.sidebarSize17, 17); -+ assert.strictEqual(FONT.sidebarSize18, 18); -+ assert.strictEqual(FONT.sidebarSize20, 20); -+ assert.strictEqual(FONT.sidebarSize22, 22); -+ assert.strictEqual(FONT.sidebarSize23, 23); -+ assert.strictEqual(FONT.sidebarSize24, 24); -+ assert.strictEqual(FONT.sidebarSize26, 26); -+ assert.strictEqual(FONT.sidebarSize28, 28); -+ assert.strictEqual(FONT.sidebarSize34, 34); -+ assert.strictEqual(FONT.sidebarSize39, 39); -+ assert.strictEqual(FONT.sidebarSize44, 44); -+ assert.strictEqual(FONT.sidebarSize62, 62); -+ assert.strictEqual(FONT.sidebarSize72, 72); -+ }); -+ -+ test('proportional scaling preserves ratios at 2x', () => { -+ updateSidebarSize(26); // 2x default -+ assert.strictEqual(FONT.sidebarSize, 26); -+ assert.strictEqual(FONT.sidebarSize8, 16); -+ assert.strictEqual(FONT.sidebarSize22, 44); -+ assert.strictEqual(FONT.sidebarSize44, 88); -+ assert.strictEqual(FONT.sidebarSize72, 144); -+ }); -+ -+ test('non-divisible size produces consistent coefficient-based values', () => { -+ updateSidebarSize(7); -+ assertClose(FONT.sidebarSize22, 7 * (22 / 13)); -+ assertClose(FONT.sidebarSize44, 7 * (44 / 13)); -+ assertClose(FONT.sidebarSize72, 7 * (72 / 13)); -+ }); -+ -+ test('another non-divisible size (31)', () => { -+ updateSidebarSize(31); -+ assertClose(FONT.sidebarSize22, 31 * (22 / 13)); -+ assertClose(FONT.sidebarSize44, 31 * (44 / 13)); -+ }); -+ -+ test('minimum value (6) produces positive values', () => { -+ updateSidebarSize(6); -+ assert.strictEqual(FONT.sidebarSize, 6); -+ assert.ok(FONT.sidebarSize8 > 0, 'sidebarSize8 must be positive'); -+ assert.ok(FONT.sidebarSize10 > 0, 'sidebarSize10 must be positive'); -+ assert.ok(FONT.sidebarSize22 > 0, 'sidebarSize22 must be positive'); -+ assert.ok(FONT.sidebarSize72 > 0, 'sidebarSize72 must be positive'); -+ }); -+ -+ test('maximum value (32) produces reasonable values', () => { -+ updateSidebarSize(32); -+ assert.strictEqual(FONT.sidebarSize, 32); -+ assert.ok(FONT.sidebarSize22 > 40, 'row height should scale up'); -+ assert.ok(FONT.sidebarSize22 < 80, 'row height should not be extreme'); -+ }); -+ -+ test('reset to default restores all values', () => { -+ updateSidebarSize(20); -+ assert.notStrictEqual(FONT.sidebarSize22, DEFAULTS.sidebarSize22); -+ updateSidebarSize(13); -+ assertFieldsUnchanged(DEFAULTS, 'sidebar', 'after reset'); -+ }); -+ -+ test('multiple updates in sequence are idempotent at same value', () => { -+ updateSidebarSize(18); -+ const snap = snapshotFont(); -+ updateSidebarSize(18); -+ assertFieldsUnchanged(snap, 'sidebar', 'idempotent'); -+ }); -+}); -+ -+suite('FONT - Status Bar Size', () => { -+ -+ ensureNoDisposablesAreLeakedInTestSuite(); -+ -+ teardown(() => { -+ updateStatusBarSize(12); -+ }); -+ -+ test('defaults match upstream VS Code status bar constants', () => { -+ assert.strictEqual(FONT.statusBarSize, 12); -+ assert.strictEqual(FONT.statusBarSize22, 22); // StatusbarPart.HEIGHT -+ }); -+ -+ test('proportional scaling at 2x', () => { -+ updateStatusBarSize(24); -+ assert.strictEqual(FONT.statusBarSize, 24); -+ assert.strictEqual(FONT.statusBarSize22, 44); -+ }); -+ -+ test('non-divisible size (7)', () => { -+ updateStatusBarSize(7); -+ assertClose(FONT.statusBarSize22, 7 * (22 / 12)); -+ }); -+ -+ test('minimum value (6) produces positive height', () => { -+ updateStatusBarSize(6); -+ assert.strictEqual(FONT.statusBarSize, 6); -+ assert.ok(FONT.statusBarSize22 > 0, 'height must be positive'); -+ assertClose(FONT.statusBarSize22, 6 * (22 / 12)); -+ }); -+ -+ test('maximum value (32) produces reasonable height', () => { -+ updateStatusBarSize(32); -+ assertClose(FONT.statusBarSize22, 32 * (22 / 12)); -+ assert.ok(FONT.statusBarSize22 > 50, 'height should scale up'); -+ assert.ok(FONT.statusBarSize22 < 70, 'height should not be extreme'); -+ }); -+ -+ test('reset to default restores values', () => { -+ updateStatusBarSize(20); -+ updateStatusBarSize(12); -+ assert.strictEqual(FONT.statusBarSize, 12); -+ assert.strictEqual(FONT.statusBarSize22, 22); -+ }); -+}); -+ -+suite('FONT - Panel Size', () => { -+ -+ ensureNoDisposablesAreLeakedInTestSuite(); -+ -+ teardown(() => { -+ updatePanelSize(13); -+ }); -+ -+ test('defaults match sidebar defaults (same base size)', () => { -+ assert.strictEqual(FONT.panelSize, 13); -+ assert.strictEqual(FONT.panelSize22, 22); -+ }); -+ -+ test('panel and sidebar can have independent sizes', () => { -+ updatePanelSize(18); -+ assert.strictEqual(FONT.panelSize, 18); -+ assert.notStrictEqual(FONT.panelSize22, 22); -+ // Sidebar unchanged -+ assert.strictEqual(FONT.sidebarSize, 13); -+ assert.strictEqual(FONT.sidebarSize22, 22); -+ }); -+ -+ test('proportional scaling at 2x', () => { -+ updatePanelSize(26); -+ assert.strictEqual(FONT.panelSize22, 44); -+ }); -+ -+ test('non-divisible size (7)', () => { -+ updatePanelSize(7); -+ assertClose(FONT.panelSize22, 7 * (22 / 13)); -+ }); -+ -+ test('minimum value (6)', () => { -+ updatePanelSize(6); -+ assert.ok(FONT.panelSize22 > 0, 'row height must be positive'); -+ assert.ok(FONT.panelSize22 >= 10, 'row height at minimum should be usable'); -+ }); -+ -+ test('maximum value (32)', () => { -+ updatePanelSize(32); -+ assert.ok(FONT.panelSize22 > 50, 'row height should scale up'); -+ }); -+ -+ test('reset to default restores values', () => { -+ updatePanelSize(20); -+ updatePanelSize(13); -+ assert.strictEqual(FONT.panelSize, 13); -+ assert.strictEqual(FONT.panelSize22, 22); -+ }); -+}); -+ -+suite('FONT - Activity Bar Size', () => { -+ -+ ensureNoDisposablesAreLeakedInTestSuite(); -+ -+ teardown(() => { -+ updateActivityBarSize(16); -+ }); -+ -+ test('defaults match upstream VS Code activity bar constants', () => { -+ assert.strictEqual(FONT.activityBarSize, 16); -+ assert.strictEqual(FONT.activityBarSize16, 16); // COMPACT_ICON_SIZE -+ assert.strictEqual(FONT.activityBarSize24, 24); // ICON_SIZE -+ assert.strictEqual(FONT.activityBarSize32, 32); // COMPACT_ACTION_HEIGHT -+ assert.strictEqual(FONT.activityBarSize36, 36); // COMPACT_ACTIVITYBAR_WIDTH -+ assert.strictEqual(FONT.activityBarSize48, 48); // ACTION_HEIGHT / ACTIVITYBAR_WIDTH -+ }); -+ -+ test('proportional scaling at 2x', () => { -+ updateActivityBarSize(32); -+ assert.strictEqual(FONT.activityBarSize, 32); -+ assert.strictEqual(FONT.activityBarSize16, 32); // compact icon = base size -+ assert.strictEqual(FONT.activityBarSize24, 48); -+ assert.strictEqual(FONT.activityBarSize32, 64); -+ assert.strictEqual(FONT.activityBarSize36, 72); -+ assert.strictEqual(FONT.activityBarSize48, 96); -+ }); -+ -+ test('compact constants scale correctly', () => { -+ updateActivityBarSize(20); -+ // Compact icon size = base size * (16/16) = 20 -+ assertClose(FONT.activityBarSize16, 20 * (16 / 16)); -+ // Compact width = base * (36/16) = 45 -+ assertClose(FONT.activityBarSize36, 20 * (36 / 16)); -+ // Compact action height = base * (32/16) = 40 -+ assertClose(FONT.activityBarSize32, 20 * (32 / 16)); -+ }); -+ -+ test('non-divisible size (7)', () => { -+ updateActivityBarSize(7); -+ assertClose(FONT.activityBarSize24, 7 * (24 / 16)); -+ assertClose(FONT.activityBarSize48, 7 * (48 / 16)); -+ assertClose(FONT.activityBarSize36, 7 * (36 / 16)); -+ }); -+ -+ test('minimum value (6) produces positive values', () => { -+ updateActivityBarSize(6); -+ assert.strictEqual(FONT.activityBarSize, 6); -+ assert.ok(FONT.activityBarSize16 > 0, 'compact icon size must be positive'); -+ assert.ok(FONT.activityBarSize24 > 0, 'icon size must be positive'); -+ assert.ok(FONT.activityBarSize36 > 0, 'compact width must be positive'); -+ assert.ok(FONT.activityBarSize48 > 0, 'action height must be positive'); -+ }); -+ -+ test('maximum value (32) produces reasonable values', () => { -+ updateActivityBarSize(32); -+ assert.strictEqual(FONT.activityBarSize48, 96); -+ assert.ok(FONT.activityBarSize48 <= 100, 'action height should be bounded'); -+ }); -+ -+ test('reset to default restores values', () => { -+ updateActivityBarSize(24); -+ updateActivityBarSize(16); -+ assert.strictEqual(FONT.activityBarSize, 16); -+ assert.strictEqual(FONT.activityBarSize16, 16); -+ assert.strictEqual(FONT.activityBarSize24, 24); -+ assert.strictEqual(FONT.activityBarSize32, 32); -+ assert.strictEqual(FONT.activityBarSize36, 36); -+ assert.strictEqual(FONT.activityBarSize48, 48); -+ }); -+}); -+ -+suite('FONT - Tabs Size', () => { -+ -+ ensureNoDisposablesAreLeakedInTestSuite(); -+ -+ teardown(() => { -+ updateTabsSize(13); -+ }); -+ -+ test('defaults match upstream VS Code tab constants', () => { -+ assert.strictEqual(FONT.tabsSize, 13); -+ assert.strictEqual(FONT.tabsSize22, 22); // EDITOR_TAB_HEIGHT compact -+ assert.strictEqual(FONT.tabsSize35, 35); // EDITOR_TAB_HEIGHT normal -+ assert.strictEqual(FONT.tabsSize38, 38); // TAB_WIDTH compact -+ assert.strictEqual(FONT.tabsSize80, 80); // TAB_WIDTH shrink -+ assert.strictEqual(FONT.tabsSize120, 120); // TAB_WIDTH fit -+ }); -+ -+ test('proportional scaling preserves tab height/width ratios at 2x', () => { -+ updateTabsSize(26); -+ assert.strictEqual(FONT.tabsSize, 26); -+ assert.strictEqual(FONT.tabsSize22, 44); -+ assert.strictEqual(FONT.tabsSize35, 70); -+ assert.strictEqual(FONT.tabsSize38, 76); -+ assert.strictEqual(FONT.tabsSize80, 160); -+ assert.strictEqual(FONT.tabsSize120, 240); -+ }); -+ -+ test('non-divisible size (7)', () => { -+ updateTabsSize(7); -+ assertClose(FONT.tabsSize22, 7 * (22 / 13)); -+ assertClose(FONT.tabsSize35, 7 * (35 / 13)); -+ assertClose(FONT.tabsSize80, 7 * (80 / 13)); -+ assertClose(FONT.tabsSize120, 7 * (120 / 13)); -+ }); -+ -+ test('minimum value (6) produces usable tab dimensions', () => { -+ updateTabsSize(6); -+ assert.strictEqual(FONT.tabsSize, 6); -+ assert.ok(FONT.tabsSize35 > 10, 'normal tab height must be clickable'); -+ assert.ok(FONT.tabsSize22 > 8, 'compact tab height must be usable'); -+ assert.ok(FONT.tabsSize38 > 0, 'compact tab width must be positive'); -+ assert.ok(FONT.tabsSize80 > 0, 'shrink tab width must be positive'); -+ }); -+ -+ test('maximum value (32) produces reasonable tab dimensions', () => { -+ updateTabsSize(32); -+ assert.ok(FONT.tabsSize35 > 80, 'normal tab height should scale up'); -+ assert.ok(FONT.tabsSize35 < 100, 'normal tab height should be bounded'); -+ }); -+ -+ test('reset to default restores all values', () => { -+ updateTabsSize(20); -+ updateTabsSize(13); -+ assert.strictEqual(FONT.tabsSize, 13); -+ assert.strictEqual(FONT.tabsSize22, 22); -+ assert.strictEqual(FONT.tabsSize35, 35); -+ assert.strictEqual(FONT.tabsSize38, 38); -+ assert.strictEqual(FONT.tabsSize80, 80); -+ assert.strictEqual(FONT.tabsSize120, 120); -+ }); -+}); -+ -+suite('FONT - Cross-area independence', () => { -+ -+ ensureNoDisposablesAreLeakedInTestSuite(); -+ -+ teardown(() => { -+ updateSidebarSize(13); -+ updateStatusBarSize(12); -+ updatePanelSize(13); -+ updateActivityBarSize(16); -+ updateTabsSize(13); -+ }); -+ -+ test('updating sidebar does not affect any other area (full derived field check)', () => { -+ const before = snapshotFont(); -+ updateSidebarSize(20); -+ -+ // All non-sidebar fields must be unchanged -+ assertFieldsUnchanged(before, 'statusBar', 'after sidebar update'); -+ assertFieldsUnchanged(before, 'panel', 'after sidebar update'); -+ assertFieldsUnchanged(before, 'activityBar', 'after sidebar update'); -+ assertFieldsUnchanged(before, 'tabs', 'after sidebar update'); -+ }); -+ -+ test('updating statusBar does not affect any other area', () => { -+ const before = snapshotFont(); -+ updateStatusBarSize(20); -+ -+ assertFieldsUnchanged(before, 'sidebar', 'after statusBar update'); -+ assertFieldsUnchanged(before, 'panel', 'after statusBar update'); -+ assertFieldsUnchanged(before, 'activityBar', 'after statusBar update'); -+ assertFieldsUnchanged(before, 'tabs', 'after statusBar update'); -+ }); -+ -+ test('updating panel does not affect any other area', () => { -+ const before = snapshotFont(); -+ updatePanelSize(20); -+ -+ assertFieldsUnchanged(before, 'sidebar', 'after panel update'); -+ assertFieldsUnchanged(before, 'statusBar', 'after panel update'); -+ assertFieldsUnchanged(before, 'activityBar', 'after panel update'); -+ assertFieldsUnchanged(before, 'tabs', 'after panel update'); -+ }); -+ -+ test('updating activityBar does not affect any other area', () => { -+ const before = snapshotFont(); -+ updateActivityBarSize(20); -+ -+ assertFieldsUnchanged(before, 'sidebar', 'after activityBar update'); -+ assertFieldsUnchanged(before, 'statusBar', 'after activityBar update'); -+ assertFieldsUnchanged(before, 'panel', 'after activityBar update'); -+ assertFieldsUnchanged(before, 'tabs', 'after activityBar update'); -+ }); -+ -+ test('updating tabs does not affect any other area', () => { -+ const before = snapshotFont(); -+ updateTabsSize(20); -+ -+ assertFieldsUnchanged(before, 'sidebar', 'after tabs update'); -+ assertFieldsUnchanged(before, 'statusBar', 'after tabs update'); -+ assertFieldsUnchanged(before, 'panel', 'after tabs update'); -+ assertFieldsUnchanged(before, 'activityBar', 'after tabs update'); -+ }); -+ -+ test('all areas set to same value produce different derived values due to different coefficients', () => { -+ const commonSize = 18; -+ updateSidebarSize(commonSize); -+ updateStatusBarSize(commonSize); -+ updatePanelSize(commonSize); -+ updateActivityBarSize(commonSize); -+ updateTabsSize(commonSize); -+ -+ assert.strictEqual(FONT.sidebarSize, commonSize); -+ assert.strictEqual(FONT.statusBarSize, commonSize); -+ assert.strictEqual(FONT.panelSize, commonSize); -+ assert.strictEqual(FONT.activityBarSize, commonSize); -+ assert.strictEqual(FONT.tabsSize, commonSize); -+ -+ // sidebarSize22 = 18 * (22/13), statusBarSize22 = 18 * (22/12) -+ // Different coefficients → different results -+ assert.notStrictEqual(FONT.sidebarSize22, FONT.statusBarSize22, -+ 'same base size should produce different derived values due to different coefficients'); -+ }); -+ -+ test('sequential updates across all areas and full reset', () => { -+ updateSidebarSize(8); -+ updateStatusBarSize(10); -+ updatePanelSize(15); -+ updateActivityBarSize(20); -+ updateTabsSize(25); -+ -+ // Verify all set correctly -+ assert.strictEqual(FONT.sidebarSize, 8); -+ assert.strictEqual(FONT.statusBarSize, 10); -+ assert.strictEqual(FONT.panelSize, 15); -+ assert.strictEqual(FONT.activityBarSize, 20); -+ assert.strictEqual(FONT.tabsSize, 25); -+ -+ // Reset all -+ updateSidebarSize(13); -+ updateStatusBarSize(12); -+ updatePanelSize(13); -+ updateActivityBarSize(16); -+ updateTabsSize(13); -+ -+ // All defaults restored -+ assert.strictEqual(FONT.sidebarSize, 13); -+ assert.strictEqual(FONT.sidebarSize22, 22); -+ assert.strictEqual(FONT.statusBarSize, 12); -+ assert.strictEqual(FONT.statusBarSize22, 22); -+ assert.strictEqual(FONT.panelSize, 13); -+ assert.strictEqual(FONT.panelSize22, 22); -+ assert.strictEqual(FONT.activityBarSize, 16); -+ assert.strictEqual(FONT.activityBarSize48, 48); -+ assert.strictEqual(FONT.tabsSize, 13); -+ assert.strictEqual(FONT.tabsSize35, 35); -+ }); -+}); -diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -index cbd14af..83153fe 100644 ---- a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -+++ b/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts -@@ -38,11 +38,11 @@ import { IExtensionService } from '../../../services/extensions/common/extension - import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; - import { IViewsService } from '../../../services/views/common/viewsService.js'; - import { SwitchCompositeViewAction } from '../compositeBarActions.js'; --import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; -+import { FONT, inspectFontSize, updateActivityBarSize } from '../../../../base/common/font.js'; - - export class ActivitybarPart extends Part { - -- static readonly ACTION_HEIGHT = 48; -+ static get ACTION_HEIGHT() { return FONT.activityBarSize48; } - - static readonly pinnedViewContainersKey = 'workbench.activity.pinnedViewlets2'; - static readonly placeholderViewContainersKey = 'workbench.activity.placeholderViewlets'; -@@ -74,6 +74,9 @@ export class ActivitybarPart extends Part { - if (e.affectsConfiguration('workbench.activityBar.experimental.fontFamily')) { - this.applyActivityBarFontFamily(); - } -+ if (e.affectsConfiguration('workbench.activityBar.experimental.fontSize')) { -+ this.applyActivityBarFontSize(); -+ } - })); - } - -@@ -111,15 +114,34 @@ export class ActivitybarPart extends Part { - this.element = parent; - this.content = append(this.element, $('.content')); - -+ // Apply font settings before show() so composite bar uses correct sizes -+ this.applyActivityBarFontFamily(parent); -+ this.applyActivityBarFontSize(parent); -+ - if (this.layoutService.isVisible(Parts.ACTIVITYBAR_PART)) { - this.show(); - } - -- this.applyActivityBarFontFamily(parent); -- - return this.content; - } - -+ private applyActivityBarFontSize(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ -+ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.activityBar.experimental.fontSize', 16); -+ -+ if (isUserSet) { -+ updateActivityBarSize(size); -+ target.style.setProperty('--vscode-workbench-activitybar-font-size', `${size}px`); -+ } else { -+ updateActivityBarSize(16); -+ target.style.removeProperty('--vscode-workbench-activitybar-font-size'); -+ } -+ } -+ - private applyActivityBarFontFamily(container?: HTMLElement): void { - const target = container ?? this.getContainer(); - if (!target) { -diff --git a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css -index 7cd25d0..680dc73 100644 ---- a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css -+++ b/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css -@@ -7,6 +7,7 @@ - width: 48px; - height: 100%; - font-family: var(--vscode-workbench-activitybar-font-family, inherit); -+ font-size: var(--vscode-workbench-activitybar-font-size, var(--vscode-workbench-font-size, 16px)); - } - - .monaco-workbench .activitybar.bordered::before { -diff --git a/src/vs/workbench/browser/parts/panel/media/panelpart.css b/src/vs/workbench/browser/parts/panel/media/panelpart.css -index 76c7b07..6faf068 100644 ---- a/src/vs/workbench/browser/parts/panel/media/panelpart.css -+++ b/src/vs/workbench/browser/parts/panel/media/panelpart.css -@@ -10,6 +10,7 @@ - - .monaco-workbench .part.panel > .content { - font-family: var(--vscode-workbench-panel-font-family, inherit); -+ font-size: var(--vscode-workbench-panel-font-size, var(--vscode-workbench-font-size, 13px)); - } - - .monaco-workbench .part.panel.bottom .composite.title { -diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts -index a5d3ff4..b9b240d 100644 ---- a/src/vs/workbench/browser/parts/panel/panelPart.ts -+++ b/src/vs/workbench/browser/parts/panel/panelPart.ts -@@ -31,6 +31,7 @@ import { getContextMenuActions } from '../../../../platform/actions/browser/menu - import { IPaneCompositeBarOptions } from '../paneCompositeBar.js'; - import { IHoverService } from '../../../../platform/hover/browser/hover.js'; - import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; -+import { FONT, inspectFontSize, updatePanelSize } from '../../../../base/common/font.js'; - - export class PanelPart extends AbstractPaneCompositePart { - -@@ -113,6 +114,9 @@ export class PanelPart extends AbstractPaneCompositePart { - if (e.affectsConfiguration('workbench.bottomPane.experimental.fontFamily')) { - this.applyPanelFontFamily(); - } -+ if (e.affectsConfiguration('workbench.bottomPane.experimental.fontSize')) { -+ this.applyPanelFontSize(); -+ } - })); - } - -@@ -131,6 +135,24 @@ export class PanelPart extends AbstractPaneCompositePart { - } - - this.applyPanelFontFamily(container); -+ this.applyPanelFontSize(container); -+ } -+ -+ private applyPanelFontSize(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ -+ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.bottomPane.experimental.fontSize', 13); -+ -+ if (isUserSet) { -+ updatePanelSize(size); -+ target.style.setProperty('--vscode-workbench-panel-font-size', `${size}px`); -+ } else { -+ updatePanelSize(13); -+ target.style.removeProperty('--vscode-workbench-panel-font-size'); -+ } - } - - private applyPanelFontFamily(container?: HTMLElement): void { -diff --git a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css -index b633ee1..7621d4e 100644 ---- a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css -+++ b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css -@@ -7,8 +7,8 @@ - box-sizing: border-box; - cursor: default; - width: 100%; -- height: 22px; -- font-size: 12px; -+ height: var(--vscode-workbench-statusbar-height, 22px); -+ font-size: var(--vscode-workbench-statusbar-font-size, var(--vscode-workbench-font-size, 12px)); - font-family: var(--vscode-workbench-statusbar-font-family, inherit); - display: flex; - overflow: hidden; -@@ -58,7 +58,7 @@ - - .monaco-workbench .part.statusbar > .items-container > .statusbar-item { - display: inline-block; -- line-height: 22px; -+ line-height: var(--vscode-workbench-statusbar-height, 22px); - height: 100%; - vertical-align: top; - max-width: 40vw; -diff --git a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts -index 62e78d0..d5dc64a 100644 ---- a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts -+++ b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts -@@ -37,6 +37,7 @@ import { Emitter, Event } from '../../../../base/common/event.js'; - import { IView } from '../../../../base/browser/ui/grid/grid.js'; - import { isManagedHoverTooltipHTMLElement, isManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; - import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; -+import { FONT, inspectFontSize, updateStatusBarSize } from '../../../../base/common/font.js'; - - export interface IStatusbarEntryContainer extends IDisposable { - -@@ -119,14 +120,14 @@ interface IPendingStatusbarEntry { - - class StatusbarPart extends Part implements IStatusbarEntryContainer { - -- static readonly HEIGHT = 22; -+ static get HEIGHT() { return FONT.statusBarSize22; } - - //#region IView - - readonly minimumWidth: number = 0; - readonly maximumWidth: number = Number.POSITIVE_INFINITY; -- readonly minimumHeight: number = StatusbarPart.HEIGHT; -- readonly maximumHeight: number = StatusbarPart.HEIGHT; -+ get minimumHeight(): number { return FONT.statusBarSize22; } -+ get maximumHeight(): number { return FONT.statusBarSize22; } - - //#endregion - -@@ -169,6 +170,9 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { - if (e.affectsConfiguration('workbench.statusBar.experimental.fontFamily')) { - this.applyStatusBarFontFamily(); - } -+ if (e.affectsConfiguration('workbench.statusBar.experimental.fontSize')) { -+ this.applyStatusBarFontSize(); -+ } - })); - - this.viewModel = this._register(new StatusbarViewModel(storageService)); -@@ -436,10 +440,33 @@ class StatusbarPart extends Part implements IStatusbarEntryContainer { - this.createInitialStatusbarEntries(); - - this.applyStatusBarFontFamily(this.element); -+ this.applyStatusBarFontSize(this.element); - - return this.element; - } - -+ private applyStatusBarFontSize(container?: HTMLElement): void { -+ const target = container ?? this.getContainer(); -+ if (!target) { -+ return; -+ } -+ -+ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.statusBar.experimental.fontSize', 12); -+ -+ if (isUserSet) { -+ updateStatusBarSize(size); -+ target.style.setProperty('--vscode-workbench-statusbar-font-size', `${size}px`); -+ target.style.setProperty('--vscode-workbench-statusbar-height', `${FONT.statusBarSize22}px`); -+ } else { -+ updateStatusBarSize(12); -+ target.style.removeProperty('--vscode-workbench-statusbar-font-size'); -+ target.style.removeProperty('--vscode-workbench-statusbar-height'); -+ } -+ -+ // Notify grid layout that height constraints changed -+ this._onDidChange.fire(undefined); -+ } -+ - private applyStatusBarFontFamily(container?: HTMLElement): void { - const target = container ?? this.getContainer(); - if (!target) { -@@ -761,7 +788,7 @@ export class AuxiliaryStatusbarPart extends StatusbarPart implements IAuxiliaryS - - private static COUNTER = 1; - -- readonly height = StatusbarPart.HEIGHT; -+ get height() { return StatusbarPart.HEIGHT; } - - constructor( - readonly container: HTMLElement, -diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index 8a9eb0e..5bb0959 100644 ---- a/src/vs/workbench/browser/workbench.contribution.ts -+++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -705,6 +705,38 @@ const registry = Registry.as(ConfigurationExtensions.Con - markdownDescription: localize('activityBarFontFamily', "Controls the font family in the activity bar."), - 'tags': ['accessibility', 'experimental'] - }, -+ 'workbench.statusBar.experimental.fontSize': { -+ type: 'number', -+ default: 12, -+ minimum: 6, -+ maximum: 32, -+ markdownDescription: localize('statusBarFontSize', "Controls the font size in pixels for the status bar."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.bottomPane.experimental.fontSize': { -+ type: 'number', -+ default: 13, -+ minimum: 6, -+ maximum: 32, -+ markdownDescription: localize('bottomPaneFontSize', "Controls the font size in pixels for the bottom panel."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.activityBar.experimental.fontSize': { -+ type: 'number', -+ default: 16, -+ minimum: 6, -+ maximum: 32, -+ markdownDescription: localize('activityBarFontSize', "Controls the font size in pixels for the activity bar."), -+ 'tags': ['accessibility', 'experimental'] -+ }, -+ 'workbench.tabs.experimental.fontSize': { -+ type: 'number', -+ default: 13, -+ minimum: 6, -+ maximum: 32, -+ markdownDescription: localize('tabsFontSize', "Controls the font size in pixels for editor tabs."), -+ 'tags': ['accessibility', 'experimental'] -+ }, - 'workbench.settings.editor': { - 'type': 'string', - 'enum': ['ui', 'json'], -diff --git a/src/vs/workbench/browser/workbench.ts b/src/vs/workbench/browser/workbench.ts -index ee4cbf8..4d7a787 100644 ---- a/src/vs/workbench/browser/workbench.ts -+++ b/src/vs/workbench/browser/workbench.ts -@@ -7,6 +7,7 @@ import './style.js'; - import { runWhenWindowIdle } from '../../base/browser/dom.js'; - import { Event, Emitter, setGlobalLeakWarningThreshold } from '../../base/common/event.js'; - import { RunOnceScheduler, timeout } from '../../base/common/async.js'; -+import { inspectFontSize } from '../../base/common/font.js'; - import { isFirefox, isSafari, isChrome } from '../../base/browser/browser.js'; - import { mark } from '../../base/common/performance.js'; - import { onUnexpectedError, setUnexpectedErrorHandler } from '../../base/common/errors.js'; -@@ -303,15 +304,7 @@ export class Workbench extends Layout { - private fontSize: number | undefined; - private fontSizeUserSet: boolean | undefined; - private updateFontSize(configurationService: IConfigurationService) { -- const raw = configurationService.getValue('workbench.experimental.fontSize'); -- const size = Math.max(6, Math.min(32, typeof raw === 'number' ? raw : 13)); -- -- const inspected = configurationService.inspect('workbench.experimental.fontSize'); -- const isUserSet = inspected.userValue !== undefined -- || inspected.userLocalValue !== undefined -- || inspected.userRemoteValue !== undefined -- || inspected.workspaceValue !== undefined -- || inspected.workspaceFolderValue !== undefined; -+ const { isUserSet, size } = inspectFontSize(configurationService, 'workbench.experimental.fontSize', 13); - - if (this.fontSize === size && this.fontSizeUserSet === isUserSet) { - return; diff --git a/patches/feat-workbench-zz-area-font-size-tabs.patch b/patches/feat-workbench-zz-area-font-size-tabs.patch deleted file mode 100644 index 0c2d341..0000000 --- a/patches/feat-workbench-zz-area-font-size-tabs.patch +++ /dev/null @@ -1,223 +0,0 @@ -diff --git a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts -index a946cb7..4db07a2 100644 ---- a/src/vs/workbench/browser/parts/editor/editorTabsControl.ts -+++ b/src/vs/workbench/browser/parts/editor/editorTabsControl.ts -@@ -47,6 +47,7 @@ import { IBaseActionViewItemOptions } from '../../../../base/browser/ui/actionba - import { MarkdownString } from '../../../../base/common/htmlContent.js'; - import { IManagedHoverTooltipMarkdownString } from '../../../../base/browser/ui/hover/hover.js'; - import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; -+import { FONT, inspectFontSize, updateTabsSize } from '../../../../base/common/font.js'; - import { applyDragImage } from '../../../../base/browser/ui/dnd/dnd.js'; - - export class EditorCommandsContextActionRunner extends ActionRunner { -@@ -100,10 +101,12 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC - protected readonly groupTransfer = LocalSelectionTransfer.getInstance(); - protected readonly treeItemsTransfer = LocalSelectionTransfer.getInstance(); - -- private static readonly EDITOR_TAB_HEIGHT = { -- normal: 35 as const, -- compact: 22 as const -- }; -+ private static get EDITOR_TAB_HEIGHT() { -+ return { -+ normal: FONT.tabsSize35, -+ compact: FONT.tabsSize22 -+ }; -+ } - - protected editorActionsToolbarContainer: HTMLElement | undefined; - private editorActionsToolbar: WorkbenchToolBar | undefined; -@@ -153,6 +156,11 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC - if (e.affectsConfiguration('workbench.tabs.experimental.fontFamily')) { - this.applyTabsFontFamily(); - } -+ if (e.affectsConfiguration('workbench.tabs.experimental.fontSize')) { -+ this.applyTabsFontSize(); -+ this.updateTabHeight(); -+ this.groupView.relayout(); -+ } - })); - - // Context Keys -@@ -176,11 +184,37 @@ export abstract class EditorTabsControl extends Themable implements IEditorTabsC - } - - protected create(parent: HTMLElement): HTMLElement { -+ this.applyTabsFontSize(parent); - this.updateTabHeight(); - this.applyTabsFontFamily(parent); - return parent; - } - -+ private applyTabsFontSize(container?: HTMLElement): void { -+ const target = container ?? this.parent; -+ if (!target) { -+ return; -+ } -+ -+ const { isUserSet, size } = inspectFontSize(this.configurationService, 'workbench.tabs.experimental.fontSize', 13); -+ -+ if (isUserSet) { -+ updateTabsSize(size); -+ target.style.setProperty('--vscode-workbench-tabs-font-size', `${size}px`); -+ target.style.setProperty('--vscode-workbench-tabs-compact-height', `${FONT.tabsSize22}px`); -+ target.style.setProperty('--vscode-workbench-tabs-sticky-compact-width', `${FONT.tabsSize38}px`); -+ target.style.setProperty('--vscode-workbench-tabs-sticky-shrink-width', `${FONT.tabsSize80}px`); -+ target.style.setProperty('--vscode-workbench-tabs-fit-width', `${FONT.tabsSize120}px`); -+ } else { -+ updateTabsSize(13); -+ target.style.removeProperty('--vscode-workbench-tabs-font-size'); -+ target.style.removeProperty('--vscode-workbench-tabs-compact-height'); -+ target.style.removeProperty('--vscode-workbench-tabs-sticky-compact-width'); -+ target.style.removeProperty('--vscode-workbench-tabs-sticky-shrink-width'); -+ target.style.removeProperty('--vscode-workbench-tabs-fit-width'); -+ } -+ } -+ - private applyTabsFontFamily(container?: HTMLElement): void { - const target = container ?? this.parent; - if (!target) { -diff --git a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css -index e9e0b2b..fc1bebe 100644 ---- a/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css -+++ b/src/vs/workbench/browser/parts/editor/media/editortabscontrol.css -@@ -23,7 +23,7 @@ - - .monaco-workbench .part.editor > .content .editor-group-container > .title .title-label a, - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab .tab-label a { -- font-size: 13px; -+ font-size: var(--vscode-workbench-tabs-font-size, var(--vscode-workbench-font-size, 13px)); - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .monaco-icon-label::before, -diff --git a/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css b/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css -index a24f761..8c72d17 100644 ---- a/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css -+++ b/src/vs/workbench/browser/parts/editor/media/editortitlecontrol.css -@@ -7,23 +7,23 @@ - - .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control { - flex: 1 100%; -- height: 22px; -+ height: var(--vscode-workbench-tabs-compact-height, 22px); - cursor: default; - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-icon-label { -- height: 22px; -- line-height: 22px; -+ height: var(--vscode-workbench-tabs-compact-height, 22px); -+ line-height: var(--vscode-workbench-tabs-compact-height, 22px); - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-icon-label::before { -- height: 22px; /* tweak the icon size of the editor labels when icons are enabled */ -+ height: var(--vscode-workbench-tabs-compact-height, 22px); /* tweak the icon size of the editor labels when icons are enabled */ - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .outline-element-icon { - padding-right: 3px; -- height: 22px; /* tweak the icon size of the editor labels when icons are enabled */ -- line-height: 22px; -+ height: var(--vscode-workbench-tabs-compact-height, 22px); /* tweak the icon size of the editor labels when icons are enabled */ -+ line-height: var(--vscode-workbench-tabs-compact-height, 22px); - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-breadcrumb-item { -@@ -32,7 +32,7 @@ - - .monaco-workbench .part.editor > .content .editor-group-container > .title .breadcrumbs-below-tabs .breadcrumbs-control .monaco-breadcrumb-item::before { - width: 16px; -- height: 22px; -+ height: var(--vscode-workbench-tabs-compact-height, 22px); - display: flex; - align-items: center; - justify-content: center; -diff --git a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css -index 924d9b3..58efc4d 100644 ---- a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css -+++ b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css -@@ -160,7 +160,7 @@ - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fit { -- width: 120px; -+ width: var(--vscode-workbench-tabs-fit-width, 120px); - min-width: fit-content; - flex-shrink: 0; - } -@@ -183,7 +183,7 @@ - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink { -- min-width: 80px; -+ min-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); - flex-basis: 0; /* all tabs are even */ - flex-grow: 1; /* all tabs grow even */ - max-width: fit-content; -@@ -210,9 +210,9 @@ - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.sticky-compact { - - /** Sticky compact tabs have a fixed width of 38px */ -- width: 38px; -- min-width: 38px; -- max-width: 38px; -+ width: var(--vscode-workbench-tabs-sticky-compact-width, 38px); -+ min-width: var(--vscode-workbench-tabs-sticky-compact-width, 38px); -+ max-width: var(--vscode-workbench-tabs-sticky-compact-width, 38px); - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fit.sticky-shrink, -@@ -220,9 +220,9 @@ - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.sticky-shrink { - - /** Sticky shrink tabs have a fixed width of 80px */ -- width: 80px; -- min-width: 80px; -- max-width: 80px; -+ width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); -+ min-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); -+ max-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); - } - - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container.disable-sticky-tabs > .tab.sizing-fit.sticky-compact, -@@ -257,7 +257,7 @@ - - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.tab-actions-left, - .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.tab-actions-left { -- min-width: 80px; /* make more room for close button when it shows to the left */ -+ min-width: var(--vscode-workbench-tabs-sticky-shrink-width, 80px); /* make more room for close button when it shows to the left */ - padding-right: 5px; /* we need less room when sizing is shrink/fixed */ - } - -diff --git a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts -index b0befd9..ef06bcc 100644 ---- a/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts -+++ b/src/vs/workbench/browser/parts/editor/multiEditorTabsControl.ts -@@ -4,6 +4,7 @@ - *--------------------------------------------------------------------------------------------*/ - - import './media/multieditortabscontrol.css'; -+import { FONT } from '../../../../base/common/font.js'; - import { isLinux, isMacintosh, isWindows } from '../../../../base/common/platform.js'; - import { shorten } from '../../../../base/common/labels.js'; - import { EditorResourceAccessor, Verbosity, IEditorPartOptions, SideBySideEditor, DEFAULT_EDITOR_ASSOCIATION, EditorInputCapabilities, IUntypedEditorInput, preventEditorClose, EditorCloseMethod, EditorsOrder, IToolbarActions } from '../../../common/editor.js'; -@@ -94,11 +95,13 @@ export class MultiEditorTabsControl extends EditorTabsControl { - large: 10 as const - }; - -- private static readonly TAB_WIDTH = { -- compact: 38 as const, -- shrink: 80 as const, -- fit: 120 as const -- }; -+ private static get TAB_WIDTH() { -+ return { -+ compact: FONT.tabsSize38, -+ shrink: FONT.tabsSize80, -+ fit: FONT.tabsSize120 -+ }; -+ } - - private static readonly DRAG_OVER_OPEN_TAB_THRESHOLD = 1500; - From ccd71421dab90efb121558803a448450d0a433a2 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Fri, 27 Feb 2026 16:34:05 +0100 Subject: [PATCH 13/22] feat(1.110): update patches (#2715) --- dev/update_patches.sh | 1 + patches/brand.patch | 152 ++++----- patches/disable-copilot.patch | 55 ++-- patches/disable-vscodedev.patch | 32 +- patches/feat-experimental-font.patch | 102 +++--- patches/fix-keymap.patch | 24 +- patches/fix-policies.patch | 14 +- patches/helper/settings.patch | 17 +- patches/linux/arch-0-support.patch | 18 +- patches/linux/fix-build.patch | 451 +++++++++++---------------- patches/version-1-update.patch | 124 +++++--- upstream/insider.json | 2 +- 12 files changed, 479 insertions(+), 513 deletions(-) diff --git a/dev/update_patches.sh b/dev/update_patches.sh index 45dd1e1..8fcbf8e 100755 --- a/dev/update_patches.sh +++ b/dev/update_patches.sh @@ -119,6 +119,7 @@ check_file() { fi while [[ -n "$( find . -name '*.rej' -print )" ]]; do + find . -name '*.rej' -print read -rp "Press any key when the conflict have been resolved..." -n1 -s echo done diff --git a/patches/brand.patch b/patches/brand.patch index 4aef366..3e1d709 100644 --- a/patches/brand.patch +++ b/patches/brand.patch @@ -71,37 +71,37 @@ index 5c73304..3294fd8 100644 +const apiProposalNotListed = l10n.t("This proposal cannot be used because for this extension the product defines a fixed set of API proposals. You can test your extension but before publishing you MUST reach out to the !!APP_NAME!! team."); diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json -index 94a1f61..c0ac9ea 100644 +index 9d469e3..54ec4c4 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json -@@ -250,3 +250,3 @@ +@@ -254,3 +254,3 @@ "{Locked='](command:git.showOutput'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -278,4 +278,4 @@ +@@ -282,4 +282,4 @@ "config.showCommitInput": "Controls whether to show the commit input in the Git source control panel.", - "config.terminalAuthentication": "Controls whether to enable VS Code to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.", - "config.terminalGitEditor": "Controls whether to enable VS Code to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.", + "config.terminalAuthentication": "Controls whether to enable !!APP_NAME!! to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.", + "config.terminalGitEditor": "Controls whether to enable !!APP_NAME!! to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.", "config.timeline.showAuthor": "Controls whether to show the commit author in the Timeline view.", -@@ -349,3 +349,3 @@ +@@ -353,3 +353,3 @@ "{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -359,3 +359,3 @@ +@@ -363,3 +363,3 @@ "{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -369,3 +369,3 @@ +@@ -373,3 +373,3 @@ "{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -381,6 +381,6 @@ +@@ -385,6 +385,6 @@ "view.workbench.scm.disabled": { - "message": "If you would like to use Git features, please enable Git in your [settings](command:workbench.action.openSettings?%5B%22git.enabled%22%5D).\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "If you would like to use Git features, please enable Git in your [settings](command:workbench.action.openSettings?%5B%22git.enabled%22%5D).\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -110,7 +110,7 @@ index 94a1f61..c0ac9ea 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -389,6 +389,6 @@ +@@ -393,6 +393,6 @@ "view.workbench.scm.empty": { - "message": "In order to use Git features, you can open a folder containing a Git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.cloneRecursive)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "In order to use Git features, you can open a folder containing a Git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.cloneRecursive)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -119,7 +119,7 @@ index 94a1f61..c0ac9ea 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -397,6 +397,6 @@ +@@ -401,6 +401,6 @@ "view.workbench.scm.folder": { - "message": "The folder currently open doesn't have a Git repository. You can initialize a repository which will enable source control features powered by Git.\n[Initialize Repository](command:git.init?%5Btrue%5D)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "The folder currently open doesn't have a Git repository. You can initialize a repository which will enable source control features powered by Git.\n[Initialize Repository](command:git.init?%5Btrue%5D)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -128,7 +128,7 @@ index 94a1f61..c0ac9ea 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -405,6 +405,6 @@ +@@ -409,6 +409,6 @@ "view.workbench.scm.workspace": { - "message": "The workspace currently open doesn't have any folders containing Git repositories. You can initialize a repository on a folder which will enable source control features powered by Git.\n[Initialize Repository](command:git.init)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "The workspace currently open doesn't have any folders containing Git repositories. You can initialize a repository on a folder which will enable source control features powered by Git.\n[Initialize Repository](command:git.init)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -137,7 +137,7 @@ index 94a1f61..c0ac9ea 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -413,6 +413,6 @@ +@@ -417,6 +417,6 @@ "view.workbench.scm.emptyWorkspace": { - "message": "The workspace currently open doesn't have any folders containing Git repositories.\n[Add Folder to Workspace](command:workbench.action.addRootFolder)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "The workspace currently open doesn't have any folders containing Git repositories.\n[Add Folder to Workspace](command:workbench.action.addRootFolder)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -146,27 +146,27 @@ index 94a1f61..c0ac9ea 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -431,3 +431,3 @@ +@@ -435,3 +435,3 @@ "{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -440,3 +440,3 @@ +@@ -444,3 +444,3 @@ "{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -448,3 +448,3 @@ +@@ -452,3 +452,3 @@ "{Locked='](command:git.manageUnsafeRepositories'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -456,3 +456,3 @@ +@@ -460,3 +460,3 @@ "{Locked='](command:git.manageUnsafeRepositories'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -461,6 +461,6 @@ +@@ -465,6 +465,6 @@ "view.workbench.scm.closedRepository": { - "message": "A Git repository was found that was previously closed.\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "A Git repository was found that was previously closed.\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -175,7 +175,7 @@ index 94a1f61..c0ac9ea 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -469,6 +469,6 @@ +@@ -473,6 +473,6 @@ "view.workbench.scm.closedRepositories": { - "message": "Git repositories were found that were previously closed.\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).", + "message": "Git repositories were found that were previously closed.\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).", @@ -184,18 +184,18 @@ index 94a1f61..c0ac9ea 100644 - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -480,3 +480,3 @@ +@@ -484,3 +484,3 @@ "{Locked='](command:git.clone'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -484,3 +484,3 @@ +@@ -488,3 +488,3 @@ }, - "view.workbench.learnMore": "To learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm)." + "view.workbench.learnMore": "To learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm)." } diff --git a/extensions/github/package.nls.json b/extensions/github/package.nls.json -index 40271be..00dae16 100644 +index 4acc8ac..5fa11e4 100644 --- a/extensions/github/package.nls.json +++ b/extensions/github/package.nls.json @@ -2,3 +2,3 @@ @@ -203,17 +203,17 @@ index 40271be..00dae16 100644 - "description": "GitHub features for VS Code", + "description": "GitHub features for !!APP_NAME!!", "command.copyVscodeDevLink": "Copy vscode.dev Link", -@@ -8,3 +8,3 @@ +@@ -10,3 +10,3 @@ "config.branchProtection": "Controls whether to query repository rules for GitHub repositories", - "config.gitAuthentication": "Controls whether to enable automatic GitHub authentication for git commands within VS Code.", + "config.gitAuthentication": "Controls whether to enable automatic GitHub authentication for git commands within !!APP_NAME!!.", "config.gitProtocol": "Controls which protocol is used to clone a GitHub repository", -@@ -17,3 +17,3 @@ +@@ -19,3 +19,3 @@ "{Locked='](command:github.publish'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -27,3 +27,3 @@ +@@ -29,3 +29,3 @@ "{Locked='](command:github.publish'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", @@ -230,7 +230,7 @@ index 789a579..12e230e 100644 + "displayName": "Grunt support for !!APP_NAME!!", "config.grunt.autoDetect": "Controls enablement of Grunt task detection. Grunt task detection can cause files in any open workspace to be executed.", diff --git a/extensions/html-language-features/client/src/htmlClient.ts b/extensions/html-language-features/client/src/htmlClient.ts -index 54fc914..77fa09d 100644 +index 250b340..8f53898 100644 --- a/extensions/html-language-features/client/src/htmlClient.ts +++ b/extensions/html-language-features/client/src/htmlClient.ts @@ -109,3 +109,3 @@ export async function startClient(context: ExtensionContext, newLanguageClient: @@ -359,22 +359,23 @@ index a8bbe5d..00694dc 100644 + "comment": "The simpler (?<=\\bProcess\\.|\\bCommandLine\\.) breaks !!APP_NAME!! / Atom, see https://github.com/textmate/swift.tmbundle/issues/29", "name": "support.variable.swift", diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json -index 59a9ea9..7cc82d0 100644 +index 97b1c12..4047cac 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json -@@ -89,4 +89,4 @@ - "configuration.tsserver.experimental.enableProjectDiagnostics": "Enables project wide error reporting.", +@@ -130,5 +130,5 @@ + "configuration.tsserver.experimental.enableProjectDiagnostics.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.tsserver.experimental.enableProjectDiagnostics#` instead.", - "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Defaults to use VS Code's locale.", -- "typescript.locale.auto": "Use VS Code's configured display language.", + "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Defaults to use !!APP_NAME!!'s locale.", + "typescript.locale.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.locale#` instead.", +- "typescript.locale.auto": "Use VS Code's configured display language.", + "typescript.locale.auto": "Use !!APP_NAME!!'s configured display language.", "configuration.implicitProjectConfig.module": "Sets the module system for the program. See more: https://www.typescriptlang.org/tsconfig#module.", -@@ -197,3 +197,3 @@ - "typescript.workspaceSymbols.excludeLibrarySymbols": "Exclude symbols that come from library files in `Go to Symbol in Workspace` results. Requires using TypeScript 5.3+ in the workspace.", +@@ -241,3 +241,3 @@ + "configuration.workspaceSymbols.excludeLibrarySymbols.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.workspaceSymbols.excludeLibrarySymbols#` instead.", - "typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in VS Code.", + "typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in !!APP_NAME!!.", "typescript.updateImportsOnFileMove.enabled.prompt": "Prompt on each rename.", -@@ -206,5 +206,5 @@ +@@ -252,5 +252,5 @@ "configuration.suggest.completeJSDocs.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.suggest.completeJSDocs#` instead.", - "configuration.tsserver.useVsCodeWatcher": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", + "configuration.tsserver.useVsCodeWatcher": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", @@ -382,16 +383,17 @@ index 59a9ea9..7cc82d0 100644 - "configuration.tsserver.watchOptions.vscode": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", + "configuration.tsserver.watchOptions.vscode": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", "configuration.tsserver.watchOptions.watchFile": "Strategy for how individual files are watched.", -@@ -260,6 +260,6 @@ +@@ -307,3 +307,3 @@ "configuration.suggest.objectLiteralMethodSnippets.enabled.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.suggest.objectLiteralMethodSnippets.enabled#` instead.", - "configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that VS Code is running in a trusted context.", + "configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that !!APP_NAME!! is running in a trusted context.", - "configuration.tsserver.web.projectWideIntellisense.suppressSemanticErrors": "Suppresses semantic errors on web even when project wide IntelliSense is enabled. This is always on when project wide IntelliSense is not enabled or available. See `#typescript.tsserver.web.projectWideIntellisense.enabled#`", - "configuration.tsserver.web.typeAcquisition.enabled": "Enable/disable package acquisition on the web. This enables IntelliSense for imported packages. Requires `#typescript.tsserver.web.projectWideIntellisense.enabled#`. Currently not supported for Safari.", + "configuration.tsserver.web.projectWideIntellisense.enabled.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.tsserver.web.projectWideIntellisense.enabled#` instead.", +@@ -313,3 +313,3 @@ + "configuration.tsserver.web.typeAcquisition.enabled.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.tsserver.web.typeAcquisition.enabled#` instead.", - "configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want VS Code to detect a Node installation.", + "configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want !!APP_NAME!! to detect a Node installation.", - "configuration.updateImportsOnPaste": "Automatically update imports when pasting code. Requires TypeScript 5.6+.", -@@ -275,7 +275,7 @@ + "configuration.tsserver.nodePath.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.tsserver.node.path#` instead.", +@@ -328,7 +328,7 @@ "walkthroughs.nodejsWelcome.debugJsFile.title": "Run and Debug your JavaScript", - "walkthroughs.nodejsWelcome.debugJsFile.description": "Once you've installed Node.js, you can run JavaScript programs at a terminal by entering ``node your-file-name.js``\nAnother easy way to run Node.js programs is by using VS Code's debugger which lets you run your code, pause at different points, and help you understand what's going on step-by-step.\n[Start Debugging](command:javascript-walkthrough.commands.debugJsFile)", - "walkthroughs.nodejsWelcome.debugJsFile.altText": "Debug and run your JavaScript code in Node.js with Visual Studio Code.", @@ -404,10 +406,10 @@ index 59a9ea9..7cc82d0 100644 + "walkthroughs.nodejsWelcome.learnMoreAboutJs.altText": "Learn more about JavaScript and Node.js in !!APP_NAME!!." } diff --git a/extensions/typescript-language-features/src/tsServer/versionManager.ts b/extensions/typescript-language-features/src/tsServer/versionManager.ts -index dcfee49..35e9ef3 100644 +index 8d99637..a8d9986 100644 --- a/extensions/typescript-language-features/src/tsServer/versionManager.ts +++ b/extensions/typescript-language-features/src/tsServer/versionManager.ts -@@ -111,3 +111,3 @@ export class TypeScriptVersionManager extends Disposable { +@@ -112,3 +112,3 @@ export class TypeScriptVersionManager extends Disposable { ? '• ' - : '') + vscode.l10n.t("Use VS Code's Version"), + : '') + vscode.l10n.t("Use !!APP_NAME!!'s Version"), @@ -431,26 +433,26 @@ index 9905fd5..62c2e3c 100644 + vscode.l10n.t("Please open a folder in !!APP_NAME!! to use a TypeScript or JavaScript project")); return; diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts -index 207698d..9948527 100644 +index 507f9e6..067fb79 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts -@@ -661,3 +661,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType +@@ -660,3 +660,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType prompt = vscode.window.showErrorMessage( - vscode.l10n.t("The JS/TS language service immediately crashed 5 times. The service will not be restarted.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against VS Code.", pluginExtensionList)); + vscode.l10n.t("The JS/TS language service immediately crashed 5 times. The service will not be restarted.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { -@@ -682,3 +682,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType +@@ -681,3 +681,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType prompt = vscode.window.showWarningMessage( - vscode.l10n.t("The JS/TS language service crashed 5 times in the last 5 Minutes.\nThis may be caused by a plugin contributed by one of these extensions: {0}\nPlease try disabling these extensions before filing an issue against VS Code.", pluginExtensionList)); + vscode.l10n.t("The JS/TS language service crashed 5 times in the last 5 Minutes.\nThis may be caused by a plugin contributed by one of these extensions: {0}\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { -@@ -696,3 +696,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType +@@ -695,3 +695,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType prompt = vscode.window.showWarningMessage( - vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against VS Code.", pluginExtensionList)); + vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json -index cf23867..f5389b9 100644 +index 58ec85b..56e455a 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -2,3 +2,3 @@ @@ -555,10 +557,10 @@ index ec2e45c..8d89e2b 100644 + ' // This can help in cases where you see rendering issues in !!APP_NAME!!.', ' // "disable-hardware-acceleration": true', diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts -index 0c6cc59..16d8986 100644 +index 7881f73..701a162 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts -@@ -539,3 +539,3 @@ export class CodeApplication extends Disposable { +@@ -544,3 +544,3 @@ export class CodeApplication extends Disposable { async startup(): Promise { - this.logService.debug('Starting VS Code'); + this.logService.debug('Starting !!APP_NAME!!'); @@ -613,7 +615,7 @@ index 6346b9d..77ff0f9 100644 + notices.push(nls.localize('apiProposalMismatch2', "This extension is using the API proposals {0} and '{1}' that are not compatible with the current version of !!APP_NAME!!.", incompatibleProposals.slice(0, incompatibleProposals.length - 1).map(p => `'${p}'`).join(', '), diff --git a/src/vs/platform/externalTerminal/node/externalTerminalService.ts b/src/vs/platform/externalTerminal/node/externalTerminalService.ts -index 4813da4..9f8fd41 100644 +index e7cf3f5..4424cc7 100644 --- a/src/vs/platform/externalTerminal/node/externalTerminalService.ts +++ b/src/vs/platform/externalTerminal/node/externalTerminalService.ts @@ -17,3 +17,3 @@ import { ITerminalEnvironment } from '../../terminal/common/terminal.js'; @@ -631,19 +633,19 @@ index 27fd88b..ad97d7b 100644 + description: localize('terminal.integrated.inheritEnv', "Whether new shells should inherit their environment from !!APP_NAME!!, which may source a login shell to ensure $PATH and other development variables are initialized. This has no effect on Windows."), type: 'boolean', diff --git a/src/vs/platform/update/common/update.config.contribution.ts b/src/vs/platform/update/common/update.config.contribution.ts -index 5d1a419..1d7d025 100644 +index 93dd62d..550ee91 100644 --- a/src/vs/platform/update/common/update.config.contribution.ts +++ b/src/vs/platform/update/common/update.config.contribution.ts @@ -70,3 +70,3 @@ configurationRegistry.registerConfiguration({ - title: localize('enableWindowsBackgroundUpdatesTitle', "Enable Background Updates on Windows"), -- description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new VS Code versions in the background on Windows."), -+ description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new !!APP_NAME!! versions in the background on Windows."), + title: localize('enableWindowsBackgroundUpdatesTitle', "Enable Background Updates"), +- description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new VS Code versions in the background."), ++ description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new !!APP_NAME!! versions in the background."), included: isWindows && !isWeb diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index 05c4489..f692f24 100644 +index 3e5956f..1203e46 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts -@@ -53,3 +53,3 @@ export type UpdateErrorClassification = { +@@ -69,3 +69,3 @@ export type UpdateErrorClassification = { messageHash: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The hash of the error message.' }; - comment: 'This is used to know how often VS Code updates have failed.'; + comment: 'This is used to know how often !!APP_NAME!! updates have failed.'; @@ -732,16 +734,16 @@ index e342f83..7c314e6 100644 + throw new Error('Unable to create the !!APP_NAME!! workbench more than once.'); } else { diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index b1c5637..3619ee6 100644 +index 058693c..9c3afe3 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -779,3 +779,3 @@ const registry = Registry.as(ConfigurationExtensions.Con +@@ -806,3 +806,3 @@ const registry = Registry.as(ConfigurationExtensions.Con localize('profileName', "`${profileName}`: name of the profile in which the workspace is opened (e.g. Data Science (Profile)). Ignored if default profile is used."), - localize('appName', "`${appName}`: e.g. VS Code."), + localize('appName', "`${appName}`: e.g. !!APP_NAME!!."), localize('remoteName', "`${remoteName}`: e.g. SSH"), diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts -index 50cc224..7ace915 100644 +index c034874..b0bb4a0 100644 --- a/src/vs/workbench/common/contextkeys.ts +++ b/src/vs/workbench/common/contextkeys.ts @@ -41,3 +41,3 @@ export const EmbedderIdentifierContext = new RawContextKey(' @@ -750,29 +752,29 @@ index 50cc224..7ace915 100644 +export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether !!APP_NAME!! is running under automation/smoke test")); diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -index 47b9c59..7043d55 100644 +index d50fc45..93c4717 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -@@ -492,3 +492,3 @@ configurationRegistry.registerConfiguration({ +@@ -539,3 +539,3 @@ configurationRegistry.registerConfiguration({ nls.localize('chat.mcp.access.none', "No access to MCP servers."), - nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), + nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), nls.localize('chat.mcp.access.any', "Allow access to any installed MCP server.") -@@ -519,3 +519,3 @@ configurationRegistry.registerConfiguration({ +@@ -566,3 +566,3 @@ configurationRegistry.registerConfiguration({ { - key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), + key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), }, diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts -index ed6bad1..7d40581 100644 +index 1ff128a..5bfa019 100644 --- a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts +++ b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts -@@ -116,3 +116,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { +@@ -119,3 +119,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { // Register VSCode agent - const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about VS Code").value, ChatAgentLocation.Chat, ChatModeKind.Agent, context, controller); + const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about !!APP_NAME!!").value, ChatAgentLocation.Chat, ChatModeKind.Agent, context, controller); disposables.add(vscodeDisposable); -@@ -133,4 +133,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { +@@ -136,4 +136,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { displayName: localize('setupToolDisplayName', "New Workspace"), - modelDescription: 'Scaffold a new workspace in VS Code', - userDescription: localize('setupToolsDescription', "Scaffold a new workspace in VS Code"), @@ -780,10 +782,10 @@ index ed6bad1..7d40581 100644 + userDescription: localize('setupToolsDescription', "Scaffold a new workspace in !!APP_NAME!!"), canBeReferencedInPrompt: true, diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts -index 55559b5..9ff882b 100644 +index a6058e2..63cad20 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts -@@ -227,5 +227,5 @@ export class PromptValidator { +@@ -230,5 +230,5 @@ export class PromptValidator { if (validGithubCopilotAttributeNames.value.has(attribute.key)) { - report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in VS Code.", attribute.key), attribute.range, MarkerSeverity.Info)); + report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in !!APP_NAME!!.", attribute.key), attribute.range, MarkerSeverity.Info)); @@ -801,7 +803,7 @@ index 0b9ced3..731d952 100644 + description: nls.localize('debugServer', "For debug extension development only: if a port is specified !!APP_NAME!! tries to connect to a debug adapter running in server mode"), default: 4711 diff --git a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -index 1d28ae5..2f7686c 100644 +index 37e6e91..3dcfcf0 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts @@ -362,3 +362,3 @@ CommandsRegistry.registerCommand({ @@ -856,7 +858,7 @@ index d1dacd0..035239a 100644 + this.updateStatus({ icon: warningIcon, message: new MarkdownString(localize('deprecated with alternate settings tooltip', "This extension is deprecated as this functionality is now built-in to !!APP_NAME!!. Configure these {0} to use this functionality.", link)) }, true); } else { diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -index 6735f7f..f860c4f 100644 +index de71064..d0035cc 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts @@ -478,3 +478,3 @@ export class Extension implements IExtension { @@ -966,10 +968,10 @@ index 9db6b8a..cecac9f 100644 + description: nls.localize('JsonSchema.promptOnClose', 'Whether the user is prompted when !!APP_NAME!! closes with a running background task.'), default: false diff --git a/src/vs/workbench/contrib/tasks/common/jsonSchema_v2.ts b/src/vs/workbench/contrib/tasks/common/jsonSchema_v2.ts -index bdc6eb0..2c90547 100644 +index 8d937a1..39e4e20 100644 --- a/src/vs/workbench/contrib/tasks/common/jsonSchema_v2.ts +++ b/src/vs/workbench/contrib/tasks/common/jsonSchema_v2.ts -@@ -433,3 +433,3 @@ const taskConfiguration: IJSONSchema = { +@@ -439,3 +439,3 @@ const taskConfiguration: IJSONSchema = { type: 'boolean', - description: nls.localize('JsonSchema.tasks.promptOnClose', 'Whether the user is prompted when VS Code closes with a running task.'), + description: nls.localize('JsonSchema.tasks.promptOnClose', 'Whether the user is prompted when !!APP_NAME!! closes with a running task.'), @@ -1025,7 +1027,7 @@ index a16eaa8..965d80a 100644 + Write-Host "`e[0m`e[7m * `e[0;103m !!APP_NAME!! Python powershell activation failed with exit code $($activationError.Exception.Message) `e[0m" } diff --git a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts -index e97facb..a0ace89 100644 +index 632938e..8d2a2de 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts @@ -316,3 +316,3 @@ const terminalConfiguration: IStringDictionary = { @@ -1110,17 +1112,17 @@ index 0f23e5a..27f311e 100644 + message = localize('terminal.voice.installSpeechExtension', "Would you like to install '!!APP_NAME!! Speech' extension from 'Microsoft'?"); run = () => commandService.executeCommand('workbench.extensions.installExtension', 'ms-vscode.vscode-speech'); diff --git a/src/vs/workbench/contrib/update/browser/update.ts b/src/vs/workbench/contrib/update/browser/update.ts -index f21d2bb..e8320e2 100644 +index 68b982c..dd44414 100644 --- a/src/vs/workbench/contrib/update/browser/update.ts +++ b/src/vs/workbench/contrib/update/browser/update.ts -@@ -631,4 +631,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor +@@ -620,4 +620,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor detail: newQuality === 'insider' ? - nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of VS Code.") : - nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of VS Code."), + nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of !!APP_NAME!!.") : + nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of !!APP_NAME!!."), primaryButton: nls.localize({ key: 'reload', comment: ['&& denotes a mnemonic'] }, "&&Reload") -@@ -667,3 +667,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor +@@ -656,3 +656,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor message: nls.localize('selectSyncService.message', "Choose the settings sync service to use after changing the version"), - detail: nls.localize('selectSyncService.detail', "The Insiders version of VS Code will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."), + detail: nls.localize('selectSyncService.detail', "The Insiders version of !!APP_NAME!! will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."), @@ -1346,15 +1348,15 @@ index 1159e4c..d8ebb47 100644 + markdownDescription: localize('workspace.trust.emptyWindow.description', "Controls whether or not the empty window is trusted by default within !!APP_NAME!!. When used with `#{0}#`, you can enable the full functionality of !!APP_NAME!! without prompting in an empty window.", WORKSPACE_TRUST_UNTRUSTED_FILES), tags: [WORKSPACE_TRUST_SETTING_TAG], diff --git a/src/vs/workbench/electron-browser/desktop.contribution.ts b/src/vs/workbench/electron-browser/desktop.contribution.ts -index 5fad6f9..4edfd81 100644 +index fd09050..ac32743 100644 --- a/src/vs/workbench/electron-browser/desktop.contribution.ts +++ b/src/vs/workbench/electron-browser/desktop.contribution.ts -@@ -447,3 +447,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-b +@@ -448,3 +448,3 @@ import product from '../../platform/product/common/product.js'; type: 'boolean', - description: localize('argv.disableChromiumSandbox', "Disables the Chromium sandbox. This is useful when running VS Code as elevated on Linux and running under Applocker on Windows.") + description: localize('argv.disableChromiumSandbox', "Disables the Chromium sandbox. This is useful when running !!APP_NAME!! as elevated on Linux and running under Applocker on Windows.") }, -@@ -451,3 +451,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-b +@@ -452,3 +452,3 @@ import product from '../../platform/product/common/product.js'; type: 'boolean', - description: localize('argv.useInMemorySecretStorage', "Ensures that an in-memory store will be used for secret storage instead of using the OS's credential store. This is often used when running VS Code extension tests or when you're experiencing difficulties with the credential store.") + description: localize('argv.useInMemorySecretStorage', "Ensures that an in-memory store will be used for secret storage instead of using the OS's credential store. This is often used when running !!APP_NAME!! extension tests or when you're experiencing difficulties with the credential store.") @@ -1369,7 +1371,7 @@ index ea7f364..25c4fda 100644 + const productName = localize('!!APP_NAME!! for Web', "{0} for the Web", this.productService.nameLong); const virtualWorkspaceSupport = this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(manifest); diff --git a/src/vs/workbench/services/extensions/common/extensionsRegistry.ts b/src/vs/workbench/services/extensions/common/extensionsRegistry.ts -index 6704355..1d58ea0 100644 +index 2ea95cd..f91cda9 100644 --- a/src/vs/workbench/services/extensions/common/extensionsRegistry.ts +++ b/src/vs/workbench/services/extensions/common/extensionsRegistry.ts @@ -181,3 +181,3 @@ export const schema: IJSONSchema = { diff --git a/patches/disable-copilot.patch b/patches/disable-copilot.patch index e5f57d2..71609f7 100644 --- a/patches/disable-copilot.patch +++ b/patches/disable-copilot.patch @@ -1,29 +1,29 @@ diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts -index 7b64c28..bea3a3f 100644 +index d1232f9..51121f9 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts -@@ -192,3 +192,4 @@ abstract class OpenChatGlobalAction extends Action2 { +@@ -204,3 +204,4 @@ abstract class OpenChatGlobalAction extends Action2 { ChatContextKeys.Setup.hidden.negate(), - ChatContextKeys.Setup.disabled.negate() + ChatContextKeys.Setup.disabled.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate() ) -@@ -806,3 +807,3 @@ export function registerChatActions() { +@@ -1161,3 +1162,3 @@ export function registerChatActions() { precondition: ContextKeyExpr.and( - ChatContextKeys.Setup.installed, + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.disabled.negate(), -@@ -1232,3 +1233,4 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, { +@@ -1692,3 +1693,4 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, { ChatContextKeys.Setup.hidden.negate(), - ChatContextKeys.Setup.disabled.negate() + ChatContextKeys.Setup.disabled.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate() ) diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -index d211a1d..cfbcdf5 100644 +index d50fc45..ffc8a5b 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -@@ -969,3 +969,3 @@ configurationRegistry.registerConfiguration({ +@@ -1195,3 +1195,3 @@ configurationRegistry.registerConfiguration({ description: nls.localize('chat.disableAIFeatures', "Disable and hide built-in AI features provided by GitHub Copilot, including chat and inline suggestions."), - default: false, + default: true, @@ -50,44 +50,59 @@ index ddb5df4..7831288 100644 + ChatContextKeys.extensionInvalid.negate() + ) }; +diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.ts b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.ts +index d110a65..226b99d 100644 +--- a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.ts ++++ b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.ts +@@ -228,2 +228,3 @@ export class ChatSetupContribution extends Disposable implements IWorkbenchContr + ChatContextKeys.Setup.untrusted, ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), + ChatContextKeys.Setup.installed.negate(), +@@ -345,2 +346,3 @@ export class ChatSetupContribution extends Disposable implements IWorkbenchContr + ChatContextKeys.Setup.hidden.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), + ChatContextKeys.Setup.installed.negate(), +@@ -512,2 +514,3 @@ export class ChatSetupContribution extends Disposable implements IWorkbenchContr + ChatContextKeys.Setup.disabled.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), + ChatContextKeys.Setup.installed.negate(), diff --git a/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts b/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts -index 9085864..4331066 100644 +index 8e703e2..535b1d8 100644 --- a/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts +++ b/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts -@@ -126,3 +126,3 @@ export namespace ChatContextKeyExprs { +@@ -157,3 +157,3 @@ export namespace ChatContextKeyExprs { export const chatSetupTriggerContext = ContextKeyExpr.or( - ChatContextKeys.Setup.installed.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Entitlement.canSignUp diff --git a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts -index 7f4dfea..5957267 100644 +index 9e82f11..0669f45 100644 --- a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +++ b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts -@@ -540,3 +540,3 @@ export class McpServersViewsContribution extends Disposable implements IWorkbenc +@@ -554,3 +554,3 @@ export class McpServersViewsContribution extends Disposable implements IWorkbenc ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{}]), - when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), + when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), weight: 40, -@@ -555,3 +555,3 @@ export class McpServersViewsContribution extends Disposable implements IWorkbenc +@@ -569,3 +569,3 @@ export class McpServersViewsContribution extends Disposable implements IWorkbenc ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{ showWelcome: true }]), - when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), + when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), weight: 40, diff --git a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts -index c38dc40..a3e398c 100644 +index 8f2ea73..429e28f 100644 --- a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts +++ b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts -@@ -704,3 +704,3 @@ registerAction2(class extends Action2 { +@@ -705,3 +705,3 @@ registerAction2(class extends Action2 { ChatContextKeys.Setup.disabled.negate(), - ChatContextKeys.Setup.installed.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ContextKeyExpr.in(ResourceContextKey.Resource.key, 'git.mergeChanges'), -diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts -index 012d3c5..2f53955 100644 ---- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts -+++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts -@@ -1417,3 +1417,3 @@ registerAction2(class extends Action2 { +diff --git a/src/vs/workbench/contrib/scm/browser/scmInput.ts b/src/vs/workbench/contrib/scm/browser/scmInput.ts +index bcc312c..f388856 100644 +--- a/src/vs/workbench/contrib/scm/browser/scmInput.ts ++++ b/src/vs/workbench/contrib/scm/browser/scmInput.ts +@@ -848,2 +848,3 @@ registerAction2(class extends Action2 { ChatContextKeys.Setup.disabled.negate(), -- ChatContextKeys.Setup.installed.negate(), + ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), - ContextKeyExpr.equals('scmProvider', 'git') + ChatContextKeys.Setup.installed.negate(), diff --git a/patches/disable-vscodedev.patch b/patches/disable-vscodedev.patch index 3736ac9..8e0d378 100644 --- a/patches/disable-vscodedev.patch +++ b/patches/disable-vscodedev.patch @@ -1,8 +1,8 @@ diff --git a/extensions/github/package.json b/extensions/github/package.json -index 726a882..b9a4969 100644 +index bce90fe..73debf7 100644 --- a/extensions/github/package.json +++ b/extensions/github/package.json -@@ -44,19 +44,2 @@ +@@ -45,19 +45,2 @@ }, - { - "command": "github.copyVscodeDevLink", @@ -22,7 +22,7 @@ index 726a882..b9a4969 100644 - "icon": "$(globe)" - }, { -@@ -72,11 +55,2 @@ +@@ -83,11 +66,2 @@ ], - "continueEditSession": [ - { @@ -34,7 +34,7 @@ index 726a882..b9a4969 100644 - } - ], "menus": { -@@ -91,18 +65,2 @@ +@@ -110,18 +84,2 @@ }, - { - "command": "github.copyVscodeDevLink", @@ -53,7 +53,7 @@ index 726a882..b9a4969 100644 - "when": "false" - }, { -@@ -112,42 +70,2 @@ +@@ -131,42 +89,2 @@ ], - "file/share": [ - { @@ -97,13 +97,15 @@ index 726a882..b9a4969 100644 - ], "scm/historyItem/context": [ diff --git a/extensions/github/src/commands.ts b/extensions/github/src/commands.ts -index 48e9574..aa853a5 100644 +index 33acf5a..107e94a 100644 --- a/extensions/github/src/commands.ts +++ b/extensions/github/src/commands.ts -@@ -9,28 +9,3 @@ import { publishRepository } from './publish.js'; +@@ -9,30 +9,5 @@ import { publishRepository } from './publish.js'; import { DisposableStore, getRepositoryFromUrl } from './util.js'; -import { LinkContext, getCommitLink, getLink, getVscodeDevHost } from './links.js'; -- ++import { getCommitLink } from './links.js'; + import { getOctokit } from './auth.js'; + -async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean, context: LinkContext, includeRange = true) { - try { - const permalink = await getLink(gitAPI, useSelection, true, getVscodeDevHost(), 'headlink', context, includeRange); @@ -128,9 +130,9 @@ index 48e9574..aa853a5 100644 - return undefined; - } -} -+import { getCommitLink } from './links.js'; - -@@ -70,14 +45,2 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { +- + interface ResolvedSessionRepo { +@@ -210,14 +185,2 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { - disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLink', async (context: LinkContext) => { - return copyVscodeDevLink(gitAPI, true, context); @@ -145,13 +147,13 @@ index 48e9574..aa853a5 100644 - })); - disposables.add(vscode.commands.registerCommand('github.openOnGitHub', async (url: string, historyItemId: string) => { -@@ -113,6 +76,2 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { +@@ -253,6 +216,2 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { - disposables.add(vscode.commands.registerCommand('github.openOnVscodeDev', async () => { - return openVscodeDevLink(gitAPI); - })); - - return disposables; + disposables.add(vscode.commands.registerCommand('github.createPullRequest', async (sessionResource: vscode.Uri | undefined, sessionMetadata: { worktreePath?: string } | undefined) => { diff --git a/extensions/github/src/extension.ts b/extensions/github/src/extension.ts index 17906c5..86a0ca8 100644 --- a/extensions/github/src/extension.ts @@ -165,7 +167,7 @@ index 17906c5..86a0ca8 100644 - disposables.add(new VscodeDevShareProvider(gitAPI)); setGitHubContext(gitAPI, disposables); diff --git a/extensions/github/src/remoteSourceProvider.ts b/extensions/github/src/remoteSourceProvider.ts -index 291a3f1..6304ed8 100644 +index bed2bb1..2880f97 100644 --- a/extensions/github/src/remoteSourceProvider.ts +++ b/extensions/github/src/remoteSourceProvider.ts @@ -10,3 +10,3 @@ import { Octokit } from '@octokit/rest'; @@ -173,7 +175,7 @@ index 291a3f1..6304ed8 100644 -import { getBranchLink, getVscodeDevHost } from './links.js'; +import { getBranchLink } from './links.js'; -@@ -129,9 +129,2 @@ export class GithubRemoteSourceProvider implements RemoteSourceProvider { +@@ -137,9 +137,2 @@ export class GithubRemoteSourceProvider implements RemoteSourceProvider { } - }, { - label: l10n.t('Checkout on vscode.dev'), diff --git a/patches/feat-experimental-font.patch b/patches/feat-experimental-font.patch index 2a1c1ea..e832fbc 100644 --- a/patches/feat-experimental-font.patch +++ b/patches/feat-experimental-font.patch @@ -110,7 +110,7 @@ index 827a19f..43a1996 100644 +} \ No newline at end of file diff --git a/src/vs/base/browser/ui/selectBox/selectBox.css b/src/vs/base/browser/ui/selectBox/selectBox.css -index 2b0011a..327fe0f 100644 +index fd4d00e..92ddc99 100644 --- a/src/vs/base/browser/ui/selectBox/selectBox.css +++ b/src/vs/base/browser/ui/selectBox/selectBox.css @@ -35 +35,16 @@ @@ -951,7 +951,7 @@ index 328285f..0735dfa 100644 + return FONT.sidebarSize22; } diff --git a/src/vs/workbench/browser/media/style.css b/src/vs/workbench/browser/media/style.css -index 13ff794..57ad58c 100644 +index 7537f93..5a7a277 100644 --- a/src/vs/workbench/browser/media/style.css +++ b/src/vs/workbench/browser/media/style.css @@ -11,20 +11,20 @@ @@ -996,7 +996,7 @@ index 13ff794..57ad58c 100644 + font-family: var(--vscode-workbench-font-family, var(--monaco-font)); + font-size: var(--vscode-workbench-font-size, 13px); } -@@ -322 +324,41 @@ body { +@@ -323 +325,41 @@ body { } + + @@ -2199,10 +2199,10 @@ index 1c9305b..6471a0d 100644 - static readonly ITEM_HEIGHT = 22; static readonly TREE_TEMPLATE_ID = 'treeExplorer'; diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index b1c5637..2f8c047 100644 +index 058693c..ee81a59 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -675,2 +675,85 @@ const registry = Registry.as(ConfigurationExtensions.Con +@@ -702,2 +702,85 @@ const registry = Registry.as(ConfigurationExtensions.Con }, + 'workbench.experimental.fontFamily': { + type: 'string', @@ -2382,16 +2382,16 @@ index 6f58865..3ab0ee4 100644 + return FONT.sidebarSize22; } diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts -index 2a89832..d2cfdbf 100644 +index eb17488..1a005a7 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.ts @@ -45,2 +45,3 @@ import { AgentSessionProviders, getAgentSessionTime } from './agentSessions.js'; import { AgentSessionsGrouping } from './agentSessionsFilter.js'; +import { FONT } from '../../../../../base/common/font.js'; -@@ -504,11 +505,8 @@ export class AgentSessionsListDelegate implements IListVirtualDelegate { - static readonly DEFAULT_HEIGHT = 28; - static readonly TEMPLATE_ID = 'actionButton'; -@@ -715,5 +714,5 @@ class ListDelegate implements IListVirtualDelegate { +@@ -261,4 +260,2 @@ class InputRenderer implements ICompressibleTreeRenderer { } else if (isSCMActionButton(element)) { - return ActionButtonRenderer.DEFAULT_HEIGHT + 8; + return FONT.sidebarSize28 + 8; @@ -3475,15 +3500,8 @@ index dd3439f..2120b2f 100644 - return 22; + return FONT.sidebarSize22; } -@@ -2171,4 +2170,4 @@ class SCMInputWidget { - return this.toolbar.dropdownActions.length === 0 ? -- 26 /* 22px action + 4px margin */ : -- 39 /* 35px action + 4px margin */; -+ FONT.sidebarSize26 /* 22px action + 4px margin */ : -+ FONT.sidebarSize39 /* 35px action + 4px margin */; - } diff --git a/src/vs/workbench/contrib/search/browser/media/searchview.css b/src/vs/workbench/contrib/search/browser/media/searchview.css -index e493fe3..647d2e6 100644 +index 47e85d6..466cf3d 100644 --- a/src/vs/workbench/contrib/search/browser/media/searchview.css +++ b/src/vs/workbench/contrib/search/browser/media/searchview.css @@ -443 +443,110 @@ @@ -3719,14 +3737,14 @@ index 631bd2a..902bb81 100644 + let delta = Math.max(0, evt.scrollTop - (this.hasMultipleFrames ? FONT.sidebarSize24 : 0)); delta = Math.min(Math.max(0, this.contentHeight - this.viewHeight), delta); diff --git a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts -index ef75da6..cff2356 100644 +index 9257aa6..3819205 100644 --- a/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts +++ b/src/vs/workbench/contrib/testing/browser/testingExplorerView.ts @@ -85,2 +85,3 @@ import { DebugLastRun, ReRunLastRun } from './testExplorerActions.js'; import { TestingExplorerFilter } from './testingExplorerFilter.js'; +import { FONT } from '../../../../base/common/font.js'; -@@ -1421,3 +1422,3 @@ class ListDelegate implements IListVirtualDelegate { +@@ -1427,3 +1428,3 @@ class ListDelegate implements IListVirtualDelegate { getHeight(element: TestExplorerTreeElement) { - return element instanceof TestTreeErrorMessage ? 17 + 10 : 22; + return element instanceof TestTreeErrorMessage ? FONT.sidebarSize17 + 10 : FONT.sidebarSize22; @@ -3765,7 +3783,7 @@ index 27c6580..0feb646 100644 + return FONT.sidebarSize22; } diff --git a/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts b/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts -index 34b8408..f8a72d9 100644 +index 70191ee..42cf995 100644 --- a/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts +++ b/src/vs/workbench/contrib/welcomeAgentSessions/browser/agentSessionsWelcome.ts @@ -49,3 +49,2 @@ import { AgentSessionsControl, IAgentSessionsControlOptions } from '../../chat/b @@ -3776,12 +3794,12 @@ index 34b8408..f8a72d9 100644 import { ILogService } from '../../../../platform/log/common/log.js'; +import { FONT } from '../../../../base/common/font.js'; -@@ -825,3 +825,3 @@ export class AgentSessionsWelcomePage extends EditorPane { +@@ -826,3 +826,3 @@ export class AgentSessionsWelcomePage extends EditorPane { ); - const sessionsHeight = visibleSessions * AgentSessionsListDelegate.ITEM_HEIGHT; + const sessionsHeight = visibleSessions * FONT.sidebarSize22; this.sessionsControl.layout(sessionsHeight, sessionsWidth); -@@ -830,3 +830,3 @@ export class AgentSessionsWelcomePage extends EditorPane { +@@ -831,3 +831,3 @@ export class AgentSessionsWelcomePage extends EditorPane { // Visual height = ceil(n/2) * ITEM_HEIGHT, so offset = floor(n/2) * ITEM_HEIGHT - const marginOffset = Math.floor(visibleSessions / 2) * AgentSessionsListDelegate.ITEM_HEIGHT; + const marginOffset = Math.floor(visibleSessions / 2) * FONT.sidebarSize22; diff --git a/patches/fix-keymap.patch b/patches/fix-keymap.patch index c91d63c..e0106e6 100644 --- a/patches/fix-keymap.patch +++ b/patches/fix-keymap.patch @@ -1,5 +1,5 @@ diff --git a/.npmrc b/.npmrc -index e2305b4..b7863f9 100644 +index 2c7c6c1..5d5fc7d 100644 --- a/.npmrc +++ b/.npmrc @@ -6,2 +6,3 @@ ignore-scripts=false @@ -24,7 +24,7 @@ index ed36151..5b040cc 100644 +!@vscodium/native-keymap/build/Release/*.node diff --git a/eslint.config.js b/eslint.config.js -index c2b3e29..2a8250b 100644 +index 29ffd56..1847a81 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1451,3 +1451,3 @@ export default tseslint.config( @@ -33,18 +33,18 @@ index c2b3e29..2a8250b 100644 + '@vscodium/native-keymap', 'net', diff --git a/package-lock.json b/package-lock.json -index c44531c..cc77547 100644 +index bb626ac..b3e1b81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,2 +32,3 @@ - "@vscode/windows-registry": "^1.1.0", + "@vscode/windows-registry": "^1.2.0", + "@vscodium/native-keymap": "3.3.7-258424", - "@xterm/addon-clipboard": "^0.3.0-beta.152", + "@xterm/addon-clipboard": "^0.3.0-beta.167", @@ -49,3 +50,2 @@ "native-is-elevated": "0.9.0", - "native-keymap": "^3.3.5", "node-pty": "^1.2.0-beta.10", -@@ -3674,2 +3674,9 @@ +@@ -3828,2 +3828,9 @@ }, + "node_modules/@vscodium/native-keymap": { + "version": "3.3.7-258424", @@ -54,7 +54,7 @@ index c44531c..cc77547 100644 + "license": "MIT" + }, "node_modules/@webassemblyjs/ast": { -@@ -12731,5 +12738,6 @@ +@@ -13281,5 +13288,6 @@ "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -64,7 +64,7 @@ index c44531c..cc77547 100644 + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" }, -@@ -12742,9 +12750,2 @@ +@@ -13292,9 +13300,2 @@ }, - "node_modules/native-keymap": { - "version": "3.3.9", @@ -74,7 +74,7 @@ index c44531c..cc77547 100644 - "license": "MIT" - }, "node_modules/natural-compare": { -@@ -14132,5 +14133,6 @@ +@@ -14717,5 +14718,6 @@ "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -84,16 +84,16 @@ index c44531c..cc77547 100644 + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", "dependencies": { -@@ -14141,3 +14143,3 @@ +@@ -14726,3 +14728,3 @@ "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", + "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", diff --git a/package.json b/package.json -index c5522f4..dcd9913 100644 +index 67e53ae..4e4e77c 100644 --- a/package.json +++ b/package.json -@@ -114,3 +114,3 @@ +@@ -118,3 +118,3 @@ "native-is-elevated": "0.9.0", - "native-keymap": "^3.3.5", + "@vscodium/native-keymap": "3.3.7-258424", diff --git a/patches/fix-policies.patch b/patches/fix-policies.patch index bd4c6ee..138a573 100644 --- a/patches/fix-policies.patch +++ b/patches/fix-policies.patch @@ -22,7 +22,7 @@ index 5b040cc..8d5fd71 100644 +!@vscodium/policy-watcher/build/Release/vscodium-policy-watcher.node diff --git a/eslint.config.js b/eslint.config.js -index 2a8250b..1df17ec 100644 +index 1847a81..3fb3b01 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1434,3 +1434,3 @@ export default tseslint.config( @@ -31,7 +31,7 @@ index 2a8250b..1df17ec 100644 + '@vscodium/policy-watcher', '@vscode/proxy-agent', diff --git a/package-lock.json b/package-lock.json -index cc77547..622093b 100644 +index b3e1b81..7c34f88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,3 +21,2 @@ @@ -41,8 +41,8 @@ index cc77547..622093b 100644 @@ -33,2 +32,3 @@ "@vscodium/native-keymap": "3.3.7-258424", + "@vscodium/policy-watcher": "^1.3.2-252465", - "@xterm/addon-clipboard": "^0.3.0-beta.152", -@@ -3345,22 +3345,2 @@ + "@xterm/addon-clipboard": "^0.3.0-beta.167", +@@ -3498,22 +3498,2 @@ }, - "node_modules/@vscode/policy-watcher": { - "version": "1.3.7", @@ -65,7 +65,7 @@ index cc77547..622093b 100644 - } - }, "node_modules/@vscode/proxy-agent": { -@@ -3681,2 +3661,22 @@ +@@ -3835,2 +3815,22 @@ }, + "node_modules/@vscodium/policy-watcher": { + "version": "1.3.2-252465", @@ -89,10 +89,10 @@ index cc77547..622093b 100644 + }, "node_modules/@webassemblyjs/ast": { diff --git a/package.json b/package.json -index dcd9913..8becea3 100644 +index 4e4e77c..665303a 100644 --- a/package.json +++ b/package.json -@@ -86,3 +86,3 @@ +@@ -90,3 +90,3 @@ "@vscode/native-watchdog": "^1.4.6", - "@vscode/policy-watcher": "^1.3.2", + "@vscodium/policy-watcher": "^1.3.2-252465", diff --git a/patches/helper/settings.patch b/patches/helper/settings.patch index 3655758..b25aa89 100644 --- a/patches/helper/settings.patch +++ b/patches/helper/settings.patch @@ -1,8 +1,8 @@ diff --git a/.vscode/settings.json b/.vscode/settings.json -index 3e903f6..fb3b3a8 100644 +index 7434345..f870f59 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json -@@ -26,6 +26,6 @@ +@@ -29,6 +29,6 @@ "[typescript]": { - "editor.formatOnSave": true + // "editor.formatOnSave": true @@ -11,24 +11,15 @@ index 3e903f6..fb3b3a8 100644 - "editor.formatOnSave": true + // "editor.formatOnSave": true }, -@@ -33,3 +33,3 @@ +@@ -36,3 +36,3 @@ "editor.defaultFormatter": "rust-lang.rust-analyzer", - "editor.formatOnSave": true, + // "editor.formatOnSave": true, }, -@@ -39,4 +39,4 @@ +@@ -42,4 +42,4 @@ // --- Files --- - "files.trimTrailingWhitespace": true, - "files.insertFinalNewline": true, + // "files.trimTrailingWhitespace": true, + // "files.insertFinalNewline": true, "files.exclude": { -@@ -49,5 +49,5 @@ - "build/**/*.js.map": true, -- "build/**/*.js": { -- "when": "$(basename).ts" -- } -+ // "build/**/*.js": { -+ // "when": "$(basename).ts" -+ // } - }, diff --git a/patches/linux/arch-0-support.patch b/patches/linux/arch-0-support.patch index 10b1bc1..65e8f47 100644 --- a/patches/linux/arch-0-support.patch +++ b/patches/linux/arch-0-support.patch @@ -13,10 +13,10 @@ index f0d5fe6..fdb3707 100755 + SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" node -e 'import { getVSCodeSysroot } from "./build/linux/debian/install-sysroot.ts"; (async () => { await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()' fi diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts -index b935764..012df0b 100644 +index 8e7f6bb..0874203 100644 --- a/build/gulpfile.reh.ts +++ b/build/gulpfile.reh.ts -@@ -235,9 +235,23 @@ function nodejs(platform: string, arch: string): NodeJS.ReadWriteStream | undefi +@@ -239,9 +239,23 @@ function nodejs(platform: string, arch: string): NodeJS.ReadWriteStream | undefi case 'linux': - return (product.nodejsRepository !== 'https://nodejs.org' ? - fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName!, checksumSha256 }) : @@ -48,10 +48,10 @@ index b935764..012df0b 100644 + } case 'alpine': diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts -index a103f11..ce46a41 100644 +index 25a3600..c9402f3 100644 --- a/build/gulpfile.vscode.ts +++ b/build/gulpfile.vscode.ts -@@ -472,2 +472,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d +@@ -516,4 +516,15 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + const electronOverride: { repo?: string; tag?: string } = {}; + if (process.env.VSCODE_ELECTRON_REPOSITORY) { @@ -63,12 +63,10 @@ index a103f11..ce46a41 100644 + electronOverride.tag = process.env.VSCODE_ELECTRON_TAG; + } + - let result: NodeJS.ReadWriteStream = all -@@ -476,3 +486,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d - .pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523 -- .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) -+ .pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) - .pipe(filter(['**', '!LICENSE', '!version', ...(platform === 'darwin' ? ['!**/Contents/Applications/**'] : [])], { dot: true })); + const electronConfig = { + ...config, ++ ...electronOverride, + platform, diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts index 46c257d..78bfb66 100644 --- a/build/linux/debian/dep-lists.ts diff --git a/patches/linux/fix-build.patch b/patches/linux/fix-build.patch index f9e03bb..f7479d1 100644 --- a/patches/linux/fix-build.patch +++ b/patches/linux/fix-build.patch @@ -18,14 +18,14 @@ index 874c802..04731cf 100644 + // files.push(path.join(buildDir, 'bin', product.tunnelApplicationName)); // Add the main executable. diff --git a/build/package-lock.json b/build/package-lock.json -index 1a544ba..78337cd 100644 +index b78c4c8..58ee897 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -17,3 +17,2 @@ "@electron/get": "^2.0.0", - "@electron/osx-sign": "^2.0.0", "@types/ansi-colors": "^3.2.0", -@@ -107,5 +106,5 @@ +@@ -106,5 +105,5 @@ "node_modules/@azure/core-auth": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", @@ -34,19 +34,19 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "dev": true, -@@ -113,4 +112,4 @@ +@@ -112,4 +111,4 @@ "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" -@@ -118,3 +117,3 @@ +@@ -117,3 +116,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -237,5 +236,5 @@ +@@ -236,5 +235,5 @@ "node_modules/@azure/core-rest-pipeline": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.0.tgz", @@ -55,7 +55,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", "dev": true, -@@ -243,9 +242,8 @@ +@@ -242,9 +241,8 @@ "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", @@ -71,12 +71,12 @@ index 1a544ba..78337cd 100644 + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" -@@ -253,3 +251,3 @@ +@@ -252,3 +250,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -270,5 +268,5 @@ +@@ -269,5 +267,5 @@ "node_modules/@azure/core-tracing": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", @@ -85,12 +85,12 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "dev": true, -@@ -279,3 +277,3 @@ +@@ -278,3 +276,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -283,5 +281,5 @@ +@@ -282,5 +280,5 @@ "node_modules/@azure/core-util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", @@ -99,18 +99,18 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", "dev": true, -@@ -289,3 +287,4 @@ +@@ -288,3 +286,4 @@ "dependencies": { - "@azure/abort-controller": "^2.0.0", + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" -@@ -293,3 +292,3 @@ +@@ -292,3 +291,3 @@ "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } -@@ -372,11 +371,13 @@ +@@ -371,11 +370,13 @@ "node_modules/@azure/logger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.1.tgz", @@ -129,7 +129,7 @@ index 1a544ba..78337cd 100644 - "node": ">=8.0.0" + "node": ">=20.0.0" } -@@ -483,5 +484,5 @@ +@@ -482,5 +483,5 @@ "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", @@ -138,7 +138,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, -@@ -766,50 +767,2 @@ +@@ -539,50 +540,2 @@ }, - "node_modules/@electron/osx-sign": { - "version": "2.0.0", @@ -188,8 +188,8 @@ index 1a544ba..78337cd 100644 - "node": ">=10" - } - }, - "node_modules/@electron/rebuild": { -@@ -2029,5 +1982,5 @@ + "node_modules/@esbuild/aix-ppc64": { +@@ -1367,5 +1320,5 @@ "node_modules/@textlint/ast-node-types": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz", @@ -198,7 +198,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.4.1.tgz", + "integrity": "sha512-XifMpBMdo0E1Fuh85YdcYAgy+okNg9WKBzIPIO4JUDnSWUVFihnogrM4cjDapeHkgzSgulwR8oJVJ17eyxI1bA==", "dev": true, -@@ -2036,5 +1989,5 @@ +@@ -1374,5 +1327,5 @@ "node_modules/@textlint/linter-formatter": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.2.tgz", @@ -207,7 +207,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.4.1.tgz", + "integrity": "sha512-kAV7Sup3vwvqxKvBbf9lx/JaPHkRybQp/LLvA73U1AorPZE6XyfBAFG24BbMiCs4OX1ax4g7kXRuFPgMLWRf+g==", "dev": true, -@@ -2044,8 +1997,8 @@ +@@ -1382,8 +1335,8 @@ "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.2.2", - "@textlint/resolver": "15.2.2", @@ -221,7 +221,7 @@ index 1a544ba..78337cd 100644 + "debug": "^4.4.3", + "js-yaml": "^4.1.0", "lodash": "^4.17.21", -@@ -2121,2 +2074,9 @@ +@@ -1459,2 +1412,9 @@ }, + "node_modules/@textlint/linter-formatter/node_modules/emoji-regex": { + "version": "8.0.0", @@ -231,7 +231,7 @@ index 1a544ba..78337cd 100644 + "license": "MIT" + }, "node_modules/@textlint/linter-formatter/node_modules/has-flag": { -@@ -2138,2 +2098,17 @@ +@@ -1476,2 +1436,17 @@ }, + "node_modules/@textlint/linter-formatter/node_modules/string-width": { + "version": "4.2.3", @@ -249,7 +249,7 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": { -@@ -2165,5 +2140,5 @@ +@@ -1503,5 +1478,5 @@ "node_modules/@textlint/module-interop": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.2.tgz", @@ -258,7 +258,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.4.1.tgz", + "integrity": "sha512-jHtM2E5CR68P3z/+FGrEU5pml2fQVzEo2sez9FEjrVHSPCrHtqHcPaKfsYbQJjc9C48ObwaWrCzRNaL3KedNCQ==", "dev": true, -@@ -2172,5 +2147,5 @@ +@@ -1510,5 +1485,5 @@ "node_modules/@textlint/resolver": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.2.tgz", @@ -267,7 +267,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.4.1.tgz", + "integrity": "sha512-uVssyG3XXXKNY+O7NOajGvQZTyOuhPviwlq7Xek6ZT9K1eDQtA8074cPkAQoLMYhi/TUyOE5P5kpz42UF8Lmdw==", "dev": true, -@@ -2179,5 +2154,5 @@ +@@ -1517,5 +1492,5 @@ "node_modules/@textlint/types": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.2.tgz", @@ -276,12 +276,12 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.4.1.tgz", + "integrity": "sha512-WByVZ3zblbvuI+voWQplUP7seSTKXI9z6TMVXEB3dY3JFrZCIXWKNfLbETX5lZV7fYkCMaDtILO1l6s11wdbQA==", "dev": true, -@@ -2185,3 +2160,3 @@ +@@ -1523,3 +1498,3 @@ "dependencies": { - "@textlint/ast-node-types": "15.2.2" + "@textlint/ast-node-types": "15.4.1" } -@@ -2279,12 +2254,2 @@ +@@ -1617,12 +1592,2 @@ }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", @@ -294,23 +294,7 @@ index 1a544ba..78337cd 100644 - } - }, "node_modules/@types/gulp": { -@@ -2429,2 +2394,3 @@ - "dev": true, -+ "license": "BSD-2-Clause", - "dependencies": { -@@ -2594,2 +2560,3 @@ - "dev": true, -+ "license": "BSD-2-Clause", - "dependencies": { -@@ -2606,2 +2573,3 @@ - "dev": true, -+ "license": "MIT", - "dependencies": { -@@ -2621,2 +2589,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true, -@@ -2626,2 +2595,17 @@ +@@ -1944,2 +1909,17 @@ }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.2", @@ -328,11 +312,11 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/@vscode/iconv-lite-umd": { -@@ -2952,2 +2936,3 @@ +@@ -2270,2 +2250,3 @@ "dev": true, + "license": "ISC", "bin": { -@@ -3056,5 +3041,5 @@ +@@ -2347,5 +2328,5 @@ "node_modules/ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", @@ -341,7 +325,11 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "dev": true, -@@ -3336,17 +3321,7 @@ +@@ -2392,2 +2373,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -2422,17 +2404,7 @@ "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -363,31 +351,25 @@ index 1a544ba..78337cd 100644 - "license": "BSD-3-Clause" + "license": "Python-2.0" }, -@@ -3477,3 +3452,4 @@ - } -- ] -+ ], -+ "license": "BSD-2-Clause" - }, -@@ -3509,2 +3485,3 @@ +@@ -2480,2 +2452,3 @@ "dev": true, -+ "license": "ISC", ++ "license": "BSD-2-Clause", "dependencies": { -@@ -3519,3 +3496,4 @@ +@@ -2564,2 +2537,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -2575,3 +2549,4 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, -@@ -3526,2 +3504,3 @@ - "dev": true, -+ "license": "ISC", - "optional": true -@@ -3782,2 +3761,3 @@ +@@ -2677,2 +2652,3 @@ "dev": true, + "license": "MIT", - "engines": { -@@ -3980,6 +3960,7 @@ + "dependencies": { +@@ -2736,6 +2712,7 @@ "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", @@ -398,7 +380,7 @@ index 1a544ba..78337cd 100644 "dev": true, + "license": "MIT", "dependencies": { -@@ -3988,9 +3969,13 @@ +@@ -2744,9 +2721,13 @@ "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", @@ -417,107 +399,7 @@ index 1a544ba..78337cd 100644 - "node": ">= 6" + "node": ">=20.18.1" }, -@@ -4043,2 +4028,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true -@@ -4112,2 +4098,13 @@ - }, -+ "node_modules/cli-truncate/node_modules/ansi-regex": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", -+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", -+ "dev": true, -+ "license": "MIT", -+ "optional": true, -+ "engines": { -+ "node": ">=8" -+ } -+ }, - "node_modules/cli-truncate/node_modules/ansi-styles": { -@@ -4151,2 +4148,10 @@ - }, -+ "node_modules/cli-truncate/node_modules/emoji-regex": { -+ "version": "8.0.0", -+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", -+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", -+ "dev": true, -+ "license": "MIT", -+ "optional": true -+ }, - "node_modules/cli-truncate/node_modules/slice-ansi": { -@@ -4167,2 +4172,32 @@ - }, -+ "node_modules/cli-truncate/node_modules/string-width": { -+ "version": "4.2.3", -+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", -+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", -+ "dev": true, -+ "license": "MIT", -+ "optional": true, -+ "dependencies": { -+ "emoji-regex": "^8.0.0", -+ "is-fullwidth-code-point": "^3.0.0", -+ "strip-ansi": "^6.0.1" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/cli-truncate/node_modules/strip-ansi": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", -+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", -+ "dev": true, -+ "license": "MIT", -+ "optional": true, -+ "dependencies": { -+ "ansi-regex": "^5.0.1" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, - "node_modules/cliui": { -@@ -4228,2 +4263,24 @@ - }, -+ "node_modules/cliui/node_modules/emoji-regex": { -+ "version": "8.0.0", -+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", -+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", -+ "dev": true, -+ "license": "MIT" -+ }, -+ "node_modules/cliui/node_modules/string-width": { -+ "version": "4.2.3", -+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", -+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", -+ "dev": true, -+ "license": "MIT", -+ "dependencies": { -+ "emoji-regex": "^8.0.0", -+ "is-fullwidth-code-point": "^3.0.0", -+ "strip-ansi": "^6.0.1" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, - "node_modules/cliui/node_modules/strip-ansi": { -@@ -4282,2 +4339,3 @@ - "dev": true, -+ "license": "BSD-2-Clause", - "dependencies": { -@@ -4372,3 +4430,3 @@ - "engines": { -- "node": ">=18" -+ "node": ">=20" - } -@@ -4428,2 +4486,3 @@ - "dev": true, -+ "license": "MIT", - "dependencies": { -@@ -4440,6 +4499,7 @@ +@@ -2961,6 +2942,7 @@ "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -528,19 +410,13 @@ index 1a544ba..78337cd 100644 "dev": true, + "license": "BSD-2-Clause", "engines": { -@@ -4501,2 +4561,3 @@ - "dev": true, -+ "license": "(MIT OR WTFPL)", - "optional": true, -@@ -4552,2 +4613,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true, -@@ -4584,2 +4646,3 @@ - "dev": true, -+ "license": "ISC", - "optional": true -@@ -4766,6 +4829,7 @@ +@@ -3119,3 +3101,4 @@ + } +- ] ++ ], ++ "license": "BSD-2-Clause" + }, +@@ -3137,6 +3120,7 @@ "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", @@ -551,12 +427,12 @@ index 1a544ba..78337cd 100644 "dev": true, + "license": "BSD-2-Clause", "dependencies": { -@@ -4773,3 +4837,3 @@ +@@ -3144,3 +3128,3 @@ "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" }, -@@ -5029,5 +5093,5 @@ +@@ -3211,5 +3195,5 @@ "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -565,7 +441,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, -@@ -5046,2 +5110,16 @@ +@@ -3217,2 +3201,16 @@ }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", @@ -582,7 +458,7 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/end-of-stream": { -@@ -5056,6 +5134,7 @@ +@@ -3227,6 +3225,7 @@ "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", @@ -593,11 +469,7 @@ index 1a544ba..78337cd 100644 "dev": true, + "license": "BSD-2-Clause", "engines": { -@@ -5150,2 +5229,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true -@@ -5213,16 +5293,2 @@ +@@ -3367,16 +3366,2 @@ }, - "node_modules/esprima": { - "version": "4.0.1", @@ -614,40 +486,19 @@ index 1a544ba..78337cd 100644 - } - }, "node_modules/events": { -@@ -5241,2 +5307,3 @@ - "dev": true, -+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, -@@ -5271,2 +5338,3 @@ +@@ -3418,2 +3403,3 @@ "dev": true, + "license": "ISC", "dependencies": { -@@ -5515,5 +5583,5 @@ - "node_modules/form-data": { -- "version": "4.0.4", -- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", -- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", -+ "version": "4.0.5", -+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", -+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", +@@ -3617,2 +3603,3 @@ "dev": true, -@@ -5536,2 +5604,3 @@ - "dev": true, -+ "license": "MIT", ++ "license": "ISC", "optional": true -@@ -5576,2 +5645,3 @@ - "hasInstallScript": true, -+ "license": "MIT", - "optional": true, -@@ -5703,2 +5773,3 @@ - "dev": true, -+ "license": "MIT", - "optional": true, -@@ -5866,2 +5937,3 @@ +@@ -3924,2 +3911,3 @@ "dev": true, + "license": "MIT", "engines": { -@@ -5925,5 +5997,5 @@ +@@ -3983,5 +3971,5 @@ "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", @@ -656,7 +507,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "dev": true, -@@ -5936,7 +6008,21 @@ +@@ -3994,7 +3982,21 @@ ], + "license": "MIT", "dependencies": { @@ -681,7 +532,23 @@ index 1a544ba..78337cd 100644 + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } -@@ -6070,5 +6156,5 @@ +@@ -4048,2 +4050,15 @@ + }, ++ "node_modules/iconv-lite": { ++ "version": "0.6.3", ++ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", ++ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "safer-buffer": ">= 2.1.2 < 3.0.0" ++ }, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, + "node_modules/ieee754": { +@@ -4080,5 +4095,5 @@ "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", @@ -690,11 +557,11 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "dev": true, -@@ -6088,2 +6174,3 @@ +@@ -4114,2 +4129,3 @@ "dev": true, + "license": "MIT", - "dependencies": { -@@ -6359,5 +6446,5 @@ + "optional": true +@@ -4288,5 +4304,5 @@ "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", @@ -703,13 +570,25 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, -@@ -6365,4 +6452,3 @@ +@@ -4294,4 +4310,3 @@ "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, -@@ -6725,9 +6811,2 @@ +@@ -4360,2 +4375,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -4438,2 +4454,3 @@ + "hasInstallScript": true, ++ "license": "MIT", + "optional": true, +@@ -4449,2 +4466,3 @@ + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -4531,9 +4549,2 @@ }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", @@ -719,7 +598,19 @@ index 1a544ba..78337cd 100644 - "license": "Python-2.0" - }, "node_modules/matcher": { -@@ -7047,6 +7126,7 @@ +@@ -4543,2 +4554,3 @@ + "dev": true, ++ "license": "(MIT OR WTFPL)", + "optional": true, +@@ -4556,2 +4568,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -4693,2 +4706,3 @@ + "dev": true, ++ "license": "ISC", + "optional": true +@@ -4709,6 +4723,7 @@ "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -730,7 +621,11 @@ index 1a544ba..78337cd 100644 "dev": true, + "license": "MIT", "optional": true -@@ -7205,5 +7285,5 @@ +@@ -4755,2 +4770,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true +@@ -4770,5 +4786,5 @@ "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", @@ -739,7 +634,12 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.3.1.tgz", + "integrity": "sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==", "dev": true, -@@ -7308,5 +7388,5 @@ +@@ -4780,3 +4796,3 @@ + "engines": { +- "node": ">=18" ++ "node": ">=20" + } +@@ -4857,5 +4873,5 @@ "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -748,7 +648,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, -@@ -7575,5 +7655,5 @@ +@@ -4985,5 +5001,5 @@ "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", @@ -757,7 +657,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, -@@ -7653,8 +7733,9 @@ +@@ -5063,8 +5079,9 @@ "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -771,7 +671,7 @@ index 1a544ba..78337cd 100644 - "entities": "^4.4.0" + "entities": "^6.0.0" }, -@@ -7665,8 +7746,22 @@ +@@ -5075,8 +5092,22 @@ "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", @@ -798,7 +698,7 @@ index 1a544ba..78337cd 100644 "dependencies": { - "domhandler": "^5.0.2", "parse5": "^7.0.0" -@@ -7677,2 +7772,15 @@ +@@ -5087,2 +5118,15 @@ }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", @@ -814,7 +714,7 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/path-is-absolute": { -@@ -7696,5 +7804,5 @@ +@@ -5106,5 +5150,5 @@ "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", @@ -823,23 +723,20 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, -@@ -7838,6 +7946,7 @@ - "node_modules/prebuild-install": { -- "version": "7.1.1", -- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", -- "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", -+ "version": "7.1.3", -+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", -+ "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", +@@ -5237,2 +5281,3 @@ "dev": true, -+ "license": "MIT", ++ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, -@@ -7849,3 +7958,3 @@ +@@ -5244,3 +5289,3 @@ "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", + "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", -@@ -8024,22 +8133,2 @@ +@@ -5292,2 +5337,3 @@ + "dev": true, ++ "license": "ISC", + "dependencies": { +@@ -5385,22 +5431,2 @@ }, - "node_modules/rc-config-loader/node_modules/argparse": { - "version": "2.0.1", @@ -862,7 +759,15 @@ index 1a544ba..78337cd 100644 - } - }, "node_modules/read": { -@@ -8320,6 +8409,7 @@ +@@ -5591,7 +5617,15 @@ + }, ++ "node_modules/safer-buffer": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", ++ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", ++ "dev": true, ++ "license": "MIT" ++ }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -874,15 +779,27 @@ index 1a544ba..78337cd 100644 + "dev": true, + "license": "ISC" }, -@@ -8517,2 +8607,3 @@ +@@ -5642,2 +5676,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true +@@ -5649,2 +5684,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -5789,2 +5825,3 @@ ], + "license": "BSD-3-Clause", "optional": true -@@ -8538,2 +8629,3 @@ +@@ -5810,2 +5847,3 @@ ], + "license": "MIT", "optional": true, -@@ -8771,5 +8863,5 @@ +@@ -5889,2 +5927,3 @@ + "dev": true, ++ "license": "MIT", + "engines": { +@@ -5968,5 +6007,5 @@ "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -891,7 +808,7 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, -@@ -8793,31 +8885,11 @@ +@@ -5990,31 +6029,11 @@ "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", @@ -929,7 +846,7 @@ index 1a544ba..78337cd 100644 + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } -@@ -8834,2 +8906,9 @@ +@@ -6031,2 +6050,9 @@ }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", @@ -939,14 +856,18 @@ index 1a544ba..78337cd 100644 + "license": "MIT" + }, "node_modules/string-width/node_modules/strip-ansi": { -@@ -8927,4 +9006,5 @@ +@@ -6124,4 +6150,5 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "optional": true, -@@ -9042,2 +9122,24 @@ +@@ -6159,2 +6186,3 @@ + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -6245,2 +6273,24 @@ }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", @@ -971,7 +892,7 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/table/node_modules/strip-ansi": { -@@ -9310,5 +9412,5 @@ +@@ -6376,5 +6426,5 @@ "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", @@ -980,26 +901,14 @@ index 1a544ba..78337cd 100644 + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, -@@ -9435,6 +9537,7 @@ - "node_modules/tslib": { -- "version": "2.6.3", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", -- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", -- "dev": true -+ "version": "2.8.1", -+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", -+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", -+ "dev": true, -+ "license": "0BSD" - }, -@@ -9453,4 +9556,5 @@ +@@ -6500,4 +6550,5 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "optional": true, -@@ -9502,2 +9606,12 @@ +@@ -6549,2 +6600,12 @@ }, + "node_modules/undici": { + "version": "7.16.0", @@ -1012,13 +921,13 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/undici-types": { -@@ -9577,3 +9691,4 @@ +@@ -6588,3 +6649,4 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true + "dev": true, + "license": "MIT" }, -@@ -9790,2 +9905,25 @@ +@@ -6768,2 +6830,25 @@ }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", @@ -1044,7 +953,7 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/which": { -@@ -9894,2 +10032,24 @@ +@@ -6872,2 +6957,24 @@ }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", @@ -1069,7 +978,7 @@ index 1a544ba..78337cd 100644 + } + }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { -@@ -9920,27 +10080,2 @@ +@@ -6898,27 +7005,2 @@ }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", @@ -1097,13 +1006,13 @@ index 1a544ba..78337cd 100644 - } - }, "node_modules/wrappy": { -@@ -10036,2 +10171,47 @@ +@@ -6975,2 +7057,47 @@ }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", -+ "dev": true, ++ "extraneous": true, + "license": "MIT", + "engines": { + "node": ">=8" @@ -1113,14 +1022,14 @@ index 1a544ba..78337cd 100644 + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", -+ "dev": true, ++ "extraneous": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", -+ "dev": true, ++ "extraneous": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", @@ -1135,7 +1044,7 @@ index 1a544ba..78337cd 100644 + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", -+ "dev": true, ++ "extraneous": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" @@ -1146,7 +1055,7 @@ index 1a544ba..78337cd 100644 + }, "node_modules/yauzl": { diff --git a/build/package.json b/build/package.json -index e45161d..30ba3c3 100644 +index 785f04f..e523427 100644 --- a/build/package.json +++ b/build/package.json @@ -11,3 +11,2 @@ diff --git a/patches/version-1-update.patch b/patches/version-1-update.patch index 98a1914..73b2a3d 100644 --- a/patches/version-1-update.patch +++ b/patches/version-1-update.patch @@ -1,5 +1,5 @@ diff --git a/src/vs/platform/update/common/update.ts b/src/vs/platform/update/common/update.ts -index 8e3db7c..1a3226c 100644 +index cbeb3a6..bc382cc 100644 --- a/src/vs/platform/update/common/update.ts +++ b/src/vs/platform/update/common/update.ts @@ -54,3 +54,4 @@ export const enum UpdateType { @@ -8,7 +8,7 @@ index 8e3db7c..1a3226c 100644 + Snap, + WindowsInstaller, } -@@ -116 +117,38 @@ export interface IUpdateService { +@@ -120 +121,38 @@ export interface IUpdateService { } + +export type Architecture = @@ -49,44 +49,47 @@ index 8e3db7c..1a3226c 100644 + | "user"; \ No newline at end of file diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index 05c4489..59d0bd7 100644 +index 3e5956f..b3685bb 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts -@@ -17,3 +17,3 @@ import { IProductService } from '../../product/common/productService.js'; +@@ -18,3 +18,3 @@ import { IProductService } from '../../product/common/productService.js'; import { IRequestService } from '../../request/common/request.js'; -import { AvailableForDownload, DisablementReason, IUpdateService, State, StateType, UpdateType } from '../common/update.js'; +import { Architecture, AvailableForDownload, DisablementReason, IUpdateService, Platform, State, StateType, Target, UpdateType } from '../common/update.js'; -@@ -23,10 +23,8 @@ export interface IUpdateURLOptions { +@@ -25,12 +25,8 @@ export interface IUpdateURLOptions { -export function createUpdateURL(baseUpdateUrl: string, platform: string, quality: string, commit: string, options?: IUpdateURLOptions): string { - const url = new URL(`${baseUpdateUrl}/api/update/${platform}/${quality}/${commit}`); - - if (options?.background) { - url.searchParams.set('bg', 'true'); +- } +- +- url.searchParams.set('u', options?.internalOrg ?? 'none'); +- +- return url.toString(); +export function createUpdateURL(productService: IProductService, quality: string, platform: Platform, architecture: Architecture, target?: Target): string { + if (target) { + return `${productService.updateUrl}/${quality}/${platform}/${architecture}/${target}/latest.json`; + } else { + return `${productService.updateUrl}/${quality}/${platform}/${architecture}/latest.json`; - } -- -- return url.toString(); ++ } } -@@ -299,3 +297,3 @@ export abstract class AbstractUpdateService implements IUpdateService { +@@ -315,3 +311,3 @@ export abstract class AbstractUpdateService implements IUpdateService { - if (mode === 'none') { + if (mode === 'none' || mode === 'manual') { return undefined; diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts -index e65a982..950291b 100644 +index 842c676..974d411 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts -@@ -21,2 +21,3 @@ import { IMeteredConnectionService } from '../../meteredConnection/common/metere - import { AbstractUpdateService, createUpdateURL, getUpdateRequestHeaders, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; +@@ -22,2 +22,3 @@ import { AbstractUpdateService, createUpdateURL, getUpdateRequestHeaders, IUpdat + import { INodeProcess } from '../../../base/common/platform.js'; +import * as semver from 'semver'; -@@ -90,16 +91,5 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau +@@ -97,16 +98,5 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau - protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string | undefined { - const assetID = this.productService.darwinUniversalAssetId ?? (process.arch === 'x64' ? 'darwin' : 'darwin-arm64'); @@ -106,7 +109,7 @@ index e65a982..950291b 100644 + return createUpdateURL(this.productService, quality, process.platform, process.arch); + } -@@ -137,3 +127,30 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau +@@ -145,3 +135,30 @@ export class DarwinUpdateService extends AbstractUpdateService implements IRelau this.logService.trace('update#doCheckForUpdates - using Electron autoUpdater', { url, explicit, background }); - electron.autoUpdater.checkForUpdates(); + this.requestService.request({ url }, CancellationToken.None) @@ -139,7 +142,7 @@ index e65a982..950291b 100644 + }); } diff --git a/src/vs/platform/update/electron-main/updateService.linux.ts b/src/vs/platform/update/electron-main/updateService.linux.ts -index ee4b291..01d0d9d 100644 +index 3ace29f..651b38c 100644 --- a/src/vs/platform/update/electron-main/updateService.linux.ts +++ b/src/vs/platform/update/electron-main/updateService.linux.ts @@ -16,2 +16,3 @@ import { AvailableForDownload, IUpdate, State, UpdateType } from '../common/upda @@ -153,7 +156,7 @@ index ee4b291..01d0d9d 100644 + protected buildUpdateFeedUrl(quality: string, _commit: string, _options?: IUpdateURLOptions): string { + return createUpdateURL(this.productService, quality, process.platform, process.arch); } -@@ -50,5 +51,17 @@ export class LinuxUpdateService extends AbstractUpdateService { +@@ -51,5 +52,17 @@ export class LinuxUpdateService extends AbstractUpdateService { this.setState(State.Idle(UpdateType.Archive)); - } else { + @@ -173,22 +176,23 @@ index ee4b291..01d0d9d 100644 + return Promise.resolve(null); }) diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts -index da4c875..fa634dc 100644 +index 25535f2..7ef2f1b 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts @@ -14,3 +14,2 @@ import { CancellationToken, CancellationTokenSource } from '../../../base/common import { memoize } from '../../../base/common/decorators.js'; -import { hash } from '../../../base/common/hash.js'; import * as path from '../../../base/common/path.js'; -@@ -31,4 +30,5 @@ import { asJson, IRequestService } from '../../request/common/request.js'; +@@ -33,5 +32,6 @@ import { asJson, IRequestService } from '../../request/common/request.js'; import { ITelemetryService } from '../../telemetry/common/telemetry.js'; -import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, UpdateType } from '../common/update.js'; --import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; +-import { AbstractUpdateService, createUpdateURL, getUpdateRequestHeaders, IUpdateURLOptions, UpdateErrorClassification } from './abstractUpdateService.js'; +import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, Target, UpdateType } from '../common/update.js'; -+import { AbstractUpdateService, createUpdateURL, IUpdateURLOptions } from './abstractUpdateService.js'; ++import { AbstractUpdateService, createUpdateURL, getUpdateRequestHeaders, IUpdateURLOptions } from './abstractUpdateService.js'; + import { INodeProcess } from '../../../base/common/platform.js'; +import * as semver from 'semver'; -@@ -46,5 +46,9 @@ function getUpdateType(): UpdateType { +@@ -49,5 +49,9 @@ function getUpdateType(): UpdateType { if (typeof _updateType === 'undefined') { - _updateType = existsSync(path.join(path.dirname(process.execPath), 'unins000.exe')) - ? UpdateType.Setup @@ -201,16 +205,12 @@ index da4c875..fa634dc 100644 + _updateType = UpdateType.Archive; + } } -@@ -68,2 +72,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - @IConfigurationService configurationService: IConfigurationService, -+ // @ts-expect-error - @ITelemetryService private readonly telemetryService: ITelemetryService, -@@ -140,3 +145,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -162,3 +166,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun } else { - const fastUpdatesEnabled = this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); + const fastUpdatesEnabled = getUpdateType() === UpdateType.Setup && this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); // GC for background updates in system setup happens via inno_setup since it requires -@@ -158,12 +163,22 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -180,12 +184,22 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - protected buildUpdateFeedUrl(quality: string, commit: string, options?: IUpdateURLOptions): string | undefined { - let platform = `win32-${process.arch}`; @@ -242,7 +242,7 @@ index da4c875..fa634dc 100644 - return createUpdateURL(this.productService.updateUrl!, platform, quality, commit, options); + return createUpdateURL(this.productService, quality, process.platform, process.arch, target); } -@@ -200,2 +215,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -224,2 +238,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + const fetchedVersion = /\d+\.\d+\.\d+\.\d+/.test(update.productVersion) ? update.productVersion.replace(/(\d+\.\d+\.\d+)\.\d+(\-\w+)?/, '$1$2') : update.productVersion.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') + const currentVersion = this.productService.version.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') @@ -253,26 +253,56 @@ index da4c875..fa634dc 100644 + } + if (updateType === UpdateType.Archive) { -@@ -271,3 +294,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -295,3 +317,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun .then(undefined, err => { - this.telemetryService.publicLog2<{ messageHash: string }, UpdateErrorClassification>('update:error', { messageHash: String(hash(String(err))) }); this.logService.error(err); -@@ -494,6 +516,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - } else { -- spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], { -- detached: true, -- stdio: ['ignore', 'ignore', 'ignore'] -- }); -+ const type = getUpdateType(); -+ if (type == UpdateType.WindowsInstaller) { -+ spawn('msiexec.exe', ['/i', this.availableUpdate.packagePath], { +@@ -359,20 +380,31 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + await pfs.Promises.writeFile(this.availableUpdate.updateFilePath, 'flag'); +- const child = spawn(this.availableUpdate.packagePath, +- [ +- '/verysilent', +- '/log', +- `/update="${this.availableUpdate.updateFilePath}"`, +- `/progress="${progressFilePath}"`, +- `/sessionend="${sessionEndFlagPath}"`, +- `/cancel="${cancelFilePath}"`, +- '/nocloseapplications', +- '/mergetasks=runcode,!desktopicon,!quicklaunchicon' +- ], +- { ++ ++ let child: ChildProcess ++ ++ const type = getUpdateType(); ++ if (type == UpdateType.WindowsInstaller) { ++ child = spawn('msiexec.exe', ['/i', this.availableUpdate.packagePath], { + detached: true, +- stdio: ['ignore', 'ignore', 'ignore'], +- windowsVerbatimArguments: true, +- env: { ...process.env, __COMPAT_LAYER: 'RunAsInvoker' } +- } +- ); ++ stdio: ['ignore', 'ignore', 'ignore'] ++ }); ++ } else { ++ child = spawn(this.availableUpdate.packagePath, ++ [ ++ '/verysilent', ++ '/log', ++ `/update="${this.availableUpdate.updateFilePath}"`, ++ `/progress="${progressFilePath}"`, ++ `/sessionend="${sessionEndFlagPath}"`, ++ `/cancel="${cancelFilePath}"`, ++ '/nocloseapplications', ++ '/mergetasks=runcode,!desktopicon,!quicklaunchicon' ++ ], ++ { + detached: true, -+ stdio: ['ignore', 'ignore', 'ignore'] -+ }); -+ } else { -+ spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], { -+ detached: true, -+ stdio: ['ignore', 'ignore', 'ignore'] -+ }); -+ } - } ++ stdio: ['ignore', 'ignore', 'ignore'], ++ windowsVerbatimArguments: true, ++ env: { ...process.env, __COMPAT_LAYER: 'RunAsInvoker' } ++ } ++ ); ++ } + diff --git a/upstream/insider.json b/upstream/insider.json index b533d50..06bbfc0 100644 --- a/upstream/insider.json +++ b/upstream/insider.json @@ -1,4 +1,4 @@ { "tag": "1.110.0", - "commit": "547a36e89fec78f3c1a33302cdd7d8d8143cb09e" + "commit": "37f39645643438347f1b5077abdaa96e7297fa7c" } From 419245db4b3faa6419de25bbae66d67c88f72f99 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Fri, 27 Feb 2026 19:54:32 +0100 Subject: [PATCH 14/22] fix: use correct org for admx (#2716) --- patches/fix-policies.patch | 51 +++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/patches/fix-policies.patch b/patches/fix-policies.patch index 138a573..b96cdf9 100644 --- a/patches/fix-policies.patch +++ b/patches/fix-policies.patch @@ -1,5 +1,5 @@ diff --git a/build/.moduleignore b/build/.moduleignore -index 5b040cc..8d5fd71 100644 +index ed36151..c955e07 100644 --- a/build/.moduleignore +++ b/build/.moduleignore @@ -128,9 +128,11 @@ vsda/** @@ -21,8 +21,51 @@ index 5b040cc..8d5fd71 100644 +@vscodium/policy-watcher/index.d.ts +!@vscodium/policy-watcher/build/Release/vscodium-policy-watcher.node +diff --git a/build/lib/policies/basePolicy.ts b/build/lib/policies/basePolicy.ts +index 7f650ba..db927cb 100644 +--- a/build/lib/policies/basePolicy.ts ++++ b/build/lib/policies/basePolicy.ts +@@ -38,3 +38,3 @@ export abstract class BasePolicy implements Policy { + return [ +- ``, ++ ``, + ` `, +diff --git a/build/lib/policies/render.ts b/build/lib/policies/render.ts +index 47b485d..8437fd4 100644 +--- a/build/lib/policies/render.ts ++++ b/build/lib/policies/render.ts +@@ -49,3 +49,3 @@ export function renderADMX(regKey: string, versions: string[], categories: Categ + +- ++ + +@@ -167,3 +167,3 @@ export function renderProfileManifest(appName: string, bundleIdentifier: string, + pfm_default +- Microsoft ++ !!ORG_NAME!! + pfm_name +@@ -185,3 +185,3 @@ export function renderProfileManifest(appName: string, bundleIdentifier: string, + pfm_app_url +- https://code.visualstudio.com/ ++ https://github.com/VSCodium/vscodium + pfm_description +@@ -189,3 +189,3 @@ export function renderProfileManifest(appName: string, bundleIdentifier: string, + pfm_documentation_url +- https://code.visualstudio.com/docs/setup/enterprise ++ https://github.com/VSCodium/vscodium + pfm_domain +@@ -255,3 +255,3 @@ ${policyEntries} + PayloadDescription +- This profile manages ${appName}. For more information see https://code.visualstudio.com/docs/setup/enterprise ++ This profile manages ${appName}. For more information see https://github.com/VSCodium/vscodium + PayloadDisplayName +@@ -261,3 +261,3 @@ ${policyEntries} + PayloadOrganization +- Microsoft ++ !!ORG_NAME!! + PayloadType diff --git a/eslint.config.js b/eslint.config.js -index 1847a81..3fb3b01 100644 +index 29ffd56..dff58ed 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1434,3 +1434,3 @@ export default tseslint.config( @@ -89,7 +132,7 @@ index b3e1b81..7c34f88 100644 + }, "node_modules/@webassemblyjs/ast": { diff --git a/package.json b/package.json -index 4e4e77c..665303a 100644 +index 67e53ae..fb81b3c 100644 --- a/package.json +++ b/package.json @@ -90,3 +90,3 @@ @@ -197,7 +240,7 @@ index ee0a24b..881ce36 100644 +/Users/example/node_modules/@vscodium/policy-watcher/src/windows/NumberPolicy.hh /Users/example/node_modules/@vscode/vscode-languagedetection/CODE_OF_CONDUCT.md diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts -index ca6cea2..32b22fe 100644 +index c30c6da..f4f3dea 100644 --- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts @@ -62,5 +62,5 @@ flakySuite('Native Modules (all platforms)', () => { From e8c2ca40dd8664ac30d170f85609f1ea78653f7c Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Sat, 28 Feb 2026 00:39:20 +0100 Subject: [PATCH 15/22] fix(font): scm panel (#2718) --- font-size/generate-css.ts | 16 ++- patches/feat-experimental-font.patch | 154 ++++++++++++--------------- 2 files changed, 81 insertions(+), 89 deletions(-) diff --git a/font-size/generate-css.ts b/font-size/generate-css.ts index bae0e25..e21add5 100755 --- a/font-size/generate-css.ts +++ b/font-size/generate-css.ts @@ -36,6 +36,12 @@ const AREAS: Record = { files: ['src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css'], prefixes: ['.monaco-workbench .part.statusbar'], }, + sidebar: { + name: 'sidebar', + defaultSize: 13, + files: ['src/vs/base/browser/ui/button/button.css', 'src/vs/workbench/contrib/scm/browser/media/scm.css'], + prefixes: ['.monaco-workbench .part.sidebar', '.monaco-workbench .part.auxiliarybar'], + }, tabs: { name: 'tabs', defaultSize: 13, @@ -150,7 +156,7 @@ function extractOriginal(content: string): string { } function extractStyle(selector: string): string { - const match = /^(\.\w+)/.exec(selector); + const match = /^(\.[\w-]+)/.exec(selector); return match?.[1] ?? ''; } @@ -160,9 +166,8 @@ function mergeSelector(selectors: string[], prefixes: string[], index: number): return; } - const selector = selectors[index]; const prefix = prefixes[index]; - + const selector = selectors[index]; const style = extractStyle(prefix); if(selector === style) { @@ -175,6 +180,9 @@ function mergeSelector(selectors: string[], prefixes: string[], index: number): else if(selector.startsWith(style)) { mergeSelector(selectors, prefixes, index + 1); } + else if(index === 0) { + selectors.unshift(...prefixes) + } else { selectors.splice(index + 1, 0, ...prefixes.slice(index)); } @@ -196,7 +204,7 @@ function prefixSelector(selector: string, prefixParts: string[]): string { } async function main(): Promise { - const name = process.argv[2] || 'sidebar'; + const name = process.argv[2]; const area = AREAS[name]; if(!area) { diff --git a/patches/feat-experimental-font.patch b/patches/feat-experimental-font.patch index e832fbc..0fabb71 100644 --- a/patches/feat-experimental-font.patch +++ b/patches/feat-experimental-font.patch @@ -37,6 +37,55 @@ index 467b1ff..91fd5a0 100644 + width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) +} \ No newline at end of file +diff --git a/src/vs/base/browser/ui/button/button.css b/src/vs/base/browser/ui/button/button.css +index 8496f1b..964455a 100644 +--- a/src/vs/base/browser/ui/button/button.css ++++ b/src/vs/base/browser/ui/button/button.css +@@ -183 +183,43 @@ + } ++ ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .part.sidebar .monaco-text-button, .monaco-workbench .part.auxiliarybar .monaco-text-button { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) calc(var(--vscode-workbench-sidebar-font-size) * 0.615385); ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) ++} ++.monaco-workbench .part.sidebar .monaco-text-button.small, .monaco-workbench .part.auxiliarybar .monaco-text-button.small { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++} ++.monaco-workbench .part.sidebar .monaco-text-button:focus, .monaco-workbench .part.auxiliarybar .monaco-text-button:focus { ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-text-button.monaco-text-button-with-short-label, .monaco-workbench .part.auxiliarybar .monaco-text-button.monaco-text-button-with-short-label { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); ++ height: calc(var(--vscode-workbench-sidebar-font-size) * 2.153846) ++} ++.monaco-workbench .part.sidebar .monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label, .monaco-workbench .part.sidebar .monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label-short, .monaco-workbench .part.auxiliarybar .monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label, .monaco-workbench .part.auxiliarybar .monaco-text-button.monaco-text-button-with-short-label > .monaco-button-label-short { ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.384615); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) 0 ++} ++.monaco-workbench .part.sidebar .monaco-button-dropdown > .monaco-button:focus, .monaco-workbench .part.auxiliarybar .monaco-button-dropdown > .monaco-button:focus { ++ outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) ++} ++.monaco-workbench .part.sidebar .monaco-button-dropdown .monaco-button-dropdown-separator, .monaco-workbench .part.auxiliarybar .monaco-button-dropdown .monaco-button-dropdown-separator { ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) 0 ++} ++.monaco-workbench .part.sidebar .monaco-button-dropdown .monaco-button-dropdown-separator > div, .monaco-workbench .part.auxiliarybar .monaco-button-dropdown .monaco-button-dropdown-separator > div { ++ width: 1px ++} ++.monaco-workbench .part.sidebar .monaco-description-button, .monaco-workbench .part.auxiliarybar .monaco-description-button { ++ margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) ++} ++.monaco-workbench .part.sidebar .monaco-description-button .monaco-button-description, .monaco-workbench .part.auxiliarybar .monaco-description-button .monaco-button-description { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); ++ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) calc(var(--vscode-workbench-sidebar-font-size) * 1.538462) ++} +\ No newline at end of file diff --git a/src/vs/base/browser/ui/codicons/codicon/codicon.css b/src/vs/base/browser/ui/codicons/codicon/codicon.css index d7f257d..af55bdd 100644 --- a/src/vs/base/browser/ui/codicons/codicon/codicon.css @@ -1788,7 +1837,7 @@ index 9afcf59..a8d4c2e 100644 + this._onDidChange.fire(undefined); // Signal grid that size constraints changed } diff --git a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css -index decb51a..3a5ff82 100644 +index decb51a..d0db436 100644 --- a/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css +++ b/src/vs/workbench/browser/parts/sidebar/media/sidebarpart.css @@ -15,3 +15,3 @@ @@ -1834,80 +1883,11 @@ index decb51a..3a5ff82 100644 - left: 5px; /* place icon in center */ + left: calc(var(--vscode-workbench-sidebar-font-size) * 0.385); /* place icon in center */ } -@@ -124,3 +130,76 @@ +@@ -124,3 +130,7 @@ .monaco-workbench .sidebar.pane-composite-part > .title.has-composite-bar > .title-actions .monaco-action-bar .action-item { - max-width: 150px; + max-width: calc(var(--vscode-workbench-sidebar-font-size) * 11.538); -+} -+ -+.monaco-workbench .part.sidebar .monaco-tl-contents { -+ display: flex; -+ align-items: center; -+} -+ -+/* .monaco-workbench .part.sidebar .pane > .pane-header h3.title { -+ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); -+} -+ -+.monaco-workbench .part.sidebar .monaco-text-button { -+ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923); -+} -+ -+.monaco-workbench .part.sidebar .monaco-icon-label::before { -+ background-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); -+ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.462); -+ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); -+ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); -+} -+ -+.monaco-workbench .part.sidebar .open-editors .open-editor, -+.monaco-workbench .part.sidebar .open-editors .editor-group { -+ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); -+ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); -+} -+ -+.monaco-workbench .part.sidebar > .title, -+.monaco-workbench .part.sidebar > .header-or-footer { -+ height: calc(var(--vscode-workbench-sidebar-font-size) * 2.692); -+} -+ -+.monaco-workbench .part.sidebar > .title > .title-label { -+ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 2.692); -+} -+ -+.monaco-workbench .part.sidebar .pane > .pane-header { -+ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.692); -+ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846); -+} -+ -+.monaco-workbench .part.sidebar .monaco-action-bar .action-item .codicon { -+ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); -+ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); -+} -+.monaco-workbench .part.sidebar .codicon[class*='codicon-'] { -+ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.231); -+} -+ -+.monaco-workbench .part.sidebar .pane > .pane-header > .actions { -+ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.616); } -+.monaco-workbench .part.sidebar .monaco-pane-view .pane > .pane-header > .actions .action-item { -+ margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.308); -+} -+ -+.monaco-workbench .part.sidebar .monaco-inputbox > .ibwrapper > .input { -+ font-size: var(--vscode-workbench-sidebar-font-size); -+} -+ -+.monaco-workbench .part.sidebar .monaco-tl-contents { -+ display: flex; -+ align-items: center; -+} -+ -+.monaco-workbench .part.sidebar .monaco-custom-toggle { -+ height: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); -+ width: calc(var(--vscode-workbench-sidebar-font-size) * 1.539); -+} */ + +.monaco-workbench .part.sidebar > .content { + font-family: var(--vscode-workbench-sidebar-font-family, inherit); @@ -3216,12 +3196,16 @@ index 530b0c4..b3c979d 100644 + return FONT.sidebarSize22; } diff --git a/src/vs/workbench/contrib/scm/browser/media/scm.css b/src/vs/workbench/contrib/scm/browser/media/scm.css -index 20c78c3..eb5a61d 100644 +index 20c78c3..54b982d 100644 --- a/src/vs/workbench/contrib/scm/browser/media/scm.css +++ b/src/vs/workbench/contrib/scm/browser/media/scm.css -@@ -799 +799,207 @@ +@@ -799 +799,211 @@ } + ++ ++ ++/*** Generated for Custom Font Size ***/ ++ +.monaco-workbench .part.sidebar .scm-view .monaco-tl-contents > div, .monaco-workbench .part.auxiliarybar .scm-view .monaco-tl-contents > div { + padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077) +} @@ -3270,7 +3254,7 @@ index 20c78c3..eb5a61d 100644 + padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) +} +.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon { -+ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++ padding: 1px +} +.monaco-workbench .part.sidebar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon.codicon-git-branch, .monaco-workbench .part.auxiliarybar .scm-view .monaco-list-row .history-item > .label-container > .label > .codicon.codicon-git-branch { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.923077); @@ -3308,7 +3292,7 @@ index 20c78c3..eb5a61d 100644 + padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) +} +.monaco-workbench .part.sidebar .scm-view .scm-input .scm-editor .scm-editor-toolbar, .monaco-workbench .part.auxiliarybar .scm-view .scm-input .scm-editor .scm-editor-toolbar { -+ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++ padding: 1px calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) 1px 1px +} +.monaco-workbench .part.sidebar .scm-view .scm-input .scm-editor .scm-editor-toolbar.scroll-decoration, .monaco-workbench .part.auxiliarybar .scm-view .scm-input .scm-editor .scm-editor-toolbar.scroll-decoration { + box-shadow: var(--vscode-scrollbar-shadow) 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) calc(var(--vscode-workbench-sidebar-font-size) * -0.461538) inset @@ -3325,33 +3309,33 @@ index 20c78c3..eb5a61d 100644 +.monaco-workbench .part.sidebar .scm-view .button-container > .monaco-button-dropdown > .monaco-dropdown-button, .monaco-workbench .part.auxiliarybar .scm-view .button-container > .monaco-button-dropdown > .monaco-dropdown-button { + padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) +} -+.monaco-workbench .part.sidebar .part.panel .scm-view .scm-editor-container, .monaco-workbench .part.auxiliarybar .part.panel .scm-view .scm-editor-container { -+ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-panelInput-border) ++.monaco-workbench .part.panel .scm-view .scm-editor-container, .monaco-workbench .part.panel .scm-view .scm-editor-container { ++ outline: 1px solid var(--vscode-panelInput-border) +} -+.monaco-workbench .part.sidebar .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.sidebar .part.panel .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.auxiliarybar .part.panel .scm-view .scm-editor.synthetic-focus { -+ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-focusBorder); ++.monaco-workbench .part.sidebar .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.panel .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.synthetic-focus, .monaco-workbench .part.panel .scm-view .scm-editor.synthetic-focus { ++ outline: 1px solid var(--vscode-focusBorder); + outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) +} +.monaco-workbench .part.sidebar .scm-view .scm-editor.validation-info, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.validation-info { -+ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-inputValidation-infoBorder); ++ outline: 1px solid var(--vscode-inputValidation-infoBorder); + outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) +} +.monaco-workbench .part.sidebar .scm-view .scm-editor.validation-warning, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.validation-warning { -+ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-inputValidation-warningBorder); ++ outline: 1px solid var(--vscode-inputValidation-warningBorder); + outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) +} +.monaco-workbench .part.sidebar .scm-view .scm-editor.validation-error, .monaco-workbench .part.auxiliarybar .scm-view .scm-editor.validation-error { -+ outline: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) solid var(--vscode-inputValidation-errorBorder); ++ outline: 1px solid var(--vscode-inputValidation-errorBorder); + outline-offset: calc(var(--vscode-workbench-sidebar-font-size) * -0.076923) +} +.monaco-workbench .part.sidebar .scm-editor-validation-container, .monaco-workbench .part.auxiliarybar .scm-editor-validation-container { + padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) +} +.monaco-workbench .part.sidebar .scm-editor-validation, .monaco-workbench .part.auxiliarybar .scm-editor-validation { -+ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) ++ padding: 1px calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) +} +.monaco-workbench .part.sidebar .scm-editor-validation-actions, .monaco-workbench .part.auxiliarybar .scm-editor-validation-actions { -+ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++ margin-top: 1px +} +.monaco-workbench .part.sidebar .scm-repositories-view .scm-artifact-group, .monaco-workbench .part.sidebar .scm-repositories-view .scm-artifact, .monaco-workbench .part.auxiliarybar .scm-repositories-view .scm-artifact-group, .monaco-workbench .part.auxiliarybar .scm-repositories-view .scm-artifact { + margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) @@ -3396,7 +3380,7 @@ index 20c78c3..eb5a61d 100644 +} +.monaco-workbench .part.sidebar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-cloud, .monaco-workbench .part.auxiliarybar .monaco-hover.history-item-hover .history-item-hover-container p > span > span.codicon.codicon-cloud { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923); -+ margin-bottom: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++ margin-bottom: 1px +} +.monaco-workbench .part.sidebar .pane-header .scm-graph-view-badge-container > .scm-graph-view-badge.monaco-count-badge.long, .monaco-workbench .part.auxiliarybar .pane-header .scm-graph-view-badge-container > .scm-graph-view-badge.monaco-count-badge.long { + margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538); From 88a290aa68ec3d7c221a2a9ad57352022a42165e Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Sat, 28 Feb 2026 07:26:25 +0000 Subject: [PATCH 16/22] build(insider): update to commit f5927e7 --- upstream/insider.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upstream/insider.json b/upstream/insider.json index 06bbfc0..5f0c1e3 100644 --- a/upstream/insider.json +++ b/upstream/insider.json @@ -1,4 +1,4 @@ { "tag": "1.110.0", - "commit": "37f39645643438347f1b5077abdaa96e7297fa7c" + "commit": "f5927e727c69039d3037f018f1790ebbbee596bc" } From 12ee0524bf55ea4b9bc74ea5fd9a0d92f138d88b Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Sat, 28 Feb 2026 17:55:15 +0100 Subject: [PATCH 17/22] fix(font): button on extensions panel (#2719) --- font-size/generate-css.ts | 37 +++++++++----- patches/feat-experimental-font.patch | 76 +++++++++++++++++++++------- 2 files changed, 83 insertions(+), 30 deletions(-) diff --git a/font-size/generate-css.ts b/font-size/generate-css.ts index e21add5..3bc4730 100755 --- a/font-size/generate-css.ts +++ b/font-size/generate-css.ts @@ -39,7 +39,7 @@ const AREAS: Record = { sidebar: { name: 'sidebar', defaultSize: 13, - files: ['src/vs/base/browser/ui/button/button.css', 'src/vs/workbench/contrib/scm/browser/media/scm.css'], + files: ['src/vs/base/browser/ui/button/button.css', 'src/vs/workbench/contrib/scm/browser/media/scm.css', 'src/vs/base/browser/ui/actionbar/actionbar.css', 'src/vs/workbench/contrib/extensions/browser/media/extension.css', 'src/vs/workbench/contrib/extensions/browser/media/extensionActions.css'], prefixes: ['.monaco-workbench .part.sidebar', '.monaco-workbench .part.auxiliarybar'], }, tabs: { @@ -89,7 +89,6 @@ async function processFile(filePath: string, area: Area): Promise { - let hasPx = false; const declarationsToAdd: Array<{ prop: string; value: string }> = []; rule.walkDecls((declaration) => { @@ -97,12 +96,13 @@ async function processFile(filePath: string, area: Area): Promise 0) { + if(declarationsToAdd.length > 0) { const selectors = (rule.selectors && rule.selectors.length > 0) ? rule.selectors : [rule.selector]; const prefixeds: string[] = []; @@ -207,18 +207,29 @@ async function main(): Promise { const name = process.argv[2]; const area = AREAS[name]; - if(!area) { + if(area) { + for(const file of area.files) { + const result = await processFile(path.join('..', 'vscode', file), area); + if(result.fails) { + console.error(`Error processing ${file}:`, result.error); + } + } + } + else if(name === 'all') { + for(const area of Object.values(AREAS)) { + for(const file of area.files) { + const result = await processFile(path.join('..', 'vscode', file), area); + if(result.fails) { + console.error(`Error processing ${file}:`, result.error); + } + } + } + } + else { console.log(`No area found for ${name}`); console.log(`\nAvailable areas:\n- ${Object.keys(AREAS).join('\n- ')}`); return; } - - for(const file of area.files) { - const result = await processFile(path.join('..', 'vscode', file), area); - if(result.fails) { - console.error(`Error processing ${file}:`, result.error); - } - } } await main(); diff --git a/patches/feat-experimental-font.patch b/patches/feat-experimental-font.patch index 0fabb71..f325149 100644 --- a/patches/feat-experimental-font.patch +++ b/patches/feat-experimental-font.patch @@ -1,12 +1,14 @@ diff --git a/src/vs/base/browser/ui/actionbar/actionbar.css b/src/vs/base/browser/ui/actionbar/actionbar.css -index 467b1ff..91fd5a0 100644 +index 467b1ff..16e6d69 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.css +++ b/src/vs/base/browser/ui/actionbar/actionbar.css -@@ -127 +127,33 @@ +@@ -127 +127,35 @@ } + + + ++/*** Generated for Custom Font Size ***/ ++ +.monaco-workbench .part.sidebar .monaco-action-bar .action-item .codicon, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .codicon { + width: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); + height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) @@ -16,14 +18,14 @@ index 467b1ff..91fd5a0 100644 + padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.230769) +} +.monaco-workbench .part.sidebar .monaco-action-bar.vertical .action-item .action-label.separator, .monaco-workbench .part.auxiliarybar .monaco-action-bar.vertical .action-item .action-label.separator { -+ padding-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ padding-top: 1px; + margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) .8em +} +.monaco-workbench .part.sidebar .monaco-action-bar .action-item .action-label.separator, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .action-label.separator { -+ width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923); ++ width: 1px; + height: calc(var(--vscode-workbench-sidebar-font-size) * 1.230769); + margin: calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) calc(var(--vscode-workbench-sidebar-font-size) * 0.307692); -+ min-width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++ min-width: 1px +} +.monaco-workbench .part.sidebar .secondary-actions .monaco-action-bar .action-label, .monaco-workbench .part.auxiliarybar .secondary-actions .monaco-action-bar .action-label { + margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) @@ -34,7 +36,7 @@ index 467b1ff..91fd5a0 100644 + margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) +} +.monaco-workbench .part.sidebar .monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator > div, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator > div { -+ width: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++ width: 1px +} \ No newline at end of file diff --git a/src/vs/base/browser/ui/button/button.css b/src/vs/base/browser/ui/button/button.css @@ -1486,7 +1488,7 @@ index a24f761..4f3bc89 100644 +} \ No newline at end of file diff --git a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css -index 924d9b3..9775338 100644 +index 924d9b3..07b29cc 100644 --- a/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css +++ b/src/vs/workbench/browser/parts/editor/media/multieditortabscontrol.css @@ -168,4 +168,4 @@ @@ -1501,7 +1503,7 @@ index 924d9b3..9775338 100644 - min-width: calc(var(--tab-sizing-current-width, var(--tab-sizing-fixed-min-width, 50px)) - 1px); + min-width: 50px - 1px; } -@@ -560 +560,109 @@ +@@ -560 +560,112 @@ } + + @@ -1511,6 +1513,9 @@ index 924d9b3..9775338 100644 +.monaco-workbench .part.editor > .content .editor-group-container > .title > .tabs-and-actions-container.tabs-border-bottom::after { + height: 1px +} ++.monaco-workbench .part.editor > .content .editor-group-container > .title > .tabs-and-actions-container.wrapping .tabs-container { ++ height: auto ++} +.monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab { + padding-left: calc(var(--vscode-workbench-tabs-font-size) * 0.769231); + outline-offset: calc(var(--vscode-workbench-tabs-font-size) * -0.153846) @@ -1956,7 +1961,7 @@ index 101b9c6..970cdaa 100644 + private registerActions(): void { diff --git a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css -index 7faaf9e..a29027c 100644 +index 7faaf9e..6cd8fbd 100644 --- a/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css +++ b/src/vs/workbench/browser/parts/statusbar/media/statusbarpart.css @@ -11,2 +11,3 @@ @@ -1983,7 +1988,7 @@ index 7faaf9e..a29027c 100644 + font-size: calc(var(--vscode-workbench-statusbar-font-size) * 1) +} +.monaco-workbench .part.statusbar:not(:focus).status-border-top::after { -+ height: calc(var(--vscode-workbench-statusbar-font-size) * 0.083333) ++ height: 1px +} +.monaco-workbench .part.statusbar > .items-container > .statusbar-item { + line-height: calc(var(--vscode-workbench-statusbar-font-size) * 1.833333) @@ -2021,11 +2026,11 @@ index 7faaf9e..a29027c 100644 + padding-right: calc(var(--vscode-workbench-statusbar-font-size) * 0.25) +} +.monaco-workbench .part.statusbar > .items-container > .statusbar-item a:active:not(.disabled) { -+ outline: calc(var(--vscode-workbench-statusbar-font-size) * 0.083333) solid var(--vscode-contrastActiveBorder); ++ outline: 1px solid var(--vscode-contrastActiveBorder); + outline-offset: calc(var(--vscode-workbench-statusbar-font-size) * -0.083333) +} +.monaco-workbench .part.statusbar > .items-container > .statusbar-item a:hover:not(.disabled) { -+ outline: calc(var(--vscode-workbench-statusbar-font-size) * 0.083333) dashed var(--vscode-contrastActiveBorder); ++ outline: 1px dashed var(--vscode-contrastActiveBorder); + outline-offset: calc(var(--vscode-workbench-statusbar-font-size) * -0.083333) +} \ No newline at end of file @@ -2880,14 +2885,16 @@ index 8bfac42..6430bf4 100644 + const headerHeight = this.header && !!this.notificationContainer?.childNodes.length ? this.notificationContainer.clientHeight + searchBoxHeight + FONT.sidebarSize10 /*margin*/ : searchBoxHeight; this.header!.style.height = `${headerHeight}px`; diff --git a/src/vs/workbench/contrib/extensions/browser/media/extension.css b/src/vs/workbench/contrib/extensions/browser/media/extension.css -index 8454447..bf4b116 100644 +index 8454447..733b9a6 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/extension.css +++ b/src/vs/workbench/contrib/extensions/browser/media/extension.css -@@ -302 +302,83 @@ +@@ -302 +302,91 @@ } + + + ++/*** Generated for Custom Font Size ***/ ++ +.monaco-workbench .part.sidebar .extension-list-item, .monaco-workbench .part.auxiliarybar .extension-list-item { + padding: 0 0 0 calc(var(--vscode-workbench-sidebar-font-size) * 1.230769) +} @@ -2905,13 +2912,19 @@ index 8454447..bf4b116 100644 + height: calc(var(--vscode-workbench-sidebar-font-size) * 1.461538); + padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) +} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .restart-required, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .restart-required { ++ margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.615385) ++} ++.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .restart-required > .extension-restart-required-label, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .restart-required > .extension-restart-required-label { ++ font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154) ++} +.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header .extension-kind-indicator, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header .extension-kind-indicator { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); + margin-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) +} +.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .install-count:not(:empty), .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .install-count:not(:empty) { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); -+ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) ++ margin: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.461538) 0 auto +} +.monaco-workbench .part.sidebar .extension-list-item > .details > .header-container > .header > .activation-status:not(:empty), .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .header-container > .header > .activation-status:not(:empty) { + font-size: calc(var(--vscode-workbench-sidebar-font-size) * 0.846154); @@ -2942,7 +2955,7 @@ index 8454447..bf4b116 100644 + line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.846154) +} +.monaco-workbench .part.sidebar .extension-list-item > .details > .footer .publisher > .publisher-name:not(:first-child), .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .footer .publisher > .publisher-name:not(:first-child) { -+ padding-left: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) ++ padding-left: 1px +} +.monaco-workbench .part.sidebar .extension-list-item > .details > .footer > .monaco-action-bar > .actions-container .extension-action.label, .monaco-workbench .part.auxiliarybar .extension-list-item > .details > .footer > .monaco-action-bar > .actions-container .extension-action.label { + max-width: calc(var(--vscode-workbench-sidebar-font-size) * 11.538462); @@ -2952,7 +2965,7 @@ index 8454447..bf4b116 100644 + margin-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) +} +.monaco-workbench .part.sidebar .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.auxiliarybar .extension-list-item .monaco-action-bar .action-label.icon { -+ padding: calc(var(--vscode-workbench-sidebar-font-size) * 0.076923) calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++ padding: 1px calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) +} +.monaco-workbench .part.sidebar .hc-black .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.sidebar .hc-light .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.auxiliarybar .hc-black .extension-list-item .monaco-action-bar .action-label.icon, .monaco-workbench .part.auxiliarybar .hc-light .extension-list-item .monaco-action-bar .action-label.icon { + padding: calc(var(--vscode-workbench-sidebar-font-size) * 0) calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) @@ -2968,6 +2981,35 @@ index 8454447..bf4b116 100644 + height: calc(var(--vscode-workbench-sidebar-font-size) * 0.769231) +} \ No newline at end of file +diff --git a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css +index 6326d45..8e9a0f1 100644 +--- a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css ++++ b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css +@@ -166 +166,23 @@ + } ++ ++ ++ ++/*** Generated for Custom Font Size ***/ ++ ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item > .action-label.extension-action.label, .monaco-workbench .part.sidebar .monaco-action-bar .action-dropdown-item > .action-label.extension-action.label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item > .action-label.extension-action.label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-dropdown-item > .action-label.extension-action.label { ++ padding: 0 calc(var(--vscode-workbench-sidebar-font-size) * 0.384615) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item .action-label.extension-action.label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .action-label.extension-action.label { ++ outline-offset: 1px ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item .action-label.extension-action.text, .monaco-workbench .part.sidebar .monaco-action-bar .action-item .action-label.extension-action.label, .monaco-workbench .part.sidebar .monaco-action-bar .action-dropdown-item .action-label.extension-action.label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .action-label.extension-action.text, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .action-label.extension-action.label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-dropdown-item .action-label.extension-action.label { ++ width: auto; ++ height: auto; ++ line-height: calc(var(--vscode-workbench-sidebar-font-size) * 1.076923) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item:not(.disabled) .action-label.extension-action.text, .monaco-workbench .part.sidebar .monaco-action-bar .action-item:not(.disabled) .action-label.extension-action.label, .monaco-workbench .part.sidebar .monaco-action-bar .action-item .action-label.extension-action.icon, .monaco-workbench .part.sidebar .monaco-action-bar .action-dropdown-item .action-label.extension-action.label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item:not(.disabled) .action-label.extension-action.text, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item:not(.disabled) .action-label.extension-action.label, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item .action-label.extension-action.icon, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-dropdown-item .action-label.extension-action.label { ++ margin-top: calc(var(--vscode-workbench-sidebar-font-size) * 0.153846) ++} ++.monaco-workbench .part.sidebar .monaco-action-bar .action-item.disabled .action-label.extension-status-label:before, .monaco-workbench .part.auxiliarybar .monaco-action-bar .action-item.disabled .action-label.extension-status-label:before { ++ padding-right: calc(var(--vscode-workbench-sidebar-font-size) * 0.307692) ++} +\ No newline at end of file diff --git a/src/vs/workbench/contrib/files/browser/media/explorerviewlet.css b/src/vs/workbench/contrib/files/browser/media/explorerviewlet.css index db5712f..0f75b63 100644 --- a/src/vs/workbench/contrib/files/browser/media/explorerviewlet.css From c95b880148e925b32aa4184f2ad70a3c7845b7d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:18:21 +0100 Subject: [PATCH 18/22] build(deps): bump crazy-max/ghaction-import-gpg from 6 to 7 (#2726) --- .github/workflows/insider-spearhead.yml | 2 +- .github/workflows/stable-spearhead.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/insider-spearhead.yml b/.github/workflows/insider-spearhead.yml index 7229826..ce92808 100644 --- a/.github/workflows/insider-spearhead.yml +++ b/.github/workflows/insider-spearhead.yml @@ -61,7 +61,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Import GPG key - uses: crazy-max/ghaction-import-gpg@v6 + uses: crazy-max/ghaction-import-gpg@v7 with: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/stable-spearhead.yml b/.github/workflows/stable-spearhead.yml index 1cbe66f..937fe5e 100644 --- a/.github/workflows/stable-spearhead.yml +++ b/.github/workflows/stable-spearhead.yml @@ -56,7 +56,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Import GPG key - uses: crazy-max/ghaction-import-gpg@v6 + uses: crazy-max/ghaction-import-gpg@v7 with: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} From 5b5008e570491016da5cab3ec541f8f074e88901 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:19:14 +0100 Subject: [PATCH 19/22] build(deps): bump actions/download-artifact from 7 to 8 (#2727) --- .github/workflows/insider-linux.yml | 6 +++--- .github/workflows/insider-windows.yml | 2 +- .github/workflows/stable-linux.yml | 6 +++--- .github/workflows/stable-windows.yml | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/insider-linux.yml b/.github/workflows/insider-linux.yml index ed5cd0b..9c08f4f 100644 --- a/.github/workflows/insider-linux.yml +++ b/.github/workflows/insider-linux.yml @@ -225,7 +225,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_BUILD == 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.DISABLED != 'yes' && env.SHOULD_BUILD == 'yes' @@ -355,7 +355,7 @@ jobs: if: env.DISABLED != 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.DISABLED != 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no' || github.event.inputs.generate_assets == 'true') @@ -445,7 +445,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.DISABLED != 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no' || github.event.inputs.generate_assets == 'true') diff --git a/.github/workflows/insider-windows.yml b/.github/workflows/insider-windows.yml index cc76fda..22266cc 100644 --- a/.github/workflows/insider-windows.yml +++ b/.github/workflows/insider-windows.yml @@ -203,7 +203,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.SHOULD_BUILD == 'yes' diff --git a/.github/workflows/stable-linux.yml b/.github/workflows/stable-linux.yml index 7daa3b5..3270613 100644 --- a/.github/workflows/stable-linux.yml +++ b/.github/workflows/stable-linux.yml @@ -226,7 +226,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_BUILD == 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.DISABLED != 'yes' && env.SHOULD_BUILD == 'yes' @@ -356,7 +356,7 @@ jobs: if: env.DISABLED != 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.DISABLED != 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no' || github.event.inputs.generate_assets == 'true') @@ -446,7 +446,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.DISABLED != 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no' || github.event.inputs.generate_assets == 'true') diff --git a/.github/workflows/stable-windows.yml b/.github/workflows/stable-windows.yml index 87b742f..e3b319a 100644 --- a/.github/workflows/stable-windows.yml +++ b/.github/workflows/stable-windows.yml @@ -202,7 +202,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Download vscode artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: vscode if: env.SHOULD_BUILD == 'yes' From 0ff547319462af69bf1a835815075cf5be4231db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:19:33 +0100 Subject: [PATCH 20/22] build(deps): bump actions/upload-artifact from 6 to 7 (#2728) --- .github/workflows/insider-linux.yml | 8 ++++---- .github/workflows/insider-macos.yml | 2 +- .github/workflows/insider-windows.yml | 6 +++--- .github/workflows/stable-linux.yml | 8 ++++---- .github/workflows/stable-macos.yml | 2 +- .github/workflows/stable-windows.yml | 6 +++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/insider-linux.yml b/.github/workflows/insider-linux.yml index 9c08f4f..683e08f 100644 --- a/.github/workflows/insider-linux.yml +++ b/.github/workflows/insider-linux.yml @@ -137,7 +137,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Upload vscode artifact - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: vscode path: ./vscode.tar.gz @@ -260,7 +260,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: bin-${{ matrix.vscode_arch }} path: assets/ @@ -375,7 +375,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_DEPLOY == 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no') - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: reh-linux-${{ matrix.vscode_arch }} path: assets/ @@ -465,7 +465,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_DEPLOY == 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no') - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: reh-alpine-${{ matrix.vscode_arch }} path: assets/ diff --git a/.github/workflows/insider-macos.yml b/.github/workflows/insider-macos.yml index bc50147..79828c1 100644 --- a/.github/workflows/insider-macos.yml +++ b/.github/workflows/insider-macos.yml @@ -116,7 +116,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: bin-${{ matrix.vscode_arch }} path: assets/ diff --git a/.github/workflows/insider-windows.yml b/.github/workflows/insider-windows.yml index 22266cc..367f7f1 100644 --- a/.github/workflows/insider-windows.yml +++ b/.github/workflows/insider-windows.yml @@ -138,7 +138,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Upload vscode artifact - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: vscode path: ./vscode.tar.gz @@ -222,7 +222,7 @@ jobs: - name: Upload unsigned artifacts id: upload-unsigned-artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: unsigned-${{ matrix.vscode_arch }} path: | @@ -266,7 +266,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: bin-${{ matrix.vscode_arch }} path: assets/ diff --git a/.github/workflows/stable-linux.yml b/.github/workflows/stable-linux.yml index 3270613..914ab16 100644 --- a/.github/workflows/stable-linux.yml +++ b/.github/workflows/stable-linux.yml @@ -138,7 +138,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Upload vscode artifact - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: vscode path: ./vscode.tar.gz @@ -261,7 +261,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: bin-${{ matrix.vscode_arch }} path: assets/ @@ -376,7 +376,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_DEPLOY == 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no') - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: reh-linux-${{ matrix.vscode_arch }} path: assets/ @@ -466,7 +466,7 @@ jobs: if: env.DISABLED != 'yes' && env.SHOULD_DEPLOY == 'yes' && (env.SHOULD_BUILD_REH != 'no' || env.SHOULD_BUILD_REH_WEB != 'no') - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: reh-alpine-${{ matrix.vscode_arch }} path: assets/ diff --git a/.github/workflows/stable-macos.yml b/.github/workflows/stable-macos.yml index d2d17c7..1c370d9 100644 --- a/.github/workflows/stable-macos.yml +++ b/.github/workflows/stable-macos.yml @@ -114,7 +114,7 @@ jobs: if: env.SHOULD_DEPLOY == 'yes' - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: bin-${{ matrix.vscode_arch }} path: assets/ diff --git a/.github/workflows/stable-windows.yml b/.github/workflows/stable-windows.yml index e3b319a..8bea37f 100644 --- a/.github/workflows/stable-windows.yml +++ b/.github/workflows/stable-windows.yml @@ -137,7 +137,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Upload vscode artifact - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: vscode path: ./vscode.tar.gz @@ -221,7 +221,7 @@ jobs: - name: Upload unsigned artifacts id: upload-unsigned-artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: unsigned-${{ matrix.vscode_arch }} path: | @@ -264,7 +264,7 @@ jobs: if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Upload assets - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: bin-${{ matrix.vscode_arch }} path: assets/ From 3d7e85c307eeb1b5167784820e68db890f8d9b15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:19:58 +0100 Subject: [PATCH 21/22] build(deps): bump docker/setup-qemu-action from 3 to 4 (#2729) --- .github/workflows/insider-linux.yml | 2 +- .github/workflows/stable-linux.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/insider-linux.yml b/.github/workflows/insider-linux.yml index 683e08f..b1b17a8 100644 --- a/.github/workflows/insider-linux.yml +++ b/.github/workflows/insider-linux.yml @@ -526,7 +526,7 @@ jobs: PULL_REQUEST_ID: ${{ github.event.inputs.checkout_pr }} run: ./get_pr.sh - - uses: docker/setup-qemu-action@v3 + - uses: docker/setup-qemu-action@v4 - uses: diddlesnaps/snapcraft-multiarch-action@v1 with: diff --git a/.github/workflows/stable-linux.yml b/.github/workflows/stable-linux.yml index 914ab16..6ef268d 100644 --- a/.github/workflows/stable-linux.yml +++ b/.github/workflows/stable-linux.yml @@ -532,7 +532,7 @@ jobs: SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAP_STORE_LOGIN }} run: ./stores/snapcraft/check_version.sh - - uses: docker/setup-qemu-action@v3 + - uses: docker/setup-qemu-action@v4 if: env.SHOULD_BUILD == 'yes' - uses: diddlesnaps/snapcraft-multiarch-action@v1 From 44cb5e2073aa2d1ea04621f45794334f41815921 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Thu, 5 Mar 2026 02:46:31 +0100 Subject: [PATCH 22/22] feat: update patch (#2731) --- patches/brand.patch | 6 +++--- upstream/insider.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/patches/brand.patch b/patches/brand.patch index 3e1d709..feda6cd 100644 --- a/patches/brand.patch +++ b/patches/brand.patch @@ -359,7 +359,7 @@ index a8bbe5d..00694dc 100644 + "comment": "The simpler (?<=\\bProcess\\.|\\bCommandLine\\.) breaks !!APP_NAME!! / Atom, see https://github.com/textmate/swift.tmbundle/issues/29", "name": "support.variable.swift", diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json -index 97b1c12..4047cac 100644 +index 8c28dd8..bf50baf 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json @@ -130,5 +130,5 @@ @@ -376,7 +376,7 @@ index 97b1c12..4047cac 100644 + "typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in !!APP_NAME!!.", "typescript.updateImportsOnFileMove.enabled.prompt": "Prompt on each rename.", @@ -252,5 +252,5 @@ - "configuration.suggest.completeJSDocs.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.suggest.completeJSDocs#` instead.", + "configuration.suggest.completeJSDocs.unifiedDeprecationMessage": "This setting is deprecated. Use `#js/ts.suggest.jsdoc.enabled#` instead.", - "configuration.tsserver.useVsCodeWatcher": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", + "configuration.tsserver.useVsCodeWatcher": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", "configuration.tsserver.watchOptions": "Configure which watching strategies should be used to keep track of files and directories.", @@ -452,7 +452,7 @@ index 507f9e6..067fb79 100644 + vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json -index 58ec85b..56e455a 100644 +index b320fa7..9bf9f1c 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -2,3 +2,3 @@ diff --git a/upstream/insider.json b/upstream/insider.json index 5f0c1e3..8a0e4fc 100644 --- a/upstream/insider.json +++ b/upstream/insider.json @@ -1,4 +1,4 @@ { "tag": "1.110.0", - "commit": "f5927e727c69039d3037f018f1790ebbbee596bc" + "commit": "0870c2a0c7c0564e7631bfed2675573a94ba4455" }