@jjlmoya/utils-home 1.25.0 → 1.26.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 (30) hide show
  1. package/package.json +1 -1
  2. package/src/entries.ts +4 -1
  3. package/src/index.ts +1 -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/wallPaintingCalculator/bibliography.astro +14 -0
  7. package/src/tool/wallPaintingCalculator/bibliography.ts +14 -0
  8. package/src/tool/wallPaintingCalculator/component.astro +340 -0
  9. package/src/tool/wallPaintingCalculator/entry.ts +29 -0
  10. package/src/tool/wallPaintingCalculator/i18n/de.ts +226 -0
  11. package/src/tool/wallPaintingCalculator/i18n/en.ts +226 -0
  12. package/src/tool/wallPaintingCalculator/i18n/es.ts +226 -0
  13. package/src/tool/wallPaintingCalculator/i18n/fr.ts +226 -0
  14. package/src/tool/wallPaintingCalculator/i18n/id.ts +226 -0
  15. package/src/tool/wallPaintingCalculator/i18n/it.ts +226 -0
  16. package/src/tool/wallPaintingCalculator/i18n/ja.ts +226 -0
  17. package/src/tool/wallPaintingCalculator/i18n/ko.ts +226 -0
  18. package/src/tool/wallPaintingCalculator/i18n/nl.ts +226 -0
  19. package/src/tool/wallPaintingCalculator/i18n/pl.ts +226 -0
  20. package/src/tool/wallPaintingCalculator/i18n/pt.ts +226 -0
  21. package/src/tool/wallPaintingCalculator/i18n/ru.ts +226 -0
  22. package/src/tool/wallPaintingCalculator/i18n/sv.ts +226 -0
  23. package/src/tool/wallPaintingCalculator/i18n/tr.ts +226 -0
  24. package/src/tool/wallPaintingCalculator/i18n/zh.ts +226 -0
  25. package/src/tool/wallPaintingCalculator/index.ts +9 -0
  26. package/src/tool/wallPaintingCalculator/logic.ts +27 -0
  27. package/src/tool/wallPaintingCalculator/seo.astro +15 -0
  28. package/src/tool/wallPaintingCalculator/ui.ts +42 -0
  29. package/src/tool/wallPaintingCalculator/wall-painting-calculator.css +326 -0
  30. package/src/tools.ts +2 -0
