diff --git a/src/components/DevAreaTools/XmlFormatter.jsx b/src/components/DevAreaTools/XmlFormatter.jsx
new file mode 100644
index 0000000..9597705
--- /dev/null
+++ b/src/components/DevAreaTools/XmlFormatter.jsx
@@ -0,0 +1,76 @@
+import React, { useState } from "react";
+// import { button } from "@/components/ui/button";
+// import { textarea } from "@/components/ui/textarea";
+
+const XmlFormatter = () => {
+ const [input, setInput] = useState("");
+ const [output, setOutput] = useState("");
+
+ const formatXml = (xml) => {
+ try {
+ const PADDING = " ";
+ const reg = /(>)(<)(\/*)/g;
+ let formatted = "";
+ let pad = 0;
+
+ xml = xml.replace(reg, "$1\r\n$2$3");
+ xml.split("\r\n").forEach((node) => {
+ let indent = 0;
+ if (node.match(/.+<\/\w[^>]*>$/)) indent = 0;
+ else if (node.match(/^<\/\w/)) {
+ if (pad !== 0) pad -= 1;
+ } else if (node.match(/^<\w[^>]*[^\/]>.*$/)) indent = 1;
+ formatted += PADDING.repeat(pad) + node + "\r\n";
+ pad += indent;
+ });
+ return formatted.trim();
+ } catch {
+ return "Invalid XML input.";
+ }
+ };
+
+ const handleFormat = () => {
+ try {
+ const parser = new DOMParser();
+ const xmlDoc = parser.parseFromString(input, "application/xml");
+ const parseError = xmlDoc.getElementsByTagName("parsererror");
+ if (parseError.length) throw new Error("Invalid XML");
+ setOutput(formatXml(input));
+ } catch {
+ setOutput("❌ Invalid XML structure");
+ }
+ };
+
+ const handleClear = () => {
+ setInput("");
+ setOutput("");
+ };
+
+ return (
+
+ );
+};
+
+export default XmlFormatter;
diff --git a/src/index.css b/src/index.css
index 5126a8b..47b9333 100644
--- a/src/index.css
+++ b/src/index.css
@@ -597,4 +597,19 @@ html {
margin-top: 5px;
padding: 5px;
background-color: rgba(255, 255, 255, 0.2);
+}
+
+textarea, input {
+ background: #010201;
+ border: none;
+ width: 100%;
+ border-radius: 10px;
+ border: 1px solid #ffffff40 !important;
+ color: white;
+ padding-inline: 20px;
+ padding-top: 10px;
+ font-size: 18px;
+}
+textarea:focus, input:focus {
+ outline: none;
}
\ No newline at end of file
diff --git a/src/pages/DevArea/DevTools.jsx b/src/pages/DevArea/DevTools.jsx
index 92d294e..a421b86 100644
--- a/src/pages/DevArea/DevTools.jsx
+++ b/src/pages/DevArea/DevTools.jsx
@@ -4,6 +4,7 @@ import MarkDownEditor from "../../components/DevAreaTools/MarkDownEditor";
import JSONFormatter from "../../components/DevAreaTools/JSONFormatter";
import JWTDecoder from "../../components/DevAreaTools/JwtDecoder";
import URLEncoderDecoder from "../../components/DevAreaTools/URLEncoderDecoder";
+import XmlFormatter from "../../components/DevAreaTools/XmlFormatter";
const DevTools = () => {
const { tool } = useParams();
@@ -13,6 +14,7 @@ const DevTools = () => {
jwtdecoder: ,
"json-formatter": ,
"url-encoder-decoder": ,
+ "xml-formatter": ,
}
diff --git a/src/pages/DevArea/index.jsx b/src/pages/DevArea/index.jsx
index 9311ad1..7c9fda9 100644
--- a/src/pages/DevArea/index.jsx
+++ b/src/pages/DevArea/index.jsx
@@ -34,7 +34,7 @@ const DevArea = () => {
{
name: "XML Formatter",
link: "/devarea/xml-formatter",
- isAvailable: false
+ isAvailable: true
},
{
name: "YAML Formatter",