@realsee/vreo 1.0.0-alpha.1 → 1.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/docs/assets/search.js +1 -1
  2. package/docs/classes/Player.AudioLike.html +6 -6
  3. package/docs/classes/Player.Controller.html +12 -12
  4. package/docs/classes/Player.Player-1.html +11 -11
  5. package/docs/classes/Player.VideoAgentMesh.html +12 -12
  6. package/docs/classes/Player.VideoAgentScene.html +1 -1
  7. package/docs/enums/Player.InfoPanelStyleEnum.html +1 -1
  8. package/docs/enums/Player.InfoPanelTypeEnum.html +1 -1
  9. package/docs/enums/Player.PanoEffectEnum.html +1 -1
  10. package/docs/enums/Player.PanoTagEnum.html +1 -1
  11. package/docs/enums/Player.PanoTagStyleEnum.html +2 -2
  12. package/docs/enums/Player.VreoKeyframeEnum.html +12 -12
  13. package/docs/enums/fivePlugins.CameraMovementEffect.html +1 -1
  14. package/docs/enums/fivePlugins.Rotation.html +1 -1
  15. package/docs/interfaces/Player.CustomVreoKeyframeProps.html +1 -1
  16. package/docs/interfaces/Player.PlayerConfigs.html +4 -3
  17. package/docs/interfaces/Player.Vertex.html +1 -1
  18. package/docs/interfaces/Player.VideoAgentMeshOptions.html +3 -3
  19. package/docs/interfaces/Player.VreoKeyframe.html +1 -1
  20. package/docs/interfaces/Player.VreoUnit.html +1 -1
  21. package/docs/interfaces/Player.VreoVideo.html +1 -1
  22. package/docs/interfaces/fivePlugins.CSS3DRenderPluginExportType.html +2 -2
  23. package/docs/interfaces/fivePlugins.CameraMovementOptsCallback.html +1 -1
  24. package/docs/interfaces/fivePlugins.CameraMovementPluginExportType.html +2 -2
  25. package/docs/interfaces/fivePlugins.ModelTVVideoPluginData.html +1 -1
  26. package/docs/interfaces/fivePlugins.ModelTVVideoPluginExportType.html +1 -1
  27. package/docs/interfaces/fivePlugins.ModelTVVideoPluginParameterType.html +1 -1
  28. package/docs/interfaces/fivePlugins.Vector3Position.html +1 -1
  29. package/docs/interfaces/react.VreoActionCallbacks.html +6 -6
  30. package/docs/interfaces/react.VreoProviderProps.html +1 -1
  31. package/docs/modules/Player.html +16 -16
  32. package/docs/modules/custom.html +1 -1
  33. package/docs/modules/fivePlugins.html +3 -3
  34. package/docs/modules/react.html +1 -1
  35. package/lib/PlayController/index.js +1 -2
  36. package/lib/Player/App.js +8 -6
  37. package/lib/Player/Controller.d.ts +27 -8
  38. package/lib/Player/Controller.js +170 -23
  39. package/lib/Player/custom/SpatialScenePanel/index.js +2 -1
  40. package/lib/Player/hooks.js +2 -2
  41. package/lib/Player/index.d.ts +2 -1
  42. package/lib/Player/index.js +42 -29
  43. package/lib/Player/modules/ResizeObserver/index.d.ts +2 -0
  44. package/lib/Player/modules/ResizeObserver/index.js +37 -0
  45. package/lib/Player/modules/VideoAgent/VideoAgentMesh.d.ts +1 -1
  46. package/lib/Player/modules/VideoAgent/VideoAgentMesh.js +44 -43
  47. package/lib/Player/modules/VideoAgent/VideoAgentScene.d.ts +3 -7
  48. package/lib/Player/modules/VideoAgent/VideoAgentScene.js +25 -34
  49. package/lib/Player/modules/VideoAgent/index.js +52 -11
  50. package/lib/Player/modules/Wave/index.d.ts +5 -0
  51. package/lib/Player/modules/Wave/index.js +51 -0
  52. package/lib/Player/modules/keyframes/InfoPanel/index.js +20 -8
  53. package/lib/Player/modules/keyframes/PanoTag/index.d.ts +1 -2
  54. package/lib/Player/modules/keyframes/PanoTag/index.js +78 -131
  55. package/lib/Player/modules/keyframes/PanoTextLabel/index.js +0 -1
  56. package/lib/Player/modules/keyframes/Prompter/index.js +5 -4
  57. package/lib/Player/typings.d.ts +9 -2
  58. package/lib/fivePlugins/CameraMovementPlugin/index.js +2 -5
  59. package/lib/react/index.d.ts +2 -2
  60. package/lib/shared-utils/AduioLike.js +8 -7
  61. package/lib/shared-utils/addResizeListener.d.ts +4 -0
  62. package/lib/shared-utils/addResizeListener.js +51 -0
  63. package/lib/shared-utils/getFileExpandedName.d.ts +1 -0
  64. package/lib/shared-utils/getFileExpandedName.js +13 -0
  65. package/lib/shared-utils/getMediaInfo.d.ts +9 -0
  66. package/lib/shared-utils/getMediaInfo.js +75 -0
  67. package/lib/shared-utils/setElementDataset.d.ts +1 -0
  68. package/lib/shared-utils/setElementDataset.js +24 -0
  69. package/lib/typings/VreoUnit.d.ts +4 -0
  70. package/package.json +1 -1
