@jjlmoya/utils-books 1.1.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 (115) hide show
  1. package/.github/workflows/npm-publish.yml +40 -0
  2. package/.gitignore +6 -0
  3. package/.stylelintrc.json +98 -0
  4. package/astro.config.mjs +19 -0
  5. package/eslint.config.js +201 -0
  6. package/package.json +79 -0
  7. package/prompts/create_tool.md +98 -0
  8. package/prompts/i18n/de.md +16 -0
  9. package/prompts/i18n/en.md +16 -0
  10. package/prompts/i18n/es.md +16 -0
  11. package/prompts/i18n/fr.md +16 -0
  12. package/prompts/i18n/id.md +16 -0
  13. package/prompts/i18n/it.md +16 -0
  14. package/prompts/i18n/ja.md +16 -0
  15. package/prompts/i18n/ko.md +16 -0
  16. package/prompts/i18n/nl.md +16 -0
  17. package/prompts/i18n/pl.md +16 -0
  18. package/prompts/i18n/pt.md +16 -0
  19. package/prompts/i18n/ru.md +16 -0
  20. package/prompts/i18n/sv.md +16 -0
  21. package/prompts/i18n/tr.md +16 -0
  22. package/prompts/i18n/zh.md +16 -0
  23. package/prompts/seo.md +58 -0
  24. package/prompts/translations/french.md +33 -0
  25. package/scripts/postinstall.mjs +27 -0
  26. package/src/category/BooksCategorySEO.astro +9 -0
  27. package/src/category/i18n/de.ts +21 -0
  28. package/src/category/i18n/en.ts +21 -0
  29. package/src/category/i18n/es.ts +21 -0
  30. package/src/category/i18n/fr.ts +21 -0
  31. package/src/category/i18n/id.ts +21 -0
  32. package/src/category/i18n/it.ts +21 -0
  33. package/src/category/i18n/ja.ts +21 -0
  34. package/src/category/i18n/ko.ts +21 -0
  35. package/src/category/i18n/nl.ts +21 -0
  36. package/src/category/i18n/pl.ts +21 -0
  37. package/src/category/i18n/pt.ts +21 -0
  38. package/src/category/i18n/ru.ts +21 -0
  39. package/src/category/i18n/sv.ts +21 -0
  40. package/src/category/i18n/tr.ts +21 -0
  41. package/src/category/i18n/zh.ts +21 -0
  42. package/src/category/index.ts +24 -0
  43. package/src/components/PreviewNavSidebar.astro +116 -0
  44. package/src/components/PreviewToolbar.astro +143 -0
  45. package/src/data.ts +10 -0
  46. package/src/entries.ts +6 -0
  47. package/src/env.d.ts +5 -0
  48. package/src/index.ts +20 -0
  49. package/src/layouts/PreviewLayout.astro +118 -0
  50. package/src/pages/[locale]/[slug].astro +164 -0
  51. package/src/pages/[locale].astro +251 -0
  52. package/src/pages/index.astro +4 -0
  53. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  54. package/src/tests/diacritics_density.test.ts +118 -0
  55. package/src/tests/faq_count.test.ts +18 -0
  56. package/src/tests/i18n_coverage.test.ts +34 -0
  57. package/src/tests/inverted_punctuation.test.ts +84 -0
  58. package/src/tests/locale_completeness.test.ts +23 -0
  59. package/src/tests/mocks/astro_mock.js +2 -0
  60. package/src/tests/no_em_dash.test.ts +47 -0
  61. package/src/tests/no_en_dash.test.ts +70 -0
  62. package/src/tests/no_h1_in_components.test.ts +48 -0
  63. package/src/tests/pagespeed_best_practices.test.ts +198 -0
  64. package/src/tests/qa-test-helpers.ts +32 -0
  65. package/src/tests/qa_bibliography_links.test.ts +54 -0
  66. package/src/tests/qa_claim_evidence.test.ts +69 -0
  67. package/src/tests/qa_logic_reference_coverage.test.ts +46 -0
  68. package/src/tests/qa_runtime_i18n.test.ts +100 -0
  69. package/src/tests/schemas_fulfillment.test.ts +23 -0
  70. package/src/tests/script_density.test.ts +94 -0
  71. package/src/tests/seo_length.test.ts +23 -0
  72. package/src/tests/seo_parity.test.ts +60 -0
  73. package/src/tests/seo_translation_completeness.test.ts +69 -0
  74. package/src/tests/seo_wellformed_export.test.ts +65 -0
  75. package/src/tests/shared-test-helpers.ts +56 -0
  76. package/src/tests/slug_language_code_format.test.ts +23 -0
  77. package/src/tests/slug_uniqueness.test.ts +81 -0
  78. package/src/tests/spanish_leakage.test.ts +175 -0
  79. package/src/tests/title_quality.test.ts +55 -0
  80. package/src/tests/tool_exports.test.ts +34 -0
  81. package/src/tests/tool_validation.test.ts +16 -0
  82. package/src/tests/translation_copy.test.ts +127 -0
  83. package/src/tool/book-pagination-and-spine-calculator/bibliography.astro +16 -0
  84. package/src/tool/book-pagination-and-spine-calculator/bibliography.ts +7 -0
  85. package/src/tool/book-pagination-and-spine-calculator/book-pagination-and-spine-calculator.css +298 -0
  86. package/src/tool/book-pagination-and-spine-calculator/component.astro +40 -0
  87. package/src/tool/book-pagination-and-spine-calculator/controller.ts +87 -0
  88. package/src/tool/book-pagination-and-spine-calculator/dom-views.ts +21 -0
  89. package/src/tool/book-pagination-and-spine-calculator/entry.ts +27 -0
  90. package/src/tool/book-pagination-and-spine-calculator/evaluator.ts +12 -0
  91. package/src/tool/book-pagination-and-spine-calculator/i18n/de.ts +78 -0
  92. package/src/tool/book-pagination-and-spine-calculator/i18n/en.ts +78 -0
  93. package/src/tool/book-pagination-and-spine-calculator/i18n/es.ts +78 -0
  94. package/src/tool/book-pagination-and-spine-calculator/i18n/fr.ts +78 -0
  95. package/src/tool/book-pagination-and-spine-calculator/i18n/id.ts +78 -0
  96. package/src/tool/book-pagination-and-spine-calculator/i18n/it.ts +78 -0
  97. package/src/tool/book-pagination-and-spine-calculator/i18n/ja.ts +78 -0
  98. package/src/tool/book-pagination-and-spine-calculator/i18n/ko.ts +78 -0
  99. package/src/tool/book-pagination-and-spine-calculator/i18n/nl.ts +78 -0
  100. package/src/tool/book-pagination-and-spine-calculator/i18n/pl.ts +78 -0
  101. package/src/tool/book-pagination-and-spine-calculator/i18n/pt.ts +78 -0
  102. package/src/tool/book-pagination-and-spine-calculator/i18n/ru.ts +78 -0
  103. package/src/tool/book-pagination-and-spine-calculator/i18n/sv.ts +78 -0
  104. package/src/tool/book-pagination-and-spine-calculator/i18n/tr.ts +78 -0
  105. package/src/tool/book-pagination-and-spine-calculator/i18n/zh.ts +78 -0
  106. package/src/tool/book-pagination-and-spine-calculator/index.ts +11 -0
  107. package/src/tool/book-pagination-and-spine-calculator/logic.test.ts +21 -0
  108. package/src/tool/book-pagination-and-spine-calculator/logic.ts +52 -0
  109. package/src/tool/book-pagination-and-spine-calculator/seo.astro +16 -0
  110. package/src/tool/book-pagination-and-spine-calculator/storage.ts +22 -0
  111. package/src/tool/book-pagination-and-spine-calculator/ui.ts +35 -0
  112. package/src/tools.ts +5 -0
  113. package/src/types.ts +69 -0
  114. package/tsconfig.json +15 -0
  115. package/vitest.config.ts +20 -0
