@jjlmoya/utils-converters 1.24.0 → 1.26.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 (134) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/de.ts +1 -1
  3. package/src/category/i18n/en.ts +1 -1
  4. package/src/category/i18n/fr.ts +1 -1
  5. package/src/category/i18n/id.ts +1 -1
  6. package/src/category/i18n/it.ts +1 -1
  7. package/src/category/i18n/nl.ts +1 -1
  8. package/src/category/i18n/pl.ts +1 -1
  9. package/src/category/i18n/pt.ts +1 -1
  10. package/src/category/i18n/sv.ts +1 -1
  11. package/src/entries.ts +6 -0
  12. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  13. package/src/tests/category_seo_quality.test.ts +74 -0
  14. package/src/tests/faq_count.test.ts +1 -1
  15. package/src/tests/no_h1_in_components.test.ts +1 -1
  16. package/src/tests/seo_parity.test.ts +2 -2
  17. package/src/tests/seo_wellformed_export.test.ts +65 -0
  18. package/src/tests/tool_validation.test.ts +15 -15
  19. package/src/tool/avifAJpg/i18n/en.ts +164 -164
  20. package/src/tool/avifAJpg/i18n/es.ts +164 -164
  21. package/src/tool/avifAJpg/i18n/fr.ts +164 -164
  22. package/src/tool/avifAJpg/i18n/ja.ts +166 -166
  23. package/src/tool/avifAJpg/i18n/ko.ts +166 -166
  24. package/src/tool/avifAJpg/i18n/zh.ts +166 -166
  25. package/src/tool/avifAJpg/seo.astro +15 -15
  26. package/src/tool/avifAPng/i18n/en.ts +164 -164
  27. package/src/tool/avifAPng/i18n/es.ts +164 -164
  28. package/src/tool/avifAPng/i18n/fr.ts +164 -164
  29. package/src/tool/avifAPng/i18n/ja.ts +166 -166
  30. package/src/tool/avifAPng/i18n/ko.ts +166 -166
  31. package/src/tool/avifAPng/i18n/zh.ts +166 -166
  32. package/src/tool/avifAPng/seo.astro +15 -15
  33. package/src/tool/avifAWebp/i18n/en.ts +164 -164
  34. package/src/tool/avifAWebp/i18n/es.ts +164 -164
  35. package/src/tool/avifAWebp/i18n/fr.ts +164 -164
  36. package/src/tool/avifAWebp/i18n/ja.ts +166 -166
  37. package/src/tool/avifAWebp/i18n/ko.ts +166 -166
  38. package/src/tool/avifAWebp/i18n/zh.ts +166 -166
  39. package/src/tool/avifAWebp/seo.astro +15 -15
  40. package/src/tool/bmpAJpg/i18n/en.ts +164 -164
  41. package/src/tool/bmpAJpg/i18n/es.ts +164 -164
  42. package/src/tool/bmpAJpg/i18n/fr.ts +164 -164
  43. package/src/tool/bmpAJpg/i18n/ja.ts +166 -166
  44. package/src/tool/bmpAJpg/i18n/ko.ts +166 -166
  45. package/src/tool/bmpAJpg/i18n/zh.ts +166 -166
  46. package/src/tool/bmpAJpg/seo.astro +15 -15
  47. package/src/tool/bmpAPng/i18n/en.ts +164 -164
  48. package/src/tool/bmpAPng/i18n/es.ts +164 -164
  49. package/src/tool/bmpAPng/i18n/fr.ts +164 -164
  50. package/src/tool/bmpAPng/i18n/ja.ts +165 -165
  51. package/src/tool/bmpAPng/i18n/ko.ts +165 -165
  52. package/src/tool/bmpAPng/i18n/zh.ts +165 -165
  53. package/src/tool/bmpAPng/seo.astro +15 -15
  54. package/src/tool/bmpAWebp/i18n/en.ts +164 -164
  55. package/src/tool/bmpAWebp/i18n/es.ts +164 -164
  56. package/src/tool/bmpAWebp/i18n/fr.ts +164 -164
  57. package/src/tool/bmpAWebp/i18n/ja.ts +166 -166
  58. package/src/tool/bmpAWebp/i18n/ko.ts +166 -166
  59. package/src/tool/bmpAWebp/i18n/zh.ts +166 -166
  60. package/src/tool/bmpAWebp/seo.astro +15 -15
  61. package/src/tool/gifAJpg/i18n/en.ts +164 -164
  62. package/src/tool/gifAJpg/i18n/es.ts +164 -164
  63. package/src/tool/gifAJpg/i18n/fr.ts +164 -164
  64. package/src/tool/gifAJpg/i18n/ja.ts +166 -166
  65. package/src/tool/gifAJpg/i18n/ko.ts +166 -166
  66. package/src/tool/gifAJpg/i18n/zh.ts +166 -166
  67. package/src/tool/gifAJpg/seo.astro +15 -15
  68. package/src/tool/gifAPng/i18n/en.ts +164 -164
  69. package/src/tool/gifAPng/i18n/es.ts +164 -164
  70. package/src/tool/gifAPng/i18n/fr.ts +164 -164
  71. package/src/tool/gifAPng/i18n/ja.ts +166 -166
  72. package/src/tool/gifAPng/i18n/ko.ts +166 -166
  73. package/src/tool/gifAPng/i18n/zh.ts +166 -166
  74. package/src/tool/gifAPng/seo.astro +15 -15
  75. package/src/tool/gifAWebp/i18n/en.ts +164 -164
  76. package/src/tool/gifAWebp/i18n/es.ts +164 -164
  77. package/src/tool/gifAWebp/i18n/fr.ts +164 -164
  78. package/src/tool/gifAWebp/i18n/ja.ts +166 -166
  79. package/src/tool/gifAWebp/i18n/ko.ts +166 -166
  80. package/src/tool/gifAWebp/i18n/zh.ts +166 -166
  81. package/src/tool/gifAWebp/seo.astro +15 -15
  82. package/src/tool/imagenBase64/i18n/en.ts +154 -154
  83. package/src/tool/imagenBase64/i18n/es.ts +154 -154
  84. package/src/tool/imagenBase64/i18n/fr.ts +154 -154
  85. package/src/tool/imagenBase64/seo.astro +15 -15
  86. package/src/tool/jpgAIco/seo.astro +15 -15
  87. package/src/tool/jpgAPng/i18n/en.ts +164 -164
  88. package/src/tool/jpgAPng/i18n/es.ts +164 -164
  89. package/src/tool/jpgAPng/i18n/fr.ts +164 -164
  90. package/src/tool/jpgAPng/i18n/ja.ts +166 -166
  91. package/src/tool/jpgAPng/i18n/ko.ts +166 -166
  92. package/src/tool/jpgAPng/i18n/zh.ts +166 -166
  93. package/src/tool/jpgAPng/seo.astro +15 -15
  94. package/src/tool/jpgAWebp/i18n/en.ts +164 -164
  95. package/src/tool/jpgAWebp/i18n/es.ts +164 -164
  96. package/src/tool/jpgAWebp/i18n/fr.ts +164 -164
  97. package/src/tool/jpgAWebp/seo.astro +15 -15
  98. package/src/tool/pngAIco/seo.astro +15 -15
  99. package/src/tool/pngAJpg/i18n/de.ts +21 -21
  100. package/src/tool/pngAJpg/i18n/es.ts +177 -177
  101. package/src/tool/pngAJpg/i18n/fr.ts +137 -137
  102. package/src/tool/pngAJpg/i18n/id.ts +89 -89
  103. package/src/tool/pngAJpg/i18n/it.ts +89 -89
  104. package/src/tool/pngAJpg/i18n/ko.ts +177 -177
  105. package/src/tool/pngAJpg/i18n/nl.ts +20 -20
  106. package/src/tool/pngAJpg/i18n/pl.ts +89 -89
  107. package/src/tool/pngAJpg/i18n/pt.ts +89 -89
  108. package/src/tool/pngAJpg/i18n/ru.ts +177 -177
  109. package/src/tool/pngAJpg/i18n/sv.ts +89 -89
  110. package/src/tool/pngAJpg/i18n/tr.ts +89 -89
  111. package/src/tool/pngAJpg/seo.astro +15 -15
  112. package/src/tool/pngAWebp/i18n/en.ts +164 -164
  113. package/src/tool/pngAWebp/i18n/es.ts +164 -164
  114. package/src/tool/pngAWebp/i18n/fr.ts +164 -164
  115. package/src/tool/pngAWebp/seo.astro +15 -15
  116. package/src/tool/svgAJpg/i18n/fr.ts +164 -164
  117. package/src/tool/svgAJpg/seo.astro +15 -15
  118. package/src/tool/svgAPng/i18n/fr.ts +164 -164
  119. package/src/tool/svgAPng/seo.astro +15 -15
  120. package/src/tool/webpAIco/seo.astro +15 -15
  121. package/src/tool/webpAJpg/seo.astro +15 -15
  122. package/src/tool/webpAPng/bibliography.ts +13 -13
  123. package/src/tool/webpAPng/i18n/de.ts +166 -166
  124. package/src/tool/webpAPng/i18n/es.ts +171 -171
  125. package/src/tool/webpAPng/i18n/fr.ts +166 -166
  126. package/src/tool/webpAPng/i18n/id.ts +166 -166
  127. package/src/tool/webpAPng/i18n/it.ts +166 -166
  128. package/src/tool/webpAPng/i18n/nl.ts +166 -166
  129. package/src/tool/webpAPng/i18n/pl.ts +166 -166
  130. package/src/tool/webpAPng/i18n/pt.ts +166 -166
  131. package/src/tool/webpAPng/i18n/ru.ts +166 -166
  132. package/src/tool/webpAPng/i18n/sv.ts +166 -166
  133. package/src/tool/webpAPng/i18n/tr.ts +167 -167
  134. package/src/tool/webpAPng/seo.astro +15 -15
