diff --git a/.gitignore b/.gitignore index b55368fb..27506cc4 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,6 @@ project.xcworkspace .gradle local.properties *.iml -example/android/gradle example/android/build # node.js @@ -46,8 +45,6 @@ buck-out/ \.buckd/ example/android/app/libs example/android/keystores/debug.keystore -example/android/gradlew -example/android/gradlew.bat lib/ diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..f3d88b1c Binary files /dev/null and b/example/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..84226702 --- /dev/null +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/example/android/gradlew b/example/android/gradlew new file mode 100755 index 00000000..2fe81a7d --- /dev/null +++ b/example/android/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/example/react-native-media-controls/react-native-media-controls.cjs.development.js b/example/react-native-media-controls/react-native-media-controls.cjs.development.js index d0fdf062..b82178fe 100644 --- a/example/react-native-media-controls/react-native-media-controls.cjs.development.js +++ b/example/react-native-media-controls/react-native-media-controls.cjs.development.js @@ -151,7 +151,9 @@ var Controls = function Controls(props) { style: [styles.playButton, { backgroundColor: mainColor }], - onPress: pressAction + onPress: pressAction, + accessibilityLabel: exports.PLAYER_STATES.PAUSED ? "Tap to Play" : "Tap to Pause", + accessibilityHint: "Plays and Pauses the Video" }, React__default.createElement(reactNative.Image, { source: icon, style: styles.playIcon @@ -271,6 +273,10 @@ var MediaControls = function MediaControls(props) { isVisible = _useState2[0], setIsVisible = _useState2[1]; + React.useEffect(function () { + fadeOutControls(fadeOutDelay); + }, []); + var fadeOutControls = function fadeOutControls(delay) { if (delay === void 0) { delay = 0; @@ -353,6 +359,7 @@ var MediaControls = function MediaControls(props) { }; return React__default.createElement(reactNative.TouchableWithoutFeedback, { + accessible: false, onPress: toggleControls }, React__default.createElement(reactNative.Animated.View, { style: [styles.container, { diff --git a/example/react-native-media-controls/react-native-media-controls.cjs.development.js.map b/example/react-native-media-controls/react-native-media-controls.cjs.development.js.map index 8cbb4799..6a9741de 100644 --- a/example/react-native-media-controls/react-native-media-controls.cjs.development.js.map +++ b/example/react-native-media-controls/react-native-media-controls.cjs.development.js.map @@ -1 +1 @@ -{"version":3,"file":"react-native-media-controls.cjs.development.js","sources":["../../src/MediaControls.style.ts","../../src/constants/playerStates.ts","../../src/utils.ts","../../src/Controls.tsx","../../src/Slider.tsx","../../src/Toolbar.tsx","../../src/MediaControls.tsx"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nconst containerBackgroundColor = \"rgba(45, 59, 62, 0.4)\";\nconst playButtonBorderColor = \"rgba(255,255,255,0.5)\";\nconst white = \"#fff\";\n\nexport default StyleSheet.create({\n container: {\n alignItems: \"center\",\n backgroundColor: containerBackgroundColor,\n bottom: 0,\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n left: 0,\n paddingHorizontal: 20,\n paddingVertical: 13,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n controlsRow: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n flex: 1,\n justifyContent: \"center\",\n },\n fullScreenContainer: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n paddingLeft: 20,\n },\n playButton: {\n alignItems: \"center\",\n borderColor: playButtonBorderColor,\n borderRadius: 3,\n borderWidth: 1.5,\n height: 50,\n justifyContent: \"center\",\n width: 50,\n },\n playIcon: {\n height: 22,\n resizeMode: \"contain\",\n width: 22,\n },\n progressColumnContainer: {\n flex: 1,\n },\n progressContainer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginBottom: -25,\n },\n progressSlider: {\n alignSelf: \"stretch\",\n },\n replayIcon: {\n height: 20,\n resizeMode: \"stretch\",\n width: 25,\n },\n thumb: {\n backgroundColor: white,\n borderRadius: 50,\n borderWidth: 3,\n height: 20,\n width: 20,\n },\n timeRow: {\n alignSelf: \"stretch\",\n },\n timerLabel: {\n color: white,\n fontSize: 12,\n },\n timerLabelsContainer: {\n alignSelf: \"stretch\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n marginBottom: -7,\n },\n toolbar: {\n flexDirection: \"row\",\n flex: 1,\n justifyContent: \"flex-end\",\n },\n toolbarRow: {\n alignItems: \"flex-start\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n },\n track: {\n borderRadius: 1,\n height: 5,\n },\n});\n","enum PLAYER_STATES {\n PLAYING = 0,\n PAUSED = 1,\n ENDED = 2,\n}\n\nexport { PLAYER_STATES };\n","import { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport const humanizeVideoDuration = (seconds: number) => {\n const [begin, end] = seconds >= 3600 ? [11, 8] : [14, 5];\n const date = new Date(0);\n\n date.setSeconds(seconds);\n return date.toISOString().substr(begin, end);\n};\n\nexport const noop = () => {};\n\nexport const getPlayerStateIcon = (playerState: PLAYER_STATES) => {\n switch (playerState) {\n case PLAYER_STATES.PAUSED:\n return require(\"./assets/ic_play.png\");\n case PLAYER_STATES.PLAYING:\n return require(\"./assets/ic_pause.png\");\n case PLAYER_STATES.ENDED:\n return require(\"./assets/ic_replay.png\");\n default:\n return null;\n }\n};\n","import React from \"react\";\nimport { TouchableOpacity, View, ActivityIndicator, Image } from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { getPlayerStateIcon } from \"./utils\";\nimport { Props } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\ntype ControlsProps = Pick<\n Props,\n \"isLoading\" | \"mainColor\" | \"playerState\" | \"onReplay\"\n> & {\n onPause: () => void;\n};\n\nconst Controls = (props: ControlsProps) => {\n const { isLoading, mainColor, playerState, onReplay, onPause } = props;\n const icon = getPlayerStateIcon(playerState);\n const pressAction = playerState === PLAYER_STATES.ENDED ? onReplay : onPause;\n\n const content = isLoading ? (\n \n ) : (\n \n \n \n );\n\n return {content};\n};\n\nexport { Controls };\n","import React from \"react\";\nimport { TouchableOpacity, View, Text, Image, ViewStyle } from \"react-native\";\nimport RNSlider from \"react-native-slider\";\nimport styles from \"./MediaControls.style\";\nimport { humanizeVideoDuration } from \"./utils\";\nimport { Props as MediaControlsProps } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport type CustomSliderStyle = {\n containerStyle: ViewStyle;\n trackStyle: ViewStyle;\n thumbStyle: ViewStyle;\n};\n\ntype Props = Pick<\n MediaControlsProps,\n | \"progress\"\n | \"duration\"\n | \"mainColor\"\n | \"onFullScreen\"\n | \"playerState\"\n | \"onSeek\"\n | \"onSeeking\"\n> & {\n onPause: () => void;\n customSliderStyle?: CustomSliderStyle;\n};\n\nconst fullScreenImage = require(\"./assets/ic_fullscreen.png\");\n\nconst Slider = (props: Props) => {\n const {\n customSliderStyle,\n duration,\n mainColor,\n onFullScreen,\n onPause,\n progress,\n } = props;\n\n const containerStyle = customSliderStyle?.containerStyle || {};\n const customTrackStyle = customSliderStyle?.trackStyle || {};\n const customThumbStyle = customSliderStyle?.thumbStyle || {};\n\n const dragging = (value: number) => {\n const { onSeeking, playerState } = props;\n onSeeking(value);\n\n if (playerState === PLAYER_STATES.PAUSED) {\n return;\n }\n\n onPause();\n };\n\n const seekVideo = (value: number) => {\n props.onSeek(value);\n onPause();\n };\n\n return (\n \n \n \n \n {humanizeVideoDuration(progress)}\n \n \n {humanizeVideoDuration(duration)}\n \n \n \n \n {Boolean(onFullScreen) && (\n \n \n \n )}\n \n );\n};\n\nexport { Slider };\n","import React from \"react\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst Toolbar = ({ children }: Props) => <>{children};\n\nexport { Toolbar };\n","import React, { useState } from \"react\";\nimport {\n View,\n Animated,\n TouchableWithoutFeedback,\n GestureResponderEvent,\n ViewStyle,\n} from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\nimport { Controls } from \"./Controls\";\nimport { Slider, CustomSliderStyle } from \"./Slider\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport type Props = {\n children: React.ReactNode;\n containerStyle: ViewStyle;\n duration: number;\n fadeOutDelay?: number;\n isFullScreen: boolean;\n isLoading: boolean;\n mainColor: string;\n onFullScreen?: (event: GestureResponderEvent) => void;\n onPaused: (playerState: PLAYER_STATES) => void;\n onReplay: () => void;\n onSeek: (value: number) => void;\n onSeeking: (value: number) => void;\n playerState: PLAYER_STATES;\n progress: number;\n showOnStart?: boolean;\n sliderStyle: CustomSliderStyle;\n toolbarStyle: ViewStyle;\n};\n\nconst MediaControls = (props: Props) => {\n const {\n children,\n containerStyle: customContainerStyle = {},\n duration,\n fadeOutDelay = 5000,\n isLoading = false,\n mainColor = \"rgba(12, 83, 175, 0.9)\",\n onFullScreen,\n onReplay: onReplayCallback,\n onSeek,\n onSeeking,\n playerState,\n progress,\n showOnStart = true,\n sliderStyle, // defaults are applied in Slider.tsx\n toolbarStyle: customToolbarStyle = {},\n } = props;\n const { initialOpacity, initialIsVisible } = (() => {\n if (showOnStart) {\n return {\n initialOpacity: 1,\n initialIsVisible: true,\n };\n }\n\n return {\n initialOpacity: 0,\n initialIsVisible: false,\n };\n })();\n\n const [opacity] = useState(new Animated.Value(initialOpacity));\n const [isVisible, setIsVisible] = useState(initialIsVisible);\n\n const fadeOutControls = (delay = 0) => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n delay,\n useNativeDriver: false,\n }).start(result => {\n /* I noticed that the callback is called twice, when it is invoked and when it completely finished\n This prevents some flickering */\n if (result.finished) {\n setIsVisible(false);\n }\n });\n };\n\n const fadeInControls = (loop = true) => {\n setIsVisible(true);\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n delay: 0,\n useNativeDriver: false,\n }).start(() => {\n if (loop) {\n fadeOutControls(fadeOutDelay);\n }\n });\n };\n\n const onReplay = () => {\n fadeOutControls(fadeOutDelay);\n onReplayCallback();\n };\n\n const cancelAnimation = () => opacity.stopAnimation(() => setIsVisible(true));\n\n const onPause = () => {\n const { playerState, onPaused } = props;\n const { PLAYING, PAUSED, ENDED } = PLAYER_STATES;\n switch (playerState) {\n case PLAYING: {\n cancelAnimation();\n break;\n }\n case PAUSED: {\n fadeOutControls(fadeOutDelay);\n break;\n }\n case ENDED:\n break;\n }\n\n const newPlayerState = playerState === PLAYING ? PAUSED : PLAYING;\n return onPaused(newPlayerState);\n };\n\n const toggleControls = () => {\n // value is the last value of the animation when stop animation was called.\n // As this is an opacity effect, I (Charlie) used the value (0 or 1) as a boolean\n opacity.stopAnimation((value: number) => {\n setIsVisible(!!value);\n return value ? fadeOutControls() : fadeInControls();\n });\n };\n\n return (\n \n \n {isVisible && (\n \n \n {children}\n \n \n \n \n )}\n \n \n );\n};\n\nMediaControls.Toolbar = Toolbar;\n\nexport default MediaControls;\n"],"names":["containerBackgroundColor","playButtonBorderColor","white","StyleSheet","create","container","alignItems","backgroundColor","bottom","flex","flexDirection","justifyContent","left","paddingHorizontal","paddingVertical","position","right","top","controlsRow","alignSelf","fullScreenContainer","paddingLeft","playButton","borderColor","borderRadius","borderWidth","height","width","playIcon","resizeMode","progressColumnContainer","progressContainer","marginBottom","progressSlider","replayIcon","thumb","timeRow","timerLabel","color","fontSize","timerLabelsContainer","toolbar","toolbarRow","track","PLAYER_STATES","humanizeVideoDuration","seconds","begin","end","date","Date","setSeconds","toISOString","substr","getPlayerStateIcon","playerState","PAUSED","require","PLAYING","ENDED","Controls","props","isLoading","mainColor","onReplay","onPause","icon","pressAction","content","React","ActivityIndicator","size","TouchableOpacity","style","styles","onPress","Image","source","View","fullScreenImage","Slider","customSliderStyle","duration","onFullScreen","progress","containerStyle","customTrackStyle","trackStyle","customThumbStyle","thumbStyle","dragging","value","onSeeking","seekVideo","onSeek","Text","RNSlider","onValueChange","onSlidingComplete","maximumValue","Math","floor","minimumTrackTintColor","Boolean","Toolbar","children","MediaControls","customContainerStyle","fadeOutDelay","onReplayCallback","showOnStart","sliderStyle","toolbarStyle","customToolbarStyle","initialOpacity","initialIsVisible","useState","Animated","Value","opacity","isVisible","setIsVisible","fadeOutControls","delay","timing","toValue","useNativeDriver","start","result","finished","fadeInControls","loop","cancelAnimation","stopAnimation","onPaused","newPlayerState","toggleControls","TouchableWithoutFeedback"],"mappings":";;;;;;;;;;;AAEA,IAAMA,wBAAwB,GAAG,uBAAjC;AACA,IAAMC,qBAAqB,GAAG,uBAA9B;AACA,IAAMC,KAAK,GAAG,MAAd;AAEA,0BAAeC,sBAAU,CAACC,MAAX,CAAkB;AAC/BC,EAAAA,SAAS,EAAE;AACTC,IAAAA,UAAU,EAAE,QADH;AAETC,IAAAA,eAAe,EAAEP,wBAFR;AAGTQ,IAAAA,MAAM,EAAE,CAHC;AAITC,IAAAA,IAAI,EAAE,CAJG;AAKTC,IAAAA,aAAa,EAAE,QALN;AAMTC,IAAAA,cAAc,EAAE,eANP;AAOTC,IAAAA,IAAI,EAAE,CAPG;AAQTC,IAAAA,iBAAiB,EAAE,EARV;AASTC,IAAAA,eAAe,EAAE,EATR;AAUTC,IAAAA,QAAQ,EAAE,UAVD;AAWTC,IAAAA,KAAK,EAAE,CAXE;AAYTC,IAAAA,GAAG,EAAE;AAZI,GADoB;AAe/BC,EAAAA,WAAW,EAAE;AACXZ,IAAAA,UAAU,EAAE,QADD;AAEXa,IAAAA,SAAS,EAAE,SAFA;AAGXV,IAAAA,IAAI,EAAE,CAHK;AAIXE,IAAAA,cAAc,EAAE;AAJL,GAfkB;AAqB/BS,EAAAA,mBAAmB,EAAE;AACnBd,IAAAA,UAAU,EAAE,QADO;AAEnBa,IAAAA,SAAS,EAAE,SAFQ;AAGnBR,IAAAA,cAAc,EAAE,QAHG;AAInBU,IAAAA,WAAW,EAAE;AAJM,GArBU;AA2B/BC,EAAAA,UAAU,EAAE;AACVhB,IAAAA,UAAU,EAAE,QADF;AAEViB,IAAAA,WAAW,EAAEtB,qBAFH;AAGVuB,IAAAA,YAAY,EAAE,CAHJ;AAIVC,IAAAA,WAAW,EAAE,GAJH;AAKVC,IAAAA,MAAM,EAAE,EALE;AAMVf,IAAAA,cAAc,EAAE,QANN;AAOVgB,IAAAA,KAAK,EAAE;AAPG,GA3BmB;AAoC/BC,EAAAA,QAAQ,EAAE;AACRF,IAAAA,MAAM,EAAE,EADA;AAERG,IAAAA,UAAU,EAAE,SAFJ;AAGRF,IAAAA,KAAK,EAAE;AAHC,GApCqB;AAyC/BG,EAAAA,uBAAuB,EAAE;AACvBrB,IAAAA,IAAI,EAAE;AADiB,GAzCM;AA4C/BsB,EAAAA,iBAAiB,EAAE;AACjBrB,IAAAA,aAAa,EAAE,KADE;AAEjBC,IAAAA,cAAc,EAAE,UAFC;AAGjBqB,IAAAA,YAAY,EAAE,CAAC;AAHE,GA5CY;AAiD/BC,EAAAA,cAAc,EAAE;AACdd,IAAAA,SAAS,EAAE;AADG,GAjDe;AAoD/Be,EAAAA,UAAU,EAAE;AACVR,IAAAA,MAAM,EAAE,EADE;AAEVG,IAAAA,UAAU,EAAE,SAFF;AAGVF,IAAAA,KAAK,EAAE;AAHG,GApDmB;AAyD/BQ,EAAAA,KAAK,EAAE;AACL5B,IAAAA,eAAe,EAAEL,KADZ;AAELsB,IAAAA,YAAY,EAAE,EAFT;AAGLC,IAAAA,WAAW,EAAE,CAHR;AAILC,IAAAA,MAAM,EAAE,EAJH;AAKLC,IAAAA,KAAK,EAAE;AALF,GAzDwB;AAgE/BS,EAAAA,OAAO,EAAE;AACPjB,IAAAA,SAAS,EAAE;AADJ,GAhEsB;AAmE/BkB,EAAAA,UAAU,EAAE;AACVC,IAAAA,KAAK,EAAEpC,KADG;AAEVqC,IAAAA,QAAQ,EAAE;AAFA,GAnEmB;AAuE/BC,EAAAA,oBAAoB,EAAE;AACpBrB,IAAAA,SAAS,EAAE,SADS;AAEpBT,IAAAA,aAAa,EAAE,KAFK;AAGpBC,IAAAA,cAAc,EAAE,eAHI;AAIpBqB,IAAAA,YAAY,EAAE,CAAC;AAJK,GAvES;AA6E/BS,EAAAA,OAAO,EAAE;AACP/B,IAAAA,aAAa,EAAE,KADR;AAEPD,IAAAA,IAAI,EAAE,CAFC;AAGPE,IAAAA,cAAc,EAAE;AAHT,GA7EsB;AAkF/B+B,EAAAA,UAAU,EAAE;AACVpC,IAAAA,UAAU,EAAE,YADF;AAEVI,IAAAA,aAAa,EAAE,KAFL;AAGVC,IAAAA,cAAc,EAAE;AAHN,GAlFmB;AAuF/BgC,EAAAA,KAAK,EAAE;AACLnB,IAAAA,YAAY,EAAE,CADT;AAELE,IAAAA,MAAM,EAAE;AAFH;AAvFwB,CAAlB,CAAf;;ACNA,WAAKkB;AACHA,EAAAA,2CAAA,YAAA;AACAA,EAAAA,0CAAA,WAAA;AACAA,EAAAA,yCAAA,UAAA;AACD,CAJD,EAAKA,qBAAa,KAAbA,qBAAa,KAAA,CAAlB;;ACEO,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACC,OAAD;aACdA,OAAO,IAAI,IAAX,GAAkB,CAAC,EAAD,EAAK,CAAL,CAAlB,GAA4B,CAAC,EAAD,EAAK,CAAL;MAA1CC;MAAOC;;AACd,MAAMC,IAAI,GAAG,IAAIC,IAAJ,CAAS,CAAT,CAAb;AAEAD,EAAAA,IAAI,CAACE,UAAL,CAAgBL,OAAhB;AACA,SAAOG,IAAI,CAACG,WAAL,GAAmBC,MAAnB,CAA0BN,KAA1B,EAAiCC,GAAjC,CAAP;AACD,CANM;AAQP,AAEO,IAAMM,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,WAAD;AAChC,UAAQA,WAAR;AACE,SAAKX,qBAAa,CAACY,MAAnB;AACE,aAAOC,OAAO,CAAC,sBAAD,CAAd;;AACF,SAAKb,qBAAa,CAACc,OAAnB;AACE,aAAOD,OAAO,CAAC,uBAAD,CAAd;;AACF,SAAKb,qBAAa,CAACe,KAAnB;AACE,aAAOF,OAAO,CAAC,wBAAD,CAAd;;AACF;AACE,aAAO,IAAP;AARJ;AAUD,CAXM;;ACEP,IAAMG,QAAQ,GAAG,SAAXA,QAAW,CAACC,KAAD;MACPC,YAAyDD,MAAzDC;MAAWC,YAA8CF,MAA9CE;MAAWR,cAAmCM,MAAnCN;MAAaS,WAAsBH,MAAtBG;MAAUC,UAAYJ,MAAZI;AACrD,MAAMC,IAAI,GAAGZ,kBAAkB,CAACC,WAAD,CAA/B;AACA,MAAMY,WAAW,GAAGZ,WAAW,KAAKX,qBAAa,CAACe,KAA9B,GAAsCK,QAAtC,GAAiDC,OAArE;AAEA,MAAMG,OAAO,GAAGN,SAAS,GACvBO,4BAAA,CAACC,6BAAD;AAAmBC,IAAAA,IAAI,EAAC;AAAQjC,IAAAA,KAAK,EAAC;GAAtC,CADuB,GAGvB+B,4BAAA,CAACG,4BAAD;AACEC,IAAAA,KAAK,EAAE,CAACC,MAAM,CAACpD,UAAR,EAAoB;AAAEf,MAAAA,eAAe,EAAEwD;AAAnB,KAApB;AACPY,IAAAA,OAAO,EAAER;GAFX,EAIEE,4BAAA,CAACO,iBAAD;AAAOC,IAAAA,MAAM,EAAEX;AAAMO,IAAAA,KAAK,EAAEC,MAAM,CAAC9C;GAAnC,CAJF,CAHF;AAWA,SAAOyC,4BAAA,CAACS,gBAAD;AAAML,IAAAA,KAAK,EAAE,CAACC,MAAM,CAACxD,WAAR;GAAb,EAAoCkD,OAApC,CAAP;AACD,CAjBD;;ACcA,IAAMW,eAAe,gBAAGtB,OAAO,CAAC,4BAAD,CAA/B;;AAEA,IAAMuB,MAAM,GAAG,SAATA,MAAS,CAACnB,KAAD;MAEXoB,oBAMEpB,MANFoB;MACAC,WAKErB,MALFqB;MACAnB,YAIEF,MAJFE;MACAoB,eAGEtB,MAHFsB;MACAlB,UAEEJ,MAFFI;MACAmB,WACEvB,MADFuB;AAGF,MAAMC,cAAc,GAAG,CAAAJ,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAEI,cAAnB,KAAqC,EAA5D;AACA,MAAMC,gBAAgB,GAAG,CAAAL,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAEM,UAAnB,KAAiC,EAA1D;AACA,MAAMC,gBAAgB,GAAG,CAAAP,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,YAAAA,iBAAiB,CAAEQ,UAAnB,KAAiC,EAA1D;;AAEA,MAAMC,QAAQ,GAAG,SAAXA,QAAW,CAACC,KAAD;QACPC,YAA2B/B,MAA3B+B;QAAWrC,cAAgBM,MAAhBN;AACnBqC,IAAAA,SAAS,CAACD,KAAD,CAAT;;AAEA,QAAIpC,WAAW,KAAKX,qBAAa,CAACY,MAAlC,EAA0C;AACxC;AACD;;AAEDS,IAAAA,OAAO;AACR,GATD;;AAWA,MAAM4B,SAAS,GAAG,SAAZA,SAAY,CAACF,KAAD;AAChB9B,IAAAA,KAAK,CAACiC,MAAN,CAAaH,KAAb;AACA1B,IAAAA,OAAO;AACR,GAHD;;AAKA,SACEI,4BAAA,CAACS,gBAAD;AACEL,IAAAA,KAAK,EAAE,CAACC,MAAM,CAACxD,WAAR,EAAqBwD,MAAM,CAAC3C,iBAA5B,EAA+CsD,cAA/C;GADT,EAGEhB,4BAAA,CAACS,gBAAD;AAAML,IAAAA,KAAK,EAAEC,MAAM,CAAC5C;GAApB,EACEuC,4BAAA,CAACS,gBAAD;AAAML,IAAAA,KAAK,EAAE,CAACC,MAAM,CAAClC,oBAAR;GAAb,EACE6B,4BAAA,CAAC0B,gBAAD;AAAMtB,IAAAA,KAAK,EAAEC,MAAM,CAACrC;GAApB,EACGQ,qBAAqB,CAACuC,QAAD,CADxB,CADF,EAIEf,4BAAA,CAAC0B,gBAAD;AAAMtB,IAAAA,KAAK,EAAEC,MAAM,CAACrC;GAApB,EACGQ,qBAAqB,CAACqC,QAAD,CADxB,CAJF,CADF,EASEb,4BAAA,CAAC2B,QAAD;AACEvB,IAAAA,KAAK,EAAE,CAACC,MAAM,CAACzC,cAAR;AACPgE,IAAAA,aAAa,EAAEP;AACfQ,IAAAA,iBAAiB,EAAEL;AACnBM,IAAAA,YAAY,EAAEC,IAAI,CAACC,KAAL,CAAWnB,QAAX;AACdS,IAAAA,KAAK,EAAES,IAAI,CAACC,KAAL,CAAWjB,QAAX;AACPG,IAAAA,UAAU,EAAE,CAACb,MAAM,CAAC/B,KAAR,EAAe2C,gBAAf;AACZG,IAAAA,UAAU,EAAE,CACVf,MAAM,CAACvC,KADG,EAEVqD,gBAFU,EAGV;AAAEjE,MAAAA,WAAW,EAAEwC;AAAf,KAHU;AAKZuC,IAAAA,qBAAqB,EAAEvC;GAZzB,CATF,CAHF,EA2BGwC,OAAO,CAACpB,YAAD,CAAP,IACCd,4BAAA,CAACG,4BAAD;AACEC,IAAAA,KAAK,EAAEC,MAAM,CAACtD;AACduD,IAAAA,OAAO,EAAEQ;GAFX,EAIEd,4BAAA,CAACO,iBAAD;AAAOC,IAAAA,MAAM,EAAEE;GAAf,CAJF,CA5BJ,CADF;AAsCD,CApED;;ACxBA,IAAMyB,OAAO,GAAG,SAAVA,OAAU;AAAA,MAAGC,QAAH,QAAGA,QAAH;AAAA,SAAyBpC,4BAAA,wBAAA,MAAA,EAAGoC,QAAH,CAAzB;AAAA,CAAhB;;AC4BA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAC7C,KAAD;MAElB4C,WAeE5C,MAfF4C;8BAeE5C,MAdFwB;MAAgBsB,0DAAuB;MACvCzB,WAaErB,MAbFqB;4BAaErB,MAZF+C;MAAAA,gDAAe;yBAYb/C,MAXFC;MAAAA,0CAAY;yBAWVD,MAVFE;MAAAA,0CAAY;MACZoB,eASEtB,MATFsB;MACU0B,mBAQRhD,MARFG;MACA8B,SAOEjC,MAPFiC;MACAF,YAME/B,MANF+B;MACArC,cAKEM,MALFN;MACA6B,WAIEvB,MAJFuB;2BAIEvB,MAHFiD;MAAAA,8CAAc;MACdC,cAEElD,MAFFkD;4BAEElD,MADFmD;MAAcC,sDAAqB;;aAES;AAC5C,QAAIH,WAAJ,EAAiB;AACf,aAAO;AACLI,QAAAA,cAAc,EAAE,CADX;AAELC,QAAAA,gBAAgB,EAAE;AAFb,OAAP;AAID;;AAED,WAAO;AACLD,MAAAA,cAAc,EAAE,CADX;AAELC,MAAAA,gBAAgB,EAAE;AAFb,KAAP;AAID,GAZ4C;MAArCD,sBAAAA;MAAgBC,wBAAAA;;kBAcNC,cAAQ,CAAC,IAAIC,oBAAQ,CAACC,KAAb,CAAmBJ,cAAnB,CAAD;MAAnBK;;mBAC2BH,cAAQ,CAACD,gBAAD;MAAnCK;MAAWC;;AAElB,MAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,KAAD;QAACA;AAAAA,MAAAA,QAAQ;;;AAC/BN,IAAAA,oBAAQ,CAACO,MAAT,CAAgBL,OAAhB,EAAyB;AACvBM,MAAAA,OAAO,EAAE,CADc;AAEvB3C,MAAAA,QAAQ,EAAE,GAFa;AAGvByC,MAAAA,KAAK,EAALA,KAHuB;AAIvBG,MAAAA,eAAe,EAAE;AAJM,KAAzB,EAKGC,KALH,CAKS,UAAAC,MAAM;AACb;;AAEA,UAAIA,MAAM,CAACC,QAAX,EAAqB;AACnBR,QAAAA,YAAY,CAAC,KAAD,CAAZ;AACD;AACF,KAXD;AAYD,GAbD;;AAeA,MAAMS,cAAc,GAAG,SAAjBA,cAAiB,CAACC,IAAD;QAACA;AAAAA,MAAAA,OAAO;;;AAC7BV,IAAAA,YAAY,CAAC,IAAD,CAAZ;AACAJ,IAAAA,oBAAQ,CAACO,MAAT,CAAgBL,OAAhB,EAAyB;AACvBM,MAAAA,OAAO,EAAE,CADc;AAEvB3C,MAAAA,QAAQ,EAAE,GAFa;AAGvByC,MAAAA,KAAK,EAAE,CAHgB;AAIvBG,MAAAA,eAAe,EAAE;AAJM,KAAzB,EAKGC,KALH,CAKS;AACP,UAAII,IAAJ,EAAU;AACRT,QAAAA,eAAe,CAACd,YAAD,CAAf;AACD;AACF,KATD;AAUD,GAZD;;AAcA,MAAM5C,QAAQ,GAAG,SAAXA,QAAW;AACf0D,IAAAA,eAAe,CAACd,YAAD,CAAf;AACAC,IAAAA,gBAAgB;AACjB,GAHD;;AAKA,MAAMuB,eAAe,GAAG,SAAlBA,eAAkB;AAAA,WAAMb,OAAO,CAACc,aAAR,CAAsB;AAAA,aAAMZ,YAAY,CAAC,IAAD,CAAlB;AAAA,KAAtB,CAAN;AAAA,GAAxB;;AAEA,MAAMxD,OAAO,GAAG,SAAVA,OAAU;QACNV,cAA0BM,MAA1BN;QAAa+E,WAAazE,MAAbyE;QACb5E,UAA2Bd,sBAA3Bc;QAASF,SAAkBZ,sBAAlBY;;AACjB,YAAQD,WAAR;AACE,WAAKG,OAAL;AAAc;AACZ0E,UAAAA,eAAe;AACf;AACD;;AACD,WAAK5E,MAAL;AAAa;AACXkE,UAAAA,eAAe,CAACd,YAAD,CAAf;AACA;AACD;AARH;;AAaA,QAAM2B,cAAc,GAAGhF,WAAW,KAAKG,OAAhB,GAA0BF,MAA1B,GAAmCE,OAA1D;AACA,WAAO4E,QAAQ,CAACC,cAAD,CAAf;AACD,GAlBD;;AAoBA,MAAMC,cAAc,GAAG,SAAjBA,cAAiB;AACrB;AACA;AACAjB,IAAAA,OAAO,CAACc,aAAR,CAAsB,UAAC1C,KAAD;AACpB8B,MAAAA,YAAY,CAAC,CAAC,CAAC9B,KAAH,CAAZ;AACA,aAAOA,KAAK,GAAG+B,eAAe,EAAlB,GAAuBQ,cAAc,EAAjD;AACD,KAHD;AAID,GAPD;;AASA,SACE7D,4BAAA,CAACoE,oCAAD;AAA0B9D,IAAAA,OAAO,EAAE6D;GAAnC,EACEnE,4BAAA,CAACgD,oBAAQ,CAACvC,IAAV;AAAeL,IAAAA,KAAK,EAAE,CAACC,MAAM,CAACrE,SAAR,EAAmB;AAAEkH,MAAAA,OAAO,EAAPA;AAAF,KAAnB;GAAtB,EACGC,SAAS,IACRnD,4BAAA,CAACS,gBAAD;AAAML,IAAAA,KAAK,EAAE,CAACC,MAAM,CAACrE,SAAR,EAAmBsG,oBAAnB;GAAb,EACEtC,4BAAA,CAACS,gBAAD;AACEL,IAAAA,KAAK,EAAE,CACLC,MAAM,CAACxD,WADF,EAELwD,MAAM,CAAChC,UAFF,EAGLuE,kBAHK;GADT,EAOGR,QAPH,CADF,EAUEpC,4BAAA,CAACT,QAAD;AACEK,IAAAA,OAAO,EAAEA;AACTD,IAAAA,QAAQ,EAAEA;AACVF,IAAAA,SAAS,EAAEA;AACXC,IAAAA,SAAS,EAAEA;AACXR,IAAAA,WAAW,EAAEA;GALf,CAVF,EAiBEc,4BAAA,CAACW,MAAD;AACEI,IAAAA,QAAQ,EAAEA;AACVF,IAAAA,QAAQ,EAAEA;AACVnB,IAAAA,SAAS,EAAEA;AACXoB,IAAAA,YAAY,EAAEA;AACd5B,IAAAA,WAAW,EAAEA;AACbuC,IAAAA,MAAM,EAAEA;AACRF,IAAAA,SAAS,EAAEA;AACX3B,IAAAA,OAAO,EAAEA;AACTgB,IAAAA,iBAAiB,EAAE8B;GATrB,CAjBF,CAFJ,CADF,CADF;AAqCD,CAzID;;AA2IAL,aAAa,CAACF,OAAd,GAAwBA,OAAxB;;;;"} \ No newline at end of file +{"version":3,"file":"react-native-media-controls.cjs.development.js","sources":["../../src/MediaControls.style.ts","../../src/constants/playerStates.ts","../../src/utils.ts","../../src/Controls.tsx","../../src/Slider.tsx","../../src/Toolbar.tsx","../../src/MediaControls.tsx"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nconst containerBackgroundColor = \"rgba(45, 59, 62, 0.4)\";\nconst playButtonBorderColor = \"rgba(255,255,255,0.5)\";\nconst white = \"#fff\";\n\nexport default StyleSheet.create({\n container: {\n alignItems: \"center\",\n backgroundColor: containerBackgroundColor,\n bottom: 0,\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n left: 0,\n paddingHorizontal: 20,\n paddingVertical: 13,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n controlsRow: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n flex: 1,\n justifyContent: \"center\",\n },\n fullScreenContainer: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n paddingLeft: 20,\n },\n playButton: {\n alignItems: \"center\",\n borderColor: playButtonBorderColor,\n borderRadius: 3,\n borderWidth: 1.5,\n height: 50,\n justifyContent: \"center\",\n width: 50,\n },\n playIcon: {\n height: 22,\n resizeMode: \"contain\",\n width: 22,\n },\n progressColumnContainer: {\n flex: 1,\n },\n progressContainer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginBottom: -25,\n },\n progressSlider: {\n alignSelf: \"stretch\",\n },\n replayIcon: {\n height: 20,\n resizeMode: \"stretch\",\n width: 25,\n },\n thumb: {\n backgroundColor: white,\n borderRadius: 50,\n borderWidth: 3,\n height: 20,\n width: 20,\n },\n timeRow: {\n alignSelf: \"stretch\",\n },\n timerLabel: {\n color: white,\n fontSize: 12,\n },\n timerLabelsContainer: {\n alignSelf: \"stretch\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n marginBottom: -7,\n },\n toolbar: {\n flexDirection: \"row\",\n flex: 1,\n justifyContent: \"flex-end\",\n },\n toolbarRow: {\n alignItems: \"flex-start\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n },\n track: {\n borderRadius: 1,\n height: 5,\n },\n});\n","enum PLAYER_STATES {\n PLAYING = 0,\n PAUSED = 1,\n ENDED = 2,\n}\n\nexport { PLAYER_STATES };\n","import { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport const humanizeVideoDuration = (seconds: number) => {\n const [begin, end] = seconds >= 3600 ? [11, 8] : [14, 5];\n const date = new Date(0);\n\n date.setSeconds(seconds);\n return date.toISOString().substr(begin, end);\n};\n\nexport const noop = () => {};\n\nexport const getPlayerStateIcon = (playerState: PLAYER_STATES) => {\n switch (playerState) {\n case PLAYER_STATES.PAUSED:\n return require(\"./assets/ic_play.png\");\n case PLAYER_STATES.PLAYING:\n return require(\"./assets/ic_pause.png\");\n case PLAYER_STATES.ENDED:\n return require(\"./assets/ic_replay.png\");\n default:\n return null;\n }\n};\n","import React from \"react\";\nimport { TouchableOpacity, View, ActivityIndicator, Image } from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { getPlayerStateIcon } from \"./utils\";\nimport { Props } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\ntype ControlsProps = Pick<\n Props,\n \"isLoading\" | \"mainColor\" | \"playerState\" | \"onReplay\"\n> & {\n onPause: () => void;\n};\n\nconst Controls = (props: ControlsProps) => {\n const { isLoading, mainColor, playerState, onReplay, onPause } = props;\n const icon = getPlayerStateIcon(playerState);\n const pressAction = playerState === PLAYER_STATES.ENDED ? onReplay : onPause;\n\n const content = isLoading ? (\n \n ) : (\n \n \n \n );\n\n return {content};\n};\n\nexport { Controls };\n","import React from \"react\";\nimport { TouchableOpacity, View, Text, Image, ViewStyle } from \"react-native\";\nimport RNSlider from \"react-native-slider\";\nimport styles from \"./MediaControls.style\";\nimport { humanizeVideoDuration } from \"./utils\";\nimport { Props as MediaControlsProps } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport type CustomSliderStyle = {\n containerStyle: ViewStyle;\n trackStyle: ViewStyle;\n thumbStyle: ViewStyle;\n};\n\ntype Props = Pick<\n MediaControlsProps,\n | \"progress\"\n | \"duration\"\n | \"mainColor\"\n | \"onFullScreen\"\n | \"playerState\"\n | \"onSeek\"\n | \"onSeeking\"\n> & {\n onPause: () => void;\n customSliderStyle?: CustomSliderStyle;\n};\n\nconst fullScreenImage = require(\"./assets/ic_fullscreen.png\");\n\nconst Slider = (props: Props) => {\n const {\n customSliderStyle,\n duration,\n mainColor,\n onFullScreen,\n onPause,\n progress,\n } = props;\n\n const containerStyle = customSliderStyle?.containerStyle || {};\n const customTrackStyle = customSliderStyle?.trackStyle || {};\n const customThumbStyle = customSliderStyle?.thumbStyle || {};\n\n const dragging = (value: number) => {\n const { onSeeking, playerState } = props;\n onSeeking(value);\n\n if (playerState === PLAYER_STATES.PAUSED) {\n return;\n }\n\n onPause();\n };\n\n const seekVideo = (value: number) => {\n props.onSeek(value);\n onPause();\n };\n\n return (\n \n \n \n \n {humanizeVideoDuration(progress)}\n \n \n {humanizeVideoDuration(duration)}\n \n \n \n \n {Boolean(onFullScreen) && (\n \n \n \n )}\n \n );\n};\n\nexport { Slider };\n","import React from \"react\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst Toolbar = ({ children }: Props) => <>{children};\n\nexport { Toolbar };\n","import React, { useState, useEffect } from \"react\";\nimport {\n View,\n Animated,\n TouchableWithoutFeedback,\n GestureResponderEvent,\n ViewStyle,\n} from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\nimport { Controls } from \"./Controls\";\nimport { Slider, CustomSliderStyle } from \"./Slider\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport type Props = {\n children: React.ReactNode;\n containerStyle: ViewStyle;\n duration: number;\n fadeOutDelay?: number;\n isFullScreen: boolean;\n isLoading: boolean;\n mainColor: string;\n onFullScreen?: (event: GestureResponderEvent) => void;\n onPaused: (playerState: PLAYER_STATES) => void;\n onReplay: () => void;\n onSeek: (value: number) => void;\n onSeeking: (value: number) => void;\n playerState: PLAYER_STATES;\n progress: number;\n showOnStart?: boolean;\n sliderStyle: CustomSliderStyle;\n toolbarStyle: ViewStyle;\n};\n\nconst MediaControls = (props: Props) => {\n const {\n children,\n containerStyle: customContainerStyle = {},\n duration,\n fadeOutDelay = 5000,\n isLoading = false,\n mainColor = \"rgba(12, 83, 175, 0.9)\",\n onFullScreen,\n onReplay: onReplayCallback,\n onSeek,\n onSeeking,\n playerState,\n progress,\n showOnStart = true,\n sliderStyle, // defaults are applied in Slider.tsx\n toolbarStyle: customToolbarStyle = {},\n } = props;\n const { initialOpacity, initialIsVisible } = (() => {\n if (showOnStart) {\n return {\n initialOpacity: 1,\n initialIsVisible: true,\n };\n }\n\n return {\n initialOpacity: 0,\n initialIsVisible: false,\n };\n })();\n\n const [opacity] = useState(new Animated.Value(initialOpacity));\n const [isVisible, setIsVisible] = useState(initialIsVisible);\n\n useEffect(() => {\n fadeOutControls(fadeOutDelay);\n }, []);\n\n const fadeOutControls = (delay = 0) => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n delay,\n useNativeDriver: false,\n }).start(result => {\n /* I noticed that the callback is called twice, when it is invoked and when it completely finished\n This prevents some flickering */\n if (result.finished) {\n setIsVisible(false);\n }\n });\n };\n\n const fadeInControls = (loop = true) => {\n setIsVisible(true);\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n delay: 0,\n useNativeDriver: false,\n }).start(() => {\n if (loop) {\n fadeOutControls(fadeOutDelay);\n }\n });\n };\n\n const onReplay = () => {\n fadeOutControls(fadeOutDelay);\n onReplayCallback();\n };\n\n const cancelAnimation = () => opacity.stopAnimation(() => setIsVisible(true));\n\n const onPause = () => {\n const { playerState, onPaused } = props;\n const { PLAYING, PAUSED, ENDED } = PLAYER_STATES;\n switch (playerState) {\n case PLAYING: {\n cancelAnimation();\n break;\n }\n case PAUSED: {\n fadeOutControls(fadeOutDelay);\n break;\n }\n case ENDED:\n break;\n }\n\n const newPlayerState = playerState === PLAYING ? PAUSED : PLAYING;\n return onPaused(newPlayerState);\n };\n\n const toggleControls = () => {\n // value is the last value of the animation when stop animation was called.\n // As this is an opacity effect, I (Charlie) used the value (0 or 1) as a boolean\n opacity.stopAnimation((value: number) => {\n setIsVisible(!!value);\n return value ? fadeOutControls() : fadeInControls();\n });\n };\n\n return (\n \n \n {isVisible && (\n \n \n {children}\n \n \n \n \n )}\n \n \n );\n};\n\nMediaControls.Toolbar = Toolbar;\n\nexport default MediaControls;\n"],"names":["containerBackgroundColor","playButtonBorderColor","white","StyleSheet","create","container","alignItems","backgroundColor","bottom","flex","flexDirection","justifyContent","left","paddingHorizontal","paddingVertical","position","right","top","controlsRow","alignSelf","fullScreenContainer","paddingLeft","playButton","borderColor","borderRadius","borderWidth","height","width","playIcon","resizeMode","progressColumnContainer","progressContainer","marginBottom","progressSlider","replayIcon","thumb","timeRow","timerLabel","color","fontSize","timerLabelsContainer","toolbar","toolbarRow","track","PLAYER_STATES","humanizeVideoDuration","seconds","begin","end","date","Date","setSeconds","toISOString","substr","getPlayerStateIcon","playerState","PAUSED","require","PLAYING","ENDED","Controls","props","isLoading","mainColor","onReplay","onPause","icon","pressAction","content","React","ActivityIndicator","size","TouchableOpacity","style","styles","onPress","accessibilityLabel","accessibilityHint","Image","source","View","fullScreenImage","Slider","customSliderStyle","duration","onFullScreen","progress","containerStyle","customTrackStyle","trackStyle","customThumbStyle","thumbStyle","dragging","value","onSeeking","seekVideo","onSeek","Text","RNSlider","onValueChange","onSlidingComplete","maximumValue","Math","floor","minimumTrackTintColor","Boolean","Toolbar","children","MediaControls","customContainerStyle","fadeOutDelay","onReplayCallback","showOnStart","sliderStyle","toolbarStyle","customToolbarStyle","initialOpacity","initialIsVisible","useState","Animated","Value","opacity","isVisible","setIsVisible","useEffect","fadeOutControls","delay","timing","toValue","useNativeDriver","start","result","finished","fadeInControls","loop","cancelAnimation","stopAnimation","onPaused","newPlayerState","toggleControls","TouchableWithoutFeedback","accessible"],"mappings":"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"} \ No newline at end of file diff --git a/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js b/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js index 4f6f3613..019d58da 100644 --- a/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js +++ b/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js @@ -1,2 +1,2 @@ -"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t,n=require("react"),r=e(n),o=require("react-native"),i=e(require("react-native-slider")),a=o.StyleSheet.create({container:{alignItems:"center",backgroundColor:"rgba(45, 59, 62, 0.4)",bottom:0,flex:1,flexDirection:"column",justifyContent:"space-between",left:0,paddingHorizontal:20,paddingVertical:13,position:"absolute",right:0,top:0},controlsRow:{alignItems:"center",alignSelf:"stretch",flex:1,justifyContent:"center"},fullScreenContainer:{alignItems:"center",alignSelf:"stretch",justifyContent:"center",paddingLeft:20},playButton:{alignItems:"center",borderColor:"rgba(255,255,255,0.5)",borderRadius:3,borderWidth:1.5,height:50,justifyContent:"center",width:50},playIcon:{height:22,resizeMode:"contain",width:22},progressColumnContainer:{flex:1},progressContainer:{flexDirection:"row",justifyContent:"flex-end",marginBottom:-25},progressSlider:{alignSelf:"stretch"},replayIcon:{height:20,resizeMode:"stretch",width:25},thumb:{backgroundColor:"#fff",borderRadius:50,borderWidth:3,height:20,width:20},timeRow:{alignSelf:"stretch"},timerLabel:{color:"#fff",fontSize:12},timerLabelsContainer:{alignSelf:"stretch",flexDirection:"row",justifyContent:"space-between",marginBottom:-7},toolbar:{flexDirection:"row",flex:1,justifyContent:"flex-end"},toolbarRow:{alignItems:"flex-start",flexDirection:"row",justifyContent:"flex-start"},track:{borderRadius:1,height:5}});(t=exports.PLAYER_STATES||(exports.PLAYER_STATES={}))[t.PLAYING=0]="PLAYING",t[t.PAUSED=1]="PAUSED",t[t.ENDED=2]="ENDED";var l=function(e){var t=e>=3600?[11,8]:[14,5],n=t[0],r=t[1],o=new Date(0);return o.setSeconds(e),o.toISOString().substr(n,r)},s=function(e){var t=e.isLoading,n=e.mainColor,i=e.playerState,l=e.onReplay,s=e.onPause,c=function(e){switch(e){case exports.PLAYER_STATES.PAUSED:return require("./assets/ic_play.png");case exports.PLAYER_STATES.PLAYING:return require("./assets/ic_pause.png");case exports.PLAYER_STATES.ENDED:return require("./assets/ic_replay.png");default:return null}}(i),u=i===exports.PLAYER_STATES.ENDED?l:s,d=t?r.createElement(o.ActivityIndicator,{size:"large",color:"#FFF"}):r.createElement(o.TouchableOpacity,{style:[a.playButton,{backgroundColor:n}],onPress:u},r.createElement(o.Image,{source:c,style:a.playIcon}));return r.createElement(o.View,{style:[a.controlsRow]},d)},c=require("./assets/ic_fullscreen.png"),u=function(e){var t=e.customSliderStyle,n=e.duration,s=e.mainColor,u=e.onFullScreen,d=e.onPause,S=e.progress,m=(null==t?void 0:t.trackStyle)||{},f=(null==t?void 0:t.thumbStyle)||{};return r.createElement(o.View,{style:[a.controlsRow,a.progressContainer,(null==t?void 0:t.containerStyle)||{}]},r.createElement(o.View,{style:a.progressColumnContainer},r.createElement(o.View,{style:[a.timerLabelsContainer]},r.createElement(o.Text,{style:a.timerLabel},l(S)),r.createElement(o.Text,{style:a.timerLabel},l(n))),r.createElement(i,{style:[a.progressSlider],onValueChange:function(t){var n=e.playerState;(0,e.onSeeking)(t),n!==exports.PLAYER_STATES.PAUSED&&d()},onSlidingComplete:function(t){e.onSeek(t),d()},maximumValue:Math.floor(n),value:Math.floor(S),trackStyle:[a.track,m],thumbStyle:[a.thumb,f,{borderColor:s}],minimumTrackTintColor:s})),Boolean(u)&&r.createElement(o.TouchableOpacity,{style:a.fullScreenContainer,onPress:u},r.createElement(o.Image,{source:c})))},d=function(e){var t=e.children,i=e.containerStyle,l=void 0===i?{}:i,c=e.duration,d=e.fadeOutDelay,S=void 0===d?5e3:d,m=e.isLoading,f=void 0!==m&&m,y=e.mainColor,p=void 0===y?"rgba(12, 83, 175, 0.9)":y,g=e.onFullScreen,E=e.onReplay,b=e.onSeek,h=e.onSeeking,A=e.playerState,C=e.progress,v=e.showOnStart,w=e.sliderStyle,x=e.toolbarStyle,P=void 0===x?{}:x,T=void 0===v||v?{initialOpacity:1,initialIsVisible:!0}:{initialOpacity:0,initialIsVisible:!1},D=T.initialIsVisible,L=n.useState(new o.Animated.Value(T.initialOpacity))[0],R=n.useState(D),I=R[1],k=function(e){void 0===e&&(e=0),o.Animated.timing(L,{toValue:0,duration:300,delay:e,useNativeDriver:!1}).start((function(e){e.finished&&I(!1)}))},V=function(){var t=e.playerState,n=e.onPaused,r=exports.PLAYER_STATES.PLAYING,o=exports.PLAYER_STATES.PAUSED;switch(t){case r:L.stopAnimation((function(){return I(!0)}));break;case o:k(S)}return n(t===r?o:r)};return r.createElement(o.TouchableWithoutFeedback,{onPress:function(){L.stopAnimation((function(e){return I(!!e),e?k():(void 0===t&&(t=!0),I(!0),void o.Animated.timing(L,{toValue:1,duration:300,delay:0,useNativeDriver:!1}).start((function(){t&&k(S)})));var t}))}},r.createElement(o.Animated.View,{style:[a.container,{opacity:L}]},R[0]&&r.createElement(o.View,{style:[a.container,l]},r.createElement(o.View,{style:[a.controlsRow,a.toolbarRow,P]},t),r.createElement(s,{onPause:V,onReplay:function(){k(S),E()},isLoading:f,mainColor:p,playerState:A}),r.createElement(u,{progress:C,duration:c,mainColor:p,onFullScreen:g,playerState:A,onSeek:b,onSeeking:h,onPause:V,customSliderStyle:w}))))};d.Toolbar=function(e){return r.createElement(r.Fragment,null,e.children)},exports.default=d; +"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t,n=require("react"),r=e(n),o=require("react-native"),i=e(require("react-native-slider")),a=o.StyleSheet.create({container:{alignItems:"center",backgroundColor:"rgba(45, 59, 62, 0.4)",bottom:0,flex:1,flexDirection:"column",justifyContent:"space-between",left:0,paddingHorizontal:20,paddingVertical:13,position:"absolute",right:0,top:0},controlsRow:{alignItems:"center",alignSelf:"stretch",flex:1,justifyContent:"center"},fullScreenContainer:{alignItems:"center",alignSelf:"stretch",justifyContent:"center",paddingLeft:20},playButton:{alignItems:"center",borderColor:"rgba(255,255,255,0.5)",borderRadius:3,borderWidth:1.5,height:50,justifyContent:"center",width:50},playIcon:{height:22,resizeMode:"contain",width:22},progressColumnContainer:{flex:1},progressContainer:{flexDirection:"row",justifyContent:"flex-end",marginBottom:-25},progressSlider:{alignSelf:"stretch"},replayIcon:{height:20,resizeMode:"stretch",width:25},thumb:{backgroundColor:"#fff",borderRadius:50,borderWidth:3,height:20,width:20},timeRow:{alignSelf:"stretch"},timerLabel:{color:"#fff",fontSize:12},timerLabelsContainer:{alignSelf:"stretch",flexDirection:"row",justifyContent:"space-between",marginBottom:-7},toolbar:{flexDirection:"row",flex:1,justifyContent:"flex-end"},toolbarRow:{alignItems:"flex-start",flexDirection:"row",justifyContent:"flex-start"},track:{borderRadius:1,height:5}});(t=exports.PLAYER_STATES||(exports.PLAYER_STATES={}))[t.PLAYING=0]="PLAYING",t[t.PAUSED=1]="PAUSED",t[t.ENDED=2]="ENDED";var l=function(e){var t=e>=3600?[11,8]:[14,5],n=t[0],r=t[1],o=new Date(0);return o.setSeconds(e),o.toISOString().substr(n,r)},s=function(e){var t=e.isLoading,n=e.mainColor,i=e.playerState,l=e.onReplay,s=e.onPause,c=function(e){switch(e){case exports.PLAYER_STATES.PAUSED:return require("./assets/ic_play.png");case exports.PLAYER_STATES.PLAYING:return require("./assets/ic_pause.png");case exports.PLAYER_STATES.ENDED:return require("./assets/ic_replay.png");default:return null}}(i),u=i===exports.PLAYER_STATES.ENDED?l:s,d=t?r.createElement(o.ActivityIndicator,{size:"large",color:"#FFF"}):r.createElement(o.TouchableOpacity,{style:[a.playButton,{backgroundColor:n}],onPress:u,accessibilityLabel:exports.PLAYER_STATES.PAUSED?"Tap to Play":"Tap to Pause",accessibilityHint:"Plays and Pauses the Video"},r.createElement(o.Image,{source:c,style:a.playIcon}));return r.createElement(o.View,{style:[a.controlsRow]},d)},c=require("./assets/ic_fullscreen.png"),u=function(e){var t=e.customSliderStyle,n=e.duration,s=e.mainColor,u=e.onFullScreen,d=e.onPause,S=e.progress,f=(null==t?void 0:t.trackStyle)||{},m=(null==t?void 0:t.thumbStyle)||{};return r.createElement(o.View,{style:[a.controlsRow,a.progressContainer,(null==t?void 0:t.containerStyle)||{}]},r.createElement(o.View,{style:a.progressColumnContainer},r.createElement(o.View,{style:[a.timerLabelsContainer]},r.createElement(o.Text,{style:a.timerLabel},l(S)),r.createElement(o.Text,{style:a.timerLabel},l(n))),r.createElement(i,{style:[a.progressSlider],onValueChange:function(t){var n=e.playerState;(0,e.onSeeking)(t),n!==exports.PLAYER_STATES.PAUSED&&d()},onSlidingComplete:function(t){e.onSeek(t),d()},maximumValue:Math.floor(n),value:Math.floor(S),trackStyle:[a.track,f],thumbStyle:[a.thumb,m,{borderColor:s}],minimumTrackTintColor:s})),Boolean(u)&&r.createElement(o.TouchableOpacity,{style:a.fullScreenContainer,onPress:u},r.createElement(o.Image,{source:c})))},d=function(e){var t=e.children,i=e.containerStyle,l=void 0===i?{}:i,c=e.duration,d=e.fadeOutDelay,S=void 0===d?5e3:d,f=e.isLoading,m=void 0!==f&&f,y=e.mainColor,p=void 0===y?"rgba(12, 83, 175, 0.9)":y,g=e.onFullScreen,E=e.onReplay,b=e.onSeek,h=e.onSeeking,A=e.playerState,P=e.progress,v=e.showOnStart,C=e.sliderStyle,T=e.toolbarStyle,w=void 0===T?{}:T,x=void 0===v||v?{initialOpacity:1,initialIsVisible:!0}:{initialOpacity:0,initialIsVisible:!1},L=x.initialIsVisible,D=n.useState(new o.Animated.Value(x.initialOpacity))[0],R=n.useState(L),I=R[0],V=R[1];n.useEffect((function(){k(S)}),[]);var k=function(e){void 0===e&&(e=0),o.Animated.timing(D,{toValue:0,duration:300,delay:e,useNativeDriver:!1}).start((function(e){e.finished&&V(!1)}))},_=function(){var t=e.playerState,n=e.onPaused,r=exports.PLAYER_STATES.PLAYING,o=exports.PLAYER_STATES.PAUSED;switch(t){case r:D.stopAnimation((function(){return V(!0)}));break;case o:k(S)}return n(t===r?o:r)};return r.createElement(o.TouchableWithoutFeedback,{accessible:!1,onPress:function(){D.stopAnimation((function(e){return V(!!e),e?k():(void 0===t&&(t=!0),V(!0),void o.Animated.timing(D,{toValue:1,duration:300,delay:0,useNativeDriver:!1}).start((function(){t&&k(S)})));var t}))}},r.createElement(o.Animated.View,{style:[a.container,{opacity:D}]},I&&r.createElement(o.View,{style:[a.container,l]},r.createElement(o.View,{style:[a.controlsRow,a.toolbarRow,w]},t),r.createElement(s,{onPause:_,onReplay:function(){k(S),E()},isLoading:m,mainColor:p,playerState:A}),r.createElement(u,{progress:P,duration:c,mainColor:p,onFullScreen:g,playerState:A,onSeek:b,onSeeking:h,onPause:_,customSliderStyle:C}))))};d.Toolbar=function(e){return r.createElement(r.Fragment,null,e.children)},exports.default=d; //# sourceMappingURL=react-native-media-controls.cjs.production.min.js.map diff --git a/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js.map b/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js.map index 5bdcde0d..b92992c2 100644 --- a/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js.map +++ b/example/react-native-media-controls/react-native-media-controls.cjs.production.min.js.map @@ -1 +1 @@ -{"version":3,"file":"react-native-media-controls.cjs.production.min.js","sources":["../../src/constants/playerStates.ts","../../src/MediaControls.style.ts","../../src/utils.ts","../../src/Controls.tsx","../../src/Slider.tsx","../../src/MediaControls.tsx","../../src/Toolbar.tsx"],"sourcesContent":["enum PLAYER_STATES {\n PLAYING = 0,\n PAUSED = 1,\n ENDED = 2,\n}\n\nexport { PLAYER_STATES };\n","import { StyleSheet } from \"react-native\";\n\nconst containerBackgroundColor = \"rgba(45, 59, 62, 0.4)\";\nconst playButtonBorderColor = \"rgba(255,255,255,0.5)\";\nconst white = \"#fff\";\n\nexport default StyleSheet.create({\n container: {\n alignItems: \"center\",\n backgroundColor: containerBackgroundColor,\n bottom: 0,\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n left: 0,\n paddingHorizontal: 20,\n paddingVertical: 13,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n controlsRow: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n flex: 1,\n justifyContent: \"center\",\n },\n fullScreenContainer: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n paddingLeft: 20,\n },\n playButton: {\n alignItems: \"center\",\n borderColor: playButtonBorderColor,\n borderRadius: 3,\n borderWidth: 1.5,\n height: 50,\n justifyContent: \"center\",\n width: 50,\n },\n playIcon: {\n height: 22,\n resizeMode: \"contain\",\n width: 22,\n },\n progressColumnContainer: {\n flex: 1,\n },\n progressContainer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginBottom: -25,\n },\n progressSlider: {\n alignSelf: \"stretch\",\n },\n replayIcon: {\n height: 20,\n resizeMode: \"stretch\",\n width: 25,\n },\n thumb: {\n backgroundColor: white,\n borderRadius: 50,\n borderWidth: 3,\n height: 20,\n width: 20,\n },\n timeRow: {\n alignSelf: \"stretch\",\n },\n timerLabel: {\n color: white,\n fontSize: 12,\n },\n timerLabelsContainer: {\n alignSelf: \"stretch\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n marginBottom: -7,\n },\n toolbar: {\n flexDirection: \"row\",\n flex: 1,\n justifyContent: \"flex-end\",\n },\n toolbarRow: {\n alignItems: \"flex-start\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n },\n track: {\n borderRadius: 1,\n height: 5,\n },\n});\n","import { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport const humanizeVideoDuration = (seconds: number) => {\n const [begin, end] = seconds >= 3600 ? [11, 8] : [14, 5];\n const date = new Date(0);\n\n date.setSeconds(seconds);\n return date.toISOString().substr(begin, end);\n};\n\nexport const noop = () => {};\n\nexport const getPlayerStateIcon = (playerState: PLAYER_STATES) => {\n switch (playerState) {\n case PLAYER_STATES.PAUSED:\n return require(\"./assets/ic_play.png\");\n case PLAYER_STATES.PLAYING:\n return require(\"./assets/ic_pause.png\");\n case PLAYER_STATES.ENDED:\n return require(\"./assets/ic_replay.png\");\n default:\n return null;\n }\n};\n","import React from \"react\";\nimport { TouchableOpacity, View, ActivityIndicator, Image } from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { getPlayerStateIcon } from \"./utils\";\nimport { Props } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\ntype ControlsProps = Pick<\n Props,\n \"isLoading\" | \"mainColor\" | \"playerState\" | \"onReplay\"\n> & {\n onPause: () => void;\n};\n\nconst Controls = (props: ControlsProps) => {\n const { isLoading, mainColor, playerState, onReplay, onPause } = props;\n const icon = getPlayerStateIcon(playerState);\n const pressAction = playerState === PLAYER_STATES.ENDED ? onReplay : onPause;\n\n const content = isLoading ? (\n \n ) : (\n \n \n \n );\n\n return {content};\n};\n\nexport { Controls };\n","import React from \"react\";\nimport { TouchableOpacity, View, Text, Image, ViewStyle } from \"react-native\";\nimport RNSlider from \"react-native-slider\";\nimport styles from \"./MediaControls.style\";\nimport { humanizeVideoDuration } from \"./utils\";\nimport { Props as MediaControlsProps } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport type CustomSliderStyle = {\n containerStyle: ViewStyle;\n trackStyle: ViewStyle;\n thumbStyle: ViewStyle;\n};\n\ntype Props = Pick<\n MediaControlsProps,\n | \"progress\"\n | \"duration\"\n | \"mainColor\"\n | \"onFullScreen\"\n | \"playerState\"\n | \"onSeek\"\n | \"onSeeking\"\n> & {\n onPause: () => void;\n customSliderStyle?: CustomSliderStyle;\n};\n\nconst fullScreenImage = require(\"./assets/ic_fullscreen.png\");\n\nconst Slider = (props: Props) => {\n const {\n customSliderStyle,\n duration,\n mainColor,\n onFullScreen,\n onPause,\n progress,\n } = props;\n\n const containerStyle = customSliderStyle?.containerStyle || {};\n const customTrackStyle = customSliderStyle?.trackStyle || {};\n const customThumbStyle = customSliderStyle?.thumbStyle || {};\n\n const dragging = (value: number) => {\n const { onSeeking, playerState } = props;\n onSeeking(value);\n\n if (playerState === PLAYER_STATES.PAUSED) {\n return;\n }\n\n onPause();\n };\n\n const seekVideo = (value: number) => {\n props.onSeek(value);\n onPause();\n };\n\n return (\n \n \n \n \n {humanizeVideoDuration(progress)}\n \n \n {humanizeVideoDuration(duration)}\n \n \n \n \n {Boolean(onFullScreen) && (\n \n \n \n )}\n \n );\n};\n\nexport { Slider };\n","import React, { useState } from \"react\";\nimport {\n View,\n Animated,\n TouchableWithoutFeedback,\n GestureResponderEvent,\n ViewStyle,\n} from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\nimport { Controls } from \"./Controls\";\nimport { Slider, CustomSliderStyle } from \"./Slider\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport type Props = {\n children: React.ReactNode;\n containerStyle: ViewStyle;\n duration: number;\n fadeOutDelay?: number;\n isFullScreen: boolean;\n isLoading: boolean;\n mainColor: string;\n onFullScreen?: (event: GestureResponderEvent) => void;\n onPaused: (playerState: PLAYER_STATES) => void;\n onReplay: () => void;\n onSeek: (value: number) => void;\n onSeeking: (value: number) => void;\n playerState: PLAYER_STATES;\n progress: number;\n showOnStart?: boolean;\n sliderStyle: CustomSliderStyle;\n toolbarStyle: ViewStyle;\n};\n\nconst MediaControls = (props: Props) => {\n const {\n children,\n containerStyle: customContainerStyle = {},\n duration,\n fadeOutDelay = 5000,\n isLoading = false,\n mainColor = \"rgba(12, 83, 175, 0.9)\",\n onFullScreen,\n onReplay: onReplayCallback,\n onSeek,\n onSeeking,\n playerState,\n progress,\n showOnStart = true,\n sliderStyle, // defaults are applied in Slider.tsx\n toolbarStyle: customToolbarStyle = {},\n } = props;\n const { initialOpacity, initialIsVisible } = (() => {\n if (showOnStart) {\n return {\n initialOpacity: 1,\n initialIsVisible: true,\n };\n }\n\n return {\n initialOpacity: 0,\n initialIsVisible: false,\n };\n })();\n\n const [opacity] = useState(new Animated.Value(initialOpacity));\n const [isVisible, setIsVisible] = useState(initialIsVisible);\n\n const fadeOutControls = (delay = 0) => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n delay,\n useNativeDriver: false,\n }).start(result => {\n /* I noticed that the callback is called twice, when it is invoked and when it completely finished\n This prevents some flickering */\n if (result.finished) {\n setIsVisible(false);\n }\n });\n };\n\n const fadeInControls = (loop = true) => {\n setIsVisible(true);\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n delay: 0,\n useNativeDriver: false,\n }).start(() => {\n if (loop) {\n fadeOutControls(fadeOutDelay);\n }\n });\n };\n\n const onReplay = () => {\n fadeOutControls(fadeOutDelay);\n onReplayCallback();\n };\n\n const cancelAnimation = () => opacity.stopAnimation(() => setIsVisible(true));\n\n const onPause = () => {\n const { playerState, onPaused } = props;\n const { PLAYING, PAUSED, ENDED } = PLAYER_STATES;\n switch (playerState) {\n case PLAYING: {\n cancelAnimation();\n break;\n }\n case PAUSED: {\n fadeOutControls(fadeOutDelay);\n break;\n }\n case ENDED:\n break;\n }\n\n const newPlayerState = playerState === PLAYING ? PAUSED : PLAYING;\n return onPaused(newPlayerState);\n };\n\n const toggleControls = () => {\n // value is the last value of the animation when stop animation was called.\n // As this is an opacity effect, I (Charlie) used the value (0 or 1) as a boolean\n opacity.stopAnimation((value: number) => {\n setIsVisible(!!value);\n return value ? fadeOutControls() : fadeInControls();\n });\n };\n\n return (\n \n \n {isVisible && (\n \n \n {children}\n \n \n \n \n )}\n \n \n );\n};\n\nMediaControls.Toolbar = Toolbar;\n\nexport default MediaControls;\n","import React from \"react\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst Toolbar = ({ children }: Props) => <>{children};\n\nexport { Toolbar };\n"],"names":["PLAYER_STATES","StyleSheet","create","container","alignItems","backgroundColor","bottom","flex","flexDirection","justifyContent","left","paddingHorizontal","paddingVertical","position","right","top","controlsRow","alignSelf","fullScreenContainer","paddingLeft","playButton","borderColor","borderRadius","borderWidth","height","width","playIcon","resizeMode","progressColumnContainer","progressContainer","marginBottom","progressSlider","replayIcon","thumb","timeRow","timerLabel","color","fontSize","timerLabelsContainer","toolbar","toolbarRow","track","humanizeVideoDuration","seconds","begin","end","date","Date","setSeconds","toISOString","substr","Controls","props","isLoading","mainColor","playerState","onReplay","onPause","icon","PAUSED","require","PLAYING","ENDED","getPlayerStateIcon","pressAction","content","React","ActivityIndicator","size","TouchableOpacity","style","styles","onPress","Image","source","View","fullScreenImage","Slider","customSliderStyle","duration","onFullScreen","progress","customTrackStyle","trackStyle","customThumbStyle","thumbStyle","containerStyle","Text","RNSlider","onValueChange","value","onSeeking","onSlidingComplete","onSeek","maximumValue","Math","floor","minimumTrackTintColor","Boolean","MediaControls","children","customContainerStyle","fadeOutDelay","onReplayCallback","showOnStart","sliderStyle","toolbarStyle","customToolbarStyle","initialOpacity","initialIsVisible","opacity","useState","Animated","Value","setIsVisible","fadeOutControls","delay","timing","toValue","useNativeDriver","start","result","finished","onPaused","stopAnimation","TouchableWithoutFeedback","loop","Toolbar"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"react-native-media-controls.cjs.production.min.js","sources":["../../src/constants/playerStates.ts","../../src/MediaControls.style.ts","../../src/utils.ts","../../src/Controls.tsx","../../src/Slider.tsx","../../src/MediaControls.tsx","../../src/Toolbar.tsx"],"sourcesContent":["enum PLAYER_STATES {\n PLAYING = 0,\n PAUSED = 1,\n ENDED = 2,\n}\n\nexport { PLAYER_STATES };\n","import { StyleSheet } from \"react-native\";\n\nconst containerBackgroundColor = \"rgba(45, 59, 62, 0.4)\";\nconst playButtonBorderColor = \"rgba(255,255,255,0.5)\";\nconst white = \"#fff\";\n\nexport default StyleSheet.create({\n container: {\n alignItems: \"center\",\n backgroundColor: containerBackgroundColor,\n bottom: 0,\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n left: 0,\n paddingHorizontal: 20,\n paddingVertical: 13,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n controlsRow: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n flex: 1,\n justifyContent: \"center\",\n },\n fullScreenContainer: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n paddingLeft: 20,\n },\n playButton: {\n alignItems: \"center\",\n borderColor: playButtonBorderColor,\n borderRadius: 3,\n borderWidth: 1.5,\n height: 50,\n justifyContent: \"center\",\n width: 50,\n },\n playIcon: {\n height: 22,\n resizeMode: \"contain\",\n width: 22,\n },\n progressColumnContainer: {\n flex: 1,\n },\n progressContainer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginBottom: -25,\n },\n progressSlider: {\n alignSelf: \"stretch\",\n },\n replayIcon: {\n height: 20,\n resizeMode: \"stretch\",\n width: 25,\n },\n thumb: {\n backgroundColor: white,\n borderRadius: 50,\n borderWidth: 3,\n height: 20,\n width: 20,\n },\n timeRow: {\n alignSelf: \"stretch\",\n },\n timerLabel: {\n color: white,\n fontSize: 12,\n },\n timerLabelsContainer: {\n alignSelf: \"stretch\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n marginBottom: -7,\n },\n toolbar: {\n flexDirection: \"row\",\n flex: 1,\n justifyContent: \"flex-end\",\n },\n toolbarRow: {\n alignItems: \"flex-start\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n },\n track: {\n borderRadius: 1,\n height: 5,\n },\n});\n","import { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport const humanizeVideoDuration = (seconds: number) => {\n const [begin, end] = seconds >= 3600 ? [11, 8] : [14, 5];\n const date = new Date(0);\n\n date.setSeconds(seconds);\n return date.toISOString().substr(begin, end);\n};\n\nexport const noop = () => {};\n\nexport const getPlayerStateIcon = (playerState: PLAYER_STATES) => {\n switch (playerState) {\n case PLAYER_STATES.PAUSED:\n return require(\"./assets/ic_play.png\");\n case PLAYER_STATES.PLAYING:\n return require(\"./assets/ic_pause.png\");\n case PLAYER_STATES.ENDED:\n return require(\"./assets/ic_replay.png\");\n default:\n return null;\n }\n};\n","import React from \"react\";\nimport { TouchableOpacity, View, ActivityIndicator, Image } from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { getPlayerStateIcon } from \"./utils\";\nimport { Props } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\ntype ControlsProps = Pick<\n Props,\n \"isLoading\" | \"mainColor\" | \"playerState\" | \"onReplay\"\n> & {\n onPause: () => void;\n};\n\nconst Controls = (props: ControlsProps) => {\n const { isLoading, mainColor, playerState, onReplay, onPause } = props;\n const icon = getPlayerStateIcon(playerState);\n const pressAction = playerState === PLAYER_STATES.ENDED ? onReplay : onPause;\n\n const content = isLoading ? (\n \n ) : (\n \n \n \n );\n\n return {content};\n};\n\nexport { Controls };\n","import React from \"react\";\nimport { TouchableOpacity, View, Text, Image, ViewStyle } from \"react-native\";\nimport RNSlider from \"react-native-slider\";\nimport styles from \"./MediaControls.style\";\nimport { humanizeVideoDuration } from \"./utils\";\nimport { Props as MediaControlsProps } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport type CustomSliderStyle = {\n containerStyle: ViewStyle;\n trackStyle: ViewStyle;\n thumbStyle: ViewStyle;\n};\n\ntype Props = Pick<\n MediaControlsProps,\n | \"progress\"\n | \"duration\"\n | \"mainColor\"\n | \"onFullScreen\"\n | \"playerState\"\n | \"onSeek\"\n | \"onSeeking\"\n> & {\n onPause: () => void;\n customSliderStyle?: CustomSliderStyle;\n};\n\nconst fullScreenImage = require(\"./assets/ic_fullscreen.png\");\n\nconst Slider = (props: Props) => {\n const {\n customSliderStyle,\n duration,\n mainColor,\n onFullScreen,\n onPause,\n progress,\n } = props;\n\n const containerStyle = customSliderStyle?.containerStyle || {};\n const customTrackStyle = customSliderStyle?.trackStyle || {};\n const customThumbStyle = customSliderStyle?.thumbStyle || {};\n\n const dragging = (value: number) => {\n const { onSeeking, playerState } = props;\n onSeeking(value);\n\n if (playerState === PLAYER_STATES.PAUSED) {\n return;\n }\n\n onPause();\n };\n\n const seekVideo = (value: number) => {\n props.onSeek(value);\n onPause();\n };\n\n return (\n \n \n \n \n {humanizeVideoDuration(progress)}\n \n \n {humanizeVideoDuration(duration)}\n \n \n \n \n {Boolean(onFullScreen) && (\n \n \n \n )}\n \n );\n};\n\nexport { Slider };\n","import React, { useState, useEffect } from \"react\";\nimport {\n View,\n Animated,\n TouchableWithoutFeedback,\n GestureResponderEvent,\n ViewStyle,\n} from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\nimport { Controls } from \"./Controls\";\nimport { Slider, CustomSliderStyle } from \"./Slider\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport type Props = {\n children: React.ReactNode;\n containerStyle: ViewStyle;\n duration: number;\n fadeOutDelay?: number;\n isFullScreen: boolean;\n isLoading: boolean;\n mainColor: string;\n onFullScreen?: (event: GestureResponderEvent) => void;\n onPaused: (playerState: PLAYER_STATES) => void;\n onReplay: () => void;\n onSeek: (value: number) => void;\n onSeeking: (value: number) => void;\n playerState: PLAYER_STATES;\n progress: number;\n showOnStart?: boolean;\n sliderStyle: CustomSliderStyle;\n toolbarStyle: ViewStyle;\n};\n\nconst MediaControls = (props: Props) => {\n const {\n children,\n containerStyle: customContainerStyle = {},\n duration,\n fadeOutDelay = 5000,\n isLoading = false,\n mainColor = \"rgba(12, 83, 175, 0.9)\",\n onFullScreen,\n onReplay: onReplayCallback,\n onSeek,\n onSeeking,\n playerState,\n progress,\n showOnStart = true,\n sliderStyle, // defaults are applied in Slider.tsx\n toolbarStyle: customToolbarStyle = {},\n } = props;\n const { initialOpacity, initialIsVisible } = (() => {\n if (showOnStart) {\n return {\n initialOpacity: 1,\n initialIsVisible: true,\n };\n }\n\n return {\n initialOpacity: 0,\n initialIsVisible: false,\n };\n })();\n\n const [opacity] = useState(new Animated.Value(initialOpacity));\n const [isVisible, setIsVisible] = useState(initialIsVisible);\n\n useEffect(() => {\n fadeOutControls(fadeOutDelay);\n }, []);\n\n const fadeOutControls = (delay = 0) => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n delay,\n useNativeDriver: false,\n }).start(result => {\n /* I noticed that the callback is called twice, when it is invoked and when it completely finished\n This prevents some flickering */\n if (result.finished) {\n setIsVisible(false);\n }\n });\n };\n\n const fadeInControls = (loop = true) => {\n setIsVisible(true);\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n delay: 0,\n useNativeDriver: false,\n }).start(() => {\n if (loop) {\n fadeOutControls(fadeOutDelay);\n }\n });\n };\n\n const onReplay = () => {\n fadeOutControls(fadeOutDelay);\n onReplayCallback();\n };\n\n const cancelAnimation = () => opacity.stopAnimation(() => setIsVisible(true));\n\n const onPause = () => {\n const { playerState, onPaused } = props;\n const { PLAYING, PAUSED, ENDED } = PLAYER_STATES;\n switch (playerState) {\n case PLAYING: {\n cancelAnimation();\n break;\n }\n case PAUSED: {\n fadeOutControls(fadeOutDelay);\n break;\n }\n case ENDED:\n break;\n }\n\n const newPlayerState = playerState === PLAYING ? PAUSED : PLAYING;\n return onPaused(newPlayerState);\n };\n\n const toggleControls = () => {\n // value is the last value of the animation when stop animation was called.\n // As this is an opacity effect, I (Charlie) used the value (0 or 1) as a boolean\n opacity.stopAnimation((value: number) => {\n setIsVisible(!!value);\n return value ? fadeOutControls() : fadeInControls();\n });\n };\n\n return (\n \n \n {isVisible && (\n \n \n {children}\n \n \n \n \n )}\n \n \n );\n};\n\nMediaControls.Toolbar = Toolbar;\n\nexport default MediaControls;\n","import React from \"react\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst Toolbar = ({ children }: Props) => <>{children};\n\nexport { Toolbar };\n"],"names":["PLAYER_STATES","StyleSheet","create","container","alignItems","backgroundColor","bottom","flex","flexDirection","justifyContent","left","paddingHorizontal","paddingVertical","position","right","top","controlsRow","alignSelf","fullScreenContainer","paddingLeft","playButton","borderColor","borderRadius","borderWidth","height","width","playIcon","resizeMode","progressColumnContainer","progressContainer","marginBottom","progressSlider","replayIcon","thumb","timeRow","timerLabel","color","fontSize","timerLabelsContainer","toolbar","toolbarRow","track","humanizeVideoDuration","seconds","begin","end","date","Date","setSeconds","toISOString","substr","Controls","props","isLoading","mainColor","playerState","onReplay","onPause","icon","PAUSED","require","PLAYING","ENDED","getPlayerStateIcon","pressAction","content","React","ActivityIndicator","size","TouchableOpacity","style","styles","onPress","accessibilityLabel","accessibilityHint","Image","source","View","fullScreenImage","Slider","customSliderStyle","duration","onFullScreen","progress","customTrackStyle","trackStyle","customThumbStyle","thumbStyle","containerStyle","Text","RNSlider","onValueChange","value","onSeeking","onSlidingComplete","onSeek","maximumValue","Math","floor","minimumTrackTintColor","Boolean","MediaControls","children","customContainerStyle","fadeOutDelay","onReplayCallback","showOnStart","sliderStyle","toolbarStyle","customToolbarStyle","initialOpacity","initialIsVisible","opacity","useState","Animated","Value","isVisible","setIsVisible","useEffect","fadeOutControls","delay","timing","toValue","useNativeDriver","start","result","finished","onPaused","stopAnimation","TouchableWithoutFeedback","accessible","loop","Toolbar"],"mappings":"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"} \ No newline at end of file diff --git a/example/react-native-media-controls/react-native-media-controls.esm.js b/example/react-native-media-controls/react-native-media-controls.esm.js index d104bc19..d4d752ce 100644 --- a/example/react-native-media-controls/react-native-media-controls.esm.js +++ b/example/react-native-media-controls/react-native-media-controls.esm.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { StyleSheet, ActivityIndicator, TouchableOpacity, Image, View, Text, Animated, TouchableWithoutFeedback } from 'react-native'; import RNSlider from 'react-native-slider'; @@ -146,7 +146,9 @@ var Controls = function Controls(props) { style: [styles.playButton, { backgroundColor: mainColor }], - onPress: pressAction + onPress: pressAction, + accessibilityLabel: PLAYER_STATES.PAUSED ? "Tap to Play" : "Tap to Pause", + accessibilityHint: "Plays and Pauses the Video" }, React.createElement(Image, { source: icon, style: styles.playIcon @@ -266,6 +268,10 @@ var MediaControls = function MediaControls(props) { isVisible = _useState2[0], setIsVisible = _useState2[1]; + useEffect(function () { + fadeOutControls(fadeOutDelay); + }, []); + var fadeOutControls = function fadeOutControls(delay) { if (delay === void 0) { delay = 0; @@ -348,6 +354,7 @@ var MediaControls = function MediaControls(props) { }; return React.createElement(TouchableWithoutFeedback, { + accessible: false, onPress: toggleControls }, React.createElement(Animated.View, { style: [styles.container, { diff --git a/example/react-native-media-controls/react-native-media-controls.esm.js.map b/example/react-native-media-controls/react-native-media-controls.esm.js.map index 05d4bf79..73fecf8b 100644 --- a/example/react-native-media-controls/react-native-media-controls.esm.js.map +++ b/example/react-native-media-controls/react-native-media-controls.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"react-native-media-controls.esm.js","sources":["../../src/MediaControls.style.ts","../../src/constants/playerStates.ts","../../src/utils.ts","../../src/Controls.tsx","../../src/Slider.tsx","../../src/Toolbar.tsx","../../src/MediaControls.tsx"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nconst containerBackgroundColor = \"rgba(45, 59, 62, 0.4)\";\nconst playButtonBorderColor = \"rgba(255,255,255,0.5)\";\nconst white = \"#fff\";\n\nexport default StyleSheet.create({\n container: {\n alignItems: \"center\",\n backgroundColor: containerBackgroundColor,\n bottom: 0,\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n left: 0,\n paddingHorizontal: 20,\n paddingVertical: 13,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n controlsRow: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n flex: 1,\n justifyContent: \"center\",\n },\n fullScreenContainer: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n paddingLeft: 20,\n },\n playButton: {\n alignItems: \"center\",\n borderColor: playButtonBorderColor,\n borderRadius: 3,\n borderWidth: 1.5,\n height: 50,\n justifyContent: \"center\",\n width: 50,\n },\n playIcon: {\n height: 22,\n resizeMode: \"contain\",\n width: 22,\n },\n progressColumnContainer: {\n flex: 1,\n },\n progressContainer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginBottom: -25,\n },\n progressSlider: {\n alignSelf: \"stretch\",\n },\n replayIcon: {\n height: 20,\n resizeMode: \"stretch\",\n width: 25,\n },\n thumb: {\n backgroundColor: white,\n borderRadius: 50,\n borderWidth: 3,\n height: 20,\n width: 20,\n },\n timeRow: {\n alignSelf: \"stretch\",\n },\n timerLabel: {\n color: white,\n fontSize: 12,\n },\n timerLabelsContainer: {\n alignSelf: \"stretch\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n marginBottom: -7,\n },\n toolbar: {\n flexDirection: \"row\",\n flex: 1,\n justifyContent: \"flex-end\",\n },\n toolbarRow: {\n alignItems: \"flex-start\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n },\n track: {\n borderRadius: 1,\n height: 5,\n },\n});\n","enum PLAYER_STATES {\n PLAYING = 0,\n PAUSED = 1,\n ENDED = 2,\n}\n\nexport { PLAYER_STATES };\n","import { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport const humanizeVideoDuration = (seconds: number) => {\n const [begin, end] = seconds >= 3600 ? [11, 8] : [14, 5];\n const date = new Date(0);\n\n date.setSeconds(seconds);\n return date.toISOString().substr(begin, end);\n};\n\nexport const noop = () => {};\n\nexport const getPlayerStateIcon = (playerState: PLAYER_STATES) => {\n switch (playerState) {\n case PLAYER_STATES.PAUSED:\n return require(\"./assets/ic_play.png\");\n case PLAYER_STATES.PLAYING:\n return require(\"./assets/ic_pause.png\");\n case PLAYER_STATES.ENDED:\n return require(\"./assets/ic_replay.png\");\n default:\n return null;\n }\n};\n","import React from \"react\";\nimport { TouchableOpacity, View, ActivityIndicator, Image } from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { getPlayerStateIcon } from \"./utils\";\nimport { Props } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\ntype ControlsProps = Pick<\n Props,\n \"isLoading\" | \"mainColor\" | \"playerState\" | \"onReplay\"\n> & {\n onPause: () => void;\n};\n\nconst Controls = (props: ControlsProps) => {\n const { isLoading, mainColor, playerState, onReplay, onPause } = props;\n const icon = getPlayerStateIcon(playerState);\n const pressAction = playerState === PLAYER_STATES.ENDED ? onReplay : onPause;\n\n const content = isLoading ? (\n \n ) : (\n \n \n \n );\n\n return {content};\n};\n\nexport { Controls };\n","import React from \"react\";\nimport { TouchableOpacity, View, Text, Image, ViewStyle } from \"react-native\";\nimport RNSlider from \"react-native-slider\";\nimport styles from \"./MediaControls.style\";\nimport { humanizeVideoDuration } from \"./utils\";\nimport { Props as MediaControlsProps } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport type CustomSliderStyle = {\n containerStyle: ViewStyle;\n trackStyle: ViewStyle;\n thumbStyle: ViewStyle;\n};\n\ntype Props = Pick<\n MediaControlsProps,\n | \"progress\"\n | \"duration\"\n | \"mainColor\"\n | \"onFullScreen\"\n | \"playerState\"\n | \"onSeek\"\n | \"onSeeking\"\n> & {\n onPause: () => void;\n customSliderStyle?: CustomSliderStyle;\n};\n\nconst fullScreenImage = require(\"./assets/ic_fullscreen.png\");\n\nconst Slider = (props: Props) => {\n const {\n customSliderStyle,\n duration,\n mainColor,\n onFullScreen,\n onPause,\n progress,\n } = props;\n\n const containerStyle = customSliderStyle?.containerStyle || {};\n const customTrackStyle = customSliderStyle?.trackStyle || {};\n const customThumbStyle = customSliderStyle?.thumbStyle || {};\n\n const dragging = (value: number) => {\n const { onSeeking, playerState } = props;\n onSeeking(value);\n\n if (playerState === PLAYER_STATES.PAUSED) {\n return;\n }\n\n onPause();\n };\n\n const seekVideo = (value: number) => {\n props.onSeek(value);\n onPause();\n };\n\n return (\n \n \n \n \n {humanizeVideoDuration(progress)}\n \n \n {humanizeVideoDuration(duration)}\n \n \n \n \n {Boolean(onFullScreen) && (\n \n \n \n )}\n \n );\n};\n\nexport { Slider };\n","import React from \"react\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst Toolbar = ({ children }: Props) => <>{children};\n\nexport { Toolbar };\n","import React, { useState } from \"react\";\nimport {\n View,\n Animated,\n TouchableWithoutFeedback,\n GestureResponderEvent,\n ViewStyle,\n} from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\nimport { Controls } from \"./Controls\";\nimport { Slider, CustomSliderStyle } from \"./Slider\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport type Props = {\n children: React.ReactNode;\n containerStyle: ViewStyle;\n duration: number;\n fadeOutDelay?: number;\n isFullScreen: boolean;\n isLoading: boolean;\n mainColor: string;\n onFullScreen?: (event: GestureResponderEvent) => void;\n onPaused: (playerState: PLAYER_STATES) => void;\n onReplay: () => void;\n onSeek: (value: number) => void;\n onSeeking: (value: number) => void;\n playerState: PLAYER_STATES;\n progress: number;\n showOnStart?: boolean;\n sliderStyle: CustomSliderStyle;\n toolbarStyle: ViewStyle;\n};\n\nconst MediaControls = (props: Props) => {\n const {\n children,\n containerStyle: customContainerStyle = {},\n duration,\n fadeOutDelay = 5000,\n isLoading = false,\n mainColor = \"rgba(12, 83, 175, 0.9)\",\n onFullScreen,\n onReplay: onReplayCallback,\n onSeek,\n onSeeking,\n playerState,\n progress,\n showOnStart = true,\n sliderStyle, // defaults are applied in Slider.tsx\n toolbarStyle: customToolbarStyle = {},\n } = props;\n const { initialOpacity, initialIsVisible } = (() => {\n if (showOnStart) {\n return {\n initialOpacity: 1,\n initialIsVisible: true,\n };\n }\n\n return {\n initialOpacity: 0,\n initialIsVisible: false,\n };\n })();\n\n const [opacity] = useState(new Animated.Value(initialOpacity));\n const [isVisible, setIsVisible] = useState(initialIsVisible);\n\n const fadeOutControls = (delay = 0) => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n delay,\n useNativeDriver: false,\n }).start(result => {\n /* I noticed that the callback is called twice, when it is invoked and when it completely finished\n This prevents some flickering */\n if (result.finished) {\n setIsVisible(false);\n }\n });\n };\n\n const fadeInControls = (loop = true) => {\n setIsVisible(true);\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n delay: 0,\n useNativeDriver: false,\n }).start(() => {\n if (loop) {\n fadeOutControls(fadeOutDelay);\n }\n });\n };\n\n const onReplay = () => {\n fadeOutControls(fadeOutDelay);\n onReplayCallback();\n };\n\n const cancelAnimation = () => opacity.stopAnimation(() => setIsVisible(true));\n\n const onPause = () => {\n const { playerState, onPaused } = props;\n const { PLAYING, PAUSED, ENDED } = PLAYER_STATES;\n switch (playerState) {\n case PLAYING: {\n cancelAnimation();\n break;\n }\n case PAUSED: {\n fadeOutControls(fadeOutDelay);\n break;\n }\n case ENDED:\n break;\n }\n\n const newPlayerState = playerState === PLAYING ? PAUSED : PLAYING;\n return onPaused(newPlayerState);\n };\n\n const toggleControls = () => {\n // value is the last value of the animation when stop animation was called.\n // As this is an opacity effect, I (Charlie) used the value (0 or 1) as a boolean\n opacity.stopAnimation((value: number) => {\n setIsVisible(!!value);\n return value ? fadeOutControls() : fadeInControls();\n });\n };\n\n return (\n \n \n {isVisible && (\n \n \n {children}\n \n \n \n \n )}\n \n \n );\n};\n\nMediaControls.Toolbar = Toolbar;\n\nexport default MediaControls;\n"],"names":["containerBackgroundColor","playButtonBorderColor","white","StyleSheet","create","container","alignItems","backgroundColor","bottom","flex","flexDirection","justifyContent","left","paddingHorizontal","paddingVertical","position","right","top","controlsRow","alignSelf","fullScreenContainer","paddingLeft","playButton","borderColor","borderRadius","borderWidth","height","width","playIcon","resizeMode","progressColumnContainer","progressContainer","marginBottom","progressSlider","replayIcon","thumb","timeRow","timerLabel","color","fontSize","timerLabelsContainer","toolbar","toolbarRow","track","PLAYER_STATES","humanizeVideoDuration","seconds","begin","end","date","Date","setSeconds","toISOString","substr","getPlayerStateIcon","playerState","PAUSED","require","PLAYING","ENDED","Controls","props","isLoading","mainColor","onReplay","onPause","icon","pressAction","content","React","ActivityIndicator","size","TouchableOpacity","style","styles","onPress","Image","source","View","fullScreenImage","Slider","customSliderStyle","duration","onFullScreen","progress","containerStyle","customTrackStyle","trackStyle","customThumbStyle","thumbStyle","dragging","value","onSeeking","seekVideo","onSeek","Text","RNSlider","onValueChange","onSlidingComplete","maximumValue","Math","floor","minimumTrackTintColor","Boolean","Toolbar","children","MediaControls","customContainerStyle","fadeOutDelay","onReplayCallback","showOnStart","sliderStyle","toolbarStyle","customToolbarStyle","initialOpacity","initialIsVisible","useState","Animated","Value","opacity","isVisible","setIsVisible","fadeOutControls","delay","timing","toValue","useNativeDriver","start","result","finished","fadeInControls","loop","cancelAnimation","stopAnimation","onPaused","newPlayerState","toggleControls","TouchableWithoutFeedback"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"react-native-media-controls.esm.js","sources":["../../src/MediaControls.style.ts","../../src/constants/playerStates.ts","../../src/utils.ts","../../src/Controls.tsx","../../src/Slider.tsx","../../src/Toolbar.tsx","../../src/MediaControls.tsx"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nconst containerBackgroundColor = \"rgba(45, 59, 62, 0.4)\";\nconst playButtonBorderColor = \"rgba(255,255,255,0.5)\";\nconst white = \"#fff\";\n\nexport default StyleSheet.create({\n container: {\n alignItems: \"center\",\n backgroundColor: containerBackgroundColor,\n bottom: 0,\n flex: 1,\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n left: 0,\n paddingHorizontal: 20,\n paddingVertical: 13,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n controlsRow: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n flex: 1,\n justifyContent: \"center\",\n },\n fullScreenContainer: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n justifyContent: \"center\",\n paddingLeft: 20,\n },\n playButton: {\n alignItems: \"center\",\n borderColor: playButtonBorderColor,\n borderRadius: 3,\n borderWidth: 1.5,\n height: 50,\n justifyContent: \"center\",\n width: 50,\n },\n playIcon: {\n height: 22,\n resizeMode: \"contain\",\n width: 22,\n },\n progressColumnContainer: {\n flex: 1,\n },\n progressContainer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n marginBottom: -25,\n },\n progressSlider: {\n alignSelf: \"stretch\",\n },\n replayIcon: {\n height: 20,\n resizeMode: \"stretch\",\n width: 25,\n },\n thumb: {\n backgroundColor: white,\n borderRadius: 50,\n borderWidth: 3,\n height: 20,\n width: 20,\n },\n timeRow: {\n alignSelf: \"stretch\",\n },\n timerLabel: {\n color: white,\n fontSize: 12,\n },\n timerLabelsContainer: {\n alignSelf: \"stretch\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n marginBottom: -7,\n },\n toolbar: {\n flexDirection: \"row\",\n flex: 1,\n justifyContent: \"flex-end\",\n },\n toolbarRow: {\n alignItems: \"flex-start\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n },\n track: {\n borderRadius: 1,\n height: 5,\n },\n});\n","enum PLAYER_STATES {\n PLAYING = 0,\n PAUSED = 1,\n ENDED = 2,\n}\n\nexport { PLAYER_STATES };\n","import { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport const humanizeVideoDuration = (seconds: number) => {\n const [begin, end] = seconds >= 3600 ? [11, 8] : [14, 5];\n const date = new Date(0);\n\n date.setSeconds(seconds);\n return date.toISOString().substr(begin, end);\n};\n\nexport const noop = () => {};\n\nexport const getPlayerStateIcon = (playerState: PLAYER_STATES) => {\n switch (playerState) {\n case PLAYER_STATES.PAUSED:\n return require(\"./assets/ic_play.png\");\n case PLAYER_STATES.PLAYING:\n return require(\"./assets/ic_pause.png\");\n case PLAYER_STATES.ENDED:\n return require(\"./assets/ic_replay.png\");\n default:\n return null;\n }\n};\n","import React from \"react\";\nimport { TouchableOpacity, View, ActivityIndicator, Image } from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { getPlayerStateIcon } from \"./utils\";\nimport { Props } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\ntype ControlsProps = Pick<\n Props,\n \"isLoading\" | \"mainColor\" | \"playerState\" | \"onReplay\"\n> & {\n onPause: () => void;\n};\n\nconst Controls = (props: ControlsProps) => {\n const { isLoading, mainColor, playerState, onReplay, onPause } = props;\n const icon = getPlayerStateIcon(playerState);\n const pressAction = playerState === PLAYER_STATES.ENDED ? onReplay : onPause;\n\n const content = isLoading ? (\n \n ) : (\n \n \n \n );\n\n return {content};\n};\n\nexport { Controls };\n","import React from \"react\";\nimport { TouchableOpacity, View, Text, Image, ViewStyle } from \"react-native\";\nimport RNSlider from \"react-native-slider\";\nimport styles from \"./MediaControls.style\";\nimport { humanizeVideoDuration } from \"./utils\";\nimport { Props as MediaControlsProps } from \"./MediaControls\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\n\nexport type CustomSliderStyle = {\n containerStyle: ViewStyle;\n trackStyle: ViewStyle;\n thumbStyle: ViewStyle;\n};\n\ntype Props = Pick<\n MediaControlsProps,\n | \"progress\"\n | \"duration\"\n | \"mainColor\"\n | \"onFullScreen\"\n | \"playerState\"\n | \"onSeek\"\n | \"onSeeking\"\n> & {\n onPause: () => void;\n customSliderStyle?: CustomSliderStyle;\n};\n\nconst fullScreenImage = require(\"./assets/ic_fullscreen.png\");\n\nconst Slider = (props: Props) => {\n const {\n customSliderStyle,\n duration,\n mainColor,\n onFullScreen,\n onPause,\n progress,\n } = props;\n\n const containerStyle = customSliderStyle?.containerStyle || {};\n const customTrackStyle = customSliderStyle?.trackStyle || {};\n const customThumbStyle = customSliderStyle?.thumbStyle || {};\n\n const dragging = (value: number) => {\n const { onSeeking, playerState } = props;\n onSeeking(value);\n\n if (playerState === PLAYER_STATES.PAUSED) {\n return;\n }\n\n onPause();\n };\n\n const seekVideo = (value: number) => {\n props.onSeek(value);\n onPause();\n };\n\n return (\n \n \n \n \n {humanizeVideoDuration(progress)}\n \n \n {humanizeVideoDuration(duration)}\n \n \n \n \n {Boolean(onFullScreen) && (\n \n \n \n )}\n \n );\n};\n\nexport { Slider };\n","import React from \"react\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst Toolbar = ({ children }: Props) => <>{children};\n\nexport { Toolbar };\n","import React, { useState, useEffect } from \"react\";\nimport {\n View,\n Animated,\n TouchableWithoutFeedback,\n GestureResponderEvent,\n ViewStyle,\n} from \"react-native\";\nimport styles from \"./MediaControls.style\";\nimport { PLAYER_STATES } from \"./constants/playerStates\";\nimport { Controls } from \"./Controls\";\nimport { Slider, CustomSliderStyle } from \"./Slider\";\nimport { Toolbar } from \"./Toolbar\";\n\nexport type Props = {\n children: React.ReactNode;\n containerStyle: ViewStyle;\n duration: number;\n fadeOutDelay?: number;\n isFullScreen: boolean;\n isLoading: boolean;\n mainColor: string;\n onFullScreen?: (event: GestureResponderEvent) => void;\n onPaused: (playerState: PLAYER_STATES) => void;\n onReplay: () => void;\n onSeek: (value: number) => void;\n onSeeking: (value: number) => void;\n playerState: PLAYER_STATES;\n progress: number;\n showOnStart?: boolean;\n sliderStyle: CustomSliderStyle;\n toolbarStyle: ViewStyle;\n};\n\nconst MediaControls = (props: Props) => {\n const {\n children,\n containerStyle: customContainerStyle = {},\n duration,\n fadeOutDelay = 5000,\n isLoading = false,\n mainColor = \"rgba(12, 83, 175, 0.9)\",\n onFullScreen,\n onReplay: onReplayCallback,\n onSeek,\n onSeeking,\n playerState,\n progress,\n showOnStart = true,\n sliderStyle, // defaults are applied in Slider.tsx\n toolbarStyle: customToolbarStyle = {},\n } = props;\n const { initialOpacity, initialIsVisible } = (() => {\n if (showOnStart) {\n return {\n initialOpacity: 1,\n initialIsVisible: true,\n };\n }\n\n return {\n initialOpacity: 0,\n initialIsVisible: false,\n };\n })();\n\n const [opacity] = useState(new Animated.Value(initialOpacity));\n const [isVisible, setIsVisible] = useState(initialIsVisible);\n\n useEffect(() => {\n fadeOutControls(fadeOutDelay);\n }, []);\n\n const fadeOutControls = (delay = 0) => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n delay,\n useNativeDriver: false,\n }).start(result => {\n /* I noticed that the callback is called twice, when it is invoked and when it completely finished\n This prevents some flickering */\n if (result.finished) {\n setIsVisible(false);\n }\n });\n };\n\n const fadeInControls = (loop = true) => {\n setIsVisible(true);\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n delay: 0,\n useNativeDriver: false,\n }).start(() => {\n if (loop) {\n fadeOutControls(fadeOutDelay);\n }\n });\n };\n\n const onReplay = () => {\n fadeOutControls(fadeOutDelay);\n onReplayCallback();\n };\n\n const cancelAnimation = () => opacity.stopAnimation(() => setIsVisible(true));\n\n const onPause = () => {\n const { playerState, onPaused } = props;\n const { PLAYING, PAUSED, ENDED } = PLAYER_STATES;\n switch (playerState) {\n case PLAYING: {\n cancelAnimation();\n break;\n }\n case PAUSED: {\n fadeOutControls(fadeOutDelay);\n break;\n }\n case ENDED:\n break;\n }\n\n const newPlayerState = playerState === PLAYING ? PAUSED : PLAYING;\n return onPaused(newPlayerState);\n };\n\n const toggleControls = () => {\n // value is the last value of the animation when stop animation was called.\n // As this is an opacity effect, I (Charlie) used the value (0 or 1) as a boolean\n opacity.stopAnimation((value: number) => {\n setIsVisible(!!value);\n return value ? fadeOutControls() : fadeInControls();\n });\n };\n\n return (\n \n \n {isVisible && (\n \n \n {children}\n \n \n \n \n )}\n \n \n );\n};\n\nMediaControls.Toolbar = Toolbar;\n\nexport default MediaControls;\n"],"names":["containerBackgroundColor","playButtonBorderColor","white","StyleSheet","create","container","alignItems","backgroundColor","bottom","flex","flexDirection","justifyContent","left","paddingHorizontal","paddingVertical","position","right","top","controlsRow","alignSelf","fullScreenContainer","paddingLeft","playButton","borderColor","borderRadius","borderWidth","height","width","playIcon","resizeMode","progressColumnContainer","progressContainer","marginBottom","progressSlider","replayIcon","thumb","timeRow","timerLabel","color","fontSize","timerLabelsContainer","toolbar","toolbarRow","track","PLAYER_STATES","humanizeVideoDuration","seconds","begin","end","date","Date","setSeconds","toISOString","substr","getPlayerStateIcon","playerState","PAUSED","require","PLAYING","ENDED","Controls","props","isLoading","mainColor","onReplay","onPause","icon","pressAction","content","React","ActivityIndicator","size","TouchableOpacity","style","styles","onPress","accessibilityLabel","accessibilityHint","Image","source","View","fullScreenImage","Slider","customSliderStyle","duration","onFullScreen","progress","containerStyle","customTrackStyle","trackStyle","customThumbStyle","thumbStyle","dragging","value","onSeeking","seekVideo","onSeek","Text","RNSlider","onValueChange","onSlidingComplete","maximumValue","Math","floor","minimumTrackTintColor","Boolean","Toolbar","children","MediaControls","customContainerStyle","fadeOutDelay","onReplayCallback","showOnStart","sliderStyle","toolbarStyle","customToolbarStyle","initialOpacity","initialIsVisible","useState","Animated","Value","opacity","isVisible","setIsVisible","useEffect","fadeOutControls","delay","timing","toValue","useNativeDriver","start","result","finished","fadeInControls","loop","cancelAnimation","stopAnimation","onPaused","newPlayerState","toggleControls","TouchableWithoutFeedback","accessible"],"mappings":"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"} \ No newline at end of file diff --git a/src/Controls.tsx b/src/Controls.tsx index 21896726..692f9593 100644 --- a/src/Controls.tsx +++ b/src/Controls.tsx @@ -23,9 +23,7 @@ const Controls = (props: ControlsProps) => { diff --git a/src/MediaControls.tsx b/src/MediaControls.tsx index 95444901..2b052182 100644 --- a/src/MediaControls.tsx +++ b/src/MediaControls.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import { View, Animated, @@ -67,6 +67,10 @@ const MediaControls = (props: Props) => { const [opacity] = useState(new Animated.Value(initialOpacity)); const [isVisible, setIsVisible] = useState(initialIsVisible); + useEffect(() => { + fadeOutControls(fadeOutDelay); + }, []); + const fadeOutControls = (delay = 0) => { Animated.timing(opacity, { toValue: 0,