@realsee/vreo 3.0.0-webgpu.10 → 4.0.0-react19.0

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/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -119
  3. package/README.md +6 -0
  4. package/lib/PlayController/index.js +74 -75
  5. package/lib/PlayController/index.js.map +1 -1
  6. package/lib/Player/App.d.ts +2 -1
  7. package/lib/Player/App.d.ts.map +1 -1
  8. package/lib/Player/custom/SpatialScenePanel/index.d.ts +2 -1
  9. package/lib/Player/custom/SpatialScenePanel/index.d.ts.map +1 -1
  10. package/lib/Player/hooks.d.ts.map +1 -1
  11. package/lib/Player/index.js +1 -1808
  12. package/lib/Player/modules/Drawer/index.d.ts +2 -1
  13. package/lib/Player/modules/Drawer/index.d.ts.map +1 -1
  14. package/lib/Player/modules/PopUp/index.d.ts +2 -1
  15. package/lib/Player/modules/PopUp/index.d.ts.map +1 -1
  16. package/lib/Player/modules/ResizeObserver/index.d.ts +2 -1
  17. package/lib/Player/modules/ResizeObserver/index.d.ts.map +1 -1
  18. package/lib/Player/modules/VideoAgent/index.d.ts +2 -2
  19. package/lib/Player/modules/Wave/index.d.ts +2 -1
  20. package/lib/Player/modules/Wave/index.d.ts.map +1 -1
  21. package/lib/Player/modules/keyframes/BgMusic/index.d.ts +2 -1
  22. package/lib/Player/modules/keyframes/BgMusic/index.d.ts.map +1 -1
  23. package/lib/Player/modules/keyframes/CameraMovement/index.d.ts +2 -1
  24. package/lib/Player/modules/keyframes/CameraMovement/index.d.ts.map +1 -1
  25. package/lib/Player/modules/keyframes/InfoPanel/index.d.ts +2 -1
  26. package/lib/Player/modules/keyframes/InfoPanel/index.d.ts.map +1 -1
  27. package/lib/Player/modules/keyframes/ModelVideo/index.d.ts +2 -1
  28. package/lib/Player/modules/keyframes/ModelVideo/index.d.ts.map +1 -1
  29. package/lib/Player/modules/keyframes/PanoEffect/index.d.ts +2 -1
  30. package/lib/Player/modules/keyframes/PanoEffect/index.d.ts.map +1 -1
  31. package/lib/Player/modules/keyframes/PanoTextLabel/index.d.ts +2 -1
  32. package/lib/Player/modules/keyframes/PanoTextLabel/index.d.ts.map +1 -1
  33. package/lib/Player/modules/keyframes/Prompter/index.d.ts +2 -1
  34. package/lib/Player/modules/keyframes/Prompter/index.d.ts.map +1 -1
  35. package/lib/Player/modules/keyframes/UpdateVRPanorama/index.d.ts +2 -1
  36. package/lib/Player/modules/keyframes/UpdateVRPanorama/index.d.ts.map +1 -1
  37. package/lib/Player/modules/keyframes/VideoEffect/index.d.ts +2 -1
  38. package/lib/Player/modules/keyframes/VideoEffect/index.d.ts.map +1 -1
  39. package/lib/chunks/CSS3DRenderPlugin-CtnLUnu7.js +128 -0
  40. package/lib/chunks/CSS3DRenderPlugin-CtnLUnu7.js.map +1 -0
  41. package/lib/chunks/CameraMovementPlugin-YCaScSFU.js +77 -0
  42. package/lib/chunks/CameraMovementPlugin-YCaScSFU.js.map +1 -0
  43. package/lib/chunks/Player-BzRqdH4q.js +1581 -0
  44. package/lib/chunks/Player-BzRqdH4q.js.map +1 -0
  45. package/lib/chunks/VreoUnit-NhH1hdF1.js +17 -0
  46. package/lib/chunks/VreoUnit-NhH1hdF1.js.map +1 -0
  47. package/lib/chunks/timeline-DZs_svT3.js +37 -0
  48. package/lib/chunks/timeline-DZs_svT3.js.map +1 -0
  49. package/lib/fivePlugins/CSS3DRenderPlugin/transformPositionToVector3.d.ts.map +1 -1
  50. package/lib/index.js +4 -12
  51. package/lib/plugins/CSS3DRenderPlugin.js +1 -115
  52. package/lib/plugins/CameraMovementPlugin.js +1 -6
  53. package/lib/plugins/ModelTVVideoPlugin.js +133 -161
  54. package/lib/plugins/ModelTVVideoPlugin.js.map +1 -1
  55. package/lib/react/index.js +40 -38
  56. package/lib/react/index.js.map +1 -1
  57. package/lib/shared-utils/animationFrame/BetterTween.d.ts.map +1 -1
  58. package/lib/shared-utils/createTransMatrix.d.ts.map +1 -1
  59. package/lib/types/index.js +1 -10
  60. package/package.json +8 -8
  61. package/LICENSE-UPDATE.txt +0 -5
  62. package/lib/Player/index.js.map +0 -1
  63. package/lib/chunks/index-BgPSzRSs.js +0 -93
  64. package/lib/chunks/index-BgPSzRSs.js.map +0 -1
  65. package/lib/chunks/index-CunyJn6H.js +0 -51
  66. package/lib/chunks/index-CunyJn6H.js.map +0 -1
  67. package/lib/index.js.map +0 -1
  68. package/lib/plugins/CSS3DRenderPlugin.js.map +0 -1
  69. package/lib/plugins/CameraMovementPlugin.js.map +0 -1
  70. package/lib/types/index.js.map +0 -1
