@jjlmoya/utils-social 1.11.0 → 1.14.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 (138) hide show
  1. package/package.json +1 -1
  2. package/src/pages/[locale]/[slug].astro +28 -12
  3. package/src/tests/locale_completeness.test.ts +4 -14
  4. package/src/tests/shared-test-helpers.ts +56 -0
  5. package/src/tests/tool_exports.test.ts +34 -0
  6. package/src/tool/redditFormatter/bibliography.astro +2 -10
  7. package/src/tool/redditFormatter/bibliography.ts +12 -0
  8. package/src/tool/redditFormatter/i18n/de.ts +3 -13
  9. package/src/tool/redditFormatter/i18n/en.ts +3 -13
  10. package/src/tool/redditFormatter/i18n/es.ts +3 -13
  11. package/src/tool/redditFormatter/i18n/fr.ts +3 -13
  12. package/src/tool/redditFormatter/i18n/id.ts +3 -13
  13. package/src/tool/redditFormatter/i18n/it.ts +3 -13
  14. package/src/tool/redditFormatter/i18n/ja.ts +3 -13
  15. package/src/tool/redditFormatter/i18n/ko.ts +3 -13
  16. package/src/tool/redditFormatter/i18n/nl.ts +3 -13
  17. package/src/tool/redditFormatter/i18n/pl.ts +3 -13
  18. package/src/tool/redditFormatter/i18n/pt.ts +3 -13
  19. package/src/tool/redditFormatter/i18n/ru.ts +3 -13
  20. package/src/tool/redditFormatter/i18n/sv.ts +3 -13
  21. package/src/tool/redditFormatter/i18n/tr.ts +3 -13
  22. package/src/tool/redditFormatter/i18n/zh.ts +3 -13
  23. package/src/tool/redditFormatter/reddit-text-formatter.css +1 -1
  24. package/src/tool/redditFormatter/seo.astro +2 -1
  25. package/src/tool/safeZones/bibliography.astro +2 -10
  26. package/src/tool/safeZones/bibliography.ts +20 -0
  27. package/src/tool/safeZones/i18n/de.ts +3 -21
  28. package/src/tool/safeZones/i18n/en.ts +3 -21
  29. package/src/tool/safeZones/i18n/es.ts +3 -21
  30. package/src/tool/safeZones/i18n/fr.ts +3 -21
  31. package/src/tool/safeZones/i18n/id.ts +3 -21
  32. package/src/tool/safeZones/i18n/it.ts +3 -21
  33. package/src/tool/safeZones/i18n/ja.ts +3 -21
  34. package/src/tool/safeZones/i18n/ko.ts +3 -21
  35. package/src/tool/safeZones/i18n/nl.ts +3 -21
  36. package/src/tool/safeZones/i18n/pl.ts +3 -21
  37. package/src/tool/safeZones/i18n/pt.ts +3 -21
  38. package/src/tool/safeZones/i18n/ru.ts +3 -21
  39. package/src/tool/safeZones/i18n/sv.ts +3 -21
  40. package/src/tool/safeZones/i18n/tr.ts +3 -21
  41. package/src/tool/safeZones/i18n/zh.ts +3 -21
  42. package/src/tool/safeZones/seo.astro +2 -1
  43. package/src/tool/socialImageResizer/bibliography.astro +2 -10
  44. package/src/tool/socialImageResizer/bibliography.ts +12 -0
  45. package/src/tool/socialImageResizer/i18n/de.ts +3 -13
  46. package/src/tool/socialImageResizer/i18n/en.ts +3 -13
  47. package/src/tool/socialImageResizer/i18n/es.ts +3 -13
  48. package/src/tool/socialImageResizer/i18n/fr.ts +3 -13
  49. package/src/tool/socialImageResizer/i18n/id.ts +3 -13
  50. package/src/tool/socialImageResizer/i18n/it.ts +3 -13
  51. package/src/tool/socialImageResizer/i18n/ja.ts +3 -13
  52. package/src/tool/socialImageResizer/i18n/ko.ts +3 -13
  53. package/src/tool/socialImageResizer/i18n/nl.ts +3 -13
  54. package/src/tool/socialImageResizer/i18n/pl.ts +3 -13
  55. package/src/tool/socialImageResizer/i18n/pt.ts +3 -13
  56. package/src/tool/socialImageResizer/i18n/ru.ts +3 -13
  57. package/src/tool/socialImageResizer/i18n/sv.ts +3 -13
  58. package/src/tool/socialImageResizer/i18n/tr.ts +3 -13
  59. package/src/tool/socialImageResizer/i18n/zh.ts +3 -13
  60. package/src/tool/socialImageResizer/seo.astro +2 -1
  61. package/src/tool/socialImageResizer/social-media-image-resizer.css +1 -1
  62. package/src/tool/socialValueCalculator/bibliography.astro +2 -10
  63. package/src/tool/socialValueCalculator/bibliography.ts +16 -0
  64. package/src/tool/socialValueCalculator/i18n/de.ts +3 -17
  65. package/src/tool/socialValueCalculator/i18n/en.ts +3 -17
  66. package/src/tool/socialValueCalculator/i18n/es.ts +3 -17
  67. package/src/tool/socialValueCalculator/i18n/fr.ts +3 -17
  68. package/src/tool/socialValueCalculator/i18n/id.ts +3 -17
  69. package/src/tool/socialValueCalculator/i18n/it.ts +3 -17
  70. package/src/tool/socialValueCalculator/i18n/ja.ts +3 -17
  71. package/src/tool/socialValueCalculator/i18n/ko.ts +3 -17
  72. package/src/tool/socialValueCalculator/i18n/nl.ts +3 -17
  73. package/src/tool/socialValueCalculator/i18n/pl.ts +3 -17
  74. package/src/tool/socialValueCalculator/i18n/pt.ts +3 -17
  75. package/src/tool/socialValueCalculator/i18n/ru.ts +3 -17
  76. package/src/tool/socialValueCalculator/i18n/sv.ts +3 -17
  77. package/src/tool/socialValueCalculator/i18n/tr.ts +3 -17
  78. package/src/tool/socialValueCalculator/i18n/zh.ts +3 -17
  79. package/src/tool/socialValueCalculator/seo.astro +2 -1
  80. package/src/tool/socialValueCalculator/social-account-value-calculator.css +1 -1
  81. package/src/tool/tinderPhotoOptimizer/bibliography.astro +2 -10
  82. package/src/tool/tinderPhotoOptimizer/bibliography.ts +12 -0
  83. package/src/tool/tinderPhotoOptimizer/i18n/de.ts +3 -13
  84. package/src/tool/tinderPhotoOptimizer/i18n/en.ts +3 -13
  85. package/src/tool/tinderPhotoOptimizer/i18n/es.ts +3 -13
  86. package/src/tool/tinderPhotoOptimizer/i18n/fr.ts +3 -13
  87. package/src/tool/tinderPhotoOptimizer/i18n/id.ts +3 -13
  88. package/src/tool/tinderPhotoOptimizer/i18n/it.ts +3 -13
  89. package/src/tool/tinderPhotoOptimizer/i18n/ja.ts +3 -13
  90. package/src/tool/tinderPhotoOptimizer/i18n/ko.ts +3 -13
  91. package/src/tool/tinderPhotoOptimizer/i18n/nl.ts +3 -13
  92. package/src/tool/tinderPhotoOptimizer/i18n/pl.ts +3 -13
  93. package/src/tool/tinderPhotoOptimizer/i18n/pt.ts +3 -13
  94. package/src/tool/tinderPhotoOptimizer/i18n/ru.ts +3 -13
  95. package/src/tool/tinderPhotoOptimizer/i18n/sv.ts +3 -13
  96. package/src/tool/tinderPhotoOptimizer/i18n/tr.ts +3 -13
  97. package/src/tool/tinderPhotoOptimizer/i18n/zh.ts +3 -13
  98. package/src/tool/tinderPhotoOptimizer/seo.astro +2 -1
  99. package/src/tool/tinderPhotoOptimizer/tinder-photo-optimizer.css +7 -7
  100. package/src/tool/youtubeThumbnail/bibliography.astro +2 -10
  101. package/src/tool/youtubeThumbnail/bibliography.ts +16 -0
  102. package/src/tool/youtubeThumbnail/i18n/de.ts +3 -17
  103. package/src/tool/youtubeThumbnail/i18n/en.ts +3 -17
  104. package/src/tool/youtubeThumbnail/i18n/es.ts +3 -17
  105. package/src/tool/youtubeThumbnail/i18n/fr.ts +3 -17
  106. package/src/tool/youtubeThumbnail/i18n/id.ts +3 -17
  107. package/src/tool/youtubeThumbnail/i18n/it.ts +3 -17
  108. package/src/tool/youtubeThumbnail/i18n/ja.ts +3 -17
  109. package/src/tool/youtubeThumbnail/i18n/ko.ts +3 -17
  110. package/src/tool/youtubeThumbnail/i18n/nl.ts +3 -17
  111. package/src/tool/youtubeThumbnail/i18n/pl.ts +3 -17
  112. package/src/tool/youtubeThumbnail/i18n/pt.ts +3 -17
  113. package/src/tool/youtubeThumbnail/i18n/ru.ts +3 -17
  114. package/src/tool/youtubeThumbnail/i18n/sv.ts +3 -17
  115. package/src/tool/youtubeThumbnail/i18n/tr.ts +3 -17
  116. package/src/tool/youtubeThumbnail/i18n/zh.ts +3 -17
  117. package/src/tool/youtubeThumbnail/seo.astro +2 -1
  118. package/src/tool/youtubeThumbnail/youtube-thumbnail-extractor.css +1 -1
  119. package/src/tool/youtubeThumbnailPreviewer/bibliography.astro +2 -10
  120. package/src/tool/youtubeThumbnailPreviewer/bibliography.ts +16 -0
  121. package/src/tool/youtubeThumbnailPreviewer/i18n/de.ts +3 -17
  122. package/src/tool/youtubeThumbnailPreviewer/i18n/en.ts +3 -17
  123. package/src/tool/youtubeThumbnailPreviewer/i18n/es.ts +3 -17
  124. package/src/tool/youtubeThumbnailPreviewer/i18n/fr.ts +3 -17
  125. package/src/tool/youtubeThumbnailPreviewer/i18n/id.ts +3 -17
  126. package/src/tool/youtubeThumbnailPreviewer/i18n/it.ts +3 -17
  127. package/src/tool/youtubeThumbnailPreviewer/i18n/ja.ts +3 -17
  128. package/src/tool/youtubeThumbnailPreviewer/i18n/ko.ts +3 -17
  129. package/src/tool/youtubeThumbnailPreviewer/i18n/nl.ts +3 -17
  130. package/src/tool/youtubeThumbnailPreviewer/i18n/pl.ts +3 -17
  131. package/src/tool/youtubeThumbnailPreviewer/i18n/pt.ts +3 -17
  132. package/src/tool/youtubeThumbnailPreviewer/i18n/ru.ts +3 -17
  133. package/src/tool/youtubeThumbnailPreviewer/i18n/sv.ts +3 -17
  134. package/src/tool/youtubeThumbnailPreviewer/i18n/tr.ts +3 -17
  135. package/src/tool/youtubeThumbnailPreviewer/i18n/zh.ts +3 -17
  136. package/src/tool/youtubeThumbnailPreviewer/seo.astro +2 -1
  137. package/src/tool/youtubeThumbnailPreviewer/youtube-thumbnail-previewer.css +523 -273
  138. package/src/types.ts +0 -2
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TinderPhotoOptimizerUI } from '../ui';
@@ -87,19 +88,8 @@ export const content: ToolLocaleContent<TinderPhotoOptimizerUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: '常见问题',
91
- faq: faqData,
92
- bibliographyTitle: '参考文献',
93
- bibliography: [
94
- {
95
- name: 'face-api.js: JavaScript Face Recognition in the Browser',
96
- url: 'https://github.com/justadudewhohacks/face-api.js',
97
- },
98
- {
99
- name: 'MDN Web Docs: Canvas API',
100
- url: 'https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API',
101
- },
102
- ],
91
+ faq: faqData,
92
+ bibliography,
103
93
  howTo: howToData,
