@jjlmoya/utils-audiovisual 1.15.0 → 1.17.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 (22) hide show
  1. package/package.json +5 -3
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/tool/chromaticLens/component.astro +0 -309
  4. package/src/tool/collageMaker/component.astro +0 -387
  5. package/src/tool/exifCleaner/component.astro +0 -290
  6. package/src/tool/imageCompressor/component.astro +0 -498
  7. package/src/tool/printQualityCalculator/component.astro +0 -485
  8. package/src/tool/privacyBlur/component.astro +0 -334
  9. package/src/tool/subtitleSync/component.astro +0 -327
  10. package/src/tool/timelapseCalculator/component.astro +0 -285
  11. package/src/tool/tvDistance/component.astro +0 -437
  12. package/src/tool/videoFrameExtractor/component.astro +0 -428
  13. /package/src/tool/chromaticLens/{style.css → chromatic-lens-color-palette-extraction-online.css} +0 -0
  14. /package/src/tool/collageMaker/{style.css → free-online-photo-collage-maker-professional-compositions.css} +0 -0
  15. /package/src/tool/exifCleaner/{style.css → exif-metadata-cleaner-remove-gps-photo-privacy.css} +0 -0
  16. /package/src/tool/imageCompressor/{style.css → online-image-compressor-reduce-file-size-no-quality-loss.css} +0 -0
  17. /package/src/tool/printQualityCalculator/{style.css → print-quality-calculator-pixels-to-cm-dpi.css} +0 -0
  18. /package/src/tool/privacyBlur/{style.css → online-privacy-editor-pixelate-blur-faces-photos.css} +0 -0
  19. /package/src/tool/subtitleSync/{style.css → synchronize-srt-subtitles-online-adjust-timing-free.css} +0 -0
  20. /package/src/tool/timelapseCalculator/{style.css → timelapse-hyperlapse-calculator-perfect-intervals.css} +0 -0
  21. /package/src/tool/tvDistance/{style.css → tv-viewing-distance-calculator-thx-4k-optimal-screen.css} +0 -0
  22. /package/src/tool/videoFrameExtractor/{style.css → online-video-frame-extractor-capture-hd-stills.css} +0 -0
