@jjlmoya/utils-hardware 1.11.0 → 1.13.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 (32) hide show
  1. package/package.json +7 -4
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/entries.ts +23 -0
  4. package/src/tool/batteryHealthEstimator/component.astro +2 -369
  5. package/src/tool/batteryHealthEstimator/entry.ts +30 -0
  6. package/src/tool/batteryHealthEstimator/index.ts +2 -32
  7. package/src/tool/batteryHealthEstimator/lithium-battery-health-calculator.css +275 -0
  8. package/src/tool/deadPixelTest/component.astro +2 -445
  9. package/src/tool/deadPixelTest/dead-pixel-tester.css +400 -0
  10. package/src/tool/deadPixelTest/entry.ts +30 -0
  11. package/src/tool/deadPixelTest/index.ts +2 -32
  12. package/src/tool/gamepadTest/component.astro +2 -973
  13. package/src/tool/gamepadTest/entry.ts +30 -0
  14. package/src/tool/gamepadTest/gamepad-test.css +882 -0
  15. package/src/tool/gamepadTest/index.ts +2 -32
  16. package/src/tool/gamepadVibrationTester/component.astro +2 -404
  17. package/src/tool/gamepadVibrationTester/entry.ts +30 -0
  18. package/src/tool/gamepadVibrationTester/gamepad-vibration-tester.css +280 -0
  19. package/src/tool/gamepadVibrationTester/index.ts +2 -32
  20. package/src/tool/keyboardTest/component.astro +2 -333
  21. package/src/tool/keyboardTest/entry.ts +30 -0
  22. package/src/tool/keyboardTest/index.ts +2 -32
  23. package/src/tool/keyboardTest/keyboard-test.css +283 -0
  24. package/src/tool/mousePollingTest/component.astro +2 -172
  25. package/src/tool/mousePollingTest/entry.ts +30 -0
  26. package/src/tool/mousePollingTest/index.ts +2 -32
  27. package/src/tool/mousePollingTest/mouse-polling-rate-test.css +143 -0
  28. package/src/tool/toneGenerator/component.astro +2 -330
  29. package/src/tool/toneGenerator/entry.ts +30 -0
  30. package/src/tool/toneGenerator/index.ts +2 -32
  31. package/src/tool/toneGenerator/tone-frequency-generator.css +265 -0
  32. package/src/tools.ts +1 -1