104
94
  schemas: [faqSchema, howToSchema, appSchema],
105
95
  seo: [
@@ -11,4 +11,5 @@ const { locale = 'es' } = Astro.props;
11
11
  const content = await tinderPhotoOptimizer.i18n[locale]?.();
12
12
  if (!content) return null;
13
13
  ---
14
- <SEORenderer content={{ locale: locale as string, sections: content.seo }} />
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -19,7 +19,7 @@
19
19
  --tfo-switch-off: #e2e8f0;
20
20
  }
21
21
 
22
- :global(.theme-dark) .tfo-root {
22
+ .theme-dark .tfo-root {
23
23
  --tfo-text: #f1f5f9;
24
24
  --tfo-muted: #94a3b8;
25
25
  --tfo-bg: #0f172a;
@@ -53,7 +53,7 @@
53
53
  overflow: hidden;
54
54
  }
55
55
 
56
- :global(.theme-dark) .tfo-container {
56
+ .theme-dark .tfo-container {
57
57
  border-color: rgba(255, 255, 255, 0.06);
58
58
  }
59
59
 
@@ -333,7 +333,7 @@
333
333
  color: var(--tfo-pink);
334
334
  }
335
335
 
336
- :global(.theme-dark) .tfo-action-btn:hover .tfo-btn-icon {
336
+ .theme-dark .tfo-action-btn:hover .tfo-btn-icon {
337
337
  background: rgba(253, 41, 123, 0.15);
338
338
  color: var(--tfo-pink);
339
339
  }
@@ -344,7 +344,7 @@
344
344
  color: var(--tfo-pink);
345
345
  }
346
346
 
347
- :global(.theme-dark) .tfo-action-btn.is-active {
347
+ .theme-dark .tfo-action-btn.is-active {
348
348
  background: rgba(253, 41, 123, 0.1);
349
349
  }
350
350
 
@@ -398,7 +398,7 @@
398
398
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.02);
399
399
  }
