@jjlmoya/utils-creative 1.5.0 → 1.7.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 (32) hide show
  1. package/package.json +62 -62
  2. package/src/tests/locale_completeness.test.ts +2 -2
  3. package/src/tests/schemas_fulfillment.test.ts +23 -0
  4. package/src/tests/title_quality.test.ts +55 -0
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/bead-pattern-generator/component.astro +29 -21
  7. package/src/tool/bead-pattern-generator/i18n/en.ts +73 -19
  8. package/src/tool/bead-pattern-generator/i18n/es.ts +73 -19
  9. package/src/tool/bead-pattern-generator/i18n/fr.ts +73 -19
  10. package/src/tool/bead-pattern-generator/index.ts +14 -2
  11. package/src/tool/dice-roller/component.astro +42 -30
  12. package/src/tool/dice-roller/i18n/en.ts +84 -33
  13. package/src/tool/dice-roller/i18n/es.ts +84 -33
  14. package/src/tool/dice-roller/i18n/fr.ts +84 -33
  15. package/src/tool/dice-roller/index.ts +9 -0
  16. package/src/tool/excuse-generator/i18n/en.ts +60 -18
  17. package/src/tool/excuse-generator/i18n/es.ts +60 -18
  18. package/src/tool/excuse-generator/i18n/fr.ts +60 -18
  19. package/src/tool/fortune-cookie/component.astro +27 -16
  20. package/src/tool/fortune-cookie/i18n/en.ts +60 -18
  21. package/src/tool/fortune-cookie/i18n/es.ts +60 -18
  22. package/src/tool/fortune-cookie/i18n/fr.ts +60 -18
  23. package/src/tool/synesthesia-painter/component.astro +5 -5
  24. package/src/tool/synesthesia-painter/i18n/en.ts +74 -32
  25. package/src/tool/synesthesia-painter/i18n/es.ts +74 -32
  26. package/src/tool/synesthesia-painter/i18n/fr.ts +74 -32
  27. package/src/tool/zalgo-generator/component.astro +29 -18
  28. package/src/tool/zalgo-generator/i18n/en.ts +70 -17
  29. package/src/tool/zalgo-generator/i18n/es.ts +70 -17
  30. package/src/tool/zalgo-generator/i18n/fr.ts +70 -17
  31. package/src/tool/zalgo-generator/index.ts +11 -0
  32. package/src/tools.ts +14 -1
@@ -1,21 +1,28 @@
1
1
  ---
2
2
  import { Icon } from 'astro-icon/components';
3
+ import type { ZalgoGeneratorUI } from './index';
4
+
5
+ interface Props {
6
+ ui: ZalgoGeneratorUI;
7
+ }
8
+
9
+ const { ui } = Astro.props;
3
10
  ---
4
11
 
5
- <section class="zg-section">
12
+ <section class="zg-section" id="zalgo-generator-root" data-ui={JSON.stringify(ui)}>
6
13
  <div class="zg-grid">
7
14
  <div class="zg-left">
8
15
  <div class="zg-config-card">
9
16
  <div class="zg-config-hover-bg"></div>
10
17
  <h3 class="zg-config-title">
11
18
  <Icon name="mdi:tune-variant" style="width:1.25rem;height:1.25rem;color:#9333ea" />
12
- Configuración
19
+ {ui.configTitle}
13
20
  </h3>
14
21
 
15
22
  <div class="zg-config-body">
16
23
  <div class="zg-field">
17
24
  <div class="zg-field-header">
18
- <label class="zg-field-label">Intensidad</label>
25
+ <label class="zg-field-label">{ui.intensity}</label>
19
26
  <span id="intensity-value" class="zg-intensity-val">50%</span>
20
27
  </div>
21
28
  <input type="range" id="intensity-slider" min="0.1" max="1.5" step="0.1" value="0.5" class="zg-slider" />
@@ -23,21 +30,21 @@ import { Icon } from 'astro-icon/components';
23
30
 
24
31
  <div class="zg-toggles">
25
32
  <label class="zg-toggle-row">
26
- <span class="zg-toggle-label">Corrupción Superior</span>
33
+ <span class="zg-toggle-label">{ui.upLabel}</span>
27
34
  <div class="zg-switch">
28
35
  <input type="checkbox" id="opt-up" checked class="zg-switch-input" />
29
36
  <div class="zg-switch-track"></div>
30
37
  </div>
31
38
  </label>
32
39
  <label class="zg-toggle-row">
33
- <span class="zg-toggle-label">Ruido Central</span>
40
+ <span class="zg-toggle-label">{ui.midLabel}</span>
34
41
  <div class="zg-switch">
35
42
  <input type="checkbox" id="opt-middle" checked class="zg-switch-input" />
36
43
  <div class="zg-switch-track"></div>