@@ -7,49 +7,39 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.PanoTag = PanoTag;
9
9
 
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
-
12
10
  var React = _interopRequireWildcard(require("react"));
13
11
 
14
- var _three = require("three");
15
-
16
12
  var _hooks = require("../../../hooks");
17
13
 
18
14
  var _VreoUnit = require("../../../../typings/VreoUnit");
19
15
 
16
+ var _dnalogel = require("@realsee/dnalogel");
17
+
20
18
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
19
 
22
20
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
21
 
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
25
-
26
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
27
-
28
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
29
-
30
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
31
-
32
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
33
-
34
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
35
-
36
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
37
-
38
22
  function PanoTag() {
39
- var _React$useState = React.useState(null),
40
- _React$useState2 = _slicedToArray(_React$useState, 2),
41
- state = _React$useState2[0],
42
- setState = _React$useState2[1];
43
-
44
- var _React$useState3 = React.useState(null),
45
- _React$useState4 = _slicedToArray(_React$useState3, 2),
46
- pos = _React$useState4[0],
47
- setPos = _React$useState4[1];
48
-
49
23
  var timeoutRef = React.useRef();
50
24
  var controller = (0, _hooks.useController)();
51
25
  var five = (0, _hooks.useFiveInstance)();
52
- var project2d = (0, _hooks.useFiveProject2d)();
26
+ var panoTagPlugin = React.useRef((0, _dnalogel.PanoTagPlugin)(five, {
27
+ config: {
28
+ globalConfig: {
29
+ visibleConfig: {
30
+ keep: 'visible'
31
+ },
32
+ unfoldedConfig: {
33
+ autoUnfold: {
34
+ strategy: 'MinimumDistance'
35
+ },
36
+ unfoldDistance: {
37
+ max: 100
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }));
53
43
  React.useEffect(function () {
54
44
  var _controller$configs;
55
45
 
@@ -58,33 +48,70 @@ function PanoTag() {
58
48
  }
59
49
 
60
50
  var callback = function callback(keyframe) {
51
+ if (!panoTagPlugin.current) return;
61
52
  var start = keyframe.start,
62
53
  end = keyframe.end,
63
54
  data = keyframe.data;
64
55
  var panoTagData = data;
65
- var vertex = panoTagData.vertex;
66
- var _panoTagData$vertex = panoTagData.vertex,
67
- x = _panoTagData$vertex.x,
68
- y = _panoTagData$vertex.y,
69
- z = _panoTagData$vertex.z;
70
- var res = project2d(new _three.Vector3(x, y, z));
71
- if (!res) return;
72
- var left = res.x,
73
- top = res.y;
74
- setState({
75
- vertex: vertex,
76
- text: panoTagData.text || _VreoUnit.PanoTagEnum.Text,
77
- type: panoTagData.type,
78
- imgUrl: panoTagData.imgUrl,
79
- style: panoTagData.style || _VreoUnit.PanoTagStyleEnum.Growth
80
- });
81
- setPos({
82
- left: left,
83
- top: top
56
+ var id = 'any-id';
57
+ var pointType = _dnalogel.PointType.PointTag;
58
+ var dimensionType = _dnalogel.DimensionType.Two;
59
+ var position = [panoTagData.vertex.x, panoTagData.vertex.y, panoTagData.vertex.z];
60
+
61
+ var tag = function () {
62
+ if (panoTagData.imgUrl) {
63
+ return {
64
+ id: id,
65
+ pointType: pointType,
66
+ position: position,
67
+ dimensionType: dimensionType,
68
+ contentType: _dnalogel.ContentType.ImageText,
69
+ data: {
70
+ text: panoTagData.text,
71
+ mediaData: [{
72
+ type: 'Image',
73
+ url: panoTagData.imgUrl
74
+ }]
75
+ }
76
+ };
77
+ } else {
78
+ return {
79
+ id: id,
80
+ pointType: pointType,
81
+ position: position,
82
+ dimensionType: dimensionType,
83
+ contentType: _dnalogel.ContentType.Text,
84
+ data: {
85
+ text: panoTagData.text
86
+ }
87
+ };
88
+ }
89
+ }(); // show
90
+
91
+
92
+ panoTagPlugin.current.load({
93
+ tagList: [tag]
84
94
  });
85
95
  timeoutRef.current = setTimeout(function () {
86
- setState(null);
87
- setPos(null);
96
+ var _tag$hooks;
97
+
98
+ var id = Date.now(); // clear
99
+
100
+ var tag = panoTagPlugin.current.getTagById(id);
101
+
102
+ if (tag.state) {
103
+ tag.state.unfolded = false;
104
+ panoTagPlugin.current.updateRenderAllTags();
105
+ }
106
+
107
+ (_tag$hooks = tag.hooks) === null || _tag$hooks === void 0 ? void 0 : _tag$hooks.on('folded', function () {
108
+ setTimeout(function () {
109
+ if (tag.state) {
110
+ tag.state.visible = false;
111
+ panoTagPlugin.current.destroyTagById(id);
112
+ }
113
+ }, 1500);
114
+ });
88
115
  }, end - start);
89
116
  };
90
117
 
@@ -97,85 +124,5 @@ function PanoTag() {
97
124
  }
98
125
  };
99
126
  }, [controller]);
100
- React.useEffect(function () {
101
- var callback = function callback() {
102
- if (!(state !== null && state !== void 0 && state.vertex)) return;
103
- var _state$vertex = state.vertex,
104
- x = _state$vertex.x,
105
- y = _state$vertex.y,
106
- z = _state$vertex.z;
107
- var res = project2d(new _three.Vector3(x, y, z));
108
- if (!res) return;
109
- var left = res.x,
110
- top = res.y;
111
- setPos({
112
- left: left,
113
- top: top
114
- });
115
- };
116
-
117
- five.on('currentStateChange', callback);
118
- return function () {
119
- five.off('currentStateChange', callback);
120
- };
121
- }, [state === null || state === void 0 ? void 0 : state.vertex]);
122
-
123
- var boxContent = function () {
124
- if (!state) return undefined;
125
-
126
- if (state.type === _VreoUnit.PanoTagEnum.Text) {
127
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, state.text));
128
- }
129
-
130
- if (state.type === _VreoUnit.PanoTagEnum.Image) {
131
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("img", {
132
- className: "PanoTag-img",
133
- src: state.imgUrl,
134
- alt: state.text || ''
135
- }), /*#__PURE__*/React.createElement("span", {
136
- className: "PanoTag-txt"
137
- }, state.text));
138
- }
139
-
140
- return undefined;
141
- }();
142
-
143
- if ((state === null || state === void 0 ? void 0 : state.style) === _VreoUnit.PanoTagStyleEnum.Expand) {
144
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
145
- className: (0, _classnames["default"])('PanoTag', {
146
- 'PanoTag--expand': true,
147
- 'PanoTag--notHidden': state
148
- }),
149
- style: {
150
- left: ((pos === null || pos === void 0 ? void 0 : pos.left) || 0) + 'px',
151
- top: ((pos === null || pos === void 0 ? void 0 : pos.top) || 0) + 'px'
152
- }
153
- }, /*#__PURE__*/React.createElement("div", {
154
- className: 'PanoTag-box PanoTag-box--' + ((state === null || state === void 0 ? void 0 : state.type) || '')
155
- }, boxContent), /*#__PURE__*/React.createElement("div", {
156
- className: "PanoTag-guideline"
157
- })));
158
- }
159
-
160
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
161
- className: (0, _classnames["default"])('PanoTag', {
162
- 'PanoTag--notHidden': state
163
- }),
164
- style: {
165
- left: ((pos === null || pos === void 0 ? void 0 : pos.left) || 0) + 'px',
166
- top: ((pos === null || pos === void 0 ? void 0 : pos.top) || 0) + 'px'
167
- }
168
- }, /*#__PURE__*/React.createElement("div", {
169
- className: "PanoTag-point"
170
- }), /*#__PURE__*/React.createElement("div", {
171
- className: "PanoTag-content"
172
- }, /*#__PURE__*/React.createElement("span", {
173
- className: "PanoTag-linewrap"
174
- }, /*#__PURE__*/React.createElement("span", {
175
- className: "PanoTag-slashline"
176
- }), /*#__PURE__*/React.createElement("span", {
177
- className: "PanoTag-straightline"
178
- })), /*#__PURE__*/React.createElement("div", {
179
- className: 'PanoTag-box PanoTag-box--' + ((state === null || state === void 0 ? void 0 : state.type) || '')
180
- }, boxContent))));
127
+ return null;
181
128
  }
