Skip to content

Commit 098bfde

Browse files
committed
feat: update version to 2.3.0 and enhance dependencies
- Updated package version to 2.3.0 in package.json. - Upgraded Angular dependencies to version 20.3.9 and other related packages. - Added HTML/XML formatter service and component for formatting HTML and XML markup. - Updated route service to include new HTML formatter route. - Modified animated background component to increase particle count and adjust particle sizes. - Cleaned up CSS for animated background by removing geometric shapes styles. - Updated format view component to include HTML formatting description. - Updated sidebar component to reflect new version number. - Added new sitemap entries for HTML and TypeScript formats.
1 parent 7131b4f commit 098bfde

File tree

12 files changed

+1023
-2235
lines changed

12 files changed

+1023
-2235
lines changed

package-lock.json

Lines changed: 936 additions & 1991 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "utilplex",
3-
"version": "0.0.0",
3+
"version": "2.3.0",
44
"scripts": {
55
"ng": "ng",
66
"start": "ng serve",
@@ -14,17 +14,17 @@
1414
"private": true,
1515
"dependencies": {
1616
"@acrodata/code-editor": "^0.5.1",
17-
"@angular/animations": "^20.3.5",
18-
"@angular/common": "^20.3.5",
19-
"@angular/compiler": "^20.3.5",
20-
"@angular/core": "^20.3.5",
21-
"@angular/forms": "^20.3.5",
22-
"@angular/platform-browser": "^20.3.5",
23-
"@angular/platform-browser-dynamic": "^20.3.5",
24-
"@angular/platform-server": "^20.3.5",
25-
"@angular/router": "^20.3.5",
26-
"@angular/ssr": "^20.3.6",
27-
"@codemirror/commands": "^6.9.0",
17+
"@angular/animations": "^20.3.9",
18+
"@angular/common": "^20.3.9",
19+
"@angular/compiler": "^20.3.9",
20+
"@angular/core": "^20.3.9",
21+
"@angular/forms": "^20.3.9",
22+
"@angular/platform-browser": "^20.3.9",
23+
"@angular/platform-browser-dynamic": "^20.3.9",
24+
"@angular/platform-server": "^20.3.9",
25+
"@angular/router": "^20.3.9",
26+
"@angular/ssr": "^20.3.8",
27+
"@codemirror/commands": "^6.10.0",
2828
"@codemirror/lang-css": "^6.3.1",
2929
"@codemirror/lang-javascript": "^6.2.4",
3030
"@codemirror/lang-json": "^6.0.2",
@@ -34,11 +34,11 @@
3434
"@codemirror/language": "^6.11.3",
3535
"@codemirror/state": "^6.5.2",
3636
"@codemirror/view": "^6.38.6",
37-
"@lezer/highlight": "^1.2.1",
38-
"@ng-select/ng-select": "^20.3.1",
37+
"@lezer/highlight": "^1.2.3",
38+
"@ng-select/ng-select": "^20.6.1",
3939
"@stedi/prettier-plugin-jsonata": "^2.1.6",
4040
"codemirror": "^6.0.2",
41-
"express": "~4.21.2",
41+
"express": "~5.1.0",
4242
"js-yaml": "^4.1.0",
4343
"prettier": "^3.6.2",
4444
"rxjs": "~7.8.2",
@@ -47,21 +47,21 @@
4747
"zone.js": "~0.15.1"
4848
},
4949
"devDependencies": {
50-
"@angular-eslint/builder": "20.4.0",
51-
"@angular-eslint/schematics": "20.4.0",
52-
"@angular-eslint/template-parser": "20.4.0",
53-
"@angular/build": "^20.3.6",
54-
"@angular/cli": "~20.3.6",
55-
"@angular/compiler-cli": "^20.3.5",
56-
"@types/express": "~4.17.21",
57-
"@types/jasmine": "~5.1.11",
50+
"@angular-eslint/builder": "20.5.0",
51+
"@angular-eslint/schematics": "20.5.0",
52+
"@angular-eslint/template-parser": "20.5.0",
53+
"@angular/build": "^20.3.8",
54+
"@angular/cli": "~20.3.8",
55+
"@angular/compiler-cli": "^20.3.9",
56+
"@types/express": "~5.0.5",
57+
"@types/jasmine": "~5.1.12",
5858
"@types/js-yaml": "^4.0.9",
59-
"@types/node": "^24.7.2",
60-
"angular-eslint": "^20.4.0",
61-
"eslint": "^9.37.0",
59+
"@types/node": "^24.9.2",
60+
"angular-eslint": "^20.5.0",
61+
"eslint": "^9.38.0",
6262
"eslint-config-prettier": "^10.1.8",
6363
"eslint-plugin-prettier": "^5.5.4",
64-
"jasmine-core": "~5.12.0",
64+
"jasmine-core": "~5.12.1",
6565
"karma": "~6.4.4",
6666
"karma-chrome-launcher": "~3.2.0",
6767
"karma-coverage": "~2.2.1",
@@ -71,6 +71,6 @@
7171
"prettier-eslint": "^16.4.2",
7272
"style-loader": "^4.0.0",
7373
"typescript": "~5.9.3",
74-
"typescript-eslint": "^8.46.1"
74+
"typescript-eslint": "^8.46.2"
7575
}
7676
}

