فهرست منبع

UI fixes (#3146)

- Fix modals not working
- Fix page scrolling on mobile when "Advanced Options" tapped
- Fix some ESLint warnings
- Fix spinner alignment
- Improve debug panel toggle
- Tidy some CSS
- Bump some Node deps
Alec Rust 3 سال پیش
والد
کامیت
c88bf5e179

+ 4 - 4
package.json

@@ -23,8 +23,8 @@
 	},
 	"devDependencies": {
 		"@prettier/plugin-php": "^0.19.2",
-		"@typescript-eslint/eslint-plugin": "^5.46.0",
-		"@typescript-eslint/parser": "^5.46.0",
+		"@typescript-eslint/eslint-plugin": "^5.46.1",
+		"@typescript-eslint/parser": "^5.46.1",
 		"cssnano": "^5.1.14",
 		"eslint": "^8.29.0",
 		"eslint-config-prettier": "^8.5.0",
@@ -32,7 +32,7 @@
 		"husky": "^8.0.2",
 		"lint-staged": "^13.1.0",
 		"markdownlint-cli2": "^0.5.1",
-		"postcss": "^8.4.19",
+		"postcss": "^8.4.20",
 		"postcss-cli": "^10.1.0",
 		"postcss-import": "^15.1.0",
 		"postcss-preset-env": "^7.8.3",
@@ -45,7 +45,7 @@
 		"stylelint-config-prettier": "^9.0.4",
 		"stylelint-config-standard": "^29.0.0",
 		"typescript": "^4.9.4",
-		"vitepress": "1.0.0-alpha.30",
+		"vitepress": "1.0.0-alpha.31",
 		"vue": "^3.2.45"
 	}
 }

+ 19 - 19
web/css/src/themes/dark.css

@@ -185,25 +185,6 @@ strong {
 	}
 }
 
-/* Inline alerts
-   ========================================================================== */
-
-.inline-danger {
-	color: #f33;
-}
-
-.inline-success {
-	color: #53ba55;
-
-	& a {
-		color: #fff;
-
-		&:hover {
-			color: #ff3478;
-		}
-	}
-}
-
 /* Toolbar
    ========================================================================== */
 
@@ -962,6 +943,25 @@ form#vstobjects.suspended {
 	color: #fff;
 }
 
+/* Inline alerts
+   ========================================================================== */
+
+.inline-danger {
+	color: #f33;
+}
+
+.inline-success {
+	color: #53ba55;
+
+	& a {
+		color: #fff;
+
+		&:hover {
+			color: #ff3478;
+		}
+	}
+}
+
 /* Debug panel
    ========================================================================== */
 

+ 238 - 243
web/css/src/themes/default.css

@@ -531,110 +531,6 @@
 	}
 }
 
-/* Alerts
-   ========================================================================== */
-
-.alert {
-	border-radius: 4px;
-	border: 1px solid var(--alert-border-color);
-	color: #fff;
-	font-weight: 400;
-	padding: 15px;
-	box-shadow: var(--alert-box-shadow);
-	text-shadow: var(--alert-text-shadow);
-
-	& a {
-		color: #fff;
-		font-weight: bold;
-
-		&:hover {
-			text-decoration: underline;
-		}
-	}
-
-	& .fas {
-		flex-shrink: 0;
-		size: 32px;
-		font-size: 1.3rem;
-		font-weight: 600;
-		line-height: 30px;
-		border-radius: 50%;
-		text-align: center;
-		background-color: #fff;
-		margin-bottom: 10px;
-	}
-
-	@media (--viewport-small) {
-		display: flex;
-
-		& .fas {
-			margin-right: 15px;
-			margin-bottom: 0;
-		}
-	}
-}
-
-.alert-info {
-	background-color: var(--alert-info-color);
-
-	& .fas {
-		color: var(--alert-info-color);
-	}
-}
-
-.alert-danger {
-	background-color: var(--alert-danger-color);
-
-	& .fas {
-		color: var(--alert-danger-color);
-	}
-}
-
-.alert-success {
-	background-color: var(--alert-success-color);
-
-	& .fas {
-		color: var(--alert-success-color);
-	}
-}
-
-/* Inline alerts
-   ========================================================================== */
-
-.inline-danger {
-	color: #f33;
-	font-weight: 600;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-
-	& .fas {
-		margin-right: 3px;
-	}
-}
-
-.inline-success {
-	color: #53ba55;
-	font-weight: 600;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-
-	& .fas {
-		margin-right: 3px;
-	}
-
-	& a {
-		color: #326b9b;
-
-		&:hover {
-			color: #c36;
-		}
-
-		&:active {
-			color: #d53067;
-		}
-	}
-}
-
 /* Toolbar
    ========================================================================== */
 
@@ -1539,138 +1435,6 @@
 	padding-right: 4px;
 }
 
-/* Spinner
-   ========================================================================== */
-
-.spinner {
-	-webkit-mask-box-image: radial-gradient(
-		center,
-		ellipse farthest-corner,
-		rgb(0 0 0 / 100%) 68%,
-		rgb(0 0 0 / 0%) 69.5%
-	);
-	background: #eee;
-	size: 20px;
-	position: relative;
-	margin: 4px 0 2px 2px;
-	clip-path: ellipse(10px 10px at 50% 50%);
-}
-
-.spinner-inner {
-	position: absolute;
-	top: 0;
-	left: 0;
-	background: transparent;
-	border-width: 10px;
-	size: 0;
-	border-style: solid;
-	border-color: transparent;
-	border-top-color: rgb(124 124 124 / 100%);
-	transform: rotate(-45deg);
-	animation: inner 15s linear infinite;
-}
-
-.spinner-mask {
-	position: absolute;
-	top: 0;
-	left: 0;
-	background: transparent;
-	border-width: 10px;
-	size: 0;
-	border-style: solid;
-	border-color: transparent;
-	border-top-color: #eee;
-	transform: rotate(-45deg);
-	animation: mask 15s linear infinite;
-}
-
-.spinner-mask::after,
-.spinner-mask-two {
-	display: block;
-	content: "";
-	opacity: 0;
-	position: absolute;
-	top: 0;
-	left: 0;
-	background: transparent;
-	border-width: 10px;
-	size: 0;
-	border-style: solid;
-	border-color: transparent;
-	border-top-color: rgb(124 124 124 / 100%);
-	transform: rotate(45deg);
-	animation: mask-two 15s linear infinite;
-}
-
-@keyframes inner {
-	0% {
-		transform: rotate(-45deg);
-	}
-
-	25% {
-		border-left-color: transparent;
-	}
-
-	26% {
-		border-left-color: rgb(124 124 124 / 100%);
-	}
-
-	50% {
-		border-bottom-color: transparent;
-	}
-
-	51% {
-		border-bottom-color: rgb(124 124 124 / 100%);
-	}
-
-	75% {
-		border-right-color: transparent;
-	}
-
-	76% {
-		border-right-color: rgb(124 124 124 / 100%);
-	}
-
-	100% {
-		transform: rotate(315deg);
-		border-left-color: rgb(124 124 124 / 100%);
-		border-bottom-color: rgb(124 124 124 / 100%);
-		border-right-color: rgb(124 124 124 / 100%);
-	}
-}
-
-@keyframes mask {
-	0% {
-		transform: rotate(-45deg);
-	}
-
-	75% {
-		transform: rotate(-45deg);
-	}
-
-	100% {
-		transform: rotate(45deg);
-	}
-}
-
-@keyframes mask-two {
-	0% {
-		opacity: 0;
-	}
-
-	25% {
-		opacity: 0;
-	}
-
-	26% {
-		opacity: 1;
-	}
-
-	100% {
-		opacity: 1;
-	}
-}
-
 /* Forms
    ========================================================================== */
 
