@htyf-mp/taro-components-rn 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +2 -0
  2. package/dist/assets/icons/back.png +0 -0
  3. package/dist/assets/icons/cancel.png +0 -0
  4. package/dist/assets/icons/circle.png +0 -0
  5. package/dist/assets/icons/clear.png +0 -0
  6. package/dist/assets/icons/delete.png +0 -0
  7. package/dist/assets/icons/download.png +0 -0
  8. package/dist/assets/icons/info.png +0 -0
  9. package/dist/assets/icons/info_circle.png +0 -0
  10. package/dist/assets/icons/safe_success.png +0 -0
  11. package/dist/assets/icons/safe_warn.png +0 -0
  12. package/dist/assets/icons/search.png +0 -0
  13. package/dist/assets/icons/success.png +0 -0
  14. package/dist/assets/icons/success_circle.png +0 -0
  15. package/dist/assets/icons/success_no_circle.png +0 -0
  16. package/dist/assets/icons/waiting.png +0 -0
  17. package/dist/assets/icons/waiting_circle.png +0 -0
  18. package/dist/assets/icons/warn.png +0 -0
  19. package/dist/assets/loading-warn.png +0 -0
  20. package/dist/assets/loading.png +0 -0
  21. package/dist/assets/thumb.png +0 -0
  22. package/dist/assets/video/full.png +0 -0
  23. package/dist/assets/video/mute.png +0 -0
  24. package/dist/assets/video/pause.png +0 -0
  25. package/dist/assets/video/play.png +0 -0
  26. package/dist/assets/video/shrink.png +0 -0
  27. package/dist/assets/video/unmute.png +0 -0
  28. package/dist/assets/video/volume.png +0 -0
  29. package/dist/assets/weui.js +92 -0
  30. package/dist/assets/weui.js.map +1 -0
  31. package/dist/components/Block/index.js +8 -0
  32. package/dist/components/Block/index.js.map +1 -0
  33. package/dist/components/Button/PropsType.js +2 -0
  34. package/dist/components/Button/PropsType.js.map +1 -0
  35. package/dist/components/Button/index.js +159 -0
  36. package/dist/components/Button/index.js.map +1 -0
  37. package/dist/components/Button/styles.js +30 -0
  38. package/dist/components/Button/styles.js.map +1 -0
  39. package/dist/components/Camera/PropsType.js +2 -0
  40. package/dist/components/Camera/PropsType.js.map +1 -0
  41. package/dist/components/Camera/index.js +69 -0
  42. package/dist/components/Camera/index.js.map +1 -0
  43. package/dist/components/Camera/styles.js +8 -0
  44. package/dist/components/Camera/styles.js.map +1 -0
  45. package/dist/components/Checkbox/PropsType.js +2 -0
  46. package/dist/components/Checkbox/PropsType.js.map +1 -0
  47. package/dist/components/Checkbox/index.js +60 -0
  48. package/dist/components/Checkbox/index.js.map +1 -0
  49. package/dist/components/Checkbox/styles.js +28 -0
  50. package/dist/components/Checkbox/styles.js.map +1 -0
  51. package/dist/components/CheckboxGroup/PropsType.js +2 -0
  52. package/dist/components/CheckboxGroup/PropsType.js.map +1 -0
  53. package/dist/components/CheckboxGroup/index.js +64 -0
  54. package/dist/components/CheckboxGroup/index.js.map +1 -0
  55. package/dist/components/ClickableSimplified/PropsType.js +2 -0
  56. package/dist/components/ClickableSimplified/PropsType.js.map +1 -0
  57. package/dist/components/ClickableSimplified/index.js +187 -0
  58. package/dist/components/ClickableSimplified/index.js.map +1 -0
  59. package/dist/components/CoverImage/index.js +2 -0
  60. package/dist/components/CoverImage/index.js.map +1 -0
  61. package/dist/components/CoverView/index.js +2 -0
  62. package/dist/components/CoverView/index.js.map +1 -0
  63. package/dist/components/CustomWrapper/index.js +2 -0
  64. package/dist/components/CustomWrapper/index.js.map +1 -0
  65. package/dist/components/Form/PropsType.js +2 -0
  66. package/dist/components/Form/PropsType.js.map +1 -0
  67. package/dist/components/Form/index.js +104 -0
  68. package/dist/components/Form/index.js.map +1 -0
  69. package/dist/components/Icon/PropsType.js +2 -0
  70. package/dist/components/Icon/PropsType.js.map +1 -0
  71. package/dist/components/Icon/index.js +38 -0
  72. package/dist/components/Icon/index.js.map +1 -0
  73. package/dist/components/Image/PropsType.js +2 -0
  74. package/dist/components/Image/PropsType.js.map +1 -0
  75. package/dist/components/Image/index.js +162 -0
  76. package/dist/components/Image/index.js.map +1 -0
  77. package/dist/components/Input/PropsType.js +2 -0
  78. package/dist/components/Input/PropsType.js.map +1 -0
  79. package/dist/components/Input/index.js +215 -0
  80. package/dist/components/Input/index.js.map +1 -0
  81. package/dist/components/Label/PropsType.js +2 -0
  82. package/dist/components/Label/PropsType.js.map +1 -0
  83. package/dist/components/Label/index.js +45 -0
  84. package/dist/components/Label/index.js.map +1 -0
  85. package/dist/components/Map/index.js +146 -0
  86. package/dist/components/Map/index.js.map +1 -0
  87. package/dist/components/MovableArea/PropsType.js +2 -0
  88. package/dist/components/MovableArea/PropsType.js.map +1 -0
  89. package/dist/components/MovableArea/index.js +26 -0
  90. package/dist/components/MovableArea/index.js.map +1 -0
  91. package/dist/components/MovableView/PropsType.js +2 -0
  92. package/dist/components/MovableView/PropsType.js.map +1 -0
  93. package/dist/components/MovableView/index.js +107 -0
  94. package/dist/components/MovableView/index.js.map +1 -0
  95. package/dist/components/Navigator/index.js +39 -0
  96. package/dist/components/Navigator/index.js.map +1 -0
  97. package/dist/components/PageContainer/PropsType.js +2 -0
  98. package/dist/components/PageContainer/PropsType.js.map +1 -0
  99. package/dist/components/PageContainer/container.js +104 -0
  100. package/dist/components/PageContainer/container.js.map +1 -0
  101. package/dist/components/PageContainer/index.js +34 -0
  102. package/dist/components/PageContainer/index.js.map +1 -0
  103. package/dist/components/Picker/PropsType.js +2 -0
  104. package/dist/components/Picker/PropsType.js.map +1 -0
  105. package/dist/components/Picker/date.js +96 -0
  106. package/dist/components/Picker/date.js.map +1 -0
  107. package/dist/components/Picker/index.js +64 -0
  108. package/dist/components/Picker/index.js.map +1 -0
  109. package/dist/components/Picker/multiSelector.js +136 -0
  110. package/dist/components/Picker/multiSelector.js.map +1 -0
  111. package/dist/components/Picker/region.js +116 -0
  112. package/dist/components/Picker/region.js.map +1 -0
  113. package/dist/components/Picker/regionData.js +6100 -0
  114. package/dist/components/Picker/regionData.js.map +1 -0
  115. package/dist/components/Picker/selector.js +103 -0
  116. package/dist/components/Picker/selector.js.map +1 -0
  117. package/dist/components/Picker/time.js +81 -0
  118. package/dist/components/Picker/time.js.map +1 -0
  119. package/dist/components/PickerView/PropsType.js +2 -0
  120. package/dist/components/PickerView/PropsType.js.map +1 -0
  121. package/dist/components/PickerView/index.js +55 -0
  122. package/dist/components/PickerView/index.js.map +1 -0
  123. package/dist/components/PickerViewColumn/index.js +12 -0
  124. package/dist/components/PickerViewColumn/index.js.map +1 -0
  125. package/dist/components/Progress/PropsType.js +2 -0
  126. package/dist/components/Progress/PropsType.js.map +1 -0
  127. package/dist/components/Progress/index.js +119 -0
  128. package/dist/components/Progress/index.js.map +1 -0
  129. package/dist/components/Progress/styles.js +15 -0
  130. package/dist/components/Progress/styles.js.map +1 -0
  131. package/dist/components/Provider/index.js +3 -0
  132. package/dist/components/Provider/index.js.map +1 -0
  133. package/dist/components/Radio/PropsType.js +2 -0
  134. package/dist/components/Radio/PropsType.js.map +1 -0
  135. package/dist/components/Radio/index.js +59 -0
  136. package/dist/components/Radio/index.js.map +1 -0
  137. package/dist/components/Radio/styles.js +28 -0
  138. package/dist/components/Radio/styles.js.map +1 -0
  139. package/dist/components/RadioGroup/PropsType.js +2 -0
  140. package/dist/components/RadioGroup/PropsType.js.map +1 -0
  141. package/dist/components/RadioGroup/index.js +57 -0
  142. package/dist/components/RadioGroup/index.js.map +1 -0
  143. package/dist/components/RichText/PropsType.js +2 -0
  144. package/dist/components/RichText/PropsType.js.map +1 -0
  145. package/dist/components/RichText/index.js +65 -0
  146. package/dist/components/RichText/index.js.map +1 -0
  147. package/dist/components/ScrollView/PropsType.js +2 -0
  148. package/dist/components/ScrollView/PropsType.js.map +1 -0
  149. package/dist/components/ScrollView/index.js +238 -0
  150. package/dist/components/ScrollView/index.js.map +1 -0
  151. package/dist/components/Slider/PropsType.js +2 -0
  152. package/dist/components/Slider/PropsType.js.map +1 -0
  153. package/dist/components/Slider/index.js +84 -0
  154. package/dist/components/Slider/index.js.map +1 -0
  155. package/dist/components/Slider/styles.js +14 -0
  156. package/dist/components/Slider/styles.js.map +1 -0
  157. package/dist/components/Swiper/PropsType.js +2 -0
  158. package/dist/components/Swiper/PropsType.js.map +1 -0
  159. package/dist/components/Swiper/carousel.js +226 -0
  160. package/dist/components/Swiper/carousel.js.map +1 -0
  161. package/dist/components/Swiper/index.js +74 -0
  162. package/dist/components/Swiper/index.js.map +1 -0
  163. package/dist/components/Swiper/pagination.js +50 -0
  164. package/dist/components/Swiper/pagination.js.map +1 -0
  165. package/dist/components/SwiperItem/PropsType.js +2 -0
  166. package/dist/components/SwiperItem/PropsType.js.map +1 -0
  167. package/dist/components/SwiperItem/index.js +14 -0
  168. package/dist/components/SwiperItem/index.js.map +1 -0
  169. package/dist/components/SwiperItem/styles.js +9 -0
  170. package/dist/components/SwiperItem/styles.js.map +1 -0
  171. package/dist/components/Switch/PropsType.js +2 -0
  172. package/dist/components/Switch/PropsType.js.map +1 -0
  173. package/dist/components/Switch/index.js +93 -0
  174. package/dist/components/Switch/index.js.map +1 -0
  175. package/dist/components/Text/PropsType.js +2 -0
  176. package/dist/components/Text/PropsType.js.map +1 -0
  177. package/dist/components/Text/index.js +25 -0
  178. package/dist/components/Text/index.js.map +1 -0
  179. package/dist/components/Textarea/PropsType.js +2 -0
  180. package/dist/components/Textarea/PropsType.js.map +1 -0
  181. package/dist/components/Textarea/index.js +31 -0
  182. package/dist/components/Textarea/index.js.map +1 -0
  183. package/dist/components/Video/PropsType.js +2 -0
  184. package/dist/components/Video/PropsType.js.map +1 -0
  185. package/dist/components/Video/controls.js +166 -0
  186. package/dist/components/Video/controls.js.map +1 -0
  187. package/dist/components/Video/danmu.js +101 -0
  188. package/dist/components/Video/danmu.js.map +1 -0
  189. package/dist/components/Video/index.js +380 -0
  190. package/dist/components/Video/index.js.map +1 -0
  191. package/dist/components/Video/style.js +235 -0
  192. package/dist/components/Video/style.js.map +1 -0
  193. package/dist/components/Video/utils.js +14 -0
  194. package/dist/components/Video/utils.js.map +1 -0
  195. package/dist/components/View/PropsType.js +2 -0
  196. package/dist/components/View/PropsType.js.map +1 -0
  197. package/dist/components/View/index.js +46 -0
  198. package/dist/components/View/index.js.map +1 -0
  199. package/dist/components/VirtualList/PropsType.js +2 -0
  200. package/dist/components/VirtualList/PropsType.js.map +1 -0
  201. package/dist/components/VirtualList/index.js +82 -0
  202. package/dist/components/VirtualList/index.js.map +1 -0
  203. package/dist/components/WebView/PropsType.js +2 -0
  204. package/dist/components/WebView/PropsType.js.map +1 -0
  205. package/dist/components/WebView/index.js +31 -0
  206. package/dist/components/WebView/index.js.map +1 -0
  207. package/dist/components/hooks/PropsType.js +2 -0
  208. package/dist/components/hooks/PropsType.js.map +1 -0
  209. package/dist/components/hooks/useClickable.js +168 -0
  210. package/dist/components/hooks/useClickable.js.map +1 -0
  211. package/dist/index.js +38 -0
  212. package/dist/index.js.map +1 -0
  213. package/dist/setup.js +12 -0
  214. package/dist/setup.js.map +1 -0
  215. package/dist/utils/index.js +87 -0
  216. package/dist/utils/index.js.map +1 -0
  217. package/package.json +73 -0
