@draftbit/core 47.3.1-9aa407.2 → 47.3.1-9f6641.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/lib/src/components/AudioPlayer/AudioPlayerCommon.d.ts +39 -0
- package/lib/src/components/AudioPlayer/AudioPlayerCommon.js +2 -0
- package/lib/src/components/AudioPlayer/AudioPlayerCommon.js.map +1 -0
- package/lib/src/components/AudioPlayer/AudioPlayerWithInterface.d.ts +6 -0
- package/lib/src/components/AudioPlayer/AudioPlayerWithInterface.js +126 -0
- package/lib/src/components/AudioPlayer/AudioPlayerWithInterface.js.map +1 -0
- package/lib/src/components/AudioPlayer/HeadlessAudioPlayer.d.ts +8 -0
- package/lib/src/components/AudioPlayer/HeadlessAudioPlayer.js +132 -0
- package/lib/src/components/AudioPlayer/HeadlessAudioPlayer.js.map +1 -0
- package/lib/src/components/AudioPlayer/index.d.ts +10 -0
- package/lib/src/components/AudioPlayer/index.js +15 -0
- package/lib/src/components/AudioPlayer/index.js.map +1 -0
- package/lib/src/components/TabView/TabView.js +6 -3
- package/lib/src/components/TabView/TabView.js.map +1 -1
- package/lib/src/index.d.ts +1 -0
- package/lib/src/index.js +1 -0
- package/lib/src/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -3
- package/src/components/AudioPlayer/AudioPlayerCommon.js +2 -0
- package/src/components/AudioPlayer/AudioPlayerCommon.js.map +1 -0
- package/src/components/AudioPlayer/AudioPlayerCommon.ts +44 -0
- package/src/components/AudioPlayer/AudioPlayerWithInterface.js +126 -0
- package/src/components/AudioPlayer/AudioPlayerWithInterface.js.map +1 -0
- package/src/components/AudioPlayer/AudioPlayerWithInterface.tsx +217 -0
- package/src/components/AudioPlayer/HeadlessAudioPlayer.js +132 -0
- package/src/components/AudioPlayer/HeadlessAudioPlayer.js.map +1 -0
- package/src/components/AudioPlayer/HeadlessAudioPlayer.tsx +187 -0
- package/src/components/AudioPlayer/index.js +15 -0
- package/src/components/AudioPlayer/index.js.map +1 -0
- package/src/components/AudioPlayer/index.tsx +30 -0
- package/src/components/TabView/TabView.js +6 -3
- package/src/components/TabView/TabView.js.map +1 -1
- package/src/components/TabView/TabView.tsx +12 -6
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/index.tsx +5 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import {
|
|
3
|
+
Audio,
|
|
4
|
+
AVPlaybackStatus,
|
|
5
|
+
InterruptionModeIOS,
|
|
6
|
+
InterruptionModeAndroid,
|
|
7
|
+
} from "expo-av";
|
|
8
|
+
import {
|
|
9
|
+
HeadlessAudioPlayerProps,
|
|
10
|
+
HeadlessAudioPlayerRef,
|
|
11
|
+
} from "./AudioPlayerCommon";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Audio Player component without an interface (UI).
|
|
15
|
+
* Only handles playing of the audio and provides callbacks and ref functions
|
|
16
|
+
*/
|
|
17
|
+
const HeadlessAudioPlayer = React.forwardRef<
|
|
18
|
+
HeadlessAudioPlayerRef,
|
|
19
|
+
HeadlessAudioPlayerProps
|
|
20
|
+
>(
|
|
21
|
+
(
|
|
22
|
+
{
|
|
23
|
+
source,
|
|
24
|
+
interruptionMode = "lower volume",
|
|
25
|
+
playsInBackground = false,
|
|
26
|
+
playsInSilentModeIOS = false,
|
|
27
|
+
playThroughEarpieceAndroid = false,
|
|
28
|
+
onPlaybackStatusUpdate: onPlaybackStatusUpdateProp,
|
|
29
|
+
onPlaybackFinish,
|
|
30
|
+
},
|
|
31
|
+
ref
|
|
32
|
+
) => {
|
|
33
|
+
const [currentSound, setCurrentSound] = React.useState<Audio.Sound>();
|
|
34
|
+
const [isPlaying, setIsPlaying] = React.useState(false);
|
|
35
|
+
|
|
36
|
+
const updateAudioMode = React.useCallback(async () => {
|
|
37
|
+
try {
|
|
38
|
+
await Audio.setAudioModeAsync({
|
|
39
|
+
staysActiveInBackground: playsInBackground,
|
|
40
|
+
interruptionModeIOS:
|
|
41
|
+
interruptionMode === "lower volume"
|
|
42
|
+
? InterruptionModeIOS.DuckOthers
|
|
43
|
+
: InterruptionModeIOS.DoNotMix,
|
|
44
|
+
interruptionModeAndroid:
|
|
45
|
+
interruptionMode === "lower volume"
|
|
46
|
+
? InterruptionModeAndroid.DuckOthers
|
|
47
|
+
: InterruptionModeAndroid.DoNotMix,
|
|
48
|
+
playsInSilentModeIOS,
|
|
49
|
+
playThroughEarpieceAndroid,
|
|
50
|
+
});
|
|
51
|
+
} catch (e) {
|
|
52
|
+
console.error(
|
|
53
|
+
"Failed to set audio mode. interruptionMode, playsInBackground, playsInSilentModeIOS, playThroughEarpieceAndroid might not be set. Failed with",
|
|
54
|
+
e
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}, [
|
|
58
|
+
interruptionMode,
|
|
59
|
+
playsInBackground,
|
|
60
|
+
playsInSilentModeIOS,
|
|
61
|
+
playThroughEarpieceAndroid,
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
const onPlaybackStatusUpdate = (status: AVPlaybackStatus) => {
|
|
65
|
+
if (status.isLoaded) {
|
|
66
|
+
onPlaybackStatusUpdateProp?.({
|
|
67
|
+
isPlaying: status.isPlaying,
|
|
68
|
+
isLoading: false,
|
|
69
|
+
isBuffering: status.isBuffering,
|
|
70
|
+
currentPositionMillis: status.positionMillis || 0,
|
|
71
|
+
durationMillis: status.durationMillis || 0,
|
|
72
|
+
bufferedDurationMillis: status.playableDurationMillis || 0,
|
|
73
|
+
isError: false,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
if (status.didJustFinish) {
|
|
77
|
+
onPlaybackFinish?.();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
setIsPlaying(status.isPlaying);
|
|
81
|
+
} else if (status.error) {
|
|
82
|
+
onPlaybackStatusUpdateProp?.({
|
|
83
|
+
isPlaying: false,
|
|
84
|
+
isLoading: false,
|
|
85
|
+
isBuffering: false,
|
|
86
|
+
currentPositionMillis: 0,
|
|
87
|
+
durationMillis: 0,
|
|
88
|
+
bufferedDurationMillis: 0,
|
|
89
|
+
isError: true,
|
|
90
|
+
error: status.error,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const loadAudio = async () => {
|
|
96
|
+
onPlaybackStatusUpdateProp?.({
|
|
97
|
+
isPlaying: false,
|
|
98
|
+
isLoading: true,
|
|
99
|
+
isBuffering: false,
|
|
100
|
+
currentPositionMillis: 0,
|
|
101
|
+
durationMillis: 0,
|
|
102
|
+
bufferedDurationMillis: 0,
|
|
103
|
+
isError: false,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const { sound } = await Audio.Sound.createAsync(source);
|
|
107
|
+
setCurrentSound(sound);
|
|
108
|
+
sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const togglePlayback = React.useCallback(async () => {
|
|
112
|
+
//Has to be called everytime a player is played to reconfigure the global Audio config based on each player's configuration
|
|
113
|
+
await updateAudioMode();
|
|
114
|
+
|
|
115
|
+
if (isPlaying) {
|
|
116
|
+
await currentSound?.pauseAsync();
|
|
117
|
+
} else {
|
|
118
|
+
await currentSound?.playAsync();
|
|
119
|
+
}
|
|
120
|
+
}, [currentSound, updateAudioMode, isPlaying]);
|
|
121
|
+
|
|
122
|
+
const seekToPosition = React.useCallback(
|
|
123
|
+
async (positionMillis: number) => {
|
|
124
|
+
await currentSound?.setPositionAsync(positionMillis);
|
|
125
|
+
},
|
|
126
|
+
[currentSound]
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
useSourceDeepCompareEffect(() => {
|
|
130
|
+
loadAudio();
|
|
131
|
+
|
|
132
|
+
// Ignore dependency of loadAudio
|
|
133
|
+
}, [source]);
|
|
134
|
+
|
|
135
|
+
React.useEffect(() => {
|
|
136
|
+
return currentSound
|
|
137
|
+
? () => {
|
|
138
|
+
currentSound.unloadAsync();
|
|
139
|
+
}
|
|
140
|
+
: undefined;
|
|
141
|
+
}, [currentSound]);
|
|
142
|
+
|
|
143
|
+
React.useImperativeHandle(
|
|
144
|
+
ref,
|
|
145
|
+
() => {
|
|
146
|
+
return {
|
|
147
|
+
seekToPosition,
|
|
148
|
+
togglePlayback,
|
|
149
|
+
};
|
|
150
|
+
},
|
|
151
|
+
[seekToPosition, togglePlayback]
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
// The source provided into the AudioPlayer can be of type {uri: "some uri"}
|
|
159
|
+
// In the case that this object is created inline, each rerender provides a new source object because a new object is initialized everytime
|
|
160
|
+
// This creates an issue with being a useEffect dependency
|
|
161
|
+
//
|
|
162
|
+
// This creates variants of useEffect that checks deep equality of 'uri' to determine if dependency changed or not
|
|
163
|
+
// Follows: https://stackoverflow.com/a/54096391
|
|
164
|
+
function sourceDeepCompareEquals(a: any, b: any) {
|
|
165
|
+
if (a?.uri && b?.uri) {
|
|
166
|
+
return a.uri === b.uri;
|
|
167
|
+
}
|
|
168
|
+
return a === b;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function useSourceDeepCompareMemoize(value: any) {
|
|
172
|
+
const ref = React.useRef();
|
|
173
|
+
if (!sourceDeepCompareEquals(value, ref.current)) {
|
|
174
|
+
ref.current = value;
|
|
175
|
+
}
|
|
176
|
+
return ref.current;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function useSourceDeepCompareEffect(
|
|
180
|
+
callback: React.EffectCallback,
|
|
181
|
+
dependencies: React.DependencyList
|
|
182
|
+
) {
|
|
183
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
184
|
+
React.useEffect(callback, dependencies.map(useSourceDeepCompareMemoize));
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export default HeadlessAudioPlayer;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { withTheme } from "../../theming";
|
|
3
|
+
import HeadlessAudioPlayer from "./HeadlessAudioPlayer";
|
|
4
|
+
import AudioPlayerWithInterface from "./AudioPlayerWithInterface";
|
|
5
|
+
const AudioPlayer = React.forwardRef(({ mode = "interface", ...rest }, ref) => {
|
|
6
|
+
switch (mode) {
|
|
7
|
+
case "headless":
|
|
8
|
+
return React.createElement(HeadlessAudioPlayer, { ref: ref, ...rest });
|
|
9
|
+
case "interface":
|
|
10
|
+
//@ts-ignore Typescript unable to handle nested passing of theme
|
|
11
|
+
return React.createElement(AudioPlayerWithInterface, { ref: ref, ...rest });
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
export default withTheme(AudioPlayer);
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM1C,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAMlE,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAGlC,CAAC,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACzC,QAAQ,IAAI,EAAE;QACZ,KAAK,UAAU;YACb,OAAO,oBAAC,mBAAmB,IAAC,GAAG,EAAE,GAAG,KAAM,IAAI,GAAI,CAAC;QACrD,KAAK,WAAW;YACd,gEAAgE;YAChE,OAAO,oBAAC,wBAAwB,IAAC,GAAG,EAAE,GAAG,KAAM,IAAI,GAAI,CAAC;KAC3D;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,SAAS,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { withTheme } from "../../theming";
|
|
3
|
+
import {
|
|
4
|
+
AudioPlayerInterfaceProps,
|
|
5
|
+
HeadlessAudioPlayerProps,
|
|
6
|
+
HeadlessAudioPlayerRef,
|
|
7
|
+
} from "./AudioPlayerCommon";
|
|
8
|
+
import HeadlessAudioPlayer from "./HeadlessAudioPlayer";
|
|
9
|
+
import AudioPlayerWithInterface from "./AudioPlayerWithInterface";
|
|
10
|
+
|
|
11
|
+
interface AudioPlayerProps {
|
|
12
|
+
mode?: "interface" | "headless";
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const AudioPlayer = React.forwardRef<
|
|
16
|
+
HeadlessAudioPlayerRef,
|
|
17
|
+
AudioPlayerProps & AudioPlayerInterfaceProps & HeadlessAudioPlayerProps
|
|
18
|
+
>(({ mode = "interface", ...rest }, ref) => {
|
|
19
|
+
switch (mode) {
|
|
20
|
+
case "headless":
|
|
21
|
+
return <HeadlessAudioPlayer ref={ref} {...rest} />;
|
|
22
|
+
case "interface":
|
|
23
|
+
//@ts-ignore Typescript unable to handle nested passing of theme
|
|
24
|
+
return <AudioPlayerWithInterface ref={ref} {...rest} />;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export default withTheme(AudioPlayer);
|
|
29
|
+
|
|
30
|
+
export { HeadlessAudioPlayerRef as AudioPlayerRef } from "./AudioPlayerCommon";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { TabView, TabBar,
|
|
2
|
+
import { TabView, TabBar, } from "react-native-tab-view";
|
|
3
3
|
import { withTheme } from "../../theming";
|
|
4
4
|
import { extractStyles } from "../../utilities";
|
|
5
5
|
const TabViewComponent = ({ Icon, onIndexChanged, onEndReached, tabBarPosition, keyboardDismissMode, swipeEnabled, scrollEnabled, activeColor, inactiveColor, pressColor, indicatorColor, tabsBackgroundColor, style, theme, children, }) => {
|
|
@@ -26,7 +26,7 @@ const TabViewComponent = ({ Icon, onIndexChanged, onEndReached, tabBarPosition,
|
|
|
26
26
|
icon: child.props.icon,
|
|
27
27
|
accessibilityLabel: child.props.accessibilityLabel,
|
|
28
28
|
});
|
|
29
|
-
scenes[idx] =
|
|
29
|
+
scenes[idx] = child;
|
|
30
30
|
});
|
|
31
31
|
setRoutes(newRoutes);
|
|
32
32
|
setTabScenes(scenes);
|
|
@@ -45,11 +45,14 @@ const TabViewComponent = ({ Icon, onIndexChanged, onEndReached, tabBarPosition,
|
|
|
45
45
|
backgroundColor: tabsBackgroundColor || theme.colors.background,
|
|
46
46
|
} }));
|
|
47
47
|
};
|
|
48
|
+
const renderScene = ({ route }) => {
|
|
49
|
+
return tabScenes[route.key];
|
|
50
|
+
};
|
|
48
51
|
//Cannot render TabView without at least one tab
|
|
49
52
|
if (!routes.length) {
|
|
50
53
|
return React.createElement(React.Fragment, null);
|
|
51
54
|
}
|
|
52
|
-
return (React.createElement(TabView, { style:
|
|
55
|
+
return (React.createElement(TabView, { style: viewStyles, navigationState: { index, routes }, renderScene: renderScene, renderTabBar: renderTabBar, onIndexChange: indexChangeHandler, tabBarPosition: tabBarPosition, keyboardDismissMode: keyboardDismissMode, swipeEnabled: swipeEnabled }));
|
|
53
56
|
};
|
|
54
57
|
export default withTheme(TabViewComponent);
|
|
55
58
|
//# sourceMappingURL=TabView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabView.js","sourceRoot":"","sources":["TabView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EACL,OAAO,EACP,MAAM,
|
|
1
|
+
{"version":3,"file":"TabView.js","sourceRoot":"","sources":["TabView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ import { StyleProp, ViewStyle } from "react-native";
|
|
|
3
3
|
import {
|
|
4
4
|
TabView,
|
|
5
5
|
TabBar,
|
|
6
|
-
SceneMap,
|
|
7
6
|
SceneRendererProps,
|
|
8
7
|
NavigationState,
|
|
9
8
|
Route,
|
|
@@ -15,6 +14,9 @@ import { withTheme } from "../../theming";
|
|
|
15
14
|
import type { Theme } from "../../styles/DefaultTheme";
|
|
16
15
|
import { extractStyles } from "../../utilities";
|
|
17
16
|
|
|
17
|
+
type SceneProps = SceneRendererProps & {
|
|
18
|
+
route: Route;
|
|
19
|
+
};
|
|
18
20
|
type TabBarProps = SceneRendererProps & {
|
|
19
21
|
navigationState: NavigationState<any>;
|
|
20
22
|
};
|
|
@@ -56,7 +58,7 @@ const TabViewComponent: React.FC<React.PropsWithChildren<TabViewProps>> = ({
|
|
|
56
58
|
}) => {
|
|
57
59
|
const [index, setIndex] = React.useState(0);
|
|
58
60
|
const [routes, setRoutes] = React.useState<Route[]>([]);
|
|
59
|
-
const [tabScenes, setTabScenes] = React.useState({});
|
|
61
|
+
const [tabScenes, setTabScenes] = React.useState<{ [key: string]: any }>({});
|
|
60
62
|
|
|
61
63
|
const { textStyles, viewStyles } = extractStyles(style);
|
|
62
64
|
|
|
@@ -71,7 +73,7 @@ const TabViewComponent: React.FC<React.PropsWithChildren<TabViewProps>> = ({
|
|
|
71
73
|
//Populate routes and scenes based on children
|
|
72
74
|
React.useEffect(() => {
|
|
73
75
|
const newRoutes: Route[] = [];
|
|
74
|
-
const scenes:
|
|
76
|
+
const scenes: { [key: string]: React.ReactElement } = {};
|
|
75
77
|
|
|
76
78
|
React.Children.toArray(children)
|
|
77
79
|
.filter(
|
|
@@ -86,7 +88,7 @@ const TabViewComponent: React.FC<React.PropsWithChildren<TabViewProps>> = ({
|
|
|
86
88
|
icon: child.props.icon,
|
|
87
89
|
accessibilityLabel: child.props.accessibilityLabel,
|
|
88
90
|
});
|
|
89
|
-
scenes[idx] =
|
|
91
|
+
scenes[idx] = child;
|
|
90
92
|
});
|
|
91
93
|
|
|
92
94
|
setRoutes(newRoutes);
|
|
@@ -125,6 +127,10 @@ const TabViewComponent: React.FC<React.PropsWithChildren<TabViewProps>> = ({
|
|
|
125
127
|
);
|
|
126
128
|
};
|
|
127
129
|
|
|
130
|
+
const renderScene = ({ route }: SceneProps) => {
|
|
131
|
+
return tabScenes[route.key];
|
|
132
|
+
};
|
|
133
|
+
|
|
128
134
|
//Cannot render TabView without at least one tab
|
|
129
135
|
if (!routes.length) {
|
|
130
136
|
return <></>;
|
|
@@ -132,9 +138,9 @@ const TabViewComponent: React.FC<React.PropsWithChildren<TabViewProps>> = ({
|
|
|
132
138
|
|
|
133
139
|
return (
|
|
134
140
|
<TabView
|
|
135
|
-
style={
|
|
141
|
+
style={viewStyles}
|
|
136
142
|
navigationState={{ index, routes }}
|
|
137
|
-
renderScene={
|
|
143
|
+
renderScene={renderScene}
|
|
138
144
|
renderTabBar={renderTabBar}
|
|
139
145
|
onIndexChange={indexChangeHandler}
|
|
140
146
|
tabBarPosition={tabBarPosition}
|
package/src/index.js
CHANGED
|
@@ -39,6 +39,7 @@ export { BottomSheet } from "./components/BottomSheet";
|
|
|
39
39
|
export { YoutubePlayer } from "./components/YoutubePlayer";
|
|
40
40
|
export { Table, TableRow, TableCell } from "./components/Table";
|
|
41
41
|
export { SwipeableItem, SwipeableItemButton, SwipeableList, } from "./components/SwipeableItem";
|
|
42
|
+
export { default as AudioPlayer, } from "./components/AudioPlayer";
|
|
42
43
|
/* Deprecated: Fix or Delete! */
|
|
43
44
|
export { default as DatePicker } from "./components/DatePicker/DatePicker";
|
|
44
45
|
export { default as Picker } from "./components/Picker/Picker";
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"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"}
|
package/src/index.tsx
CHANGED
|
@@ -70,6 +70,11 @@ export {
|
|
|
70
70
|
SwipeableList,
|
|
71
71
|
} from "./components/SwipeableItem";
|
|
72
72
|
|
|
73
|
+
export {
|
|
74
|
+
default as AudioPlayer,
|
|
75
|
+
AudioPlayerRef,
|
|
76
|
+
} from "./components/AudioPlayer";
|
|
77
|
+
|
|
73
78
|
/* Deprecated: Fix or Delete! */
|
|
74
79
|
export { default as DatePicker } from "./components/DatePicker/DatePicker";
|
|
75
80
|
export { default as Picker } from "./components/Picker/Picker";
|