@@ -1,51 +0,0 @@
1
- var l = Object.defineProperty;
2
- var f = (n, t, e) => t in n ? l(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var a = (n, t, e) => f(n, typeof t != "symbol" ? t + "" : t, e);
4
- const r = globalThis;
5
- var m;
6
- const d = ((m = r.requestAnimationFrame) == null ? void 0 : m.bind(r)) ?? ((n) => setTimeout(() => n(performance.now()), 16));
7
- var c;
8
- const p = ((c = r.cancelAnimationFrame) == null ? void 0 : c.bind(r)) ?? ((n) => clearTimeout(n));
9
- function g(n, t = 60) {
10
- let e = -1, s = 0, o = -1;
11
- const h = 1e3 / t;
12
- function u(i) {
13
- o === -1 && (o = i), e = d(u), !(i - s < h) && (s = i, n == null || n(i - o));
14
- }
15
- return e = d(u), () => p(e);
16
- }
17
- class A {
18
- constructor() {
19
- a(this, "keyframes", []);
20
- a(this, "consumed", /* @__PURE__ */ new Set());
21
- }
22
- load(t) {
23
- this.keyframes = t, this.consumed = new Set(t.filter((e) => e.parsed));
24
- }
25
- pendingAt(t) {
26
- return this.keyframes.filter((e) => this.consumed.has(e) || e.start > t || e.end < t ? !1 : e.type === "BgMusic" || e.type === "PanoTextLabel" || e.type === "Prompter" || e.type === "PanoTag" || t - e.start <= 100);
27
- }
28
- take(t) {
29
- const e = this.pendingAt(t);
30
- return e.forEach((s) => this.consumed.add(s)), e;
31
- }
32
- seek(t) {
33
- this.consumed = new Set(this.keyframes.filter((e) => e.end < t));
34
- }
35
- reset(t) {
36
- if (t === void 0) {
37
- this.consumed.clear();
38
- return;
39
- }
40
- for (const e of this.keyframes)
41
- e.type === t && this.consumed.delete(e);
42
- }
43
- clear() {
44
- this.keyframes = [], this.consumed.clear();
45
- }
46
- }
47
- export {
48
- A as T,
49
- g as r
50
- };
51
- //# sourceMappingURL=index-CunyJn6H.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CunyJn6H.js","sources":["../../resources/shared-utils/animationFrame/index.ts","../../resources/timeline/index.ts"],"sourcesContent":["const scope = globalThis as typeof globalThis & {\n requestAnimationFrame?: (callback: FrameRequestCallback) => number\n cancelAnimationFrame?: (handle: number) => void\n}\n\nconst requestFrame = scope.requestAnimationFrame?.bind(scope)\n ?? ((callback: FrameRequestCallback) => setTimeout(() => callback(performance.now()), 16) as unknown as number)\nconst cancelFrame = scope.cancelAnimationFrame?.bind(scope)\n ?? ((handle: number) => clearTimeout(handle))\n\nexport default requestFrame\n\nexport function nextFrame(fn: FrameRequestCallback, delay = 0) {\n if (delay <= 0) requestFrame(fn)\n else requestFrame(() => nextFrame(fn, delay - 1))\n}\n\nexport function requestAnimationFrameInterval(callback?: (time: number) => unknown, frame = 60) {\n let handle = -1\n let previousTime = 0\n let startTime = -1\n const minimumDelta = 1000 / frame\n function loop(time: number) {\n if (startTime === -1) startTime = time\n handle = requestFrame(loop)\n if (time - previousTime < minimumDelta) return\n previousTime = time\n callback?.(time - startTime)\n }\n handle = requestFrame(loop)\n return () => cancelFrame(handle)\n}\n\nexport function getFrameTime() {\n const start = Date.now()\n return new Promise<number>(resolve => requestFrame(() => resolve(Date.now() - start)))\n}\n","export interface TimelineKeyframe {\n type: string\n start: number\n end: number\n parsed?: boolean\n}\n\n/** Deterministic keyframe selection. Runtime state never mutates timeline input. */\nexport class Timeline<Keyframe extends TimelineKeyframe = TimelineKeyframe> {\n private keyframes: readonly Keyframe[] = []\n private consumed = new Set<Keyframe>()\n\n load(keyframes: readonly Keyframe[]) {\n this.keyframes = keyframes\n this.consumed = new Set(keyframes.filter(keyframe => keyframe.parsed))\n }\n\n pendingAt(currentTime: number) {\n return this.keyframes.filter(keyframe => {\n if (this.consumed.has(keyframe)) return false\n if (keyframe.start > currentTime || keyframe.end < currentTime) return false\n return keyframe.type === 'BgMusic' ||\n keyframe.type === 'PanoTextLabel' || keyframe.type === 'Prompter' || keyframe.type === 'PanoTag' ||\n currentTime - keyframe.start <= 100\n })\n }\n\n take(currentTime: number) {\n const pending = this.pendingAt(currentTime)\n pending.forEach(keyframe => this.consumed.add(keyframe))\n return pending\n }\n\n seek(currentTime: number) {\n this.consumed = new Set(this.keyframes.filter(keyframe => keyframe.end < currentTime))\n }\n\n reset(type?: Keyframe['type']) {\n if (type === undefined) {\n this.consumed.clear()\n return\n }\n for (const keyframe of this.keyframes) {\n if (keyframe.type === type) this.consumed.delete(keyframe)\n }\n }\n\n clear() {\n this.keyframes = []\n this.consumed.clear()\n }\n}\n"],"names":["scope","_a","requestFrame","callback","cancelFrame","handle","requestAnimationFrameInterval","frame","previousTime","startTime","minimumDelta","loop","time","Timeline","__publicField","keyframes","keyframe","currentTime","pending","type"],"mappings":";;;AAAA,MAAMA,IAAQ;AAAd,IAAAC;AAKA,MAAMC,MAAeD,IAAAD,EAAM,0BAAN,gBAAAC,EAA6B,KAAKD,QACjD,CAACG,MAAmC,WAAW,MAAMA,EAAS,YAAY,IAAA,CAAK,GAAG,EAAE;AAN1F,IAAAF;AAOA,MAAMG,MAAcH,IAAAD,EAAM,yBAAN,gBAAAC,EAA4B,KAAKD,QAC/C,CAACK,MAAmB,aAAaA,CAAM;AAStC,SAASC,EAA8BH,GAAsCI,IAAQ,IAAI;AAC9F,MAAIF,IAAS,IACTG,IAAe,GACfC,IAAY;AAChB,QAAMC,IAAe,MAAOH;AAC5B,WAASI,EAAKC,GAAc;AAG1B,IAFIH,MAAc,OAAIA,IAAYG,IAClCP,IAASH,EAAaS,CAAI,GACtB,EAAAC,IAAOJ,IAAeE,OAC1BF,IAAeI,GACfT,KAAA,QAAAA,EAAWS,IAAOH;AAAA,EACpB;AACA,SAAAJ,IAASH,EAAaS,CAAI,GACnB,MAAMP,EAAYC,CAAM;AACjC;ACvBO,MAAMQ,EAA+D;AAAA,EAArE;AACG,IAAAC,EAAA,mBAAiC,CAAA;AACjC,IAAAA,EAAA,sCAAe,IAAA;AAAA;AAAA,EAEvB,KAAKC,GAAgC;AACnC,SAAK,YAAYA,GACjB,KAAK,WAAW,IAAI,IAAIA,EAAU,OAAO,CAAAC,MAAYA,EAAS,MAAM,CAAC;AAAA,EACvE;AAAA,EAEA,UAAUC,GAAqB;AAC7B,WAAO,KAAK,UAAU,OAAO,CAAAD,MACvB,KAAK,SAAS,IAAIA,CAAQ,KAC1BA,EAAS,QAAQC,KAAeD,EAAS,MAAMC,IAAoB,KAChED,EAAS,SAAS,aACvBA,EAAS,SAAS,mBAAmBA,EAAS,SAAS,cAAcA,EAAS,SAAS,aACvFC,IAAcD,EAAS,SAAS,GACnC;AAAA,EACH;AAAA,EAEA,KAAKC,GAAqB;AACxB,UAAMC,IAAU,KAAK,UAAUD,CAAW;AAC1C,WAAAC,EAAQ,QAAQ,CAAAF,MAAY,KAAK,SAAS,IAAIA,CAAQ,CAAC,GAChDE;AAAA,EACT;AAAA,EAEA,KAAKD,GAAqB;AACxB,SAAK,WAAW,IAAI,IAAI,KAAK,UAAU,OAAO,CAAAD,MAAYA,EAAS,MAAMC,CAAW,CAAC;AAAA,EACvF;AAAA,EAEA,MAAME,GAAyB;AAC7B,QAAIA,MAAS,QAAW;AACtB,WAAK,SAAS,MAAA;AACd;AAAA,IACF;AACA,eAAWH,KAAY,KAAK;AAC1B,MAAIA,EAAS,SAASG,KAAM,KAAK,SAAS,OAAOH,CAAQ;AAAA,EAE7D;AAAA,EAEA,QAAQ;AACN,SAAK,YAAY,CAAA,GACjB,KAAK,SAAS,MAAA;AAAA,EAChB;AACF;"}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CSS3DRenderPlugin.js","sources":["../../resources/fivePlugins/CSS3DRenderPlugin/evenNumber.ts","../../resources/fivePlugins/CSS3DRenderPlugin/centerPoint.ts","../../resources/fivePlugins/CSS3DRenderPlugin/transformPositionToVector3.ts","../../resources/fivePlugins/CSS3DRenderPlugin/createResizeObserver.ts","../../resources/fivePlugins/CSS3DRenderPlugin/index.ts"],"sourcesContent":["export default function evenNumber(num: number, config?: { smaller?: boolean }): number {\n const roundNum = Math.round(num)\n return roundNum % 2 === 0 ? roundNum : roundNum + Number(config?.smaller ? -1 : 1)\n}\n","import { Vector3 } from 'three/webgpu'\n\nexport default function centerPoint(point1: Vector3, point2: Vector3): Vector3 {\n return new Vector3((point1.x + point2.x) / 2, (point1.y + point2.y) / 2, (point1.z + point2.z) / 2)\n}\n","import { Vector3 } from 'three/webgpu'\n\nconst transformPositionToVector3 = ({ x, y, z }: { x: number; y: number; z: number }) => new Vector3(x, y, z)\n\nexport default transformPositionToVector3\n","export default function createResizeObserver(callback: () => void, element?: HTMLElement) {\n let observing = false\n if (!element || typeof ResizeObserver === 'undefined') {\n return {\n observe() {\n if (observing) return\n observing = true\n window.addEventListener('resize', callback)\n },\n unobserve() {\n if (!observing) return\n observing = false\n window.removeEventListener('resize', callback)\n },\n disconnect() {\n if (!observing) return\n observing = false\n window.removeEventListener('resize', callback)\n },\n }\n }\n\n const observer = new ResizeObserver(callback)\n return {\n observe() {\n if (observing) return\n observing = true\n observer.observe(element)\n },\n unobserve() {\n if (!observing) return\n observing = false\n observer.unobserve(element)\n },\n disconnect() {\n observing = false\n observer.disconnect()\n },\n }\n}\n","import { FivePlugin } from '@realsee/five-webgpu'\nimport * as THREE from 'three/webgpu'\nimport { Scene, Vector3 } from 'three/webgpu'\nimport { CSS3DObject, CSS3DRenderer } from 'three/addons/renderers/CSS3DRenderer.js'\nimport evenNumber from './evenNumber'\nimport centerPoint from './centerPoint'\nimport transformPositionToVector3 from './transformPositionToVector3'\nimport createResizeObserver from './createResizeObserver'\n\nexport interface Vector3Position {\n x: number\n y: number\n z: number\n}\n\nexport type CSS3DRenderPluginParameterType = undefined\nexport interface CSS3DRenderPluginExportType {\n create3DDomContainer: (\n points: Vector3[] | Vector3Position[],\n config?: { ratio?: number; dpr?: number; autoRender?: boolean; container?: HTMLElement; [key: string]: any } & (\n | { mode?: 'front' }\n | { mode: 'behind'; behindFiveContainer: HTMLElement }\n ),\n ) => { container: HTMLElement; dispose: () => void; css3DObject: CSS3DObject; render?: () => void } | void\n disposeAll: () => void\n}\n\ntype CreateContainer = CSS3DRenderPluginExportType['create3DDomContainer']\ntype CreateContainerConfig = NonNullable<Parameters<CreateContainer>[1]>\ninterface RenderLayer {\n scene: Scene\n renderer: CSS3DRenderer\n entries: Set<object>\n start: () => void\n stop: () => void\n dispose: () => void\n}\ninterface CSS3DRenderPluginState {\n disposers: Set<() => void>\n front?: RenderLayer\n behind?: RenderLayer\n}\n\n/** Renders DOM overlays in a Five scene. One renderer is shared by each front/behind layer. */\nexport const CSS3DRenderPlugin: FivePlugin<CSS3DRenderPluginParameterType, CSS3DRenderPluginExportType> = (five) => {\n const state: CSS3DRenderPluginState = { disposers: new Set() }\n\n const createLayer = (wrapper: HTMLElement, fiveElement: HTMLElement): RenderLayer => {\n const scene = new Scene()\n const renderer = new CSS3DRenderer()\n const setSize = () => renderer.setSize(\n evenNumber(fiveElement.clientWidth, { smaller: true }),\n evenNumber(fiveElement.clientHeight, { smaller: true }),\n )\n setSize()\n const resize = createResizeObserver(setSize, fiveElement)\n renderer.domElement.style.position = 'absolute'\n renderer.domElement.style.top = '0'\n renderer.domElement.style.userSelect = 'none'\n renderer.domElement.style.pointerEvents = 'none'\n wrapper.appendChild(renderer.domElement)\n\n let running = false\n let frame: number | undefined\n const layer: RenderLayer = {\n scene,\n renderer,\n entries: new Set(),\n start() {\n if (running) return\n running = true\n resize.observe()\n const render = () => {\n if (!running) return\n renderer.render(scene, five.camera)\n frame = requestAnimationFrame(render)\n }\n render()\n },\n stop() {\n if (!running) return\n running = false\n if (frame !== undefined) cancelAnimationFrame(frame)\n frame = undefined\n resize.unobserve()\n },\n dispose() {\n layer.stop()\n resize.disconnect()\n renderer.domElement.remove()\n },\n }\n return layer\n }\n\n const create3DDomContainer = (...params: Parameters<CreateContainer>): ReturnType<CreateContainer> => {\n const points = params[0].map(point => point instanceof Vector3 ? point : transformPositionToVector3(point))\n const config = params[1]\n if (points.length < 4) return console.error('points must be equal or greater than 4')\n if (!five.model.loaded) return console.error('five.model.loaded is false')\n const fiveElement = five.getElement()\n if (!fiveElement) return console.error('five.getElement() is empty')\n\n const ratio = config?.ratio ?? 0.00216\n if (ratio <= 0.00215) console.warn('if you need click css3DElement on safari, ratio must be greater than 0.00215')\n const dpr = config?.dpr ?? 1\n const mode = config?.mode ?? 'front'\n const autoRender = config?.autoRender ?? true\n const container = config?.container ?? document.createElement('div')\n container.classList.add('__Dnalogel-plugin--CSS3DRenderPlugin')\n const { css3DObject, mesh } = createObject(points, { ratio, dpr, container, mode })\n\n let layer = mode === 'behind' ? state.behind : state.front\n if (!layer) {\n const wrapper = mode === 'behind'\n ? config?.behindFiveContainer ?? fiveElement.parentElement ?? document.body\n : fiveElement.parentElement ?? document.body\n layer = createLayer(wrapper, fiveElement)\n if (mode === 'behind') state.behind = layer\n else state.front = layer\n }\n\n const entry = {}\n layer.entries.add(entry)\n let rendered = false\n let disposed = false\n const render = () => {\n if (disposed || rendered) return\n rendered = true\n layer!.scene.add(css3DObject)\n if (mesh) five.scene.add(mesh)\n layer!.start()\n }\n const dispose = () => {\n if (disposed) return\n disposed = true\n state.disposers.delete(dispose)\n layer!.entries.delete(entry)\n if (rendered) {\n layer!.scene.remove(css3DObject)\n if (mesh) five.scene.remove(mesh)\n }\n mesh?.geometry.dispose()\n mesh?.material.dispose()\n if (layer!.scene.children.length === 0) layer!.stop()\n if (layer!.entries.size === 0) {\n layer!.dispose()\n if (mode === 'behind' && state.behind === layer) state.behind = undefined\n if (mode === 'front' && state.front === layer) state.front = undefined\n }\n }\n state.disposers.add(dispose)\n if (autoRender) render()\n return { container, dispose, css3DObject, render: autoRender ? undefined : render }\n }\n\n const createObject = (\n points: Vector3[],\n config: Required<Pick<CreateContainerConfig, 'ratio' | 'dpr' | 'container'>> & Pick<CreateContainerConfig, 'mode'>,\n ) => {\n const { ratio, dpr, container: element, mode } = config\n const planeWidth = points[0].distanceTo(points[1])\n const planeHeight = points[1].distanceTo(points[2])\n const domWidthPx = evenNumber((planeWidth / ratio) * dpr)\n const domHeightPx = evenNumber((planeHeight / ratio) * dpr)\n const css3DObject = new CSS3DObject(element)\n css3DObject.scale.set(ratio, ratio, ratio)\n element.style.width = domWidthPx + 'px'\n element.style.height = domHeightPx + 'px'\n element.style.pointerEvents = 'none'\n\n const centerPosition = centerPoint(points[0], points[2])\n const vector01 = points[1].clone().sub(points[0])\n const vector12 = points[2].clone().sub(points[1])\n const rotateXAngle = new Vector3(0, 1, 0).angleTo(new Vector3(0, vector12.y, vector12.z))\n const rotateYAngle = new Vector3(1, 0, 0).angleTo(new Vector3(vector01.x, 0, vector01.z))\n const rotateZAngle = vector01.angleTo(new Vector3(vector01.x, 0, vector01.z))\n const rotateX = (vector12.z > 0 ? -1 : 1) * rotateXAngle\n const rotateY = (vector01.z < 0 ? 1 : -1) * rotateYAngle\n const rotateZ = ((vector01.x > 0 && vector01.y < 0) || (vector01.x < 0 && vector01.y > 0) ? -1 : 1) * rotateZAngle\n css3DObject.rotateOnWorldAxis(new Vector3(1, 0, 0), rotateX)\n css3DObject.rotateOnWorldAxis(new Vector3(0, 1, 0), rotateY)\n css3DObject.rotateOnWorldAxis(new Vector3(0, 0, 1), rotateZ)\n css3DObject.position.set(centerPosition.x, centerPosition.y, centerPosition.z)\n\n let mesh: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicNodeMaterial> | undefined\n if (mode === 'behind') {\n const material = new THREE.MeshBasicNodeMaterial({ opacity: 0, transparent: false, side: THREE.DoubleSide })\n const geometry = new THREE.PlaneGeometry(domWidthPx, domHeightPx)\n mesh = new THREE.Mesh(geometry, material)\n mesh.name = 'CSS3DRenderPlugin-mesh'\n mesh.position.copy(css3DObject.position)\n mesh.rotation.copy(css3DObject.rotation)\n mesh.scale.copy(css3DObject.scale)\n }\n return { css3DObject, mesh }\n }\n\n return {\n create3DDomContainer,\n disposeAll: () => [...state.disposers].forEach(dispose => dispose()),\n }\n}\n\nexport default CSS3DRenderPlugin\n"],"names":["evenNumber","num","config","roundNum","centerPoint","point1","point2","Vector3","transformPositionToVector3","x","y","z","createResizeObserver","callback","element","observing","observer","CSS3DRenderPlugin","five","state","createLayer","wrapper","fiveElement","scene","Scene","renderer","CSS3DRenderer","setSize","resize","running","frame","layer","render","create3DDomContainer","params","points","point","ratio","dpr","mode","autoRender","container","css3DObject","mesh","createObject","entry","rendered","disposed","dispose","planeWidth","planeHeight","domWidthPx","domHeightPx","CSS3DObject","centerPosition","vector01","vector12","rotateXAngle","rotateYAngle","rotateZAngle","rotateX","rotateY","rotateZ","material","THREE","geometry"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CameraMovementPlugin.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../resources/typings/VreoUnit.ts"],"sourcesContent":["import { Mode, Pose } from '@realsee/five-webgpu'\nimport { CameraMovementEffect, Rotation } from '../fivePlugins/CameraMovementPlugin/typings'\n\nexport enum VreoKeyframeEnum {\n /** 运镜 */\n CameraMovement = 'CameraMovement',\n /**\n * 全景标签\n */\n PanoTag = 'PanoTag',\n /**\n * 全景文本标签\n */\n PanoTextLabel = 'PanoTextLabel',\n /**\n * 提词器\n */\n Prompter = 'Prompter',\n /**\n * 更新 VR 全景\n */\n UpdateVRPanorama = 'UpdateVRPanorama',\n /**\n * 视频广告\n */\n ModelVideo = 'ModelVideo',\n /**\n * 全景特效\n */\n PanoEffect = 'PanoEffect',\n /**\n * 信息面板\n */\n InfoPanel = 'InfoPanel',\n /**\n * 视频特效\n */\n VideoEffect = 'VideoEffect',\n /**\n * 背景音乐\n */\n BgMusic = 'BgMusic',\n /**\n * 结束\n */\n Exit = 'Exit',\n /**\n * 自定义剧本帧\n */\n Custom = 'Custom',\n}\n\n/**\n * 支持自定义剧本关键帧配置项\n */\nexport type VreoKeyframeConfigMap = {\n PanoTag?: false\n PanoTextLabel?: false\n Prompter?: false\n InfoPanel?: false\n}\n\n\n/**\n * 剧本关键帧\n */\nexport interface VreoKeyframe {\n uuid?: string\n type: VreoKeyframeEnum\n start: number\n end: number\n parsed?: boolean\n data: Record<string, any>\n}\n\n/**\n * 虚拟视频角色\n */\nexport interface VreoVideo {\n duration: number\n start: number\n end: number\n url: string\n avatar?: {\n url?: string\n force?: true\n }\n}\n\n/**\n * 剧本结构\n */\nexport interface VreoUnit {\n categoryId?: string\n categoryText?: string\n frontRequestId?: string\n index?: string | number\n configure?: { pageTitle?: string }\n keyframes: VreoKeyframe[]\n video: VreoVideo\n}\n\n\n\n/**\n * 剧本事件\n */\nexport type VreoKeyframeEvent = { [key in VreoKeyframeEnum]: (keyframe: VreoKeyframe, currentTime: number) => void } & {\n // 新数据载入完成\n loaded: (vreoUnit: VreoUnit) => void\n // 语音状态 播放 -> 暂停\n paused: (ended?: boolean) => void\n // 语音状态 暂停 -> 播放\n playing: () => void\n // 未知的 剧本帧类型\n unknownKeyframeType: (keyframe: Record<string, any>) => void\n // 一次播放完成(试用,只抛事件不做任何额外的逻辑处理)\n ended: () => void\n}\n\n/**\n * 相机运动\n */\nexport type CameraMovementData = {\n effect?: CameraMovementEffect\n transEffect?: \"fly\" | \"fade\" | \"instant\"\n mode: Mode\n panoIndex: number\n loop?: boolean\n rotateSpeed?: number\n rotation?: Rotation\n} & Partial<Pose>\n\n/**\n * 提词器\n */\nexport type PrompterData = {\n text: string\n}\n\n/**\n * VR 全景切换\n */\nexport type UpdateVRPanoramaData = {\n _signature: string\n allow_hosts: string[]\n certificate: string\n expire_at: string\n // 动态场景\n dynamic_scene?: {\n images: {\n index: number\n right: string\n left: string\n up: string\n down: string\n front: string\n back: string\n }\n }\n [key: string]: any\n}\n\n/**\n * 顶点\n */\nexport interface Vertex {\n x: number\n y: number\n z: number\n}\n\n/**\n * 矩形顶点\n */\nexport type QuadrangleVertexs = [Vertex, Vertex, Vertex, Vertex]\n/**\n * 顶点数组\n */\nexport type Vertexs = Vertex[]\n\n/**\n * 视频广告\n */\nexport type ModelVideoData = {\n /**\n * 视频素材\n */\n videoSrc: string\n /**\n * 视频封面\n */\n videoPosterSrc: string\n /**\n * 视频映射在模型中的顶点\n */\n vertexs: QuadrangleVertexs | Vertexs\n matrixWorld?: number[]\n}\n\n/**\n * 四元数\n */\nexport type Quaternion = {\n x: number,\n y: number,\n z: number,\n w: number\n}\n\n/**\n * 全景文本标签\n */\nexport type PanoTextLabelData = {\n text: string\n vertex: Vertex\n normal?: Vertex\n quaternion?: Quaternion\n fontSize?: number\n}\n\n/**\n * 全景标签枚举\n */\nexport enum PanoTagEnum {\n Text = 'Text',\n Image = 'Image',\n}\n\n/**\n * 标签样式种类\n */\nexport enum PanoTagStyleEnum {\n /**\n * 生长动画:默认值\n */\n Growth = 'Growth',\n /**\n * 展开动画\n */\n Expand = 'Expand',\n}\n\nexport type PanoTagData = {\n type: PanoTagEnum\n style: PanoTagStyleEnum\n text: string\n vertex: Vertex\n imgUrl?: string\n}\n\n/**\n * 全景特效枚举\n */\nexport enum PanoEffectEnum {\n /**\n * 两点距离\n */\n Distance = 'Distance',\n}\n\n/**\n * 全景特效\n */\nexport type PanoEffectData = {\n effect: PanoEffectEnum\n twoVertexs: [Vertex, Vertex]\n}\n\n/**\n * 信息面板类型枚举\n */\nexport enum InfoPanelTypeEnum {\n Image = 'Image',\n Video = 'Video',\n}\n\nexport enum InfoPanelStyleEnum {\n Drawer = 'Drawer',\n PopUp = 'PopUp',\n}\n\n/**\n * 信息面板\n */\nexport type InfoPanelData = {\n type: InfoPanelTypeEnum\n style?: InfoPanelStyleEnum\n url: string\n // 标题\n title?: string\n // 副标题\n subTitle?: string\n}\n\n/**\n * 视频特效\n */\nexport type VideoEffectData = {\n videoSrc: string\n panoIndex: number\n fov: number\n direction?: Vertex\n vector?: Pick<Pose, 'longitude' | 'latitude'>\n}\n\n/**\n * 背景音乐\n */\nexport type BgMusicData = {\n url: string\n}\n\n/** 自定义序列帧 */\nexport type CustomData = Record<string, any>\n"],"names":["VreoKeyframeEnum","PanoTagEnum","PanoTagStyleEnum","PanoEffectEnum","InfoPanelTypeEnum","InfoPanelStyleEnum"],"mappings":"AAGO,IAAKA,sBAAAA,OAEVA,EAAA,iBAAiB,kBAIjBA,EAAA,UAAU,WAIVA,EAAA,gBAAgB,iBAIhBA,EAAA,WAAW,YAIXA,EAAA,mBAAmB,oBAInBA,EAAA,aAAa,cAIbA,EAAA,aAAa,cAIbA,EAAA,YAAY,aAIZA,EAAA,cAAc,eAIdA,EAAA,UAAU,WAIVA,EAAA,OAAO,QAIPA,EAAA,SAAS,UA9CCA,IAAAA,KAAA,CAAA,CAAA,GA6NAC,sBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OAIVA,EAAA,SAAS,UAITA,EAAA,SAAS,UARCA,IAAAA,KAAA,CAAA,CAAA,GAsBAC,sBAAAA,OAIVA,EAAA,WAAW,YAJDA,IAAAA,KAAA,CAAA,CAAA,GAkBAC,sBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,QAAQ,SAFEA,IAAAA,KAAA,CAAA,CAAA;"}