@jjlmoya/utils-audiovisual 1.14.0 → 1.16.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 (44) hide show
  1. package/package.json +7 -4
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/entries.ts +32 -0
  4. package/src/tool/chromaticLens/chromatic-lens-color-palette-extraction-online.css +308 -0
  5. package/src/tool/chromaticLens/component.astro +0 -309
  6. package/src/tool/chromaticLens/entry.ts +39 -0
  7. package/src/tool/chromaticLens/index.ts +2 -41
  8. package/src/tool/collageMaker/component.astro +0 -387
  9. package/src/tool/collageMaker/entry.ts +48 -0
  10. package/src/tool/collageMaker/free-online-photo-collage-maker-professional-compositions.css +386 -0
  11. package/src/tool/collageMaker/index.ts +2 -50
  12. package/src/tool/exifCleaner/component.astro +0 -290
  13. package/src/tool/exifCleaner/entry.ts +53 -0
  14. package/src/tool/exifCleaner/exif-metadata-cleaner-remove-gps-photo-privacy.css +289 -0
  15. package/src/tool/exifCleaner/index.ts +2 -55
  16. package/src/tool/imageCompressor/component.astro +0 -498
  17. package/src/tool/imageCompressor/entry.ts +56 -0
  18. package/src/tool/imageCompressor/index.ts +2 -58
  19. package/src/tool/imageCompressor/online-image-compressor-reduce-file-size-no-quality-loss.css +496 -0
  20. package/src/tool/printQualityCalculator/component.astro +0 -485
  21. package/src/tool/printQualityCalculator/entry.ts +66 -0
  22. package/src/tool/printQualityCalculator/index.ts +2 -68
  23. package/src/tool/printQualityCalculator/print-quality-calculator-pixels-to-cm-dpi.css +483 -0
  24. package/src/tool/privacyBlur/component.astro +0 -334
  25. package/src/tool/privacyBlur/entry.ts +45 -0
  26. package/src/tool/privacyBlur/index.ts +2 -47
  27. package/src/tool/privacyBlur/online-privacy-editor-pixelate-blur-faces-photos.css +332 -0
  28. package/src/tool/subtitleSync/component.astro +0 -327
  29. package/src/tool/subtitleSync/entry.ts +45 -0
  30. package/src/tool/subtitleSync/index.ts +2 -47
  31. package/src/tool/subtitleSync/synchronize-srt-subtitles-online-adjust-timing-free.css +325 -0
  32. package/src/tool/timelapseCalculator/component.astro +0 -285
  33. package/src/tool/timelapseCalculator/entry.ts +48 -0
  34. package/src/tool/timelapseCalculator/index.ts +2 -50
  35. package/src/tool/timelapseCalculator/timelapse-hyperlapse-calculator-perfect-intervals.css +283 -0
  36. package/src/tool/tvDistance/component.astro +0 -437
  37. package/src/tool/tvDistance/entry.ts +45 -0
  38. package/src/tool/tvDistance/index.ts +2 -47
  39. package/src/tool/tvDistance/tv-viewing-distance-calculator-thx-4k-optimal-screen.css +435 -0
  40. package/src/tool/videoFrameExtractor/component.astro +0 -428
  41. package/src/tool/videoFrameExtractor/entry.ts +49 -0
  42. package/src/tool/videoFrameExtractor/index.ts +2 -51
  43. package/src/tool/videoFrameExtractor/online-video-frame-extractor-capture-hd-stills.css +426 -0
  44. package/src/tools.ts +1 -1
