@jjlmoya/utils-developer 1.29.0 → 1.30.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.
package/package.json
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ALL_ENTRIES } from '../entries';
|
|
3
|
+
|
|
4
|
+
describe('Tool entry consumer contract', () => {
|
|
5
|
+
it('every published tool exposes a Spanish locale loader', () => {
|
|
6
|
+
for (const entry of ALL_ENTRIES) {
|
|
7
|
+
expect(typeof entry.i18n.es, `${entry.id} must expose i18n.es`).toBe('function');
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
});
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromoteThisWebsiteUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'promociona-esta-web';
|
|
7
|
+
const title = 'Promociona esta web';
|
|
8
|
+
const description = 'La mesa de propaganda interna de jjlmoya.es en español y GameBob.dev a nivel internacional. Convierte capturas de tus propias páginas en imágenes para redes antes de que Bob decida que el feed da vergüenza.';
|
|
9
|
+
|
|
10
|
+
const howTo = [
|
|
11
|
+
{ name: 'Pega una de nuestras capturas', text: 'Pega con Ctrl+V una captura de una página de jjlmoya.es o GameBob.dev. La junta necesita pruebas de su propio imperio.' },
|
|
12
|
+
{ name: 'Elige la casa lingüística', text: 'Escoge jjlmoya.es para español o GameBob.dev para la página internacional. Esto no es un marketplace. La gata ya es dueña del local.' },
|
|
13
|
+
{ name: 'Ordena el relato oficial', text: 'Arrastra la captura, el título, el logo, el fondo y la mascota hasta que la composición parezca intencionada y no exportada accidentalmente a las dos de la mañana.' },
|
|
14
|
+
{ name: 'Descarga antes de que la gata se entere', text: 'Descarga un PNG con las dimensiones elegidas y publícalo. Bob se llevará el mérito porque así funciona la dirección.' },
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
const faq = [
|
|
18
|
+
{ question: '¿Para quién es realmente esta herramienta?', answer: 'Para promocionar las páginas de jjlmoya.es en español y GameBob.dev a nivel internacional. El resto puede mirar por la ventana.' },
|
|
19
|
+
{ question: '¿Puedo pegar directamente una captura?', answer: 'Sí. Copia una captura de una de nuestras páginas y pulsa Ctrl+V. Se convierte en la capa de la herramienta, porque hasta la junta felina acepta pruebas si llegan en el formato correcto.' },
|
|
20
|
+
{ question: '¿Qué pasa cuando pego una URL de producción?', answer: 'La herramienta lee el título meta de la página, elige la marca española jjlmoya.es o la internacional GameBob.dev, carga la imagen Open Graph y la usa como evidencia visual hasta que haya una imagen más concreta. Al slug se le acaba por fin el ascenso.' },
|
|
21
|
+
{ question: '¿Por qué hay dos marcas?', answer: 'jjlmoya.es es la página en español y GameBob.dev es la página internacional. La diferencia importa para el idioma y a las gatas les da exactamente igual.' },
|
|
22
|
+
{ question: '¿La herramienta sube mis imágenes?', answer: 'No. Las imágenes se quedan en el navegador y la composición se renderiza localmente. Lo único que sale de la página es el PNG que tú descargas deliberadamente, suponiendo que Bob haya aprobado la exportación.' },
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const ui: PromoteThisWebsiteUI = {
|
|
26
|
+
urlLabel: 'URL de la web',
|
|
27
|
+
urlPlaceholder: 'https://www.example.com/utilidades/ejemplo/',
|
|
28
|
+
applyUrl: 'Aplicar',
|
|
29
|
+
formatLabel: 'Formato',
|
|
30
|
+
panoramic: 'Panorámico · 1536 × 1024',
|
|
31
|
+
instagram: 'Instagram · 1080 × 1350',
|
|
32
|
+
square: 'Cuadrado · 1080 × 1080',
|
|
33
|
+
story: 'Historia · 1080 × 1920',
|
|
34
|
+
titleLabel: 'Título',
|
|
35
|
+
titlePlaceholder: 'Un título corto para la imagen',
|
|
36
|
+
titleSizeLabel: 'Tamaño de fuente del título',
|
|
37
|
+
titleBoxSizeLabel: 'Tamaño de la caja del título',
|
|
38
|
+
titleStyleLabel: 'Diseño del título',
|
|
39
|
+
brandLabel: 'Marca',
|
|
40
|
+
brandStyleLabel: 'Diseño de la marca',
|
|
41
|
+
advancedLabel: 'Composición avanzada',
|
|
42
|
+
assetsLabel: 'Recursos',
|
|
43
|
+
backgroundLabel: 'Fondo',
|
|
44
|
+
toolLabel: 'Captura de la herramienta',
|
|
45
|
+
logoLabel: 'Logo',
|
|
46
|
+
mascotLabel: 'Mascota',
|
|
47
|
+
layersLabel: 'Capas',
|
|
48
|
+
backgroundLayer: 'Fondo',
|
|
49
|
+
toolLayer: 'Herramienta',
|
|
50
|
+
logoLayer: 'Logo',
|
|
51
|
+
mascotLayer: 'Mascota',
|
|
52
|
+
titleLayer: 'Título',
|
|
53
|
+
reset: 'Restablecer',
|
|
54
|
+
download: 'Descargar PNG',
|
|
55
|
+
activeLayer: 'Capa activa',
|
|
56
|
+
canvasHint: 'Arrastra las capas directamente sobre el lienzo. Pega una captura con Ctrl+V.',
|
|
57
|
+
pasted: 'Captura pegada como capa de la herramienta.',
|
|
58
|
+
urlApplied: 'URL aplicada. Ajusta el título y añade la captura que quieras promocionar.',
|
|
59
|
+
urlLoading: 'Leyendo el título de la página y su imagen oficial...',
|
|
60
|
+
urlFailed: 'No se ha podido leer esa página. Comprueba la URL o añade los recursos manualmente.',
|
|
61
|
+
fileLoaded: 'Recurso cargado.',
|
|
62
|
+
titlePaper: 'Papel editorial',
|
|
63
|
+
titleRibbon: 'Cinta doblada',
|
|
64
|
+
titleInk: 'Mancha de tinta',
|
|
65
|
+
titlePoster: 'Cartel nocturno',
|
|
66
|
+
titleTicket: 'Entrada recortada',
|
|
67
|
+
titleMarker: 'Subrayado material',
|
|
68
|
+
titleSplit: 'Bloque partido',
|
|
69
|
+
titleCapsule: 'Cápsula mínima',
|
|
70
|
+
titleCorner: 'Esquina editorial',
|
|
71
|
+
titleVertical: 'Acento vertical',
|
|
72
|
+
brandPlain: 'Marca simple',
|
|
73
|
+
brandPlaque: 'Placa cerámica',
|
|
74
|
+
brandTicket: 'Admit one',
|
|
75
|
+
brandStamp: 'Sello de goma',
|
|
76
|
+
brandNeon: 'Rótulo de neón',
|
|
77
|
+
brandRibbon: 'Cinta de señal',
|
|
78
|
+
brandCorner: 'Esquina editorial',
|
|
79
|
+
brandPixel: 'Bloque pixel',
|
|
80
|
+
brandHalo: 'Halo suave',
|
|
81
|
+
brandEditorial: 'Línea editorial',
|
|
82
|
+
defaultTool: 'Pega la captura de tu herramienta',
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
86
|
+
const howToSchema: WithContext<HowTo> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howTo.map((step, index) => ({ '@type': 'HowToStep', position: index + 1, name: step.name, text: step.text })) };
|
|
87
|
+
const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'DeveloperApplication', operatingSystem: 'Any', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } };
|
|
88
|
+
|
|
89
|
+
export const content: ToolLocaleContent<PromoteThisWebsiteUI> = {
|
|
90
|
+
slug,
|
|
91
|
+
title,
|
|
92
|
+
description,
|
|
93
|
+
ui,
|
|
94
|
+
faqTitle: 'Promociona esta web sin enfadar a la gata',
|
|
95
|
+
faq,
|
|
96
|
+
bibliographyTitle: 'Páginas de la operación',
|
|
97
|
+
bibliography,
|
|
98
|
+
howTo,
|
|
99
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
100
|
+
seo: [
|
|
101
|
+
{ type: 'title', text: 'La mesa oficial de propaganda de jjlmoya y GameBob', level: 2 },
|
|
102
|
+
{ type: 'paragraph', html: 'Esto no es un compositor genérico de imágenes sociales para alguien que acaba de descubrir la palabra branding. Existe para promocionar las páginas publicadas bajo <strong>jjlmoya.es</strong> en español y <strong>GameBob.dev</strong> a nivel internacional, mientras las gatas supervisan desde algún lugar justo fuera del briefing.' },
|
|
103
|
+
{ type: 'stats', columns: 3, items: [{ value: '2', label: 'Marcas de la casa que glorificar', icon: 'mdi:domain' }, { value: '4', label: 'Formatos para la propaganda', icon: 'mdi:crop' }, { value: '0', label: 'Reuniones solicitadas por Bob', icon: 'mdi:cat' }] },
|
|
104
|
+
{ type: 'title', text: 'La captura sigue mandando', level: 3 },
|
|
105
|
+
{ type: 'paragraph', html: 'Pega una captura real de una de nuestras páginas o carga una URL de producción. La herramienta lee el título de la página en vez de inventárselo mirando el slug, carga la imagen Open Graph oficial y mantiene visible la prueba mientras el reparto secundario se coloca alrededor.' },
|
|
106
|
+
{ type: 'title', text: 'Dos dominios y un equipo sospechosamente pequeño', level: 3 },
|
|
107
|
+
{ type: 'paragraph', html: '<strong>jjlmoya.es</strong> es la página en español. <strong>GameBob.dev</strong> es la página internacional. Cambia el idioma, pero no el departamento de propaganda. El humano prepara la imagen. Las gatas conservan la autoridad editorial.' },
|
|
108
|
+
{ type: 'table', headers: ['Capa', 'Qué hace', 'Cómo la llama la junta'], rows: [['Herramienta', 'Posición, escala y marco', 'La evidencia'], ['Título', 'Texto, tamaño, diseño y color', 'El relato aprobado'], ['Marca', 'Página española o internacional', 'La casa cuya gloria toca exigir'], ['Fondo', 'Imagen Open Graph o subida', 'El contexto respetable']] },
|
|
109
|
+
{ type: 'tip', title: 'Empieza por una de nuestras páginas', html: 'Pega una URL de producción de <strong>jjlmoya.es</strong> o <strong>GameBob.dev</strong>. Si no cargan el título, la marca o la imagen Open Graph, la junta culpará a la red, después al humano y finalmente a las gatas.' },
|
|
110
|
+
],
|
|
111
|
+
};
|