@realsee/vreo 0.2.0-alpha.5 → 0.2.0-alpha.6

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 (51) hide show
  1. package/README.md +20 -3
  2. package/docs/assets/custom.css +2 -2
  3. package/docs/assets/search.js +1 -1
  4. package/docs/classes/Player.Controller.html +3 -3
  5. package/docs/classes/Player.Player-1.html +3 -3
  6. package/docs/classes/Player.VideoAgentMesh.html +11 -11
  7. package/docs/classes/Player.VideoAgentScene.html +1 -1
  8. package/docs/enums/Player.InfoPanelStyleEnum.html +1 -0
  9. package/docs/enums/Player.InfoPanelTypeEnum.html +1 -1
  10. package/docs/enums/Player.PanoEffectEnum.html +1 -1
  11. package/docs/enums/Player.PanoTagEnum.html +1 -1
  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/index.html +6 -2
  16. package/docs/interfaces/Player.CustomVreoKeyframeProps.html +1 -1
  17. package/docs/interfaces/Player.PlayerConfigs.html +2 -2
  18. package/docs/interfaces/Player.Vertex.html +1 -1
  19. package/docs/interfaces/Player.VideoAgentMeshOptions.html +1 -1
  20. package/docs/interfaces/Player.VreoKeyframe.html +1 -1
  21. package/docs/interfaces/Player.VreoUnit.html +1 -1
  22. package/docs/interfaces/Player.VreoVideo.html +1 -1
  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/react.VreoActionCallbacks.html +6 -6
  29. package/docs/interfaces/react.VreoProviderProps.html +1 -1
  30. package/docs/modules/Player.html +13 -13
  31. package/docs/modules/custom.html +1 -1
  32. package/docs/modules/fivePlugins.html +2 -2
  33. package/docs/modules/react.html +1 -1
  34. package/lib/Player/Controller.d.ts +2 -0
  35. package/lib/Player/Controller.js +14 -0
  36. package/lib/Player/custom/SpatialScenePanel/index.d.ts +2 -2
  37. package/lib/Player/custom/SpatialScenePanel/index.js +14 -5
  38. package/lib/Player/index.js +3 -1
  39. package/lib/Player/modules/PopUp/index.d.ts +2 -0
  40. package/lib/Player/modules/PopUp/index.js +43 -0
  41. package/lib/Player/modules/keyframes/InfoPanel/index.js +73 -35
  42. package/lib/typings/VreoUnit.d.ts +5 -0
  43. package/lib/typings/VreoUnit.js +14 -6
  44. package/package.json +1 -1
  45. package/resources/Player/Controller.ts +12 -0
  46. package/resources/Player/custom/SpatialScenePanel/index.tsx +64 -31
  47. package/resources/Player/index.tsx +2 -0
  48. package/resources/Player/modules/PopUp/index.tsx +26 -0
  49. package/resources/Player/modules/keyframes/InfoPanel/index.tsx +79 -34
  50. package/resources/typings/VreoUnit.ts +6 -0
  51. package/stylesheets/default.css +66 -0
@@ -210,11 +210,16 @@ export declare enum InfoPanelTypeEnum {
210
210
  Image = "Image",
211
211
  Video = "Video"
212
212
  }
213
+ export declare enum InfoPanelStyleEnum {
214
+ Drawer = "Drawer",
215
+ PopUp = "PopUp"
216
+ }
213
217
  /**
214
218
  * 信息面板
215
219
  */
