瀏覽代碼

Minor UI updates (#3425)

* Tidy toolbar search input outline style

* Load page-specific JS later in HTML

* Simplify cron JS, remove setTimeout usage

* Add more required attributes to forms

* Fix translation source string

* Bump Node dependencies

* Refine cron layout on small screens

* Convert some jQuery to vanilla JS

* Fix ESLint warnings
Alec Rust 3 年之前
父節點
當前提交
f0aa6946ff
共有 51 個文件被更改,包括 221 次插入214 次删除
  1. 1 3
      .eslintrc.cjs
  2. 4 4
      package.json
  3. 8 1
      web/css/src/themes/default.css
  4. 0 0
      web/css/themes/default.min.css
  5. 1 1
      web/edit/backup/exclusions/index.php
  6. 1 1
      web/edit/cron/index.php
  7. 1 1
      web/edit/db/index.php
  8. 2 2
      web/edit/dns/index.php
  9. 1 1
      web/edit/firewall/index.php
  10. 1 1
      web/edit/ip/index.php
  11. 2 2
      web/edit/mail/index.php
  12. 1 1
      web/edit/package/index.php
  13. 1 1
      web/edit/server/apache2/index.php
  14. 1 1
      web/edit/server/bind9/index.php
  15. 1 1
      web/edit/server/clamav-daemon/index.php
  16. 1 1
      web/edit/server/dovecot/index.php
  17. 1 1
      web/edit/server/exim/index.php
  18. 1 1
      web/edit/server/exim4/index.php
  19. 1 1
      web/edit/server/fail2ban/index.php
  20. 1 1
      web/edit/server/httpd/index.php
  21. 2 2
      web/edit/server/index.php
  22. 1 1
      web/edit/server/mariadb/index.php
  23. 1 1
      web/edit/server/mysql/index.php
  24. 1 1
      web/edit/server/mysqld/index.php
  25. 1 1
      web/edit/server/named/index.php
  26. 1 1
      web/edit/server/nginx/index.php
  27. 1 1
      web/edit/server/php-fpm/index.php
  28. 1 1
      web/edit/server/php/index.php
  29. 1 1
      web/edit/server/php5-fpm/index.php
  30. 1 1
      web/edit/server/postgresql/index.php
  31. 1 1
      web/edit/server/proftpd/index.php
  32. 1 1
      web/edit/server/spamassassin/index.php
  33. 1 1
      web/edit/server/spamd/index.php
  34. 1 1
      web/edit/server/ssh/index.php
  35. 1 1
      web/edit/server/vsftpd/index.php
  36. 1 1
      web/edit/user/index.php
  37. 1 1
      web/edit/web/index.php
  38. 5 5
      web/inc/main.php
  39. 5 15
      web/js/init.js
  40. 38 36
      web/js/pages/add_cron.js
  41. 4 3
      web/js/pages/add_web.js
  42. 38 36
      web/js/pages/edit_cron.js
  43. 4 2
      web/js/pages/edit_web.js
  44. 9 9
      web/js/shortcuts.js
  45. 1 1
      web/templates/pages/add_dns.php
  46. 1 1
      web/templates/pages/add_mail.php
  47. 1 1
      web/templates/pages/add_web.php
  48. 1 1
      web/templates/pages/edit_dns.php
  49. 1 1
      web/templates/pages/edit_mail.php
  50. 1 1
      web/templates/pages/edit_web.php
  51. 63 58
      yarn.lock

+ 1 - 3
.eslintrc.cjs

@@ -25,15 +25,13 @@ module.exports = {
 	rules: {
 		// Set those as warnings instead. They should be fixed at some point
 		'@typescript-eslint/no-unused-vars': [
-			'warn',
+			'error',
 			{
 				argsIgnorePattern: '^_',
 				varsIgnorePattern: '^_',
 				caughtErrorsIgnorePattern: '^_',
 			},
 		],
-		'@typescript-eslint/no-empty-function': 'warn',
-		'@typescript-eslint/no-this-alias': 'warn',
 		'@typescript-eslint/no-var-requires': 'off',
 		'no-redeclare': 'off',
 		'no-undef': 'off',

+ 4 - 4
package.json

@@ -36,15 +36,15 @@
 		"postcss-cli": "^10.1.0",
 		"postcss-import": "^15.1.0",
 		"postcss-path-replace": "^1.0.4",
-		"postcss-preset-env": "^8.2.0",
+		"postcss-preset-env": "^8.3.0",
 		"postcss-size": "^4.0.1",
 		"prettier": "^2.8.7",
 		"prettier-plugin-nginx": "^1.0.3",
 		"prettier-plugin-sh": "^0.12.8",
 		"prettier-plugin-sql": "^0.13.0",
-		"stylelint": "^15.3.0",
-		"stylelint-config-standard": "^31.0.0",
-		"typescript": "^5.0.2",
+		"stylelint": "^15.4.0",
+		"stylelint-config-standard": "^32.0.0",
+		"typescript": "^5.0.3",
 		"vitepress": "1.0.0-alpha.64",
 		"vue": "^3.2.47"
 	}

+ 8 - 1
web/css/src/themes/default.css

@@ -547,6 +547,7 @@
 
 		&:focus {
 			border-right-color: #008fee;
+			outline-offset: 1px;
 		}
 	}
 
@@ -1408,11 +1409,17 @@
 @media (--viewport-medium) {
 	.sidebar-left-container {
 		display: grid;
-		gap: 50px;
+		gap: 20px;
 		grid-template-columns: 1fr 3fr;
 	}
 }
 
+@media (--viewport-large) {
+	.sidebar-left-container {
+		gap: 50px;
+	}
+}
+
 .form-title {
 	color: #4b4b4b;
 	font-size: 1.4rem;

File diff suppressed because it is too large
+ 0 - 0
web/css/themes/default.min.css


+ 1 - 1
web/edit/backup/exclusions/index.php

@@ -129,7 +129,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/cron/index.php

@@ -86,7 +86,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/db/index.php

@@ -97,7 +97,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 	// if the mysql username was changed, render_page() below will render with the OLD mysql username,
 	// to prvent that, make the browser refresh the page.

+ 2 - 2
web/edit/dns/index.php

@@ -231,7 +231,7 @@ if (!empty($_POST["save"]) && !empty($_GET["domain"]) && empty($_GET["record_id"
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 	// Restart dns server
 	if (empty($_SESSION["error_msg"])) {
@@ -322,7 +322,7 @@ if (!empty($_POST["save"]) && !empty($_GET["domain"]) && !empty($_GET["record_id
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 
 	// Change url if record id was changed

+ 1 - 1
web/edit/firewall/index.php

@@ -131,7 +131,7 @@ if (!empty($_POST["save"])) {
 
 		// Set success message
 		if (empty($_SESSION["error_msg"])) {
-			$_SESSION["ok_msg"] = _("Changes has been saved.");
+			$_SESSION["ok_msg"] = _("Changes have been saved.");
 		}
 	} else {
 		$v_rule = $_GET["v_rule"];

+ 1 - 1
web/edit/ip/index.php

@@ -94,7 +94,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 2 - 2
web/edit/mail/index.php

@@ -732,7 +732,7 @@ if (!empty($_POST["save"]) && !empty($_GET["domain"]) && empty($_GET["account"])
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 
@@ -1082,7 +1082,7 @@ if (!empty($_POST["save"]) && !empty($_GET["domain"]) && !empty($_GET["account"]
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/package/index.php

@@ -320,7 +320,7 @@ if (!empty($_POST["save"])) {
 	}
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/apache2/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/bind9/index.php

@@ -58,7 +58,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/clamav-daemon/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/dovecot/index.php

@@ -177,7 +177,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/exim/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/exim4/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/fail2ban/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/httpd/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 2 - 2
web/edit/server/index.php

@@ -1641,11 +1641,11 @@ if (!empty($_POST["save"])) {
 
 	// Flush field values on success
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 	if ($require_refresh == true) {
 		$refresh = $_SERVER["REQUEST_URI"];
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 		header("Location: $refresh");
 		die();
 	}

+ 1 - 1
web/edit/server/mariadb/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/mysql/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/mysqld/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/named/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/nginx/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/php-fpm/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/php/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/php5-fpm/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/postgresql/index.php

@@ -62,7 +62,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/proftpd/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/spamassassin/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/spamd/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/ssh/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/server/vsftpd/index.php

@@ -41,7 +41,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/user/index.php

@@ -537,7 +537,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 	}
 }
 

+ 1 - 1
web/edit/web/index.php

@@ -1515,7 +1515,7 @@ if (!empty($_POST["save"])) {
 
 	// Set success message
 	if (empty($_SESSION["error_msg"])) {
-		$_SESSION["ok_msg"] = _("Changes has been saved.");
+		$_SESSION["ok_msg"] = _("Changes have been saved.");
 		header("Location: /edit/web/?domain=" . $v_domain);
 		exit();
 	}

+ 5 - 5
web/inc/main.php

@@ -192,17 +192,17 @@ function render_page($user, $TAB, $page) {
 	// Panel
 	$panel = top_panel(empty($_SESSION["look"]) ? $_SESSION["user"] : $_SESSION["look"], $TAB);
 
-	// Including page specific js file
-	if (file_exists($__pages_js_dir . $page . ".js")) {
-		echo '<script defer src="/js/pages/' . $page . ".js?" . JS_LATEST_UPDATE . '"></script>';
-	}
-
 	// Policies controller
 	@include_once dirname(__DIR__) . "/inc/policies.php";
 
 	// Body
 	include $__template_dir . "pages/" . $page . ".php";
 
+	// Including page specific js file
+	if (file_exists($__pages_js_dir . $page . ".js")) {
+		echo '<script defer src="/js/pages/' . $page . ".js?" . JS_LATEST_UPDATE . '"></script>';
+	}
+
 	// Footer
 	include $__template_dir . "footer.php";
 }

+ 5 - 15
web/js/init.js

@@ -20,22 +20,12 @@ document.addEventListener('DOMContentLoaded', () => {
 		}
 	}
 
-	// TODO Refactor or remove
-	$('.submenu-select-dropdown').each(() => {
-		$(this).wrap("<span class='submenu-select-wrapper'></span>");
-		$(this).after("<span class='holder'></span>");
-	});
-	$('.submenu-select-dropdown')
-		.change(() => {
-			const selectedOption = $(this).find(':selected').text();
-			$(this).next('.holder').text(selectedOption);
-		})
-		.trigger('change');
-
 	// SORTING
-	$('.toolbar-sorting-toggle').click(function (evt) {
-		evt.preventDefault();
-		$('.toolbar-sorting-menu').toggleClass('u-hidden');
+	document.querySelectorAll('.toolbar-sorting-toggle').forEach((toggle) => {
+		toggle.addEventListener('click', (evt) => {
+			evt.preventDefault();
+			document.querySelector('.toolbar-sorting-menu').classList.toggle('u-hidden');
+		});
 	});
 
 	$('.toolbar-sorting-menu span').click(function () {

+ 38 - 36
web/js/pages/add_cron.js

@@ -1,47 +1,49 @@
-document.addEventListener('DOMContentLoaded', () => {
-	const tabs = document.querySelector('.js-tabs');
-	if (tabs) {
-		const tabItems = tabs.querySelectorAll('.tabs-item');
-		const panels = tabs.querySelectorAll('.tabs-panel');
-		tabItems.forEach((tab) => {
-			tab.addEventListener('click', (event) => {
-				// Reset state
-				panels.forEach((panel) => (panel.hidden = true));
-				tabItems.forEach((tab) => {
-					tab.setAttribute('aria-selected', false);
-					tab.setAttribute('tabindex', -1);
-				});
+const tabs = document.querySelector('.js-tabs');
+if (tabs) {
+	const tabItems = tabs.querySelectorAll('.tabs-item');
+	const panels = tabs.querySelectorAll('.tabs-panel');
+	tabItems.forEach((tab) => {
+		tab.addEventListener('click', (event) => {
+			// Reset state
+			panels.forEach((panel) => (panel.hidden = true));
+			tabItems.forEach((tab) => {
+				tab.setAttribute('aria-selected', false);
+				tab.setAttribute('tabindex', -1);
+			});
 
-				// Show the selected panel
-				const tabId = event.target.getAttribute('id');
-				const panel = document.querySelector(`[aria-labelledby="${tabId}"]`);
-				panel.hidden = false;
+			// Show the selected panel
+			const tabId = event.target.getAttribute('id');
+			const panel = document.querySelector(`[aria-labelledby="${tabId}"]`);
+			panel.hidden = false;
 
-				// Mark the selected tab as active
-				event.target.setAttribute('aria-selected', true);
-				event.target.setAttribute('tabindex', 0);
-				event.target.focus();
-			});
+			// Mark the selected tab as active
+			event.target.setAttribute('aria-selected', true);
+			event.target.setAttribute('tabindex', 0);
+			event.target.focus();
 		});
-	}
+	});
+}
 
-	const generateCronButtons = document.querySelectorAll('.js-generate-cron');
-	generateCronButtons.forEach((button) => {
-		button.addEventListener('click', () => {
-			const fieldset = button.closest('fieldset');
-			const inputNames = ['min', 'hour', 'day', 'month', 'wday'];
+const generateCronButtons = document.querySelectorAll('.js-generate-cron');
+generateCronButtons.forEach((button) => {
+	button.addEventListener('click', () => {
+		const fieldset = button.closest('fieldset');
+		const inputNames = ['min', 'hour', 'day', 'month', 'wday'];
 
-			inputNames.forEach((inputName) => {
-				const value = fieldset.querySelector(`[name=h_${inputName}]`).value;
-				const formInput = document.querySelector(`#vstobjects input[name=v_${inputName}]`);
+		inputNames.forEach((inputName) => {
+			const value = fieldset.querySelector(`[name=h_${inputName}]`).value;
+			const formInput = document.querySelector(`#vstobjects input[name=v_${inputName}]`);
 
-				formInput.value = value;
-				formInput.classList.add('highlighted');
+			formInput.value = value;
+			formInput.classList.add('highlighted');
 
-				setTimeout(() => {
+			formInput.addEventListener(
+				'transitionend',
+				() => {
 					formInput.classList.remove('highlighted');
-				}, 250);
-			});
+				},
+				{ once: true }
+			);
 		});
 	});
 });

+ 4 - 3
web/js/pages/add_web.js

@@ -40,9 +40,9 @@ App.Listeners.WEB.keypress_domain_name = function () {
 	$('#v_domain').bind('keypress input', function () {
 		clearTimeout(window.frp_usr_tmt);
 		window.frp_usr_tmt = setTimeout(function () {
-			var domain = $('.js-ftp-path-prefix').text(
-				Alpine.store('globals').FTP_USER_PREPATH + '/' + $('#v_domain').val()
-			);
+			// var domain = $('.js-ftp-path-prefix').text(
+			// 	Alpine.store('globals').FTP_USER_PREPATH + '/' + $('#v_domain').val()
+			// );
 			$('#v-custom-doc-domain-main').text($('#v_domain').val());
 			$('#v-custom-doc-domain-main').val($('#v_domain').val());
 			App.Actions.WEB.update_custom_doc_root(13, 12);
@@ -93,6 +93,7 @@ $(function () {
 	});
 });
 
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
 function WEBrandom() {
 	document.v_add_web.v_stats_password.value = randomString(16);
 }

+ 38 - 36
web/js/pages/edit_cron.js

@@ -1,47 +1,49 @@
-document.addEventListener('DOMContentLoaded', () => {
-	const tabs = document.querySelector('.js-tabs');
-	if (tabs) {
-		const tabItems = tabs.querySelectorAll('.tabs-item');
-		const panels = tabs.querySelectorAll('.tabs-panel');
-		tabItems.forEach((tab) => {
-			tab.addEventListener('click', (event) => {
-				// Reset state
-				panels.forEach((panel) => (panel.hidden = true));
-				tabItems.forEach((tab) => {
-					tab.setAttribute('aria-selected', false);
-					tab.setAttribute('tabindex', -1);
-				});
+const tabs = document.querySelector('.js-tabs');
+if (tabs) {
+	const tabItems = tabs.querySelectorAll('.tabs-item');
+	const panels = tabs.querySelectorAll('.tabs-panel');
+	tabItems.forEach((tab) => {
+		tab.addEventListener('click', (event) => {
+			// Reset state
+			panels.forEach((panel) => (panel.hidden = true));
+			tabItems.forEach((tab) => {
+				tab.setAttribute('aria-selected', false);
+				tab.setAttribute('tabindex', -1);
+			});
 
-				// Show the selected panel
-				const tabId = event.target.getAttribute('id');
-				const panel = document.querySelector(`[aria-labelledby="${tabId}"]`);
-				panel.hidden = false;
+			// Show the selected panel
+			const tabId = event.target.getAttribute('id');
+			const panel = document.querySelector(`[aria-labelledby="${tabId}"]`);
+			panel.hidden = false;
 
-				// Mark the selected tab as active
-				event.target.setAttribute('aria-selected', true);
-				event.target.setAttribute('tabindex', 0);
-				event.target.focus();
-			});
+			// Mark the selected tab as active
+			event.target.setAttribute('aria-selected', true);
+			event.target.setAttribute('tabindex', 0);
+			event.target.focus();
 		});
-	}
+	});
+}
 
-	const generateCronButtons = document.querySelectorAll('.js-generate-cron');
-	generateCronButtons.forEach((button) => {
-		button.addEventListener('click', () => {
-			const fieldset = button.closest('fieldset');
-			const inputNames = ['min', 'hour', 'day', 'month', 'wday'];
+const generateCronButtons = document.querySelectorAll('.js-generate-cron');
+generateCronButtons.forEach((button) => {
+	button.addEventListener('click', () => {
+		const fieldset = button.closest('fieldset');
+		const inputNames = ['min', 'hour', 'day', 'month', 'wday'];
 
-			inputNames.forEach((inputName) => {
-				const value = fieldset.querySelector(`[name=h_${inputName}]`).value;
-				const formInput = document.querySelector(`#vstobjects input[name=v_${inputName}]`);
+		inputNames.forEach((inputName) => {
+			const value = fieldset.querySelector(`[name=h_${inputName}]`).value;
+			const formInput = document.querySelector(`#vstobjects input[name=v_${inputName}]`);
 
-				formInput.value = value;
-				formInput.classList.add('highlighted');
+			formInput.value = value;
+			formInput.classList.add('highlighted');
 
-				setTimeout(() => {
+			formInput.addEventListener(
+				'transitionend',
+				() => {
 					formInput.classList.remove('highlighted');
-				}, 250);
-			});
+				},
+				{ once: true }
+			);
 		});
 	});
 });

+ 4 - 2
web/js/pages/edit_web.js

@@ -1,4 +1,4 @@
-App.Actions.WEB.update_custom_doc_root = function (elm, hint) {
+App.Actions.WEB.update_custom_doc_root = function () {
 	var prepath = $('input[name="v-custom-doc-root_prepath"]').val();
 	var domain = $('select[name="v-custom-doc-domain"]').val();
 	var folder = $('input[name="v-custom-doc-folder"]').val();
@@ -21,7 +21,7 @@ App.Listeners.DB.keypress_custom_folder = function () {
 
 App.Listeners.DB.change_custom_doc = function () {
 	var ref = $('select[name="v-custom-doc-domain"]');
-	var current_rec = ref.val();
+	// var current_rec = ref.val();
 
 	ref.bind('change select', function (evt) {
 		clearTimeout(window.frp_usr_tmt);
@@ -269,10 +269,12 @@ $(function () {
 	});
 });
 
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
 function WEBrandom() {
 	document.v_edit_web.v_stats_password.value = randomString(16);
 }
 
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
 function FTPrandom(elm) {
 	$(elm).parents('.js-ftp-account').find('.v-ftp-user-psw').val(randomString(16));
 	App.Actions.WEB.randomPasswordGenerated && App.Actions.WEB.randomPasswordGenerated(elm);

+ 9 - 9
web/js/shortcuts.js

@@ -134,7 +134,7 @@ document.addEventListener('alpine:init', () => {
 
 			if (Alpine.store('form').dirty && redirect) {
 				VE.helpers.createConfirmationDialog({
-					message: $('body').attr('data-confirm-leave-page'),
+					message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 					targetUrl: redirect,
 				});
 			} else if (document.querySelector('form#vstobjects .button.cancel')) {
@@ -163,7 +163,7 @@ document.addEventListener('alpine:init', () => {
 				}
 				if (Alpine.store('form').dirty) {
 					VE.helpers.createConfirmationDialog({
-						message: $('body').attr('data-confirm-leave-page'),
+						message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 						targetUrl: target.href,
 					});
 				} else {
@@ -181,7 +181,7 @@ document.addEventListener('alpine:init', () => {
 				}
 				if (Alpine.store('form').dirty) {
 					VE.helpers.createConfirmationDialog({
-						message: $('body').attr('data-confirm-leave-page'),
+						message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 						targetUrl: target.href,
 					});
 				} else {
@@ -199,7 +199,7 @@ document.addEventListener('alpine:init', () => {
 				}
 				if (Alpine.store('form').dirty) {
 					VE.helpers.createConfirmationDialog({
-						message: $('body').attr('data-confirm-leave-page'),
+						message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 						targetUrl: target.href,
 					});
 				} else {
@@ -217,7 +217,7 @@ document.addEventListener('alpine:init', () => {
 				}
 				if (Alpine.store('form').dirty) {
 					VE.helpers.createConfirmationDialog({
-						message: $('body').attr('data-confirm-leave-page'),
+						message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 						targetUrl: target.href,
 					});
 				} else {
@@ -235,7 +235,7 @@ document.addEventListener('alpine:init', () => {
 				}
 				if (Alpine.store('form').dirty) {
 					VE.helpers.createConfirmationDialog({
-						message: $('body').attr('data-confirm-leave-page'),
+						message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 						targetUrl: target.href,
 					});
 				} else {
@@ -253,7 +253,7 @@ document.addEventListener('alpine:init', () => {
 				}
 				if (Alpine.store('form').dirty) {
 					VE.helpers.createConfirmationDialog({
-						message: $('body').attr('data-confirm-leave-page'),
+						message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 						targetUrl: target.href,
 					});
 				} else {
@@ -271,7 +271,7 @@ document.addEventListener('alpine:init', () => {
 				}
 				if (Alpine.store('form').dirty) {
 					VE.helpers.createConfirmationDialog({
-						message: $('body').attr('data-confirm-leave-page'),
+						message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 						targetUrl: target.href,
 					});
 				} else {
@@ -420,7 +420,7 @@ document.addEventListener('alpine:init', () => {
 						dialog.querySelector('button[type="submit"]').click();
 					} else {
 						VE.helpers.createConfirmationDialog({
-							message: $('body').attr('data-confirm-leave-page'),
+							message: document.querySelector('body').getAttribute('data-confirm-leave-page'),
 							targetUrl: document.querySelector(`${VE.navigation.state.menu_selector}.focus a`)
 								.href,
 						});

+ 1 - 1
web/templates/pages/add_dns.php

@@ -46,7 +46,7 @@
 			<?php if (($user_plain == "admin" && $_GET["accept"] === "true") || $user_plain !== "admin") { ?>
 				<div class="u-mb10">
 					<label for="v_domain" class="form-label"><?= _("Domain") ?></label>
-					<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>">
+					<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" required>
 				</div>
 				<div class="u-mb10">
 					<label for="v_ip" class="form-label"><?= _("IP address") ?></label>

+ 1 - 1
web/templates/pages/add_mail.php

@@ -46,7 +46,7 @@
 			<?php if (($user_plain == "admin" && $_GET["accept"] === "true") || $user_plain !== "admin") { ?>
 				<div class="u-mb20">
 					<label for="v_domain" class="form-label"><?= _("Domain") ?></label>
-					<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>">
+					<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" required>
 				</div>
 				<?php if ($_SESSION["WEBMAIL_SYSTEM"]) { ?>
 					<div class="u-mb20">

+ 1 - 1
web/templates/pages/add_web.php

@@ -41,7 +41,7 @@
 			<?php if (($user_plain == "admin" && $_GET["accept"] === "true") || $user_plain !== "admin") { ?>
 				<div class="u-mb10">
 					<label for="v_domain" class="form-label"><?= _("Domain") ?></label>
-					<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>">
+					<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" required>
 				</div>
 				<div class="u-mb20">
 					<label for="v_ip" class="form-label"><?= _("IP Address") ?></label>

+ 1 - 1
web/templates/pages/edit_dns.php

@@ -26,7 +26,7 @@
 			<?php show_alert_message($_SESSION); ?>
 			<div class="u-mb10">
 				<label for="v_domain" class="form-label"><?= _("Domain") ?></label>
-				<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" disabled>
+				<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" disabled required>
 				<input type="hidden" name="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>">
 			</div>
 			<div class="u-mb10">

+ 1 - 1
web/templates/pages/edit_mail.php

@@ -36,7 +36,7 @@
 			<?php show_alert_message($_SESSION); ?>
 			<div class="u-mb20">
 				<label for="v_domain" class="form-label"><?= _("Domain") ?></label>
-				<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" disabled>
+				<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" disabled required>
 				<input type="hidden" name="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>">
 			</div>
 			<?php if ($_SESSION["WEBMAIL_SYSTEM"]) { ?>

+ 1 - 1
web/templates/pages/edit_web.php

@@ -50,7 +50,7 @@
 			<?php show_alert_message($_SESSION); ?>
 			<div class="u-mb10">
 				<label for="v_domain" class="form-label"><?= _("Domain") ?></label>
-				<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" disabled>
+				<input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" disabled required>
 				<input type="hidden" name="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>">
 			</div>
 			<div class="u-mb10">

+ 63 - 58
yarn.lock

@@ -166,11 +166,11 @@ __metadata:
   linkType: hard
 
 "@babel/code-frame@npm:^7.0.0":
-  version: 7.18.6
-  resolution: "@babel/code-frame@npm:7.18.6"
+  version: 7.21.4
+  resolution: "@babel/code-frame@npm:7.21.4"
   dependencies:
     "@babel/highlight": ^7.18.6
-  checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba
+  checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c
   languageName: node
   linkType: hard
 
@@ -200,22 +200,22 @@ __metadata:
   linkType: hard
 
 "@babel/parser@npm:^7.16.4":
-  version: 7.21.3
-  resolution: "@babel/parser@npm:7.21.3"
+  version: 7.21.4
+  resolution: "@babel/parser@npm:7.21.4"
   bin:
     parser: ./bin/babel-parser.js
-  checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be
+  checksum: de610ecd1bff331766d0c058023ca11a4f242bfafefc42caf926becccfb6756637d167c001987ca830dd4b34b93c629a4cef63f8c8c864a8564cdfde1989ac77
   languageName: node
   linkType: hard
 
 "@babel/types@npm:^7.8.3":
-  version: 7.21.3
-  resolution: "@babel/types@npm:7.21.3"
+  version: 7.21.4
+  resolution: "@babel/types@npm:7.21.4"
   dependencies:
     "@babel/helper-string-parser": ^7.19.4
     "@babel/helper-validator-identifier": ^7.19.1
     to-fast-properties: ^2.0.0
-  checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35
+  checksum: 587bc55a91ce003b0f8aa10d70070f8006560d7dc0360dc0406d306a2cb2a10154e2f9080b9c37abec76907a90b330a536406cb75e6bdc905484f37b75c73219
   languageName: node
   linkType: hard
 
@@ -282,7 +282,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/media-query-list-parser@npm:^2.0.0, @csstools/media-query-list-parser@npm:^2.0.1":
+"@csstools/media-query-list-parser@npm:^2.0.0, @csstools/media-query-list-parser@npm:^2.0.1, @csstools/media-query-list-parser@npm:^2.0.2":
   version: 2.0.2
   resolution: "@csstools/media-query-list-parser@npm:2.0.2"
   peerDependencies:
@@ -425,6 +425,20 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@csstools/postcss-media-minmax@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "@csstools/postcss-media-minmax@npm:1.0.0"
+  dependencies:
+    "@csstools/css-calc": ^1.0.1
+    "@csstools/css-parser-algorithms": ^2.1.0
+    "@csstools/css-tokenizer": ^2.1.0
+    "@csstools/media-query-list-parser": ^2.0.2
+  peerDependencies:
+    postcss: ^8.4
+  checksum: 976384e607544e39d9a1a86fcfc4d673123e88adf947126ecd3df791d64c416b8545f6248f292cc713211c4f2911567f50335590c40efb001eefe67ffd614ed5
+  languageName: node
+  linkType: hard
+
 "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^1.0.1":
   version: 1.0.1
   resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:1.0.1"
@@ -543,7 +557,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@csstools/selector-specificity@npm:^2.0.0, @csstools/selector-specificity@npm:^2.0.1, @csstools/selector-specificity@npm:^2.0.2, @csstools/selector-specificity@npm:^2.1.1":
+"@csstools/selector-specificity@npm:^2.0.0, @csstools/selector-specificity@npm:^2.0.1, @csstools/selector-specificity@npm:^2.0.2, @csstools/selector-specificity@npm:^2.2.0":
   version: 2.2.0
   resolution: "@csstools/selector-specificity@npm:2.2.0"
   peerDependencies:
@@ -1802,7 +1816,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"cosmiconfig@npm:^8.1.0":
+"cosmiconfig@npm:^8.1.3":
   version: 8.1.3
   resolution: "cosmiconfig@npm:8.1.3"
   dependencies:
@@ -1914,10 +1928,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"cssdb@npm:^7.5.2":
-  version: 7.5.2
-  resolution: "cssdb@npm:7.5.2"
-  checksum: 2f052096cee3472651668673e5c2dd32f115ef8fecc8004cc42a2af7102e26046a2df00122b90482489a02ed58cb79997aac34e98e5c23b8b23de0eb70593369
+"cssdb@npm:^7.5.3":
+  version: 7.5.3
+  resolution: "cssdb@npm:7.5.3"
+  checksum: 9376f1a49405dde2e3bb2e6e99d4389a17d95e94e89ead66cf52067493311b2a6222a257438cd14655087ee711c239efbebefa551e2b2ce8744709c71de3e5f6
   languageName: node
   linkType: hard
 
@@ -2155,9 +2169,9 @@ __metadata:
   linkType: hard
 
 "electron-to-chromium@npm:^1.4.284":
-  version: 1.4.345
-  resolution: "electron-to-chromium@npm:1.4.345"
-  checksum: 4561a09c1259c04ecb0c6f0c9000b12c562a1a06dfd89858bf2388d3d6083d41a12a7ca5a425cae9b12fa2de2ccddf2dd0ba43fb26600ab66cec26d48a8c19b0
+  version: 1.4.348
+  resolution: "electron-to-chromium@npm:1.4.348"
+  checksum: 662491cd395de9eb7f400f139d8abc9a5e6dd33ff2b0eb71c060bdd7570f16ed876e0a57485dec2c42d55ad875f6c9d8f68f72f2ad3d8e1b2ab2cb4c20ee7bc5
   languageName: node
   linkType: hard
 
@@ -2887,15 +2901,15 @@ __metadata:
     postcss-cli: ^10.1.0
     postcss-import: ^15.1.0
     postcss-path-replace: ^1.0.4
-    postcss-preset-env: ^8.2.0
+    postcss-preset-env: ^8.3.0
     postcss-size: ^4.0.1
     prettier: ^2.8.7
     prettier-plugin-nginx: ^1.0.3
     prettier-plugin-sh: ^0.12.8
     prettier-plugin-sql: ^0.13.0
-    stylelint: ^15.3.0
-    stylelint-config-standard: ^31.0.0
-    typescript: ^5.0.2
+    stylelint: ^15.4.0
+    stylelint-config-standard: ^32.0.0
+    typescript: ^5.0.3
     vitepress: 1.0.0-alpha.64
     vue: ^3.2.47
   languageName: unknown
@@ -4527,15 +4541,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-media-minmax@npm:^5.0.0":
-  version: 5.0.0
-  resolution: "postcss-media-minmax@npm:5.0.0"
-  peerDependencies:
-    postcss: ^8.1.0
-  checksum: 2cd7283e07a1ac1acdcc3ecbaa0e9932f8d1e7647e7aeb14d91845fcb890d60d7257ec70c825cae8d48ae80a08cc77ebc4021a0dfa32360e0cd991e2bc021607
-  languageName: node
-  linkType: hard
-
 "postcss-media-query-parser@npm:^0.2.3":
   version: 0.2.3
   resolution: "postcss-media-query-parser@npm:0.2.3"
@@ -4788,9 +4793,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss-preset-env@npm:^8.2.0":
-  version: 8.2.0
-  resolution: "postcss-preset-env@npm:8.2.0"
+"postcss-preset-env@npm:^8.3.0":
+  version: 8.3.0
+  resolution: "postcss-preset-env@npm:8.3.0"
   dependencies:
     "@csstools/postcss-cascade-layers": ^3.0.1
     "@csstools/postcss-color-function": ^2.1.0
@@ -4803,6 +4808,7 @@ __metadata:
     "@csstools/postcss-logical-float-and-clear": ^1.0.1
     "@csstools/postcss-logical-resize": ^1.0.1
     "@csstools/postcss-logical-viewport-units": ^1.0.2
+    "@csstools/postcss-media-minmax": ^1.0.0
     "@csstools/postcss-media-queries-aspect-ratio-number-values": ^1.0.1
     "@csstools/postcss-nested-calc": ^2.0.2
     "@csstools/postcss-normalize-display-values": ^2.0.1
@@ -4818,7 +4824,7 @@ __metadata:
     css-blank-pseudo: ^5.0.2
     css-has-pseudo: ^5.0.2
     css-prefers-color-scheme: ^8.0.2
-    cssdb: ^7.5.2
+    cssdb: ^7.5.3
     postcss-attribute-case-insensitive: ^6.0.2
     postcss-clamp: ^4.1.0
     postcss-color-functional-notation: ^5.0.2
@@ -4837,7 +4843,6 @@ __metadata:
     postcss-initial: ^4.0.1
     postcss-lab-function: ^5.2.0
     postcss-logical: ^6.1.0
-    postcss-media-minmax: ^5.0.0
     postcss-nesting: ^11.2.1
     postcss-opacity-percentage: ^2.0.0
     postcss-overflow-shorthand: ^4.0.1
@@ -4849,7 +4854,7 @@ __metadata:
     postcss-value-parser: ^4.2.0
   peerDependencies:
     postcss: ^8.4
-  checksum: 1110681388a4ff766fefb8ff95513e2d9017d48da4df0d688ff68e651474eb24e91552ded4df9b660bbf066bdc598c65f3c5080a4a925f288c7974de1a1aafb1
+  checksum: 0005360a5018933ce7d61afdcf0b0928bdba8ee6f25b470adc4f4fc8a4d5650e8a375fe3a35fde446fb5229ff5fdae808829e8cbfb92011d164c92d955dc3955
   languageName: node
   linkType: hard
 
@@ -5691,28 +5696,28 @@ __metadata:
   languageName: node
   linkType: hard
 
-"stylelint-config-standard@npm:^31.0.0":
-  version: 31.0.0
-  resolution: "stylelint-config-standard@npm:31.0.0"
+"stylelint-config-standard@npm:^32.0.0":
+  version: 32.0.0
+  resolution: "stylelint-config-standard@npm:32.0.0"
   dependencies:
     stylelint-config-recommended: ^11.0.0
   peerDependencies:
-    stylelint: ^15.3.0
-  checksum: 8e5769252cb2111c0afc39627ff92e57eb9340089e96aa048154b7616715cd8eda24e0b9b6380b7edf5ad7ca14383e427e8df29cf3ab23a90276ebd5163b4077
+    stylelint: ^15.4.0
+  checksum: 05f7481f93e0fd3d2e69ba6ef3b3b8347c2340fcc6732e3f4289cc1067ae74e87f6474b4385b8936a0ff062cc3dd08c5cc50e27d96994c6176a69d055a75537a
   languageName: node
   linkType: hard
 
-"stylelint@npm:^15.3.0":
-  version: 15.3.0
-  resolution: "stylelint@npm:15.3.0"
+"stylelint@npm:^15.4.0":
+  version: 15.4.0
+  resolution: "stylelint@npm:15.4.0"
   dependencies:
-    "@csstools/css-parser-algorithms": ^2.0.1
+    "@csstools/css-parser-algorithms": ^2.1.0
     "@csstools/css-tokenizer": ^2.1.0
     "@csstools/media-query-list-parser": ^2.0.1
-    "@csstools/selector-specificity": ^2.1.1
+    "@csstools/selector-specificity": ^2.2.0
     balanced-match: ^2.0.0
     colord: ^2.9.3
-    cosmiconfig: ^8.1.0
+    cosmiconfig: ^8.1.3
     css-functions-list: ^3.1.0
     css-tree: ^2.3.1
     debug: ^4.3.4
@@ -5750,7 +5755,7 @@ __metadata:
     write-file-atomic: ^5.0.0
   bin:
     stylelint: bin/stylelint.js
-  checksum: d6ef20cfc498dba274fc2b17ea9d342e0ca1a24bc07755066842f0a28e1dc6f36c2b67f4cf87a3a232ae98cf42864e884cdcd11428fe4caf0f5f1677cac8d85a
+  checksum: f56a75ffb8ee016690b78b2d401626134317526682ce818d686096db5d33472bf5d3b2941f5b5b3f9711061e5ad123a335a6f482316a567c4c75deba6929702a
   languageName: node
   linkType: hard
 
@@ -5972,23 +5977,23 @@ __metadata:
   languageName: node
   linkType: hard
 
-"typescript@npm:^5.0.2":
-  version: 5.0.2
-  resolution: "typescript@npm:5.0.2"
+"typescript@npm:^5.0.3":
+  version: 5.0.3
+  resolution: "typescript@npm:5.0.3"
   bin:
     tsc: bin/tsc
     tsserver: bin/tsserver
-  checksum: bef1dcd166acfc6934b2ec4d72f93edb8961a5fab36b8dd2aaf6f4f4cd5c0210f2e0850aef4724f3b4913d5aef203a94a28ded731b370880c8bcff7e4ff91fc1
+  checksum: 3cce0576d218cb4277ff8b6adfef1a706e9114a98b4261a38ad658a7642f1b274a8396394f6cbff8c0ba852996d7ed2e233e9b8431d5d55ac7c2f6fea645af02
   languageName: node
   linkType: hard
 
-"typescript@patch:typescript@^5.0.2#~builtin<compat/typescript>":
-  version: 5.0.2
-  resolution: "typescript@patch:typescript@npm%3A5.0.2#~builtin<compat/typescript>::version=5.0.2&hash=1f5320"
+"typescript@patch:typescript@^5.0.3#~builtin<compat/typescript>":
+  version: 5.0.3
+  resolution: "typescript@patch:typescript@npm%3A5.0.3#~builtin<compat/typescript>::version=5.0.3&hash=1f5320"
   bin:
     tsc: bin/tsc
     tsserver: bin/tsserver
-  checksum: bdbf3d0aac0d6cf010fbe0536753dc19f278eb4aba88140dcd25487dfe1c56ca8b33abc0dcd42078790a939b08ebc4046f3e9bb961d77d3d2c3cfa9829da4d53
+  checksum: 9ec0a8eed38d46cc2c8794555b7674e413604c56c159f71b8ff21ce7f17334a44127a68724cb2ef8221ff3b19369f8f05654e8a5266621d7d962aeed889bd630
   languageName: node
   linkType: hard
 

Some files were not shown because too many files changed in this diff