@jjlmoya/utils-home 1.29.0 → 1.31.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 (54) hide show
  1. package/package.json +1 -1
  2. package/src/entries.ts +7 -1
  3. package/src/index.ts +2 -0
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/applianceCostCalculator/appliance-cost-calculator.css +635 -0
  7. package/src/tool/applianceCostCalculator/bibliography.astro +14 -0
  8. package/src/tool/applianceCostCalculator/bibliography.ts +14 -0
  9. package/src/tool/applianceCostCalculator/component.astro +322 -0
  10. package/src/tool/applianceCostCalculator/entry.ts +29 -0
  11. package/src/tool/applianceCostCalculator/i18n/de.ts +229 -0
  12. package/src/tool/applianceCostCalculator/i18n/en.ts +229 -0
  13. package/src/tool/applianceCostCalculator/i18n/es.ts +229 -0
  14. package/src/tool/applianceCostCalculator/i18n/fr.ts +229 -0
  15. package/src/tool/applianceCostCalculator/i18n/id.ts +229 -0
  16. package/src/tool/applianceCostCalculator/i18n/it.ts +229 -0
  17. package/src/tool/applianceCostCalculator/i18n/ja.ts +229 -0
  18. package/src/tool/applianceCostCalculator/i18n/ko.ts +229 -0
  19. package/src/tool/applianceCostCalculator/i18n/nl.ts +229 -0
  20. package/src/tool/applianceCostCalculator/i18n/pl.ts +229 -0
  21. package/src/tool/applianceCostCalculator/i18n/pt.ts +229 -0
  22. package/src/tool/applianceCostCalculator/i18n/ru.ts +229 -0
  23. package/src/tool/applianceCostCalculator/i18n/sv.ts +229 -0
  24. package/src/tool/applianceCostCalculator/i18n/tr.ts +229 -0
  25. package/src/tool/applianceCostCalculator/i18n/zh.ts +229 -0
  26. package/src/tool/applianceCostCalculator/index.ts +9 -0
  27. package/src/tool/applianceCostCalculator/logic.ts +122 -0
  28. package/src/tool/applianceCostCalculator/seo.astro +15 -0
  29. package/src/tool/applianceCostCalculator/ui.ts +41 -0
  30. package/src/tool/tileLayoutCalculator/bibliography.astro +14 -0
  31. package/src/tool/tileLayoutCalculator/bibliography.ts +10 -0
  32. package/src/tool/tileLayoutCalculator/component.astro +415 -0
  33. package/src/tool/tileLayoutCalculator/entry.ts +29 -0
  34. package/src/tool/tileLayoutCalculator/i18n/de.ts +208 -0
  35. package/src/tool/tileLayoutCalculator/i18n/en.ts +208 -0
  36. package/src/tool/tileLayoutCalculator/i18n/es.ts +208 -0
  37. package/src/tool/tileLayoutCalculator/i18n/fr.ts +208 -0
  38. package/src/tool/tileLayoutCalculator/i18n/id.ts +208 -0
  39. package/src/tool/tileLayoutCalculator/i18n/it.ts +208 -0
  40. package/src/tool/tileLayoutCalculator/i18n/ja.ts +208 -0
  41. package/src/tool/tileLayoutCalculator/i18n/ko.ts +208 -0
  42. package/src/tool/tileLayoutCalculator/i18n/nl.ts +208 -0
  43. package/src/tool/tileLayoutCalculator/i18n/pl.ts +208 -0
  44. package/src/tool/tileLayoutCalculator/i18n/pt.ts +208 -0
  45. package/src/tool/tileLayoutCalculator/i18n/ru.ts +208 -0
  46. package/src/tool/tileLayoutCalculator/i18n/sv.ts +208 -0
  47. package/src/tool/tileLayoutCalculator/i18n/tr.ts +208 -0
  48. package/src/tool/tileLayoutCalculator/i18n/zh.ts +208 -0
  49. package/src/tool/tileLayoutCalculator/index.ts +9 -0
  50. package/src/tool/tileLayoutCalculator/logic.ts +55 -0
  51. package/src/tool/tileLayoutCalculator/seo.astro +15 -0
  52. package/src/tool/tileLayoutCalculator/tile-layout-calculator.css +404 -0
  53. package/src/tool/tileLayoutCalculator/ui.ts +37 -0
  54. package/src/tools.ts +4 -0
