├── .eslintrc.json
├── .gitignore
├── .vscode
├── extensions.json
└── launch.json
├── .vscodeignore
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── extension.js
├── images
├── demo.gif
├── icon.png
└── logo.png
├── jsconfig.json
└── package.json
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": false,
4 | "commonjs": true,
5 | "es6": true,
6 | "node": true,
7 | "mocha": true
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 2018,
11 | "ecmaFeatures": {
12 | "jsx": true
13 | },
14 | "sourceType": "module"
15 | },
16 | "rules": {
17 | "no-const-assign": "warn",
18 | "no-this-before-super": "warn",
19 | "no-undef": "warn",
20 | "no-unreachable": "warn",
21 | "no-unused-vars": "warn",
22 | "constructor-super": "warn",
23 | "valid-typeof": "warn"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // See https://go.microsoft.com/fwlink/?LinkId=733558
3 | // for the documentation about the extensions.json format
4 | "recommendations": [
5 | "dbaeumer.vscode-eslint",
6 | "ms-vscode.extension-test-runner"
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // A launch configuration that launches the extension inside a new window
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | {
6 | "version": "0.2.0",
7 | "configurations": [
8 | {
9 | "name": "Run Extension",
10 | "type": "extensionHost",
11 | "request": "launch",
12 | "args": [
13 | "--extensionDevelopmentPath=${workspaceFolder}"
14 | ]
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | .vscode/**
2 | .vscode-test/**
3 | test/**
4 | .gitignore
5 | .yarnrc
6 | vsc-extension-quickstart.md
7 | **/jsconfig.json
8 | **/*.map
9 | **/.eslintrc.json
10 | **/.vscode-test.*
11 | images/demo.gif
12 | node_modules/**
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | ## 0.1.2
4 | - Compatibility with VSCode 1.94
5 |
6 | ## 0.1.1
7 | - Added options for blur.
8 |
9 | ## 0.1.0
10 | - Added options to disable default extension style. `"spacebox-ui.defaultStyle": true|false`
11 | - Added options for custom css import. You can now import local css file. `"spacebox-ui.importCss": "c:\\Users\\xxx\\editor.css",`
12 |
13 | ## 0.0.6
14 | - "Some features are disabled because of VS Code bugs. Blur does not work for now. This extension uses backdrop-filter for blurring menus, while VSCode has some strange bugs and incompatibility with backdrop filter, I decided to disable this function for now. Here is what happened when backdrop filter is inside VSCode: https://i.imgur.com/v6Uvqf3.gif."
15 |
16 | ## 0.0.5
17 | - **New Feature**: You can define now colors for UI.
18 | - Other bug fixes.
19 |
20 | ## 0.0.5
21 | - **New Feature**: You can define now colors for UI.
22 | - Other bug fixes.
23 |
24 | ## 0.0.4 - Ready for VSCode v1.86+
25 | - **New Feature**: Ready for VSCode version 1.86+.
26 | - **New Feature**: Added new animations.
27 | - Other bug fixes.
28 |
29 | ## 0.0.3
30 | - **New Feature**: Added new animations.
31 | - Other bug fixes.
32 |
33 | ## 0.0.2 - Bug Fix in style
34 | - **Bug Fix**: Bug Fix in style.
35 |
36 | ## 0.0.1 - Initial release
37 | - Initial release.
38 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 amnweb (https://github.com/amnweb)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # SpaceBox-UI-Enhancer
4 |
5 | A simple and lightweight UI enhancer for VSCode, providing enhanced customization of the VSCode UI. Features animations, blur effects, and more. Works best with the [SpaceBox Theme](https://marketplace.visualstudio.com/items?itemName=SpaceBox.spacebox-theme).
6 |
7 | ## Features
8 |
9 | - Better activity bar
10 | - Acrylic menu
11 | - Animation
12 | - More features coming soon
13 |
14 |
15 | ## Installation
16 |
17 | 1. Open Visual Studio Code
18 | 2. Go to the Extensions view (`Ctrl+Shift+X`)
19 | 3. Search for "SpaceBox UI Enhancer"
20 | 4. Click on the Install button
21 |
22 |
23 | ## Activation
24 |
25 | 1. Open Visual Studio Code
26 | 2. Go to the Command Palette (`Ctrl+Shift+P`)
27 | 3. Type "SpaceBox Enable UI Enhancer"
28 | 4. Restart
29 |
30 | ## Blur Effect
31 |
32 | 1. Open `settings.json` or go to extension settings.
33 | 2. For menu and popups set `"spacebox-ui.blurEffect": true`
34 | 3. For command center `"spacebox-ui.commandCenterBlur": true`
35 | 4. Type "SpaceBox Enable UI Enhancer"
36 | 5. Restart
37 |
38 | ## Import custom style
39 |
40 | 1. Open extension settings page.
41 | 2. In the Import CSS filed type path for your css, example `C:\Users\xxx\.vscode\style.css`
42 | 3. Type "SpaceBox Enable UI Enhancer"
43 | 4. Restart
44 |
45 | ## Deactivation
46 |
47 | 1. Open Visual Studio Code
48 | 2. Go to the Command Palette (`Ctrl+Shift+P`)
49 | 3. Type "SpaceBox Disable UI Enhancer"
50 | 4. Restart
51 |
52 | ## Update
53 |
54 | 1. Update
55 | 2. Deactivate and Activate from Command Palette
56 |
57 | Note: In the future, I will make this automatic.
58 |
59 | ## How to change color
60 |
61 | If you want to have a blur effect, you need to change the color go to vscode `settings.json` and define the color you like, example.
62 |
63 | ```
64 | "workbench.colorCustomizations": {
65 | "menu.background": "#262c3670", //menu background
66 | "menu.selectionBackground": "#3e465377", //menu hover background
67 | "menu.separatorBackground": "#3e434d9f", //menu separator line color
68 | "quickInput.background": "#10151d10", //command center
69 | "editorHoverWidget.background": "#10151d10" //background color of the editor hover widget
70 | }
71 | ```
72 |
73 | ## Demo
74 |
75 |
76 |
77 |
78 |
79 |
80 | ## Marketplace
81 | You can download the extension from the Visual Studio Code marketplace: [SpaceBox UI Enhancer](https://marketplace.visualstudio.com/items?itemName=SpaceBox.spacebox-ui)
--------------------------------------------------------------------------------
/extension.js:
--------------------------------------------------------------------------------
1 | const vscode = require("vscode");
2 | const fs = require("fs");
3 | const path = require("path");
4 | const crypto = require("crypto");
5 |
6 | const appDir = require.main ? path.dirname(require.main.filename) : path.dirname(process.argv[1]);
7 | const appRoot = vscode.env.appRoot;
8 | const productFile = path.join(appRoot, "product.json");
9 | const origFile = `${productFile}.orig.${vscode.version}`;
10 | const workbenchCssPath = path.join(
11 | appRoot,
12 | "out",
13 | "vs",
14 | "workbench",
15 | "workbench.desktop.main.css"
16 | );
17 | const workbenchJsPath = path.join(
18 | appRoot,
19 | "out",
20 | "vs",
21 | "workbench",
22 | "workbench.desktop.main.js"
23 | );
24 |
25 | async function promptRestart() {
26 | const config = vscode.workspace.getConfiguration();
27 | const configKey = "update.mode";
28 | const value = config.inspect(configKey);
29 |
30 | await config.update(
31 | configKey,
32 | config.get(configKey) === "default" ? "manual" : "default",
33 | vscode.ConfigurationTarget.Global
34 | );
35 | config.update(
36 | configKey,
37 | value && value.globalValue,
38 | vscode.ConfigurationTarget.Global
39 | );
40 | }
41 |
42 | function applyChecksum() {
43 | const product = require(productFile);
44 | let changed = false;
45 | for (const [filePath, curChecksum] of Object.entries(product.checksums)) {
46 | const checksum = computeChecksum(
47 | path.join(appDir, ...filePath.split("/"))
48 | );
49 | if (checksum !== curChecksum) {
50 | product.checksums[filePath] = checksum;
51 | changed = true;
52 | }
53 | }
54 | if (changed) {
55 | const json = JSON.stringify(product, null, "\t");
56 | try {
57 | if (!fs.existsSync(origFile)) {
58 | fs.renameSync(productFile, origFile);
59 | }
60 | fs.writeFileSync(productFile, json, { encoding: "utf8" });
61 | } catch (err) {
62 | console.error(err);
63 | }
64 | }
65 | }
66 |
67 | function restoreChecksum() {
68 | try {
69 | if (fs.existsSync(origFile)) {
70 | fs.unlinkSync(productFile);
71 | fs.renameSync(origFile, productFile);
72 | }
73 | } catch (err) {
74 | console.error(err);
75 | }
76 | }
77 |
78 | function computeChecksum(file) {
79 | var contents = fs.readFileSync(file);
80 | return crypto
81 | .createHash("sha256")
82 | .update(contents)
83 | .digest("base64")
84 | .replace(/=+$/, "");
85 | }
86 |
87 | function cleanupOrigFiles() {
88 | // Remove all old backup files
89 | const oldOrigFiles = fs
90 | .readdirSync(appRoot)
91 | .filter((file) => /\.orig\./.test(file))
92 | .filter((file) => !file.endsWith(vscode.version));
93 | for (const file of oldOrigFiles) {
94 | fs.unlinkSync(path.join(appRoot, file));
95 | }
96 | }
97 |
98 | function createBackup(filePath) {
99 | const backupPath = `${filePath}.backup`;
100 | if (!fs.existsSync(backupPath)) {
101 | fs.copyFileSync(filePath, backupPath);
102 | }
103 | }
104 |
105 | function restoreFromBackup(filePath, msgShow = true) {
106 | const backupPath = `${filePath}.backup`;
107 | if (fs.existsSync(backupPath)) {
108 | fs.copyFileSync(backupPath, filePath);
109 | if (msgShow) {
110 | promptRestart("Settings restored. Restart VS Code to see changes.");
111 | }
112 | } else {
113 | if (msgShow) {
114 | vscode.window.showInformationMessage(`Backup files not found`);
115 | }
116 | }
117 | }
118 |
119 | function activate(context) {
120 | const changeSystem = "spacebox-ui.modifyFiles";
121 | const restoreSystem = "spacebox-ui.restoreSettings";
122 | let newCss = "";
123 | const modifyDisposable = vscode.commands.registerCommand(
124 | changeSystem,
125 | async () => {
126 | const config = vscode.workspace.getConfiguration('spacebox-ui');
127 | const defaultUiStyle = config.get('defaultStyle', true);
128 | const blurEffect = config.get('blurEffect', false);
129 | const commandCenterBlur = config.get('commandCenterBlur', false);
130 | const importCss = config.get('importCss');
131 | if (importCss && fs.existsSync(importCss)) {
132 | const importCssContent = fs.readFileSync(importCss, 'utf-8');
133 | newCss += importCssContent;
134 | }
135 | if (defaultUiStyle) {
136 | newCss += `:root {
137 | --activity-bar-action-item-size: 38px !important;
138 | --activity-bar-action-item-margin: 6px !important
139 | }
140 | .quick-input-widget {
141 | transform-origin: top;
142 | animation: openPopup01 .4s
143 | }
144 | .monaco-workbench .activitybar>.content :not(.monaco-menu)>.monaco-action-bar .badge .badge-content {
145 | top: 20px !important
146 | }
147 | div.monaco-workbench div.activitybar>div.content div.monaco-action-bar ul.actions-container li.action-item {
148 | padding-left: 4px
149 | }
150 | div.monaco-workbench div.activitybar>div.content div.monaco-action-bar ul.actions-container {
151 | margin-top: var(--activity-bar-action-item-margin) !important
152 | }
153 | div.monaco-workbench div.activitybar>div.content div.monaco-action-bar ul.actions-container li.action-item a.action-label {
154 | height: calc(var(--activity-bar-action-item-size)*1.2);
155 | width: var(--activity-bar-action-item-size);
156 | font-size: calc(var(--activity-bar-action-item-size)*0.5);
157 | -webkit-mask-size: 1em;
158 | mask-size: 1em;
159 | padding: 0
160 | }
161 | .monaco-workbench .activitybar>.content :not(.monaco-menu)>.monaco-action-bar .active-item-indicator {
162 | z-index: 0 !important
163 | }
164 | div.monaco-workbench.enable-motion .activitybar.part .monaco-action-bar .action-item.checked .active-item-indicator:before {
165 | height: 40% !important;
166 | top: 30% !important;
167 | left: 2px !important;
168 | border-left-width: 0 !important;
169 | width: 4px;
170 | background-color: var(--vscode-activityBar-activeBorder);
171 | border-radius: 8px !important;
172 | animation: activityBorder01 .4s forwards
173 | }
174 | div.monaco-workbench.enable-motion .activitybar.part .monaco-action-bar .action-item.checked .active-item-indicator:after {
175 | background-image: linear-gradient(var(--vscode-activityBar-activeBorder), var(--vscode-activityBar-activeBorder));
176 | content: "";
177 | position: absolute;
178 | left: 4px;
179 | right: 6px;
180 | top: 0;
181 | bottom: 0;
182 | border-radius: 4px;
183 | z-index: -1;
184 | opacity: .2
185 | }
186 | @keyframes activityBorder01 {
187 | 0% {
188 | transform: scale(0)
189 | }
190 | to {
191 | transform: scale(1)
192 | }
193 | }
194 | div.monaco-workbench.enable-motion .activitybar.part .monaco-action-bar .action-item.clicked:not(.checked):not(.active) a {
195 | animation: activityBarIconAnimation2 .3s
196 | }
197 | div.monaco-workbench.enable-motion .activitybar.part .monaco-action-bar .action-item.checked a {
198 | animation: activityBarIconAnimation .3s
199 | }
200 | @keyframes activityBarIconAnimation {
201 | 0% {
202 | transform: scale(1)
203 | }
204 | 50% {
205 | transform: scale(.86)
206 | }
207 | to {
208 | transform: scale(1)
209 | }
210 | }
211 | @keyframes activityBarIconAnimation2 {
212 | 0% {
213 | transform: scale(1)
214 | }
215 | 50% {
216 | transform: scale(.86)
217 | }
218 | to {
219 | transform: scale(1)
220 | }
221 | }
222 | .window-appicon {
223 | display: none
224 | }
225 | .lightBulbWidget {
226 | transition: top .2s
227 | }
228 | .monaco-hover:not(.hidden) {
229 | animation: hoverFadeIn001 .2s
230 | }
231 | @keyframes hoverFadeIn001 {
232 | 0% {
233 | opacity: 0
234 | }
235 | to {
236 | opacity: 1
237 | }
238 | }
239 | .action-label {
240 | transition: color .2s
241 | }
242 | .quick-input-widget[style*="display: none;"] {
243 | display: block !important;
244 | transform-origin: top;
245 | animation: closePopup01 .4s;
246 | opacity: 0;
247 | transform: scaleY(0);
248 | pointer-events: none
249 | }
250 | @keyframes openPopup01 {
251 | 0% {
252 | opacity: 0;
253 | transform: scaleY(0)
254 | }
255 | to {
256 | opacity: 1;
257 | transform: scaleY(1)
258 | }
259 | }
260 | @keyframes closePopup01 {
261 | 0% {
262 | opacity: 1;
263 | transform: scaleY(1)
264 | }
265 | to {
266 | opacity: 0;
267 | transform: scaleY(0)
268 | }
269 | }
270 | .extensions-list .monaco-list-row:not(.explorer-folders-view .monaco-list-row) {
271 | animation: scrollingAnimation001 .4s
272 | }
273 | @keyframes scrollingAnimation001 {
274 | 0% {
275 | opacity: 0;
276 | transform: scale(0)
277 | }
278 | to {
279 | opacity: 1;
280 | transform: scale(1)
281 | }
282 | }
283 | .menubar-menu-button.open .menubar-menu-items-holder {
284 | animation: menu-slide .3s !important;
285 | transform-origin: top
286 | }
287 | @keyframes menu-slide {
288 | 0% {
289 | transform: scaleY(0)
290 | }
291 | to {
292 | transform: scaleY(1)
293 | }
294 | }
295 | .suggest-input-container {
296 | border-radius: 4px
297 | }
298 | .extensions-list .monaco-list-row:not(.explorer-folders-view .monaco-list-row) {
299 | margin: 0 12px !important;
300 | max-width: calc(100% - 24px) !important;
301 | border-radius: 8px !important
302 | }
303 | .extension-list-item>.icon-container>.icon {
304 | margin-right: 14px;
305 | padding-right: 0 !important;
306 | object-fit: contain !important
307 | }
308 | .extension-list-item>.details>.header-container>.header>.name {
309 | font-size: 14px !important
310 | }
311 | .monaco-workbench .part.titlebar>.titlebar-container>.titlebar-left {
312 | padding-left: 4px
313 | }
314 | .monaco-workbench .pane-composite-part>.title>.composite-bar-container>.composite-bar>.monaco-action-bar .action-item.checked:not(:focus) .active-item-indicator:before {
315 | width: 100% !important;
316 | bottom: 2px !important;
317 | left: 0 !important;
318 | height: 2px;
319 | border: none !important;
320 | background-color: var(--vscode-activityBar-activeBorder);
321 | border-radius: 8px !important;
322 | animation: activityBorder01 .4s forwards
323 | }`;
324 | }
325 | if (blurEffect) {
326 | newCss += `
327 | .action-widget:after,
328 | .suggest-details-container:after,
329 | .context-view.top.left:after,
330 | .overflowingContentWidgets>div:after,
331 | .workbench-hover-container:after,
332 | .find-widget:after,
333 | .monaco-menu:after,
334 | .shadow-root-host::part(menu)::after {
335 | z-index: -1;
336 | content: '';
337 | position: absolute;
338 | left: 0;
339 | top: 0;
340 | bottom: 0;
341 | right: 0;
342 | backdrop-filter: blur(12px)
343 | }`;
344 | }
345 | if(commandCenterBlur){
346 | newCss += `
347 | .quick-input-widget {backdrop-filter: blur(12px)}`;
348 | }
349 | restoreFromBackup(workbenchCssPath, false);
350 | createBackup(workbenchCssPath);
351 | createBackup(workbenchJsPath);
352 |
353 | // Update workbench.desktop.main.css file
354 | const cssFileContent = fs.readFileSync(workbenchCssPath, "utf-8");
355 | const modifiedCssContent = cssFileContent + newCss;
356 | fs.writeFileSync(workbenchCssPath, modifiedCssContent, "utf-8");
357 |
358 | // Update workbench.desktop.main.js file
359 | const jsFileContent = fs.readFileSync(workbenchJsPath, "utf-8");
360 | const regexToCheck =
361 | /([A-Z])\.classList\.add\("monaco-menu"\),\1\.setAttribute\("role","presentation"\)/;
362 | // Test the file content against the regex
363 | if (regexToCheck.test(jsFileContent)) {
364 | // Replace the matched pattern with the new string
365 | const modifiedJsContent = jsFileContent.replace(
366 | regexToCheck,
367 | '$1.classList.add("monaco-menu"),$1.setAttribute("role","presentation"),$1.setAttribute("part","menu")'
368 | );
369 | // Write the modified content back to the original file
370 | fs.writeFileSync(workbenchJsPath, modifiedJsContent, "utf-8");
371 | }
372 | cleanupOrigFiles();
373 | applyChecksum();
374 | promptRestart("You must restart VS Code to see changes");
375 | }
376 | );
377 | const restoreDisposable = vscode.commands.registerCommand(
378 | restoreSystem,
379 | () => {
380 | // Restore files from backups
381 | restoreFromBackup(workbenchCssPath);
382 | restoreFromBackup(workbenchJsPath);
383 | restoreChecksum();
384 | }
385 | );
386 | context.subscriptions.push(modifyDisposable, restoreDisposable);
387 | }
388 | exports.activate = activate;
--------------------------------------------------------------------------------
/images/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amnweb/SpaceBox-UI-Enhancer/eb8164aafa1c1ca8ffb7a39478fc88a44b41d43b/images/demo.gif
--------------------------------------------------------------------------------
/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amnweb/SpaceBox-UI-Enhancer/eb8164aafa1c1ca8ffb7a39478fc88a44b41d43b/images/icon.png
--------------------------------------------------------------------------------
/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amnweb/SpaceBox-UI-Enhancer/eb8164aafa1c1ca8ffb7a39478fc88a44b41d43b/images/logo.png
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "Node16",
4 | "target": "ES2022",
5 | "checkJs": false, /* Typecheck .js files. */
6 | "lib": [
7 | "ES2022"
8 | ]
9 | },
10 | "exclude": [
11 | "node_modules"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "spacebox-ui",
3 | "displayName": "SpaceBox UI Enhancer",
4 | "description": "Experience enhanced customization of VSCode UI, featuring animations, blur effects, and more.",
5 | "icon": "images/icon.png",
6 | "publisher": "SpaceBox",
7 | "repository": "https://github.com/amnweb/SpaceBox-UI-Enhancer",
8 | "version": "0.1.2",
9 | "engines": {
10 | "vscode": "^1.86.0"
11 | },
12 | "categories": [
13 | "Other"
14 | ],
15 | "galleryBanner": {
16 | "color": "#0d1116",
17 | "theme": "dark"
18 | },
19 | "activationEvents": [],
20 | "main": "./extension.js",
21 | "contributes": {
22 | "configuration": {
23 | "title": "SpaceBox UI Enhancer Configuration",
24 | "properties": {
25 | "spacebox-ui.defaultStyle": {
26 | "type": "boolean",
27 | "default": true,
28 | "description": "Enable the default SpaceBoxUI style style.",
29 | "markdownDescription": "This will enable the default SpaceBoxUI style",
30 | "order": 1
31 | },
32 | "spacebox-ui.blurEffect": {
33 | "type": "boolean",
34 | "default": false,
35 | "description": "Enable the blur effect. This includes the right-click context menu, menu bar, widgets, popups.",
36 | "order": 2
37 | },
38 | "spacebox-ui.commandCenterBlur": {
39 | "type": "boolean",
40 | "default": false,
41 | "description": "Enable the command center menu blur.",
42 | "order": 3
43 | },
44 | "spacebox-ui.importCss": {
45 | "type": "string",
46 | "default": "",
47 | "description": "Path to the custom CSS file. This file will be imported directly in VSCode style.",
48 | "order": 4
49 | }
50 | }
51 | },
52 | "commands": [
53 | {
54 | "command": "spacebox-ui.modifyFiles",
55 | "title": "SpaceBox Enable UI Enhancer"
56 | },
57 | {
58 | "command": "spacebox-ui.restoreSettings",
59 | "title": "SpaceBox Disable UI Enhancer"
60 | }
61 | ]
62 | },
63 | "scripts": {
64 | "lint": "eslint .",
65 | "pretest": "npm run lint"
66 | },
67 | "devDependencies": {
68 | "@types/mocha": "^10.0.6",
69 | "@types/node": "^18.0.0",
70 | "@types/vscode": "^1.80.0",
71 | "@vscode/test-cli": "^0.0.4",
72 | "@vscode/test-electron": "^2.3.8",
73 | "eslint": "^8.56.0",
74 | "typescript": "^5.3.3"
75 | }
76 | }
--------------------------------------------------------------------------------