@jjlmoya/utils-developer 1.2.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 (228) hide show
  1. package/package.json +64 -0
  2. package/src/category/i18n/en.ts +34 -0
  3. package/src/category/i18n/es.ts +34 -0
  4. package/src/category/i18n/fr.ts +34 -0
  5. package/src/category/index.ts +31 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +78 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/css_specificity_logic.test.ts +39 -0
  17. package/src/tests/faq_count.test.ts +19 -0
  18. package/src/tests/locale_completeness.test.ts +42 -0
  19. package/src/tests/mocks/astro_mock.js +2 -0
  20. package/src/tests/no_h1_in_components.test.ts +48 -0
  21. package/src/tests/schemas_fulfillment.test.ts +23 -0
  22. package/src/tests/seo_length.test.ts +22 -0
  23. package/src/tests/title_quality.test.ts +55 -0
  24. package/src/tests/tool_validation.test.ts +17 -0
  25. package/src/tool/aspectRatio/bibliography.astro +14 -0
  26. package/src/tool/aspectRatio/component.astro +468 -0
  27. package/src/tool/aspectRatio/i18n/en.ts +177 -0
  28. package/src/tool/aspectRatio/i18n/es.ts +177 -0
  29. package/src/tool/aspectRatio/i18n/fr.ts +177 -0
  30. package/src/tool/aspectRatio/index.ts +34 -0
  31. package/src/tool/aspectRatio/seo.astro +14 -0
  32. package/src/tool/aspectRatio/ui.ts +12 -0
  33. package/src/tool/calculadoraTiempoDatos/bibliography.astro +14 -0
  34. package/src/tool/calculadoraTiempoDatos/component.astro +829 -0
  35. package/src/tool/calculadoraTiempoDatos/i18n/en.ts +150 -0
  36. package/src/tool/calculadoraTiempoDatos/i18n/es.ts +163 -0
  37. package/src/tool/calculadoraTiempoDatos/i18n/fr.ts +150 -0
  38. package/src/tool/calculadoraTiempoDatos/index.ts +33 -0
  39. package/src/tool/calculadoraTiempoDatos/seo.astro +14 -0
  40. package/src/tool/calculadoraTiempoDatos/ui.ts +24 -0
  41. package/src/tool/colorConverter/bibliography.astro +14 -0
  42. package/src/tool/colorConverter/component.astro +504 -0
  43. package/src/tool/colorConverter/i18n/en.ts +126 -0
  44. package/src/tool/colorConverter/i18n/es.ts +126 -0
  45. package/src/tool/colorConverter/i18n/fr.ts +126 -0
  46. package/src/tool/colorConverter/index.ts +33 -0
  47. package/src/tool/colorConverter/seo.astro +14 -0
  48. package/src/tool/colorConverter/ui.ts +16 -0
  49. package/src/tool/conversorExcelCsvHtml/bibliography.astro +14 -0
  50. package/src/tool/conversorExcelCsvHtml/component.astro +595 -0
  51. package/src/tool/conversorExcelCsvHtml/i18n/en.ts +129 -0
  52. package/src/tool/conversorExcelCsvHtml/i18n/es.ts +129 -0
  53. package/src/tool/conversorExcelCsvHtml/i18n/fr.ts +129 -0
  54. package/src/tool/conversorExcelCsvHtml/index.ts +33 -0
  55. package/src/tool/conversorExcelCsvHtml/seo.astro +14 -0
  56. package/src/tool/conversorExcelCsvHtml/ui.ts +14 -0
  57. package/src/tool/cronGenerator/bibliography.astro +14 -0
  58. package/src/tool/cronGenerator/component.astro +667 -0
  59. package/src/tool/cronGenerator/i18n/en.ts +191 -0
  60. package/src/tool/cronGenerator/i18n/es.ts +191 -0
  61. package/src/tool/cronGenerator/i18n/fr.ts +191 -0
  62. package/src/tool/cronGenerator/index.ts +34 -0
  63. package/src/tool/cronGenerator/seo.astro +14 -0
  64. package/src/tool/cronGenerator/ui.ts +45 -0
  65. package/src/tool/cssSpecificityCalculator/bibliography.astro +14 -0
  66. package/src/tool/cssSpecificityCalculator/component.astro +292 -0
  67. package/src/tool/cssSpecificityCalculator/i18n/en.ts +168 -0
  68. package/src/tool/cssSpecificityCalculator/i18n/es.ts +168 -0
  69. package/src/tool/cssSpecificityCalculator/i18n/fr.ts +168 -0
  70. package/src/tool/cssSpecificityCalculator/index.ts +34 -0
  71. package/src/tool/cssSpecificityCalculator/logic.ts +100 -0
  72. package/src/tool/cssSpecificityCalculator/seo.astro +14 -0
  73. package/src/tool/cssSpecificityCalculator/ui-controller.ts +57 -0
  74. package/src/tool/cssSpecificityCalculator/ui.ts +11 -0
  75. package/src/tool/cssToInlineConverter/bibliography.astro +14 -0
  76. package/src/tool/cssToInlineConverter/component.astro +308 -0
  77. package/src/tool/cssToInlineConverter/i18n/en.ts +160 -0
  78. package/src/tool/cssToInlineConverter/i18n/es.ts +160 -0
  79. package/src/tool/cssToInlineConverter/i18n/fr.ts +160 -0
  80. package/src/tool/cssToInlineConverter/index.ts +34 -0
  81. package/src/tool/cssToInlineConverter/seo.astro +14 -0
  82. package/src/tool/cssToInlineConverter/ui.ts +12 -0
  83. package/src/tool/duplicateCssRemover/bibliography.astro +14 -0
  84. package/src/tool/duplicateCssRemover/component.astro +353 -0
  85. package/src/tool/duplicateCssRemover/i18n/en.ts +167 -0
  86. package/src/tool/duplicateCssRemover/i18n/es.ts +167 -0
  87. package/src/tool/duplicateCssRemover/i18n/fr.ts +167 -0
  88. package/src/tool/duplicateCssRemover/index.ts +34 -0
  89. package/src/tool/duplicateCssRemover/seo.astro +14 -0
  90. package/src/tool/duplicateCssRemover/ui.ts +12 -0
  91. package/src/tool/generadorSecurityTxt/bibliography.astro +14 -0
  92. package/src/tool/generadorSecurityTxt/component.astro +473 -0
  93. package/src/tool/generadorSecurityTxt/i18n/en.ts +173 -0
  94. package/src/tool/generadorSecurityTxt/i18n/es.ts +173 -0
  95. package/src/tool/generadorSecurityTxt/i18n/fr.ts +173 -0
  96. package/src/tool/generadorSecurityTxt/index.ts +33 -0
  97. package/src/tool/generadorSecurityTxt/seo.astro +14 -0
  98. package/src/tool/generadorSecurityTxt/ui.ts +27 -0
  99. package/src/tool/hashGenerator/bibliography.astro +14 -0
  100. package/src/tool/hashGenerator/component.astro +367 -0
  101. package/src/tool/hashGenerator/i18n/en.ts +118 -0
  102. package/src/tool/hashGenerator/i18n/es.ts +118 -0
  103. package/src/tool/hashGenerator/i18n/fr.ts +118 -0
  104. package/src/tool/hashGenerator/index.ts +33 -0
  105. package/src/tool/hashGenerator/md5.ts +138 -0
  106. package/src/tool/hashGenerator/seo.astro +14 -0
  107. package/src/tool/hashGenerator/ui.ts +11 -0
  108. package/src/tool/inspectorCertificadosSsl/bibliography.astro +14 -0
  109. package/src/tool/inspectorCertificadosSsl/component.astro +580 -0
  110. package/src/tool/inspectorCertificadosSsl/i18n/en.ts +214 -0
  111. package/src/tool/inspectorCertificadosSsl/i18n/es.ts +214 -0
  112. package/src/tool/inspectorCertificadosSsl/i18n/fr.ts +214 -0
  113. package/src/tool/inspectorCertificadosSsl/index.ts +33 -0
  114. package/src/tool/inspectorCertificadosSsl/seo.astro +14 -0
  115. package/src/tool/inspectorCertificadosSsl/ui.ts +29 -0
  116. package/src/tool/jsonFormatter/bibliography.astro +14 -0
  117. package/src/tool/jsonFormatter/component.astro +590 -0
  118. package/src/tool/jsonFormatter/i18n/en.ts +156 -0
  119. package/src/tool/jsonFormatter/i18n/es.ts +156 -0
  120. package/src/tool/jsonFormatter/i18n/fr.ts +156 -0
  121. package/src/tool/jsonFormatter/index.ts +34 -0
  122. package/src/tool/jsonFormatter/seo.astro +14 -0
  123. package/src/tool/jsonFormatter/ui.ts +15 -0
  124. package/src/tool/keycode/bibliography.astro +14 -0
  125. package/src/tool/keycode/component.astro +540 -0
  126. package/src/tool/keycode/i18n/en.ts +160 -0
  127. package/src/tool/keycode/i18n/es.ts +160 -0
  128. package/src/tool/keycode/i18n/fr.ts +160 -0
  129. package/src/tool/keycode/index.ts +34 -0
  130. package/src/tool/keycode/seo.astro +14 -0
  131. package/src/tool/keycode/ui.ts +10 -0
  132. package/src/tool/llmCostCalculator/bibliography.astro +14 -0
  133. package/src/tool/llmCostCalculator/component.astro +488 -0
  134. package/src/tool/llmCostCalculator/data.ts +99 -0
  135. package/src/tool/llmCostCalculator/i18n/en.ts +165 -0
  136. package/src/tool/llmCostCalculator/i18n/es.ts +165 -0
  137. package/src/tool/llmCostCalculator/i18n/fr.ts +165 -0
  138. package/src/tool/llmCostCalculator/index.ts +34 -0
  139. package/src/tool/llmCostCalculator/seo.astro +14 -0
  140. package/src/tool/llmCostCalculator/ui.ts +11 -0
  141. package/src/tool/mobileMockupGenerator/app.ts +614 -0
  142. package/src/tool/mobileMockupGenerator/bibliography.astro +14 -0
  143. package/src/tool/mobileMockupGenerator/component.astro +1044 -0
  144. package/src/tool/mobileMockupGenerator/constants.ts +48 -0
  145. package/src/tool/mobileMockupGenerator/i18n/en.ts +121 -0
  146. package/src/tool/mobileMockupGenerator/i18n/es.ts +121 -0
  147. package/src/tool/mobileMockupGenerator/i18n/fr.ts +121 -0
  148. package/src/tool/mobileMockupGenerator/index.ts +33 -0
  149. package/src/tool/mobileMockupGenerator/rendering.ts +189 -0
  150. package/src/tool/mobileMockupGenerator/seo.astro +14 -0
  151. package/src/tool/mobileMockupGenerator/store.ts +145 -0
  152. package/src/tool/mobileMockupGenerator/types.ts +41 -0
  153. package/src/tool/mobileMockupGenerator/ui.ts +48 -0
  154. package/src/tool/musicalTypography/bibliography.astro +14 -0
  155. package/src/tool/musicalTypography/component.astro +480 -0
  156. package/src/tool/musicalTypography/i18n/en.ts +179 -0
  157. package/src/tool/musicalTypography/i18n/es.ts +179 -0
  158. package/src/tool/musicalTypography/i18n/fr.ts +179 -0
  159. package/src/tool/musicalTypography/index.ts +33 -0
  160. package/src/tool/musicalTypography/seo.astro +14 -0
  161. package/src/tool/musicalTypography/ui.ts +25 -0
  162. package/src/tool/placeholderGenerator/bibliography.astro +14 -0
  163. package/src/tool/placeholderGenerator/component.astro +499 -0
  164. package/src/tool/placeholderGenerator/i18n/en.ts +176 -0
  165. package/src/tool/placeholderGenerator/i18n/es.ts +176 -0
  166. package/src/tool/placeholderGenerator/i18n/fr.ts +176 -0
  167. package/src/tool/placeholderGenerator/index.ts +34 -0
  168. package/src/tool/placeholderGenerator/seo.astro +14 -0
  169. package/src/tool/placeholderGenerator/ui.ts +14 -0
  170. package/src/tool/promptLibrary/bibliography.astro +14 -0
  171. package/src/tool/promptLibrary/component.astro +1131 -0
  172. package/src/tool/promptLibrary/controller.ts +49 -0
  173. package/src/tool/promptLibrary/i18n/en.ts +131 -0
  174. package/src/tool/promptLibrary/i18n/es.ts +131 -0
  175. package/src/tool/promptLibrary/i18n/fr.ts +126 -0
  176. package/src/tool/promptLibrary/index.ts +33 -0
  177. package/src/tool/promptLibrary/seo.astro +14 -0
  178. package/src/tool/promptLibrary/ui.ts +29 -0
  179. package/src/tool/readabilityCalculator/bibliography.astro +14 -0
  180. package/src/tool/readabilityCalculator/component.astro +534 -0
  181. package/src/tool/readabilityCalculator/i18n/en.ts +133 -0
  182. package/src/tool/readabilityCalculator/i18n/es.ts +133 -0
  183. package/src/tool/readabilityCalculator/i18n/fr.ts +133 -0
  184. package/src/tool/readabilityCalculator/index.ts +33 -0
  185. package/src/tool/readabilityCalculator/seo.astro +14 -0
  186. package/src/tool/readabilityCalculator/ui.ts +27 -0
  187. package/src/tool/svgSanitizer/bibliography.astro +14 -0
  188. package/src/tool/svgSanitizer/component.astro +554 -0
  189. package/src/tool/svgSanitizer/i18n/en.ts +125 -0
  190. package/src/tool/svgSanitizer/i18n/es.ts +125 -0
  191. package/src/tool/svgSanitizer/i18n/fr.ts +125 -0
  192. package/src/tool/svgSanitizer/index.ts +33 -0
  193. package/src/tool/svgSanitizer/seo.astro +14 -0
  194. package/src/tool/svgSanitizer/ui.ts +18 -0
  195. package/src/tool/svgToCss/bibliography.astro +14 -0
  196. package/src/tool/svgToCss/component.astro +381 -0
  197. package/src/tool/svgToCss/i18n/en.ts +174 -0
  198. package/src/tool/svgToCss/i18n/es.ts +174 -0
  199. package/src/tool/svgToCss/i18n/fr.ts +174 -0
  200. package/src/tool/svgToCss/index.ts +34 -0
  201. package/src/tool/svgToCss/seo.astro +14 -0
  202. package/src/tool/svgToCss/ui.ts +13 -0
  203. package/src/tool/urlCleaner/bibliography.astro +14 -0
  204. package/src/tool/urlCleaner/component.astro +458 -0
  205. package/src/tool/urlCleaner/i18n/en.ts +116 -0
  206. package/src/tool/urlCleaner/i18n/es.ts +116 -0
  207. package/src/tool/urlCleaner/i18n/fr.ts +116 -0
  208. package/src/tool/urlCleaner/index.ts +33 -0
  209. package/src/tool/urlCleaner/seo.astro +14 -0
  210. package/src/tool/urlCleaner/ui.ts +12 -0
  211. package/src/tool/urlEncoderDecoder/bibliography.astro +14 -0
  212. package/src/tool/urlEncoderDecoder/component.astro +291 -0
  213. package/src/tool/urlEncoderDecoder/i18n/en.ts +162 -0
  214. package/src/tool/urlEncoderDecoder/i18n/es.ts +162 -0
  215. package/src/tool/urlEncoderDecoder/i18n/fr.ts +162 -0
  216. package/src/tool/urlEncoderDecoder/index.ts +34 -0
  217. package/src/tool/urlEncoderDecoder/seo.astro +14 -0
  218. package/src/tool/urlEncoderDecoder/ui.ts +11 -0
  219. package/src/tool/utmGenerator/bibliography.astro +14 -0
  220. package/src/tool/utmGenerator/component.astro +270 -0
  221. package/src/tool/utmGenerator/i18n/en.ts +117 -0
  222. package/src/tool/utmGenerator/i18n/es.ts +117 -0
  223. package/src/tool/utmGenerator/i18n/fr.ts +117 -0
  224. package/src/tool/utmGenerator/index.ts +33 -0
  225. package/src/tool/utmGenerator/seo.astro +14 -0
  226. package/src/tool/utmGenerator/ui.ts +13 -0
  227. package/src/tools.ts +27 -0
  228. package/src/types.ts +72 -0