src/app/_services/route.service.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ export class RouteService {
8787
description: 'Format and beautify your SCSS/Sass code with proper indentation and structure.',
8888
loadComponent: () => import('../formatters/f-scss/f-scss.component').then((mod) => mod.FScssComponent),
8989
},
90+
{
91+
name: 'HTML',
92+
title: 'HTML/XML Formatter',
93+
url: '/format/html',
94+
description: 'Format and beautify your HTML and XML markup with proper indentation and structure.',
95+
loadComponent: () => import('../formatters/f-html/f-html.component').then((mod) => mod.FHtmlComponent),
96+
},
9097
],
9198
},
9299
{

src/app/app.component.scss

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -60,37 +60,13 @@ app-side-bar {
6060

6161

6262
.back {
63-
height: 100vh;
63+
min-height: 100vh;
6464
width: 100%;
6565
display: flex;
6666
flex-direction: column;
6767
margin: 0;
6868
position: relative;
6969
background: transparent;
70-
overflow: auto;
71-
72-
/* Custom Scrollbar */
73-
scrollbar-width: thin;
74-
scrollbar-color: rgba(139, 233, 253, 0.3) rgba(255, 255, 255, 0.05);
75-
}
76-
77-
.back::-webkit-scrollbar {
78-
width: 8px;
79-
}
80-
81-
.back::-webkit-scrollbar-track {
82-
background: rgba(255, 255, 255, 0.05);
83-
border-radius: 4px;
84-
}
85-
86-
.back::-webkit-scrollbar-thumb {
87-
background: rgba(139, 233, 253, 0.3);
88-
border-radius: 4px;
89-
transition: background 0.3s ease;
90-
}
91-
92-
.back::-webkit-scrollbar-thumb:hover {
93-
background: rgba(139, 233, 253, 0.5);
9470
}
9571

9672
/* Route Container */

src/app/components/animated-background/animated-background.component.scss

Lines changed: 0 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -18,163 +18,8 @@
1818
height: 100%;
1919
}
2020

21-
.geometric-shapes {
22-
position: absolute;
23-
top: 0;
24-
left: 0;
25-
width: 100%;
26-
height: 100%;
27-
}
28-
29-
.shape {
30-
position: absolute;
31-
border-radius: 50%;
32-
background: linear-gradient(45deg,
33-
rgba(80, 250, 123, 0.12) 0%,
34-
rgba(139, 233, 253, 0.12) 50%,
35-
rgba(255, 121, 198, 0.12) 100%);
36-
filter: blur(2px);
37-
animation: float 20s infinite ease-in-out;
38-
backdrop-filter: blur(1px);
39-
}
40-
41-
.shape-1 {
42-
width: 300px;
43-
height: 300px;
44-
top: 10%;
45-
left: 10%;
46-
animation-delay: 0s;
47-
animation-duration: 25s;
48-
}
49-
50-
.shape-2 {
51-
width: 200px;
52-
height: 200px;
53-
top: 20%;
54-
right: 15%;
55-
animation-delay: -5s;
56-
animation-duration: 30s;
57-
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
58-
background: linear-gradient(135deg,
59-
rgba(139, 233, 253, 0.1) 0%,
60-
rgba(80, 250, 123, 0.1) 100%);
61-
}
62-
63-
.shape-3 {
64-
width: 150px;
65-
height: 150px;
66-
bottom: 20%;
67-
left: 20%;
68-
animation-delay: -10s;
69-
animation-duration: 35s;
70-
border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
71-
}
72-
73-
.shape-4 {
74-
width: 250px;
75-
height: 250px;
76-
bottom: 30%;
77-
right: 20%;
78-
animation-delay: -15s;
79-
animation-duration: 28s;
80-
border-radius: 40% 60% 60% 40% / 70% 30% 70% 30%;
81-
background: linear-gradient(225deg,
82-
rgba(255, 121, 198, 0.08) 0%,
83-
rgba(139, 233, 253, 0.08) 100%);
84-
}
85-
86-
.shape-5 {
87-
width: 180px;
88-
height: 180px;
89-
top: 50%;
90-
left: 50%;
91-
transform: translate(-50%, -50%);
92-
animation-delay: -20s;
93-
animation-duration: 40s;
94-
border-radius: 80% 20% 55% 45% / 25% 75% 25% 75%;
95-
}
96-
97-
@keyframes float {
98-
0%, 100% {
99-
transform: translateY(0px) rotate(0deg);
100-
opacity: 0.3;
101-
}
102-
25% {
103-
transform: translateY(-20px) rotate(90deg);
104-
opacity: 0.5;
105-
}
106-
50% {
107-
transform: translateY(-10px) rotate(180deg);
108-
opacity: 0.4;
109-
}
110-
75% {
111-
transform: translateY(-30px) rotate(270deg);
112-
opacity: 0.6;
113-
}
114-
}
115-
116-
// Additional floating elements for more dynamic feel
117-
.shape::before {
118-
content: '';
119-
position: absolute;
120-
top: 50%;
121-
left: 50%;
122-
width: 60%;
123-
height: 60%;
124-
background: radial-gradient(circle,
125-
rgba(80, 250, 123, 0.08) 0%,
126-
transparent 70%);
127-
border-radius: 50%;
128-
transform: translate(-50%, -50%);
129-
animation: pulse 4s infinite ease-in-out;
130-
}
131-
132-
@keyframes pulse {
133-
0%, 100% {
134-
transform: translate(-50%, -50%) scale(1);
135-
opacity: 0.3;
136-
}
137-
50% {
138-
transform: translate(-50%, -50%) scale(1.2);
139-
opacity: 0.6;
140-
}
141-
}
142-
143-
// Remove the overlay since we now have a nice body gradient
144-
145-
// Responsive adjustments
146-
@media (max-width: 768px) {
147-
.shape {
148-
transform: scale(0.7);
149-
}
150-
151-
.shape-1 { width: 200px; height: 200px; }
152-
.shape-2 { width: 150px; height: 150px; }
153-
.shape-3 { width: 100px; height: 100px; }
154-
.shape-4 { width: 180px; height: 180px; }
155-
.shape-5 { width: 120px; height: 120px; }
156-
}
157-
158-
@media (max-width: 480px) {
159-
.shape {
160-
transform: scale(0.5);
161-
}
162-
163-
.geometric-shapes {
164-
opacity: 0.7;
165-
}
166-
}
167-
16821
// Reduce motion for accessibility
16922
@media (prefers-reduced-motion: reduce) {
170-
.shape {
171-
animation: none;
172-
}
173-
174-
.shape::before {
175-
animation: none;
176-
}
177-
17823
.background-canvas {
17924
display: none;
18025
}

src/app/components/animated-background/animated-background.component.ts

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@ interface Particle {
1818
template: `
1919
<div class="background-container">
2020
<canvas #canvas class="background-canvas"></canvas>
21-
<div class="geometric-shapes">
22-
<div class="shape shape-1"></div>
23-
<div class="shape shape-2"></div>
24-
<div class="shape shape-3"></div>
25-
<div class="shape shape-4"></div>
26-
<div class="shape shape-5"></div>
27-
</div>
2821
</div>
2922
`,
3023
styleUrls: ['./animated-background.component.scss'],
@@ -37,8 +30,7 @@ export class AnimatedBackgroundComponent implements OnInit, AfterViewInit, OnDes
3730
private animationId = signal<number | null>(null);
3831
private isBrowser: boolean;
3932

40-
private readonly PARTICLE_COUNT = 50;
41-
private readonly CONNECTION_DISTANCE = 150;
33+
private readonly PARTICLE_COUNT = 100;
4234

4335
constructor(@Inject(PLATFORM_ID) private platformId: object) {
4436
this.isBrowser = isPlatformBrowser(this.platformId);
@@ -95,8 +87,8 @@ export class AnimatedBackgroundComponent implements OnInit, AfterViewInit, OnDes
9587
y: Math.random() * height,
9688
vx: (Math.random() - 0.5) * 0.5,
9789
vy: (Math.random() - 0.5) * 0.5,
98-
size: Math.random() * 2 + 1, // Back to original small size
99-
opacity: Math.random() * 0.5 + 0.2,
90+
size: Math.random() * 1.5 + 0.5, // Small star-like particles
91+
opacity: Math.random() * 0.8 + 0.2,
10092
hue: Math.random() * 60 + 180, // Blue to cyan range
10193
});
10294
}
@@ -153,35 +145,11 @@ export class AnimatedBackgroundComponent implements OnInit, AfterViewInit, OnDes
153145
});
154146
}
155147

