react-native-maplibre-lite 0.2.5 → 0.2.6

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 (51) hide show
  1. package/README.md +32 -12
  2. package/lib/module/components/MapView.js +19 -22
  3. package/lib/module/components/MapView.js.map +1 -1
  4. package/lib/module/components/NavigatorVoiceControl.js +9 -10
  5. package/lib/module/components/NavigatorVoiceControl.js.map +1 -1
  6. package/lib/module/components/navigatorVoicePlayer.js +2 -4
  7. package/lib/module/components/navigatorVoicePlayer.js.map +1 -1
  8. package/lib/module/components/types.js +6 -2
  9. package/lib/module/components/types.js.map +1 -1
  10. package/lib/module/components/useNavigatorTts.js +154 -0
  11. package/lib/module/components/useNavigatorTts.js.map +1 -0
  12. package/lib/module/components/webMapBuild.js +1 -1
  13. package/lib/module/components/webMapBuild.js.map +1 -1
  14. package/lib/module/index.js.map +1 -1
  15. package/lib/typescript/src/components/MapView.d.ts +8 -5
  16. package/lib/typescript/src/components/MapView.d.ts.map +1 -1
  17. package/lib/typescript/src/components/NavigatorVoiceControl.d.ts +6 -7
  18. package/lib/typescript/src/components/NavigatorVoiceControl.d.ts.map +1 -1
  19. package/lib/typescript/src/components/navigatorVoicePlayer.d.ts.map +1 -1
  20. package/lib/typescript/src/components/types.d.ts +8 -4
  21. package/lib/typescript/src/components/types.d.ts.map +1 -1
  22. package/lib/typescript/src/components/useNavigatorTts.d.ts +28 -0
  23. package/lib/typescript/src/components/useNavigatorTts.d.ts.map +1 -0
  24. package/lib/typescript/src/components/webMapBuild.d.ts +1 -1
  25. package/lib/typescript/src/components/webMapBuild.d.ts.map +1 -1
  26. package/lib/typescript/src/index.d.ts +1 -1
  27. package/lib/typescript/src/index.d.ts.map +1 -1
  28. package/package.json +1 -1
  29. package/resources/map.html +42 -43
  30. package/src/components/MapView.tsx +34 -25
  31. package/src/components/NavigatorVoiceControl.tsx +13 -14
  32. package/src/components/navigatorVoicePlayer.tsx +2 -4
  33. package/src/components/types.ts +13 -4
  34. package/src/components/useNavigatorTts.ts +195 -0
  35. package/src/components/webMapBuild.ts +1 -1
  36. package/src/index.tsx +2 -0
  37. package/lib/module/components/navigatorVoiceCatalog.js +0 -261
  38. package/lib/module/components/navigatorVoiceCatalog.js.map +0 -1
  39. package/lib/module/components/navigatorVoiceKeys.js +0 -14
  40. package/lib/module/components/navigatorVoiceKeys.js.map +0 -1
  41. package/lib/module/components/useNavigatorVoice.js +0 -78
  42. package/lib/module/components/useNavigatorVoice.js.map +0 -1
  43. package/lib/typescript/src/components/navigatorVoiceCatalog.d.ts +0 -50
  44. package/lib/typescript/src/components/navigatorVoiceCatalog.d.ts.map +0 -1
  45. package/lib/typescript/src/components/navigatorVoiceKeys.d.ts +0 -10
  46. package/lib/typescript/src/components/navigatorVoiceKeys.d.ts.map +0 -1
  47. package/lib/typescript/src/components/useNavigatorVoice.d.ts +0 -20
  48. package/lib/typescript/src/components/useNavigatorVoice.d.ts.map +0 -1
  49. package/src/components/navigatorVoiceCatalog.ts +0 -316
  50. package/src/components/navigatorVoiceKeys.ts +0 -132
  51. package/src/components/useNavigatorVoice.ts +0 -96
