react-native-maplibre-lite 0.1.9 → 0.2.1
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/README.md +92 -6
- package/lib/module/components/MapView.js +167 -48
- package/lib/module/components/MapView.js.map +1 -1
- package/lib/module/components/NavigatorHud.js +152 -0
- package/lib/module/components/NavigatorHud.js.map +1 -0
- package/lib/module/components/NavigatorRecenterButton.js +48 -0
- package/lib/module/components/NavigatorRecenterButton.js.map +1 -0
- package/lib/module/components/NavigatorVoiceControl.js +173 -0
- package/lib/module/components/NavigatorVoiceControl.js.map +1 -0
- package/lib/module/components/navigatorChromeTheme.js +98 -0
- package/lib/module/components/navigatorChromeTheme.js.map +1 -0
- package/lib/module/components/navigatorManeuverIcon.js +210 -0
- package/lib/module/components/navigatorManeuverIcon.js.map +1 -0
- package/lib/module/components/navigatorVoiceCatalog.js +225 -0
- package/lib/module/components/navigatorVoiceCatalog.js.map +1 -0
- package/lib/module/components/navigatorVoiceKeys.js +14 -0
- package/lib/module/components/navigatorVoiceKeys.js.map +1 -0
- package/lib/module/components/navigatorVoicePlayer.js +100 -0
- package/lib/module/components/navigatorVoicePlayer.js.map +1 -0
- package/lib/module/components/navigatorVoiceStrings.js +31 -0
- package/lib/module/components/navigatorVoiceStrings.js.map +1 -0
- package/lib/module/components/types.js +47 -0
- package/lib/module/components/types.js.map +1 -1
- package/lib/module/components/useNavigatorVoice.js +78 -0
- package/lib/module/components/useNavigatorVoice.js.map +1 -0
- package/lib/module/components/utils.js +26 -0
- package/lib/module/components/utils.js.map +1 -1
- package/lib/module/components/webMapBuild.js +1 -1
- package/lib/module/components/webMapBuild.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/components/MapView.d.ts +15 -2
- package/lib/typescript/src/components/MapView.d.ts.map +1 -1
- package/lib/typescript/src/components/NavigatorHud.d.ts +13 -0
- package/lib/typescript/src/components/NavigatorHud.d.ts.map +1 -0
- package/lib/typescript/src/components/NavigatorRecenterButton.d.ts +11 -0
- package/lib/typescript/src/components/NavigatorRecenterButton.d.ts.map +1 -0
- package/lib/typescript/src/components/NavigatorVoiceControl.d.ts +20 -0
- package/lib/typescript/src/components/NavigatorVoiceControl.d.ts.map +1 -0
- package/lib/typescript/src/components/navigatorChromeTheme.d.ts +19 -0
- package/lib/typescript/src/components/navigatorChromeTheme.d.ts.map +1 -0
- package/lib/typescript/src/components/navigatorManeuverIcon.d.ts +20 -0
- package/lib/typescript/src/components/navigatorManeuverIcon.d.ts.map +1 -0
- package/lib/typescript/src/components/navigatorVoiceCatalog.d.ts +50 -0
- package/lib/typescript/src/components/navigatorVoiceCatalog.d.ts.map +1 -0
- package/lib/typescript/src/components/navigatorVoiceKeys.d.ts +10 -0
- package/lib/typescript/src/components/navigatorVoiceKeys.d.ts.map +1 -0
- package/lib/typescript/src/components/navigatorVoicePlayer.d.ts +15 -0
- package/lib/typescript/src/components/navigatorVoicePlayer.d.ts.map +1 -0
- package/lib/typescript/src/components/navigatorVoiceStrings.d.ts +19 -0
- package/lib/typescript/src/components/navigatorVoiceStrings.d.ts.map +1 -0
- package/lib/typescript/src/components/types.d.ts +205 -12
- package/lib/typescript/src/components/types.d.ts.map +1 -1
- package/lib/typescript/src/components/useNavigatorVoice.d.ts +20 -0
- package/lib/typescript/src/components/useNavigatorVoice.d.ts.map +1 -0
- package/lib/typescript/src/components/utils.d.ts +9 -0
- package/lib/typescript/src/components/utils.d.ts.map +1 -1
- package/lib/typescript/src/components/webMapBuild.d.ts +1 -1
- package/lib/typescript/src/components/webMapBuild.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +16 -7
- package/resources/README.md +62 -0
- package/resources/map.html +797 -0
- package/src/components/MapView.tsx +209 -58
- package/src/components/NavigatorHud.tsx +166 -0
- package/src/components/NavigatorRecenterButton.tsx +45 -0
- package/src/components/NavigatorVoiceControl.tsx +198 -0
- package/src/components/navigatorChromeTheme.ts +118 -0
- package/src/components/navigatorManeuverIcon.tsx +177 -0
- package/src/components/navigatorVoiceCatalog.ts +275 -0
- package/src/components/navigatorVoiceKeys.ts +132 -0
- package/src/components/navigatorVoicePlayer.tsx +126 -0
- package/src/components/navigatorVoiceStrings.ts +42 -0
- package/src/components/types.ts +198 -16
- package/src/components/useNavigatorVoice.ts +96 -0
- package/src/components/utils.ts +28 -0
- package/src/components/webMapBuild.ts +1 -1
- package/src/index.tsx +19 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Svg, { Circle, G, Path } from 'react-native-svg';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* SVG-иконка манёвра навигатора. Порт `getSignIcon` из веб-части
|
|
7
|
+
* (`webProject/src/map/navigator.ts`) на `react-native-svg`.
|
|
8
|
+
*/
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
export function NavigatorManeuverIcon({
|
|
11
|
+
sign,
|
|
12
|
+
color,
|
|
13
|
+
size = 32
|
|
14
|
+
}) {
|
|
15
|
+
const stroke = color;
|
|
16
|
+
const arrow = rotation => /*#__PURE__*/_jsx(Svg, {
|
|
17
|
+
width: size,
|
|
18
|
+
height: size,
|
|
19
|
+
viewBox: "0 0 24 24",
|
|
20
|
+
fill: "none",
|
|
21
|
+
children: /*#__PURE__*/_jsxs(G, {
|
|
22
|
+
rotation: rotation,
|
|
23
|
+
origin: "12, 12",
|
|
24
|
+
children: [/*#__PURE__*/_jsx(Path, {
|
|
25
|
+
d: "M12 21 V5",
|
|
26
|
+
stroke: stroke,
|
|
27
|
+
strokeWidth: 2.4,
|
|
28
|
+
strokeLinecap: "round",
|
|
29
|
+
strokeLinejoin: "round"
|
|
30
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
31
|
+
d: "M5 12 L12 5 L19 12",
|
|
32
|
+
stroke: stroke,
|
|
33
|
+
strokeWidth: 2.4,
|
|
34
|
+
strokeLinecap: "round",
|
|
35
|
+
strokeLinejoin: "round"
|
|
36
|
+
})]
|
|
37
|
+
})
|
|
38
|
+
});
|
|
39
|
+
switch (sign) {
|
|
40
|
+
case -3:
|
|
41
|
+
return arrow(-135);
|
|
42
|
+
case -2:
|
|
43
|
+
return arrow(-90);
|
|
44
|
+
case -1:
|
|
45
|
+
return arrow(-45);
|
|
46
|
+
case 0:
|
|
47
|
+
return arrow(0);
|
|
48
|
+
case 1:
|
|
49
|
+
return arrow(45);
|
|
50
|
+
case 2:
|
|
51
|
+
return arrow(90);
|
|
52
|
+
case 3:
|
|
53
|
+
return arrow(135);
|
|
54
|
+
case 4:
|
|
55
|
+
return /*#__PURE__*/_jsxs(Svg, {
|
|
56
|
+
width: size,
|
|
57
|
+
height: size,
|
|
58
|
+
viewBox: "0 0 24 24",
|
|
59
|
+
fill: "none",
|
|
60
|
+
children: [/*#__PURE__*/_jsx(Circle, {
|
|
61
|
+
cx: 12,
|
|
62
|
+
cy: 12,
|
|
63
|
+
r: 9,
|
|
64
|
+
stroke: stroke,
|
|
65
|
+
strokeWidth: 2.2
|
|
66
|
+
}), /*#__PURE__*/_jsx(Circle, {
|
|
67
|
+
cx: 12,
|
|
68
|
+
cy: 12,
|
|
69
|
+
r: 3,
|
|
70
|
+
fill: stroke
|
|
71
|
+
})]
|
|
72
|
+
});
|
|
73
|
+
case 5:
|
|
74
|
+
return /*#__PURE__*/_jsxs(Svg, {
|
|
75
|
+
width: size,
|
|
76
|
+
height: size,
|
|
77
|
+
viewBox: "0 0 24 24",
|
|
78
|
+
fill: "none",
|
|
79
|
+
children: [/*#__PURE__*/_jsx(Circle, {
|
|
80
|
+
cx: 12,
|
|
81
|
+
cy: 12,
|
|
82
|
+
r: 4,
|
|
83
|
+
stroke: stroke,
|
|
84
|
+
strokeWidth: 2.2
|
|
85
|
+
}), /*#__PURE__*/_jsx(Circle, {
|
|
86
|
+
cx: 12,
|
|
87
|
+
cy: 12,
|
|
88
|
+
r: 9,
|
|
89
|
+
stroke: stroke,
|
|
90
|
+
strokeWidth: 2.2
|
|
91
|
+
})]
|
|
92
|
+
});
|
|
93
|
+
case 6:
|
|
94
|
+
case -6:
|
|
95
|
+
return /*#__PURE__*/_jsxs(Svg, {
|
|
96
|
+
width: size,
|
|
97
|
+
height: size,
|
|
98
|
+
viewBox: "0 0 24 24",
|
|
99
|
+
fill: "none",
|
|
100
|
+
children: [/*#__PURE__*/_jsx(Circle, {
|
|
101
|
+
cx: 12,
|
|
102
|
+
cy: 12,
|
|
103
|
+
r: 6,
|
|
104
|
+
stroke: stroke,
|
|
105
|
+
strokeWidth: 2.2
|
|
106
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
107
|
+
d: "M12 18 V21",
|
|
108
|
+
stroke: stroke,
|
|
109
|
+
strokeWidth: 2.2,
|
|
110
|
+
strokeLinecap: "round",
|
|
111
|
+
strokeLinejoin: "round"
|
|
112
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
113
|
+
d: "M9 21 H15",
|
|
114
|
+
stroke: stroke,
|
|
115
|
+
strokeWidth: 2.2,
|
|
116
|
+
strokeLinecap: "round",
|
|
117
|
+
strokeLinejoin: "round"
|
|
118
|
+
})]
|
|
119
|
+
});
|
|
120
|
+
case -8:
|
|
121
|
+
case 8:
|
|
122
|
+
case -98:
|
|
123
|
+
return /*#__PURE__*/_jsxs(Svg, {
|
|
124
|
+
width: size,
|
|
125
|
+
height: size,
|
|
126
|
+
viewBox: "0 0 24 24",
|
|
127
|
+
fill: "none",
|
|
128
|
+
children: [/*#__PURE__*/_jsx(Path, {
|
|
129
|
+
d: "M8 20 V11 a5 5 0 0 1 10 0 V14",
|
|
130
|
+
stroke: stroke,
|
|
131
|
+
strokeWidth: 2.4,
|
|
132
|
+
strokeLinecap: "round",
|
|
133
|
+
strokeLinejoin: "round"
|
|
134
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
135
|
+
d: "M14 18 L18 14 L22 18",
|
|
136
|
+
stroke: stroke,
|
|
137
|
+
strokeWidth: 2.4,
|
|
138
|
+
strokeLinecap: "round",
|
|
139
|
+
strokeLinejoin: "round"
|
|
140
|
+
})]
|
|
141
|
+
});
|
|
142
|
+
default:
|
|
143
|
+
return arrow(0);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Иконка кнопки «вернуть камеру на положение» (порт из веб recenter FAB). */
|
|
148
|
+
export function NavigatorRecenterIcon({
|
|
149
|
+
color,
|
|
150
|
+
size = 28
|
|
151
|
+
}) {
|
|
152
|
+
return /*#__PURE__*/_jsxs(Svg, {
|
|
153
|
+
width: size,
|
|
154
|
+
height: size,
|
|
155
|
+
viewBox: "0 0 24 24",
|
|
156
|
+
fill: "none",
|
|
157
|
+
children: [/*#__PURE__*/_jsx(Circle, {
|
|
158
|
+
cx: 12,
|
|
159
|
+
cy: 12,
|
|
160
|
+
r: 8.5,
|
|
161
|
+
stroke: color,
|
|
162
|
+
strokeWidth: 2.2
|
|
163
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
164
|
+
d: "M12 15.5 V8.5",
|
|
165
|
+
stroke: color,
|
|
166
|
+
strokeWidth: 2.2,
|
|
167
|
+
strokeLinecap: "round",
|
|
168
|
+
strokeLinejoin: "round"
|
|
169
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
170
|
+
d: "M9.25 11.25 L12 8.5 L14.75 11.25",
|
|
171
|
+
stroke: color,
|
|
172
|
+
strokeWidth: 2.2,
|
|
173
|
+
strokeLinecap: "round",
|
|
174
|
+
strokeLinejoin: "round"
|
|
175
|
+
})]
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** Иконка кнопки выбора голоса озвучки (порт из веб voice FAB). */
|
|
180
|
+
export function NavigatorVoiceIcon({
|
|
181
|
+
color,
|
|
182
|
+
size = 26
|
|
183
|
+
}) {
|
|
184
|
+
return /*#__PURE__*/_jsxs(Svg, {
|
|
185
|
+
width: size,
|
|
186
|
+
height: size,
|
|
187
|
+
viewBox: "0 0 24 24",
|
|
188
|
+
fill: "none",
|
|
189
|
+
children: [/*#__PURE__*/_jsx(Path, {
|
|
190
|
+
d: "M11 5 L6 9 L2 9 L2 15 L6 15 L11 19 Z",
|
|
191
|
+
stroke: color,
|
|
192
|
+
strokeWidth: 2,
|
|
193
|
+
strokeLinecap: "round",
|
|
194
|
+
strokeLinejoin: "round"
|
|
195
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
196
|
+
d: "M15.54 8.46a5 5 0 0 1 0 7.07",
|
|
197
|
+
stroke: color,
|
|
198
|
+
strokeWidth: 2,
|
|
199
|
+
strokeLinecap: "round",
|
|
200
|
+
strokeLinejoin: "round"
|
|
201
|
+
}), /*#__PURE__*/_jsx(Path, {
|
|
202
|
+
d: "M19.07 4.93a10 10 0 0 1 0 14.14",
|
|
203
|
+
stroke: color,
|
|
204
|
+
strokeWidth: 2,
|
|
205
|
+
strokeLinecap: "round",
|
|
206
|
+
strokeLinejoin: "round"
|
|
207
|
+
})]
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=navigatorManeuverIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Svg","Circle","G","Path","jsx","_jsx","jsxs","_jsxs","NavigatorManeuverIcon","sign","color","size","stroke","arrow","rotation","width","height","viewBox","fill","children","origin","d","strokeWidth","strokeLinecap","strokeLinejoin","cx","cy","r","NavigatorRecenterIcon","NavigatorVoiceIcon"],"sourceRoot":"../../../src","sources":["components/navigatorManeuverIcon.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
4
|
+
import { isKnownPhraseKey } from "./navigatorVoiceKeys.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Каталог/манифест голосов навигатора и персист настроек. Порт
|
|
8
|
+
* `webProject/src/map/navigationVoiceCatalog.ts` на нативную часть:
|
|
9
|
+
* localStorage → AsyncStorage, плюс маппинг ключей фраз в URL клипов.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** Per-voice manifest from S3: phrase key → variant ids. */
|
|
13
|
+
|
|
14
|
+
const LS_VOICE_PREF = 'maplite-navigator-voice-pref';
|
|
15
|
+
const LS_VOICE_VOLUME = 'maplite-navigator-voice-volume';
|
|
16
|
+
const DEFAULT_VOICE_VOLUME_LEVEL = 5;
|
|
17
|
+
export function volumeLevelToGain(level) {
|
|
18
|
+
return level * 0.2;
|
|
19
|
+
}
|
|
20
|
+
export async function readVoiceVolumeLevel() {
|
|
21
|
+
try {
|
|
22
|
+
const raw = await AsyncStorage.getItem(LS_VOICE_VOLUME);
|
|
23
|
+
if (!raw) return DEFAULT_VOICE_VOLUME_LEVEL;
|
|
24
|
+
const n = Number.parseInt(raw, 10);
|
|
25
|
+
if (n >= 1 && n <= 5) return n;
|
|
26
|
+
} catch {
|
|
27
|
+
/* ignore */
|
|
28
|
+
}
|
|
29
|
+
return DEFAULT_VOICE_VOLUME_LEVEL;
|
|
30
|
+
}
|
|
31
|
+
export async function writeVoiceVolumeLevel(level) {
|
|
32
|
+
try {
|
|
33
|
+
await AsyncStorage.setItem(LS_VOICE_VOLUME, String(level));
|
|
34
|
+
} catch {
|
|
35
|
+
/* ignore */
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export async function readVoicePref() {
|
|
39
|
+
try {
|
|
40
|
+
const raw = await AsyncStorage.getItem(LS_VOICE_PREF);
|
|
41
|
+
if (!raw) return null;
|
|
42
|
+
const parsed = JSON.parse(raw);
|
|
43
|
+
if (parsed && typeof parsed === 'object' && 'disabled' in parsed && parsed.disabled === true) {
|
|
44
|
+
return {
|
|
45
|
+
disabled: true
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (parsed && typeof parsed === 'object' && 'dir' in parsed && typeof parsed.dir === 'string') {
|
|
49
|
+
const dir = parsed.dir.trim();
|
|
50
|
+
if (dir) return {
|
|
51
|
+
dir
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
/* ignore */
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
export async function writeVoicePref(pref) {
|
|
60
|
+
try {
|
|
61
|
+
await AsyncStorage.setItem(LS_VOICE_PREF, JSON.stringify(pref));
|
|
62
|
+
} catch {
|
|
63
|
+
/* ignore */
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function resolveVoiceCatalogUrl(url) {
|
|
67
|
+
const t = url.trim();
|
|
68
|
+
if (!t) return null;
|
|
69
|
+
try {
|
|
70
|
+
// eslint-disable-next-line no-new
|
|
71
|
+
new URL(t);
|
|
72
|
+
return t;
|
|
73
|
+
} catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Base URL for a voice directory: `.../voices/{dir}`. */
|
|
79
|
+
export function voiceDirBaseUrl(catalogUrl, dir) {
|
|
80
|
+
const u = new URL(catalogUrl);
|
|
81
|
+
const parts = u.pathname.split('/').filter(Boolean);
|
|
82
|
+
if (parts.length > 0 && parts[parts.length - 1].toLowerCase().endsWith('.json')) {
|
|
83
|
+
parts.pop();
|
|
84
|
+
}
|
|
85
|
+
parts.push(dir);
|
|
86
|
+
u.pathname = `/${parts.join('/')}`;
|
|
87
|
+
return u.toString().replace(/\/+$/, '');
|
|
88
|
+
}
|
|
89
|
+
function voiceManifestUrl(baseUrl) {
|
|
90
|
+
return `${baseUrl.replace(/\/+$/, '')}/data.json`;
|
|
91
|
+
}
|
|
92
|
+
export async function fetchVoiceCatalog(catalogUrl) {
|
|
93
|
+
const res = await fetch(catalogUrl);
|
|
94
|
+
if (!res.ok) {
|
|
95
|
+
throw new Error(`voice catalog fetch failed: ${res.status}`);
|
|
96
|
+
}
|
|
97
|
+
const data = await res.json();
|
|
98
|
+
if (!Array.isArray(data)) {
|
|
99
|
+
throw new Error('voice catalog: expected JSON array');
|
|
100
|
+
}
|
|
101
|
+
const entries = [];
|
|
102
|
+
for (const item of data) {
|
|
103
|
+
if (item && typeof item === 'object' && typeof item.dir === 'string' && typeof item.name === 'string') {
|
|
104
|
+
const e = item;
|
|
105
|
+
entries.push({
|
|
106
|
+
dir: e.dir.trim(),
|
|
107
|
+
name: e.name,
|
|
108
|
+
locale: typeof e.locale === 'string' ? e.locale : 'RU'
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (entries.length === 0) {
|
|
113
|
+
throw new Error('voice catalog: empty');
|
|
114
|
+
}
|
|
115
|
+
return entries;
|
|
116
|
+
}
|
|
117
|
+
export async function fetchVoiceManifest(clipBaseUrl) {
|
|
118
|
+
const res = await fetch(voiceManifestUrl(clipBaseUrl));
|
|
119
|
+
if (!res.ok) {
|
|
120
|
+
throw new Error(`voice manifest fetch failed: ${res.status}`);
|
|
121
|
+
}
|
|
122
|
+
const data = await res.json();
|
|
123
|
+
if (!data || typeof data !== 'object' || Array.isArray(data)) {
|
|
124
|
+
throw new Error('voice manifest: expected JSON object');
|
|
125
|
+
}
|
|
126
|
+
const manifest = {};
|
|
127
|
+
for (const [key, value] of Object.entries(data)) {
|
|
128
|
+
if (Array.isArray(value) && value.every(v => typeof v === 'string')) {
|
|
129
|
+
manifest[key] = value;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return manifest;
|
|
133
|
+
}
|
|
134
|
+
function resolveSelectedDir(catalog, pref) {
|
|
135
|
+
if (pref && 'dir' in pref) {
|
|
136
|
+
const found = catalog.find(e => e.dir === pref.dir);
|
|
137
|
+
if (found) return found.dir;
|
|
138
|
+
}
|
|
139
|
+
return catalog[0].dir;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Loads catalog + user preference + optional per-voice manifest.
|
|
144
|
+
* When pref is `{ disabled: true }`, returns `enabled: false` and `manifest: null`.
|
|
145
|
+
*/
|
|
146
|
+
export async function loadVoiceRuntime(catalogUrl) {
|
|
147
|
+
const resolved = resolveVoiceCatalogUrl(catalogUrl);
|
|
148
|
+
if (!resolved) return null;
|
|
149
|
+
const catalog = await fetchVoiceCatalog(resolved);
|
|
150
|
+
const pref = await readVoicePref();
|
|
151
|
+
const selectedDir = resolveSelectedDir(catalog, pref);
|
|
152
|
+
const clipBaseUrl = voiceDirBaseUrl(resolved, selectedDir);
|
|
153
|
+
if (pref != null && 'disabled' in pref && pref.disabled === true) {
|
|
154
|
+
return {
|
|
155
|
+
catalogUrl: resolved,
|
|
156
|
+
catalog,
|
|
157
|
+
selectedDir,
|
|
158
|
+
clipBaseUrl,
|
|
159
|
+
manifest: null,
|
|
160
|
+
enabled: false
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
const manifest = await fetchVoiceManifest(clipBaseUrl);
|
|
164
|
+
return {
|
|
165
|
+
catalogUrl: resolved,
|
|
166
|
+
catalog,
|
|
167
|
+
selectedDir,
|
|
168
|
+
clipBaseUrl,
|
|
169
|
+
manifest,
|
|
170
|
+
enabled: true
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** Reload manifest after user picks another voice (same catalog URL). */
|
|
175
|
+
export async function reloadVoiceForDir(catalogUrl, catalog, dir) {
|
|
176
|
+
const entry = catalog.find(e => e.dir === dir);
|
|
177
|
+
if (!entry) {
|
|
178
|
+
throw new Error(`voice dir not in catalog: ${dir}`);
|
|
179
|
+
}
|
|
180
|
+
const clipBaseUrl = voiceDirBaseUrl(catalogUrl, entry.dir);
|
|
181
|
+
const manifest = await fetchVoiceManifest(clipBaseUrl);
|
|
182
|
+
await writeVoicePref({
|
|
183
|
+
dir: entry.dir
|
|
184
|
+
});
|
|
185
|
+
return {
|
|
186
|
+
selectedDir: entry.dir,
|
|
187
|
+
clipBaseUrl,
|
|
188
|
+
manifest,
|
|
189
|
+
enabled: true
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function pickVariant(manifest, key) {
|
|
193
|
+
const vars = manifest[key];
|
|
194
|
+
if (!vars?.length) return 'var1';
|
|
195
|
+
return vars[Math.floor(Math.random() * vars.length)] ?? 'var1';
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** clipId для S3: `{key}_{variant}`. */
|
|
199
|
+
function phraseKeyToClipId(manifest, key, variant) {
|
|
200
|
+
return `${key}_${variant}`;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Преобразует список ключей фраз (из веб-части) в список URL клипов
|
|
205
|
+
* `{clipBaseUrl}/{key}_{variant}.mp3`. Неизвестные / отсутствующие в
|
|
206
|
+
* манифесте ключи пропускаются.
|
|
207
|
+
*/
|
|
208
|
+
export function keysToClipUrls(manifest, clipBaseUrl, keys) {
|
|
209
|
+
const base = clipBaseUrl.replace(/\/+$/, '');
|
|
210
|
+
const variants = new Map();
|
|
211
|
+
const urls = [];
|
|
212
|
+
for (const raw of keys) {
|
|
213
|
+
if (!isKnownPhraseKey(raw)) continue;
|
|
214
|
+
const key = raw;
|
|
215
|
+
if (!(key in manifest)) continue;
|
|
216
|
+
let variant = variants.get(key);
|
|
217
|
+
if (!variant) {
|
|
218
|
+
variant = pickVariant(manifest, key);
|
|
219
|
+
variants.set(key, variant);
|
|
220
|
+
}
|
|
221
|
+
urls.push(`${base}/${phraseKeyToClipId(manifest, key, variant)}.mp3`);
|
|
222
|
+
}
|
|
223
|
+
return urls;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=navigatorVoiceCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AsyncStorage","isKnownPhraseKey","LS_VOICE_PREF","LS_VOICE_VOLUME","DEFAULT_VOICE_VOLUME_LEVEL","volumeLevelToGain","level","readVoiceVolumeLevel","raw","getItem","n","Number","parseInt","writeVoiceVolumeLevel","setItem","String","readVoicePref","parsed","JSON","parse","disabled","dir","trim","writeVoicePref","pref","stringify","resolveVoiceCatalogUrl","url","t","URL","voiceDirBaseUrl","catalogUrl","u","parts","pathname","split","filter","Boolean","length","toLowerCase","endsWith","pop","push","join","toString","replace","voiceManifestUrl","baseUrl","fetchVoiceCatalog","res","fetch","ok","Error","status","data","json","Array","isArray","entries","item","name","e","locale","fetchVoiceManifest","clipBaseUrl","manifest","key","value","Object","every","v","resolveSelectedDir","catalog","found","find","loadVoiceRuntime","resolved","selectedDir","enabled","reloadVoiceForDir","entry","pickVariant","vars","Math","floor","random","phraseKeyToClipId","variant","keysToClipUrls","keys","base","variants","Map","urls","get","set"],"sourceRoot":"../../../src","sources":["components/navigatorVoiceCatalog.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Фиксированные ключи клипов навигатора (схема проекта). Зеркало
|
|
5
|
+
* `webProject/src/map/navigationVoiceKeys.ts` — веб-часть присылает эти
|
|
6
|
+
* ключи в событии `navigatorVoice`, нативная часть мапит их в аудио.
|
|
7
|
+
* Варианты (`var1`, …) и наличие записей — только из S3 voice manifest.
|
|
8
|
+
*/
|
|
9
|
+
export const VOICE_PHRASE_KEYS = ['maneuver_sharp_left', 'maneuver_turn_left', 'maneuver_slight_left', 'maneuver_straight', 'maneuver_slight_right', 'maneuver_turn_right', 'maneuver_sharp_right', 'maneuver_arrival', 'maneuver_waypoint', 'maneuver_enter_roundabout', 'maneuver_leave_roundabout', 'maneuver_keep_left', 'maneuver_keep_right', 'maneuver_uturn', 'maneuver_uturn_left', 'maneuver_uturn_right', 'maneuver_default', 'exit_1', 'exit_2', 'exit_3', 'exit_4', 'exit_5', 'exit_6', 'exit_7', 'exit_8', 'exit_9', 'exit_10', 'exit_11', 'exit_12', 'roundabout_take_exit', 'prefix_via', 'connector_and', 'unit_meter', 'unit_meters_2_4', 'unit_meters_5_plus', 'unit_kilometer', 'unit_kilometers_2_4', 'unit_kilometers_5_plus', 'route_started', 'route_recalculated', 'arrived_title', 'arrival_at_destination', 'waypoint_reached', 'off_route', 'num_1', 'num_2', 'num_3', 'num_4', 'num_5', 'num_6', 'num_7', 'num_8', 'num_9', 'num_10', 'num_11', 'num_12', 'num_13', 'num_14', 'num_15', 'num_16', 'num_17', 'num_18', 'num_19', 'num_20', 'num_30', 'num_40', 'num_50', 'num_60', 'num_70', 'num_80', 'num_90', 'num_100', 'num_200', 'num_300', 'num_400', 'num_500', 'num_600', 'num_700', 'num_800', 'num_900', 'num_km_1', 'num_km_2', 'num_km_3', 'num_km_4', 'num_km_5', 'num_km_6', 'num_km_7', 'num_km_8', 'num_km_9', 'num_km_10', 'num_km_11', 'num_km_12', 'num_km_13', 'num_km_14', 'num_km_15', 'num_km_16', 'num_km_17', 'num_km_18', 'num_km_19', 'num_km_20', 'num_km_30', 'num_km_40', 'num_km_50', 'num_km_60', 'num_km_70', 'num_km_80', 'num_km_90', 'num_km_100', 'num_km_200', 'num_km_300', 'num_km_400', 'num_km_500', 'num_km_600', 'num_km_700', 'num_km_800', 'num_km_900'];
|
|
10
|
+
const VOICE_PHRASE_KEY_SET = new Set(VOICE_PHRASE_KEYS);
|
|
11
|
+
export function isKnownPhraseKey(key) {
|
|
12
|
+
return VOICE_PHRASE_KEY_SET.has(key);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=navigatorVoiceKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["VOICE_PHRASE_KEYS","VOICE_PHRASE_KEY_SET","Set","isKnownPhraseKey","key","has"],"sourceRoot":"../../../src","sources":["components/navigatorVoiceKeys.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,iBAAiB,GAAG,CAC7B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,CACN;AAIV,MAAMC,oBAAoB,GAAG,IAAIC,GAAG,CAASF,iBAAiB,CAAC;AAE/D,OAAO,SAASG,gBAAgBA,CAACC,GAAW,EAAyB;EACjE,OAAOH,oBAAoB,CAACI,GAAG,CAACD,GAAG,CAAC;AACxC","ignoreList":[]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { forwardRef, useImperativeHandle, useRef, useState } from 'react';
|
|
4
|
+
import Video from 'react-native-video';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Последовательный проигрыватель клипов озвучки навигатора. Порт логики
|
|
8
|
+
* очереди из `webProject/src/map/navigationVoicePlayer.ts` на `react-native-video`:
|
|
9
|
+
* веб присылает список ключей фраз, нативная часть собирает из них URL и
|
|
10
|
+
* проигрывает их по очереди с короткой паузой между клипами.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Пауза между клипами (как в веб-плеере). */
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
+
const CLIP_PAUSE_MS = 300;
|
|
16
|
+
export const NavigatorVoicePlayer = /*#__PURE__*/forwardRef((props, ref) => {
|
|
17
|
+
const [current, setCurrent] = useState(null);
|
|
18
|
+
const [volume, setVolume] = useState(typeof props.initialVolume === 'number' ? Math.min(1, Math.max(0, props.initialVolume)) : 1);
|
|
19
|
+
const queueRef = useRef([]);
|
|
20
|
+
const indexRef = useRef(0);
|
|
21
|
+
/** Поколение очереди: рост инвалидирует «хвосты» предыдущих очередей. */
|
|
22
|
+
const genRef = useRef(0);
|
|
23
|
+
/** Меняем токен, чтобы перерисовать `<Video>` даже при том же URL подряд. */
|
|
24
|
+
const tokenRef = useRef(0);
|
|
25
|
+
const pauseTimerRef = useRef(null);
|
|
26
|
+
const clearPause = () => {
|
|
27
|
+
if (pauseTimerRef.current != null) {
|
|
28
|
+
clearTimeout(pauseTimerRef.current);
|
|
29
|
+
pauseTimerRef.current = null;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const playIndex = () => {
|
|
33
|
+
const uri = queueRef.current[indexRef.current];
|
|
34
|
+
if (uri == null) {
|
|
35
|
+
setCurrent(null);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
tokenRef.current += 1;
|
|
39
|
+
setCurrent({
|
|
40
|
+
uri,
|
|
41
|
+
token: tokenRef.current
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const advance = gen => {
|
|
45
|
+
if (gen !== genRef.current) return;
|
|
46
|
+
indexRef.current += 1;
|
|
47
|
+
if (indexRef.current >= queueRef.current.length) {
|
|
48
|
+
setCurrent(null);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
clearPause();
|
|
52
|
+
pauseTimerRef.current = setTimeout(() => {
|
|
53
|
+
pauseTimerRef.current = null;
|
|
54
|
+
if (gen === genRef.current) playIndex();
|
|
55
|
+
}, CLIP_PAUSE_MS);
|
|
56
|
+
};
|
|
57
|
+
useImperativeHandle(ref, () => ({
|
|
58
|
+
playUrls: urls => {
|
|
59
|
+
clearPause();
|
|
60
|
+
genRef.current += 1;
|
|
61
|
+
queueRef.current = urls;
|
|
62
|
+
indexRef.current = 0;
|
|
63
|
+
if (urls.length === 0) {
|
|
64
|
+
setCurrent(null);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
playIndex();
|
|
68
|
+
},
|
|
69
|
+
stop: () => {
|
|
70
|
+
clearPause();
|
|
71
|
+
genRef.current += 1;
|
|
72
|
+
queueRef.current = [];
|
|
73
|
+
indexRef.current = 0;
|
|
74
|
+
setCurrent(null);
|
|
75
|
+
},
|
|
76
|
+
setVolume: gain => {
|
|
77
|
+
setVolume(Math.min(1, Math.max(0, gain)));
|
|
78
|
+
}
|
|
79
|
+
}), []);
|
|
80
|
+
if (!current) return null;
|
|
81
|
+
const gen = genRef.current;
|
|
82
|
+
return /*#__PURE__*/_jsx(Video, {
|
|
83
|
+
source: {
|
|
84
|
+
uri: current.uri
|
|
85
|
+
},
|
|
86
|
+
paused: false,
|
|
87
|
+
volume: volume,
|
|
88
|
+
repeat: false,
|
|
89
|
+
ignoreSilentSwitch: "ignore",
|
|
90
|
+
playInBackground: true,
|
|
91
|
+
onEnd: () => advance(gen),
|
|
92
|
+
onError: () => advance(gen),
|
|
93
|
+
style: {
|
|
94
|
+
width: 0,
|
|
95
|
+
height: 0
|
|
96
|
+
}
|
|
97
|
+
}, current.token);
|
|
98
|
+
});
|
|
99
|
+
NavigatorVoicePlayer.displayName = 'NavigatorVoicePlayer';
|
|
100
|
+
//# sourceMappingURL=navigatorVoicePlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","useImperativeHandle","useRef","useState","Video","jsx","_jsx","CLIP_PAUSE_MS","NavigatorVoicePlayer","props","ref","current","setCurrent","volume","setVolume","initialVolume","Math","min","max","queueRef","indexRef","genRef","tokenRef","pauseTimerRef","clearPause","clearTimeout","playIndex","uri","token","advance","gen","length","setTimeout","playUrls","urls","stop","gain","source","paused","repeat","ignoreSilentSwitch","playInBackground","onEnd","onError","style","width","height","displayName"],"sourceRoot":"../../../src","sources":["components/navigatorVoicePlayer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Подписи нативного UI навигатора (FAB-кнопки, меню голоса, подсказка
|
|
5
|
+
* pick-режима). Текст HUD маршрута приходит готовым из веб-части, поэтому
|
|
6
|
+
* здесь только то, что рисуется нативно. Порт voice/recenter-строк из
|
|
7
|
+
* `webProject/src/map/local.ts`.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
const ru = {
|
|
11
|
+
recenterAria: 'Вернуть фокус на положение',
|
|
12
|
+
voicePickerAria: 'Голос навигатора',
|
|
13
|
+
voiceDisable: 'Отключить озвучку',
|
|
14
|
+
voiceOff: 'Озвучка выкл.',
|
|
15
|
+
voiceVolumeLabel: 'Громкость',
|
|
16
|
+
voiceVolumeStepAria: step => `Громкость ${step} из 5`,
|
|
17
|
+
pickHint: 'Кликните по карте, чтобы установить текущее положение'
|
|
18
|
+
};
|
|
19
|
+
const en = {
|
|
20
|
+
recenterAria: 'Recenter on your position',
|
|
21
|
+
voicePickerAria: 'Navigator voice',
|
|
22
|
+
voiceDisable: 'Turn off voice guidance',
|
|
23
|
+
voiceOff: 'Voice off',
|
|
24
|
+
voiceVolumeLabel: 'Volume',
|
|
25
|
+
voiceVolumeStepAria: step => `Volume ${step} of 5`,
|
|
26
|
+
pickHint: 'Tap the map to set the current position'
|
|
27
|
+
};
|
|
28
|
+
export function navigatorUiStrings(lang) {
|
|
29
|
+
return lang === 'en' ? en : ru;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=navigatorVoiceStrings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ru","recenterAria","voicePickerAria","voiceDisable","voiceOff","voiceVolumeLabel","voiceVolumeStepAria","step","pickHint","en","navigatorUiStrings","lang"],"sourceRoot":"../../../src","sources":["components/navigatorVoiceStrings.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;;AAYA,MAAMA,EAAsB,GAAG;EAC3BC,YAAY,EAAE,4BAA4B;EAC1CC,eAAe,EAAE,kBAAkB;EACnCC,YAAY,EAAE,mBAAmB;EACjCC,QAAQ,EAAE,eAAe;EACzBC,gBAAgB,EAAE,WAAW;EAC7BC,mBAAmB,EAAGC,IAAY,IAAK,aAAaA,IAAI,OAAO;EAC/DC,QAAQ,EAAE;AACd,CAAC;AAED,MAAMC,EAAsB,GAAG;EAC3BR,YAAY,EAAE,2BAA2B;EACzCC,eAAe,EAAE,iBAAiB;EAClCC,YAAY,EAAE,yBAAyB;EACvCC,QAAQ,EAAE,WAAW;EACrBC,gBAAgB,EAAE,QAAQ;EAC1BC,mBAAmB,EAAGC,IAAY,IAAK,UAAUA,IAAI,OAAO;EAC5DC,QAAQ,EAAE;AACd,CAAC;AAED,OAAO,SAASE,kBAAkBA,CAACC,IAA+B,EAAsB;EACpF,OAAOA,IAAI,KAAK,IAAI,GAAGF,EAAE,GAAGT,EAAE;AAClC","ignoreList":[]}
|