@@ -59,7 +59,6 @@ var calcPoints = function calcPoints(centerPoint, normal, wrapperLength, wrapper
59
59
  // size: 0.4,
60
60
  // })
61
61
  // _point = new THREE.Points(pointgeometry, pointmaterial)
62
- // console.log(cameraPosition)
63
62
 
64
63
 
65
64
  var material = new THREE.MeshBasicMaterial({
@@ -21,6 +21,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
21
21
 
22
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
23
 
24
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
+
24
26
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
27
 
26
28
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -80,10 +82,9 @@ function Prompter() {
80
82
  };
81
83
  }, [controller]);
82
84
  return /*#__PURE__*/React.createElement("div", {
83
- className: (0, _classnames["default"])('vreo-prompter', {
84
- 'vreo-prompter--hidden': hidden,
85
- 'vreo-prompter--audio': controller.isAudio
86
- })
85
+ className: (0, _classnames["default"])('vreo-prompter', _defineProperty({
86
+ 'vreo-prompter--hidden': hidden
87
+ }, "vreo-prompter-left--".concat(controller.agentType), true))
87
88
  }, /*#__PURE__*/React.createElement("div", {
88
89
  className: "vreo-prompter-text"
89
90
  }, /*#__PURE__*/React.createElement("div", {
@@ -6,8 +6,8 @@ export interface PlayerConfigs {
6
6
  /**
7
7
  * @deprecated rename to container
8
8
  */
9
- containter?: ReactDOM.Container;
10
- container?: ReactDOM.Container;
9
+ containter?: Element;
10
+ container?: Element;
11
11
  keyframeMap: VreoKeyframeConfigMap;
12
12
  /**
13
13
  * 微信端自动播放功能实现需要提前初始化 Video 实例。
@@ -28,6 +28,13 @@ export interface PlayerConfigs {
28
28
  size: number;
29
29
  };
30
30
  autoPreload?: boolean;
31
+ appSize?: AppSize;
32
+ appearance?: Appearance;
33
+ }
34
+ export declare type AppSize = 'S' | 'M' | 'L' | 'XL';
35
+ export declare type WaveAppearance = 'single' | 'double' | 'solid' | 'swap' | 'expand';
36
+ export interface Appearance {
37
+ waveStyle?: 'wave' | 'solid';
31
38
  }
32
39
  export declare type VreoSubscribe = Pick<Subscribe<VreoKeyframeEvent>, 'on' | 'once' | 'off'>;
33
40
  export interface CustomVreoKeyframeProps {
@@ -259,8 +259,7 @@ var CameraMovementPlugin = function CameraMovementPlugin(five) {
259
259
  opts.asyncEndCallback();
260
260
  }
261
261
 
262
- _getAnimeParams = getAnimeParams(args), from = _getAnimeParams.from, to = _getAnimeParams.to; // console.log(from, to)
263
-
262
+ _getAnimeParams = getAnimeParams(args), from = _getAnimeParams.from, to = _getAnimeParams.to;
264
263
  _context2.next = 15;
265
264
  return new Promise(function (resolve, reject) {
266
265
  var onUpdate = function onUpdate(_ref3) {
@@ -268,9 +267,7 @@ var CameraMovementPlugin = function CameraMovementPlugin(five) {
268
267
  var state = {};
269
268
  state.longitude = progressNumber(from.longitude, to.longitude, progress) % PI_2;
270
269
  state.latitude = progressNumber(from.latitude, to.latitude, progress);
271
- state.fov = progressNumber(from.fov, to.fov, progress); // console.log(state.longitude)
272
-
273
- // console.log(state.longitude)
270
+ state.fov = progressNumber(from.fov, to.fov, progress);
274
271
  five.setState(state, true);
275
272
  };
276
273
 
@@ -39,10 +39,10 @@ export interface VreoActionCallbacks {
39
39
  dispose: () => void;
40
40
  }
41
41
  export declare function useVreoAction(): {
42
- load: (vreoUnit: VreoUnit, currentTime?: number | undefined) => Promise<boolean>;
42
+ load: (vreoUnit: VreoUnit, currentTime?: number) => Promise<boolean>;
43
43
  pause: () => void;
44
44
  show: () => void;
45
- play: (currentTime?: number | undefined) => boolean;
45
+ play: (currentTime?: number) => boolean;
46
46
  hide: () => void;
47
47
  dispose: () => void;
48
48
  };
@@ -51,7 +51,7 @@ var AudioLike = /*#__PURE__*/function (_Subscribe) {
51
51
 
52
52
  _this = _super.call(this);
53
53
 
54
- _defineProperty(_assertThisInitialized(_this), "$timestamp", 0);
54
+ _defineProperty(_assertThisInitialized(_this), "$timestamp", null);
55
55
 
56
56
  _defineProperty(_assertThisInitialized(_this), "$currentTime", 0);
57
57
 
@@ -77,14 +77,14 @@ var AudioLike = /*#__PURE__*/function (_Subscribe) {
77
77
  value: function play() {
78
78
  var _this2 = this;
79
79
 
80
- if (this.$timestamp === 0) {
81
- this.$timestamp = performance.now();
82
- }
83
-
84
80
  if (this.$currentTime === this.$duration) {
85
81
  this.$currentTime = 0;
86
82
  }
87
83
 
84
+ if (this.$timestamp === null) {
85
+ this.$timestamp = performance.now() - this.$currentTime;
86
+ }
87
+
88
88
  this.stopInterval = (0, _animationFrame.requestAnimationFrameInterval)(function () {
89
89
  return _this2.requestAnimationFrameLoop();
90
90
  });
@@ -99,11 +99,12 @@ var AudioLike = /*#__PURE__*/function (_Subscribe) {
99
99
  this.stopInterval = undefined;
100
100
  }
101
101
 
102
- this.$timestamp = 0;
102
+ this.$timestamp = null;
103
103
  }
104
104
  }, {
105
105
  key: "requestAnimationFrameLoop",
106
106
  value: function requestAnimationFrameLoop() {
107
+ if (this.$timestamp === null) return;
107
108
  var now = performance.now();
108
109
  this.$currentTime = now - this.$timestamp;
109
110
  this.emit('timeupdate');
@@ -130,7 +131,7 @@ var AudioLike = /*#__PURE__*/function (_Subscribe) {
130
131
  set: function set(duration) {
131
132
  this.pause();
132
133
  this.$duration = duration;
133
- this.$timestamp = 0;
134
+ this.$timestamp = null;
134
135
  this.$currentTime = 0;
135
136
  }
136
137
  }, {
@@ -0,0 +1,4 @@
1
+ declare type ResizeHandler = (width: number, height: number) => void;
2
+ export declare function addResizeListener(element: Element | undefined | null, resizeHandler: ResizeHandler, immediate?: boolean): () => void;
3
+ export declare function hasResizeListener(element?: Element | null): number | boolean;
4
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.addResizeListener = addResizeListener;
7
+ exports.hasResizeListener = hasResizeListener;
8
+ var resizeObserverCache = new Map();
9
+
10
+ function addResizeListener(element, resizeHandler) {
11
+ var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
12
+ if (!element) return function () {};
13
+ if (immediate) resizeHandler(element.clientWidth, element.clientHeight);
14
+
15
+ if (typeof ResizeObserver !== 'undefined' && ResizeObserver) {
16
+ var resizeObserver = new ResizeObserver(function () {
17
+ return resizeHandler(element.clientWidth, element.clientHeight);
18
+ });
19
+ resizeObserver.observe(element);
20
+ resizeObserverCache.set(element, resizeObserverCache.get(element) || 0 + 1);
21
+ return function () {
22
+ if (element) resizeObserver.unobserve(element);
23
+
24
+ if (resizeObserverCache.get(element) === 1) {
25
+ resizeObserverCache["delete"](element);
26
+ }
27
+ };
28
+ } else {
29
+ var iframe = document.createElement('iframe');
30
+ iframe.style.cssText = 'position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;opacity:0;visibility:hidden;margin:0;border:0;padding:0;z-index:-1;';
31
+ iframe.classList.add('resize-sensor-iframe');
32
+ element.appendChild(iframe);
33
+ if (!iframe.contentWindow) return function () {};
34
+ iframe.contentWindow.addEventListener('resize', function () {
35
+ resizeHandler(iframe.clientWidth, iframe.clientHeight);
36
+ });
37
+ resizeObserverCache.set(element, resizeObserverCache.get(element) || 0 + 1);
38
+ return function () {
39
+ element.removeChild(iframe);
40
+
41
+ if (resizeObserverCache.get(element) === 1) {
42
+ resizeObserverCache["delete"](element);
43
+ }
44
+ };
45
+ }
46
+ }
47
+
48
+ function hasResizeListener(element) {
49
+ if (!element) return false;
50
+ return resizeObserverCache.get(element) || 0 > 0;
51
+ }
@@ -0,0 +1 @@
1
+ export default function getFileExpandedName(filePath?: string | null): string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = getFileExpandedName;
7
+
8
+ function getFileExpandedName(filePath) {
9
+ if (!filePath) return '';
10
+ var index = filePath.lastIndexOf('.');
11
+ var ext = filePath.substring(index + 1);
12
+ return ext.toLowerCase();
13
+ }
@@ -0,0 +1,9 @@
1
+ export default function getMediaInfo(fileUrl: string): Promise<{
2
+ duration?: number | undefined;
3
+ type?: 'video' | 'audio' | 'image' | 'unknown' | undefined;
4
+ error?: string | undefined;
5
+ }>;
6
+ export declare function getMediaType(url?: string): "audio" | "video" | "image" | "unknown";
7
+ export declare function getMediaTypeByExpandedName(fileExpandedName?: string | null): "audio" | "video" | "image" | "unknown";
8
+ export declare function getMediaTypeByUrl(fileUrl?: string | null): "audio" | "video" | "image" | "unknown" | undefined;
9
+ export declare function getFileName(fileUrl?: string): string;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = getMediaInfo;
7
+ exports.getFileName = getFileName;
8
+ exports.getMediaType = getMediaType;
9
+ exports.getMediaTypeByExpandedName = getMediaTypeByExpandedName;
10
+ exports.getMediaTypeByUrl = getMediaTypeByUrl;
11
+
12
+ var _getFileExpandedName = _interopRequireDefault(require("./getFileExpandedName"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
+
16
+ function getMediaInfo(fileUrl) {
17
+ var type = getMediaType(fileUrl);
18
+ if (!type) return Promise.resolve({
19
+ error: '未知的文件类型: ' + fileUrl
20
+ });
21
+
22
+ var mediaElement = function () {
23
+ if (type === 'video') return document.createElement('video');
24
+ if (type === 'audio') return document.createElement('audio');
25
+ }();
26
+
27
+ if (!mediaElement) return Promise.resolve({
28
+ error: 'Unknown media element'
29
+ });
30
+ mediaElement.src = fileUrl;
31
+ return new Promise(function (resolve) {
32
+ mediaElement.onerror = function () {
33
+ return resolve({
34
+ error: 'onerror'
35
+ });
36
+ };
37
+
38
+ mediaElement.onloadedmetadata = function () {
39
+ resolve({
40
+ duration: mediaElement.duration * 1000,
41
+ type: type
42
+ }); // s => ms
43
+ };
44
+ });
45
+ }
46
+
47
+ function getMediaType(url) {
48
+ var fileExpandedName = (0, _getFileExpandedName["default"])(url);
49
+ var type = getMediaTypeByExpandedName(fileExpandedName);
50
+ return type;
51
+ }
52
+
53
+ function getMediaTypeByExpandedName(fileExpandedName) {
54
+ if (!fileExpandedName) return 'unknown';
55
+ if (/jpg|jpeg|png$/.test(fileExpandedName)) return 'image';
56
+ if (/mp3|wav$/.test(fileExpandedName)) return 'audio';
57
+ if (/avi|wmv|mpeg|mp4|m4v|mov|asf|flv|f4v|rmvb|rm|3gp|vob$/.test(fileExpandedName)) return 'video';
58
+ return 'unknown';
59
+ }
60
+
61
+ function getMediaTypeByUrl(fileUrl) {
62
+ if (!fileUrl) return;
63
+ var fileExpandedName = (0, _getFileExpandedName["default"])(fileUrl);
64
+ return getMediaTypeByExpandedName(fileExpandedName);
65
+ }
66
+
67
+ function getFileName(fileUrl) {
68
+ if (!fileUrl) return '';
69
+ var index1 = fileUrl.lastIndexOf('/');
70
+ var index2 = fileUrl.lastIndexOf('\\');
71
+ var index3 = fileUrl.lastIndexOf('\\\\');
72
+ var index = Math.max(index1, index2, index3);
73
+ var ext = fileUrl.substring(index + 1);
74
+ return ext;
75
+ }
@@ -0,0 +1 @@
1
+ export default function setElementDataset(element: any, dataset: Record<string, string | number>): void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = setElementDataset;
7
+
8
+ function setElementDataset(element, dataset) {
9
+ if (element) {
10
+ Object.keys(dataset).forEach(function (key) {
11
+ var value = dataset[key].toString();
12
+
13
+ if (element instanceof Element) {
14
+ element.setAttribute("data-".concat(key), value);
15
+ } else if (element instanceof Document) {
16
+ element.documentElement.setAttribute("data-".concat(key), value);
17
+ } else if (element instanceof HTMLElement) {
18
+ element.dataset[key] = value;
19
+ } else {
20
+ element.setAttribute("data-".concat(key), value);
21
+ }
22
+ });
23
+ }
24
+ }
@@ -76,6 +76,10 @@ export interface VreoVideo {
76
76
  start: number;
77
77
  end: number;
78
78
  url: string;
79
+ avatar?: {
80
+ url: string;
81
+ force?: true;
82
+ };
79
83
  }
80
84
  /**
81
85
  * 剧本结构
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@realsee/vreo",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "Vreo (VR Video 缩写) 是基于如视三维渲染引擎 Five 和 用户界面构建库 React 实现的如视 3D 空间剧本播放器。",
5
5
  "keywords": [
6
6
  "realsee",