216
220
  export declare type InfoPanelData = {
217
221
  type: InfoPanelTypeEnum;
222
+ style?: InfoPanelStyleEnum;
218
223
  url: string;
219
224
  title?: string;
220
225
  subTitle?: string;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.VreoKeyframeEnum = exports.PanoTagEnum = exports.PanoEffectEnum = exports.InfoPanelTypeEnum = void 0;
6
+ exports.VreoKeyframeEnum = exports.PanoTagEnum = exports.PanoEffectEnum = exports.InfoPanelTypeEnum = exports.InfoPanelStyleEnum = void 0;
7
7
  var VreoKeyframeEnum;
8
8
  /**
9
9
  * 支持自定义剧本关键帧配置项
@@ -55,13 +55,21 @@ exports.PanoEffectEnum = PanoEffectEnum;
55
55
  * 信息面板类型枚举
56
56
  */
57
57
  var InfoPanelTypeEnum;
58
- /**
59
- * 信息面板
60
- */
61
-
62
58
  exports.InfoPanelTypeEnum = InfoPanelTypeEnum;
63
59
 
64
60
  (function (InfoPanelTypeEnum) {
65
61
  InfoPanelTypeEnum["Image"] = "Image";
66
62
  InfoPanelTypeEnum["Video"] = "Video";
67
- })(InfoPanelTypeEnum || (exports.InfoPanelTypeEnum = InfoPanelTypeEnum = {}));
63
+ })(InfoPanelTypeEnum || (exports.InfoPanelTypeEnum = InfoPanelTypeEnum = {}));
64
+
65
+ var InfoPanelStyleEnum;
66
+ /**
67
+ * 信息面板
68
+ */
69
+
70
+ exports.InfoPanelStyleEnum = InfoPanelStyleEnum;
71
+
72
+ (function (InfoPanelStyleEnum) {
73
+ InfoPanelStyleEnum["Drawer"] = "Drawer";
74
+ InfoPanelStyleEnum["PopUp"] = "PopUp";
75
+ })(InfoPanelStyleEnum || (exports.InfoPanelStyleEnum = InfoPanelStyleEnum = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@realsee/vreo",
3
- "version": "0.2.0-alpha.5",
3
+ "version": "0.2.0-alpha.6",
4
4
  "description": "Vreo (VR Video 缩写) 是基于如视三维渲染引擎 Five 和 用户界面构建库 React 实现的如视 3D 空间剧本播放器。",
5
5
  "keywords": [
6
6
  "realsee",
@@ -24,6 +24,16 @@ export class Controller extends Subscribe<VreoKeyframeEvent> {
24
24
  return !this.videoAgentScene?.videoAgentMesh.videoUrl?.endsWith('.mp4')
25
25
  }
26
26
 
27
+ popUp: string | JSX.Element | null = null
28
+
29
+ openPopUp(popUp: string | JSX.Element | false) {
30
+ if (!popUp) {
31
+ this.popUp = null
32
+ return
33
+ }
34
+ this.popUp = popUp
35
+ }
36
+
27
37
  drawerConfig: {
28
38
  content: string | JSX.Element
29
39
  height?: number | string
@@ -57,6 +67,8 @@ export class Controller extends Subscribe<VreoKeyframeEvent> {
57
67
  setVisible: action,
58
68
  playing: observable,
59
69
  setPlaying: action,
70
+ popUp: observable.ref,
71
+ openPopUp: action,
60
72
  drawerConfig: observable.ref,
61
73
  openDrawer: action,
62
74
  })
@@ -8,6 +8,29 @@ import { CSS3DRenderPlugin, CSS3DRenderPluginExportType } from '@realsee/dnaloge
8
8
  import { VreoKeyframe, VreoKeyframeEnum } from '../../../typings/VreoUnit'
9
9
  import { CustomVreoKeyframeProps } from '../../typings'
10
10
 
11
+ // const mockData: SpatialScenePanelData = {
12
+ // customType: 'SpatialScenePanel',
13
+ // "stateList": [
14
+ // {
15
+ // "icon": "http://vrlab-public.ljcdn.com/release/seesay/tools/___fc42f951076607a22fd5c54f005ba553.png",
16
+ // "text": "窗帘关闭"
17
+ // },
18
+ // {
19
+ // "icon": "http://vrlab-public.ljcdn.com/release/seesay/tools/___b331e7ad732debc07250a169a3393b13.png",
20
+ // "text": "摄像头休眠"
21
+ // },
22
+ // {
23
+ // "icon": "http://vrlab-public.ljcdn.com/release/seesay/tools/___2e425a81ac0ad88232d50d4e52a9abfa.png",
24
+ // "text": "氛围音乐"
25
+ // },
26
+ // {
27
+ // "icon": "http://vrlab-public.ljcdn.com/release/seesay/tools/___bff48bb81cde37aa6a319d6f5d56e3a4.png",
28
+ // "text": "空调打开"
29
+ // }
30
+ // ],
31
+ // "temperature": "27",
32
+ // "title": "沉浸式回家"
33
+ // }
11
34
  export interface SpatialScenePanelData {
12
35
  customType: 'SpatialScenePanel'
13
36
  title: string
@@ -16,8 +39,8 @@ export interface SpatialScenePanelData {
16
39
  text: string
17
40
  icon: string
18
41
  }[]
19
- position: { x: number; y: number; z: number }
20
- quaternion: [number, number, number, number]
42
+ position?: { x: number; y: number; z: number }
43
+ quaternion?: [number, number, number, number]
21
44
  }
22
45
 
23
46
  interface SearchParams {
@@ -25,9 +48,17 @@ interface SearchParams {
25
48
  // position: Vector3
26
49
  // rotation?: Vector3
27
50
  // quaternion: [number, number, number, number]
28
- dom: HTMLDivElement
51
+ dom: HTMLDivElement
29
52
  }
30
53
 
54
+ // const getSphere = (position: Vector3, color = 0xffff00) => {
55
+ // const geometry = new SphereGeometry(0.05, 32, 16)
56
+ // const material = new MeshBasicMaterial({ color })
57
+ // const sphere = new Mesh(geometry, material)
58
+ // sphere.position.copy(position)
59
+ // return sphere
60
+ // }
61
+
31
62
  const searchV1 = ({ five, dom }: SearchParams) => {
32
63
  const cameraDirection = new Vector3()
33
64
  five.camera.getWorldDirection(cameraDirection)
@@ -48,16 +79,17 @@ const searchV1 = ({ five, dom }: SearchParams) => {
48
79
  const rightBottom = new Vector3(right, bottom)
49
80
 
50
81
  const points = [leftBottom, rightBottom, rightTop, leftTop].map((point) => {
51
- point.setX((point.x / window.innerWidth) * 2 - 2)
82
+ point.setX((point.x / window.innerWidth) * 2 - 1.25)
52
83
  point.setY(-(point.y / window.innerHeight) * 2 + 1)
53
84
  point.setZ(0.5)
54
85
  return point.unproject(five.camera).addScaledVector(cameraDirection, 0.2)
55
86
  })
56
87
 
88
+ // __debug__
57
89
  // const colors = [0xdc143c, 0xffff00, 0x0000ff, 0x008000]
58
90
  // points.forEach((p, index) => five.scene.add(getSphere(p, colors[index])))
59
91
 
60
- const ratio = leftBottom.distanceTo(rightBottom) / 120
92
+ const ratio = leftBottom.distanceTo(rightBottom) / 150
61
93
  return { points, ratio }
62
94
  }
63
95
 
@@ -71,7 +103,6 @@ export function SpatialScenePanel(props: CustomVreoKeyframeProps) {
71
103
  const rendererRef = React.useRef<CSS3DRenderPluginExportType>(CSS3DRenderPlugin(props.five))
72
104
 
73
105
  React.useEffect(() => {
74
-
75
106
  if (!ref.current) {
76
107
  return
77
108
  }
@@ -83,9 +114,10 @@ export function SpatialScenePanel(props: CustomVreoKeyframeProps) {
83
114
 
84
115
  const data = keyframe.data as SpatialScenePanelData
85
116
 
117
+ // const data = mockData
86
118
  const { points, ratio } = searchV1({
87
119
  five: props.five,
88
- dom: ref.current!
120
+ dom: ref.current!,
89
121
  })
90
122
 
91
123
  const { container, dispose, css3DObject, render } =
@@ -93,32 +125,33 @@ export function SpatialScenePanel(props: CustomVreoKeyframeProps) {
93
125
 
94
126
  if (!container) return
95
127
 
96
-
97
128
  ReactDOM.render(<Panel ref={(ref) => (panelRef.current = ref)} data={data} />, container)
98
- const startRotateY = -(Math.PI * 2) / 9
99
- let lastRotateY = 0
100
- tweenProgress(1000)
101
- .onUpdate(({ progress }) => {
102
- const needRotateY = (Math.PI / 90) * 11 * progress
103
- const rotateY = needRotateY - lastRotateY
104
- css3DObject?.rotateY(rotateY)
105
- lastRotateY = needRotateY
106
- })
107
- .onStart(() => {
108
- css3DObject?.rotateY(startRotateY)
109
- render!()
110
- })
111
- .onDispose(() => {
112
- panelRef.current?.classList.add('show')
113
- })
114
- .play()
115
- const { start, end } = keyframe
116
- setTimeout(() => {
117
- panelRef.current?.classList.add('hide')
118
- setTimeout(() => dispose?.(), 1500)
119
- }, end - start)
129
+ const startRotateY = -(Math.PI * 2) / 9
130
+ let lastRotateY = 0
131
+ tweenProgress(1000)
132
+ .onUpdate(({ progress }) => {
133
+ const needRotateY = (Math.PI / 90) * 11 * progress
134
+ const rotateY = needRotateY - lastRotateY
135
+ css3DObject?.rotateY(rotateY)
136
+ lastRotateY = needRotateY
137
+ })
138
+ .onStart(() => {
139
+ css3DObject?.rotateY(startRotateY)
140
+ render!()
141
+ })
142
+ .onDispose(() => {
143
+ panelRef.current?.classList.add('show')
144
+ })
145
+ .play()
146
+ const { start, end } = keyframe
147
+
148
+ setTimeout(() => {
149
+ panelRef.current?.classList.add('hide')
150
+ setTimeout(() => dispose?.(), 1500)
151
+ }, end - start)
120
152
  }
121
153
 
154
+ // Object.assign(window, { $callback: callback })
122
155
  props.subscribe.on(VreoKeyframeEnum.Custom, callback)
123
156
 
124
157
  return () => {
@@ -151,5 +184,5 @@ const Panel = React.forwardRef(
151
184
 
152
185
  <div className="SpatialScenePanel-disappear-area"></div>
153
186
  </div>
154
- ),
187
+ )
155
188
  )
@@ -8,6 +8,7 @@ import { VreoKeyframeEvent, VreoUnit } from '../typings/VreoUnit'
8
8
  import { reaction } from 'mobx'
9
9
  import { Drawer } from './modules/Drawer'
10
10
  import { PlayerConfigs } from './typings'
11
+ import { PopUp } from './modules/PopUp'
11
12
 
12
13
  export class Player extends Subscribe<VreoKeyframeEvent> {
13
14
  $five: Five
@@ -42,6 +43,7 @@ export class Player extends Subscribe<VreoKeyframeEvent> {
42
43
  <ControllerContext.Provider value={this.controller}>
43
44
  <App></App>
44
45
  <Drawer />
46
+ <PopUp />
45
47
  {this.configs.customKeyframes &&
46
48
  this.configs.customKeyframes.map((CustomCmpt, key) => (
47
49
  <CustomCmpt
@@ -0,0 +1,26 @@
1
+ import * as React from 'react'
2
+ import classNames from 'classnames'
3
+ import { observer } from 'mobx-react'
4
+ import { Controller } from '../../Controller'
5
+ import { useController } from '../../hooks'
6
+
7
+ const PopUpView = observer(({ controller }: { controller: Controller }) => {
8
+
9
+ return (
10
+ <div
11
+ className={classNames('vreo-PopUp', {
12
+ 'vreo-PopUp-visible': controller.popUp,
13
+ })}
14
+ onClick={() => controller.openPopUp(false)}
15
+ >
16
+ <div className="vreo-PopUp-inner">
17
+ {controller.popUp || ''}
18
+ </div>
19
+ </div>
20
+ )
21
+ })
22
+
23
+ export function PopUp() {
24
+ const controller = useController()
25
+ return <PopUpView controller={controller} />
26
+ }
@@ -1,6 +1,12 @@
1
1
  import * as React from 'react'
2
2
  import { ReactNode } from 'react'
3
- import { InfoPanelData, InfoPanelTypeEnum, VreoKeyframe, VreoKeyframeEnum } from '../../../../typings/VreoUnit'
3
+ import {
4
+ InfoPanelData,
5
+ InfoPanelStyleEnum,
6
+ InfoPanelTypeEnum,
7
+ VreoKeyframe,
8
+ VreoKeyframeEnum,
9
+ } from '../../../../typings/VreoUnit'
4
10
  import { useController } from '../../../hooks'
5
11
 
6
12
  function InfoPanelImg({ url, children }: { url: string; children?: ReactNode }) {
@@ -16,7 +22,9 @@ function InfoPanelVideo({ url, children }: { url: string; children?: ReactNode }
16
22
  return (
17
23
  <div className="vreo-infoPanel vreo-infoPanel--video">
18
24
  {children}
19
- <div className="vreo-infoPanelWrapper"><video playsInline autoPlay className="vreo-infoPanelVideo" src={url} /></div>
25
+ <div className="vreo-infoPanelWrapper">
26
+ <video playsInline autoPlay className="vreo-infoPanelVideo" src={url} />
27
+ </div>
20
28
  </div>
21
29
  )
22
30
  }
@@ -47,49 +55,86 @@ export function InfoPanel() {
47
55
  if (controller.configs?.keyframeMap.InfoPanel === false) {
48
56
  return
49
57
  }
58
+
50
59
  const callback = (keyframe: VreoKeyframe) => {
51
60
  const { start, end, data } = keyframe
52
61
 
53
62
  const infoPanelData = data as InfoPanelData
54
63
 
55
- const { title, subTitle } = infoPanelData
56
- if (infoPanelData.type === InfoPanelTypeEnum.Image) {
57
- controller.openDrawer({
58
- content: (
59
- <InfoPanelImg url={infoPanelData.url}>
60
- <Title title={title} subTitle={subTitle} />
61
- </InfoPanelImg>
62
- ),
63
- height: '60vh',
64
- })
65
- } else if (infoPanelData.type === InfoPanelTypeEnum.Video) {
66
- controller.openDrawer({
67
- content: (
68
- <InfoPanelVideo url={infoPanelData.url}>
69
- <Title title={title} subTitle={subTitle} />
70
- </InfoPanelVideo>
71
- ),
72
- height: '60vh',
73
- })
74
- }
75
- timeoutRef.current = setTimeout(() => controller.openDrawer(false), end - start)
64
+ const { title, subTitle, style } = infoPanelData
65
+ do {
66
+ if (style === InfoPanelStyleEnum.PopUp) {
67
+ if (infoPanelData.type === InfoPanelTypeEnum.Image) {
68
+ controller.openPopUp(
69
+ <InfoPanelImg url={infoPanelData.url}>
70
+ <Title title={title} subTitle={subTitle} />
71
+ </InfoPanelImg>
72
+ )
73
+ } else if (infoPanelData.type === InfoPanelTypeEnum.Video) {
74
+ controller.openPopUp(
75
+ <InfoPanelVideo url={infoPanelData.url}>
76
+ <Title title={title} subTitle={subTitle} />
77
+ </InfoPanelVideo>
78
+ )
79
+ }
80
+ break
81
+ }
82
+ if (infoPanelData.type === InfoPanelTypeEnum.Image) {
83
+ controller.openDrawer({
84
+ content: (
85
+ <InfoPanelImg url={infoPanelData.url}>
86
+ <Title title={title} subTitle={subTitle} />
87
+ </InfoPanelImg>
88
+ ),
89
+ height: '60vh',
90
+ })
91
+ } else if (infoPanelData.type === InfoPanelTypeEnum.Video) {
92
+ controller.openDrawer({
93
+ content: (
94
+ <InfoPanelVideo url={infoPanelData.url}>
95
+ <Title title={title} subTitle={subTitle} />
96
+ </InfoPanelVideo>
97
+ ),
98
+ height: '60vh',
99
+ })
100
+ }
101
+ } while (false)
102
+
103
+ timeoutRef.current = setTimeout(() => {
104
+ controller.openDrawer(false)
105
+ controller.openPopUp(false)
106
+ }, end - start)
76
107
  }
77
108
  controller.on(VreoKeyframeEnum.InfoPanel, callback)
78
109
 
79
110
  // Object.assign(window, {
80
111
  // $setInfoPanel: () => {
81
- // controller.openDrawer({
82
- // content: (
83
- // // <InfoPanelImg url='//vrlab-public.ljcdn.com/release/seesay/tools/cat_music___f68fb9bbe1f7cd6d00a16456dd0b09ad.gif'>
84
- // // <InfoPanelImg url="http://vrlab-public.ljcdn.com/common/images/web/d94e1bd7-0311-4b20-9c41-a1294fe43554.png">
85
- // // <Title title="场景联动抓拍图片" subTitle={'2022.02.17 14:00'} />
86
- // // </InfoPanelImg>
87
- // <InfoPanelVideo url="//vrlab-public.ljcdn.com/release/seesay/tools/2022011713142___b320f74a5e1b5ad4bb46b4dc69d73ecc.mp4">
112
+ // controller.openPopUp(
113
+ // // <InfoPanelImg url='//vrlab-static.ljcdn.com/release/web/psq/a.8e868cb2.gif' />
114
+ // // <InfoPanelImg url='//vrlab-public.ljcdn.com/release/web/psq/b.f9a1ed52.png' />
115
+ // // <InfoPanelImg url='//vrlab-public.ljcdn.com/release/web/psq/c.4f88c112.png' />
116
+ // // <InfoPanelImg url='//vrlab-public.ljcdn.com/release/seesay/tools/cat_music___f68fb9bbe1f7cd6d00a16456dd0b09ad.gif' />
117
+ // <InfoPanelImg url="http://vrlab-public.ljcdn.com/common/images/web/d94e1bd7-0311-4b20-9c41-a1294fe43554.png">
88
118
  // <Title title="场景联动抓拍图片" subTitle={'2022.02.17 14:00'} />
89
- // </InfoPanelVideo>
90
- // ),
91
- // height: '60vh',
92
- // })
119
+ // </InfoPanelImg>
120
+ // // <InfoPanelVideo url="//vrlab-public.ljcdn.com/release/seesay/tools/2022011713142___b320f74a5e1b5ad4bb46b4dc69d73ecc.mp4">
121
+ // // <Title title="场景联动抓拍图片" subTitle={'2022.02.17 14:00'} />
122
+ // // </InfoPanelVideo>
123
+ // )
124
+ // },
125
+ // $setInfoPanel2: () => {
126
+ // controller.openPopUp(
127
+ // <InfoPanelImg url='//vrlab-static.ljcdn.com/release/web/psq/a.8e868cb2.gif' />
128
+ // // <InfoPanelImg url='//vrlab-public.ljcdn.com/release/web/psq/b.f9a1ed52.png' />
129
+ // // <InfoPanelImg url='//vrlab-public.ljcdn.com/release/web/psq/c.4f88c112.png' />
130
+ // // <InfoPanelImg url='//vrlab-public.ljcdn.com/release/seesay/tools/cat_music___f68fb9bbe1f7cd6d00a16456dd0b09ad.gif' />
131
+ // // <InfoPanelImg url="http://vrlab-public.ljcdn.com/common/images/web/d94e1bd7-0311-4b20-9c41-a1294fe43554.png">
132
+ // // <Title title="场景联动抓拍图片" subTitle={'2022.02.17 14:00'} />
133
+ // // </InfoPanelImg>
134
+ // // <InfoPanelVideo url="//vrlab-public.ljcdn.com/release/seesay/tools/2022011713142___b320f74a5e1b5ad4bb46b4dc69d73ecc.mp4">
135
+ // // <Title title="场景联动抓拍图片" subTitle={'2022.02.17 14:00'} />
136
+ // // </InfoPanelVideo>
137
+ // )
93
138
  // },
94
139
  // })
95
140
 
@@ -235,11 +235,17 @@ export enum InfoPanelTypeEnum {
235
235
  Video = 'Video',
236
236
  }
237
237
 
238
+ export enum InfoPanelStyleEnum {
239
+ Drawer = 'Drawer',
240
+ PopUp = 'PopUp',
241
+ }
242
+
238
243
  /**
239
244
  * 信息面板
240
245
  */
241
246
  export type InfoPanelData = {
242
247
  type: InfoPanelTypeEnum
248
+ style?: InfoPanelStyleEnum
243
249
  url: string
244
250
  // 标题
245
251
  title?: string
@@ -547,3 +547,69 @@
547
547
  opacity: 0;
548
548
  transition: opacity 0.45s;
549
549
  }
550
+
551
+ .vreo-PopUp {
552
+ position: absolute;
553
+ left: 0;
554
+ top: 0;
555
+ width: 100%;
556
+ height: 100%;
557
+ pointer-events: none;
558
+ background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.7) 65%);
559
+ opacity: 0;
560
+ transition: opacity .45s;
561
+ display: flex;
562
+ justify-content: center;
563
+ align-items: center;
564
+ }
565
+
566
+ .vreo-PopUp.vreo-PopUp-visible {
567
+ opacity: 1;
568
+ pointer-events: all;
569
+ }
570
+
571
+ .vreo-PopUp-inner {
572
+ width: 339px;
573
+ height: 425px;
574
+ position: relative;
575
+ }
576
+
577
+ @media only screen and (min-width: 960px) {
578
+ .vreo-PopUp-inner {
579
+ width: 678px;
580
+ height: 620px;
581
+ position: relative;
582
+ }
583
+ .vreo-infoPanelVideo {
584
+ max-width: 100%;
585
+ }
586
+ }
587
+
588
+ .vreo-PopUp-inner .vreo-infoPanel {
589
+ background-color: initial;
590
+ justify-content: center;
591
+ }
592
+
593
+ .vreo-PopUp-inner .vreo-infoPanel-title {
594
+ position: absolute;
595
+ bottom: 32px;
596
+ left: 0;
597
+ z-index: 1;
598
+ flex-direction: column;
599
+ justify-content: end;
600
+ height: 200px;
601
+ background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.8));
602
+ }
603
+
604
+ .vreo-PopUp-inner .vreo-infoPanel-title .vreo-infoPanel-t1 {
605
+ padding-left: 0;
606
+ font-size: 20px;
607
+ font-weight: 600;
608
+ padding-bottom: 14px;
609
+ }
610
+
611
+ .vreo-PopUp-inner .vreo-infoPanel-title .vreo-infoPanel-t2 {
612
+ padding: 0 0 24px 0;
613
+ font-size: 14px;
614
+ opacity: 0.85;
615
+ }