@jjlmoya/utils-developer 1.11.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/package.json +7 -4
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/entries.ts +74 -0
  4. package/src/tool/aspectRatio/aspect-ratio-calculator.css +276 -0
  5. package/src/tool/aspectRatio/component.astro +0 -278
  6. package/src/tool/aspectRatio/entry.ts +30 -0
  7. package/src/tool/aspectRatio/index.ts +2 -32
  8. package/src/tool/calculadoraTiempoDatos/component.astro +0 -524
  9. package/src/tool/calculadoraTiempoDatos/data-time-calculator-web-speed-impact.css +522 -0
  10. package/src/tool/calculadoraTiempoDatos/entry.ts +29 -0
  11. package/src/tool/calculadoraTiempoDatos/index.ts +2 -31
  12. package/src/tool/colorConverter/color-converter-rgb-hex-hsl.css +262 -0
  13. package/src/tool/colorConverter/component.astro +0 -264
  14. package/src/tool/colorConverter/entry.ts +29 -0
  15. package/src/tool/colorConverter/index.ts +2 -31
  16. package/src/tool/conversorExcelCsvHtml/component.astro +0 -360
  17. package/src/tool/conversorExcelCsvHtml/entry.ts +29 -0
  18. package/src/tool/conversorExcelCsvHtml/excel-csv-html-table-converter.css +358 -0
  19. package/src/tool/conversorExcelCsvHtml/index.ts +2 -31
  20. package/src/tool/cronGenerator/component.astro +0 -317
  21. package/src/tool/cronGenerator/cron.css +315 -0
  22. package/src/tool/cronGenerator/entry.ts +30 -0
  23. package/src/tool/cronGenerator/index.ts +2 -32
  24. package/src/tool/cssSpecificityCalculator/component.astro +0 -205
  25. package/src/tool/cssSpecificityCalculator/css-specificity-calculator.css +203 -0
  26. package/src/tool/cssSpecificityCalculator/entry.ts +30 -0
  27. package/src/tool/cssSpecificityCalculator/index.ts +2 -32
  28. package/src/tool/cssToInlineConverter/component.astro +0 -150
  29. package/src/tool/cssToInlineConverter/css-to-inline-converter.css +148 -0
  30. package/src/tool/cssToInlineConverter/entry.ts +30 -0
  31. package/src/tool/cssToInlineConverter/index.ts +2 -32
  32. package/src/tool/duplicateCssRemover/component.astro +0 -197
  33. package/src/tool/duplicateCssRemover/duplicate-css-remover.css +195 -0
  34. package/src/tool/duplicateCssRemover/entry.ts +30 -0
  35. package/src/tool/duplicateCssRemover/index.ts +2 -32
  36. package/src/tool/generadorSecurityTxt/component.astro +0 -231
  37. package/src/tool/generadorSecurityTxt/entry.ts +29 -0
  38. package/src/tool/generadorSecurityTxt/index.ts +2 -31
  39. package/src/tool/generadorSecurityTxt/security-txt-generator-rfc-9116.css +229 -0
  40. package/src/tool/hashGenerator/component.astro +0 -229
  41. package/src/tool/hashGenerator/entry.ts +29 -0
  42. package/src/tool/hashGenerator/hash-generator.css +227 -0
  43. package/src/tool/hashGenerator/index.ts +2 -31
  44. package/src/tool/inspectorCertificadosSsl/component.astro +0 -261
  45. package/src/tool/inspectorCertificadosSsl/entry.ts +45 -0
  46. package/src/tool/inspectorCertificadosSsl/index.ts +2 -47
  47. package/src/tool/inspectorCertificadosSsl/ssl-tls-certificate-inspector.css +259 -0
  48. package/src/tool/jsonFormatter/component.astro +0 -346
  49. package/src/tool/jsonFormatter/entry.ts +30 -0
  50. package/src/tool/jsonFormatter/index.ts +2 -32
  51. package/src/tool/jsonFormatter/json-formatter.css +344 -0
  52. package/src/tool/keycode/component.astro +0 -298
  53. package/src/tool/keycode/entry.ts +30 -0
  54. package/src/tool/keycode/index.ts +2 -32
  55. package/src/tool/keycode/keycode.css +296 -0
  56. package/src/tool/llmCostCalculator/component.astro +0 -253
  57. package/src/tool/llmCostCalculator/entry.ts +46 -0
  58. package/src/tool/llmCostCalculator/index.ts +2 -48
  59. package/src/tool/llmCostCalculator/llm-cost-calculator.css +251 -0
  60. package/src/tool/mobileMockupGenerator/component.astro +0 -906
  61. package/src/tool/mobileMockupGenerator/entry.ts +45 -0
  62. package/src/tool/mobileMockupGenerator/index.ts +2 -47
  63. package/src/tool/mobileMockupGenerator/mobile-mockup-generator.css +904 -0
  64. package/src/tool/musicalTypography/component.astro +0 -291
  65. package/src/tool/musicalTypography/entry.ts +29 -0
  66. package/src/tool/musicalTypography/index.ts +2 -31
  67. package/src/tool/musicalTypography/musical-typography.css +289 -0
  68. package/src/tool/placeholderGenerator/component.astro +0 -255
  69. package/src/tool/placeholderGenerator/entry.ts +46 -0
  70. package/src/tool/placeholderGenerator/index.ts +2 -48
  71. package/src/tool/placeholderGenerator/placeholder-image-generator.css +253 -0
  72. package/src/tool/promptLibrary/component.astro +0 -689
  73. package/src/tool/promptLibrary/entry.ts +45 -0
  74. package/src/tool/promptLibrary/index.ts +2 -47
  75. package/src/tool/promptLibrary/prompt-library.css +687 -0
  76. package/src/tool/readabilityCalculator/component.astro +0 -322
  77. package/src/tool/readabilityCalculator/entry.ts +45 -0
  78. package/src/tool/readabilityCalculator/index.ts +2 -47
  79. package/src/tool/readabilityCalculator/visual-readability-calculator-wcag-apca.css +320 -0
  80. package/src/tool/svgSanitizer/component.astro +0 -289
  81. package/src/tool/svgSanitizer/entry.ts +45 -0
  82. package/src/tool/svgSanitizer/index.ts +2 -47
  83. package/src/tool/svgSanitizer/svg-sanitizer.css +287 -0
  84. package/src/tool/svgToCss/component.astro +0 -196
  85. package/src/tool/svgToCss/entry.ts +30 -0
  86. package/src/tool/svgToCss/index.ts +2 -32
  87. package/src/tool/svgToCss/svg-to-css-converter.css +194 -0
  88. package/src/tool/urlCleaner/component.astro +0 -282
  89. package/src/tool/urlCleaner/entry.ts +45 -0
  90. package/src/tool/urlCleaner/index.ts +2 -47
  91. package/src/tool/urlCleaner/url-tracking-cleaner.css +280 -0
  92. package/src/tool/urlEncoderDecoder/component.astro +0 -168
  93. package/src/tool/urlEncoderDecoder/entry.ts +30 -0
  94. package/src/tool/urlEncoderDecoder/index.ts +2 -32
  95. package/src/tool/urlEncoderDecoder/url-encoder-decoder.css +166 -0
  96. package/src/tool/utmGenerator/component.astro +0 -156
  97. package/src/tool/utmGenerator/entry.ts +29 -0
  98. package/src/tool/utmGenerator/index.ts +2 -31
  99. package/src/tool/utmGenerator/utm-generator.css +154 -0
  100. package/src/tools.ts +1 -1
