diff --git a/src/gui/src/UI/Settings/UITabAbout.js b/src/gui/src/UI/Settings/UITabAbout.js
deleted file mode 100644
index 2b0682dcd..000000000
--- a/src/gui/src/UI/Settings/UITabAbout.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-// About
-export default {
- id: 'about',
- title_i18n_key: 'about',
- icon: 'logo-outline.svg',
- html: () => {
- return `
-
`;
- },
- init: ($el_window) => {
- // server and version infomration
- puter.os.version()
- .then(res => {
- const deployed_date = new Date(res.deploy_timestamp).toLocaleString();
- $el_window.find('.version').html(`Version: ${html_encode(res.version)} • Server: ${html_encode(res.location)} • Deployed: ${html_encode(deployed_date)}`);
- })
- .catch(error => {
- console.error('Failed to fetch server info:', error);
- $el_window.find('.version').html('Failed to load version information.');
- });
-
- $el_window.find('.credits').on('click', function (e) {
- if ( $(e.target).hasClass('credits') ) {
- $('.credits').get(0).close();
- }
- });
-
- $el_window.find('.show-credits').on('click', function (e) {
- $('.credits').get(0).showModal();
- });
-
- },
-};
diff --git a/src/gui/src/UI/Settings/UITabAccount.js b/src/gui/src/UI/Settings/UITabAccount.js
deleted file mode 100644
index 5fad518f5..000000000
--- a/src/gui/src/UI/Settings/UITabAccount.js
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import UIWindowChangePassword from '../UIWindowChangePassword.js';
-import UIWindowChangeEmail from './UIWindowChangeEmail.js';
-import UIWindowChangeUsername from '../UIWindowChangeUsername.js';
-import UIWindowConfirmUserDeletion from './UIWindowConfirmUserDeletion.js';
-import UIWindowManageSessions from '../UIWindowManageSessions.js';
-import UIWindow from '../UIWindow.js';
-
-// About
-export default {
- id: 'account',
- title_i18n_key: 'account',
- icon: 'user.svg',
- html: () => {
- let h = '';
- // profile picture
- h += '
';
- h += `
`;
- h += '
';
- h += '
';
-
- // change password button
- if ( ! window.user.is_temp ) {
- h += '
';
- h += `${i18n('password')}`;
- h += '
';
- h += ``;
- h += '
';
- h += '
';
- }
-
- // change username button
- h += '
';
- h += '
';
- h += `${i18n('username')}`;
- h += `${html_encode(window.user.username)}`;
- h += '
';
- h += '
';
- h += ``;
- h += '
';
- h += '
';
- // change email button
- if ( window.user.email ) {
- h += '
';
- h += '
';
- h += `${i18n('email')}`;
- h += `${html_encode(window.user.email)}`;
- h += '
';
- h += '
';
- h += ``;
- h += '
';
- h += '
';
- }
- // 'Delete Account' button
- h += '
';
- h += `${i18n('delete_account')}`;
- h += '
';
- h += ``;
- h += '
';
- h += '
';
- return h;
- },
- init: ($el_window) => {
- $el_window.find('.change-password').on('click', function (e) {
- UIWindowChangePassword({
- window_options: {
- parent_uuid: $el_window.attr('data-element_uuid'),
- disable_parent_window: true,
- parent_center: true,
- },
- });
- });
- $el_window.find('.change-username').on('click', function (e) {
- UIWindowChangeUsername({
- window_options: {
- parent_uuid: $el_window.attr('data-element_uuid'),
- disable_parent_window: true,
- parent_center: true,
- },
- });
- });
- $el_window.find('.change-email').on('click', function (e) {
- UIWindowChangeEmail({
- window_options: {
- parent_uuid: $el_window.attr('data-element_uuid'),
- disable_parent_window: true,
- parent_center: true,
- },
- });
- });
- $el_window.find('.manage-sessions').on('click', function (e) {
- UIWindowManageSessions({
- window_options: {
- parent_uuid: $el_window.attr('data-element_uuid'),
- disable_parent_window: true,
- parent_center: true,
- },
- });
- });
- $el_window.find('.delete-account').on('click', function (e) {
- UIWindowConfirmUserDeletion({
- window_options: {
- parent_uuid: $el_window.attr('data-element_uuid'),
- disable_parent_window: true,
- parent_center: true,
- },
- });
- });
- $el_window.find('.change-profile-picture').on('click', async function (e) {
- // open dialog
- UIWindow({
- path: `/${ window.user.username }/Desktop`,
- // this is the uuid of the window to which this dialog will return
- parent_uuid: $el_window.attr('data-element_uuid'),
- allowed_file_types: ['.png', '.jpg', '.jpeg'],
- show_maximize_button: false,
- show_minimize_button: false,
- title: 'Open',
- is_dir: true,
- is_openFileDialog: true,
- selectable_body: false,
- });
- });
- $el_window.on('file_opened', async function (e) {
- let selected_file = Array.isArray(e.detail) ? e.detail[0] : e.detail;
- // set profile picture
- const profile_pic = await puter.fs.read(selected_file.path);
- // blob to base64
- const reader = new FileReader();
- reader.readAsDataURL(profile_pic);
- reader.onloadend = function () {
- // resizes the image to 150x150
- const img = new Image();
- img.src = reader.result;
- img.onload = function () {
- const canvas = document.createElement('canvas');
- const ctx = canvas.getContext('2d');
- canvas.width = 150;
- canvas.height = 150;
- ctx.drawImage(img, 0, 0, 150, 150);
- const base64data = canvas.toDataURL('image/png');
- // update profile picture everywhere (matches helpers.js session refresh)
- $el_window.find('.profile-picture').css('background-image', `url(${ html_encode(base64data) })`);
- $('.profile-pic').css('background-image', `url(${ html_encode(base64data) })`);
- $('.profile-image').css('background-image', `url(${ html_encode(base64data) })`);
- $('.profile-image').addClass('profile-image-has-picture');
- // update profile picture
- update_profile(window.user.username, { picture: base64data });
- };
- };
- });
- },
-};
diff --git a/src/gui/src/UI/Settings/UITabKeyboardShortcuts.js b/src/gui/src/UI/Settings/UITabKeyboardShortcuts.js
deleted file mode 100644
index 3f178adab..000000000
--- a/src/gui/src/UI/Settings/UITabKeyboardShortcuts.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-const shortcutSections = () => ([
- {
- title: i18n('keyboard_shortcuts_general'),
- rows: [
- {
- action: i18n('keyboard_shortcuts_open_help'),
- keys: 'F1 / Ctrl+?',
- },
- {
- action: i18n('keyboard_shortcuts_search'),
- keys: 'Ctrl/Cmd + F',
- },
- {
- action: i18n('keyboard_shortcuts_close_window'),
- keys: 'Ctrl + W',
- },
- {
- action: i18n('keyboard_shortcuts_undo'),
- keys: 'Ctrl/Cmd + Z',
- },
- {
- action: i18n('keyboard_shortcuts_select_all'),
- keys: 'Ctrl/Cmd + A',
- },
- {
- action: i18n('keyboard_shortcuts_open_item'),
- keys: 'Enter',
- },
- {
- action: i18n('keyboard_shortcuts_close_menus'),
- keys: 'Esc',
- },
- ],
- },
- {
- title: i18n('keyboard_shortcuts_navigation'),
- rows: [
- {
- action: i18n('keyboard_shortcuts_arrow_navigation'),
- keys: 'Arrow Keys',
- },
- {
- action: i18n('keyboard_shortcuts_type_to_select'),
- keys: i18n('keyboard_shortcuts_type_to_select_keys'),
- },
- ],
- },
- {
- title: i18n('keyboard_shortcuts_files'),
- rows: [
- {
- action: i18n('keyboard_shortcuts_copy'),
- keys: 'Ctrl/Cmd + C',
- },
- {
- action: i18n('keyboard_shortcuts_cut'),
- keys: 'Ctrl/Cmd + X',
- },
- {
- action: i18n('keyboard_shortcuts_paste'),
- keys: 'Ctrl/Cmd + V',
- },
- {
- action: i18n('keyboard_shortcuts_delete'),
- keys: 'Delete (Win/Linux) / Cmd + Backspace (Mac)',
- },
- {
- action: i18n('keyboard_shortcuts_permanent_delete'),
- keys: 'Shift + Delete (Win/Linux) / Option + Cmd + Backspace (Mac)',
- },
- ],
- },
-]);
-
-export default {
- id: 'keyboard-shortcuts',
- title_i18n_key: 'keyboard_shortcuts',
- icon: 'shortcut.svg',
- html: () => {
- const sections = shortcutSections();
- const sectionHtml = sections.map(section => {
- const rows = section.rows.map(row => `
-
-
${row.action}
-
${row.keys}
-
- `).join('');
-
- return `
-
-
${section.title}
-
-
-
-
${i18n('keyboard_shortcuts_action')}
-
${i18n('keyboard_shortcuts_shortcut')}
-
-
-
- ${rows}
-
-
-
- `;
- }).join('');
-
- return `
-
${i18n('keyboard_shortcuts')}
-
${i18n('keyboard_shortcuts_intro')}
- ${sectionHtml}
- `;
- },
-};
diff --git a/src/gui/src/UI/Settings/UITabLanguage.js b/src/gui/src/UI/Settings/UITabLanguage.js
deleted file mode 100644
index 0d219d93e..000000000
--- a/src/gui/src/UI/Settings/UITabLanguage.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import changeLanguage from '../../i18n/i18nChangeLanguage.js';
-
-// About
-export default {
- id: 'language',
- title_i18n_key: 'language',
- icon: 'language.svg',
- html: () => {
- let h = `
${i18n('language')}
`;
-
- // search
- h += `
-
-
`;
-
- // list of languages
- const available_languages = window.listSupportedLanguages();
- h += '
';
- for ( let lang of available_languages ) {
- h += `
${html_encode(lang.name)}
`;
- }
- h += '
';
- return h;
- },
- init: ($el_window) => {
- $el_window.on('click', '.language-item', function () {
- const $this = $(this);
- const lang = $this.attr('data-lang');
- changeLanguage(lang);
- $this.siblings().removeClass('active');
- $this.addClass('active');
- // make sure all other language items are visible
- $this.closest('.language-list').find('.language-item').show();
- });
-
- $el_window.on('input', '.search-language', function () {
- const $this = $(this);
- const search = $this.val().toLowerCase();
- const $container = $this.closest('.settings').find('.settings-content-container');
- const $content = $container.find('.settings-content.active');
- const $list = $content.find('.language-list');
- const $items = $list.find('.language-item');
- $items.each(function () {
- const $item = $(this);
- const lang = $item.attr('data-lang');
- const name = $item.text().toLowerCase();
- const english_name = $item.attr('data-english-name').toLowerCase();
- if ( name.includes(search) || lang.includes(search) || english_name.includes(search) ) {
- $item.show();
- } else {
- $item.hide();
- }
- });
- });
- },
- on_show: ($content) => {
- // Focus on search
- $content.find('.search').first().focus();
- // make sure all language items are visible
- $content.find('.language-item').show();
- // empty search
- $content.find('.search').val('');
- },
-};
diff --git a/src/gui/src/UI/Settings/UITabPersonalization.js b/src/gui/src/UI/Settings/UITabPersonalization.js
deleted file mode 100644
index cb58d9925..000000000
--- a/src/gui/src/UI/Settings/UITabPersonalization.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import UIWindowThemeDialog from '../UIWindowThemeDialog.js';
-import UIWindowDesktopBGSettings from '../UIWindowDesktopBGSettings.js';
-
-// About
-export default {
- id: 'personalization',
- title_i18n_key: 'personalization',
- icon: 'palette-outline.svg',
- html: () => {
- return `
-
${i18n('personalization')}
-
- ${i18n('background')}
-
-
-
-
-
- ${i18n('ui_colors')}
-
-
-
-
-
- ${i18n('clock_visibility')}
-
-
- `;
- },
- init: ($el_window) => {
- $el_window.find('.change-ui-colors').on('click', function (e) {
- UIWindowThemeDialog({
- window_options: {
- parent_uuid: $el_window.attr('data-element_uuid'),
- disable_parent_window: true,
- parent_center: true,
- },
- });
- });
- $el_window.find('.change-background').on('click', function (e) {
- UIWindowDesktopBGSettings({
- window_options: {
- parent_uuid: $el_window.attr('data-element_uuid'),
- disable_parent_window: true,
- parent_center: true,
- },
- });
- });
-
- $el_window.on('change', 'select.change-clock-visible', function (e) {
- window.change_clock_visible(this.value);
- });
-
- window.change_clock_visible();
- },
-};
diff --git a/src/gui/src/UI/Settings/UITabSecurity.js b/src/gui/src/UI/Settings/UITabSecurity.js
deleted file mode 100644
index 342a3e960..000000000
--- a/src/gui/src/UI/Settings/UITabSecurity.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-import UIWindow2FASetup from '../UIWindow2FASetup.js';
-import UIWindowDisable2FA from './UIWindowDisable2FA.js';
-
-export default {
- id: 'security',
- title_i18n_key: 'security',
- icon: 'shield.svg',
- html: () => {
- let h = `
${i18n('security')}
`;
- let user = window.user;
-
- // change password button
- if ( ! user.is_temp ) {
- h += '
';
- h += `${i18n('password')}`;
- h += '
';
- h += ``;
- h += '
';
- h += '
';
- }
-
- // session manager
- h += '
';
- h += `${i18n('sessions')}`;
- h += '
';
- h += ``;
- h += '
';
- h += '
';
-
- // configure 2FA
- if ( !user.is_temp && user.email_confirmed ) {
- h += `
`;
- h += '
';
- h += `${i18n('two_factor')}`;
- h += `${
- i18n(user.otp ? 'two_factor_enabled' : 'two_factor_disabled')
- }`;
- h += '
';
- h += '
';
- h += ``;
- h += ``;
- h += '
';
- h += '
';
- }
-
- return h;
- },
- init: ($el_window) => {
- $el_window.find('.enable-2fa').on('click', async function (e) {
-
- const { promise } = await UIWindow2FASetup();
- const tfa_was_enabled = await promise;
-
- if ( tfa_was_enabled ) {
- $el_window.find('.enable-2fa').hide();
- $el_window.find('.disable-2fa').show();
- $el_window.find('.user-otp-state').text(i18n('two_factor_enabled'));
- $el_window.find('.settings-card-security').removeClass('settings-card-warning');
- $el_window.find('.settings-card-security').addClass('settings-card-success');
- }
-
- return;
- });
-
- $el_window.find('.disable-2fa').on('click', async function (e) {
- const { promise } = await UIWindowDisable2FA();
- const tfa_was_disabled = await promise;
-
- if ( tfa_was_disabled ) {
- $el_window.find('.enable-2fa').show();
- $el_window.find('.disable-2fa').hide();
- $el_window.find('.user-otp-state').text(i18n('two_factor_disabled'));
- $el_window.find('.settings-card-security').removeClass('settings-card-success');
- $el_window.find('.settings-card-security').addClass('settings-card-warning');
- }
- });
- },
-};
diff --git a/src/gui/src/UI/Settings/UITabUsage.js b/src/gui/src/UI/Settings/UITabUsage.js
deleted file mode 100644
index 7740e7560..000000000
--- a/src/gui/src/UI/Settings/UITabUsage.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-// Usage
-export default {
- id: 'usage',
- title_i18n_key: 'usage',
- icon: 'speedometer-outline.svg',
- html: () => {
- return `
-
${i18n('usage')}
-
-
-
${i18n('Storage')}
-
-
- used of
-
- ( ${i18n('storage_puter_used')})
-
-
-
-
-
-
-
-
-
-
${i18n('Resources')}
-
-
- used of
-
-
-
-
-
-
-
-
-
-
- View usage details
-
-
-
-
-
`;
- },
- init: ($el_window) => {
- update_usage_details($el_window);
- $($el_window).find('.update-usage-details').on('click', function () {
- update_usage_details($el_window);
- });
-
- // Scoped click handler for usage details toggle
- $($el_window).on('click', '.driver-usage-details', function () {
- const $container = $(this).closest('.driver-usage');
- $container.find('.driver-usage-details-content').toggleClass('active');
- $(this).toggleClass('active');
-
- // change the text of the driver-usage-details-text depending on the class
- if ( $(this).hasClass('active') ) {
- $(this).find('.driver-usage-details-text').text('Hide usage details');
- } else {
- $(this).find('.driver-usage-details-text').text('View usage details');
- }
- });
- },
-};
-
-async function update_usage_details ($el_window) {
- // Add spinning animation and record start time
- const startTime = Date.now();
- $($el_window).find('.update-usage-details-icon').css('animation', 'spin 1s linear infinite');
-
- const monthlyUsagePromise = puter.auth.getMonthlyUsage().then(res => {
- let monthlyAllowance = res.allowanceInfo?.monthUsageAllowance;
- let remaining = res.allowanceInfo?.remaining;
- let totalUsage = monthlyAllowance - remaining;
- let totalUsagePercentage = (totalUsage / monthlyAllowance * 100).toFixed(0);
-
- $('#total-usage').html(window.number_format(totalUsage / 100_000_000, { decimals: 2, prefix: '$' }));
- $('#total-capacity').html(window.number_format(monthlyAllowance / 100_000_000, { decimals: 2, prefix: '$' }));
- $('.usage-progbar-percent').html(`${totalUsagePercentage }%`);
- $('.usage-progbar').css('width', `${totalUsagePercentage }%`);
-
- // build the table for the usage details
- let h = '
';
-
- h += `
-
-
Resource
-
Units
-
Cost
-
- `;
-
- h += '';
- for ( let key in res.usage ) {
- // value must be object
- if ( typeof res.usage[key] !== 'object' )
- {
- continue;
- }
-
- // get the units
- let units = res.usage[key].units;
-
- // Bytes should be formatted as human readable
- if ( key.startsWith('filesystem:') && key.endsWith(':bytes') ) {
- units = window.byte_format(units);
- }
- // Everything else should be formatted as a number
- else {
- units = window.number_format(units, { decimals: 0, thousandSeparator: ',' });
- }
-
- h += `
-
';
-
- $('.driver-usage-details-content').html(h);
- });
-
- const spacePromise = puter.fs.space().then(res => {
- let usage_percentage = (res.used / res.capacity * 100).toFixed(0);
- usage_percentage = usage_percentage > 100 ? 100 : usage_percentage;
-
- let general_used = res.used;
-
- let host_usage_percentage = 0;
- if ( res.host_used ) {
- $('#storage-puter-used').html(window.byte_format(res.used));
- $('#storage-puter-used-w').show();
-
- general_used = res.host_used;
- host_usage_percentage = ((res.host_used - res.used) / res.capacity * 100).toFixed(0);
- }
-
- $('#storage-used').html(window.byte_format(general_used));
- $('#storage-capacity').html(window.byte_format(res.capacity));
- $('#storage-used-percent').html(
- `${usage_percentage }%${
- host_usage_percentage > 0
- ? ` / ${ host_usage_percentage }%` : ''}`);
- $('#storage-bar').css('width', `${usage_percentage }%`);
- $('#storage-bar-host').css('width', `${host_usage_percentage }%`);
- if ( usage_percentage >= 100 ) {
- $('#storage-bar').css({
- 'border-top-right-radius': '3px',
- 'border-bottom-right-radius': '3px',
- });
- }
- });
-
- // Wait for both promises to complete
- await Promise.all([monthlyUsagePromise, spacePromise]);
-
- // Ensure spinning continues for at least 1 second
- const elapsed = Date.now() - startTime;
- const minDuration = 1000; // 1 second
- if ( elapsed < minDuration ) {
- await new Promise(resolve => setTimeout(resolve, minDuration - elapsed));
- }
-
- // Remove spinning animation
- $($el_window).find('.update-usage-details-icon').css('animation', '');
-}
\ No newline at end of file
diff --git a/src/gui/src/UI/Settings/UIWindowSettings.js b/src/gui/src/UI/Settings/UIWindowSettings.js
deleted file mode 100644
index 2f7503666..000000000
--- a/src/gui/src/UI/Settings/UIWindowSettings.js
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * Copyright (C) 2024-present Puter Technologies Inc.
- *
- * This file is part of Puter.
- *
- * Puter is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import Placeholder from '../../util/Placeholder.js';
-import UIWindow from '../UIWindow.js';
-
-def(Symbol('TSettingsTab'), 'ui.traits.TSettingsTab');
-
-async function UIWindowSettings (options) {
- return new Promise(async (resolve) => {
- options = options ?? {};
-
- const svc_settings = globalThis.services.get('settings');
-
- const tabs = svc_settings.get_tabs();
- const tab_placeholders = [];
-
- let h = '';
-
- h += '
';
- h += '
';
- // sidebar toggle
- h += '';
- // sidebar
- h += '
';
- // if data-is_fullpage="1" show title saying "Settings"
- if ( options.window_options?.is_fullpage ) {
- h += `