@draftbit/core 48.1.1-7606b6.2 → 48.1.1-bfaf07.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.
Files changed (111) hide show
  1. package/lib/src/components/AudioPlayer/AudioPlayerCommon.d.ts +39 -0
  2. package/lib/src/components/AudioPlayer/AudioPlayerCommon.js.map +1 -0
  3. package/lib/src/components/AudioPlayer/AudioPlayerWithInterface.d.ts +6 -0
  4. package/lib/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/AudioPlayerWithInterface.js +2 -2
  5. package/lib/src/components/AudioPlayer/AudioPlayerWithInterface.js.map +1 -0
  6. package/lib/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/HeadlessAudioPlayer.d.ts +2 -3
  7. package/{src/components/MediaPlayer → lib/src/components}/AudioPlayer/HeadlessAudioPlayer.js +48 -9
  8. package/lib/src/components/AudioPlayer/HeadlessAudioPlayer.js.map +1 -0
  9. package/lib/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/index.d.ts +4 -5
  10. package/lib/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/index.js +1 -1
  11. package/lib/src/components/AudioPlayer/index.js.map +1 -0
  12. package/lib/src/components/Progress/CircularProgress/CircularProgress.d.ts +6 -0
  13. package/lib/src/components/Progress/CircularProgress/CircularProgress.js +101 -0
  14. package/lib/src/components/Progress/CircularProgress/CircularProgress.js.map +1 -0
  15. package/lib/src/components/Progress/CircularProgress/index.d.ts +6 -0
  16. package/lib/src/components/Progress/CircularProgress/index.js +14 -0
  17. package/lib/src/components/Progress/CircularProgress/index.js.map +1 -0
  18. package/lib/src/components/Progress/IndeterminateProgress.d.ts +7 -0
  19. package/lib/src/components/Progress/IndeterminateProgress.js +39 -0
  20. package/lib/src/components/Progress/IndeterminateProgress.js.map +1 -0
  21. package/lib/src/components/Progress/LinearProgress/LinearProgress.d.ts +6 -0
  22. package/lib/src/components/Progress/LinearProgress/LinearProgress.js +54 -0
  23. package/lib/src/components/Progress/LinearProgress/LinearProgress.js.map +1 -0
  24. package/lib/src/components/Progress/LinearProgress/index.d.ts +6 -0
  25. package/lib/src/components/Progress/LinearProgress/index.js +14 -0
  26. package/lib/src/components/Progress/LinearProgress/index.js.map +1 -0
  27. package/lib/src/components/Progress/ProgressCommon.d.ts +40 -0
  28. package/lib/src/components/Progress/ProgressCommon.js +2 -0
  29. package/lib/src/components/Progress/ProgressCommon.js.map +1 -0
  30. package/lib/src/components/SwipeableItem/SwipeableItem.js +9 -2
  31. package/lib/src/components/SwipeableItem/SwipeableItem.js.map +1 -1
  32. package/lib/src/components/SwipeableItem/SwipeableItemCommon.d.ts +3 -2
  33. package/lib/src/components/SwipeableItem/SwipeableItemCommon.js.map +1 -1
  34. package/lib/src/index.d.ts +3 -2
  35. package/lib/src/index.js +3 -2
  36. package/lib/src/index.js.map +1 -1
  37. package/lib/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +13 -10
  39. package/src/components/AudioPlayer/AudioPlayerCommon.ts +44 -0
  40. package/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/AudioPlayerWithInterface.js +2 -2
  41. package/src/components/AudioPlayer/AudioPlayerWithInterface.js.map +1 -0
  42. package/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/AudioPlayerWithInterface.tsx +9 -7
  43. package/{lib/src/components/MediaPlayer → src/components}/AudioPlayer/HeadlessAudioPlayer.js +48 -9
  44. package/src/components/AudioPlayer/HeadlessAudioPlayer.js.map +1 -0
  45. package/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/HeadlessAudioPlayer.tsx +64 -19
  46. package/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/index.js +1 -1
  47. package/src/components/AudioPlayer/index.js.map +1 -0
  48. package/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/index.tsx +4 -4
  49. package/src/components/Progress/CircularProgress/CircularProgress.js +101 -0
  50. package/src/components/Progress/CircularProgress/CircularProgress.js.map +1 -0
  51. package/src/components/Progress/CircularProgress/CircularProgress.tsx +200 -0
  52. package/src/components/Progress/CircularProgress/index.js +14 -0
  53. package/src/components/Progress/CircularProgress/index.js.map +1 -0
  54. package/src/components/Progress/CircularProgress/index.tsx +28 -0
  55. package/src/components/Progress/IndeterminateProgress.js +39 -0
  56. package/src/components/Progress/IndeterminateProgress.js.map +1 -0
  57. package/src/components/Progress/IndeterminateProgress.tsx +74 -0
  58. package/src/components/Progress/LinearProgress/LinearProgress.js +54 -0
  59. package/src/components/Progress/LinearProgress/LinearProgress.js.map +1 -0
  60. package/src/components/Progress/LinearProgress/LinearProgress.tsx +132 -0
  61. package/src/components/Progress/LinearProgress/index.js +14 -0
  62. package/src/components/Progress/LinearProgress/index.js.map +1 -0
  63. package/src/components/Progress/LinearProgress/index.tsx +25 -0
  64. package/src/components/Progress/ProgressCommon.js +2 -0
  65. package/src/components/Progress/ProgressCommon.js.map +1 -0
  66. package/src/components/Progress/ProgressCommon.ts +44 -0
  67. package/src/components/SwipeableItem/SwipeableItem.js +9 -2
  68. package/src/components/SwipeableItem/SwipeableItem.js.map +1 -1
  69. package/src/components/SwipeableItem/SwipeableItem.tsx +9 -1
  70. package/src/components/SwipeableItem/SwipeableItemCommon.js.map +1 -1
  71. package/src/components/SwipeableItem/SwipeableItemCommon.ts +3 -2
  72. package/src/index.js +3 -2
  73. package/src/index.js.map +1 -1
  74. package/src/index.tsx +3 -5
  75. package/lib/src/components/MediaPlayer/AudioPlayer/AudioPlayerCommon.d.ts +0 -22
  76. package/lib/src/components/MediaPlayer/AudioPlayer/AudioPlayerCommon.js.map +0 -1
  77. package/lib/src/components/MediaPlayer/AudioPlayer/AudioPlayerWithInterface.d.ts +0 -7
  78. package/lib/src/components/MediaPlayer/AudioPlayer/AudioPlayerWithInterface.js.map +0 -1
  79. package/lib/src/components/MediaPlayer/AudioPlayer/HeadlessAudioPlayer.js.map +0 -1
  80. package/lib/src/components/MediaPlayer/AudioPlayer/index.js.map +0 -1
  81. package/lib/src/components/MediaPlayer/MediaPlaybackWrapper.d.ts +0 -15
  82. package/lib/src/components/MediaPlayer/MediaPlaybackWrapper.js +0 -32
  83. package/lib/src/components/MediaPlayer/MediaPlaybackWrapper.js.map +0 -1
  84. package/lib/src/components/MediaPlayer/MediaPlayerCommon.d.ts +0 -21
  85. package/lib/src/components/MediaPlayer/MediaPlayerCommon.js +0 -24
  86. package/lib/src/components/MediaPlayer/MediaPlayerCommon.js.map +0 -1
  87. package/lib/src/components/MediaPlayer/VideoPlayer/VideoPlayer.d.ts +0 -15
  88. package/lib/src/components/MediaPlayer/VideoPlayer/VideoPlayer.js +0 -73
  89. package/lib/src/components/MediaPlayer/VideoPlayer/VideoPlayer.js.map +0 -1
  90. package/lib/src/components/MediaPlayer/VideoPlayer/index.d.ts +0 -2
  91. package/lib/src/components/MediaPlayer/VideoPlayer/index.js +0 -2
  92. package/lib/src/components/MediaPlayer/VideoPlayer/index.js.map +0 -1
  93. package/src/components/MediaPlayer/AudioPlayer/AudioPlayerCommon.ts +0 -25
  94. package/src/components/MediaPlayer/AudioPlayer/AudioPlayerWithInterface.js.map +0 -1
  95. package/src/components/MediaPlayer/AudioPlayer/HeadlessAudioPlayer.js.map +0 -1
  96. package/src/components/MediaPlayer/AudioPlayer/index.js.map +0 -1
  97. package/src/components/MediaPlayer/MediaPlaybackWrapper.js +0 -32
  98. package/src/components/MediaPlayer/MediaPlaybackWrapper.js.map +0 -1
  99. package/src/components/MediaPlayer/MediaPlaybackWrapper.tsx +0 -56
  100. package/src/components/MediaPlayer/MediaPlayerCommon.js +0 -24
  101. package/src/components/MediaPlayer/MediaPlayerCommon.js.map +0 -1
  102. package/src/components/MediaPlayer/MediaPlayerCommon.ts +0 -50
  103. package/src/components/MediaPlayer/VideoPlayer/VideoPlayer.js +0 -73
  104. package/src/components/MediaPlayer/VideoPlayer/VideoPlayer.js.map +0 -1
  105. package/src/components/MediaPlayer/VideoPlayer/VideoPlayer.tsx +0 -136
  106. package/src/components/MediaPlayer/VideoPlayer/index.js +0 -2
  107. package/src/components/MediaPlayer/VideoPlayer/index.js.map +0 -1
  108. package/src/components/MediaPlayer/VideoPlayer/index.ts +0 -2
  109. /package/lib/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/AudioPlayerCommon.js +0 -0
  110. /package/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/AudioPlayerCommon.js +0 -0
  111. /package/src/components/{MediaPlayer/AudioPlayer → AudioPlayer}/AudioPlayerCommon.js.map +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@draftbit/core",