156-
private drawConnections() {
157-
if (!this.isBrowser || !this.ctx) return;
158-
this.ctx.strokeStyle = '#50fa7b';
159-
this.ctx.lineWidth = 1.5;
160-
161-
for (let i = 0; i < this.particles.length; i++) {
162-
for (let j = i + 1; j < this.particles.length; j++) {
163-
const dx = this.particles[i].x - this.particles[j].x;
164-
const dy = this.particles[i].y - this.particles[j].y;
165-
const distance = Math.sqrt(dx * dx + dy * dy);
166-
167-
if (distance < this.CONNECTION_DISTANCE) {
168-
const opacity = (this.CONNECTION_DISTANCE - distance) / this.CONNECTION_DISTANCE;
169-
this.ctx.globalAlpha = opacity * 0.6; // Increased from 0.2 to 0.6
170-
this.ctx.beginPath();
171-
this.ctx.moveTo(this.particles[i].x, this.particles[i].y);
172-
this.ctx.lineTo(this.particles[j].x, this.particles[j].y);
173-
this.ctx.stroke();
174-
}
175-
}
176-
}
177-
}
178-
179148
private animate = () => {
180149
if (!this.isBrowser || !this.ctx) return;
181150
this.ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);
182151

183152
this.updateParticles();
184-
this.drawConnections();
185153
this.drawParticles();
186154

187155
this.animationId.set(requestAnimationFrame(this.animate));
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Injectable } from '@angular/core';
2+
import * as prettier from 'prettier';
3+
import * as html from 'prettier/plugins/html';
4+
import { Observable, from } from 'rxjs';
5+
import { FormatViewService } from './sql-format.service';
6+
7+
@Injectable()
8+
export class HtmlFormatService extends FormatViewService {
9+
override title = 'HTML/XML Formatter';
10+
override language = 'html';
11+
override routeName = 'HTML';
12+
override format(input: string): Observable<string> {
13+
return from(prettier.format(input, { parser: 'html', plugins: [html] }));
14+
}
15+
}

0 commit comments

Comments
 (0)