@jjlmoya/utils-developer 1.27.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 (456) 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/spanish_leakage.test.ts +5 -1
  11. package/src/tests/tool_validation.test.ts +1 -1
  12. package/src/tool/aspectRatio/bibliography.astro +2 -10
  13. package/src/tool/aspectRatio/bibliography.ts +7 -0
  14. package/src/tool/aspectRatio/i18n/de.ts +2 -14
  15. package/src/tool/aspectRatio/i18n/en.ts +2 -14
  16. package/src/tool/aspectRatio/i18n/es.ts +2 -14
  17. package/src/tool/aspectRatio/i18n/fr.ts +2 -14
  18. package/src/tool/aspectRatio/i18n/id.ts +2 -14
  19. package/src/tool/aspectRatio/i18n/it.ts +2 -14
  20. package/src/tool/aspectRatio/i18n/ja.ts +2 -14
  21. package/src/tool/aspectRatio/i18n/ko.ts +2 -14
  22. package/src/tool/aspectRatio/i18n/nl.ts +2 -14
  23. package/src/tool/aspectRatio/i18n/pl.ts +2 -14
  24. package/src/tool/aspectRatio/i18n/pt.ts +2 -14
  25. package/src/tool/aspectRatio/i18n/ru.ts +2 -14
  26. package/src/tool/aspectRatio/i18n/sv.ts +2 -14
  27. package/src/tool/aspectRatio/i18n/tr.ts +2 -14
  28. package/src/tool/aspectRatio/i18n/zh.ts +2 -14
  29. package/src/tool/calculadoraTiempoDatos/bibliography.astro +2 -10
  30. package/src/tool/calculadoraTiempoDatos/bibliography.ts +8 -0
  31. package/src/tool/calculadoraTiempoDatos/component.astro +6 -2
  32. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +2 -6
  33. package/src/tool/calculadoraTiempoDatos/i18n/en.ts +2 -6
  34. package/src/tool/calculadoraTiempoDatos/i18n/es.ts +2 -6
  35. package/src/tool/calculadoraTiempoDatos/i18n/fr.ts +2 -6
  36. package/src/tool/calculadoraTiempoDatos/i18n/id.ts +2 -6
  37. package/src/tool/calculadoraTiempoDatos/i18n/it.ts +2 -6
  38. package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +2 -6
  39. package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +2 -6
  40. package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +2 -6
  41. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +2 -6
  42. package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +2 -6
  43. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +2 -6
  44. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +2 -6
  45. package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +2 -6
  46. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +2 -6
  47. package/src/tool/colorConverter/bibliography.astro +2 -10
  48. package/src/tool/colorConverter/bibliography.ts +7 -0
  49. package/src/tool/colorConverter/i18n/de.ts +2 -5
  50. package/src/tool/colorConverter/i18n/en.ts +5 -8
  51. package/src/tool/colorConverter/i18n/es.ts +4 -7
  52. package/src/tool/colorConverter/i18n/fr.ts +2 -5
  53. package/src/tool/colorConverter/i18n/id.ts +2 -5
  54. package/src/tool/colorConverter/i18n/it.ts +2 -5
  55. package/src/tool/colorConverter/i18n/ja.ts +2 -5
  56. package/src/tool/colorConverter/i18n/ko.ts +2 -5
  57. package/src/tool/colorConverter/i18n/nl.ts +2 -5
  58. package/src/tool/colorConverter/i18n/pl.ts +2 -5
  59. package/src/tool/colorConverter/i18n/pt.ts +2 -5
  60. package/src/tool/colorConverter/i18n/ru.ts +2 -5
  61. package/src/tool/colorConverter/i18n/sv.ts +2 -5
  62. package/src/tool/colorConverter/i18n/tr.ts +2 -5
  63. package/src/tool/colorConverter/i18n/zh.ts +2 -5
  64. package/src/tool/conversorExcelCsvHtml/bibliography.astro +2 -10
  65. package/src/tool/conversorExcelCsvHtml/bibliography.ts +8 -0
  66. package/src/tool/conversorExcelCsvHtml/component.astro +4 -3
  67. package/src/tool/conversorExcelCsvHtml/i18n/de.ts +2 -6
  68. package/src/tool/conversorExcelCsvHtml/i18n/en.ts +2 -6
  69. package/src/tool/conversorExcelCsvHtml/i18n/es.ts +2 -6
  70. package/src/tool/conversorExcelCsvHtml/i18n/fr.ts +2 -6
  71. package/src/tool/conversorExcelCsvHtml/i18n/id.ts +2 -6
  72. package/src/tool/conversorExcelCsvHtml/i18n/it.ts +2 -6
  73. package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +2 -6
  74. package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +2 -6
  75. package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +2 -6
  76. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +2 -6
  77. package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +2 -6
  78. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +2 -6
  79. package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +2 -6
  80. package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +2 -6
  81. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +2 -6
  82. package/src/tool/cronGenerator/bibliography.astro +2 -10
  83. package/src/tool/cronGenerator/bibliography.ts +6 -0
  84. package/src/tool/cronGenerator/component.astro +5 -1
  85. package/src/tool/cronGenerator/i18n/de.ts +2 -10
  86. package/src/tool/cronGenerator/i18n/en.ts +2 -10
  87. package/src/tool/cronGenerator/i18n/es.ts +2 -10
  88. package/src/tool/cronGenerator/i18n/fr.ts +2 -10
  89. package/src/tool/cronGenerator/i18n/id.ts +2 -10
  90. package/src/tool/cronGenerator/i18n/it.ts +2 -10
  91. package/src/tool/cronGenerator/i18n/ja.ts +2 -10
  92. package/src/tool/cronGenerator/i18n/ko.ts +2 -10
  93. package/src/tool/cronGenerator/i18n/nl.ts +2 -10
  94. package/src/tool/cronGenerator/i18n/pl.ts +2 -10
  95. package/src/tool/cronGenerator/i18n/pt.ts +2 -10
  96. package/src/tool/cronGenerator/i18n/ru.ts +2 -10
  97. package/src/tool/cronGenerator/i18n/sv.ts +2 -10
  98. package/src/tool/cronGenerator/i18n/tr.ts +2 -10
  99. package/src/tool/cronGenerator/i18n/zh.ts +2 -10
  100. package/src/tool/cssBoxShadowGenerator/component.astro +2 -1
  101. package/src/tool/cssBoxShadowGenerator/logic.test.ts +28 -0
  102. package/src/tool/cssSpecificityCalculator/bibliography.astro +2 -10
  103. package/src/tool/cssSpecificityCalculator/bibliography.ts +6 -0
  104. package/src/tool/cssSpecificityCalculator/i18n/de.ts +2 -10
  105. package/src/tool/cssSpecificityCalculator/i18n/en.ts +2 -10
  106. package/src/tool/cssSpecificityCalculator/i18n/es.ts +2 -10
  107. package/src/tool/cssSpecificityCalculator/i18n/fr.ts +2 -10
  108. package/src/tool/cssSpecificityCalculator/i18n/id.ts +2 -10
  109. package/src/tool/cssSpecificityCalculator/i18n/it.ts +2 -10
  110. package/src/tool/cssSpecificityCalculator/i18n/ja.ts +2 -10
  111. package/src/tool/cssSpecificityCalculator/i18n/ko.ts +2 -10
  112. package/src/tool/cssSpecificityCalculator/i18n/nl.ts +2 -10
  113. package/src/tool/cssSpecificityCalculator/i18n/pl.ts +2 -10
  114. package/src/tool/cssSpecificityCalculator/i18n/pt.ts +2 -10
  115. package/src/tool/cssSpecificityCalculator/i18n/ru.ts +2 -10
  116. package/src/tool/cssSpecificityCalculator/i18n/sv.ts +2 -10
  117. package/src/tool/cssSpecificityCalculator/i18n/tr.ts +2 -10
  118. package/src/tool/cssSpecificityCalculator/i18n/zh.ts +2 -10
  119. package/src/tool/cssToInlineConverter/bibliography.astro +2 -10
  120. package/src/tool/cssToInlineConverter/bibliography.ts +7 -0
  121. package/src/tool/cssToInlineConverter/i18n/de.ts +2 -14
  122. package/src/tool/cssToInlineConverter/i18n/en.ts +4 -16
  123. package/src/tool/cssToInlineConverter/i18n/es.ts +5 -17
  124. package/src/tool/cssToInlineConverter/i18n/fr.ts +2 -14
  125. package/src/tool/cssToInlineConverter/i18n/id.ts +2 -14
  126. package/src/tool/cssToInlineConverter/i18n/it.ts +2 -14
  127. package/src/tool/cssToInlineConverter/i18n/ja.ts +2 -14
  128. package/src/tool/cssToInlineConverter/i18n/ko.ts +2 -14
  129. package/src/tool/cssToInlineConverter/i18n/nl.ts +2 -14
  130. package/src/tool/cssToInlineConverter/i18n/pl.ts +2 -14
  131. package/src/tool/cssToInlineConverter/i18n/pt.ts +2 -14
  132. package/src/tool/cssToInlineConverter/i18n/ru.ts +2 -14
  133. package/src/tool/cssToInlineConverter/i18n/sv.ts +2 -14
  134. package/src/tool/cssToInlineConverter/i18n/tr.ts +2 -14
  135. package/src/tool/cssToInlineConverter/i18n/zh.ts +2 -14
  136. package/src/tool/duplicateCssRemover/bibliography.astro +2 -10
  137. package/src/tool/duplicateCssRemover/bibliography.ts +7 -0
  138. package/src/tool/duplicateCssRemover/i18n/de.ts +2 -14
  139. package/src/tool/duplicateCssRemover/i18n/en.ts +4 -16
  140. package/src/tool/duplicateCssRemover/i18n/es.ts +4 -16
  141. package/src/tool/duplicateCssRemover/i18n/fr.ts +2 -14
  142. package/src/tool/duplicateCssRemover/i18n/id.ts +2 -14
  143. package/src/tool/duplicateCssRemover/i18n/it.ts +2 -14
  144. package/src/tool/duplicateCssRemover/i18n/ja.ts +2 -14
  145. package/src/tool/duplicateCssRemover/i18n/ko.ts +2 -14
  146. package/src/tool/duplicateCssRemover/i18n/nl.ts +2 -14
  147. package/src/tool/duplicateCssRemover/i18n/pl.ts +2 -14
  148. package/src/tool/duplicateCssRemover/i18n/pt.ts +2 -14
  149. package/src/tool/duplicateCssRemover/i18n/ru.ts +2 -14
  150. package/src/tool/duplicateCssRemover/i18n/sv.ts +2 -14
  151. package/src/tool/duplicateCssRemover/i18n/tr.ts +2 -14
  152. package/src/tool/duplicateCssRemover/i18n/zh.ts +2 -14
  153. package/src/tool/generadorSecurityTxt/bibliography.astro +2 -10
  154. package/src/tool/generadorSecurityTxt/bibliography.ts +7 -0
  155. package/src/tool/generadorSecurityTxt/component.astro +1 -2
  156. package/src/tool/generadorSecurityTxt/i18n/de.ts +2 -5
  157. package/src/tool/generadorSecurityTxt/i18n/en.ts +2 -5
  158. package/src/tool/generadorSecurityTxt/i18n/es.ts +2 -5
  159. package/src/tool/generadorSecurityTxt/i18n/fr.ts +2 -5
  160. package/src/tool/generadorSecurityTxt/i18n/id.ts +2 -5
  161. package/src/tool/generadorSecurityTxt/i18n/it.ts +2 -5
  162. package/src/tool/generadorSecurityTxt/i18n/ja.ts +2 -5
  163. package/src/tool/generadorSecurityTxt/i18n/ko.ts +2 -5
  164. package/src/tool/generadorSecurityTxt/i18n/nl.ts +2 -5
  165. package/src/tool/generadorSecurityTxt/i18n/pl.ts +2 -5
  166. package/src/tool/generadorSecurityTxt/i18n/pt.ts +2 -5
  167. package/src/tool/generadorSecurityTxt/i18n/ru.ts +2 -5
  168. package/src/tool/generadorSecurityTxt/i18n/sv.ts +2 -5
  169. package/src/tool/generadorSecurityTxt/i18n/tr.ts +2 -5
  170. package/src/tool/generadorSecurityTxt/i18n/zh.ts +2 -5
  171. package/src/tool/hashGenerator/bibliography.astro +2 -10
  172. package/src/tool/hashGenerator/bibliography.ts +7 -0
  173. package/src/tool/hashGenerator/i18n/de.ts +2 -5
  174. package/src/tool/hashGenerator/i18n/en.ts +2 -5
  175. package/src/tool/hashGenerator/i18n/es.ts +2 -5
  176. package/src/tool/hashGenerator/i18n/fr.ts +2 -5
  177. package/src/tool/hashGenerator/i18n/id.ts +2 -5
  178. package/src/tool/hashGenerator/i18n/it.ts +2 -5
  179. package/src/tool/hashGenerator/i18n/ja.ts +2 -5
  180. package/src/tool/hashGenerator/i18n/ko.ts +2 -5
  181. package/src/tool/hashGenerator/i18n/nl.ts +2 -5
  182. package/src/tool/hashGenerator/i18n/pl.ts +2 -5
  183. package/src/tool/hashGenerator/i18n/pt.ts +2 -5
  184. package/src/tool/hashGenerator/i18n/ru.ts +2 -5
  185. package/src/tool/hashGenerator/i18n/sv.ts +2 -5
  186. package/src/tool/hashGenerator/i18n/tr.ts +2 -5
  187. package/src/tool/hashGenerator/i18n/zh.ts +2 -5
  188. package/src/tool/inspectorCertificadosSsl/bibliography.astro +2 -10
  189. package/src/tool/inspectorCertificadosSsl/bibliography.ts +8 -0
  190. package/src/tool/inspectorCertificadosSsl/component.astro +4 -3
  191. package/src/tool/inspectorCertificadosSsl/i18n/de.ts +2 -6
  192. package/src/tool/inspectorCertificadosSsl/i18n/en.ts +2 -6
  193. package/src/tool/inspectorCertificadosSsl/i18n/es.ts +2 -6
  194. package/src/tool/inspectorCertificadosSsl/i18n/fr.ts +2 -6
  195. package/src/tool/inspectorCertificadosSsl/i18n/id.ts +2 -6
  196. package/src/tool/inspectorCertificadosSsl/i18n/it.ts +2 -6
  197. package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +2 -6
  198. package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +2 -6
  199. package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +2 -6
  200. package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +2 -6
  201. package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +2 -6
  202. package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +2 -6
  203. package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +2 -6
  204. package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +2 -6
  205. package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +2 -6
  206. package/src/tool/jsonFormatter/bibliography.astro +2 -10
  207. package/src/tool/jsonFormatter/bibliography.ts +8 -0
  208. package/src/tool/jsonFormatter/i18n/de.ts +2 -18
  209. package/src/tool/jsonFormatter/i18n/en.ts +2 -18
  210. package/src/tool/jsonFormatter/i18n/es.ts +2 -18
  211. package/src/tool/jsonFormatter/i18n/fr.ts +2 -18
  212. package/src/tool/jsonFormatter/i18n/id.ts +2 -18
  213. package/src/tool/jsonFormatter/i18n/it.ts +2 -18
  214. package/src/tool/jsonFormatter/i18n/ja.ts +2 -18
  215. package/src/tool/jsonFormatter/i18n/ko.ts +2 -18
  216. package/src/tool/jsonFormatter/i18n/nl.ts +2 -18
  217. package/src/tool/jsonFormatter/i18n/pl.ts +2 -18
  218. package/src/tool/jsonFormatter/i18n/pt.ts +2 -18
  219. package/src/tool/jsonFormatter/i18n/ru.ts +2 -18
  220. package/src/tool/jsonFormatter/i18n/sv.ts +2 -18
  221. package/src/tool/jsonFormatter/i18n/tr.ts +2 -18
  222. package/src/tool/jsonFormatter/i18n/zh.ts +2 -18
  223. package/src/tool/jwtDecoder/component.astro +2 -1
  224. package/src/tool/jwtDecoder/logic.test.ts +32 -0
  225. package/src/tool/keycode/bibliography.astro +2 -10
  226. package/src/tool/keycode/bibliography.ts +7 -0
  227. package/src/tool/keycode/i18n/de.ts +2 -14
  228. package/src/tool/keycode/i18n/en.ts +2 -14
  229. package/src/tool/keycode/i18n/es.ts +2 -14
  230. package/src/tool/keycode/i18n/fr.ts +2 -14
  231. package/src/tool/keycode/i18n/id.ts +2 -14
  232. package/src/tool/keycode/i18n/it.ts +2 -14
  233. package/src/tool/keycode/i18n/ja.ts +2 -14
  234. package/src/tool/keycode/i18n/ko.ts +2 -14
  235. package/src/tool/keycode/i18n/nl.ts +2 -14
  236. package/src/tool/keycode/i18n/pl.ts +2 -14
  237. package/src/tool/keycode/i18n/pt.ts +2 -14
  238. package/src/tool/keycode/i18n/ru.ts +2 -14
  239. package/src/tool/keycode/i18n/sv.ts +2 -14
  240. package/src/tool/keycode/i18n/tr.ts +2 -14
  241. package/src/tool/keycode/i18n/zh.ts +2 -14
  242. package/src/tool/llmCostCalculator/bibliography.astro +2 -10
  243. package/src/tool/llmCostCalculator/bibliography.ts +8 -0
  244. package/src/tool/llmCostCalculator/i18n/de.ts +2 -18
  245. package/src/tool/llmCostCalculator/i18n/en.ts +2 -18
  246. package/src/tool/llmCostCalculator/i18n/es.ts +2 -18
  247. package/src/tool/llmCostCalculator/i18n/fr.ts +2 -18
  248. package/src/tool/llmCostCalculator/i18n/id.ts +2 -18
  249. package/src/tool/llmCostCalculator/i18n/it.ts +2 -18
  250. package/src/tool/llmCostCalculator/i18n/ja.ts +2 -18
  251. package/src/tool/llmCostCalculator/i18n/ko.ts +2 -18
  252. package/src/tool/llmCostCalculator/i18n/nl.ts +2 -18
  253. package/src/tool/llmCostCalculator/i18n/pl.ts +2 -18
  254. package/src/tool/llmCostCalculator/i18n/pt.ts +2 -18
  255. package/src/tool/llmCostCalculator/i18n/ru.ts +2 -18
  256. package/src/tool/llmCostCalculator/i18n/sv.ts +2 -18
  257. package/src/tool/llmCostCalculator/i18n/tr.ts +2 -18
  258. package/src/tool/llmCostCalculator/i18n/zh.ts +2 -18
  259. package/src/tool/mobileMockupGenerator/bibliography.astro +2 -10
  260. package/src/tool/mobileMockupGenerator/bibliography.ts +6 -0
  261. package/src/tool/mobileMockupGenerator/i18n/de.ts +2 -4
  262. package/src/tool/mobileMockupGenerator/i18n/en.ts +2 -4
  263. package/src/tool/mobileMockupGenerator/i18n/es.ts +2 -4
  264. package/src/tool/mobileMockupGenerator/i18n/fr.ts +2 -4
  265. package/src/tool/mobileMockupGenerator/i18n/id.ts +2 -4
  266. package/src/tool/mobileMockupGenerator/i18n/it.ts +2 -4
  267. package/src/tool/mobileMockupGenerator/i18n/ja.ts +2 -4
  268. package/src/tool/mobileMockupGenerator/i18n/ko.ts +2 -4
  269. package/src/tool/mobileMockupGenerator/i18n/nl.ts +2 -4
  270. package/src/tool/mobileMockupGenerator/i18n/pl.ts +2 -1
  271. package/src/tool/mobileMockupGenerator/i18n/pt.ts +2 -4
  272. package/src/tool/mobileMockupGenerator/i18n/ru.ts +2 -4
  273. package/src/tool/mobileMockupGenerator/i18n/sv.ts +2 -4
  274. package/src/tool/mobileMockupGenerator/i18n/tr.ts +2 -4
  275. package/src/tool/mobileMockupGenerator/i18n/zh.ts +2 -4
  276. package/src/tool/musicalTypography/bibliography.astro +2 -10
  277. package/src/tool/musicalTypography/bibliography.ts +7 -0
  278. package/src/tool/musicalTypography/i18n/de.ts +2 -14
  279. package/src/tool/musicalTypography/i18n/en.ts +3 -15
  280. package/src/tool/musicalTypography/i18n/es.ts +3 -15
  281. package/src/tool/musicalTypography/i18n/fr.ts +2 -14
  282. package/src/tool/musicalTypography/i18n/id.ts +2 -14
  283. package/src/tool/musicalTypography/i18n/it.ts +2 -14
  284. package/src/tool/musicalTypography/i18n/ja.ts +2 -14
  285. package/src/tool/musicalTypography/i18n/ko.ts +2 -14
  286. package/src/tool/musicalTypography/i18n/nl.ts +2 -14
  287. package/src/tool/musicalTypography/i18n/pl.ts +2 -14
  288. package/src/tool/musicalTypography/i18n/pt.ts +2 -5
  289. package/src/tool/musicalTypography/i18n/ru.ts +2 -5
  290. package/src/tool/musicalTypography/i18n/sv.ts +2 -1
  291. package/src/tool/musicalTypography/i18n/tr.ts +2 -1
  292. package/src/tool/musicalTypography/i18n/zh.ts +2 -1
  293. package/src/tool/placeholderGenerator/bibliography.astro +2 -10
  294. package/src/tool/placeholderGenerator/bibliography.ts +7 -0
  295. package/src/tool/placeholderGenerator/i18n/de.ts +2 -14
  296. package/src/tool/placeholderGenerator/i18n/en.ts +4 -16
  297. package/src/tool/placeholderGenerator/i18n/es.ts +4 -16
  298. package/src/tool/placeholderGenerator/i18n/fr.ts +2 -14
  299. package/src/tool/placeholderGenerator/i18n/id.ts +2 -14
  300. package/src/tool/placeholderGenerator/i18n/it.ts +2 -14
  301. package/src/tool/placeholderGenerator/i18n/ja.ts +2 -14
  302. package/src/tool/placeholderGenerator/i18n/ko.ts +2 -14
  303. package/src/tool/placeholderGenerator/i18n/nl.ts +2 -14
  304. package/src/tool/placeholderGenerator/i18n/pl.ts +2 -14
  305. package/src/tool/placeholderGenerator/i18n/pt.ts +2 -14
  306. package/src/tool/placeholderGenerator/i18n/ru.ts +2 -14
  307. package/src/tool/placeholderGenerator/i18n/sv.ts +2 -14
  308. package/src/tool/placeholderGenerator/i18n/tr.ts +2 -14
  309. package/src/tool/placeholderGenerator/i18n/zh.ts +2 -14
  310. package/src/tool/promoteThisWebsite/asset-bindings.ts +73 -0
  311. package/src/tool/promoteThisWebsite/bibliography.astro +14 -0
  312. package/src/tool/promoteThisWebsite/bibliography.ts +14 -0
  313. package/src/tool/promoteThisWebsite/component.astro +136 -0
  314. package/src/tool/promoteThisWebsite/control-views.ts +83 -0
  315. package/src/tool/promoteThisWebsite/controller.ts +232 -0
  316. package/src/tool/promoteThisWebsite/dom-views.ts +322 -0
  317. package/src/tool/promoteThisWebsite/entry.ts +15 -0
  318. package/src/tool/promoteThisWebsite/evaluator.ts +9 -0
  319. package/src/tool/promoteThisWebsite/i18n/en.ts +111 -0
  320. package/src/tool/promoteThisWebsite/index.ts +11 -0
  321. package/src/tool/promoteThisWebsite/jjlmoya-overlay.png +0 -0
  322. package/src/tool/promoteThisWebsite/logic.test.ts +29 -0
  323. package/src/tool/promoteThisWebsite/logic.ts +108 -0
  324. package/src/tool/promoteThisWebsite/pixel-cat.png +0 -0
  325. package/src/tool/promoteThisWebsite/promote-this-website.css +322 -0
  326. package/src/tool/promoteThisWebsite/seo.astro +15 -0
  327. package/src/tool/promoteThisWebsite/storage.ts +28 -0
  328. package/src/tool/promoteThisWebsite/title-view.ts +206 -0
  329. package/src/tool/promoteThisWebsite/ui.ts +59 -0
  330. package/src/tool/promptLibrary/bibliography.astro +2 -10
  331. package/src/tool/promptLibrary/bibliography.ts +6 -0
  332. package/src/tool/promptLibrary/i18n/de.ts +2 -4
  333. package/src/tool/promptLibrary/i18n/en.ts +2 -4
  334. package/src/tool/promptLibrary/i18n/es.ts +2 -4
  335. package/src/tool/promptLibrary/i18n/fr.ts +2 -4
  336. package/src/tool/promptLibrary/i18n/id.ts +2 -4
  337. package/src/tool/promptLibrary/i18n/it.ts +2 -4
  338. package/src/tool/promptLibrary/i18n/ja.ts +2 -4
  339. package/src/tool/promptLibrary/i18n/ko.ts +2 -4
  340. package/src/tool/promptLibrary/i18n/nl.ts +2 -4
  341. package/src/tool/promptLibrary/i18n/pl.ts +2 -1
  342. package/src/tool/promptLibrary/i18n/pt.ts +2 -4
  343. package/src/tool/promptLibrary/i18n/ru.ts +2 -4
  344. package/src/tool/promptLibrary/i18n/sv.ts +2 -4
  345. package/src/tool/promptLibrary/i18n/tr.ts +2 -4
  346. package/src/tool/promptLibrary/i18n/zh.ts +2 -4
  347. package/src/tool/readabilityCalculator/bibliography.astro +2 -10
  348. package/src/tool/readabilityCalculator/bibliography.ts +7 -0
  349. package/src/tool/readabilityCalculator/i18n/de.ts +2 -5
  350. package/src/tool/readabilityCalculator/i18n/en.ts +2 -5
  351. package/src/tool/readabilityCalculator/i18n/es.ts +2 -5
  352. package/src/tool/readabilityCalculator/i18n/fr.ts +2 -5
  353. package/src/tool/readabilityCalculator/i18n/id.ts +2 -5
  354. package/src/tool/readabilityCalculator/i18n/it.ts +2 -5
  355. package/src/tool/readabilityCalculator/i18n/ja.ts +2 -5
  356. package/src/tool/readabilityCalculator/i18n/ko.ts +2 -5
  357. package/src/tool/readabilityCalculator/i18n/nl.ts +2 -5
  358. package/src/tool/readabilityCalculator/i18n/pl.ts +2 -1
  359. package/src/tool/readabilityCalculator/i18n/pt.ts +2 -5
  360. package/src/tool/readabilityCalculator/i18n/ru.ts +2 -5
  361. package/src/tool/readabilityCalculator/i18n/sv.ts +2 -5
  362. package/src/tool/readabilityCalculator/i18n/tr.ts +2 -5
  363. package/src/tool/readabilityCalculator/i18n/zh.ts +2 -5
  364. package/src/tool/serpPixelSimulator/controller.ts +1 -0
  365. package/src/tool/serpPixelSimulator/i18n/en.ts +2 -2
  366. package/src/tool/serpPixelSimulator/i18n/es.ts +2 -2
  367. package/src/tool/serpPixelSimulator/logic.test.ts +25 -0
  368. package/src/tool/svgSanitizer/bibliography.astro +2 -10
  369. package/src/tool/svgSanitizer/bibliography.ts +7 -0
  370. package/src/tool/svgSanitizer/i18n/de.ts +2 -5
  371. package/src/tool/svgSanitizer/i18n/en.ts +2 -5
  372. package/src/tool/svgSanitizer/i18n/es.ts +2 -5
  373. package/src/tool/svgSanitizer/i18n/fr.ts +2 -5
  374. package/src/tool/svgSanitizer/i18n/id.ts +2 -5
  375. package/src/tool/svgSanitizer/i18n/it.ts +2 -5
  376. package/src/tool/svgSanitizer/i18n/ja.ts +2 -5
  377. package/src/tool/svgSanitizer/i18n/ko.ts +2 -5
  378. package/src/tool/svgSanitizer/i18n/nl.ts +2 -5
  379. package/src/tool/svgSanitizer/i18n/pl.ts +2 -5
  380. package/src/tool/svgSanitizer/i18n/pt.ts +2 -1
  381. package/src/tool/svgSanitizer/i18n/ru.ts +2 -5
  382. package/src/tool/svgSanitizer/i18n/sv.ts +2 -5
  383. package/src/tool/svgSanitizer/i18n/tr.ts +2 -5
  384. package/src/tool/svgSanitizer/i18n/zh.ts +2 -5
  385. package/src/tool/svgToCss/bibliography.astro +2 -10
  386. package/src/tool/svgToCss/bibliography.ts +8 -0
  387. package/src/tool/svgToCss/i18n/de.ts +2 -18
  388. package/src/tool/svgToCss/i18n/en.ts +2 -18
  389. package/src/tool/svgToCss/i18n/es.ts +2 -18
  390. package/src/tool/svgToCss/i18n/fr.ts +2 -18
  391. package/src/tool/svgToCss/i18n/id.ts +2 -18
  392. package/src/tool/svgToCss/i18n/it.ts +2 -18
  393. package/src/tool/svgToCss/i18n/ja.ts +2 -18
  394. package/src/tool/svgToCss/i18n/ko.ts +2 -18
  395. package/src/tool/svgToCss/i18n/nl.ts +2 -18
  396. package/src/tool/svgToCss/i18n/pl.ts +2 -18
  397. package/src/tool/svgToCss/i18n/pt.ts +2 -18
  398. package/src/tool/svgToCss/i18n/ru.ts +2 -18
  399. package/src/tool/svgToCss/i18n/sv.ts +2 -18
  400. package/src/tool/svgToCss/i18n/tr.ts +2 -18
  401. package/src/tool/svgToCss/i18n/zh.ts +2 -18
  402. package/src/tool/urlCleaner/bibliography.astro +2 -10
  403. package/src/tool/urlCleaner/bibliography.ts +7 -0
  404. package/src/tool/urlCleaner/i18n/de.ts +2 -5
  405. package/src/tool/urlCleaner/i18n/en.ts +2 -5
  406. package/src/tool/urlCleaner/i18n/es.ts +2 -5
  407. package/src/tool/urlCleaner/i18n/fr.ts +2 -5
  408. package/src/tool/urlCleaner/i18n/id.ts +2 -5
  409. package/src/tool/urlCleaner/i18n/it.ts +2 -5
  410. package/src/tool/urlCleaner/i18n/ja.ts +2 -5
  411. package/src/tool/urlCleaner/i18n/ko.ts +2 -5
  412. package/src/tool/urlCleaner/i18n/nl.ts +2 -5
  413. package/src/tool/urlCleaner/i18n/pl.ts +2 -1
  414. package/src/tool/urlCleaner/i18n/pt.ts +2 -5
  415. package/src/tool/urlCleaner/i18n/ru.ts +2 -5
  416. package/src/tool/urlCleaner/i18n/sv.ts +2 -5
  417. package/src/tool/urlCleaner/i18n/tr.ts +2 -5
  418. package/src/tool/urlCleaner/i18n/zh.ts +2 -5
  419. package/src/tool/urlEncoderDecoder/bibliography.astro +2 -10
  420. package/src/tool/urlEncoderDecoder/bibliography.ts +7 -0
  421. package/src/tool/urlEncoderDecoder/i18n/de.ts +2 -14
  422. package/src/tool/urlEncoderDecoder/i18n/en.ts +3 -15
  423. package/src/tool/urlEncoderDecoder/i18n/es.ts +3 -15
  424. package/src/tool/urlEncoderDecoder/i18n/fr.ts +2 -14
  425. package/src/tool/urlEncoderDecoder/i18n/id.ts +2 -14
  426. package/src/tool/urlEncoderDecoder/i18n/it.ts +2 -14
  427. package/src/tool/urlEncoderDecoder/i18n/ja.ts +2 -14
  428. package/src/tool/urlEncoderDecoder/i18n/ko.ts +2 -14
  429. package/src/tool/urlEncoderDecoder/i18n/nl.ts +2 -14
  430. package/src/tool/urlEncoderDecoder/i18n/pl.ts +2 -14
  431. package/src/tool/urlEncoderDecoder/i18n/pt.ts +2 -14
  432. package/src/tool/urlEncoderDecoder/i18n/ru.ts +2 -14
  433. package/src/tool/urlEncoderDecoder/i18n/sv.ts +2 -14
  434. package/src/tool/urlEncoderDecoder/i18n/tr.ts +2 -14
  435. package/src/tool/urlEncoderDecoder/i18n/zh.ts +2 -14
  436. package/src/tool/utmGenerator/bibliography.astro +2 -10
  437. package/src/tool/utmGenerator/bibliography.ts +6 -0
  438. package/src/tool/utmGenerator/i18n/de.ts +2 -4
  439. package/src/tool/utmGenerator/i18n/en.ts +2 -4
  440. package/src/tool/utmGenerator/i18n/es.ts +2 -4
  441. package/src/tool/utmGenerator/i18n/fr.ts +2 -4
  442. package/src/tool/utmGenerator/i18n/id.ts +2 -4
  443. package/src/tool/utmGenerator/i18n/it.ts +2 -4
  444. package/src/tool/utmGenerator/i18n/ja.ts +2 -4
  445. package/src/tool/utmGenerator/i18n/ko.ts +2 -4
  446. package/src/tool/utmGenerator/i18n/nl.ts +2 -4
  447. package/src/tool/utmGenerator/i18n/pl.ts +2 -4
  448. package/src/tool/utmGenerator/i18n/pt.ts +2 -4
  449. package/src/tool/utmGenerator/i18n/ru.ts +2 -4
  450. package/src/tool/utmGenerator/i18n/sv.ts +2 -4
  451. package/src/tool/utmGenerator/i18n/tr.ts +2 -4
  452. package/src/tool/utmGenerator/i18n/zh.ts +2 -4
  453. package/src/tool/visualCssGridFlexboxGenerator/component.astro +1 -0
  454. package/src/tool/visualCssGridFlexboxGenerator/logic.test.ts +29 -0
  455. package/src/tool/visualCssGridFlexboxGenerator/workspace.ts +13 -1
  456. package/src/tools.ts +2 -1