@@ -0,0 +1,280 @@
1
+ .pv-wrapper {
2
+ max-width: 650px;
3
+ margin: 0 auto;
4
+ color: var(--pv-text);
5
+ }
6
+
7
+ .pv-card {
8
+ background: var(--pv-surface);
9
+ border: 1px solid var(--pv-border);
10
+ border-radius: 1.5rem;
11
+ padding: 2rem;
12
+ box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.1);
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: 1.5rem;
16
+ }
17
+
18
+ .pv-status-header {
19
+ display: flex;
20
+ align-items: center;
21
+ gap: 1.25rem;
22
+ padding: 1.25rem;
23
+ background: var(--pv-surface-alt);
24
+ border-radius: 1rem;
25
+ border: 1px solid var(--pv-border);
26
+ transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
27
+ }
28
+
29
+ .pv-status-avatar {
30
+ width: 3rem;
31
+ height: 3rem;
32
+ border-radius: 0.75rem;
33
+ background: var(--pv-surface-hover);
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ color: var(--pv-text-muted);
38
+ flex-shrink: 0;
39
+ transition: all 300ms;
40
+ }
41
+
42
+ .pv-status-icon {
43
+ width: 1.75rem;
44
+ height: 1.75rem;
45
+ }
46
+
47
+ .pv-status-info {
48
+ flex: 1;
49
+ min-width: 0;
50
+ }
51
+
52
+ .pv-dev-name {
53
+ margin: 0;
54
+ font-size: 1.1rem;
55
+ font-weight: 800;
56
+ white-space: nowrap;
57
+ overflow: hidden;
58
+ text-overflow: ellipsis;
59
+ }
60
+
61
+ .pv-dev-sub {
62
+ margin: 0.25rem 0 0;
63
+ font-size: 0.85rem;
64
+ color: var(--pv-text-muted);
65
+ }
66
+
67
+ .pv-indicator {
68
+ flex-shrink: 0;
69
+ width: 0.75rem;
70
+ height: 0.75rem;
71
+ border-radius: 9999px;
72
+ background: var(--pv-danger);
73
+ box-shadow: 0 0 10px rgba(239, 68, 68, 0.4);
74
+ transition: all 300ms;
75
+ }
76
+
77
+ .pv-warning {
78
+ font-size: 0.85rem;
79
+ color: #b45309;
80
+ background: #fef3c7;
81
+ padding: 0.75rem;
82
+ border-radius: 0.5rem;
83
+ border-left: 4px solid #f59e0b;
84
+ display: none;
85
+ }
86
+
87
+ .pv-tabs-nav {
88
+ display: flex;
89
+ background: var(--pv-surface-alt);
90
+ padding: 0.5rem;
91
+ border-radius: 1rem;
92
+ gap: 0.5rem;
93
+ }
94
+
95
+ .pv-tab-btn {
96
+ flex: 1;
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ gap: 0.5rem;
101
+ padding: 0.75rem 1rem;
102
+ border: none;
103
+ background: transparent;
104
+ color: var(--pv-text-muted);
105
+ font-weight: 700;
106
+ font-size: 0.9rem;
107
+ border-radius: 0.75rem;
108
+ cursor: pointer;
109
+ transition: all 200ms;
110
+ }
111
+
112
+ .pv-tab-btn:hover {
113
+ color: var(--pv-text);
114
+ background: var(--pv-surface-hover);
115
+ }
116
+
117
+ .pv-tab-icon {
118
+ width: 1.125rem;
119
+ height: 1.125rem;
120
+ }
121
+
122
+ .pv-presets-grid {
123
+ display: grid;
124
+ grid-template-columns: repeat(2, 1fr);
125
+ gap: 1rem;
126
+ }
127
+
128
+ @media (max-width: 480px) {
129
+ .pv-presets-grid {
130
+ grid-template-columns: 1fr;
131
+ }
132
+ }
133
+
134
+ .pv-preset-card {
135
+ background: var(--pv-surface-alt);
136
+ border: 1px solid var(--pv-border);
137
+ border-radius: 1rem;
138
+ padding: 1.25rem;
139
+ display: flex;
140
+ flex-direction: column;
141
+ align-items: flex-start;
142
+ gap: 0.75rem;
143
+ cursor: pointer;
144
+ transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
145
+ position: relative;
146
+ overflow: hidden;
147
+ }
148
+
149
+ .pv-preset-card:hover {
150
+ transform: translateY(-2px);
151
+ border-color: var(--pv-accent);
152
+ box-shadow: 0 10px 20px rgba(139, 92, 246, 0.1);
153
+ }
154
+
155
+ .pv-preset-icon {
156
+ width: 2.5rem;
157
+ height: 2.5rem;
158
+ background: var(--pv-surface);
159
+ border-radius: 0.625rem;
160
+ display: flex;
161
+ align-items: center;
162
+ justify-content: center;
163
+ color: var(--pv-accent);
164
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
165
+ transition: all 200ms;
166
+ }
167
+
168
+ .pv-preset-icon-svg {
169
+ width: 1.5rem;
170
+ height: 1.5rem;
171
+ }
172
+
173
+ .pv-preset-title {
174
+ font-weight: 800;
175
+ font-size: 1rem;
176
+ margin: 0;
177
+ }
178
+
179
+ .pv-preset-desc {
180
+ font-size: 0.8rem;
181
+ color: var(--pv-text-muted);
182
+ margin: 0;
183
+ line-height: 1.4;
184
+ transition: color 200ms;
185
+ }
186
+
187
+ .pv-custom-sliders {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: 1.25rem;
191
+ background: var(--pv-surface-alt);
192
+ padding: 1.5rem;
193
+ border-radius: 1rem;
194
+ border: 1px solid var(--pv-border);
195
+ }
196
+
197
+ .pv-slider-group {
198
+ display: flex;
199
+ flex-direction: column;
200
+ gap: 0.75rem;
201
+ }
202
+
203
+ .pv-slider-header {
204
+ display: flex;
205
+ justify-content: space-between;
206
+ align-items: center;
207
+ font-size: 0.9rem;
208
+ font-weight: 700;
209
+ }
210
+
211
+ .pv-slider-val {
212
+ background: var(--pv-surface);
213
+ padding: 0.25rem 0.5rem;
214
+ border-radius: 0.375rem;
215
+ font-size: 0.85rem;
216
+ font-weight: 700;
217
+ color: var(--pv-accent);
218
+ min-width: 3rem;
219
+ text-align: center;
220
+ }
221
+
222
+ .pv-slider {
223
+ -webkit-appearance: none;
224
+ appearance: none;
225
+ width: 100%;
226
+ height: 8px;
227
+ background: var(--pv-surface-hover);
228
+ border-radius: 4px;
229
+ outline: none;
230
+ }
231
+
232
+ .pv-slider::-webkit-slider-thumb {
233
+ -webkit-appearance: none;
234
+ appearance: none;
235
+ width: 1.5rem;
236
+ height: 1.5rem;
237
+ border-radius: 9999px;
238
+ background: var(--pv-accent);
239
+ cursor: pointer;
240
+ border: 3px solid var(--pv-surface);
241
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
242
+ transition: transform 100ms;
243
+ }
244
+
245
+ .pv-slider::-webkit-slider-thumb:hover {
246
+ transform: scale(1.15);
247
+ }
248
+
249
+ .pv-btn-send {
250
+ width: 100%;
251
+ padding: 1.25rem;
252
+ border-radius: 1rem;
253
+ border: none;
254
+ background: linear-gradient(135deg, var(--pv-accent), var(--pv-accent-secondary));
255
+ color: white;
256
+ font-size: 1.1rem;
257
+ font-weight: 900;
258
+ letter-spacing: 0.5px;
259
+ cursor: pointer;
260
+ box-shadow: 0 10px 25px var(--pv-accent-glow);
261
+ display: flex;
262
+ align-items: center;
263
+ justify-content: center;
264
+ gap: 0.75rem;
265
+ transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
266
+ }
267
+
268
+ .pv-btn-send:hover {
269
+ transform: translateY(-2px);
270
+ box-shadow: 0 15px 30px var(--pv-accent-glow);
271
+ }
272
+
273
+ .pv-btn-send:active {
274
+ transform: translateY(1px);
275
+ }
276
+
277
+ .pv-btn-send-icon {
278
+ width: 1.5rem;
279
+ height: 1.5rem;
280
+ }
@@ -1,35 +1,5 @@
1
- import type { HardwareToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
-
3
-
4
- import type { ProbadorVibracionMandoUI } from './ui';
5
- export type ProbadorVibracionMandoLocaleContent = ToolLocaleContent<ProbadorVibracionMandoUI>;
6
-
7
- export const probadorVibracionMando: HardwareToolEntry<ProbadorVibracionMandoUI> = {
8
- id: 'probador-vibracion-mando',
9
- icons: {
10
- bg: 'mdi:vibrate',
11
- fg: 'mdi:gamepad-variant',
12
- },
13
- i18n: {
14
- de: () => import('./i18n/de').then((m) => m.content),
15
- en: () => import('./i18n/en').then((m) => m.content),
16
- es: () => import('./i18n/es').then((m) => m.content),
17
- fr: () => import('./i18n/fr').then((m) => m.content),
18
- id: () => import('./i18n/id').then((m) => m.content),
19
- it: () => import('./i18n/it').then((m) => m.content),
20
- ja: () => import('./i18n/ja').then((m) => m.content),
21
- ko: () => import('./i18n/ko').then((m) => m.content),
22
- nl: () => import('./i18n/nl').then((m) => m.content),
23
- pl: () => import('./i18n/pl').then((m) => m.content),
24
- pt: () => import('./i18n/pt').then((m) => m.content),
25
- ru: () => import('./i18n/ru').then((m) => m.content),
26
- sv: () => import('./i18n/sv').then((m) => m.content),
27
- tr: () => import('./i18n/tr').then((m) => m.content),
28
- zh: () => import('./i18n/zh').then((m) => m.content),
29
- },
30
- };
31
-
32
-
1
+ import { probadorVibracionMando } from './entry';
2
+ export * from './entry';
33
3
  export const PROBADOR_VIBRACION_MANDO_TOOL: ToolDefinition = {
34
4
  entry: probadorVibracionMando,
35
5
  Component: () => import('./component.astro'),
@@ -17,53 +17,7 @@ const testedClass = 'tt-key-tested';
17
17
  ---
18
18
 
19
19
  <div id="keyboard-tester-root" class="tt-wrapper" data-active-class={activeClass} data-tested-class={testedClass}>
20
- <style is:global>
21
- .tt-wrapper {
22
- --tt-accent: #4f46e5;
23
- --tt-accent-hover: #4338ca;
24
- --tt-surface: #fff;
25
- --tt-surface-alt: #f1f5f9;
26
- --tt-border: #e2e8f0;
27
- --tt-text: #0f172a;
28
- --tt-text-muted: #64748b;
29
- --tt-key-bg: #fff;
30
- --tt-key-text: #64748b;
31
- --tt-key-border: #e2e8f0;
32
- --tt-key-shadow: rgba(0, 0, 0, 0.2);
33
- --tt-key-active-bg: #4f46e5;
34
- --tt-key-tested-bg: #d1fae5;
35
- --tt-key-tested-text: #059669;
36
- --tt-kb-bg: #e2e8f0;
37
- }
38
-
39
- .theme-dark .tt-wrapper {
40
- --tt-surface: #0f172a;
41
- --tt-surface-alt: #1e293b;
42
- --tt-border: #334155;
43
- --tt-text: #f1f5f9;
44
- --tt-text-muted: #94a3b8;
45
- --tt-key-bg: #334155;
46
- --tt-key-text: #cbd5e1;
47
- --tt-key-border: #475569;
48
- --tt-key-shadow: rgba(0, 0, 0, 0.5);
49
- --tt-key-active-bg: #6366f1;
50
- --tt-key-tested-bg: rgba(16, 185, 129, 0.3);
51
- --tt-key-tested-text: #6ee7b7;
52
- --tt-kb-bg: #334155;
53
- }
54
-
55
- body.is-widget .tt-wrapper {
56
- padding: 0;
57
- }
58
-
59
- body.is-widget .tt-wrapper > div {
60
- background: transparent;
61
- box-shadow: none;
62
- border: none;
63
- padding: 1rem;
64
- }
65
- </style>
66
-
20
+
67
21
  <div class="tt-container">
68
22
  <div class="tt-card">
69
23
  <div class="tt-header">
@@ -217,292 +171,7 @@ const testedClass = 'tt-key-tested';
217
171
  </div>
218
172
  </div>
219
173
 
220
- <style>
221
- .tt-wrapper {
222
- width: 100%;
223
- color: var(--tt-text);
224
- }
225
-
226
- .tt-container {
227
- max-width: 80rem;
228
- margin: 0 auto;
229
- padding: 1rem;
230
- }
231
-
232
- .tt-card {
233
- background: var(--tt-surface);
234
- border-radius: 1.5rem;
235
- padding: 2rem;
236
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
237
- border: 1px solid var(--tt-border);
238
- }
239
-
240
- .tt-header {
241
- display: flex;
242
- flex-direction: column;
243
- gap: 1rem;
244
- margin-bottom: 2rem;
245
- width: 100%;
246
- }
247
-
248
- @media (min-width: 768px) {
249
- .tt-header {
250
- flex-direction: row;
251
- justify-content: space-between;
252
- align-items: flex-start;
253
- }
254
- }
255
-
256
- .tt-header-left {
257
- flex: 1;
258
- }
259
-
260
- .tt-badge {
261
- display: inline-flex;
262
- align-items: center;
263
- gap: 0.5rem;
264
- padding: 0.25rem 0.75rem;
265
- border-radius: 9999px;
266
- background-color: rgba(79, 70, 229, 0.1);
267
- color: var(--tt-accent);
268
- font-size: 0.75rem;
269
- font-weight: 700;
270
- text-transform: uppercase;
271
- letter-spacing: 0.05em;
272
- margin-bottom: 0.5rem;
273
- }
274
-
275
- .tt-badge-icon {
276
- width: 1rem;
277
- height: 1rem;
278
- }
279
-
280
- .tt-title {
281
- font-size: 1.875rem;
282
- font-weight: 900;
283
- letter-spacing: -0.02em;
284
- margin: 0 0 0.25rem;
285
- }
286
-
287
- .tt-description {
288
- font-size: 0.9375rem;
289
- color: var(--tt-text-muted);
290
- margin: 0;
291
- }
292
-
293
- .tt-stats {
294
- display: flex;
295
- gap: 1rem;
296
- flex-wrap: wrap;
297
- }
298
-
299
- .tt-stat-box {
300
- background: var(--tt-surface-alt);
301
- padding: 1rem;
302
- border-radius: 1rem;
303
- text-align: center;
304
- min-width: 120px;
305
- }
306
-
307
- .tt-stat-label {
308
- font-size: 0.75rem;
309
- font-weight: 700;
310
- text-transform: uppercase;
311
- color: var(--tt-text-muted);
312
- letter-spacing: 0.05em;
313
- }
314
-
315
- .tt-stat-value {
316
- font-size: 2.25rem;
317
- font-weight: 900;
318
- color: var(--tt-accent);
319
- margin-top: 0.5rem;
320
- }
321
-
322
- .tt-reset-btn {
323
- padding: 1rem;
324
- background: var(--tt-surface-alt);
325
- border: none;
326
- border-radius: 1rem;
327
- cursor: pointer;
328
- color: var(--tt-text-muted);
329
- transition: all 0.2s ease;
330
- display: flex;
331
- align-items: center;
332
- justify-content: center;
333
- }
334
-
335
- .tt-reset-btn:hover {
336
- background: var(--tt-border);
337
- }
338
-
339
- .tt-reset-icon {
340
- width: 1.5rem;
341
- height: 1.5rem;
342
- }
343
-
344
- .tt-keyboard-wrapper {
345
- position: relative;
346
- width: 100%;
347
- overflow-x: auto;
348
- padding-bottom: 1rem;
349
- display: flex;
350
- justify-content: center;
351
- }
352
-
353
- .tt-keyboard {
354
- background: var(--tt-kb-bg);
355
- padding: 0.5rem;
356
- border-radius: 0.75rem;
357
- display: flex;
358
- flex-direction: column;
359
- gap: 0.25rem;
360
- user-select: none;
361
- min-width: 900px;
362
- }
363
-
364
- .tt-row {
365
- display: flex;
366
- gap: 0.25rem;
367
- }
368
-
369
- .tt-key {
370
- height: 3rem;
371
- background: var(--tt-key-bg);
372
- border-radius: 0.5rem;
373
- display: flex;
374
- align-items: center;
375
- justify-content: center;
376
- font-weight: 700;
377
- font-size: 0.75rem;
378
- color: var(--tt-key-text);
379
- border-top: 1px solid rgba(255, 255, 255, 0.3);
380
- box-shadow: 0 2px 0 var(--tt-key-shadow);
381
- transition: all 300ms ease-out;
382
- border: 1px solid var(--tt-key-border);
383
- }
384
-
385
- .tt-key-esc,
386
- .tt-key-f,
387
- .tt-key-sm {
388
- width: 3rem;
389
- }
390
-
391
- .tt-key-md {
392
- width: 4rem;
393
- }
394
-
395
- .tt-key-lg {
396
- width: 5rem;
397
- }
398
-
399
- .tt-key-xl {
400
- width: 8rem;
401
- }
402
-
403
- .tt-key-xxl {
404
- width: 18rem;
405
- }
406
-
407
- .tt-key.tt-key-active {
408
- background: var(--tt-key-active-bg);
409
- color: white;
410
- box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.2);
411
- transform: translateY(1px);
412
- border-color: var(--tt-accent);
413
- }
414
-
415
- .tt-key.tt-key-tested {
416
- background: var(--tt-key-tested-bg);
417
- color: var(--tt-key-tested-text);
418
- border-color: var(--tt-key-tested-text);
419
- }
420
-
421
- .tt-key.tt-key-releasing {
422
- background: var(--tt-key-bg);
423
- color: var(--tt-key-text);
424
- box-shadow: 0 2px 0 var(--tt-key-shadow);
425
- transform: translateY(0);
426
- border-color: var(--tt-key-border);
427
- }
428
-
429
- .tt-spacer-4 {
430
- width: 0.25rem;
431
- }
432
-
433
- .tt-spacer-8 {
434
- width: 0.5rem;
435
- }
436
-
437
- .tt-spacer-12 {
438
- width: 0.75rem;
439
- }
440
-
441
- .tt-spacer-108 {
442
- width: 6.75rem;
443
- }
444
-
445
- .tt-event-log-container {
446
- margin-top: 0.75rem;
447
- padding: 0;
448
- background: transparent;
449
- border-radius: 0;
450
- border: none;
451
- width: 100%;
452
- }
453
-
454
- .tt-event-log-header {
455
- display: none;
456
- }
457
-
458
- .tt-event-log-icon {
459
- display: none;
460
- }
461
-
462
- .tt-event-log-label {
463
- display: none;
464
- }
465
-
466
- .tt-event-log {
467
- font-size: 0.65rem;
468
- color: var(--tt-text);
469
- height: 2rem;
470
- overflow-x: auto;
471
- overflow-y: hidden;
472
- background: var(--tt-surface-alt);
473
- padding: 0.375rem;
474
- border-radius: 0.5rem;
475
- border: 1px solid var(--tt-border);
476
- display: flex;
477
- align-items: center;
478
- justify-content: flex-start;
479
- gap: 0.5rem;
480
- white-space: nowrap;
481
- width: 100%;
482
- scrollbar-width: none;
483
- }
484
-
485
- .tt-event-log::-webkit-scrollbar {
486
- display: none;
487
- }
488
-
489
- .tt-event-log div {
490
- display: inline-flex;
491
- align-items: center;
492
- justify-content: center;
493
- line-height: 1;
494
- font-weight: 600;
495
- padding: 0.25rem 0.5rem;
496
- min-width: 1.5rem;
497
- height: 1.5rem;
498
- background: var(--tt-key-bg);
499
- border: 1px solid var(--tt-key-border);
500
- border-radius: 0.375rem;
501
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
502
- flex-shrink: 0;
503
- }
504
- </style>
505
-
174
+
506
175
  <script>
507
176
  const activeClass = 'tt-key-active';
508
177
  const testedClass = 'tt-key-tested';
@@ -0,0 +1,30 @@
1
+ import type { HardwareToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+
4
+ import type { TestTecladoUI } from './ui';
5
+ export type TestTecladoLocaleContent = ToolLocaleContent<TestTecladoUI>;
6
+
7
+ export const testTeclado: HardwareToolEntry<TestTecladoUI> = {
8
+ id: 'test-teclado',
9
+ icons: {
10
+ bg: 'mdi:keyboard-variant',
11
+ fg: 'mdi:keyboard-settings',
12
+ },
13
+ i18n: {
14
+ de: () => import('./i18n/de').then((m) => m.content),
15
+ en: () => import('./i18n/en').then((m) => m.content),
16
+ es: () => import('./i18n/es').then((m) => m.content),
17
+ fr: () => import('./i18n/fr').then((m) => m.content),
18
+ id: () => import('./i18n/id').then((m) => m.content),
19
+ it: () => import('./i18n/it').then((m) => m.content),
20
+ ja: () => import('./i18n/ja').then((m) => m.content),
21
+ ko: () => import('./i18n/ko').then((m) => m.content),
22
+ nl: () => import('./i18n/nl').then((m) => m.content),
23
+ pl: () => import('./i18n/pl').then((m) => m.content),
24
+ pt: () => import('./i18n/pt').then((m) => m.content),
25
+ ru: () => import('./i18n/ru').then((m) => m.content),
26
+ sv: () => import('./i18n/sv').then((m) => m.content),
27
+ tr: () => import('./i18n/tr').then((m) => m.content),
28
+ zh: () => import('./i18n/zh').then((m) => m.content),
29
+ },
30
+ };