@@ -2355,6 +2119,137 @@
 	}
 }
 
+/* Spinner
+   ========================================================================== */
+
+.spinner {
+	-webkit-mask-box-image: radial-gradient(
+		center,
+		ellipse farthest-corner,
+		rgb(0 0 0 / 100%) 68%,
+		rgb(0 0 0 / 0%) 69.5%
+	);
+	background: #eee;
+	size: 20px;
+	position: relative;
+	clip-path: ellipse(10px 10px at 50% 50%);
+}
+
+.spinner-inner {
+	position: absolute;
+	top: 0;
+	left: 0;
+	background: transparent;
+	border-width: 10px;
+	size: 0;
+	border-style: solid;
+	border-color: transparent;
+	border-top-color: rgb(124 124 124 / 100%);
+	transform: rotate(-45deg);
+	animation: inner 15s linear infinite;
+}
+
+.spinner-mask {
+	position: absolute;
+	top: 0;
+	left: 0;
+	background: transparent;
+	border-width: 10px;
+	size: 0;
+	border-style: solid;
+	border-color: transparent;
+	border-top-color: #eee;
+	transform: rotate(-45deg);
+	animation: mask 15s linear infinite;
+}
+
+.spinner-mask::after,
+.spinner-mask-two {
+	display: block;
+	content: "";
+	opacity: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	background: transparent;
+	border-width: 10px;
+	size: 0;
+	border-style: solid;
+	border-color: transparent;
+	border-top-color: rgb(124 124 124 / 100%);
+	transform: rotate(45deg);
+	animation: mask-two 15s linear infinite;
+}
+
+@keyframes inner {
+	0% {
+		transform: rotate(-45deg);
+	}
+
+	25% {
+		border-left-color: transparent;
+	}
+
+	26% {
+		border-left-color: rgb(124 124 124 / 100%);
+	}
+
+	50% {
+		border-bottom-color: transparent;
+	}
+
+	51% {
+		border-bottom-color: rgb(124 124 124 / 100%);
+	}
+
+	75% {
+		border-right-color: transparent;
+	}
+
+	76% {
+		border-right-color: rgb(124 124 124 / 100%);
+	}
+
+	100% {
+		transform: rotate(315deg);
+		border-left-color: rgb(124 124 124 / 100%);
+		border-bottom-color: rgb(124 124 124 / 100%);
+		border-right-color: rgb(124 124 124 / 100%);
+	}
+}
+
+@keyframes mask {
+	0% {
+		transform: rotate(-45deg);
+	}
+
+	75% {
+		transform: rotate(-45deg);
+	}
+
+	100% {
+		transform: rotate(45deg);
+	}
+}
+
+@keyframes mask-two {
+	0% {
+		opacity: 0;
+	}
+
+	25% {
+		opacity: 0;
+	}
+
+	26% {
+		opacity: 1;
+	}
+
+	100% {
+		opacity: 1;
+	}
+}
+
 .qr-code {
 	border: 1px solid #cfcfcf;
 	border-radius: 4px;
@@ -2393,12 +2288,6 @@ form#vstobjects.suspended {
 	padding-bottom: 30px;
 }
 
-#add-icon {
-	size: 45px;
-	display: inline-block;
-	z-index: 3;
-}
-
 #tooltip {
 	background-color: #3b9de8;
 	border-radius: 15px;
@@ -2641,6 +2530,110 @@ form#vstobjects.suspended {
 	}
 }
 
+/* Alerts
+   ========================================================================== */
+
+.alert {
+	border-radius: 4px;
+	border: 1px solid var(--alert-border-color);
+	color: #fff;
+	font-weight: 400;
+	padding: 15px;
+	box-shadow: var(--alert-box-shadow);
+	text-shadow: var(--alert-text-shadow);
+
+	& a {
+		color: #fff;
+		font-weight: bold;
+
+		&:hover {
+			text-decoration: underline;
+		}
+	}
+
+	& .fas {
+		flex-shrink: 0;
+		size: 32px;
+		font-size: 1.3rem;
+		font-weight: 600;
+		line-height: 30px;
+		border-radius: 50%;
+		text-align: center;
+		background-color: #fff;
+		margin-bottom: 10px;
+	}
+
+	@media (--viewport-small) {
+		display: flex;
+
+		& .fas {
+			margin-right: 15px;
+			margin-bottom: 0;
+		}
+	}
+}
+
+.alert-info {
+	background-color: var(--alert-info-color);
+
+	& .fas {
+		color: var(--alert-info-color);
+	}
+}
+
+.alert-danger {
+	background-color: var(--alert-danger-color);
+
+	& .fas {
+		color: var(--alert-danger-color);
+	}
+}
+
+.alert-success {
+	background-color: var(--alert-success-color);
+
+	& .fas {
+		color: var(--alert-success-color);
+	}
+}
+
+/* Inline alerts
+		========================================================================== */
+
+.inline-danger {
+	color: #f33;
+	font-weight: 600;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+
+	& .fas {
+		margin-right: 3px;
+	}
+}
+
+.inline-success {
+	color: #53ba55;
+	font-weight: 600;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+
+	& .fas {
+		margin-right: 3px;
+	}
+
+	& a {
+		color: #326b9b;
+
+		&:hover {
+			color: #c36;
+		}
+
+		&:active {
+			color: #d53067;
+		}
+	}
+}
+
 /* Updates banner
    ========================================================================== */
 
@@ -2675,7 +2668,7 @@ form#vstobjects.suspended {
 	bottom: 0;
 	left: 0;
 	width: 100%;
