@jjlmoya/utils-home 1.17.0 → 1.23.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 +1 -1
- package/src/category/i18n/de.ts +10 -10
- package/src/category/i18n/en.ts +8 -8
- package/src/category/i18n/es.ts +2 -2
- package/src/category/i18n/fr.ts +15 -15
- package/src/category/i18n/id.ts +8 -8
- package/src/category/i18n/it.ts +7 -7
- package/src/category/i18n/nl.ts +8 -8
- package/src/category/i18n/pl.ts +10 -10
- package/src/category/i18n/pt.ts +8 -8
- package/src/category/i18n/ru.ts +10 -10
- package/src/category/i18n/sv.ts +8 -8
- package/src/category/i18n/tr.ts +4 -4
- package/src/category/i18n/zh.ts +8 -8
- package/src/entries.ts +4 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/dewPointCalculator/bibliography.ts +2 -2
- package/src/tool/dewPointCalculator/i18n/de.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/en.ts +6 -6
- package/src/tool/dewPointCalculator/i18n/es.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/fr.ts +6 -6
- package/src/tool/dewPointCalculator/i18n/id.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/it.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/ja.ts +4 -4
- package/src/tool/dewPointCalculator/i18n/ko.ts +4 -4
- package/src/tool/dewPointCalculator/i18n/nl.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/pl.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/pt.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/ru.ts +11 -11
- package/src/tool/dewPointCalculator/i18n/sv.ts +5 -5
- package/src/tool/dewPointCalculator/i18n/tr.ts +4 -4
- package/src/tool/dewPointCalculator/i18n/zh.ts +5 -5
- package/src/tool/heatingComparator/i18n/de.ts +8 -8
- package/src/tool/heatingComparator/i18n/en.ts +1 -1
- package/src/tool/heatingComparator/i18n/es.ts +1 -1
- package/src/tool/heatingComparator/i18n/fr.ts +7 -7
- package/src/tool/heatingComparator/i18n/id.ts +1 -1
- package/src/tool/heatingComparator/i18n/it.ts +1 -1
- package/src/tool/heatingComparator/i18n/nl.ts +1 -1
- package/src/tool/heatingComparator/i18n/pl.ts +1 -1
- package/src/tool/heatingComparator/i18n/pt.ts +1 -1
- package/src/tool/heatingComparator/i18n/ru.ts +12 -12
- package/src/tool/heatingComparator/i18n/sv.ts +4 -4
- package/src/tool/heatingComparator/i18n/zh.ts +6 -6
- package/src/tool/ledSavingCalculator/bibliography.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/de.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/en.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/es.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/fr.ts +8 -8
- package/src/tool/ledSavingCalculator/i18n/id.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/it.ts +4 -4
- package/src/tool/ledSavingCalculator/i18n/ja.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/ko.ts +2 -2
- package/src/tool/ledSavingCalculator/i18n/nl.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/pl.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/pt.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/ru.ts +6 -6
- package/src/tool/ledSavingCalculator/i18n/sv.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/tr.ts +3 -3
- package/src/tool/ledSavingCalculator/i18n/zh.ts +4 -4
- package/src/tool/projectorCalculator/bibliography.ts +3 -3
- package/src/tool/projectorCalculator/i18n/de.ts +2 -2
- package/src/tool/projectorCalculator/i18n/en.ts +1 -1
- package/src/tool/projectorCalculator/i18n/es.ts +2 -2
- package/src/tool/projectorCalculator/i18n/fr.ts +4 -4
- package/src/tool/projectorCalculator/i18n/id.ts +2 -2
- package/src/tool/projectorCalculator/i18n/it.ts +2 -2
- package/src/tool/projectorCalculator/i18n/ja.ts +2 -2
- package/src/tool/projectorCalculator/i18n/ko.ts +2 -2
- package/src/tool/projectorCalculator/i18n/nl.ts +2 -2
- package/src/tool/projectorCalculator/i18n/pl.ts +3 -3
- package/src/tool/projectorCalculator/i18n/pt.ts +2 -2
- package/src/tool/projectorCalculator/i18n/ru.ts +5 -5
- package/src/tool/projectorCalculator/i18n/sv.ts +2 -2
- package/src/tool/projectorCalculator/i18n/tr.ts +2 -2
- package/src/tool/projectorCalculator/i18n/zh.ts +4 -4
- package/src/tool/qrGenerator/bibliography.ts +1 -1
- package/src/tool/qrGenerator/i18n/en.ts +1 -1
- package/src/tool/qrGenerator/i18n/fr.ts +1 -1
- package/src/tool/solarCalculator/bibliography.ts +2 -2
- package/src/tool/solarCalculator/i18n/de.ts +2 -2
- package/src/tool/solarCalculator/i18n/en.ts +5 -5
- package/src/tool/solarCalculator/i18n/es.ts +3 -3
- package/src/tool/solarCalculator/i18n/fr.ts +6 -6
- package/src/tool/solarCalculator/i18n/id.ts +2 -2
- package/src/tool/solarCalculator/i18n/it.ts +2 -2
- package/src/tool/solarCalculator/i18n/ja.ts +2 -2
- package/src/tool/solarCalculator/i18n/ko.ts +2 -2
- package/src/tool/solarCalculator/i18n/nl.ts +2 -2
- package/src/tool/solarCalculator/i18n/pl.ts +3 -3
- package/src/tool/solarCalculator/i18n/pt.ts +2 -2
- package/src/tool/solarCalculator/i18n/ru.ts +5 -5
- package/src/tool/solarCalculator/i18n/sv.ts +2 -2
- package/src/tool/solarCalculator/i18n/tr.ts +2 -2
- package/src/tool/solarCalculator/i18n/zh.ts +3 -3
- package/src/tool/tariffComparator/bibliography.ts +1 -1
- package/src/tool/tariffComparator/i18n/en.ts +3 -3
- package/src/tool/tariffComparator/i18n/es.ts +3 -3
- package/src/tool/tariffComparator/i18n/fr.ts +6 -6
- package/src/tool/tariffComparator/i18n/pl.ts +1 -1
- package/src/tool/tariffComparator/i18n/zh.ts +1 -1
- package/src/tool/wifiRangeSimulator/bibliography.astro +14 -0
- package/src/tool/wifiRangeSimulator/bibliography.ts +14 -0
- package/src/tool/wifiRangeSimulator/component.astro +170 -0
- package/src/tool/wifiRangeSimulator/entry.ts +29 -0
- package/src/tool/wifiRangeSimulator/i18n/de.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/en.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/es.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/fr.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/id.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/it.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ja.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ko.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/nl.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/pl.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/pt.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/ru.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/sv.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/tr.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n/zh.ts +477 -0
- package/src/tool/wifiRangeSimulator/i18n-utils.ts +14 -0
- package/src/tool/wifiRangeSimulator/index.ts +8 -0
- package/src/tool/wifiRangeSimulator/logic.ts +220 -0
- package/src/tool/wifiRangeSimulator/seo.astro +15 -0
- package/src/tool/wifiRangeSimulator/sketch-actions.ts +168 -0
- package/src/tool/wifiRangeSimulator/sketch-events.ts +138 -0
- package/src/tool/wifiRangeSimulator/sketch-render-dash.ts +170 -0
- package/src/tool/wifiRangeSimulator/sketch-render-device.ts +42 -0
- package/src/tool/wifiRangeSimulator/sketch-render.ts +155 -0
- package/src/tool/wifiRangeSimulator/sketch-state.ts +186 -0
- package/src/tool/wifiRangeSimulator/sketch.ts +100 -0
- package/src/tool/wifiRangeSimulator/ui.ts +69 -0
- package/src/tool/wifiRangeSimulator/wifi-range-simulator.css +583 -0
- package/src/tools.ts +2 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { WifiRangeSimulatorUI } from './ui';
|
|
3
|
+
import type { Point } from './logic';
|
|
4
|
+
import { calculateSignalFromSketch, getVerdictColor } from './logic';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
ui?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { ui = {} } = Astro.props;
|
|
11
|
+
const wUI = ui as WifiRangeSimulatorUI;
|
|
12
|
+
|
|
13
|
+
const circumference = 2 * Math.PI * 70;
|
|
14
|
+
const initialRouter: Point = { x: 150, y: 250 };
|
|
15
|
+
const initialDevice: Point = { x: 400, y: 250 };
|
|
16
|
+
const initialResult = calculateSignalFromSketch(initialRouter, initialDevice, [], []);
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
<div class="sketch-wrapper">
|
|
20
|
+
<div class="sketch-card">
|
|
21
|
+
<div class="sketch-toolbar" id="sketch-toolbar">
|
|
22
|
+
<div class="sketch-tool-group">
|
|
23
|
+
<button class="sketch-tool active" data-tool="select" type="button">
|
|
24
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z"/></svg>
|
|
25
|
+
<span>{wUI.labelMove}</span>
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="sketch-tool-sep" />
|
|
29
|
+
<div class="sketch-tool-group">
|
|
30
|
+
<span class="sketch-tool-section-label">{wUI.labelWalls}</span>
|
|
31
|
+
<button class="sketch-tool" data-tool="drywall" type="button"><span class="sketch-tool-swatch" style="background:#e7e5e4" /><span>{wUI.labelDrywall}</span></button>
|
|
32
|
+
<button class="sketch-tool" data-tool="brick" type="button"><span class="sketch-tool-swatch" style="background:#a16207" /><span>{wUI.labelBrick}</span></button>
|
|
33
|
+
<button class="sketch-tool" data-tool="concrete" type="button"><span class="sketch-tool-swatch" style="background:#57534e" /><span>{wUI.labelConcrete}</span></button>
|
|
34
|
+
<button class="sketch-tool" data-tool="stoneWall" type="button"><span class="sketch-tool-swatch" style="background:#44403c" /><span>{wUI.labelStone}</span></button>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="sketch-tool-sep" />
|
|
37
|
+
<div class="sketch-tool-group">
|
|
38
|
+
<span class="sketch-tool-section-label">{wUI.labelObjects}</span>
|
|
39
|
+
<button class="sketch-tool" data-tool="woodDoor" type="button"><span class="sketch-tool-swatch" style="background:#92400e" /><span>{wUI.labelWood}</span></button>
|
|
40
|
+
<button class="sketch-tool" data-tool="metalDoor" type="button"><span class="sketch-tool-swatch" style="background:#334155" /><span>{wUI.labelMetal}</span></button>
|
|
41
|
+
<button class="sketch-tool" data-tool="window" type="button"><span class="sketch-tool-swatch" style="background:#bfdbfe" /><span>{wUI.labelWindow}</span></button>
|
|
42
|
+
<button class="sketch-tool" data-tool="fridge" type="button"><span class="sketch-tool-swatch" style="background:#94a3b8" /><span>{wUI.labelFridge}</span></button>
|
|
43
|
+
<button class="sketch-tool" data-tool="aquarium" type="button"><span class="sketch-tool-swatch" style="background:#0ea5e9" /><span>{wUI.labelFish}</span></button>
|
|
44
|
+
<button class="sketch-tool" data-tool="microwave" type="button"><span class="sketch-tool-swatch" style="background:#475569" /><span>{wUI.labelMicro}</span></button>
|
|
45
|
+
<button class="sketch-tool" data-tool="mirror" type="button"><span class="sketch-tool-swatch" style="background:#c0c0c0" /><span>{wUI.labelMirror}</span></button>
|
|
46
|
+
<button class="sketch-tool" data-tool="furniture" type="button"><span class="sketch-tool-swatch" style="background:#78350f" /><span>{wUI.labelFurn}</span></button>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="sketch-tool-sep" />
|
|
49
|
+
<div class="sketch-tool-group">
|
|
50
|
+
<span class="sketch-tool-section-label">{wUI.labelActions}</span>
|
|
51
|
+
<button class="sketch-tool" data-tool="undo" type="button">
|
|
52
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7v6h6"/><path d="M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"/></svg>
|
|
53
|
+
<span>{wUI.labelUndo}</span>
|
|
54
|
+
</button>
|
|
55
|
+
<button class="sketch-tool" data-tool="addDevice" type="button">
|
|
56
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="4" width="20" height="14" rx="2"/><line x1="12" y1="8" x2="12" y2="14"/><line x1="9" y1="11" x2="15" y2="11"/></svg>
|
|
57
|
+
<span>{wUI.labelAddDevice}</span>
|
|
58
|
+
</button>
|
|
59
|
+
<button class="sketch-tool sketch-tool-danger" data-tool="clearWalls" type="button">
|
|
60
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>
|
|
61
|
+
<span>{wUI.labelClearWalls}</span>
|
|
62
|
+
</button>
|
|
63
|
+
<button class="sketch-tool sketch-tool-danger" data-tool="clearObjects" type="button">
|
|
64
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>
|
|
65
|
+
<span>{wUI.labelClearObjects}</span>
|
|
66
|
+
</button>
|
|
67
|
+
<button class="sketch-tool sketch-tool-danger" data-tool="clear" type="button">
|
|
68
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"/><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>
|
|
69
|
+
<span>{wUI.labelClearAll}</span>
|
|
70
|
+
</button>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<div class="sketch-body">
|
|
75
|
+
<div class="sketch-canvas-wrap" id="sketch-canvas-wrap">
|
|
76
|
+
<div class="sketch-world" id="sketch-world">
|
|
77
|
+
<svg class="sketch-svg" id="sketch-svg" viewBox="0 0 800 500" width="800" height="500">
|
|
78
|
+
<defs>
|
|
79
|
+
<pattern id="sketch-grid" width="20" height="20" patternUnits="userSpaceOnUse">
|
|
80
|
+
<path d="M 20 0 L 0 0 0 20" fill="none" stroke="var(--sketch-grid-color)" stroke-width="0.5" />
|
|
81
|
+
</pattern>
|
|
82
|
+
</defs>
|
|
83
|
+
<rect width="800" height="500" fill="url(#sketch-grid)" />
|
|
84
|
+
<g id="sketch-walls-layer" />
|
|
85
|
+
<g id="sketch-objs-layer" />
|
|
86
|
+
<g id="sketch-rays-layer" style="pointer-events:none" />
|
|
87
|
+
<g id="sketch-router-group" transform={`translate(${initialRouter.x}, ${initialRouter.y})`} style="cursor:grab">
|
|
88
|
+
<circle id="sketch-router-glow" cx="0" cy="0" r="28" fill="none" stroke={getVerdictColor(initialResult.verdict)} stroke-width="2" opacity="0.3" />
|
|
89
|
+
<rect x="-16" y="-16" width="32" height="32" rx="8" fill="var(--bg-surface)" stroke="var(--border-color)" stroke-width="1" />
|
|
90
|
+
<svg x="-10" y="-10" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke={getVerdictColor(initialResult.verdict)} stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
91
|
+
<path d="M12 20h.01" /><path d="M2 8.82a15 15 0 0 1 20 0" /><path d="M5 12.859a10 10 0 0 1 14 0" /><path d="M8.5 16.429a5 5 0 0 1 7 0" />
|
|
92
|
+
</svg>
|
|
93
|
+
<text x="0" y="28" text-anchor="middle" fill="var(--text-muted)" font-size="8" font-weight="700">{wUI.labelRouter}</text>
|
|
94
|
+
</g>
|
|
95
|
+
<line id="sketch-draw-line" x1="0" y1="0" x2="0" y2="0" stroke="#0ea5e9" stroke-width="3" stroke-dasharray="6 4" opacity="0" pointer-events="none" />
|
|
96
|
+
</svg>
|
|
97
|
+
</div>
|
|
98
|
+
<div class="sketch-zoom-controls">
|
|
99
|
+
<button class="sketch-zoom-btn" data-tool="zoomIn" type="button" title={wUI.labelZoomIn}>+</button>
|
|
100
|
+
<button class="sketch-zoom-btn" data-tool="zoomOut" type="button" title={wUI.labelZoomOut}>−</button>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="sketch-scale-bar" id="sketch-scale-bar">
|
|
103
|
+
<div class="sketch-scale-track" id="sketch-scale-track">
|
|
104
|
+
<div class="sketch-scale-segment dark" />
|
|
105
|
+
<div class="sketch-scale-segment light" />
|
|
106
|
+
<div class="sketch-scale-segment dark" />
|
|
107
|
+
<div class="sketch-scale-segment light" />
|
|
108
|
+
<div class="sketch-scale-segment dark" />
|
|
109
|
+
</div>
|
|
110
|
+
<div class="sketch-scale-labels">
|
|
111
|
+
<span class="sketch-scale-label">0</span>
|
|
112
|
+
<span class="sketch-scale-label end">{wUI.labelScaleMeters}</span>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<div class="sketch-panel">
|
|
118
|
+
<div class="sketch-avg-label">{wUI.labelAverageSignal}</div>
|
|
119
|
+
<div class="sketch-ring" id="sketch-ring">
|
|
120
|
+
<svg viewBox="0 0 160 160" width="120" height="120">
|
|
121
|
+
<circle class="sketch-ring-bg" cx="80" cy="80" r="70" />
|
|
122
|
+
<circle
|
|
123
|
+
class="sketch-ring-fill"
|
|
124
|
+
id="sketch-ring-fill"
|
|
125
|
+
cx="80"
|
|
126
|
+
cy="80"
|
|
127
|
+
r="70"
|
|
128
|
+
stroke-dasharray={circumference}
|
|
129
|
+
stroke-dashoffset={circumference - (circumference * initialResult.strengthPercent) / 100}
|
|
130
|
+
stroke={getVerdictColor(initialResult.verdict)}
|
|
131
|
+
/>
|
|
132
|
+
</svg>
|
|
133
|
+
<div class="sketch-ring-inner">
|
|
134
|
+
<div class="sketch-ring-pct" id="sketch-ring-pct" style={`color:${getVerdictColor(initialResult.verdict)}`}>{initialResult.strengthPercent}%</div>
|
|
135
|
+
<div class="sketch-ring-label">{wUI.labelSignalStrength}</div>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="sketch-range"><span class="sketch-range-val" id="sketch-range-val">{initialResult.effectiveRange} {wUI.labelMeters}</span></div>
|
|
139
|
+
<div class="sketch-streams">
|
|
140
|
+
<span class="sketch-streams-title">{wUI.labelStreamingVerdict}</span>
|
|
141
|
+
{[
|
|
142
|
+
{ key: '4kStreaming', label: wUI.label4kStreaming },
|
|
143
|
+
{ key: 'onlineGaming', label: wUI.labelOnlineGaming },
|
|
144
|
+
{ key: 'videoCalls', label: wUI.labelVideoCalls },
|
|
145
|
+
{ key: 'basicBrowsing', label: wUI.labelBasicBrowsing },
|
|
146
|
+
].map((item) => (
|
|
147
|
+
<div class="sketch-stream-row">
|
|
148
|
+
<span class="sketch-stream-name">{item.label}</span>
|
|
149
|
+
<span class="sketch-stream-badge" id={`sketch-badge-${item.key}`}>{initialResult.streamingVerdict[item.key]}</span>
|
|
150
|
+
</div>
|
|
151
|
+
))}
|
|
152
|
+
</div>
|
|
153
|
+
<div class="sketch-device-panel" id="sketch-device-panel" />
|
|
154
|
+
<div class="sketch-tip-area" id="sketch-tip-area" />
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<div class="sketch-hint" id="sketch-hint">{wUI.hintText}</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
162
|
+
<script define:vars={{ ui }} is:inline>
|
|
163
|
+
window.__wifiUI = ui;
|
|
164
|
+
</script>
|
|
165
|
+
|
|
166
|
+
<script>
|
|
167
|
+
import { initSketch } from './sketch';
|
|
168
|
+
document.addEventListener('astro:page-load', initSketch);
|
|
169
|
+
initSketch();
|
|
170
|
+
</script>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { HomeToolEntry, ToolLocaleContent } from '../../types';
|
|
2
|
+
import type { WifiRangeSimulatorUI } from './ui';
|
|
3
|
+
|
|
4
|
+
export type WifiRangeSimulatorLocaleContent = ToolLocaleContent<WifiRangeSimulatorUI>;
|
|
5
|
+
|
|
6
|
+
export const wifiRangeSimulator: HomeToolEntry<WifiRangeSimulatorUI> = {
|
|
7
|
+
id: 'wifi-range-simulator',
|
|
8
|
+
icons: {
|
|
9
|
+
bg: 'mdi:router-wireless',
|
|
10
|
+
fg: 'mdi:wifi',
|
|
11
|
+
},
|
|
12
|
+
i18n: {
|
|
13
|
+
de: async () => (await import('./i18n/de')).content,
|
|
14
|
+
en: async () => (await import('./i18n/en')).content,
|
|
15
|
+
es: async () => (await import('./i18n/es')).content,
|
|
16
|
+
fr: async () => (await import('./i18n/fr')).content,
|
|
17
|
+
id: async () => (await import('./i18n/id')).content,
|
|
18
|
+
it: async () => (await import('./i18n/it')).content,
|
|
19
|
+
ja: async () => (await import('./i18n/ja')).content,
|
|
20
|
+
ko: async () => (await import('./i18n/ko')).content,
|
|
21
|
+
nl: async () => (await import('./i18n/nl')).content,
|
|
22
|
+
pl: async () => (await import('./i18n/pl')).content,
|
|
23
|
+
pt: async () => (await import('./i18n/pt')).content,
|
|
24
|
+
ru: async () => (await import('./i18n/ru')).content,
|
|
25
|
+
sv: async () => (await import('./i18n/sv')).content,
|
|
26
|
+
tr: async () => (await import('./i18n/tr')).content,
|
|
27
|
+
zh: async () => (await import('./i18n/zh')).content,
|
|
28
|
+
},
|
|
29
|
+
};
|