package/src/index.tsx CHANGED
@@ -36,6 +36,8 @@ export type {
36
36
  NavigatorPositionMode,
37
37
  NavigatorPositionSetParams,
38
38
  NavigatorRouteSetParams,
39
+ NavigatorTtsHandler,
40
+ NavigatorTtsVoices,
39
41
  NavigatorVoiceAction,
40
42
  NavigatorVoicePlayParams,
41
43
  PolygonProps,
@@ -1,261 +0,0 @@
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
- const HTTP_URL_PREFIX_RE = /^https?:\/\//i;
67
- function trimTrailingSlashes(s) {
68
- return s.replace(/\/+$/, '');
69
- }
70
-
71
- /** Strips `?query` and `#hash` — catalog URLs are plain paths. */
72
- function stripUrlQueryAndHash(url) {
73
- const q = url.indexOf('?');
74
- const h = url.indexOf('#');
75
- let end = url.length;
76
- if (q >= 0) end = Math.min(end, q);
77
- if (h >= 0) end = Math.min(end, h);
78
- return url.slice(0, end);
79
- }
80
- function pathnameSegments(pathname) {
81
- return pathname.split('/').filter(Boolean);
82
- }
83
-
84
- /**
85
- * Parses `http(s)://host[:port]/path` without the URL API (Hermes-safe).
86
- */
87
- function parseHttpUrl(url) {
88
- const bare = stripUrlQueryAndHash(url.trim());
89
- if (!HTTP_URL_PREFIX_RE.test(bare)) return null;
90
- const schemeEnd = bare.indexOf('://');
91
- const rest = bare.slice(schemeEnd + 3);
92
- const slash = rest.indexOf('/');
93
- const authority = slash === -1 ? rest : rest.slice(0, slash);
94
- if (!authority) return null;
95
- const pathname = slash === -1 ? '/' : rest.slice(slash);
96
- const origin = bare.slice(0, schemeEnd + 3) + authority;
97
- return {
98
- origin,
99
- pathname
100
- };
101
- }
102
- export function resolveVoiceCatalogUrl(url) {
103
- const t = url.trim();
104
- if (!t) return null;
105
- return parseHttpUrl(t) ? t : null;
106
- }
107
-
108
- /** Base URL for a voice directory: `.../voices/{dir}`. */
109
- export function voiceDirBaseUrl(catalogUrl, dir) {
110
- const parsed = parseHttpUrl(catalogUrl);
111
- if (!parsed) {
112
- throw new Error('voiceDirBaseUrl: invalid catalog URL');
113
- }
114
- const parts = pathnameSegments(parsed.pathname);
115
- if (parts.length > 0 && parts[parts.length - 1].toLowerCase().endsWith('.json')) {
116
- parts.pop();
117
- }
118
- const safeDir = dir.trim().replace(/[/\\]+/g, '');
119
- if (!safeDir) {
120
- throw new Error('voiceDirBaseUrl: empty dir');
121
- }
122
- parts.push(safeDir);
123
- return trimTrailingSlashes(`${parsed.origin}/${parts.join('/')}`);
124
- }
125
- function voiceManifestUrl(baseUrl) {
126
- return `${trimTrailingSlashes(baseUrl)}/data.json`;
127
- }
128
- export async function fetchVoiceCatalog(catalogUrl) {
129
- const res = await fetch(catalogUrl);
130
- if (!res.ok) {
131
- throw new Error(`voice catalog fetch failed: ${res.status}`);
132
- }
133
- const data = await res.json();
134
- if (!Array.isArray(data)) {
135
- throw new Error('voice catalog: expected JSON array');
136
- }
137
- const entries = [];
138
- for (const item of data) {
139
- if (item && typeof item === 'object' && typeof item.dir === 'string' && typeof item.name === 'string') {
140
- const e = item;
141
- entries.push({
142
- dir: e.dir.trim(),
143
- name: e.name,
144
- locale: typeof e.locale === 'string' ? e.locale : 'RU'
145
- });
146
- }
147
- }
148
- if (entries.length === 0) {
149
- throw new Error('voice catalog: empty');
150
- }
151
- return entries;
152
- }
153
- export async function fetchVoiceManifest(clipBaseUrl) {
154
- const res = await fetch(voiceManifestUrl(clipBaseUrl));
155
- if (!res.ok) {
156
- throw new Error(`voice manifest fetch failed: ${res.status}`);
157
- }
158
- const data = await res.json();
159
- if (!data || typeof data !== 'object' || Array.isArray(data)) {
160
- throw new Error('voice manifest: expected JSON object');
161
- }
162
- const manifest = {};
163
- for (const [key, value] of Object.entries(data)) {
164
- if (Array.isArray(value) && value.every(v => typeof v === 'string')) {
165
- manifest[key] = value;
166
- }
167
- }
168
- return manifest;
169
- }
170
- function resolveSelectedDir(catalog, pref) {
171
- if (pref && 'dir' in pref) {
172
- const found = catalog.find(e => e.dir === pref.dir);
173
- if (found) return found.dir;
174
- }
175
- return catalog[0].dir;
176
- }
177
-
178
- /**
179
- * Loads catalog + user preference + optional per-voice manifest.
180
- * When pref is `{ disabled: true }`, returns `enabled: false` and `manifest: null`.
181
- */
182
- export async function loadVoiceRuntime(catalogUrl) {
183
- const resolved = resolveVoiceCatalogUrl(catalogUrl);
184
- if (!resolved) return null;
185
- const catalog = await fetchVoiceCatalog(resolved);
186
- const pref = await readVoicePref();
187
- const selectedDir = resolveSelectedDir(catalog, pref);
188
- const clipBaseUrl = voiceDirBaseUrl(resolved, selectedDir);
189
- if (pref != null && 'disabled' in pref && pref.disabled === true) {
190
- return {
191
- catalogUrl: resolved,
192
- catalog,
193
- selectedDir,
194
- clipBaseUrl,
195
- manifest: null,
196
- enabled: false
197
- };
198
- }
199
- const manifest = await fetchVoiceManifest(clipBaseUrl);
200
- return {
201
- catalogUrl: resolved,
202
- catalog,
203
- selectedDir,
204
- clipBaseUrl,
205
- manifest,
206
- enabled: true
207
- };
208
- }
209
-
210
- /** Reload manifest after user picks another voice (same catalog URL). */
211
- export async function reloadVoiceForDir(catalogUrl, catalog, dir) {
212
- const entry = catalog.find(e => e.dir === dir);
213
- if (!entry) {
214
- throw new Error(`voice dir not in catalog: ${dir}`);
215
- }
216
- const clipBaseUrl = voiceDirBaseUrl(catalogUrl, entry.dir);
217
- const manifest = await fetchVoiceManifest(clipBaseUrl);
218
- await writeVoicePref({
219
- dir: entry.dir
220
- });
221
- return {
222
- selectedDir: entry.dir,
223
- clipBaseUrl,
224
- manifest,
225
- enabled: true
226
- };
227
- }
228
- function pickVariant(manifest, key) {
229
- const vars = manifest[key];
230
- if (!vars?.length) return 'var1';
231
- return vars[Math.floor(Math.random() * vars.length)] ?? 'var1';
232
- }
233
-
234
- /** clipId для S3: `{key}_{variant}`. */
235
- function phraseKeyToClipId(manifest, key, variant) {
236
- return `${key}_${variant}`;
237
- }
238
-
239
- /**
240
- * Преобразует список ключей фраз (из веб-части) в список URL клипов
241
- * `{clipBaseUrl}/{key}_{variant}.mp3`. Неизвестные / отсутствующие в
242
- * манифесте ключи пропускаются.
243
- */
244
- export function keysToClipUrls(manifest, clipBaseUrl, keys) {
245
- const base = trimTrailingSlashes(clipBaseUrl);
246
- const variants = new Map();
247
- const urls = [];
248
- for (const raw of keys) {
249
- if (!isKnownPhraseKey(raw)) continue;
250
- const key = raw;
251
- if (!(key in manifest)) continue;
252
- let variant = variants.get(key);
253
- if (!variant) {
254
- variant = pickVariant(manifest, key);
255
- variants.set(key, variant);
256
- }
257
- urls.push(`${base}/${phraseKeyToClipId(manifest, key, variant)}.mp3`);
258
- }
259
- return urls;
260
- }
261
- //# sourceMappingURL=navigatorVoiceCatalog.js.map
@@ -1 +0,0 @@
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","HTTP_URL_PREFIX_RE","trimTrailingSlashes","s","replace","stripUrlQueryAndHash","url","q","indexOf","h","end","length","Math","min","slice","pathnameSegments","pathname","split","filter","Boolean","parseHttpUrl","bare","test","schemeEnd","rest","slash","authority","origin","resolveVoiceCatalogUrl","t","voiceDirBaseUrl","catalogUrl","Error","parts","toLowerCase","endsWith","pop","safeDir","push","join","voiceManifestUrl","baseUrl","fetchVoiceCatalog","res","fetch","ok","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","floor","random","phraseKeyToClipId","variant","keysToClipUrls","keys","base","variants","Map","urls","get","set"],"sourceRoot":"../../../src","sources":["components/navigatorVoiceCatalog.ts"],"mappings":"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","ignoreList":[]}
@@ -1,14 +0,0 @@
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
@@ -1 +0,0 @@
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":[]}
@@ -1,78 +0,0 @@
1
- "use strict";
2
-
3
- import { useCallback, useEffect, useState } from 'react';
4
- import { loadVoiceRuntime, readVoiceVolumeLevel, reloadVoiceForDir, writeVoicePref, writeVoiceVolumeLevel } from "./navigatorVoiceCatalog.js";
5
-
6
- /**
7
- * Нативное владение голосом навигатора: загрузка каталога/манифеста,
8
- * выбор голоса/громкости и персист (AsyncStorage). Веб шлёт только ключи
9
- * фраз; маппинг в аудио и воспроизведение — на стороне RN.
10
- */
11
-
12
- export function useNavigatorVoice(voiceUrl) {
13
- const [runtime, setRuntime] = useState(null);
14
- const [volumeLevel, setVolumeLevel] = useState(5);
15
- useEffect(() => {
16
- let cancelled = false;
17
- void readVoiceVolumeLevel().then(lvl => {
18
- if (!cancelled) setVolumeLevel(lvl);
19
- });
20
- if (!voiceUrl) {
21
- setRuntime(null);
22
- return () => {
23
- cancelled = true;
24
- };
25
- }
26
- void loadVoiceRuntime(voiceUrl).then(rt => {
27
- if (!cancelled) setRuntime(rt);
28
- }).catch(err => {
29
- console.warn('[maplite] navigator voice catalog failed', err);
30
- if (!cancelled) setRuntime(null);
31
- });
32
- return () => {
33
- cancelled = true;
34
- };
35
- }, [voiceUrl]);
36
- const selectVoice = useCallback(async dir => {
37
- if (!runtime) return;
38
- try {
39
- const reloaded = await reloadVoiceForDir(runtime.catalogUrl, runtime.catalog, dir);
40
- setRuntime(prev => prev ? {
41
- ...prev,
42
- ...reloaded
43
- } : prev);
44
- } catch (err) {
45
- console.warn('[maplite] failed to switch navigator voice', {
46
- dir,
47
- err
48
- });
49
- }
50
- }, [runtime]);
51
- const selectVolume = useCallback(level => {
52
- setVolumeLevel(level);
53
- void writeVoiceVolumeLevel(level);
54
- }, []);
55
- const disableVoice = useCallback(async () => {
56
- await writeVoicePref({
57
- disabled: true
58
- });
59
- setRuntime(prev => prev ? {
60
- ...prev,
61
- enabled: false,
62
- manifest: null
63
- } : prev);
64
- }, []);
65
- return {
66
- runtime,
67
- catalog: runtime?.catalog ?? [],
68
- selectedDir: runtime?.selectedDir ?? null,
69
- manifest: runtime?.manifest ?? null,
70
- clipBaseUrl: runtime?.clipBaseUrl ?? null,
71
- voiceEnabled: Boolean(runtime?.enabled && runtime.manifest),
72
- volumeLevel,
73
- selectVoice,
74
- selectVolume,
75
- disableVoice
76
- };
77
- }
78
- //# sourceMappingURL=useNavigatorVoice.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useState","loadVoiceRuntime","readVoiceVolumeLevel","reloadVoiceForDir","writeVoicePref","writeVoiceVolumeLevel","useNavigatorVoice","voiceUrl","runtime","setRuntime","volumeLevel","setVolumeLevel","cancelled","then","lvl","rt","catch","err","console","warn","selectVoice","dir","reloaded","catalogUrl","catalog","prev","selectVolume","level","disableVoice","disabled","enabled","manifest","selectedDir","clipBaseUrl","voiceEnabled","Boolean"],"sourceRoot":"../../../src","sources":["components/useNavigatorVoice.ts"],"mappings":"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","ignoreList":[]}
@@ -1,50 +0,0 @@
1
- /**
2
- * Каталог/манифест голосов навигатора и персист настроек. Порт
3
- * `webProject/src/map/navigationVoiceCatalog.ts` на нативную часть:
4
- * localStorage → AsyncStorage, плюс маппинг ключей фраз в URL клипов.
5
- */
6
- export type VoiceCatalogEntry = {
7
- dir: string;
8
- name: string;
9
- locale: string;
10
- };
11
- /** Per-voice manifest from S3: phrase key → variant ids. */
12
- export type VoiceManifest = Record<string, string[]>;
13
- export type VoicePref = {
14
- dir: string;
15
- } | {
16
- disabled: true;
17
- };
18
- export type VoiceRuntime = {
19
- catalogUrl: string;
20
- catalog: VoiceCatalogEntry[];
21
- selectedDir: string;
22
- clipBaseUrl: string;
23
- manifest: VoiceManifest | null;
24
- enabled: boolean;
25
- };
26
- export type VoiceVolumeLevel = 1 | 2 | 3 | 4 | 5;
27
- export declare function volumeLevelToGain(level: VoiceVolumeLevel): number;
28
- export declare function readVoiceVolumeLevel(): Promise<VoiceVolumeLevel>;
29
- export declare function writeVoiceVolumeLevel(level: VoiceVolumeLevel): Promise<void>;
30
- export declare function readVoicePref(): Promise<VoicePref | null>;
31
- export declare function writeVoicePref(pref: VoicePref): Promise<void>;
32
- export declare function resolveVoiceCatalogUrl(url: string): string | null;
33
- /** Base URL for a voice directory: `.../voices/{dir}`. */
34
- export declare function voiceDirBaseUrl(catalogUrl: string, dir: string): string;
35
- export declare function fetchVoiceCatalog(catalogUrl: string): Promise<VoiceCatalogEntry[]>;
36
- export declare function fetchVoiceManifest(clipBaseUrl: string): Promise<VoiceManifest>;
37
- /**
38
- * Loads catalog + user preference + optional per-voice manifest.
39
- * When pref is `{ disabled: true }`, returns `enabled: false` and `manifest: null`.
40
- */
41
- export declare function loadVoiceRuntime(catalogUrl: string): Promise<VoiceRuntime | null>;
42
- /** Reload manifest after user picks another voice (same catalog URL). */
43
- export declare function reloadVoiceForDir(catalogUrl: string, catalog: VoiceCatalogEntry[], dir: string): Promise<Pick<VoiceRuntime, 'selectedDir' | 'clipBaseUrl' | 'manifest' | 'enabled'>>;
44
- /**
45
- * Преобразует список ключей фраз (из веб-части) в список URL клипов
46
- * `{clipBaseUrl}/{key}_{variant}.mp3`. Неизвестные / отсутствующие в
47
- * манифесте ключи пропускаются.
48
- */
49
- export declare function keysToClipUrls(manifest: VoiceManifest, clipBaseUrl: string, keys: string[]): string[];
50
- //# sourceMappingURL=navigatorVoiceCatalog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigatorVoiceCatalog.d.ts","sourceRoot":"","sources":["../../../../src/components/navigatorVoiceCatalog.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAKF,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAIjD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAEjE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAUtE;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA0B/D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnE;AAwCD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBvE;AAMD,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA6BxF;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBpF;AAUD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA6BvF;AAED,yEAAyE;AACzE,wBAAsB,iBAAiB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,CAcrF;AAaD;;;;GAIG;AACH,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,GACf,MAAM,EAAE,CAgBV"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Фиксированные ключи клипов навигатора (схема проекта). Зеркало
3
- * `webProject/src/map/navigationVoiceKeys.ts` — веб-часть присылает эти
4
- * ключи в событии `navigatorVoice`, нативная часть мапит их в аудио.
5
- * Варианты (`var1`, …) и наличие записей — только из S3 voice manifest.
6
- */
7
- export declare const VOICE_PHRASE_KEYS: readonly ["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"];
8
- export type VoicePhraseKey = (typeof VOICE_PHRASE_KEYS)[number];
9
- export declare function isKnownPhraseKey(key: string): key is VoicePhraseKey;
10
- //# sourceMappingURL=navigatorVoiceKeys.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigatorVoiceKeys.d.ts","sourceRoot":"","sources":["../../../../src/components/navigatorVoiceKeys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,6mDAqHpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAIhE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,cAAc,CAEnE"}
@@ -1,20 +0,0 @@
1
- import { type VoiceCatalogEntry, type VoiceManifest, type VoiceRuntime, type VoiceVolumeLevel } from './navigatorVoiceCatalog';
2
- /**
3
- * Нативное владение голосом навигатора: загрузка каталога/манифеста,
4
- * выбор голоса/громкости и персист (AsyncStorage). Веб шлёт только ключи
5
- * фраз; маппинг в аудио и воспроизведение — на стороне RN.
6
- */
7
- export type NavigatorVoiceController = {
8
- runtime: VoiceRuntime | null;
9
- catalog: VoiceCatalogEntry[];
10
- selectedDir: string | null;
11
- manifest: VoiceManifest | null;
12
- clipBaseUrl: string | null;
13
- voiceEnabled: boolean;
14
- volumeLevel: VoiceVolumeLevel;
15
- selectVoice: (dir: string) => Promise<void>;
16
- selectVolume: (level: VoiceVolumeLevel) => void;
17
- disableVoice: () => Promise<void>;
18
- };
19
- export declare function useNavigatorVoice(voiceUrl: string | undefined): NavigatorVoiceController;
20
- //# sourceMappingURL=useNavigatorVoice.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useNavigatorVoice.d.ts","sourceRoot":"","sources":["../../../../src/components/useNavigatorVoice.ts"],"names":[],"mappings":"AAEA,OAAO,EAMH,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACxB,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACnC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,YAAY,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,wBAAwB,CA+DxF"}