-	z-index: 4;
+	z-index: 3;
 	box-shadow: 0 0 5px rgb(0 0 0 / 40%);
 
 	@media (--viewport-medium) {
@@ -2685,6 +2678,8 @@ form#vstobjects.suspended {
 
 .debug-panel-toggle {
 	display: block;
+	width: 100%;
+	border: 0;
 	text-align: center;
 	font-size: 0.8rem;
 	font-weight: 500;

+ 5 - 9
web/css/src/themes/vestia.css

@@ -133,6 +133,10 @@ strong {
 	box-shadow: none;
 }
 
+.l-unit__name {
+	letter-spacing: 0 !important;
+}
+
 /* Buttons
    ========================================================================== */
 
@@ -369,15 +373,11 @@ strong {
 	margin-right: 0;
 }
 
-.l-unit__name {
-	letter-spacing: 0 !important;
-}
-
 /* Badge component
    ========================================================================== */
 
 .badge {
-	border: none;
+	border-color: #eaeaea;
 	box-shadow: none;
 	border-radius: 4px;
 }
@@ -396,10 +396,6 @@ strong {
 	color: #b5da0b;
 }
 
-.badge.gray {
-	border: 1px solid rgb(255 255 255 / 40%) !important;
-}
-
 /* Panel component
    ========================================================================== */
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
web/css/themes/dark.min.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
web/css/themes/default.min.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
web/css/themes/vestia.min.css


+ 37 - 37
web/js/events.js

@@ -44,43 +44,6 @@ const VE = {
 			menu_selector: '.main-menu-item',
 			menu_active_selector: '.active',
 		},
-		/**
-		 * Create dialog box on the fly
-		 * @param elm Element which contains the dialog contents
-		 * @param dialog_title
-		 * @param confirmed_location_url URL that will be redirected to if user hit "OK"
-		 * @param custom_config Custom configuration parameters passed to dialog initialization (optional)
-		 */
-		createConfirmationDialog: (elm, dialog_title, confirmed_location_url, custom_config) => {
-			custom_config = custom_config ?? {};
-			const default_config = {
-				modal: true,
-				//autoOpen: true,
-				resizable: false,
-				width: 360,
-				title: dialog_title,
-				close: function () {
-					$(this).dialog('destroy');
-				},
-				buttons: {
-					OK: function (event, ui) {
-						location.href = confirmed_location_url;
-					},
-					Cancel: function () {
-						$(this).dialog('close');
-					},
-				},
-				create: function () {
-					const buttonGroup = $(this).closest('.ui-dialog').find('.ui-dialog-buttonset');
-					buttonGroup.find('button:first').addClass('button submit');
-					buttonGroup.find('button:last').addClass('button button-secondary cancel');
-				},
-			};
-
-			const reference_copied = $(elm[0]).clone();
-			const config = { ...default_config, ...custom_config };
-			$(reference_copied).dialog(config);
-		},
 		enter_focused: () => {
 			if ($('.units').hasClass('active')) {
 				location.href = $(
@@ -229,6 +192,43 @@ const VE = {
 		},
 	},
 	helpers: {
+		/**
+		 * Create dialog box on the fly
+		 * @param elm Element which contains the dialog contents
+		 * @param dialog_title
+		 * @param confirmed_location_url URL that will be redirected to if user hit "OK"
+		 * @param custom_config Custom configuration parameters passed to dialog initialization (optional)
+		 */
+		createConfirmationDialog: (elm, dialog_title, confirmed_location_url, custom_config) => {
+			custom_config = custom_config ?? {};
+			const default_config = {
+				modal: true,
+				//autoOpen: true,
+				resizable: false,
+				width: 360,
+				title: dialog_title,
+				close: function () {
+					$(this).dialog('destroy');
+				},
+				buttons: {
+					OK: function () {
+						location.href = confirmed_location_url;
+					},
+					Cancel: function () {
+						$(this).dialog('close');
+					},
+				},
+				create: function () {
+					const buttonGroup = $(this).closest('.ui-dialog').find('.ui-dialog-buttonset');
+					buttonGroup.find('button:first').addClass('button submit');
+					buttonGroup.find('button:last').addClass('button button-secondary cancel');
+				},
+			};
+
+			const reference_copied = $(elm[0]).clone();
+			const config = { ...default_config, ...custom_config };
+			$(reference_copied).dialog(config);
+		},
 		warn: (msg) => {
 			alert('WARNING: ' + msg);
 		},

+ 2 - 0
web/js/main.js

@@ -1,3 +1,4 @@
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
 const Cookies = {
 	/**
 	 * Creates a cookie.
@@ -52,6 +53,7 @@ const Cookies = {
  * @throws {Error} if length is too small to create a "sufficiently secure" string
  * @returns {string}
  */
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
 function randomString(length = 16) {
 	const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
 

+ 2 - 3
web/js/pages/add_mail_acc.js

@@ -54,7 +54,7 @@ App.Listeners.MAIL_ACC.init = function () {
 // Trigger listeners
 App.Listeners.MAIL_ACC.init();
 App.Listeners.MAIL_ACC.checkbox_unlimited_feature();
-$('#v_blackhole').on('click', function (evt) {
+$('#v_blackhole').on('click', function () {
 	if ($('#v_blackhole').is(':checked')) {
 		$('#v_fwd').prop('disabled', true);
 		$('#v_fwd_for').prop('checked', true);
@@ -64,7 +64,7 @@ $('#v_blackhole').on('click', function (evt) {
 		$('#id_fwd_for').show();
 	}
 });
-$('form[name="v_quota"]').on('submit', function (evt) {
+$('form[name="v_quota"]').on('submit', function () {
 	$('input:disabled').each(function (i, elm) {
 		$(elm).attr('disabled', false);
 		if (Alpine.store('globals').isUnlimitedValue($(elm).val())) {
@@ -122,7 +122,6 @@ applyRandomPassword = function (min_length = 16) {
 generate_mail_credentials = function () {
 	var div = $('.js-mail-info').clone();
 	div.find('#mail_configuration').remove();
-	var pass = $('.js-password-output').text();
 	var output = div.text();
 	output = output.replace(/(?:\r\n|\r|\n|\t)/g, '|');
 	output = output.replace(/ {2}/g, '');

+ 1 - 1
web/js/pages/add_package.js

@@ -55,7 +55,7 @@ App.Listeners.PACKAGE.init = function () {
 // Trigger listeners
 App.Listeners.PACKAGE.init();
 App.Listeners.PACKAGE.checkbox_unlimited_feature();
-$('form[name="v_add_package"]').on('submit', function (evt) {
+$('form[name="v_add_package"]').on('submit', function () {
 	$('input:disabled').each(function (i, elm) {
 		$(elm).attr('disabled', false);
 		if (Alpine.store('globals').isUnlimitedValue($(elm).val())) {

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

@@ -37,11 +37,9 @@ App.Listeners.WEB.keypress_ftp_username = function () {
 };
 
 App.Listeners.WEB.keypress_domain_name = function () {
-	$('#v_domain').bind('keypress input', function (evt) {
+	$('#v_domain').bind('keypress input', function () {
 		clearTimeout(window.frp_usr_tmt);
 		window.frp_usr_tmt = setTimeout(function () {
-			//var elm = $(evt.target);
-			//App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val());
 			var domain = $('.js-ftp-path-prefix').text(
 				Alpine.store('globals').FTP_USER_PREPATH + '/' + $('#v_domain').val()
 			);
@@ -99,7 +97,7 @@ function WEBrandom() {
 	document.v_add_web.v_stats_password.value = randomString(16);
 }
 
-$('#vstobjects').on('submit', function (evt) {
+document.getElementById('vstobjects').addEventListener('submit', function () {
 	$('input[disabled]').each(function (i, elm) {
 		$(elm).removeAttr('disabled');
 	});

+ 1 - 1
web/js/pages/edit_mail.js

@@ -1,4 +1,4 @@
-$('#vstobjects').on('submit', function (evt) {
+document.getElementById('vstobjects').addEventListener('submit', function () {
 	$('input[disabled]').each(function (i, elm) {
 		var copy_elm = $(elm).clone(true);
 		$(copy_elm).attr('type', 'hidden');

+ 1 - 1
web/js/pages/edit_mail_acc.js

@@ -87,7 +87,7 @@ App.Listeners.MAIL_ACC.keypress_v_password = function () {
 	});
 };
 
-$('#v_blackhole').on('click', function (evt) {
+$('#v_blackhole').on('click', function () {
 	if ($('#v_blackhole').is(':checked')) {
 		$('#v_fwd').prop('disabled', true);
 		$('#v_fwd_for').prop('checked', true);

+ 1 - 1
web/js/pages/edit_package.js

@@ -55,7 +55,7 @@ App.Listeners.PACKAGE.init = function () {
 // Trigger listeners
 App.Listeners.PACKAGE.init();
 App.Listeners.PACKAGE.checkbox_unlimited_feature();
-$('form[name="v_edit_package"]').on('submit', function (evt) {
+$('form[name="v_edit_package"]').on('submit', function () {
 	$('input:disabled').each(function (i, elm) {
 		$(elm).attr('disabled', false);
 		if (Alpine.store('globals').isUnlimitedValue($(elm).val())) {

+ 3 - 3
web/js/pages/edit_user.js

@@ -1,7 +1,7 @@
-function applyRandomPassword(min_length = 16) {
-	document.querySelector('input[name=v_password]').value = randomString(min_length);
+applyRandomPassword = function (min_length = 16) {
+	$('input[name=v_password]').val(randomString(min_length));
 	App.Actions.WEB.update_password_meter();
-}
+};
 
 App.Actions.WEB.update_password_meter = () => {
 	/**

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

@@ -22,6 +22,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();
+
 	ref.bind('change select', function (evt) {
 		clearTimeout(window.frp_usr_tmt);
 		window.frp_usr_tmt = setTimeout(function () {
@@ -254,7 +255,7 @@ $(function () {
 		}
 	});
 
-	$('#vstobjects').on('submit', function (evt) {
+	document.getElementById('vstobjects').addEventListener('submit', function () {
 		$('input[disabled]').each(function (i, elm) {
 			var copy_elm = $(elm).clone(true);
 			$(copy_elm).attr('type', 'hidden');

+ 1 - 0
web/js/pages/list_ssl.js

@@ -1,3 +1,4 @@
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
 function saveTextToBlob(file, element) {
 	const downloadLink = document.createElement('a');
 	downloadLink.style.display = 'none';

+ 1 - 0
web/js/pages/setup_webapp.js

@@ -1,3 +1,4 @@
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
 function applyRandomStringToTarget(target, min_length = 16) {
 	document.querySelector(`#${target}`).value = randomString(min_length);
 }

+ 4 - 2
web/templates/pages/add_db.php

@@ -95,9 +95,11 @@
 					<input type="email" class="form-control" name="v_db_email" id="v_db_email" value="<?= htmlentities(trim($v_db_email, "'")) ?>">
 				</div>
 				<div class="u-mb20">
-					<a x-on:click="showAdvanced = !showAdvanced" class="button button-secondary"><?= _("Advanced options") ?></a>
+					<button x-on:click="showAdvanced = !showAdvanced" type="button" class="button button-secondary">
+						<?= _("Advanced options") ?>
+					</button>
 				</div>
-				<div x-cloak x-show="showAdvanced" id="advanced-opts">
+				<div x-cloak x-show="showAdvanced">
 					<div class="u-mb10">
 						<label for="v_host" class="form-label"><?= _("Host") ?></label>
 						<select class="form-select" name="v_host" id="v_host">

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

@@ -83,7 +83,9 @@
 					</div>
 				<?php } ?>
 				<div class="u-mb20 u-mt20">
-					<a x-on:click="showAdvanced = !showAdvanced" class="button button-secondary"><?= _("Advanced options") ?></a>
+					<button x-on:click="showAdvanced = !showAdvanced" type="button" class="button button-secondary">
+						<?= _("Advanced options") ?>
+					</button>
 				</div>
 				<div x-cloak  x-show="showAdvanced" id="advtable">
 					<div class="form-check u-mb10">

+ 3 - 1
web/templates/pages/add_mail_acc.php

@@ -59,7 +59,9 @@
 						<li><?= _("1 number") ?></li>
 					</ul>
 					<div class="u-pt18 u-mb20">
-						<a x-on:click="showAdvanced = !showAdvanced" class="button button-secondary"><?= _("Advanced options") ?></a>
+						<button x-on:click="showAdvanced = !showAdvanced" type="button" class="button button-secondary">
+							<?= _("Advanced options") ?>
+						</button>
 					</div>
 					<div x-cloak x-show="showAdvanced" id="advtable">
 						<div class="u-mb10">

+ 3 - 3
web/templates/pages/debug_panel.php

@@ -1,8 +1,8 @@
 <div x-data="{ open: false }" class="debug-panel">
-	<a x-on:click="open = !open" class="debug-panel-toggle">
+	<button x-on:click="open = !open" type="button" class="debug-panel-toggle">
 		<?= _("Toggle Debug Panel") ?>
-	</a>
-	<div x-cloak x-show="open" id="debug-panel-content" class="debug-panel-content animate__animated animate__fadeIn">
+	</button>
+	<div x-cloak x-show="open" class="debug-panel-content animate__animated animate__fadeIn">
 		<?php
 			echo "<h3 class=\"u-mb10\">Server Variables</h3>";
 			foreach ($_SERVER as $key => $val) {

+ 4 - 2
web/templates/pages/edit_user.php

@@ -219,9 +219,11 @@
 					</select>
 				</div>
 				<div class="u-mb20">
-					<a x-on:click="showAdvanced = !showAdvanced"href="#" class="button button-secondary"><?= _("Advanced options") ?></a>
+					<button x-on:click="showAdvanced = !showAdvanced" type="button" class="button button-secondary">
+						<?= _("Advanced options") ?>
+					</button>
 				</div>
-				<div x-cloak x-show="showAdvanced" id="advanced-opts">
+				<div x-cloak x-show="showAdvanced">
 					<div class="u-mb10">
 						<label for="v_shell" class="form-label"><?= _("SSH Access") ?></label>
 						<select class="form-select" name="v_shell" id="v_shell">

+ 4 - 2
web/templates/pages/edit_web.php

@@ -245,9 +245,11 @@
 				<?php } ?>
 			</div>
 			<div class="u-mt15 u-mb20">
-				<a x-on:click="showAdvanced = !showAdvanced" href="#" class="button button-secondary"><?= _("Advanced options") ?></a>
+				<button x-on:click="showAdvanced = !showAdvanced" type="button" class="button button-secondary">
+					<?= _("Advanced options") ?>
+				</button>
 			</div>
-			<div x-cloak x-show="showAdvanced" id="advanced-opts">
+			<div x-cloak x-show="showAdvanced">
 				<?php if (($_SESSION['userContext'] === 'admin') || ($_SESSION['userContext'] === 'user') && ($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] === 'yes')) { ?>
 					<div class="u-mb10">
 						<label for="v_template" class="form-label">

+ 299 - 286
yarn.lock

@@ -426,20 +426,160 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@esbuild/android-arm@npm:0.15.18":
-  version: 0.15.18
-  resolution: "@esbuild/android-arm@npm:0.15.18"
+"@esbuild/android-arm64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/android-arm64@npm:0.16.4"
+  conditions: os=android & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@esbuild/android-arm@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/android-arm@npm:0.16.4"
   conditions: os=android & cpu=arm
   languageName: node
   linkType: hard
 
-"@esbuild/linux-loong64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "@esbuild/linux-loong64@npm:0.15.18"
+"@esbuild/android-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/android-x64@npm:0.16.4"
+  conditions: os=android & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@esbuild/darwin-arm64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/darwin-arm64@npm:0.16.4"
+  conditions: os=darwin & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@esbuild/darwin-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/darwin-x64@npm:0.16.4"
+  conditions: os=darwin & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@esbuild/freebsd-arm64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/freebsd-arm64@npm:0.16.4"
+  conditions: os=freebsd & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@esbuild/freebsd-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/freebsd-x64@npm:0.16.4"
+  conditions: os=freebsd & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-arm64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-arm64@npm:0.16.4"
+  conditions: os=linux & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-arm@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-arm@npm:0.16.4"
+  conditions: os=linux & cpu=arm
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-ia32@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-ia32@npm:0.16.4"
+  conditions: os=linux & cpu=ia32
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-loong64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-loong64@npm:0.16.4"
   conditions: os=linux & cpu=loong64
   languageName: node
   linkType: hard
 
+"@esbuild/linux-mips64el@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-mips64el@npm:0.16.4"
+  conditions: os=linux & cpu=mips64el
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-ppc64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-ppc64@npm:0.16.4"
+  conditions: os=linux & cpu=ppc64
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-riscv64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-riscv64@npm:0.16.4"
+  conditions: os=linux & cpu=riscv64
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-s390x@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-s390x@npm:0.16.4"
+  conditions: os=linux & cpu=s390x
+  languageName: node
+  linkType: hard
+
+"@esbuild/linux-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/linux-x64@npm:0.16.4"
+  conditions: os=linux & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@esbuild/netbsd-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/netbsd-x64@npm:0.16.4"
+  conditions: os=netbsd & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@esbuild/openbsd-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/openbsd-x64@npm:0.16.4"
+  conditions: os=openbsd & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@esbuild/sunos-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/sunos-x64@npm:0.16.4"
+  conditions: os=sunos & cpu=x64
+  languageName: node
+  linkType: hard
+
+"@esbuild/win32-arm64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/win32-arm64@npm:0.16.4"
+  conditions: os=win32 & cpu=arm64
+  languageName: node
+  linkType: hard
+
+"@esbuild/win32-ia32@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/win32-ia32@npm:0.16.4"
+  conditions: os=win32 & cpu=ia32
+  languageName: node
+  linkType: hard
+
+"@esbuild/win32-x64@npm:0.16.4":
+  version: 0.16.4
+  resolution: "@esbuild/win32-x64@npm:0.16.4"
+  conditions: os=win32 & cpu=x64
+  languageName: node
+  linkType: hard
+
 "@eslint/eslintrc@npm:^1.3.3":
   version: 1.3.3
   resolution: "@eslint/eslintrc@npm:1.3.3"
@@ -626,13 +766,13 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@typescript-eslint/eslint-plugin@npm:^5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/eslint-plugin@npm:5.46.0"
+"@typescript-eslint/eslint-plugin@npm:^5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/eslint-plugin@npm:5.46.1"
   dependencies:
-    "@typescript-eslint/scope-manager": 5.46.0
-    "@typescript-eslint/type-utils": 5.46.0
-    "@typescript-eslint/utils": 5.46.0
+    "@typescript-eslint/scope-manager": 5.46.1
+    "@typescript-eslint/type-utils": 5.46.1
+    "@typescript-eslint/utils": 5.46.1
     debug: ^4.3.4
     ignore: ^5.2.0
     natural-compare-lite: ^1.4.0
@@ -645,43 +785,43 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 5b7dde66a3db3d3009c9da5c1357d72c19b94d75474d8f51b6ac765962aa181bf8fe88fcca02a70faaceb2ed5739f790313d1d521d77149cab94ab5e3a987cf3
+  checksum: 4ea4af5faa5c509113d575bf6ea1f76989f253b4839bb98bcda28450be7fc8a87788169e822b0f6d739aee67e32e824440ef00cebc294d4212ffb3fed1f0756a
   languageName: node
   linkType: hard
 
-"@typescript-eslint/parser@npm:^5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/parser@npm:5.46.0"
+"@typescript-eslint/parser@npm:^5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/parser@npm:5.46.1"
   dependencies:
-    "@typescript-eslint/scope-manager": 5.46.0
-    "@typescript-eslint/types": 5.46.0
-    "@typescript-eslint/typescript-estree": 5.46.0
+    "@typescript-eslint/scope-manager": 5.46.1
+    "@typescript-eslint/types": 5.46.1
+    "@typescript-eslint/typescript-estree": 5.46.1
     debug: ^4.3.4
   peerDependencies:
     eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 34e2e8fb35050ac119ed2696293ecd9a1b40c3ccc915d06b8d48880c6656e8f40665b969807b76058eb9198227481653f1d1465a89a4ac6a98bc7ab9850ada1f
+  checksum: 784fe3ae688da85784b271c10d1e0b807583f4c370e32aa7a09b2584d0f7b92316a93cccbd9458bdf08f169b220097a4b0456bc5f62a210607a13a5fae84c972
   languageName: node
   linkType: hard
 
-"@typescript-eslint/scope-manager@npm:5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/scope-manager@npm:5.46.0"
+"@typescript-eslint/scope-manager@npm:5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/scope-manager@npm:5.46.1"
   dependencies:
-    "@typescript-eslint/types": 5.46.0
-    "@typescript-eslint/visitor-keys": 5.46.0
-  checksum: 10d992a6f9bbe747a8fb5f8b02732e3a289d2667e32ea835de825efe7a841688e683ae1d15d250df84c2ada313b9a3f41c9c9b5ae924c3d9b90d73f23241ae7f
+    "@typescript-eslint/types": 5.46.1
+    "@typescript-eslint/visitor-keys": 5.46.1
+  checksum: bf934603dc9c7da71eb26f415d13018f2a96dbba193a773bc440a5c93828365f09bb3db9be55189dfbbace414c6c48d7fad246c0d9717dab4676d0d79d6d8676
   languageName: node
   linkType: hard
 
-"@typescript-eslint/type-utils@npm:5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/type-utils@npm:5.46.0"
+"@typescript-eslint/type-utils@npm:5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/type-utils@npm:5.46.1"
   dependencies:
-    "@typescript-eslint/typescript-estree": 5.46.0
-    "@typescript-eslint/utils": 5.46.0
+    "@typescript-eslint/typescript-estree": 5.46.1
+    "@typescript-eslint/utils": 5.46.1
     debug: ^4.3.4
     tsutils: ^3.21.0
   peerDependencies:
@@ -689,23 +829,23 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 96feae3b67b78bc74b916bb7c3c654c13c6f000fc1f6945709764010fb6644e7cbf7749faa6ab0562255197b49fbf7c28c9a5b558378fa74e2cd38aeddc459cb
+  checksum: a47f1b73ac773a7f33421a8e8f9bc6e047f55236e3257b2c9eaa04d18595ab6505129ffdab86685e9c3bef564091315a2347150cd6e61a511cc2160667458014
   languageName: node
   linkType: hard
 
-"@typescript-eslint/types@npm:5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/types@npm:5.46.0"
-  checksum: 162e2e7841369598d3018f315545e85b79e57cc2f9033770397dbbdab0c80d72a8ee791710d10570b70624b5f343f7f8fc7ffabaec62f708cd7bfc5b432ad595
+"@typescript-eslint/types@npm:5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/types@npm:5.46.1"
+  checksum: 91143d3304b8c70d69d9c8e5b7428cce3a222eacfbeb99e592d278668bcf998760731deae064a76157b9a0fc4911fe3178aa24e4ea6fe2ba68dd37113834c924
   languageName: node
   linkType: hard
 
-"@typescript-eslint/typescript-estree@npm:5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/typescript-estree@npm:5.46.0"
+"@typescript-eslint/typescript-estree@npm:5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/typescript-estree@npm:5.46.1"
   dependencies:
-    "@typescript-eslint/types": 5.46.0
-    "@typescript-eslint/visitor-keys": 5.46.0
+    "@typescript-eslint/types": 5.46.1
+    "@typescript-eslint/visitor-keys": 5.46.1
     debug: ^4.3.4
     globby: ^11.1.0
     is-glob: ^4.0.3
@@ -714,45 +854,45 @@ __metadata:
   peerDependenciesMeta:
     typescript:
       optional: true
-  checksum: 645f9fd65836019073fd7af5bfa0e4c3d47303deda0917c4d8fb6ed6790bebaaeb7020a7a104b96c5fda707eb20e248c38fc711cdc83439775c563ef9f169746
+  checksum: 21499b927b4118cd51e841b2e1b7e55621135f923f461b75dc8ca8442de38a82da5a0232dce5229e0266b6fc12d70696e0e912fcf1483d4c44f02e4cad39ed98
   languageName: node
   linkType: hard
 
-"@typescript-eslint/utils@npm:5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/utils@npm:5.46.0"
+"@typescript-eslint/utils@npm:5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/utils@npm:5.46.1"
   dependencies:
     "@types/json-schema": ^7.0.9
     "@types/semver": ^7.3.12
-    "@typescript-eslint/scope-manager": 5.46.0
-    "@typescript-eslint/types": 5.46.0
-    "@typescript-eslint/typescript-estree": 5.46.0
+    "@typescript-eslint/scope-manager": 5.46.1
+    "@typescript-eslint/types": 5.46.1
+    "@typescript-eslint/typescript-estree": 5.46.1
     eslint-scope: ^5.1.1
     eslint-utils: ^3.0.0
     semver: ^7.3.7
   peerDependencies:
     eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-  checksum: f4962a7d34f55c44b238df550d45aacbc7b8fcba7d172fd96ee17eb5ce964481e3e68376205598146f4f3aa69df7627686a9bd16022b51246d6e9fe94ffb2bb8
+  checksum: db9fd1dfb2390e66041f9529d564f38ccf74042de68e0e1e3d319ba4d02d7cd969d75dc056f938b98acab53ad7c1e36c68eabb15c0b2e2296b081652fa8d3820
   languageName: node
   linkType: hard
 
-"@typescript-eslint/visitor-keys@npm:5.46.0":
-  version: 5.46.0
-  resolution: "@typescript-eslint/visitor-keys@npm:5.46.0"
+"@typescript-eslint/visitor-keys@npm:5.46.1":
+  version: 5.46.1
+  resolution: "@typescript-eslint/visitor-keys@npm:5.46.1"
   dependencies:
-    "@typescript-eslint/types": 5.46.0
+    "@typescript-eslint/types": 5.46.1
     eslint-visitor-keys: ^3.3.0
-  checksum: 83ec2514b2469db395f006576c934bd60b21e74e2e67c183f8d9249954119c56074de286ce8c55d42e20b06d0083d4665f3baf0eed720712203796be488f0944
+  checksum: 952cf20e29a040e0820e52d6815097abf042ea8e1fd5d013c0a319284ea0e2e29e0ca9ef244717450a6eb9d32ebf7fa9ed91185675a27adc35c9ad070d561b7c
   languageName: node
   linkType: hard
 
-"@vitejs/plugin-vue@npm:^3.2.0":
-  version: 3.2.0
-  resolution: "@vitejs/plugin-vue@npm:3.2.0"
+"@vitejs/plugin-vue@npm:^4.0.0":
+  version: 4.0.0
+  resolution: "@vitejs/plugin-vue@npm:4.0.0"
   peerDependencies:
-    vite: ^3.0.0
+    vite: ^4.0.0
     vue: ^3.2.25
-  checksum: 64774f770e0e21ce7eb36743d614e3f197a35f5b67b2d3800c61766e649f43dc497bb037738ffafd607eb488064ab132c23766190e7ab557a0b88c0051f7a794
+  checksum: 5a53414912db644ca7a663d87c8d4838841dbf794772105c9b3bc3fb10214fc86c2f1f1a47350f264370e9a5fd2475f3b6882778b2440b5085d3fe7550ced542
   languageName: node
   linkType: hard
 
@@ -875,7 +1015,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@vueuse/core@npm:^9.4.0":
+"@vueuse/core@npm:^9.6.0":
   version: 9.6.0
   resolution: "@vueuse/core@npm:9.6.0"
   dependencies:
@@ -1273,9 +1413,9 @@ __metadata:
   linkType: hard
 
 "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400, caniuse-lite@npm:^1.0.30001426":
-  version: 1.0.30001436
-  resolution: "caniuse-lite@npm:1.0.30001436"
-  checksum: 7928ac7d93741a81b3005ca4623b133e7d790828be70b26ee55e4860facc59bc344f4092e20034981070a4714f70814c8be4929be4b22728031784f267f69099
+  version: 1.0.30001439
+  resolution: "caniuse-lite@npm:1.0.30001439"
+  checksum: 3912dd536c9735713ca85e47721988bbcefb881ddb4886b0b9923fa984247fd22cba032cf268e57d158af0e8a2ae2eae042ae01942a1d6d7849fa9fa5d62fb82
   languageName: node
   linkType: hard
 
@@ -1878,220 +2018,80 @@ __metadata:
   languageName: node
   linkType: hard
 
-"esbuild-android-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-android-64@npm:0.15.18"
-  conditions: os=android & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-android-arm64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-android-arm64@npm:0.15.18"
-  conditions: os=android & cpu=arm64
-  languageName: node
-  linkType: hard
-
-"esbuild-darwin-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-darwin-64@npm:0.15.18"
-  conditions: os=darwin & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-darwin-arm64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-darwin-arm64@npm:0.15.18"
-  conditions: os=darwin & cpu=arm64
-  languageName: node
-  linkType: hard
-
-"esbuild-freebsd-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-freebsd-64@npm:0.15.18"
-  conditions: os=freebsd & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-freebsd-arm64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-freebsd-arm64@npm:0.15.18"
-  conditions: os=freebsd & cpu=arm64
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-32@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-32@npm:0.15.18"
-  conditions: os=linux & cpu=ia32
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-64@npm:0.15.18"
-  conditions: os=linux & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-arm64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-arm64@npm:0.15.18"
-  conditions: os=linux & cpu=arm64
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-arm@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-arm@npm:0.15.18"
-  conditions: os=linux & cpu=arm
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-mips64le@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-mips64le@npm:0.15.18"
-  conditions: os=linux & cpu=mips64el
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-ppc64le@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-ppc64le@npm:0.15.18"
-  conditions: os=linux & cpu=ppc64
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-riscv64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-riscv64@npm:0.15.18"
-  conditions: os=linux & cpu=riscv64
-  languageName: node
-  linkType: hard
-
-"esbuild-linux-s390x@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-linux-s390x@npm:0.15.18"
-  conditions: os=linux & cpu=s390x
-  languageName: node
-  linkType: hard
-
-"esbuild-netbsd-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-netbsd-64@npm:0.15.18"
-  conditions: os=netbsd & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-openbsd-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-openbsd-64@npm:0.15.18"
-  conditions: os=openbsd & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-sunos-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-sunos-64@npm:0.15.18"
-  conditions: os=sunos & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-windows-32@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-windows-32@npm:0.15.18"
-  conditions: os=win32 & cpu=ia32
-  languageName: node
-  linkType: hard
-
-"esbuild-windows-64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-windows-64@npm:0.15.18"
-  conditions: os=win32 & cpu=x64
-  languageName: node
-  linkType: hard
-
-"esbuild-windows-arm64@npm:0.15.18":
-  version: 0.15.18
-  resolution: "esbuild-windows-arm64@npm:0.15.18"
-  conditions: os=win32 & cpu=arm64
-  languageName: node
-  linkType: hard
-
-"esbuild@npm:^0.15.9":
-  version: 0.15.18
-  resolution: "esbuild@npm:0.15.18"
-  dependencies:
-    "@esbuild/android-arm": 0.15.18
-    "@esbuild/linux-loong64": 0.15.18
-    esbuild-android-64: 0.15.18
-    esbuild-android-arm64: 0.15.18
-    esbuild-darwin-64: 0.15.18
-    esbuild-darwin-arm64: 0.15.18
-    esbuild-freebsd-64: 0.15.18
-    esbuild-freebsd-arm64: 0.15.18
-    esbuild-linux-32: 0.15.18
-    esbuild-linux-64: 0.15.18
-    esbuild-linux-arm: 0.15.18
-    esbuild-linux-arm64: 0.15.18
-    esbuild-linux-mips64le: 0.15.18
-    esbuild-linux-ppc64le: 0.15.18
-    esbuild-linux-riscv64: 0.15.18
-    esbuild-linux-s390x: 0.15.18
-    esbuild-netbsd-64: 0.15.18
-    esbuild-openbsd-64: 0.15.18
-    esbuild-sunos-64: 0.15.18
-    esbuild-windows-32: 0.15.18
-    esbuild-windows-64: 0.15.18
-    esbuild-windows-arm64: 0.15.18
+"esbuild@npm:^0.16.3":
+  version: 0.16.4
+  resolution: "esbuild@npm:0.16.4"
+  dependencies:
+    "@esbuild/android-arm": 0.16.4
+    "@esbuild/android-arm64": 0.16.4
+    "@esbuild/android-x64": 0.16.4
+    "@esbuild/darwin-arm64": 0.16.4
+    "@esbuild/darwin-x64": 0.16.4
+    "@esbuild/freebsd-arm64": 0.16.4
+    "@esbuild/freebsd-x64": 0.16.4
+    "@esbuild/linux-arm": 0.16.4
+    "@esbuild/linux-arm64": 0.16.4
+    "@esbuild/linux-ia32": 0.16.4
+    "@esbuild/linux-loong64": 0.16.4
+    "@esbuild/linux-mips64el": 0.16.4
+    "@esbuild/linux-ppc64": 0.16.4
+    "@esbuild/linux-riscv64": 0.16.4
+    "@esbuild/linux-s390x": 0.16.4
+    "@esbuild/linux-x64": 0.16.4
+    "@esbuild/netbsd-x64": 0.16.4
+    "@esbuild/openbsd-x64": 0.16.4
+    "@esbuild/sunos-x64": 0.16.4
+    "@esbuild/win32-arm64": 0.16.4
+    "@esbuild/win32-ia32": 0.16.4
+    "@esbuild/win32-x64": 0.16.4
   dependenciesMeta:
     "@esbuild/android-arm":
       optional: true
-    "@esbuild/linux-loong64":
+    "@esbuild/android-arm64":
       optional: true
-    esbuild-android-64:
+    "@esbuild/android-x64":
       optional: true
-    esbuild-android-arm64:
+    "@esbuild/darwin-arm64":
       optional: true
-    esbuild-darwin-64:
+    "@esbuild/darwin-x64":
       optional: true
-    esbuild-darwin-arm64:
+    "@esbuild/freebsd-arm64":
       optional: true
-    esbuild-freebsd-64:
+    "@esbuild/freebsd-x64":
       optional: true
-    esbuild-freebsd-arm64:
+    "@esbuild/linux-arm":
       optional: true
-    esbuild-linux-32:
+    "@esbuild/linux-arm64":
       optional: true
-    esbuild-linux-64:
+    "@esbuild/linux-ia32":
       optional: true
-    esbuild-linux-arm:
+    "@esbuild/linux-loong64":
       optional: true
-    esbuild-linux-arm64:
+    "@esbuild/linux-mips64el":
       optional: true
-    esbuild-linux-mips64le:
+    "@esbuild/linux-ppc64":
       optional: true
-    esbuild-linux-ppc64le:
+    "@esbuild/linux-riscv64":
       optional: true
-    esbuild-linux-riscv64:
+    "@esbuild/linux-s390x":
       optional: true
-    esbuild-linux-s390x:
+    "@esbuild/linux-x64":
       optional: true
-    esbuild-netbsd-64:
+    "@esbuild/netbsd-x64":
       optional: true
-    esbuild-openbsd-64:
+    "@esbuild/openbsd-x64":
       optional: true
-    esbuild-sunos-64:
+    "@esbuild/sunos-x64":
       optional: true
-    esbuild-windows-32:
+    "@esbuild/win32-arm64":
       optional: true
-    esbuild-windows-64:
+    "@esbuild/win32-ia32":
       optional: true
-    esbuild-windows-arm64:
+    "@esbuild/win32-x64":
       optional: true
   bin:
     esbuild: bin/esbuild
-  checksum: ec12682b2cb2d4f0669d0e555028b87a9284ca7f6a1b26e35e69a8697165b35cc682ad598abc70f0bbcfdc12ca84ef888caf5ceee389237862e8f8c17da85f89
+  checksum: c06e9b2e84f5c7cdb608fa15e5a241d155321097fe1362beab176bc8283f54ae2a9a7fcca741da2663ffb5fea98c6c47226edd22189d3effb14b457e46592d1b
   languageName: node
   linkType: hard
 
@@ -2574,11 +2574,11 @@ __metadata:
   linkType: hard
 
 "globals@npm:^13.15.0":
-  version: 13.18.0
-  resolution: "globals@npm:13.18.0"
+  version: 13.19.0
+  resolution: "globals@npm:13.19.0"
   dependencies:
     type-fest: ^0.20.2
-  checksum: 9fdaa74cfd5d4ac91319662f512c29b11d1d2deb9c8a20d3998097671deba83d195f20730b2345887de3ddab958a6fa68952feed9ae836ee4594a82ace62fdb4
+  checksum: a000dbd00bcf28f0941d8a29c3522b1c3b8e4bfe4e60e262c477a550c3cbbe8dbe2925a6905f037acd40f9a93c039242e1f7079c76b0fd184bc41dcc3b5c8e2e
   languageName: node
   linkType: hard
 
@@ -2589,7 +2589,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"globby@npm:13.1.2, globby@npm:^13.0.0":
+"globby@npm:13.1.2":
   version: 13.1.2
   resolution: "globby@npm:13.1.2"
   dependencies:
@@ -2616,6 +2616,19 @@ __metadata:
   languageName: node
   linkType: hard
 
+"globby@npm:^13.0.0":
+  version: 13.1.3
+  resolution: "globby@npm:13.1.3"
+  dependencies:
+    dir-glob: ^3.0.1
+    fast-glob: ^3.2.11
+    ignore: ^5.2.0
+    merge2: ^1.4.1
+    slash: ^4.0.0
+  checksum: 93f06e02002cdf368f7e3d55bd59e7b00784c7cc8fe92c7ee5082cc7171ff6109fda45e1c97a80bb48bc811dedaf7843c7c9186f5f84bde4883ab630e13c43df
+  languageName: node
+  linkType: hard
+
 "globjoin@npm:^0.1.4":
   version: 0.1.4
   resolution: "globjoin@npm:0.1.4"
@@ -2687,8 +2700,8 @@ __metadata:
   dependencies:
     "@fortawesome/fontawesome-free": ^6.2.1
     "@prettier/plugin-php": ^0.19.2
-    "@typescript-eslint/eslint-plugin": ^5.46.0
-    "@typescript-eslint/parser": ^5.46.0
+    "@typescript-eslint/eslint-plugin": ^5.46.1
+    "@typescript-eslint/parser": ^5.46.1
     cssnano: ^5.1.14
     eslint: ^8.29.0
     eslint-config-prettier: ^8.5.0
@@ -2697,7 +2710,7 @@ __metadata:
     lint-staged: ^13.1.0
     markdownlint-cli2: ^0.5.1
     normalize.css: ^8.0.1
-    postcss: ^8.4.19
+    postcss: ^8.4.20
     postcss-cli: ^10.1.0
     postcss-import: ^15.1.0
     postcss-preset-env: ^7.8.3
@@ -2710,7 +2723,7 @@ __metadata:
     stylelint-config-prettier: ^9.0.4
     stylelint-config-standard: ^29.0.0
     typescript: ^4.9.4
-    vitepress: 1.0.0-alpha.30
+    vitepress: 1.0.0-alpha.31
     vue: ^3.2.45
   languageName: unknown
   linkType: soft
@@ -3690,11 +3703,11 @@ __metadata:
   linkType: hard
 
 "node-sql-parser@npm:^4.4.0":
-  version: 4.6.1
-  resolution: "node-sql-parser@npm:4.6.1"
+  version: 4.6.2
+  resolution: "node-sql-parser@npm:4.6.2"
   dependencies:
     big-integer: ^1.6.48
-  checksum: 88b03f1a7e7f7ad39460a11f1c88fba63cff52b65770961bb3637441ce9f17fd221e2503523ef9b3f048554d3d1959af78f26313bab5c68835f72e0da2d29c79
+  checksum: 60895ccf7094346fd8a2134744de9c20fcb2d02e5708da750ec26a2d1de7992c048919367f7708e8918306266f1023457c63bcf7f5be016c99b58634e61c2e0a
   languageName: node
   linkType: hard
 
@@ -4782,14 +4795,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"postcss@npm:^8.1.10, postcss@npm:^8.4.18, postcss@npm:^8.4.19":
-  version: 8.4.19
-  resolution: "postcss@npm:8.4.19"
+"postcss@npm:^8.1.10, postcss@npm:^8.4.19, postcss@npm:^8.4.20":
+  version: 8.4.20
+  resolution: "postcss@npm:8.4.20"
   dependencies:
     nanoid: ^3.3.4
     picocolors: ^1.0.0
     source-map-js: ^1.0.2
-  checksum: 62782723a385f92b7525f66d29614624de7c5643855423db3a5efd9287e677650300192749adddbbb6734cea9b1d5f5fd4f6ea00ca3f9a95dbbb88f835f5ca64
+  checksum: 1a5609ea1c1b204f9c2974a0019ae9eef2d99bf645c2c9aac675166c4cb1005be7b5e2ba196160bc771f5d9ac896ed883f236f888c891e835e59d28fff6651aa
   languageName: node
   linkType: hard
 
@@ -5090,9 +5103,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"rollup@npm:^2.79.1":
-  version: 2.79.1
-  resolution: "rollup@npm:2.79.1"
+"rollup@npm:^3.7.0":
+  version: 3.7.3
+  resolution: "rollup@npm:3.7.3"
   dependencies:
     fsevents: ~2.3.2
   dependenciesMeta:
@@ -5100,7 +5113,7 @@ __metadata:
       optional: true
   bin:
     rollup: dist/bin/rollup
-  checksum: 6a2bf167b3587d4df709b37d149ad0300692cc5deb510f89ac7bdc77c8738c9546ae3de9322b0968e1ed2b0e984571f5f55aae28fa7de4cfcb1bc5402a4e2be6
+  checksum: b7703e806693919f1600fc937bccb5c0f39af38e1c9351c34ce4272bcc6f8742ddfc0f1d138d3ad3478b8048c51787f04b2464abb14b1f8655dd2b6a7102c43e
   languageName: node
   linkType: hard
 
@@ -5880,15 +5893,15 @@ __metadata:
   languageName: node
   linkType: hard
 
-"vite@npm:^3.2.3":
-  version: 3.2.5
-  resolution: "vite@npm:3.2.5"
+"vite@npm:^4.0.0":
+  version: 4.0.1
+  resolution: "vite@npm:4.0.1"
   dependencies:
-    esbuild: ^0.15.9
+    esbuild: ^0.16.3
     fsevents: ~2.3.2
-    postcss: ^8.4.18
+    postcss: ^8.4.20
     resolve: ^1.22.1
-    rollup: ^2.79.1
+    rollup: ^3.7.0
   peerDependencies:
     "@types/node": ">= 14"
     less: "*"
@@ -5914,26 +5927,26 @@ __metadata:
       optional: true
   bin:
     vite: bin/vite.js
-  checksum: ad35b7008c2b62a167d1d1a82f0a0c60fa457733f1969e9eedf0b0077f67a7ac74b4c9477e75a397895150f09b6551f0c17841c5b05c34d9fe302bb0b5dc28a8
+  checksum: c51bd7cb955973cce1c63e6d29ac25ea6f8920db6de2ca97f285c80cf9607649d87254d1fabd9aa5920149572a6220686b9e3bf6fd0851f7c86ec8522bba0098
   languageName: node
   linkType: hard
 
-"vitepress@npm:1.0.0-alpha.30":
-  version: 1.0.0-alpha.30
-  resolution: "vitepress@npm:1.0.0-alpha.30"
+"vitepress@npm:1.0.0-alpha.31":
+  version: 1.0.0-alpha.31
+  resolution: "vitepress@npm:1.0.0-alpha.31"
   dependencies:
     "@docsearch/css": ^3.3.0
     "@docsearch/js": ^3.3.0
-    "@vitejs/plugin-vue": ^3.2.0
+    "@vitejs/plugin-vue": ^4.0.0
     "@vue/devtools-api": ^6.4.5
-    "@vueuse/core": ^9.4.0
+    "@vueuse/core": ^9.6.0
     body-scroll-lock: 4.0.0-beta.0
     shiki: ^0.11.1
-    vite: ^3.2.3
-    vue: ^3.2.41
+    vite: ^4.0.0
+    vue: ^3.2.45
   bin:
     vitepress: bin/vitepress.js
-  checksum: c4572f1d5899916d28dc2e066091deea2e6ff4f0bda18df8a8073a4c4017face7253377c609baec53dd9adce82119a2a65786b730777127076d0667ce5c8ae84
+  checksum: ea99cc6cfdaf17648ea522e6865b4dc7f5433f1ec6af56e98229ee1025ab45986e09af0afe89469a81f7ee4b3fcc7546a9d1a66fe3bb710f31b6ccd9054081ff
   languageName: node
   linkType: hard
 
@@ -5967,7 +5980,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"vue@npm:^3.2.41, vue@npm:^3.2.45":
+"vue@npm:^3.2.45":
   version: 3.2.45
   resolution: "vue@npm:3.2.45"
   dependencies:

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است