@jjlmoya/utils-tools 1.9.0 → 1.10.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 (26) hide show
  1. package/package.json +5 -3
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/tool/date-diff-calculator/component.astro +0 -200
  4. package/src/tool/date-diff-calculator/date-difference-calculator.css +198 -0
  5. package/src/tool/drive-direct-link/component.astro +0 -173
  6. package/src/tool/drive-direct-link/google-drive-direct-download-link.css +171 -0
  7. package/src/tool/email-list-cleaner/component.astro +0 -204
  8. package/src/tool/email-list-cleaner/email-list-cleaner.css +202 -0
  9. package/src/tool/env-badge-spain/component.astro +0 -156
  10. package/src/tool/env-badge-spain/environmental-badge-simulator-spain.css +154 -0
  11. package/src/tool/morse-beacon/component.astro +0 -298
  12. package/src/tool/morse-beacon/morse-beacon.css +296 -0
  13. package/src/tool/password-generator/component.astro +0 -88
  14. package/src/tool/password-generator/password-generator.css +86 -0
  15. package/src/tool/routes/component.astro +0 -254
  16. package/src/tool/routes/optimal-routes.css +252 -0
  17. package/src/tool/rule-of-three/component.astro +0 -249
  18. package/src/tool/rule-of-three/rule-of-three.css +247 -0
  19. package/src/tool/seo-content-optimizer/component.astro +0 -278
  20. package/src/tool/seo-content-optimizer/seo-content-optimizer.css +276 -0
  21. package/src/tool/speed-reader/component.astro +0 -400
  22. package/src/tool/speed-reader/speed-reader.css +398 -0
  23. package/src/tool/text-pixel-calculator/component.astro +0 -96
  24. package/src/tool/text-pixel-calculator/text-pixel-width-calculator.css +94 -0
  25. package/src/tool/whatsapp-link/component.astro +0 -264
  26. package/src/tool/whatsapp-link/whatsapp-link-generator.css +262 -0
@@ -18,162 +18,6 @@ const t = (ui ?? {}) as EnvBadgeSpainUI;
18
18
  </div>
19
19
  </div>
20
20
 
