@rosettadash/vue 0.1.1 → 0.1.3

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 (79) hide show
  1. package/package.json +26 -2
  2. package/src/domain/i18n/app-language-select/index.d.ts +29 -0
  3. package/src/domain/i18n/app-language-select/index.js +22 -0
  4. package/src/domain/i18n/app-language-select/index.js.map +1 -0
  5. package/src/domain/role-gate/role-gate.d.ts +21 -0
  6. package/src/domain/role-gate/role-gate.js +32 -4
  7. package/src/domain/role-gate/role-gate.js.map +1 -1
  8. package/src/domain/time-preset/time-preset.d.ts +4 -2
  9. package/src/domain/time-preset/time-preset.js +12 -2
  10. package/src/domain/time-preset/time-preset.js.map +1 -1
  11. package/src/index.d.ts +4 -0
  12. package/src/index.js +4 -0
  13. package/src/index.js.map +1 -1
  14. package/src/layout/scroll-region/index.d.ts +2 -0
  15. package/src/layout/scroll-region/index.js +2 -0
  16. package/src/layout/scroll-region/index.js.map +1 -0
  17. package/src/layout/scroll-region/scroll-region.d.ts +53 -0
  18. package/src/layout/scroll-region/scroll-region.js +28 -0
  19. package/src/layout/scroll-region/scroll-region.js.map +1 -0
  20. package/src/lib/custom-element-host.js +6 -2
  21. package/src/lib/custom-element-host.js.map +1 -1
  22. package/src/visual/chart/bar/bar-chart.d.ts +34 -0
  23. package/src/visual/chart/bar/bar-chart.js +71 -7
  24. package/src/visual/chart/bar/bar-chart.js.map +1 -1
  25. package/src/visual/chart/line/line-chart.d.ts +44 -0
  26. package/src/visual/chart/line/line-chart.js +104 -7
  27. package/src/visual/chart/line/line-chart.js.map +1 -1
  28. package/src/visual/display/3d-geo-globe/three-geo-globe.d.ts +18 -29
  29. package/src/visual/display/3d-geo-globe/three-geo-globe.js +19 -20
  30. package/src/visual/display/3d-geo-globe/three-geo-globe.js.map +1 -1
  31. package/src/visual/display/geo-map/index.d.ts +36 -0
  32. package/src/visual/display/geo-map/index.js +25 -0
  33. package/src/visual/display/geo-map/index.js.map +1 -0
  34. package/src/visual/input/date-range/date-range-filter.d.ts +32 -2
  35. package/src/visual/input/date-range/date-range-filter.js +38 -6
  36. package/src/visual/input/date-range/date-range-filter.js.map +1 -1
  37. package/src/visual/input/number/number-input.d.ts +25 -3
  38. package/src/visual/input/number/number-input.js +31 -5
  39. package/src/visual/input/number/number-input.js.map +1 -1
  40. package/src/visual/input/select/select-input.d.ts +15 -3
  41. package/src/visual/input/select/select-input.js +25 -7
  42. package/src/visual/input/select/select-input.js.map +1 -1
  43. package/src/visual/input/text/text-input.d.ts +1 -1
  44. package/src/visual/input/textarea/textarea-input.d.ts +1 -1
  45. package/src/visual/media/equirect-sphere-viewport/equirect-sphere-viewport.d.ts +205 -0
  46. package/src/visual/media/equirect-sphere-viewport/equirect-sphere-viewport.js +576 -0
  47. package/src/visual/media/equirect-sphere-viewport/equirect-sphere-viewport.js.map +1 -0
  48. package/src/visual/media/equirect-sphere-viewport/index.d.ts +2 -0
  49. package/src/visual/media/equirect-sphere-viewport/index.js +2 -0
  50. package/src/visual/media/equirect-sphere-viewport/index.js.map +1 -0
  51. package/src/visual/media/equirect-sphere-viewport/planet-shader.d.ts +6 -0
  52. package/src/visual/media/equirect-sphere-viewport/planet-shader.js +69 -0
  53. package/src/visual/media/equirect-sphere-viewport/planet-shader.js.map +1 -0
  54. package/src/visual/media/flat-video-viewport/flat-video-viewport.d.ts +160 -0
  55. package/src/visual/media/flat-video-viewport/flat-video-viewport.js +370 -0
  56. package/src/visual/media/flat-video-viewport/flat-video-viewport.js.map +1 -0
  57. package/src/visual/media/flat-video-viewport/index.d.ts +2 -0
  58. package/src/visual/media/flat-video-viewport/index.js +2 -0
  59. package/src/visual/media/flat-video-viewport/index.js.map +1 -0
  60. package/src/visual/media/youtube-embed/index.d.ts +29 -0
  61. package/src/visual/media/youtube-embed/index.js +21 -0
  62. package/src/visual/media/youtube-embed/index.js.map +1 -0
  63. package/src/visual/news/language-select/news-language-select.d.ts +1 -1
  64. package/src/visual/news/language-select/news-language-select.js +4 -4
  65. package/src/visual/news/language-select/news-language-select.js.map +1 -1
  66. package/src/visual/news/region-select/news-region-select.d.ts +1 -1
  67. package/src/visual/news/region-select/news-region-select.js +4 -4
  68. package/src/visual/news/region-select/news-region-select.js.map +1 -1
  69. package/src/visual/news/search-box/news-search-box.d.ts +1 -1
  70. package/src/visual/news/type-select/news-type-select.d.ts +1 -1
  71. package/src/visual/news/type-select/news-type-select.js +4 -4
  72. package/src/visual/news/type-select/news-type-select.js.map +1 -1
  73. package/src/visual/svg/inline/svg-inline.d.ts +2 -2
  74. package/src/visual/table/data-table.d.ts +25 -3
  75. package/src/visual/table/data-table.js +38 -10
  76. package/src/visual/table/data-table.js.map +1 -1
  77. package/src/visual/wasm/media/wasm-media.d.ts +3 -0
  78. package/src/visual/wasm/media/wasm-media.js +10 -1
  79. package/src/visual/wasm/media/wasm-media.js.map +1 -1