@@ -0,0 +1,320 @@
1
+ .rc-root {
2
+ width: 100%;
3
+ }
4
+
5
+ .rc-container {
6
+ display: grid;
7
+ grid-template-columns: 1fr;
8
+ gap: 2rem;
9
+ max-width: 1200px;
10
+ margin: 0 auto;
11
+ padding: 1.5rem;
12
+ }
13
+
14
+ @media (min-width: 1024px) {
15
+ .rc-container {
16
+ grid-template-columns: 1fr 1fr;
17
+ }
18
+ }
19
+
20
+ .rc-card {
21
+ background: rgba(255, 255, 255, 0.7);
22
+ backdrop-filter: blur(16px);
23
+ -webkit-backdrop-filter: blur(16px);
24
+ border: 1px solid rgba(255, 255, 255, 0.4);
25
+ border-radius: 1.5rem;
26
+ padding: 2.5rem;
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: 2rem;
30
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 10px 15px -3px rgba(0, 0, 0, 0.05), inset 0 0 0 1px rgba(255, 255, 255, 0.5);
31
+ }
32
+
33
+ :global(.theme-dark) .rc-card {
34
+ background: rgba(15, 23, 42, 0.6);
35
+ border: 1px solid rgba(255, 255, 255, 0.08);
36
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.2);
37
+ }
38
+
39
+ .rc-control-section {
40
+ display: flex;
41
+ flex-direction: column;
42
+ gap: 2rem;
43
+ }
44
+
45
+ .rc-group-title {
46
+ font-size: 0.75rem;
47
+ font-weight: 800;
48
+ color: rgb(100, 116, 139);
49
+ text-transform: uppercase;
50
+ letter-spacing: 0.1em;
51
+ margin-bottom: 1rem;
52
+ }
53
+
54
+ .rc-group-title-sm {
55
+ margin-bottom: 0.75rem;
56
+ }
57
+
58
+ :global(.theme-dark) .rc-group-title {
59
+ color: rgb(148, 163, 184);
60
+ }
61
+
62
+ .rc-inputs-grid {
63
+ display: grid;
64
+ grid-template-columns: repeat(2, 1fr);
65
+ gap: 1.5rem;
66
+ }
67
+
68
+ .rc-input-wrapper {
69
+ display: flex;
70
+ flex-direction: column;
71
+ gap: 0.75rem;
72
+ }
73
+
74
+ .rc-label-mini {
75
+ font-size: 0.875rem;
76
+ font-weight: 600;
77
+ color: rgb(30, 41, 59);
78
+ }
79
+
80
+ :global(.theme-dark) .rc-label-mini {
81
+ color: rgb(241, 245, 249);
82
+ }
83
+
84
+ .rc-color-input-container {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 0.75rem;
88
+ background: rgba(255, 255, 255, 0.5);
89
+ border: 1px solid rgb(226, 232, 240);
90
+ padding: 0.5rem;
91
+ border-radius: 0.75rem;
92
+ transition: all 0.2s ease;
93
+ }
94
+
95
+ :global(.theme-dark) .rc-color-input-container {
96
+ background: rgba(30, 41, 59, 0.5);
97
+ border-color: rgb(51, 65, 85);
98
+ }
99
+
100
+ .rc-color-picker {
101
+ -webkit-appearance: none;
102
+ -moz-appearance: none;
103
+ appearance: none;
104
+ width: 2.5rem;
105
+ height: 2.5rem;
106
+ border: none;
107
+ border-radius: 0.5rem;
108
+ cursor: pointer;
109
+ background: none;
110
+ }
111
+
112
+ .rc-color-picker::-webkit-color-swatch-wrapper {
113
+ padding: 0;
114
+ }
115
+
116
+ .rc-color-picker::-webkit-color-swatch {
117
+ border: 1px solid rgba(0, 0, 0, 0.1);
118
+ border-radius: 0.4rem;
119
+ }
120
+
121
+ :global(.theme-dark) .rc-color-picker::-webkit-color-swatch {
122
+ border: 1px solid rgba(255, 255, 255, 0.2);
123
+ }
124
+
125
+ .rc-hex-text {
126
+ font-size: 0.875rem;
127
+ font-weight: 600;
128
+ color: rgb(71, 85, 105);
129
+ flex: 1;
130
+ }
131
+
132
+ :global(.theme-dark) .rc-hex-text {
133
+ color: rgb(148, 163, 184);
134
+ }
135
+
136
+ .rc-sliders-stack {
137
+ display: flex;
138
+ flex-direction: column;
139
+ gap: 1.5rem;
140
+ }
141
+
142
+ .rc-slider-group {
143
+ display: flex;
144
+ flex-direction: column;
145
+ gap: 0.75rem;
146
+ }
147
+
148
+ .rc-slider-header {
149
+ display: flex;
150
+ justify-content: space-between;
151
+ align-items: center;
152
+ }
153
+
154
+ .rc-slider-value {
155
+ background: rgb(14, 165, 233);
156
+ color: rgb(255, 255, 255);
157
+ font-size: 0.75rem;
158
+ font-weight: 700;
159
+ padding: 0.15rem 0.5rem;
160
+ border-radius: 1rem;
161
+ }
162
+
163
+ .rc-range {
164
+ -webkit-appearance: none;
165
+ appearance: none;
166
+ width: 100%;
167
+ height: 6px;
168
+ background: rgb(226, 232, 240);
169
+ border-radius: 3px;
170
+ outline: none;
171
+ }
172
+
173
+ :global(.theme-dark) .rc-range {
174
+ background: rgb(51, 65, 85);
175
+ }
176
+
177
+ .rc-range::-webkit-slider-thumb {
178
+ -webkit-appearance: none;
179
+ appearance: none;
180
+ width: 18px;
181
+ height: 18px;
182
+ background: rgb(14, 165, 233);
183
+ border-radius: 50%;
184
+ cursor: pointer;
185
+ box-shadow: 0 0 0 4px rgba(14, 165, 233, 0.1);
186
+ transition: all 0.2s ease;
187
+ }
188
+
189
+ .rc-range::-webkit-slider-thumb:hover {
190
+ transform: scale(1.15);
191
+ box-shadow: 0 0 0 6px rgba(14, 165, 233, 0.2);
192
+ }
193
+
194
+ .rc-comparison-grid {
195
+ display: grid;
196
+ grid-template-columns: repeat(2, 1fr);
197
+ gap: 1rem;
198
+ }
199
+
200
+ .rc-score-card {
201
+ padding: 1.25rem;
202
+ border-radius: 1rem;
203
+ display: flex;
204
+ flex-direction: column;
205
+ align-items: center;
206
+ gap: 0.5rem;
207
+ background: rgba(255, 255, 255, 0.4);
208
+ border: 1px solid rgba(0, 0, 0, 0.05);
209
+ }
210
+
211
+ :global(.theme-dark) .rc-score-card {
212
+ background: rgba(255, 255, 255, 0.03);
213
+ border-color: rgba(255, 255, 255, 0.05);
214
+ }
215
+
216
+ .rc-score-label {
217
+ font-size: 0.65rem;
218
+ font-weight: 800;
219
+ text-transform: uppercase;
220
+ color: rgb(100, 116, 139);
221
+ text-align: center;
222
+ }
223
+
224
+ .rc-score-value {
225
+ font-size: 1.5rem;
226
+ font-weight: 800;
227
+ }
228
+
229
+ .rc-score-status {
230
+ font-size: 0.75rem;
231
+ font-weight: 700;
232
+ padding: 0.2rem 0.6rem;
233
+ border-radius: 0.5rem;
234
+ text-transform: uppercase;
235
+ }
236
+
237
+ .rc-status-pass {
238
+ background: rgb(220, 252, 231);
239
+ color: rgb(22, 101, 52);
240
+ }
241
+
242
+ .rc-status-fail {
243
+ background: rgb(254, 226, 226);
244
+ color: rgb(153, 27, 27);
245
+ }
246
+
247
+ :global(.theme-dark) .rc-status-pass {
248
+ background: rgba(34, 197, 94, 0.15);
249
+ color: rgb(134, 239, 172);
250
+ }
251
+
252
+ :global(.theme-dark) .rc-status-fail {
253
+ background: rgba(239, 68, 68, 0.15);
254
+ color: rgb(252, 165, 165);
255
+ }
256
+
257
+ .rc-preview-container {
258
+ flex: 1;
259
+ display: flex;
260
+ flex-direction: column;
261
+ gap: 1.5rem;
262
+ }
263
+
264
+ .rc-main-preview-box {
265
+ padding: 2.5rem;
266
+ border-radius: 1.25rem;
267
+ transition: all 0.3s ease;
268
+ border: 1px solid rgba(0, 0, 0, 0.05);
269
+ min-height: 160px;
270
+ display: flex;
271
+ align-items: center;
272
+ }
273
+
274
+ .rc-preview-text {
275
+ line-height: 1.5;
276
+ margin: 0;
277
+ }
278
+
279
+ .rc-apca-breakdown {
280
+ background: rgba(14, 165, 233, 0.05);
281
+ padding: 1.5rem;
282
+ border-radius: 1rem;
283
+ border: 1px solid rgba(14, 165, 233, 0.1);
284
+ }
285
+
286
+ .rc-breakdown-list {
287
+ display: flex;
288
+ flex-direction: column;
289
+ gap: 0.75rem;
290
+ }
291
+
292
+ .rc-breakdown-item {
293
+ display: flex;
294
+ justify-content: space-between;
295
+ font-size: 0.875rem;
296
+ }
297
+
298
+ .rc-item-label {
299
+ color: rgb(71, 85, 105);
300
+ font-weight: 600;
301
+ }
302
+
303
+ :global(.theme-dark) .rc-item-label {
304
+ color: rgb(148, 163, 184);
305
+ }
306
+
307
+ .rc-item-check {
308
+ font-weight: 700;
309
+ display: flex;
310
+ align-items: center;
311
+ gap: 0.4rem;
312
+ }
313
+
314
+ .rc-check-yes {
315
+ color: rgb(16, 185, 129);
316
+ }
317
+
318
+ .rc-check-no {
319
+ color: rgb(239, 68, 68);
320
+ }
@@ -96,295 +96,6 @@ const placeholder = `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xml:s
96
96
  </div>
97
97
  </div>
98
98
 
99
- <style>
100
- .ss-root {
101
- width: 100%;
102
- }
103
-
104
- .ss-layout {
105
- display: grid;
106
- grid-template-columns: 1fr;
107
- gap: 1.5rem;
108
- max-width: 1100px;
109
- margin: 0 auto;
110
- align-items: start;
111
- }
112
-
113
- @media (min-width: 768px) {
114
- .ss-layout.ss-has-output {
115
- grid-template-columns: 1fr 1fr;
116
- }
117
- }
118
-
119
- .ss-panel {
120
- background: rgba(255, 255, 255, 0.75);
121
- backdrop-filter: blur(14px);
122
- -webkit-backdrop-filter: blur(14px);
123
- border: 1px solid rgba(255, 255, 255, 0.35);
124
- border-radius: 1.5rem;
125
- padding: 1.5rem;
126
- box-shadow: 0 8px 32px rgba(31, 38, 135, 0.06);
127
- display: flex;
128
- flex-direction: column;
129
- gap: 1rem;
130
- }
131
-
132
- :global(.theme-dark) .ss-panel {
133
- background: rgba(15, 23, 42, 0.75);
134
- border-color: rgba(255, 255, 255, 0.06);
135
- }
136
-
137
- .ss-panel-label {
138
- font-size: 0.8rem;
139
- font-weight: 700;
140
- color: rgb(100, 116, 139);
141
- text-transform: uppercase;
142
- letter-spacing: 0.06em;
143
- }
144
-
145
- :global(.theme-dark) .ss-panel-label {
146
- color: rgb(148, 163, 184);
147
- }
148
-
149
- .ss-textarea {
150
- width: 100%;
151
- min-height: 260px;
152
- resize: vertical;
153
- background: rgba(0, 0, 0, 0.03);
154
- border: 1.5px solid rgb(226, 232, 240);
155
- border-radius: 0.875rem;
156
- padding: 1rem;
157
- font-size: 0.8rem;
158
- line-height: 1.6;
159
- color: rgb(51, 65, 85);
160
- outline: none;
161
- transition: border-color 0.2s ease;
162
- box-sizing: border-box;
163
- }
164
-
165
- :global(.theme-dark) .ss-textarea {
166
- background: rgba(255, 255, 255, 0.04);
167
- border-color: rgb(51, 65, 85);
168
- color: rgb(203, 213, 225);
169
- }
170
-
171
- .ss-textarea:focus {
172
- border-color: rgb(139, 92, 246);
173
- box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);
174
- }
175
-
176
- .ss-output-textarea {
177
- min-height: 220px;
178
- cursor: text;
179
- }
180
-
181
- .ss-options-row {
182
- display: flex;
183
- flex-wrap: wrap;
184
- gap: 1rem;
185
- }
186
-
187
- .ss-toggle-label {
188
- display: flex;
189
- align-items: center;
190
- gap: 0.5rem;
191
- font-size: 0.875rem;
192
- color: rgb(71, 85, 105);
193
- cursor: pointer;
194
- user-select: none;
195
- }
196
-
197
- :global(.theme-dark) .ss-toggle-label {
198
- color: rgb(148, 163, 184);
199
- }
200
-
201
- .ss-toggle-input {
202
- display: none;
203
- }
204
-
205
- .ss-toggle-track {
206
- width: 36px;
207
- height: 20px;
208
- background: rgb(226, 232, 240);
209
- border-radius: 999px;
210
- position: relative;
211
- transition: background 0.2s ease;
212
- flex-shrink: 0;
213
- }
214
-
215
- .ss-toggle-track::after {
216
- content: "";
217
- position: absolute;
218
- top: 2px;
219
- left: 2px;
220
- width: 16px;
221
- height: 16px;
222
- background: white;
223
- border-radius: 50%;
224
- transition: transform 0.2s ease;
225
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
226
- }
227
-
228
- .ss-toggle-input:checked + .ss-toggle-track {
229
- background: rgb(139, 92, 246);
230
- }
231
-
232
- .ss-toggle-input:checked + .ss-toggle-track::after {
233
- transform: translateX(16px);
234
- }
235
-
236
- .ss-btn-sanitize {
237
- background: linear-gradient(135deg, rgb(139, 92, 246), rgb(124, 58, 237));
238
- color: white;
239
- border: none;
240
- border-radius: 0.875rem;
241
- padding: 0.875rem 1.5rem;
242
- font-weight: 700;
243
- font-size: 1rem;
244
- cursor: pointer;
245
- display: flex;
246
- align-items: center;
247
- justify-content: center;
248
- gap: 0.5rem;
249
- transition: all 0.2s ease;
250
- box-shadow: 0 4px 14px rgba(139, 92, 246, 0.35);
251
- }
252
-
253
- .ss-btn-sanitize:hover {
254
- transform: translateY(-2px);
255
- box-shadow: 0 6px 20px rgba(139, 92, 246, 0.5);
256
- }
257
-
258
- .ss-error {
259
- font-size: 0.875rem;
260
- color: rgb(239, 68, 68);
261
- font-weight: 500;
262
- margin: 0;
263
- }
264
-
265
- .ss-output-header {
266
- display: flex;
267
- justify-content: space-between;
268
- align-items: center;
269
- flex-wrap: wrap;
270
- gap: 0.5rem;
271
- }
272
-
273
- .ss-output-label {
274
- font-size: 0.8rem;
275
- font-weight: 700;
276
- color: rgb(139, 92, 246);
277
- text-transform: uppercase;
278
- letter-spacing: 0.06em;
279
- }
280
-
281
- .ss-output-actions {
282
- display: flex;
283
- gap: 0.5rem;
284
- }
285
-
286
- .ss-btn-action {
287
- display: flex;
288
- align-items: center;
289
- gap: 0.35rem;
290
- font-size: 0.8rem;
291
- font-weight: 600;
292
- padding: 0.4rem 0.875rem;
293
- border-radius: 2rem;
294
- border: 1.5px solid rgb(226, 232, 240);
295
- background: white;
296
- color: rgb(71, 85, 105);
297
- cursor: pointer;
298
- transition: all 0.2s ease;
299
- }
300
-
301
- :global(.theme-dark) .ss-btn-action {
302
- background: rgb(30, 41, 59);
303
- border-color: rgb(51, 65, 85);
304
- color: rgb(148, 163, 184);
305
- }
306
-
307
- .ss-btn-action:hover {
308
- border-color: rgb(139, 92, 246);
309
- color: rgb(139, 92, 246);
310
- }
311
-
312
- .ss-btn-action.ss-copied {
313
- background: rgb(16, 185, 129);
314
- border-color: rgb(16, 185, 129);
315
- color: white;
316
- }
317
-
318
- .ss-btn-download:hover {
319
- border-color: rgb(99, 102, 241);
320
- color: rgb(99, 102, 241);
321
- }
322
-
323
- .ss-stats-row {
324
- display: grid;
325
- grid-template-columns: repeat(5, 1fr);
326
- gap: 0.5rem;
327
- }
328
-
329
- @media (max-width: 600px) {
330
- .ss-stats-row {
331
- grid-template-columns: repeat(3, 1fr);
332
- }
333
- }
334
-
335
- .ss-stat-chip {
336
- display: flex;
337
- flex-direction: column;
338
- align-items: center;
339
- gap: 0.2rem;
340
- padding: 0.625rem 0.375rem;
341
- background: rgba(0, 0, 0, 0.025);
342
- border-radius: 0.75rem;
343
- text-align: center;
344
- border-top: 2px solid rgb(226, 232, 240);
345
- }
346
-
347
- :global(.theme-dark) .ss-stat-chip {
348
- background: rgba(255, 255, 255, 0.04);
349
- border-color: rgb(51, 65, 85);
350
- }
351
-
352
- .ss-chip-green {
353
- border-color: rgb(16, 185, 129);
354
- }
355
-
356
- .ss-chip-purple {
357
- border-color: rgb(139, 92, 246);
358
- }
359
-
360
- .ss-chip-amber {
361
- border-color: rgb(245, 158, 11);
362
- }
363
-
364
- .ss-chip-rose {
365
- border-color: rgb(244, 63, 94);
366
- }
367
-
368
- .ss-chip-value {
369
- font-size: 0.9rem;
370
- font-weight: 800;
371
- color: rgb(15, 23, 42);
372
- line-height: 1.2;
373
- }
374
-
375
- :global(.theme-dark) .ss-chip-value {
376
- color: white;
377
- }
378
-
379
- .ss-chip-label {
380
- font-size: 0.6rem;
381
- color: rgb(148, 163, 184);
382
- font-weight: 600;
383
- text-transform: uppercase;
384
- letter-spacing: 0.04em;
385
- line-height: 1.3;
386
- }
387
- </style>
388
99
 
389
100
  <script>
390
101
  import type { SvgSanitizerUI } from './ui';
@@ -0,0 +1,45 @@
1
+ import type { DeveloperToolEntry, ToolLocaleContent } from '../../types';
2
+ import type { SvgSanitizerUI } from './ui';
3
+
4
+ export type SvgSanitizerLocaleContent = ToolLocaleContent<SvgSanitizerUI>;
5
+
6
+ import { content as es } from './i18n/es';
7
+ import { content as en } from './i18n/en';
8
+ import { content as fr } from './i18n/fr';
9
+ import { content as de } from './i18n/de';
10
+ import { content as it } from './i18n/it';
11
+ import { content as ja } from './i18n/ja';
12
+ import { content as ko } from './i18n/ko';
13
+ import { content as nl } from './i18n/nl';
14
+ import { content as pl } from './i18n/pl';
15
+ import { content as pt } from './i18n/pt';
16
+ import { content as ru } from './i18n/ru';
17
+ import { content as sv } from './i18n/sv';
18
+ import { content as tr } from './i18n/tr';
19
+ import { content as zh } from './i18n/zh';
20
+ import { content as id } from './i18n/id';
21
+
22
+ export const svgSanitizer: DeveloperToolEntry<SvgSanitizerUI> = {
23
+ id: 'svg-sanitizer',
24
+ icons: {
25
+ bg: 'mdi:xml',
26
+ fg: 'mdi:broom',
27
+ },
28
+ i18n: {
29
+ es: async () => es,
30
+ en: async () => en,
31
+ fr: async () => fr,
32
+ de: async () => de,
33
+ it: async () => it,
34
+ ja: async () => ja,
35
+ ko: async () => ko,
36
+ nl: async () => nl,
37
+ pl: async () => pl,
38
+ pt: async () => pt,
39
+ ru: async () => ru,
40
+ sv: async () => sv,
41
+ tr: async () => tr,
42
+ zh: async () => zh,
43
+ id: async () => id,
44
+ },
45
+ };
@@ -1,50 +1,5 @@
1
- import type { DeveloperToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
- import type { SvgSanitizerUI } from './ui';
3
-
4
- export type SvgSanitizerLocaleContent = ToolLocaleContent<SvgSanitizerUI>;
5
-
6
- import { content as es } from './i18n/es';
7
- import { content as en } from './i18n/en';
8
- import { content as fr } from './i18n/fr';
9
- import { content as de } from './i18n/de';
10
- import { content as it } from './i18n/it';
11
- import { content as ja } from './i18n/ja';
12
- import { content as ko } from './i18n/ko';
13
- import { content as nl } from './i18n/nl';
14
- import { content as pl } from './i18n/pl';
15
- import { content as pt } from './i18n/pt';
16
- import { content as ru } from './i18n/ru';
17
- import { content as sv } from './i18n/sv';
18
- import { content as tr } from './i18n/tr';
19
- import { content as zh } from './i18n/zh';
20
- import { content as id } from './i18n/id';
21
-
22
- export const svgSanitizer: DeveloperToolEntry<SvgSanitizerUI> = {
23
- id: 'svg-sanitizer',
24
- icons: {
25
- bg: 'mdi:xml',
26
- fg: 'mdi:broom',
27
- },
28
- i18n: {
29
- es: async () => es,
30
- en: async () => en,
31
- fr: async () => fr,
32
- de: async () => de,
33
- it: async () => it,
34
- ja: async () => ja,
35
- ko: async () => ko,
36
- nl: async () => nl,
37
- pl: async () => pl,
38
- pt: async () => pt,
39
- ru: async () => ru,
40
- sv: async () => sv,
41
- tr: async () => tr,
42
- zh: async () => zh,
43
- id: async () => id,
44
- },
45
- };
46
-
47
-
1
+ import { svgSanitizer } from './entry';
2
+ export * from './entry';
48
3
  export const SVG_SANITIZER_TOOL: ToolDefinition = {
49
4
  entry: svgSanitizer,
50
5
  Component: () => import('./component.astro'),