400
400
 
401
- :global(.theme-dark) .tfo-analysis-col {
401
+ .theme-dark .tfo-analysis-col {
402
402
  border-color: rgba(255, 255, 255, 0.06);
403
403
  }
404
404
 
@@ -445,7 +445,7 @@
445
445
  overflow-wrap: break-word;
446
446
  }
447
447
 
448
- :global(.theme-dark) .tfo-alert {
448
+ .theme-dark .tfo-alert {
449
449
  border-bottom-color: rgba(255, 255, 255, 0.04);
450
450
  }
451
451
 
@@ -487,7 +487,7 @@
487
487
  border-radius: 40px;
488
488
  }
489
489
 
490
- :global(.theme-dark) .tfo-ai-loader {
490
+ .theme-dark .tfo-ai-loader {
491
491
  background: rgba(15, 23, 42, 0.85);
492
492
  }
493
493
 
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { youtubeThumbnail } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await youtubeThumbnail.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,16 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'YouTube Help: Add a custom video thumbnail',
6
+ url: 'https://support.google.com/youtube/answer/72431',
7
+ },
8
+ {
9
+ name: 'YouTube Creator Academy: Make great thumbnails',
10
+ url: 'https://creatoracademy.youtube.com/',
11
+ },
12
+ {
13
+ name: 'Google Developers: YouTube Data API — Thumbnails',
14
+ url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
15
+ },
16
+ ];
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Häufig gestellte Fragen',
91
- faq: faqData,
92
- bibliographyTitle: 'Dokumentation & Referenzen',
93
- bibliography: [
94
- {
95
- name: 'YouTube-Hilfe: Ein benutzerdefiniertes Video-Thumbnail hinzufügen',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Großartige Thumbnails erstellen',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Frequently Asked Questions',
91
- faq: faqData,
92
- bibliographyTitle: 'Documentation & References',
93
- bibliography: [
94
- {
95
- name: 'YouTube Help: Add a custom video thumbnail',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Make great thumbnails',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Preguntas Frecuentes',
91
- faq: faqData,
92
- bibliographyTitle: 'Documentación y Referencias',
93
- bibliography: [
94
- {
95
- name: 'YouTube Help: Añadir una imagen en miniatura personalizada',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Cómo crear miniaturas efectivas',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Questions Fréquentes',
91
- faq: faqData,
92
- bibliographyTitle: 'Documentation et Références',
93
- bibliography: [
94
- {
95
- name: 'YouTube Aide : Ajouter une miniature personnalisée',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy : Créer de bonnes miniatures',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers : YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Pertanyaan yang Sering Diajukan',
91
- faq: faqData,
92
- bibliographyTitle: 'Dokumentation dan Referensi',
93
- bibliography: [
94
- {
95
- name: 'Bantuan YouTube: Menambahkan gambar thumbnail kustom',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Cara membuat thumbnail yang efektif',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Domande Frequenti',
91
- faq: faqData,
92
- bibliographyTitle: 'Documentazione e Riferimenti',
93
- bibliography: [
94
- {
95
- name: 'Guida di YouTube: Aggiungere un\'immagine in miniatura personalizzata',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Come creare miniature efficaci',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'よくある質問',
91
- faq: faqData,
92
- bibliographyTitle: 'ドキュメントと参照先',
93
- bibliography: [
94
- {
95
- name: 'YouTube ヘルプ: 動画のカスタム サムネイルを追加する',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube クリエイター アカデミー: 効果的なサムネイルの作成',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: '자주 묻는 질문',
91
- faq: faqData,
92
- bibliographyTitle: '참고 자료 및 문서',
93
- bibliography: [
94
- {
95
- name: 'YouTube 고객센터: 맞춤 동영상 썸네일 만들기',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube 크리에이터 아카데미: 효과적인 썸네일 제작법',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Veelgestelde Vragen',
91
- faq: faqData,
92
- bibliographyTitle: 'Documentatie en Referenties',
93
- bibliography: [
94
- {
95
- name: 'YouTube Help: Een aangepaste miniatuurafbeelding toevoegen',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Hoe maak je effectieve thumbnails',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Często zadawane pytania',
91
- faq: faqData,
92
- bibliographyTitle: 'Dokumentacja i źródła',
93
- bibliography: [
94
- {
95
- name: 'Pomoc YouTube: Dodawanie niestandardowej miniatury filmu',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Jak tworzyć skuteczne miniaturki',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Perguntas Frequentes',
91
- faq: faqData,
92
- bibliographyTitle: 'Documentação e Referências',
93
- bibliography: [
94
- {
95
- name: 'Ajuda do YouTube: Adicionar uma imagem em miniatura personalizada',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Como criar miniaturas eficazes',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Часто задаваемые вопросы',
91
- faq: faqData,
92
- bibliographyTitle: 'Документация и источники',
93
- bibliography: [
94
- {
95
- name: 'Справка YouTube: Как добавить персонализированный значок видео',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Как создавать эффектные значки',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Vanliga frågor',
91
- faq: faqData,
92
- bibliographyTitle: 'Dokumentation och referenser',
93
- bibliography: [
94
- {
95
- name: 'YouTube-hjälp: Lägg till en anpassad videominiatyr',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Så skapar du effektiva miniatyrer',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: 'Sıkça Sorulan Sorular',
91
- faq: faqData,
92
- bibliographyTitle: 'Dökümantasyon ve Referanslar',
93
- bibliography: [
94
- {
95
- name: 'YouTube Yardımı: Özel video küçük resmi ekleme',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube Creator Academy: Etkili küçük resimler nasıl oluşturulur',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { YoutubeThumbnailUI } from '../ui';
@@ -87,23 +88,8 @@ export const content: ToolLocaleContent<YoutubeThumbnailUI> = {
87
88
  slug,
88
89
  title,
89
90
  description,
90
- faqTitle: '常见问题',
91
- faq: faqData,
92
- bibliographyTitle: '文档与参考资料',
93
- bibliography: [
94
- {
95
- name: 'YouTube 帮助:添加自定义视频缩略图',
96
- url: 'https://support.google.com/youtube/answer/72431',
97
- },
98
- {
99
- name: 'YouTube 创作者学院:如何制作高效的缩略图',
100
- url: 'https://creatoracademy.youtube.com/',
101
- },
102
- {
103
- name: 'Google Developers: YouTube Data API — Thumbnails',
104
- url: 'https://developers.google.com/youtube/v3/docs/thumbnails',
105
- },
106
- ],
91
+ faq: faqData,
92
+ bibliography,
107
93
  howTo: howToData,
108
94
  schemas: [faqSchema, howToSchema, appSchema],
109
95
  seo: [
@@ -11,4 +11,5 @@ const { locale = 'es' } = Astro.props;
11
11
  const content = await youtubeThumbnail.i18n[locale]?.();
12
12
  if (!content) return null;
13
13
  ---
14
- <SEORenderer content={{ locale: locale as string, sections: content.seo }} />
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -22,7 +22,7 @@
22
22
  gap: 2rem;
23
23
  }
24
24
 
25
- :global(.theme-dark) .ytx-root {
25
+ .theme-dark .ytx-root {
26
26
  --bg: #0f172a;
27
27
  --bg-muted: #020617;
28
28
  --bg-img: #1e293b;
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { youtubeThumbnailPreviewer } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await youtubeThumbnailPreviewer.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,16 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'YouTube Help: Create custom video thumbnails',
6
+ url: 'https://support.google.com/youtube/answer/141805',
7
+ },
8
+ {
9
+ name: 'Nielsen Norman Group: Visual Processing and UX Design',
10
+ url: 'https://www.nngroup.com/articles/visual-processing/',
11
+ },
12
+ {
13
+ name: 'Derral Eves: The YouTube Formula (Thumbnail Strategy)',
14
+ url: 'https://derraleves.com/the-youtube-formula/',
15
+ },
16
+ ];