3
- "version": "48.1.1-7606b6.2+7606b62",
3
+ "version": "48.1.1-bfaf07.2+bfaf07d",
4
4
  "description": "Core (non-native) Components",
5
5
  "main": "lib/src/index.js",
6
6
  "types": "lib/src/index.d.ts",
@@ -41,7 +41,7 @@
41
41
  "dependencies": {
42
42
  "@date-io/date-fns": "^1.3.13",
43
43
  "@draftbit/react-theme-provider": "^2.1.1",
44
- "@draftbit/types": "^48.1.1-7606b6.2+7606b62",
44
+ "@draftbit/types": "^48.1.1-bfaf07.2+bfaf07d",
45
45
  "@expo/vector-icons": "^13.0.0",
46
46
  "@material-ui/core": "^4.11.0",
47
47
  "@material-ui/pickers": "^3.2.10",
@@ -82,17 +82,20 @@
82
82
  "lib/"
83
83
  ],
84
84
  "jest": {
85
- "preset": "react-native",
86
- "setupFiles": [
87
- "./jest-setup.js"
88
- ],
85
+ "preset": "jest-expo",
89
86
  "setupFilesAfterEnv": [
90
- "@testing-library/jest-native/extend-expect"
87
+ "@testing-library/jest-native/extend-expect",
88
+ "./jest-setup.js"
91
89
  ],
92
90
  "testPathIgnorePatterns": [
93
91
  "lib",
94
- "__mocks__"
95
- ]
92
+ "__mocks__",
93
+ "declarations.d.ts"
94
+ ],
95
+ "transformIgnorePatterns": [
96
+ "node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg)"
97
+ ],
98
+ "testEnvironment": "node"
96
99
  },