@@ -0,0 +1,326 @@
1
+ .wall-wrapper {
2
+ --wall-p: #3b82f6;
3
+ --wall-surface: var(--bg-surface);
4
+ --wall-border: var(--border-color);
5
+ --wall-text: var(--text-main);
6
+ --wall-muted: var(--text-muted);
7
+ --wall-page: var(--bg-page);
8
+
9
+ width: 100%;
10
+ padding: 1rem 0;
11
+ }
12
+
13
+ .wall-card {
14
+ background: var(--wall-surface);
15
+ width: calc(100% - 24px);
16
+ max-width: 960px;
17
+ margin: 0 auto;
18
+ border-radius: 24px;
19
+ overflow: hidden;
20
+ display: flex;
21
+ flex-direction: column;
22
+ border: 1px solid var(--wall-border);
23
+ color: var(--wall-text);
24
+ }
25
+
26
+ @media (min-width: 768px) {
27
+ .wall-card {
28
+ flex-direction: row;
29
+ min-height: 560px;
30
+ }
31
+ }
32
+
33
+ .wall-left {
34
+ flex: 0 0 auto;
35
+ width: 100%;
36
+ padding: 32px;
37
+ border-bottom: 1px solid var(--wall-border);
38
+ display: flex;
39
+ flex-direction: column;
40
+ gap: 20px;
41
+ }
42
+
43
+ @media (min-width: 768px) {
44
+ .wall-left {
45
+ width: 380px;
46
+ border-bottom: none;
47
+ border-right: 1px solid var(--wall-border);
48
+ }
49
+ }
50
+
51
+ .wall-right {
52
+ flex: 1;
53
+ background: var(--wall-page);
54
+ display: flex;
55
+ flex-direction: column;
56
+ align-items: center;
57
+ justify-content: center;
58
+ gap: 28px;
59
+ padding: 40px 32px;
60
+ min-height: 360px;
61
+ }
62
+
63
+ .wall-section-title {
64
+ font-size: 0.75rem;
65
+ font-weight: 900;
66
+ text-transform: uppercase;
67
+ letter-spacing: 0.14em;
68
+ color: var(--wall-p);
69
+ margin: 0;
70
+ }
71
+
72
+ .wall-unit-toggle {
73
+ display: flex;
74
+ gap: 8px;
75
+ }
76
+
77
+ .wall-unit-btn {
78
+ padding: 6px 14px;
79
+ border-radius: 9999px;
80
+ border: 1px solid var(--wall-border);
81
+ background: var(--wall-surface);
82
+ color: var(--wall-muted);
83
+ font-size: 0.75rem;
84
+ font-weight: 700;
85
+ cursor: pointer;
86
+ transition: all 0.2s;
87
+ }
88
+
89
+ .wall-unit-btn:hover {
90
+ border-color: var(--wall-p);
91
+ color: var(--wall-text);
92
+ }
93
+
94
+ .wall-unit-active {
95
+ background: var(--wall-p);
96
+ border-color: var(--wall-p);
97
+ color: #fff;
98
+ }
99
+
100
+ .wall-field {
101
+ display: flex;
102
+ flex-direction: column;
103
+ gap: 10px;
104
+ }
105
+
106
+ .wall-label {
107
+ font-size: 0.6875rem;
108
+ font-weight: 700;
109
+ text-transform: uppercase;
110
+ letter-spacing: 0.1em;
111
+ color: var(--wall-muted);
112
+ }
113
+
114
+ .wall-number-row {
115
+ display: flex;
116
+ align-items: baseline;
117
+ gap: 8px;
118
+ }
119
+
120
+ .wall-number-input,
121
+ .wall-price-input {
122
+ font-weight: 900;
123
+ color: var(--wall-text);
124
+ background: transparent;
125
+ border: none;
126
+ border-bottom: 2px solid var(--wall-border);
127
+ padding: 4px 0;
128
+ outline: none;
129
+ transition: border-color 0.2s;
130
+ }
131
+
132
+ .wall-number-input:focus,
133
+ .wall-price-input:focus {
134
+ border-color: var(--wall-p);
135
+ }
136
+
137
+ .wall-number-input {
138
+ width: 100px;
139
+ font-size: 2.5rem;
140
+ }
141
+
142
+ .wall-price-input {
143
+ width: 90px;
144
+ font-size: 1.5rem;
145
+ }
146
+
147
+ .wall-number-unit {
148
+ font-size: 0.875rem;
149
+ color: var(--wall-muted);
150
+ }
151
+
152
+ .wall-type-grid {
153
+ display: grid;
154
+ grid-template-columns: 1fr 1fr;
155
+ gap: 8px;
156
+ }
157
+
158
+ .wall-type-btn {
159
+ display: flex;
160
+ flex-direction: column;
161
+ align-items: flex-start;
162
+ gap: 2px;
163
+ padding: 10px 12px;
164
+ border-radius: 12px;
165
+ border: 1px solid var(--wall-border);
166
+ background: var(--wall-surface);
167
+ color: var(--wall-muted);
168
+ cursor: pointer;
169
+ transition: all 0.2s;
170
+ text-align: left;
171
+ }
172
+
173
+ .wall-type-btn:hover {
174
+ border-color: var(--wall-p);
175
+ color: var(--wall-text);
176
+ }
177
+
178
+ .wall-type-active {
179
+ background: var(--wall-p);
180
+ border-color: var(--wall-p);
181
+ color: #fff;
182
+ box-shadow: 0 4px 14px rgba(59, 130, 246, 0.35);
183
+ }
184
+
185
+ .wall-type-title {
186
+ font-size: 0.75rem;
187
+ font-weight: 700;
188
+ }
189
+
190
+ .wall-type-sub {
191
+ font-size: 0.625rem;
192
+ opacity: 0.75;
193
+ }
194
+
195
+ .wall-slider {
196
+ width: 100%;
197
+ height: 6px;
198
+ accent-color: var(--wall-p);
199
+ cursor: pointer;
200
+ border-radius: 9999px;
201
+ }
202
+
203
+ .wall-coats-desc {
204
+ font-size: 0.8125rem;
205
+ color: var(--wall-muted);
206
+ margin: 0;
207
+ }
208
+
209
+ .wall-result-badge {
210
+ font-size: 0.625rem;
211
+ font-weight: 900;
212
+ text-transform: uppercase;
213
+ letter-spacing: 0.18em;
214
+ color: var(--wall-p);
215
+ padding: 6px 14px;
216
+ border: 1px solid rgba(59, 130, 246, 0.3);
217
+ border-radius: 9999px;
218
+ }
219
+
220
+ .wall-paint-section {
221
+ text-align: center;
222
+ }
223
+
224
+ .wall-paint-label {
225
+ font-size: 0.6875rem;
226
+ font-weight: 700;
227
+ text-transform: uppercase;
228
+ letter-spacing: 0.15em;
229
+ color: var(--wall-muted);
230
+ margin: 0 0 8px;
231
+ }
232
+
233
+ .wall-paint-value {
234
+ font-size: 5rem;
235
+ font-weight: 900;
236
+ color: var(--wall-p);
237
+ line-height: 1;
238
+ margin: 0;
239
+ }
240
+
241
+ .wall-paint-unit {
242
+ font-size: 2.5rem;
243
+ font-weight: 300;
244
+ color: var(--wall-muted);
245
+ }
246
+
247
+ .wall-stats {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: 24px;
251
+ width: 100%;
252
+ max-width: 380px;
253
+ justify-content: center;
254
+ }
255
+
256
+ .wall-stat {
257
+ text-align: center;
258
+ flex: 1;
259
+ }
260
+
261
+ .wall-stat-label {
262
+ font-size: 0.625rem;
263
+ font-weight: 900;
264
+ text-transform: uppercase;
265
+ letter-spacing: 0.12em;
266
+ color: var(--wall-muted);
267
+ margin: 0 0 4px;
268
+ }
269
+
270
+ .wall-stat-value {
271
+ font-size: 1.25rem;
272
+ font-weight: 700;
273
+ color: var(--wall-text);
274
+ margin: 0;
275
+ }
276
+
277
+ .wall-stat-divider {
278
+ width: 1px;
279
+ height: 36px;
280
+ background: var(--wall-border);
281
+ flex-shrink: 0;
282
+ }
283
+
284
+ .wall-currency-toggle {
285
+ display: flex;
286
+ flex-direction: column;
287
+ align-items: center;
288
+ gap: 10px;
289
+ margin-top: 12px;
290
+ }
291
+
292
+ .wall-currency-label {
293
+ font-size: 0.625rem;
294
+ font-weight: 700;
295
+ text-transform: uppercase;
296
+ letter-spacing: 0.12em;
297
+ color: var(--wall-muted);
298
+ }
299
+
300
+ .wall-currency-btns {
301
+ display: flex;
302
+ gap: 8px;
303
+ }
304
+
305
+ .wall-currency-btn {
306
+ padding: 6px 12px;
307
+ border-radius: 10px;
308
+ border: 1px solid var(--wall-border);
309
+ background: var(--wall-surface);
310
+ color: var(--wall-muted);
311
+ font-size: 0.875rem;
312
+ font-weight: 700;
313
+ cursor: pointer;
314
+ transition: all 0.2s;
315
+ }
316
+
317
+ .wall-currency-btn:hover {
318
+ border-color: var(--wall-p);
319
+ color: var(--wall-text);
320
+ }
321
+
322
+ .wall-currency-active {
323
+ background: var(--wall-p);
324
+ border-color: var(--wall-p);
325
+ color: #fff;
326
+ }
package/src/tools.ts CHANGED
@@ -9,6 +9,7 @@ import { TARIFF_COMPARATOR_TOOL } from './tool/tariffComparator/index';
9
9
  import { HEATING_COMPARATOR_TOOL } from './tool/heatingComparator/index';
10
10
  import { WIFI_RANGE_SIMULATOR_TOOL } from './tool/wifiRangeSimulator/index';
11
11
  import { AC_TONNAGE_CALCULATOR_TOOL } from './tool/acTonnageCalculator/index';
12
+ import { WALL_PAINTING_CALCULATOR_TOOL } from './tool/wallPaintingCalculator/index';
12
13
 
13
14
  export const ALL_TOOLS: ToolDefinition[] = [
14
15
  QR_GENERATOR_TOOL,
@@ -20,5 +21,6 @@ export const ALL_TOOLS: ToolDefinition[] = [
20
21
  HEATING_COMPARATOR_TOOL,
21
22
  WIFI_RANGE_SIMULATOR_TOOL,
22
23
  AC_TONNAGE_CALCULATOR_TOOL,
24
+ WALL_PAINTING_CALCULATOR_TOOL,
23
25
  ];
24
26