@jjlmoya/utils-creative 1.20.0 → 1.22.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 (148) hide show
  1. package/package.json +4 -2
  2. package/src/category/i18n/de.ts +1 -1
  3. package/src/category/i18n/ru.ts +1 -1
  4. package/src/data.ts +2 -1
  5. package/src/entries.ts +3 -1
  6. package/src/index.ts +3 -0
  7. package/src/layouts/PreviewLayout.astro +7 -2
  8. package/src/tests/diacritics_density.test.ts +118 -0
  9. package/src/tests/inverted_punctuation.test.ts +84 -0
  10. package/src/tests/locale_completeness.test.ts +2 -14
  11. package/src/tests/no_en_dash.test.ts +70 -0
  12. package/src/tests/pagespeed_best_practices.test.ts +198 -0
  13. package/src/tests/script_density.test.ts +94 -0
  14. package/src/tests/tool_validation.test.ts +2 -2
  15. package/src/tool/bead-pattern-generator/bibliography.astro +2 -12
  16. package/src/tool/bead-pattern-generator/bibliography.ts +5 -0
  17. package/src/tool/bead-pattern-generator/component.astro +2 -2
  18. package/src/tool/bead-pattern-generator/entry.ts +0 -1
  19. package/src/tool/bead-pattern-generator/i18n/de.ts +4 -8
  20. package/src/tool/bead-pattern-generator/i18n/en.ts +4 -8
  21. package/src/tool/bead-pattern-generator/i18n/es.ts +4 -8
  22. package/src/tool/bead-pattern-generator/i18n/fr.ts +5 -9
  23. package/src/tool/bead-pattern-generator/i18n/id.ts +4 -8
  24. package/src/tool/bead-pattern-generator/i18n/it.ts +4 -8
  25. package/src/tool/bead-pattern-generator/i18n/ja.ts +4 -8
  26. package/src/tool/bead-pattern-generator/i18n/ko.ts +4 -8
  27. package/src/tool/bead-pattern-generator/i18n/nl.ts +4 -8
  28. package/src/tool/bead-pattern-generator/i18n/pl.ts +4 -8
  29. package/src/tool/bead-pattern-generator/i18n/pt.ts +4 -8
  30. package/src/tool/bead-pattern-generator/i18n/ru.ts +8 -12
  31. package/src/tool/bead-pattern-generator/i18n/sv.ts +4 -8
  32. package/src/tool/bead-pattern-generator/i18n/tr.ts +4 -8
  33. package/src/tool/bead-pattern-generator/i18n/zh.ts +7 -11
  34. package/src/tool/dice-roller/bibliography.astro +3 -12
  35. package/src/tool/dice-roller/bibliography.ts +5 -0
  36. package/src/tool/dice-roller/entry.ts +0 -1
  37. package/src/tool/dice-roller/i18n/de.ts +12 -16
  38. package/src/tool/dice-roller/i18n/en.ts +12 -16
  39. package/src/tool/dice-roller/i18n/es.ts +11 -15
  40. package/src/tool/dice-roller/i18n/fr.ts +18 -22
  41. package/src/tool/dice-roller/i18n/id.ts +12 -16
  42. package/src/tool/dice-roller/i18n/it.ts +11 -15
  43. package/src/tool/dice-roller/i18n/ja.ts +9 -13
  44. package/src/tool/dice-roller/i18n/ko.ts +10 -14
  45. package/src/tool/dice-roller/i18n/nl.ts +12 -16
  46. package/src/tool/dice-roller/i18n/pl.ts +11 -15
  47. package/src/tool/dice-roller/i18n/pt.ts +12 -16
  48. package/src/tool/dice-roller/i18n/ru.ts +18 -22
  49. package/src/tool/dice-roller/i18n/sv.ts +12 -16
  50. package/src/tool/dice-roller/i18n/tr.ts +10 -14
  51. package/src/tool/dice-roller/i18n/zh.ts +16 -20
  52. package/src/tool/excuse-generator/bibliography.astro +2 -12
  53. package/src/tool/excuse-generator/bibliography.ts +3 -0
  54. package/src/tool/excuse-generator/entry.ts +0 -1
  55. package/src/tool/excuse-generator/i18n/de.ts +7 -9
  56. package/src/tool/excuse-generator/i18n/en.ts +2 -4
  57. package/src/tool/excuse-generator/i18n/es.ts +2 -4
  58. package/src/tool/excuse-generator/i18n/fr.ts +4 -6
  59. package/src/tool/excuse-generator/i18n/id.ts +2 -4
  60. package/src/tool/excuse-generator/i18n/it.ts +2 -4
  61. package/src/tool/excuse-generator/i18n/ja.ts +2 -4
  62. package/src/tool/excuse-generator/i18n/ko.ts +2 -4
  63. package/src/tool/excuse-generator/i18n/nl.ts +2 -4
  64. package/src/tool/excuse-generator/i18n/pl.ts +7 -9
  65. package/src/tool/excuse-generator/i18n/pt.ts +2 -4
  66. package/src/tool/excuse-generator/i18n/ru.ts +7 -9
  67. package/src/tool/excuse-generator/i18n/sv.ts +2 -4
  68. package/src/tool/excuse-generator/i18n/tr.ts +2 -4
  69. package/src/tool/excuse-generator/i18n/zh.ts +9 -11
  70. package/src/tool/fortune-cookie/bibliography.astro +2 -12
  71. package/src/tool/fortune-cookie/bibliography.ts +3 -0
  72. package/src/tool/fortune-cookie/component.astro +7 -10
  73. package/src/tool/fortune-cookie/entry.ts +0 -1
  74. package/src/tool/fortune-cookie/i18n/de.ts +6 -9
  75. package/src/tool/fortune-cookie/i18n/en.ts +6 -9
  76. package/src/tool/fortune-cookie/i18n/es.ts +2 -4
  77. package/src/tool/fortune-cookie/i18n/fr.ts +7 -10
  78. package/src/tool/fortune-cookie/i18n/id.ts +6 -9
  79. package/src/tool/fortune-cookie/i18n/it.ts +3 -6
  80. package/src/tool/fortune-cookie/i18n/ja.ts +2 -5
  81. package/src/tool/fortune-cookie/i18n/ko.ts +2 -5
  82. package/src/tool/fortune-cookie/i18n/nl.ts +6 -9
  83. package/src/tool/fortune-cookie/i18n/pl.ts +6 -9
  84. package/src/tool/fortune-cookie/i18n/pt.ts +6 -9
  85. package/src/tool/fortune-cookie/i18n/ru.ts +17 -20
  86. package/src/tool/fortune-cookie/i18n/sv.ts +6 -9
  87. package/src/tool/fortune-cookie/i18n/tr.ts +5 -8
  88. package/src/tool/fortune-cookie/i18n/zh.ts +7 -10
  89. package/src/tool/glitch-image-distorter/bibliography.astro +8 -0
  90. package/src/tool/glitch-image-distorter/bibliography.ts +4 -0
  91. package/src/tool/glitch-image-distorter/component.astro +393 -0
  92. package/src/tool/glitch-image-distorter/entry.ts +48 -0
  93. package/src/tool/glitch-image-distorter/glitch-image-distorter.css +233 -0
  94. package/src/tool/glitch-image-distorter/i18n/de.ts +131 -0
  95. package/src/tool/glitch-image-distorter/i18n/en.ts +131 -0
  96. package/src/tool/glitch-image-distorter/i18n/es.ts +131 -0
  97. package/src/tool/glitch-image-distorter/i18n/fr.ts +131 -0
  98. package/src/tool/glitch-image-distorter/i18n/id.ts +131 -0
  99. package/src/tool/glitch-image-distorter/i18n/it.ts +131 -0
  100. package/src/tool/glitch-image-distorter/i18n/ja.ts +131 -0
  101. package/src/tool/glitch-image-distorter/i18n/ko.ts +131 -0
  102. package/src/tool/glitch-image-distorter/i18n/nl.ts +131 -0
  103. package/src/tool/glitch-image-distorter/i18n/pl.ts +131 -0
  104. package/src/tool/glitch-image-distorter/i18n/pt.ts +131 -0
  105. package/src/tool/glitch-image-distorter/i18n/ru.ts +131 -0
  106. package/src/tool/glitch-image-distorter/i18n/sv.ts +131 -0
  107. package/src/tool/glitch-image-distorter/i18n/tr.ts +131 -0
  108. package/src/tool/glitch-image-distorter/i18n/zh.ts +131 -0
  109. package/src/tool/glitch-image-distorter/index.ts +9 -0
  110. package/src/tool/glitch-image-distorter/seo.astro +15 -0
  111. package/src/tool/synesthesia-painter/bibliography.astro +3 -12
  112. package/src/tool/synesthesia-painter/bibliography.ts +5 -0
  113. package/src/tool/synesthesia-painter/entry.ts +0 -1
  114. package/src/tool/synesthesia-painter/i18n/de.ts +14 -18
  115. package/src/tool/synesthesia-painter/i18n/en.ts +5 -9
  116. package/src/tool/synesthesia-painter/i18n/es.ts +4 -8
  117. package/src/tool/synesthesia-painter/i18n/fr.ts +10 -14
  118. package/src/tool/synesthesia-painter/i18n/id.ts +5 -9
  119. package/src/tool/synesthesia-painter/i18n/it.ts +2 -6
  120. package/src/tool/synesthesia-painter/i18n/ja.ts +4 -8
  121. package/src/tool/synesthesia-painter/i18n/ko.ts +4 -8
  122. package/src/tool/synesthesia-painter/i18n/nl.ts +4 -8
  123. package/src/tool/synesthesia-painter/i18n/pl.ts +14 -18
  124. package/src/tool/synesthesia-painter/i18n/pt.ts +5 -9
  125. package/src/tool/synesthesia-painter/i18n/ru.ts +17 -21
  126. package/src/tool/synesthesia-painter/i18n/sv.ts +5 -9
  127. package/src/tool/synesthesia-painter/i18n/tr.ts +4 -8
  128. package/src/tool/synesthesia-painter/i18n/zh.ts +15 -19
  129. package/src/tool/zalgo-generator/bibliography.astro +2 -12
  130. package/src/tool/zalgo-generator/bibliography.ts +5 -0
  131. package/src/tool/zalgo-generator/component.astro +1 -1
  132. package/src/tool/zalgo-generator/entry.ts +0 -1
  133. package/src/tool/zalgo-generator/i18n/de.ts +9 -13
  134. package/src/tool/zalgo-generator/i18n/en.ts +5 -9
  135. package/src/tool/zalgo-generator/i18n/es.ts +4 -8
  136. package/src/tool/zalgo-generator/i18n/fr.ts +9 -13
  137. package/src/tool/zalgo-generator/i18n/id.ts +5 -9
  138. package/src/tool/zalgo-generator/i18n/it.ts +4 -8
  139. package/src/tool/zalgo-generator/i18n/ja.ts +4 -8
  140. package/src/tool/zalgo-generator/i18n/ko.ts +4 -8
  141. package/src/tool/zalgo-generator/i18n/nl.ts +5 -9
  142. package/src/tool/zalgo-generator/i18n/pl.ts +9 -13
  143. package/src/tool/zalgo-generator/i18n/pt.ts +5 -9
  144. package/src/tool/zalgo-generator/i18n/ru.ts +9 -13
  145. package/src/tool/zalgo-generator/i18n/sv.ts +5 -9
  146. package/src/tool/zalgo-generator/i18n/tr.ts +5 -9
  147. package/src/tool/zalgo-generator/i18n/zh.ts +9 -13
  148. package/src/tools.ts +2 -0