@@ -0,0 +1,145 @@
1
+ import type { MockupImage, MockupSettings, MockupVariant, Gradient } from './types';
2
+
3
+ interface StoredSettings extends MockupSettings {
4
+ deviceOffsetX?: number;
5
+ deviceOffsetY?: number;
6
+ textX?: number;
7
+ }
8
+
9
+ interface StoredVariant {
10
+ id: string;
11
+ language?: string;
12
+ dataUrl: string;
13
+ }
14
+
15
+ interface StoredImage {
16
+ id: string;
17
+ variants?: StoredVariant[];
18
+ activeVariantId?: string;
19
+ language?: string;
20
+ dataUrl?: string;
21
+ settings: StoredSettings;
22
+ }
23
+
24
+ interface StoredGradient {
25
+ start?: string;
26
+ end?: string;
27
+ angle?: number;
28
+ }
29
+
30
+ interface StoredData {
31
+ device?: string;
32
+ font?: string;
33
+ showSafeArea?: boolean;
34
+ safeAreaColor?: string;
35
+ gradient?: StoredGradient;
36
+ images?: StoredImage[];
37
+ }
38
+
39
+ const STORAGE_KEY = 'mockup_pro_settings';
40
+
41
+ export class Store {
42
+ images: MockupImage[] = [];
43
+ device = 'iphone';
44
+ font = 'Inter';
45
+ gradient: Gradient = { start: '#6366f1', end: '#a855f7', angle: 135 };
46
+ showSafeArea = false;
47
+ safeAreaColor = '#000000';
48
+
49
+ constructor() {
50
+ this.load();
51
+ }
52
+
53
+ save() {
54
+ try {
55
+ const data: StoredData = {
56
+ device: this.device, font: this.font, gradient: this.gradient,
57
+ showSafeArea: this.showSafeArea, safeAreaColor: this.safeAreaColor,
58
+ images: this.images as unknown as StoredImage[],
59
+ };
60
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(data));
61
+ } catch {
62
+ console.warn('Storage limit exceeded');
63
+ }
64
+ }
65
+
66
+ private load() {
67
+ const saved = localStorage.getItem(STORAGE_KEY);
68
+ if (!saved) return;
69
+ this.loadFromJson(saved);
70
+ }
71
+
72
+ private loadFromJson(json: string) {
73
+ try {
74
+ const data = JSON.parse(json) as StoredData;
75
+ this.applyStoredData(data);
76
+ } catch {
77
+ this.images = [];
78
+ }
79
+ }
80
+
81
+ private applyStoredData(data: StoredData) {
82
+ this.device = data.device ?? 'iphone';
83
+ this.font = data.font ?? 'Inter';
84
+ this.showSafeArea = !!data.showSafeArea;
85
+ this.safeAreaColor = data.safeAreaColor ?? '#000000';
86
+ if (data.gradient) this.gradient = this.loadGradient(data.gradient);
87
+ this.images = (data.images ?? []).map((img) => this.migrateImage(img));
88
+ }
89
+
90
+ private loadGradient(g: StoredGradient): Gradient {
91
+ return {
92
+ start: g.start ?? this.gradient.start,
93
+ end: g.end ?? this.gradient.end,
94
+ angle: typeof g.angle === 'number' ? g.angle : 135,
95
+ };
96
+ }
97
+
98
+ private migrateImage(img: StoredImage): MockupImage {
99
+ if (!img.variants) return this.migrateOldImage(img);
100
+ return this.normalizeImage(img);
101
+ }
102
+
103
+ private migrateOldImage(img: StoredImage): MockupImage {
104
+ const variantId = Math.random().toString(36).slice(2, 11);
105
+ return {
106
+ id: img.id,
107
+ variants: [{ id: variantId, language: img.language ?? 'ES', dataUrl: img.dataUrl ?? '' }],
108
+ activeVariantId: variantId,
109
+ settings: this.normalizeSettings(img.settings),
110
+ };
111
+ }
112
+
113
+ private normalizeImage(img: StoredImage): MockupImage {
114
+ return {
115
+ id: img.id,
116
+ variants: (img.variants ?? []) as MockupVariant[],
117
+ activeVariantId: img.activeVariantId ?? '',
118
+ settings: this.normalizeSettings(img.settings),
119
+ };
120
+ }
121
+
122
+ private normalizeSettings(s: StoredSettings): MockupSettings {
123
+ return { ...this.normalizeTextProps(s), ...this.normalizeLayoutProps(s) };
124
+ }
125
+
126
+ private normalizeTextProps(s: StoredSettings) {
127
+ return {
128
+ text: s.text ?? '',
129
+ textColor: s.textColor ?? '#ffffff',
130
+ textSize: s.textSize ?? 28,
131
+ textRotation: s.textRotation ?? 0,
132
+ bgImage: s.bgImage ?? null,
133
+ };
134
+ }
135
+
136
+ private normalizeLayoutProps(s: StoredSettings) {
137
+ return {
138
+ spacing: s.spacing ?? 40,
139
+ textY: s.textY ?? 82,
140
+ textX: s.textX ?? 50,
141
+ deviceOffsetX: s.deviceOffsetX ?? 0,
142
+ deviceOffsetY: s.deviceOffsetY ?? 0,
143
+ };
144
+ }
145
+ }
@@ -0,0 +1,41 @@
1
+ export interface DeviceConfig {
2
+ width: number;
3
+ height: number;
4
+ radius: number;
5
+ notch: boolean;
6
+ name: string;
7
+ safeAreaTop: number;
8
+ safeAreaBottom: number;
9
+ }
10
+
11
+ export interface MockupVariant {
12
+ id: string;
13
+ language: string;
14
+ dataUrl: string;
15
+ }
16
+
17
+ export interface MockupSettings {
18
+ text: string;
19
+ spacing: number;
20
+ textSize: number;
21
+ textColor: string;
22
+ textRotation: number;
23
+ textY: number;
24
+ textX: number;
25
+ deviceOffsetX: number;
26
+ deviceOffsetY: number;
27
+ bgImage?: string | null;
28
+ }
29
+
30
+ export interface MockupImage {
31
+ id: string;
32
+ variants: MockupVariant[];
33
+ activeVariantId: string;
34
+ settings: MockupSettings;
35
+ }
36
+
37
+ export interface Gradient {
38
+ start: string;
39
+ end: string;
40
+ angle: number;
41
+ }
@@ -0,0 +1,48 @@
1
+ export interface MobileMockupGeneratorUI extends Record<string, string> {
2
+ labelUpload: string;
3
+ dropHint: string;
4
+ dropFormats: string;
5
+ btnMassReplace: string;
6
+ massReplaceHint: string;
7
+ labelSettings: string;
8
+ labelDevice: string;
9
+ labelFont: string;
10
+ labelBackground: string;
11
+ titleSwapColors: string;
12
+ labelAngle: string;
13
+ labelSafeArea: string;
14
+ labelSafeAreaColor: string;
15
+ emptyTitle: string;
16
+ emptySubtitle: string;
17
+ btnClearAll: string;
18
+ btnExport: string;
19
+ cardTitleDuplicate: string;
20
+ cardTitleReplace: string;
21
+ cardSectionLayouts: string;
22
+ cardSectionBranding: string;
23
+ cardTitleResetText: string;
24
+ cardLabelColor: string;
25
+ cardTextPlaceholder: string;
26
+ cardSectionDevice: string;
27
+ cardTitleResetDevice: string;
28
+ cardSectionScene: string;
29
+ cardBtnSpecialBg: string;
30
+ cardBtnDeleteScene: string;
31
+ cardRangeLabelSize: string;
32
+ cardRangeLabelX: string;
33
+ cardRangeLabelY: string;
34
+ cardRangeLabelRotation: string;
35
+ cardRangeLabelScale: string;
36
+ presetClassic: string;
37
+ presetMobileBottom: string;
38
+ presetMobileTop: string;
39
+ presetFocus: string;
40
+ presetDynamic: string;
41
+ presetSplitLeft: string;
42
+ presetSplitRight: string;
43
+ presetImageLeft: string;
44
+ presetImageRight: string;
45
+ confirmClear: string;
46
+ processingExport: string;
47
+ exportDone: string;
48
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
+ import { musicalTypography } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await musicalTypography.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SharedBibliography links={content.bibliography} />}