@@ -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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Frequently Asked Questions',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'References and Documentation',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  seo: [
@@ -158,9 +146,9 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
158
146
  {
159
147
  type: 'list',
160
148
  items: [
161
- '<strong>Pixel Perfect Resolution:</strong> Native HTML5 Canvas ensures the exported canvas corresponds arithmetically to the coordinates stipulated by the user.',
149
+ '<strong>Pixel Perfect Resolution:</strong> Native HTML5 Canvas keeps the exported canvas aligned with the coordinates stipulated by the user.',
162
150
  '<strong>Typographic Autoscaling:</strong> In Automatic mode, the font size calculates the perimeter area and number of characters to elegantly fit the text without causing unwanted <em>overflows</em>.',
163
- '<strong>Hexadecimal Fusion:</strong> Bidirectional state control between native HTML ecosystem selectors and typed inputs, guaranteeing precise contrasts dictated by your Figma or Penpot UI/UX palette.',
151
+ '<strong>Hexadecimal Fusion:</strong> Bidirectional state control between native HTML ecosystem selectors and typed inputs, so you can match the contrast values from your Figma or Penpot UI/UX palette.',
164
152
  ],
165
153
  },
166
154
  {
@@ -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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Preguntas Frecuentes',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Referencias y Documentación',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/es/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/es/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  seo: [
@@ -158,9 +146,9 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
158
146
  {
159
147
  type: 'list',
160
148
  items: [
161
- '<strong>Resolución Pixel Perfect:</strong> HTML5 Canvas nativo asegura que el lienzo exportado corresponde aritméticamente a las coordenadas estipuladas por el usuario.',
149
+ '<strong>Resolución Pixel Perfect:</strong> HTML5 Canvas nativo mantiene el lienzo exportado alineado con las coordenadas indicadas por el usuario.',
162
150
  '<strong>Autoscaling Tipográfico:</strong> En el modo Automático, la dimensión de la fuente calcula el área perimetral y el número de caracteres para acoplar con elegancia el texto a lo largo y ancho sin provocar <em>overflows</em> indeseados.',
163
- '<strong>Fusión Hexadecimal:</strong> Control de estado bidireccional entre selectores de ecosistema nativo HTML e inputs mecanografiados garantizando contrastes precisos dictados por la paleta del UI/UX de tu Figma o Penpot original.',
151
+ '<strong>Fusión Hexadecimal:</strong> Control de estado bidireccional entre selectores de ecosistema nativo HTML e inputs mecanografiados para ajustar los contrastes de la paleta de tu Figma o Penpot original.',
164
152
  ],
165
153
  },
166
154
  {
@@ -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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Questions Fréquentes',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Références et Documentation',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/fr/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/fr/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Pertanyaan yang Sering Diajukan',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Referensi dan Dokumentasi',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Domande Frequenti',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Riferimenti e Documentazione',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/it/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/it/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'よくある質問',
107
108
  faq: faqData,
108
109
  bibliographyTitle: '参考資料',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/ja/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/ja/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: '자주 묻는 질문',
107
108
  faq: faqData,
108
109
  bibliographyTitle: '참고 자료 및 문서',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/ko/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/ko/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Veelgestelde vragen',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Referenties en documentatie',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/nl/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/nl/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Często Zadawane Pytania',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Referencje i Dokumentacja',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Perguntas Frequentes',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Referências e Documentação',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Часто Задаваемые Вопросы',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Ссылки и Документация',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Vanliga Frågor',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Referenser och Dokumentation',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: 'Sık Sorulan Sorular',
107
108
  faq: faqData,
108
109
  bibliographyTitle: 'Referanslar ve Belgeler',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  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 { PlaceholderGeneratorUI } from '../ui';
@@ -106,20 +107,7 @@ export const content: ToolLocaleContent<PlaceholderGeneratorUI> = {
106
107
  faqTitle: '常见问题',
107
108
  faq: faqData,
108
109
  bibliographyTitle: '参考资料和文档',
109
- bibliography: [
110
- {
111
- name: 'MDN Web Docs: HTMLCanvasElement.toDataURL()',
112
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL',
113
- },
114
- {
115
- name: 'MDN Web Docs: CanvasRenderingContext2D',
116
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D',
117
- },
118
- {
119
- name: 'W3C: HTML Canvas 2D Context',
120
- url: 'https://www.w3.org/TR/2dcontext/',
121
- },
122
- ],
110
+ bibliography,
123
111
  howTo: howToData,
124
112
  schemas: [faqSchema, howToSchema, appSchema],
125
113
  seo: [
@@ -0,0 +1,73 @@
1
+ import type { CompositionState } from './logic';
2
+ import type { RenderAssets } from './dom-views';
3
+ import { writeState } from './storage';
4
+ import type { PromoteThisWebsiteUI } from './ui';
5
+
6
+ function query<T extends HTMLElement>(root: HTMLElement, selector: string): T | null {
7
+ return root.querySelector(selector) as T | null;
8
+ }
9
+
10
+ export function loadImage(source: string): Promise<HTMLImageElement> {
11
+ return new Promise((resolve, reject) => {
12
+ const image = new Image();
13
+ if (source.startsWith('http')) image.crossOrigin = 'anonymous';
14
+ image.onload = () => resolve(image);
15
+ image.onerror = () => reject(new Error('Image could not be loaded'));
16
+ image.src = source;
17
+ });
18
+ }
19
+
20
+ export function loadDefaultMascot(): Promise<HTMLImageElement> {
21
+ return loadImage(new URL('./pixel-cat.png', import.meta.url).href);
22
+ }
23
+
24
+ export function readFile(file: File): Promise<string> {
25
+ return new Promise((resolve, reject) => {
26
+ const reader = new FileReader();
27
+ reader.onload = () => resolve(String(reader.result));
28
+ reader.onerror = () => reject(reader.error);
29
+ reader.readAsDataURL(file);
30
+ });
31
+ }
32
+
33
+ interface CanvasDownload {
34
+ root: HTMLElement;
35
+ state: CompositionState;
36
+ }
37
+
38
+ export function downloadCanvas(input: CanvasDownload): void {
39
+ const canvas = query<HTMLCanvasElement>(input.root, '#promote-canvas');
40
+ if (!canvas) return;
41
+ canvas.toBlob((blob) => {
42
+ if (!blob) return;
43
+ const link = document.createElement('a');
44
+ link.download = `promote-this-website-${input.state.format}.png`;
45
+ link.href = URL.createObjectURL(blob);
46
+ link.click();
47
+ URL.revokeObjectURL(link.href);
48
+ }, 'image/png');
49
+ }
50
+
51
+ interface PasteBinding {
52
+ root: HTMLElement;
53
+ stateRef: { current: CompositionState };
54
+ assets: RenderAssets;
55
+ ui: PromoteThisWebsiteUI;
56
+ draw: (root: HTMLElement, state: CompositionState, assets: RenderAssets, ui: PromoteThisWebsiteUI) => void;
57
+ setStatus: (root: HTMLElement, message: string) => void;
58
+ }
59
+
60
+ export function bindPaste(binding: PasteBinding): void {
61
+ document.addEventListener('paste', async (event) => {
62
+ const item = Array.from(event.clipboardData?.items || []).find((entry) => entry.type.startsWith('image/'));
63
+ if (!item) return;
64
+ event.preventDefault();
65
+ const file = item.getAsFile();
66
+ if (!file) return;
67
+ binding.assets.tool = await loadImage(await readFile(file));
68
+ binding.stateRef.current.active = 'tool';
69
+ writeState(binding.stateRef.current);
70
+ binding.draw(binding.root, binding.stateRef.current, binding.assets, binding.ui);
71
+ binding.setStatus(binding.root, binding.ui.pasted);
72
+ });
73
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
+ import { promoteThisWebsite } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props;
11
+ const content = await promoteThisWebsite.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SharedBibliography links={content.bibliography} />}
@@ -0,0 +1,14 @@
1
+ export const bibliography = [
2
+ {
3
+ name: 'jjlmoya resistance colour calculator',
4
+ url: 'https://www.jjlmoya.es/utilidades/calculadora-codigo-colores-resistencia/',
5
+ },
6
+ {
7
+ name: 'jjlmoya utilities index',
8
+ url: 'https://www.jjlmoya.es/utilidades/',
9
+ },
10
+ {
11
+ name: 'GameBob team and feline management board',
12
+ url: 'https://www.gamebob.dev/de/mannschaft/',
13
+ },
14
+ ];
@@ -0,0 +1,136 @@
1
+ ---
2
+ import './promote-this-website.css';
3
+ import type { PromoteThisWebsiteUI } from './ui';
4
+
5
+ interface Props {
6
+ ui: PromoteThisWebsiteUI;
7
+ }
8
+
9
+ const { ui } = Astro.props;
10
+ const uiData = JSON.stringify(ui);
11
+ const layerRows = [
12
+ ['background', 'backgroundLayer'],
13
+ ['tool', 'toolLayer'],
14
+ ['brand', 'logoLayer'],
15
+ ['mascot', 'mascotLayer'],
16
+ ['title', 'titleLayer'],
17
+ ] as const;
18
+ const formatOptions = [
19
+ ['panoramic', ui.panoramic],
20
+ ['instagram', ui.instagram],
21
+ ['square', ui.square],
22
+ ['story', ui.story],
23
+ ] as const;
24
+ const titleStyleOptions = [
25
+ ['paper', ui.titlePaper], ['ribbon', ui.titleRibbon], ['ink', ui.titleInk], ['poster', ui.titlePoster], ['ticket', ui.titleTicket],
26
+ ['marker', ui.titleMarker], ['split', ui.titleSplit], ['capsule', ui.titleCapsule], ['corner', ui.titleCorner], ['vertical', ui.titleVertical],
27
+ ] as const;
28
+ const brandOptions = [['jjlmoya.es', 'jjlmoya.es'], ['GameBob.dev', 'GameBob.dev']] as const;
29
+ const brandStyleOptions = [
30
+ ['plain', ui.brandPlain], ['plaque', ui.brandPlaque], ['ticket', ui.brandTicket], ['stamp', ui.brandStamp], ['neon', ui.brandNeon],
31
+ ['ribbon', ui.brandRibbon], ['corner', ui.brandCorner], ['pixel', ui.brandPixel], ['halo', ui.brandHalo], ['editorial', ui.brandEditorial],
32
+ ] as const;
33
+ ---
34
+
35
+ <div class="promote-tool" id="promote-this-website" data-ui={uiData}>
36
+ <aside class="promote-sidebar" aria-label={ui.urlLabel}>
37
+ <div class="promote-control-group">
38
+ <label for="promote-url">{ui.urlLabel}</label>
39
+ <div class="promote-inline-control">
40
+ <input id="promote-url" type="url" placeholder={ui.urlPlaceholder} />
41
+ <button id="promote-apply-url" type="button">{ui.applyUrl}</button>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="promote-control-grid">
46
+ <label for="promote-format-trigger">{ui.formatLabel}</label>
47
+ <div class="promote-custom-select" data-promote-select="format" data-value="panoramic">
48
+ <button id="promote-format-trigger" class="promote-select-trigger" type="button" aria-haspopup="listbox" aria-expanded="false">
49
+ <span data-select-label>{ui.panoramic}</span>
50
+ </button>
51
+ <div class="promote-select-menu" role="listbox" tabindex="-1" hidden>
52
+ {formatOptions.map(([value, label]) => <button class="promote-select-option" type="button" role="option" data-value={value} aria-selected={value === 'panoramic'}>{label}</button>)}
53
+ </div>
54
+ </div>
55
+ <label for="promote-title">{ui.titleLabel}</label>
56
+ <input id="promote-title" type="text" placeholder={ui.titlePlaceholder} />
57
+ <label for="promote-title-size">{ui.titleSizeLabel}</label>
58
+ <input id="promote-title-size" type="range" min="0.45" max="1" step="0.01" value="1" aria-label={ui.titleSizeLabel} />
59
+ <label for="promote-title-box-size">{ui.titleBoxSizeLabel}</label>
60
+ <input id="promote-title-box-size" type="range" min="0.5" max="2.4" step="0.01" value="1" aria-label={ui.titleBoxSizeLabel} />
61
+ <label for="promote-title-style-trigger">{ui.titleStyleLabel}</label>
62
+ <div class="promote-custom-select" data-promote-select="title-style" data-value="paper">
63
+ <button id="promote-title-style-trigger" class="promote-select-trigger" type="button" aria-haspopup="listbox" aria-expanded="false">
64
+ <span data-select-label>{ui.titlePaper}</span>
65
+ </button>
66
+ <div class="promote-select-menu" role="listbox" tabindex="-1" hidden>
67
+ {titleStyleOptions.map(([value, label]) => <button class="promote-select-option" type="button" role="option" data-value={value} aria-selected={value === 'paper'}>{label}</button>)}
68
+ </div>
69
+ </div>
70
+ <label for="promote-brand-trigger">{ui.brandLabel}</label>
71
+ <div class="promote-custom-select" data-promote-select="brand" data-value="jjlmoya.es">
72
+ <button id="promote-brand-trigger" class="promote-select-trigger" type="button" aria-haspopup="listbox" aria-expanded="false">
73
+ <span data-select-label>jjlmoya.es</span>
74
+ </button>
75
+ <div class="promote-select-menu" role="listbox" tabindex="-1" hidden>
76
+ {brandOptions.map(([value, label]) => <button class="promote-select-option" type="button" role="option" data-value={value} aria-selected={value === 'jjlmoya.es'}>{label}</button>)}
77
+ </div>
78
+ </div>
79
+ <label for="promote-brand-style-trigger">{ui.brandStyleLabel}</label>
80
+ <div class="promote-custom-select" data-promote-select="brand-style" data-value="plain">
81
+ <button id="promote-brand-style-trigger" class="promote-select-trigger" type="button" aria-haspopup="listbox" aria-expanded="false">
82
+ <span data-select-label>{ui.brandPlain}</span>
83
+ </button>
84
+ <div class="promote-select-menu" role="listbox" tabindex="-1" hidden>
85
+ {brandStyleOptions.map(([value, label]) => <button class="promote-select-option" type="button" role="option" data-value={value} aria-selected={value === 'plain'}>{label}</button>)}
86
+ </div>
87
+ </div>
88
+ </div>
89
+
90
+ <details class="promote-advanced">
91
+ <summary>{ui.advancedLabel}</summary>
92
+ <fieldset class="promote-fieldset">
93
+ <legend>{ui.assetsLabel}</legend>
94
+ <label>{ui.backgroundLabel}<input id="promote-background-file" type="file" accept="image/*" /></label>
95
+ <label>{ui.toolLabel}<input id="promote-tool-file" type="file" accept="image/*" /></label>
96
+ <label>{ui.logoLabel}<input id="promote-brand-file" type="file" accept="image/*" /></label>
97
+ <label>{ui.mascotLabel}<input id="promote-mascot-file" type="file" accept="image/*" /></label>
98
+ </fieldset>
99
+
100
+ <fieldset class="promote-fieldset promote-layers">
101
+ <legend>{ui.layersLabel}</legend>
102
+ {layerRows.map(([key, labelKey]) => (
103
+ <label class="promote-layer" for={`promote-${key}-visible`}>
104
+ <span><input id={`promote-${key}-visible`} type="checkbox" checked /> {ui[labelKey]}</span>
105
+ <input id={`promote-${key}-scale`} type="range" min="0.35" max="3.5" step="0.01" value="1" aria-label={`${ui[labelKey]} scale`} />
106
+ </label>
107
+ ))}
108
+ </fieldset>
109
+
110
+ </details>
111
+
112
+ <div class="promote-actions">
113
+ <button id="promote-reset" type="button">{ui.reset}</button>
114
+ <button id="promote-download" class="promote-primary" type="button">{ui.download}</button>
115
+ </div>
116
+ <p class="promote-status" id="promote-status" aria-live="polite">{ui.canvasHint}</p>
117
+ </aside>
118
+
119
+ <main class="promote-stage">
120
+ <div class="promote-stage-meta">
121
+ <span id="promote-active">{ui.activeLayer}: {ui.toolLayer}</span>
122
+ <span id="promote-size">1536 × 1024</span>
123
+ </div>
124
+ <div class="promote-canvas-wrap">
125
+ <canvas id="promote-canvas" aria-label={ui.canvasHint}></canvas>
126
+ </div>
127
+ </main>
128
+ </div>
129
+
130
+ <script>
131
+ import { mountPromoteThisWebsite } from './controller';
132
+ import type { PromoteThisWebsiteUI } from './ui';
133
+
134
+ const root = document.getElementById('promote-this-website');
135
+ if (root) mountPromoteThisWebsite(root, JSON.parse(root.dataset.ui || '{}') as PromoteThisWebsiteUI);
136
+ </script>