@jjlmoya/utils-home 1.30.0 → 1.32.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 +2 -1
- package/src/entries.ts +7 -1
- package/src/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/lightingCalculator/bibliography.astro +36 -0
- package/src/tool/lightingCalculator/bibliography.ts +10 -0
- package/src/tool/lightingCalculator/component.astro +308 -0
- package/src/tool/lightingCalculator/draw.ts +247 -0
- package/src/tool/lightingCalculator/entry.ts +29 -0
- package/src/tool/lightingCalculator/how-many-lights-per-room.css +493 -0
- package/src/tool/lightingCalculator/i18n/de.ts +213 -0
- package/src/tool/lightingCalculator/i18n/en.ts +213 -0
- package/src/tool/lightingCalculator/i18n/es.ts +213 -0
- package/src/tool/lightingCalculator/i18n/fr.ts +213 -0
- package/src/tool/lightingCalculator/i18n/id.ts +213 -0
- package/src/tool/lightingCalculator/i18n/it.ts +213 -0
- package/src/tool/lightingCalculator/i18n/ja.ts +213 -0
- package/src/tool/lightingCalculator/i18n/ko.ts +213 -0
- package/src/tool/lightingCalculator/i18n/nl.ts +213 -0
- package/src/tool/lightingCalculator/i18n/pl.ts +213 -0
- package/src/tool/lightingCalculator/i18n/pt.ts +213 -0
- package/src/tool/lightingCalculator/i18n/ru.ts +213 -0
- package/src/tool/lightingCalculator/i18n/sv.ts +213 -0
- package/src/tool/lightingCalculator/i18n/tr.ts +213 -0
- package/src/tool/lightingCalculator/i18n/zh.ts +213 -0
- package/src/tool/lightingCalculator/index.ts +9 -0
- package/src/tool/lightingCalculator/logic.ts +119 -0
- package/src/tool/lightingCalculator/seo.astro +15 -0
- package/src/tool/lightingCalculator/state.ts +113 -0
- package/src/tool/lightingCalculator/ui.ts +48 -0
- package/src/tool/tileLayoutCalculator/bibliography.astro +14 -0
- package/src/tool/tileLayoutCalculator/bibliography.ts +10 -0
- package/src/tool/tileLayoutCalculator/component.astro +415 -0
- package/src/tool/tileLayoutCalculator/entry.ts +29 -0
- package/src/tool/tileLayoutCalculator/i18n/de.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/en.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/es.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/fr.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/id.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/it.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/ja.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/ko.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/nl.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/pl.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/pt.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/ru.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/sv.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/tr.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/zh.ts +208 -0
- package/src/tool/tileLayoutCalculator/index.ts +9 -0
- package/src/tool/tileLayoutCalculator/logic.ts +55 -0
- package/src/tool/tileLayoutCalculator/seo.astro +15 -0
- package/src/tool/tileLayoutCalculator/tile-layout-calculator.css +404 -0
- package/src/tool/tileLayoutCalculator/ui.ts +37 -0
- 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 = 'fliesen-layout-und-verschnitt-rechner';
|
|
7
|
+
const title = 'Fliesenlayout und Verschnittrechner';
|
|
8
|
+
const description =
|
|
9
|
+
'Plane deinen Raumboden millimetergenau. Berechne die exakte Fliesenmenge, die benötigte Kartonanzahl, die Gesamtkosten und visualisiere das Layout in Echtzeit mit einer interaktiven Raster-Vorschau.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Wie berechne ich, wie viele Fliesen ich für einen Raum brauche?',
|
|
14
|
+
answer:
|
|
15
|
+
'Messe Raumbreite und -länge, wähle die Fliesengröße und gib die Fugenbreite ein. Der Rechner teilt die Raummaße durch Fliese plus Fuge und liefert die exakte Anzahl je Reihe und Spalte.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Welchen Verschnittanteil sollte ich beim Fliesenkauf einplanen?',
|
|
19
|
+
answer:
|
|
20
|
+
'Für standardmäßige rechteckige Räume rechnen Sie 10% Verschnitt. Bei Räumen mit vielen Ecken, diagonalen Verlegemustern oder komplexen Schnitten erhöhen Sie auf 15%. Das deckt Bruch und Schnittfehler ab.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Beeinflusst die Fugenbreite wirklich die Fliesenanzahl?',
|
|
24
|
+
answer:
|
|
25
|
+
'Ja. Breitere Fugen verringern die effektive Abdeckung jeder Fliese und erhöhen leicht den Gesamtbedarf. Der Rechner berücksichtigt das automatisch in jeder Reihe und Spalte.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Sollte ich zusätzliche Kartons über den Verschnitt hinaus kaufen?',
|
|
29
|
+
answer:
|
|
30
|
+
'Es ist ratsam, eine zusätzliche Karton zu erwerben, sofern verfügbar. Die Farbchargen können zwischen Produktionen variieren; passende Ersatzfliesen erleichtern spätere Reparaturen.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Wie verlege ich Fliesen in einem unregelmäßig geformten Raum?',
|
|
34
|
+
answer:
|
|
35
|
+
'Teilen Sie den Raum in kleinere Rechtecke. Berechnen Sie jeden Bereich einzeln und addieren Sie die Ergebnisse. Runden Sie Teilkartons immer auf, um vollständige Abdeckung zu gewährleisten.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Was ist der Unterschied im Verschnitt zwischen Keramik und Feinsteinzeug?',
|
|
39
|
+
answer:
|
|
40
|
+
'Feinsteinzeug ist dichter und schwerer zu schneiden, was den Verschnitt beim Schneiden um 2% bis 3% gegenüber Standardkeramik erhöhen kann. Beide Materialien sollten nach demselben Messverfahren geplant werden.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: 'Kann ich ungebrauchte Fliesenkartons zurückgeben?',
|
|
44
|
+
answer:
|
|
45
|
+
'Die meisten Händler nehmen ungeöffnete Kartons innerhalb von 30 Tagen zurück. Bewahren Sie den Kassenbon auf und öffnen Sie Überschusskartons erst, wenn die Verlegung vollständig abgeschlossen ist.',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
const howToData = [
|
|
50
|
+
{
|
|
51
|
+
name: 'Raum vermessen',
|
|
52
|
+
text: 'Erfassen Sie Breite und Länge des Bodenbereichs in Ihrem bevorzugten Maßsystem.',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'Fliese und Fuge wählen',
|
|
56
|
+
text: 'Wählen Sie Ihre Fliesenabmessungen und die gewünschte Fugenbreite.',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Berechnen und visualisieren',
|
|
60
|
+
text: 'Geben Sie die Werte in den Rechner ein, passen Sie den Verschnittanteil an und prüfen Sie die Live-Layout-Vorschau.',
|
|
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: 'de',
|
|
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: 'Komplette Anleitung zur Fliesenplanung und Verschnittkontrolle',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Ein erfolgreiches Fliesenprojekt beginnt lange bevor der erste Kleber aufgetragen wird. Präzises Vermessen, intelligente Layoutplanung und genaue Verschnittberechnung entscheiden, ob Ihre Renovierung im Budget und Termin bleibt. <strong>Unser interaktiver Fliesenlayout-Rechner</strong> wandelt Rohmaße in einen visuellen Grundriss um und zeigt exakt, wie viele Fliesen pro Reihe passen, wie viele Kartons Sie benötigen und wo Ihr Geld hingeht.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'stats',
|
|
117
|
+
items: [
|
|
118
|
+
{ value: '10-15%', label: 'Standardverschnitt', icon: 'mdi:alert-circle' },
|
|
119
|
+
{ value: '30+ Jahre', label: 'Fliesenlebensdauer', icon: 'mdi:clock-outline' },
|
|
120
|
+
{ value: '48h', label: 'Ø Verlegedauer', icon: 'mdi:calendar-check' },
|
|
121
|
+
],
|
|
122
|
+
columns: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'comparative',
|
|
126
|
+
items: [
|
|
127
|
+
{
|
|
128
|
+
title: 'Großformatige Fliesen',
|
|
129
|
+
description: 'Fliesen über 60 cm sorgen für ein nahtloses, modernes Erscheinungsbild, erfordern aber perfekt ebene Untergründe und erzeugen in kleinen Räumen höheren Schnittverschnitt.',
|
|
130
|
+
icon: 'mdi:arrow-expand',
|
|
131
|
+
points: ['Weniger Fugen', 'Premium-Optik', 'Höherer Verschnitt in engen Räumen'],
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: 'Kleine Mosaikfliesen',
|
|
135
|
+
description: 'Ideal für Bäder und filigrane Muster. Sie passen sich unregelmäßigen Formen an, benötigen aber mehr Fugen und Arbeitszeit.',
|
|
136
|
+
icon: 'mdi:apps',
|
|
137
|
+
points: ['Flexibel bei Hindernissen', 'Mehr Fugen erforderlich', 'Längere Verlegezeit'],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
columns: 2,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'title',
|
|
144
|
+
text: 'Warum die Layout-Visualisierung wichtig ist',
|
|
145
|
+
level: 3,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'paragraph',
|
|
149
|
+
html: 'Die Fliesenansicht vor dem Kauf verhindert kostspielige Überraschungen. Die Live-Vorschau zeigt, ob Ihre gewählte Fliesengröße am Rand unangenehm schmale Streifen hinterlässt oder einen ausgewogenen, symmetrischen Boden ergibt. Durch Anpassung von Fugenbreite und Fliesenausrichtung im Rechner können Sie das Layout vor der Bestellung auf Ästhetik und Effizienz optimieren.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'diagnostic',
|
|
153
|
+
variant: 'info',
|
|
154
|
+
title: 'Schnelle Referenztabelle zur Abdeckung',
|
|
155
|
+
icon: 'mdi:table',
|
|
156
|
+
badge: 'Referenz',
|
|
157
|
+
html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 Fliesen pro m²</li><li><strong>45 x 45 cm</strong> → 5 Fliesen pro m²</li><li><strong>60 x 60 cm</strong> → 3 Fliesen pro m²</li><li><strong>60 x 120 cm</strong> → 1,5 Fliesen pro m²</li></ul>',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: 'summary',
|
|
161
|
+
title: 'ProfTipps zur Verschnittminimierung',
|
|
162
|
+
items: [
|
|
163
|
+
'Bestellen Sie 10% Extra für gerade Verlegemuster und 15% für Diagonal- oder Fischgrätenmuster.',
|
|
164
|
+
'Bewahren Sie alle Kartons aus derselben Produktionscharge auf, um Farbgleichheit zu sichern.',
|
|
165
|
+
'Messen Sie den Raum diagonal, um die Rechtwinkligkeit vor der Reihenplanung zu prüfen.',
|
|
166
|
+
'Verwenden Sie Großformatfliesen nur in Räumen, die breiter sind als die Fliesenlänge, um übermäßige Schnitte zu vermeiden.',
|
|
167
|
+
'Runden Sie Kartonmengen immer auf; das ist günstiger als eine zweite Lieferung.',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
ui: {
|
|
172
|
+
sectionTitle: 'Raumkonfiguration',
|
|
173
|
+
labelRoomWidth: 'Raumbreite',
|
|
174
|
+
labelRoomLength: 'Raumlänge',
|
|
175
|
+
labelTileWidth: 'Fliesenbreite',
|
|
176
|
+
labelTileLength: 'Fliesenlänge',
|
|
177
|
+
labelGrout: 'Fugenbreite',
|
|
178
|
+
labelWaste: 'Verschnittanteil',
|
|
179
|
+
labelTilesPerBox: 'Fliesen pro Karton',
|
|
180
|
+
labelPrice: 'Preis pro Karton',
|
|
181
|
+
labelPattern: 'Verlegemuster',
|
|
182
|
+
unitMetricRoom: 'm',
|
|
183
|
+
unitImperialRoom: 'ft',
|
|
184
|
+
unitMetricTile: 'cm',
|
|
185
|
+
unitImperialTile: 'in',
|
|
186
|
+
unitGroutMetric: 'mm',
|
|
187
|
+
unitGroutImperial: 'in',
|
|
188
|
+
unitPercent: '%',
|
|
189
|
+
unitBoxes: 'Stk',
|
|
190
|
+
unitPrice: '/Karton',
|
|
191
|
+
resultBadge: 'Live-Layout-Vorschau',
|
|
192
|
+
labelArea: 'Bodenfläche',
|
|
193
|
+
labelTiles: 'Fliesen gesamt',
|
|
194
|
+
labelBoxes: 'Kartons benötigt',
|
|
195
|
+
labelCost: 'Gesamtkosten',
|
|
196
|
+
labelWasteCount: 'Verschnittfliesen',
|
|
197
|
+
labelCuts: 'Teilschnitte',
|
|
198
|
+
currency: 'EUR',
|
|
199
|
+
btnMetric: 'Metrisch',
|
|
200
|
+
btnImperial: 'Imperial',
|
|
201
|
+
btnPatternStraight: 'Gerade',
|
|
202
|
+
btnPatternBrick: 'Laufend',
|
|
203
|
+
btnPatternDiagonal: 'Diagonal',
|
|
204
|
+
badgeOptimal: 'Optimales Layout',
|
|
205
|
+
badgeWarning: 'Hoher Verschnitt',
|
|
206
|
+
visualTitle: 'Layout Vorschau',
|
|
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 = '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
|
+
};
|