@jjlmoya/utils-developer 1.28.0 → 1.29.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 (455) hide show
  1. package/package.json +1 -1
  2. package/src/entries.ts +4 -1
  3. package/src/tests/i18n_coverage.test.ts +5 -2
  4. package/src/tests/locale_completeness.test.ts +1 -1
  5. package/src/tests/qa-test-helpers.ts +32 -0
  6. package/src/tests/qa_bibliography_links.test.ts +43 -0
  7. package/src/tests/qa_claim_evidence.test.ts +69 -0
  8. package/src/tests/qa_logic_reference_coverage.test.ts +46 -0
  9. package/src/tests/qa_runtime_i18n.test.ts +115 -0
  10. package/src/tests/tool_validation.test.ts +1 -1
  11. package/src/tool/aspectRatio/bibliography.astro +2 -10
  12. package/src/tool/aspectRatio/bibliography.ts +7 -0
  13. package/src/tool/aspectRatio/i18n/de.ts +2 -14
  14. package/src/tool/aspectRatio/i18n/en.ts +2 -14
  15. package/src/tool/aspectRatio/i18n/es.ts +2 -14
  16. package/src/tool/aspectRatio/i18n/fr.ts +2 -14
  17. package/src/tool/aspectRatio/i18n/id.ts +2 -14
  18. package/src/tool/aspectRatio/i18n/it.ts +2 -14
  19. package/src/tool/aspectRatio/i18n/ja.ts +2 -14
  20. package/src/tool/aspectRatio/i18n/ko.ts +2 -14
  21. package/src/tool/aspectRatio/i18n/nl.ts +2 -14
  22. package/src/tool/aspectRatio/i18n/pl.ts +2 -14
  23. package/src/tool/aspectRatio/i18n/pt.ts +2 -14
  24. package/src/tool/aspectRatio/i18n/ru.ts +2 -14
  25. package/src/tool/aspectRatio/i18n/sv.ts +2 -14
  26. package/src/tool/aspectRatio/i18n/tr.ts +2 -14
  27. package/src/tool/aspectRatio/i18n/zh.ts +2 -14
  28. package/src/tool/calculadoraTiempoDatos/bibliography.astro +2 -10
  29. package/src/tool/calculadoraTiempoDatos/bibliography.ts +8 -0
  30. package/src/tool/calculadoraTiempoDatos/component.astro +6 -2
  31. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +2 -6
  32. package/src/tool/calculadoraTiempoDatos/i18n/en.ts +2 -6
  33. package/src/tool/calculadoraTiempoDatos/i18n/es.ts +2 -6
  34. package/src/tool/calculadoraTiempoDatos/i18n/fr.ts +2 -6
  35. package/src/tool/calculadoraTiempoDatos/i18n/id.ts +2 -6
  36. package/src/tool/calculadoraTiempoDatos/i18n/it.ts +2 -6
  37. package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +2 -6
  38. package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +2 -6
  39. package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +2 -6
  40. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +2 -6
  41. package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +2 -6
  42. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +2 -6
  43. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +2 -6
  44. package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +2 -6
  45. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +2 -6
  46. package/src/tool/colorConverter/bibliography.astro +2 -10
  47. package/src/tool/colorConverter/bibliography.ts +7 -0
  48. package/src/tool/colorConverter/i18n/de.ts +2 -5
  49. package/src/tool/colorConverter/i18n/en.ts +5 -8
  50. package/src/tool/colorConverter/i18n/es.ts +4 -7
  51. package/src/tool/colorConverter/i18n/fr.ts +2 -5
  52. package/src/tool/colorConverter/i18n/id.ts +2 -5
  53. package/src/tool/colorConverter/i18n/it.ts +2 -5
  54. package/src/tool/colorConverter/i18n/ja.ts +2 -5
  55. package/src/tool/colorConverter/i18n/ko.ts +2 -5
  56. package/src/tool/colorConverter/i18n/nl.ts +2 -5
  57. package/src/tool/colorConverter/i18n/pl.ts +2 -5
  58. package/src/tool/colorConverter/i18n/pt.ts +2 -5
  59. package/src/tool/colorConverter/i18n/ru.ts +2 -5
  60. package/src/tool/colorConverter/i18n/sv.ts +2 -5
  61. package/src/tool/colorConverter/i18n/tr.ts +2 -5
  62. package/src/tool/colorConverter/i18n/zh.ts +2 -5
  63. package/src/tool/conversorExcelCsvHtml/bibliography.astro +2 -10
  64. package/src/tool/conversorExcelCsvHtml/bibliography.ts +8 -0
  65. package/src/tool/conversorExcelCsvHtml/component.astro +4 -3
  66. package/src/tool/conversorExcelCsvHtml/i18n/de.ts +2 -6
  67. package/src/tool/conversorExcelCsvHtml/i18n/en.ts +2 -6
  68. package/src/tool/conversorExcelCsvHtml/i18n/es.ts +2 -6
  69. package/src/tool/conversorExcelCsvHtml/i18n/fr.ts +2 -6
  70. package/src/tool/conversorExcelCsvHtml/i18n/id.ts +2 -6
  71. package/src/tool/conversorExcelCsvHtml/i18n/it.ts +2 -6
  72. package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +2 -6
  73. package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +2 -6
  74. package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +2 -6
  75. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +2 -6
  76. package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +2 -6
  77. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +2 -6
  78. package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +2 -6
  79. package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +2 -6
  80. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +2 -6
  81. package/src/tool/cronGenerator/bibliography.astro +2 -10
  82. package/src/tool/cronGenerator/bibliography.ts +6 -0
  83. package/src/tool/cronGenerator/component.astro +5 -1
  84. package/src/tool/cronGenerator/i18n/de.ts +2 -10
  85. package/src/tool/cronGenerator/i18n/en.ts +2 -10
  86. package/src/tool/cronGenerator/i18n/es.ts +2 -10
  87. package/src/tool/cronGenerator/i18n/fr.ts +2 -10
  88. package/src/tool/cronGenerator/i18n/id.ts +2 -10
  89. package/src/tool/cronGenerator/i18n/it.ts +2 -10
  90. package/src/tool/cronGenerator/i18n/ja.ts +2 -10
  91. package/src/tool/cronGenerator/i18n/ko.ts +2 -10
  92. package/src/tool/cronGenerator/i18n/nl.ts +2 -10
  93. package/src/tool/cronGenerator/i18n/pl.ts +2 -10
  94. package/src/tool/cronGenerator/i18n/pt.ts +2 -10
  95. package/src/tool/cronGenerator/i18n/ru.ts +2 -10
  96. package/src/tool/cronGenerator/i18n/sv.ts +2 -10
  97. package/src/tool/cronGenerator/i18n/tr.ts +2 -10
  98. package/src/tool/cronGenerator/i18n/zh.ts +2 -10
  99. package/src/tool/cssBoxShadowGenerator/component.astro +2 -1
  100. package/src/tool/cssBoxShadowGenerator/logic.test.ts +28 -0
  101. package/src/tool/cssSpecificityCalculator/bibliography.astro +2 -10
  102. package/src/tool/cssSpecificityCalculator/bibliography.ts +6 -0
  103. package/src/tool/cssSpecificityCalculator/i18n/de.ts +2 -10
  104. package/src/tool/cssSpecificityCalculator/i18n/en.ts +2 -10
  105. package/src/tool/cssSpecificityCalculator/i18n/es.ts +2 -10
  106. package/src/tool/cssSpecificityCalculator/i18n/fr.ts +2 -10
  107. package/src/tool/cssSpecificityCalculator/i18n/id.ts +2 -10
  108. package/src/tool/cssSpecificityCalculator/i18n/it.ts +2 -10
  109. package/src/tool/cssSpecificityCalculator/i18n/ja.ts +2 -10
  110. package/src/tool/cssSpecificityCalculator/i18n/ko.ts +2 -10
  111. package/src/tool/cssSpecificityCalculator/i18n/nl.ts +2 -10
  112. package/src/tool/cssSpecificityCalculator/i18n/pl.ts +2 -10
  113. package/src/tool/cssSpecificityCalculator/i18n/pt.ts +2 -10
  114. package/src/tool/cssSpecificityCalculator/i18n/ru.ts +2 -10
  115. package/src/tool/cssSpecificityCalculator/i18n/sv.ts +2 -10
  116. package/src/tool/cssSpecificityCalculator/i18n/tr.ts +2 -10
  117. package/src/tool/cssSpecificityCalculator/i18n/zh.ts +2 -10
  118. package/src/tool/cssToInlineConverter/bibliography.astro +2 -10
  119. package/src/tool/cssToInlineConverter/bibliography.ts +7 -0
  120. package/src/tool/cssToInlineConverter/i18n/de.ts +2 -14
  121. package/src/tool/cssToInlineConverter/i18n/en.ts +4 -16
  122. package/src/tool/cssToInlineConverter/i18n/es.ts +5 -17
  123. package/src/tool/cssToInlineConverter/i18n/fr.ts +2 -14
  124. package/src/tool/cssToInlineConverter/i18n/id.ts +2 -14
  125. package/src/tool/cssToInlineConverter/i18n/it.ts +2 -14
  126. package/src/tool/cssToInlineConverter/i18n/ja.ts +2 -14
  127. package/src/tool/cssToInlineConverter/i18n/ko.ts +2 -14
  128. package/src/tool/cssToInlineConverter/i18n/nl.ts +2 -14
  129. package/src/tool/cssToInlineConverter/i18n/pl.ts +2 -14
  130. package/src/tool/cssToInlineConverter/i18n/pt.ts +2 -14
  131. package/src/tool/cssToInlineConverter/i18n/ru.ts +2 -14
  132. package/src/tool/cssToInlineConverter/i18n/sv.ts +2 -14
  133. package/src/tool/cssToInlineConverter/i18n/tr.ts +2 -14
  134. package/src/tool/cssToInlineConverter/i18n/zh.ts +2 -14
  135. package/src/tool/duplicateCssRemover/bibliography.astro +2 -10
  136. package/src/tool/duplicateCssRemover/bibliography.ts +7 -0
  137. package/src/tool/duplicateCssRemover/i18n/de.ts +2 -14
  138. package/src/tool/duplicateCssRemover/i18n/en.ts +4 -16
  139. package/src/tool/duplicateCssRemover/i18n/es.ts +4 -16
  140. package/src/tool/duplicateCssRemover/i18n/fr.ts +2 -14
  141. package/src/tool/duplicateCssRemover/i18n/id.ts +2 -14
  142. package/src/tool/duplicateCssRemover/i18n/it.ts +2 -14
  143. package/src/tool/duplicateCssRemover/i18n/ja.ts +2 -14
  144. package/src/tool/duplicateCssRemover/i18n/ko.ts +2 -14
  145. package/src/tool/duplicateCssRemover/i18n/nl.ts +2 -14
  146. package/src/tool/duplicateCssRemover/i18n/pl.ts +2 -14
  147. package/src/tool/duplicateCssRemover/i18n/pt.ts +2 -14
  148. package/src/tool/duplicateCssRemover/i18n/ru.ts +2 -14
  149. package/src/tool/duplicateCssRemover/i18n/sv.ts +2 -14
  150. package/src/tool/duplicateCssRemover/i18n/tr.ts +2 -14
  151. package/src/tool/duplicateCssRemover/i18n/zh.ts +2 -14
  152. package/src/tool/generadorSecurityTxt/bibliography.astro +2 -10
  153. package/src/tool/generadorSecurityTxt/bibliography.ts +7 -0
  154. package/src/tool/generadorSecurityTxt/component.astro +1 -2
  155. package/src/tool/generadorSecurityTxt/i18n/de.ts +2 -5
  156. package/src/tool/generadorSecurityTxt/i18n/en.ts +2 -5
  157. package/src/tool/generadorSecurityTxt/i18n/es.ts +2 -5
  158. package/src/tool/generadorSecurityTxt/i18n/fr.ts +2 -5
  159. package/src/tool/generadorSecurityTxt/i18n/id.ts +2 -5
  160. package/src/tool/generadorSecurityTxt/i18n/it.ts +2 -5
  161. package/src/tool/generadorSecurityTxt/i18n/ja.ts +2 -5
  162. package/src/tool/generadorSecurityTxt/i18n/ko.ts +2 -5
  163. package/src/tool/generadorSecurityTxt/i18n/nl.ts +2 -5
  164. package/src/tool/generadorSecurityTxt/i18n/pl.ts +2 -5
  165. package/src/tool/generadorSecurityTxt/i18n/pt.ts +2 -5
  166. package/src/tool/generadorSecurityTxt/i18n/ru.ts +2 -5
  167. package/src/tool/generadorSecurityTxt/i18n/sv.ts +2 -5
  168. package/src/tool/generadorSecurityTxt/i18n/tr.ts +2 -5
  169. package/src/tool/generadorSecurityTxt/i18n/zh.ts +2 -5
  170. package/src/tool/hashGenerator/bibliography.astro +2 -10
  171. package/src/tool/hashGenerator/bibliography.ts +7 -0
  172. package/src/tool/hashGenerator/i18n/de.ts +2 -5
  173. package/src/tool/hashGenerator/i18n/en.ts +2 -5
  174. package/src/tool/hashGenerator/i18n/es.ts +2 -5
  175. package/src/tool/hashGenerator/i18n/fr.ts +2 -5
  176. package/src/tool/hashGenerator/i18n/id.ts +2 -5
  177. package/src/tool/hashGenerator/i18n/it.ts +2 -5
  178. package/src/tool/hashGenerator/i18n/ja.ts +2 -5
  179. package/src/tool/hashGenerator/i18n/ko.ts +2 -5
  180. package/src/tool/hashGenerator/i18n/nl.ts +2 -5
  181. package/src/tool/hashGenerator/i18n/pl.ts +2 -5
  182. package/src/tool/hashGenerator/i18n/pt.ts +2 -5
  183. package/src/tool/hashGenerator/i18n/ru.ts +2 -5
  184. package/src/tool/hashGenerator/i18n/sv.ts +2 -5
  185. package/src/tool/hashGenerator/i18n/tr.ts +2 -5
  186. package/src/tool/hashGenerator/i18n/zh.ts +2 -5
  187. package/src/tool/inspectorCertificadosSsl/bibliography.astro +2 -10
  188. package/src/tool/inspectorCertificadosSsl/bibliography.ts +8 -0
  189. package/src/tool/inspectorCertificadosSsl/component.astro +4 -3
  190. package/src/tool/inspectorCertificadosSsl/i18n/de.ts +2 -6
  191. package/src/tool/inspectorCertificadosSsl/i18n/en.ts +2 -6
  192. package/src/tool/inspectorCertificadosSsl/i18n/es.ts +2 -6
  193. package/src/tool/inspectorCertificadosSsl/i18n/fr.ts +2 -6
  194. package/src/tool/inspectorCertificadosSsl/i18n/id.ts +2 -6
  195. package/src/tool/inspectorCertificadosSsl/i18n/it.ts +2 -6
  196. package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +2 -6
  197. package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +2 -6
  198. package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +2 -6
  199. package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +2 -6
  200. package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +2 -6
  201. package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +2 -6
  202. package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +2 -6
  203. package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +2 -6
  204. package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +2 -6
  205. package/src/tool/jsonFormatter/bibliography.astro +2 -10
  206. package/src/tool/jsonFormatter/bibliography.ts +8 -0
  207. package/src/tool/jsonFormatter/i18n/de.ts +2 -18
  208. package/src/tool/jsonFormatter/i18n/en.ts +2 -18
  209. package/src/tool/jsonFormatter/i18n/es.ts +2 -18
  210. package/src/tool/jsonFormatter/i18n/fr.ts +2 -18
  211. package/src/tool/jsonFormatter/i18n/id.ts +2 -18
  212. package/src/tool/jsonFormatter/i18n/it.ts +2 -18
  213. package/src/tool/jsonFormatter/i18n/ja.ts +2 -18
  214. package/src/tool/jsonFormatter/i18n/ko.ts +2 -18
  215. package/src/tool/jsonFormatter/i18n/nl.ts +2 -18
  216. package/src/tool/jsonFormatter/i18n/pl.ts +2 -18
  217. package/src/tool/jsonFormatter/i18n/pt.ts +2 -18
  218. package/src/tool/jsonFormatter/i18n/ru.ts +2 -18
  219. package/src/tool/jsonFormatter/i18n/sv.ts +2 -18
  220. package/src/tool/jsonFormatter/i18n/tr.ts +2 -18
  221. package/src/tool/jsonFormatter/i18n/zh.ts +2 -18
  222. package/src/tool/jwtDecoder/component.astro +2 -1
  223. package/src/tool/jwtDecoder/logic.test.ts +32 -0
  224. package/src/tool/keycode/bibliography.astro +2 -10
  225. package/src/tool/keycode/bibliography.ts +7 -0
  226. package/src/tool/keycode/i18n/de.ts +2 -14
  227. package/src/tool/keycode/i18n/en.ts +2 -14
  228. package/src/tool/keycode/i18n/es.ts +2 -14
  229. package/src/tool/keycode/i18n/fr.ts +2 -14
  230. package/src/tool/keycode/i18n/id.ts +2 -14
  231. package/src/tool/keycode/i18n/it.ts +2 -14
  232. package/src/tool/keycode/i18n/ja.ts +2 -14
  233. package/src/tool/keycode/i18n/ko.ts +2 -14
  234. package/src/tool/keycode/i18n/nl.ts +2 -14
  235. package/src/tool/keycode/i18n/pl.ts +2 -14
  236. package/src/tool/keycode/i18n/pt.ts +2 -14
  237. package/src/tool/keycode/i18n/ru.ts +2 -14
  238. package/src/tool/keycode/i18n/sv.ts +2 -14
  239. package/src/tool/keycode/i18n/tr.ts +2 -14
  240. package/src/tool/keycode/i18n/zh.ts +2 -14
  241. package/src/tool/llmCostCalculator/bibliography.astro +2 -10
  242. package/src/tool/llmCostCalculator/bibliography.ts +8 -0
  243. package/src/tool/llmCostCalculator/i18n/de.ts +2 -18
  244. package/src/tool/llmCostCalculator/i18n/en.ts +2 -18
  245. package/src/tool/llmCostCalculator/i18n/es.ts +2 -18
  246. package/src/tool/llmCostCalculator/i18n/fr.ts +2 -18
  247. package/src/tool/llmCostCalculator/i18n/id.ts +2 -18
  248. package/src/tool/llmCostCalculator/i18n/it.ts +2 -18
  249. package/src/tool/llmCostCalculator/i18n/ja.ts +2 -18
  250. package/src/tool/llmCostCalculator/i18n/ko.ts +2 -18
  251. package/src/tool/llmCostCalculator/i18n/nl.ts +2 -18
  252. package/src/tool/llmCostCalculator/i18n/pl.ts +2 -18
  253. package/src/tool/llmCostCalculator/i18n/pt.ts +2 -18
  254. package/src/tool/llmCostCalculator/i18n/ru.ts +2 -18
  255. package/src/tool/llmCostCalculator/i18n/sv.ts +2 -18
  256. package/src/tool/llmCostCalculator/i18n/tr.ts +2 -18
  257. package/src/tool/llmCostCalculator/i18n/zh.ts +2 -18
  258. package/src/tool/mobileMockupGenerator/bibliography.astro +2 -10
  259. package/src/tool/mobileMockupGenerator/bibliography.ts +6 -0
  260. package/src/tool/mobileMockupGenerator/i18n/de.ts +2 -4
  261. package/src/tool/mobileMockupGenerator/i18n/en.ts +2 -4
  262. package/src/tool/mobileMockupGenerator/i18n/es.ts +2 -4
  263. package/src/tool/mobileMockupGenerator/i18n/fr.ts +2 -4
  264. package/src/tool/mobileMockupGenerator/i18n/id.ts +2 -4
  265. package/src/tool/mobileMockupGenerator/i18n/it.ts +2 -4
  266. package/src/tool/mobileMockupGenerator/i18n/ja.ts +2 -4
  267. package/src/tool/mobileMockupGenerator/i18n/ko.ts +2 -4
  268. package/src/tool/mobileMockupGenerator/i18n/nl.ts +2 -4
  269. package/src/tool/mobileMockupGenerator/i18n/pl.ts +2 -1
  270. package/src/tool/mobileMockupGenerator/i18n/pt.ts +2 -4
  271. package/src/tool/mobileMockupGenerator/i18n/ru.ts +2 -4
  272. package/src/tool/mobileMockupGenerator/i18n/sv.ts +2 -4
  273. package/src/tool/mobileMockupGenerator/i18n/tr.ts +2 -4
  274. package/src/tool/mobileMockupGenerator/i18n/zh.ts +2 -4
  275. package/src/tool/musicalTypography/bibliography.astro +2 -10
  276. package/src/tool/musicalTypography/bibliography.ts +7 -0
  277. package/src/tool/musicalTypography/i18n/de.ts +2 -14
  278. package/src/tool/musicalTypography/i18n/en.ts +3 -15
  279. package/src/tool/musicalTypography/i18n/es.ts +3 -15
  280. package/src/tool/musicalTypography/i18n/fr.ts +2 -14
  281. package/src/tool/musicalTypography/i18n/id.ts +2 -14
  282. package/src/tool/musicalTypography/i18n/it.ts +2 -14
  283. package/src/tool/musicalTypography/i18n/ja.ts +2 -14
  284. package/src/tool/musicalTypography/i18n/ko.ts +2 -14
  285. package/src/tool/musicalTypography/i18n/nl.ts +2 -14
  286. package/src/tool/musicalTypography/i18n/pl.ts +2 -14
  287. package/src/tool/musicalTypography/i18n/pt.ts +2 -5
  288. package/src/tool/musicalTypography/i18n/ru.ts +2 -5
  289. package/src/tool/musicalTypography/i18n/sv.ts +2 -1
  290. package/src/tool/musicalTypography/i18n/tr.ts +2 -1
  291. package/src/tool/musicalTypography/i18n/zh.ts +2 -1
  292. package/src/tool/placeholderGenerator/bibliography.astro +2 -10
  293. package/src/tool/placeholderGenerator/bibliography.ts +7 -0
  294. package/src/tool/placeholderGenerator/i18n/de.ts +2 -14
  295. package/src/tool/placeholderGenerator/i18n/en.ts +4 -16
  296. package/src/tool/placeholderGenerator/i18n/es.ts +4 -16
  297. package/src/tool/placeholderGenerator/i18n/fr.ts +2 -14
  298. package/src/tool/placeholderGenerator/i18n/id.ts +2 -14
  299. package/src/tool/placeholderGenerator/i18n/it.ts +2 -14
  300. package/src/tool/placeholderGenerator/i18n/ja.ts +2 -14
  301. package/src/tool/placeholderGenerator/i18n/ko.ts +2 -14
  302. package/src/tool/placeholderGenerator/i18n/nl.ts +2 -14
  303. package/src/tool/placeholderGenerator/i18n/pl.ts +2 -14
  304. package/src/tool/placeholderGenerator/i18n/pt.ts +2 -14
  305. package/src/tool/placeholderGenerator/i18n/ru.ts +2 -14
  306. package/src/tool/placeholderGenerator/i18n/sv.ts +2 -14
  307. package/src/tool/placeholderGenerator/i18n/tr.ts +2 -14
  308. package/src/tool/placeholderGenerator/i18n/zh.ts +2 -14
  309. package/src/tool/promoteThisWebsite/asset-bindings.ts +73 -0
  310. package/src/tool/promoteThisWebsite/bibliography.astro +14 -0
  311. package/src/tool/promoteThisWebsite/bibliography.ts +14 -0
  312. package/src/tool/promoteThisWebsite/component.astro +136 -0
  313. package/src/tool/promoteThisWebsite/control-views.ts +83 -0
  314. package/src/tool/promoteThisWebsite/controller.ts +232 -0
  315. package/src/tool/promoteThisWebsite/dom-views.ts +322 -0
  316. package/src/tool/promoteThisWebsite/entry.ts +15 -0
  317. package/src/tool/promoteThisWebsite/evaluator.ts +9 -0
  318. package/src/tool/promoteThisWebsite/i18n/en.ts +111 -0
  319. package/src/tool/promoteThisWebsite/index.ts +11 -0
  320. package/src/tool/promoteThisWebsite/jjlmoya-overlay.png +0 -0
  321. package/src/tool/promoteThisWebsite/logic.test.ts +29 -0
  322. package/src/tool/promoteThisWebsite/logic.ts +108 -0
  323. package/src/tool/promoteThisWebsite/pixel-cat.png +0 -0
  324. package/src/tool/promoteThisWebsite/promote-this-website.css +322 -0
  325. package/src/tool/promoteThisWebsite/seo.astro +15 -0
  326. package/src/tool/promoteThisWebsite/storage.ts +28 -0
  327. package/src/tool/promoteThisWebsite/title-view.ts +206 -0
  328. package/src/tool/promoteThisWebsite/ui.ts +59 -0
  329. package/src/tool/promptLibrary/bibliography.astro +2 -10
  330. package/src/tool/promptLibrary/bibliography.ts +6 -0
  331. package/src/tool/promptLibrary/i18n/de.ts +2 -4
  332. package/src/tool/promptLibrary/i18n/en.ts +2 -4
  333. package/src/tool/promptLibrary/i18n/es.ts +2 -4
  334. package/src/tool/promptLibrary/i18n/fr.ts +2 -4
  335. package/src/tool/promptLibrary/i18n/id.ts +2 -4
  336. package/src/tool/promptLibrary/i18n/it.ts +2 -4
  337. package/src/tool/promptLibrary/i18n/ja.ts +2 -4
  338. package/src/tool/promptLibrary/i18n/ko.ts +2 -4
  339. package/src/tool/promptLibrary/i18n/nl.ts +2 -4
  340. package/src/tool/promptLibrary/i18n/pl.ts +2 -1
  341. package/src/tool/promptLibrary/i18n/pt.ts +2 -4
  342. package/src/tool/promptLibrary/i18n/ru.ts +2 -4
  343. package/src/tool/promptLibrary/i18n/sv.ts +2 -4
  344. package/src/tool/promptLibrary/i18n/tr.ts +2 -4
  345. package/src/tool/promptLibrary/i18n/zh.ts +2 -4
  346. package/src/tool/readabilityCalculator/bibliography.astro +2 -10
  347. package/src/tool/readabilityCalculator/bibliography.ts +7 -0
  348. package/src/tool/readabilityCalculator/i18n/de.ts +2 -5
  349. package/src/tool/readabilityCalculator/i18n/en.ts +2 -5
  350. package/src/tool/readabilityCalculator/i18n/es.ts +2 -5
  351. package/src/tool/readabilityCalculator/i18n/fr.ts +2 -5
  352. package/src/tool/readabilityCalculator/i18n/id.ts +2 -5
  353. package/src/tool/readabilityCalculator/i18n/it.ts +2 -5
  354. package/src/tool/readabilityCalculator/i18n/ja.ts +2 -5
  355. package/src/tool/readabilityCalculator/i18n/ko.ts +2 -5
  356. package/src/tool/readabilityCalculator/i18n/nl.ts +2 -5
  357. package/src/tool/readabilityCalculator/i18n/pl.ts +2 -1
  358. package/src/tool/readabilityCalculator/i18n/pt.ts +2 -5
  359. package/src/tool/readabilityCalculator/i18n/ru.ts +2 -5
  360. package/src/tool/readabilityCalculator/i18n/sv.ts +2 -5
  361. package/src/tool/readabilityCalculator/i18n/tr.ts +2 -5
  362. package/src/tool/readabilityCalculator/i18n/zh.ts +2 -5
  363. package/src/tool/serpPixelSimulator/controller.ts +1 -0
  364. package/src/tool/serpPixelSimulator/i18n/en.ts +2 -2
  365. package/src/tool/serpPixelSimulator/i18n/es.ts +2 -2
  366. package/src/tool/serpPixelSimulator/logic.test.ts +25 -0
  367. package/src/tool/svgSanitizer/bibliography.astro +2 -10
  368. package/src/tool/svgSanitizer/bibliography.ts +7 -0
  369. package/src/tool/svgSanitizer/i18n/de.ts +2 -5
  370. package/src/tool/svgSanitizer/i18n/en.ts +2 -5
  371. package/src/tool/svgSanitizer/i18n/es.ts +2 -5
  372. package/src/tool/svgSanitizer/i18n/fr.ts +2 -5
  373. package/src/tool/svgSanitizer/i18n/id.ts +2 -5
  374. package/src/tool/svgSanitizer/i18n/it.ts +2 -5
  375. package/src/tool/svgSanitizer/i18n/ja.ts +2 -5
  376. package/src/tool/svgSanitizer/i18n/ko.ts +2 -5
  377. package/src/tool/svgSanitizer/i18n/nl.ts +2 -5
  378. package/src/tool/svgSanitizer/i18n/pl.ts +2 -5
  379. package/src/tool/svgSanitizer/i18n/pt.ts +2 -1
  380. package/src/tool/svgSanitizer/i18n/ru.ts +2 -5
  381. package/src/tool/svgSanitizer/i18n/sv.ts +2 -5
  382. package/src/tool/svgSanitizer/i18n/tr.ts +2 -5
  383. package/src/tool/svgSanitizer/i18n/zh.ts +2 -5
  384. package/src/tool/svgToCss/bibliography.astro +2 -10
  385. package/src/tool/svgToCss/bibliography.ts +8 -0
  386. package/src/tool/svgToCss/i18n/de.ts +2 -18
  387. package/src/tool/svgToCss/i18n/en.ts +2 -18
  388. package/src/tool/svgToCss/i18n/es.ts +2 -18
  389. package/src/tool/svgToCss/i18n/fr.ts +2 -18
  390. package/src/tool/svgToCss/i18n/id.ts +2 -18
  391. package/src/tool/svgToCss/i18n/it.ts +2 -18
  392. package/src/tool/svgToCss/i18n/ja.ts +2 -18
  393. package/src/tool/svgToCss/i18n/ko.ts +2 -18
  394. package/src/tool/svgToCss/i18n/nl.ts +2 -18
  395. package/src/tool/svgToCss/i18n/pl.ts +2 -18
  396. package/src/tool/svgToCss/i18n/pt.ts +2 -18
  397. package/src/tool/svgToCss/i18n/ru.ts +2 -18
  398. package/src/tool/svgToCss/i18n/sv.ts +2 -18
  399. package/src/tool/svgToCss/i18n/tr.ts +2 -18
  400. package/src/tool/svgToCss/i18n/zh.ts +2 -18
  401. package/src/tool/urlCleaner/bibliography.astro +2 -10
  402. package/src/tool/urlCleaner/bibliography.ts +7 -0
  403. package/src/tool/urlCleaner/i18n/de.ts +2 -5
  404. package/src/tool/urlCleaner/i18n/en.ts +2 -5
  405. package/src/tool/urlCleaner/i18n/es.ts +2 -5
  406. package/src/tool/urlCleaner/i18n/fr.ts +2 -5
  407. package/src/tool/urlCleaner/i18n/id.ts +2 -5
  408. package/src/tool/urlCleaner/i18n/it.ts +2 -5
  409. package/src/tool/urlCleaner/i18n/ja.ts +2 -5
  410. package/src/tool/urlCleaner/i18n/ko.ts +2 -5
  411. package/src/tool/urlCleaner/i18n/nl.ts +2 -5
  412. package/src/tool/urlCleaner/i18n/pl.ts +2 -1
  413. package/src/tool/urlCleaner/i18n/pt.ts +2 -5
  414. package/src/tool/urlCleaner/i18n/ru.ts +2 -5
  415. package/src/tool/urlCleaner/i18n/sv.ts +2 -5
  416. package/src/tool/urlCleaner/i18n/tr.ts +2 -5
  417. package/src/tool/urlCleaner/i18n/zh.ts +2 -5
  418. package/src/tool/urlEncoderDecoder/bibliography.astro +2 -10
  419. package/src/tool/urlEncoderDecoder/bibliography.ts +7 -0
  420. package/src/tool/urlEncoderDecoder/i18n/de.ts +2 -14
  421. package/src/tool/urlEncoderDecoder/i18n/en.ts +3 -15
  422. package/src/tool/urlEncoderDecoder/i18n/es.ts +3 -15
  423. package/src/tool/urlEncoderDecoder/i18n/fr.ts +2 -14
  424. package/src/tool/urlEncoderDecoder/i18n/id.ts +2 -14
  425. package/src/tool/urlEncoderDecoder/i18n/it.ts +2 -14
  426. package/src/tool/urlEncoderDecoder/i18n/ja.ts +2 -14
  427. package/src/tool/urlEncoderDecoder/i18n/ko.ts +2 -14
  428. package/src/tool/urlEncoderDecoder/i18n/nl.ts +2 -14
  429. package/src/tool/urlEncoderDecoder/i18n/pl.ts +2 -14
  430. package/src/tool/urlEncoderDecoder/i18n/pt.ts +2 -14
  431. package/src/tool/urlEncoderDecoder/i18n/ru.ts +2 -14
  432. package/src/tool/urlEncoderDecoder/i18n/sv.ts +2 -14
  433. package/src/tool/urlEncoderDecoder/i18n/tr.ts +2 -14
  434. package/src/tool/urlEncoderDecoder/i18n/zh.ts +2 -14
  435. package/src/tool/utmGenerator/bibliography.astro +2 -10
  436. package/src/tool/utmGenerator/bibliography.ts +6 -0
  437. package/src/tool/utmGenerator/i18n/de.ts +2 -4
  438. package/src/tool/utmGenerator/i18n/en.ts +2 -4
  439. package/src/tool/utmGenerator/i18n/es.ts +2 -4
  440. package/src/tool/utmGenerator/i18n/fr.ts +2 -4
  441. package/src/tool/utmGenerator/i18n/id.ts +2 -4
  442. package/src/tool/utmGenerator/i18n/it.ts +2 -4
  443. package/src/tool/utmGenerator/i18n/ja.ts +2 -4
  444. package/src/tool/utmGenerator/i18n/ko.ts +2 -4
  445. package/src/tool/utmGenerator/i18n/nl.ts +2 -4
  446. package/src/tool/utmGenerator/i18n/pl.ts +2 -4
  447. package/src/tool/utmGenerator/i18n/pt.ts +2 -4
  448. package/src/tool/utmGenerator/i18n/ru.ts +2 -4
  449. package/src/tool/utmGenerator/i18n/sv.ts +2 -4
  450. package/src/tool/utmGenerator/i18n/tr.ts +2 -4
  451. package/src/tool/utmGenerator/i18n/zh.ts +2 -4
  452. package/src/tool/visualCssGridFlexboxGenerator/component.astro +1 -0
  453. package/src/tool/visualCssGridFlexboxGenerator/logic.test.ts +29 -0
  454. package/src/tool/visualCssGridFlexboxGenerator/workspace.ts +13 -1
  455. package/src/tools.ts +2 -1