97
- "gitHead": "7606b625bc440ba6831dee90720216277b85f764"
100
+ "gitHead": "bfaf07de3571ebdad09f600b5775ee2ec7ccbefa"
98
101
  }
@@ -0,0 +1,44 @@
1
+ import { AVPlaybackSource } from "expo-av";
2
+ import { StyleProp, ViewStyle, TextStyle } from "react-native";
3
+ import type { Theme } from "../../styles/DefaultTheme";
4
+
5
+ export type AudioInterruptionMode = "lower volume" | "stop";
6
+
7
+ export interface AudioPlayerStatus {
8
+ isPlaying: boolean;
9
+ isLoading: boolean;
10
+ isBuffering: boolean;
11
+ currentPositionMillis: number;
12
+ durationMillis: number;
13
+ bufferedDurationMillis: number;
14
+ isError: boolean;
15
+ error?: string;
16
+ }
17
+
18
+ export interface HeadlessAudioPlayerRef {
19
+ seekToPosition: (positionMillis: number) => void;
20
+ togglePlayback: () => void;
21
+ }
22
+
23
+ export interface HeadlessAudioPlayerProps {
24
+ onPlaybackStatusUpdate?: (status: AudioPlayerStatus) => void;
25
+ onPlaybackFinish?: () => void;
26
+ source: AVPlaybackSource;
27
+ interruptionMode?: AudioInterruptionMode;
28
+ playsInBackground?: boolean;
29
+ playsInSilentModeIOS?: boolean;
30
+ playThroughEarpieceAndroid?: boolean;
31
+ }
32
+
33
+ export interface AudioPlayerInterfaceProps {
34
+ style?: StyleProp<ViewStyle & TextStyle>;
35
+ thumbColor?: string;
36
+ completedTrackColor?: string;
37
+ remainingTrackColor?: string;
38
+ togglePlaybackIconSize?: number;
39
+ togglePlaybackIconColor?: string;
40
+ hidePlaybackIcon?: boolean;
41
+ hideDuration?: boolean;
42
+ hideSlider?: boolean;
43
+ theme: Theme;
44
+ }
@@ -1,10 +1,10 @@
1
1
  import * as React from "react";