@@ -0,0 +1,166 @@
1
+ // import React, { Component } from 'react'
2
+ // import View from '../View'
3
+ // import { ControlsProps } from './PropsType'
4
+ // import { formatTime } from './utils'
5
+ // import Styles from './style'
6
+ // import Image from '../Image'
7
+ // /**
8
+ // * @typedef {Object} ControlsProps
9
+ // * @property {Boolean} controls={controls}
10
+ // * @property {Number} currentTime={this.currentTime}
11
+ // * @property {Number} duration={this.state.duration}
12
+ // * @property {Boolean} isPlaying={this.state.isPlaying}
13
+ // * @property {Function} pauseFunc={this.pause}
14
+ // * @property {Function} playFunc={this.play}
15
+ // * @property {Function} seekFunc={this.seek}
16
+ // * @property {Boolean} showPlayBtn={showPlayBtn}
17
+ // * @property {Boolean} showProgress={showProgress}
18
+ // */
19
+ // class Controls extends Component<ControlsProps, any> {
20
+ // visible = false
21
+ // isDraggingProgressBall = false
22
+ // /** @type {number} */
23
+ // hideControlsTimer
24
+ // progressDimentions = {
25
+ // left: 0,
26
+ // right: 0,
27
+ // width: 0
28
+ // }
29
+ // calcPercentage = pageX => {
30
+ // let pos = pageX - this.progressDimentions.left
31
+ // pos = Math.max(pos, 0)
32
+ // pos = Math.min(pos, this.progressDimentions.width)
33
+ // return pos / this.progressDimentions.width
34
+ // }
35
+ // getControlsRef = ref => {
36
+ // if (!ref) return
37
+ // this.controlsRef = ref
38
+ // }
39
+ // getCurrentTimeRef = ref => {
40
+ // if (!ref) return
41
+ // this.currentTimeRef = ref
42
+ // }
43
+ // getProgressBallRef = ref => {
44
+ // if (!ref) return
45
+ // this.progressBallRef = ref
46
+ // }
47
+ // setCurrentTime (time) {
48
+ // if (this.currentTimeRef) {
49
+ // this.currentTimeRef.innerHTML = formatTime(time)
50
+ // }
51
+ // }
52
+ // setProgressBall (percentage) {
53
+ // if (this.progressBallRef) {
54
+ // this.progressBallRef.style.left = `${percentage * 100}%`
55
+ // }
56
+ // }
57
+ // toggleVisibility (nextVisible) {
58
+ // const visible = nextVisible === undefined ? !this.visible : nextVisible
59
+ // if (visible) {
60
+ // this.hideControlsTimer && clearTimeout(this.hideControlsTimer)
61
+ // if (this.props.isPlaying) {
62
+ // this.hideControlsTimer = setTimeout(() => {
63
+ // this.toggleVisibility(false)
64
+ // }, 2000)
65
+ // }
66
+ // if (this.controlsRef) {
67
+ // this.controlsRef.style.visibility = 'visible'
68
+ // }
69
+ // } else {
70
+ // if (this.controlsRef) {
71
+ // this.controlsRef.style.visibility = 'hidden'
72
+ // }
73
+ // }
74
+ // this.visible = !!visible
75
+ // }
76
+ // onDragProgressBallStart = () => {
77
+ // this.isDraggingProgressBall = true
78
+ // this.hideControlsTimer && clearTimeout(this.hideControlsTimer)
79
+ // }
80
+ // onClickProgress = e => {
81
+ // e.stopPropagation()
82
+ // const seekFunc = this.props.seekFunc
83
+ // const percentage = this.calcPercentage(e.pageX)
84
+ // seekFunc(percentage * this.props.duration)
85
+ // this.toggleVisibility(true)
86
+ // }
87
+ // bindTouchEvents = () => {
88
+ // let percentage = 0
89
+ // const touchMove = e => {
90
+ // if (!this.isDraggingProgressBall) return
91
+ // const touchX = e.touches[0].pageX
92
+ // percentage = this.calcPercentage(touchX)
93
+ // this.setProgressBall(percentage)
94
+ // }
95
+ // const touchEnd = e => {
96
+ // if (!this.isDraggingProgressBall) return
97
+ // const seekFunc = this.props.seekFunc
98
+ // this.isDraggingProgressBall = false
99
+ // seekFunc(percentage * this.props.duration)
100
+ // this.toggleVisibility(true)
101
+ // }
102
+ // // document.body.addEventListener('touchmove', touchMove)
103
+ // // document.body.addEventListener('touchend', touchEnd)
104
+ // // document.body.addEventListener('touchcancel', touchEnd)
105
+ // // return () => {
106
+ // // document.body.removeEventListener('touchmove', touchMove)
107
+ // // document.body.removeEventListener('touchend', touchEnd)
108
+ // // document.body.removeEventListener('touchcancel', touchEnd)
109
+ // // }
110
+ // }
111
+ // componentDidMount () {
112
+ // // this.unbindTouchEvents = this.bindTouchEvents()
113
+ // }
114
+ // componentWillUnmount () {
115
+ // // this.unbindTouchEvents()
116
+ // }
117
+ // render () {
118
+ // const { controls, currentTime, duration, isPlaying, pauseFunc, playFunc, showPlayBtn, showProgress } = this.props
119
+ // const formattedDuration = formatTime(duration as number)
120
+ // let playBtn
121
+ // if (!showPlayBtn) {
122
+ // return null
123
+ // } else if (isPlaying) {
124
+ // playBtn = <Image src={require('../../assets/video/play.png')} style={[Styles['taro-video-control-button'], Styles['taro-video-control-button-pause']]} onClick={pauseFunc} />;
125
+ // } else {
126
+ // playBtn = <Image src={require('../../assets/video/play.png')} style={[Styles['taro-video-control-button'], Styles['taro-video-control-button-pause']]} onClick={pauseFunc} />;
127
+ // }
128
+ // return (
129
+ // <View style={[Styles['taro-video-bar'], Styles['taro-video-bar-full']]} ref={this.getControlsRef}>
130
+ // {controls && (
131
+ // <View style={Styles['taro-video-controls']}>
132
+ // {playBtn}
133
+ // {showProgress && (
134
+ // <View style={Styles['taro-video-current-time']} ref={this.getCurrentTimeRef}>
135
+ // {formatTime(currentTime as number)}
136
+ // </View>
137
+ // )}
138
+ // {showProgress && (
139
+ // <View style={Styles['taro-video-progress-container']} onClick={this.onClickProgress}>
140
+ // <View
141
+ // style={Styles['taro-video-progress']}
142
+ // ref={ref => {
143
+ // // if (ref !== null) {
144
+ // // const rect = ref.getBoundingClientRect()
145
+ // // this.progressDimentions.left = rect.left
146
+ // // this.progressDimentions.right = rect.right
147
+ // // this.progressDimentions.width = rect.width
148
+ // // }
149
+ // }}>
150
+ // <View style={Styles['taro-video-progress-buffered']} style={{ width: '100%' }} />
151
+ // <View style={Styles['taro-video-ball']} ref={this.getProgressBallRef} onTouchStart={this.onDragProgressBallStart} style={`left: ${formattedDuration ? (this.currentTime / duration) * 100 : 0}%`}>
152
+ // <View style={Styles['taro-video-inner']} />
153
+ // </View>
154
+ // </View>
155
+ // </View>
156
+ // )}
157
+ // {showProgress && <View style={Styles['taro-video-duration']}>{formattedDuration}</View>}
158
+ // </View>
159
+ // )}
160
+ // {this.props.children}
161
+ // </View>
162
+ // )
163
+ // }
164
+ // }
165
+ // export default Controls
166
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../src/components/Video/controls.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ // /* eslint-disable react/react-in-jsx-scope */
2
+ // /* eslint-disable no-undef */
3
+ // /* eslint-disable @typescript-eslint/no-unused-vars */
4
+ // import Nerv, { PureComponent } from 'nervjs'
5
+ // class Danmu extends PureComponent<any, any> {
6
+ // state = {
7
+ // danmuList: []
8
+ // }
9
+ // danmuList = []
10
+ // danmuElList = []
11
+ // currentTime = 0
12
+ // ensureProperties (danmu) {
13
+ // const clonedDanmu = { ...danmu }
14
+ // if (!('time' in danmu)) {
15
+ // clonedDanmu.time = this.currentTime
16
+ // }
17
+ // clonedDanmu.key = Math.random()
18
+ // clonedDanmu.bottom = `${Math.random() * 90 + 5}%`
19
+ // return clonedDanmu
20
+ // }
21
+ // sendDanmu (danmuList) {
22
+ // if (Array.isArray(danmuList)) {
23
+ // this.danmuList = [
24
+ // ...this.danmuList,
25
+ // ...danmuList.map(danmu => {
26
+ // return this.ensureProperties(danmu)
27
+ // })
28
+ // ]
29
+ // } else {
30
+ // const danmu = danmuList
31
+ // this.danmuList = [
32
+ // ...this.danmuList,
33
+ // { ...this.ensureProperties(danmu) }
34
+ // ]
35
+ // }
36
+ // }
37
+ // tick (currentTime) {
38
+ // this.currentTime = currentTime
39
+ // if (!this.props.enable) return
40
+ // const danmuList = this.danmuList
41
+ // /**
42
+ // * @todo 这个判断对拖拽进度的处理不严谨
43
+ // */
44
+ // const newDanmuList = danmuList.filter(({ time }) => {
45
+ // return currentTime - time < 4 && currentTime > time
46
+ // })
47
+ // let shouldUpdate = false
48
+ // const oldDanmuList = this.state.danmuList
49
+ // if (newDanmuList.length !== oldDanmuList.length) {
50
+ // shouldUpdate = true
51
+ // } else {
52
+ // shouldUpdate = newDanmuList.some(({ key }) => {
53
+ // return oldDanmuList.every((danmu) => {
54
+ // return key !== danmu.key
55
+ // })
56
+ // })
57
+ // }
58
+ // if (shouldUpdate) {
59
+ // this.setState({
60
+ // danmuList: newDanmuList
61
+ // })
62
+ // }
63
+ // }
64
+ // componentDidUpdate () {
65
+ // requestAnimationFrame(() => {
66
+ // setTimeout(() => {
67
+ // const danmuElList = this.danmuElList.splice(0)
68
+ // danmuElList.forEach(danmu => {
69
+ // danmu.style.left = 0
70
+ // danmu.style.webkitTransform = 'translateX(-100%)'
71
+ // danmu.style.transform = 'translateX(-100%)'
72
+ // })
73
+ // })
74
+ // })
75
+ // }
76
+ // render () {
77
+ // if (!this.props.enable) return ''
78
+ // return <div className='taro-video-danmu'>
79
+ // {this.state.danmuList.map(({ text, color, bottom, key }) => {
80
+ // return (
81
+ // <p
82
+ // className='taro-video-danmu-item'
83
+ // key={key}
84
+ // style={{
85
+ // color,
86
+ // bottom
87
+ // }}
88
+ // ref={ref => {
89
+ // if (ref) {
90
+ // this.danmuElList.push(ref)
91
+ // }
92
+ // }}>
93
+ // {text}
94
+ // </p>
95
+ // )
96
+ // })}
97
+ // </div>
98
+ // }
99
+ // }
100
+ // export default Danmu
101
+ //# sourceMappingURL=danmu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"danmu.js","sourceRoot":"","sources":["../../../src/components/Video/danmu.tsx"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gCAAgC;AAChC,yDAAyD;AACzD,+CAA+C;AAE/C,gDAAgD;AAChD,cAAc;AACd,oBAAoB;AACpB,MAAM;AAEN,mBAAmB;AACnB,qBAAqB;AACrB,oBAAoB;AAEpB,+BAA+B;AAC/B,uCAAuC;AACvC,gCAAgC;AAChC,4CAA4C;AAC5C,QAAQ;AACR,sCAAsC;AACtC,wDAAwD;AACxD,yBAAyB;AACzB,MAAM;AAEN,4BAA4B;AAC5B,sCAAsC;AACtC,2BAA2B;AAC3B,6BAA6B;AAC7B,sCAAsC;AACtC,gDAAgD;AAChD,aAAa;AACb,UAAU;AACV,eAAe;AACf,gCAAgC;AAChC,2BAA2B;AAC3B,6BAA6B;AAC7B,8CAA8C;AAC9C,UAAU;AACV,QAAQ;AACR,MAAM;AAEN,yBAAyB;AACzB,qCAAqC;AACrC,qCAAqC;AAErC,uCAAuC;AACvC,UAAU;AACV,+BAA+B;AAC/B,UAAU;AACV,4DAA4D;AAC5D,4DAA4D;AAC5D,SAAS;AACT,+BAA+B;AAC/B,gDAAgD;AAEhD,yDAAyD;AACzD,4BAA4B;AAC5B,eAAe;AACf,wDAAwD;AACxD,iDAAiD;AACjD,qCAAqC;AACrC,aAAa;AACb,WAAW;AACX,QAAQ;AACR,0BAA0B;AAC1B,wBAAwB;AACxB,kCAAkC;AAClC,WAAW;AACX,QAAQ;AACR,MAAM;AAEN,4BAA4B;AAC5B,oCAAoC;AACpC,2BAA2B;AAC3B,yDAAyD;AACzD,yCAAyC;AACzC,iCAAiC;AACjC,8DAA8D;AAC9D,wDAAwD;AACxD,aAAa;AACb,WAAW;AACX,SAAS;AACT,MAAM;AAEN,gBAAgB;AAChB,wCAAwC;AACxC,gDAAgD;AAChD,sEAAsE;AACtE,mBAAmB;AACnB,eAAe;AACf,gDAAgD;AAChD,wBAAwB;AACxB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,iBAAiB;AACjB,4BAA4B;AAC5B,2BAA2B;AAC3B,6CAA6C;AAC7C,kBAAkB;AAClB,kBAAkB;AAClB,qBAAqB;AACrB,iBAAiB;AACjB,YAAY;AACZ,YAAY;AACZ,aAAa;AACb,MAAM;AACN,IAAI;AAEJ,uBAAuB"}
@@ -0,0 +1,380 @@
1
+ /**
2
+ * Video组件的样式参考了[uni-app](https://github.com/dcloudio/uni-app/tree/master/packages/uni-h5)的实现
3
+ */
4
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
+ return new (P || (P = Promise))(function (resolve, reject) {
7
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11
+ });
12
+ };
13
+ import { createVideoPlayer, VideoView, } from 'expo-video';
14
+ import React, { Component, createRef } from 'react';
15
+ import Image from '../Image';
16
+ import Text from '../Text';
17
+ import View from '../View';
18
+ import Styles from './style';
19
+ // import Danmu from './danmu'
20
+ // import Controls from './controls'
21
+ import { formatTime } from './utils';
22
+ const ObjectFit = {
23
+ contain: 'contain',
24
+ fill: 'fill',
25
+ cover: 'cover',
26
+ };
27
+ global._taroVideoMap = global._taroVideoMap || {};
28
+ class _Video extends Component {
29
+ constructor(props) {
30
+ super(props);
31
+ this.player = null;
32
+ this.taroVideoRef = null;
33
+ this.videoViewRef = createRef();
34
+ this.subscriptions = [];
35
+ /** @type {number} */
36
+ this.currentTime = 0;
37
+ this.progressDimentions = {
38
+ left: 0,
39
+ right: 0,
40
+ width: 0,
41
+ };
42
+ this.createPlayer = () => {
43
+ const { src, loop, muted, initialTime, id } = this.props;
44
+ const player = createVideoPlayer(src ? { uri: src } : null);
45
+ player.loop = !!loop;
46
+ player.muted = !!muted;
47
+ player.timeUpdateEventInterval = 0.25;
48
+ if (initialTime) {
49
+ player.currentTime = initialTime;
50
+ }
51
+ this.player = player;
52
+ this.taroVideoRef = this.createTaroVideoRef(player);
53
+ if (id) {
54
+ global._taroVideoMap[id] = this.taroVideoRef;
55
+ }
56
+ };
57
+ this.createTaroVideoRef = (player) => ({
58
+ playAsync: () => __awaiter(this, void 0, void 0, function* () {
59
+ player.play();
60
+ }),
61
+ pauseAsync: () => __awaiter(this, void 0, void 0, function* () {
62
+ player.pause();
63
+ }),
64
+ stopAsync: () => __awaiter(this, void 0, void 0, function* () {
65
+ player.pause();
66
+ player.currentTime = 0;
67
+ }),
68
+ setPositionAsync: (_a) => __awaiter(this, [_a], void 0, function* ({ positionMillis }) {
69
+ player.currentTime = positionMillis / 1000;
70
+ }),
71
+ setRateAsync: (rate) => __awaiter(this, void 0, void 0, function* () {
72
+ player.playbackRate = rate;
73
+ }),
74
+ setStatusAsync: (_a) => __awaiter(this, [_a], void 0, function* ({ positionMillis }) {
75
+ if (positionMillis != null) {
76
+ player.currentTime = positionMillis / 1000;
77
+ }
78
+ }),
79
+ presentFullscreenPlayer: () => __awaiter(this, void 0, void 0, function* () {
80
+ var _a;
81
+ (_a = this.videoViewRef.current) === null || _a === void 0 ? void 0 : _a.enterFullscreen();
82
+ }),
83
+ dismissFullscreenPlayer: () => __awaiter(this, void 0, void 0, function* () {
84
+ var _a;
85
+ (_a = this.videoViewRef.current) === null || _a === void 0 ? void 0 : _a.exitFullscreen();
86
+ }),
87
+ });
88
+ this.buildPlaybackStatus = (player) => ({
89
+ isLoaded: player.status === 'readyToPlay' || player.status === 'loading',
90
+ isPlaying: player.playing,
91
+ durationMillis: (player.duration || 0) * 1000,
92
+ positionMillis: (player.currentTime || 0) * 1000,
93
+ didJustFinish: false,
94
+ });
95
+ this.onSourceLoad = () => {
96
+ const player = this.player;
97
+ if (!player)
98
+ return;
99
+ const status = this.buildPlaybackStatus(player);
100
+ this.setState({
101
+ duration: status.durationMillis,
102
+ });
103
+ this.props.onLoad && this.props.onLoad();
104
+ this.onLoadedMetaData(status);
105
+ };
106
+ this.onTimeUpdate = () => {
107
+ const player = this.player;
108
+ if (!player)
109
+ return;
110
+ this.onPlaybackStatusUpdate(this.buildPlaybackStatus(player));
111
+ };
112
+ this.onPlayingChange = () => {
113
+ const player = this.player;
114
+ if (!player)
115
+ return;
116
+ this.onPlaybackStatusUpdate(this.buildPlaybackStatus(player));
117
+ };
118
+ this.onPlayToEnd = () => {
119
+ const player = this.player;
120
+ if (!player)
121
+ return;
122
+ this.onPlaybackStatusUpdate(Object.assign(Object.assign({}, this.buildPlaybackStatus(player)), { didJustFinish: true }));
123
+ };
124
+ this.onStatusChange = ({ error }) => {
125
+ if (error) {
126
+ this.onError(String(error));
127
+ }
128
+ };
129
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
130
+ this.onEnded = (e) => {
131
+ this.setState({
132
+ // isFirst: true,
133
+ isEnded: true,
134
+ });
135
+ if (!this.props.loop)
136
+ this.pause();
137
+ this.props.onEnded && this.props.onEnded(e);
138
+ };
139
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
140
+ this.onPlay = (e) => {
141
+ this.props.onPlay && this.props.onPlay(e);
142
+ if (!this.state.isPlaying) {
143
+ this.play();
144
+ }
145
+ };
146
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
147
+ this.onPause = (e) => {
148
+ this.props.onPause && this.props.onPause(e);
149
+ if (this.state.isPlaying) {
150
+ this.setState({
151
+ isPlaying: false,
152
+ });
153
+ }
154
+ };
155
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
156
+ this.onError = (e) => {
157
+ if (this.props.onError) {
158
+ const error = Object.defineProperty({}, 'detail', {
159
+ enumerable: true,
160
+ value: { errMsg: e },
161
+ });
162
+ this.props.onError(error);
163
+ }
164
+ };
165
+ this.clickPlayBtn = () => {
166
+ const { isEnded } = this.state;
167
+ isEnded && this.seek(0);
168
+ this.play();
169
+ };
170
+ this.play = () => {
171
+ var _a;
172
+ const { isEnded } = this.state;
173
+ isEnded && this.seek(0);
174
+ (_a = this.player) === null || _a === void 0 ? void 0 : _a.play();
175
+ this.setState({
176
+ shouldPlay: true,
177
+ isPlaying: true,
178
+ isFirst: false,
179
+ });
180
+ };
181
+ this.pause = () => {
182
+ var _a;
183
+ (_a = this.player) === null || _a === void 0 ? void 0 : _a.pause();
184
+ this.setState({
185
+ isPlaying: false,
186
+ shouldPlay: false,
187
+ });
188
+ };
189
+ this.stop = () => {
190
+ this.pause();
191
+ this.seek(0);
192
+ this.setState({
193
+ isPlaying: false,
194
+ });
195
+ };
196
+ this.seek = (position) => {
197
+ if (this.player) {
198
+ this.player.currentTime = position / 1000;
199
+ }
200
+ };
201
+ this.showStatusBar = () => {
202
+ console.error('暂不支持 videoContext.showStatusBar');
203
+ };
204
+ this.hideStatusBar = () => {
205
+ console.error('暂不支持 videoContext.hideStatusBar');
206
+ };
207
+ this.requestFullScreen = () => {
208
+ var _a;
209
+ (_a = this.videoViewRef.current) === null || _a === void 0 ? void 0 : _a.enterFullscreen();
210
+ };
211
+ this.exitFullScreen = () => {
212
+ var _a;
213
+ (_a = this.videoViewRef.current) === null || _a === void 0 ? void 0 : _a.exitFullscreen();
214
+ };
215
+ this.onLoadedMetaData = (status) => {
216
+ const player = this.player;
217
+ const videoTrack = player === null || player === void 0 ? void 0 : player.videoTrack;
218
+ const naturalSize = videoTrack
219
+ ? {
220
+ width: videoTrack.size.width,
221
+ height: videoTrack.size.height,
222
+ orientation: videoTrack.size.width >= videoTrack.size.height ? 'landscape' : 'portrait',
223
+ }
224
+ : {};
225
+ // @ts-ignore
226
+ status.duration = status.durationMillis;
227
+ // @ts-ignore
228
+ this.props.onLoadedMetaData && this.props.onLoadedMetaData({ detail: Object.assign(Object.assign({}, naturalSize), status) });
229
+ };
230
+ this.onFullscreenChange = (fullScreen, fullscreenUpdate) => {
231
+ const player = this.player;
232
+ const status = player ? this.buildPlaybackStatus(player) : {};
233
+ const detail = Object.assign({ fullScreen,
234
+ fullscreenUpdate, direction: 'vertical' }, status);
235
+ if (this.state.isFullScreen !== fullScreen) {
236
+ this.setState({
237
+ isFullScreen: fullScreen,
238
+ }, () => {
239
+ // @ts-ignore
240
+ this.props.onFullscreenChange && this.props.onFullscreenChange({ detail });
241
+ });
242
+ }
243
+ };
244
+ this.onPlaybackStatusUpdate = (event) => {
245
+ // @ts-ignore
246
+ this.props.onTimeUpdate && this.props.onTimeUpdate(event);
247
+ // @ts-ignore
248
+ const { didJustFinish, isPlaying } = event;
249
+ if (didJustFinish) {
250
+ this.onEnded(event);
251
+ }
252
+ if (isPlaying !== this.state.isPlaying) {
253
+ this.setState({
254
+ isPlaying,
255
+ isFirst: isPlaying ? false : this.state.isFirst
256
+ }, () => {
257
+ isPlaying && this.onPlay(event);
258
+ !isPlaying && !this.state.isFirst && this.onPause(event);
259
+ });
260
+ }
261
+ };
262
+ const stateObj = this.props;
263
+ this.state = Object.assign({
264
+ duration: null,
265
+ isPlaying: false,
266
+ isFirst: true,
267
+ enableDanmu: false,
268
+ isFullScreen: false,
269
+ isMute: false,
270
+ }, stateObj);
271
+ this.createPlayer();
272
+ }
273
+ componentDidMount() {
274
+ const player = this.player;
275
+ if (!player)
276
+ return;
277
+ this.subscriptions = [
278
+ player.addListener('sourceLoad', this.onSourceLoad),
279
+ player.addListener('timeUpdate', this.onTimeUpdate),
280
+ player.addListener('playingChange', this.onPlayingChange),
281
+ player.addListener('playToEnd', this.onPlayToEnd),
282
+ player.addListener('statusChange', this.onStatusChange),
283
+ ];
284
+ if (this.props.autoplay || this.state.shouldPlay) {
285
+ player.play();
286
+ }
287
+ }
288
+ componentDidUpdate(prevProps) {
289
+ const player = this.player;
290
+ if (!player)
291
+ return;
292
+ if (prevProps.src !== this.props.src && this.props.src) {
293
+ player.replace({ uri: this.props.src });
294
+ }
295
+ if (prevProps.loop !== this.props.loop) {
296
+ player.loop = !!this.props.loop;
297
+ }
298
+ if (prevProps.muted !== this.props.muted) {
299
+ player.muted = !!this.props.muted;
300
+ }
301
+ const shouldPlay = this.state.shouldPlay || this.props.autoplay;
302
+ if (shouldPlay && !player.playing) {
303
+ player.play();
304
+ }
305
+ else if (!shouldPlay && player.playing) {
306
+ player.pause();
307
+ }
308
+ }
309
+ componentWillUnmount() {
310
+ var _a;
311
+ const { id } = this.props;
312
+ if (id && global._taroVideoMap[id] === this.taroVideoRef) {
313
+ delete global._taroVideoMap[id];
314
+ }
315
+ this.subscriptions.forEach((subscription) => subscription.remove());
316
+ this.subscriptions = [];
317
+ (_a = this.player) === null || _a === void 0 ? void 0 : _a.release();
318
+ this.player = null;
319
+ this.taroVideoRef = null;
320
+ }
321
+ static getDerivedStateFromProps(nProps) {
322
+ return nProps;
323
+ }
324
+ render() {
325
+ const { style, objectFit = 'contain', poster, controls, showCenterPlayBtn, } = this.props;
326
+ const { isFullScreen } = this.state;
327
+ const duration = formatTime(this.props.duration || this.state.duration || null);
328
+ // 第一次不显示又无法自动播放
329
+ const showPlayBtn = this.state.isFirst ? true : showCenterPlayBtn;
330
+ const videoNode = (React.createElement(View, { style: [
331
+ Styles['taro-video-container'],
332
+ isFullScreen && Styles['taro-video-type-fullscreen'],
333
+ ] },
334
+ this.player ? (React.createElement(VideoView, { ref: this.videoViewRef, player: this.player, style: Object.assign({ width: '100%', height: '100%' }, style), contentFit: ObjectFit[objectFit] || 'contain', nativeControls: controls, fullscreenOptions: { enable: true }, onFullscreenEnter: () => this.onFullscreenChange(true, 1), onFullscreenExit: () => this.onFullscreenChange(false, 3) })) : null,
335
+ poster && controls && !this.state.isPlaying ? (React.createElement(Image, { src: poster, style: [
336
+ {
337
+ position: 'absolute',
338
+ top: 0,
339
+ right: 0,
340
+ bottom: 0,
341
+ left: 0,
342
+ },
343
+ ] })) : null,
344
+ showPlayBtn && !this.state.isPlaying && (React.createElement(View, { style: Styles['taro-video-cover'] },
345
+ React.createElement(Image, { src: require('../../assets/video/play.png'), style: Styles['taro-video-cover-play-button'], onClick: this.clickPlayBtn }),
346
+ React.createElement(Text, { style: Styles['taro-video-cover-duration'] }, duration))),
347
+ this.props.children));
348
+ return (React.createElement(View, { style: [Styles['taro-video'], this.props.style] }, videoNode));
349
+ }
350
+ }
351
+ /** @type {VideoProps} */
352
+ _Video.defaultProps = {
353
+ id: '',
354
+ src: '',
355
+ autoPauseIfNavigate: true,
356
+ autoPauseIfOpenNative: true,
357
+ autoplay: false,
358
+ controls: true,
359
+ danmuBtn: false,
360
+ danmuList: [],
361
+ enableDanmu: false,
362
+ enablePlayGesture: false,
363
+ enableProgressGesture: true,
364
+ initialTime: 0,
365
+ loop: false,
366
+ muted: false,
367
+ objectFit: 'contain',
368
+ playBtnPosition: 'bottom',
369
+ showCenterPlayBtn: true,
370
+ showFullscreenBtn: true,
371
+ showMuteBtn: false,
372
+ showPlayBtn: true,
373
+ showProgress: true,
374
+ vslideGesture: false,
375
+ vslideGestureInFullscreen: true,
376
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
377
+ onLoad: () => { },
378
+ };
379
+ export default _Video;
380
+ //# sourceMappingURL=index.js.map