react-native-maplibre-lite 0.2.4 → 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 +57 -30
  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 +68 -29
  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
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useEffect, useRef, useState } from 'react';
4
+ import AsyncStorage from '@react-native-async-storage/async-storage';
5
+ const LS_TTS_VOICE_PREF = 'maplite-navigator-tts-voice-pref';
6
+ const LS_VOICE_VOLUME = 'maplite-navigator-voice-volume';
7
+ const DEFAULT_VOICE_VOLUME_LEVEL = 5;
8
+ export function volumeLevelToGain(level) {
9
+ return level * 0.2;
10
+ }
11
+ export async function readVoiceVolumeLevel() {
12
+ try {
13
+ const raw = await AsyncStorage.getItem(LS_VOICE_VOLUME);
14
+ if (!raw) return DEFAULT_VOICE_VOLUME_LEVEL;
15
+ const n = Number.parseInt(raw, 10);
16
+ if (n >= 1 && n <= 5) return n;
17
+ } catch {
18
+ /* ignore */
19
+ }
20
+ return DEFAULT_VOICE_VOLUME_LEVEL;
21
+ }
22
+ export async function writeVoiceVolumeLevel(level) {
23
+ try {
24
+ await AsyncStorage.setItem(LS_VOICE_VOLUME, String(level));
25
+ } catch {
26
+ /* ignore */
27
+ }
28
+ }
29
+ export async function readTtsVoicePref() {
30
+ try {
31
+ const raw = await AsyncStorage.getItem(LS_TTS_VOICE_PREF);
32
+ if (!raw) return null;
33
+ const parsed = JSON.parse(raw);
34
+ if (parsed && typeof parsed === 'object' && 'disabled' in parsed && parsed.disabled === true) {
35
+ return {
36
+ disabled: true
37
+ };
38
+ }
39
+ if (parsed && typeof parsed === 'object' && 'voiceKey' in parsed && typeof parsed.voiceKey === 'string') {
40
+ const voiceKey = parsed.voiceKey.trim();
41
+ if (voiceKey) return {
42
+ voiceKey
43
+ };
44
+ }
45
+ } catch {
46
+ /* ignore */
47
+ }
48
+ return null;
49
+ }
50
+ export async function writeTtsVoicePref(pref) {
51
+ try {
52
+ await AsyncStorage.setItem(LS_TTS_VOICE_PREF, JSON.stringify(pref));
53
+ } catch {
54
+ /* ignore */
55
+ }
56
+ }
57
+ function defaultVoiceKey(voices) {
58
+ const keys = Object.keys(voices);
59
+ return keys.length > 0 ? keys[0] : null;
60
+ }
61
+ function resolveVoiceKey(voices, pref) {
62
+ if (pref && 'voiceKey' in pref && pref.voiceKey in voices) {
63
+ return pref.voiceKey;
64
+ }
65
+ return defaultVoiceKey(voices);
66
+ }
67
+
68
+ /**
69
+ * Нативное владение TTS навигатора: выбор голоса/громкости, персист,
70
+ * кэш URL по (voiceKey, text). Веб шлёт готовый текст фразы.
71
+ */
72
+
73
+ export function useNavigatorTts(ttsVoices, ttsHandler) {
74
+ const [selectedVoiceKey, setSelectedVoiceKey] = useState(null);
75
+ const [voiceEnabled, setVoiceEnabled] = useState(true);
76
+ const [volumeLevel, setVolumeLevel] = useState(5);
77
+ const urlCacheRef = useRef(new Map());
78
+ const voiceEntries = Object.entries(ttsVoices ?? {});
79
+ const ttsActive = voiceEntries.length > 0 && typeof ttsHandler === 'function';
80
+ useEffect(() => {
81
+ let cancelled = false;
82
+ void readVoiceVolumeLevel().then(lvl => {
83
+ if (!cancelled) setVolumeLevel(lvl);
84
+ });
85
+ if (!ttsActive) {
86
+ setSelectedVoiceKey(null);
87
+ setVoiceEnabled(false);
88
+ return () => {
89
+ cancelled = true;
90
+ };
91
+ }
92
+ void readTtsVoicePref().then(pref => {
93
+ if (cancelled) return;
94
+ if (pref && 'disabled' in pref) {
95
+ setVoiceEnabled(false);
96
+ setSelectedVoiceKey(resolveVoiceKey(ttsVoices, pref));
97
+ return;
98
+ }
99
+ setVoiceEnabled(true);
100
+ setSelectedVoiceKey(resolveVoiceKey(ttsVoices, pref));
101
+ });
102
+ return () => {
103
+ cancelled = true;
104
+ };
105
+ }, [ttsActive, ttsVoices]);
106
+ const selectVoice = useCallback(async voiceKey => {
107
+ if (!ttsVoices || !(voiceKey in ttsVoices)) return;
108
+ setSelectedVoiceKey(voiceKey);
109
+ setVoiceEnabled(true);
110
+ await writeTtsVoicePref({
111
+ voiceKey
112
+ });
113
+ }, [ttsVoices]);
114
+ const selectVolume = useCallback(level => {
115
+ setVolumeLevel(level);
116
+ void writeVoiceVolumeLevel(level);
117
+ }, []);
118
+ const disableVoice = useCallback(async () => {
119
+ await writeTtsVoicePref({
120
+ disabled: true
121
+ });
122
+ setVoiceEnabled(false);
123
+ }, []);
124
+ const synthesize = useCallback(async text => {
125
+ if (!ttsHandler || !voiceEnabled || !selectedVoiceKey) return null;
126
+ const trimmed = text.trim();
127
+ if (!trimmed) return null;
128
+ const cacheKey = `${selectedVoiceKey}\0${trimmed}`;
129
+ const cached = urlCacheRef.current.get(cacheKey);
130
+ if (cached) return cached;
131
+ try {
132
+ const url = await ttsHandler(trimmed, selectedVoiceKey);
133
+ if (typeof url === 'string' && url.trim()) {
134
+ const u = url.trim();
135
+ urlCacheRef.current.set(cacheKey, u);
136
+ return u;
137
+ }
138
+ } catch (err) {
139
+ console.warn('[maplite] navigator TTS failed', err);
140
+ }
141
+ return null;
142
+ }, [ttsHandler, voiceEnabled, selectedVoiceKey]);
143
+ return {
144
+ voiceEntries: ttsActive ? voiceEntries : [],
145
+ selectedVoiceKey: ttsActive ? selectedVoiceKey : null,
146
+ voiceEnabled: ttsActive && voiceEnabled,
147
+ volumeLevel,
148
+ synthesize,
149
+ selectVoice,
150
+ selectVolume,
151
+ disableVoice
152
+ };
153
+ }
154
+ //# sourceMappingURL=useNavigatorTts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","AsyncStorage","LS_TTS_VOICE_PREF","LS_VOICE_VOLUME","DEFAULT_VOICE_VOLUME_LEVEL","volumeLevelToGain","level","readVoiceVolumeLevel","raw","getItem","n","Number","parseInt","writeVoiceVolumeLevel","setItem","String","readTtsVoicePref","parsed","JSON","parse","disabled","voiceKey","trim","writeTtsVoicePref","pref","stringify","defaultVoiceKey","voices","keys","Object","length","resolveVoiceKey","useNavigatorTts","ttsVoices","ttsHandler","selectedVoiceKey","setSelectedVoiceKey","voiceEnabled","setVoiceEnabled","volumeLevel","setVolumeLevel","urlCacheRef","Map","voiceEntries","entries","ttsActive","cancelled","then","lvl","selectVoice","selectVolume","disableVoice","synthesize","text","trimmed","cacheKey","cached","current","get","url","u","set","err","console","warn"],"sourceRoot":"../../../src","sources":["components/useNavigatorTts.ts"],"mappings":"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","ignoreList":[]}