@jjlmoya/utils-creative 1.26.0 → 1.28.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 (133) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/de.ts +2 -2
  3. package/src/category/i18n/en.ts +2 -2
  4. package/src/category/i18n/es.ts +2 -2
  5. package/src/category/i18n/fr.ts +2 -2
  6. package/src/category/i18n/id.ts +2 -2
  7. package/src/category/i18n/it.ts +2 -2
  8. package/src/category/i18n/ja.ts +2 -2
  9. package/src/category/i18n/ko.ts +2 -2
  10. package/src/category/i18n/nl.ts +2 -2
  11. package/src/category/i18n/pl.ts +2 -2
  12. package/src/category/i18n/pt.ts +2 -2
  13. package/src/category/i18n/ru.ts +2 -2
  14. package/src/category/i18n/sv.ts +2 -2
  15. package/src/category/i18n/tr.ts +2 -2
  16. package/src/category/i18n/zh.ts +2 -2
  17. package/src/category/seo.astro +1 -1
  18. package/src/components/PreviewNavSidebar.astro +1 -1
  19. package/src/components/PreviewToolbar.astro +1 -1
  20. package/src/env.d.ts +1 -1
  21. package/src/pages/index.astro +1 -1
  22. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  23. package/src/tests/category_seo_quality.test.ts +74 -0
  24. package/src/tests/faq_count.test.ts +1 -1
  25. package/src/tests/mocks/astro_mock.js +1 -1
  26. package/src/tests/no_h1_in_components.test.ts +1 -1
  27. package/src/tests/seo_parity.test.ts +2 -2
  28. package/src/tests/seo_translation_completeness.test.ts +75 -0
  29. package/src/tests/seo_wellformed_export.test.ts +65 -0
  30. package/src/tests/tool_validation.test.ts +17 -17
  31. package/src/tool/bead-pattern-generator/bibliography.astro +8 -8
  32. package/src/tool/bead-pattern-generator/i18n/de.ts +111 -111
  33. package/src/tool/bead-pattern-generator/i18n/en.ts +111 -111
  34. package/src/tool/bead-pattern-generator/i18n/es.ts +104 -104
  35. package/src/tool/bead-pattern-generator/i18n/fr.ts +111 -111
  36. package/src/tool/bead-pattern-generator/i18n/id.ts +111 -111
  37. package/src/tool/bead-pattern-generator/i18n/it.ts +111 -111
  38. package/src/tool/bead-pattern-generator/i18n/ja.ts +111 -111
  39. package/src/tool/bead-pattern-generator/i18n/ko.ts +111 -111
  40. package/src/tool/bead-pattern-generator/i18n/nl.ts +111 -111
  41. package/src/tool/bead-pattern-generator/i18n/pl.ts +111 -111
  42. package/src/tool/bead-pattern-generator/i18n/pt.ts +111 -111
  43. package/src/tool/bead-pattern-generator/i18n/ru.ts +111 -111
  44. package/src/tool/bead-pattern-generator/i18n/sv.ts +111 -111
  45. package/src/tool/bead-pattern-generator/i18n/tr.ts +111 -111
  46. package/src/tool/bead-pattern-generator/i18n/zh.ts +111 -111
  47. package/src/tool/bead-pattern-generator/seo.astro +19 -19
  48. package/src/tool/dice-roller/bibliography.astro +8 -8
  49. package/src/tool/dice-roller/i18n/de.ts +134 -134
  50. package/src/tool/dice-roller/i18n/en.ts +134 -134
  51. package/src/tool/dice-roller/i18n/es.ts +125 -125
  52. package/src/tool/dice-roller/i18n/fr.ts +134 -134
  53. package/src/tool/dice-roller/i18n/id.ts +134 -134
  54. package/src/tool/dice-roller/i18n/it.ts +134 -134
  55. package/src/tool/dice-roller/i18n/ja.ts +134 -134
  56. package/src/tool/dice-roller/i18n/ko.ts +134 -134
  57. package/src/tool/dice-roller/i18n/nl.ts +134 -134
  58. package/src/tool/dice-roller/i18n/pl.ts +134 -134
  59. package/src/tool/dice-roller/i18n/pt.ts +134 -134
  60. package/src/tool/dice-roller/i18n/ru.ts +134 -134
  61. package/src/tool/dice-roller/i18n/sv.ts +134 -134
  62. package/src/tool/dice-roller/i18n/tr.ts +134 -134
  63. package/src/tool/dice-roller/i18n/zh.ts +134 -134
  64. package/src/tool/dice-roller/seo.astro +15 -15
  65. package/src/tool/excuse-generator/bibliography.astro +8 -8
  66. package/src/tool/excuse-generator/i18n/de.ts +120 -120
  67. package/src/tool/excuse-generator/i18n/en.ts +120 -120
  68. package/src/tool/excuse-generator/i18n/es.ts +118 -118
  69. package/src/tool/excuse-generator/i18n/fr.ts +120 -120
  70. package/src/tool/excuse-generator/i18n/id.ts +120 -120
  71. package/src/tool/excuse-generator/i18n/it.ts +120 -120
  72. package/src/tool/excuse-generator/i18n/ja.ts +120 -120
  73. package/src/tool/excuse-generator/i18n/ko.ts +120 -120
  74. package/src/tool/excuse-generator/i18n/nl.ts +120 -120
  75. package/src/tool/excuse-generator/i18n/pl.ts +120 -120
  76. package/src/tool/excuse-generator/i18n/pt.ts +120 -120
  77. package/src/tool/excuse-generator/i18n/ru.ts +120 -120
  78. package/src/tool/excuse-generator/i18n/sv.ts +120 -120
  79. package/src/tool/excuse-generator/i18n/tr.ts +120 -120
  80. package/src/tool/excuse-generator/i18n/zh.ts +120 -120
  81. package/src/tool/excuse-generator/seo.astro +15 -15
  82. package/src/tool/fortune-cookie/bibliography.astro +8 -8
  83. package/src/tool/fortune-cookie/i18n/de.ts +124 -124
  84. package/src/tool/fortune-cookie/i18n/en.ts +124 -124
  85. package/src/tool/fortune-cookie/i18n/es.ts +125 -125
  86. package/src/tool/fortune-cookie/i18n/fr.ts +124 -124
  87. package/src/tool/fortune-cookie/i18n/id.ts +124 -124
  88. package/src/tool/fortune-cookie/i18n/it.ts +124 -124
  89. package/src/tool/fortune-cookie/i18n/ja.ts +124 -124
  90. package/src/tool/fortune-cookie/i18n/ko.ts +124 -124
  91. package/src/tool/fortune-cookie/i18n/nl.ts +124 -124
  92. package/src/tool/fortune-cookie/i18n/pl.ts +124 -124
  93. package/src/tool/fortune-cookie/i18n/pt.ts +124 -124
  94. package/src/tool/fortune-cookie/i18n/ru.ts +124 -124
  95. package/src/tool/fortune-cookie/i18n/sv.ts +124 -124
  96. package/src/tool/fortune-cookie/i18n/tr.ts +124 -124
  97. package/src/tool/fortune-cookie/i18n/zh.ts +124 -124
  98. package/src/tool/fortune-cookie/seo.astro +15 -15
  99. package/src/tool/synesthesia-painter/bibliography.astro +8 -8
  100. package/src/tool/synesthesia-painter/i18n/de.ts +118 -118
  101. package/src/tool/synesthesia-painter/i18n/en.ts +118 -118
  102. package/src/tool/synesthesia-painter/i18n/es.ts +110 -110
  103. package/src/tool/synesthesia-painter/i18n/fr.ts +118 -118
  104. package/src/tool/synesthesia-painter/i18n/id.ts +118 -118
  105. package/src/tool/synesthesia-painter/i18n/it.ts +118 -118
  106. package/src/tool/synesthesia-painter/i18n/ja.ts +118 -118
  107. package/src/tool/synesthesia-painter/i18n/ko.ts +118 -118
  108. package/src/tool/synesthesia-painter/i18n/nl.ts +118 -118
  109. package/src/tool/synesthesia-painter/i18n/pl.ts +118 -118
  110. package/src/tool/synesthesia-painter/i18n/pt.ts +118 -118
  111. package/src/tool/synesthesia-painter/i18n/ru.ts +118 -118
  112. package/src/tool/synesthesia-painter/i18n/sv.ts +118 -118
  113. package/src/tool/synesthesia-painter/i18n/tr.ts +118 -118
  114. package/src/tool/synesthesia-painter/i18n/zh.ts +118 -118
  115. package/src/tool/synesthesia-painter/seo.astro +15 -15
  116. package/src/tool/zalgo-generator/bibliography.astro +8 -8
  117. package/src/tool/zalgo-generator/i18n/de.ts +109 -109
  118. package/src/tool/zalgo-generator/i18n/en.ts +109 -109
  119. package/src/tool/zalgo-generator/i18n/es.ts +109 -109
  120. package/src/tool/zalgo-generator/i18n/fr.ts +109 -109
  121. package/src/tool/zalgo-generator/i18n/id.ts +109 -109
  122. package/src/tool/zalgo-generator/i18n/it.ts +109 -109
  123. package/src/tool/zalgo-generator/i18n/ja.ts +109 -109
  124. package/src/tool/zalgo-generator/i18n/ko.ts +109 -109
  125. package/src/tool/zalgo-generator/i18n/nl.ts +109 -109
  126. package/src/tool/zalgo-generator/i18n/pl.ts +109 -109
  127. package/src/tool/zalgo-generator/i18n/pt.ts +109 -109
  128. package/src/tool/zalgo-generator/i18n/ru.ts +109 -109
  129. package/src/tool/zalgo-generator/i18n/sv.ts +109 -109
  130. package/src/tool/zalgo-generator/i18n/tr.ts +109 -109
  131. package/src/tool/zalgo-generator/i18n/zh.ts +109 -109
  132. package/src/tool/zalgo-generator/seo.astro +15 -15
  133. package/src/types.ts +1 -1
