@sendbird/uikit-react-native 3.11.0 → 3.11.2
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 +7 -5
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/platform/createMediaService.expo.js +83 -12
- package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
- package/lib/commonjs/platform/createNotificationService.native.js +31 -6
- package/lib/commonjs/platform/createNotificationService.native.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.expo.js +214 -113
- package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -1
- package/lib/commonjs/platform/createRecorderService.expo.js +248 -130
- package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -1
- package/lib/commonjs/utils/expoBackwardUtils.js +23 -0
- package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
- package/lib/commonjs/utils/expoPermissionGranted.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/platform/createMediaService.expo.js +82 -13
- package/lib/module/platform/createMediaService.expo.js.map +1 -1
- package/lib/module/platform/createNotificationService.native.js +32 -6
- package/lib/module/platform/createNotificationService.native.js.map +1 -1
- package/lib/module/platform/createPlayerService.expo.js +214 -113
- package/lib/module/platform/createPlayerService.expo.js.map +1 -1
- package/lib/module/platform/createRecorderService.expo.js +249 -131
- package/lib/module/platform/createRecorderService.expo.js.map +1 -1
- package/lib/module/utils/expoBackwardUtils.js +23 -0
- package/lib/module/utils/expoBackwardUtils.js.map +1 -1
- package/lib/module/utils/expoPermissionGranted.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/platform/createMediaService.expo.d.ts +2 -2
- package/lib/typescript/src/platform/createNotificationService.native.d.ts +13 -1
- package/lib/typescript/src/platform/createPlayerService.expo.d.ts +2 -2
- package/lib/typescript/src/platform/createRecorderService.expo.d.ts +2 -2
- package/lib/typescript/src/utils/expoBackwardUtils.d.ts +10 -0
- package/lib/typescript/src/utils/expoPermissionGranted.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +16 -5
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +0 -3
- package/src/platform/createMediaService.expo.tsx +87 -9
- package/src/platform/createNotificationService.native.ts +53 -7
- package/src/platform/createPlayerService.expo.tsx +242 -109
- package/src/platform/createRecorderService.expo.tsx +267 -110
- package/src/utils/expoBackwardUtils.ts +29 -0
- package/src/utils/expoPermissionGranted.ts +3 -1
- package/src/version.ts +1 -1
|
@@ -2,133 +2,234 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
2
2
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
3
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
4
|
import { Logger, matchesOneOf } from '@sendbird/uikit-utils';
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
_defineProperty(this, "setState", state => {
|
|
17
|
-
this.state = state;
|
|
18
|
-
this.stateSubscribers.forEach(callback => {
|
|
19
|
-
callback(state);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
_defineProperty(this, "setListener", () => {
|
|
23
|
-
sound.setProgressUpdateIntervalAsync(100).catch(error => {
|
|
24
|
-
Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);
|
|
25
|
-
});
|
|
26
|
-
sound.setOnPlaybackStatusUpdate(status => {
|
|
27
|
-
if (status.isLoaded) {
|
|
28
|
-
if (status.didJustFinish) {
|
|
29
|
-
this.stop().catch(error => {
|
|
30
|
-
Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
if (status.isPlaying) {
|
|
34
|
-
this.playbackSubscribers.forEach(callback => {
|
|
35
|
-
callback({
|
|
36
|
-
currentTime: status.positionMillis,
|
|
37
|
-
duration: status.durationMillis ?? 0,
|
|
38
|
-
stopped: status.didJustFinish
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
});
|
|
5
|
+
import expoBackwardUtils from '../utils/expoBackwardUtils';
|
|
6
|
+
class BaseAudioPlayerAdapter {
|
|
7
|
+
constructor() {
|
|
8
|
+
_defineProperty(this, "uri", void 0);
|
|
9
|
+
_defineProperty(this, "state", 'idle');
|
|
10
|
+
_defineProperty(this, "playbackSubscribers", new Set());
|
|
11
|
+
_defineProperty(this, "stateSubscribers", new Set());
|
|
12
|
+
_defineProperty(this, "setState", state => {
|
|
13
|
+
this.state = state;
|
|
14
|
+
this.stateSubscribers.forEach(callback => {
|
|
15
|
+
callback(state);
|
|
44
16
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
this.setState('preparing');
|
|
71
|
-
await sound.loadAsync({
|
|
72
|
-
uri
|
|
73
|
-
}, {
|
|
74
|
-
shouldPlay: false
|
|
75
|
-
}, true);
|
|
76
|
-
this.uri = uri;
|
|
17
|
+
});
|
|
18
|
+
_defineProperty(this, "requestPermission", async () => {
|
|
19
|
+
return true;
|
|
20
|
+
});
|
|
21
|
+
_defineProperty(this, "addPlaybackListener", callback => {
|
|
22
|
+
this.playbackSubscribers.add(callback);
|
|
23
|
+
return () => {
|
|
24
|
+
this.playbackSubscribers.delete(callback);
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
_defineProperty(this, "addStateListener", callback => {
|
|
28
|
+
this.stateSubscribers.add(callback);
|
|
29
|
+
return () => {
|
|
30
|
+
this.stateSubscribers.delete(callback);
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
class LegacyExpoAVPlayerAdapter extends BaseAudioPlayerAdapter {
|
|
36
|
+
constructor(avModule) {
|
|
37
|
+
super();
|
|
38
|
+
_defineProperty(this, "sound", void 0);
|
|
39
|
+
_defineProperty(this, "setListener", () => {
|
|
40
|
+
this.sound.setProgressUpdateIntervalAsync(100).catch(error => {
|
|
41
|
+
Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);
|
|
77
42
|
});
|
|
78
|
-
|
|
79
|
-
if (
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
this.setState('playing');
|
|
85
|
-
} catch (e) {
|
|
86
|
-
this.setState('idle');
|
|
87
|
-
this.uri = undefined;
|
|
88
|
-
this.removeListener();
|
|
89
|
-
throw e;
|
|
43
|
+
this.sound.setOnPlaybackStatusUpdate(status => {
|
|
44
|
+
if (status.isLoaded) {
|
|
45
|
+
if (status.didJustFinish) {
|
|
46
|
+
this.stop().catch(error => {
|
|
47
|
+
Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);
|
|
48
|
+
});
|
|
90
49
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
50
|
+
if (status.isPlaying) {
|
|
51
|
+
this.playbackSubscribers.forEach(callback => {
|
|
52
|
+
callback({
|
|
53
|
+
currentTime: status.positionMillis,
|
|
54
|
+
duration: status.durationMillis ?? 0,
|
|
55
|
+
stopped: status.didJustFinish
|
|
56
|
+
});
|
|
57
|
+
});
|
|
99
58
|
}
|
|
100
59
|
}
|
|
101
60
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
61
|
+
});
|
|
62
|
+
_defineProperty(this, "removeListener", () => {
|
|
63
|
+
this.sound.setOnPlaybackStatusUpdate(null);
|
|
64
|
+
});
|
|
65
|
+
_defineProperty(this, "prepare", async uri => {
|
|
66
|
+
this.setState('preparing');
|
|
67
|
+
await this.sound.loadAsync({
|
|
68
|
+
uri
|
|
69
|
+
}, {
|
|
70
|
+
shouldPlay: false
|
|
71
|
+
}, true);
|
|
72
|
+
this.uri = uri;
|
|
73
|
+
});
|
|
74
|
+
_defineProperty(this, "play", async uri => {
|
|
75
|
+
if (matchesOneOf(this.state, ['idle', 'stopped'])) {
|
|
76
|
+
try {
|
|
77
|
+
await this.prepare(uri);
|
|
78
|
+
this.setListener();
|
|
79
|
+
await this.sound.playAsync();
|
|
80
|
+
this.setState('playing');
|
|
81
|
+
} catch (e) {
|
|
82
|
+
this.setState('idle');
|
|
83
|
+
this.uri = undefined;
|
|
105
84
|
this.removeListener();
|
|
106
|
-
|
|
85
|
+
throw e;
|
|
107
86
|
}
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
await sound.
|
|
112
|
-
|
|
87
|
+
} else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {
|
|
88
|
+
try {
|
|
89
|
+
this.setListener();
|
|
90
|
+
await this.sound.playAsync();
|
|
91
|
+
this.setState('playing');
|
|
92
|
+
} catch (e) {
|
|
113
93
|
this.removeListener();
|
|
114
|
-
|
|
94
|
+
throw e;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
_defineProperty(this, "pause", async () => {
|
|
99
|
+
if (matchesOneOf(this.state, ['playing'])) {
|
|
100
|
+
await this.sound.pauseAsync();
|
|
101
|
+
this.removeListener();
|
|
102
|
+
this.setState('paused');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
_defineProperty(this, "stop", async () => {
|
|
106
|
+
if (matchesOneOf(this.state, ['playing', 'paused'])) {
|
|
107
|
+
await this.sound.stopAsync();
|
|
108
|
+
await this.sound.unloadAsync();
|
|
109
|
+
this.removeListener();
|
|
110
|
+
this.setState('stopped');
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
_defineProperty(this, "reset", async () => {
|
|
114
|
+
await this.stop();
|
|
115
|
+
this.setState('idle');
|
|
116
|
+
this.uri = undefined;
|
|
117
|
+
this.playbackSubscribers.clear();
|
|
118
|
+
this.stateSubscribers.clear();
|
|
119
|
+
});
|
|
120
|
+
_defineProperty(this, "seek", async time => {
|
|
121
|
+
if (matchesOneOf(this.state, ['playing', 'paused'])) {
|
|
122
|
+
await this.sound.playFromPositionAsync(time);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
this.sound = new avModule.Audio.Sound();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
class ExpoAudioPlayerAdapter extends BaseAudioPlayerAdapter {
|
|
129
|
+
constructor(audioModule) {
|
|
130
|
+
super();
|
|
131
|
+
_defineProperty(this, "audioModule", void 0);
|
|
132
|
+
_defineProperty(this, "player", null);
|
|
133
|
+
_defineProperty(this, "setListener", () => {
|
|
134
|
+
if (!this.player) return;
|
|
135
|
+
this.player.addListener('playbackStatusUpdate', status => {
|
|
136
|
+
if (status.isLoaded) {
|
|
137
|
+
if (status.didJustFinish) {
|
|
138
|
+
this.stop().catch(error => {
|
|
139
|
+
Logger.warn('[PlayerService.Expo] Failed to stop in playbackStatusUpdate', error);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (status.playing) {
|
|
143
|
+
this.playbackSubscribers.forEach(callback => {
|
|
144
|
+
callback({
|
|
145
|
+
currentTime: status.currentTime,
|
|
146
|
+
duration: status.duration ?? 0,
|
|
147
|
+
stopped: status.didJustFinish
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
115
151
|
}
|
|
116
152
|
});
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.
|
|
121
|
-
|
|
122
|
-
|
|
153
|
+
});
|
|
154
|
+
_defineProperty(this, "removeListener", () => {
|
|
155
|
+
if (this.player) {
|
|
156
|
+
this.player.remove();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
_defineProperty(this, "prepare", async uri => {
|
|
160
|
+
this.setState('preparing');
|
|
161
|
+
this.player = this.audioModule.createAudioPlayer(uri, {
|
|
162
|
+
updateInterval: 100
|
|
123
163
|
});
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
164
|
+
this.uri = uri;
|
|
165
|
+
});
|
|
166
|
+
_defineProperty(this, "play", async uri => {
|
|
167
|
+
if (matchesOneOf(this.state, ['idle', 'stopped'])) {
|
|
168
|
+
try {
|
|
169
|
+
var _this$player;
|
|
170
|
+
await this.prepare(uri);
|
|
171
|
+
this.setListener();
|
|
172
|
+
(_this$player = this.player) === null || _this$player === void 0 || _this$player.play();
|
|
173
|
+
this.setState('playing');
|
|
174
|
+
} catch (e) {
|
|
175
|
+
this.setState('idle');
|
|
176
|
+
this.uri = undefined;
|
|
177
|
+
this.removeListener();
|
|
178
|
+
throw e;
|
|
127
179
|
}
|
|
128
|
-
})
|
|
129
|
-
|
|
180
|
+
} else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {
|
|
181
|
+
try {
|
|
182
|
+
var _this$player2;
|
|
183
|
+
this.setListener();
|
|
184
|
+
(_this$player2 = this.player) === null || _this$player2 === void 0 || _this$player2.play();
|
|
185
|
+
this.setState('playing');
|
|
186
|
+
} catch (e) {
|
|
187
|
+
this.removeListener();
|
|
188
|
+
throw e;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
_defineProperty(this, "pause", async () => {
|
|
193
|
+
if (matchesOneOf(this.state, ['playing'])) {
|
|
194
|
+
var _this$player3;
|
|
195
|
+
(_this$player3 = this.player) === null || _this$player3 === void 0 || _this$player3.pause();
|
|
196
|
+
this.removeListener();
|
|
197
|
+
this.setState('paused');
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
_defineProperty(this, "stop", async () => {
|
|
201
|
+
if (matchesOneOf(this.state, ['playing', 'paused'])) {
|
|
202
|
+
var _this$player4;
|
|
203
|
+
(_this$player4 = this.player) === null || _this$player4 === void 0 || _this$player4.pause();
|
|
204
|
+
this.removeListener();
|
|
205
|
+
this.setState('stopped');
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
_defineProperty(this, "reset", async () => {
|
|
209
|
+
var _this$player5;
|
|
210
|
+
await this.stop();
|
|
211
|
+
(_this$player5 = this.player) === null || _this$player5 === void 0 || _this$player5.remove();
|
|
212
|
+
this.player = null;
|
|
213
|
+
this.setState('idle');
|
|
214
|
+
this.uri = undefined;
|
|
215
|
+
this.playbackSubscribers.clear();
|
|
216
|
+
this.stateSubscribers.clear();
|
|
217
|
+
});
|
|
218
|
+
_defineProperty(this, "seek", async time => {
|
|
219
|
+
if (matchesOneOf(this.state, ['playing', 'paused']) && this.player) {
|
|
220
|
+
this.player.currentTime = time;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
this.audioModule = audioModule;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
const createExpoPlayerService = ({
|
|
227
|
+
avModule
|
|
228
|
+
}) => {
|
|
229
|
+
if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {
|
|
230
|
+
Logger.warn('[PlayerService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-audio.');
|
|
130
231
|
}
|
|
131
|
-
return new
|
|
232
|
+
return expoBackwardUtils.expoAV.isAudioModule(avModule) ? new ExpoAudioPlayerAdapter(avModule) : new LegacyExpoAVPlayerAdapter(avModule);
|
|
132
233
|
};
|
|
133
234
|
export default createExpoPlayerService;
|
|
134
235
|
//# sourceMappingURL=createPlayerService.expo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Logger","matchesOneOf","expoPermissionGranted","createExpoPlayerService","avModule","sound","Audio","Sound","VoicePlayer","constructor","_defineProperty","Set","state","stateSubscribers","forEach","callback","setProgressUpdateIntervalAsync","catch","error","warn","setOnPlaybackStatusUpdate","status","isLoaded","didJustFinish","stop","isPlaying","playbackSubscribers","currentTime","positionMillis","duration","durationMillis","stopped","getPermissionsAsync","requestPermissionsAsync","add","delete","uri","setState","loadAsync","shouldPlay","prepare","setListener","playAsync","e","undefined","removeListener","pauseAsync","stopAsync","unloadAsync","clear","time","playFromPositionAsync"],"sources":["createPlayerService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\n\nimport { Logger, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n avModule: typeof ExpoAV;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\nconst createExpoPlayerService = ({ avModule }: Modules): PlayerServiceInterface => {\n const sound = new avModule.Audio.Sound();\n\n class VoicePlayer implements PlayerServiceInterface {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n private readonly playbackSubscribers = new Set<PlaybackListener>();\n private readonly stateSubscribers = new Set<StateListener>();\n\n private setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n private setListener = () => {\n sound.setProgressUpdateIntervalAsync(100).catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);\n });\n sound.setOnPlaybackStatusUpdate((status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);\n });\n }\n if (status.isPlaying) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.positionMillis,\n duration: status.durationMillis ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n sound.setOnPlaybackStatusUpdate(null);\n };\n\n public requestPermission = async (): Promise<boolean> => {\n const status = await avModule.Audio.getPermissionsAsync();\n if (expoPermissionGranted([status])) {\n return true;\n } else {\n const status = await avModule.Audio.requestPermissionsAsync();\n return expoPermissionGranted([status]);\n }\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: (state: PlayerServiceInterface['state']) => void): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n await sound.loadAsync({ uri }, { shouldPlay: false }, true);\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n await sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await sound.pauseAsync();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await sound.stopAsync();\n await sound.unloadAsync();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await sound.playFromPositionAsync(time);\n }\n };\n }\n\n return new VoicePlayer();\n};\n\nexport default createExpoPlayerService;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Logger","matchesOneOf","expoBackwardUtils","BaseAudioPlayerAdapter","constructor","_defineProperty","Set","state","stateSubscribers","forEach","callback","playbackSubscribers","add","delete","LegacyExpoAVPlayerAdapter","avModule","sound","setProgressUpdateIntervalAsync","catch","error","warn","setOnPlaybackStatusUpdate","status","isLoaded","didJustFinish","stop","isPlaying","currentTime","positionMillis","duration","durationMillis","stopped","uri","setState","loadAsync","shouldPlay","prepare","setListener","playAsync","e","undefined","removeListener","pauseAsync","stopAsync","unloadAsync","clear","time","playFromPositionAsync","Audio","Sound","ExpoAudioPlayerAdapter","audioModule","player","addListener","playing","remove","createAudioPlayer","updateInterval","_this$player","play","_this$player2","_this$player3","pause","_this$player4","_this$player5","createExpoPlayerService","expoAV","isLegacyAVModule","isAudioModule"],"sources":["createPlayerService.expo.tsx"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\n\nimport { Logger, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoAudioModule } from '../utils/expoBackwardUtils';\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n avModule: ExpoAudioModule;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\n\ninterface AudioPlayerAdapter {\n requestPermission(): Promise<boolean>;\n play(uri: string): Promise<void>;\n pause(): Promise<void>;\n stop(): Promise<void>;\n reset(): Promise<void>;\n seek(time: number): Promise<void>;\n addPlaybackListener(callback: PlaybackListener): Unsubscribe;\n addStateListener(callback: StateListener): Unsubscribe;\n readonly state: PlayerServiceInterface['state'];\n uri?: string;\n}\n\nabstract class BaseAudioPlayerAdapter implements AudioPlayerAdapter {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n protected readonly playbackSubscribers = new Set<PlaybackListener>();\n protected readonly stateSubscribers = new Set<StateListener>();\n\n protected setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n public requestPermission = async (): Promise<boolean> => {\n return true;\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: StateListener): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n abstract play(uri: string): Promise<void>;\n abstract pause(): Promise<void>;\n abstract stop(): Promise<void>;\n abstract reset(): Promise<void>;\n abstract seek(time: number): Promise<void>;\n}\n\nclass LegacyExpoAVPlayerAdapter extends BaseAudioPlayerAdapter {\n private readonly sound: ExpoAV.Audio.Sound;\n\n constructor(avModule: typeof ExpoAV) {\n super();\n this.sound = new avModule.Audio.Sound();\n }\n\n private setListener = () => {\n this.sound.setProgressUpdateIntervalAsync(100).catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);\n });\n this.sound.setOnPlaybackStatusUpdate((status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);\n });\n }\n if (status.isPlaying) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.positionMillis,\n duration: status.durationMillis ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n this.sound.setOnPlaybackStatusUpdate(null);\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n await this.sound.loadAsync({ uri }, { shouldPlay: false }, true);\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n await this.sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await this.sound.playAsync();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await this.sound.pauseAsync();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await this.sound.stopAsync();\n await this.sound.unloadAsync();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await this.sound.playFromPositionAsync(time);\n }\n };\n}\n\nclass ExpoAudioPlayerAdapter extends BaseAudioPlayerAdapter {\n private readonly audioModule: typeof ExpoAudio;\n private player: ExpoAudio.AudioPlayer | null = null;\n\n constructor(audioModule: typeof ExpoAudio) {\n super();\n this.audioModule = audioModule;\n }\n\n private setListener = () => {\n if (!this.player) return;\n\n this.player.addListener('playbackStatusUpdate', (status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in playbackStatusUpdate', error);\n });\n }\n if (status.playing) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.currentTime,\n duration: status.duration ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n if (this.player) {\n this.player.remove();\n }\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n this.player = this.audioModule.createAudioPlayer(uri, { updateInterval: 100 });\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n this.player?.play();\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n this.player?.play();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n this.player?.pause();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n this.player?.pause();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.player?.remove();\n this.player = null;\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused']) && this.player) {\n this.player.currentTime = time;\n }\n };\n}\n\nconst createExpoPlayerService = ({ avModule }: Modules): PlayerServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[PlayerService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-audio.',\n );\n }\n\n return expoBackwardUtils.expoAV.isAudioModule(avModule)\n ? new ExpoAudioPlayerAdapter(avModule)\n : new LegacyExpoAVPlayerAdapter(avModule);\n};\n\nexport default createExpoPlayerService;\n"],"mappings":";;;AAGA,SAASA,MAAM,EAAEC,YAAY,QAAQ,uBAAuB;AAE5D,OAAOC,iBAAiB,MAAM,4BAA4B;AAuB1D,MAAeC,sBAAsB,CAA+B;EAAAC,YAAA;IAAAC,eAAA;IAAAA,eAAA,gBAEzB,MAAM;IAAAA,eAAA,8BAEN,IAAIC,GAAG,CAAmB,CAAC;IAAAD,eAAA,2BAC9B,IAAIC,GAAG,CAAgB,CAAC;IAAAD,eAAA,mBAExCE,KAAsC,IAAK;MAC/D,IAAI,CAACA,KAAK,GAAGA,KAAK;MAClB,IAAI,CAACC,gBAAgB,CAACC,OAAO,CAAEC,QAAQ,IAAK;QAC1CA,QAAQ,CAACH,KAAK,CAAC;MACjB,CAAC,CAAC;IACJ,CAAC;IAAAF,eAAA,4BAE0B,YAA8B;MACvD,OAAO,IAAI;IACb,CAAC;IAAAA,eAAA,8BAE6BK,QAA0B,IAAkB;MACxE,IAAI,CAACC,mBAAmB,CAACC,GAAG,CAACF,QAAQ,CAAC;MACtC,OAAO,MAAM;QACX,IAAI,CAACC,mBAAmB,CAACE,MAAM,CAACH,QAAQ,CAAC;MAC3C,CAAC;IACH,CAAC;IAAAL,eAAA,2BAE0BK,QAAuB,IAAkB;MAClE,IAAI,CAACF,gBAAgB,CAACI,GAAG,CAACF,QAAQ,CAAC;MACnC,OAAO,MAAM;QACX,IAAI,CAACF,gBAAgB,CAACK,MAAM,CAACH,QAAQ,CAAC;MACxC,CAAC;IACH,CAAC;EAAA;AAOH;AAEA,MAAMI,yBAAyB,SAASX,sBAAsB,CAAC;EAG7DC,WAAWA,CAACW,QAAuB,EAAE;IACnC,KAAK,CAAC,CAAC;IAACV,eAAA;IAAAA,eAAA,sBAIY,MAAM;MAC1B,IAAI,CAACW,KAAK,CAACC,8BAA8B,CAAC,GAAG,CAAC,CAACC,KAAK,CAAEC,KAAK,IAAK;QAC9DnB,MAAM,CAACoB,IAAI,CAAC,6DAA6D,EAAED,KAAK,CAAC;MACnF,CAAC,CAAC;MACF,IAAI,CAACH,KAAK,CAACK,yBAAyB,CAAEC,MAAM,IAAK;QAC/C,IAAIA,MAAM,CAACC,QAAQ,EAAE;UACnB,IAAID,MAAM,CAACE,aAAa,EAAE;YACxB,IAAI,CAACC,IAAI,CAAC,CAAC,CAACP,KAAK,CAAEC,KAAK,IAAK;cAC3BnB,MAAM,CAACoB,IAAI,CAAC,+DAA+D,EAAED,KAAK,CAAC;YACrF,CAAC,CAAC;UACJ;UACA,IAAIG,MAAM,CAACI,SAAS,EAAE;YACpB,IAAI,CAACf,mBAAmB,CAACF,OAAO,CAAEC,QAAQ,IAAK;cAC7CA,QAAQ,CAAC;gBACPiB,WAAW,EAAEL,MAAM,CAACM,cAAc;gBAClCC,QAAQ,EAAEP,MAAM,CAACQ,cAAc,IAAI,CAAC;gBACpCC,OAAO,EAAET,MAAM,CAACE;cAClB,CAAC,CAAC;YACJ,CAAC,CAAC;UACJ;QACF;MACF,CAAC,CAAC;IACJ,CAAC;IAAAnB,eAAA,yBAEwB,MAAM;MAC7B,IAAI,CAACW,KAAK,CAACK,yBAAyB,CAAC,IAAI,CAAC;IAC5C,CAAC;IAAAhB,eAAA,kBAEiB,MAAO2B,GAAW,IAAK;MACvC,IAAI,CAACC,QAAQ,CAAC,WAAW,CAAC;MAC1B,MAAM,IAAI,CAACjB,KAAK,CAACkB,SAAS,CAAC;QAAEF;MAAI,CAAC,EAAE;QAAEG,UAAU,EAAE;MAAM,CAAC,EAAE,IAAI,CAAC;MAChE,IAAI,CAACH,GAAG,GAAGA,GAAG;IAChB,CAAC;IAAA3B,eAAA,eAEa,MAAO2B,GAAW,IAAoB;MAClD,IAAI/B,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE;QACjD,IAAI;UACF,MAAM,IAAI,CAAC6B,OAAO,CAACJ,GAAG,CAAC;UACvB,IAAI,CAACK,WAAW,CAAC,CAAC;UAClB,MAAM,IAAI,CAACrB,KAAK,CAACsB,SAAS,CAAC,CAAC;UAC5B,IAAI,CAACL,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,OAAOM,CAAC,EAAE;UACV,IAAI,CAACN,QAAQ,CAAC,MAAM,CAAC;UACrB,IAAI,CAACD,GAAG,GAAGQ,SAAS;UACpB,IAAI,CAACC,cAAc,CAAC,CAAC;UACrB,MAAMF,CAAC;QACT;MACF,CAAC,MAAM,IAAItC,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAACyB,GAAG,KAAKA,GAAG,EAAE;QACnE,IAAI;UACF,IAAI,CAACK,WAAW,CAAC,CAAC;UAClB,MAAM,IAAI,CAACrB,KAAK,CAACsB,SAAS,CAAC,CAAC;UAC5B,IAAI,CAACL,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,OAAOM,CAAC,EAAE;UACV,IAAI,CAACE,cAAc,CAAC,CAAC;UACrB,MAAMF,CAAC;QACT;MACF;IACF,CAAC;IAAAlC,eAAA,gBAEc,YAA2B;MACxC,IAAIJ,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;QACzC,MAAM,IAAI,CAACS,KAAK,CAAC0B,UAAU,CAAC,CAAC;QAC7B,IAAI,CAACD,cAAc,CAAC,CAAC;QACrB,IAAI,CAACR,QAAQ,CAAC,QAAQ,CAAC;MACzB;IACF,CAAC;IAAA5B,eAAA,eAEa,YAA2B;MACvC,IAAIJ,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;QACnD,MAAM,IAAI,CAACS,KAAK,CAAC2B,SAAS,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC3B,KAAK,CAAC4B,WAAW,CAAC,CAAC;QAC9B,IAAI,CAACH,cAAc,CAAC,CAAC;QACrB,IAAI,CAACR,QAAQ,CAAC,SAAS,CAAC;MAC1B;IACF,CAAC;IAAA5B,eAAA,gBAEc,YAA2B;MACxC,MAAM,IAAI,CAACoB,IAAI,CAAC,CAAC;MACjB,IAAI,CAACQ,QAAQ,CAAC,MAAM,CAAC;MACrB,IAAI,CAACD,GAAG,GAAGQ,SAAS;MACpB,IAAI,CAAC7B,mBAAmB,CAACkC,KAAK,CAAC,CAAC;MAChC,IAAI,CAACrC,gBAAgB,CAACqC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAAxC,eAAA,eAEa,MAAOyC,IAAY,IAAoB;MACnD,IAAI7C,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;QACnD,MAAM,IAAI,CAACS,KAAK,CAAC+B,qBAAqB,CAACD,IAAI,CAAC;MAC9C;IACF,CAAC;IA3FC,IAAI,CAAC9B,KAAK,GAAG,IAAID,QAAQ,CAACiC,KAAK,CAACC,KAAK,CAAC,CAAC;EACzC;AA2FF;AAEA,MAAMC,sBAAsB,SAAS/C,sBAAsB,CAAC;EAI1DC,WAAWA,CAAC+C,WAA6B,EAAE;IACzC,KAAK,CAAC,CAAC;IAAC9C,eAAA;IAAAA,eAAA,iBAHqC,IAAI;IAAAA,eAAA,sBAO7B,MAAM;MAC1B,IAAI,CAAC,IAAI,CAAC+C,MAAM,EAAE;MAElB,IAAI,CAACA,MAAM,CAACC,WAAW,CAAC,sBAAsB,EAAG/B,MAAM,IAAK;QAC1D,IAAIA,MAAM,CAACC,QAAQ,EAAE;UACnB,IAAID,MAAM,CAACE,aAAa,EAAE;YACxB,IAAI,CAACC,IAAI,CAAC,CAAC,CAACP,KAAK,CAAEC,KAAK,IAAK;cAC3BnB,MAAM,CAACoB,IAAI,CAAC,6DAA6D,EAAED,KAAK,CAAC;YACnF,CAAC,CAAC;UACJ;UACA,IAAIG,MAAM,CAACgC,OAAO,EAAE;YAClB,IAAI,CAAC3C,mBAAmB,CAACF,OAAO,CAAEC,QAAQ,IAAK;cAC7CA,QAAQ,CAAC;gBACPiB,WAAW,EAAEL,MAAM,CAACK,WAAW;gBAC/BE,QAAQ,EAAEP,MAAM,CAACO,QAAQ,IAAI,CAAC;gBAC9BE,OAAO,EAAET,MAAM,CAACE;cAClB,CAAC,CAAC;YACJ,CAAC,CAAC;UACJ;QACF;MACF,CAAC,CAAC;IACJ,CAAC;IAAAnB,eAAA,yBAEwB,MAAM;MAC7B,IAAI,IAAI,CAAC+C,MAAM,EAAE;QACf,IAAI,CAACA,MAAM,CAACG,MAAM,CAAC,CAAC;MACtB;IACF,CAAC;IAAAlD,eAAA,kBAEiB,MAAO2B,GAAW,IAAK;MACvC,IAAI,CAACC,QAAQ,CAAC,WAAW,CAAC;MAC1B,IAAI,CAACmB,MAAM,GAAG,IAAI,CAACD,WAAW,CAACK,iBAAiB,CAACxB,GAAG,EAAE;QAAEyB,cAAc,EAAE;MAAI,CAAC,CAAC;MAC9E,IAAI,CAACzB,GAAG,GAAGA,GAAG;IAChB,CAAC;IAAA3B,eAAA,eAEa,MAAO2B,GAAW,IAAoB;MAClD,IAAI/B,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE;QACjD,IAAI;UAAA,IAAAmD,YAAA;UACF,MAAM,IAAI,CAACtB,OAAO,CAACJ,GAAG,CAAC;UACvB,IAAI,CAACK,WAAW,CAAC,CAAC;UAClB,CAAAqB,YAAA,OAAI,CAACN,MAAM,cAAAM,YAAA,eAAXA,YAAA,CAAaC,IAAI,CAAC,CAAC;UACnB,IAAI,CAAC1B,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,OAAOM,CAAC,EAAE;UACV,IAAI,CAACN,QAAQ,CAAC,MAAM,CAAC;UACrB,IAAI,CAACD,GAAG,GAAGQ,SAAS;UACpB,IAAI,CAACC,cAAc,CAAC,CAAC;UACrB,MAAMF,CAAC;QACT;MACF,CAAC,MAAM,IAAItC,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAACyB,GAAG,KAAKA,GAAG,EAAE;QACnE,IAAI;UAAA,IAAA4B,aAAA;UACF,IAAI,CAACvB,WAAW,CAAC,CAAC;UAClB,CAAAuB,aAAA,OAAI,CAACR,MAAM,cAAAQ,aAAA,eAAXA,aAAA,CAAaD,IAAI,CAAC,CAAC;UACnB,IAAI,CAAC1B,QAAQ,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,OAAOM,CAAC,EAAE;UACV,IAAI,CAACE,cAAc,CAAC,CAAC;UACrB,MAAMF,CAAC;QACT;MACF;IACF,CAAC;IAAAlC,eAAA,gBAEc,YAA2B;MACxC,IAAIJ,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;QAAA,IAAAsD,aAAA;QACzC,CAAAA,aAAA,OAAI,CAACT,MAAM,cAAAS,aAAA,eAAXA,aAAA,CAAaC,KAAK,CAAC,CAAC;QACpB,IAAI,CAACrB,cAAc,CAAC,CAAC;QACrB,IAAI,CAACR,QAAQ,CAAC,QAAQ,CAAC;MACzB;IACF,CAAC;IAAA5B,eAAA,eAEa,YAA2B;MACvC,IAAIJ,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;QAAA,IAAAwD,aAAA;QACnD,CAAAA,aAAA,OAAI,CAACX,MAAM,cAAAW,aAAA,eAAXA,aAAA,CAAaD,KAAK,CAAC,CAAC;QACpB,IAAI,CAACrB,cAAc,CAAC,CAAC;QACrB,IAAI,CAACR,QAAQ,CAAC,SAAS,CAAC;MAC1B;IACF,CAAC;IAAA5B,eAAA,gBAEc,YAA2B;MAAA,IAAA2D,aAAA;MACxC,MAAM,IAAI,CAACvC,IAAI,CAAC,CAAC;MACjB,CAAAuC,aAAA,OAAI,CAACZ,MAAM,cAAAY,aAAA,eAAXA,aAAA,CAAaT,MAAM,CAAC,CAAC;MACrB,IAAI,CAACH,MAAM,GAAG,IAAI;MAClB,IAAI,CAACnB,QAAQ,CAAC,MAAM,CAAC;MACrB,IAAI,CAACD,GAAG,GAAGQ,SAAS;MACpB,IAAI,CAAC7B,mBAAmB,CAACkC,KAAK,CAAC,CAAC;MAChC,IAAI,CAACrC,gBAAgB,CAACqC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAAxC,eAAA,eAEa,MAAOyC,IAAY,IAAoB;MACnD,IAAI7C,YAAY,CAAC,IAAI,CAACM,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC6C,MAAM,EAAE;QAClE,IAAI,CAACA,MAAM,CAACzB,WAAW,GAAGmB,IAAI;MAChC;IACF,CAAC;IA7FC,IAAI,CAACK,WAAW,GAAGA,WAAW;EAChC;AA6FF;AAEA,MAAMc,uBAAuB,GAAGA,CAAC;EAAElD;AAAkB,CAAC,KAA6B;EACjF,IAAIb,iBAAiB,CAACgE,MAAM,CAACC,gBAAgB,CAACpD,QAAQ,CAAC,EAAE;IACvDf,MAAM,CAACoB,IAAI,CACT,0GACF,CAAC;EACH;EAEA,OAAOlB,iBAAiB,CAACgE,MAAM,CAACE,aAAa,CAACrD,QAAQ,CAAC,GACnD,IAAImC,sBAAsB,CAACnC,QAAQ,CAAC,GACpC,IAAID,yBAAyB,CAACC,QAAQ,CAAC;AAC7C,CAAC;AAED,eAAekD,uBAAuB","ignoreList":[]}
|