@jjlmoya/utils-diy 1.1.0 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-diy",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -416,9 +416,7 @@ const t = (ui ?? {}) as DrillCalculatorUI;
416
416
  --dc-border: rgba(255, 255, 255, 0.1);
417
417
  }
418
418
 
419
- :global(.hidden) {
420
- display: none;
421
- }
419
+
422
420
 
423
421
  .dc-root {
424
422
  width: 100%;
@@ -1207,4 +1205,8 @@ const t = (ui ?? {}) as DrillCalculatorUI;
1207
1205
  font-size: 3.5rem;
1208
1206
  }
1209
1207
  }
1208
+
1209
+ :global(.hidden) {
1210
+ display: none;
1211
+ }
1210
1212
  </style>
@@ -2,8 +2,8 @@ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'sche
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { DrillSharpenerUI } from '../ui';
4
4
 
5
- const slug = 'afilador-maestro-brocas';
6
- const title = 'Afilador Maestro de Brocas: Galga de Precisión';
5
+ const slug = 'afilado-maestro-brocas';
6
+ const title = 'Afilado Maestro de Brocas: Galga de Precisión';
7
7
  const description = 'Guía interactiva para afilar brocas HSS. Galga digital en pantalla para verificar ángulos de 118° y 135°. Calcula RPM y diagnostica errores de corte.';
8
8
 