@@ -1,168 +1,168 @@
1
1
  import { bibliography } from '../bibliography';
2
- import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
3
3
  import { generateSchemas } from '../../../shared/logic/schemas';
4
- import type { GifAWebpLocaleContent } from '../index';
5
-
6
- const slug = 'gif-to-webp-converter';
7
- const title = 'Convert GIF to Static WebP';
8
- const description =
9
- 'Convert animated GIFs to static WebP. Preserves transparency. No server. Processed locally in your browser. Free.';
10
-
11
- const ui: ImageConverterUI = {
12
- dragText: 'Drag GIF files...',
13
- convertText: 'To convert them to WebP instantly',
14
- selectFiles: 'Select files',
15
- processedFiles: 'Processed files',
16
- downloadAll: 'Download All (.zip)',
4
+ import type { GifAWebpLocaleContent } from '../index';
5
+
6
+ const slug = 'gif-to-webp-converter';
7
+ const title = 'Convert GIF to Static WebP';
8
+ const description =
9
+ 'Convert animated GIFs to static WebP. Preserves transparency. No server. Processed locally in your browser. Free.';
10
+
11
+ const ui: ImageConverterUI = {
12
+ dragText: 'Drag GIF files...',
13
+ convertText: 'To convert them to WebP instantly',
14
+ selectFiles: 'Select files',
15
+ processedFiles: 'Processed files',
16
+ downloadAll: 'Download All (.zip)',
17
17
  pending: 'Pending',
18
- bibliographyTitle: 'Bibliographic References',
19
- faqTitle: 'Frequently Asked Questions',
20
- };
21
-
22
- const faq: GifAWebpLocaleContent['faq'] = [
23
- {
24
- question: 'Why freeze an animated file to modern static WebP format?',
25
- answer:
26
- 'WebP is Google\'s compression standard; it is remarkably lightweight and retains transparency cleanly. Moving from GIF to WebP eliminates the heavy animation and achieves an abysmal gain in web speed.',
27
- },
28
- {
29
- question: 'Will the original avatar remain transparent?',
30
- answer:
31
- 'Yes, unlike JPEG, the WebP container respects the complex Alpha channel. All its silhouettes will remain perfect as they were natively.',
32
- },
33
- {
34
- question: 'Where will files be uploaded to?',
35
- answer:
36
- 'There is no upload. Processing is performed entirely by the browser\'s Javascript on your PC, with zero remote sending.',
37
- },
38
- ];
39
-
40
- const howTo: GifAWebpLocaleContent['howTo'] = [
41
- {
42
- name: 'Launch an animated avalanche',
43
- text: 'Move and drop dozens of memes to the delimited zone without remote connection.',
44
- },
45
- {
46
- name: 'Witness the great invisible change',
47
- text: 'Watch a progressive indicator change at each millisecond as the local canvas decoder generates the output.',
48
- },
49
- {
50
- name: 'Compress or save your clean resulting arsenal',
51
- text: 'Take the extracted files individually or press Download Zip to package everything.',
52
- },
53
- ];
54
-
55
- const seo: GifAWebpLocaleContent['seo'] = [
56
- {
57
- type: 'title',
58
- text: 'GIF to WebP Converter: The Modern Replacement for Heavy Animations',
59
- level: 2,
60
- },
61
- {
62
- type: 'paragraph',
63
- html: 'Animated GIFs are the dinosaurs of modern web content: they consume disproportionate bandwidth, degrade the PageSpeed of any page, and are responsible for a significant percentage of total weight on thousands of websites. A typical 5 MB animated GIF can become a WebP animation under 1 MB with the same visual quality. WebP is the modern successor Google specifically designed to replace GIF on the web.',
64
- },
65
- {
66
- type: 'title',
67
- text: 'GIF vs WebP: the gap between the past and present of the web',
68
- level: 3,
69
- },
70
- {
71
- type: 'paragraph',
72
- html: 'GIF is a 1987 format not originally designed for animations - that feature arrived as a later hack. Its 256-color palette, inefficient compression, and inability to handle audio make it an obsolete format. WebP, developed by Google in 2010, offers superior compression both lossy and lossless, native animation support, and full alpha channel.',
73
- },
74
- {
75
- type: 'paragraph',
76
- html: 'For a web developer, replacing GIFs with WebP on pages can mean a 10-30 point improvement in Google PageSpeed score. Less page weight means better Core Web Vitals, better SEO rankings, and lower bandwidth costs on servers. It is not just an aesthetic improvement - it is a technical architecture decision.',
77
- },
78
- {
79
- type: 'title',
80
- text: 'Architecture Comparison: Local vs Cloud',
81
- level: 3,
82
- },
83
- {
84
- type: 'comparative',
85
- items: [
86
- {
87
- title: 'Cloud Converters',
88
- description: 'Platforms that process your GIFs on remote servers.',
89
- icon: 'mdi:cloud-upload',
90
- pointIcon: 'mdi:close-circle-outline',
91
- points: [
92
- 'Your animations travel over the internet to third-party servers',
93
- 'Waiting time due to network latency on upload and download',
94
- 'Size limits (large GIFs are often rejected)',
95
- 'Risk of file retention and analysis',
96
- ],
97
- },
98
- {
99
- title: 'Our Local Architecture',
100
- description: 'Direct processing on your hardware using Vanilla JS technology.',
101
- icon: 'mdi:laptop-mac',
102
- highlight: true,
103
- points: [
104
- 'The GIF never leaves your device',
105
- 'Instant conversion with no network wait',
106
- 'No size limits: process GIFs of any weight',
107
- 'Total privacy: 0 bytes sent externally',
108
- ],
109
- },
110
- ],
111
- },
112
- {
113
- type: 'title',
114
- text: 'How the local GIF to WebP conversion works',
115
- level: 3,
116
- },
117
- {
118
- type: 'paragraph',
119
- html: 'The local conversion uses the HTML5 Canvas API. The GIF is loaded as a native browser Image element. By drawing it onto a canvas, the graphics engine captures the first animation frame with all its transparency information. The <code>toDataURL(\'image/webp\')</code> method exports the frame as WebP directly in RAM.',
120
- },
121
- {
122
- type: 'paragraph',
123
- html: 'WebP supports full alpha channel, so GIF transparencies are preserved in the resulting WebP without needing to add a background. WebP compression algorithms are significantly more efficient than GIF or PNG, which explains the drastic file size reduction of the final output.',
124
- },
125
- {
126
- type: 'tip',
127
- title: 'Guaranteed PageSpeed improvement',
128
- html: 'A 5 MB animated GIF can become a WebP under 1 MB. If you have GIFs on your website pages, replacing them with WebP can immediately improve your Largest Contentful Paint (LCP) and Total Blocking Time (TBT), directly impacting SEO rankings.',
129
- },
130
- {
131
- type: 'title',
132
- text: 'Use cases and compatibility of the resulting WebP',
133
- level: 3,
134
- },
135
- {
136
- type: 'list',
137
- icon: 'mdi:check-circle',
138
- items: [
139
- 'Replacing GIFs on web pages to improve PageSpeed scores.',
140
- 'Optimized avatars and stickers for Discord, Slack and modern platforms.',
141
- 'Banners and visuals for digital marketing campaigns.',
142
- 'Animations in progressive web applications (PWA).',
143
- 'Compatible with Chrome, Edge, Firefox, Safari 14+ and all modern browsers.',
144
- ],
145
- },
146
- {
147
- type: 'title',
148
- text: 'Conclusion: migrate your GIFs to the 21st century',
149
- level: 3,
150
- },
151
- {
152
- type: 'paragraph',
153
- html: 'Every GIF on your website is a missed optimization opportunity. Our tool converts GIFs to WebP instantly, privately, and without limits, directly in your browser. The result: files up to 5 times smaller, perfect transparency, and compatibility with all modern browsers.',
154
- },
155
- ];
156
-
18
+ bibliographyTitle: 'Bibliographic References',
19
+ faqTitle: 'Frequently Asked Questions',
20
+ };
21
+
22
+ const faq: GifAWebpLocaleContent['faq'] = [
23
+ {
24
+ question: 'Why freeze an animated file to modern static WebP format?',
25
+ answer:
26
+ 'WebP is Google\'s compression standard; it is remarkably lightweight and retains transparency cleanly. Moving from GIF to WebP eliminates the heavy animation and achieves an abysmal gain in web speed.',
27
+ },
28
+ {
29
+ question: 'Will the original avatar remain transparent?',
30
+ answer:
31
+ 'Yes, unlike JPEG, the WebP container respects the complex Alpha channel. All its silhouettes will remain perfect as they were natively.',
32
+ },
33
+ {
34
+ question: 'Where will files be uploaded to?',
35
+ answer:
36
+ 'There is no upload. Processing is performed entirely by the browser\'s Javascript on your PC, with zero remote sending.',
37
+ },
38
+ ];
39
+
40
+ const howTo: GifAWebpLocaleContent['howTo'] = [
41
+ {
42
+ name: 'Launch an animated avalanche',
43
+ text: 'Move and drop dozens of memes to the delimited zone without remote connection.',
44
+ },
45
+ {
46
+ name: 'Witness the great invisible change',
47
+ text: 'Watch a progressive indicator change at each millisecond as the local canvas decoder generates the output.',
48
+ },
49
+ {
50
+ name: 'Compress or save your clean resulting arsenal',
51
+ text: 'Take the extracted files individually or press Download Zip to package everything.',
52
+ },
53
+ ];
54
+
55
+ const seo: GifAWebpLocaleContent['seo'] = [
56
+ {
57
+ type: 'title',
58
+ text: 'GIF to WebP Converter: The Modern Replacement for Heavy Animations',
59
+ level: 2,
60
+ },
61
+ {
62
+ type: 'paragraph',
63
+ html: 'Animated GIFs are the dinosaurs of modern web content: they consume disproportionate bandwidth, degrade the PageSpeed of any page, and are responsible for a significant percentage of total weight on thousands of websites. A typical 5 MB animated GIF can become a WebP animation under 1 MB with the same visual quality. WebP is the modern successor Google specifically designed to replace GIF on the web.',
64
+ },
65
+ {
66
+ type: 'title',
67
+ text: 'GIF vs WebP: the gap between the past and present of the web',
68
+ level: 3,
69
+ },
70
+ {
71
+ type: 'paragraph',
72
+ html: 'GIF is a 1987 format not originally designed for animations - that feature arrived as a later hack. Its 256-color palette, inefficient compression, and inability to handle audio make it an obsolete format. WebP, developed by Google in 2010, offers superior compression both lossy and lossless, native animation support, and full alpha channel.',
73
+ },
74
+ {
75
+ type: 'paragraph',
76
+ html: 'For a web developer, replacing GIFs with WebP on pages can mean a 10-30 point improvement in Google PageSpeed score. Less page weight means better Core Web Vitals, better SEO rankings, and lower bandwidth costs on servers. It is not just an aesthetic improvement - it is a technical architecture decision.',
77
+ },
78
+ {
79
+ type: 'title',
80
+ text: 'Architecture Comparison: Local vs Cloud',
81
+ level: 3,
82
+ },
83
+ {
84
+ type: 'comparative',
85
+ items: [
86
+ {
87
+ title: 'Cloud Converters',
88
+ description: 'Platforms that process your GIFs on remote servers.',
89
+ icon: 'mdi:cloud-upload',
90
+ pointIcon: 'mdi:close-circle-outline',
91
+ points: [
92
+ 'Your animations travel over the internet to third-party servers',
93
+ 'Waiting time due to network latency on upload and download',
94
+ 'Size limits (large GIFs are often rejected)',
95
+ 'Risk of file retention and analysis',
96
+ ],
97
+ },
98
+ {
99
+ title: 'Our Local Architecture',
100
+ description: 'Direct processing on your hardware using Vanilla JS technology.',
101
+ icon: 'mdi:laptop-mac',
102
+ highlight: true,
103
+ points: [
104
+ 'The GIF never leaves your device',
105
+ 'Instant conversion with no network wait',
106
+ 'No size limits: process GIFs of any weight',
107
+ 'Total privacy: 0 bytes sent externally',
108
+ ],
109
+ },
110
+ ],
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: 'How the local GIF to WebP conversion works',
115
+ level: 3,
116
+ },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'The local conversion uses the HTML5 Canvas API. The GIF is loaded as a native browser Image element. By drawing it onto a canvas, the graphics engine captures the first animation frame with all its transparency information. The <code>toDataURL(\'image/webp\')</code> method exports the frame as WebP directly in RAM.',
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: 'WebP supports full alpha channel, so GIF transparencies are preserved in the resulting WebP without needing to add a background. WebP compression algorithms are significantly more efficient than GIF or PNG, which explains the drastic file size reduction of the final output.',
124
+ },
125
+ {
126
+ type: 'tip',
127
+ title: 'Guaranteed PageSpeed improvement',
128
+ html: 'A 5 MB animated GIF can become a WebP under 1 MB. If you have GIFs on your website pages, replacing them with WebP can immediately improve your Largest Contentful Paint (LCP) and Total Blocking Time (TBT), directly impacting SEO rankings.',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Use cases and compatibility of the resulting WebP',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ icon: 'mdi:check-circle',
138
+ items: [
139
+ 'Replacing GIFs on web pages to improve PageSpeed scores.',
140
+ 'Optimized avatars and stickers for Discord, Slack and modern platforms.',
141
+ 'Banners and visuals for digital marketing campaigns.',
142
+ 'Animations in progressive web applications (PWA).',
143
+ 'Compatible with Chrome, Edge, Firefox, Safari 14+ and all modern browsers.',
144
+ ],
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Conclusion: migrate your GIFs to the 21st century',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'Every GIF on your website is a missed optimization opportunity. Our tool converts GIFs to WebP instantly, privately, and without limits, directly in your browser. The result: files up to 5 times smaller, perfect transparency, and compatibility with all modern browsers.',
154
+ },
155
+ ];
157
156
 
158
- export const content: GifAWebpLocaleContent = {
159
- slug,
160
- title,
161
- description,
162
- ui,
163
- seo,
164
- faq,
165
- bibliography,
166
- howTo,
167
- schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
168
- };
157
+
158
+ export const content: GifAWebpLocaleContent = {
159
+ slug,
160
+ title,
161
+ description,
162
+ ui,
163
+ seo,
164
+ faq,
165
+ bibliography,
166
+ howTo,
167
+ schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
168
+ };