@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 = '타일 배치 및 손실 계산기';
8
+ const description =
9
+ '방 바닥을 정밀하게 계획하세요. 타일의 정확한 수량, 필요한 박스 수, 총 비용을 계산하고 인터랙티브 그리드 미리보기로 실시간 레이아웃을 시각화합니다.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: '방에 필요한 타일 수량을 어떻게 계산하나요?',
14
+ answer:
15
+ '방의 너비와 길이를 측정하고, 타일 크기를 선택한 뒤 줄루 폭을 입력하세요. 계산기는 방 크기를 타일 크기에 줄루를 더한 값으로 나누어, 행과 열당 필요한 타일의 정확한 수를 계산합니다.',
16
+ },
17
+ {
18
+ question: '타일 구매 시 몇 퍼센트의 손실을 추가해야 하나요?',
19
+ answer:
20
+ '표준 직사각형 방은 10% 손실을 추가하세요. 모서리가 많거나 대각선 배치, 복잡한 커팅이 필요한 방은 15%로 늘리세요. 이는 파손과 절단 실수를 커버합니다.',
21
+ },
22
+ {
23
+ question: '줄루 두께가 타일 수량에 영향을 주나요?',
24
+ answer:
25
+ '네. 줄루가 넓을수록 각 타일의 실제 커버 면적이 줄어들어 필요한 총 수량이 약간 늘어납니다. 계산기는 이를 각 행과 열에 자동으로 반영합니다.',
26
+ },
27
+ {
28
+ question: '손실률 외에 추가 박스를 구매해야 하나요?',
29
+ answer:
30
+ '가능하다면 한 박스를 여분으로 구매하는 것이 현명합니다. 생산 배치에 따라 색조가 다를 수 있으며, 동일한 여분 타일이 있으면 향후 보수가 원활합니다.',
31
+ },
32
+ {
33
+ question: '비정형 방에 타일을 시공하려면 어떻게 해야 하나요?',
34
+ answer:
35
+ '방을 작은 직사각형으로 나눈 뒤 각 구역을 따로 계산하고 합산하세요. 부분 박스는 항상 올림하여 완전한 커버를 보장하세요.',
36
+ },
37
+ {
38
+ question: '세라믹과 포세린 타일의 손실 차이는 무엇인가요?',
39
+ answer:
40
+ '포세린은 더 단단하고 자르기 어려워, 일반 세라믹에 비해 절단 손실이 2~3% 더 발생할 수 있습니다. 두 재료 모두 동일한 측정 과정을 따릅니다.',
41
+ },
42
+ {
43
+ question: '사용하지 않은 타일 박스는 반품할 수 있나요?',
44
+ answer:
45
+ '대부분의 판매점은 개봉하지 않은 박스를 30일 이내에 반품을 받습니다. 영수증을 반드시 보관하고, 시공이 완전히 끝날 때까지 여분 박스는 개봉하지 마세요.',
46
+ },
47
+ ];
48
+
49
+ const howToData = [
50
+ {
51
+ name: '방을 측정하세요',
52
+ text: '선호하는 단위계로 바닥의 너비와 길이를 기록하세요.',
53
+ },
54
+ {
55
+ name: '타일과 줄루를 선택하세요',
56
+ text: '타일 크기와 원하는 줄루 폭을 선택하세요.',
57
+ },
58
+ {
59
+ name: '계산하고 시각화하세요',
60
+ text: '값을 계산기에 입력하고, 손실률을 조정한 뒤 실시간 레이아웃 미리보기를 확인하세요.',
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: 'KRW' },
94
+ inLanguage: 'ko',
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: '바닥 타일 계획 및 손실 제어의 완벽한 가이드',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: '성공적인 타일 시공은 첫 번째 접착제를 바르기 전부터 시작됩니다. 정밀한 측정, 지능적인 배치 계획, 그리고 정확한 손실 예측이 리모델링이 예산과 일정 내에 완료될지를 결정합니다. <strong>우리의 인터랙티브 타일 배치 계산기</strong>는 원시 치수를 시각적인 평면도로 변환하여, 한 행에 몇 장이 들어가는지, 몇 박스를 사야 하는지, 비용이 어디로 가는지 정확히 보여줍니다.',
114
+ },
115
+ {
116
+ type: 'stats',
117
+ items: [
118
+ { value: '10-15%', label: '표준 손실', icon: 'mdi:alert-circle' },
119
+ { value: '30년 이상', label: '타일 수명', icon: 'mdi:clock-outline' },
120
+ { value: '48시간', label: '평균 시공', icon: 'mdi:calendar-check' },
121
+ ],
122
+ columns: 3,
123
+ },
124
+ {
125
+ type: 'comparative',
126
+ items: [
127
+ {
128
+ title: '대형 포맷 타일',
129
+ description: '60cm를 초과하는 타일은 매끄럽고 현대적인 느낌을 주지만, 완벽하게 평평한 기반이 필요하며 작은 방에서는 절단 손실이 더 큽니다.',
130
+ icon: 'mdi:arrow-expand',
131
+ points: ['줄루가 적음', '프리미엄 시각 효과', '좁은 공간에서 절단 손실 증가'],
132
+ },
133
+ {
134
+ title: '소형 모자이크 타일',
135
+ description: '욕실과 복잡한 패턴에 이상적입니다. 비정형 형태에 적응하지만 더 많은 줄루와 시공 시간이 필요합니다.',
136
+ icon: 'mdi:apps',
137
+ points: ['장애물 주변 유연성', '줄루가 더 많이 필요', '시공 시간이 더 긺'],
138
+ },
139
+ ],
140
+ columns: 2,
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: '레이아웃 시각화가 중요한 이유',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: '구매 전 타일 그리드를 보면 비용이 큰 낭패를 피할 수 있습니다. 라이브 미리보기는 선택한 타일 크기가 가장자리에 어색한 좁은 띠를 남기는지, 아니면 균형 잡히고 대칭적인 바닥을 만드는지 보여줍니다. 계산기에서 줄루 폭과 타일 방향을 조정하여, 주문 전에 미관과 효율성 모두에 최적화된 배치를 만들 수 있습니다.',
150
+ },
151
+ {
152
+ type: 'diagnostic',
153
+ variant: 'info',
154
+ title: '빠른 커버리지 참조표',
155
+ icon: 'mdi:table',
156
+ badge: '참조',
157
+ html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 1㎡당 11장</li><li><strong>45 x 45 cm</strong> → 1㎡당 5장</li><li><strong>60 x 60 cm</strong> → 1㎡당 3장</li><li><strong>60 x 120 cm</strong> → 1㎡당 1.5장</li></ul>',
158
+ },
159
+ {
160
+ type: 'summary',
161
+ title: '손실을 최소화하는 전문가 팁',
162
+ items: [
163
+ '직선 배치는 10% 추가, 대각선이나 헤링본은 15% 추가로 주문하세요.',
164
+ '색상 일관성을 위해 모든 박스는 동일 생산 배치를 보관하세요.',
165
+ '행을 계획하기 전에 방의 대각선을 측정하여 직각을 확인하세요.',
166
+ '대형 포맷 타일은 방 너비가 타일 길이보다 큰 경우에만 사용하여 과도한 절단을 피하세요.',
167
+ '박스 수량은 항상 올림하세요. 두 번째 배송보다 저렴합니다.',
168
+ ],
169
+ },
170
+ ],
171
+ ui: {
172
+ sectionTitle: '방 설정',
173
+ labelRoomWidth: '방 너비',
174
+ labelRoomLength: '방 길이',
175
+ labelTileWidth: '타일 너비',
176
+ labelTileLength: '타일 길이',
177
+ labelGrout: '줄루 폭',
178
+ labelWaste: '손실률',
179
+ labelTilesPerBox: '박스당 타일 수',
180
+ labelPrice: '박스당 가격',
181
+ labelPattern: '배치 패턴',
182
+ unitMetricRoom: 'm',
183
+ unitImperialRoom: 'ft',
184
+ unitMetricTile: 'cm',
185
+ unitImperialTile: 'in',
186
+ unitGroutMetric: 'mm',
187
+ unitGroutImperial: 'in',
188
+ unitPercent: '%',
189
+ unitBoxes: '장',
190
+ unitPrice: '/박스',
191
+ resultBadge: '실시간 레이아웃 미리보기',
192
+ labelArea: '바닥 면적',
193
+ labelTiles: '총 타일 수',
194
+ labelBoxes: '필요한 박스',
195
+ labelCost: '총 비용',
196
+ labelWasteCount: '손실 타일',
197
+ labelCuts: '부분 절단',
198
+ currency: 'KRW',
199
+ btnMetric: '미터법',
200
+ btnImperial: '야드파운드법',
201
+ btnPatternStraight: '직선',
202
+ btnPatternBrick: '벽돌 시공',
203
+ btnPatternDiagonal: '대각선',
204
+ badgeOptimal: '최적 레이아웃',
205
+ badgeWarning: '손실 과다 경고',
206
+ visualTitle: '레이아웃 미리보기',
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 = 'tegel-layout-calculator';
7
+ const title = 'Tegellayout en Snijverliescalculator';
8
+ const description =
9
+ 'Plan de vloer van je ruimte met millimeterprecisie. Bereken het exacte aantal tegels, benodigde dozen, totale kosten en visualiseer de layout in realtime met een interactief rasteroverzicht.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Hoe bereken ik hoeveel tegels ik nodig heb voor een ruimte?',
14
+ answer:
15
+ 'Meet de breedte en lengte van de ruimte, kies de tegelafmeting en voer de voegbreedte in. De calculator deelt de ruimteafmetingen door de tegel plus voeg om het exacte aantal tegels per rij en kolom te geven.',
16
+ },
17
+ {
18
+ question: 'Welk snijverliespercentage moet ik toevoegen bij de aankoop van tegels?',
19
+ answer:
20
+ 'Voeg voor standaard rechthoekige ruimtes 10% snijverlies toe. Bij ruimtes met veel hoeken, diagonale patronen of complexe sneden verhoog je dit naar 15%. Dit dekt breuk en snijfouten.',
21
+ },
22
+ {
23
+ question: 'Beïnvloedt de voegdikte echt het aantal tegels?',
24
+ answer:
25
+ 'Ja. Breedere voegen verkleinen het effectieve bereik van elke tegel, waardoor het totale aantal licht stijgt. De calculator houdt hier automatisch rekening mee in elke rij en kolom.',
26
+ },
27
+ {
28
+ question: 'Moet ik extra dozen kopen boven het snijverliespercentage?',
29
+ answer:
30
+ 'Het is verstandig om een extra doos te kopen als deze beschikbaar is. Kleurbatches kunnen verschillen tussen productieruns, en passende reserve-exemplaren maken toekomstig herstel eenvoudiger.',
31
+ },
32
+ {
33
+ question: 'Hoe tegel ik een ruimte met een onregelmatige vorm?',
34
+ answer:
35
+ 'Splits de ruimte op in kleinere rechthoeken. Bereken elk gedeelte apart en tel de totalen op. Rond gedeeltelijke dozen altijd naar boven af voor volledige dekking.',
36
+ },
37
+ {
38
+ question: 'Wat is het verschil in snijverlies tussen keramiek en porselein?',
39
+ answer:
40
+ 'Porselein is dichter en moeilijker te snijden, waardoor het snijverlies 2% tot 3% hoger kan liggen dan bij standaard keramiek. Beide materialen volgen hetzelfde meetproces.',
41
+ },
42
+ {
43
+ question: 'Kan ik ongebruikte tegeldoosjes retourneren?',
44
+ answer:
45
+ 'De meeste retailers accepteren ongeopende dozen binnen 30 dagen. Bewaar altijd de bon en open overtollige dozen pas als de installatie volledig is afgerond.',
46
+ },
47
+ ];
48
+
49
+ const howToData = [
50
+ {
51
+ name: 'Meet de ruimte',
52
+ text: 'Noteer de breedte en lengte van de vloer in je voorkeurseenheden.',
53
+ },
54
+ {
55
+ name: 'Selecteer tegel en voeg',
56
+ text: 'Kies je tegelafmetingen en de gewenste voegbreedte.',
57
+ },
58
+ {
59
+ name: 'Bereken en visualiseer',
60
+ text: 'Voer de waarden in de calculator in, pas het snijverliespercentage aan en bekijk het live layout-overzicht.',
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: 'nl',
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 Gids voor Tegelvloerplanning en Snijverliesbeheersing',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Een succesvol tegelproject begint lang voordat de eerste lijm wordt aangebracht. Nauwkeurig meten, intelligent layoutplanning en exacte snijverliesinschatting bepalen of je renovatie binnen budget en planning blijft. <strong>Onze interactieve tegel-layoutcalculator</strong> transformeert ruwe afmetingen in een visueel vloerplan, dat precies laat zien hoeveel tegels er per rij passen, hoeveel dozen je nodig hebt en waar je geld naartoe gaat.',
114
+ },
115
+ {
116
+ type: 'stats',
117
+ items: [
118
+ { value: '10-15%', label: 'Standaard snijverlies', icon: 'mdi:alert-circle' },
119
+ { value: '30+ jaar', label: 'Tegellevensduur', icon: 'mdi:clock-outline' },
120
+ { value: '48u', label: 'Gem. installatie', icon: 'mdi:calendar-check' },
121
+ ],
122
+ columns: 3,
123
+ },
124
+ {
125
+ type: 'comparative',
126
+ items: [
127
+ {
128
+ title: 'Grote Formaat Tegels',
129
+ description: 'Tegels groter dan 60 cm creëren een naadloos, modern uiterlijk, maar vereisen perfect vlakke ondergronden en genereren meer snijverlies in kleine ruimtes.',
130
+ icon: 'mdi:arrow-expand',
131
+ points: ['Minder voegen', 'Premium visueel effect', 'Hoger snijverlies in krappe ruimtes'],
132
+ },
133
+ {
134
+ title: 'Kleine Mozaïektegels',
135
+ description: 'Ideaal voor badkamers en ingewikkelde patronen. Ze passen zich aan onregelmatige vormen aan, maar vereisen meer voeg en arbeidstijd.',
136
+ icon: 'mdi:apps',
137
+ points: ['Flexibel rond obstakels', 'Meer voeg vereist', 'Langere installatietijd'],
138
+ },
139
+ ],
140
+ columns: 2,
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Waarom Layoutvisualisatie Belangrijk Is',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Het zien van je tegelraster voor aankoop voorkomt kostbare verrassingen. Een live preview onthult of je gekozen tegelafmeting onhandige smalle stroken aan de randen achterlaat of een evenwichtige, symmetrische vloer creëert. Door de voegbreedte en tegeloriëntatie in de calculator aan te passen, optimaliseer je de layout voor esthetiek en efficiëntie voordat je bestelt.',
150
+ },
151
+ {
152
+ type: 'diagnostic',
153
+ variant: 'info',
154
+ title: 'Snelle Dekkingstabel',
155
+ icon: 'mdi:table',
156
+ badge: 'Referentie',
157
+ html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 tegels per m²</li><li><strong>45 x 45 cm</strong> → 5 tegels per m²</li><li><strong>60 x 60 cm</strong> → 3 tegels per m²</li><li><strong>60 x 120 cm</strong> → 1,5 tegels per m²</li></ul>',
158
+ },
159
+ {
160
+ type: 'summary',
161
+ title: 'Protips om Snijverlies te Minimaliseren',
162
+ items: [
163
+ 'Bestel 10% extra voor rechte patronen en 15% voor diagonaal of visgraat.',
164
+ 'Bewaar alle dozen uit dezelfde productiebatch voor kleurconsistentie.',
165
+ 'Meet diagonaal door de ruimte om de rechthoekigheid te controleren voordat je rijen plant.',
166
+ 'Gebruik grote formaten alleen in ruimtes die breder zijn dan de tegellengte om overmatig snijden te vermijden.',
167
+ 'Rond het aantal dozen altijd naar boven af; dat is goedkoper dan een tweede bezorging.',
168
+ ],
169
+ },
170
+ ],
171
+ ui: {
172
+ sectionTitle: 'Ruimteconfiguratie',
173
+ labelRoomWidth: 'Ruimtebreedte',
174
+ labelRoomLength: 'Ruimtelengte',
175
+ labelTileWidth: 'Tegelbreedte',
176
+ labelTileLength: 'Tegellengte',
177
+ labelGrout: 'Voegbreedte',
178
+ labelWaste: 'Snijverliesmarge',
179
+ labelTilesPerBox: 'Tegels per doos',
180
+ labelPrice: 'Prijs per doos',
181
+ labelPattern: 'Tegelpatroon',
182
+ unitMetricRoom: 'm',
183
+ unitImperialRoom: 'ft',
184
+ unitMetricTile: 'cm',
185
+ unitImperialTile: 'in',
186
+ unitGroutMetric: 'mm',
187
+ unitGroutImperial: 'in',
188
+ unitPercent: '%',
189
+ unitBoxes: 'st',
190
+ unitPrice: '/doos',
191
+ resultBadge: 'Live layout-overzicht',
192
+ labelArea: 'Vloeroppervlak',
193
+ labelTiles: 'Totaal tegels',
194
+ labelBoxes: 'Dozen nodig',
195
+ labelCost: 'Totale kosten',
196
+ labelWasteCount: 'Snijverlies-tegels',
197
+ labelCuts: 'Deelsneden',
198
+ currency: 'EUR',
199
+ btnMetric: 'Metrisch',
200
+ btnImperial: 'Imperiaal',
201
+ btnPatternStraight: 'Recht',
202
+ btnPatternBrick: 'Halfsteens',
203
+ btnPatternDiagonal: 'Diagonaal',
204
+ badgeOptimal: 'Optimale layout',
205
+ badgeWarning: 'Hoog snijverlies',
206
+ visualTitle: 'Layout overzicht',
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 = 'kalkulator-ukladu-plytek';
7
+ const title = 'Kalkulator Układu i Odpadów Płytek';
8
+ const description =
9
+ 'Zaplanuj podłogę w pomieszczeniu z milimetrową precyzją. Oblicz dokładną liczbę płytek, potrzebne kartony, całkowity koszt i wizualizuj układ w czasie rzeczywistym dzięki interaktywnej podglądowi siatki.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Jak obliczyć, ile płytek potrzebuję do pomieszczenia?',
14
+ answer:
15
+ 'Zmierz szerokość i długość pokoju, wybierz rozmiar płytki i podaj szerokość fugi. Kalkulator dzieli wymiary pomieszczenia przez płytkę plus fugę, aby uzyskać dokładną liczbę sztuk w rzędzie i kolumnie.',
16
+ },
17
+ {
18
+ question: 'Jaki procent odpadów dodać przy zakupie płytek?',
19
+ answer:
20
+ 'W standardowych prostokątnych pomieszczeniach dodaj 10% odpadów. W pokojach z wieloma narożnikami, układem na ukos lub skomplikowanymi cięciami zwiększ do 15%. To pokrywa uszkodzenia i błędy cięcia.',
21
+ },
22
+ {
23
+ question: 'Czy grubość fugi naprawdę zmienia liczbę płytek?',
24
+ answer:
25
+ 'Tak. Szersze fugi zmniejszają efektywną powierzchnię pokrycia każdej płytki, nieznacznie zwiększając całkowitą liczbę potrzebnych sztuk. Kalkulator uwzględnia to automatycznie w każdym rzędzie i kolumnie.',
26
+ },
27
+ {
28
+ question: 'Czy kupić dodatkowe kartony poza procentem odpadów?',
29
+ answer:
30
+ 'Warto nabyć jeden karton więcej, jeśli jest dostępny. Partie barwne mogą się różnić między produkcjami, a posiadanie dopasowanych zapasów ułatwia przyszłe naprawy.',
31
+ },
32
+ {
33
+ question: 'Jak układać płytki w pomieszczeniu o nieregularnym kształcie?',
34
+ answer:
35
+ 'Podziel pokój na mniejsze prostokąty. Oblicz każdy obszar osobno i zsumuj wyniki. Zawsze zaokrąglaj częściowe kartony w górę, aby zapewnić pełne pokrycie.',
36
+ },
37
+ {
38
+ question: 'Jaka jest różnica w odpadach między ceramiką a gresem?',
39
+ answer:
40
+ 'Gres jest gęstszy i trudniejszy do cięcia, co może zwiększyć odpady cięcia o 2-3% w porównaniu do standardowej ceramiki. Oba materiały wymagają tego samego procesu pomiarowego.',
41
+ },
42
+ {
43
+ question: 'Czy można zwrócić nieużywane kartony płytek?',
44
+ answer:
45
+ 'Większość sklepów przyjmuje nieotwarte kartony w ciągu 30 dni. Zawsze zachowaj paragon i nie otwieraj nadwyżek do czasu zakończenia całkowitego montażu.',
46
+ },
47
+ ];
48
+
49
+ const howToData = [
50
+ {
51
+ name: 'Zmierz pomieszczenie',
52
+ text: 'Zapisz szerokość i długość powierzchni podłogi w preferowanym systemie jednostek.',
53
+ },
54
+ {
55
+ name: 'Wybierz płytkę i fugę',
56
+ text: 'Wybierz wymiary płytki oraz pożądaną szerokość fugi.',
57
+ },
58
+ {
59
+ name: 'Oblicz i wizualizuj',
60
+ text: 'Wprowadź wartości do kalkulatora, dostosuj margines odpadów i sprawdź podgląd układu na żywo.',
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: 'PLN' },
94
+ inLanguage: 'pl',
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: 'Kompletny Przewodnik po Planowaniu Podłóg Płytek i Kontroli Odpadów',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Udany projekt układania płytek zaczyna się na długo przed nałożeniem pierwszej warstwy kleju. Precyzyjny pomiar, inteligentne planowanie układu oraz dokładna estymacja odpadów decydują o tym, czy remont zmieści się w budżecie i terminie. <strong>Nasz interaktywny kalkulator układu płytek</strong> przekształca surowe wymiary w wizualny plan pokazujący dokładnie, ile płytek zmieści się w rzędzie, ile kartonów kupić i gdzie idą twoje pieniądze.',
114
+ },
115
+ {
116
+ type: 'stats',
117
+ items: [
118
+ { value: '10-15%', label: 'Standardowe odpady', icon: 'mdi:alert-circle' },
119
+ { value: '30+ lat', label: 'Trwałość płytek', icon: 'mdi:clock-outline' },
120
+ { value: '48h', label: 'Średni montaż', icon: 'mdi:calendar-check' },
121
+ ],
122
+ columns: 3,
123
+ },
124
+ {
125
+ type: 'comparative',
126
+ items: [
127
+ {
128
+ title: 'Płytki Wielkoformatowe',
129
+ description: 'Płytki powyżej 60 cm tworzą nowoczesny, bezszwowy wygląd, ale wymagają idealnie płaskich podłoży i generują więcej odpadów przy cięciu w małych pomieszczeniach.',
130
+ icon: 'mdi:arrow-expand',
131
+ points: ['Mniej fug', 'Premium efekt wizualny', 'Większe odpady w ciasnych przestrzeniach'],
132
+ },
133
+ {
134
+ title: 'Małe Mozaiki',
135
+ description: 'Idealne do łazienek i skomplikowanych wzorów. Dostosowują się do nieregularnych kształtów, ale wymagają więcej fugi i czasu pracy.',
136
+ icon: 'mdi:apps',
137
+ points: ['Elastyczność wokół przeszkód', 'Więcej fugi potrzebnej', 'Dłuższy czas montażu'],
138
+ },
139
+ ],
140
+ columns: 2,
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: 'Dlaczego Wizualizacja Układu Jest Ważna',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Widok siatki płytek przed zakupem pozwala uniknąć kosztownych niespodzianek. Podgląd na żywo ujawnia, czy wybrany rozmiar płytki pozostawi niezręczne wąskie paski na krawędziach, czy stworzy zrównoważoną, symetryczną podłogę. Dostosowując szerokość fugi i orientację płytki w kalkulatorze, możesz zoptymalizować układ pod kątem estetyki i wydajności przed złożeniem zamówienia.',
150
+ },
151
+ {
152
+ type: 'diagnostic',
153
+ variant: 'info',
154
+ title: 'Szybka Tabela Pokrycia',
155
+ icon: 'mdi:table',
156
+ badge: 'Referencja',
157
+ html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 płytek na m²</li><li><strong>45 x 45 cm</strong> → 5 płytek na m²</li><li><strong>60 x 60 cm</strong> → 3 płytki na m²</li><li><strong>60 x 120 cm</strong> → 1,5 płytki na m²</li></ul>',
158
+ },
159
+ {
160
+ type: 'summary',
161
+ title: 'Wskazówki Ekspertów jak Zminimalizować Odpady',
162
+ items: [
163
+ 'Zamów 10% więcej przy układzie prostym i 15% na ukos lub w jodełkę.',
164
+ 'Przechowuj wszystkie kartony z tej samej partii produkcyjnej, aby zachować jednolitość koloru.',
165
+ 'Zmierz przekątną pomieszczenia, aby sprawdzić prostokątność przed planowaniem rzędów.',
166
+ 'Płytki wielkoformatowe stosuj tylko w pokojach szerszych niż długość płytki, aby uniknąć nadmiernych cięć.',
167
+ 'Zawsze zaokrąglaj liczbę kartonów w górę; to tańsze niż druga dostawa.',
168
+ ],
169
+ },
170
+ ],
171
+ ui: {
172
+ sectionTitle: 'Konfiguracja pomieszczenia',
173
+ labelRoomWidth: 'Szerokość pokoju',
174
+ labelRoomLength: 'Długość pokoju',
175
+ labelTileWidth: 'Szerokość płytki',
176
+ labelTileLength: 'Długość płytki',
177
+ labelGrout: 'Szerokość fugi',
178
+ labelWaste: 'Margines odpadów',
179
+ labelTilesPerBox: 'Płytek w kartonie',
180
+ labelPrice: 'Cena za karton',
181
+ labelPattern: 'Wzór układania',
182
+ unitMetricRoom: 'm',
183
+ unitImperialRoom: 'ft',
184
+ unitMetricTile: 'cm',
185
+ unitImperialTile: 'in',
186
+ unitGroutMetric: 'mm',
187
+ unitGroutImperial: 'in',
188
+ unitPercent: '%',
189
+ unitBoxes: 'szt',
190
+ unitPrice: '/karton',
191
+ resultBadge: 'Podgląd na żywo',
192
+ labelArea: 'Powierzchnia podłogi',
193
+ labelTiles: 'Płytek razem',
194
+ labelBoxes: 'Potrzebne kartony',
195
+ labelCost: 'Koszt całkowity',
196
+ labelWasteCount: 'Odpadowe płytki',
197
+ labelCuts: 'Częściowe cięcia',
198
+ currency: 'PLN',
199
+ btnMetric: 'Metryczny',
200
+ btnImperial: 'Imperialny',
201
+ btnPatternStraight: 'Prosty',
202
+ btnPatternBrick: 'Na przesunięcie',
203
+ btnPatternDiagonal: 'Na ukos',
204
+ badgeOptimal: 'Optymalny układ',
205
+ badgeWarning: 'Wysokie odpady',
206
+ visualTitle: 'Podgląd układu',
207
+ },
208
+ };