37
44
  </div>
38
45
  </label>
39
46
  <label class="zg-toggle-row">
40
- <span class="zg-toggle-label">Corrupción Inferior</span>
47
+ <span class="zg-toggle-label">{ui.downLabel}</span>
41
48
  <div class="zg-switch">
42
49
  <input type="checkbox" id="opt-down" checked class="zg-switch-input" />
43
50
  <div class="zg-switch-track"></div>
@@ -47,13 +54,13 @@ import { Icon } from 'astro-icon/components';
47
54
 
48
55
  <button id="reset-options" class="zg-reset-btn">
49
56
  <Icon name="mdi:history" style="width:1rem;height:1rem" />
50
- Restablecer Valores
57
+ {ui.resetBtn}
51
58
  </button>
52
59
  </div>
53
60
  </div>
54
61
 
55
62
  <div class="zg-warning">
56
- <p>ADVERTENCIA: El texto Zalgo utiliza caracteres combinados de Unicode que pueden desbordar visualmente su contenedor. Úsese con precaución en redes sociales.</p>
63
+ <p>{ui.warningText}</p>
57
64
  </div>
58
65
  </div>
59
66
 
@@ -68,14 +75,14 @@ import { Icon } from 'astro-icon/components';
68
75
  <textarea
69
76
  id="input-text"
70
77
  class="zg-textarea"
71
- placeholder="Escribe aquí el mensaje que deseas corromper..."
78
+ placeholder={ui.inputPlaceholder}
72
79
  ></textarea>
73
80
  <div class="zg-editor-footer">
74
- <span id="char-count" class="zg-char-count">0 CARACTERES</span>
81
+ <span id="char-count" class="zg-char-count">0 {ui.charLabel}</span>
75
82
  <div class="zg-footer-sep"></div>
76
83
  <button id="copy-btn" class="zg-copy-btn">
77
84
  <Icon name="mdi:content-copy" style="width:1.25rem;height:1.25rem" />
78
- Copiar Resultado
85
+ {ui.copyBtn}
79
86
  </button>
80
87
  <button id="clear-btn" class="zg-clear-btn">
81
88
  <Icon name="mdi:trash-can-outline" style="width:1.25rem;height:1.25rem" />
@@ -84,24 +91,28 @@ import { Icon } from 'astro-icon/components';
84
91
  </div>
85
92
 
86
93
  <div class="zg-preview-wrap">
87
- <div class="zg-preview-badge">Vista Previa en Tiempo Real</div>
94
+ <div class="zg-preview-badge">{ui.previewLabel}</div>
88
95
  <div id="fake-ui-body" class="zg-preview-body">
89
96
  <div class="zg-preview-dots"></div>
90
97
  <div id="zalgo-output" class="zg-output">
91
- <span class="zg-output-empty">Vacío</span>
98
+ <span class="zg-output-empty">{ui.emptyLabel}</span>
92
99
  </div>
93
100
  <div id="glitch-overlay" class="zg-glitch-overlay">
94
101
  <div class="zg-glitch-line zg-glitch-line-1"></div>
95
102
  <div class="zg-glitch-line zg-glitch-line-2"></div>
96
103
  </div>
97
104
  </div>
98
- <p class="zg-preview-note">Nota: Algunos navegadores pueden limitar el renderizado de caracteres combinados</p>
105
+ <p class="zg-preview-note">{ui.noteText}</p>
99
106
  </div>
100
107
  </div>
101
108
  </div>
102
109
  </section>
103
110
 
104
111
  <script>
112
+ import type { ZalgoGeneratorUI } from './index';
113
+ const root = document.getElementById('zalgo-generator-root') as HTMLElement;
114
+ const ui = JSON.parse(root.dataset.ui || '{}') as ZalgoGeneratorUI;
115
+
105
116
  const UP = ["\u030d","\u030e","\u0304","\u0305","\u033f","\u0311","\u0306","\u0310","\u0352","\u0357","\u0351","\u0307","\u0308","\u030a","\u0342","\u0343","\u0344","\u034a","\u034b","\u034c","\u0303","\u0302","\u030c","\u0350","\u0300","\u0301","\u030b","\u030f","\u0312","\u0313","\u0314","\u033d","\u0309","\u0363","\u0364","\u0365","\u0366","\u0367","\u0368","\u0369","\u036a","\u036b","\u036c","\u036d","\u036e","\u036f","\u033e","\u035b","\u0346","\u031a"];
106
117
  const MID = ["\u0315","\u031b","\u0340","\u0341","\u0358","\u0321","\u0322","\u0327","\u0328","\u0334","\u0335","\u0336","\u034f","\u035c","\u035d","\u035e","\u035f","\u0360","\u0362","\u0338","\u0337","\u0361","\u0489"];