2
2
  import { Text, View, StyleSheet } from "react-native";
3
3
  import { AntDesign } from "@expo/vector-icons";
4
- import { withTheme } from "../../../theming";
4
+ import { withTheme } from "../../theming";
5
5
  import Slider from "@react-native-community/slider";
6
6
  import HeadlessAudioPlayer from "./HeadlessAudioPlayer";
7
- import Pressable from "../../Pressable";
7
+ import Pressable from "../Pressable";
8
8
  /**
9
9
  * Built on top of HeadlessAudioPlayer to provide a simple interface for playing audio
10
10
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioPlayerWithInterface.js","sourceRoot":"","sources":["AudioPlayerWithInterface.tsx"],"names":[],"mappings":"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"}
@@ -1,21 +1,22 @@
1
1
  import * as React from "react";
2
2
  import { Text, View, StyleSheet } from "react-native";
3
3
  import { AntDesign } from "@expo/vector-icons";
4
- import { withTheme } from "../../../theming";
4
+ import { withTheme } from "../../theming";
5
5
  import Slider from "@react-native-community/slider";
6
6
  import HeadlessAudioPlayer from "./HeadlessAudioPlayer";
7
7
  import {
8
8
  AudioPlayerInterfaceProps,
9
+ AudioPlayerStatus,
9
10
  HeadlessAudioPlayerProps,
11
+ HeadlessAudioPlayerRef,
10
12
  } from "./AudioPlayerCommon";
11
- import Pressable from "../../Pressable";
12
- import { MediaPlayerRef, MediaPlayerStatus } from "../MediaPlayerCommon";
13
+ import Pressable from "../Pressable";
13
14
 
14
15
  /**
15
16
  * Built on top of HeadlessAudioPlayer to provide a simple interface for playing audio
16
17
  */
17
18
  const AudioPlayerWithInterface = React.forwardRef<
18
- MediaPlayerRef,
19
+ HeadlessAudioPlayerRef,
19
20
  AudioPlayerInterfaceProps & HeadlessAudioPlayerProps
