@jjlmoya/utils-social 1.8.0 → 1.10.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 (32) hide show
  1. package/package.json +7 -4
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/entries.ts +23 -0
  4. package/src/tool/redditFormatter/component.astro +0 -128
  5. package/src/tool/redditFormatter/entry.ts +30 -0
  6. package/src/tool/redditFormatter/index.ts +2 -32
  7. package/src/tool/redditFormatter/reddit-text-formatter.css +126 -0
  8. package/src/tool/safeZones/component.astro +0 -514
  9. package/src/tool/safeZones/entry.ts +30 -0
  10. package/src/tool/safeZones/index.ts +2 -32
  11. package/src/tool/safeZones/social-safe-zones.css +512 -0
  12. package/src/tool/socialImageResizer/component.astro +0 -315
  13. package/src/tool/socialImageResizer/entry.ts +30 -0
  14. package/src/tool/socialImageResizer/index.ts +2 -32
  15. package/src/tool/socialImageResizer/social-media-image-resizer.css +313 -0
  16. package/src/tool/socialValueCalculator/component.astro +0 -526
  17. package/src/tool/socialValueCalculator/entry.ts +30 -0
  18. package/src/tool/socialValueCalculator/index.ts +2 -32
  19. package/src/tool/socialValueCalculator/social-account-value-calculator.css +524 -0
  20. package/src/tool/tinderPhotoOptimizer/component.astro +0 -900
  21. package/src/tool/tinderPhotoOptimizer/entry.ts +30 -0
  22. package/src/tool/tinderPhotoOptimizer/index.ts +2 -32
  23. package/src/tool/tinderPhotoOptimizer/tinder-photo-optimizer.css +898 -0
  24. package/src/tool/youtubeThumbnail/component.astro +0 -267
  25. package/src/tool/youtubeThumbnail/entry.ts +30 -0
  26. package/src/tool/youtubeThumbnail/index.ts +2 -32
  27. package/src/tool/youtubeThumbnail/youtube-thumbnail-extractor.css +265 -0
  28. package/src/tool/youtubeThumbnailPreviewer/component.astro +0 -558
  29. package/src/tool/youtubeThumbnailPreviewer/entry.ts +46 -0
  30. package/src/tool/youtubeThumbnailPreviewer/index.ts +2 -48
  31. package/src/tool/youtubeThumbnailPreviewer/youtube-thumbnail-previewer.css +273 -0
  32. package/src/tools.ts +1 -1
