@jjlmoya/utils-developer 1.12.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 (50) hide show
  1. package/package.json +5 -3
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/tool/aspectRatio/aspect-ratio-calculator.css +276 -0
  4. package/src/tool/aspectRatio/component.astro +0 -278
  5. package/src/tool/calculadoraTiempoDatos/component.astro +0 -524
  6. package/src/tool/calculadoraTiempoDatos/data-time-calculator-web-speed-impact.css +522 -0
  7. package/src/tool/colorConverter/color-converter-rgb-hex-hsl.css +262 -0
  8. package/src/tool/colorConverter/component.astro +0 -264
  9. package/src/tool/conversorExcelCsvHtml/component.astro +0 -360
  10. package/src/tool/conversorExcelCsvHtml/excel-csv-html-table-converter.css +358 -0
  11. package/src/tool/cronGenerator/component.astro +0 -317
  12. package/src/tool/cronGenerator/cron.css +315 -0
  13. package/src/tool/cssSpecificityCalculator/component.astro +0 -205
  14. package/src/tool/cssSpecificityCalculator/css-specificity-calculator.css +203 -0
  15. package/src/tool/cssToInlineConverter/component.astro +0 -150
  16. package/src/tool/cssToInlineConverter/css-to-inline-converter.css +148 -0
  17. package/src/tool/duplicateCssRemover/component.astro +0 -197
  18. package/src/tool/duplicateCssRemover/duplicate-css-remover.css +195 -0
  19. package/src/tool/generadorSecurityTxt/component.astro +0 -231
  20. package/src/tool/generadorSecurityTxt/security-txt-generator-rfc-9116.css +229 -0
  21. package/src/tool/hashGenerator/component.astro +0 -229
  22. package/src/tool/hashGenerator/hash-generator.css +227 -0
  23. package/src/tool/inspectorCertificadosSsl/component.astro +0 -261
  24. package/src/tool/inspectorCertificadosSsl/ssl-tls-certificate-inspector.css +259 -0
  25. package/src/tool/jsonFormatter/component.astro +0 -346
  26. package/src/tool/jsonFormatter/json-formatter.css +344 -0
  27. package/src/tool/keycode/component.astro +0 -298
  28. package/src/tool/keycode/keycode.css +296 -0
  29. package/src/tool/llmCostCalculator/component.astro +0 -253
  30. package/src/tool/llmCostCalculator/llm-cost-calculator.css +251 -0
  31. package/src/tool/mobileMockupGenerator/component.astro +0 -906
  32. package/src/tool/mobileMockupGenerator/mobile-mockup-generator.css +904 -0
  33. package/src/tool/musicalTypography/component.astro +0 -291
  34. package/src/tool/musicalTypography/musical-typography.css +289 -0
  35. package/src/tool/placeholderGenerator/component.astro +0 -255
  36. package/src/tool/placeholderGenerator/placeholder-image-generator.css +253 -0
  37. package/src/tool/promptLibrary/component.astro +0 -689
  38. package/src/tool/promptLibrary/prompt-library.css +687 -0
  39. package/src/tool/readabilityCalculator/component.astro +0 -322
  40. package/src/tool/readabilityCalculator/visual-readability-calculator-wcag-apca.css +320 -0
  41. package/src/tool/svgSanitizer/component.astro +0 -289
  42. package/src/tool/svgSanitizer/svg-sanitizer.css +287 -0
  43. package/src/tool/svgToCss/component.astro +0 -196
  44. package/src/tool/svgToCss/svg-to-css-converter.css +194 -0
  45. package/src/tool/urlCleaner/component.astro +0 -282
  46. package/src/tool/urlCleaner/url-tracking-cleaner.css +280 -0
  47. package/src/tool/urlEncoderDecoder/component.astro +0 -168
  48. package/src/tool/urlEncoderDecoder/url-encoder-decoder.css +166 -0
  49. package/src/tool/utmGenerator/component.astro +0 -156
  50. package/src/tool/utmGenerator/utm-generator.css +154 -0