@@ -300,391 +300,4 @@ const dropSub = (ui.dropSub ?? '').replace('{link}', `<span class="cm-drop-link"
300
300
  });
301
301
  </script>
302
302
 
303
- <style>
304
- :global(.cm-root) {
305
- --cm-bg: #fff;
306
- --cm-bg-muted: #f8fafc;
307
- --cm-border: #e2e8f0;
308
- --cm-text: #0f172a;
309
- --cm-text-muted: #64748b;
310
- --cm-primary: #6366f1;
311
- --cm-primary-light: #eef2ff;
312
- --cm-shadow: rgba(0,0,0,0.07);
313
- --cm-radius: 1rem;
314
303
 
315
- max-width: 1100px;
316
- margin: 0 auto;
317
- padding: 1rem;
318
- }
319
-
320
- :global(.theme-dark .cm-root) {
321
- --cm-bg: #1e293b;
322
- --cm-bg-muted: #0f172a;
323
- --cm-border: #334155;
324
- --cm-text: #f1f5f9;
325
- --cm-text-muted: #94a3b8;
326
- --cm-primary: #818cf8;
327
- --cm-primary-light: #1e1b4b;
328
- --cm-shadow: rgba(0,0,0,0.4);
329
- }
330
-
331
- :global(.cm-card) {
332
- background: var(--cm-bg);
333
- border: 1px solid var(--cm-border);
334
- border-radius: var(--cm-radius);
335
- box-shadow: 0 4px 24px var(--cm-shadow);
336
- overflow: hidden;
337
- }
338
-
339
- :global(.cm-top-row) {
340
- display: grid;
341
- grid-template-columns: 300px 1fr;
342
- gap: 0;
343
- }
344
-
345
- @media (max-width: 700px) {
346
- .cm-top-row {
347
- grid-template-columns: 1fr;
348
- }
349
- }
350
-
351
- :global(.cm-left-col) {
352
- padding: 1.25rem;
353
- border-right: 1px solid var(--cm-border);
354
- display: flex;
355
- flex-direction: column;
356
- gap: 1rem;
357
- }
358
-
359
- @media (max-width: 700px) {
360
- .cm-left-col {
361
- border-right: none;
362
- border-bottom: 1px solid var(--cm-border);
363
- }
364
- }
365
-
366
- :global(.cm-drop-zone) {
367
- position: relative;
368
- background: var(--cm-bg-muted);
369
- border: 2px dashed var(--cm-border);
370
- border-radius: 0.75rem;
371
- padding: 1.5rem 1rem;
372
- text-align: center;
373
- cursor: pointer;
374
- transition: border-color 0.2s, background 0.2s;
375
- display: flex;
376
- flex-direction: column;
377
- align-items: center;
378
- gap: 0.35rem;
379
- color: var(--cm-primary);
380
- }
381
-
382
- :global(.cm-drop-zone input[type="file"]) {
383
- position: absolute;
384
- inset: 0;
385
- opacity: 0;
386
- cursor: pointer;
387
- width: 100%;
388
- height: 100%;
389
- }
390
-
391
- :global(.cm-drop-zone:hover),
392
- :global(.cm-drop-zone-over) {
393
- border-color: var(--cm-primary);
394
- background: var(--cm-primary-light);
395
- }
396
-
397
- :global(.cm-drop-title) {
398
- font-size: 0.9rem;
399
- font-weight: 700;
400
- color: var(--cm-text);
401
- margin: 0;
402
- }
403
-
404
- :global(.cm-drop-sub) {
405
- font-size: 0.75rem;
406
- color: var(--cm-text-muted);
407
- margin: 0;
408
- }
409
-
410
- :global(.cm-drop-link) {
411
- color: var(--cm-primary);
412
- font-weight: 600;
413
- cursor: pointer;
414
- }
415
-
416
- :global(.cm-section-label) {
417
- display: block;
418
- font-size: 0.65rem;
419
- font-weight: 700;
420
- text-transform: uppercase;
421
- letter-spacing: 0.08em;
422
- color: var(--cm-text-muted);
423
- }
424
-
425
- :global(.cm-section-header) {
426
- display: flex;
427
- justify-content: space-between;
428
- align-items: center;
429
- }
430
-
431
- :global(.cm-badge) {
432
- background: var(--cm-primary-light);
433
- color: var(--cm-primary);
434
- font-size: 0.65rem;
435
- font-weight: 700;
436
- padding: 0.15rem 0.45rem;
437
- border-radius: 9999px;
438
- }
439
-
440
- :global(.cm-thumbs) {
441
- display: grid;
442
- grid-template-columns: repeat(auto-fill, minmax(48px, 1fr));
443
- gap: 0.35rem;
444
- margin-top: 0.5rem;
445
- }
446
-
447
- :global(.cm-thumb) {
448
- position: relative;
449
- aspect-ratio: 1;
450
- border-radius: 0.4rem;
451
- overflow: hidden;
452
- border: 2px solid transparent;
453
- transition: border-color 0.15s;
454
- }
455
-
456
- :global(.cm-thumb:hover) {
457
- border-color: var(--cm-primary);
458
- }
459
-
460
- :global(.cm-thumb img) {
461
- width: 100%;
462
- height: 100%;
463
- object-fit: cover;
464
- display: block;
465
- }
466
-
467
- :global(.cm-thumb-num) {
468
- position: absolute;
469
- bottom: 2px;
470
- left: 3px;
471
- font-size: 0.55rem;
472
- font-weight: 800;
473
- color: var(--cm-bg);
474
- text-shadow: 0 1px 2px rgba(0,0,0,0.8);
475
- line-height: 1;
476
- }
477
-
478
- :global(.cm-thumb-del) {
479
- position: absolute;
480
- top: 2px;
481
- right: 2px;
482
- width: 16px;
483
- height: 16px;
484
- background: rgba(239,68,68,0.9);
485
- color: var(--cm-bg);
486
- border: none;
487
- border-radius: 50%;
488
- cursor: pointer;
489
- display: none;
490
- align-items: center;
491
- justify-content: center;
492
- padding: 0;
493
- transition: background 0.15s;
494
- }
495
-
496
- :global(.cm-thumb:hover .cm-thumb-del) {
497
- display: flex;
498
- }
499
-
500
- :global(.cm-thumb-del:hover) {
501
- background: #dc2626;
502
- }
503
-
504
- :global(.cm-preview-col) {
505
- padding: 1.25rem;
506
- display: flex;
507
- flex-direction: column;
508
- gap: 0.5rem;
509
- min-height: 260px;
510
- }
511
-
512
- :global(.cm-preview-placeholder) {
513
- flex: 1;
514
- background: var(--cm-bg-muted);
515
- border: 2px dashed var(--cm-border);
516
- border-radius: 0.75rem;
517
- display: flex;
518
- flex-direction: column;
519
- align-items: center;
520
- justify-content: center;
521
- gap: 0.5rem;
522
- color: var(--cm-text-muted);
523
- }
524
-
525
- :global(.cm-preview-placeholder p) {
526
- font-size: 0.8rem;
527
- margin: 0;
528
- }
529
-
530
- :global(.cm-canvas) {
531
- width: 100%;
532
- height: auto;
533
- border-radius: 0.75rem;
534
- border: 1px solid var(--cm-border);
535
- display: block;
536
- }
537
-
538
- :global(.cm-dims-badge) {
539
- font-size: 0.65rem;
540
- font-weight: 600;
541
- color: var(--cm-text-muted);
542
- background: var(--cm-bg-muted);
543
- border: 1px solid var(--cm-border);
544
- border-radius: 9999px;
545
- padding: 0.15rem 0.5rem;
546
- }
547
-
548
- :global(.cm-section-divider) {
549
- border-top: 1px solid var(--cm-border);
550
- padding: 1rem 1.25rem;
551
- display: flex;
552
- flex-direction: column;
553
- gap: 0.75rem;
554
- }
555
-
556
- :global(.cm-layouts) {
557
- display: grid;
558
- grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
559
- gap: 0.4rem;
560
- }
561
-
562
- :global(.cm-layout-btn) {
563
- display: flex;
564
- flex-direction: column;
565
- align-items: center;
566
- gap: 0.2rem;
567
- padding: 0.5rem 0.25rem;
568
- background: var(--cm-bg-muted);
569
- border: 2px solid var(--cm-border);
570
- border-radius: 0.625rem;
571
- cursor: pointer;
572
- transition: border-color 0.15s, background 0.15s, opacity 0.15s;
573
- color: var(--cm-text-muted);
574
- position: relative;
575
- }
576
-
577
- :global(.cm-layout-btn span) {
578
- font-size: 0.55rem;
579
- font-weight: 600;
580
- text-align: center;
581
- line-height: 1.2;
582
- }
583
-
584
- :global(.cm-layout-btn:hover:not(:disabled)) {
585
- border-color: var(--cm-primary);
586
- color: var(--cm-primary);
587
- background: var(--cm-primary-light);
588
- }
589
-
590
- :global(.cm-layout-btn-active) {
591
- border-color: var(--cm-primary);
592
- background: var(--cm-primary-light);
593
- color: var(--cm-primary);
594
- }
595
-
596
- :global(.cm-layout-btn-disabled) {
597
- opacity: 0.45;
598
- cursor: not-allowed;
599
- }
600
-
601
- :global(.cm-layout-need) {
602
- position: absolute;
603
- top: 2px;
604
- right: 4px;
605
- font-size: 0.55rem;
606
- font-weight: 800;
607
- color: var(--cm-text-muted);
608
- background: var(--cm-bg);
609
- border: 1px solid var(--cm-border);
610
- border-radius: 9999px;
611
- padding: 0 3px;
612
- line-height: 1.4;
613
- }
614
-
615
- :global(.cm-settings-inline) {
616
- display: flex;
617
- flex-wrap: wrap;
618
- align-items: flex-end;
619
- gap: 1rem;
620
- }
621
-
622
- :global(.cm-setting) {
623
- display: flex;
624
- flex-direction: column;
625
- gap: 0.3rem;
626
- }
627
-
628
- :global(.cm-setting-label) {
629
- font-size: 0.7rem;
630
- font-weight: 600;
631
- color: var(--cm-text-muted);
632
- }
633
-
634
- :global(.cm-slider) {
635
- accent-color: var(--cm-primary);
636
- width: 120px;
637
- }
638
-
639
- :global(.cm-color-row) {
640
- display: flex;
641
- align-items: center;
642
- gap: 0.5rem;
643
- }
644
-
645
- :global(.cm-color-swatch) {
646
- width: 32px;
647
- height: 32px;
648
- border: 2px solid var(--cm-border);
649
- border-radius: 0.4rem;
650
- cursor: pointer;
651
- padding: 2px;
652
- background: transparent;
653
- }
654
-
655
- :global(.cm-color-code) {
656
- font-size: 0.7rem;
657
- font-weight: 600;
658
- color: var(--cm-text-muted);
659
- font-variant-numeric: tabular-nums;
660
- }
661
-
662
- :global(.cm-download-btn) {
663
- display: flex;
664
- align-items: center;
665
- gap: 0.4rem;
666
- padding: 0.6rem 1.25rem;
667
- background: linear-gradient(135deg, var(--cm-primary), #8b5cf6);
668
- color: var(--cm-bg);
669
- border: none;
670
- border-radius: 0.625rem;
671
- font-size: 0.875rem;
672
- font-weight: 700;
673
- cursor: pointer;
674
- transition: opacity 0.2s, transform 0.1s;
675
- box-shadow: 0 4px 12px rgba(99,102,241,0.3);
676
- white-space: nowrap;
677
- margin-left: auto;
678
- }
679
-
680
- :global(.cm-download-btn:disabled) {
681
- opacity: 0.4;
682
- cursor: not-allowed;
683
- box-shadow: none;
684
- }
685
-
686
- :global(.cm-download-btn:not(:disabled):hover) {
687
- transform: translateY(-1px);
688
- box-shadow: 0 6px 18px rgba(99,102,241,0.4);
689
- }
690
- </style>
@@ -161,294 +161,4 @@ const { ui } = Astro.props;
161
161
  document.addEventListener('astro:page-load', init);
162
162
  </script>
163
163
 
164
- <style>
165
- :global(.ec-root) {
166
- --ec-bg: #fff;
167
- --ec-bg-elevated: #f8fafc;
168
- --ec-border: #e2e8f0;
169
- --ec-text: #0f172a;
170
- --ec-text-muted: #64748b;
171
- --ec-accent: #6366f1;
172
- --ec-accent-alpha: rgba(99, 102, 241, 0.08);
173
- --ec-accent-alpha-hover: rgba(99, 102, 241, 0.02);
174
- --ec-shadow: rgba(0, 0, 0, 0.15);
175
164
 
176
- padding: 2.5rem 1.5rem;
177
- max-width: 1000px;
178
- margin: 0 auto;
179
- }
180
-
181
- :global(.theme-dark .ec-root) {
182
- --ec-bg: #18181b;
183
- --ec-bg-elevated: #27272a;
184
- --ec-border: #3f3f46;
185
- --ec-text: #f4f4f5;
186
- --ec-text-muted: #71717a;
187
- --ec-accent: #818cf8;
188
- --ec-accent-alpha: rgba(129, 140, 248, 0.12);
189
- --ec-accent-alpha-hover: rgba(129, 140, 248, 0.02);
190
- --ec-shadow: rgba(0, 0, 0, 0.3);
191
- }
192
-
193
- :global(.ec-card) {
194
- background: var(--ec-bg);
195
- border: 1px solid var(--ec-border);
196
- border-radius: 3rem;
197
- padding: 1.5rem;
198
- box-shadow: 0 45px 120px -30px var(--ec-shadow);
199
- position: relative;
200
- overflow: hidden;
201
- }
202
-
203
- :global(.ec-drop) {
204
- padding: 4rem 2rem;
205
- border: 3px dashed var(--ec-border);
206
- border-radius: 2.5rem;
207
- display: flex;
208
- flex-direction: column;
209
- align-items: center;
210
- text-align: center;
211
- cursor: pointer;
212
- gap: 1.5rem;
213
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
214
- }
215
-
216
- :global(.ec-drop:hover),
217
- :global(.ec-drop-active) {
218
- border-color: var(--ec-accent);
219
- background: var(--ec-accent-alpha-hover);
220
- }
221
-
222
- :global(.ec-drop-icon) {
223
- width: 6rem;
224
- height: 6rem;
225
- background: var(--ec-accent-alpha);
226
- border-radius: 2rem;
227
- display: flex;
228
- align-items: center;
229
- justify-content: center;
230
- color: var(--ec-accent);
231
- }
232
-
233
- :global(.ec-drop-icon svg) {
234
- width: 3rem;
235
- height: 3rem;
236
- }
237
-
238
- :global(.ec-title) {
239
- font-size: 2.5rem;
240
- font-weight: 950;
241
- color: var(--ec-text);
242
- margin: 0;
243
- }
244
-
245
- :global(.ec-subtitle) {
246
- font-size: 1.15rem;
247
- color: var(--ec-text-muted);
248
- max-width: 500px;
249
- margin: 0;
250
- font-weight: 700;
251
- }
252
-
253
- :global(.ec-badges) {
254
- display: flex;
255
- gap: 1rem;
256
- flex-wrap: wrap;
257
- justify-content: center;
258
- }
259
-
260
- :global(.ec-badge) {
261
- padding: 0.6rem 1.25rem;
262
- background: var(--ec-bg-elevated);
263
- border-radius: 2rem;
264
- font-size: 0.8rem;
265
- font-weight: 800;
266
- color: var(--ec-text-muted);
267
- display: flex;
268
- align-items: center;
269
- gap: 0.5rem;
270
- }
271
-
272
- :global(.ec-badge svg) {
273
- width: 1rem;
274
- height: 1rem;
275
- flex-shrink: 0;
276
- }
277
-
278
- :global(.ec-processing) {
279
- padding: 5rem;
280
- display: flex;
281
- flex-direction: column;
282
- align-items: center;
283
- justify-content: center;
284
- gap: 1.5rem;
285
- }
286
-
287
- :global(.ec-spinner) {
288
- width: 4rem;
289
- height: 4rem;
290
- border: 4px solid var(--ec-accent-alpha);
291
- border-top-color: var(--ec-accent);
292
- border-radius: 50%;
293
- animation: ec-spin 0.8s linear infinite;
294
- }
295
-
296
- :global(.ec-processing-text) {
297
- font-weight: 800;
298
- color: var(--ec-text);
299
- margin: 0;
300
- }
301
-
302
- :global(.ec-result) {
303
- padding: 2.5rem;
304
- display: flex;
305
- flex-direction: column;
306
- animation: ec-slide-up 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
307
- }
308
-
309
- :global(.ec-result-layout) {
310
- display: grid;
311
- grid-template-columns: 1fr 1fr;
312
- gap: 3rem;
313
- }
314
-
315
- @media (max-width: 800px) {
316
- :global(.ec-result-layout) {
317
- grid-template-columns: 1fr;
318
- }
319
- }
320
-
321
- :global(.ec-preview-col) {
322
- display: flex;
323
- flex-direction: column;
324
- gap: 1.5rem;
325
- }
326
-
327
- :global(.ec-preview-img) {
328
- width: 100%;
329
- border-radius: 1.5rem;
330
- box-shadow: 0 20px 50px var(--ec-shadow);
331
- display: block;
332
- }
333
-
334
- :global(.ec-metadata) {
335
- background: var(--ec-bg-elevated);
336
- border: 1px solid var(--ec-border);
337
- border-radius: 1.25rem;
338
- padding: 1.5rem;
339
- min-height: 150px;
340
- display: flex;
341
- flex-direction: column;
342
- justify-content: center;
343
- }
344
-
345
- :global(.ec-no-metadata) {
346
- display: flex;
347
- align-items: center;
348
- justify-content: center;
349
- height: 100%;
350
- color: var(--ec-text-muted);
351
- text-align: center;
352
- }
353
-
354
- :global(.ec-metadata-title) {
355
- color: var(--ec-accent);
356
- font-weight: 700;
357
- margin-bottom: 1rem;
358
- font-size: 0.9rem;
359
- }
360
-
361
- :global(.ec-metadata-list) {
362
- list-style: none;
363
- padding: 0;
364
- margin: 0;
365
- display: flex;
366
- flex-direction: column;
367
- gap: 0.75rem;
368
- }
369
-
370
- :global(.ec-metadata-list li) {
371
- display: flex;
372
- justify-content: space-between;
373
- gap: 1rem;
374
- font-size: 0.85rem;
375
- font-weight: 600;
376
- color: var(--ec-text);
377
- }
378
-
379
- :global(.ec-metadata-list li span:first-child) {
380
- font-weight: 700;
381
- }
382
-
383
- :global(.ec-metadata-list li span:last-child) {
384
- color: var(--ec-text-muted);
385
- }
386
-
387
- :global(.ec-actions-col) {
388
- display: flex;
389
- flex-direction: column;
390
- gap: 1.5rem;
391
- }
392
-
393
- :global(.ec-btn) {
394
- padding: 1.25rem;
395
- border-radius: 1.5rem;
396
- font-weight: 950;
397
- font-size: 1.1rem;
398
- border: none;
399
- cursor: pointer;
400
- display: flex;
401
- align-items: center;
402
- justify-content: center;
403
- gap: 0.75rem;
404
- transition: all 0.2s;
405
- }
406
-
407
- :global(.ec-btn svg) {
408
- width: 1.25rem;
409
- height: 1.25rem;
410
- }
411
-
412
- :global(.ec-btn-primary) {
413
- background: var(--ec-accent);
414
- color: #fff;
415
- box-shadow: 0 15px 35px -10px var(--ec-accent);
416
- }
417
-
418
- :global(.ec-btn-primary:hover) {
419
- transform: translateY(-2px);
420
- box-shadow: 0 20px 45px -10px var(--ec-accent);
421
- }
422
-
423
- :global(.ec-btn-secondary) {
424
- background: var(--ec-bg-elevated);
425
- border: 1px solid var(--ec-border);
426
- color: var(--ec-text);
427
- }
428
-
429
- :global(.ec-btn-secondary:hover) {
430
- border-color: var(--ec-accent);
431
- color: var(--ec-accent);
432
- }
433
-
434
- .ec-hidden {
435
- display: none;
436
- }
437
-
438
- @keyframes ec-spin {
439
- to {
440
- transform: rotate(360deg);
441
- }
442
- }
443
-
444
- @keyframes ec-slide-up {
445
- from {
446
- opacity: 0;
447
- transform: translateY(30px);
448
- }
449
- to {
450
- opacity: 1;
451
- transform: translateY(0);
452
- }
453
- }
454
- </style>