@@ -0,0 +1,94 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+
4
+ type ScriptLocale = keyof typeof SCRIPT_RULES;
5
+
6
+ const SCRIPT_RULES = {
7
+ ja: {
8
+ language: 'Japanese',
9
+ scriptName: 'kana/kanji',
10
+ scriptCharacters: /[\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/gu,
11
+ minScriptRatio: 0.45,
12
+ },
13
+ ko: {
14
+ language: 'Korean',
15
+ scriptName: 'hangul',
16
+ scriptCharacters: /\p{Script=Hangul}/gu,
17
+ minScriptRatio: 0.55,
18
+ },
19
+ ru: {
20
+ language: 'Russian',
21
+ scriptName: 'cyrillic',
22
+ scriptCharacters: /\p{Script=Cyrillic}/gu,
23
+ minScriptRatio: 0.65,
24
+ },
25
+ zh: {
26
+ language: 'Chinese',
27
+ scriptName: 'han',
28
+ scriptCharacters: /\p{Script=Han}/gu,
29
+ minScriptRatio: 0.45,
30
+ },
31
+ } as const;
32
+
33
+ const LETTERS = /\p{L}/gu;
34
+ const TRANSLATABLE_KEYS = ['title', 'description', 'ui', 'seo', 'faq', 'howTo'] as const;
35
+
36
+ function collectStrings(value: unknown): string[] {
37
+ if (typeof value === 'string') return [value];
38
+ if (!value || typeof value !== 'object') return [];
39
+ if (Array.isArray(value)) return value.flatMap(collectStrings);
40
+ return Object.values(value).flatMap(collectStrings);
41
+ }
42
+
43
+ function normalizeText(value: unknown): string {
44
+ return collectStrings(value).join(' ').normalize('NFC');
45
+ }
46
+
47
+ function translatableContent(content: Record<string, unknown>) {
48
+ return TRANSLATABLE_KEYS.map((key) => content[key]);
49
+ }
50
+
51
+ function letterCount(text: string): number {
52
+ return text.match(LETTERS)?.length ?? 0;
53
+ }
54
+
55
+ function scriptCount(text: string, locale: ScriptLocale): number {
56
+ return text.match(SCRIPT_RULES[locale].scriptCharacters)?.length ?? 0;
57
+ }
58
+
59
+ function scriptRatio(text: string, locale: ScriptLocale): number {
60
+ const letters = letterCount(text);
61
+ if (letters === 0) return 0;
62
+ return scriptCount(text, locale) / letters;
63
+ }
64
+
65
+ describe('Native script density validation', () => {
66
+ ALL_TOOLS.forEach((tool) => {
67
+ describe(`Tool: ${tool.entry.id}`, () => {
68
+ Object.keys(SCRIPT_RULES).forEach((locale) => {
69
+ it(`${locale} keeps most translated text in its native script`, async () => {
70
+ const typedLocale = locale as ScriptLocale;
71
+ const loader = tool.entry.i18n[typedLocale];
72
+ if (!loader) return;
73
+
74
+ const content = await loader();
75
+ const rule = SCRIPT_RULES[typedLocale];
76
+ const text = normalizeText(translatableContent(content as Record<string, unknown>));
77
+ const letters = letterCount(text);
78
+ const matches = scriptCount(text, typedLocale);
79
+ const ratio = scriptRatio(text, typedLocale);
80
+
81
+ expect(
82
+ ratio,
83
+ [
84
+ `Possible broken translation detected in ${tool.entry.id}/${typedLocale} (${rule.language}).`,
85
+ `The text has ${matches} ${rule.scriptName} characters out of ${letters} analyzed letters (${(ratio * 100).toFixed(1)}%).`,
86
+ `Most translatable content should be written in ${rule.scriptName} script.`,
87
+ 'Non-translatable fields such as slug, bibliography, and schemas are ignored to avoid false positives.',
88
+ ].join(' '),
89
+ ).toBeGreaterThanOrEqual(rule.minScriptRatio);
90
+ });
91
+ });
92
+ });
93
+ });
94
+ });
@@ -4,8 +4,8 @@ import { creativeCategory } from '../data';
4
4
 
5
5
  describe('Tool Validation Suite', () => {
6
6
  describe('Library Registration', () => {
7
- it('should have 6 tools in ALL_TOOLS', () => {
8
- expect(ALL_TOOLS.length).toBe(6);
7
+ it('should have 7 tools in ALL_TOOLS', () => {
8
+ expect(ALL_TOOLS.length).toBe(7);
9
9
  });
10
10
 
11
11
  it('creativeCategory should be defined', () => {
@@ -1,18 +1,8 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { beadPatternGenerator, type BeadPatternGeneratorLocaleContent } from './index';
4
- import type { KnownLocale } from '../../types';
3
+ import { bibliography } from './bibliography';
5
4
 
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const localeContentLoader = (beadPatternGenerator.i18n as Record<string, () => Promise<BeadPatternGeneratorLocaleContent>>)[locale];
12
- const content = localeContentLoader ? await localeContentLoader() : null;
13
- if (!content) return null;
14
-
15
- const { bibliography } = content;
5
+ if (!bibliography || bibliography.length === 0) return null;
16
6
  ---
17
7
 
18
8
  <SharedBibliography links={bibliography} />
@@ -0,0 +1,5 @@
1
+ export const bibliography = [
2
+ { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
3
+ { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
4
+ { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
5
+ ];
@@ -21,7 +21,7 @@ const { ui } = Astro.props;
21
21
 
22
22
  <div class="bead-controls">
23
23
  <div class="bead-control-group">
24
- <label class="bead-control-label">{ui.gridSizeLabel}</label>
24
+ <label class="bead-control-label" for="grid-width">{ui.gridSizeLabel}</label>
25
25
  <div class="bead-slider-row">
26
26
  <input type="range" id="grid-width" min="10" max="100" value="40" class="bead-slider bead-slider-pink" />
27
27
  <span id="grid-width-value" class="bead-slider-val bead-val-pink">40</span>
@@ -29,7 +29,7 @@ const { ui } = Astro.props;
29
29
  </div>
30
30
 
31
31
  <div class="bead-control-group">
32
- <label class="bead-control-label">{ui.colorCountLabel}</label>
32
+ <label class="bead-control-label" for="color-count">{ui.colorCountLabel}</label>
33
33
  <div class="bead-slider-row">
34
34
  <input type="range" id="color-count" min="2" max="32" value="12" class="bead-slider bead-slider-purple" />
35
35
  <span id="color-count-value" class="bead-slider-val bead-val-purple">12</span>
@@ -21,7 +21,6 @@ export interface BeadPatternGeneratorUI {
21
21
  uploadLabel: string;
22
22
  pixelateBtn: string;
23
23
  faqTitle: string;
24
- bibliographyTitle: string;
25
24
  }
26
25
 
27
26
  export type BeadPatternGeneratorLocaleContent = ToolLocaleContent<BeadPatternGeneratorUI>;
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'perlenmuster-generator';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Häufig gestellte Fragen',
60
- bibliographyTitle: 'Handwerks-Bibliographie',
61
61
  ui: {
62
62
  title: 'Muster Labor',
63
63
  subtitle: 'Farbtechnik für Ihre Hände',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro-Gaming:</strong> Authentische 8-Bit-Assets und Sprites in Sekunden.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Perlenbreite', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Farbpalettenplätze', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'Perlenbreite', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Farbpalettenplätze', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: 'Quantisierungsalgorithmus', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Exportformat (Muster + Anleitung)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'In einer Ära flüchtiger Bildschirme ist das Erschaffen von etwas Physischem ein revolutionärer Akt. Dieses Werkzeug versucht nicht, Kunst zu automatisieren, sondern den <strong>Handwerker zu stärken</strong>. Wir geben Ihnen rechnerische Präzision, damit Ihre Hände bleibende Vermächtnisse schaffen können.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'bead-pattern-generator';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Frequently Asked Questions',
60
- bibliographyTitle: 'Artisan Bibliography',
61
61
  ui: {
62
62
  title: 'Pattern Laboratory',
63
63
  subtitle: 'Color engineering for your hands',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro Gaming:</strong> 8-bit authentic assets and sprites in seconds.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Bead width range', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Color palette slots', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'Bead width range', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Color palette slots', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: 'Quantization algorithm', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Export format (pattern + guide)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'In an era of ephemeral screens, creating something physical is a revolutionary act. This tool does not seek to automate art, but to <strong>empower the artisan</strong>. We give you computational precision so your hands can build lasting legacies.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generador-patrones-cuentas';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Preguntas Frecuentes',
60
- bibliographyTitle: 'Bibliografía del Artesano',
61
61
  ui: {
62
62
  title: 'Laboratorio de Patrones',
63
63
  subtitle: 'Ingeniería de color para tus manos',
@@ -98,8 +98,8 @@ export const content: BeadPatternGeneratorLocaleContent = {
98
98
  ]},
99
99
  { 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.' },
100
100
  { type: 'stats', items: [
101
- { value: '10100', label: 'Ancho del patrón (cuentas)', icon: 'mdi:arrow-expand-horizontal' },
102
- { value: '232', label: 'Colores en la paleta', icon: 'mdi:palette-swatch' },
101
+ { value: '10-100', label: 'Ancho del patrón (cuentas)', icon: 'mdi:arrow-expand-horizontal' },
102
+ { value: '2-32', label: 'Colores en la paleta', icon: 'mdi:palette-swatch' },
103
103
  { value: 'K-Means', label: 'Algoritmo de cuantización', icon: 'mdi:function-variant' },
104
104
  { value: 'ZIP', label: 'Exportación (patrón + guía)', icon: 'mdi:zip-box' },
105
105
  ], columns: 4 },
@@ -112,11 +112,7 @@ export const content: BeadPatternGeneratorLocaleContent = {
112
112
  ]},
113
113
  ],
114
114
  faq,
115
- bibliography: [
116
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
117
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
118
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
119
- ],
115
+ bibliography,
120
116
  howTo,
121
117
  schemas: [faqSchema as any, howToSchema as any, appSchema],
122
118
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generateur-de-modeles-de-perles';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Questions Fréquemment Posées',
60
- bibliographyTitle: 'Bibliographie de l\'Artisan',
61
61
  ui: {
62
62
  title: 'Laboratoire de Modèles',
63
63
  subtitle: 'Ingénierie chromatique pour vos mains',
@@ -81,7 +81,7 @@ export const content: BeadPatternGeneratorLocaleContent = {
81
81
  bibliographyTitle: 'Références'
82
82
  },
83
83
  seo: [
84
- { type: 'title', text: 'Alchimie Numérique : Transmutez les Pixels en Art Tangible', level: 2 },
84
+ { type: 'title', text: 'Alchimie Numérique: Transmutez les Pixels en Art Tangible', level: 2 },
85
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
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
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.' },
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro Gaming :</strong> Sprites et assets 8-bits authentiques en quelques secondes.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Largeur en perles', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Emplacements de palette', icon: 'mdi:palette-swatch' },
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
102
  { value: 'K-Means', label: 'Algorithme de quantification', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Format d\'export (modèle + guide)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
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
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Quantification de couleurs utilisant K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Spécifications des Perles Miyuki Delica', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Algorithmes de Tramage (Dithering)', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'pembuat-pola-manik';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Pertanyaan yang Sering Diajukan',
60
- bibliographyTitle: 'Bibliografi Artisan',
61
61
  ui: {
62
62
  title: 'Laboratorium Pola',
63
63
  subtitle: 'Rekayasa warna untuk tangan Anda',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro Gaming:</strong> Aset dan sprite 8-bit otentik dalam hitungan detik.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Rentang lebar manik', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Slot palet warna', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'Rentang lebar manik', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Slot palet warna', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: 'Algoritma kuantisasi', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Format ekspor (pola + panduan)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'Di era layar yang fana, menciptakan sesuatu yang fisik adalah tindakan revolusioner. Alat ini tidak berusaha mengotomatisasi seni, tetapi untuk <strong>memberdayakan artisan</strong>. Kami memberi Anda presisi komputasi sehingga tangan Anda dapat membangun warisan yang langgeng.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generatore-schemi-perline';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Domande Frequenti',
60
- bibliographyTitle: 'Bibliografia Artigiana',
61
61
  ui: {
62
62
  title: 'Laboratorio di Schemi',
63
63
  subtitle: 'Ingegneria del colore per le tue mani',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro Gaming:</strong> Asset e sprite 8-bit autentici in pochi secondi.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Range larghezza perline', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Slot tavolozza colori', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'Range larghezza perline', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Slot tavolozza colori', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: 'Algoritmo quantizzazione', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Formato esportazione (schema + guida)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'In un\'epoca di schermi effimeri, creare qualcosa di fisico è un atto rivoluzionario. Questo strumento non cerca di automatizzare l\'arte, ma di <strong>potenziare l\'artigiano</strong>. Ti diamo precisione computazionale affinché le tue mani possano costruire eredità durature.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'bead-pattern-generator';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'よくある質問',
60
- bibliographyTitle: '職人のための参考文献',
61
61
  ui: {
62
62
  title: 'パターン研究所',
63
63
  subtitle: 'その手で色を操るエンジニアリング',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>レトロゲーム:</strong> 本物の8ビットアセットやスプライトを数秒で作成。',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'ビーズ幅の範囲', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'カラーパレット枠', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'ビーズ幅の範囲', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'カラーパレット枠', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: '減色アルゴリズム', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: '出力形式(図案+ガイド)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: '刹那的な画面が支配する現代において、形のある物を創り出すことは、ある種の革命です。このツールは芸術の自動化を目指すものではなく、<strong>職人の力を引き出す</strong>ためのものです。コンピューターの精度を貸与することで、あなたの手で不朽の遺産を築く手助けをします。' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'bead-pattern-generator';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: '자주 묻는 질문',
60
- bibliographyTitle: '전문가 참고 자료',
61
61
  ui: {
62
62
  title: '도안 연구소',
63
63
  subtitle: '당신의 손을 위한 색상 공학',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>레트로 게임:</strong> 정통 8비트 에셋 및 스프라이트를 단 몇 초 만에 제작.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: '비즈 너비 범위', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: '색상 팔레트 슬롯', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: '비즈 너비 범위', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: '색상 팔레트 슬롯', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: '양자화 알고리즘', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: '내보내기 형식 (도안 + 가이드)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: '덧없는 화면의 시대에 물리적인 무언가를 만드는 것은 혁명적인 행위입니다. 이 도구는 예술을 자동화하려는 것이 아니라 <strong>장인의 능력을 강화</strong>하기 위한 것입니다. 당신의 손이 지속적인 유산을 쌓을 수 있도록 계산적인 정밀함을 제공합니다.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'kralenpatroon-generator';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Veelgestelde Vragen',
60
- bibliographyTitle: 'Ambachtelijke Bibliografie',
61
61
  ui: {
62
62
  title: 'Patroon Laboratorium',
63
63
  subtitle: 'Kleurtechniek voor je eigen handen',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro Gaming:</strong> Authentieke 8-bit assets en sprites in enkele seconden.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Kralenbreedte bereik', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Kleurpalet slots', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'Kralenbreedte bereik', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Kleurpalet slots', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: 'Kwantisatie-algoritme', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Exportformaat (patroon + gids)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'In een tijdperk van vluchtige schermen is het creëren van iets fysieks een revolutionaire daad. Deze tool probeert kunst niet te automatiseren, maar de <strong>ambachtsman te versterken</strong>. We geven je computationele precisie zodat jouw handen blijvende erfenissen kunnen bouwen.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'generator-wzorow-koralikowych';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Najczęściej Zadawane Pytania',
60
- bibliographyTitle: 'Bibliografia Rękodzielnicza',
61
61
  ui: {
62
62
  title: 'Laboratorium Wzorów',
63
63
  subtitle: 'Inżynieria kolorów dla Twoich rąk',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro Gaming:</strong> Autentyczne 8-bitowe zasoby i sprite\'y w kilka sekund.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Zakres szerokości (koraliki)', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Liczba pól w palecie', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'Zakres szerokości (koraliki)', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Liczba pól w palecie', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Średnich', label: 'Algorytm kwantyzacji', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Format eksportu (wzór + poradnik)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'W erze efemerycznych ekranów, tworzenie czegoś fizycznego jest aktem rewolucyjnym. To narzędzie nie dąży do zautomatyzowania sztuki, ale do <strong>wzmocnienia rzemieślnika</strong>. Dajemy Ci obliczeniową precyzję, aby Twoje ręce mogły budować trwałe dziedzictwo.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };
@@ -1,4 +1,5 @@
1
1
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
2
3
  import type { BeadPatternGeneratorLocaleContent } from '../index';
3
4
 
4
5
  const slug = 'gerador-de-padroes-de-contas';
@@ -57,7 +58,6 @@ export const content: BeadPatternGeneratorLocaleContent = {
57
58
  title,
58
59
  description,
59
60
  faqTitle: 'Perguntas Frequentes',
60
- bibliographyTitle: 'Bibliografia Artesanal',
61
61
  ui: {
62
62
  title: 'Laboratório de Padrões',
63
63
  subtitle: 'Engenharia de cores para as suas mãos',
@@ -97,19 +97,15 @@ export const content: BeadPatternGeneratorLocaleContent = {
97
97
  '<strong>Retro Gaming:</strong> Assets e sprites 8-bit autênticos em segundos.',
98
98
  ]},
99
99
  { type: 'stats', items: [
100
- { value: '10100', label: 'Intervalo de largura de contas', icon: 'mdi:arrow-expand-horizontal' },
101
- { value: '232', label: 'Ranhuras de paleta de cores', icon: 'mdi:palette-swatch' },
100
+ { value: '10-100', label: 'Intervalo de largura de contas', icon: 'mdi:arrow-expand-horizontal' },
101
+ { value: '2-32', label: 'Ranhuras de paleta de cores', icon: 'mdi:palette-swatch' },
102
102
  { value: 'K-Means', label: 'Algoritmo de quantização', icon: 'mdi:function-variant' },
103
103
  { value: 'ZIP', label: 'Formato de exportação (padrão + guia)', icon: 'mdi:zip-box' },
104
104
  ], columns: 4 },
105
105
  { type: 'paragraph', html: 'Numa era de ecrãs efémeros, criar algo físico é um ato revolucionário. Esta ferramenta não procura automatizar a arte, mas sim <strong>capacitar o artesão</strong>. Damos-lhe precisão computacional para que as suas mãos possam construir legados duradouros.' },
106
106
  ],
107
107
  faq,
108
- bibliography: [
109
- { name: 'Scikit-Image: Color Quantization using K-Means', url: 'https://scikit-learn.org/0.23/auto_examples/cluster/plot_color_quantization.html' },
110
- { name: 'Miyuki Delica Beads Specification', url: 'https://www.miyuki-beads.co.jp/english/seedbeads/delica.html' },
111
- { name: 'Visgraf Lab: Dithering Algorithms', url: 'https://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html' },
112
- ],
108
+ bibliography,
113
109
  howTo,
114
110
  schemas: [faqSchema as any, howToSchema as any, appSchema],
115
111
  };