107
118
  const DOWN = ["\u0316","\u0317","\u0318","\u0319","\u031c","\u031d","\u031e","\u031f","\u0320","\u0324","\u0325","\u0326","\u0329","\u032a","\u032b","\u032c","\u032d","\u032e","\u032f","\u0330","\u0331","\u0332","\u0333","\u0339","\u033a","\u033b","\u033c","\u0345","\u0347","\u0348","\u0349","\u034d","\u034e","\u0353","\u0354","\u0355","\u0356","\u0359","\u035a","\u0323"];
@@ -142,10 +153,10 @@ import { Icon } from 'astro-icon/components';
142
153
  function update() {
143
154
  const text = input.value;
144
155
  const intensity = parseFloat(intensitySlider.value);
145
- if (charCount) charCount.textContent = `${text.length} CARACTERES`;
156
+ if (charCount) charCount.textContent = `${text.length} ${ui.charLabel}`;
146
157
  if (intensityValue) intensityValue.textContent = `${Math.round(intensity * 100)}%`;
147
158
  if (!text.trim()) {
148
- output.innerHTML = '<span class="zg-output-empty">Vacío</span>';
159
+ output.innerHTML = `<span class="zg-output-empty">${ui.emptyLabel}</span>`;
149
160
  glitchOverlay.style.opacity = "0";
150
161
  fakeUiBody.style.borderColor = "";
151
162
  fakeUiBody.style.boxShadow = "";
@@ -174,10 +185,10 @@ import { Icon } from 'astro-icon/components';
174
185
 
175
186
  copyBtn?.addEventListener("click", () => {
176
187
  const text = output.textContent || "";
177
- if (text && text !== "Vacío") {
188
+ if (text && text !== ui.emptyLabel) {
178
189
  navigator.clipboard.writeText(text);
179
190
  const orig = copyBtn.innerHTML;
180
- copyBtn.innerHTML = "¡Copiado!";
191
+ copyBtn.innerHTML = ui.copied || '¡Copiado!';
181
192
  setTimeout(() => { copyBtn.innerHTML = orig; }, 2000);
182
193
  }
183
194
  });
@@ -1,9 +1,61 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
1
2
  import type { ZalgoGeneratorLocaleContent } from '../index';
2
3
 
4
+ const slug = 'zalgo-generator';
5
+ const title = 'Zalgo Generator';
6
+ const description = 'Corrupt your messages with cascading overflowing Unicode characters. Adjust intensity and direction of the glitch effect.';
7
+
8
+ const faq: ZalgoGeneratorLocaleContent['faq'] = [
9
+ { question: 'What is Zalgo text?', answer: 'It is a type of text that uses Unicode combining characters (diacritics) excessively. When stacked vertically, these characters "overflow" their original line, creating a visual effect of corruption, disorder, or horror popular in internet culture.' },
10
+ { question: 'Why does Zalgo text look so strange?', answer: 'It exploits a feature of the Unicode standard that allows adding marks above, below, or through a base letter. Since there is no strict limit on how many marks can be added, the text can "invade" lines above or below.' },
11
+ { question: 'Can I use this text on social media?', answer: 'Yes, most modern platforms (Instagram, Twitter, Discord) support Unicode. However, some networks or devices may filter or truncate excess characters at very high intensity to maintain interface readability.' },
12
+ { question: 'How can I remove the Zalgo effect from text?', answer: 'To clean corrupted text, you can use JavaScript string normalization or simply paste it into a basic text editor that only accepts plain text. Our tool is purely creative and does not damage the original content.' },
13
+ ];
14
+
15
+ const howTo: ZalgoGeneratorLocaleContent['howTo'] = [
16
+ { name: 'Write the base message', text: 'Enter the text you want to "corrupt" in the main text box.' },
17
+ { name: 'Adjust the chaos intensity', text: 'Move the slider to define how many combining characters to stack. Higher intensity = harder to read.' },
18
+ { name: 'Select the overflow direction', text: 'Choose whether corruption should grow upward, downward, or in all directions simultaneously.' },
19
+ { name: 'Copy the result', text: 'Click the copy button. The resulting text includes all the invisible bytes needed to maintain the glitch effect.' },
20
+ ];
21
+
22
+ const faqSchema: WithContext<FAQPage> = {
23
+ '@context': 'https://schema.org',
24
+ '@type': 'FAQPage',
25
+ mainEntity: faq.map((item) => ({
26
+ '@type': 'Question',
27
+ name: item.question,
28
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
29
+ })),
30
+ };
31
+
32
+ const howToSchema: WithContext<HowTo> = {
33
+ '@context': 'https://schema.org',
34
+ '@type': 'HowTo',
35
+ name: title,
36
+ description,
37
+ step: howTo.map((step) => ({
38
+ '@type': 'HowToStep',
39
+ name: step.name,
40
+ text: step.text,
41
+ })),
42
+ };
43
+
44
+ const appSchema: WithContext<SoftwareApplication> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'SoftwareApplication',
47
+ name: title,
48
+ description,
49
+ applicationCategory: 'UtilitiesApplication',
50
+ operatingSystem: 'Web',
51
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
52
+ inLanguage: 'en',
53
+ };
54
+
3
55
  export const content: ZalgoGeneratorLocaleContent = {
4
- slug: 'zalgo-generator',
5
- title: 'Zalgo Generator',
6
- description: 'Corrupt your messages with cascading overflowing Unicode characters. Adjust intensity and direction of the glitch effect.',
56
+ slug,
57
+ title,
58
+ description,
7
59
  faqTitle: 'Frequently Asked Questions',
8
60
  bibliographyTitle: 'Chaos Bibliography',
9
61
  ui: {
@@ -15,7 +67,18 @@ export const content: ZalgoGeneratorLocaleContent = {
15
67
  copyBtn: 'Copy Chaos',
16
68
  copied: 'Copied!',
17
69
  faqTitle: 'FAQ',
18
- bibliographyTitle: 'References'
70
+ bibliographyTitle: 'References',
71
+ configTitle: 'Configuration',
72
+ intensity: 'Intensity',
73
+ upLabel: 'Upper Corruption',
74
+ midLabel: 'Middle Noise',
75
+ downLabel: 'Lower Corruption',
76
+ resetBtn: 'Reset Values',
77
+ warningText: 'WARNING: Zalgo text uses combined Unicode characters that may visually overflow their container. Use with caution on social media.',
78
+ previewLabel: 'Real-time Preview',
79
+ emptyLabel: 'Empty',
80
+ charLabel: 'CHARACTERS',
81
+ noteText: 'Note: Some browsers may limit the rendering of combined characters'
19
82
  },
20
83
  seo: [
21
84
  { type: 'title', text: 'What Is Zalgo Text and How Does Visual Corruption Work?', level: 2 },
@@ -39,22 +102,12 @@ export const content: ZalgoGeneratorLocaleContent = {
39
102
  { term: 'Glitch Art', definition: 'An aesthetic that intentionally incorporates or simulates errors, artifacts, and corruptions in digital media as an expressive technique.' },
40
103
  ]},
41
104
  ],
42
- faq: [
43
- { question: 'What is Zalgo text?', answer: 'It is a type of text that uses Unicode combining characters (diacritics) excessively. When stacked vertically, these characters "overflow" their original line, creating a visual effect of corruption, disorder, or horror popular in internet culture.' },
44
- { question: 'Why does Zalgo text look so strange?', answer: 'It exploits a feature of the Unicode standard that allows adding marks above, below, or through a base letter. Since there is no strict limit on how many marks can be added, the text can "invade" lines above or below.' },
45
- { question: 'Can I use this text on social media?', answer: 'Yes, most modern platforms (Instagram, Twitter, Discord) support Unicode. However, some networks or devices may filter or truncate excess characters at very high intensity to maintain interface readability.' },
46
- { question: 'How can I remove the Zalgo effect from text?', answer: 'To clean corrupted text, you can use JavaScript string normalization or simply paste it into a basic text editor that only accepts plain text. Our tool is purely creative and does not damage the original content.' },
47
- ],
105
+ faq,
48
106
  bibliography: [
49
107
  { name: 'Unicode Standard - Combining Characters', url: 'https://www.unicode.org/standard/principles.html#Combining_Characters' },
50
108
  { name: 'The Zalgo Text Phenomenon', url: 'https://knowyourmeme.com/memes/zalgo' },
51
109
  { name: 'MDN - String normalization', url: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize' },
52
110
  ],
53
- howTo: [
54
- { name: 'Write the base message', text: 'Enter the text you want to "corrupt" in the main text box.' },
55
- { name: 'Adjust the chaos intensity', text: 'Move the slider to define how many combining characters to stack. Higher intensity = harder to read.' },
56
- { name: 'Select the overflow direction', text: 'Choose whether corruption should grow upward, downward, or in all directions simultaneously.' },
57
- { name: 'Copy the result', text: 'Click the copy button. The resulting text includes all the invisible bytes needed to maintain the glitch effect.' },
58
- ],
59
- schemas: []
111
+ howTo,
112
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
60
113
  };
@@ -1,9 +1,61 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
1
2
  import type { ZalgoGeneratorLocaleContent } from '../index';
2
3
 
4
+ const slug = 'generador-zalgo';
5
+ const title = 'Generador Zalgo';
6
+ const description = 'Corrompe tus mensajes con cascadas de caracteres Unicode desbordantes.';
7
+
8
+ const faq: ZalgoGeneratorLocaleContent['faq'] = [
9
+ { question: '¿Qué es el texto Zalgo?', answer: 'Es un tipo de texto que utiliza caracteres Unicode de combinación (diacríticos) de forma excesiva. Al apilarse verticalmente, estos caracteres "desbordan" su línea original, creando un efecto visual de corrupción, desorden o terror muy popular en la cultura de internet.' },
10
+ { question: '¿Por qué el texto Zalgo se ve tan extraño?', answer: 'Se aprovecha de una característica del estándar Unicode que permite añadir marcas encima, debajo o en medio de una letra base. Como no hay un límite estricto de cuántas marcas se pueden añadir, el texto puede "invadir" párrafos superiores o inferiores.' },
11
+ { question: '¿Puedo usar este texto en redes sociales?', answer: 'Sí, la mayoría de plataformas modernas (Instagram, Twitter, Discord) soportan Unicode. Sin embargo, algunas redes o dispositivos pueden filtrar o recortar el exceso de caracteres si la intensidad es muy alta para mantener la legibilidad de la interfaz.' },
12
+ { question: '¿Cómo puedo quitar el efecto Zalgo de un texto?', answer: 'Para limpiar un texto corrupto, puedes usar la normalización de strings de JavaScript o simplemente copiarlo en un editor básico que solo admita texto plano. Nuestra herramienta es puramente creativa y no daña el contenido original.' },
13
+ ];
14
+
15
+ const howTo: ZalgoGeneratorLocaleContent['howTo'] = [
16
+ { name: 'Escribir el mensaje base', text: 'Introduce el texto que quieres "corromper" en el cuadro principal de la herramienta.' },
17
+ { name: 'Ajustar la intensidad del caos', text: 'Mueve el selector para definir cuántos caracteres de combinación quieres apilar. A más intensidad, más difícil será de leer.' },
18
+ { name: 'Seleccionar la dirección del desbordamiento', text: 'Elige si quieres que la corrupción crezca hacia arriba, hacia abajo o en todas las direcciones simultáneamente.' },
19
+ { name: 'Copiar el texto resultante', text: 'Haz clic en el botón de copiar. El texto resultante incluirá todos los bytes invisibles necesarios para mantener el efecto glitch.' },
20
+ ];
21
+
22
+ const faqSchema: WithContext<FAQPage> = {
23
+ '@context': 'https://schema.org',
24
+ '@type': 'FAQPage',
25
+ mainEntity: faq.map((item) => ({
26
+ '@type': 'Question',
27
+ name: item.question,
28
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
29
+ })),
30
+ };
31
+
32
+ const howToSchema: WithContext<HowTo> = {
33
+ '@context': 'https://schema.org',
34
+ '@type': 'HowTo',
35
+ name: title,
36
+ description,
37
+ step: howTo.map((step) => ({
38
+ '@type': 'HowToStep',
39
+ name: step.name,
40
+ text: step.text,
41
+ })),
42
+ };
43
+
44
+ const appSchema: WithContext<SoftwareApplication> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'SoftwareApplication',
47
+ name: title,
48
+ description,
49
+ applicationCategory: 'UtilitiesApplication',
50
+ operatingSystem: 'Web',
51
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
52
+ inLanguage: 'es',
53
+ };
54
+
3
55
  export const content: ZalgoGeneratorLocaleContent = {
4
- slug: 'generador-zalgo',
5
- title: 'Generador Zalgo',
6
- description: 'Corrompe tus mensajes con cascadas de caracteres Unicode desbordantes.',
56
+ slug,
57
+ title,
58
+ description,
7
59
  faqTitle: 'Preguntas Frecuentes',
8
60
  bibliographyTitle: 'Bibliografía del Caos',
9
61
  ui: {
@@ -15,7 +67,18 @@ export const content: ZalgoGeneratorLocaleContent = {
15
67
  copyBtn: 'Copiar Caos',
16
68
  copied: '¡Copiado!',
17
69
  faqTitle: 'FAQ',
18
- bibliographyTitle: 'Referencias'
70
+ bibliographyTitle: 'Referencias',
71
+ configTitle: 'Configuración',
72
+ intensity: 'Intensidad',
73
+ upLabel: 'Corrupción Superior',
74
+ midLabel: 'Ruido Central',
75
+ downLabel: 'Corrupción Inferior',
76
+ resetBtn: 'Restablecer Valores',
77
+ warningText: 'ADVERTENCIA: El texto Zalgo utiliza caracteres combinados de Unicode que pueden desbordar visualmente su contenedor. Úsese con precaución en redes sociales.',
78
+ previewLabel: 'Vista Previa en Tiempo Real',
79
+ emptyLabel: 'Vacío',
80
+ charLabel: 'CARACTERES',
81
+ noteText: 'Nota: Algunos navegadores pueden limitar el renderizado de caracteres combinados'
19
82
  },
20
83
  seo: [
21
84
  { type: 'title', text: '¿Qué es el Texto Zalgo y cómo funciona la corrupción visual?', level: 2 },
@@ -46,22 +109,12 @@ export const content: ZalgoGeneratorLocaleContent = {
46
109
  { term: 'Glitch Art', definition: 'Estética que incorpora intencionalmente errores, artefactos y corrupciones en medios digitales como técnica expresiva.' },
47
110
  ]},
48
111
  ],
49
- faq: [
50
- { question: '¿Qué es el texto Zalgo?', answer: 'Es un tipo de texto que utiliza caracteres Unicode de combinación (diacríticos) de forma excesiva. Al apilarse verticalmente, estos caracteres "desbordan" su línea original, creando un efecto visual de corrupción, desorden o terror muy popular en la cultura de internet.' },
51
- { question: '¿Por qué el texto Zalgo se ve tan extraño?', answer: 'Se aprovecha de una característica del estándar Unicode que permite añadir marcas encima, debajo o en medio de una letra base. Como no hay un límite estricto de cuántas marcas se pueden añadir, el texto puede "invadir" párrafos superiores o inferiores.' },
52
- { question: '¿Puedo usar este texto en redes sociales?', answer: 'Sí, la mayoría de plataformas modernas (Instagram, Twitter, Discord) soportan Unicode. Sin embargo, algunas redes o dispositivos pueden filtrar o recortar el exceso de caracteres si la intensidad es muy alta para mantener la legibilidad de la interfaz.' },
53
- { question: '¿Cómo puedo quitar el efecto Zalgo de un texto?', answer: 'Para limpiar un texto corrupto, puedes usar la normalización de strings de JavaScript o simplemente copiarlo en un editor básico que solo admita texto plano. Nuestra herramienta es puramente creativa y no daña el contenido original.' },
54
- ],
112
+ faq,
55
113
  bibliography: [
56
114
  { name: 'Unicode Standard - Combining Characters', url: 'https://www.unicode.org/standard/principles.html#Combining_Characters' },
57
115
  { name: 'The Zalgo Text Phenomenon', url: 'https://knowyourmeme.com/memes/zalgo' },
58
116
  { name: 'MDN - String normalization', url: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize' },
59
117
  ],
60
- howTo: [
61
- { name: 'Escribir el mensaje base', text: 'Introduce el texto que quieres "corromper" en el cuadro principal de la herramienta.' },
62
- { name: 'Ajustar la intensidad del caos', text: 'Mueve el selector para definir cuántos caracteres de combinación quieres apilar. A más intensidad, más difícil será de leer.' },
63
- { name: 'Seleccionar la dirección del desbordamiento', text: 'Elige si quieres que la corrupción crezca hacia arriba, hacia abajo o en todas las direcciones simultáneamente.' },
64
- { name: 'Copiar el texto resultante', text: 'Haz clic en el botón de copiar. El texto resultante incluirá todos los bytes invisibles necesarios para mantener el efecto glitch.' },
65
- ],
66
- schemas: []
118
+ howTo,
119
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
67
120
  };
@@ -1,9 +1,61 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
1
2
  import type { ZalgoGeneratorLocaleContent } from '../index';
2
3
 
4
+ const slug = 'generateur-zalgo';
5
+ const title = 'Générateur Zalgo';
6
+ const description = 'Corrompez vos messages avec une cascade de caractères Unicode débordants. Ajustez l\'intensité et la direction de l\'effet glitch.';
7
+
8
+ const faq: ZalgoGeneratorLocaleContent['faq'] = [
9
+ { question: 'Qu\'est-ce que le texte Zalgo ?', answer: 'C\'est un type de texte qui utilise excessivement les caractères de combinaison Unicode (diacritiques). Lorsqu\'ils sont empilés verticalement, ces caractères "débordent" de leur ligne d\'origine, créant un effet visuel de corruption, de désordre ou d\'horreur populaire dans la culture internet.' },
10
+ { question: 'Pourquoi le texte Zalgo a-t-il l\'air si étrange ?', answer: 'Il exploite une fonctionnalité de la norme Unicode qui permet d\'ajouter des marques au-dessus, en dessous ou à travers une lettre de base. Comme il n\'y a pas de limite stricte au nombre de marques pouvant être ajoutées, le texte peut "envahir" les lignes supérieures ou inférieures.' },
11
+ { question: 'Puis-je utiliser ce texte sur les réseaux sociaux ?', answer: 'Oui, la plupart des plateformes modernes (Instagram, Twitter, Discord) prennent en charge l\'Unicode. Cependant, certains réseaux ou appareils peuvent filtrer ou tronquer les caractères excédentaires à très haute intensité pour maintenir la lisibilité de l\'interface.' },
12
+ { question: 'Comment puis-je supprimer l\'effet Zalgo d\'un texte ?', answer: 'Pour nettoyer un texte corrompu, vous pouvez utiliser la normalisation de chaîne JavaScript ou simplement le coller dans un éditeur de texte basique qui n\'accepte que le texte brut. Notre outil est purement créatif et n\'endommage pas le contenu original.' },
13
+ ];
14
+
15
+ const howTo: ZalgoGeneratorLocaleContent['howTo'] = [
16
+ { name: 'Écrire le message de base', text: 'Entrez le texte que vous souhaitez "corrompre" dans la zone de texte principale.' },
17
+ { name: 'Ajuster l\'intensité du chaos', text: 'Déplacez le curseur pour définir le nombre de caractères de combinaison à empiler. Plus l\'intensité est élevée, plus il est difficile à lire.' },
18
+ { name: 'Sélectionner la direction du débordement', text: 'Choisissez si la corruption doit croître vers le haut, vers le bas ou dans toutes les directions simultanément.' },
19
+ { name: 'Copier le résultat', text: 'Cliquez sur le bouton de copie. Le texte résultant inclut tous les octets invisibles nécessaires pour maintenir l\'effet glitch.' },
20
+ ];
21
+
22
+ const faqSchema: WithContext<FAQPage> = {
23
+ '@context': 'https://schema.org',
24
+ '@type': 'FAQPage',
25
+ mainEntity: faq.map((item) => ({
26
+ '@type': 'Question',
27
+ name: item.question,
28
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
29
+ })),
30
+ };
31
+
32
+ const howToSchema: WithContext<HowTo> = {
33
+ '@context': 'https://schema.org',
34
+ '@type': 'HowTo',
35
+ name: title,
36
+ description,
37
+ step: howTo.map((step) => ({
38
+ '@type': 'HowToStep',
39
+ name: step.name,
40
+ text: step.text,
41
+ })),
42
+ };
43
+
44
+ const appSchema: WithContext<SoftwareApplication> = {
45
+ '@context': 'https://schema.org',
46
+ '@type': 'SoftwareApplication',
47
+ name: title,
48
+ description,
49
+ applicationCategory: 'UtilitiesApplication',
50
+ operatingSystem: 'Web',
51
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
52
+ inLanguage: 'fr',
53
+ };
54
+
3
55
  export const content: ZalgoGeneratorLocaleContent = {
4
- slug: 'generateur-zalgo',
5
- title: 'Générateur Zalgo',
6
- description: 'Corrompez vos messages avec une cascade de caractères Unicode débordants. Ajustez l\'intensité et la direction de l\'effet glitch.',
56
+ slug,
57
+ title,
58
+ description,
7
59
  faqTitle: 'Questions Fréquemment Posées',
8
60
  bibliographyTitle: 'Bibliographie du Chaos',
9
61
  ui: {
@@ -15,7 +67,18 @@ export const content: ZalgoGeneratorLocaleContent = {
15
67
  copyBtn: 'Copier le Chaos',
16
68
  copied: 'Copié !',
17
69
  faqTitle: 'FAQ',
18
- bibliographyTitle: 'Références'
70
+ bibliographyTitle: 'Références',
71
+ configTitle: 'Configuration',
72
+ intensity: 'Intensité',
73
+ upLabel: 'Corruption Supérieure',
74
+ midLabel: 'Bruit Central',
75
+ downLabel: 'Corruption Inférieure',
76
+ resetBtn: 'Réinitialiser les Valeurs',
77
+ warningText: 'AVERTISSEMENT : Le texte Zalgo utilise des caractères combinés Unicode qui peuvent déborder visuellement de leur conteneur. À utiliser avec précaution sur les réseaux sociaux.',
78
+ previewLabel: 'Aperçu en Temps Réel',
79
+ emptyLabel: 'Vide',
80
+ charLabel: 'CARACTÈRES',
81
+ noteText: 'Note : Certains navigateurs peuvent limiter le rendu des caractères combinés'
19
82
  },
20
83
  seo: [
21
84
  { type: 'title', text: 'Qu\'est-ce que le Texte Zalgo et comment fonctionne la corruption visuelle ?', level: 2 },
@@ -39,22 +102,12 @@ export const content: ZalgoGeneratorLocaleContent = {
39
102
  { term: 'Art Glitch', definition: 'Une esthétique qui incorpore ou simule intentionnellement des erreurs, des artefacts et des corruptions dans les médias numériques comme technique expressive.' },
40
103
  ]},
41
104
  ],
42
- faq: [
43
- { question: 'Qu\'est-ce que le texte Zalgo ?', answer: 'C\'est un type de texte qui utilise excessivement les caractères de combinaison Unicode (diacritiques). Lorsqu\'ils sont empilés verticalement, ces caractères "débordent" de leur ligne d\'origine, créant un effet visuel de corruption, de désordre ou d\'horreur populaire dans la culture internet.' },
44
- { question: 'Pourquoi le texte Zalgo a-t-il l\'air si étrange ?', answer: 'Il exploite une fonctionnalité de la norme Unicode qui permet d\'ajouter des marques au-dessus, en dessous ou à travers une lettre de base. Comme il n\'y a pas de limite stricte au nombre de marques pouvant être ajoutées, le texte peut "envahir" les lignes supérieures ou inférieures.' },
45
- { question: 'Puis-je utiliser ce texte sur les réseaux sociaux ?', answer: 'Oui, la plupart des plateformes modernes (Instagram, Twitter, Discord) prennent en charge l\'Unicode. Cependant, certains réseaux ou appareils peuvent filtrer ou tronquer les caractères excédentaires à très haute intensité pour maintenir la lisibilité de l\'interface.' },
46
- { question: 'Comment puis-je supprimer l\'effet Zalgo d\'un texte ?', answer: 'Pour nettoyer un texte corrompu, vous pouvez utiliser la normalisation de chaîne JavaScript ou simplement le coller dans un éditeur de texte basique qui n\'accepte que le texte brut. Notre outil est purement créatif et n\'endommage pas le contenu original.' },
47
- ],
105
+ faq,
48
106
  bibliography: [
49
107
  { name: 'Norme Unicode - Caractères de Combinaison', url: 'https://www.unicode.org/standard/principles.html#Combining_Characters' },
50
108
  { name: 'Le Phénomène du Texte Zalgo (Know Your Meme)', url: 'https://knowyourmeme.com/memes/zalgo' },
51
109
  { name: 'MDN - Normalisation de chaîne JavaScript', url: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize' },
52
110
  ],
53
- howTo: [
54
- { name: 'Écrire le message de base', text: 'Entrez le texte que vous souhaitez "corrompre" dans la zone de texte principale.' },
55
- { name: 'Ajuster l\'intensité du chaos', text: 'Déplacez le curseur pour définir le nombre de caractères de combinaison à empiler. Plus l\'intensité est élevée, plus il est difficile à lire.' },
56
- { name: 'Sélectionner la direction du débordement', text: 'Choisissez si la corruption doit croître vers le haut, vers le bas ou dans toutes les directions simultanément.' },
57
- { name: 'Copier le résultat', text: 'Cliquez sur le bouton de copie. Le texte résultant inclut tous les octets invisibles nécessaires pour maintenir l\'effet glitch.' },
58
- ],
59
- schemas: []
111
+ howTo,
112
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
60
113
  };
@@ -14,6 +14,17 @@ export interface ZalgoGeneratorUI {
14
14
  copied: string;
15
15
  faqTitle: string;
16
16
  bibliographyTitle: string;
17
+ configTitle: string;
18
+ intensity: string;
19
+ upLabel: string;
20
+ midLabel: string;
21
+ downLabel: string;
22
+ resetBtn: string;
23
+ warningText: string;
24
+ previewLabel: string;
25
+ emptyLabel: string;
26
+ charLabel: string;
27
+ noteText: string;
17
28
  }
18
29
 
19
30
  export type ZalgoGeneratorLocaleContent = ToolLocaleContent<ZalgoGeneratorUI>;
package/src/tools.ts CHANGED
@@ -1,4 +1,17 @@
1
1
  import type { ToolDefinition } from './types';
2
+ import { BEAD_PATTERN_GENERATOR_TOOL } from './tool/bead-pattern-generator/index';
3
+ import { DICE_ROLLER_TOOL } from './tool/dice-roller/index';
4
+ import { EXCUSE_GENERATOR_TOOL } from './tool/excuse-generator/index';
5
+ import { FORTUNE_COOKIE_TOOL } from './tool/fortune-cookie/index';
6
+ import { SYNESTHESIA_PAINTER_TOOL } from './tool/synesthesia-painter/index';
7
+ import { ZALGO_GENERATOR_TOOL } from './tool/zalgo-generator/index';
2
8
 
3
- export const ALL_TOOLS: ToolDefinition[] = [];
9
+ export const ALL_TOOLS: ToolDefinition[] = [
10
+ BEAD_PATTERN_GENERATOR_TOOL,
11
+ DICE_ROLLER_TOOL,
12
+ EXCUSE_GENERATOR_TOOL,
13
+ FORTUNE_COOKIE_TOOL,
14
+ SYNESTHESIA_PAINTER_TOOL,
15
+ ZALGO_GENERATOR_TOOL,
16
+ ];
4
17