@@ -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,287 @@
1
+ .ss-root {
2
+ width: 100%;
3
+ }
4
+
5
+ .ss-layout {
6
+ display: grid;
7
+ grid-template-columns: 1fr;
8
+ gap: 1.5rem;
9
+ max-width: 1100px;
10
+ margin: 0 auto;
11
+ align-items: start;
12
+ }
13
+
14
+ @media (min-width: 768px) {
15
+ .ss-layout.ss-has-output {
16
+ grid-template-columns: 1fr 1fr;
17
+ }
18
+ }
19
+
20
+ .ss-panel {
21
+ background: rgba(255, 255, 255, 0.75);
22
+ backdrop-filter: blur(14px);
23
+ -webkit-backdrop-filter: blur(14px);
24
+ border: 1px solid rgba(255, 255, 255, 0.35);
25
+ border-radius: 1.5rem;
26
+ padding: 1.5rem;
27
+ box-shadow: 0 8px 32px rgba(31, 38, 135, 0.06);
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: 1rem;
31
+ }
32
+
33
+ :global(.theme-dark) .ss-panel {
34
+ background: rgba(15, 23, 42, 0.75);
35
+ border-color: rgba(255, 255, 255, 0.06);
36
+ }
37
+
38
+ .ss-panel-label {
39
+ font-size: 0.8rem;
40
+ font-weight: 700;
41
+ color: rgb(100, 116, 139);
42
+ text-transform: uppercase;
43
+ letter-spacing: 0.06em;
44
+ }
45
+
46
+ :global(.theme-dark) .ss-panel-label {
47
+ color: rgb(148, 163, 184);
48
+ }
49
+
50
+ .ss-textarea {
51
+ width: 100%;
52
+ min-height: 260px;
53
+ resize: vertical;
54
+ background: rgba(0, 0, 0, 0.03);
55
+ border: 1.5px solid rgb(226, 232, 240);
56
+ border-radius: 0.875rem;
57
+ padding: 1rem;
58
+ font-size: 0.8rem;
59
+ line-height: 1.6;
60
+ color: rgb(51, 65, 85);
61
+ outline: none;
62
+ transition: border-color 0.2s ease;
63
+ box-sizing: border-box;
64
+ }
65
+
66
+ :global(.theme-dark) .ss-textarea {
67
+ background: rgba(255, 255, 255, 0.04);
68
+ border-color: rgb(51, 65, 85);
69
+ color: rgb(203, 213, 225);
70
+ }
71
+
72
+ .ss-textarea:focus {
73
+ border-color: rgb(139, 92, 246);
74
+ box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.1);
75
+ }
76
+
77
+ .ss-output-textarea {
78
+ min-height: 220px;
79
+ cursor: text;
80
+ }
81
+
82
+ .ss-options-row {
83
+ display: flex;
84
+ flex-wrap: wrap;
85
+ gap: 1rem;
86
+ }
87
+
88
+ .ss-toggle-label {
89
+ display: flex;
90
+ align-items: center;
91
+ gap: 0.5rem;
92
+ font-size: 0.875rem;
93
+ color: rgb(71, 85, 105);
94
+ cursor: pointer;
95
+ user-select: none;
96
+ }
97
+
98
+ :global(.theme-dark) .ss-toggle-label {
99
+ color: rgb(148, 163, 184);
100
+ }
101
+
102
+ .ss-toggle-input {
103
+ display: none;
104
+ }
105
+
106
+ .ss-toggle-track {
107
+ width: 36px;
108
+ height: 20px;
109
+ background: rgb(226, 232, 240);
110
+ border-radius: 999px;
111
+ position: relative;
112
+ transition: background 0.2s ease;
113
+ flex-shrink: 0;
114
+ }
115
+
116
+ .ss-toggle-track::after {
117
+ content: "";
118
+ position: absolute;
119
+ top: 2px;
120
+ left: 2px;
121
+ width: 16px;
122
+ height: 16px;
123
+ background: white;
124
+ border-radius: 50%;
125
+ transition: transform 0.2s ease;
126
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
127
+ }
128
+
129
+ .ss-toggle-input:checked + .ss-toggle-track {
130
+ background: rgb(139, 92, 246);
131
+ }
132
+
133
+ .ss-toggle-input:checked + .ss-toggle-track::after {
134
+ transform: translateX(16px);
135
+ }
136
+
137
+ .ss-btn-sanitize {
138
+ background: linear-gradient(135deg, rgb(139, 92, 246), rgb(124, 58, 237));
139
+ color: white;
140
+ border: none;
141
+ border-radius: 0.875rem;
142
+ padding: 0.875rem 1.5rem;
143
+ font-weight: 700;
144
+ font-size: 1rem;
145
+ cursor: pointer;
146
+ display: flex;
147
+ align-items: center;
148
+ justify-content: center;
149
+ gap: 0.5rem;
150
+ transition: all 0.2s ease;
151
+ box-shadow: 0 4px 14px rgba(139, 92, 246, 0.35);
152
+ }
153
+
154
+ .ss-btn-sanitize:hover {
155
+ transform: translateY(-2px);
156
+ box-shadow: 0 6px 20px rgba(139, 92, 246, 0.5);
157
+ }
158
+
159
+ .ss-error {
160
+ font-size: 0.875rem;
161
+ color: rgb(239, 68, 68);
162
+ font-weight: 500;
163
+ margin: 0;
164
+ }
165
+
166
+ .ss-output-header {
167
+ display: flex;
168
+ justify-content: space-between;
169
+ align-items: center;
170
+ flex-wrap: wrap;
171
+ gap: 0.5rem;
172
+ }
173
+
174
+ .ss-output-label {
175
+ font-size: 0.8rem;
176
+ font-weight: 700;
177
+ color: rgb(139, 92, 246);
178
+ text-transform: uppercase;
179
+ letter-spacing: 0.06em;
180
+ }
181
+
182
+ .ss-output-actions {
183
+ display: flex;
184
+ gap: 0.5rem;
185
+ }
186
+
187
+ .ss-btn-action {
188
+ display: flex;
189
+ align-items: center;
190
+ gap: 0.35rem;
191
+ font-size: 0.8rem;
192
+ font-weight: 600;
193
+ padding: 0.4rem 0.875rem;
194
+ border-radius: 2rem;
195
+ border: 1.5px solid rgb(226, 232, 240);
196
+ background: white;
197
+ color: rgb(71, 85, 105);
198
+ cursor: pointer;
199
+ transition: all 0.2s ease;
200
+ }
201
+
202
+ :global(.theme-dark) .ss-btn-action {
203
+ background: rgb(30, 41, 59);
204
+ border-color: rgb(51, 65, 85);
205
+ color: rgb(148, 163, 184);
206
+ }
207
+
208
+ .ss-btn-action:hover {
209
+ border-color: rgb(139, 92, 246);
210
+ color: rgb(139, 92, 246);
211
+ }
212
+
213
+ .ss-btn-action.ss-copied {
214
+ background: rgb(16, 185, 129);
215
+ border-color: rgb(16, 185, 129);
216
+ color: white;
217
+ }
218
+
219
+ .ss-btn-download:hover {
220
+ border-color: rgb(99, 102, 241);
221
+ color: rgb(99, 102, 241);
222
+ }
223
+
224
+ .ss-stats-row {
225
+ display: grid;
226
+ grid-template-columns: repeat(5, 1fr);
227
+ gap: 0.5rem;
228
+ }
229
+
230
+ @media (max-width: 600px) {
231
+ .ss-stats-row {
232
+ grid-template-columns: repeat(3, 1fr);
233
+ }
234
+ }
235
+
236
+ .ss-stat-chip {
237
+ display: flex;
238
+ flex-direction: column;
239
+ align-items: center;
240
+ gap: 0.2rem;
241
+ padding: 0.625rem 0.375rem;
242
+ background: rgba(0, 0, 0, 0.025);
243
+ border-radius: 0.75rem;
244
+ text-align: center;
245
+ border-top: 2px solid rgb(226, 232, 240);
246
+ }
247
+
248
+ :global(.theme-dark) .ss-stat-chip {
249
+ background: rgba(255, 255, 255, 0.04);
250
+ border-color: rgb(51, 65, 85);
251
+ }
252
+
253
+ .ss-chip-green {
254
+ border-color: rgb(16, 185, 129);
255
+ }
256
+
257
+ .ss-chip-purple {
258
+ border-color: rgb(139, 92, 246);
259
+ }
260
+
261
+ .ss-chip-amber {
262
+ border-color: rgb(245, 158, 11);
263
+ }
264
+
265
+ .ss-chip-rose {
266
+ border-color: rgb(244, 63, 94);
267
+ }
268
+
269
+ .ss-chip-value {
270
+ font-size: 0.9rem;
271
+ font-weight: 800;
272
+ color: rgb(15, 23, 42);
273
+ line-height: 1.2;
274
+ }
275
+
276
+ :global(.theme-dark) .ss-chip-value {
277
+ color: white;
278
+ }
279
+
280
+ .ss-chip-label {
281
+ font-size: 0.6rem;
282
+ color: rgb(148, 163, 184);
283
+ font-weight: 600;
284
+ text-transform: uppercase;
285
+ letter-spacing: 0.04em;
286
+ line-height: 1.3;
287
+ }