@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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-audiovisual",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import type { ChromaticLensUI } from './index';
3
- import './style.css';
4
3
 
5
4
  interface Props {
6
5
  ui: ChromaticLensUI;
@@ -176,3 +175,314 @@ const { ui } = Astro.props;
176
175
  init();
177
176
  document.addEventListener('astro:page-load', init);
178
177
  </script>
178
+
179
+ <style>
180
+ .cl-root {
181
+ --cl-bg: #fff;
182
+ --cl-bg-elevated: #f8fafc;
183
+ --cl-border: #e2e8f0;
184
+ --cl-text: #0f172a;
185
+ --cl-text-muted: #64748b;
186
+ --cl-accent: #6366f1;
187
+ --cl-accent-alpha: rgba(99, 102, 241, 0.08);
188
+ --cl-accent-alpha-hover: rgba(99, 102, 241, 0.04);
189
+ --cl-emerald: #10b981;
190
+ --cl-emerald-alpha: rgba(16, 185, 129, 0.06);
191
+ --cl-shadow: rgba(0, 0, 0, 0.15);
192
+
193
+ padding: 2.5rem 1.5rem;
194
+ max-width: 1000px;
195
+ margin: 0 auto;
196
+ }
197
+
198
+ :global(.theme-dark) .cl-root {
199
+ --cl-bg: #18181b;
200
+ --cl-bg-elevated: #27272a;
201
+ --cl-border: #3f3f46;
202
+ --cl-text: #f4f4f5;
203
+ --cl-text-muted: #71717a;
204
+ --cl-accent: #818cf8;
205
+ --cl-accent-alpha: rgba(129, 140, 248, 0.12);
206
+ --cl-accent-alpha-hover: rgba(129, 140, 248, 0.06);
207
+ --cl-emerald: #34d399;
208
+ --cl-emerald-alpha: rgba(52, 211, 153, 0.08);
209
+ --cl-shadow: rgba(0, 0, 0, 0.5);
210
+ }
211
+
212
+ .cl-card {
213
+ background: var(--cl-bg);
214
+ border: 1px solid var(--cl-border);
215
+ border-radius: 3rem;
216
+ padding: 1.5rem;
217
+ box-shadow: 0 45px 120px -30px var(--cl-shadow);
218
+ position: relative;
219
+ overflow: hidden;
220
+ }
221
+
222
+ .cl-drop {
223
+ padding: 5rem 2rem;
224
+ display: flex;
225
+ flex-direction: column;
226
+ align-items: center;
227
+ border: 3px dashed var(--cl-border);
228
+ border-radius: 2.5rem;
229
+ cursor: pointer;
230
+ transition: all 0.2s ease;
231
+ text-align: center;
232
+ gap: 0.5rem;
233
+ }
234
+
235
+ .cl-drop:hover,
236
+ .cl-drop-active {
237
+ background: var(--cl-accent-alpha-hover);
238
+ border-color: var(--cl-accent);
239
+ }
240
+
241
+ .cl-drop-icon {
242
+ width: 5rem;
243
+ height: 5rem;
244
+ background: var(--cl-accent-alpha);
245
+ border-radius: 50%;
246
+ display: flex;
247
+ align-items: center;
248
+ justify-content: center;
249
+ margin-bottom: 1rem;
250
+ color: var(--cl-accent);
251
+ }
252
+
253
+ .cl-drop-icon svg {
254
+ width: 2.5rem;
255
+ height: 2.5rem;
256
+ }
257
+
258
+ .cl-drop-title {
259
+ font-size: 2rem;
260
+ font-weight: 950;
261
+ color: var(--cl-text);
262
+ margin: 0;
263
+ }
264
+
265
+ .cl-drop-sub {
266
+ font-size: 1.1rem;
267
+ color: var(--cl-text-muted);
268
+ margin: 0;
269
+ font-weight: 600;
270
+ }
271
+
272
+ .cl-workspace {
273
+ padding: 1.5rem;
274
+ }
275
+
276
+ .cl-mini-drop {
277
+ display: inline-flex;
278
+ align-items: center;
279
+ gap: 0.75rem;
280
+ padding: 0.75rem 1.25rem;
281
+ background: var(--cl-bg-elevated);
282
+ border: 1px solid var(--cl-border);
283
+ border-radius: 1rem;
284
+ font-size: 0.75rem;
285
+ font-weight: 800;
286
+ color: var(--cl-text-muted);
287
+ cursor: pointer;
288
+ margin-bottom: 2rem;
289
+ transition: border-color 0.2s, color 0.2s;
290
+ }
291
+
292
+ .cl-mini-drop:hover {
293
+ border-color: var(--cl-accent);
294
+ color: var(--cl-accent);
295
+ }
296
+
297
+ .cl-mini-drop svg {
298
+ width: 1.1rem;
299
+ height: 1.1rem;
300
+ }
301
+
302
+ .cl-config-bar {
303
+ padding: 1rem 0;
304
+ margin-bottom: 2rem;
305
+ border-bottom: 1px solid var(--cl-border);
306
+ display: flex;
307
+ justify-content: flex-end;
308
+ }
309
+
310
+ .cl-config-item {
311
+ display: flex;
312
+ align-items: center;
313
+ gap: 1rem;
314
+ }
315
+
316
+ .cl-config-label {
317
+ font-size: 0.75rem;
318
+ font-weight: 900;
319
+ text-transform: uppercase;
320
+ color: var(--cl-text-muted);
321
+ letter-spacing: 0.1em;
322
+ }
323
+
324
+ .cl-count-select {
325
+ padding: 0.5rem 1rem;
326
+ border-radius: 0.75rem;
327
+ background: var(--cl-bg-elevated);
328
+ border: 1px solid var(--cl-border);
329
+ color: var(--cl-text);
330
+ font-weight: 800;
331
+ cursor: pointer;
332
+ }
333
+
334
+ .cl-result-layout {
335
+ display: grid;
336
+ grid-template-columns: 1fr 1.25fr;
337
+ gap: 3rem;
338
+ }
339
+
340
+ @media (max-width: 800px) {
341
+ .cl-result-layout {
342
+ grid-template-columns: 1fr;
343
+ }
344
+ }
345
+
346
+ .cl-preview-col {
347
+ display: flex;
348
+ flex-direction: column;
349
+ gap: 1rem;
350
+ }
351
+
352
+ .cl-preview-img {
353
+ width: 100%;
354
+ border-radius: 1.5rem;
355
+ box-shadow: 0 20px 40px var(--cl-shadow);
356
+ display: block;
357
+ }
358
+
359
+ .cl-palette-col {
360
+ display: flex;
361
+ flex-direction: column;
362
+ gap: 1.5rem;
363
+ }
364
+
365
+ .cl-palette-header {
366
+ display: flex;
367
+ align-items: center;
368
+ gap: 1rem;
369
+ color: var(--cl-accent);
370
+ }
371
+
372
+ .cl-palette-header svg {
373
+ width: 1.25rem;
374
+ height: 1.25rem;
375
+ flex-shrink: 0;
376
+ }
377
+
378
+ .cl-palette-header h4 {
379
+ font-size: 1.25rem;
380
+ font-weight: 950;
381
+ color: var(--cl-text);
382
+ margin: 0;
383
+ }
384
+
385
+ .cl-loader {
386
+ display: flex;
387
+ flex-direction: column;
388
+ align-items: center;
389
+ gap: 1rem;
390
+ padding: 2rem 0;
391
+ }
392
+
393
+ .cl-spinner {
394
+ width: 3rem;
395
+ height: 3rem;
396
+ border: 3px solid var(--cl-accent-alpha);
397
+ border-top-color: var(--cl-accent);
398
+ border-radius: 50%;
399
+ animation: cl-spin 0.8s linear infinite;
400
+ }
401
+
402
+ .cl-loader-text {
403
+ font-size: 0.75rem;
404
+ font-weight: 900;
405
+ text-transform: uppercase;
406
+ color: var(--cl-text-muted);
407
+ letter-spacing: 0.1em;
408
+ margin: 0;
409
+ }
410
+
411
+ .cl-swatches {
412
+ display: flex;
413
+ flex-direction: column;
414
+ gap: 0.75rem;
415
+ animation: cl-fade-up 0.5s ease;
416
+ }
417
+
418
+ .cl-swatch {
419
+ display: flex;
420
+ align-items: center;
421
+ gap: 1.25rem;
422
+ background: var(--cl-bg-elevated);
423
+ border-radius: 1.25rem;
424
+ padding: 1rem;
425
+ border: 1px solid var(--cl-border);
426
+ cursor: pointer;
427
+ transition: transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275), border-color 0.2s;
428
+ }
429
+
430
+ .cl-swatch:hover {
431
+ transform: scale(1.02);
432
+ border-color: var(--cl-accent);
433
+ }
434
+
435
+ .cl-swatch-copied {
436
+ background: var(--cl-emerald-alpha);
437
+ border-color: var(--cl-emerald);
438
+ }
439
+
440
+ .cl-swatch-color {
441
+ width: 3.5rem;
442
+ height: 3.5rem;
443
+ border-radius: 0.75rem;
444
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);
445
+ flex-shrink: 0;
446
+ }
447
+
448
+ .cl-swatch-info {
449
+ display: flex;
450
+ flex-direction: column;
451
+ gap: 0.2rem;
452
+ }
453
+
454
+ .cl-swatch-hex {
455
+ font-weight: 950;
456
+ color: var(--cl-text);
457
+ font-size: 1.25rem;
458
+ }
459
+
460
+ .cl-swatch-action {
461
+ font-size: 0.7rem;
462
+ font-weight: 900;
463
+ color: var(--cl-text-muted);
464
+ text-transform: uppercase;
465
+ letter-spacing: 0.05em;
466
+ }
467
+
468
+ .cl-hidden {
469
+ display: none;
470
+ }
471
+
472
+ @keyframes cl-spin {
473
+ to {
474
+ transform: rotate(360deg);
475
+ }
476
+ }
477
+
478
+ @keyframes cl-fade-up {
479
+ from {
480
+ opacity: 0;
481
+ transform: translateY(10px);
482
+ }
483
+ to {
484
+ opacity: 1;
485
+ transform: translateY(0);
486
+ }
487
+ }
488
+ </style>
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import type { CollageMakerUI } from './index';
3
- import './style.css';
4
3
 