@@ -0,0 +1,576 @@
1
+ import { __awaiter } from "tslib";
2
+ import { defineComponent, h, onBeforeUnmount, onMounted, ref, watch, } from 'vue';
3
+ import * as THREE from 'three';
4
+ import { VIEWPORT_FRAGMENT_SHADER, VIEWPORT_VERTEX_SHADER } from './planet-shader';
5
+ const SPHERE_RADIUS = 10;
6
+ const MIN_HFOV = 30;
7
+ const PLANET_STEREO_START = 125;
8
+ const PLANET_MAX_HFOV = 360;
9
+ const NORMAL_HFOV = 75;
10
+ const MIN_PITCH = -85;
11
+ const MAX_PITCH = 85;
12
+ const DRAG_SENSITIVITY = 0.07;
13
+ const viewRotScratch = new THREE.Matrix3();
14
+ const viewRotMatrix4Scratch = new THREE.Matrix4();
15
+ const cameraOriginScratch = new THREE.Vector3();
16
+ const DEG = Math.PI / 180;
17
+ function clamp(value, low, high) {
18
+ return Math.min(high, Math.max(low, value));
19
+ }
20
+ function displayFovToPlanetMix(displayFov) {
21
+ if (displayFov <= PLANET_STEREO_START) {
22
+ return 0;
23
+ }
24
+ return clamp((displayFov - PLANET_STEREO_START) / (PLANET_MAX_HFOV - PLANET_STEREO_START), 0, 1);
25
+ }
26
+ function planetMixToSpread(planetMix) {
27
+ return THREE.MathUtils.lerp(0.35, 11, planetMix);
28
+ }
29
+ function setVerticalFovFromHorizontal(camera, horizontalFov, aspect, maxHfov) {
30
+ const fov = clamp(horizontalFov, MIN_HFOV, maxHfov);
31
+ const verticalRad = 2 * Math.atan(Math.tan((fov * Math.PI) / 360) / aspect);
32
+ camera.fov = (verticalRad * 180) / Math.PI;
33
+ camera.aspect = aspect;
34
+ camera.updateProjectionMatrix();
35
+ }
36
+ function applyYawPitch(camera, yaw, pitch) {
37
+ camera.rotation.set(pitch * DEG, yaw * DEG, 0, 'YXZ');
38
+ }
39
+ function applyInteriorTextureFlip(texture, flip) {
40
+ if (flip) {
41
+ texture.wrapS = THREE.RepeatWrapping;
42
+ texture.repeat.x = -1;
43
+ texture.offset.x = 1;
44
+ }
45
+ else {
46
+ texture.wrapS = THREE.ClampToEdgeWrapping;
47
+ texture.repeat.x = 1;
48
+ texture.offset.x = 0;
49
+ }
50
+ }
51
+ function touchDistance(touches) {
52
+ if (touches.length < 2) {
53
+ return 0;
54
+ }
55
+ const dx = touches[0].clientX - touches[1].clientX;
56
+ const dy = touches[0].clientY - touches[1].clientY;
57
+ return Math.hypot(dx, dy);
58
+ }
59
+ function pickRecorderMimeType() {
60
+ const candidates = ['video/webm;codecs=vp9', 'video/webm;codecs=vp8', 'video/webm'];
61
+ for (const type of candidates) {
62
+ if (MediaRecorder.isTypeSupported(type)) {
63
+ return type;
64
+ }
65
+ }
66
+ return 'video/webm';
67
+ }
68
+ /**
69
+ * Interior sphere (BackSide + flipped texture) for rectilinear POV through 125°.
70
+ * Stereographic shader above 125° — orientation locked via shared camera matrix.
71
+ */
72
+ export const EquirectSphereViewport = defineComponent({
73
+ name: 'RdEquirectSphereViewport',
74
+ props: {
75
+ className: { type: String, default: undefined },
76
+ style: { type: [String, Object, Array], default: undefined },
77
+ videoSrc: { type: String, default: undefined },
78
+ flipInterior: { type: Boolean, default: true },
79
+ yaw: { type: Number, default: 25 },
80
+ pitch: { type: Number, default: -8 },
81
+ horizontalFov: { type: Number, default: NORMAL_HFOV },
82
+ outputWidth: { type: Number, default: 1280 },
83
+ outputHeight: { type: Number, default: 720 },
84
+ minHorizontalFov: { type: Number, default: MIN_HFOV },
85
+ maxHorizontalFov: { type: Number, default: PLANET_MAX_HFOV },
86
+ outputPreviewHost: { type: Object, default: undefined },
87
+ onCameraChange: {
88
+ type: Function,
89
+ default: undefined,
90
+ },
91
+ onTimeUpdate: {
92
+ type: Function,
93
+ default: undefined,
94
+ },
95
+ onPlaybackChange: {
96
+ type: Function,
97
+ default: undefined,
98
+ },
99
+ },
100
+ emits: ['cameraChange', 'timeUpdate', 'playbackChange'],
101
+ setup(props, { emit, expose, attrs }) {
102
+ const hostRef = ref(null);
103
+ let userInteracting = false;
104
+ let applyingProps = false;
105
+ let disposeScene = null;
106
+ const emitCamera = (detail) => {
107
+ var _a;
108
+ (_a = props.onCameraChange) === null || _a === void 0 ? void 0 : _a.call(props, detail);
109
+ emit('cameraChange', detail);
110
+ };
111
+ const emitTime = (detail) => {
112
+ var _a;
113
+ (_a = props.onTimeUpdate) === null || _a === void 0 ? void 0 : _a.call(props, detail);
114
+ emit('timeUpdate', detail);
115
+ };
116
+ const emitPlayback = (detail) => {
117
+ var _a;
118
+ (_a = props.onPlaybackChange) === null || _a === void 0 ? void 0 : _a.call(props, detail);
119
+ emit('playbackChange', detail);
120
+ };
121
+ const handle = {
122
+ play: () => __awaiter(this, void 0, void 0, function* () {
123
+ var _a;
124
+ const video = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__video;
125
+ if (!video) {
126
+ return;
127
+ }
128
+ yield video.play();
129
+ emitPlayback({ paused: false });
130
+ }),
131
+ pause: () => {
132
+ var _a;
133
+ const video = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__video;
134
+ video === null || video === void 0 ? void 0 : video.pause();
135
+ emitPlayback({ paused: true });
136
+ },
137
+ stop: () => {
138
+ var _a;
139
+ const video = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__video;
140
+ if (!video) {
141
+ return;
142
+ }
143
+ video.pause();
144
+ video.currentTime = 0;
145
+ emitPlayback({ paused: true });
146
+ emitTime({ currentTime: 0, duration: video.duration || 0 });
147
+ },
148
+ seek: (time) => {
149
+ var _a;
150
+ const video = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__video;
151
+ if (!video) {
152
+ return;
153
+ }
154
+ video.currentTime = clamp(time, 0, video.duration || time);
155
+ },
156
+ getCurrentTime: () => { var _a, _b, _c; return (_c = (_b = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__video) === null || _b === void 0 ? void 0 : _b.currentTime) !== null && _c !== void 0 ? _c : 0; },
157
+ getDuration: () => { var _a, _b, _c; return (_c = (_b = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__video) === null || _b === void 0 ? void 0 : _b.duration) !== null && _c !== void 0 ? _c : 0; },
158
+ isPaused: () => { var _a, _b, _c; return (_c = (_b = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__video) === null || _b === void 0 ? void 0 : _b.paused) !== null && _c !== void 0 ? _c : true; },
159
+ getOutputCanvas: () => { var _a, _b; return (_b = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__outputMirror) !== null && _b !== void 0 ? _b : null; },
160
+ startRecording: () => {
161
+ const host = hostRef.value;
162
+ const canvas = host === null || host === void 0 ? void 0 : host.__outputMirror;
163
+ if (!canvas || (host === null || host === void 0 ? void 0 : host.__recorder)) {
164
+ return;
165
+ }
166
+ const stream = canvas.captureStream(30);
167
+ const chunks = [];
168
+ host.__recordedChunks = chunks;
169
+ const recorder = new MediaRecorder(stream, { mimeType: pickRecorderMimeType() });
170
+ host.__recorder = recorder;
171
+ recorder.ondataavailable = (event) => {
172
+ if (event.data.size > 0) {
173
+ chunks.push(event.data);
174
+ }
175
+ };
176
+ recorder.start(200);
177
+ },
178
+ stopRecording: () => new Promise((resolve) => {
179
+ const host = hostRef.value;
180
+ const recorder = host === null || host === void 0 ? void 0 : host.__recorder;
181
+ if (!recorder || recorder.state === 'inactive') {
182
+ resolve(null);
183
+ return;
184
+ }
185
+ recorder.onstop = () => {
186
+ var _a;
187
+ const chunks = (_a = host === null || host === void 0 ? void 0 : host.__recordedChunks) !== null && _a !== void 0 ? _a : [];
188
+ if (host) {
189
+ host.__recorder = null;
190
+ host.__recordedChunks = [];
191
+ }
192
+ resolve(new Blob(chunks, { type: recorder.mimeType || 'video/webm' }));
193
+ };
194
+ recorder.stop();
195
+ }),
196
+ };
197
+ expose(handle);
198
+ function mountScene() {
199
+ var _a, _b, _c;
200
+ disposeScene === null || disposeScene === void 0 ? void 0 : disposeScene();
201
+ disposeScene = null;
202
+ const host = hostRef.value;
203
+ if (!host) {
204
+ return;
205
+ }
206
+ const sphereScene = new THREE.Scene();
207
+ sphereScene.background = new THREE.Color('#05080a');
208
+ const planetScene = new THREE.Scene();
209
+ planetScene.background = new THREE.Color('#05080a');
210
+ const camera = new THREE.PerspectiveCamera(60, 1, 0.1, 100);
211
+ camera.position.set(0, 0, 0.01);
212
+ const quadCamera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
213
+ const renderer = new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true });
214
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
215
+ renderer.domElement.className = 'rd-equirect-sphere-viewport__canvas';
216
+ host.appendChild(renderer.domElement);
217
+ const outputRenderer = new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true });
218
+ outputRenderer.setPixelRatio(1);
219
+ const outputMirror = outputRenderer.domElement;
220
+ outputMirror.className = 'rd-equirect-sphere-viewport__mirror';
221
+ outputMirror.setAttribute('aria-label', 'Output view (mirrors source)');
222
+ const outputHost = props.outputPreviewHost;
223
+ if (outputHost) {
224
+ outputHost.appendChild(outputMirror);
225
+ }
226
+ else {
227
+ outputMirror.hidden = true;
228
+ host.appendChild(outputMirror);
229
+ }
230
+ host.__outputMirror = outputMirror;
231
+ const resizeOutputMirror = () => {
232
+ var _a, _b;
233
+ const width = Math.max(2, Math.round((_a = props.outputWidth) !== null && _a !== void 0 ? _a : 1280));
234
+ const height = Math.max(2, Math.round((_b = props.outputHeight) !== null && _b !== void 0 ? _b : 720));
235
+ outputRenderer.setSize(width, height, false);
236
+ outputMirror.style.width = '100%';
237
+ outputMirror.style.height = 'auto';
238
+ outputMirror.style.aspectRatio = `${width} / ${height}`;
239
+ };
240
+ host.__resizeOutputMirror = resizeOutputMirror;
241
+ resizeOutputMirror();
242
+ const sphereMaterial = new THREE.MeshBasicMaterial({ color: 0x11181e, side: THREE.BackSide });
243
+ const sphere = new THREE.Mesh(new THREE.SphereGeometry(SPHERE_RADIUS, 64, 32), sphereMaterial);
244
+ sphereScene.add(sphere);
245
+ const planetUniforms = {
246
+ map: { value: null },
247
+ projectionMatrixInverse: { value: new THREE.Matrix4() },
248
+ cameraMatrixWorld: { value: new THREE.Matrix4() },
249
+ cameraOrigin: { value: new THREE.Vector3() },
250
+ viewRot: { value: new THREE.Matrix3() },
251
+ planetMix: { value: 0 },
252
+ planetSpread: { value: 0.35 },
253
+ aspect: { value: 1 },
254
+ flipInterior: { value: props.flipInterior === false ? 0 : 1 },
255
+ };
256
+ const planetMaterial = new THREE.ShaderMaterial({
257
+ uniforms: planetUniforms,
258
+ vertexShader: VIEWPORT_VERTEX_SHADER,
259
+ fragmentShader: VIEWPORT_FRAGMENT_SHADER,
260
+ });
261
+ planetScene.add(new THREE.Mesh(new THREE.PlaneGeometry(2, 2), planetMaterial));
262
+ let displayFov = clamp((_a = props.horizontalFov) !== null && _a !== void 0 ? _a : NORMAL_HFOV, MIN_HFOV, PLANET_MAX_HFOV);
263
+ let viewYaw = (_b = props.yaw) !== null && _b !== void 0 ? _b : 25;
264
+ let viewPitch = clamp((_c = props.pitch) !== null && _c !== void 0 ? _c : -8, MIN_PITCH, MAX_PITCH);
265
+ const bounds = () => {
266
+ var _a, _b;
267
+ return ({
268
+ min: (_a = props.minHorizontalFov) !== null && _a !== void 0 ? _a : MIN_HFOV,
269
+ max: (_b = props.maxHorizontalFov) !== null && _b !== void 0 ? _b : PLANET_MAX_HFOV,
270
+ });
271
+ };
272
+ const usePlanetRenderer = () => displayFov > PLANET_STEREO_START;
273
+ const applySphereCamera = (aspect) => {
274
+ applyYawPitch(camera, viewYaw, viewPitch);
275
+ setVerticalFovFromHorizontal(camera, displayFov, aspect, PLANET_STEREO_START);
276
+ };
277
+ const syncPlanetUniforms = (aspect) => {
278
+ applyYawPitch(camera, viewYaw, viewPitch);
279
+ setVerticalFovFromHorizontal(camera, PLANET_STEREO_START, aspect, PLANET_STEREO_START);
280
+ camera.updateMatrixWorld(true);
281
+ const planetMix = displayFovToPlanetMix(displayFov);
282
+ planetUniforms.projectionMatrixInverse.value.copy(camera.projectionMatrixInverse);
283
+ planetUniforms.cameraMatrixWorld.value.copy(camera.matrixWorld);
284
+ cameraOriginScratch.setFromMatrixPosition(camera.matrixWorld);
285
+ planetUniforms.cameraOrigin.value.copy(cameraOriginScratch);
286
+ viewRotMatrix4Scratch.extractRotation(camera.matrixWorld);
287
+ viewRotScratch.setFromMatrix4(viewRotMatrix4Scratch);
288
+ planetUniforms.viewRot.value.copy(viewRotScratch);
289
+ planetUniforms.planetMix.value = planetMix;
290
+ planetUniforms.planetSpread.value = planetMixToSpread(planetMix);
291
+ planetUniforms.aspect.value = aspect;
292
+ planetUniforms.flipInterior.value = props.flipInterior === false ? 0 : 1;
293
+ };
294
+ const emitCameraChange = () => {
295
+ if (applyingProps) {
296
+ return;
297
+ }
298
+ emitCamera({
299
+ yaw: viewYaw,
300
+ pitch: viewPitch,
301
+ horizontalFov: displayFov,
302
+ });
303
+ };
304
+ const zoomDisplayFov = (delta) => {
305
+ const { min, max } = bounds();
306
+ displayFov = clamp(displayFov + delta, min, max);
307
+ emitCameraChange();
308
+ };
309
+ const applyFovProp = () => {
310
+ var _a;
311
+ displayFov = clamp((_a = props.horizontalFov) !== null && _a !== void 0 ? _a : NORMAL_HFOV, bounds().min, bounds().max);
312
+ };
313
+ const applyOrientationProps = () => {
314
+ var _a, _b;
315
+ applyingProps = true;
316
+ viewYaw = (_a = props.yaw) !== null && _a !== void 0 ? _a : 25;
317
+ viewPitch = clamp((_b = props.pitch) !== null && _b !== void 0 ? _b : -8, MIN_PITCH, MAX_PITCH);
318
+ applyingProps = false;
319
+ };
320
+ const applyCameraProps = () => {
321
+ applyOrientationProps();
322
+ applyFovProp();
323
+ };
324
+ host.__applyFovProp = applyFovProp;
325
+ host.__applyOrientationProps = applyOrientationProps;
326
+ host.__applyCameraProps = applyCameraProps;
327
+ applyCameraProps();
328
+ const onWheel = (event) => {
329
+ event.preventDefault();
330
+ userInteracting = true;
331
+ const inPlanet = usePlanetRenderer();
332
+ const delta = event.ctrlKey
333
+ ? event.deltaY * (inPlanet ? 0.15 : 0.06)
334
+ : event.deltaY > 0
335
+ ? inPlanet
336
+ ? 8
337
+ : 3
338
+ : inPlanet
339
+ ? -8
340
+ : -3;
341
+ zoomDisplayFov(delta);
342
+ window.setTimeout(() => {
343
+ userInteracting = false;
344
+ }, 150);
345
+ };
346
+ let pinchDistance = 0;
347
+ const onTouchStart = (event) => {
348
+ if (event.touches.length === 2) {
349
+ userInteracting = true;
350
+ pinchDistance = touchDistance(event.touches);
351
+ }
352
+ };
353
+ const onTouchMove = (event) => {
354
+ if (event.touches.length !== 2 || pinchDistance <= 0) {
355
+ return;
356
+ }
357
+ event.preventDefault();
358
+ const nextDistance = touchDistance(event.touches);
359
+ const scale = nextDistance / pinchDistance;
360
+ if (Math.abs(scale - 1) > 0.01) {
361
+ const inPlanet = usePlanetRenderer();
362
+ zoomDisplayFov((1 - scale) * (inPlanet ? 40 : 18));
363
+ pinchDistance = nextDistance;
364
+ }
365
+ };
366
+ const onTouchEnd = () => {
367
+ pinchDistance = 0;
368
+ userInteracting = false;
369
+ };
370
+ let dragging = false;
371
+ let dragPointerId = -1;
372
+ let lastDragX = 0;
373
+ let lastDragY = 0;
374
+ const onPointerDown = (event) => {
375
+ if (event.button !== 0) {
376
+ return;
377
+ }
378
+ userInteracting = true;
379
+ dragging = true;
380
+ dragPointerId = event.pointerId;
381
+ lastDragX = event.clientX;
382
+ lastDragY = event.clientY;
383
+ renderer.domElement.setPointerCapture(event.pointerId);
384
+ };
385
+ const onPointerMove = (event) => {
386
+ if (!dragging || event.pointerId !== dragPointerId) {
387
+ return;
388
+ }
389
+ const deltaX = event.clientX - lastDragX;
390
+ const deltaY = event.clientY - lastDragY;
391
+ lastDragX = event.clientX;
392
+ lastDragY = event.clientY;
393
+ viewYaw -= deltaX * DRAG_SENSITIVITY;
394
+ viewPitch = clamp(viewPitch - deltaY * DRAG_SENSITIVITY, MIN_PITCH, MAX_PITCH);
395
+ emitCameraChange();
396
+ };
397
+ const endDrag = (event) => {
398
+ if (event.pointerId !== dragPointerId) {
399
+ return;
400
+ }
401
+ dragging = false;
402
+ dragPointerId = -1;
403
+ userInteracting = false;
404
+ if (renderer.domElement.hasPointerCapture(event.pointerId)) {
405
+ renderer.domElement.releasePointerCapture(event.pointerId);
406
+ }
407
+ };
408
+ renderer.domElement.addEventListener('wheel', onWheel, { passive: false });
409
+ renderer.domElement.addEventListener('touchstart', onTouchStart, { passive: true });
410
+ renderer.domElement.addEventListener('touchmove', onTouchMove, { passive: false });
411
+ renderer.domElement.addEventListener('touchend', onTouchEnd);
412
+ renderer.domElement.addEventListener('touchcancel', onTouchEnd);
413
+ renderer.domElement.addEventListener('pointerdown', onPointerDown);
414
+ renderer.domElement.addEventListener('pointermove', onPointerMove);
415
+ renderer.domElement.addEventListener('pointerup', endDrag);
416
+ renderer.domElement.addEventListener('pointercancel', endDrag);
417
+ renderer.domElement.addEventListener('lostpointercapture', endDrag);
418
+ let video = null;
419
+ let texture = null;
420
+ const notifyTime = () => {
421
+ if (!video) {
422
+ return;
423
+ }
424
+ emitTime({
425
+ currentTime: video.currentTime,
426
+ duration: Number.isFinite(video.duration) ? video.duration : 0,
427
+ });
428
+ };
429
+ const attachVideo = (src) => {
430
+ if (texture) {
431
+ texture.dispose();
432
+ texture = null;
433
+ }
434
+ if (video) {
435
+ video.pause();
436
+ video.removeAttribute('src');
437
+ video.load();
438
+ video.remove();
439
+ video = null;
440
+ }
441
+ video = document.createElement('video');
442
+ video.src = src;
443
+ video.crossOrigin = 'anonymous';
444
+ video.loop = false;
445
+ video.muted = true;
446
+ video.playsInline = true;
447
+ video.preload = 'auto';
448
+ video.addEventListener('loadedmetadata', notifyTime);
449
+ video.addEventListener('timeupdate', notifyTime);
450
+ video.addEventListener('play', () => emitPlayback({ paused: false }));
451
+ video.addEventListener('pause', () => emitPlayback({ paused: true }));
452
+ void video.play().catch(() => undefined);
453
+ host.__video = video;
454
+ texture = new THREE.VideoTexture(video);
455
+ texture.colorSpace = THREE.SRGBColorSpace;
456
+ applyInteriorTextureFlip(texture, props.flipInterior !== false);
457
+ sphereMaterial.map = texture;
458
+ sphereMaterial.color.set('#ffffff');
459
+ sphereMaterial.needsUpdate = true;
460
+ planetUniforms.map.value = texture;
461
+ };
462
+ if (props.videoSrc) {
463
+ attachVideo(props.videoSrc);
464
+ }
465
+ let aspect = 1;
466
+ const resize = () => {
467
+ const width = host.clientWidth || 1;
468
+ const height = host.clientHeight || 1;
469
+ renderer.setSize(width, height, false);
470
+ aspect = width / height;
471
+ if (usePlanetRenderer()) {
472
+ syncPlanetUniforms(aspect);
473
+ }
474
+ else {
475
+ applySphereCamera(aspect);
476
+ }
477
+ };
478
+ const resizeObserver = new ResizeObserver(resize);
479
+ resizeObserver.observe(host);
480
+ resize();
481
+ const renderFrame = (targetAspect, targetRenderer) => {
482
+ if (usePlanetRenderer()) {
483
+ syncPlanetUniforms(targetAspect);
484
+ targetRenderer.render(planetScene, quadCamera);
485
+ }
486
+ else {
487
+ applySphereCamera(targetAspect);
488
+ targetRenderer.render(sphereScene, camera);
489
+ }
490
+ };
491
+ let animationId = 0;
492
+ const tick = () => {
493
+ var _a, _b;
494
+ if (texture) {
495
+ texture.needsUpdate = true;
496
+ }
497
+ renderFrame(aspect, renderer);
498
+ const outputWidth = Math.max(2, Math.round((_a = props.outputWidth) !== null && _a !== void 0 ? _a : 1280));
499
+ const outputHeight = Math.max(2, Math.round((_b = props.outputHeight) !== null && _b !== void 0 ? _b : 720));
500
+ renderFrame(outputWidth / outputHeight, outputRenderer);
501
+ animationId = requestAnimationFrame(tick);
502
+ };
503
+ tick();
504
+ disposeScene = () => {
505
+ cancelAnimationFrame(animationId);
506
+ renderer.domElement.removeEventListener('wheel', onWheel);
507
+ renderer.domElement.removeEventListener('touchstart', onTouchStart);
508
+ renderer.domElement.removeEventListener('touchmove', onTouchMove);
509
+ renderer.domElement.removeEventListener('touchend', onTouchEnd);
510
+ renderer.domElement.removeEventListener('touchcancel', onTouchEnd);
511
+ renderer.domElement.removeEventListener('pointerdown', onPointerDown);
512
+ renderer.domElement.removeEventListener('pointermove', onPointerMove);
513
+ renderer.domElement.removeEventListener('pointerup', endDrag);
514
+ renderer.domElement.removeEventListener('pointercancel', endDrag);
515
+ renderer.domElement.removeEventListener('lostpointercapture', endDrag);
516
+ resizeObserver.disconnect();
517
+ if (texture) {
518
+ texture.dispose();
519
+ }
520
+ if (video) {
521
+ video.removeEventListener('loadedmetadata', notifyTime);
522
+ video.removeEventListener('timeupdate', notifyTime);
523
+ video.pause();
524
+ video.removeAttribute('src');
525
+ video.load();
526
+ video.remove();
527
+ }
528
+ host.__video = null;
529
+ host.__outputMirror = null;
530
+ sphere.geometry.dispose();
531
+ sphereMaterial.dispose();
532
+ planetMaterial.dispose();
533
+ renderer.dispose();
534
+ outputRenderer.dispose();
535
+ renderer.domElement.remove();
536
+ outputMirror.remove();
537
+ };
538
+ }
539
+ onMounted(() => {
540
+ watch(() => [props.videoSrc, props.flipInterior, props.outputPreviewHost], () => mountScene(), { immediate: true, flush: 'post' });
541
+ watch(() => [props.yaw, props.pitch, props.horizontalFov], () => {
542
+ var _a, _b;
543
+ const host = hostRef.value;
544
+ (_a = host === null || host === void 0 ? void 0 : host.__applyFovProp) === null || _a === void 0 ? void 0 : _a.call(host);
545
+ if (!userInteracting) {
546
+ (_b = host === null || host === void 0 ? void 0 : host.__applyOrientationProps) === null || _b === void 0 ? void 0 : _b.call(host);
547
+ }
548
+ });
549
+ watch(() => [props.outputWidth, props.outputHeight], () => {
550
+ var _a, _b;
551
+ (_b = (_a = hostRef.value) === null || _a === void 0 ? void 0 : _a.__resizeOutputMirror) === null || _b === void 0 ? void 0 : _b.call(_a);
552
+ });
553
+ });
554
+ onBeforeUnmount(() => {
555
+ disposeScene === null || disposeScene === void 0 ? void 0 : disposeScene();
556
+ disposeScene = null;
557
+ });
558
+ return () => {
559
+ const rootClass = [
560
+ 'rd-equirect-sphere-viewport',
561
+ props.className,
562
+ typeof attrs.class === 'string' ? attrs.class : '',
563
+ ]
564
+ .filter(Boolean)
565
+ .join(' ');
566
+ return h('div', {
567
+ ref: hostRef,
568
+ class: rootClass,
569
+ style: props.style,
570
+ 'data-testid': 'rd-equirect-sphere-viewport',
571
+ 'aria-label': 'Equirect sphere authoring view',
572
+ });
573
+ };
574
+ },
575
+ });
576
+ //# sourceMappingURL=equirect-sphere-viewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equirect-sphere-viewport.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/media/equirect-sphere-viewport/equirect-sphere-viewport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { EquirectSphereViewportHandle, EquirectSphereViewportProps, EquirectSphereCameraChange, EquirectSphereViewportComponent, } from './equirect-sphere-viewport';
2
+ export { EquirectSphereViewport } from './equirect-sphere-viewport';
@@ -0,0 +1,2 @@
1
+ export { EquirectSphereViewport } from './equirect-sphere-viewport';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/vue/src/visual/media/equirect-sphere-viewport/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Unified equirect viewport: rectilinear (Three.js unproject) blended to stereographic
3
+ * little-planet. Yaw/pitch define the projection center (center of attention).
4
+ */
5
+ export declare const VIEWPORT_VERTEX_SHADER = "\nvarying vec2 vNdc;\nvoid main() {\n vNdc = position.xy;\n gl_Position = vec4(position.xy, 0.0, 1.0);\n}\n";
6
+ export declare const VIEWPORT_FRAGMENT_SHADER = "\nprecision highp float;\n\nuniform sampler2D map;\nuniform mat4 projectionMatrixInverse;\nuniform mat4 cameraMatrixWorld;\nuniform vec3 cameraOrigin;\nuniform mat3 viewRot;\nuniform float planetMix;\nuniform float planetSpread;\nuniform float aspect;\nuniform float flipInterior;\n\nvarying vec2 vNdc;\n\nconst float PI = 3.141592653589793;\n\nvec3 cameraWorldRay(vec2 ndc) {\n vec4 clip = vec4(ndc.x, ndc.y, 0.5, 1.0);\n vec4 view = projectionMatrixInverse * clip;\n view /= view.w;\n vec4 world = cameraMatrixWorld * view;\n return normalize(world.xyz - cameraOrigin);\n}\n\n/** Stereographic disk in camera space; center = look direction (0,0,-1). */\nvec3 stereographicLocal(vec2 ndc) {\n vec2 p = ndc * planetSpread;\n float r2 = dot(p, p);\n return vec3(2.0 * p.x, 2.0 * p.y, r2 - 1.0) / (1.0 + r2);\n}\n\n/** Match Three.js SphereGeometry UV + horizontal flip used on interior sphere. */\nvec2 equirectUv(vec3 dir) {\n vec3 d = normalize(dir);\n float theta = acos(clamp(d.y, -1.0, 1.0));\n float phi = atan(d.z, -d.x);\n float u = phi / (2.0 * PI) + 0.5;\n float v = 1.0 - theta / PI;\n if (flipInterior > 0.5) {\n u = 1.0 - u;\n }\n return vec2(u, v);\n}\n\nvoid main() {\n vec2 ndc = vNdc;\n ndc.x *= aspect;\n\n float mixAmt = clamp(planetMix, 0.0, 1.0);\n vec3 dirRect = cameraWorldRay(ndc);\n vec3 dirStereo = viewRot * stereographicLocal(ndc);\n vec3 dir = normalize(mix(dirRect, dirStereo, mixAmt));\n\n gl_FragColor = texture2D(map, equirectUv(dir));\n}\n";