@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
@@ -0,0 +1,524 @@
1
+ .svc-root {
2
+ --glass-bg: rgba(255, 255, 255, 0.75);
3
+ --glass-border: rgba(255, 255, 255, 0.5);
4
+ --glass-shadow: rgba(0, 0, 0, 0.08);
5
+ --nav-bg: rgba(255, 255, 255, 0.3);
6
+ --nav-border: rgba(0, 0, 0, 0.05);
7
+ --toggle-bg: rgba(0, 0, 0, 0.04);
8
+ --slider-bg: #fff;
9
+ --slider-shadow: rgba(0, 0, 0, 0.1);
10
+ --btn-active-color: #0f172a;
11
+ --btn-color: #64748b;
12
+ --sidebar-bg: rgba(0, 0, 0, 0.015);
13
+ --sidebar-border: rgba(0, 0, 0, 0.05);
14
+ --label-color: #475569;
15
+ --input-bg: #fff;
16
+ --input-border: rgba(0, 0, 0, 0.1);
17
+ --input-text: #0f172a;
18
+ --tooltip-bg: #1e293b;
19
+ --card-bg: #fff;
20
+ --card-border: rgba(0, 0, 0, 0.05);
21
+ --stat-value: #0f172a;
22
+ --text-muted: #64748b;
23
+ --insight-bg: #f8fafc;
24
+ --progress-bg: rgba(0, 0, 0, 0.05);
25
+ --empty-title: #1e293b;
26
+
27
+ max-width: 1000px;
28
+ margin: 2rem auto 5rem;
29
+ }
30
+
31
+ :global(.theme-dark) .svc-root {
32
+ --glass-bg: rgba(15, 23, 42, 0.85);
33
+ --glass-border: rgba(255, 255, 255, 0.08);
34
+ --glass-shadow: rgba(0, 0, 0, 0.6);
35
+ --nav-bg: rgba(30, 41, 59, 0.3);
36
+ --nav-border: rgba(255, 255, 255, 0.05);
37
+ --toggle-bg: rgba(255, 255, 255, 0.05);
38
+ --slider-bg: #1e293b;
39
+ --slider-shadow: rgba(0, 0, 0, 0.3);
40
+ --btn-active-color: #fff;
41
+ --btn-color: #94a3b8;
42
+ --sidebar-bg: rgba(0, 0, 0, 0.2);
43
+ --sidebar-border: rgba(255, 255, 255, 0.05);
44
+ --label-color: #94a3b8;
45
+ --input-bg: #0f172a;
46
+ --input-border: rgba(255, 255, 255, 0.1);
47
+ --input-text: #fff;
48
+ --tooltip-bg: #0f172a;
49
+ --card-bg: rgba(255, 255, 255, 0.03);
50
+ --card-border: rgba(255, 255, 255, 0.05);
51
+ --stat-value: #fff;
52
+ --text-muted: #94a3b8;
53
+ --insight-bg: rgba(255, 255, 255, 0.02);
54
+ --progress-bg: rgba(255, 255, 255, 0.05);
55
+ --empty-title: #f1f5f9;
56
+ }
57
+
58
+ .svc-glass {
59
+ background: var(--glass-bg);
60
+ backdrop-filter: blur(25px) saturate(180%);
61
+ -webkit-backdrop-filter: blur(25px) saturate(180%);
62
+ border: 1px solid var(--glass-border);
63
+ border-radius: 32px;
64
+ box-shadow: 0 25px 50px -12px var(--glass-shadow), inset 0 0 0 1px var(--glass-border);
65
+ overflow: hidden;
66
+ }
67
+
68
+ .svc-nav {
69
+ padding: 1.5rem;
70
+ display: flex;
71
+ justify-content: center;
72
+ background: var(--nav-bg);
73
+ border-bottom: 1px solid var(--nav-border);
74
+ }
75
+
76
+ .svc-toggle {
77
+ position: relative;
78
+ display: flex;
79
+ background: var(--toggle-bg);
80
+ padding: 4px;
81
+ border-radius: 16px;
82
+ width: 340px;
83
+ }
84
+
85
+ .svc-toggle-btn {
86
+ flex: 1;
87
+ z-index: 2;
88
+ background: transparent;
89
+ border: none;
90
+ padding: 12px 0;
91
+ font-size: 0.95rem;
92
+ font-weight: 700;
93
+ color: var(--btn-color);
94
+ cursor: pointer;
95
+ display: flex;
96
+ align-items: center;
97
+ justify-content: center;
98
+ gap: 8px;
99
+ transition: color 0.4s ease;
100
+ }
101
+
102
+ .svc-toggle-btn.svc-active { color: var(--btn-active-color); }
103
+
104
+ .svc-slider {
105
+ position: absolute;
106
+ top: 4px;
107
+ left: 4px;
108
+ width: calc(50% - 4px);
109
+ height: calc(100% - 8px);
110
+ background: var(--slider-bg);
111
+ border-radius: 12px;
112
+ box-shadow: 0 4px 12px var(--slider-shadow);
113
+ transition: transform 0.4s cubic-bezier(0.65, 0, 0.35, 1);
114
+ }
115
+
116
+ .svc-toggle.svc-switch .svc-slider { transform: translateX(100%); }
117
+
118
+ .svc-nav-icon {
119
+ display: flex;
120
+ align-items: center;
121
+ }
122
+
123
+ .svc-grid {
124
+ display: grid;
125
+ grid-template-columns: 400px 1fr;
126
+ min-height: 550px;
127
+ }
128
+
129
+ .svc-sidebar {
130
+ padding: 2.5rem;
131
+ background: var(--sidebar-bg);
132
+ border-right: 1px solid var(--sidebar-border);
133
+ display: flex;
134
+ flex-direction: column;
135
+ }
136
+
137
+ .svc-section-tag {
138
+ font-size: 0.75rem;
139
+ font-weight: 800;
140
+ text-transform: uppercase;
141
+ letter-spacing: 0.15em;
142
+ color: #94a3b8;
143
+ margin-bottom: 2rem;
144
+ }
145
+
146
+ .svc-inputs {
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: 1.75rem;
150
+ margin-bottom: 3rem;
151
+ }
152
+
153
+ .svc-input-box {
154
+ display: flex;
155
+ flex-direction: column;
156
+ gap: 0.75rem;
157
+ }
158
+
159
+ .svc-input-box label {
160
+ font-size: 0.9rem;
161
+ font-weight: 700;
162
+ color: var(--label-color);
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 10px;
166
+ }
167
+
168
+ .svc-input-icon {
169
+ color: #6366f1;
170
+ flex-shrink: 0;
171
+ }
172
+
173
+ .svc-label-icon {
174
+ display: flex;
175
+ align-items: center;
176
+ color: #6366f1;
177
+ flex-shrink: 0;
178
+ }
179
+
180
+ .svc-info-trigger {
181
+ position: relative;
182
+ color: #94a3b8;
183
+ cursor: help;
184
+ display: flex;
185
+ align-items: center;
186
+ transition: color 0.2s;
187
+ }
188
+
189
+ .svc-info-trigger:hover { color: #6366f1; }
190
+
191
+ .svc-tooltip {
192
+ position: absolute;
193
+ bottom: 125%;
194
+ left: 50%;
195
+ transform: translateX(-50%) translateY(10px);
196
+ background: var(--tooltip-bg);
197
+ color: white;
198
+ padding: 0.75rem 1rem;
199
+ border-radius: 12px;
200
+ font-size: 0.8rem;
201
+ font-weight: 500;
202
+ line-height: 1.4;
203
+ width: 200px;
204
+ text-align: center;
205
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2);
206
+ opacity: 0;
207
+ visibility: hidden;
208
+ pointer-events: none;
209
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
210
+ z-index: 100;
211
+ }
212
+
213
+ .svc-tooltip::after {
214
+ content: '';
215
+ position: absolute;
216
+ top: 100%;
217
+ left: 50%;
218
+ margin-left: -5px;
219
+ border-width: 5px;
220
+ border-style: solid;
221
+ border-color: var(--tooltip-bg) transparent transparent transparent;
222
+ }
223
+
224
+ .svc-info-trigger:hover .svc-tooltip {
225
+ opacity: 1;
226
+ visibility: visible;
227
+ transform: translateX(-50%) translateY(0);
228
+ }
229
+
230
+ .svc-input-wrap { position: relative; }
231
+
232
+ .svc-input-wrap input,
233
+ .svc-input-wrap select {
234
+ width: 100%;
235
+ padding: 14px 18px;
236
+ background: var(--input-bg);
237
+ border: 1px solid var(--input-border);
238
+ border-radius: 14px;
239
+ font-size: 1.05rem;
240
+ color: var(--input-text);
241
+ font-weight: 600;
242
+ transition: all 0.3s ease;
243
+ appearance: none;
244
+ }
245
+
246
+ .svc-input-wrap input:focus {
247
+ outline: none;
248
+ border-color: #6366f1;
249
+ box-shadow: 0 0 0 5px rgba(99, 102, 241, 0.1);
250
+ }
251
+
252
+ .svc-select-wrap { position: relative; }
253
+
254
+ .svc-select-arrow {
255
+ position: absolute;
256
+ right: 16px;
257
+ top: 50%;
258
+ transform: translateY(-50%);
259
+ pointer-events: none;
260
+ color: #94a3b8;
261
+ }
262
+
263
+ .svc-sidebar-action { margin-top: auto; }
264
+
265
+ .svc-btn-primary {
266
+ width: 100%;
267
+ padding: 18px;
268
+ background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
269
+ border: none;
270
+ border-radius: 16px;
271
+ color: #fff;
272
+ font-weight: 800;
273
+ font-size: 1.1rem;
274
+ cursor: pointer;
275
+ display: flex;
276
+ align-items: center;
277
+ justify-content: center;
278
+ gap: 12px;
279
+ box-shadow: 0 12px 24px -6px rgba(79, 70, 229, 0.4);
280
+ transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
281
+ }
282
+
283
+ .svc-btn-primary:hover {
284
+ transform: translateY(-3px);
285
+ box-shadow: 0 20px 30px -8px rgba(79, 70, 229, 0.5);
286
+ filter: brightness(1.1);
287
+ }
288
+
289
+ .svc-sparkle { animation: svc-pulse 2s infinite; }
290
+
291
+ .svc-viewport {
292
+ padding: 3rem;
293
+ display: flex;
294
+ align-items: center;
295
+ justify-content: center;
296
+ }
297
+
298
+ .svc-empty {
299
+ text-align: center;
300
+ max-width: 360px;
301
+ }
302
+
303
+ .svc-placeholder {
304
+ position: relative;
305
+ width: 120px;
306
+ height: 120px;
307
+ margin: 0 auto 2rem;
308
+ }
309
+
310
+ .svc-circle {
311
+ position: absolute;
312
+ top: 0; left: 0;
313
+ width: 100%; height: 100%;
314
+ border-radius: 100px;
315
+ }
316
+
317
+ .svc-c1 {
318
+ background: rgba(99, 102, 241, 0.05);
319
+ animation: svc-pulse 3s infinite;
320
+ }
321
+
322
+ .svc-c2 {
323
+ background: rgba(99, 102, 241, 0.08);
324
+ animation: svc-pulse 3s infinite 1.5s;
325
+ transform: scale(0.8);
326
+ }
327
+
328
+ .svc-placeholder-icon {
329
+ position: absolute;
330
+ top: 50%; left: 50%;
331
+ transform: translate(-50%, -50%);
332
+ width: 48px; height: 48px;
333
+ color: #6366f1;
334
+ }
335
+
336
+ .svc-empty h3 {
337
+ font-size: 1.4rem;
338
+ font-weight: 800;
339
+ color: var(--empty-title);
340
+ margin-bottom: 0.75rem;
341
+ }
342
+
343
+ .svc-empty p {
344
+ font-size: 1rem;
345
+ color: var(--text-muted);
346
+ line-height: 1.6;
347
+ }
348
+
349
+ .svc-results {
350
+ width: 100%;
351
+ display: flex;
352
+ flex-direction: column;
353
+ gap: 2.5rem;
354
+ }
355
+
356
+ .svc-valuation {
357
+ text-align: center;
358
+ background: linear-gradient(135deg, #0f172a 0%, #1e1b4b 100%);
359
+ padding: 3rem;
360
+ border-radius: 28px;
361
+ color: #fff;
362
+ box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.4);
363
+ }
364
+
365
+ .svc-roi-label {
366
+ font-size: 0.8rem;
367
+ font-weight: 800;
368
+ text-transform: uppercase;
369
+ color: #818cf8;
370
+ margin-bottom: 1.5rem;
371
+ letter-spacing: 0.1em;
372
+ }
373
+
374
+ .svc-amount {
375
+ font-size: 4.5rem;
376
+ font-weight: 900;
377
+ letter-spacing: -3px;
378
+ margin-bottom: 0.5rem;
379
+ }
380
+
381
+ .svc-range {
382
+ font-size: 1rem;
383
+ color: #94a3b8;
384
+ font-weight: 600;
385
+ opacity: 0.8;
386
+ }
387
+
388
+ .svc-analytics {
389
+ display: grid;
390
+ grid-template-columns: 1fr 1fr;
391
+ gap: 1.5rem;
392
+ }
393
+
394
+ .svc-stat-card {
395
+ background: var(--card-bg);
396
+ border: 1px solid var(--card-border);
397
+ border-radius: 20px;
398
+ padding: 1.75rem;
399
+ display: flex;
400
+ flex-direction: column;
401
+ gap: 0.5rem;
402
+ }
403
+
404
+ .svc-stat-header {
405
+ display: flex;
406
+ justify-content: space-between;
407
+ align-items: center;
408
+ margin-bottom: 0.5rem;
409
+ }
410
+
411
+ .svc-stat-title {
412
+ font-size: 0.8rem;
413
+ font-weight: 800;
414
+ color: #94a3b8;
415
+ text-transform: uppercase;
416
+ }
417
+
418
+ .svc-stat-value {
419
+ font-size: 2rem;
420
+ font-weight: 900;
421
+ color: var(--stat-value);
422
+ }
423
+
424
+ .svc-stat-desc {
425
+ font-size: 0.85rem;
426
+ font-weight: 600;
427
+ color: var(--text-muted);
428
+ margin-bottom: 0.75rem;
429
+ }
430
+
431
+ .svc-icon-warn { color: #f59e0b; }
432
+ .svc-icon-ok { color: #10b981; }
433
+
434
+ .svc-progress {
435
+ height: 8px;
436
+ background: var(--progress-bg);
437
+ border-radius: 100px;
438
+ overflow: hidden;
439
+ }
440
+
441
+ .svc-bar {
442
+ height: 100%;
443
+ width: 0%;
444
+ transition: width 1.2s cubic-bezier(0.19, 1, 0.22, 1);
445
+ border-radius: 100px;
446
+ }
447
+
448
+ .svc-bar-er { background: linear-gradient(to right, #6366f1, #c084fc); }
449
+ .svc-bar-cpm { background: #10b981; }
450
+
451
+ .svc-insight {
452
+ display: flex;
453
+ align-items: flex-start;
454
+ gap: 12px;
455
+ background: var(--insight-bg);
456
+ padding: 1rem 1.5rem;
457
+ border-radius: 14px;
458
+ border-left: 4px solid #6366f1;
459
+ }
460
+
461
+ .svc-insight-icon {
462
+ color: #6366f1;
463
+ flex-shrink: 0;
464
+ margin-top: 2px;
465
+ }
466
+
467
+ .svc-insight p {
468
+ font-size: 0.85rem;
469
+ color: var(--text-muted);
470
+ margin: 0;
471
+ line-height: 1.5;
472
+ font-weight: 500;
473
+ }
474
+
475
+ .svc-hidden {
476
+ display: none;
477
+ }
478
+
479
+ .svc-fadein { animation: svc-fadein 0.4s ease; }
480
+
481
+ @keyframes svc-pulse {
482
+ 0%, 100% {
483
+ opacity: 1;
484
+ transform: scale(1);
485
+ }
486
+
487
+ 50% {
488
+ opacity: 0.6;
489
+ transform: scale(1.1);
490
+ }
491
+ }
492
+
493
+ @keyframes svc-fadein {
494
+ from {
495
+ opacity: 0;
496
+ transform: translateY(10px);
497
+ }
498
+
499
+ to {
500
+ opacity: 1;
501
+ transform: translateY(0);
502
+ }
503
+ }
504
+
505
+ @media (max-width: 900px) {
506
+ .svc-grid {
507
+ grid-template-columns: 1fr;
508
+ }
509
+
510
+ .svc-sidebar {
511
+ border-right: none;
512
+ border-bottom: 1px solid var(--sidebar-border);
513
+ }
514
+ }
515
+
516
+ @media (max-width: 600px) {
517
+ .svc-analytics {
518
+ grid-template-columns: 1fr;
519
+ }
520
+
521
+ .svc-amount {
522
+ font-size: 3rem;
523
+ }
524
+ }