@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 { PrivacyBlurUI } from './index';
3
- import './style.css';
4
3
 
5
4
  interface Props {
6
5
  ui: PrivacyBlurUI;
@@ -228,3 +227,338 @@ const { ui } = Astro.props;
228
227
  init();
229
228
  document.addEventListener('astro:page-load', init);
230
229
  </script>
230
+
231
+ <style>
232
+ .pb-root {
233
+ --pb-bg: #fff;
234
+ --pb-bg-muted: #f8fafc;
235
+ --pb-border: #e2e8f0;
236
+ --pb-text: #0f172a;
237
+ --pb-text-muted: #64748b;
238
+ --pb-primary: #6366f1;
239
+ --pb-primary-light: rgba(99,102,241,0.1);
240
+ --pb-shadow: rgba(0,0,0,0.06);
241
+ --pb-toolbar-bg: rgba(255,255,255,0.92);
242
+ --pb-radius: 1.25rem;
243
+
244
+ width: 100%;
245
+ padding: 1rem;
246
+ display: flex;
247
+ flex-direction: column;
248
+ gap: 1rem;
249
+ height: 90vh;
250
+ min-height: 600px;
251
+ }
252
+
253
+ :global(.theme-dark) .pb-root {
254
+ --pb-bg: #09090b;
255
+ --pb-bg-muted: #18181b;
256
+ --pb-border: #27272a;
257
+ --pb-text: #fafafa;
258
+ --pb-text-muted: #71717a;
259
+ --pb-primary: #818cf8;
260
+ --pb-primary-light: rgba(129,140,248,0.12);
261
+ --pb-shadow: rgba(0,0,0,0.4);
262
+ --pb-toolbar-bg: rgba(9,9,11,0.92);
263
+ }
264
+
265
+ .pb-toolbar {
266
+ position: sticky;
267
+ top: 0.5rem;
268
+ z-index: 100;
269
+ max-width: 1200px;
270
+ margin: 0 auto;
271
+ width: 100%;
272
+ background: var(--pb-toolbar-bg);
273
+ backdrop-filter: blur(20px);
274
+ border: 1px solid var(--pb-border);
275
+ border-radius: var(--pb-radius);
276
+ padding: 0.5rem 1rem;
277
+ box-shadow: 0 8px 32px var(--pb-shadow);
278
+ display: flex;
279
+ flex-wrap: wrap;
280
+ align-items: center;
281
+ justify-content: space-between;
282
+ gap: 0.75rem;
283
+ }
284
+
285
+ .pb-tool-selector {
286
+ display: flex;
287
+ gap: 0.25rem;
288
+ background: var(--pb-bg-muted);
289
+ border-radius: 0.75rem;
290
+ padding: 0.25rem;
291
+ }
292
+
293
+ .pb-tool-btn {
294
+ display: flex;
295
+ align-items: center;
296
+ gap: 0.4rem;
297
+ padding: 0.4rem 0.875rem;
298
+ border-radius: 0.625rem;
299
+ font-size: 0.8rem;
300
+ font-weight: 700;
301
+ color: var(--pb-text-muted);
302
+ border: none;
303
+ background: transparent;
304
+ cursor: pointer;
305
+ transition: all 0.15s;
306
+ }
307
+
308
+ .pb-tool-btn-active {
309
+ background: var(--pb-bg);
310
+ color: var(--pb-text);
311
+ box-shadow: 0 2px 8px var(--pb-shadow);
312
+ }
313
+
314
+ .pb-settings-row {
315
+ display: flex;
316
+ align-items: center;
317
+ gap: 0.875rem;
318
+ }
319
+
320
+ .pb-intensity-wrap {
321
+ display: flex;
322
+ align-items: center;
323
+ gap: 0.5rem;
324
+ color: var(--pb-text-muted);
325
+ }
326
+
327
+ .pb-slider {
328
+ width: 90px;
329
+ accent-color: var(--pb-primary);
330
+ }
331
+
332
+ .pb-auto-btn {
333
+ display: flex;
334
+ align-items: center;
335
+ gap: 0.4rem;
336
+ padding: 0.45rem 0.875rem;
337
+ background: var(--pb-primary-light);
338
+ color: var(--pb-primary);
339
+ border: none;
340
+ border-radius: 0.75rem;
341
+ font-size: 0.8rem;
342
+ font-weight: 700;
343
+ cursor: pointer;
344
+ transition: opacity 0.15s;
345
+ }
346
+
347
+ .pb-auto-btn:hover {
348
+ opacity: 0.8;
349
+ }
350
+
351
+ .pb-action-group {
352
+ display: flex;
353
+ align-items: center;
354
+ gap: 0.625rem;
355
+ }
356
+
357
+ .pb-undo-btn {
358
+ width: 2.5rem;
359
+ height: 2.5rem;
360
+ border-radius: 0.75rem;
361
+ background: var(--pb-bg-muted);
362
+ border: 1px solid var(--pb-border);
363
+ color: var(--pb-text-muted);
364
+ cursor: pointer;
365
+ display: flex;
366
+ align-items: center;
367
+ justify-content: center;
368
+ transition: all 0.15s;
369
+ }
370
+
371
+ .pb-undo-btn:hover:not(:disabled) {
372
+ border-color: var(--pb-primary);
373
+ color: var(--pb-primary);
374
+ }
375
+
376
+ .pb-undo-btn:disabled {
377
+ opacity: 0.35;
378
+ cursor: not-allowed;
379
+ }
380
+
381
+ .pb-download-btn {
382
+ display: flex;
383
+ align-items: center;
384
+ gap: 0.5rem;
385
+ padding: 0.55rem 1.25rem;
386
+ background: var(--pb-primary);
387
+ color: #fff;
388
+ border: none;
389
+ border-radius: 0.75rem;
390
+ font-size: 0.875rem;
391
+ font-weight: 700;
392
+ cursor: pointer;
393
+ box-shadow: 0 4px 14px rgba(99,102,241,0.35);
394
+ transition: all 0.2s;
395
+ }
396
+
397
+ .pb-download-btn:hover:not(:disabled) {
398
+ transform: translateY(-1px);
399
+ box-shadow: 0 6px 20px rgba(99,102,241,0.45);
400
+ }
401
+
402
+ .pb-download-btn:disabled {
403
+ opacity: 0.4;
404
+ cursor: not-allowed;
405
+ box-shadow: none;
406
+ }
407
+
408
+ .pb-icon {
409
+ width: 1.1rem;
410
+ height: 1.1rem;
411
+ flex-shrink: 0;
412
+ }
413
+
414
+ .pb-workspace {
415
+ flex: 1;
416
+ position: relative;
417
+ background: var(--pb-bg-muted);
418
+ border: 2px dashed var(--pb-border);
419
+ border-radius: var(--pb-radius);
420
+ display: flex;
421
+ flex-direction: column;
422
+ align-items: center;
423
+ justify-content: center;
424
+ overflow: hidden;
425
+ transition: border-color 0.2s;
426
+ }
427
+
428
+ .pb-dragging .pb-workspace {
429
+ border-color: var(--pb-primary);
430
+ background: var(--pb-primary-light);
431
+ }
432
+
433
+ .pb-empty {
434
+ width: 100%;
435
+ height: 100%;
436
+ display: flex;
437
+ flex-direction: column;
438
+ align-items: center;
439
+ justify-content: center;
440
+ text-align: center;
441
+ cursor: pointer;
442
+ padding: 2rem;
443
+ gap: 0.75rem;
444
+ }
445
+
446
+ .pb-upload-icon {
447
+ width: 5rem;
448
+ height: 5rem;
449
+ background: var(--pb-bg);
450
+ border: 1px solid var(--pb-border);
451
+ border-radius: 1.25rem;
452
+ display: flex;
453
+ align-items: center;
454
+ justify-content: center;
455
+ color: var(--pb-primary);
456
+ box-shadow: 0 8px 24px var(--pb-shadow);
457
+ margin-bottom: 0.5rem;
458
+ }
459
+
460
+ .pb-icon-lg {
461
+ width: 2.5rem;
462
+ height: 2.5rem;
463
+ }
464
+
465
+ .pb-empty-title {
466
+ font-size: 1.75rem;
467
+ font-weight: 900;
468
+ color: var(--pb-text);
469
+ margin: 0;
470
+ }
471
+
472
+ .pb-empty-sub {
473
+ font-size: 1rem;
474
+ color: var(--pb-text-muted);
475
+ margin: 0;
476
+ }
477
+
478
+ .pb-badges {
479
+ display: flex;
480
+ gap: 0.75rem;
481
+ margin-top: 0.5rem;
482
+ }
483
+
484
+ .pb-badge {
485
+ display: flex;
486
+ align-items: center;
487
+ gap: 0.35rem;
488
+ background: var(--pb-bg);
489
+ border: 1px solid var(--pb-border);
490
+ border-radius: 9999px;
491
+ padding: 0.35rem 0.75rem;
492
+ font-size: 0.75rem;
493
+ font-weight: 700;
494
+ color: var(--pb-text-muted);
495
+ }
496
+
497
+ .pb-badge-icon {
498
+ width: 0.875rem;
499
+ height: 0.875rem;
500
+ }
501
+
502
+ .pb-loader {
503
+ position: absolute;
504
+ inset: 0;
505
+ background: rgba(0,0,0,0.5);
506
+ display: flex;
507
+ flex-direction: column;
508
+ align-items: center;
509
+ justify-content: center;
510
+ gap: 1rem;
511
+ z-index: 10;
512
+ }
513
+
514
+ .pb-spinner {
515
+ width: 2.5rem;
516
+ height: 2.5rem;
517
+ border: 3px solid rgba(255,255,255,0.2);
518
+ border-top-color: #fff;
519
+ border-radius: 50%;
520
+ animation: pb-spin 0.7s linear infinite;
521
+ }
522
+
523
+ @keyframes pb-spin {
524
+ to { transform: rotate(360deg); }
525
+ }
526
+
527
+ .pb-loader-text {
528
+ color: #fff;
529
+ font-weight: 800;
530
+ font-size: 0.9rem;
531
+ margin: 0;
532
+ }
533
+
534
+ .pb-canvas-wrap {
535
+ position: absolute;
536
+ inset: 0;
537
+ background: #000;
538
+ display: flex;
539
+ align-items: center;
540
+ justify-content: center;
541
+ }
542
+
543
+ .pb-canvas-wrap canvas {
544
+ width: 100%;
545
+ height: 100%;
546
+ object-fit: contain;
547
+ cursor: crosshair;
548
+ }
549
+
550
+ .pb-hidden {
551
+ display: none;
552
+ }
553
+
554
+ @media (max-width: 640px) {
555
+ .pb-root {
556
+ padding: 0.5rem;
557
+ height: auto;
558
+ min-height: 500px;
559
+ }
560
+ .pb-empty-title {
561
+ font-size: 1.25rem;
562
+ }
563
+ }
564
+ </style>
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import type { SubtitleSyncUI } from './index';
3
- import './style.css';
4
3
 
5
4
  interface Props {
6
5
  ui: SubtitleSyncUI;
@@ -185,3 +184,331 @@ const { ui } = Astro.props;
185
184
  init();
186
185
  document.addEventListener('astro:page-load', init);
187
186
  </script>
187
+
188
+ <style>
189
+ .ss-root {
190
+ --ss-bg: #fff;
191
+ --ss-bg-elevated: #f8fafc;
192
+ --ss-border: #e2e8f0;
193
+ --ss-text: #0f172a;
194
+ --ss-text-muted: #64748b;
195
+ --ss-accent: #6366f1;
196
+ --ss-accent-alpha: rgba(99, 102, 241, 0.1);
197
+ --ss-accent-alpha-hover: rgba(99, 102, 241, 0.03);
198
+ --ss-shadow: rgba(0, 0, 0, 0.1);
199
+
200
+ padding: 2.5rem 1.5rem;
201
+ max-width: 900px;
202
+ margin: 0 auto;
203
+ }
204
+
205
+ :global(.theme-dark) .ss-root {
206
+ --ss-bg: #18181b;
207
+ --ss-bg-elevated: #27272a;
208
+ --ss-border: #3f3f46;
209
+ --ss-text: #f4f4f5;
210
+ --ss-text-muted: #71717a;
211
+ --ss-accent: #818cf8;
212
+ --ss-accent-alpha: rgba(129, 140, 248, 0.12);
213
+ --ss-accent-alpha-hover: rgba(129, 140, 248, 0.04);
214
+ --ss-shadow: rgba(0, 0, 0, 0.3);
215
+ }
216
+
217
+ .ss-card {
218
+ background: var(--ss-bg);
219
+ border: 1px solid var(--ss-border);
220
+ border-radius: 2.5rem;
221
+ padding: 3rem;
222
+ box-shadow: 0 45px 110px -30px var(--ss-shadow);
223
+ display: flex;
224
+ flex-direction: column;
225
+ gap: 3rem;
226
+ }
227
+
228
+ .ss-drop {
229
+ border: 3px dashed var(--ss-border);
230
+ padding: 3.5rem 2.5rem;
231
+ border-radius: 2.25rem;
232
+ display: flex;
233
+ flex-direction: column;
234
+ align-items: center;
235
+ gap: 1.25rem;
236
+ cursor: pointer;
237
+ background: var(--ss-accent-alpha-hover);
238
+ transition: all 0.2s ease;
239
+ text-align: center;
240
+ }
241
+
242
+ .ss-drop:hover,
243
+ .ss-drop-active {
244
+ border-color: var(--ss-accent);
245
+ background: var(--ss-accent-alpha);
246
+ }
247
+
248
+ .ss-drop-icon {
249
+ width: 4.5rem;
250
+ height: 4.5rem;
251
+ background: var(--ss-accent-alpha);
252
+ border-radius: 1.25rem;
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ color: var(--ss-accent);
257
+ }
258
+
259
+ .ss-drop-icon svg {
260
+ width: 2.25rem;
261
+ height: 2.25rem;
262
+ }
263
+
264
+ .ss-drop-title {
265
+ font-size: 1.75rem;
266
+ font-weight: 950;
267
+ color: var(--ss-text);
268
+ margin: 0;
269
+ }
270
+
271
+ .ss-drop-sub {
272
+ font-size: 1rem;
273
+ color: var(--ss-text-muted);
274
+ max-width: 320px;
275
+ margin: 0;
276
+ font-weight: 700;
277
+ }
278
+
279
+ .ss-controls {
280
+ display: grid;
281
+ grid-template-columns: 1fr 1fr;
282
+ gap: 3rem;
283
+ align-items: start;
284
+ }
285
+
286
+ @media (max-width: 800px) {
287
+ .ss-controls {
288
+ grid-template-columns: 1fr;
289
+ }
290
+ }
291
+
292
+ .ss-control-group {
293
+ display: flex;
294
+ flex-direction: column;
295
+ gap: 1.5rem;
296
+ }
297
+
298
+ .ss-control-label {
299
+ font-size: 0.8rem;
300
+ font-weight: 900;
301
+ text-transform: uppercase;
302
+ color: var(--ss-text-muted);
303
+ letter-spacing: 0.1em;
304
+ }
305
+
306
+ .ss-offset-wrap {
307
+ display: flex;
308
+ align-items: center;
309
+ gap: 1rem;
310
+ background: var(--ss-bg-elevated);
311
+ border: 1px solid var(--ss-border);
312
+ border-radius: 1.5rem;
313
+ padding: 0.75rem 1.25rem;
314
+ }
315
+
316
+ .ss-offset-btn {
317
+ width: 2.5rem;
318
+ height: 2.5rem;
319
+ background: none;
320
+ border: none;
321
+ color: var(--ss-text);
322
+ cursor: pointer;
323
+ display: flex;
324
+ align-items: center;
325
+ justify-content: center;
326
+ transition: color 0.2s;
327
+ flex-shrink: 0;
328
+ }
329
+
330
+ .ss-offset-btn:hover {
331
+ color: var(--ss-accent);
332
+ }
333
+
334
+ .ss-offset-btn svg {
335
+ width: 1.5rem;
336
+ height: 1.5rem;
337
+ }
338
+
339
+ .ss-offset-input {
340
+ flex: 1;
341
+ background: transparent;
342
+ border: none;
343
+ font-size: 1.75rem;
344
+ font-weight: 950;
345
+ color: var(--ss-text);
346
+ outline: none;
347
+ width: 100px;
348
+ text-align: center;
349
+ }
350
+
351
+ .ss-stats {
352
+ display: flex;
353
+ gap: 2rem;
354
+ justify-content: center;
355
+ margin-top: 1rem;
356
+ }
357
+
358
+ .ss-stat {
359
+ display: flex;
360
+ flex-direction: column;
361
+ align-items: center;
362
+ gap: 0.25rem;
363
+ }
364
+
365
+ .ss-stat-value {
366
+ display: block;
367
+ font-weight: 900;
368
+ color: var(--ss-accent);
369
+ font-size: 1.25rem;
370
+ }
371
+
372
+ .ss-stat-label {
373
+ font-size: 0.7rem;
374
+ font-weight: 800;
375
+ text-transform: uppercase;
376
+ color: var(--ss-text-muted);
377
+ letter-spacing: 0.05em;
378
+ }
379
+
380
+ .ss-status-card {
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: 1.5rem;
384
+ }
385
+
386
+ .ss-file-row {
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 1.5rem;
390
+ }
391
+
392
+ .ss-file-icon {
393
+ width: 3rem;
394
+ height: 3rem;
395
+ color: var(--ss-accent);
396
+ flex-shrink: 0;
397
+ }
398
+
399
+ .ss-file-info {
400
+ display: flex;
401
+ flex-direction: column;
402
+ gap: 0.25rem;
403
+ min-width: 0;
404
+ }
405
+
406
+ .ss-file-name {
407
+ font-weight: 950;
408
+ color: var(--ss-text);
409
+ font-size: 0.95rem;
410
+ white-space: nowrap;
411
+ overflow: hidden;
412
+ text-overflow: ellipsis;
413
+ }
414
+
415
+ .ss-file-times {
416
+ font-size: 0.8rem;
417
+ font-weight: 700;
418
+ color: var(--ss-text-muted);
419
+ }
420
+
421
+ .ss-btn-primary {
422
+ width: 100%;
423
+ padding: 1.25rem;
424
+ background: var(--ss-accent);
425
+ color: #fff;
426
+ border-radius: 1.5rem;
427
+ font-weight: 950;
428
+ font-size: 1.15rem;
429
+ border: none;
430
+ cursor: pointer;
431
+ display: flex;
432
+ align-items: center;
433
+ justify-content: center;
434
+ gap: 0.75rem;
435
+ transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.3s;
436
+ }
437
+
438
+ .ss-btn-primary:hover {
439
+ transform: translateY(-4px) scale(1.02);
440
+ box-shadow: 0 15px 35px -10px var(--ss-accent);
441
+ }
442
+
443
+ .ss-btn-primary svg {
444
+ width: 1.25rem;
445
+ height: 1.25rem;
446
+ }
447
+
448
+ .ss-previews {
449
+ grid-column: 1 / -1;
450
+ display: grid;
451
+ grid-template-columns: 1fr 1fr;
452
+ gap: 2rem;
453
+ }
454
+
455
+ @media (max-width: 800px) {
456
+ .ss-previews {
457
+ grid-column: auto;
458
+ grid-template-columns: 1fr;
459
+ }
460
+ }
461
+
462
+ .ss-preview-box {
463
+ background: var(--ss-bg-elevated);
464
+ padding: 1.5rem;
465
+ border-radius: 1.75rem;
466
+ border: 1px solid var(--ss-border);
467
+ display: flex;
468
+ flex-direction: column;
469
+ gap: 1rem;
470
+ }
471
+
472
+ .ss-preview-label {
473
+ font-size: 0.75rem;
474
+ font-weight: 950;
475
+ text-transform: uppercase;
476
+ color: var(--ss-text-muted);
477
+ margin: 0;
478
+ letter-spacing: 0.05em;
479
+ }
480
+
481
+ .ss-preview-label-modified {
482
+ color: var(--ss-accent);
483
+ }
484
+
485
+ .ss-preview-scroll {
486
+ max-height: 250px;
487
+ overflow-y: auto;
488
+ display: flex;
489
+ flex-direction: column;
490
+ gap: 1rem;
491
+ }
492
+
493
+ .ss-preview-item {
494
+ font-size: 0.85rem;
495
+ line-height: 1.5;
496
+ }
497
+
498
+ .ss-preview-time {
499
+ font-weight: 950;
500
+ color: var(--ss-accent);
501
+ font-size: 0.75rem;
502
+ margin: 0 0 0.25rem;
503
+ }
504
+
505
+ .ss-preview-text {
506
+ font-weight: 700;
507
+ color: var(--ss-text);
508
+ margin: 0;
509
+ }
510
+
511
+ .ss-hidden {
512
+ display: none;
513
+ }
514
+ </style>