@@ -0,0 +1,16 @@
1
+ # Prompts-어 (ko)
2
+
3
+ ## 번역
4
+
5
+ 다음 내용을 한국어로 현지화하세요.
6
+
7
+ 번역하지 말고, 현지화하세요. 목표는 단어를 한 언어에서 다른 언어로 옮기는 것이 아니라, 실제 사람이 처음부터 한국어로 직접 쓴 것처럼 읽히는 텍스트를 만드는 것입니다. 잘 현지화된 텍스트에는 원본 언어의 흔적이 남지 않습니다.
8
+
9
+ 인간의 목소리로 쓰세요: 친근하고, 명확하며, 전문적으로. 기계적인 표현, 어색한 문장 구조, 사용 설명서처럼 들리는 표현은 피하세요. 한국어로 자연스럽게 읽히지 않는 부분이 있다면, 자연스러워질 때까지 다시 표현하세요.
10
+
11
+ 준수해야 할 지침:
12
+
13
+ - 표현, 비유, 문화적 참조를 한국어 사용 환경에서 자연스럽게 공감될 수 있도록 조정하세요.
14
+ - 기술 용어는 한국어권에서 가장 널리 통용되는 형태로 유지하고, 명확한 대응어가 없으면 원문 용어를 그대로 사용하세요.
15
+ - 원본의 형식(마크다운, 목록, 제목)을 유지하세요.
16
+ - 원문에서 정보를 추가하거나 생략하지 마세요.
@@ -0,0 +1,16 @@
1
+ # Prompts-derlands (nl)
2
+
3
+ ## Vertaling
4
+
5
+ Lokaliseer de volgende inhoud naar het Nederlands.
6
+
7
+ Vertaal niet: lokaliseer. Het doel is niet om woorden van de ene taal naar de andere over te zetten, maar om een tekst te produceren die klinkt alsof hij vanaf het begin door een echte persoon in het Nederlands is geschreven. Een goed gelokaliseerde tekst laat geen spoor van de brontaal achter.
8
+
9
+ Schrijf met een menselijke stem: warm, helder en professioneel. Vermijd machinale zinnen, geforceerde constructies en alles wat klinkt als een handleiding. Als iets niet natuurlijk stroomt in het Nederlands, herschrijf het dan totdat het dat wel doet.
10
+
11
+ Richtlijnen om te volgen:
12
+
13
+ - Pas uitdrukkingen, metaforen en culturele verwijzingen aan zodat ze natuurlijk resoneren in een Nederlandstalige context.
14
+ - Gebruik technische termen in hun meest gangbare vorm in de Nederlandstalige wereld; als er geen duidelijk equivalent bestaat, behoud dan de originele term.
15
+ - Respecteer de opmaak van het origineel (markdown, lijsten, koppen).
16
+ - Voeg geen informatie toe en laat geen informatie weg ten opzichte van het origineel.
@@ -0,0 +1,16 @@
1
+ # Prompts-lski (pl)
2
+
3
+ ## Tłumaczenie
4
+
5
+ Zlokalizuj poniższą treść na język polski.
6
+
7
+ Nie tłumacz-kalizuj. Celem nie jest przeniesienie słów z jednego języka do drugiego, lecz stworzenie tekstu, który brzmi tak, jakby od początku napisała go prawdziwa osoba po polsku. Dobrze zlokalizowany tekst nie zdradza języka źródłowego.
8
+
9
+ Pisz ludzkim głosem: bliskim, jasnym i profesjonalnym. Unikaj maszynowego języka, wymuszonych zwrotów i zdań brzmiących jak instrukcja obsługi. Jeśli coś nie brzmi naturalnie po polsku, przeredaguj to tak, żeby brzmiało.
10
+
11
+ Wytyczne do przestrzegania:
12
+
13
+ - Dostosuj wyrażenia, metafory i odniesienia kulturowe do tego, co naturalnie rezonuje w polskojęzycznym kontekście.
14
+ - Zachowaj terminy techniczne w ich najbardziej rozpoznawalnej formie w polskim środowisku; jeśli nie istnieje wyraźny odpowiednik, zachowaj oryginalny termin.
15
+ - Zachowaj formatowanie oryginału (markdown, listy, nagłówki).
16
+ - Nie dodawaj ani nie pomijaj żadnych informacji z oryginału.
@@ -0,0 +1,16 @@
1
+ # Prompts-rtuguês (pt)
2
+
3
+ ## Tradução
4
+
5
+ Localize o seguinte conteúdo para o português.
6
+
7
+ Não traduza: localize. O objetivo não é transferir palavras de um idioma para outro, mas produzir um texto que pareça ter sido escrito originalmente em português por uma pessoa real. Um texto bem localizado não traz nenhum rastro do idioma de origem.
8
+
9
+ Escreva com voz humana: próxima, clara e profissional. Evite linguagem de máquina, construções forçadas e frases que soam como manual técnico. Se algo não fluir de forma natural em português, reformule até que flua.
10
+
11
+ Critérios a respeitar:
12
+
13
+ - Adapte expressões, metáforas e referências culturais ao que ressoaria de forma natural num contexto lusófono.
14
+ - Mantenha os termos técnicos na forma mais reconhecida no mundo lusófono; se não existir um equivalente claro, conserve o termo original.
15
+ - Respeite a formatação do original (markdown, listas, cabeçalhos).
16
+ - Não acrescente nem omita informação em relação ao original.
@@ -0,0 +1,16 @@
1
+ # Prompts-сский (ru)
2
+
3
+ ## Перевод
4
+
5
+ Локализуйте следующий контент на русский язык.
6
+
7
+ Не переводите-кализуйте. Цель не в том, чтобы перенести слова из одного языка в другой, а в том, чтобы создать текст, который звучит так, словно его с самого начала написал живой человек по-русски. В хорошо локализованном тексте не остаётся следов языка оригинала.
8
+
9
+ Пишите человеческим голосом: тёплым, ясным и профессиональным. Избегайте машинного языка, вынужденных конструкций и фраз, которые звучат как инструкция по эксплуатации. Если что-то не звучит по-русски естественно, перефразируйте это так, чтобы звучало.
10
+
11
+ Принципы, которых следует придерживаться:
12
+
13
+ - Адаптируйте выражения, метафоры и культурные отсылки к тому, что естественно воспринимается в русскоязычном контексте.
14
+ - Используйте технические термины в их наиболее распространённой форме в русскоязычном мире; если чёткого эквивалента нет, сохраните оригинальный термин.
15
+ - Соблюдайте форматирование оригинала (markdown, списки, заголовки).
16
+ - Не добавляйте и не опускайте никакой информации по сравнению с оригиналом.
@@ -0,0 +1,16 @@
1
+ # Prompts-enska (sv)
2
+
3
+ ## Översättning
4
+
5
+ Lokalisera följande innehåll till svenska.
6
+
7
+ Översätt inte: lokalisera. Målet är inte att överföra ord från ett språk till ett annat, utan att producera en text som låter som om den skrevs direkt på svenska av en verklig person. En välokaliserad text lämnar inga spår av källspråket.
8
+
9
+ Skriv med en mänsklig röst: varm, tydlig och professionell. Undvik maskinspråk, krystade konstruktioner och meningar som låter som en instruktionsmanual. Om något inte flödar naturligt på svenska, skriv om det tills det gör det.
10
+
11
+ Riktlinjer att följa:
12
+
13
+ - Anpassa uttryck, metaforer och kulturella referenser till vad som skulle resonera naturligt i ett svenskspråkigt sammanhang.
14
+ - Använd tekniska termer i deras mest vedertagna form i den svenskspråkiga världen; om det inte finns något tydligt motsvarande, behåll den ursprungliga termen.
15
+ - Respektera originalets formatering (markdown, listor, rubriker).
16
+ - Lägg inte till eller utelämna någon information jämfört med originalet.
@@ -0,0 +1,16 @@
1
+ # Prompts-rkçe (tr)
2
+
3
+ ## Çeviri
4
+
5
+ Aşağıdaki içeriği Türkçeye yerelleştirin.
6
+
7
+ Çeviri yapmayın: yerelleştirin. Amaç, kelimeleri bir dilden diğerine aktarmak değil; sanki başından beri gerçek bir kişi tarafından Türkçe yazılmış gibi okunan bir metin üretmektir. İyi yerelleştirilmiş bir metinde kaynak dilin izi kalmaz.
8
+
9
+ İnsan sesiyle yazın: sıcak, açık ve profesyonel. Makine diline, zoraki ifadelere ve kullanım kılavuzu gibi ses çıkaran cümlelere yer vermeyin. Türkçede doğal akmayan bir şey varsa, akana kadar yeniden ifade edin.
10
+
11
+ Uyulması gereken yönergeler:
12
+
13
+ - İfadeleri, metaforları ve kültürel referansları Türkçe konuşan bir bağlamda doğal yankı uyandıracak şekilde uyarlayın.
14
+ - Teknik terimleri Türkçe konuşan dünyada en yaygın bilinen biçimleriyle kullanın; net bir karşılık yoksa orijinal terimi koruyun.
15
+ - Orijinalin biçimlendirmesine (markdown, listeler, başlıklar) uyun.
16
+ - Orijinale göre bilgi eklemeyin veya çıkarmayın.
@@ -0,0 +1,16 @@
1
+ # Prompts- (zh)
2
+
3
+ ## 翻译
4
+
5
+ 请将以下内容本地化为中文。
6
+
7
+ 不要翻译,要本地化。目标不是将词语从一种语言转移到另一种语言,而是产出一段读起来像是由真实的人直接用中文写成的文字。本地化质量上乘的文本不会留下任何源语言的痕迹。
8
+
9
+ 以人的声音书写:亲切、清晰、专业。避免机器腔、生硬的表达方式,以及任何听起来像操作手册的句子。如果某些内容用中文读起来不自然,就重新表达,直到自然为止。
10
+
11
+ 请遵循以下准则:
12
+
13
+ - 将表达方式、比喻和文化参照调整为在中文语境中能够自然共鸣的内容。
14
+ - 技术术语请使用在中文世界最广为人知的形式;如果没有明确的对应词,保留原文术语。
15
+ - 保留原文的格式(markdown、列表、标题)。
16
+ - 不得增加或删减原文中的任何信息。
package/prompts/seo.md ADDED
@@ -0,0 +1,58 @@
1
+ Aquí tienes la Mega-Prompt Final Evolucionada. Está diseñada para que sea un estándar universal: funciona para calculadoras, conversores, generadores o cualquier utilidad técnica.
2
+
3
+ El secreto de esta prompt es que no pide "un texto", sino una arquitectura de información que Google interpreta como contenido de alta calidad (E-E-A-T).
4
+
5
+ La Prompt: El Arquitecto de Utilidades SEO
6
+ Copia y pega lo siguiente:
7
+
8
+ Actúa como un Especialista SEO Senior experto en Programmatic SEO y Herramientas Online para el sector veterinario y de mascotas. Tu misión es redactar el contenido de apoyo para una página cuya función principal es una utilidad interactiva (calculadora, conversor o generador).
9
+
10
+ Objetivo: Crear un texto semántico de entre 400 y 600 palabras que aporte autoridad y contexto técnico sin distraer al usuario de la herramienta principal.
11
+
12
+ Tu "Caja de Herramientas" de componentes Astro:
13
+
14
+ SEOArticle: Contenedor raíz.
15
+
16
+ SEOTitle: Encabezados (level 2 para secciones, level 3 para subsecciones).
17
+
18
+ SEOList: Pasos de uso o beneficios.
19
+
20
+ SEOTable: Datos de referencia, rangos o comparativas.
21
+
22
+ SEOTip: El "Consejo del experto" (ideal para recomendaciones veterinarias).
23
+
24
+ SEOCard: Resaltar conceptos clave o fórmulas (ej: fórmula RER, etapas de vida).
25
+
26
+ SEOStats: Datos numéricos o estadísticas del sector (ej: % de mascotas con sobrepeso).
27
+
28
+ SEOGlossary: Definiciones técnicas rápidas (RER, DER, kcal/kg, etc.).
29
+
30
+ SEOProsCons: Ventajas y limitaciones de la herramienta.
31
+
32
+ SEOSummary: Resumen ejecutivo (TL;DR) para situar justo debajo del título.
33
+
34
+ SEODiagnostic: Checklist de validación o "Cuándo usar esta herramienta".
35
+
36
+ Reglas de Oro:
37
+
38
+ Prioriza la Escaneabilidad: El usuario quiere respuestas rápidas. Usa frases cortas y muchos componentes visuales.
39
+
40
+ Contexto Semántico: Incluye palabras clave LSI (latentes) y responde a la intención de búsqueda secundaria (el "qué pasa después" de usar la herramienta).
41
+
42
+ Autoridad Veterinaria: Cita fuentes reales (WSAVA, FEDIAF, AAHA) cuando sea relevante. El tono debe ser de experto en nutrición o medicina animal, no genérico.
43
+
44
+ Estructura Obligatoria:
45
+
46
+ Un <SEOSummary> al inicio con los puntos clave.
47
+
48
+ Una sección de "Cómo funciona" usando <SEOList> o <SEOCard>.
49
+
50
+ Una <SEOTable> con datos de referencia (ej: factores RER/DER, equivalencias de edad, valores calóricos).
51
+
52
+ Un <SEOTip> con valor añadido real (consejo del veterinario).
53
+
54
+ Un <SEODiagnostic> para ayudar al usuario a interpretar sus resultados.
55
+
56
+ Formato de Salida:
57
+ Devuelve exclusivamente el código para un archivo .astro. No incluyas explicaciones innecesarias fuera del código. Usa las props correctamente (ej: <SEOTitle level={2}>).
58
+
@@ -0,0 +1,33 @@
1
+ # Guide de Traduction Technique Élite (Français)
2
+
3
+ Tu es un expert natif français, spécialiste en médecine vétérinaire et passionné de bien-être animal. Ton objectif est de traduire les utilitaires de @jjlmoya/utils-pets avec une précision chirurgicale tout en dominant les résultats de recherche (SEO long-tail).
4
+
5
+ ## Ta Mission
6
+ Transformer un fichier technique TypeScript (EN/ES) en une version française qui semble avoir été écrite par un vétérinaire praticien né en France. Pas de traduction littérale, mais une adaptation naturelle et fluide du domaine vétérinaire.
7
+
8
+ ## Principes de Fer (Règles Strictes)
9
+ - **ZÉRO Commentaires**: Aucun commentaire dans le code (`//` ou `/* */`). Ton code doit être pur.
10
+ - **Intégrité TypeScript**: Préserve exactement la structure des objets et les types (ex: `PetAgeLocaleContent`, `PetRationLocaleContent`, imports, etc.).
11
+ - **SEO Long-Tail Dominant**: Les slugs doivent être riches en mots-clés stratégiques pour le marché français.
12
+ - Âge: `calculateur-age-chien-chat-annees-humaines`
13
+ - Ration: `calculateur-ration-quotidienne-chien-chat-nutrition`
14
+ - **Langage Naturel & Expert**: Utilise le "Vous" (formel). Emploie des termes techniques premium : *RER*, *DER*, *ration journalière*, *stade de vie*, *besoins énergétiques*, *condition corporelle*, *métabolisme basal*.
15
+
16
+ ## Vocabulaire Vétérinaire de Référence
17
+ - RER (Resting Energy Requirement) → Besoins Énergétiques au Repos (BER)
18
+ - DER (Daily Energy Requirement) → Besoins Énergétiques Journaliers (BEJ)
19
+ - Life stage → Stade de vie
20
+ - Puppy / Kitten → Chiot / Chaton
21
+ - Senior → Senior (ou Âgé)
22
+ - Sterilised → Stérilisé(e)
23
+ - Dry food → Croquettes / Aliment sec
24
+ - Wet food → Pâtée / Aliment humide
25
+ - Body weight → Poids corporel
26
+ - Caloric density → Densité calorique (kcal/kg)
27
+
28
+ ## Structure de la SEO
29
+ Dans la section `seo`, assure-toi que le contenu est riche (400-600 mots), structuré avec des balises HTML (`<strong>`, `<h3>`) et des listes qui apportent une réelle valeur ajoutée au propriétaire d'animal. Cite des sources reconnues : WSAVA, FEDIAF, AAHA.
30
+
31
+ ## Fichier Source à Traduire
32
+ [Colle ici le contenu source]
33
+
@@ -0,0 +1,27 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, readdirSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ const libDir = dirname(fileURLToPath(import.meta.url));
6
+ const toolsDir = join(libDir, '../src/tool');
7
+
8
+ const inNodeModules = libDir.includes('node_modules');
9
+ if (!inNodeModules) process.exit(0);
10
+
11
+ const projectRoot = join(libDir, '../../../..');
12
+ const categoryKey = JSON.parse(readFileSync(join(libDir, '../package.json'), 'utf8')).name.replace('@jjlmoya/utils-', '');
13
+ const destDir = join(projectRoot, `public/styles/lib/${categoryKey}`);
14
+
15
+ mkdirSync(destDir, { recursive: true });
16
+
17
+ const tools = readdirSync(toolsDir, { withFileTypes: true }).filter(d => d.isDirectory());
18
+ for (const tool of tools) {
19
+ const toolDir = join(toolsDir, tool.name);
20
+ let files;
21
+ try { files = readdirSync(toolDir).filter(f => f.endsWith('.css')); }
22
+ catch { continue; }
23
+ for (const file of files) {
24
+ writeFileSync(join(destDir, file), readFileSync(join(toolDir, file)));
25
+ console.log(`[@jjlmoya/utils-${categoryKey}] copied ${file}`);
26
+ }
27
+ }
@@ -0,0 +1,9 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { booksCategory } from './index';
4
+
5
+ const locale: string = Astro.props.locale ?? 'en';
6
+ const categoryContent = await booksCategory.i18n[locale as keyof typeof booksCategory.i18n]?.();
7
+ ---
8
+
9
+ {categoryContent && <SEORenderer content={{ locale, sections: categoryContent.seo }} />}
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'buecher',
5
+ title: 'Werkzeuge für Buchveröffentlichungen',
6
+ description: 'Praktische Browser Werkzeuge für Autoren, Lektoren und unabhängige Verlage, zuerst für Seitenplanung und Rückenbreite.',
7
+ seo: [
8
+ { type: 'title', text: 'Werkzeuge für Buchveröffentlichungen und Rückenplanung', level: 2 },
9
+ { type: 'paragraph', html: 'Die Buchproduktion wird leichter planbar, wenn Manuskript, Seitengestaltung, Papier und Bindung gemeinsam sichtbar sind. Diese Bibliothek sammelt kleine, fokussierte Werkzeuge für Autoren, Lektoren, Designer und Verlage, die vor einem vollständigen Produktionsablauf schnell schätzen müssen.' },
10
+ { type: 'title', text: 'Ein Buch vor dem Druck planen', level: 2 },
11
+ { type: 'paragraph', html: 'Das erste Werkzeug schätzt Seitenzahl, Wörter pro Seite, Rückenbreite und Umschlagbreite anhand der Manuskriptwortzahl und einiger physischer Entscheidungen. Wähle ein Format für Roman, Großdruck oder Arbeitsbuch und passe Format, Ränder, Typografie, Papierstärke und Bindung an, um die Auswirkungen zu verstehen.' },
12
+ { type: 'title', text: 'Nützliche Schätzungen mit klaren Grenzen', level: 2 },
13
+ { type: 'paragraph', html: 'Die Werkzeuge sind für frühe Planung, Vergleiche, Unterricht und private Entwürfe gedacht. Sie ersetzen weder einen Druckproof noch einen professionellen Ausschussablauf oder die endgültige Papier und Bindungsspezifikation Ihres Produktionspartners.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Werkzeuge', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formate', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Einheiten', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Datenschutz', value: 'Lokal', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'books',
5
+ title: 'Book Publishing Utilities',
6
+ description: 'Practical browser tools for authors, editors, and independent publishers, starting with page and spine planning.',
7
+ seo: [
8
+ { type: 'title', text: 'Book Publishing Tools for Page and Spine Planning', level: 2 },
9
+ { type: 'paragraph', html: 'Book production becomes easier to reason about when the manuscript, page design, paper, and binding are visible together. This library collects small, focused utilities for authors, editors, designers, and publishers who need a fast estimate before opening a full production workflow.' },
10
+ { type: 'title', text: 'Plan a Book Before You Send It to Print', level: 2 },
11
+ { type: 'paragraph', html: 'The first tool estimates pages, words per page, spine width, and cover spread from a manuscript word count and a few physical choices. Try a novel, large print, or workbook preset, then tune the trim size, margins, typography, paper caliper, and binding to understand how the book changes.' },
12
+ { type: 'title', text: 'Useful Estimates with Clear Limits', level: 2 },
13
+ { type: 'paragraph', html: 'These utilities are designed for early planning, comparison, teaching, and private drafts. They do not replace a printer proof, a professional imposition workflow, or the final paper and binding specification supplied by your production partner.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Tools', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formats', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Units', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Privacy', value: 'Local', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'libros',
5
+ title: 'Herramientas para publicar libros',
6
+ description: 'Herramientas prácticas en el navegador para autores, editores y editoriales independientes, empezando por la planificación de páginas y lomo.',
7
+ seo: [
8
+ { type: 'title', text: 'Herramientas para publicar libros y planificar el lomo', level: 2 },
9
+ { type: 'paragraph', html: 'La producción de un libro es más fácil de razonar cuando el manuscrito, el diseño de página, el papel y la encuadernación se ven juntos. Esta biblioteca reúne utilidades pequeñas y enfocadas para autores, editores, diseñadores y editoriales que necesitan una estimación rápida antes de abrir un flujo de producción completo.' },
10
+ { type: 'title', text: 'Planifica un libro antes de enviarlo a imprenta', level: 2 },
11
+ { type: 'paragraph', html: 'La primera herramienta estima páginas, palabras por página, anchura del lomo y extensión de cubierta a partir del número de palabras del manuscrito y de varias decisiones físicas. Prueba un ajuste de novela, letra grande o cuaderno de trabajo y modifica el formato, los márgenes, la tipografía, el grosor del papel y la encuadernación para entender cómo cambia el libro.' },
12
+ { type: 'title', text: 'Estimaciones útiles con límites claros', level: 2 },
13
+ { type: 'paragraph', html: 'Estas utilidades sirven para planificar al principio, comparar opciones, enseñar y preparar borradores privados. No sustituyen una prueba de imprenta, un flujo profesional de imposición ni las especificaciones finales de papel y encuadernación de tu proveedor de producción.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Herramientas', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formatos', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Unidades', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Privacidad', value: 'Local', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'livres',
5
+ title: 'Outils de publication de livres',
6
+ description: 'Des outils pratiques dans le navigateur pour les auteurs, les éditeurs et les maisons indépendantes, en commençant par la pagination et le dos du livre.',
7
+ seo: [
8
+ { type: 'title', text: 'Outils de publication de livres et de planification du dos', level: 2 },
9
+ { type: 'paragraph', html: "La production d'un livre devient plus facile à raisonner lorsque le manuscrit, la mise en page, le papier et la reliure sont visibles ensemble. Cette bibliothèque réunit des outils simples et précis pour les auteurs, les éditeurs, les designers et les maisons d'édition qui veulent une estimation rapide avant un flux de production complet." },
10
+ { type: 'title', text: "Planifier un livre avant l'impression", level: 2 },
11
+ { type: 'paragraph', html: "Le premier outil estime le nombre de pages, les mots par page, la largeur du dos et le déploiement de la couverture à partir du nombre de mots du manuscrit et de quelques choix physiques. Essayez un format roman, gros caractères ou cahier, puis ajustez le format, les marges, la typographie, l'épaisseur du papier et la reliure pour comprendre les changements." },
12
+ { type: 'title', text: 'Des estimations utiles avec des limites claires', level: 2 },
13
+ { type: 'paragraph', html: "Ces outils servent à la planification initiale, à la comparaison, à l'enseignement et aux brouillons privés. Ils ne remplacent ni une épreuve imprimée, ni un flux professionnel d'imposition, ni les spécifications finales du papier et de la reliure fournies par votre partenaire de production." },
14
+ { type: 'stats', items: [
15
+ { label: 'Outils', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formats', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Unites', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Confidentialite', value: 'Locale', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'buku',
5
+ title: 'Alat Penerbitan Buku',
6
+ description: 'Alat praktis di browser untuk penulis, editor, dan penerbit independen, dimulai dari perencanaan halaman dan punggung buku.',
7
+ seo: [
8
+ { type: 'title', text: 'Alat Penerbitan Buku untuk Merencanakan Halaman dan Punggung', level: 2 },
9
+ { type: 'paragraph', html: 'Produksi buku lebih mudah dipahami ketika naskah, desain halaman, kertas, dan jilid terlihat bersama. Pustaka ini mengumpulkan alat kecil yang fokus untuk penulis, editor, desainer, dan penerbit yang membutuhkan perkiraan cepat sebelum membuka alur produksi lengkap.' },
10
+ { type: 'title', text: 'Rencanakan Buku Sebelum Dikirim ke Percetakan', level: 2 },
11
+ { type: 'paragraph', html: 'Alat pertama memperkirakan jumlah halaman, kata per halaman, lebar punggung, dan bentangan sampul berdasarkan jumlah kata naskah serta beberapa pilihan fisik. Coba preset novel, huruf besar, atau buku kerja, lalu sesuaikan ukuran, margin, tipografi, ketebalan kertas, dan jilid untuk memahami perubahan buku.' },
12
+ { type: 'title', text: 'Perkiraan Berguna dengan Batas yang Jelas', level: 2 },
13
+ { type: 'paragraph', html: 'Alat ini dirancang untuk perencanaan awal, perbandingan, pembelajaran, dan draf pribadi. Hasilnya tidak menggantikan proof cetak, alur imposition profesional, atau spesifikasi akhir kertas dan jilid dari mitra produksi Anda.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Alat', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Format', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Satuan', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Privasi', value: 'Lokal', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'libri',
5
+ title: 'Strumenti per la pubblicazione di libri',
6
+ description: 'Strumenti pratici nel browser per autori, editor e piccoli editori, a partire dalla pianificazione delle pagine e del dorso.',
7
+ seo: [
8
+ { type: 'title', text: 'Strumenti per pubblicare libri e pianificare il dorso', level: 2 },
9
+ { type: 'paragraph', html: 'La produzione di un libro è più facile da valutare quando manoscritto, impaginazione, carta e rilegatura sono visibili insieme. Questa raccolta riunisce strumenti piccoli e mirati per autori, editor, designer ed editori che hanno bisogno di una stima rapida prima di avviare un flusso produttivo completo.' },
10
+ { type: 'title', text: 'Pianifica un libro prima di mandarlo in stampa', level: 2 },
11
+ { type: 'paragraph', html: 'Il primo strumento stima pagine, parole per pagina, larghezza del dorso e sviluppo della copertina a partire dal numero di parole del manoscritto e da alcune scelte fisiche. Prova un formato romanzo, caratteri grandi o quaderno, poi regola formato, margini, tipografia, spessore della carta e rilegatura per capire come cambia il libro.' },
12
+ { type: 'title', text: 'Stime utili con limiti chiari', level: 2 },
13
+ { type: 'paragraph', html: "Questi strumenti sono pensati per la pianificazione iniziale, il confronto, l'insegnamento e le bozze private. Non sostituiscono una prova di stampa, un flusso professionale di imposizione o le specifiche finali di carta e rilegatura fornite dal partner di produzione." },
14
+ { type: 'stats', items: [
15
+ { label: 'Strumenti', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formati', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Unità', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Privacy', value: 'Locale', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'hon',
5
+ title: '出版のための本のツール',
6
+ description: '著者、編集者、個人出版社がページ数と背幅を計画するための、実用的なブラウザーツールです。',
7
+ seo: [
8
+ { type: 'title', text: '本の出版とページ数や背幅の計画に役立つツール', level: 2 },
9
+ { type: 'paragraph', html: '原稿、ページデザイン、用紙、製本をまとめて確認すると、本の制作計画を考えやすくなります。このライブラリは、完全な制作工程に入る前にすばやく見積もりたい著者、編集者、デザイナー、出版社のために、目的を絞った小さなツールを集めています。' },
10
+ { type: 'title', text: '印刷に出す前に本を計画する', level: 2 },
11
+ { type: 'paragraph', html: '最初のツールは、原稿の語数といくつかの物理的な条件から、ページ数、1ページあたりの語数、背幅、表紙の展開寸法を見積もります。小説、大きな文字、ワークブックのプリセットを試し、判型、余白、文字組み、用紙の厚さ、製本方法を調整して本の変化を確認できます。' },
12
+ { type: 'title', text: '限界が明確な実用的な見積もり', level: 2 },
13
+ { type: 'paragraph', html: 'このツールは初期計画、比較、学習、非公開の下書きのために設計されています。印刷校正、専門的な面付け工程、制作会社が提示する最終的な用紙と製本の仕様に代わるものではありません。' },
14
+ { type: 'stats', items: [
15
+ { label: 'ツール', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: '形式', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: '単位', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'プライバシー', value: 'ローカル', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'chaek',
5
+ title: '도서 출판 도구',
6
+ description: '작가, 편집자, 독립 출판사를 위한 실용적인 브라우저 도구로, 페이지 수와 책등 폭을 계획하는 데서 시작합니다.',
7
+ seo: [
8
+ { type: 'title', text: '도서 출판과 페이지 수 및 책등 계획 도구', level: 2 },
9
+ { type: 'paragraph', html: '원고, 페이지 디자인, 종이, 제본을 함께 확인하면 책 제작을 더 쉽게 계획할 수 있습니다. 이 라이브러리는 전체 제작 과정에 들어가기 전에 빠르게 추정해야 하는 작가, 편집자, 디자이너, 출판사를 위해 작고 집중된 도구를 모았습니다.' },
10
+ { type: 'title', text: '인쇄소에 보내기 전에 책을 계획하세요', level: 2 },
11
+ { type: 'paragraph', html: '첫 번째 도구는 원고의 단어 수와 몇 가지 물리적 선택을 바탕으로 페이지 수, 페이지당 단어 수, 책등 폭, 펼친 표지 크기를 추정합니다. 소설, 큰 글자, 워크북 프리셋을 사용한 뒤 판형, 여백, 글꼴, 종이 두께, 제본 방식을 조정하며 책의 변화를 확인할 수 있습니다.' },
12
+ { type: 'title', text: '한계가 분명한 유용한 추정', level: 2 },
13
+ { type: 'paragraph', html: '이 도구는 초기 계획, 비교, 학습, 비공개 초안을 위해 설계되었습니다. 인쇄 교정본, 전문적인 면 배치 작업, 제작 파트너가 제공하는 최종 종이 및 제본 사양을 대신하지 않습니다.' },
14
+ { type: 'stats', items: [
15
+ { label: '도구', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: '형식', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: '단위', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: '개인정보', value: '로컬', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'boeken',
5
+ title: 'Hulpmiddelen voor boekuitgave',
6
+ description: 'Praktische browsertools voor auteurs, redacteuren en zelfstandige uitgevers, met een startpunt voor pagina en rugplanning.',
7
+ seo: [
8
+ { type: 'title', text: 'Hulpmiddelen voor boekuitgave en rugplanning', level: 2 },
9
+ { type: 'paragraph', html: 'Boekproductie wordt overzichtelijker wanneer manuscript, paginavormgeving, papier en binding samen zichtbaar zijn. Deze bibliotheek verzamelt kleine, gerichte hulpmiddelen voor auteurs, redacteuren, ontwerpers en uitgevers die snel willen schatten voordat ze een volledig productieproces starten.' },
10
+ { type: 'title', text: 'Plan een boek voordat het naar de drukker gaat', level: 2 },
11
+ { type: 'paragraph', html: 'De eerste tool schat het aantal paginas, woorden per pagina, de rugbreedte en de volledige omslag uitgaande van het aantal manuscriptwoorden en enkele fysieke keuzes. Probeer een roman, grootletter of werkboek en stel formaat, marges, typografie, papierdikte en binding bij om te zien hoe het boek verandert.' },
12
+ { type: 'title', text: 'Bruikbare schattingen met duidelijke grenzen', level: 2 },
13
+ { type: 'paragraph', html: 'Deze hulpmiddelen zijn bedoeld voor vroege planning, vergelijking, onderwijs en privéconcepten. Ze vervangen geen drukproef, professioneel inslagschema of definitieve papier en bindwijze specificatie van je productiepartner.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Tools', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formaten', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Eenheden', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Privacy', value: 'Lokaal', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'ksiazki',
5
+ title: 'Narzędzia do publikacji książek',
6
+ description: 'Praktyczne narzędzia w przeglądarce dla autorów, redaktorów i niezależnych wydawców, zaczynające od planowania stron i grzbietu.',
7
+ seo: [
8
+ { type: 'title', text: 'Narzędzia do publikacji książek i planowania grzbietu', level: 2 },
9
+ { type: 'paragraph', html: 'Produkcję książki łatwiej zaplanować, gdy rękopis, układ stron, papier i oprawa są widoczne razem. Ta biblioteka zbiera małe, wyspecjalizowane narzędzia dla autorów, redaktorów, projektantów i wydawców, którzy potrzebują szybkiego oszacowania przed rozpoczęciem pełnego procesu produkcyjnego.' },
10
+ { type: 'title', text: 'Zaplanuj książkę przed wysłaniem do drukarni', level: 2 },
11
+ { type: 'paragraph', html: 'Pierwsze narzędzie szacuje liczbę stron, słów na stronę, szerokość grzbietu i rozłożenie okładki na podstawie liczby słów rękopisu oraz kilku parametrów fizycznych. Wybierz ustawienie powieści, dużego druku albo zeszytu ćwiczeń, a następnie zmień format, marginesy, typografię, grubość papieru i oprawę, aby zobaczyć wpływ tych decyzji.' },
12
+ { type: 'title', text: 'Przydatne szacunki z jasnymi ograniczeniami', level: 2 },
13
+ { type: 'paragraph', html: 'Narzędzia służą do wstępnego planowania, porównywania, nauki i prywatnych szkiców. Nie zastępują odbitki próbnej, profesjonalnego procesu impozycji ani ostatecznej specyfikacji papieru i oprawy przekazanej przez partnera produkcyjnego.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Narzędzia', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formaty', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Jednostki', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Prywatność', value: 'Lokalnie', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'livros',
5
+ title: 'Ferramentas para publicação de livros',
6
+ description: 'Ferramentas práticas no navegador para autores, editores e editoras independentes, começando pelo planejamento de páginas e lombada.',
7
+ seo: [
8
+ { type: 'title', text: 'Ferramentas para publicar livros e planejar a lombada', level: 2 },
9
+ { type: 'paragraph', html: 'A produção de um livro fica mais fácil de planejar quando manuscrito, projeto de página, papel e encadernação aparecem juntos. Esta biblioteca reúne ferramentas pequenas e focadas para autores, editores, designers e editoras que precisam de uma estimativa rápida antes de iniciar um fluxo completo de produção.' },
10
+ { type: 'title', text: 'Planeje um livro antes de enviar para a gráfica', level: 2 },
11
+ { type: 'paragraph', html: 'A primeira ferramenta estima páginas, palavras por página, largura da lombada e abertura completa da capa com base no número de palavras do manuscrito e em algumas escolhas físicas. Experimente um formato de romance, letra grande ou caderno de exercícios e ajuste formato, margens, tipografia, espessura do papel e encadernação para entender como o livro muda.' },
12
+ { type: 'title', text: 'Estimativas úteis com limites claros', level: 2 },
13
+ { type: 'paragraph', html: 'As ferramentas foram feitas para o planejamento inicial, a comparação, o ensino e rascunhos privados. Elas não substituem uma prova de impressão, um fluxo profissional de imposição nem a especificação final de papel e encadernação fornecida pelo seu parceiro de produção.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Ferramentas', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formatos', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Unidades', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Privacidade', value: 'Local', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'knigi',
5
+ title: 'Инструменты для издания книг',
6
+ description: 'Практичные браузерные инструменты для авторов, редакторов и независимых издателей, начиная с планирования страниц и корешка.',
7
+ seo: [
8
+ { type: 'title', text: 'Инструменты для издания книг и планирования корешка', level: 2 },
9
+ { type: 'paragraph', html: 'Производство книги легче планировать, когда рукопись, макет страницы, бумага и переплёт видны вместе. В этой библиотеке собраны небольшие специализированные инструменты для авторов, редакторов, дизайнеров и издателей, которым нужна быстрая оценка до начала полного производственного процесса.' },
10
+ { type: 'title', text: 'Спланируйте книгу до отправки в типографию', level: 2 },
11
+ { type: 'paragraph', html: 'Первый инструмент оценивает количество страниц, слов на странице, ширину корешка и разворот обложки по числу слов рукописи и нескольким физическим параметрам. Выберите пресет для романа, крупного шрифта или рабочей тетради, а затем настройте формат, поля, типографику, толщину бумаги и переплёт, чтобы увидеть изменения.' },
12
+ { type: 'title', text: 'Полезные оценки с понятными ограничениями', level: 2 },
13
+ { type: 'paragraph', html: 'Эти инструменты предназначены для предварительного планирования, сравнения, обучения и личных черновиков. Они не заменяют печатную пробу, профессиональный процесс спуска полос или окончательную спецификацию бумаги и переплёта от вашего производственного партнёра.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Инструменты', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Форматы', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Единицы', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Приватность', value: 'Локально', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'bocker',
5
+ title: 'Verktyg för bokutgivning',
6
+ description: 'Praktiska webbläsarverktyg för författare, redaktörer och självständiga förlag, med början i planering av sidor och ryggbredd.',
7
+ seo: [
8
+ { type: 'title', text: 'Verktyg för bokutgivning och planering av ryggbredd', level: 2 },
9
+ { type: 'paragraph', html: 'Bokproduktion blir lättare att planera när manuskript, sidlayout, papper och bindning syns tillsammans. Det här biblioteket samlar små och fokuserade verktyg för författare, redaktörer, formgivare och förlag som behöver en snabb uppskattning innan ett komplett produktionsflöde börjar.' },
10
+ { type: 'title', text: 'Planera en bok innan den skickas till tryck', level: 2 },
11
+ { type: 'paragraph', html: 'Det första verktyget uppskattar antal sidor, ord per sida, ryggbredd och hela omslaget utifrån manuskriptets ordantal och några fysiska val. Prova format för roman, stor text eller arbetsbok och justera format, marginaler, typografi, papperstjocklek och bindning för att se hur boken förändras.' },
12
+ { type: 'title', text: 'Användbara uppskattningar med tydliga gränser', level: 2 },
13
+ { type: 'paragraph', html: 'Verktygen är avsedda för tidig planering, jämförelser, undervisning och privata utkast. De ersätter inte ett tryckprov, ett professionellt arbetsflöde för arkmontering eller den slutliga specifikationen för papper och bindning från din produktionspartner.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Verktyg', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Format', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Enheter', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Integritet', value: 'Lokalt', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };
@@ -0,0 +1,21 @@
1
+ import type { CategoryLocaleContent } from '../../types';
2
+
3
+ export const content: CategoryLocaleContent = {
4
+ slug: 'kitaplar',
5
+ title: 'Kitap yayıncılığı araçları',
6
+ description: 'Yazarlar, editörler ve bağımsız yayıncılar için, sayfa ve sırt planlamasıyla başlayan pratik tarayıcı araçları.',
7
+ seo: [
8
+ { type: 'title', text: 'Kitap yayıncılığı ve sırt planlaması araçları', level: 2 },
9
+ { type: 'paragraph', html: 'El yazması, sayfa tasarımı, kâğıt ve cilt birlikte görüldüğünde kitap üretimini planlamak kolaylaşır. Bu kütüphane, tam bir üretim sürecine başlamadan önce hızlı bir tahmine ihtiyaç duyan yazarlar, editörler, tasarımcılar ve yayıncılar için küçük ve odaklı araçlar sunar.' },
10
+ { type: 'title', text: 'Baskıya göndermeden önce kitabınızı planlayın', level: 2 },
11
+ { type: 'paragraph', html: 'İlk araç, el yazmasının kelime sayısı ve birkaç fiziksel seçim üzerinden sayfa sayısını, sayfa başına kelimeyi, sırt genişliğini ve tam kapak açılımını tahmin eder. Roman, büyük punto veya çalışma kitabı ön ayarını deneyin; kitabın nasıl değiştiğini görmek için boyut, kenar boşluğu, tipografi, kâğıt kalınlığı ve cilt ayarlarını düzenleyin.' },
12
+ { type: 'title', text: 'Sınırları açık ve yararlı tahminler', level: 2 },
13
+ { type: 'paragraph', html: 'Bu araçlar erken planlama, karşılaştırma, eğitim ve özel taslaklar için hazırlanmıştır. Matbaa provası, profesyonel forma yerleştirme süreci veya üretim ortağınızın verdiği kesin kâğıt ve cilt özelliklerinin yerini tutmaz.' },
14
+ { type: 'stats', items: [
15
+ { label: 'Araçlar', value: '1+', icon: 'mdi:book-open-variant' },
16
+ { label: 'Formatlar', value: '3', icon: 'mdi:book-cog-outline' },
17
+ { label: 'Birimler', value: '2', icon: 'mdi:ruler-square' },
18
+ { label: 'Gizlilik', value: 'Yerel', icon: 'mdi:shield-check-outline' },
19
+ ] },
20
+ ],
21
+ };