21
- <style>
22
- .deb-root {
23
- --deb-bg: #f8fafc;
24
- --deb-card-bg: #fff;
25
- --deb-card-border: #e2e8f0;
26
- --deb-text-main: #1e293b;
27
- --deb-text-muted: #64748b;
28
- --deb-text-sub: #475569;
29
- --deb-label-border: #e2e8f0;
30
- --deb-option-bg: #f1f5f9;
31
- --deb-option-border: #e2e8f0;
32
- --deb-option-hover: #e2e8f0;
33
- --deb-result-bg: #fff;
34
-
35
- width: 100%;
36
- max-width: 720px;
37
- margin: 0 auto;
38
- }
39
-
40
- :global(.theme-dark) .deb-root {
41
- --deb-bg: #0f172a;
42
- --deb-card-bg: #1e293b;
43
- --deb-card-border: rgba(255, 255, 255, 0.08);
44
- --deb-text-main: #f8fafc;
45
- --deb-text-muted: #94a3b8;
46
- --deb-text-sub: #cbd5e1;
47
- --deb-label-border: rgba(255, 255, 255, 0.1);
48
- --deb-option-bg: rgba(15, 23, 42, 0.5);
49
- --deb-option-border: rgba(255, 255, 255, 0.1);
50
- --deb-option-hover: rgba(255, 255, 255, 0.05);
51
- --deb-result-bg: rgba(15, 23, 42, 0.3);
52
- }
53
-
54
- .deb-main-container {
55
- background: var(--deb-card-bg);
56
- border: 1px solid var(--deb-card-border);
57
- border-radius: 2rem;
58
- padding: 2.5rem;
59
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
60
- }
61
-
62
- @media (max-width: 640px) {
63
- .deb-main-container {
64
- padding: 1.5rem;
65
- border-radius: 1.5rem;
66
- }
67
- }
68
-
69
- :global(.deb-badge-display h3) {
70
- font-size: 1.5rem;
71
- margin: 0;
72
- color: var(--deb-text-main);
73
- font-weight: 800;
74
- }
75
-
76
- :global(.deb-replica) {
77
- width: 200px;
78
- height: 200px;
79
- border-radius: 50%;
80
- border: 6px solid #111;
81
- position: relative;
82
- display: flex;
83
- flex-direction: column;
84
- justify-content: center;
85
- align-items: center;
86
- overflow: hidden;
87
- background: #fff;
88
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
89
- }
90
-
91
- :global(.deb-replica)::after {
92
- content: "DGT";
93
- position: absolute;
94
- top: 25px;
95
- right: 35px;
96
- font-size: 1.125rem;
97
- font-weight: 900;
98
- color: #000;
99
- opacity: 0.6;
100
- letter-spacing: -1px;
101
- z-index: 10;
102
- }
103
-
104
- :global(.deb-big-letter) {
105
- font-size: 7rem;
106
- font-weight: 900;
107
- line-height: 1;
108
- z-index: 2;
109
- margin-top: 15px;
110
- }
111
-
112
- :global(.deb-sub-text) {
113
- font-size: 1rem;
114
- font-weight: 800;
115
- text-transform: uppercase;
116
- z-index: 2;
117
- margin-top: -5px;
118
- }
119
-
120
- :global(.deb-replica-0) {
121
- background: #005aa3;
122
- color: #fff;
123
- }
124
-
125
- :global(.deb-replica-0)::after {
126
- color: #fff;
127
- opacity: 0.9;
128
- }
129
-
130
- :global(.deb-replica-eco) {
131
- background: linear-gradient(90deg, #00a455 50%, #005aa3 50%);
132
- color: #fff;
133
- }
134
-
135
- :global(.deb-replica-eco)::after {
136
- color: #fff;
137
- opacity: 0.9;
138
- }
139
-
140
- :global(.deb-replica-eco) :global(.deb-big-letter) {
141
- font-size: 5rem;
142
- margin-top: 25px;
143
- }
144
-
145
- :global(.deb-replica-c) {
146
- background: #00a455;
147
- color: #000;
148
- }
149
-
150
- :global(.deb-replica-c) :global(.deb-sub-text) { display: none; }
151
-
152
- :global(.deb-replica-b) {
153
- background: #ffdf00;
154
- color: #000;
155
- }
156
-
157
- :global(.deb-replica-b) :global(.deb-sub-text) { display: none; }
158
-
159
- :global(.deb-replica-a) {
160
- width: 200px;
161
- height: 120px;
162
- border-radius: 1rem;
163
- border: 6px solid #dc2626;
164
- background: #fff;
165
- color: #dc2626;
166
- display: flex;
167
- flex-direction: column;
168
- justify-content: center;
169
- align-items: center;
170
- }
171
-
172
- :global(.deb-replica-a) :global(.deb-big-letter) {
173
- font-size: 4rem;
174
- margin-top: 0;
175
- }
176
- </style>
177
21
 
178
22
  <script>
179
23
  import type { EnvBadgeSpainUI } from './ui';
@@ -0,0 +1,154 @@
1
+ .deb-root {
2
+ --deb-bg: #f8fafc;
3
+ --deb-card-bg: #fff;
4
+ --deb-card-border: #e2e8f0;
5
+ --deb-text-main: #1e293b;
6
+ --deb-text-muted: #64748b;
7
+ --deb-text-sub: #475569;
8
+ --deb-label-border: #e2e8f0;
9
+ --deb-option-bg: #f1f5f9;
10
+ --deb-option-border: #e2e8f0;
11
+ --deb-option-hover: #e2e8f0;
12
+ --deb-result-bg: #fff;
13
+
14
+ width: 100%;
15
+ max-width: 720px;
16
+ margin: 0 auto;
17
+ }
18
+
19
+ :global(.theme-dark) .deb-root {
20
+ --deb-bg: #0f172a;
21
+ --deb-card-bg: #1e293b;
22
+ --deb-card-border: rgba(255, 255, 255, 0.08);
23
+ --deb-text-main: #f8fafc;
24
+ --deb-text-muted: #94a3b8;
25
+ --deb-text-sub: #cbd5e1;
26
+ --deb-label-border: rgba(255, 255, 255, 0.1);
27
+ --deb-option-bg: rgba(15, 23, 42, 0.5);
28
+ --deb-option-border: rgba(255, 255, 255, 0.1);
29
+ --deb-option-hover: rgba(255, 255, 255, 0.05);
30
+ --deb-result-bg: rgba(15, 23, 42, 0.3);
31
+ }
32
+
33
+ .deb-main-container {
34
+ background: var(--deb-card-bg);
35
+ border: 1px solid var(--deb-card-border);
36
+ border-radius: 2rem;
37
+ padding: 2.5rem;
38
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
39
+ }
40
+
41
+ @media (max-width: 640px) {
42
+ .deb-main-container {
43
+ padding: 1.5rem;
44
+ border-radius: 1.5rem;
45
+ }
46
+ }
47
+
48
+ :global(.deb-badge-display h3) {
49
+ font-size: 1.5rem;
50
+ margin: 0;
51
+ color: var(--deb-text-main);
52
+ font-weight: 800;
53
+ }
54
+
55
+ :global(.deb-replica) {
56
+ width: 200px;
57
+ height: 200px;
58
+ border-radius: 50%;
59
+ border: 6px solid #111;
60
+ position: relative;
61
+ display: flex;
62
+ flex-direction: column;
63
+ justify-content: center;
64
+ align-items: center;
65
+ overflow: hidden;
66
+ background: #fff;
67
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
68
+ }
69
+
70
+ :global(.deb-replica)::after {
71
+ content: "DGT";
72
+ position: absolute;
73
+ top: 25px;
74
+ right: 35px;
75
+ font-size: 1.125rem;
76
+ font-weight: 900;
77
+ color: #000;
78
+ opacity: 0.6;
79
+ letter-spacing: -1px;
80
+ z-index: 10;
81
+ }
82
+
83
+ :global(.deb-big-letter) {
84
+ font-size: 7rem;
85
+ font-weight: 900;
86
+ line-height: 1;
87
+ z-index: 2;
88
+ margin-top: 15px;
89
+ }
90
+
91
+ :global(.deb-sub-text) {
92
+ font-size: 1rem;
93
+ font-weight: 800;
94
+ text-transform: uppercase;
95
+ z-index: 2;
96
+ margin-top: -5px;
97
+ }
98
+
99
+ :global(.deb-replica-0) {
100
+ background: #005aa3;
101
+ color: #fff;
102
+ }
103
+
104
+ :global(.deb-replica-0)::after {
105
+ color: #fff;
106
+ opacity: 0.9;
107
+ }
108
+
109
+ :global(.deb-replica-eco) {
110
+ background: linear-gradient(90deg, #00a455 50%, #005aa3 50%);
111
+ color: #fff;
112
+ }
113
+
114
+ :global(.deb-replica-eco)::after {
115
+ color: #fff;
116
+ opacity: 0.9;
117
+ }
118
+
119
+ :global(.deb-replica-eco) :global(.deb-big-letter) {
120
+ font-size: 5rem;
121
+ margin-top: 25px;
122
+ }
123
+
124
+ :global(.deb-replica-c) {
125
+ background: #00a455;
126
+ color: #000;
127
+ }
128
+
129
+ :global(.deb-replica-c) :global(.deb-sub-text) { display: none; }
130
+
131
+ :global(.deb-replica-b) {
132
+ background: #ffdf00;
133
+ color: #000;
134
+ }
135
+
136
+ :global(.deb-replica-b) :global(.deb-sub-text) { display: none; }
137
+
138
+ :global(.deb-replica-a) {
139
+ width: 200px;
140
+ height: 120px;
141
+ border-radius: 1rem;
142
+ border: 6px solid #dc2626;
143
+ background: #fff;
144
+ color: #dc2626;
145
+ display: flex;
146
+ flex-direction: column;
147
+ justify-content: center;
148
+ align-items: center;
149
+ }
150
+
151
+ :global(.deb-replica-a) :global(.deb-big-letter) {
152
+ font-size: 4rem;
153
+ margin-top: 0;
154
+ }
@@ -73,304 +73,6 @@ const t = (ui ?? {}) as MorseBeaconUI;
73
73
  </div>
74
74
  </div>
75
75
 
76
- <style>
77
- .mb-root {
78
- --mb-accent: #16a34a;
79
- --mb-accent-hover: #15803d;
80
- --mb-sos-bg: #fff1f2;
81
- --mb-sos-color: #e11d48;
82
- --mb-sos-border: #fecdd3;
83
- --mb-sos-hover-bg: #ffe4e6;
84
- --mb-display-bg: #111827;
85
- --mb-bulb-off: #1e293b;
86
- --mb-bulb-border-off: #334155;
87
- --mb-ticker-color: #4ade80;
88
- --mb-status-bg: rgba(30, 41, 59, 0.8);
89
- --mb-status-border: #334155;
90
- --mb-card-bg: #fff;
91
- --mb-card-border: #f1f5f9;
92
- --mb-text-main: #1e293b;
93
- --mb-text-label: #64748b;
94
- --mb-text-hint: #94a3b8;
95
- --mb-field-border: #e2e8f0;
96
- --mb-field-focus: #16a34a;
97
- --mb-extras-border: #f1f5f9;
98
- --mb-toggle-off: #cbd5e1;
99
-
100
- width: 100%;
101
- max-width: 42rem;
102
- margin: 0 auto;
103
- }
104
-
105
- :global(.theme-dark) .mb-root {
106
- --mb-card-bg: #0f172a;
107
- --mb-card-border: #1e293b;
108
- --mb-text-main: #e2e8f0;
109
- --mb-text-label: #94a3b8;
110
- --mb-text-hint: #475569;
111
- --mb-field-border: #334155;
112
- --mb-sos-bg: rgba(225, 29, 72, 0.1);
113
- --mb-sos-border: rgba(225, 29, 72, 0.2);
114
- --mb-sos-hover-bg: rgba(225, 29, 72, 0.15);
115
- --mb-extras-border: #1e293b;
116
- --mb-toggle-off: #475569;
117
- }
118
-
119
- .mb-card {
120
- border-radius: 1.5rem;
121
- overflow: hidden;
122
- border: 1px solid var(--mb-card-border);
123
- box-shadow: 0 20px 40px -12px rgba(0, 0, 0, 0.08);
124
- background: var(--mb-card-bg);
125
- }
126
-
127
- .mb-display {
128
- background: var(--mb-display-bg);
129
- padding: 2rem;
130
- position: relative;
131
- display: flex;
132
- flex-direction: column;
133
- align-items: center;
134
- justify-content: center;
135
- min-height: 220px;
136
- gap: 1.25rem;
137
- }
138
-
139
- .mb-bulb {
140
- width: 6rem;
141
- height: 6rem;
142
- border-radius: 50%;
143
- background: var(--mb-bulb-off);
144
- border: 4px solid var(--mb-bulb-border-off);
145
- display: flex;
146
- align-items: center;
147
- justify-content: center;
148
- color: #475569;
149
- position: relative;
150
- z-index: 1;
151
- transition: background 0.05s, border-color 0.05s, box-shadow 0.05s, color 0.05s;
152
- }
153
-
154
- .mb-ticker-wrap {
155
- height: 2rem;
156
- overflow: hidden;
157
- width: 100%;
158
- display: flex;
159
- align-items: center;
160
- justify-content: center;
161
- }
162
-
163
- .mb-ticker {
164
- color: var(--mb-ticker-color);
165
- font-size: 1.5rem;
166
- font-weight: 700;
167
- letter-spacing: 0.2em;
168
- white-space: nowrap;
169
- }
170
-
171
- .mb-status-badge {
172
- position: absolute;
173
- top: 1rem;
174
- right: 1rem;
175
- display: flex;
176
- align-items: center;
177
- gap: 0.5rem;
178
- background: var(--mb-status-bg);
179
- border: 1px solid var(--mb-status-border);
180
- padding: 0.375rem 0.75rem;
181
- border-radius: 9999px;
182
- backdrop-filter: blur(4px);
183
- }
184
-
185
- .mb-status-led {
186
- width: 0.5rem;
187
- height: 0.5rem;
188
- border-radius: 50%;
189
- background: #64748b;
190
- transition: background 0.2s;
191
- }
192
-
193
- .mb-status-text {
194
- font-size: 0.6875rem;
195
- font-weight: 700;
196
- color: #94a3b8;
197
- letter-spacing: 0.08em;
198
- }
199
-
200
- .mb-controls {
201
- padding: 2rem;
202
- display: flex;
203
- flex-direction: column;
204
- gap: 2rem;
205
- }
206
-
207
- .mb-field-header {
208
- display: flex;
209
- justify-content: space-between;
210
- align-items: center;
211
- margin-bottom: 0.75rem;
212
- }
213
-
214
- .mb-field-label {
215
- font-size: 0.8125rem;
216
- font-weight: 700;
217
- color: var(--mb-text-label);
218
- text-transform: uppercase;
219
- letter-spacing: 0.05em;
220
- }
221
-
222
- .mb-char-count {
223
- font-size: 0.8125rem;
224
- font-weight: 600;
225
- color: var(--mb-accent);
226
- }
227
-
228
- .mb-textarea {
229
- width: 100%;
230
- font-size: 1.125rem;
231
- font-weight: 700;
232
- color: var(--mb-text-main);
233
- background: transparent;
234
- border: none;
235
- border-bottom: 2px solid var(--mb-field-border);
236
- outline: none;
237
- padding: 0.5rem 0;
238
- resize: none;
239
- text-transform: uppercase;
240
- transition: border-color 0.2s;
241
- }
242
-
243
- .mb-textarea::placeholder {
244
- color: var(--mb-text-hint);
245
- text-transform: none;
246
- font-weight: 400;
247
- }
248
-
249
- .mb-textarea:focus {
250
- border-color: var(--mb-field-focus);
251
- }
252
-
253
- .mb-btn-row {
254
- display: grid;
255
- grid-template-columns: 1fr 1fr;
256
- gap: 0.75rem;
257
- }
258
-
259
- .mb-btn {
260
- display: flex;
261
- align-items: center;
262
- justify-content: center;
263
- gap: 0.5rem;
264
- padding: 1rem 1.25rem;
265
- border-radius: 0.75rem;
266
- font-weight: 700;
267
- font-size: 0.875rem;
268
- letter-spacing: 0.04em;
269
- text-transform: uppercase;
270
- border: none;
271
- cursor: pointer;
272
- transition: background 0.15s, transform 0.1s, opacity 0.15s;
273
- }
274
-
275
- .mb-btn:active {
276
- transform: scale(0.97);
277
- }
278
-
279
- .mb-btn:disabled {
280
- opacity: 0.5;
281
- cursor: not-allowed;
282
- }
283
-
284
- .mb-btn-transmit {
285
- background: var(--mb-accent);
286
- color: #fff;
287
- box-shadow: 0 4px 14px rgba(22, 163, 74, 0.35);
288
- }
289
-
290
- .mb-btn-transmit:hover:not(:disabled) {
291
- background: var(--mb-accent-hover);
292
- }
293
-
294
- .mb-btn-sos {
295
- background: var(--mb-sos-bg);
296
- color: var(--mb-sos-color);
297
- border: 2px solid var(--mb-sos-border);
298
- }
299
-
300
- .mb-btn-sos:hover:not(:disabled) {
301
- background: var(--mb-sos-hover-bg);
302
- }
303
-
304
- .mb-extras {
305
- display: flex;
306
- align-items: center;
307
- justify-content: center;
308
- padding-top: 1rem;
309
- border-top: 1px solid var(--mb-extras-border);
310
- }
311
-
312
- .mb-toggle-label {
313
- display: flex;
314
- align-items: center;
315
- gap: 0.75rem;
316
- cursor: pointer;
317
- }
318
-
319
- .mb-toggle-wrap {
320
- position: relative;
321
- display: flex;
322
- align-items: center;
323
- }
324
-
325
- .mb-toggle {
326
- position: absolute;
327
- opacity: 0;
328
- width: 0;
329
- height: 0;
330
- }
331
-
332
- .mb-toggle-track {
333
- width: 2.75rem;
334
- height: 1.5rem;
335
- background: var(--mb-toggle-off);
336
- border-radius: 9999px;
337
- cursor: pointer;
338
- transition: background 0.2s;
339
- position: relative;
340
- }
341
-
342
- .mb-toggle-track::after {
343
- content: '';
344
- position: absolute;
345
- top: 2px;
346
- left: 2px;
347
- width: 1.25rem;
348
- height: 1.25rem;
349
- border-radius: 50%;
350
- background: #fff;
351
- transition: transform 0.2s;
352
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
353
- }
354
-
355
- .mb-toggle:checked + .mb-toggle-track {
356
- background: var(--mb-accent);
357
- }
358
-
359
- .mb-toggle:checked + .mb-toggle-track::after {
360
- transform: translateX(1.25rem);
361
- }
362
-
363
- .mb-toggle-text {
364
- font-size: 0.9375rem;
365
- font-weight: 500;
366
- color: var(--mb-text-label);
367
- transition: color 0.15s;
368
- }
369
-
370
- .mb-toggle-label:hover .mb-toggle-text {
371
- color: var(--mb-accent);
372
- }
373
- </style>
374
76
 
375
77
  <script>
376
78
  import { MorseEngine } from './logic/MorseEngine';