@@ -0,0 +1,483 @@
1
+ :root {
2
+ --pq-bg: #fff;
3
+ --pq-border: #cbd5e1;
4
+ --pq-primary: #6366f1;
5
+ --pq-primary-light: #e0e7ff;
6
+ --pq-accent: #4f46e5;
7
+ }
8
+
9
+ :global(.theme-dark) {
10
+ --pq-bg: #0f172a;
11
+ --pq-border: #334155;
12
+ --pq-primary: #6366f1;
13
+ --pq-primary-light: rgba(99, 102, 241, 0.2);
14
+ --pq-accent: #818cf8;
15
+ }
16
+
17
+ :global(.pq-wrapper) {
18
+ width: 100%;
19
+ max-width: 56rem;
20
+ margin: 0 auto;
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 2rem;
24
+ padding: 1rem;
25
+ }
26
+
27
+ .pq-hidden {
28
+ display: none;
29
+ }
30
+
31
+ :global(.pq-drop-zone) {
32
+ position: relative;
33
+ cursor: pointer;
34
+ border: 2px dashed var(--pq-border);
35
+ border-radius: 1rem;
36
+ padding: 3rem;
37
+ transition: border-color 0.3s, background 0.3s;
38
+ }
39
+
40
+ :global(.theme-dark .pq-drop-zone) {
41
+ border-color: var(--pq-border);
42
+ }
43
+ :global(.pq-drop-zone:hover),
44
+ :global(.pq-drop-zone.pq-drop-active) {
45
+ border-color: var(--pq-primary);
46
+ background: rgba(99, 102, 241, 0.04);
47
+ }
48
+ :global(.pq-drop-inner) {
49
+ display: flex;
50
+ flex-direction: column;
51
+ align-items: center;
52
+ justify-content: center;
53
+ text-align: center;
54
+ gap: 1rem;
55
+ }
56
+ :global(.pq-upload-icon-wrap) {
57
+ width: 5rem;
58
+ height: 5rem;
59
+ background: var(--pq-primary-light);
60
+ border-radius: 50%;
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ color: var(--pq-accent);
65
+ transition: transform 0.3s;
66
+ }
67
+
68
+ :global(.theme-dark .pq-upload-icon-wrap) {
69
+ background: rgba(99, 102, 241, 0.2);
70
+ color: #818cf8;
71
+ }
72
+ :global(.pq-drop-zone:hover .pq-upload-icon-wrap) {
73
+ transform: scale(1.1);
74
+ }
75
+ :global(.pq-drop-title) {
76
+ font-size: 1.25rem;
77
+ font-weight: 700;
78
+ color: #0f172a;
79
+ margin: 0;
80
+ }
81
+
82
+ :global(.theme-dark .pq-drop-title) {
83
+ color: #f1f5f9;
84
+ }
85
+ :global(.pq-drop-sub) {
86
+ color: #64748b;
87
+ margin: 0.25rem 0 0;
88
+ font-size: 0.95rem;
89
+ }
90
+ :global(.pq-drop-overlay) {
91
+ position: absolute;
92
+ inset: 0;
93
+ background: linear-gradient(135deg, rgba(99,102,241,0.04), rgba(168,85,247,0.04));
94
+ border-radius: 1rem;
95
+ opacity: 0;
96
+ pointer-events: none;
97
+ transition: opacity 0.3s;
98
+ }
99
+ :global(.pq-drop-zone:hover .pq-drop-overlay) { opacity: 1; }
100
+
101
+ :global(.pq-results) {
102
+ display: flex;
103
+ flex-direction: column;
104
+ gap: 2rem;
105
+ animation: pq-fade-up 0.5s ease-out;
106
+ }
107
+
108
+ @keyframes pq-fade-up {
109
+ from {
110
+ opacity: 0;
111
+ transform: translateY(1.25rem);
112
+ }
113
+ to {
114
+ opacity: 1;
115
+ transform: translateY(0);
116
+ }
117
+ }
118
+
119
+ :global(.pq-file-card) {
120
+ background: #fff;
121
+ border: 1px solid #e2e8f0;
122
+ border-radius: 0.75rem;
123
+ box-shadow: 0 4px 24px -8px rgba(0,0,0,0.1);
124
+ padding: 1.5rem;
125
+ }
126
+
127
+ :global(.theme-dark .pq-file-card) {
128
+ background: #0f172a;
129
+ border-color: #1e293b;
130
+ }
131
+ :global(.pq-file-left) {
132
+ display: flex;
133
+ align-items: center;
134
+ gap: 1.5rem;
135
+ }
136
+ :global(.pq-preview-wrap) {
137
+ position: relative;
138
+ width: 8rem;
139
+ height: 8rem;
140
+ flex-shrink: 0;
141
+ }
142
+ :global(.pq-preview-img) {
143
+ width: 100%;
144
+ height: 100%;
145
+ object-fit: cover;
146
+ border-radius: 0.5rem;
147
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
148
+ }
149
+ :global(.pq-file-name) {
150
+ font-weight: 700;
151
+ color: #0f172a;
152
+ font-size: 1rem;
153
+ margin: 0 0 0.5rem;
154
+ overflow: hidden;
155
+ text-overflow: ellipsis;
156
+ white-space: nowrap;
157
+ max-width: 20rem;
158
+ }
159
+
160
+ :global(.theme-dark .pq-file-name) {
161
+ color: #f1f5f9;
162
+ }
163
+ :global(.pq-file-meta) {
164
+ display: flex;
165
+ flex-wrap: wrap;
166
+ gap: 1rem;
167
+ }
168
+ :global(.pq-meta-item) {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 0.25rem;
172
+ font-size: 0.85rem;
173
+ color: #64748b;
174
+ }
175
+
176
+ :global(.pq-main-grid) {
177
+ display: grid;
178
+ grid-template-columns: 1fr 1fr;
179
+ gap: 2rem;
180
+ }
181
+
182
+ @media (max-width: 640px) {
183
+ .pq-main-grid { grid-template-columns: 1fr; }
184
+ }
185
+
186
+ :global(.pq-config-panel) {
187
+ background: #f8fafc;
188
+ border: 1px solid #e2e8f0;
189
+ border-radius: 0.75rem;
190
+ padding: 1.5rem;
191
+ }
192
+
193
+ :global(.theme-dark .pq-config-panel) {
194
+ background: rgba(30, 41, 59, 0.5);
195
+ border-color: var(--pq-border);
196
+ }
197
+ :global(.pq-config-label) {
198
+ display: block;
199
+ font-size: 0.875rem;
200
+ font-weight: 500;
201
+ color: #475569;
202
+ margin-bottom: 1rem;
203
+ }
204
+
205
+ :global(.theme-dark .pq-config-label) {
206
+ color: #94a3b8;
207
+ }
208
+ :global(.pq-slider) {
209
+ width: 100%;
210
+ height: 0.5rem;
211
+ background: #e2e8f0;
212
+ border-radius: 0.5rem;
213
+ appearance: none;
214
+ cursor: pointer;
215
+ accent-color: #6366f1;
216
+ margin-bottom: 1rem;
217
+ }
218
+
219
+ :global(.theme-dark .pq-slider) {
220
+ background: #334155;
221
+ }
222
+ :global(.pq-dpi-row) {
223
+ display: flex;
224
+ align-items: center;
225
+ gap: 1rem;
226
+ margin-bottom: 1.5rem;
227
+ }
228
+ :global(.pq-dpi-number) {
229
+ width: 6rem;
230
+ border: 1px solid #e2e8f0;
231
+ border-radius: 0.5rem;
232
+ background: #fff;
233
+ color: #0f172a;
234
+ font-size: 1rem;
235
+ font-weight: 700;
236
+ text-align: center;
237
+ padding: 0.4rem 0.5rem;
238
+ outline: none;
239
+ }
240
+ :global(.pq-dpi-number:focus) { border-color: var(--pq-primary); }
241
+
242
+ :global(.theme-dark .pq-dpi-number) {
243
+ background: #0f172a;
244
+ border-color: var(--pq-border);
245
+ color: #f1f5f9;
246
+ }
247
+ :global(.pq-dpi-label) {
248
+ font-size: 0.875rem;
249
+ color: #64748b;
250
+ }
251
+ :global(.pq-presets) {
252
+ display: flex;
253
+ flex-wrap: wrap;
254
+ gap: 0.5rem;
255
+ }
256
+ :global(.pq-preset-btn) {
257
+ padding: 0.25rem 0.75rem;
258
+ font-size: 0.75rem;
259
+ font-weight: 500;
260
+ border-radius: 999px;
261
+ background: #e2e8f0;
262
+ color: #475569;
263
+ border: none;
264
+ cursor: pointer;
265
+ transition: background 0.15s, color 0.15s;
266
+ }
267
+ :global(.pq-preset-btn:hover) { background: #cbd5e1; }
268
+
269
+ :global(.theme-dark .pq-preset-btn) {
270
+ background: #334155;
271
+ color: #94a3b8;
272
+ }
273
+
274
+ :global(.theme-dark .pq-preset-btn:hover) {
275
+ background: #475569;
276
+ }
277
+ :global(.pq-preset-active) {
278
+ background: var(--pq-primary-light);
279
+ color: #4338ca;
280
+ box-shadow: 0 0 0 1px rgba(99, 102, 241, 0.2);
281
+ }
282
+
283
+ :global(.theme-dark .pq-preset-active) {
284
+ background: rgba(99, 102, 241, 0.3);
285
+ color: #a5b4fc;
286
+ }
287
+
288
+ :global(.pq-output-panel) {
289
+ display: flex;
290
+ }
291
+ :global(.pq-output-gradient) {
292
+ flex: 1;
293
+ display: flex;
294
+ flex-direction: column;
295
+ justify-content: center;
296
+ background: linear-gradient(135deg, #6366f1, #a855f7);
297
+ border-radius: 0.75rem;
298
+ padding: 1.5rem;
299
+ color: #fff;
300
+ box-shadow: 0 10px 40px -10px rgba(99,102,241,0.4);
301
+ position: relative;
302
+ overflow: hidden;
303
+ }
304
+ :global(.pq-output-blur-bg) {
305
+ position: absolute;
306
+ top: 0; right: 0;
307
+ width: 8rem; height: 8rem;
308
+ background: rgba(255,255,255,0.1);
309
+ border-radius: 50%;
310
+ filter: blur(2rem);
311
+ transform: translate(2rem, -2rem);
312
+ pointer-events: none;
313
+ }
314
+ :global(.pq-output-subtitle) {
315
+ font-size: 0.75rem;
316
+ font-weight: 500;
317
+ text-transform: uppercase;
318
+ letter-spacing: 0.05em;
319
+ color: rgba(224,231,255,0.9);
320
+ margin: 0 0 0.5rem;
321
+ position: relative;
322
+ }
323
+ :global(.pq-output-size) {
324
+ display: flex;
325
+ align-items: baseline;
326
+ gap: 0.5rem;
327
+ font-size: 2.5rem;
328
+ font-weight: 900;
329
+ margin-bottom: 0.25rem;
330
+ position: relative;
331
+ }
332
+ :global(.pq-size-sep) {
333
+ font-size: 1.5rem;
334
+ opacity: 0.5;
335
+ }
336
+ :global(.pq-size-unit) {
337
+ font-size: 1.5rem;
338
+ }
339
+ :global(.pq-output-inches) {
340
+ color: rgba(199, 210, 254, 0.8);
341
+ font-size: 0.875rem;
342
+ margin-bottom: 1.5rem;
343
+ position: relative;
344
+ }
345
+ :global(.pq-quality-section) {
346
+ padding-top: 1rem;
347
+ border-top: 1px solid rgba(255,255,255,0.2);
348
+ position: relative;
349
+ }
350
+ :global(.pq-quality-badge) {
351
+ display: inline-flex;
352
+ align-items: center;
353
+ gap: 0.375rem;
354
+ padding: 0.25rem 0.75rem;
355
+ border-radius: 999px;
356
+ font-size: 0.875rem;
357
+ font-weight: 700;
358
+ background: rgba(255,255,255,0.2);
359
+ backdrop-filter: blur(4px);
360
+ margin-bottom: 0.5rem;
361
+ }
362
+ :global(.pq-badge-green) {
363
+ background: rgba(16, 185, 129, 0.25);
364
+ box-shadow: 0 0 0 1px rgba(52, 211, 153, 0.3);
365
+ }
366
+
367
+ :global(.pq-badge-yellow) {
368
+ background: rgba(234, 179, 8, 0.25);
369
+ box-shadow: 0 0 0 1px rgba(253, 224, 71, 0.3);
370
+ }
371
+
372
+ :global(.pq-badge-red) {
373
+ background: rgba(239, 68, 68, 0.25);
374
+ box-shadow: 0 0 0 1px rgba(252, 165, 165, 0.3);
375
+ }
376
+
377
+ :global(.pq-badge-slate) {
378
+ background: rgba(100, 116, 139, 0.25);
379
+ box-shadow: 0 0 0 1px rgba(148, 163, 184, 0.3);
380
+ }
381
+ :global(.pq-quality-desc) {
382
+ font-size: 0.875rem;
383
+ color: rgba(199,210,254,0.9);
384
+ line-height: 1.4;
385
+ margin: 0;
386
+ }
387
+
388
+ :global(.pq-formats-card) {
389
+ background: #fff;
390
+ border: 1px solid #e2e8f0;
391
+ border-radius: 0.75rem;
392
+ padding: 1.5rem;
393
+ }
394
+
395
+ :global(.theme-dark .pq-formats-card) {
396
+ background: #0f172a;
397
+ border-color: #1e293b;
398
+ }
399
+ :global(.pq-formats-title) {
400
+ display: flex;
401
+ align-items: center;
402
+ gap: 0.5rem;
403
+ font-weight: 700;
404
+ font-size: 1rem;
405
+ color: #0f172a;
406
+ margin: 0 0 1rem;
407
+ }
408
+
409
+ :global(.theme-dark .pq-formats-title) {
410
+ color: #f1f5f9;
411
+ }
412
+ :global(.pq-formats-scroll) {
413
+ overflow-x: auto;
414
+ }
415
+ :global(.pq-formats-table) {
416
+ width: 100%;
417
+ border-collapse: collapse;
418
+ font-size: 0.875rem;
419
+ }
420
+ :global(.pq-formats-table th) {
421
+ text-align: left;
422
+ padding: 0.75rem 1rem;
423
+ font-size: 0.75rem;
424
+ font-weight: 700;
425
+ text-transform: uppercase;
426
+ letter-spacing: 0.05em;
427
+ color: #475569;
428
+ background: #f8fafc;
429
+ }
430
+
431
+ :global(.theme-dark .pq-formats-table th) {
432
+ background: #1e293b;
433
+ color: #94a3b8;
434
+ }
435
+ :global(.pq-formats-row) {
436
+ border-bottom: 1px solid #f1f5f9;
437
+ transition: background 0.15s;
438
+ }
439
+
440
+ :global(.pq-formats-row:hover) {
441
+ background: #f8fafc;
442
+ }
443
+
444
+ :global(.theme-dark .pq-formats-row) {
445
+ border-color: #1e293b;
446
+ }
447
+
448
+ :global(.theme-dark .pq-formats-row:hover) {
449
+ background: #1e293b;
450
+ }
451
+ :global(.pq-td) {
452
+ padding: 0.75rem 1rem;
453
+ color: #475569;
454
+ }
455
+
456
+ :global(.theme-dark .pq-td) {
457
+ color: #94a3b8;
458
+ }
459
+ :global(.pq-td-name) {
460
+ font-weight: 600;
461
+ color: #0f172a;
462
+ }
463
+
464
+ :global(.theme-dark .pq-td-name) {
465
+ color: #f1f5f9;
466
+ }
467
+ :global(.pq-status) {
468
+ display: inline-flex;
469
+ align-items: center;
470
+ gap: 0.35rem;
471
+ font-weight: 600;
472
+ font-size: 0.8rem;
473
+ }
474
+ :global(.pq-status-ok) { color: #16a34a; }
475
+ :global(.pq-status-no) { color: #d97706; }
476
+
477
+ :global(.theme-dark .pq-status-ok) {
478
+ color: #4ade80;
479
+ }
480
+
481
+ :global(.theme-dark .pq-status-no) {
482
+ color: #fbbf24;
483
+ }