@@ -1,101 +1,101 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import { bibliography } from '../bibliography';
3
- import type { BeadPatternGeneratorLocaleContent } from '../index';
4
-
5
- const slug = 'generador-patrones-cuentas';
6
- const title = 'Generador de Patrones';
7
- const description = 'Crea esquemas de pixel art y cuentas para Miyuki o Hama desde tus fotos.';
8
-
9
- const faq: BeadPatternGeneratorLocaleContent['faq'] = [
10
- { question: '¿Qué es la cuantización de color en patrones?', answer: 'Es el proceso de reducir los miles de colores de una foto a solo unos pocos que correspondan con los colores reales de las cuentas (ej. Miyuki o Hama). Usamos algoritmos inteligentes para mantener el parecido visual con la mínima paleta posible.' },
11
- { question: '¿Puedo usar este patrón para punto de cruz?', answer: 'Sí, el generador crea una malla cuadriculada (gráfico) que es perfectamente compatible con el punto de cruz. Solo debes elegir un tamaño de rejilla que se adapte a tu tela (Aida 14, 18, etc.).' },
12
- { question: '¿Qué diferencia hay entre Miyuki y Hama Beads?', answer: 'Las Miyuki Delica son cuentas de cristal muy pequeñas y precisas para joyería. Los Hama Beads son de plástico y se funden con plancha. Nuestra herramienta permite ajustar la relación de aspecto para que el patrón no se deforme según el material usado.' },
13
- { question: '¿Cómo funciona el algoritmo de tramado (Dithering)?', answer: 'El tramado crea la ilusión de más colores mezclando píxeles de colores diferentes en patrones espaciados. Ayuda a que las degradaciones de color se vean más suaves incluso con una paleta limitada de cuentas.' },
14
- ];
15
-
16
- const howTo: BeadPatternGeneratorLocaleContent['howTo'] = [
17
- { name: 'Subir una imagen clara', text: 'Selecciona una foto con buen contraste y pocos detalles pequeños para que el patrón sea más fácil de seguir.' },
18
- { name: 'Ajustar el tamaño de la rejilla', text: 'Define cuántas cuentas de ancho y alto tendrá tu pieza final. Recuerda que a más tamaño, más detalle pero más dificultad.' },
19
- { name: 'Optimizar la paleta de colores', text: 'Reduce el número de colores hasta que coincidan con las cuentas que tienes disponibles en tu kit de manualidades.' },
20
- { name: 'Exportar el esquema guía', text: 'Genera el patrón final con códigos de color para usarlo como referencia mientras montas tus cuentas en la placa o el hilo.' },
21
- ];
22
-
23
- const faqSchema: WithContext<FAQPage> = {
24
- '@context': 'https://schema.org',
25
- '@type': 'FAQPage',
26
- mainEntity: faq.map((item) => ({
27
- '@type': 'Question',
28
- name: item.question,
29
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
30
- })),
31
- };
32
-
33
- const howToSchema: WithContext<HowTo> = {
34
- '@context': 'https://schema.org',
35
- '@type': 'HowTo',
36
- name: title,
37
- description,
38
- step: howTo.map((step) => ({
39
- '@type': 'HowToStep',
40
- name: step.name,
41
- text: step.text,
42
- })),
43
- };
44
-
45
- const appSchema: WithContext<SoftwareApplication> = {
46
- '@context': 'https://schema.org',
47
- '@type': 'SoftwareApplication',
48
- name: title,
49
- description,
50
- applicationCategory: 'UtilitiesApplication',
51
- operatingSystem: 'Web',
52
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
53
- inLanguage: 'es',
54
- };
55
-
56
- export const content: BeadPatternGeneratorLocaleContent = {
57
- slug,
58
- title,
59
- description,
60
- faqTitle: 'Preguntas Frecuentes',
61
- ui: {
62
- title: 'Laboratorio de Patrones',
63
- subtitle: 'Ingeniería de color para tus manos',
64
- description: 'De fotografía a esquema de cuentas.',
65
- gridSizeLabel: 'Tamaño (Ancho)',
66
- colorCountLabel: 'Colores',
67
- optionsLabel: 'Opciones',
68
- rulersLabel: 'Reglas',
69
- symbolsTooltip: 'Patrón Sorpresa',
70
- symbolsLabel: 'Símbolos',
71
- downloadBtn: 'Descargar',
72
- uploadTitle: 'Carga tu Visión',
73
- uploadSubtitle: 'y deja que la magia digital ocurra',
74
- paletteTitle: 'ADN Cromático',
75
- reuploadBtn: 'Cambiar Imagen',
76
- tunnelVisionTitle: 'Visión de Túnel',
77
- tunnelVisionSubtitle: 'Tu asistente de precisión fila por fila.',
78
- uploadLabel: 'Sube tu foto',
79
- pixelateBtn: 'Generar Patrón',
80
- faqTitle: 'FAQ',
81
- bibliographyTitle: 'Referencias'
82
- },
83
- seo: [
84
- { type: 'title', text: 'Alquimia Digital: Transmuta Píxeles en Arte Tangible', level: 2 },
85
- { type: 'paragraph', html: 'Bienvenido al <strong>Estudio Definitivo de Patrones</strong>. Un motor de <em>inteligencia cromática</em> diseñado para arquitectos del Pixel Art, maestros del Miyuki y visionarios del punto de cruz. Tu puente entre lo digital y lo artesanal.' },
86
- { type: 'card', icon: 'mdi:grid', title: 'La Retícula Inteligente', html: 'Nuestro algoritmo de <strong>submuestreo espacial</strong> no solo "encoge" tu imagen. Analiza la estructura visual para mapear grupos de píxeles complejos a celdas individuales, preservando la integridad de siluetas y bordes como un dibujante experto.' },
87
- { type: 'card', icon: 'mdi:palette', title: 'Cuantización de Color K Means', html: 'Implementamos una variante del algoritmo <strong>K-Means Clustering</strong> que encuentra matemáticamente los tonos "centroides" de tu imagen. Fidelidad visual asombrosa con una paleta minimalista de 12, 24 o 32 colores.' },
88
- { type: 'title', text: 'Maestría en 3 Pasos', level: 3 },
89
- { type: 'card', icon: 'mdi:image-search', title: 'La Selección Perfecta', html: 'Busca <strong>alto contraste</strong>, iluminación dramática y formas icónicas. Los retratos con fondo limpio, logotipos y arte vectorial se traducen maravillosamente.' },
90
- { type: 'card', icon: 'mdi:ruler', title: 'Calibración Dimensional', html: '<strong>Miyuki Delica:</strong> 50 cuentas ≈ 8cm · <strong>Hama Midi:</strong> 50 cuentas ≈ 25cm · <strong>Punto de Cruz:</strong> 1 celda = 1 puntada.' },
91
- { type: 'card', icon: 'mdi:eye-check', title: 'Ejecución Zen (Modo Visión de Túnel)', html: 'Nuestro sistema <strong>Visión de Túnel</strong> actúa como tu asistente personal, oscureciendo el ruido visual y resaltando quirúrgicamente solo la fila activa. Concentración absoluta.' },
92
- { type: 'title', text: 'Lienzos Infinitos', level: 3 },
93
- { type: 'list', items: [
94
- '<strong>Joyería Textil:</strong> Patrones intrincados para telares y brazaletes geométricos.',
95
- '<strong>Cross-Stitch:</strong> Esquemas modernos listos para ser bordados pixel a pixel.',
96
- '<strong>Mosaicos:</strong> Murales de gran escala usando teselas cerámicas simplificadas.',
97
- '<strong>Retro Gaming:</strong> Assets y sprites con estética 8-bit auténtica en segundos.',
98
- ]},
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { BeadPatternGeneratorLocaleContent } from '../index';
4
+
5
+ const slug = 'generador-patrones-cuentas';
6
+ const title = 'Generador de Patrones';
7
+ const description = 'Crea esquemas de pixel art y cuentas para Miyuki o Hama desde tus fotos.';
8
+
9
+ const faq: BeadPatternGeneratorLocaleContent['faq'] = [
10
+ { question: '¿Qué es la cuantización de color en patrones?', answer: 'Es el proceso de reducir los miles de colores de una foto a solo unos pocos que correspondan con los colores reales de las cuentas (ej. Miyuki o Hama). Usamos algoritmos inteligentes para mantener el parecido visual con la mínima paleta posible.' },
11
+ { question: '¿Puedo usar este patrón para punto de cruz?', answer: 'Sí, el generador crea una malla cuadriculada (gráfico) que es perfectamente compatible con el punto de cruz. Solo debes elegir un tamaño de rejilla que se adapte a tu tela (Aida 14, 18, etc.).' },
12
+ { question: '¿Qué diferencia hay entre Miyuki y Hama Beads?', answer: 'Las Miyuki Delica son cuentas de cristal muy pequeñas y precisas para joyería. Los Hama Beads son de plástico y se funden con plancha. Nuestra herramienta permite ajustar la relación de aspecto para que el patrón no se deforme según el material usado.' },
13
+ { question: '¿Cómo funciona el algoritmo de tramado (Dithering)?', answer: 'El tramado crea la ilusión de más colores mezclando píxeles de colores diferentes en patrones espaciados. Ayuda a que las degradaciones de color se vean más suaves incluso con una paleta limitada de cuentas.' },
14
+ ];
15
+
16
+ const howTo: BeadPatternGeneratorLocaleContent['howTo'] = [
17
+ { name: 'Subir una imagen clara', text: 'Selecciona una foto con buen contraste y pocos detalles pequeños para que el patrón sea más fácil de seguir.' },
18
+ { name: 'Ajustar el tamaño de la rejilla', text: 'Define cuántas cuentas de ancho y alto tendrá tu pieza final. Recuerda que a más tamaño, más detalle pero más dificultad.' },
19
+ { name: 'Optimizar la paleta de colores', text: 'Reduce el número de colores hasta que coincidan con las cuentas que tienes disponibles en tu kit de manualidades.' },
20
+ { name: 'Exportar el esquema guía', text: 'Genera el patrón final con códigos de color para usarlo como referencia mientras montas tus cuentas en la placa o el hilo.' },
21
+ ];
22
+
23
+ const faqSchema: WithContext<FAQPage> = {
24
+ '@context': 'https://schema.org',
25
+ '@type': 'FAQPage',
26
+ mainEntity: faq.map((item) => ({
27
+ '@type': 'Question',
28
+ name: item.question,
29
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
30
+ })),
31
+ };
32
+
33
+ const howToSchema: WithContext<HowTo> = {
34
+ '@context': 'https://schema.org',
35
+ '@type': 'HowTo',
36
+ name: title,
37
+ description,
38
+ step: howTo.map((step) => ({
39
+ '@type': 'HowToStep',
40
+ name: step.name,
41
+ text: step.text,
42
+ })),
43
+ };
44
+
45
+ const appSchema: WithContext<SoftwareApplication> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'SoftwareApplication',
48
+ name: title,
49
+ description,
50
+ applicationCategory: 'UtilitiesApplication',
51
+ operatingSystem: 'Web',
52
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
53
+ inLanguage: 'es',
54
+ };
55
+
56
+ export const content: BeadPatternGeneratorLocaleContent = {
57
+ slug,
58
+ title,
59
+ description,
60
+ faqTitle: 'Preguntas Frecuentes',
61
+ ui: {
62
+ title: 'Laboratorio de Patrones',
63
+ subtitle: 'Ingeniería de color para tus manos',
64
+ description: 'De fotografía a esquema de cuentas.',
65
+ gridSizeLabel: 'Tamaño (Ancho)',
66
+ colorCountLabel: 'Colores',
67
+ optionsLabel: 'Opciones',
68
+ rulersLabel: 'Reglas',
69
+ symbolsTooltip: 'Patrón Sorpresa',
70
+ symbolsLabel: 'Símbolos',
71
+ downloadBtn: 'Descargar',
72
+ uploadTitle: 'Carga tu Visión',
73
+ uploadSubtitle: 'y deja que la magia digital ocurra',
74
+ paletteTitle: 'ADN Cromático',
75
+ reuploadBtn: 'Cambiar Imagen',
76
+ tunnelVisionTitle: 'Visión de Túnel',
77
+ tunnelVisionSubtitle: 'Tu asistente de precisión fila por fila.',
78
+ uploadLabel: 'Sube tu foto',
79
+ pixelateBtn: 'Generar Patrón',
80
+ faqTitle: 'FAQ',
81
+ bibliographyTitle: 'Referencias'
82
+ },
83
+ seo: [
84
+ { type: 'title', text: 'Alquimia Digital: Transmuta Píxeles en Arte Tangible', level: 2 },
85
+ { type: 'paragraph', html: 'Bienvenido al <strong>Estudio Definitivo de Patrones</strong>. Un motor de <em>inteligencia cromática</em> diseñado para arquitectos del Pixel Art, maestros del Miyuki y visionarios del punto de cruz. Tu puente entre lo digital y lo artesanal.' },
86
+ { type: 'card', icon: 'mdi:grid', title: 'La Retícula Inteligente', html: 'Nuestro algoritmo de <strong>submuestreo espacial</strong> no solo "encoge" tu imagen. Analiza la estructura visual para mapear grupos de píxeles complejos a celdas individuales, preservando la integridad de siluetas y bordes como un dibujante experto.' },
87
+ { type: 'card', icon: 'mdi:palette', title: 'Cuantización de Color K Means', html: 'Implementamos una variante del algoritmo <strong>K-Means Clustering</strong> que encuentra matemáticamente los tonos "centroides" de tu imagen. Fidelidad visual asombrosa con una paleta minimalista de 12, 24 o 32 colores.' },
88
+ { type: 'title', text: 'Maestría en 3 Pasos', level: 3 },
89
+ { type: 'card', icon: 'mdi:image-search', title: 'La Selección Perfecta', html: 'Busca <strong>alto contraste</strong>, iluminación dramática y formas icónicas. Los retratos con fondo limpio, logotipos y arte vectorial se traducen maravillosamente.' },
90
+ { type: 'card', icon: 'mdi:ruler', title: 'Calibración Dimensional', html: '<strong>Miyuki Delica:</strong> 50 cuentas ≈ 8cm · <strong>Hama Midi:</strong> 50 cuentas ≈ 25cm · <strong>Punto de Cruz:</strong> 1 celda = 1 puntada.' },
91
+ { type: 'card', icon: 'mdi:eye-check', title: 'Ejecución Zen (Modo Visión de Túnel)', html: 'Nuestro sistema <strong>Visión de Túnel</strong> actúa como tu asistente personal, oscureciendo el ruido visual y resaltando quirúrgicamente solo la fila activa. Concentración absoluta.' },
92
+ { type: 'title', text: 'Lienzos Infinitos', level: 3 },
93
+ { type: 'list', items: [
94
+ '<strong>Joyería Textil:</strong> Patrones intrincados para telares y brazaletes geométricos.',
95
+ '<strong>Cross-Stitch:</strong> Esquemas modernos listos para ser bordados pixel a pixel.',
96
+ '<strong>Mosaicos:</strong> Murales de gran escala usando teselas cerámicas simplificadas.',
97
+ '<strong>Retro Gaming:</strong> Assets y sprites con estética 8-bit auténtica en segundos.',
98
+ ]},
99
99
  { type: 'stats', items: [
100
100
  { value: '10-100', label: 'Ancho del patrón (cuentas)', icon: 'mdi:arrow-expand-horizontal' },
101
101
  { value: '2-32', label: 'Colores en la paleta', icon: 'mdi:palette-swatch' },
@@ -103,9 +103,9 @@ export const content: BeadPatternGeneratorLocaleContent = {
103
103
  { value: 'ZIP', label: 'Exportación (patrón + guía)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'En una era de pantallas efímeras, crear algo físico es un acto revolucionario. Esta herramienta no busca automatizar el arte, sino <strong>empoderar al artesano</strong>. Te damos la precisión computacional para que tus manos puedan construir legados duraderos.' },
106
- ],
107
- faq,
108
- bibliography,
109
- howTo,
110
- schemas: [faqSchema as any, howToSchema as any, appSchema],
111
- };
106
+ ],
107
+ faq,
108
+ bibliography,
109
+ howTo,
110
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
111
+ };
@@ -1,111 +1,111 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import { bibliography } from '../bibliography';
3
- import type { BeadPatternGeneratorLocaleContent } from '../index';
4
-
5
- const slug = 'generateur-de-modeles-de-perles';
6
- const title = 'Générateur de Modèles';
7
- const description = 'Créez du pixel art et des schémas de perles pour Miyuki ou Hama à partir de vos photos. Algorithme de quantification de couleurs, mode vision tunnel et export ZIP.';
8
-
9
- const faq: BeadPatternGeneratorLocaleContent['faq'] = [
10
- { question: 'Qu\'est-ce que la quantification de couleurs dans les modèles ?', answer: 'C\'est le processus de réduction des milliers de couleurs d\'une photo à quelques-unes seulement qui correspondent aux couleurs réelles des perles disponibles (ex: Miyuki ou Hama). Nous utilisons des algorithmes intelligents pour maintenir la ressemblance visuelle avec la palette minimale possible.' },
11
- { question: 'Puis-je utiliser ce modèle pour le point de croix ?', answer: 'Oui, le générateur crée un diagramme de grille parfaitement compatible avec le point de croix. Il vous suffit de choisir une taille de grille correspondant à votre tissu (Aïda 14, 18, etc.).' },
12
- { question: 'Quelle est la différence entre les perles Miyuki et Hama ?', answer: 'Les perles Miyuki Delica sont de très petites perles de verre précises pour la bijouterie. Les perles Hama sont en plastique et se fusionnent au fer à repasser. Notre outil vous permet d\'ajuster le rapport d\'aspect pour que le modèle ne se déforme pas selon le matériau utilisé.' },
13
- { question: 'Comment fonctionne l\'algorithme de tramage (dithering) ?', answer: 'Le tramage crée l\'illusion d\'un plus grand nombre de couleurs en mélangeant des pixels de différentes couleurs dans des motifs espacés. Cela aide les dégradés de couleurs à paraître plus fluides, même avec une palette de perles limitée.' },
14
- ];
15
-
16
- const howTo: BeadPatternGeneratorLocaleContent['howTo'] = [
17
- { name: 'Charger une image claire', text: 'Sélectionnez une photo avec un bon contraste et peu de petits détails pour que le modèle soit plus facile à suivre.' },
18
- { name: 'Ajuster la taille de la grille', text: 'Définissez la largeur et la hauteur en perles de votre pièce finale. Plus il y a de perles, plus il y a de détails, mais plus c\'est difficile.' },
19
- { name: 'Optimiser la palette de couleurs', text: 'Réduisez le nombre de couleurs jusqu\'à ce qu\'elles correspondent aux perles dont vous disposez dans votre kit de loisirs créatifs.' },
20
- { name: 'Exporter le schéma guide', text: 'Générez le modèle final avec les codes de couleur à utiliser comme référence lors de l\'assemblage de vos perles sur la plaque ou le fil.' },
21
- ];
22
-
23
- const faqSchema: WithContext<FAQPage> = {
24
- '@context': 'https://schema.org',
25
- '@type': 'FAQPage',
26
- mainEntity: faq.map((item) => ({
27
- '@type': 'Question',
28
- name: item.question,
29
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
30
- })),
31
- };
32
-
33
- const howToSchema: WithContext<HowTo> = {
34
- '@context': 'https://schema.org',
35
- '@type': 'HowTo',
36
- name: title,
37
- description,
38
- step: howTo.map((step) => ({
39
- '@type': 'HowToStep',
40
- name: step.name,
41
- text: step.text,
42
- })),
43
- };
44
-
45
- const appSchema: WithContext<SoftwareApplication> = {
46
- '@context': 'https://schema.org',
47
- '@type': 'SoftwareApplication',
48
- name: title,
49
- description,
50
- applicationCategory: 'UtilitiesApplication',
51
- operatingSystem: 'Web',
52
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
53
- inLanguage: 'fr',
54
- };
55
-
56
- export const content: BeadPatternGeneratorLocaleContent = {
57
- slug,
58
- title,
59
- description,
60
- faqTitle: 'Questions Fréquemment Posées',
61
- ui: {
62
- title: 'Laboratoire de Modèles',
63
- subtitle: 'Ingénierie chromatique pour vos mains',
64
- description: 'De la photo au schéma de perles.',
65
- gridSizeLabel: 'Taille (Largeur)',
66
- colorCountLabel: 'Couleurs',
67
- optionsLabel: 'Options',
68
- rulersLabel: 'Règles',
69
- symbolsTooltip: 'Motif Surprise',
70
- symbolsLabel: 'Symboles',
71
- downloadBtn: 'Télécharger',
72
- uploadTitle: 'Chargez Votre Vision',
73
- uploadSubtitle: 'et laissez la magie numérique opérer',
74
- paletteTitle: 'ADN Chromatique',
75
- reuploadBtn: 'Changer l\'Image',
76
- tunnelVisionTitle: 'Vision de Tunnel',
77
- tunnelVisionSubtitle: 'Votre assistant de précision rangée par rangée.',
78
- uploadLabel: 'Chargez votre photo',
79
- pixelateBtn: 'Générer le Modèle',
80
- faqTitle: 'FAQ',
81
- bibliographyTitle: 'Références'
82
- },
83
- seo: [
84
- { type: 'title', text: 'Alchimie Numérique: Transmutez les Pixels en Art Tangible', level: 2 },
85
- { type: 'paragraph', html: 'Bienvenue dans le <strong>Studio de Modèles Ultime</strong>. Un <em>moteur d\'intelligence chromatique</em> conçu pour les architectes du Pixel Art, les maîtres de la Miyuki et les visionnaires du point de croix. Votre pont entre le numérique et le fait-main.' },
86
- { type: 'card', icon: 'mdi:grid', title: 'La Grille Intelligente', html: 'Notre algorithme de <strong>sous-échantillonnage spatial</strong> ne se contente pas de "réduire" votre image. Il analyse la structure visuelle pour mapper des groupes de pixels complexes sur des cellules individuelles, préservant l\'intégrité des silhouettes et des contours comme le ferait un illustrateur expert.' },
87
- { type: 'card', icon: 'mdi:palette', title: 'Quantification de Couleurs K Means', html: 'Nous implémentons une variante de l\'algorithme <strong>K-Means Clustering</strong> qui trouve mathématiquement les tons "centroïdes" de votre image. Une fidélité visuelle étonnante avec une palette minimaliste de 12, 24 ou 32 couleurs.' },
88
- { type: 'title', text: 'La Maîtrise en 3 Étapes', level: 3 },
89
- { type: 'card', icon: 'mdi:image-search', title: 'La Sélection Parfaite', html: 'Recherchez un <strong>contraste élevé</strong>, un éclairage dramatique et des formes iconiques. Les portraits avec des fonds épurés, les logos et l\'art vectoriel se traduisent magnifiquement.' },
90
- { type: 'card', icon: 'mdi:ruler', title: 'Calibration Dimensionnelle', html: '<strong>Miyuki Delica :</strong> 50 perles ≈ 8 cm · <strong>Hama Midi :</strong> 50 perles ≈ 25 cm · <strong>Point de Croix :</strong> 1 cellule = 1 point.' },
91
- { type: 'card', icon: 'mdi:eye-check', title: 'Exécution Zen (Mode Vision Tunnel)', html: 'Notre système de <strong>Vision Tunnel</strong> agit comme votre assistant personnel, atténuant le bruit visuel et mettant chirurgicalement en évidence uniquement la rangée active. Une concentration absolue.' },
92
- { type: 'title', text: 'Canevas Infinis', level: 3 },
93
- { type: 'list', items: [
94
- '<strong>Bijouterie Textile :</strong> Modèles complexes pour métiers à tisser et bracelets géométriques.',
95
- '<strong>Point de Croix :</strong> Schémas modernes prêts à être brodés pixel par pixel.',
96
- '<strong>Mosaïques :</strong> Murales à grande échelle utilisant des tesselles de céramique simplifiées.',
97
- '<strong>Retro Gaming :</strong> Sprites et assets 8-bits authentiques en quelques secondes.',
98
- ]},
99
- { type: 'stats', items: [
100
- { value: '10-100', label: 'Largeur en perles', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '2-32', label: 'Emplacements de palette', icon: 'mdi:palette-swatch' },
102
- { value: 'K-Means', label: 'Algorithme de quantification', icon: 'mdi:function-variant' },
103
- { value: 'ZIP', label: 'Format d\'export (modèle + guide)', icon: 'mdi:zip-box' },
104
- ], columns: 4 },
105
- { type: 'paragraph', html: 'À l\'ère des écrans éphémères, créer quelque chose de physique est un acte révolutionnaire. Cet outil ne cherche pas à automatiser l\'art, mais à <strong>donner du pouvoir à l\'artisan</strong>. Nous vous offrons la précision informatique pour que vos mains puissent bâtir des héritages durables.' },
106
- ],
107
- faq,
108
- bibliography,
109
- howTo,
110
- schemas: [faqSchema as any, howToSchema as any, appSchema],
111
- };
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { BeadPatternGeneratorLocaleContent } from '../index';
4
+
5
+ const slug = 'generateur-de-modeles-de-perles';
6
+ const title = 'Générateur de Modèles';
7
+ const description = 'Créez du pixel art et des schémas de perles pour Miyuki ou Hama à partir de vos photos. Algorithme de quantification de couleurs, mode vision tunnel et export ZIP.';
8
+
9
+ const faq: BeadPatternGeneratorLocaleContent['faq'] = [
10
+ { question: 'Qu\'est-ce que la quantification de couleurs dans les modèles ?', answer: 'C\'est le processus de réduction des milliers de couleurs d\'une photo à quelques-unes seulement qui correspondent aux couleurs réelles des perles disponibles (ex: Miyuki ou Hama). Nous utilisons des algorithmes intelligents pour maintenir la ressemblance visuelle avec la palette minimale possible.' },
11
+ { question: 'Puis-je utiliser ce modèle pour le point de croix ?', answer: 'Oui, le générateur crée un diagramme de grille parfaitement compatible avec le point de croix. Il vous suffit de choisir une taille de grille correspondant à votre tissu (Aïda 14, 18, etc.).' },
12
+ { question: 'Quelle est la différence entre les perles Miyuki et Hama ?', answer: 'Les perles Miyuki Delica sont de très petites perles de verre précises pour la bijouterie. Les perles Hama sont en plastique et se fusionnent au fer à repasser. Notre outil vous permet d\'ajuster le rapport d\'aspect pour que le modèle ne se déforme pas selon le matériau utilisé.' },
13
+ { question: 'Comment fonctionne l\'algorithme de tramage (dithering) ?', answer: 'Le tramage crée l\'illusion d\'un plus grand nombre de couleurs en mélangeant des pixels de différentes couleurs dans des motifs espacés. Cela aide les dégradés de couleurs à paraître plus fluides, même avec une palette de perles limitée.' },
14
+ ];
15
+
16
+ const howTo: BeadPatternGeneratorLocaleContent['howTo'] = [
17
+ { name: 'Charger une image claire', text: 'Sélectionnez une photo avec un bon contraste et peu de petits détails pour que le modèle soit plus facile à suivre.' },
18
+ { name: 'Ajuster la taille de la grille', text: 'Définissez la largeur et la hauteur en perles de votre pièce finale. Plus il y a de perles, plus il y a de détails, mais plus c\'est difficile.' },
19
+ { name: 'Optimiser la palette de couleurs', text: 'Réduisez le nombre de couleurs jusqu\'à ce qu\'elles correspondent aux perles dont vous disposez dans votre kit de loisirs créatifs.' },
20
+ { name: 'Exporter le schéma guide', text: 'Générez le modèle final avec les codes de couleur à utiliser comme référence lors de l\'assemblage de vos perles sur la plaque ou le fil.' },
21
+ ];
22
+
23
+ const faqSchema: WithContext<FAQPage> = {
24
+ '@context': 'https://schema.org',
25
+ '@type': 'FAQPage',
26
+ mainEntity: faq.map((item) => ({
27
+ '@type': 'Question',
28
+ name: item.question,
29
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
30
+ })),
31
+ };
32
+
33
+ const howToSchema: WithContext<HowTo> = {
34
+ '@context': 'https://schema.org',
35
+ '@type': 'HowTo',
36
+ name: title,
37
+ description,
38
+ step: howTo.map((step) => ({
39
+ '@type': 'HowToStep',
40
+ name: step.name,
41
+ text: step.text,
42
+ })),
43
+ };
44
+
45
+ const appSchema: WithContext<SoftwareApplication> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'SoftwareApplication',
48
+ name: title,
49
+ description,
50
+ applicationCategory: 'UtilitiesApplication',
51
+ operatingSystem: 'Web',
52
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
53
+ inLanguage: 'fr',
54
+ };
55
+
56
+ export const content: BeadPatternGeneratorLocaleContent = {
57
+ slug,
58
+ title,
59
+ description,
60
+ faqTitle: 'Questions Fréquemment Posées',
61
+ ui: {
62
+ title: 'Laboratoire de Modèles',
63
+ subtitle: 'Ingénierie chromatique pour vos mains',
64
+ description: 'De la photo au schéma de perles.',
65
+ gridSizeLabel: 'Taille (Largeur)',
66
+ colorCountLabel: 'Couleurs',
67
+ optionsLabel: 'Options',
68
+ rulersLabel: 'Règles',
69
+ symbolsTooltip: 'Motif Surprise',
70
+ symbolsLabel: 'Symboles',
71
+ downloadBtn: 'Télécharger',
72
+ uploadTitle: 'Chargez Votre Vision',
73
+ uploadSubtitle: 'et laissez la magie numérique opérer',
74
+ paletteTitle: 'ADN Chromatique',
75
+ reuploadBtn: 'Changer l\'Image',
76
+ tunnelVisionTitle: 'Vision de Tunnel',
77
+ tunnelVisionSubtitle: 'Votre assistant de précision rangée par rangée.',
78
+ uploadLabel: 'Chargez votre photo',
79
+ pixelateBtn: 'Générer le Modèle',
80
+ faqTitle: 'FAQ',
81
+ bibliographyTitle: 'Références'
82
+ },
83
+ seo: [
84
+ { type: 'title', text: 'Alchimie Numérique: Transmutez les Pixels en Art Tangible', level: 2 },
85
+ { type: 'paragraph', html: 'Bienvenue dans le <strong>Studio de Modèles Ultime</strong>. Un <em>moteur d\'intelligence chromatique</em> conçu pour les architectes du Pixel Art, les maîtres de la Miyuki et les visionnaires du point de croix. Votre pont entre le numérique et le fait-main.' },
86
+ { type: 'card', icon: 'mdi:grid', title: 'La Grille Intelligente', html: 'Notre algorithme de <strong>sous-échantillonnage spatial</strong> ne se contente pas de "réduire" votre image. Il analyse la structure visuelle pour mapper des groupes de pixels complexes sur des cellules individuelles, préservant l\'intégrité des silhouettes et des contours comme le ferait un illustrateur expert.' },
87
+ { type: 'card', icon: 'mdi:palette', title: 'Quantification de Couleurs K Means', html: 'Nous implémentons une variante de l\'algorithme <strong>K-Means Clustering</strong> qui trouve mathématiquement les tons "centroïdes" de votre image. Une fidélité visuelle étonnante avec une palette minimaliste de 12, 24 ou 32 couleurs.' },
88
+ { type: 'title', text: 'La Maîtrise en 3 Étapes', level: 3 },
89
+ { type: 'card', icon: 'mdi:image-search', title: 'La Sélection Parfaite', html: 'Recherchez un <strong>contraste élevé</strong>, un éclairage dramatique et des formes iconiques. Les portraits avec des fonds épurés, les logos et l\'art vectoriel se traduisent magnifiquement.' },
90
+ { type: 'card', icon: 'mdi:ruler', title: 'Calibration Dimensionnelle', html: '<strong>Miyuki Delica :</strong> 50 perles ≈ 8 cm · <strong>Hama Midi :</strong> 50 perles ≈ 25 cm · <strong>Point de Croix :</strong> 1 cellule = 1 point.' },
91
+ { type: 'card', icon: 'mdi:eye-check', title: 'Exécution Zen (Mode Vision Tunnel)', html: 'Notre système de <strong>Vision Tunnel</strong> agit comme votre assistant personnel, atténuant le bruit visuel et mettant chirurgicalement en évidence uniquement la rangée active. Une concentration absolue.' },
92
+ { type: 'title', text: 'Canevas Infinis', level: 3 },
93
+ { type: 'list', items: [
94
+ '<strong>Bijouterie Textile :</strong> Modèles complexes pour métiers à tisser et bracelets géométriques.',
95
+ '<strong>Point de Croix :</strong> Schémas modernes prêts à être brodés pixel par pixel.',
96
+ '<strong>Mosaïques :</strong> Murales à grande échelle utilisant des tesselles de céramique simplifiées.',
97
+ '<strong>Retro Gaming :</strong> Sprites et assets 8-bits authentiques en quelques secondes.',
98
+ ]},
99
+ { type: 'stats', items: [
100
+ { value: '10-100', label: 'Largeur en perles', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Emplacements de palette', icon: 'mdi:palette-swatch' },
102
+ { value: 'K-Means', label: 'Algorithme de quantification', icon: 'mdi:function-variant' },
103
+ { value: 'ZIP', label: 'Format d\'export (modèle + guide)', icon: 'mdi:zip-box' },
104
+ ], columns: 4 },
105
+ { type: 'paragraph', html: 'À l\'ère des écrans éphémères, créer quelque chose de physique est un acte révolutionnaire. Cet outil ne cherche pas à automatiser l\'art, mais à <strong>donner du pouvoir à l\'artisan</strong>. Nous vous offrons la précision informatique pour que vos mains puissent bâtir des héritages durables.' },
106
+ ],
107
+ faq,
108
+ bibliography,
109
+ howTo,
110
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
111
+ };