@@ -0,0 +1,206 @@
1
+ import { clamp, type CompositionState, type LayerPosition, type TitleStyle } from './logic';
2
+
3
+ interface TitlePalette {
4
+ fill: string;
5
+ text: string;
6
+ accent: string;
7
+ }
8
+
9
+ const palettes: Record<TitleStyle, TitlePalette> = {
10
+ paper: { fill: '#f7ebd7', text: '#08182b', accent: '#c45a2f' },
11
+ ribbon: { fill: '#c45a2f', text: '#fffaf0', accent: '#f7ebd7' },
12
+ ink: { fill: '#172a3c', text: '#f7ebd7', accent: '#11d6c4' },
13
+ poster: { fill: '#071226', text: '#fffaf0', accent: '#11d6c4' },
14
+ ticket: { fill: '#f1dfc4', text: '#08182b', accent: '#577b86' },
15
+ marker: { fill: '#f4f6fb', text: '#08182b', accent: '#11a99d' },
16
+ split: { fill: '#08182b', text: '#fffaf0', accent: '#11d6c4' },
17
+ capsule: { fill: '#fffaf0', text: '#08182b', accent: '#c45a2f' },
18
+ corner: { fill: '#10283b', text: '#fffaf0', accent: '#f0b45b' },
19
+ vertical: { fill: '#172a3c', text: '#fffaf0', accent: '#c45a2f' },
20
+ };
21
+
22
+ function roundedRect(context: CanvasRenderingContext2D, position: LayerPosition, radius: number): void {
23
+ const r = Math.min(radius, position.width / 2, position.height / 2);
24
+ context.beginPath();
25
+ context.roundRect(position.x, position.y, position.width, position.height, r);
26
+ }
27
+
28
+ function wrapLines(context: CanvasRenderingContext2D, text: string, maxWidth: number): string[] {
29
+ const words = text.trim().split(/\s+/).filter(Boolean);
30
+ const lines: string[] = [];
31
+ let current = '';
32
+ words.forEach((word) => {
33
+ const candidate = current ? `${current} ${word}` : word;
34
+ if (current && context.measureText(candidate).width > maxWidth) {
35
+ lines.push(current);
36
+ current = word;
37
+ } else current = candidate;
38
+ });
39
+ if (current) lines.push(current);
40
+ return lines.slice(0, 3);
41
+ }
42
+
43
+ function drawPaper(context: CanvasRenderingContext2D, palette: TitlePalette, position: LayerPosition): void {
44
+ roundedRect(context, position, 16);
45
+ context.fill();
46
+ context.stroke();
47
+ context.fillStyle = palette.accent;
48
+ context.fillRect(position.x + position.width * 0.09, position.y + position.height * 0.78, position.width * 0.24, 6);
49
+ }
50
+
51
+ function drawRibbon(context: CanvasRenderingContext2D, position: LayerPosition): void {
52
+ context.beginPath();
53
+ context.moveTo(position.x + 28, position.y);
54
+ context.lineTo(position.x + position.width - 28, position.y);
55
+ context.lineTo(position.x + position.width, position.y + position.height / 2);
56
+ context.lineTo(position.x + position.width - 28, position.y + position.height);
57
+ context.lineTo(position.x + 28, position.y + position.height);
58
+ context.lineTo(position.x, position.y + position.height / 2);
59
+ context.closePath();
60
+ context.fill();
61
+ context.stroke();
62
+ }
63
+
64
+ function drawInk(context: CanvasRenderingContext2D, position: LayerPosition): void {
65
+ context.save();
66
+ context.translate(position.x + position.width / 2, position.y + position.height / 2);
67
+ context.rotate(-0.025);
68
+ const width = position.width;
69
+ const height = position.height;
70
+ context.beginPath();
71
+ context.moveTo(-width * 0.48, -height * 0.05);
72
+ context.bezierCurveTo(-width * 0.43, -height * 0.46, -width * 0.12, -height * 0.58, width * 0.25, -height * 0.45);
73
+ context.bezierCurveTo(width * 0.54, -height * 0.36, width * 0.55, height * 0.08, width * 0.32, height * 0.34);
74
+ context.bezierCurveTo(width * 0.04, height * 0.62, -width * 0.36, height * 0.46, -width * 0.48, -height * 0.05);
75
+ context.fill();
76
+ context.stroke();
77
+ context.fillStyle = '#11d6c4';
78
+ context.beginPath();
79
+ context.arc(width * 0.34, height * 0.34, Math.max(4, height * 0.08), 0, Math.PI * 2);
80
+ context.fill();
81
+ context.restore();
82
+ }
83
+
84
+ function drawPoster(context: CanvasRenderingContext2D, position: LayerPosition): void {
85
+ context.fillRect(position.x, position.y, position.width, position.height);
86
+ context.strokeRect(position.x, position.y, position.width, position.height);
87
+ }
88
+
89
+ function drawTicket(context: CanvasRenderingContext2D, position: LayerPosition): void {
90
+ roundedRect(context, position, 20);
91
+ context.fill();
92
+ context.stroke();
93
+ context.save();
94
+ context.globalCompositeOperation = 'destination-out';
95
+ context.beginPath();
96
+ context.arc(position.x, position.y + position.height / 2, Math.min(14, position.height * 0.22), 0, Math.PI * 2);
97
+ context.arc(position.x + position.width, position.y + position.height / 2, Math.min(14, position.height * 0.22), 0, Math.PI * 2);
98
+ context.fill();
99
+ context.restore();
100
+ context.fillStyle = '#577b86';
101
+ context.fillRect(position.x, position.y + position.height * 0.15, 8, position.height * 0.7);
102
+ context.setLineDash([6, 10]);
103
+ context.beginPath();
104
+ context.moveTo(position.x + position.width * 0.78, position.y + 12);
105
+ context.lineTo(position.x + position.width * 0.78, position.y + position.height - 12);
106
+ context.stroke();
107
+ context.setLineDash([]);
108
+ }
109
+
110
+ function drawMarker(context: CanvasRenderingContext2D, palette: TitlePalette, position: LayerPosition): void {
111
+ roundedRect(context, position, 14);
112
+ context.fill();
113
+ context.stroke();
114
+ context.fillStyle = palette.accent;
115
+ context.fillRect(position.x + position.width * 0.08, position.y + position.height * 0.78, position.width * 0.38, 7);
116
+ }
117
+
118
+ function drawSplit(context: CanvasRenderingContext2D, palette: TitlePalette, position: LayerPosition): void {
119
+ roundedRect(context, position, 8);
120
+ context.fillStyle = palette.fill;
121
+ context.fill();
122
+ context.save();
123
+ context.beginPath();
124
+ context.rect(position.x + position.width * 0.58, position.y, position.width * 0.42, position.height);
125
+ context.clip();
126
+ context.fillStyle = palette.accent;
127
+ context.fillRect(position.x + position.width * 0.58, position.y, position.width * 0.42, position.height);
128
+ context.restore();
129
+ context.stroke();
130
+ }
131
+
132
+ function drawCapsule(context: CanvasRenderingContext2D, position: LayerPosition): void {
133
+ roundedRect(context, position, position.height / 2);
134
+ context.fill();
135
+ context.stroke();
136
+ }
137
+
138
+ function drawCorner(context: CanvasRenderingContext2D, palette: TitlePalette, position: LayerPosition): void {
139
+ context.fillRect(position.x, position.y, position.width, position.height);
140
+ context.fillStyle = palette.accent;
141
+ context.fillRect(position.x, position.y + position.height - 8, position.width * 0.3, 8);
142
+ }
143
+
144
+ function drawVertical(context: CanvasRenderingContext2D, palette: TitlePalette, position: LayerPosition): void {
145
+ context.fillRect(position.x, position.y, position.width, position.height);
146
+ context.fillStyle = palette.accent;
147
+ context.fillRect(position.x + position.width - 10, position.y + 12, 4, position.height - 24);
148
+ context.beginPath();
149
+ context.arc(position.x + position.width - 8, position.y + 8, 3, 0, Math.PI * 2);
150
+ context.fill();
151
+ }
152
+
153
+ function drawShape(context: CanvasRenderingContext2D, style: TitleStyle, palette: TitlePalette, position: LayerPosition): void {
154
+ const drawers: Record<TitleStyle, () => void> = {
155
+ paper: () => drawPaper(context, palette, position), ribbon: () => drawRibbon(context, position), ink: () => drawInk(context, position), poster: () => drawPoster(context, position), ticket: () => drawTicket(context, position), marker: () => drawMarker(context, palette, position), split: () => drawSplit(context, palette, position), capsule: () => drawCapsule(context, position), corner: () => drawCorner(context, palette, position), vertical: () => drawVertical(context, palette, position),
156
+ };
157
+ drawers[style]();
158
+ }
159
+
160
+ function drawTitleText(context: CanvasRenderingContext2D, state: CompositionState, palette: TitlePalette, position: LayerPosition): void {
161
+ const fontSize = clamp(position.height * 0.34 * state.titleFontSize, 12, 74);
162
+ const textTop = state.titleStyle === 'marker' ? 0.24 : 0.18;
163
+ context.font = `800 ${fontSize}px Georgia, serif`;
164
+ context.textAlign = 'left';
165
+ context.textBaseline = 'top';
166
+ const lines = wrapLines(context, state.title, position.width * 0.82);
167
+ lines.forEach((line, index) => {
168
+ const y = position.y + position.height * textTop + index * fontSize * 1.05;
169
+ if (state.titleStyle !== 'split') {
170
+ context.fillStyle = palette.text;
171
+ context.fillText(line, position.x + position.width * 0.09, y);
172
+ return;
173
+ }
174
+ context.save();
175
+ context.beginPath();
176
+ context.rect(position.x, position.y, position.width * 0.58, position.height);
177
+ context.clip();
178
+ context.fillStyle = palette.text;
179
+ context.fillText(line, position.x + position.width * 0.09, y);
180
+ context.restore();
181
+ context.save();
182
+ context.beginPath();
183
+ context.rect(position.x + position.width * 0.58, position.y, position.width * 0.42, position.height);
184
+ context.clip();
185
+ context.fillStyle = '#fffaf0';
186
+ context.fillText(line, position.x + position.width * 0.09, y);
187
+ context.restore();
188
+ });
189
+ }
190
+
191
+ export function drawTitle(context: CanvasRenderingContext2D, state: CompositionState): void {
192
+ if (!state.title.trim()) return;
193
+ const position = state.positions.title;
194
+ const palette = palettes[state.titleStyle];
195
+ context.save();
196
+ context.shadowColor = 'rgba(4, 11, 24, 0.25)';
197
+ context.shadowBlur = 22;
198
+ context.shadowOffsetY = 10;
199
+ context.fillStyle = palette.fill;
200
+ context.strokeStyle = palette.accent;
201
+ context.lineWidth = 3;
202
+ drawShape(context, state.titleStyle, palette, position);
203
+ context.shadowColor = 'transparent';
204
+ drawTitleText(context, state, palette, position);
205
+ context.restore();
206
+ }
@@ -0,0 +1,59 @@
1
+ export interface PromoteThisWebsiteUI extends Record<string, string> {
2
+ urlLabel: string;
3
+ urlPlaceholder: string;
4
+ applyUrl: string;
5
+ formatLabel: string;
6
+ panoramic: string;
7
+ instagram: string;
8
+ square: string;
9
+ story: string;
10
+ titleLabel: string;
11
+ titlePlaceholder: string;
12
+ titleSizeLabel: string;
13
+ titleBoxSizeLabel: string;
14
+ titleStyleLabel: string;
15
+ brandLabel: string;
16
+ brandStyleLabel: string;
17
+ advancedLabel: string;
18
+ assetsLabel: string;
19
+ backgroundLabel: string;
20
+ toolLabel: string;
21
+ logoLabel: string;
22
+ mascotLabel: string;
23
+ layersLabel: string;
24
+ backgroundLayer: string;
25
+ toolLayer: string;
26
+ logoLayer: string;
27
+ mascotLayer: string;
28
+ titleLayer: string;
29
+ reset: string;
30
+ download: string;
31
+ activeLayer: string;
32
+ canvasHint: string;
33
+ pasted: string;
34
+ urlApplied: string;
35
+ urlLoading: string;
36
+ urlFailed: string;
37
+ fileLoaded: string;
38
+ titlePaper: string;
39
+ titleRibbon: string;
40
+ titleInk: string;
41
+ titlePoster: string;
42
+ titleTicket: string;
43
+ titleMarker: string;
44
+ titleSplit: string;
45
+ titleCapsule: string;
46
+ titleCorner: string;
47
+ titleVertical: string;
48
+ brandPlain: string;
49
+ brandPlaque: string;
50
+ brandTicket: string;
51
+ brandStamp: string;
52
+ brandNeon: string;
53
+ brandRibbon: string;
54
+ brandCorner: string;
55
+ brandPixel: string;
56
+ brandHalo: string;
57
+ brandEditorial: string;
58
+ defaultTool: string;
59
+ }
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { promptLibrary } 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 promptLibrary.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,6 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/techniques' },
5
+ { name: 'What is prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
6
+ ];
@@ -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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'Häufig gestellte Fragen',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'Referenzen zum Prompt Engineering',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'Was ist Prompt Engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'Frequently Asked Questions',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'Prompt Engineering References',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'What is prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'Preguntas Frecuentes',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'Referencias sobre Prompt Engineering',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'Qu\u00e9 es prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'Questions Fr\u00e9quentes',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'R\u00e9f\u00e9rences sur le Prompt Engineering',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'Qu\'est-ce que le prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'Pertanyaan yang Sering Diajukan',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'Referensi Prompt Engineering',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'Apa itu prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'Domande Frequenti',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'Riferimenti sul Prompt Engineering',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'Che cos\'è il prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'よくある質問',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'プロンプトエンジニアリング参考資料',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'プロンプトエンジニアリングとは(Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: '자주 묻는 질문',
96
97
  faq: faqData,
97
98
  bibliographyTitle: '프롬프트 엔지니어링 참고자료',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: '프롬프트 엔지니어링이란 (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -95,10 +96,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
95
96
  faqTitle: 'Veelgestelde Vragen',
96
97
  faq: faqData,
97
98
  bibliographyTitle: 'Referenties over Prompt Engineering',
98
- bibliography: [
99
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
100
- { name: 'Wat is prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
101
- ],
99
+ bibliography,
102
100
  howTo: howToData,
103
101
  schemas: [faqSchema, howToSchema, appSchema],
104
102
  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 { PromptLibraryUI } from '../ui';
@@ -25,4 +26,4 @@ const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schem
25
26
 
26
27
  const ui: PromptLibraryUI = { placeholderSearch: 'Wyszukiwanie po słowie kluczowym lub tagu...', btnNew: 'Nowy Prompt', emptyTitle: 'Twoja biblioteka jest pusta', emptyDesc: 'Utwórz swój pierwszy prompt i zacznij budować prywatne repozytorium AI.', btnAddFirst: 'Dodaj pierwszy', modalTitleCreate: 'Utwórz Nowy Prompt', modalTitleEdit: 'Edytuj Prompt', labelTitle: 'Tytuł identyfikujący', placeholderTitle: 'Np.: Ekspert Marketingu SEO', labelContent: 'Instrukcja (Prompt)', placeholderContent: 'Wpisz tutaj szczegółowe instrukcje dla AI...', hintContent: 'Wskazówka: używaj nawiasów [TAKIE TO] do zmiennych, które wypełnisz później.', labelTags: 'Tagi', placeholderTags: 'Np.: marketing, seo (spacja lub przecinek do dodawania)', btnCancel: 'Anuluj', btnSave: 'Zapisz Lokalnie', ariaLabelStar: 'Oznacz prompt gwiazdką', ariaLabelEdit: 'Edytuj prompt', ariaLabelShare: 'Udostępniaj prompt', ariaLabelCopy: 'Kopiuj prompt', ariaLabelDelete: 'Usuń prompt', varsTitle: 'Wymagane zmienne', noResults: 'Nie znaleziono promptów dla tego wyszukiwania.', confirmTitle: 'Usunąć prompt?', confirmDesc: 'Tej akcji nie można cofnąć.', btnCancelDelete: 'Anuluj', btnConfirmDelete: 'Usuń permanentnie', };
27
28
 
28
- export const content: ToolLocaleContent<PromptLibraryUI> = { slug, title, description, ui, faqTitle: 'Często Zadawane Pytania', faq: faqData, bibliographyTitle: 'Referencje Inżynierii Promptów', bibliography: [{ name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' }, { name: 'What is prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' }], howTo: howToData, schemas: [faqSchema, howToSchema, appSchema], seo: [{ type: 'title', text: 'Dlaczego potrzebujesz biblioteki promptów?', level: 2 }, { type: 'paragraph', html: 'Jeśli regularnie pracujesz z narzędziami AI, takimi jak ChatGPT, Claude czy Midjourney, pewnie zauważyłeś, że powtarzasz te same instrukcje. <strong>Biblioteka promptów</strong> to ostateczne rozwiązanie, aby przestać zmarnować czas na przepisywanie ulubionych poleceń.' }, { type: 'title', text: 'Korzyści z organizowania promptów', level: 3 }, { type: 'list', items: ['<strong>Błyskawiczne wyszukiwanie:</strong> Znajdź tę konkretną instrukcję, którą używałeś miesiące temu, za pomocą prostego wyszukiwania tekstowego.', '<strong>Klasyfikacja tagami:</strong> Taguj prompty jako "marketing", "programowanie" czy "copywriting", aby szybko filtrować.', '<strong>Kopiowanie jednym kliknięciem:</strong> Skopiuj pełny tekst do schowka jednym kliknięciem.', '<strong>Całkowita prywatność:</strong> Wszystkie Twoje dane są przechowywane lokalnie w przeglądarce poprzez localStorage.'] }, { type: 'title', text: 'Zmienne w Twoich promptach', level: 3 }, { type: 'paragraph', html: 'Użyj notacji <strong>[ZMIENNA]</strong> w swoich promptach, aby tworzyć dynamicznie wypełnialne pola. Gdy otworzysz kartę, pojawią się pola wejściowe dla każdej zdefiniowanej zmiennej. Prompt jest kopiowany ze wypełnionymi wartościami, gotowy do wklejenia do swojego AI.' }, { type: 'title', text: 'Udostępnianie promptów', level: 3 }, { type: 'paragraph', html: 'Każdy prompt można udostępnić poprzez URL. Przycisk udostępniania generuje link, który po otwarciu pokazuje formularz tworzenia wstępnie wypełniony zawartością promptu.' }] };
29
+ export const content: ToolLocaleContent<PromptLibraryUI> = { slug, title, description, ui, faqTitle: 'Często Zadawane Pytania', faq: faqData, bibliographyTitle: 'Referencje Inżynierii Promptów', bibliography, howTo: howToData, schemas: [faqSchema, howToSchema, appSchema], seo: [{ type: 'title', text: 'Dlaczego potrzebujesz biblioteki promptów?', level: 2 }, { type: 'paragraph', html: 'Jeśli regularnie pracujesz z narzędziami AI, takimi jak ChatGPT, Claude czy Midjourney, pewnie zauważyłeś, że powtarzasz te same instrukcje. <strong>Biblioteka promptów</strong> to ostateczne rozwiązanie, aby przestać zmarnować czas na przepisywanie ulubionych poleceń.' }, { type: 'title', text: 'Korzyści z organizowania promptów', level: 3 }, { type: 'list', items: ['<strong>Błyskawiczne wyszukiwanie:</strong> Znajdź tę konkretną instrukcję, którą używałeś miesiące temu, za pomocą prostego wyszukiwania tekstowego.', '<strong>Klasyfikacja tagami:</strong> Taguj prompty jako "marketing", "programowanie" czy "copywriting", aby szybko filtrować.', '<strong>Kopiowanie jednym kliknięciem:</strong> Skopiuj pełny tekst do schowka jednym kliknięciem.', '<strong>Całkowita prywatność:</strong> Wszystkie Twoje dane są przechowywane lokalnie w przeglądarce poprzez localStorage.'] }, { type: 'title', text: 'Zmienne w Twoich promptach', level: 3 }, { type: 'paragraph', html: 'Użyj notacji <strong>[ZMIENNA]</strong> w swoich promptach, aby tworzyć dynamicznie wypełnialne pola. Gdy otworzysz kartę, pojawią się pola wejściowe dla każdej zdefiniowanej zmiennej. Prompt jest kopiowany ze wypełnionymi wartościami, gotowy do wklejenia do swojego AI.' }, { type: 'title', text: 'Udostępnianie promptów', level: 3 }, { type: 'paragraph', html: 'Każdy prompt można udostępnić poprzez URL. Przycisk udostępniania generuje link, który po otwarciu pokazuje formularz tworzenia wstępnie wypełniony zawartością promptu.' }] };
@@ -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 { PromptLibraryUI } from '../ui';
@@ -82,10 +83,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
82
83
  faqTitle: 'Perguntas Frequentes',
83
84
  faq: faqData,
84
85
  bibliographyTitle: 'Referências de Engenharia de Prompts',
85
- bibliography: [
86
- { name: 'Guia de Engenharia de Prompts (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
87
- { name: 'O que é engenharia de prompts (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
88
- ],
86
+ bibliography,
89
87
  howTo: howToData,
90
88
  schemas: [faqSchema, howToSchema, appSchema],
91
89
  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 { PromptLibraryUI } from '../ui';
@@ -82,10 +83,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
82
83
  faqTitle: 'Часто Задаваемые Вопросы',
83
84
  faq: faqData,
84
85
  bibliographyTitle: 'Справки по Инженерии Промптов',
85
- bibliography: [
86
- { name: 'Путеводитель по Инженерии Промптов (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
87
- { name: 'Что такое инженерия промптов (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
88
- ],
86
+ bibliography,
89
87
  howTo: howToData,
90
88
  schemas: [faqSchema, howToSchema, appSchema],
91
89
  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 { PromptLibraryUI } from '../ui';
@@ -74,10 +75,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
74
75
  faqTitle: 'Vanliga Frågor',
75
76
  faq: faqData,
76
77
  bibliographyTitle: 'Prompt Engineering Referenser',
77
- bibliography: [
78
- { name: 'Prompt Engineering Guide (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
79
- { name: 'Vad är prompt engineering (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
80
- ],
78
+ bibliography,
81
79
  howTo: howToData,
82
80
  schemas: [faqSchema, howToSchema, appSchema],
83
81
  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 { PromptLibraryUI } from '../ui';
@@ -74,10 +75,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
74
75
  faqTitle: 'Sık Sorulan Sorular',
75
76
  faq: faqData,
76
77
  bibliographyTitle: 'Prompt Mühendisliği Referansları',
77
- bibliography: [
78
- { name: 'Prompt Mühendisliği Kılavuzu (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
79
- { name: 'Prompt Mühendisliği Nedir (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
80
- ],
78
+ bibliography,
81
79
  howTo: howToData,
82
80
  schemas: [faqSchema, howToSchema, appSchema],
83
81
  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 { PromptLibraryUI } from '../ui';
@@ -74,10 +75,7 @@ export const content: ToolLocaleContent<PromptLibraryUI> = {
74
75
  faqTitle: '常见问题',
75
76
  faq: faqData,
76
77
  bibliographyTitle: '提示工程参考',
77
- bibliography: [
78
- { name: '提示工程指南 (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
79
- { name: '什么是提示工程 (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
80
- ],
78
+ bibliography,
81
79
  howTo: howToData,
82
80
  schemas: [faqSchema, howToSchema, appSchema],
83
81
  seo: [
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { readabilityCalculator } 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 readabilityCalculator.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,7 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'W3C: WCAG 3.0 Draft (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
5
+ { name: 'Myndex: APCA reference implementation', url: 'https://github.com/Myndex/apca-w3' },
6
+ { name: 'MDN: Accessibility and Color Contrast', url: 'https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
7
+ ];
@@ -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 { ReadabilityCalculatorUI } from '../ui';
@@ -97,11 +98,7 @@ export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
97
98
  faqTitle: 'Häufig gestellte Fragen',
98
99
  faq: faqData,
99
100
  bibliographyTitle: 'Ressourcen zu Kontrast und APCA',
100
- bibliography: [
101
- { name: 'W3C: WCAG 3.0 Entwurf (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
102
- { name: 'Myndex: APCA Referenzhandbuch', url: 'https://apcaw3.myndex.com/' },
103
- { name: 'MDN: Barrierefreiheit und Farbkontrast', url: 'https://developer.mozilla.org/de/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
104
- ],
101
+ bibliography,
105
102
  howTo: howToData,
106
103
  schemas: [faqSchema, howToSchema, appSchema],
107
104
  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 { ReadabilityCalculatorUI } from '../ui';
@@ -97,11 +98,7 @@ export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
97
98
  faqTitle: 'Frequently Asked Questions',
98
99
  faq: faqData,
99
100
  bibliographyTitle: 'Resources on Contrast and APCA',
100
- bibliography: [
101
- { name: 'W3C: WCAG 3.0 Draft (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
102
- { name: 'Myndex: APCA Reference Guide', url: 'https://apcaw3.myndex.com/' },
103
- { name: 'MDN: Accessibility and Color Contrast', url: 'https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
104
- ],
101
+ bibliography,
105
102
  howTo: howToData,
106
103
  schemas: [faqSchema, howToSchema, appSchema],
107
104
  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 { ReadabilityCalculatorUI } from '../ui';
@@ -97,11 +98,7 @@ export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
97
98
  faqTitle: 'Preguntas Frecuentes',
98
99
  faq: faqData,
99
100
  bibliographyTitle: 'Recursos sobre Contraste y APCA',
100
- bibliography: [
101
- { name: 'W3C: Draft de WCAG 3.0 (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
102
- { name: 'Myndex: Gu\u00eda de Referencia APCA', url: 'https://apcaw3.myndex.com/' },
103
- { name: 'MDN: Accesibilidad y Contraste de Color', url: 'https://developer.mozilla.org/es/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
104
- ],
101
+ bibliography,
105
102
  howTo: howToData,
106
103
  schemas: [faqSchema, howToSchema, appSchema],
107
104
  seo: [