function createInput(input) {
			const {
				id,
				required,
				type,
				match,
				value,
				placeholder,
				hints,
				name,
				disabled,
				onclick,
				onchange,
				readOnly,
				autofocus,
				hidden,
			} = input;

			const inputType = type === "textarea" ? "textarea" : "input";
			let _type = type === "filename" ? "text" : type || "text";

			let $input;

			if (_type === "checkbox" || _type === "radio") {
				$input = Checkbox(placeholder, value, name, id, type);
			} else {
				$input = tag(inputType, {
					id,
					placeholder,
					value: value,
					className: "input",
					isRequired: required,
					readOnly,
					autofocus,
					hidden,
				});

				if (value) {
					setTimeout(() => {
						$input.scrollLeft = $input.scrollWidth;
					}, 0);
				}

				if (disabled) $input.disabled = true;
				if (hints) inputhints($input, hints);

				if (inputType === "textarea") {
					$input.rows = 1;
					$input.inputMode = _type;
					autosize($input);
				} else {
					$input.type = _type;
				}

				$input.oninput = function () {
					if (match && !match.test(this.value)) {
						okBtn.disabled = true;
						$promptDiv.insertBefore($errorMessage, $input.nextElementSibling);
						$errorMessage.textContent = strings["invalid value"];
					} else {
						okBtn.disabled = false;
						$errorMessage.textContent = "";
					}
				};

				$input.onfocus = function () {
					this.select();
				};
			}

			Object.defineProperty($input, "prompt", {
				value: { $body, hide },
			});

			if (onclick) $input.onclick = onclick.bind($input);
			if (onchange) $input.onchange = onchange.bind($input);

			return $input;
		}
Creates an input
@param {Input} input Input object
@returns {HTMLInputElement|HTMLTextAreaElement}