@jjlmoya/utils-audiovisual 1.4.0 → 1.5.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.
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import type { VideoFrameExtractorUI } from './index';
3
- import './style.css';
4
3
 
5
4
  interface Props {
6
5
  ui: VideoFrameExtractorUI;
@@ -283,3 +282,432 @@ const { ui } = Astro.props;
283
282
  init();
284
283
  document.addEventListener('astro:page-load', init);
285
284
  </script>
285
+
286
+ <style>
287
+ .vfe-root {
288
+ --vfe-bg: #fff;
289
+ --vfe-bg-muted: #f8fafc;
290
+ --vfe-bg-glass: #fff;
291
+ --vfe-glass-border: #e2e8f0;
292
+ --vfe-glass-text: #6366f1;
293
+ --vfe-glass-muted: #94a3b8;
294
+ --vfe-glass-btn-bg: #f8fafc;
295
+ --vfe-glass-btn-border: #e2e8f0;
296
+ --vfe-glass-btn-text: #1e293b;
297
+ --vfe-batch-bg: #f1f5f9;
298
+ --vfe-border: #e2e8f0;
299
+ --vfe-text: #1e293b;
300
+ --vfe-text-muted: #94a3b8;
301
+ --vfe-primary: #6366f1;
302
+ --vfe-primary-light: rgba(99, 102, 241, 0.1);
303
+ --vfe-shadow: 0 25px 60px rgba(0,0,0,0.08);
304
+
305
+ max-width: 860px;
306
+ margin: 0 auto;
307
+ padding: 1rem;
308
+ }
309
+
310
+ :global(.theme-dark) .vfe-root {
311
+ --vfe-bg: #18181b;
312
+ --vfe-bg-muted: #09090b;
313
+ --vfe-bg-glass: #27272a;
314
+ --vfe-glass-border: #3f3f46;
315
+ --vfe-glass-text: #818cf8;
316
+ --vfe-glass-muted: #71717a;
317
+ --vfe-glass-btn-bg: #3f3f46;
318
+ --vfe-glass-btn-border: #52525b;
319
+ --vfe-glass-btn-text: #f4f4f5;
320
+ --vfe-batch-bg: #1c1c1f;
321
+ --vfe-border: #27272a;
322
+ --vfe-text: #f4f4f5;
323
+ --vfe-text-muted: #71717a;
324
+ --vfe-primary: #818cf8;
325
+ --vfe-primary-light: rgba(129, 140, 248, 0.12);
326
+ --vfe-shadow: 0 25px 60px rgba(0,0,0,0.4);
327
+ }
328
+
329
+ .vfe-premium-card {
330
+ background: var(--vfe-bg);
331
+ border: 1px solid var(--vfe-border);
332
+ border-radius: 1.5rem;
333
+ box-shadow: var(--vfe-shadow);
334
+ overflow: hidden;
335
+ }
336
+
337
+ .vfe-uploader-box {
338
+ padding: 4rem 2rem;
339
+ display: flex;
340
+ flex-direction: column;
341
+ align-items: center;
342
+ text-align: center;
343
+ gap: 0.625rem;
344
+ cursor: pointer;
345
+ border: 3px dashed var(--vfe-border);
346
+ border-radius: 1.5rem;
347
+ margin: 1rem;
348
+ transition: border-color 0.2s, background 0.2s;
349
+ }
350
+
351
+ .vfe-uploader-box:hover,
352
+ .vfe-dragover {
353
+ border-color: var(--vfe-primary);
354
+ background: var(--vfe-primary-light);
355
+ }
356
+
357
+ .vfe-uploader-icon {
358
+ width: 5rem;
359
+ height: 5rem;
360
+ background: var(--vfe-primary-light);
361
+ border-radius: 1.25rem;
362
+ display: flex;
363
+ align-items: center;
364
+ justify-content: center;
365
+ color: var(--vfe-primary);
366
+ margin-bottom: 0.5rem;
367
+ }
368
+
369
+ .vfe-uploader-icon svg {
370
+ width: 2.5rem;
371
+ height: 2.5rem;
372
+ }
373
+
374
+ .vfe-uploader-text h3 {
375
+ font-size: 1.5rem;
376
+ font-weight: 800;
377
+ color: var(--vfe-text);
378
+ margin: 0 0 0.25rem;
379
+ }
380
+
381
+ .vfe-uploader-text p {
382
+ color: var(--vfe-text-muted);
383
+ font-size: 0.95rem;
384
+ margin: 0;
385
+ }
386
+
387
+ .vfe-privacy-note {
388
+ font-size: 0.7rem;
389
+ font-weight: 700;
390
+ text-transform: uppercase;
391
+ letter-spacing: 0.08em;
392
+ color: var(--vfe-text-muted);
393
+ margin-top: 0.5rem;
394
+ }
395
+
396
+ .vfe-player-container {
397
+ display: flex;
398
+ flex-direction: column;
399
+ }
400
+
401
+ .vfe-video-wrapper video {
402
+ width: 100%;
403
+ display: block;
404
+ max-height: 65vh;
405
+ background: #000;
406
+ }
407
+
408
+ .vfe-controls-glass {
409
+ background: var(--vfe-bg-glass);
410
+ border: 1px solid var(--vfe-glass-border);
411
+ border-radius: 1rem;
412
+ margin: 0.75rem;
413
+ padding: 1.25rem;
414
+ display: flex;
415
+ flex-direction: column;
416
+ gap: 1rem;
417
+ }
418
+
419
+ .vfe-time-row {
420
+ display: flex;
421
+ justify-content: space-between;
422
+ font-size: 0.875rem;
423
+ font-weight: 700;
424
+ color: var(--vfe-glass-text);
425
+ }
426
+
427
+ .vfe-scrubber {
428
+ width: 100%;
429
+ height: 4px;
430
+ accent-color: var(--vfe-primary);
431
+ cursor: pointer;
432
+ border-radius: 9999px;
433
+ }
434
+
435
+ .vfe-actions-row {
436
+ display: flex;
437
+ align-items: center;
438
+ gap: 0.625rem;
439
+ }
440
+
441
+ .vfe-btn-main {
442
+ display: inline-flex;
443
+ align-items: center;
444
+ gap: 0.4rem;
445
+ font-weight: 700;
446
+ font-size: 0.85rem;
447
+ border: none;
448
+ border-radius: 0.625rem;
449
+ cursor: pointer;
450
+ transition: all 0.15s;
451
+ white-space: nowrap;
452
+ text-decoration: none;
453
+ }
454
+
455
+ .vfe-btn-control {
456
+ padding: 0.5rem 0.875rem;
457
+ background: var(--vfe-glass-btn-bg);
458
+ color: var(--vfe-glass-btn-text);
459
+ border: 1px solid var(--vfe-glass-btn-border);
460
+ flex: 1;
461
+ justify-content: center;
462
+ }
463
+
464
+ .vfe-btn-control:hover {
465
+ border-color: var(--vfe-primary);
466
+ color: var(--vfe-primary);
467
+ }
468
+
469
+ .vfe-btn-icon-only {
470
+ flex: none;
471
+ width: 50px;
472
+ justify-content: center;
473
+ }
474
+
475
+ .vfe-btn-capture {
476
+ padding: 0.625rem 1.25rem;
477
+ background: var(--vfe-primary);
478
+ color: #fff;
479
+ flex: 1;
480
+ justify-content: center;
481
+ box-shadow: 0 4px 14px rgba(99, 102, 241, 0.35);
482
+ }
483
+
484
+ .vfe-btn-capture:hover {
485
+ filter: brightness(1.1);
486
+ }
487
+
488
+ .vfe-btn-capture:disabled {
489
+ opacity: 0.5;
490
+ cursor: not-allowed;
491
+ }
492
+
493
+ .vfe-btn-batch {
494
+ padding: 0.45rem 1rem;
495
+ font-size: 0.8rem;
496
+ flex: none;
497
+ }
498
+
499
+ .vfe-btn-main svg {
500
+ width: 1.1rem;
501
+ height: 1.1rem;
502
+ flex-shrink: 0;
503
+ }
504
+
505
+ .vfe-batch-panel {
506
+ background: var(--vfe-batch-bg);
507
+ border-radius: 0.875rem;
508
+ padding: 0.875rem 1rem;
509
+ border: 1px solid var(--vfe-glass-btn-border);
510
+ display: flex;
511
+ flex-direction: column;
512
+ gap: 0.75rem;
513
+ }
514
+
515
+ .vfe-batch-header {
516
+ display: flex;
517
+ align-items: center;
518
+ gap: 0.5rem;
519
+ font-size: 0.8rem;
520
+ font-weight: 700;
521
+ color: var(--vfe-primary);
522
+ }
523
+
524
+ .vfe-batch-header svg {
525
+ width: 1rem;
526
+ height: 1rem;
527
+ }
528
+
529
+ .vfe-batch-controls {
530
+ display: flex;
531
+ align-items: center;
532
+ gap: 0.625rem;
533
+ flex-wrap: wrap;
534
+ }
535
+
536
+ .vfe-batch-input-group {
537
+ display: flex;
538
+ align-items: center;
539
+ gap: 0.375rem;
540
+ color: var(--vfe-glass-btn-text);
541
+ font-size: 0.8rem;
542
+ font-weight: 700;
543
+ text-transform: uppercase;
544
+ letter-spacing: 0.05em;
545
+ background: var(--vfe-bg);
546
+ border: 1px solid var(--vfe-glass-btn-border);
547
+ border-radius: 0.5rem;
548
+ padding: 0.4rem 0.75rem;
549
+ }
550
+
551
+ .vfe-batch-input-group input {
552
+ width: 48px;
553
+ background: transparent;
554
+ border: none;
555
+ color: var(--vfe-glass-btn-text);
556
+ font-size: 0.95rem;
557
+ font-weight: 800;
558
+ text-align: center;
559
+ outline: none;
560
+ }
561
+
562
+ .vfe-gallery-minimal {
563
+ background: var(--vfe-bg);
564
+ border-top: 1px solid var(--vfe-border);
565
+ }
566
+
567
+ .vfe-gallery-header {
568
+ display: flex;
569
+ justify-content: space-between;
570
+ align-items: center;
571
+ padding: 1rem 1.25rem 0.75rem;
572
+ }
573
+
574
+ .vfe-gallery-header h4 {
575
+ font-size: 0.7rem;
576
+ font-weight: 800;
577
+ text-transform: uppercase;
578
+ letter-spacing: 0.1em;
579
+ color: var(--vfe-text-muted);
580
+ margin: 0;
581
+ }
582
+
583
+ .vfe-gallery-minimal .vfe-btn-control {
584
+ background: var(--vfe-bg-muted);
585
+ color: var(--vfe-text);
586
+ border-color: var(--vfe-border);
587
+ flex: none;
588
+ }
589
+
590
+ .vfe-gallery-minimal .vfe-btn-control:hover {
591
+ border-color: var(--vfe-primary);
592
+ color: var(--vfe-primary);
593
+ }
594
+
595
+ .vfe-frame-footer .vfe-btn-control {
596
+ background: var(--vfe-bg-muted);
597
+ color: var(--vfe-text-muted);
598
+ border-color: var(--vfe-border);
599
+ flex: none;
600
+ padding: 0.25rem 0.4rem;
601
+ }
602
+
603
+ .vfe-btn-sm {
604
+ padding: 0.35rem 0.625rem;
605
+ font-size: 0.75rem;
606
+ }
607
+
608
+ .vfe-frames-scroll {
609
+ display: flex;
610
+ gap: 0.75rem;
611
+ overflow-x: auto;
612
+ padding: 0 1.25rem 1.25rem;
613
+ scrollbar-width: thin;
614
+ }
615
+
616
+ .vfe-gallery-empty-text {
617
+ padding: 1.5rem;
618
+ text-align: center;
619
+ color: var(--vfe-text-muted);
620
+ font-size: 0.85rem;
621
+ width: 100%;
622
+ margin: 0;
623
+ }
624
+
625
+ .vfe-frame-card {
626
+ flex-shrink: 0;
627
+ width: 160px;
628
+ background: var(--vfe-bg-muted);
629
+ border: 1px solid var(--vfe-border);
630
+ border-radius: 0.75rem;
631
+ overflow: hidden;
632
+ transition: border-color 0.15s;
633
+ }
634
+
635
+ .vfe-frame-card:hover {
636
+ border-color: var(--vfe-primary);
637
+ }
638
+
639
+ .vfe-frame-thumb {
640
+ width: 100%;
641
+ aspect-ratio: 16/9;
642
+ object-fit: cover;
643
+ display: block;
644
+ cursor: zoom-in;
645
+ }
646
+
647
+ .vfe-frame-footer {
648
+ display: flex;
649
+ justify-content: space-between;
650
+ align-items: center;
651
+ padding: 0.4rem 0.625rem;
652
+ }
653
+
654
+ .vfe-frame-time {
655
+ font-size: 0.7rem;
656
+ font-weight: 800;
657
+ color: var(--vfe-primary);
658
+ }
659
+
660
+ .vfe-lightbox {
661
+ position: fixed;
662
+ inset: 0;
663
+ z-index: 9999;
664
+ background: rgba(0, 0, 0, 0.95);
665
+ backdrop-filter: blur(20px);
666
+ display: none;
667
+ align-items: center;
668
+ justify-content: center;
669
+ }
670
+
671
+ .vfe-lightbox-open {
672
+ display: flex;
673
+ }
674
+
675
+ .vfe-lightbox-content {
676
+ position: relative;
677
+ display: flex;
678
+ flex-direction: column;
679
+ align-items: center;
680
+ gap: 1.5rem;
681
+ max-width: 90vw;
682
+ }
683
+
684
+ .vfe-lightbox-close {
685
+ position: absolute;
686
+ top: -3rem;
687
+ right: 0;
688
+ font-size: 2.5rem;
689
+ color: rgba(255, 255, 255, 0.6);
690
+ cursor: pointer;
691
+ line-height: 1;
692
+ }
693
+
694
+ .vfe-lightbox-close:hover {
695
+ color: #fff;
696
+ }
697
+
698
+ .vfe-lightbox-img {
699
+ max-width: 100%;
700
+ max-height: 70vh;
701
+ border-radius: 0.75rem;
702
+ box-shadow: 0 32px 80px rgba(0, 0, 0, 1);
703
+ }
704
+
705
+ .vfe-lightbox .vfe-btn-capture {
706
+ padding: 0.875rem 2rem;
707
+ font-size: 0.95rem;
708
+ }
709
+
710
+ .vfe-hidden {
711
+ display: none;
712
+ }
713
+ </style>