20
21
  >(
21
22
  (
@@ -43,11 +44,12 @@ const AudioPlayerWithInterface = React.forwardRef<
43
44
  >(1);
44
45
  const [isDraggingSlider, setIsDraggingSlider] = React.useState(false);
45
46
  const [sliderPositionMillis, setSliderPositionMillis] = React.useState(0);
46
- const newHeadlessAudioPlayerRef = React.useRef<MediaPlayerRef>(null);
47
+ const newHeadlessAudioPlayerRef =
48
+ React.useRef<HeadlessAudioPlayerRef>(null);
47
49
 
48
50
  // Use the provided ref or default to new ref when not provided
49
51
  const headlessAudioPlayerRef = ref
50
- ? (ref as React.RefObject<MediaPlayerRef>)
52
+ ? (ref as React.RefObject<HeadlessAudioPlayerRef>)
51
53
  : newHeadlessAudioPlayerRef;
52
54
 
53
55
  const {
@@ -79,7 +81,7 @@ const AudioPlayerWithInterface = React.forwardRef<
79
81
  textDecorationStyle,
80
82
  };
81
83
 
82
- const onPlaybackStatusUpdate = (status: MediaPlayerStatus) => {
84
+ const onPlaybackStatusUpdate = (status: AudioPlayerStatus) => {
83
85
  setIsLoading(status.isLoading);
84
86
  setDurationMillis(status.durationMillis);
85
87
  setSliderPositionMillis(status.currentPositionMillis);
@@ -1,7 +1,5 @@
1
1
  import * as React from "react";
2
2
  import { Audio, InterruptionModeIOS, InterruptionModeAndroid, } from "expo-av";
3
- import { mapToMediaPlayerStatus } from "../MediaPlayerCommon";
4
- import MediaPlaybackWrapper from "../MediaPlaybackWrapper";
5
3
  /**
6
4
  * Audio Player component without an interface (UI).
7
5
  * Only handles playing of the audio and provides callbacks and ref functions
@@ -33,18 +31,33 @@ const HeadlessAudioPlayer = React.forwardRef(({ source, interruptionMode = "lowe
33
31
  playThroughEarpieceAndroid,
34
32
  ]);
35
33
  const onPlaybackStatusUpdate = (status) => {
36
- const mappedStatus = mapToMediaPlayerStatus(status);
37
- onPlaybackStatusUpdateProp === null || onPlaybackStatusUpdateProp === void 0 ? void 0 : onPlaybackStatusUpdateProp(mappedStatus);
38
34
  if (status.isLoaded) {
35
+ onPlaybackStatusUpdateProp === null || onPlaybackStatusUpdateProp === void 0 ? void 0 : onPlaybackStatusUpdateProp({
36
+ isPlaying: status.isPlaying,
37
+ isLoading: false,
38
+ isBuffering: status.isBuffering,
39
+ currentPositionMillis: status.positionMillis || 0,
40
+ durationMillis: status.durationMillis || 0,
41
+ bufferedDurationMillis: status.playableDurationMillis || 0,
42
+ isError: false,
43
+ });
39
44
  if (status.didJustFinish) {
40
45
  onPlaybackFinish === null || onPlaybackFinish === void 0 ? void 0 : onPlaybackFinish();
41
46
  }
42
47
  setIsPlaying(status.isPlaying);
43
48
  }
44
- };
45
- const onTogglePlayback = () => {
46
- //Has to be called everytime a player is played to reconfigure the global Audio config based on each player's configuration
47
- updateAudioMode();
49
+ else if (status.error) {
50
+ onPlaybackStatusUpdateProp === null || onPlaybackStatusUpdateProp === void 0 ? void 0 : onPlaybackStatusUpdateProp({
51
+ isPlaying: false,
52
+ isLoading: false,
53
+ isBuffering: false,
54
+ currentPositionMillis: 0,
55
+ durationMillis: 0,
56
+ bufferedDurationMillis: 0,
57
+ isError: true,
58
+ error: status.error,
59
+ });
60
+ }
48
61
  };
49
62
  const loadAudio = async () => {
50
63
  onPlaybackStatusUpdateProp === null || onPlaybackStatusUpdateProp === void 0 ? void 0 : onPlaybackStatusUpdateProp({
@@ -60,11 +73,37 @@ const HeadlessAudioPlayer = React.forwardRef(({ source, interruptionMode = "lowe
60
73
  setCurrentSound(sound);
61
74
  sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);
62
75
  };
76
+ const togglePlayback = React.useCallback(async () => {
77
+ //Has to be called everytime a player is played to reconfigure the global Audio config based on each player's configuration
78
+ await updateAudioMode();
79
+ if (isPlaying) {
80
+ await (currentSound === null || currentSound === void 0 ? void 0 : currentSound.pauseAsync());
81
+ }
82
+ else {
83
+ await (currentSound === null || currentSound === void 0 ? void 0 : currentSound.playAsync());
84
+ }
85
+ }, [currentSound, updateAudioMode, isPlaying]);
86
+ const seekToPosition = React.useCallback(async (positionMillis) => {
87
+ await (currentSound === null || currentSound === void 0 ? void 0 : currentSound.setPositionAsync(positionMillis));
88
+ }, [currentSound]);
63
89
  useSourceDeepCompareEffect(() => {
64
90
  loadAudio();
65
91
  // Ignore dependency of loadAudio
66
92
  }, [source]);
67
- return (React.createElement(MediaPlaybackWrapper, { ref: ref, isPlaying: isPlaying, media: currentSound, onTogglePlayback: onTogglePlayback }));
93
+ React.useEffect(() => {
94
+ return currentSound
95
+ ? () => {
96
+ currentSound.unloadAsync();
97
+ }
98
+ : undefined;
99
+ }, [currentSound]);
100
+ React.useImperativeHandle(ref, () => {
101
+ return {
102
+ seekToPosition,
103
+ togglePlayback,
104
+ };
105
+ }, [seekToPosition, togglePlayback]);
106
+ return null;
68
107
  });
69
108
  // The source provided into the AudioPlayer can be of type {uri: "some uri"}
70
109
  // In the case that this object is created inline, each rerender provides a new source object because a new object is initialized everytime
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadlessAudioPlayer.js","sourceRoot":"","sources":["HeadlessAudioPlayer.tsx"],"names":[],"mappings":"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"}
@@ -5,16 +5,17 @@ import {
5
5
  InterruptionModeIOS,
6
6
  InterruptionModeAndroid,
7
7
  } from "expo-av";
8
- import { HeadlessAudioPlayerProps } from "./AudioPlayerCommon";
9
- import { MediaPlayerRef, mapToMediaPlayerStatus } from "../MediaPlayerCommon";
10
- import MediaPlaybackWrapper from "../MediaPlaybackWrapper";
8
+ import {
9
+ HeadlessAudioPlayerProps,
10
+ HeadlessAudioPlayerRef,
11
+ } from "./AudioPlayerCommon";
11
12
 
12
13
  /**
13
14
  * Audio Player component without an interface (UI).
14
15
  * Only handles playing of the audio and provides callbacks and ref functions
15
16
  */
16
17
  const HeadlessAudioPlayer = React.forwardRef<
17
- MediaPlayerRef,
18
+ HeadlessAudioPlayerRef,
18
19
  HeadlessAudioPlayerProps
19
20
  >(
20
21
  (
@@ -61,22 +62,36 @@ const HeadlessAudioPlayer = React.forwardRef<
61
62
  ]);
62
63
 
63
64
  const onPlaybackStatusUpdate = (status: AVPlaybackStatus) => {
64
- const mappedStatus = mapToMediaPlayerStatus(status);
65
- onPlaybackStatusUpdateProp?.(mappedStatus);
66
-
67
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
+
68
76
  if (status.didJustFinish) {
69
77
  onPlaybackFinish?.();
70
78
  }
79
+
71
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
+ });
72
92
  }
73
93
  };
74
94
 
75
- const onTogglePlayback = () => {
76
- //Has to be called everytime a player is played to reconfigure the global Audio config based on each player's configuration
77
- updateAudioMode();
78
- };
79
-
80
95
  const loadAudio = async () => {
81
96
  onPlaybackStatusUpdateProp?.({
82
97
  isPlaying: false,
@@ -93,20 +108,50 @@ const HeadlessAudioPlayer = React.forwardRef<
93
108
  sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);
94
109
  };
95
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
+
96
129
  useSourceDeepCompareEffect(() => {
97
130
  loadAudio();
98
131
 
99
132
  // Ignore dependency of loadAudio
100
133
  }, [source]);
101
134
 
102
- return (
103
- <MediaPlaybackWrapper
104
- ref={ref}
105
- isPlaying={isPlaying}
106
- media={currentSound}
107
- onTogglePlayback={onTogglePlayback}
108
- />
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]
109
152
  );
153
+
154
+ return null;
110
155
  }