@@ -301,529 +301,3 @@ const ICON_INFO = `<svg viewBox="0 0 24 24" fill="currentColor" width="16" heigh
301
301
  init();
302
302
  </script>
303
303
 
304
- <style>
305
- .svc-root {
306
- --glass-bg: rgba(255, 255, 255, 0.75);
307
- --glass-border: rgba(255, 255, 255, 0.5);
308
- --glass-shadow: rgba(0, 0, 0, 0.08);
309
- --nav-bg: rgba(255, 255, 255, 0.3);
310
- --nav-border: rgba(0, 0, 0, 0.05);
311
- --toggle-bg: rgba(0, 0, 0, 0.04);
312
- --slider-bg: #fff;
313
- --slider-shadow: rgba(0, 0, 0, 0.1);
314
- --btn-active-color: #0f172a;
315
- --btn-color: #64748b;
316
- --sidebar-bg: rgba(0, 0, 0, 0.015);
317
- --sidebar-border: rgba(0, 0, 0, 0.05);
318
- --label-color: #475569;
319
- --input-bg: #fff;
320
- --input-border: rgba(0, 0, 0, 0.1);
321
- --input-text: #0f172a;
322
- --tooltip-bg: #1e293b;
323
- --card-bg: #fff;
324
- --card-border: rgba(0, 0, 0, 0.05);
325
- --stat-value: #0f172a;
326
- --text-muted: #64748b;
327
- --insight-bg: #f8fafc;
328
- --progress-bg: rgba(0, 0, 0, 0.05);
329
- --empty-title: #1e293b;
330
-
331
- max-width: 1000px;
332
- margin: 2rem auto 5rem;
333
- }
334
-
335
- :global(.theme-dark) .svc-root {
336
- --glass-bg: rgba(15, 23, 42, 0.85);
337
- --glass-border: rgba(255, 255, 255, 0.08);
338
- --glass-shadow: rgba(0, 0, 0, 0.6);
339
- --nav-bg: rgba(30, 41, 59, 0.3);
340
- --nav-border: rgba(255, 255, 255, 0.05);
341
- --toggle-bg: rgba(255, 255, 255, 0.05);
342
- --slider-bg: #1e293b;
343
- --slider-shadow: rgba(0, 0, 0, 0.3);
344
- --btn-active-color: #fff;
345
- --btn-color: #94a3b8;
346
- --sidebar-bg: rgba(0, 0, 0, 0.2);
347
- --sidebar-border: rgba(255, 255, 255, 0.05);
348
- --label-color: #94a3b8;
349
- --input-bg: #0f172a;
350
- --input-border: rgba(255, 255, 255, 0.1);
351
- --input-text: #fff;
352
- --tooltip-bg: #0f172a;
353
- --card-bg: rgba(255, 255, 255, 0.03);
354
- --card-border: rgba(255, 255, 255, 0.05);
355
- --stat-value: #fff;
356
- --text-muted: #94a3b8;
357
- --insight-bg: rgba(255, 255, 255, 0.02);
358
- --progress-bg: rgba(255, 255, 255, 0.05);
359
- --empty-title: #f1f5f9;
360
- }
361
-
362
- .svc-glass {
363
- background: var(--glass-bg);
364
- backdrop-filter: blur(25px) saturate(180%);
365
- -webkit-backdrop-filter: blur(25px) saturate(180%);
366
- border: 1px solid var(--glass-border);
367
- border-radius: 32px;
368
- box-shadow: 0 25px 50px -12px var(--glass-shadow), inset 0 0 0 1px var(--glass-border);
369
- overflow: hidden;
370
- }
371
-
372
- .svc-nav {
373
- padding: 1.5rem;
374
- display: flex;
375
- justify-content: center;
376
- background: var(--nav-bg);
377
- border-bottom: 1px solid var(--nav-border);
378
- }
379
-
380
- .svc-toggle {
381
- position: relative;
382
- display: flex;
383
- background: var(--toggle-bg);
384
- padding: 4px;
385
- border-radius: 16px;
386
- width: 340px;
387
- }
388
-
389
- .svc-toggle-btn {
390
- flex: 1;
391
- z-index: 2;
392
- background: transparent;
393
- border: none;
394
- padding: 12px 0;
395
- font-size: 0.95rem;
396
- font-weight: 700;
397
- color: var(--btn-color);
398
- cursor: pointer;
399
- display: flex;
400
- align-items: center;
401
- justify-content: center;
402
- gap: 8px;
403
- transition: color 0.4s ease;
404
- }
405
-
406
- .svc-toggle-btn.svc-active { color: var(--btn-active-color); }
407
-
408
- .svc-slider {
409
- position: absolute;
410
- top: 4px;
411
- left: 4px;
412
- width: calc(50% - 4px);
413
- height: calc(100% - 8px);
414
- background: var(--slider-bg);
415
- border-radius: 12px;
416
- box-shadow: 0 4px 12px var(--slider-shadow);
417
- transition: transform 0.4s cubic-bezier(0.65, 0, 0.35, 1);
418
- }
419
-
420
- .svc-toggle.svc-switch .svc-slider { transform: translateX(100%); }
421
-
422
- .svc-nav-icon {
423
- display: flex;
424
- align-items: center;
425
- }
426
-
427
- .svc-grid {
428
- display: grid;
429
- grid-template-columns: 400px 1fr;
430
- min-height: 550px;
431
- }
432
-
433
- .svc-sidebar {
434
- padding: 2.5rem;
435
- background: var(--sidebar-bg);
436
- border-right: 1px solid var(--sidebar-border);
437
- display: flex;
438
- flex-direction: column;
439
- }
440
-
441
- .svc-section-tag {
442
- font-size: 0.75rem;
443
- font-weight: 800;
444
- text-transform: uppercase;
445
- letter-spacing: 0.15em;
446
- color: #94a3b8;
447
- margin-bottom: 2rem;
448
- }
449
-
450
- .svc-inputs {
451
- display: flex;
452
- flex-direction: column;
453
- gap: 1.75rem;
454
- margin-bottom: 3rem;
455
- }
456
-
457
- .svc-input-box {
458
- display: flex;
459
- flex-direction: column;
460
- gap: 0.75rem;
461
- }
462
-
463
- .svc-input-box label {
464
- font-size: 0.9rem;
465
- font-weight: 700;
466
- color: var(--label-color);
467
- display: flex;
468
- align-items: center;
469
- gap: 10px;
470
- }
471
-
472
- .svc-input-icon {
473
- color: #6366f1;
474
- flex-shrink: 0;
475
- }
476
-
477
- .svc-label-icon {
478
- display: flex;
479
- align-items: center;
480
- color: #6366f1;
481
- flex-shrink: 0;
482
- }
483
-
484
- .svc-info-trigger {
485
- position: relative;
486
- color: #94a3b8;
487
- cursor: help;
488
- display: flex;
489
- align-items: center;
490
- transition: color 0.2s;
491
- }
492
-
493
- .svc-info-trigger:hover { color: #6366f1; }
494
-
495
- .svc-tooltip {
496
- position: absolute;
497
- bottom: 125%;
498
- left: 50%;
499
- transform: translateX(-50%) translateY(10px);
500
- background: var(--tooltip-bg);
501
- color: white;
502
- padding: 0.75rem 1rem;
503
- border-radius: 12px;
504
- font-size: 0.8rem;
505
- font-weight: 500;
506
- line-height: 1.4;
507
- width: 200px;
508
- text-align: center;
509
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2);
510
- opacity: 0;
511
- visibility: hidden;
512
- pointer-events: none;
513
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
514
- z-index: 100;
515
- }
516
-
517
- .svc-tooltip::after {
518
- content: '';
519
- position: absolute;
520
- top: 100%;
521
- left: 50%;
522
- margin-left: -5px;
523
- border-width: 5px;
524
- border-style: solid;
525
- border-color: var(--tooltip-bg) transparent transparent transparent;
526
- }
527
-
528
- .svc-info-trigger:hover .svc-tooltip {
529
- opacity: 1;
530
- visibility: visible;
531
- transform: translateX(-50%) translateY(0);
532
- }
533
-
534
- .svc-input-wrap { position: relative; }
535
-
536
- .svc-input-wrap input,
537
- .svc-input-wrap select {
538
- width: 100%;
539
- padding: 14px 18px;
540
- background: var(--input-bg);
541
- border: 1px solid var(--input-border);
542
- border-radius: 14px;
543
- font-size: 1.05rem;
544
- color: var(--input-text);
545
- font-weight: 600;
546
- transition: all 0.3s ease;
547
- appearance: none;
548
- }
549
-
550
- .svc-input-wrap input:focus {
551
- outline: none;
552
- border-color: #6366f1;
553
- box-shadow: 0 0 0 5px rgba(99, 102, 241, 0.1);
554
- }
555
-
556
- .svc-select-wrap { position: relative; }
557
-
558
- .svc-select-arrow {
559
- position: absolute;
560
- right: 16px;
561
- top: 50%;
562
- transform: translateY(-50%);
563
- pointer-events: none;
564
- color: #94a3b8;
565
- }
566
-
567
- .svc-sidebar-action { margin-top: auto; }
568
-
569
- .svc-btn-primary {
570
- width: 100%;
571
- padding: 18px;
572
- background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
573
- border: none;
574
- border-radius: 16px;
575
- color: #fff;
576
- font-weight: 800;
577
- font-size: 1.1rem;
578
- cursor: pointer;
579
- display: flex;
580
- align-items: center;
581
- justify-content: center;
582
- gap: 12px;
583
- box-shadow: 0 12px 24px -6px rgba(79, 70, 229, 0.4);
584
- transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
585
- }
586
-
587
- .svc-btn-primary:hover {
588
- transform: translateY(-3px);
589
- box-shadow: 0 20px 30px -8px rgba(79, 70, 229, 0.5);
590
- filter: brightness(1.1);
591
- }
592
-
593
- .svc-sparkle { animation: svc-pulse 2s infinite; }
594
-
595
- .svc-viewport {
596
- padding: 3rem;
597
- display: flex;
598
- align-items: center;
599
- justify-content: center;
600
- }
601
-
602
- .svc-empty {
603
- text-align: center;
604
- max-width: 360px;
605
- }
606
-
607
- .svc-placeholder {
608
- position: relative;
609
- width: 120px;
610
- height: 120px;
611
- margin: 0 auto 2rem;
612
- }
613
-
614
- .svc-circle {
615
- position: absolute;
616
- top: 0; left: 0;
617
- width: 100%; height: 100%;
618
- border-radius: 100px;
619
- }
620
-
621
- .svc-c1 {
622
- background: rgba(99, 102, 241, 0.05);
623
- animation: svc-pulse 3s infinite;
624
- }
625
-
626
- .svc-c2 {
627
- background: rgba(99, 102, 241, 0.08);
628
- animation: svc-pulse 3s infinite 1.5s;
629
- transform: scale(0.8);
630
- }
631
-
632
- .svc-placeholder-icon {
633
- position: absolute;
634
- top: 50%; left: 50%;
635
- transform: translate(-50%, -50%);
636
- width: 48px; height: 48px;
637
- color: #6366f1;
638
- }
639
-
640
- .svc-empty h3 {
641
- font-size: 1.4rem;
642
- font-weight: 800;
643
- color: var(--empty-title);
644
- margin-bottom: 0.75rem;
645
- }
646
-
647
- .svc-empty p {
648
- font-size: 1rem;
649
- color: var(--text-muted);
650
- line-height: 1.6;
651
- }
652
-
653
- .svc-results {
654
- width: 100%;
655
- display: flex;
656
- flex-direction: column;
657
- gap: 2.5rem;
658
- }
659
-
660
- .svc-valuation {
661
- text-align: center;
662
- background: linear-gradient(135deg, #0f172a 0%, #1e1b4b 100%);
663
- padding: 3rem;
664
- border-radius: 28px;
665
- color: #fff;
666
- box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.4);
667
- }
668
-
669
- .svc-roi-label {
670
- font-size: 0.8rem;
671
- font-weight: 800;
672
- text-transform: uppercase;
673
- color: #818cf8;
674
- margin-bottom: 1.5rem;
675
- letter-spacing: 0.1em;
676
- }
677
-
678
- .svc-amount {
679
- font-size: 4.5rem;
680
- font-weight: 900;
681
- letter-spacing: -3px;
682
- margin-bottom: 0.5rem;
683
- }
684
-
685
- .svc-range {
686
- font-size: 1rem;
687
- color: #94a3b8;
688
- font-weight: 600;
689
- opacity: 0.8;
690
- }
691
-
692
- .svc-analytics {
693
- display: grid;
694
- grid-template-columns: 1fr 1fr;
695
- gap: 1.5rem;
696
- }
697
-
698
- .svc-stat-card {
699
- background: var(--card-bg);
700
- border: 1px solid var(--card-border);
701
- border-radius: 20px;
702
- padding: 1.75rem;
703
- display: flex;
704
- flex-direction: column;
705
- gap: 0.5rem;
706
- }
707
-
708
- .svc-stat-header {
709
- display: flex;
710
- justify-content: space-between;
711
- align-items: center;
712
- margin-bottom: 0.5rem;
713
- }
714
-
715
- .svc-stat-title {
716
- font-size: 0.8rem;
717
- font-weight: 800;
718
- color: #94a3b8;
719
- text-transform: uppercase;
720
- }
721
-
722
- .svc-stat-value {
723
- font-size: 2rem;
724
- font-weight: 900;
725
- color: var(--stat-value);
726
- }
727
-
728
- .svc-stat-desc {
729
- font-size: 0.85rem;
730
- font-weight: 600;
731
- color: var(--text-muted);
732
- margin-bottom: 0.75rem;
733
- }
734
-
735
- .svc-icon-warn { color: #f59e0b; }
736
- .svc-icon-ok { color: #10b981; }
737
-
738
- .svc-progress {
739
- height: 8px;
740
- background: var(--progress-bg);
741
- border-radius: 100px;
742
- overflow: hidden;
743
- }
744
-
745
- .svc-bar {
746
- height: 100%;
747
- width: 0%;
748
- transition: width 1.2s cubic-bezier(0.19, 1, 0.22, 1);
749
- border-radius: 100px;
750
- }
751
-
752
- .svc-bar-er { background: linear-gradient(to right, #6366f1, #c084fc); }
753
- .svc-bar-cpm { background: #10b981; }
754
-
755
- .svc-insight {
756
- display: flex;
757
- align-items: flex-start;
758
- gap: 12px;
759
- background: var(--insight-bg);
760
- padding: 1rem 1.5rem;
761
- border-radius: 14px;
762
- border-left: 4px solid #6366f1;
763
- }
764
-
765
- .svc-insight-icon {
766
- color: #6366f1;
767
- flex-shrink: 0;
768
- margin-top: 2px;
769
- }
770
-
771
- .svc-insight p {
772
- font-size: 0.85rem;
773
- color: var(--text-muted);
774
- margin: 0;
775
- line-height: 1.5;
776
- font-weight: 500;
777
- }
778
-
779
- .svc-hidden {
780
- display: none;
781
- }
782
-
783
- .svc-fadein { animation: svc-fadein 0.4s ease; }
784
-
785
- @keyframes svc-pulse {
786
- 0%, 100% {
787
- opacity: 1;
788
- transform: scale(1);
789
- }
790
-
791
- 50% {
792
- opacity: 0.6;
793
- transform: scale(1.1);
794
- }
795
- }
796
-
797
- @keyframes svc-fadein {
798
- from {
799
- opacity: 0;
800
- transform: translateY(10px);
801
- }
802
-
803
- to {
804
- opacity: 1;
805
- transform: translateY(0);
806
- }
807
- }
808
-
809
- @media (max-width: 900px) {
810
- .svc-grid {
811
- grid-template-columns: 1fr;
812
- }
813
-
814
- .svc-sidebar {
815
- border-right: none;
816
- border-bottom: 1px solid var(--sidebar-border);
817
- }
818
- }
819
-
820
- @media (max-width: 600px) {
821
- .svc-analytics {
822
- grid-template-columns: 1fr;
823
- }
824
-
825
- .svc-amount {
826
- font-size: 3rem;
827
- }
828
- }
829
- </style>
@@ -0,0 +1,30 @@
1
+ import type { SocialToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+
4
+ import type { SocialValueCalculatorUI } from './ui';
5
+ export type SocialValueCalculatorLocaleContent = ToolLocaleContent<SocialValueCalculatorUI>;
6
+
7
+ export const socialValueCalculator: SocialToolEntry<SocialValueCalculatorUI> = {
8
+ id: 'social-value-calculator',
9
+ icons: {
10
+ bg: 'mdi:calculator-variant-outline',
11
+ fg: 'mdi:currency-usd',
12
+ },
13
+ i18n: {
14
+ es: () => import('./i18n/es').then((m) => m.content),
15
+ en: () => import('./i18n/en').then((m) => m.content),
16
+ fr: () => import('./i18n/fr').then((m) => m.content),
17
+ de: () => import('./i18n/de').then((m) => m.content),
18
+ id: () => import('./i18n/id').then((m) => m.content),
19
+ it: () => import('./i18n/it').then((m) => m.content),
20
+ ja: () => import('./i18n/ja').then((m) => m.content),
21
+ ko: () => import('./i18n/ko').then((m) => m.content),
22
+ nl: () => import('./i18n/nl').then((m) => m.content),
23
+ pl: () => import('./i18n/pl').then((m) => m.content),
24
+ pt: () => import('./i18n/pt').then((m) => m.content),
25
+ ru: () => import('./i18n/ru').then((m) => m.content),
26
+ sv: () => import('./i18n/sv').then((m) => m.content),
27
+ tr: () => import('./i18n/tr').then((m) => m.content),
28
+ zh: () => import('./i18n/zh').then((m) => m.content),
29
+ },
30
+ };
@@ -1,35 +1,5 @@
1
- import type { SocialToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
-
3
-
4
- import type { SocialValueCalculatorUI } from './ui';
5
- export type SocialValueCalculatorLocaleContent = ToolLocaleContent<SocialValueCalculatorUI>;
6
-
7
- export const socialValueCalculator: SocialToolEntry<SocialValueCalculatorUI> = {
8
- id: 'social-value-calculator',
9
- icons: {
10
- bg: 'mdi:calculator-variant-outline',
11
- fg: 'mdi:currency-usd',
12
- },
13
- i18n: {
14
- es: () => import('./i18n/es').then((m) => m.content),
15
- en: () => import('./i18n/en').then((m) => m.content),
16
- fr: () => import('./i18n/fr').then((m) => m.content),
17
- de: () => import('./i18n/de').then((m) => m.content),
18
- id: () => import('./i18n/id').then((m) => m.content),
19
- it: () => import('./i18n/it').then((m) => m.content),
20
- ja: () => import('./i18n/ja').then((m) => m.content),
21
- ko: () => import('./i18n/ko').then((m) => m.content),
22
- nl: () => import('./i18n/nl').then((m) => m.content),
23
- pl: () => import('./i18n/pl').then((m) => m.content),
24
- pt: () => import('./i18n/pt').then((m) => m.content),
25
- ru: () => import('./i18n/ru').then((m) => m.content),
26
- sv: () => import('./i18n/sv').then((m) => m.content),
27
- tr: () => import('./i18n/tr').then((m) => m.content),
28
- zh: () => import('./i18n/zh').then((m) => m.content),
29
- },
30
- };
31
-
32
-
1
+ import { socialValueCalculator } from './entry';
2
+ export * from './entry';
33
3
  export const SOCIAL_VALUE_CALCULATOR_TOOL: ToolDefinition = {
34
4
  entry: socialValueCalculator,
35
5
  Component: () => import('./component.astro'),