5
4
  interface Props {
6
5
  ui: CollageMakerUI;
@@ -300,3 +299,392 @@ const dropSub = (ui.dropSub ?? '').replace('{link}', `<span class="cm-drop-link"
300
299
  a.click();
301
300
  });
302
301
  </script>
302
+
303
+ <style>
304
+ .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
+
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
+ .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
+ .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
+ .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
+ .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
+ .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
+ .cm-drop-zone:hover,
392
+ .cm-drop-zone-over {
393
+ border-color: var(--cm-primary);
394
+ background: var(--cm-primary-light);
395
+ }
396
+
397
+ .cm-drop-title {
398
+ font-size: 0.9rem;
399
+ font-weight: 700;
400
+ color: var(--cm-text);
401
+ margin: 0;
402
+ }
403
+
404
+ .cm-drop-sub {
405
+ font-size: 0.75rem;
406
+ color: var(--cm-text-muted);
407
+ margin: 0;
408
+ }
409
+
410
+ .cm-drop-link {
411
+ color: var(--cm-primary);
412
+ font-weight: 600;
413
+ cursor: pointer;
414
+ }
415
+
416
+ .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
+ .cm-section-header {
426
+ display: flex;
427
+ justify-content: space-between;
428
+ align-items: center;
429
+ }
430
+
431
+ .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
+ .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
+ .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
+ .cm-thumb:hover {
457
+ border-color: var(--cm-primary);
458
+ }
459
+
460
+ .cm-thumb img {
461
+ width: 100%;
462
+ height: 100%;
463
+ object-fit: cover;
464
+ display: block;
465
+ }
466
+
467
+ .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
+ .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
+ .cm-thumb:hover .cm-thumb-del {
497
+ display: flex;
498
+ }
499
+
500
+ .cm-thumb-del:hover {
501
+ background: #dc2626;
502
+ }
503
+
504
+ .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
+ .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
+ .cm-preview-placeholder p {
526
+ font-size: 0.8rem;
527
+ margin: 0;
528
+ }
529
+
530
+ .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
+ .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
+ .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
+ .cm-layouts {
557
+ display: grid;
558
+ grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));
559
+ gap: 0.4rem;
560
+ }
561
+
562
+ .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
+ .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
+ .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
+ .cm-layout-btn-active {
591
+ border-color: var(--cm-primary);
592
+ background: var(--cm-primary-light);
593
+ color: var(--cm-primary);
594
+ }
595
+
596
+ .cm-layout-btn-disabled {
597
+ opacity: 0.45;
598
+ cursor: not-allowed;
599
+ }
600
+
601
+ .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
+ .cm-settings-inline {
616
+ display: flex;
617
+ flex-wrap: wrap;
618
+ align-items: flex-end;
619
+ gap: 1rem;
620
+ }
621
+
622
+ .cm-setting {
623
+ display: flex;
624
+ flex-direction: column;
625
+ gap: 0.3rem;
626
+ }
627
+
628
+ .cm-setting-label {
629
+ font-size: 0.7rem;
630
+ font-weight: 600;
631
+ color: var(--cm-text-muted);
632
+ }
633
+
634
+ .cm-slider {
635
+ accent-color: var(--cm-primary);
636
+ width: 120px;
637
+ }
638
+
639
+ .cm-color-row {
640
+ display: flex;
641
+ align-items: center;
642
+ gap: 0.5rem;
643
+ }
644
+
645
+ .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
+ .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
+ .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
+ .cm-download-btn:disabled {
681
+ opacity: 0.4;
682
+ cursor: not-allowed;
683
+ box-shadow: none;
684
+ }
685
+
686
+ .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>