111
156
  );
112
157
 
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { withTheme } from "../../../theming";
2
+ import { withTheme } from "../../theming";
3
3
  import HeadlessAudioPlayer from "./HeadlessAudioPlayer";
4
4
  import AudioPlayerWithInterface from "./AudioPlayerWithInterface";
5
5
  const AudioPlayer = React.forwardRef(({ mode = "interface", ...rest }, ref) => {
@@ -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"}
@@ -1,19 +1,19 @@
1
1
  import * as React from "react";
2
- import { withTheme } from "../../../theming";
2
+ import { withTheme } from "../../theming";
3
3
  import {
4
4
  AudioPlayerInterfaceProps,
5
5
  HeadlessAudioPlayerProps,
6
+ HeadlessAudioPlayerRef,
6
7
  } from "./AudioPlayerCommon";
7
8
  import HeadlessAudioPlayer from "./HeadlessAudioPlayer";
8
9
  import AudioPlayerWithInterface from "./AudioPlayerWithInterface";
9
- import { MediaPlayerRef } from "../MediaPlayerCommon";
10
10
 
11
11
  interface AudioPlayerProps {
12
12
  mode?: "interface" | "headless";
13
13
  }
14
14
 
15
15
  const AudioPlayer = React.forwardRef<
16
- MediaPlayerRef,
16
+ HeadlessAudioPlayerRef,
17
17
  AudioPlayerProps & AudioPlayerInterfaceProps & HeadlessAudioPlayerProps
18
18
  >(({ mode = "interface", ...rest }, ref) => {
19
19
  switch (mode) {
@@ -27,4 +27,4 @@ const AudioPlayer = React.forwardRef<
27
27
 
28
28
  export default withTheme(AudioPlayer);
29
29
 
30
- export { MediaPlayerRef as AudioPlayerRef } from "../MediaPlayerCommon";
30
+ export { HeadlessAudioPlayerRef as AudioPlayerRef } from "./AudioPlayerCommon";
@@ -0,0 +1,101 @@
1
+ import React from "react";
2
+ import Svg, { Path } from "react-native-svg";
3
+ import Animated, { useAnimatedProps, useSharedValue, withTiming, } from "react-native-reanimated";
4
+ import { DEFAULT_ANIMATION_DURATION, } from "../ProgressCommon";
5
+ export const AnimatedPath = Animated.createAnimatedComponent(Path);
6
+ export const CircularProgress = ({ theme, minimumValue = 0, maximumValue = 100, value = minimumValue, thickness = 10, trackThickness = thickness, color = theme.colors.primary, trackColor = theme.colors.divider, trackOpacity = 1, showTrack = true, animationDuration = DEFAULT_ANIMATION_DURATION, isAnimated = true, lineCap = "round", trackLineCap = lineCap, dashWidth, trackDashWidth, dashGap, trackDashGap, dashOffset, trackDashOffset, customDashArray, trackCustomDashArray, onFullPathWidth, startPosition = "top", style, testID, }) => {
7
+ const [svgContainerWidth, setSvgContainerWidth] = React.useState(0);
8
+ const [circumfrence, setCircumefrence] = React.useState(0);
9
+ const dashArray = dashWidth !== undefined
10
+ ? `${dashWidth} ${dashGap || dashWidth}`
11
+ : undefined;
12
+ const trackDashArray = trackDashWidth !== undefined
13
+ ? `${trackDashWidth} ${trackDashGap || trackDashWidth}`
14
+ : undefined;
15
+ const maxThickness = Math.max(thickness, trackThickness);
16
+ const thicknessOffset = maxThickness / 2; // This offset guarantees nothing is cut off by view bounds
17
+ const radius = svgContainerWidth / 2;
18
+ const c = 2 * Math.PI * radius;
19
+ if (c !== circumfrence) {
20
+ setCircumefrence(c);
21
+ }
22
+ const startAngle = React.useMemo(() => {
23
+ switch (startPosition) {
24
+ case "top":
25
+ return 0;
26
+ case "right":
27
+ return 90;
28
+ case "bottom":
29
+ return 180;
30
+ case "left":
31
+ return 270;
32
+ }
33
+ }, [startPosition]);
34
+ const currentFillPercentage = value / (maximumValue + minimumValue);
35
+ const currentAngle = useSharedValue(startAngle + currentFillPercentage * 360);
36
+ const progressPathAnimatedProps = useAnimatedProps(() => {
37
+ const isBelowMinAngle = currentAngle.value <= startAngle;
38
+ return {
39
+ d: circlePath(radius, radius, radius - thicknessOffset, startAngle, Math.min(currentAngle.value, startAngle + 360) //Prevents going beyond the max angle
40
+ ),
41
+ strokeOpacity: isBelowMinAngle ? 0.0 : 1.0,
42
+ };
43
+ });
44
+ React.useEffect(() => {
45
+ currentAngle.value = withTiming(startAngle + currentFillPercentage * 360, {
46
+ duration: isAnimated ? animationDuration : 0,
47
+ });
48
+ }, [
49
+ value,
50
+ currentFillPercentage,
51
+ animationDuration,
52
+ currentAngle,
53
+ maximumValue,
54
+ minimumValue,
55
+ isAnimated,
56
+ startAngle,
57
+ ]);
58
+ React.useEffect(() => {
59
+ onFullPathWidth === null || onFullPathWidth === void 0 ? void 0 : onFullPathWidth(circumfrence);
60
+ }, [circumfrence, onFullPathWidth]);
61
+ return (React.createElement(Svg, { testID: testID !== null && testID !== void 0 ? testID : "circular-progress-component", onLayout: (event) => {
62
+ const width = event.nativeEvent.layout.width;
63
+ setSvgContainerWidth(width);
64
+ }, style: [
65
+ {
66
+ height: svgContainerWidth,
67
+ },
68
+ style,
69
+ ] },
70
+ showTrack && (React.createElement(Path, { d: circlePath(radius, radius, radius - thicknessOffset, startAngle, startAngle + 360), stroke: trackColor, strokeWidth: trackThickness, strokeOpacity: trackOpacity, strokeLinecap: trackLineCap, strokeDasharray: trackCustomDashArray || trackDashArray, strokeDashoffset: trackDashOffset })),
71
+ React.createElement(AnimatedPath, { animatedProps: progressPathAnimatedProps, stroke: color, strokeWidth: thickness, strokeLinecap: lineCap, strokeDasharray: customDashArray || dashArray, strokeDashoffset: dashOffset })));
72
+ };
73
+ // From: https://github.com/bartgryszko/react-native-circular-progress/blob/a93b501aea40306126c8ede72089741eead52308/src/CircularProgress.js#L15
74
+ function circlePath(x, y, radius, startAngle, endAngle) {
75
+ "worklet"; // Reanimated worklet to be runnable on the UI thread
76
+ function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
77
+ var angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180.0;
78
+ return {
79
+ x: centerX + radius * Math.cos(angleInRadians),
80
+ y: centerY + radius * Math.sin(angleInRadians),
81
+ };
82
+ }
83
+ var start = polarToCartesian(x, y, radius, endAngle * 0.9999);
84
+ var end = polarToCartesian(x, y, radius, startAngle);
85
+ var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1";
86
+ var d = [
87
+ "M",
88
+ start.x,
89
+ start.y,
90
+ "A",
91
+ radius,
92
+ radius,
93
+ 0,
94
+ largeArcFlag,
95
+ 0,
96
+ end.x,
97
+ end.y,
98
+ ];
99
+ return d.join(" ");
100
+ }
101
+ //# sourceMappingURL=CircularProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircularProgress.js","sourceRoot":"","sources":["CircularProgress.tsx"],"names":[],"mappings":"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"}