9
9
  const faqData = [
@@ -2,7 +2,7 @@ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'sche
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { MortarCalculatorUI } from '../ui';
4
4
 
5
- const slug = 'morteros-cal';
5
+ const slug = 'morteros';
6
6
  const title = 'Proporciones Morteros de Cal Tradicionales: Enfoscados y Revocos';
7
7
  const description =
8
8
  'Calculadora gratuita para morteros de cal y arena. Obtén las proporciones exactas para enfoscados, revocos y enlucidos según métodos tradicionales (Vitruvio)';
@@ -1,52 +1,13 @@
1
1
  ---
2
- ---
2
+ import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
+ import { stairCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
3
5
 
4
- <div class="sc-bibliography">
5
- <h3>Referencias y Normativa</h3>
6
- <ul>
7
- <li>
8
- <a href="https://www.codigotecnico.org/" target="_blank" rel="noopener noreferrer">
9
- Normativa de Seguridad en Escaleras (CTE España)
10
- </a>
11
- </li>
12
- <li>
13
- <a href="https://es.wikipedia.org/wiki/Escalera" target="_blank" rel="noopener noreferrer">
14
- Ergonomía de la Escalera - Wikipedia
15
- </a>
16
- </li>
17
- <li>
18
- <a href="https://www.idae.es/" target="_blank" rel="noopener noreferrer">
19
- Instituto para la Diversificación y Ahorro de la Energía (IDAE)
20
- </a>
21
- </li>
22
- </ul>
23
- </div>
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+ const { locale = 'es' } = Astro.props;
10
+ const content = await stairCalculator.i18n[locale]?.();
11
+ ---
24
12
 
25
- <style>
26
- .sc-bibliography {
27
- max-width: 900px;
28
- margin: 2rem auto;
29
- padding: 1.5rem;
30
- }
31
- .sc-bibliography h3 {
32
- font-size: 1.25rem;
33
- font-weight: 700;
34
- margin-bottom: 1rem;
35
- color: #1e293b;
36
- }
37
- .sc-bibliography ul {
38
- list-style: none;
39
- padding: 0;
40
- }
41
- .sc-bibliography li {
42
- margin-bottom: 0.75rem;
43
- }
44
- .sc-bibliography a {
45
- color: #4f46e5;
46
- text-decoration: none;
47
- font-weight: 600;
48
- }
49
- .sc-bibliography a:hover {
50
- text-decoration: underline;
51
- }
52
- </style>
13
+ {content && <SharedBibliography links={content.bibliography} />}
@@ -457,9 +457,13 @@ const t = (ui ?? {}) as StairCalculatorUI;
457
457
  display: flex;
458
458
  align-items: center;
459
459
  background: rgba(255, 255, 255, 0.5);
460
- border-radius: 1rem;
460
+ border-radius: 1.25rem;
461
461
  border: 2px solid var(--sc-border);
462
462
  transition: all 0.2s ease;
463
+ padding: 3px;
464
+ gap: 2px;
465
+ width: 100%;
466
+ box-sizing: border-box;
463
467
  }
464
468
 
465
469
  :global(.theme-dark) .sc-stepper {
@@ -480,9 +484,12 @@ const t = (ui ?? {}) as StairCalculatorUI;
480
484
  background: none;
481
485
  border: none;
482
486
  color: var(--sc-neutral-light);
483
- font-size: 1.25rem;
487
+ font-size: 1.6rem;
488
+ font-weight: 800;
484
489
  cursor: pointer;
485
- border-radius: 0.5rem;
490
+ border-radius: 0.85rem;
491
+ transition: all 0.2s ease;
492
+ flex-shrink: 0;
486
493
  }
487
494
 
488
495
  .sc-step-btn:hover {
@@ -492,6 +499,7 @@ const t = (ui ?? {}) as StairCalculatorUI;
492
499
 
493
500
  .sc-stepper input {
494
501
  flex: 1;
502
+ min-width: 0;
495
503
  background: none;
496
504
  border: none;
497
505
  color: var(--sc-neutral);
@@ -511,7 +519,7 @@ const t = (ui ?? {}) as StairCalculatorUI;
511
519
 
512
520
  .sc-select {
513
521
  width: 100%;
514
- padding: 0.8rem;
522
+ padding: 0.8rem 2.8rem 0.8rem 1rem;
515
523
  border-radius: 1rem;
516
524
  border: 2px solid var(--sc-border);
517
525
  background: rgba(255, 255, 255, 0.5);
@@ -520,10 +528,27 @@ const t = (ui ?? {}) as StairCalculatorUI;
520
528
  color: var(--sc-neutral);
521
529
  outline: none;
522
530
  transition: all 0.2s ease;
531
+ appearance: none;
532
+ -webkit-appearance: none;
533
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%236366f1' d='M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6l-6-6l1.41-1.42Z'/%3E%3C/svg%3E");
534
+ background-repeat: no-repeat;
535
+ background-position: right 1rem center;
536
+ cursor: pointer;
523
537
  }
524
538
 
525
539
  :global(.theme-dark) .sc-select {
526
- background: rgba(255, 255, 255, 0.04);
540
+ background-color: #0f172a;
541
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='%23818cf8' d='M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6l-6-6l1.41-1.42Z'/%3E%3C/svg%3E");
542
+ }
543
+
544
+ .sc-select option {
545
+ background: white;
546
+ color: #1e293b;
547
+ }
548
+
549
+ :global(.theme-dark) .sc-select option {
550
+ background: #1e293b;
551
+ color: #f1f5f9;
527
552
  }
528
553
 
529
554
  .sc-optimize-btn {
@@ -1,211 +1,14 @@
1
1
  ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { stairCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+ const { locale = 'es' } = Astro.props;
10
+ const content = await stairCalculator.i18n[locale]?.();
11
+ if (!content) return null;
2
12
  ---
3
13
 
4
- <article class="sc-seo-article">
5
- <h2>Calculadora de Escaleras: Diseño y Ejecución en Obra</h2>
6
-
7
- <p>
8
- Diseñar una escalera no es solo una cuestión estética; es un desafío de ingeniería y ergonomía. Nuestra herramienta avanzada permite calcular desde la <strong>geometría básica</strong> hasta la <strong>cubicación de hormigón</strong>, integrando factores críticos de obra como el espesor de la losa y los materiales de acabado.
9
- </p>
10
-
11
- <div class="sc-seo-summary">
12
- <h3>Capacidades de la Herramienta</h3>
13
- <ul>
14
- <li>Relación de <strong>Blondel (2CH + H)</strong> optimizada.</li>
15
- <li>Cálculo de <strong>volumen de hormigón</strong> real (peldaños + losa).</li>
16
- <li>Compensación por <strong>espesor de acabado</strong> (mármol, madera).</li>
17
- <li>Guía de <strong>replanteo acumulado</strong> para evitar errores métricos.</li>
18
- </ul>
19
- </div>
20
-
21
- <h3>Fundamentos Técnicos: La Ley de Blondel</h3>
22
-
23
- <p>
24
- La comodidad de una escalera depende de la longitud del paso humano. El estándar internacional establece que la suma de dos contrahuellas y una huella debe estar en el rango de <strong>62 a 64 cm</strong>.
25
- </p>
26
-
27
- <div class="sc-seo-tip">
28
- <h4>Optimización de Peldaños</h4>
29
- <p>
30
- Una contrahuella de <strong>18 cm</strong> es el estándar de confort en viviendas. Si tienes dudas sobre cuántos peldaños usar, nuestra calculadora incluye un botón de optimización automática que ajusta el número de niveles para acercarse a esta medida ideal.
31
- </p>
32
- </div>
33
-
34
- <h3>Control de Estructura y Materiales</h3>
35
-
36
- <p>
37
- Para una ejecución profesional, es vital considerar la <strong>losa de hormigón</strong> (el plano inclinado que sostiene los escalones). Ignorar este volumen resultaría en un pedido de hormigón insuficiente.
38
- </p>
39
-
40
- <div class="sc-seo-stats">
41
- <div class="sc-stat">
42
- <span class="sc-stat-label">Losa Estándar</span>
43
- <span class="sc-stat-value">15</span>
44
- <span class="sc-stat-unit">cm</span>
45
- </div>
46
- <div class="sc-stat">
47
- <span class="sc-stat-label">CH Vivienda</span>
48
- <span class="sc-stat-value">17.5</span>
49
- <span class="sc-stat-unit">cm</span>
50
- </div>
51
- <div class="sc-stat">
52
- <span class="sc-stat-label">Ángulo Ideal</span>
53
- <span class="sc-stat-value">32</span>
54
- <span class="sc-stat-unit">º</span>
55
- </div>
56
- </div>
57
-
58
- <h3>Replanteo y Trazado: El Error Acumulado</h3>
59
-
60
- <p>
61
- En la construcción de escaleras, el mayor enemigo es el error milimétrico. Si mides cada escalón por separado, la suma de pequeños errores puede dejar el último peldaño con una altura peligrosa (el famoso 'escalón cojo').
62
- </p>
63
-
64
- <table class="sc-seo-table">
65
- <thead>
66
- <tr>
67
- <th>Método</th>
68
- <th>Precisión</th>
69
- <th>Resultado en Obra</th>
70
- </tr>
71
- </thead>
72
- <tbody>
73
- <tr>
74
- <td>Medición Individual</td>
75
- <td>Baja</td>
76
- <td>Riesgo de tropiezos por desigualdad.</td>
77
- </tr>
78
- <tr>
79
- <td><strong>Trazado Acumulado</strong></td>
80
- <td><strong>Alta</strong></td>
81
- <td><strong>Peldaños idénticos y seguros.</strong></td>
82
- </tr>
83
- </tbody>
84
- </table>
85
-
86
- <h3>Previsión de Acabados Finales</h3>
87
-
88
- <p>
89
- ¿Vas a instalar peldaños de granito de 3 cm? Este dato es fundamental. Si no se prevé, el primer peldaño quedará 3 cm más alto y el último 3 cm más bajo respecto al suelo terminado. Nuestra calculadora ajusta estos niveles para que, tras la colocación del material, la escalera sea perfecta de principio a fin.
90
- </p>
91
-
92
- <pre class="sc-seo-code"><code>
93
- # Ejemplo de Cálculo Total
94
- Desnivel: 300 cm
95
- Peldaños: 17 (CH = 17.6 cm)
96
- Espesor Rampa: 15 cm
97
- # Vol. Hormigón = Vol. Triángulos + Vol. Rampa
98
- </code></pre>
99
- </article>
100
-
101
- <style>
102
- .sc-seo-article {
103
- max-width: 900px;
104
- margin: 2rem auto;
105
- padding: 0 1.5rem;
106
- color: #1e293b;
107
- line-height: 1.6;
108
- }
109
- .sc-seo-article h2 {
110
- font-size: 1.875rem;
111
- font-weight: 800;
112
- margin: 1.5rem 0 1rem;
113
- color: #0f172a;
114
- }
115
- .sc-seo-article h3 {
116
- font-size: 1.25rem;
117
- font-weight: 700;
118
- margin: 1.5rem 0 0.75rem;
119
- color: #1e293b;
120
- }
121
- .sc-seo-article h4 {
122
- font-size: 1rem;
123
- font-weight: 700;
124
- margin: 0.75rem 0 0.5rem;
125
- }
126
- .sc-seo-article p {
127
- margin-bottom: 1rem;
128
- }
129
- .sc-seo-summary {
130
- background: #f0f9ff;
131
- border-left: 4px solid #4f46e5;
132
- padding: 1.25rem;
133
- border-radius: 0.5rem;
134
- margin: 1.25rem 0;
135
- }
136
- .sc-seo-summary ul {
137
- margin: 0.75rem 0 0;
138
- padding-left: 1.5rem;
139
- }
140
- .sc-seo-summary li {
141
- margin-bottom: 0.5rem;
142
- }
143
- .sc-seo-tip {
144
- background: #fef9c3;
145
- border-left: 4px solid #f59e0b;
146
- padding: 1.25rem;
147
- border-radius: 0.5rem;
148
- margin: 1.25rem 0;
149
- }
150
- .sc-seo-tip p {
151
- margin: 0;
152
- }
153
- .sc-seo-stats {
154
- display: grid;
155
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
156
- gap: 1rem;
157
- margin: 1.25rem 0;
158
- }
159
- .sc-stat {
160
- background: #fff;
161
- border: 1px solid #e2e8f0;
162
- border-radius: 0.75rem;
163
- padding: 1rem;
164
- text-align: center;
165
- }
166
- .sc-stat-label {
167
- display: block;
168
- font-size: 0.8rem;
169
- color: #64748b;
170
- margin-bottom: 0.5rem;
171
- font-weight: 600;
172
- }
173
- .sc-stat-value {
174
- display: block;
175
- font-size: 1.875rem;
176
- font-weight: 800;
177
- color: #4f46e5;
178
- }
179
- .sc-stat-unit {
180
- display: block;
181
- font-size: 0.75rem;
182
- color: #64748b;
183
- margin-top: 0.25rem;
184
- }
185
- .sc-seo-table {
186
- width: 100%;
187
- border-collapse: collapse;
188
- margin: 1.25rem 0;
189
- border: 1px solid #e2e8f0;
190
- }
191
- .sc-seo-table th {
192
- background: #f1f5f9;
193
- padding: 0.75rem;
194
- text-align: left;
195
- font-weight: 700;
196
- border-bottom: 2px solid #e2e8f0;
197
- }
198
- .sc-seo-table td {
199
- padding: 0.75rem;
200
- border-bottom: 1px solid #e2e8f0;
201
- }
202
- .sc-seo-code {
203
- background: #1e293b;
204
- color: #e2e8f0;
205
- padding: 1.25rem;
206
- border-radius: 0.75rem;
207
- overflow-x: auto;
208
- margin: 1.25rem 0;
209
- font-size: 0.9rem;
210
- }
211
- </style>
14
+ <SEORenderer content={{ locale: locale as string, sections: content.seo }} />
@@ -410,7 +410,7 @@ const t = (ui ?? {}) as ThermalExpansionCalculatorUI;
410
410
  :global(.theme-dark) .te-input {
411
411
  background: rgba(0, 0, 0, 0.25);
412
412
  border-color: rgba(255, 255, 255, 0.1);
413
- color: black;
413
+ color: #f9fafb;
414
414
  }
415
415
 
416
416
  :global(.theme-dark) .te-input:focus {