@@ -0,0 +1,208 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TileLayoutCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'tile-layout-calculator';
7
+ const title = 'Tile Layout and Waste Calculator';
8
+ const description =
9
+ 'Plan your room flooring with precision. Calculate exact tile quantities, boxes needed, total cost, and visualize the layout in real time with an interactive grid preview.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'How do I calculate how many tiles I need for a room?',
14
+ answer:
15
+ 'Measure the room width and length, choose your tile size, and enter the grout joint width. The calculator divides the room dimensions by the tile plus grout size to give the exact number of tiles required per row and column.',
16
+ },
17
+ {
18
+ question: 'What waste percentage should I add when buying tiles?',
19
+ answer:
20
+ 'For standard rectangular rooms, add 10% waste. For rooms with many corners, diagonal layouts, or complex cuts, increase to 15%. This covers breakages and cutting mistakes.',
21
+ },
22
+ {
23
+ question: 'Does grout thickness really change the number of tiles?',
24
+ answer:
25
+ 'Yes. Wider grout joints reduce the effective coverage of each tile, slightly increasing the total number needed. The calculator factors this into every row and column automatically.',
26
+ },
27
+ {
28
+ question: 'Should I buy extra boxes beyond the waste percentage?',
29
+ answer:
30
+ 'It is wise to purchase one extra box if available. Tile dye lots can vary between production runs, and having matching spares makes future repairs seamless.',
31
+ },
32
+ {
33
+ question: 'How do I tile a room with an irregular shape?',
34
+ answer:
35
+ 'Break the room into smaller rectangles. Calculate each section separately and sum the totals. Always round up partial boxes to ensure full coverage.',
36
+ },
37
+ {
38
+ question: 'What is the difference between ceramic and porcelain tile waste?',
39
+ answer:
40
+ 'Porcelain is denser and harder to cut, which can increase cutting waste by 2% to 3% compared to standard ceramic. Both materials should follow the same measuring process.',
41
+ },
42
+ {
43
+ question: 'Can I return unused tile boxes?',
44
+ answer:
45
+ 'Most retailers accept unopened boxes within 30 days. Always keep the receipt and do not open surplus boxes until the installation is fully complete.',
46
+ },
47
+ ];
48
+
49
+ const howToData = [
50
+ {
51
+ name: 'Measure the room',
52
+ text: 'Record the width and length of the floor area in your preferred unit system.',
53
+ },
54
+ {
55
+ name: 'Select tile and grout',
56
+ text: 'Choose your tile dimensions and the desired grout joint width.',
57
+ },
58
+ {
59
+ name: 'Calculate and visualize',
60
+ text: 'Enter the values into the calculator, adjust the waste margin, and review the live layout preview.',
61
+ },
62
+ ];
63
+
64
+ const faqSchema: WithContext<FAQPage> = {
65
+ '@context': 'https://schema.org',
66
+ '@type': 'FAQPage',
67
+ mainEntity: faqData.map((item) => ({
68
+ '@type': 'Question',
69
+ name: item.question,
70
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
71
+ })),
72
+ };
73
+
74
+ const howToSchema: WithContext<HowTo> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'HowTo',
77
+ name: title,
78
+ description,
79
+ step: howToData.map((step) => ({
80
+ '@type': 'HowToStep',
81
+ name: step.name,
82
+ text: step.text,
83
+ })),
84
+ };
85
+
86
+ const appSchema: WithContext<SoftwareApplication> = {
87
+ '@context': 'https://schema.org',
88
+ '@type': 'SoftwareApplication',
89
+ name: title,
90
+ description,
91
+ applicationCategory: 'UtilityApplication',
92
+ operatingSystem: 'All',
93
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
94
+ inLanguage: 'en',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<TileLayoutCalculatorUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ faq: faqData,
102
+ bibliography,
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: 'Complete Guide to Floor Tile Planning and Waste Control',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'A successful tiling project starts long before the first adhesive is spread. Precise measurement, intelligent layout planning, and accurate waste estimation determine whether your renovation stays on budget and on schedule. <strong>Our interactive tile layout calculator</strong> transforms raw dimensions into a visual floor plan, showing exactly how many tiles fit per row, how many boxes to buy, and where your money goes.',
114
+ },
115
+ {
116
+ type: 'stats',
117
+ items: [
118
+ { value: '10-15%', label: 'Standard Waste', icon: 'mdi:alert-circle' },
119
+ { value: '30+ yr', label: 'Tile Lifespan', icon: 'mdi:clock-outline' },
120
+ { value: '48h', label: 'Average Install', icon: 'mdi:calendar-check' },
121
+ ],
122
+ columns: 3,
123
+ },
124
+ {
125
+ type: 'comparative',
126
+ items: [
127
+ {
128
+ title: 'Large Format Tiles',
129
+ description: 'Tiles larger than 60 cm create a seamless, modern look but require perfectly flat substrates and generate higher cutting waste in small rooms.',
130
+ icon: 'mdi:arrow-expand',
131
+ points: ['Fewer grout lines', 'Premium visual effect', 'Higher cutting waste in tight spaces'],
132
+ },
133
+ {
134
+ title: 'Small Mosaic Tiles',
135
+ description: 'Ideal for bathrooms and intricate patterns. They adapt to irregular shapes but demand more grout and labor time.',
136
+ icon: 'mdi:apps',
137
+ points: ['Flexible around obstacles', 'More grout required', 'Longer installation time'],
138
+ },
139
+ ],
140
+ columns: 2,
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Why Layout Visualization Matters',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Seeing your tile grid before purchase prevents costly surprises. A live preview reveals whether your chosen tile size leaves awkward narrow strips at the edges or creates a balanced, symmetrical floor. By adjusting grout width and tile orientation inside the calculator, you can optimize the layout for aesthetics and efficiency before placing an order.',
150
+ },
151
+ {
152
+ type: 'diagnostic',
153
+ variant: 'info',
154
+ title: 'Quick Reference Coverage Table',
155
+ icon: 'mdi:table',
156
+ badge: 'Reference',
157
+ html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 tiles per m²</li><li><strong>45 x 45 cm</strong> → 5 tiles per m²</li><li><strong>60 x 60 cm</strong> → 3 tiles per m²</li><li><strong>60 x 120 cm</strong> → 1.5 tiles per m²</li></ul>',
158
+ },
159
+ {
160
+ type: 'summary',
161
+ title: 'Pro Tips to Minimize Waste',
162
+ items: [
163
+ 'Order 10% extra for straight layouts and 15% for diagonal or herringbone patterns.',
164
+ 'Keep all tile boxes from the same production batch to ensure color consistency.',
165
+ 'Measure diagonally across the room to check for squareness before planning rows.',
166
+ 'Use large format tiles only in rooms wider than the tile length to avoid excessive cuts.',
167
+ 'Always round box quantities up; it is cheaper than a second delivery charge.',
168
+ ],
169
+ },
170
+ ],
171
+ ui: {
172
+ sectionTitle: 'Room Configuration',
173
+ labelRoomWidth: 'Room width',
174
+ labelRoomLength: 'Room length',
175
+ labelTileWidth: 'Tile width',
176
+ labelTileLength: 'Tile length',
177
+ labelGrout: 'Grout joint',
178
+ labelWaste: 'Waste margin',
179
+ labelTilesPerBox: 'Tiles per box',
180
+ labelPrice: 'Price per box',
181
+ labelPattern: 'Tile pattern',
182
+ unitMetricRoom: 'm',
183
+ unitImperialRoom: 'ft',
184
+ unitMetricTile: 'cm',
185
+ unitImperialTile: 'in',
186
+ unitGroutMetric: 'mm',
187
+ unitGroutImperial: 'in',
188
+ unitPercent: '%',
189
+ unitBoxes: 'pcs',
190
+ unitPrice: '/box',
191
+ resultBadge: 'Live layout preview',
192
+ labelArea: 'Floor area',
193
+ labelTiles: 'Total tiles',
194
+ labelBoxes: 'Boxes needed',
195
+ labelCost: 'Total cost',
196
+ labelWasteCount: 'Waste tiles',
197
+ labelCuts: 'Partial cuts',
198
+ currency: 'USD',
199
+ btnMetric: 'Metric',
200
+ btnImperial: 'Imperial',
201
+ btnPatternStraight: 'Straight',
202
+ btnPatternBrick: 'Running bond',
203
+ btnPatternDiagonal: 'Diagonal',
204
+ badgeOptimal: 'Optimal layout',
205
+ badgeWarning: 'High waste alert',
206
+ visualTitle: 'Layout preview',
207
+ },
208
+ };
@@ -0,0 +1,208 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TileLayoutCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'calculadora-disposicion-azulejos';
7
+ const title = 'Calculadora de Disposición y Desperdicio de Azulejos';
8
+ const description =
9
+ 'Planifica el suelo de tu habitación con precisión. Calcula la cantidad exacta de azulejos, cajas necesarias, coste total y visualiza la disposición en tiempo real con una previsualización de cuadrícula interactiva.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: '¿Cómo calculo cuántos azulejos necesito para una habitación?',
14
+ answer:
15
+ 'Mide el ancho y el largo de la habitación, elige el tamaño del azulejo e indica el ancho de la junta. La calculadora divide las dimensiones de la habitación entre el azulejo más la junta para dar el número exacto de piezas por fila y columna.',
16
+ },
17
+ {
18
+ question: '¿Qué porcentaje de desperdicio debo añadir al comprar azulejos?',
19
+ answer:
20
+ 'Para habitaciones rectangulares estándar, añade un 10% de desperdicio. Para estancias con muchas esquinas, disposiciones diagonales o cortes complejos, aumenta al 15%. Esto cubre roturas y errores de corte.',
21
+ },
22
+ {
23
+ question: '¿El grosor de la junta realmente cambia la cantidad de azulejos?',
24
+ answer:
25
+ 'Sí. Las juntas más anchas reducen la cobertura efectiva de cada pieza, aumentando ligeramente el número total necesario. La calculadora lo tiene en cuenta automáticamente en cada fila y columna.',
26
+ },
27
+ {
28
+ question: '¿Debería comprar cajas extra aparte del porcentaje de desperdicio?',
29
+ answer:
30
+ 'Es prudente adquirir una caja adicional si está disponible. Los lotes de tinte pueden variar entre producciones, y contar con repuestos a juego facilita futuras reparaciones.',
31
+ },
32
+ {
33
+ question: '¿Cómo coloco azulejos en una habitación con forma irregular?',
34
+ answer:
35
+ 'Divide la estancia en rectángulos más pequeños. Calcula cada zona por separado y suma los totales. Siempre redondea hacia arriba las cajas parciales para garantizar una cobertura completa.',
36
+ },
37
+ {
38
+ question: '¿Cuál es la diferencia de desperdicio entre cerámica y porcelánico?',
39
+ answer:
40
+ 'El porcelánico es más denso y difícil de cortar, lo que puede aumentar el desperdicio de corte entre un 2% y un 3% respecto a la cerámica estándar. Ambos materiales deben seguir el mismo proceso de medición.',
41
+ },
42
+ {
43
+ question: '¿Puedo devolver las cajas de azulejos sobrantes?',
44
+ answer:
45
+ 'La mayoría de comercios aceptan cajas sin abrir en un plazo de 30 días. Guarda siempre el ticket y no abras las cajas sobrantes hasta que la instalación esté completamente terminada.',
46
+ },
47
+ ];
48
+
49
+ const howToData = [
50
+ {
51
+ name: 'Mide la habitación',
52
+ text: 'Anota el ancho y el largo del suelo en el sistema de unidades que prefieras.',
53
+ },
54
+ {
55
+ name: 'Selecciona azulejo y junta',
56
+ text: 'Elige las dimensiones del azulejo y el ancho de junta que deseas utilizar.',
57
+ },
58
+ {
59
+ name: 'Calcula y visualiza',
60
+ text: 'Introduce los valores en la calculadora, ajusta el margen de desperdicio y revisa la previsualización de la disposición en vivo.',
61
+ },
62
+ ];
63
+
64
+ const faqSchema: WithContext<FAQPage> = {
65
+ '@context': 'https://schema.org',
66
+ '@type': 'FAQPage',
67
+ mainEntity: faqData.map((item) => ({
68
+ '@type': 'Question',
69
+ name: item.question,
70
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
71
+ })),
72
+ };
73
+
74
+ const howToSchema: WithContext<HowTo> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'HowTo',
77
+ name: title,
78
+ description,
79
+ step: howToData.map((step) => ({
80
+ '@type': 'HowToStep',
81
+ name: step.name,
82
+ text: step.text,
83
+ })),
84
+ };
85
+
86
+ const appSchema: WithContext<SoftwareApplication> = {
87
+ '@context': 'https://schema.org',
88
+ '@type': 'SoftwareApplication',
89
+ name: title,
90
+ description,
91
+ applicationCategory: 'UtilityApplication',
92
+ operatingSystem: 'All',
93
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
94
+ inLanguage: 'es',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<TileLayoutCalculatorUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ faq: faqData,
102
+ bibliography,
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: 'Guía Completa para Planificar Suelos de Azulejos y Controlar el Desperdicio',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Un proyecto de alicatado exitoso comienza mucho antes de extender la primera capa de adhesivo. La medición precisa, la planificación inteligente de la disposición y la estimación exacta del desperdicio determinan si tu reforma se mantiene en presupuesto y en plazo. <strong>Nuestra calculadora de disposición de azulejos interactiva</strong> transforma las dimensiones en bruto en un plano visual, mostrando exactamente cuántas piezas caben por fila, cuántas cajas comprar y dónde se invierte tu dinero.',
114
+ },
115
+ {
116
+ type: 'stats',
117
+ items: [
118
+ { value: '10-15%', label: 'Desperdicio Estándar', icon: 'mdi:alert-circle' },
119
+ { value: '30+ años', label: 'Vida útil del azulejo', icon: 'mdi:clock-outline' },
120
+ { value: '48h', label: 'Instalación media', icon: 'mdi:calendar-check' },
121
+ ],
122
+ columns: 3,
123
+ },
124
+ {
125
+ type: 'comparative',
126
+ items: [
127
+ {
128
+ title: 'Azulejos de Gran Formato',
129
+ description: 'Las piezas de más de 60 cm crean un aspecto moderno y continuo, pero requieren sustratos perfectamente nivelados y generan mayor desperdicio de corte en habitaciones pequeñas.',
130
+ icon: 'mdi:arrow-expand',
131
+ points: ['Menos juntas visibles', 'Efecto visual premium', 'Mayor desperdicio en espacios reducidos'],
132
+ },
133
+ {
134
+ title: 'Mosaicos Pequeños',
135
+ description: 'Ideales para baños y patrones intrincados. Se adaptan a formas irregulares, pero demandan más junta y tiempo de mano de obra.',
136
+ icon: 'mdi:apps',
137
+ points: ['Flexibles alrededor de obstáculos', 'Más junta requerida', 'Mayor tiempo de instalación'],
138
+ },
139
+ ],
140
+ columns: 2,
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Por qué Importa Visualizar la Disposición',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Ver la cuadrícula de azulejos antes de comprar evita sorpresas costosas. La previsualización en vivo revela si el tamaño elegido deja franjas estrechas en los bordes o logra un suelo equilibrado y simétrico. Ajustando el ancho de junta y la orientación de la pieza dentro de la calculadora, puedes optimizar la disposición por estética y eficiencia antes de hacer el pedido.',
150
+ },
151
+ {
152
+ type: 'diagnostic',
153
+ variant: 'info',
154
+ title: 'Tabla de Referencia de Cobertura Rápida',
155
+ icon: 'mdi:table',
156
+ badge: 'Referencia',
157
+ html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 azulejos por m²</li><li><strong>45 x 45 cm</strong> → 5 azulejos por m²</li><li><strong>60 x 60 cm</strong> → 3 azulejos por m²</li><li><strong>60 x 120 cm</strong> → 1,5 azulejos por m²</li></ul>',
158
+ },
159
+ {
160
+ type: 'summary',
161
+ title: 'Consejos Profesionales para Minimizar el Desperdicio',
162
+ items: [
163
+ 'Pide un 10% extra para disposiciones rectas y un 15% para diagonales o espiga.',
164
+ 'Conserva todas las cajas del mismo lote de producción para garantizar la uniformidad del color.',
165
+ 'Mide en diagonal la habitación para comprobar la escuadra antes de planificar las filas.',
166
+ 'Usa azulejos de gran formato solo en habitaciones más anchas que la longitud de la pieza para evitar cortes excesivos.',
167
+ 'Redondea siempre las cajas hacia arriba; es más barato que un segundo envío.',
168
+ ],
169
+ },
170
+ ],
171
+ ui: {
172
+ sectionTitle: 'Configuración de la habitación',
173
+ labelRoomWidth: 'Ancho de la habitación',
174
+ labelRoomLength: 'Largo de la habitación',
175
+ labelTileWidth: 'Ancho del azulejo',
176
+ labelTileLength: 'Largo del azulejo',
177
+ labelGrout: 'Junta',
178
+ labelWaste: 'Margen de desperdicio',
179
+ labelTilesPerBox: 'Azulejos por caja',
180
+ labelPrice: 'Precio por caja',
181
+ labelPattern: 'Patrón de colocación',
182
+ unitMetricRoom: 'm',
183
+ unitImperialRoom: 'ft',
184
+ unitMetricTile: 'cm',
185
+ unitImperialTile: 'in',
186
+ unitGroutMetric: 'mm',
187
+ unitGroutImperial: 'in',
188
+ unitPercent: '%',
189
+ unitBoxes: 'uds',
190
+ unitPrice: '/caja',
191
+ resultBadge: 'Vista previa en vivo',
192
+ labelArea: 'Superficie',
193
+ labelTiles: 'Azulejos totales',
194
+ labelBoxes: 'Cajas necesarias',
195
+ labelCost: 'Coste total',
196
+ labelWasteCount: 'Azulejos de desperdicio',
197
+ labelCuts: 'Cortes parciales',
198
+ currency: 'EUR',
199
+ btnMetric: 'Métrico',
200
+ btnImperial: 'Imperial',
201
+ btnPatternStraight: 'Recto',
202
+ btnPatternBrick: 'Corridos',
203
+ btnPatternDiagonal: 'Diagonal',
204
+ badgeOptimal: 'Disposición óptima',
205
+ badgeWarning: 'Alerta de alto desperdicio',
206
+ visualTitle: 'Previsualización de la disposición',
207
+ },
208
+ };
@@ -0,0 +1,208 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TileLayoutCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'calculateur-disposition-carrelage';
7
+ const title = 'Calculateur de Disposition et de Pertes de Carrelage';
8
+ const description =
9
+ 'Planifiez le sol de votre pièce avec précision. Calculez la quantité exacte de carreaux, le nombre de boîtes nécessaire, le coût total et visualisez la disposition en temps réel avec un aperçu de grille interactif.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Comment calculer le nombre de carreaux nécessaires pour une pièce ?',
14
+ answer:
15
+ 'Mesurez la largeur et la longueur de la pièce, choisissez la dimension du carreau et indiquez la largeur du joint. Le calculateur divise les dimensions de la pièce par la taille du carreau plus le joint pour donner le nombre exact de pièces par rangée et colonne.',
16
+ },
17
+ {
18
+ question: 'Quel pourcentage de pertes dois-je prévoir lors de l\'achat de carrelage ?',
19
+ answer:
20
+ 'Pour les pièces rectangulaires standard, ajoutez 10% de pertes. Pour les pièces avec de nombreux coins, des dispositions en diagonale ou des découpes complexes, augmentez à 15%. Cela couvre les cassures et les erreurs de coupe.',
21
+ },
22
+ {
23
+ question: 'L\'épaisseur du joint change-t-elle vraiment le nombre de carreaux ?',
24
+ answer:
25
+ 'Oui. Des joints plus larges réduisent la couverture effective de chaque carreau, augmentant légèrement le nombre total nécessaire. Le calculateur prend cela en compte automatiquement dans chaque rangée et colonne.',
26
+ },
27
+ {
28
+ question: 'Dois-je acheter des boîtes supplémentaires au-delà du pourcentage de pertes ?',
29
+ answer:
30
+ 'Il est prudent d\'acheter une boîte supplémentaire si disponible. Les teintes de lot peuvent varier d\'une production à l\'autre, et disposer de pièces de rechange correspondantes facilite les réparations futures.',
31
+ },
32
+ {
33
+ question: 'Comment carreler une pièce de forme irrégulière ?',
34
+ answer:
35
+ 'Divisez la pièce en rectangles plus petits. Calculez chaque section séparément et additionnez les totaux. Arrondissez toujours les boîtes partielles au supérieur pour garantir une couverture complète.',
36
+ },
37
+ {
38
+ question: 'Quelle est la différence de pertes entre le grès cérame et la céramique ?',
39
+ answer:
40
+ 'Le grès cérame est plus dense et difficile à couper, ce qui peut augmenter les pertes de coupe de 2% à 3% par rapport à la céramique standard. Les deux matériaux doivent suivre le même processus de mesure.',
41
+ },
42
+ {
43
+ question: 'Puis-je retourner les boîtes de carrelage non utilisées ?',
44
+ answer:
45
+ 'La plupart des détaillants acceptent les boîtes non ouvertes dans un délai de 30 jours. Conservez toujours le reçu et n\'ouvrez pas les boîtes excédentaires tant que l\'installation n\'est pas entièrement terminée.',
46
+ },
47
+ ];
48
+
49
+ const howToData = [
50
+ {
51
+ name: 'Mesurer la pièce',
52
+ text: 'Relevez la largeur et la longueur du sol dans le système d\'unités de votre choix.',
53
+ },
54
+ {
55
+ name: 'Choisir le carreau et le joint',
56
+ text: 'Choisissez les dimensions de vos carreaux et la largeur de joint souhaitée.',
57
+ },
58
+ {
59
+ name: 'Calculer et visualiser',
60
+ text: 'Saisissez les valeurs dans le calculateur, ajustez la marge de pertes et examinez l\'aperçu de la disposition en direct.',
61
+ },
62
+ ];
63
+
64
+ const faqSchema: WithContext<FAQPage> = {
65
+ '@context': 'https://schema.org',
66
+ '@type': 'FAQPage',
67
+ mainEntity: faqData.map((item) => ({
68
+ '@type': 'Question',
69
+ name: item.question,
70
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
71
+ })),
72
+ };
73
+
74
+ const howToSchema: WithContext<HowTo> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'HowTo',
77
+ name: title,
78
+ description,
79
+ step: howToData.map((step) => ({
80
+ '@type': 'HowToStep',
81
+ name: step.name,
82
+ text: step.text,
83
+ })),
84
+ };
85
+
86
+ const appSchema: WithContext<SoftwareApplication> = {
87
+ '@context': 'https://schema.org',
88
+ '@type': 'SoftwareApplication',
89
+ name: title,
90
+ description,
91
+ applicationCategory: 'UtilityApplication',
92
+ operatingSystem: 'All',
93
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
94
+ inLanguage: 'fr',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<TileLayoutCalculatorUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ faq: faqData,
102
+ bibliography,
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: 'Guide Complet pour Planifier un Sol Carrelé et Maîtriser les Pertes',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Un projet de carrelage réussi commence bien avant la première couche d\'adhésif. Le mesurage précis, la planification intelligente de la disposition et l\'estimation exacte des pertes déterminent si votre rénovation reste dans le budget et dans les délais. <strong>Notre calculateur de disposition de carrelage interactif</strong> transforme les dimensions brutes en un plan de sol visuel, montrant exactement combien de carreaux s\'insèrent par rangée, combien de boîtes acheter et où va votre argent.',
114
+ },
115
+ {
116
+ type: 'stats',
117
+ items: [
118
+ { value: '10-15%', label: 'Pertes Standard', icon: 'mdi:alert-circle' },
119
+ { value: '30+ ans', label: 'Durée de Vie du Carrelage', icon: 'mdi:clock-outline' },
120
+ { value: '48h', label: 'Pose Moyenne', icon: 'mdi:calendar-check' },
121
+ ],
122
+ columns: 3,
123
+ },
124
+ {
125
+ type: 'comparative',
126
+ items: [
127
+ {
128
+ title: 'Grands Formats',
129
+ description: 'Les carreaux de plus de 60 cm créent un rendu moderne et continu, mais nécessitent un support parfaitement plat et génèrent plus de pertes de coupe dans les petites pièces.',
130
+ icon: 'mdi:arrow-expand',
131
+ points: ['Moins de joints visibles', 'Effet visuel premium', 'Pertes élevées dans les espaces restreints'],
132
+ },
133
+ {
134
+ title: 'Petits Mosaïques',
135
+ description: 'Idéaux pour les salles de bain et les motifs complexes. Ils s\'adaptent aux formes irrégulières, mais demandent plus de joint et de temps de pose.',
136
+ icon: 'mdi:apps',
137
+ points: ['Flexibles autour des obstacles', 'Plus de joint requis', 'Temps de pose plus long'],
138
+ },
139
+ ],
140
+ columns: 2,
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Pourquoi la Visualisation de la Disposition est Essentielle',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Voir votre grille de carrelage avant l\'achat évite les surprises coûteuses. Un aperçu en direct révèle si la taille choisie laisse des bandes étroites maladroites sur les bords ou crée un sol équilibré et symétrique. En ajustant la largeur de joint et l\'orientation du carreau dans le calculateur, vous pouvez optimiser la disposition pour l\'esthétique et l\'efficacité avant de passer commande.',
150
+ },
151
+ {
152
+ type: 'diagnostic',
153
+ variant: 'info',
154
+ title: 'Tableau de Référence Rapide de Couverture',
155
+ icon: 'mdi:table',
156
+ badge: 'Référence',
157
+ html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 carreaux par m²</li><li><strong>45 x 45 cm</strong> → 5 carreaux par m²</li><li><strong>60 x 60 cm</strong> → 3 carreaux par m²</li><li><strong>60 x 120 cm</strong> → 1,5 carreaux par m²</li></ul>',
158
+ },
159
+ {
160
+ type: 'summary',
161
+ title: 'Conseils Pros pour Minimiser les Pertes',
162
+ items: [
163
+ 'Commandez 10% de plus pour les poses droites et 15% pour les diagonales ou en chevrons.',
164
+ 'Conservez toutes les boîtes du même lot de production pour garantir la cohérence des teintes.',
165
+ 'Mesurez en diagonale dans la pièce pour vérifier l\'équerrage avant de planifier les rangées.',
166
+ 'Utilisez les grands formats uniquement dans les pièces plus larges que la longueur du carreau pour éviter les coupes excessives.',
167
+ 'Arrondissez toujours les quantités de boîtes au supérieur ; c\'est moins cher qu\'une deuxième livraison.',
168
+ ],
169
+ },
170
+ ],
171
+ ui: {
172
+ sectionTitle: 'Configuration de la Pièce',
173
+ labelRoomWidth: 'Largeur de la pièce',
174
+ labelRoomLength: 'Longueur de la pièce',
175
+ labelTileWidth: 'Largeur du carreau',
176
+ labelTileLength: 'Longueur du carreau',
177
+ labelGrout: 'Joint',
178
+ labelWaste: 'Marge de pertes',
179
+ labelTilesPerBox: 'Carreaux par boîte',
180
+ labelPrice: 'Prix par boîte',
181
+ labelPattern: 'Motif de pose',
182
+ unitMetricRoom: 'm',
183
+ unitImperialRoom: 'ft',
184
+ unitMetricTile: 'cm',
185
+ unitImperialTile: 'in',
186
+ unitGroutMetric: 'mm',
187
+ unitGroutImperial: 'in',
188
+ unitPercent: '%',
189
+ unitBoxes: 'pcs',
190
+ unitPrice: '/boîte',
191
+ resultBadge: 'Aperçu en direct',
192
+ labelArea: 'Surface du sol',
193
+ labelTiles: 'Carreaux total',
194
+ labelBoxes: 'Boîtes nécessaires',
195
+ labelCost: 'Coût total',
196
+ labelWasteCount: 'Pertes de carreaux',
197
+ labelCuts: 'Coupe partielle',
198
+ currency: 'EUR',
199
+ btnMetric: 'Métrique',
200
+ btnImperial: 'Impérial',
201
+ btnPatternStraight: 'Droit',
202
+ btnPatternBrick: 'Décalé',
203
+ btnPatternDiagonal: 'Diagonal',
204
+ badgeOptimal: 'Disposition optimale',
205
+ badgeWarning: 'Alerte pertes élevées',
206
+ visualTitle: 'Aperçu de la disposition',
207
+ },
208
+ };