senangwebs-tour 1.0.6 → 1.0.7
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.
- package/README.md +21 -9
- package/dist/swt-editor.js +145 -174
- package/dist/swt-editor.js.map +1 -1
- package/dist/swt-editor.min.js +1 -1
- package/dist/swt.js +31 -2
- package/dist/swt.js.map +1 -1
- package/dist/swt.min.js +1 -1
- package/package.json +1 -1
- package/src/editor/js/data-transform.js +42 -0
- package/src/editor/js/editor.js +7 -6
- package/src/editor/js/export-manager.js +5 -67
- package/src/editor/js/hotspot-editor.js +36 -10
- package/src/editor/js/preview-controller.js +8 -62
- package/src/editor/js/scene-manager.js +9 -8
- package/src/editor/js/storage-manager.js +4 -2
- package/src/editor/js/ui-controller.js +35 -21
- package/src/index.js +31 -2
package/dist/swt-editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swt-editor.js","sources":["../src/editor/js/utils.js","../src/editor/js/storage-manager.js","../src/editor/js/scene-manager.js","../src/editor/js/hotspot-editor.js","../src/editor/js/preview-controller.js","../src/editor/js/ui-controller.js","../src/IconRenderer.js","../src/editor/js/export-manager.js","../src/editor/js/editor.js","../src/editor/js/ui-init.js","../src/editor/editor-entry.js"],"sourcesContent":["// Utility Functions\r\n\r\n/**\r\n * Generate a unique ID\r\n */\r\nfunction generateId(prefix = 'id') {\r\n return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n}\r\n\r\n/**\r\n * Sanitize string for use as ID\r\n */\r\nfunction sanitizeId(str) {\r\n return str.toLowerCase()\r\n .replace(/[^a-z0-9]+/g, '_')\r\n .replace(/^_+|_+$/g, '');\r\n}\r\n\r\n/**\r\n * Generate thumbnail from image file\r\n */\r\nasync function generateThumbnail(file, maxWidth = 200, maxHeight = 150) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n \r\n reader.onload = (e) => {\r\n const img = new Image();\r\n \r\n img.onload = () => {\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n \r\n let width = img.width;\r\n let height = img.height;\r\n \r\n if (width > height) {\r\n if (width > maxWidth) {\r\n height *= maxWidth / width;\r\n width = maxWidth;\r\n }\r\n } else {\r\n if (height > maxHeight) {\r\n width *= maxHeight / height;\r\n height = maxHeight;\r\n }\r\n }\r\n \r\n canvas.width = width;\r\n canvas.height = height;\r\n ctx.drawImage(img, 0, 0, width, height);\r\n \r\n resolve(canvas.toDataURL('image/jpeg', 0.7));\r\n };\r\n \r\n img.onerror = reject;\r\n img.src = e.target.result;\r\n };\r\n \r\n reader.onerror = reject;\r\n reader.readAsDataURL(file);\r\n });\r\n}\r\n\r\n/**\r\n * Load image file as data URL\r\n */\r\nasync function loadImageAsDataUrl(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => resolve(e.target.result);\r\n reader.onerror = reject;\r\n reader.readAsDataURL(file);\r\n });\r\n}\r\n\r\n/**\r\n * Show toast notification\r\n */\r\nfunction showToast(message, type = 'info', duration = 3000) {\r\n const toast = document.getElementById('toast');\r\n toast.textContent = message;\r\n toast.className = `toast ${type}`;\r\n toast.classList.add('show');\r\n \r\n setTimeout(() => {\r\n toast.classList.remove('show');\r\n }, duration);\r\n}\r\n\r\n/**\r\n * Show modal\r\n */\r\nfunction showModal(modalId) {\r\n const modal = document.getElementById(modalId);\r\n if (modal) {\r\n modal.classList.add('show');\r\n }\r\n}\r\n\r\n/**\r\n * Hide modal\r\n */\r\nfunction hideModal(modalId) {\r\n const modal = document.getElementById(modalId);\r\n if (modal) {\r\n modal.classList.remove('show');\r\n }\r\n}\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatFileSize(bytes) {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * Download text as file\r\n */\r\nfunction downloadTextAsFile(text, filename) {\r\n const blob = new Blob([text], { type: 'text/plain' });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n}\r\n\r\n/**\r\n * Copy text to clipboard\r\n */\r\nasync function copyToClipboard(text) {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch (err) {\r\n // Fallback for older browsers\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.style.position = 'fixed';\r\n textarea.style.opacity = '0';\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n const success = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return success;\r\n }\r\n}\r\n\r\n/**\r\n * Debounce function\r\n */\r\nfunction debounce(func, wait) {\r\n let timeout;\r\n return function executedFunction(...args) {\r\n const later = () => {\r\n clearTimeout(timeout);\r\n func(...args);\r\n };\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n };\r\n}\r\n\r\n/**\r\n * Convert position object to string\r\n */\r\nfunction positionToString(pos) {\r\n return `${pos.x.toFixed(1)} ${pos.y.toFixed(1)} ${pos.z.toFixed(1)}`;\r\n}\r\n\r\n/**\r\n * Parse position string to object\r\n */\r\nfunction parsePosition(str) {\r\n const parts = str.split(' ').map(Number);\r\n return { x: parts[0] || 0, y: parts[1] || 0, z: parts[2] || 0 };\r\n}\r\n\r\n/**\r\n * Validate email\r\n */\r\nfunction isValidEmail(email) {\r\n const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return re.test(email);\r\n}\r\n\r\n/**\r\n * Deep clone object\r\n */\r\nfunction deepClone(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\nexport {\r\n generateId,\r\n sanitizeId,\r\n generateThumbnail,\r\n loadImageAsDataUrl,\r\n showToast,\r\n showModal,\r\n hideModal,\r\n formatFileSize,\r\n downloadTextAsFile,\r\n copyToClipboard,\r\n debounce,\r\n positionToString,\r\n parsePosition,\r\n isValidEmail,\r\n deepClone\r\n};\r\n","// Storage Manager - Handles LocalStorage operations\r\nimport { downloadTextAsFile, showToast } from \"./utils.js\";\r\n\r\nclass ProjectStorageManager {\r\n constructor() {\r\n this.storageKey = \"swt_project\";\r\n this.autoSaveInterval = null;\r\n this.autoSaveDelay = 30000; // 30 seconds\r\n }\r\n\r\n /**\r\n * Save project to localStorage\r\n */\r\n saveProject(projectData) {\r\n try {\r\n const json = JSON.stringify(projectData);\r\n localStorage.setItem(this.storageKey, json);\r\n localStorage.setItem(\r\n this.storageKey + \"_lastSaved\",\r\n new Date().toISOString()\r\n );\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to save project:\", error);\r\n if (error.name === \"QuotaExceededError\") {\r\n showToast(\"Storage quota exceeded. Project too large!\", \"error\");\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Load project from localStorage\r\n */\r\n loadProject() {\r\n try {\r\n const json = localStorage.getItem(this.storageKey);\r\n if (json) {\r\n const projectData = JSON.parse(json);\r\n\r\n // Validate and migrate data if needed\r\n if (!this.validateProjectData(projectData)) {\r\n console.error(\"Invalid project data structure\");\r\n return null;\r\n }\r\n\r\n return projectData;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error(\"Failed to load project:\", error);\r\n showToast(\"Failed to load project\", \"error\");\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Validate project data structure\r\n */\r\n validateProjectData(projectData) {\r\n if (!projectData || typeof projectData !== \"object\") {\r\n return false;\r\n }\r\n\r\n // Check if scenes array exists and is valid\r\n if (!projectData.scenes || !Array.isArray(projectData.scenes)) {\r\n return false;\r\n }\r\n\r\n // Validate each scene has required properties\r\n for (const scene of projectData.scenes) {\r\n if (!scene || typeof scene !== \"object\") {\r\n return false;\r\n }\r\n\r\n // Required scene properties\r\n if (!scene.id || typeof scene.id !== \"string\") {\r\n return false;\r\n }\r\n\r\n // imageUrl is required for scenes to be valid\r\n if (!scene.imageUrl || typeof scene.imageUrl !== \"string\") {\r\n return false;\r\n }\r\n\r\n // Hotspots array should exist (can be empty)\r\n if (!Array.isArray(scene.hotspots)) {\r\n scene.hotspots = []; // Auto-fix missing hotspots array\r\n }\r\n }\r\n\r\n // Ensure config exists\r\n if (!projectData.config || typeof projectData.config !== \"object\") {\r\n projectData.config = { title: \"My Virtual Tour\" };\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Clear project from localStorage\r\n */\r\n clearProject() {\r\n try {\r\n localStorage.removeItem(this.storageKey);\r\n localStorage.removeItem(this.storageKey + \"_lastSaved\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to clear project:\", error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if project exists in localStorage\r\n */\r\n hasProject() {\r\n return localStorage.getItem(this.storageKey) !== null;\r\n }\r\n\r\n /**\r\n * Get last saved date\r\n */\r\n getLastSavedDate() {\r\n const dateStr = localStorage.getItem(this.storageKey + \"_lastSaved\");\r\n return dateStr ? new Date(dateStr) : null;\r\n }\r\n\r\n /**\r\n * Start auto-save\r\n */\r\n startAutoSave(callback) {\r\n this.stopAutoSave();\r\n this.autoSaveInterval = setInterval(() => {\r\n callback();\r\n }, this.autoSaveDelay);\r\n }\r\n\r\n /**\r\n * Stop auto-save\r\n */\r\n stopAutoSave() {\r\n if (this.autoSaveInterval) {\r\n clearInterval(this.autoSaveInterval);\r\n this.autoSaveInterval = null;\r\n }\r\n }\r\n\r\n /**\r\n * Export project to file\r\n */\r\n exportToFile(projectData, filename = \"tour.json\") {\r\n try {\r\n const json = JSON.stringify(projectData, null, 2);\r\n downloadTextAsFile(json, filename);\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to export project:\", error);\r\n showToast(\"Failed to export project\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Import project from file\r\n */\r\n async importFromFile(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = (e) => {\r\n try {\r\n const projectData = JSON.parse(e.target.result);\r\n resolve(projectData);\r\n } catch (error) {\r\n console.error(\"Failed to parse project file:\", error);\r\n showToast(\"Invalid project file\", \"error\");\r\n reject(error);\r\n }\r\n };\r\n\r\n reader.onerror = () => {\r\n console.error(\"Failed to read file:\", reader.error);\r\n showToast(\"Failed to read file\", \"error\");\r\n reject(reader.error);\r\n };\r\n\r\n reader.readAsText(file);\r\n });\r\n }\r\n}\r\n\r\nexport default ProjectStorageManager;\r\n","// Scene Manager - Handles scene operations\r\nimport {\r\n generateThumbnail,\r\n loadImageAsDataUrl,\r\n sanitizeId,\r\n showToast,\r\n} from \"./utils.js\";\r\n\r\nclass SceneManagerEditor {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.scenes = [];\r\n this.currentSceneIndex = -1;\r\n }\r\n\r\n /**\r\n * Add new scene\r\n * @param {File|Object} fileOrConfig - Either a File object or a scene config object\r\n * @param {string} fileOrConfig.id - Scene ID (if config object)\r\n * @param {string} fileOrConfig.name - Scene name (if config object)\r\n * @param {string} fileOrConfig.imageUrl - Image URL (if config object)\r\n * @param {string} fileOrConfig.thumbnail - Thumbnail URL (if config object)\r\n * @param {Array} fileOrConfig.hotspots - Hotspots array (if config object)\r\n */\r\n async addScene(fileOrConfig) {\r\n try {\r\n let scene;\r\n\r\n // Check if it's a File/Blob or a config object\r\n if (fileOrConfig instanceof File || fileOrConfig instanceof Blob) {\r\n // Original behavior: handle File upload\r\n const thumbnail = await generateThumbnail(fileOrConfig);\r\n const imageDataUrl = await loadImageAsDataUrl(fileOrConfig);\r\n\r\n scene = {\r\n id: sanitizeId(fileOrConfig.name.replace(/\\.[^/.]+$/, \"\")),\r\n name: fileOrConfig.name.replace(/\\.[^/.]+$/, \"\"),\r\n imageUrl: imageDataUrl,\r\n thumbnail: thumbnail,\r\n hotspots: [],\r\n };\r\n } else if (typeof fileOrConfig === \"object\" && fileOrConfig !== null) {\r\n // Handle config object with URL strings\r\n scene = {\r\n id: fileOrConfig.id || sanitizeId(`scene-${Date.now()}`),\r\n name: fileOrConfig.name || \"Untitled Scene\",\r\n imageUrl: fileOrConfig.imageUrl || \"\",\r\n thumbnail: fileOrConfig.thumbnail || fileOrConfig.imageUrl || \"\",\r\n hotspots: fileOrConfig.hotspots || [],\r\n ...(fileOrConfig.startingPosition && { startingPosition: fileOrConfig.startingPosition }),\r\n };\r\n } else {\r\n throw new Error(\"Invalid argument: expected File, Blob, or scene config object\");\r\n }\r\n\r\n this.scenes.push(scene);\r\n this.currentSceneIndex = this.scenes.length - 1;\r\n showToast(`Scene \"${scene.name}\" added successfully`, \"success\");\r\n return scene;\r\n } catch (error) {\r\n console.error(\"Failed to add scene:\", error);\r\n showToast(\"Failed to add scene\", \"error\");\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Remove scene by index\r\n */\r\n removeScene(index) {\r\n if (index >= 0 && index < this.scenes.length) {\r\n const scene = this.scenes[index];\r\n\r\n // Confirm deletion\r\n if (!confirm(`Are you sure you want to delete scene \"${scene.name}\"?`)) {\r\n return false;\r\n }\r\n\r\n this.scenes.splice(index, 1);\r\n\r\n // Update current scene index\r\n if (this.currentSceneIndex === index) {\r\n this.currentSceneIndex = Math.min(\r\n this.currentSceneIndex,\r\n this.scenes.length - 1\r\n );\r\n } else if (this.currentSceneIndex > index) {\r\n this.currentSceneIndex--;\r\n }\r\n\r\n showToast(`Scene \"${scene.name}\" removed`, \"success\");\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get scene by index\r\n */\r\n getScene(index) {\r\n return this.scenes[index] || null;\r\n }\r\n\r\n /**\r\n * Get scene by ID\r\n */\r\n getSceneById(id) {\r\n return this.scenes.find((s) => s.id === id) || null;\r\n }\r\n\r\n /**\r\n * Update scene property\r\n */\r\n updateScene(index, property, value) {\r\n if (index >= 0 && index < this.scenes.length) {\r\n this.scenes[index][property] = value;\r\n\r\n // If updating ID, update all hotspot target references\r\n if (property === \"id\") {\r\n this.scenes.forEach((scene) => {\r\n scene.hotspots.forEach((hotspot) => {\r\n if (hotspot.targetSceneId === this.scenes[index].id) {\r\n hotspot.targetSceneId = value;\r\n }\r\n });\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Reorder scenes\r\n */\r\n reorderScenes(fromIndex, toIndex) {\r\n if (\r\n fromIndex >= 0 &&\r\n fromIndex < this.scenes.length &&\r\n toIndex >= 0 &&\r\n toIndex < this.scenes.length\r\n ) {\r\n const scene = this.scenes.splice(fromIndex, 1)[0];\r\n this.scenes.splice(toIndex, 0, scene);\r\n\r\n // Update current scene index\r\n if (this.currentSceneIndex === fromIndex) {\r\n this.currentSceneIndex = toIndex;\r\n } else if (\r\n fromIndex < this.currentSceneIndex &&\r\n toIndex >= this.currentSceneIndex\r\n ) {\r\n this.currentSceneIndex--;\r\n } else if (\r\n fromIndex > this.currentSceneIndex &&\r\n toIndex <= this.currentSceneIndex\r\n ) {\r\n this.currentSceneIndex++;\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get current scene\r\n */\r\n getCurrentScene() {\r\n return this.getScene(this.currentSceneIndex);\r\n }\r\n\r\n /**\r\n * Set current scene by index\r\n */\r\n setCurrentScene(index) {\r\n if (index >= 0 && index < this.scenes.length) {\r\n this.currentSceneIndex = index;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get all scenes\r\n */\r\n getAllScenes() {\r\n return this.scenes;\r\n }\r\n\r\n /**\r\n * Get all scenes (alias for getAllScenes)\r\n */\r\n getScenes() {\r\n return this.scenes;\r\n }\r\n\r\n /**\r\n * Clear all scenes\r\n */\r\n clearScenes() {\r\n if (this.scenes.length > 0) {\r\n if (!confirm(\"Are you sure you want to clear all scenes?\")) {\r\n return false;\r\n }\r\n }\r\n\r\n this.scenes = [];\r\n this.currentSceneIndex = -1;\r\n return true;\r\n }\r\n\r\n /**\r\n * Load scenes from data\r\n */\r\n loadScenes(scenesData) {\r\n this.scenes = scenesData || [];\r\n this.currentSceneIndex = this.scenes.length > 0 ? 0 : -1;\r\n }\r\n}\r\n\r\nexport default SceneManagerEditor;\r\n","// Hotspot Editor - Handles hotspot placement and editing\r\nimport { generateId, showToast } from './utils.js';\r\n\r\nclass HotspotEditor {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.currentHotspotIndex = -1;\r\n }\r\n\r\n /**\r\n * Add hotspot at position\r\n * @param {Object} position - The 3D position {x, y, z}\r\n * @param {string} targetSceneId - Target scene ID for navigation\r\n * @param {Object} cameraOrientation - Camera orientation at creation {pitch, yaw} in radians\r\n */\r\n addHotspot(position, targetSceneId = '', cameraOrientation = null) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('No scene selected', 'error');\r\n return null;\r\n }\r\n\r\n const hotspot = {\r\n id: generateId('hotspot'),\r\n type: 'navigation',\r\n position: position,\r\n cameraOrientation: cameraOrientation, // Store camera pitch/yaw for reliable pointing\r\n targetSceneId: targetSceneId,\r\n title: 'New Hotspot',\r\n description: '',\r\n color: '#00ff00',\r\n icon: '',\r\n scale: '1 1 1'\r\n };\r\n\r\n scene.hotspots.push(hotspot);\r\n this.currentHotspotIndex = scene.hotspots.length - 1;\r\n \r\n showToast('Hotspot added', 'success');\r\n \r\n return hotspot;\r\n }\r\n\r\n /**\r\n * Remove hotspot\r\n */\r\n removeHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return false;\r\n }\r\n\r\n if (!confirm('Are you sure you want to delete this hotspot?')) {\r\n return false;\r\n }\r\n\r\n scene.hotspots.splice(index, 1);\r\n \r\n // Update current index\r\n if (this.currentHotspotIndex === index) {\r\n this.currentHotspotIndex = -1;\r\n } else if (this.currentHotspotIndex > index) {\r\n this.currentHotspotIndex--;\r\n }\r\n\r\n showToast('Hotspot removed', 'success');\r\n return true;\r\n }\r\n\r\n /**\r\n * Update hotspot property\r\n */\r\n updateHotspot(index, property, value) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return false;\r\n }\r\n\r\n scene.hotspots[index][property] = value;\r\n return true;\r\n }\r\n\r\n /**\r\n * Get hotspot by index\r\n */\r\n getHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return null;\r\n }\r\n return scene.hotspots[index];\r\n }\r\n\r\n /**\r\n * Update hotspot position\r\n */\r\n updateHotspotPosition(index, position) {\r\n return this.updateHotspot(index, 'position', position);\r\n }\r\n\r\n /**\r\n * Get current hotspot\r\n */\r\n getCurrentHotspot() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || this.currentHotspotIndex < 0) {\r\n return null;\r\n }\r\n return scene.hotspots[this.currentHotspotIndex] || null;\r\n }\r\n\r\n /**\r\n * Set current hotspot\r\n */\r\n setCurrentHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n this.currentHotspotIndex = -1;\r\n return false;\r\n }\r\n \r\n this.currentHotspotIndex = index;\r\n return true;\r\n }\r\n\r\n /**\r\n * Get all hotspots for current scene\r\n */\r\n getAllHotspots() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n return scene ? scene.hotspots : [];\r\n }\r\n\r\n /**\r\n * Duplicate hotspot\r\n */\r\n duplicateHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return null;\r\n }\r\n\r\n const original = scene.hotspots[index];\r\n const duplicate = deepClone(original);\r\n duplicate.id = generateId('hotspot');\r\n duplicate.title = original.title + ' (Copy)';\r\n \r\n // Offset position slightly\r\n duplicate.position = {\r\n x: original.position.x + 0.5,\r\n y: original.position.y,\r\n z: original.position.z\r\n };\r\n \r\n // Clear camera orientation since position changed - will fallback to position-based calculation\r\n duplicate.cameraOrientation = null;\r\n\r\n scene.hotspots.push(duplicate);\r\n this.currentHotspotIndex = scene.hotspots.length - 1;\r\n \r\n showToast('Hotspot duplicated', 'success');\r\n return duplicate;\r\n }\r\n\r\n /**\r\n * Clear all hotspots\r\n */\r\n clearAllHotspots() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n return false;\r\n }\r\n\r\n if (scene.hotspots.length === 0) {\r\n return true;\r\n }\r\n\r\n if (!confirm('Are you sure you want to remove all hotspots from this scene?')) {\r\n return false;\r\n }\r\n\r\n scene.hotspots = [];\r\n this.currentHotspotIndex = -1;\r\n \r\n showToast('All hotspots removed', 'success');\r\n return true;\r\n }\r\n}\r\n\r\nexport default HotspotEditor;\r\n","// Preview Controller - Manages A-Frame preview integration using SWT library\r\nimport { showToast } from \"./utils.js\";\r\n\r\nclass PreviewController {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.tour = null;\r\n this.isInitialized = false;\r\n this.previewContainer = null;\r\n this.hasLoadedScene = false; // Track if we've ever loaded a scene\r\n }\r\n\r\n /**\r\n * Initialize A-Frame preview\r\n */\r\n async init() {\r\n this.previewContainer = document.getElementById(\"preview\");\r\n if (!this.previewContainer) {\r\n console.error(\"Preview element not found\");\r\n return false;\r\n }\r\n\r\n // Wait for A-Frame to be loaded\r\n if (typeof AFRAME === \"undefined\") {\r\n await this.waitForLibrary(\"AFRAME\", 5000);\r\n }\r\n\r\n // Wait for SWT library to be loaded\r\n if (typeof SWT === \"undefined\") {\r\n await this.waitForLibrary(\"SWT\", 5000);\r\n }\r\n this.isInitialized = true;\r\n return true;\r\n }\r\n\r\n /**\r\n * Wait for a global library to be available\r\n */\r\n async waitForLibrary(libraryName, timeout = 5000) {\r\n const startTime = Date.now();\r\n\r\n while (typeof window[libraryName] === \"undefined\") {\r\n if (Date.now() - startTime > timeout) {\r\n throw new Error(`Timeout waiting for ${libraryName} to load`);\r\n }\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n }\r\n }\r\n\r\n /**\r\n * Load scene into preview using SWT library\r\n */\r\n async loadScene(scene, preserveCameraRotation = true) {\r\n if (!this.isInitialized || !scene) {\r\n return;\r\n }\r\n\r\n // Validate scene has required data\r\n if (!scene.imageUrl || !scene.id) {\r\n console.error(\"Invalid scene data:\", scene);\r\n return;\r\n }\r\n\r\n // Show loading animation\r\n this.showLoading();\r\n\r\n // Save camera rotation before destroying scene\r\n let savedRotation = null;\r\n if (preserveCameraRotation && this.tour) {\r\n savedRotation = this.getCameraRotation();\r\n }\r\n\r\n // Destroy existing tour if any\r\n if (this.tour) {\r\n try {\r\n this.tour.destroy();\r\n } catch (error) {\r\n console.error(\"Error destroying tour:\", error);\r\n }\r\n this.tour = null;\r\n }\r\n\r\n // Clear preview container carefully\r\n // Only do complex cleanup if we've actually loaded a scene before\r\n if (this.hasLoadedScene) {\r\n const existingScene = this.previewContainer.querySelector(\"a-scene\");\r\n if (existingScene) {\r\n try {\r\n // Remove the scene element - A-Frame will handle cleanup if it's ready\r\n this.previewContainer.removeChild(existingScene);\r\n } catch (error) {\r\n console.error(\"Error removing scene:\", error);\r\n }\r\n }\r\n\r\n // Clear any remaining children (loading overlays, empty state, etc)\r\n while (this.previewContainer.firstChild) {\r\n this.previewContainer.removeChild(this.previewContainer.firstChild);\r\n }\r\n } else {\r\n // First load - only remove non-A-Frame elements (like empty state divs)\r\n const children = Array.from(this.previewContainer.children);\r\n children.forEach((child) => {\r\n // Only remove if it's NOT an a-scene (shouldn't be any, but be safe)\r\n if (child.tagName.toLowerCase() !== \"a-scene\") {\r\n this.previewContainer.removeChild(child);\r\n }\r\n });\r\n }\r\n\r\n // Create loading overlay (will be removed after scene loads)\r\n const loadingOverlay = this.createLoadingOverlay();\r\n this.previewContainer.appendChild(loadingOverlay);\r\n\r\n // Create A-Frame scene\r\n const aframeScene = document.createElement(\"a-scene\");\r\n aframeScene.id = \"preview-scene\";\r\n aframeScene.setAttribute(\"embedded\", \"\");\r\n aframeScene.setAttribute(\"vr-mode-ui\", \"enabled: false;\");\r\n this.previewContainer.appendChild(aframeScene);\r\n\r\n // Give A-Frame a moment to start initializing before we proceed\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n\r\n // Build tour config for this single scene\r\n // Transform editor scene format to library format\r\n const transformedHotspots = (scene.hotspots || []).map((h) => ({\r\n id: h.id,\r\n position: h.position,\r\n action: {\r\n type: h.type === \"navigation\" ? \"navigateTo\" : h.type,\r\n target: h.targetSceneId,\r\n },\r\n appearance: {\r\n color: h.color || \"#00ff00\",\r\n icon: h.icon || null,\r\n scale: h.scale || \"1 1 1\",\r\n },\r\n tooltip: {\r\n text: h.title || \"Hotspot\",\r\n },\r\n }));\r\n\r\n const libraryScene = {\r\n id: scene.id,\r\n name: scene.name,\r\n panorama: scene.imageUrl, // Editor uses 'imageUrl', library expects 'panorama'\r\n hotspots: transformedHotspots,\r\n };\r\n\r\n // Build scenes object with ALL scenes (for navigation to work)\r\n const allScenes = {};\r\n const editorScenes = this.editor.sceneManager.scenes || [];\r\n editorScenes.forEach((s) => {\r\n const sceneHotspots = (s.hotspots || []).map((h) => ({\r\n id: h.id,\r\n position: h.position,\r\n action: {\r\n type: h.type === \"navigation\" ? \"navigateTo\" : h.type,\r\n target: h.targetSceneId,\r\n },\r\n appearance: {\r\n color: h.color || \"#00ff00\",\r\n icon: h.icon || null,\r\n scale: h.scale || \"1 1 1\",\r\n },\r\n tooltip: {\r\n text: h.title || \"Hotspot\",\r\n },\r\n }));\r\n\r\n allScenes[s.id] = {\r\n id: s.id,\r\n name: s.name,\r\n panorama: s.imageUrl,\r\n hotspots: sceneHotspots,\r\n startingPosition: s.startingPosition || null,\r\n };\r\n });\r\n\r\n const tourConfig = {\r\n title: scene.name,\r\n initialScene: scene.id,\r\n scenes: allScenes,\r\n };\r\n\r\n try {\r\n // Create new tour instance\r\n this.tour = new SWT.Tour(aframeScene, tourConfig);\r\n\r\n // Set up event listeners\r\n this.tour.addEventListener(\"tour-started\", (e) => {});\r\n\r\n this.tour.addEventListener(\"scene-loaded\", (e) => {});\r\n\r\n this.tour.addEventListener(\"hotspot-activated\", (e) => {\r\n // Find the hotspot index by ID and select it\r\n const hotspotId = e.detail?.hotspotId;\r\n if (hotspotId) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (scene) {\r\n const hotspotIndex = scene.hotspots.findIndex(\r\n (h) => h.id === hotspotId\r\n );\r\n if (hotspotIndex >= 0) {\r\n this.editor.selectHotspot(hotspotIndex);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Start the tour\r\n await this.tour.start();\r\n\r\n // Mark that we've successfully loaded a scene\r\n this.hasLoadedScene = true;\r\n\r\n // Hide loading animation after scene loads\r\n this.hideLoading();\r\n\r\n // Handle camera rotation after scene loads\r\n if (savedRotation && preserveCameraRotation) {\r\n // Restore previous camera rotation\r\n this.setCameraRotation(savedRotation);\r\n } else if (scene.startingPosition) {\r\n // Set camera to scene's starting position immediately\r\n this.setCameraRotation({\r\n x: scene.startingPosition.pitch,\r\n y: scene.startingPosition.yaw,\r\n z: 0\r\n });\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to load preview:\", error);\r\n showToast(\"Failed to load preview: \" + error.message, \"error\");\r\n // Hide loading on error\r\n this.hideLoading();\r\n }\r\n }\r\n\r\n /**\r\n * Get the current cursor intersection point with the sky sphere.\r\n * Raycasts from the camera center (where the A-Cursor points) to find the intersection.\r\n * @returns {Object|null} The 3D position {x, y, z} or null if no intersection\r\n */\r\n getCursorIntersection() {\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return null;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n const sky = aframeScene.querySelector(\"a-sky\");\r\n\r\n if (!camera || !sky) {\r\n return null;\r\n }\r\n\r\n // Get pitch and yaw from look-controls (the authoritative source in A-Frame)\r\n const lookControls = camera.components?.[\"look-controls\"];\r\n let pitch = 0;\r\n let yaw = 0;\r\n\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n pitch = lookControls.pitchObject.rotation.x;\r\n yaw = lookControls.yawObject.rotation.y;\r\n } else {\r\n // Fallback to object3D rotation\r\n pitch = camera.object3D.rotation.x;\r\n yaw = camera.object3D.rotation.y;\r\n }\r\n\r\n // Calculate direction vector from pitch/yaw\r\n // In A-Frame/Three.js coordinate system:\r\n // - Looking forward is -Z\r\n // - Yaw rotates around Y axis\r\n // - Pitch rotates around X axis\r\n const direction = new THREE.Vector3();\r\n direction.x = -Math.sin(yaw) * Math.cos(pitch);\r\n direction.y = Math.sin(pitch);\r\n direction.z = -Math.cos(yaw) * Math.cos(pitch);\r\n direction.normalize();\r\n\r\n // Create raycaster from camera position in the direction we're looking\r\n const raycaster = new THREE.Raycaster();\r\n const origin = new THREE.Vector3(0, 0, 0); // Camera is typically at origin in 360 viewer\r\n raycaster.set(origin, direction);\r\n\r\n // Raycast against the sky sphere\r\n const intersects = raycaster.intersectObject(sky.object3D, true);\r\n\r\n if (intersects.length > 0) {\r\n const point = intersects[0].point;\r\n \r\n // Calculate an upward offset to center the hotspot visual on the cursor\r\n // The offset is applied along the \"up\" direction relative to the sphere surface\r\n // For a sphere, we shift the point slightly in the Y direction (vertical up in world space)\r\n // The offset compensates for the hotspot visual being centered, so the top aligns with cursor\r\n const offsetAmount = 200; // Adjust this value to fine-tune alignment\r\n \r\n return {\r\n x: parseFloat(point.x.toFixed(2)),\r\n y: parseFloat((point.y + offsetAmount).toFixed(2)),\r\n z: parseFloat(point.z.toFixed(2)),\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Get current camera rotation\r\n * Works with A-Frame's look-controls component by reading its internal state\r\n */\r\n getCameraRotation() {\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return null;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n if (!camera) {\r\n return null;\r\n }\r\n\r\n // Try to get rotation from look-controls internal state (more reliable)\r\n const lookControls = camera.components?.[\"look-controls\"];\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n const savedRotation = {\r\n x: lookControls.pitchObject.rotation.x,\r\n y: lookControls.yawObject.rotation.y,\r\n z: 0,\r\n };\r\n return savedRotation;\r\n }\r\n\r\n // Fallback to object3D rotation\r\n const rotation = camera.object3D.rotation;\r\n const savedRotation = {\r\n x: rotation.x,\r\n y: rotation.y,\r\n z: rotation.z,\r\n };\r\n return savedRotation;\r\n }\r\n\r\n /**\r\n * Set camera rotation\r\n * Works with A-Frame's look-controls component by setting its internal state\r\n */\r\n setCameraRotation(rotation) {\r\n if (!rotation) {\r\n return;\r\n }\r\n\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n if (!camera) {\r\n return;\r\n }\r\n\r\n // Set rotation via look-controls internal pitchObject/yawObject\r\n // This is required because look-controls overrides object3D.rotation on each tick\r\n const setRotation = () => {\r\n const cam = this.previewContainer?.querySelector(\"[camera]\");\r\n if (!cam) return;\r\n\r\n const lookControls = cam.components?.[\"look-controls\"];\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n // Set pitch (x rotation) on pitchObject\r\n lookControls.pitchObject.rotation.x = rotation.x;\r\n // Set yaw (y rotation) on yawObject\r\n lookControls.yawObject.rotation.y = rotation.y;\r\n } else if (cam.object3D) {\r\n // Fallback to direct object3D if look-controls not ready\r\n cam.object3D.rotation.set(rotation.x, rotation.y, rotation.z);\r\n }\r\n };\r\n\r\n // Try immediately and also after delays to ensure it sticks\r\n // A-Frame look-controls may not be fully initialized immediately\r\n setRotation();\r\n setTimeout(setRotation, 100);\r\n setTimeout(setRotation, 300);\r\n setTimeout(setRotation, 500);\r\n }\r\n\r\n /**\r\n * Refresh preview (reload current scene while preserving camera rotation)\r\n */\r\n async refresh() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (scene) {\r\n // loadScene with preserveCameraRotation=true handles save/restore internally\r\n await this.loadScene(scene, true);\r\n }\r\n }\r\n\r\n /**\r\n * Reset camera\r\n */\r\n resetCamera() {\r\n const camera = this.previewContainer?.querySelector(\"[camera]\");\r\n if (camera) {\r\n camera.setAttribute(\"rotation\", \"0 0 0\");\r\n }\r\n }\r\n\r\n /**\r\n * Point camera to hotspot\r\n * Uses stored camera orientation if available, otherwise calculates from position\r\n * @param {Object} hotspot - The hotspot object with position and optional cameraOrientation\r\n */\r\n pointCameraToHotspot(hotspot) {\r\n if (!hotspot) {\r\n return;\r\n }\r\n\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n if (!camera || !camera.object3D) {\r\n return;\r\n }\r\n\r\n let pitch, yaw;\r\n\r\n // Use stored camera orientation if available (more reliable)\r\n if (hotspot.cameraOrientation) {\r\n // Stored values are in radians, convert to degrees for animateCameraRotation\r\n pitch = hotspot.cameraOrientation.pitch * (180 / Math.PI);\r\n yaw = hotspot.cameraOrientation.yaw * (180 / Math.PI);\r\n } else if (hotspot.position) {\r\n // Fallback: calculate from position (for legacy hotspots without cameraOrientation)\r\n const hotspotPosition = hotspot.position;\r\n const cameraPos = camera.object3D.position;\r\n\r\n // Calculate direction vector from camera to hotspot\r\n const direction = new THREE.Vector3(\r\n hotspotPosition.x - cameraPos.x,\r\n hotspotPosition.y - cameraPos.y,\r\n hotspotPosition.z - cameraPos.z\r\n );\r\n\r\n // Calculate spherical coordinates (yaw and pitch)\r\n const distance = direction.length();\r\n\r\n // Pitch (up/down rotation around X-axis) - in degrees\r\n pitch = Math.asin(direction.y / distance) * (180 / Math.PI);\r\n\r\n // Yaw (left/right rotation around Y-axis) - in degrees\r\n yaw = Math.atan2(direction.x, direction.z) * (180 / Math.PI);\r\n } else {\r\n return;\r\n }\r\n\r\n // Apply smooth rotation with animation\r\n this.animateCameraRotation(camera, { x: pitch, y: yaw, z: 0 });\r\n }\r\n\r\n /**\r\n * Animate camera rotation smoothly\r\n * Uses look-controls internal pitchObject/yawObject to avoid being overwritten\r\n */\r\n animateCameraRotation(camera, targetRotation, duration = 800) {\r\n if (!camera || !camera.object3D) return;\r\n\r\n // Get look-controls component\r\n const lookControls = camera.components?.[\"look-controls\"];\r\n \r\n // Get current rotation - prefer look-controls internal state\r\n let startRotation;\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n startRotation = {\r\n x: lookControls.pitchObject.rotation.x * (180 / Math.PI),\r\n y: lookControls.yawObject.rotation.y * (180 / Math.PI),\r\n z: 0,\r\n };\r\n } else {\r\n startRotation = {\r\n x: camera.object3D.rotation.x * (180 / Math.PI),\r\n y: camera.object3D.rotation.y * (180 / Math.PI),\r\n z: 0,\r\n };\r\n }\r\n\r\n // Handle angle wrapping for smooth rotation\r\n let deltaY = targetRotation.y - startRotation.y;\r\n\r\n // Normalize to -180 to 180 range\r\n while (deltaY > 180) deltaY -= 360;\r\n while (deltaY < -180) deltaY += 360;\r\n\r\n const endRotationY = startRotation.y + deltaY;\r\n\r\n const startTime = Date.now();\r\n\r\n const animate = () => {\r\n const elapsed = Date.now() - startTime;\r\n const progress = Math.min(elapsed / duration, 1);\r\n\r\n // Ease-in-out function for smooth animation\r\n const eased =\r\n progress < 0.5\r\n ? 2 * progress * progress\r\n : 1 - Math.pow(-2 * progress + 2, 2) / 2;\r\n\r\n // Interpolate rotation (in degrees)\r\n const currentX = startRotation.x + (targetRotation.x - startRotation.x) * eased;\r\n const currentY = startRotation.y + (endRotationY - startRotation.y) * eased;\r\n\r\n // Apply rotation using look-controls internal objects (in radians)\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n lookControls.pitchObject.rotation.x = currentX * (Math.PI / 180);\r\n lookControls.yawObject.rotation.y = currentY * (Math.PI / 180);\r\n } else {\r\n // Fallback to direct rotation\r\n camera.object3D.rotation.set(\r\n currentX * (Math.PI / 180),\r\n currentY * (Math.PI / 180),\r\n 0\r\n );\r\n }\r\n\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n animate();\r\n }\r\n\r\n /**\r\n * Highlight hotspot (not needed with library, but keep for compatibility)\r\n */\r\n highlightHotspot(index) {\r\n // The library handles hotspot visualization\r\n // This is kept for API compatibility\r\n }\r\n\r\n /**\r\n * Update hotspot marker (refresh scene while preserving camera rotation)\r\n */\r\n async updateHotspotMarker(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || !this.tour) return;\r\n\r\n const hotspot = scene.hotspots[index];\r\n if (!hotspot) return;\r\n\r\n // Refresh the preview to reflect changes, camera rotation will be preserved\r\n await this.refresh();\r\n }\r\n\r\n /**\r\n * Create loading overlay element\r\n */\r\n createLoadingOverlay() {\r\n const overlay = document.createElement(\"div\");\r\n overlay.className = \"preview-loading\";\r\n overlay.innerHTML = `\r\n <div class=\"loading-spinner\"></div>\r\n <div class=\"loading-text\">Loading scene...</div>\r\n `;\r\n return overlay;\r\n }\r\n\r\n /**\r\n * Show loading animation\r\n */\r\n showLoading() {\r\n const existing = this.previewContainer?.querySelector(\".preview-loading\");\r\n if (existing) {\r\n existing.classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n /**\r\n * Hide loading animation\r\n */\r\n hideLoading() {\r\n const loading = this.previewContainer?.querySelector(\".preview-loading\");\r\n if (loading) {\r\n loading.classList.add(\"hidden\");\r\n // Remove after transition\r\n setTimeout(() => {\r\n if (loading.parentNode) {\r\n loading.parentNode.removeChild(loading);\r\n }\r\n }, 300);\r\n }\r\n }\r\n}\r\n\r\nexport default PreviewController;\r\n","// UI Controller - Handles DOM manipulation and rendering\r\n\r\n// Import icons list from SenangStart icons package (baked into bundle at build time)\r\nimport iconsData from \"@bookklik/senangstart-icons/src/icons.json\";\r\n\r\nclass UIController {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.sceneList = document.getElementById(\"sceneList\");\r\n this.hotspotList = document.getElementById(\"hotspotList\");\r\n this.draggedElement = null;\r\n }\r\n\r\n /**\r\n * Render scene list\r\n */\r\n renderSceneList() {\r\n if (!this.sceneList) return;\r\n\r\n this.sceneList.innerHTML = \"\";\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const currentIndex = this.editor.sceneManager.currentSceneIndex;\r\n\r\n if (scenes.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.className = \"empty-state\";\r\n empty.innerHTML = `\r\n <p>No scenes yet</p>\r\n <p class=\"hint\">Click \"Add Scene\" to upload a 360° panorama</p>\r\n `;\r\n this.sceneList.appendChild(empty);\r\n return;\r\n }\r\n\r\n scenes.forEach((scene, index) => {\r\n const card = this.createSceneCard(scene, index, index === currentIndex);\r\n this.sceneList.appendChild(card);\r\n });\r\n }\r\n\r\n /**\r\n * Create scene card element\r\n */\r\n createSceneCard(scene, index, isActive) {\r\n const card = document.createElement(\"div\");\r\n card.className = \"scene-card\" + (isActive ? \" active\" : \"\");\r\n card.draggable = true;\r\n card.dataset.index = index;\r\n\r\n // Drag handle\r\n const dragHandle = document.createElement(\"div\");\r\n dragHandle.className = \"drag-handle\";\r\n dragHandle.innerHTML =\r\n '<ss-icon icon=\"arrow-up-down-left-right\" thickness=\"2.2\"></ss-icon>';\r\n\r\n // Thumbnail\r\n const thumbnail = document.createElement(\"img\");\r\n thumbnail.src = scene.thumbnail || scene.imageUrl;\r\n thumbnail.alt = scene.name;\r\n\r\n // Info\r\n const info = document.createElement(\"div\");\r\n info.className = \"scene-info\";\r\n\r\n const name = document.createElement(\"div\");\r\n name.className = \"scene-name\";\r\n name.textContent = scene.name;\r\n\r\n const meta = document.createElement(\"div\");\r\n meta.className = \"scene-meta\";\r\n meta.textContent = `${scene.hotspots.length} hotspot${\r\n scene.hotspots.length !== 1 ? \"s\" : \"\"\r\n }`;\r\n\r\n info.appendChild(name);\r\n info.appendChild(meta);\r\n\r\n // Actions\r\n const actions = document.createElement(\"div\");\r\n actions.className = \"scene-actions\";\r\n\r\n const deleteBtn = document.createElement(\"button\");\r\n deleteBtn.className = \"btn-icon\";\r\n deleteBtn.innerHTML = '<ss-icon icon=\"trash\" thickness=\"2.2\"></ss-icon>';\r\n deleteBtn.title = \"Delete scene\";\r\n deleteBtn.onclick = (e) => {\r\n e.stopPropagation();\r\n this.editor.removeScene(index);\r\n };\r\n\r\n actions.appendChild(deleteBtn);\r\n\r\n card.appendChild(dragHandle);\r\n card.appendChild(thumbnail);\r\n card.appendChild(info);\r\n card.appendChild(actions);\r\n\r\n // Click handler\r\n card.onclick = () => {\r\n this.editor.selectScene(index);\r\n };\r\n\r\n // Drag and drop handlers\r\n this.setupDragAndDrop(card);\r\n\r\n return card;\r\n }\r\n\r\n /**\r\n * Setup drag and drop for scene reordering\r\n */\r\n setupDragAndDrop(card) {\r\n card.addEventListener(\"dragstart\", (e) => {\r\n this.draggedElement = card;\r\n card.classList.add(\"dragging\");\r\n e.dataTransfer.effectAllowed = \"move\";\r\n });\r\n\r\n card.addEventListener(\"dragend\", () => {\r\n card.classList.remove(\"dragging\");\r\n this.draggedElement = null;\r\n });\r\n\r\n card.addEventListener(\"dragover\", (e) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = \"move\";\r\n\r\n if (this.draggedElement && this.draggedElement !== card) {\r\n const bounding = card.getBoundingClientRect();\r\n const offset = bounding.y + bounding.height / 2;\r\n\r\n if (e.clientY - offset > 0) {\r\n card.style.borderBottom = \"2px solid var(--accent-color)\";\r\n card.style.borderTop = \"\";\r\n } else {\r\n card.style.borderTop = \"2px solid var(--accent-color)\";\r\n card.style.borderBottom = \"\";\r\n }\r\n }\r\n });\r\n\r\n card.addEventListener(\"dragleave\", () => {\r\n card.style.borderTop = \"\";\r\n card.style.borderBottom = \"\";\r\n });\r\n\r\n card.addEventListener(\"drop\", (e) => {\r\n e.preventDefault();\r\n card.style.borderTop = \"\";\r\n card.style.borderBottom = \"\";\r\n\r\n if (this.draggedElement && this.draggedElement !== card) {\r\n const fromIndex = parseInt(this.draggedElement.dataset.index);\r\n const toIndex = parseInt(card.dataset.index);\r\n this.editor.reorderScenes(fromIndex, toIndex);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Render hotspot list\r\n */\r\n renderHotspotList() {\r\n if (!this.hotspotList) return;\r\n\r\n this.hotspotList.innerHTML = \"\";\r\n const hotspots = this.editor.hotspotEditor.getAllHotspots();\r\n const currentIndex = this.editor.hotspotEditor.currentHotspotIndex;\r\n\r\n if (hotspots.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.className = \"empty-state\";\r\n empty.textContent = 'No hotspots. Click \"Add Hotspot\" to create one.';\r\n this.hotspotList.appendChild(empty);\r\n return;\r\n }\r\n\r\n hotspots.forEach((hotspot, index) => {\r\n const item = this.createHotspotItem(\r\n hotspot,\r\n index,\r\n index === currentIndex\r\n );\r\n this.hotspotList.appendChild(item);\r\n });\r\n }\r\n\r\n /**\r\n * Create hotspot list item\r\n */\r\n createHotspotItem(hotspot, index, isActive) {\r\n const item = document.createElement(\"div\");\r\n item.className = \"hotspot-item\" + (isActive ? \" active\" : \"\");\r\n\r\n const colorIndicator = document.createElement(\"div\");\r\n colorIndicator.className = \"hotspot-color\";\r\n colorIndicator.style.backgroundColor = hotspot.color;\r\n \r\n // If hotspot has an icon, show it with the color applied\r\n if (hotspot.icon) {\r\n colorIndicator.innerHTML = `<ss-icon icon=\"${hotspot.icon}\" thickness=\"2.2\" style=\"color: ${hotspot.color}; width: 20px; height: 20px;\"></ss-icon>`;\r\n colorIndicator.style.backgroundColor = \"transparent\";\r\n colorIndicator.style.display = \"flex\";\r\n colorIndicator.style.alignItems = \"center\";\r\n colorIndicator.style.justifyContent = \"center\";\r\n }\r\n\r\n const info = document.createElement(\"div\");\r\n info.className = \"hotspot-info\";\r\n\r\n const title = document.createElement(\"div\");\r\n title.className = \"hotspot-title\";\r\n title.textContent = hotspot.title || \"Untitled Hotspot\";\r\n\r\n const target = document.createElement(\"div\");\r\n target.className = \"hotspot-target\";\r\n if (hotspot.targetSceneId) {\r\n const targetScene = this.editor.sceneManager.getSceneById(\r\n hotspot.targetSceneId\r\n );\r\n target.textContent = targetScene\r\n ? `→ ${targetScene.name}`\r\n : `→ ${hotspot.targetSceneId}`;\r\n } else {\r\n target.textContent = \"No target\";\r\n }\r\n\r\n info.appendChild(title);\r\n info.appendChild(target);\r\n\r\n const actions = document.createElement(\"div\");\r\n actions.className = \"hotspot-actions\";\r\n\r\n const deleteBtn = document.createElement(\"button\");\r\n deleteBtn.className = \"btn-delete\";\r\n deleteBtn.innerHTML = '<ss-icon icon=\"trash\" thickness=\"2.2\"></ss-icon>';\r\n deleteBtn.title = \"Delete\";\r\n deleteBtn.onclick = (e) => {\r\n e.stopPropagation();\r\n this.editor.removeHotspot(index);\r\n };\r\n\r\n actions.appendChild(deleteBtn);\r\n\r\n item.appendChild(colorIndicator);\r\n item.appendChild(info);\r\n item.appendChild(actions);\r\n\r\n item.onclick = () => {\r\n this.editor.selectHotspot(index);\r\n };\r\n\r\n return item;\r\n }\r\n\r\n /**\r\n * Set active state on icon grid button\r\n */\r\n setActiveIconButton(iconName) {\r\n const grid = document.getElementById(\"hotspotIconGrid\");\r\n if (!grid) return;\r\n \r\n // Remove active from all buttons\r\n grid.querySelectorAll(\".icon-btn\").forEach(btn => {\r\n btn.classList.remove(\"active\");\r\n });\r\n \r\n // Find and activate the matching button\r\n const activeBtn = grid.querySelector(`.icon-btn[data-icon=\"${iconName}\"]`);\r\n if (activeBtn) {\r\n activeBtn.classList.add(\"active\");\r\n }\r\n }\r\n\r\n /**\r\n * Populate icon grid from SenangStart icons (baked in at build time)\r\n */\r\n populateIconGrid() {\r\n const grid = document.getElementById(\"hotspotIconGrid\");\r\n if (!grid) return;\r\n\r\n // Clear existing content\r\n grid.innerHTML = \"\";\r\n\r\n // Add \"No icon\" button first\r\n const noIconBtn = document.createElement(\"button\");\r\n noIconBtn.type = \"button\";\r\n noIconBtn.className = \"icon-btn active\";\r\n noIconBtn.dataset.icon = \"\";\r\n noIconBtn.title = \"No icon\";\r\n noIconBtn.innerHTML = '<ss-icon icon=\"x-mark\" thickness=\"1.5\" style=\"opacity: 0.5;\"></ss-icon>';\r\n grid.appendChild(noIconBtn);\r\n\r\n // Add buttons for each icon from imported JSON\r\n iconsData.forEach(icon => {\r\n const btn = document.createElement(\"button\");\r\n btn.type = \"button\";\r\n btn.className = \"icon-btn\";\r\n btn.dataset.icon = icon.slug;\r\n btn.title = icon.name;\r\n btn.innerHTML = `<ss-icon icon=\"${icon.slug}\" thickness=\"2.2\"></ss-icon>`;\r\n grid.appendChild(btn);\r\n });\r\n\r\n console.log(`Loaded ${iconsData.length} icons`);\r\n }\r\n\r\n /**\r\n * Update properties panel for hotspot\r\n */\r\n updateHotspotProperties(hotspot) {\r\n const hotspotAll = document.getElementById(\"hotspotAll\");\r\n const hotspotProperties = document.getElementById(\"hotspotProperties\");\r\n\r\n if (!hotspot) {\r\n // No hotspot selected - show list, hide properties\r\n if (hotspotAll) hotspotAll.style.display = \"block\";\r\n if (hotspotProperties) hotspotProperties.style.display = \"none\";\r\n\r\n // Clear form\r\n document.getElementById(\"hotspotTitle\").value = \"\";\r\n document.getElementById(\"hotspotDescription\").value = \"\";\r\n document.getElementById(\"hotspotTarget\").value = \"\";\r\n document.getElementById(\"hotspotColor\").value = \"#00ff00\";\r\n const colorText = document.getElementById(\"hotspotColorText\");\r\n if (colorText) colorText.value = \"#00ff00\";\r\n // Reset icon grid to \"no icon\" button\r\n this.setActiveIconButton(\"\");\r\n document.getElementById(\"hotspotPosX\").value = \"\";\r\n document.getElementById(\"hotspotPosY\").value = \"\";\r\n document.getElementById(\"hotspotPosZ\").value = \"\";\r\n return;\r\n }\r\n\r\n // Hotspot selected - show both list and properties\r\n if (hotspotAll) hotspotAll.style.display = \"block\";\r\n if (hotspotProperties) hotspotProperties.style.display = \"block\";\r\n\r\n document.getElementById(\"hotspotTitle\").value = hotspot.title || \"\";\r\n document.getElementById(\"hotspotDescription\").value =\r\n hotspot.description || \"\";\r\n document.getElementById(\"hotspotTarget\").value =\r\n hotspot.targetSceneId || \"\";\r\n document.getElementById(\"hotspotColor\").value = hotspot.color || \"#00ff00\";\r\n\r\n // Update color text input if it exists\r\n const colorText = document.getElementById(\"hotspotColorText\");\r\n if (colorText) {\r\n colorText.value = hotspot.color || \"#00ff00\";\r\n }\r\n\r\n // Update icon grid active button\r\n this.setActiveIconButton(hotspot.icon || \"\");\r\n\r\n // Update position inputs\r\n const pos = hotspot.position || { x: 0, y: 0, z: 0 };\r\n document.getElementById(\"hotspotPosX\").value = pos.x;\r\n document.getElementById(\"hotspotPosY\").value = pos.y;\r\n document.getElementById(\"hotspotPosZ\").value = pos.z;\r\n\r\n // Update target dropdown\r\n this.updateTargetSceneOptions();\r\n }\r\n\r\n /**\r\n * Update properties panel for scene\r\n */\r\n updateSceneProperties(scene) {\r\n const startingPosDisplay = document.getElementById(\"startingPositionDisplay\");\r\n \r\n if (!scene) {\r\n document.getElementById(\"sceneId\").value = \"\";\r\n document.getElementById(\"sceneName\").value = \"\";\r\n document.getElementById(\"sceneImageUrl\").value = \"\";\r\n if (startingPosDisplay) {\r\n startingPosDisplay.textContent = \"Not set (camera keeps current position)\";\r\n }\r\n return;\r\n }\r\n\r\n document.getElementById(\"sceneId\").value = scene.id || \"\";\r\n document.getElementById(\"sceneName\").value = scene.name || \"\";\r\n document.getElementById(\"sceneImageUrl\").value = scene.imageUrl || \"\";\r\n \r\n // Update starting position display\r\n if (startingPosDisplay) {\r\n if (scene.startingPosition) {\r\n const pitchDeg = (scene.startingPosition.pitch * 180 / Math.PI).toFixed(1);\r\n const yawDeg = (scene.startingPosition.yaw * 180 / Math.PI).toFixed(1);\r\n startingPosDisplay.textContent = `Pitch: ${pitchDeg}° | Yaw: ${yawDeg}°`;\r\n startingPosDisplay.style.color = \"var(--accent-primary)\";\r\n } else {\r\n startingPosDisplay.textContent = \"Not set (camera keeps current position)\";\r\n startingPosDisplay.style.color = \"var(--text-muted)\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update properties panel for tour\r\n */\r\n updateTourProperties(config) {\r\n document.getElementById(\"tourTitle\").value = config.title || \"\";\r\n document.getElementById(\"tourDescription\").value = config.description || \"\";\r\n document.getElementById(\"tourInitialScene\").value =\r\n config.initialSceneId || \"\";\r\n\r\n // Also update project name in header if it exists\r\n const projectName = document.getElementById(\"project-name\");\r\n if (projectName) {\r\n projectName.value = config.title || \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Update target scene options in hotspot properties\r\n */\r\n updateTargetSceneOptions() {\r\n const select = document.getElementById(\"hotspotTarget\");\r\n if (!select) return;\r\n\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const currentValue = select.value;\r\n\r\n select.innerHTML = '<option value=\"\">Select target scene...</option>';\r\n\r\n scenes.forEach((scene) => {\r\n const option = document.createElement(\"option\");\r\n option.value = scene.id;\r\n option.textContent = scene.name;\r\n select.appendChild(option);\r\n });\r\n\r\n select.value = currentValue;\r\n }\r\n\r\n /**\r\n * Update initial scene options in tour properties\r\n */\r\n updateInitialSceneOptions() {\r\n const select = document.getElementById(\"tourInitialScene\");\r\n if (!select) return;\r\n\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const currentValue = select.value;\r\n\r\n select.innerHTML = '<option value=\"\">Select initial scene...</option>';\r\n\r\n scenes.forEach((scene) => {\r\n const option = document.createElement(\"option\");\r\n option.value = scene.id;\r\n option.textContent = scene.name;\r\n select.appendChild(option);\r\n });\r\n\r\n select.value = currentValue;\r\n }\r\n\r\n /**\r\n * Show/hide loading indicator\r\n */\r\n setLoading(isLoading) {\r\n const indicator = document.querySelector(\".loading-indicator\");\r\n if (indicator) {\r\n indicator.style.display = isLoading ? \"block\" : \"none\";\r\n }\r\n }\r\n\r\n /**\r\n * Switch properties tab\r\n */\r\n switchTab(tabName) {\r\n // Update tab buttons\r\n document.querySelectorAll(\".tab-btn\").forEach((btn) => {\r\n btn.classList.toggle(\"active\", btn.dataset.tab === tabName);\r\n });\r\n\r\n // Update tab content\r\n document.querySelectorAll(\".tab-content\").forEach((content) => {\r\n content.classList.toggle(\"active\", content.id === tabName + \"Tab\");\r\n });\r\n }\r\n}\r\n\r\nexport default UIController;\r\n","/**\r\n * IconRenderer - Converts SenangStart icon names to image data URLs for A-Frame\r\n */\r\nexport class IconRenderer {\r\n constructor() {\r\n this.iconCache = new Map();\r\n this.renderContainer = null;\r\n }\r\n\r\n /**\r\n * Initialize the hidden render container\r\n */\r\n init() {\r\n if (this.renderContainer) return;\r\n \r\n this.renderContainer = document.createElement('div');\r\n this.renderContainer.id = 'swt-icon-renderer';\r\n this.renderContainer.style.cssText = `\r\n position: absolute;\r\n left: -9999px;\r\n top: -9999px;\r\n width: 128px;\r\n height: 128px;\r\n pointer-events: none;\r\n visibility: hidden;\r\n `;\r\n document.body.appendChild(this.renderContainer);\r\n }\r\n\r\n /**\r\n * Generate an image data URL from a SenangStart icon\r\n * @param {string} iconName - SenangStart icon name (e.g., 'arrow-right')\r\n * @param {string} color - Hex color for the icon\r\n * @param {number} size - Size in pixels (default 128)\r\n * @returns {Promise<string>} - Data URL of the icon image\r\n */\r\n async generateIconDataUrl(iconName, color = '#ffffff', size = 128) {\r\n const cacheKey = `${iconName}-${color}-${size}`;\r\n \r\n if (this.iconCache.has(cacheKey)) {\r\n return this.iconCache.get(cacheKey);\r\n }\r\n\r\n this.init();\r\n\r\n return new Promise((resolve, reject) => {\r\n // Create the ss-icon element\r\n this.renderContainer.innerHTML = `\r\n <ss-icon \r\n icon=\"${iconName}\" \r\n thickness=\"2.5\" \r\n style=\"color: ${color}; width: ${size}px; height: ${size}px; display: block;\"\r\n ></ss-icon>\r\n `;\r\n\r\n // Wait for the custom element to render\r\n setTimeout(() => {\r\n try {\r\n const ssIcon = this.renderContainer.querySelector('ss-icon');\r\n if (!ssIcon || !ssIcon.shadowRoot) {\r\n console.warn(`Icon ${iconName} not rendered properly`);\r\n resolve(null);\r\n return;\r\n }\r\n\r\n // Get the SVG from shadow root\r\n const svg = ssIcon.shadowRoot.querySelector('svg');\r\n if (!svg) {\r\n console.warn(`SVG not found for icon ${iconName}`);\r\n resolve(null);\r\n return;\r\n }\r\n\r\n // Clone and prepare SVG\r\n const svgClone = svg.cloneNode(true);\r\n svgClone.setAttribute('width', size);\r\n svgClone.setAttribute('height', size);\r\n svgClone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n \r\n // Apply the color to all paths/elements\r\n svgClone.querySelectorAll('path, circle, rect, line, polyline, polygon').forEach(el => {\r\n el.setAttribute('stroke', color);\r\n // Keep fill as currentColor if it's set\r\n const fill = el.getAttribute('fill');\r\n if (fill && fill !== 'none') {\r\n el.setAttribute('fill', color);\r\n }\r\n });\r\n\r\n // Convert SVG to data URL\r\n const svgString = new XMLSerializer().serializeToString(svgClone);\r\n const dataUrl = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgString)));\r\n \r\n // Cache the result\r\n this.iconCache.set(cacheKey, dataUrl);\r\n \r\n resolve(dataUrl);\r\n } catch (error) {\r\n console.error('Error generating icon data URL:', error);\r\n resolve(null);\r\n }\r\n }, 100); // Wait for custom element to render\r\n });\r\n }\r\n\r\n /**\r\n * Clear the icon cache\r\n */\r\n clearCache() {\r\n this.iconCache.clear();\r\n }\r\n\r\n /**\r\n * Destroy the renderer\r\n */\r\n destroy() {\r\n if (this.renderContainer && this.renderContainer.parentNode) {\r\n this.renderContainer.parentNode.removeChild(this.renderContainer);\r\n }\r\n this.renderContainer = null;\r\n this.iconCache.clear();\r\n }\r\n}\r\n","// Export Manager - Handles JSON generation for SWT library\r\nimport { downloadTextAsFile, showModal, copyToClipboard } from \"./utils.js\";\r\nimport { IconRenderer } from \"../../IconRenderer.js\";\r\n\r\nclass ExportManager {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.iconRenderer = new IconRenderer();\r\n }\r\n\r\n /**\r\n * Generate JSON compatible with SWT library\r\n * Follows the tourConfig structure from example-simple.html\r\n */\r\n generateJSON() {\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const config = this.editor.config;\r\n\r\n // Build scenes object (keyed by scene ID)\r\n const scenesData = {};\r\n scenes.forEach((scene) => {\r\n scenesData[scene.id] = {\r\n name: scene.name,\r\n panorama: scene.imageUrl,\r\n hotspots: scene.hotspots.map((hotspot) => {\r\n const hotspotData = {\r\n position: hotspot.position,\r\n };\r\n\r\n // Add action based on hotspot type\r\n if (hotspot.type === \"navigation\" && hotspot.targetSceneId) {\r\n hotspotData.action = {\r\n type: \"navigateTo\",\r\n target: hotspot.targetSceneId,\r\n };\r\n } else if (hotspot.type === \"info\") {\r\n hotspotData.action = {\r\n type: \"showInfo\",\r\n };\r\n }\r\n\r\n // Add appearance\r\n hotspotData.appearance = {\r\n color: hotspot.color || \"#FF6B6B\",\r\n scale: hotspot.scale || \"2 2 2\",\r\n };\r\n \r\n // Add icon if set\r\n if (hotspot.icon) {\r\n hotspotData.appearance.icon = hotspot.icon;\r\n }\r\n\r\n // Add tooltip if title exists\r\n if (hotspot.title) {\r\n hotspotData.tooltip = {\r\n text: hotspot.title,\r\n };\r\n }\r\n\r\n return hotspotData;\r\n }),\r\n };\r\n \r\n // Add starting position if set\r\n if (scene.startingPosition) {\r\n scenesData[scene.id].startingPosition = scene.startingPosition;\r\n }\r\n });\r\n\r\n // Determine initial scene\r\n let initialScene = config.initialSceneId;\r\n if (!initialScene && scenes.length > 0) {\r\n initialScene = scenes[0].id;\r\n }\r\n\r\n // Build final JSON matching SWT tourConfig format\r\n const jsonData = {\r\n initialScene: initialScene,\r\n scenes: scenesData,\r\n };\r\n\r\n return jsonData;\r\n }\r\n\r\n /**\r\n * Generate JSON with icons baked in as SVG data URLs\r\n * This ensures the exported HTML doesn't need the SenangStart icons library\r\n */\r\n async generateJSONWithBakedIcons() {\r\n const jsonData = this.generateJSON();\r\n \r\n // Process all scenes and convert icon names to data URLs\r\n for (const sceneId of Object.keys(jsonData.scenes)) {\r\n const scene = jsonData.scenes[sceneId];\r\n \r\n for (let i = 0; i < scene.hotspots.length; i++) {\r\n const hotspot = scene.hotspots[i];\r\n const icon = hotspot.appearance?.icon;\r\n \r\n // Skip if no icon or if it's already a data URL or URL\r\n if (!icon) continue;\r\n if (icon.startsWith('data:') || icon.startsWith('http') || icon.startsWith('/')) continue;\r\n \r\n // Generate SVG data URL from icon name\r\n try {\r\n const color = hotspot.appearance?.color || '#ffffff';\r\n const dataUrl = await this.iconRenderer.generateIconDataUrl(icon, color, 128);\r\n if (dataUrl) {\r\n hotspot.appearance.icon = dataUrl;\r\n }\r\n } catch (err) {\r\n console.warn(`Failed to bake icon \"${icon}\" for export:`, err);\r\n }\r\n }\r\n }\r\n \r\n return jsonData;\r\n }\r\n\r\n /**\r\n * Export as JSON file\r\n */\r\n exportJSON() {\r\n try {\r\n const jsonData = this.generateJSON();\r\n const json = JSON.stringify(jsonData, null, 2);\r\n\r\n const title = this.editor.config.title || \"tour\";\r\n const filename = sanitizeId(title) + \".json\";\r\n downloadTextAsFile(json, filename);\r\n\r\n showToast(\"Tour exported successfully\", \"success\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Export failed:\", error);\r\n showToast(\"Export failed\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Copy JSON to clipboard\r\n */\r\n async copyJSON() {\r\n try {\r\n const jsonData = this.generateJSON();\r\n const json = JSON.stringify(jsonData, null, 2);\r\n\r\n const success = await copyToClipboard(json);\r\n if (success) {\r\n showToast(\"JSON copied to clipboard\", \"success\");\r\n } else {\r\n showToast(\"Failed to copy to clipboard\", \"error\");\r\n }\r\n return success;\r\n } catch (error) {\r\n console.error(\"Copy failed:\", error);\r\n showToast(\"Copy failed\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Generate HTML viewer code with icons baked in\r\n */\r\n async generateViewerHTML() {\r\n const jsonData = await this.generateJSONWithBakedIcons();\r\n const title = this.editor.config.title || \"Virtual Tour\";\r\n\r\n return `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n <title>${title}</title>\r\n <script src=\"https://unpkg.com/senangwebs-tour@latest/dist/swt.min.js\"></script>\r\n </head>\r\n <body>\r\n <a-scene id=\"tour-container\">\r\n <a-camera look-controls>\r\n <a-cursor></a-cursor>\r\n </a-camera>\r\n </a-scene>\r\n\r\n <script>\r\n // Tour configuration\r\n const tourConfig = ${JSON.stringify(jsonData, null, 8)\r\n .split(\"\\n\")\r\n .map((line, i) => (i === 0 ? line : \" \" + line))\r\n .join(\"\\n\")};\r\n\r\n // Initialize tour when scene is loaded\r\n const sceneEl = document.querySelector(\"#tour-container\");\r\n sceneEl.addEventListener(\"loaded\", () => {\r\n const tour = new SWT.Tour(sceneEl, tourConfig);\r\n tour.start();\r\n });\r\n </script>\r\n </body>\r\n</html>`;\r\n }\r\n\r\n /**\r\n * Export as standalone HTML viewer with icons baked in\r\n */\r\n async exportViewerHTML() {\r\n try {\r\n const html = await this.generateViewerHTML();\r\n const title = this.editor.config.title || \"tour\";\r\n const filename = sanitizeId(title) + \"-viewer.html\";\r\n\r\n downloadTextAsFile(html, filename);\r\n\r\n showToast(\"Viewer HTML exported successfully\", \"success\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Export viewer failed:\", error);\r\n showToast(\"Export viewer failed\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Show export preview in modal\r\n */\r\n showExportPreview() {\r\n try {\r\n const jsonData = this.generateJSON();\r\n const json = JSON.stringify(jsonData, null, 2);\r\n\r\n const preview = document.getElementById(\"exportPreview\");\r\n if (preview) {\r\n preview.textContent = json;\r\n }\r\n\r\n showModal(\"exportModal\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to show export preview:\", error);\r\n showToast(\"Failed to generate preview\", \"error\");\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport default ExportManager;\r\n","// Main Editor Controller\r\nimport { debounce, showModal, showToast } from './utils.js';\r\n\r\nclass TourEditor {\r\n constructor(options = {}) {\r\n this.config = {\r\n title: options.projectName || 'My Virtual Tour',\r\n description: '',\r\n initialSceneId: ''\r\n };\r\n \r\n // Store initialization options\r\n this.options = {\r\n sceneListElement: options.sceneListElement || null,\r\n previewElement: options.previewElement || null,\r\n propertiesElement: options.propertiesElement || null,\r\n autoSave: options.autoSave !== undefined ? options.autoSave : false,\r\n autoSaveInterval: options.autoSaveInterval || 30000,\r\n ...options\r\n };\r\n \r\n this.storageManager = new ProjectStorageManager();\r\n this.sceneManager = new SceneManagerEditor(this);\r\n this.hotspotEditor = new HotspotEditor(this);\r\n this.previewController = new PreviewController(this);\r\n this.uiController = new UIController(this);\r\n this.exportManager = new ExportManager(this);\r\n \r\n this.hasUnsavedChanges = false;\r\n this.lastRenderedSceneIndex = -1;\r\n this.listenersSetup = false;\r\n }\r\n\r\n /**\r\n * Initialize editor\r\n * @param {Object} config - Optional configuration object for programmatic init\r\n */\r\n async init(config = {}) {\r\n // Merge config with existing options\r\n if (config && Object.keys(config).length > 0) {\r\n Object.assign(this.options, config);\r\n if (config.projectName) {\r\n this.config.title = config.projectName;\r\n }\r\n }\r\n \r\n // Initialize preview\r\n const previewInit = await this.previewController.init();\r\n if (!previewInit) {\r\n console.error('Failed to initialize preview controller');\r\n showToast('Failed to initialize preview', 'error');\r\n return false;\r\n }\r\n \r\n // Setup event listeners\r\n this.setupEventListeners();\r\n \r\n // Populate icon grid\r\n this.uiController.populateIconGrid();\r\n \r\n // Load saved project if exists (but only if it has valid data)\r\n if (this.storageManager.hasProject()) {\r\n try {\r\n const projectData = this.storageManager.loadProject();\r\n if (projectData && projectData.scenes && projectData.scenes.length > 0) {\r\n this.loadProject();\r\n } else {\r\n // Invalid or empty project, clear it\r\n console.error('Invalid or empty project data, clearing storage');\r\n this.storageManager.clearProject();\r\n }\r\n } catch (error) {\r\n console.error('Error loading saved project:', error);\r\n this.storageManager.clearProject();\r\n }\r\n }\r\n \r\n // Start auto-save if enabled\r\n if (this.options.autoSave) {\r\n this.storageManager.startAutoSave(() => {\r\n this.saveProject();\r\n }, this.options.autoSaveInterval);\r\n }\r\n \r\n // Initial render (only if no project was loaded)\r\n if (this.sceneManager.getScenes().length === 0) {\r\n this.render();\r\n }\r\n \r\n showToast('Editor ready', 'success');\r\n \r\n return true;\r\n }\r\n\r\n /**\r\n * Setup event listeners\r\n */\r\n setupEventListeners() {\r\n if (this.listenersSetup) {\r\n return;\r\n }\r\n\r\n const addSceneBtns = document.querySelectorAll('#addSceneBtn');\r\n const sceneUploads = document.querySelectorAll('#sceneUpload');\r\n const importBtns = document.querySelectorAll('#importBtn');\r\n const importUploads = document.querySelectorAll('#importUpload');\r\n if (addSceneBtns.length > 1 || sceneUploads.length > 1 || importBtns.length > 1 || importUploads.length > 1) {\r\n console.error('Duplicate IDs found in DOM. This will cause double-trigger issues.');\r\n }\r\n \r\n // Toolbar buttons\r\n document.getElementById('newBtn')?.addEventListener('click', () => this.newProject());\r\n document.getElementById('saveBtn')?.addEventListener('click', () => this.saveProject());\r\n document.getElementById('exportBtn')?.addEventListener('click', () => this.exportManager.showExportPreview());\r\n document.getElementById('importBtn')?.addEventListener('click', () => this.importProject());\r\n document.getElementById('helpBtn')?.addEventListener('click', () => showModal('helpModal'));\r\n\r\n document.getElementById('addSceneBtn')?.addEventListener('click', () => {\r\n const sceneUpload = document.getElementById('sceneUpload');\r\n if (sceneUpload) {\r\n sceneUpload.click();\r\n }\r\n });\r\n \r\n document.getElementById('sceneUpload')?.addEventListener('change', (e) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n this.handleSceneUpload(e.target.files);\r\n setTimeout(() => {\r\n e.target.value = '';\r\n }, 100);\r\n }\r\n });\r\n\r\n document.getElementById('addHotspotBtn')?.addEventListener('click', () => {\r\n this.addHotspotAtCursor();\r\n });\r\n \r\n document.getElementById('clearHotspotsBtn')?.addEventListener('click', () => {\r\n if (this.hotspotEditor.clearAllHotspots()) {\r\n this.render();\r\n }\r\n });\r\n\r\n // Properties tabs\r\n document.querySelectorAll('.tab-btn').forEach(btn => {\r\n btn.addEventListener('click', () => {\r\n this.uiController.switchTab(btn.dataset.tab);\r\n });\r\n });\r\n\r\n document.getElementById('hotspotTitle')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspot('title', e.target.value);\r\n }, 300));\r\n \r\n document.getElementById('hotspotDescription')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspot('description', e.target.value);\r\n }, 300));\r\n \r\n document.getElementById('hotspotTarget')?.addEventListener('change', (e) => {\r\n this.updateCurrentHotspot('targetSceneId', e.target.value);\r\n });\r\n \r\n document.getElementById('hotspotColor')?.addEventListener('input', (e) => {\r\n this.updateCurrentHotspot('color', e.target.value);\r\n });\r\n\r\n // Icon grid button clicks\r\n document.getElementById('hotspotIconGrid')?.addEventListener('click', (e) => {\r\n const btn = e.target.closest('.icon-btn');\r\n if (btn) {\r\n const iconValue = btn.dataset.icon;\r\n // Update active state\r\n document.querySelectorAll('#hotspotIconGrid .icon-btn').forEach(b => b.classList.remove('active'));\r\n btn.classList.add('active');\r\n // Update hotspot\r\n this.updateCurrentHotspot('icon', iconValue);\r\n }\r\n });\r\n\r\n document.getElementById('hotspotPosX')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspotPosition('x', parseFloat(e.target.value) || 0);\r\n }, 300));\r\n \r\n document.getElementById('hotspotPosY')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspotPosition('y', parseFloat(e.target.value) || 0);\r\n }, 300));\r\n \r\n document.getElementById('hotspotPosZ')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspotPosition('z', parseFloat(e.target.value) || 0);\r\n }, 300));\r\n\r\n document.getElementById('sceneId')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentScene('id', sanitizeId(e.target.value));\r\n }, 300));\r\n \r\n document.getElementById('sceneName')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentScene('name', e.target.value);\r\n }, 300));\r\n \r\n document.getElementById('sceneImageUrl')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentSceneImage(e.target.value);\r\n }, 300));\r\n\r\n document.getElementById('setStartingPosBtn')?.addEventListener('click', () => {\r\n this.setSceneStartingPosition();\r\n });\r\n \r\n document.getElementById('clearStartingPosBtn')?.addEventListener('click', () => {\r\n this.clearSceneStartingPosition();\r\n });\r\n\r\n document.getElementById('tourTitle')?.addEventListener('input', debounce((e) => {\r\n this.config.title = e.target.value;\r\n this.markUnsavedChanges();\r\n const projectName = document.getElementById('project-name');\r\n if (projectName && projectName.value !== e.target.value) {\r\n projectName.value = e.target.value;\r\n }\r\n }, 300));\r\n \r\n document.getElementById('project-name')?.addEventListener('input', debounce((e) => {\r\n this.config.title = e.target.value;\r\n this.markUnsavedChanges();\r\n const tourTitle = document.getElementById('tourTitle');\r\n if (tourTitle && tourTitle.value !== e.target.value) {\r\n tourTitle.value = e.target.value;\r\n }\r\n }, 300));\r\n \r\n document.getElementById('tourDescription')?.addEventListener('input', debounce((e) => {\r\n this.config.description = e.target.value;\r\n this.markUnsavedChanges();\r\n }, 300));\r\n \r\n document.getElementById('tourInitialScene')?.addEventListener('change', (e) => {\r\n this.config.initialSceneId = e.target.value;\r\n this.markUnsavedChanges();\r\n });\r\n\r\n document.getElementById('exportJsonBtn')?.addEventListener('click', () => {\r\n this.exportManager.exportJSON();\r\n });\r\n \r\n document.getElementById('copyJsonBtn')?.addEventListener('click', () => {\r\n this.exportManager.copyJSON();\r\n });\r\n \r\n document.getElementById('exportViewerBtn')?.addEventListener('click', async () => {\r\n await this.exportManager.exportViewerHTML();\r\n });\r\n\r\n document.querySelectorAll('.modal-close').forEach(btn => {\r\n btn.addEventListener('click', () => {\r\n const modal = btn.closest('.modal');\r\n if (modal) {\r\n hideModal(modal.id);\r\n }\r\n });\r\n });\r\n\r\n document.getElementById('importUpload')?.addEventListener('change', (e) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n this.handleImportFile(e.target.files[0]);\r\n setTimeout(() => {\r\n e.target.value = '';\r\n }, 100);\r\n }\r\n });\r\n\r\n window.addEventListener('beforeunload', (e) => {\r\n if (this.hasUnsavedChanges) {\r\n e.preventDefault();\r\n e.returnValue = '';\r\n }\r\n });\r\n \r\n this.listenersSetup = true;\r\n }\r\n\r\n /**\r\n * Handle scene upload\r\n */\r\n async handleSceneUpload(files) {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n this.uiController.setLoading(true);\r\n\r\n for (const file of files) {\r\n if (!file.type.startsWith('image/')) {\r\n showToast(`${file.name} is not an image`, 'error');\r\n continue;\r\n }\r\n\r\n const scene = await this.sceneManager.addScene(file);\r\n }\r\n this.uiController.setLoading(false);\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n\r\n /**\r\n * Add hotspot at position\r\n */\r\n addHotspotAtPosition(position) {\r\n const distance = Math.sqrt(position.x * position.x + position.y * position.y + position.z * position.z);\r\n if (distance > 5) {\r\n const scale = 5 / distance;\r\n position.x *= scale;\r\n position.y *= scale;\r\n position.z *= scale;\r\n position.x = parseFloat(position.x.toFixed(2));\r\n position.y = parseFloat(position.y.toFixed(2));\r\n position.z = parseFloat(position.z.toFixed(2));\r\n }\r\n \r\n // Capture current camera orientation for reliable pointing later\r\n const cameraRotation = this.previewController.getCameraRotation();\r\n const cameraOrientation = cameraRotation ? {\r\n pitch: cameraRotation.x,\r\n yaw: cameraRotation.y\r\n } : null;\r\n \r\n const hotspot = this.hotspotEditor.addHotspot(position, '', cameraOrientation);\r\n if (hotspot) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.render();\r\n this.markUnsavedChanges();\r\n } else {\r\n console.error('Failed to add hotspot');\r\n }\r\n }\r\n\r\n /**\r\n * Add hotspot at current cursor position (center of view)\r\n * This uses the A-Cursor's raycaster intersection with the sky sphere\r\n */\r\n addHotspotAtCursor() {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('Please select a scene first', 'error');\r\n return;\r\n }\r\n\r\n const position = this.previewController.getCursorIntersection();\r\n if (!position) {\r\n showToast('Could not get cursor position. Please ensure the preview is loaded.', 'error');\r\n return;\r\n }\r\n\r\n this.addHotspotAtPosition(position);\r\n }\r\n\r\n /**\r\n * Select scene by index\r\n */\r\n selectScene(index) {\r\n if (this.sceneManager.setCurrentScene(index)) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.hotspotEditor.currentHotspotIndex = -1;\r\n \r\n const scene = this.sceneManager.getCurrentScene();\r\n if (scene) {\r\n this.previewController.loadScene(scene, false);\r\n this.lastRenderedSceneIndex = index;\r\n }\r\n \r\n this.uiController.renderSceneList();\r\n this.uiController.updateSceneProperties(scene);\r\n this.uiController.renderHotspotList();\r\n this.uiController.updateHotspotProperties(null);\r\n this.uiController.updateInitialSceneOptions();\r\n this.uiController.updateTargetSceneOptions();\r\n }\r\n }\r\n\r\n /**\r\n * Select hotspot by index\r\n */\r\n selectHotspot(index) {\r\n if (this.hotspotEditor.setCurrentHotspot(index)) {\r\n const hotspot = this.hotspotEditor.getHotspot(index);\r\n \r\n this.uiController.renderHotspotList();\r\n this.uiController.updateHotspotProperties(hotspot);\r\n this.uiController.updateTargetSceneOptions();\r\n this.uiController.switchTab('hotspot');\r\n \r\n if (hotspot) {\r\n this.previewController.pointCameraToHotspot(hotspot);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove scene\r\n */\r\n removeScene(index) {\r\n if (this.sceneManager.removeScene(index)) {\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Remove hotspot\r\n */\r\n removeHotspot(index) {\r\n if (this.hotspotEditor.removeHotspot(index)) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Duplicate hotspot\r\n */\r\n duplicateHotspot(index) {\r\n const hotspot = this.hotspotEditor.duplicateHotspot(index);\r\n if (hotspot) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Reorder scenes\r\n */\r\n reorderScenes(fromIndex, toIndex) {\r\n if (this.sceneManager.reorderScenes(fromIndex, toIndex)) {\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current hotspot property\r\n */\r\n async updateCurrentHotspot(property, value) {\r\n const index = this.hotspotEditor.currentHotspotIndex;\r\n if (this.hotspotEditor.updateHotspot(index, property, value)) {\r\n await this.previewController.updateHotspotMarker(index);\r\n this.uiController.renderHotspotList();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current hotspot position (X, Y, or Z)\r\n */\r\n async updateCurrentHotspotPosition(axis, value) {\r\n const index = this.hotspotEditor.currentHotspotIndex;\r\n const hotspot = this.hotspotEditor.getHotspot(index);\r\n \r\n if (hotspot) {\r\n if (!hotspot.position) {\r\n hotspot.position = { x: 0, y: 0, z: 0 };\r\n }\r\n \r\n hotspot.position[axis] = value;\r\n \r\n // Clear camera orientation since position changed manually\r\n // Will fallback to position-based calculation when pointing camera\r\n hotspot.cameraOrientation = null;\r\n \r\n const pos = hotspot.position;\r\n const distance = Math.sqrt(pos.x * pos.x + pos.y * pos.y + pos.z * pos.z);\r\n if (distance > 10) {\r\n const scale = 10 / distance;\r\n pos.x *= scale;\r\n pos.y *= scale;\r\n pos.z *= scale;\r\n \r\n document.getElementById(`hotspotPos${axis.toUpperCase()}`).value = pos[axis].toFixed(2);\r\n showToast('Position clamped to 10-unit radius', 'info');\r\n }\r\n \r\n await this.previewController.updateHotspotMarker(index);\r\n this.uiController.renderHotspotList();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current scene property\r\n */\r\n updateCurrentScene(property, value) {\r\n const index = this.sceneManager.currentSceneIndex;\r\n if (this.sceneManager.updateScene(index, property, value)) {\r\n this.uiController.renderSceneList();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current scene image URL\r\n */\r\n async updateCurrentSceneImage(imageUrl) {\r\n const index = this.sceneManager.currentSceneIndex;\r\n if (index < 0) return;\r\n \r\n if (this.sceneManager.updateScene(index, 'imageUrl', imageUrl)) {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (scene) {\r\n scene.thumbnail = imageUrl;\r\n }\r\n \r\n this.uiController.renderSceneList();\r\n this.lastRenderedSceneIndex = -1;\r\n \r\n if (scene) {\r\n await this.previewController.loadScene(scene);\r\n this.lastRenderedSceneIndex = index;\r\n showToast('Scene image updated', 'success');\r\n }\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Set scene starting position to current camera rotation\r\n */\r\n setSceneStartingPosition() {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('No scene selected', 'error');\r\n return;\r\n }\r\n \r\n const rotation = this.previewController.getCameraRotation();\r\n if (!rotation) {\r\n showToast('Could not get camera rotation', 'error');\r\n return;\r\n }\r\n \r\n scene.startingPosition = {\r\n pitch: rotation.x,\r\n yaw: rotation.y\r\n };\r\n \r\n this.uiController.updateSceneProperties(scene);\r\n this.markUnsavedChanges();\r\n showToast('Starting position set', 'success');\r\n }\r\n\r\n /**\r\n * Clear scene starting position\r\n */\r\n clearSceneStartingPosition() {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('No scene selected', 'error');\r\n return;\r\n }\r\n \r\n scene.startingPosition = null;\r\n \r\n this.uiController.updateSceneProperties(scene);\r\n this.markUnsavedChanges();\r\n showToast('Starting position cleared', 'success');\r\n }\r\n\r\n /**\r\n * Render all UI\r\n */\r\n render() {\r\n this.uiController.renderSceneList();\r\n this.uiController.renderHotspotList();\r\n \r\n const currentScene = this.sceneManager.getCurrentScene();\r\n const currentHotspot = this.hotspotEditor.getCurrentHotspot();\r\n \r\n this.uiController.updateSceneProperties(currentScene);\r\n this.uiController.updateHotspotProperties(currentHotspot);\r\n this.uiController.updateTourProperties(this.config);\r\n this.uiController.updateInitialSceneOptions();\r\n this.uiController.updateTargetSceneOptions();\r\n \r\n if (currentScene) {\r\n const emptyState = document.querySelector('.preview-empty');\r\n if (emptyState) {\r\n emptyState.style.display = 'none';\r\n }\r\n \r\n const currentSceneIndex = this.sceneManager.currentSceneIndex;\r\n if (currentSceneIndex !== this.lastRenderedSceneIndex) {\r\n this.previewController.loadScene(currentScene);\r\n this.lastRenderedSceneIndex = currentSceneIndex;\r\n }\r\n \r\n if (currentHotspot) {\r\n this.previewController.highlightHotspot(this.hotspotEditor.currentHotspotIndex);\r\n }\r\n } else {\r\n const emptyState = document.querySelector('.preview-empty');\r\n if (emptyState) {\r\n emptyState.style.display = 'flex';\r\n }\r\n this.lastRenderedSceneIndex = -1;\r\n }\r\n }\r\n\r\n /**\r\n * Save project\r\n */\r\n saveProject() {\r\n const projectData = {\r\n config: this.config,\r\n scenes: this.sceneManager.getAllScenes()\r\n };\r\n\r\n if (this.storageManager.saveProject(projectData)) {\r\n this.hasUnsavedChanges = false;\r\n showToast('Project saved', 'success');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Load project\r\n */\r\n loadProject() {\r\n const projectData = this.storageManager.loadProject();\r\n if (projectData) {\r\n this.config = projectData.config || this.config;\r\n this.sceneManager.loadScenes(projectData.scenes || []);\r\n this.hasUnsavedChanges = false;\r\n this.render();\r\n showToast('Project loaded', 'success');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * New project\r\n */\r\n newProject() {\r\n if (this.hasUnsavedChanges) {\r\n if (!confirm('You have unsaved changes. Create new project?')) {\r\n return false;\r\n }\r\n }\r\n\r\n this.config = {\r\n title: 'My Virtual Tour',\r\n description: '',\r\n initialSceneId: ''\r\n };\r\n \r\n this.sceneManager.clearScenes();\r\n this.hasUnsavedChanges = false;\r\n this.render();\r\n \r\n showToast('New project created', 'success');\r\n return true;\r\n }\r\n\r\n /**\r\n * Import project\r\n */\r\n importProject() {\r\nconst importUpload = document.getElementById('importUpload');\r\n if (importUpload) {\r\n importUpload.click();\r\n }\r\n }\r\n\r\n /**\r\n * Handle import file\r\n */\r\n async handleImportFile(file) {\r\n try {\r\n this.uiController.setLoading(true);\r\n \r\n const projectData = await this.storageManager.importFromFile(file);\r\n \r\n this.config = projectData.config || projectData;\r\n this.sceneManager.loadScenes(projectData.scenes || []);\r\n this.hasUnsavedChanges = true;\r\n \r\n this.render();\r\n this.uiController.setLoading(false);\r\n \r\n showToast('Project imported successfully', 'success');\r\n } catch (error) {\r\n this.uiController.setLoading(false);\r\n console.error('Import failed:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Mark unsaved changes\r\n */\r\n markUnsavedChanges() {\r\n this.hasUnsavedChanges = true;\r\n }\r\n}\r\n\r\n// Initialize editor when DOM is ready\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n if (document.querySelector('[data-swt-editor]')) {\r\n // Declarative initialization will handle it\r\n return;\r\n }\r\n window.editor = new TourEditor();\r\n await window.editor.init();\r\n});\r\n\r\nexport default TourEditor;\r\n","// UI Initialization - Handles color picker sync, keyboard shortcuts, tab switching, and declarative init\r\n\r\n/**\r\n * Initialize editor from declarative HTML attributes\r\n */\r\nfunction initDeclarativeEditor() {\r\n const editorElement = document.querySelector(\"[data-swt-editor]\");\r\n\r\n if (!editorElement) {\r\n return null; // No declarative editor found\r\n }\r\n\r\n // Check if auto-init is enabled\r\n const autoInit = editorElement.getAttribute(\"data-swt-auto-init\");\r\n if (autoInit !== \"true\") {\r\n return null; // Auto-init disabled\r\n }\r\n\r\n // Find required elements by data attributes\r\n const sceneListElement = editorElement.querySelector(\"[data-swt-scene-list]\");\r\n const previewElement = editorElement.querySelector(\"[data-swt-preview-area]\");\r\n const propertiesElement = editorElement.querySelector(\r\n \"[data-swt-properties-panel]\"\r\n );\r\n\r\n // Get optional configuration from attributes\r\n const projectName =\r\n editorElement.getAttribute(\"data-swt-project-name\") || \"My Virtual Tour\";\r\n const autoSave = editorElement.getAttribute(\"data-swt-auto-save\") === \"true\";\r\n const autoSaveInterval =\r\n parseInt(editorElement.getAttribute(\"data-swt-auto-save-interval\")) ||\r\n 30000;\r\n\r\n // Create and initialize editor\r\n const editor = new TourEditor({\r\n projectName,\r\n autoSave,\r\n autoSaveInterval,\r\n });\r\n\r\n // Store element references for controllers\r\n if (sceneListElement) editor.options.sceneListElement = sceneListElement;\r\n if (previewElement) editor.options.previewElement = previewElement;\r\n if (propertiesElement) editor.options.propertiesElement = propertiesElement;\r\n\r\n editor.init().catch((err) => {\r\n console.error(\"Failed to initialize declarative editor:\", err);\r\n });\r\n\r\n return editor;\r\n}\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", () => {\r\n // Try declarative initialization first\r\n const declarativeEditor = initDeclarativeEditor();\r\n\r\n if (declarativeEditor) {\r\n // Store editor instance globally for declarative mode\r\n window.editor = declarativeEditor;\r\n }\r\n\r\n // Setup color picker sync\r\n const colorPicker = document.getElementById(\"hotspotColor\");\r\n const colorText = document.getElementById(\"hotspotColorText\");\r\n\r\n if (colorPicker && colorText) {\r\n colorPicker.addEventListener(\"input\", (e) => {\r\n colorText.value = e.target.value;\r\n });\r\n\r\n colorText.addEventListener(\"input\", (e) => {\r\n if (/^#[0-9A-F]{6}$/i.test(e.target.value)) {\r\n colorPicker.value = e.target.value;\r\n }\r\n });\r\n }\r\n\r\n // Keyboard shortcuts\r\n document.addEventListener(\"keydown\", (e) => {\r\n // Ctrl/Cmd + S to save\r\n if ((e.ctrlKey || e.metaKey) && e.key === \"s\") {\r\n e.preventDefault();\r\n if (window.editor) window.editor.saveProject();\r\n }\r\n\r\n // Ctrl/Cmd + E to export\r\n if ((e.ctrlKey || e.metaKey) && e.key === \"e\") {\r\n e.preventDefault();\r\n if (window.editor) window.editor.exportManager.showExportPreview();\r\n }\r\n\r\n // ESC to close modals\r\n if (e.key === \"Escape\") {\r\n document.querySelectorAll(\".modal.show\").forEach((modal) => {\r\n modal.classList.remove(\"show\");\r\n });\r\n }\r\n });\r\n\r\n // Preview button - just focuses on the preview area\r\n const previewBtn = document.getElementById(\"previewBtn\");\r\n if (previewBtn) {\r\n previewBtn.addEventListener(\"click\", () => {\r\n const preview = document.getElementById(\"preview\");\r\n const canvas = document.getElementById(\"canvasArea\");\r\n if (preview && canvas) {\r\n canvas.classList.toggle(\"preview-active\");\r\n // refresh preview\r\n if (window.editor && window.editor.previewController) {\r\n window.editor.previewController.refresh();\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Modal background click to close\r\n document.querySelectorAll(\".modal\").forEach((modal) => {\r\n modal.addEventListener(\"click\", (e) => {\r\n if (e.target === modal) {\r\n modal.classList.remove(\"show\");\r\n }\r\n });\r\n });\r\n\r\n // Tab switching functionality\r\n const tabs = document.querySelectorAll(\".tab\");\r\n const tabContents = document.querySelectorAll(\".tab-content\");\r\n\r\n tabs.forEach((tab) => {\r\n tab.addEventListener(\"click\", () => {\r\n const targetTab = tab.dataset.tab;\r\n\r\n // Update tab buttons\r\n tabs.forEach((t) => t.classList.remove(\"active\"));\r\n tab.classList.add(\"active\");\r\n\r\n // Update tab content\r\n tabContents.forEach((content) => {\r\n content.style.display = \"none\";\r\n });\r\n\r\n const targetContent = document.getElementById(targetTab + \"Tab\");\r\n if (targetContent) {\r\n targetContent.style.display = \"block\";\r\n }\r\n\r\n // Update panel title (if exists)\r\n const panelTitle = document.getElementById(\"panelTitle\");\r\n if (panelTitle) {\r\n switch (targetTab) {\r\n case \"scene\":\r\n panelTitle.textContent = \"Scene Properties\";\r\n break;\r\n case \"hotspot\":\r\n panelTitle.textContent = \"Hotspot Properties\";\r\n break;\r\n case \"tour\":\r\n panelTitle.textContent = \"Tour Settings\";\r\n break;\r\n }\r\n }\r\n });\r\n });\r\n});\r\n","// SenangWebs Tour Editor - Entry Point\r\n// This file bundles all editor modules for distribution\r\n\r\n// Import utility functions and make them global\r\nimport * as utils from './js/utils.js';\r\nObject.assign(window, utils);\r\n\r\n// Import classes\r\nimport ProjectStorageManager from './js/storage-manager.js';\r\nimport SceneManagerEditor from './js/scene-manager.js';\r\nimport HotspotEditor from './js/hotspot-editor.js';\r\nimport PreviewController from './js/preview-controller.js';\r\nimport UIController from './js/ui-controller.js';\r\nimport ExportManager from './js/export-manager.js';\r\nimport TourEditor from './js/editor.js';\r\n\r\n// Attach classes to window for global access\r\nwindow.ProjectStorageManager = ProjectStorageManager;\r\nwindow.SceneManagerEditor = SceneManagerEditor;\r\nwindow.HotspotEditor = HotspotEditor;\r\nwindow.PreviewController = PreviewController;\r\nwindow.UIController = UIController;\r\nwindow.ExportManager = ExportManager;\r\nwindow.TourEditor = TourEditor;\r\n\r\n// Import and execute UI initialization\r\nimport './js/ui-init.js';\r\n\r\n// Export main editor class for potential programmatic use\r\nexport default TourEditor;\r\n"],"names":["sanitizeId","showToast","hideModal","deepClone","TourEditor","ProjectStorageManager","SceneManagerEditor","HotspotEditor","PreviewController","UIController","ExportManager"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"swt-editor.js","sources":["../src/editor/js/utils.js","../src/editor/js/storage-manager.js","../src/editor/js/scene-manager.js","../src/editor/js/hotspot-editor.js","../src/editor/js/data-transform.js","../src/editor/js/preview-controller.js","../src/editor/js/ui-controller.js","../src/IconRenderer.js","../src/editor/js/export-manager.js","../src/editor/js/editor.js","../src/editor/js/ui-init.js","../src/editor/editor-entry.js"],"sourcesContent":["// Utility Functions\r\n\r\n/**\r\n * Generate a unique ID\r\n */\r\nfunction generateId(prefix = 'id') {\r\n return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n}\r\n\r\n/**\r\n * Sanitize string for use as ID\r\n */\r\nfunction sanitizeId(str) {\r\n return str.toLowerCase()\r\n .replace(/[^a-z0-9]+/g, '_')\r\n .replace(/^_+|_+$/g, '');\r\n}\r\n\r\n/**\r\n * Generate thumbnail from image file\r\n */\r\nasync function generateThumbnail(file, maxWidth = 200, maxHeight = 150) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n \r\n reader.onload = (e) => {\r\n const img = new Image();\r\n \r\n img.onload = () => {\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n \r\n let width = img.width;\r\n let height = img.height;\r\n \r\n if (width > height) {\r\n if (width > maxWidth) {\r\n height *= maxWidth / width;\r\n width = maxWidth;\r\n }\r\n } else {\r\n if (height > maxHeight) {\r\n width *= maxHeight / height;\r\n height = maxHeight;\r\n }\r\n }\r\n \r\n canvas.width = width;\r\n canvas.height = height;\r\n ctx.drawImage(img, 0, 0, width, height);\r\n \r\n resolve(canvas.toDataURL('image/jpeg', 0.7));\r\n };\r\n \r\n img.onerror = reject;\r\n img.src = e.target.result;\r\n };\r\n \r\n reader.onerror = reject;\r\n reader.readAsDataURL(file);\r\n });\r\n}\r\n\r\n/**\r\n * Load image file as data URL\r\n */\r\nasync function loadImageAsDataUrl(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => resolve(e.target.result);\r\n reader.onerror = reject;\r\n reader.readAsDataURL(file);\r\n });\r\n}\r\n\r\n/**\r\n * Show toast notification\r\n */\r\nfunction showToast(message, type = 'info', duration = 3000) {\r\n const toast = document.getElementById('toast');\r\n toast.textContent = message;\r\n toast.className = `toast ${type}`;\r\n toast.classList.add('show');\r\n \r\n setTimeout(() => {\r\n toast.classList.remove('show');\r\n }, duration);\r\n}\r\n\r\n/**\r\n * Show modal\r\n */\r\nfunction showModal(modalId) {\r\n const modal = document.getElementById(modalId);\r\n if (modal) {\r\n modal.classList.add('show');\r\n }\r\n}\r\n\r\n/**\r\n * Hide modal\r\n */\r\nfunction hideModal(modalId) {\r\n const modal = document.getElementById(modalId);\r\n if (modal) {\r\n modal.classList.remove('show');\r\n }\r\n}\r\n\r\n/**\r\n * Format file size\r\n */\r\nfunction formatFileSize(bytes) {\r\n if (bytes === 0) return '0 Bytes';\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * Download text as file\r\n */\r\nfunction downloadTextAsFile(text, filename) {\r\n const blob = new Blob([text], { type: 'text/plain' });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n}\r\n\r\n/**\r\n * Copy text to clipboard\r\n */\r\nasync function copyToClipboard(text) {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch (err) {\r\n // Fallback for older browsers\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.style.position = 'fixed';\r\n textarea.style.opacity = '0';\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n const success = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n return success;\r\n }\r\n}\r\n\r\n/**\r\n * Debounce function\r\n */\r\nfunction debounce(func, wait) {\r\n let timeout;\r\n return function executedFunction(...args) {\r\n const later = () => {\r\n clearTimeout(timeout);\r\n func(...args);\r\n };\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n };\r\n}\r\n\r\n/**\r\n * Convert position object to string\r\n */\r\nfunction positionToString(pos) {\r\n return `${pos.x.toFixed(1)} ${pos.y.toFixed(1)} ${pos.z.toFixed(1)}`;\r\n}\r\n\r\n/**\r\n * Parse position string to object\r\n */\r\nfunction parsePosition(str) {\r\n const parts = str.split(' ').map(Number);\r\n return { x: parts[0] || 0, y: parts[1] || 0, z: parts[2] || 0 };\r\n}\r\n\r\n/**\r\n * Validate email\r\n */\r\nfunction isValidEmail(email) {\r\n const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return re.test(email);\r\n}\r\n\r\n/**\r\n * Deep clone object\r\n */\r\nfunction deepClone(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\nexport {\r\n generateId,\r\n sanitizeId,\r\n generateThumbnail,\r\n loadImageAsDataUrl,\r\n showToast,\r\n showModal,\r\n hideModal,\r\n formatFileSize,\r\n downloadTextAsFile,\r\n copyToClipboard,\r\n debounce,\r\n positionToString,\r\n parsePosition,\r\n isValidEmail,\r\n deepClone\r\n};\r\n","// Storage Manager - Handles LocalStorage operations\r\nimport { downloadTextAsFile, showToast } from \"./utils.js\";\r\n\r\nclass ProjectStorageManager {\r\n constructor() {\r\n this.storageKey = \"swt_project\";\r\n this.autoSaveInterval = null;\r\n this.autoSaveDelay = 30000; // 30 seconds\r\n }\r\n\r\n /**\r\n * Save project to localStorage\r\n */\r\n saveProject(projectData) {\r\n try {\r\n const json = JSON.stringify(projectData);\r\n localStorage.setItem(this.storageKey, json);\r\n localStorage.setItem(\r\n this.storageKey + \"_lastSaved\",\r\n new Date().toISOString()\r\n );\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to save project:\", error);\r\n if (error.name === \"QuotaExceededError\") {\r\n showToast(\"Storage quota exceeded. Project too large!\", \"error\");\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Load project from localStorage\r\n */\r\n loadProject() {\r\n try {\r\n const json = localStorage.getItem(this.storageKey);\r\n if (json) {\r\n const projectData = JSON.parse(json);\r\n\r\n // Validate and migrate data if needed\r\n if (!this.validateProjectData(projectData)) {\r\n console.error(\"Invalid project data structure\");\r\n return null;\r\n }\r\n\r\n return projectData;\r\n }\r\n return null;\r\n } catch (error) {\r\n console.error(\"Failed to load project:\", error);\r\n showToast(\"Failed to load project\", \"error\");\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Validate project data structure\r\n */\r\n validateProjectData(projectData) {\r\n if (!projectData || typeof projectData !== \"object\") {\r\n return false;\r\n }\r\n\r\n // Check if scenes array exists and is valid\r\n if (!projectData.scenes || !Array.isArray(projectData.scenes)) {\r\n return false;\r\n }\r\n\r\n // Validate each scene has required properties\r\n for (const scene of projectData.scenes) {\r\n if (!scene || typeof scene !== \"object\") {\r\n return false;\r\n }\r\n\r\n // Required scene properties\r\n if (!scene.id || typeof scene.id !== \"string\") {\r\n return false;\r\n }\r\n\r\n // panorama or imageUrl is required for scenes to be valid (support both formats)\r\n const hasImage = (scene.panorama && typeof scene.panorama === \"string\") ||\r\n (scene.imageUrl && typeof scene.imageUrl === \"string\");\r\n if (!hasImage) {\r\n return false;\r\n }\r\n\r\n // Hotspots array should exist (can be empty)\r\n if (!Array.isArray(scene.hotspots)) {\r\n scene.hotspots = []; // Auto-fix missing hotspots array\r\n }\r\n }\r\n\r\n // Ensure config exists\r\n if (!projectData.config || typeof projectData.config !== \"object\") {\r\n projectData.config = { title: \"My Virtual Tour\" };\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Clear project from localStorage\r\n */\r\n clearProject() {\r\n try {\r\n localStorage.removeItem(this.storageKey);\r\n localStorage.removeItem(this.storageKey + \"_lastSaved\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to clear project:\", error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if project exists in localStorage\r\n */\r\n hasProject() {\r\n return localStorage.getItem(this.storageKey) !== null;\r\n }\r\n\r\n /**\r\n * Get last saved date\r\n */\r\n getLastSavedDate() {\r\n const dateStr = localStorage.getItem(this.storageKey + \"_lastSaved\");\r\n return dateStr ? new Date(dateStr) : null;\r\n }\r\n\r\n /**\r\n * Start auto-save\r\n */\r\n startAutoSave(callback) {\r\n this.stopAutoSave();\r\n this.autoSaveInterval = setInterval(() => {\r\n callback();\r\n }, this.autoSaveDelay);\r\n }\r\n\r\n /**\r\n * Stop auto-save\r\n */\r\n stopAutoSave() {\r\n if (this.autoSaveInterval) {\r\n clearInterval(this.autoSaveInterval);\r\n this.autoSaveInterval = null;\r\n }\r\n }\r\n\r\n /**\r\n * Export project to file\r\n */\r\n exportToFile(projectData, filename = \"tour.json\") {\r\n try {\r\n const json = JSON.stringify(projectData, null, 2);\r\n downloadTextAsFile(json, filename);\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to export project:\", error);\r\n showToast(\"Failed to export project\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Import project from file\r\n */\r\n async importFromFile(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = (e) => {\r\n try {\r\n const projectData = JSON.parse(e.target.result);\r\n resolve(projectData);\r\n } catch (error) {\r\n console.error(\"Failed to parse project file:\", error);\r\n showToast(\"Invalid project file\", \"error\");\r\n reject(error);\r\n }\r\n };\r\n\r\n reader.onerror = () => {\r\n console.error(\"Failed to read file:\", reader.error);\r\n showToast(\"Failed to read file\", \"error\");\r\n reject(reader.error);\r\n };\r\n\r\n reader.readAsText(file);\r\n });\r\n }\r\n}\r\n\r\nexport default ProjectStorageManager;\r\n","// Scene Manager - Handles scene operations\r\nimport {\r\n generateThumbnail,\r\n loadImageAsDataUrl,\r\n sanitizeId,\r\n showToast,\r\n} from \"./utils.js\";\r\n\r\nclass SceneManagerEditor {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.scenes = [];\r\n this.currentSceneIndex = -1;\r\n }\r\n\r\n /**\r\n * Add new scene\r\n * @param {File|Object} fileOrConfig - Either a File object or a scene config object\r\n * @param {string} fileOrConfig.id - Scene ID (if config object)\r\n * @param {string} fileOrConfig.name - Scene name (if config object)\r\n * @param {string} fileOrConfig.panorama - Panorama URL (if config object)\r\n * @param {string} fileOrConfig.thumbnail - Thumbnail URL (if config object)\r\n * @param {Array} fileOrConfig.hotspots - Hotspots array (if config object)\r\n */\r\n async addScene(fileOrConfig) {\r\n try {\r\n let scene;\r\n\r\n // Check if it's a File/Blob or a config object\r\n if (fileOrConfig instanceof File || fileOrConfig instanceof Blob) {\r\n // Original behavior: handle File upload\r\n const thumbnail = await generateThumbnail(fileOrConfig);\r\n const imageDataUrl = await loadImageAsDataUrl(fileOrConfig);\r\n\r\n scene = {\r\n id: sanitizeId(fileOrConfig.name.replace(/\\.[^/.]+$/, \"\")),\r\n name: fileOrConfig.name.replace(/\\.[^/.]+$/, \"\"),\r\n panorama: imageDataUrl,\r\n thumbnail: thumbnail,\r\n hotspots: [],\r\n };\r\n } else if (typeof fileOrConfig === \"object\" && fileOrConfig !== null) {\r\n // Handle config object - support both panorama and imageUrl for backward compatibility\r\n scene = {\r\n id: fileOrConfig.id || sanitizeId(`scene-${Date.now()}`),\r\n name: fileOrConfig.name || \"Untitled Scene\",\r\n panorama: fileOrConfig.panorama || fileOrConfig.imageUrl || \"\",\r\n thumbnail: fileOrConfig.thumbnail || fileOrConfig.panorama || fileOrConfig.imageUrl || \"\",\r\n hotspots: fileOrConfig.hotspots || [],\r\n ...(fileOrConfig.startingPosition && { startingPosition: fileOrConfig.startingPosition }),\r\n };\r\n } else {\r\n throw new Error(\"Invalid argument: expected File, Blob, or scene config object\");\r\n }\r\n\r\n this.scenes.push(scene);\r\n this.currentSceneIndex = this.scenes.length - 1;\r\n showToast(`Scene \"${scene.name}\" added successfully`, \"success\");\r\n return scene;\r\n } catch (error) {\r\n console.error(\"Failed to add scene:\", error);\r\n showToast(\"Failed to add scene\", \"error\");\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Remove scene by index\r\n */\r\n removeScene(index) {\r\n if (index >= 0 && index < this.scenes.length) {\r\n const scene = this.scenes[index];\r\n\r\n // Confirm deletion\r\n if (!confirm(`Are you sure you want to delete scene \"${scene.name}\"?`)) {\r\n return false;\r\n }\r\n\r\n this.scenes.splice(index, 1);\r\n\r\n // Update current scene index\r\n if (this.currentSceneIndex === index) {\r\n this.currentSceneIndex = Math.min(\r\n this.currentSceneIndex,\r\n this.scenes.length - 1\r\n );\r\n } else if (this.currentSceneIndex > index) {\r\n this.currentSceneIndex--;\r\n }\r\n\r\n showToast(`Scene \"${scene.name}\" removed`, \"success\");\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get scene by index\r\n */\r\n getScene(index) {\r\n return this.scenes[index] || null;\r\n }\r\n\r\n /**\r\n * Get scene by ID\r\n */\r\n getSceneById(id) {\r\n return this.scenes.find((s) => s.id === id) || null;\r\n }\r\n\r\n /**\r\n * Update scene property\r\n */\r\n updateScene(index, property, value) {\r\n if (index >= 0 && index < this.scenes.length) {\r\n this.scenes[index][property] = value;\r\n\r\n // If updating ID, update all hotspot target references (uses nested action.target)\r\n if (property === \"id\") {\r\n const oldId = this.scenes[index].id;\r\n this.scenes.forEach((scene) => {\r\n scene.hotspots.forEach((hotspot) => {\r\n if (hotspot.action?.target === oldId) {\r\n hotspot.action.target = value;\r\n }\r\n });\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Reorder scenes\r\n */\r\n reorderScenes(fromIndex, toIndex) {\r\n if (\r\n fromIndex >= 0 &&\r\n fromIndex < this.scenes.length &&\r\n toIndex >= 0 &&\r\n toIndex < this.scenes.length\r\n ) {\r\n const scene = this.scenes.splice(fromIndex, 1)[0];\r\n this.scenes.splice(toIndex, 0, scene);\r\n\r\n // Update current scene index\r\n if (this.currentSceneIndex === fromIndex) {\r\n this.currentSceneIndex = toIndex;\r\n } else if (\r\n fromIndex < this.currentSceneIndex &&\r\n toIndex >= this.currentSceneIndex\r\n ) {\r\n this.currentSceneIndex--;\r\n } else if (\r\n fromIndex > this.currentSceneIndex &&\r\n toIndex <= this.currentSceneIndex\r\n ) {\r\n this.currentSceneIndex++;\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get current scene\r\n */\r\n getCurrentScene() {\r\n return this.getScene(this.currentSceneIndex);\r\n }\r\n\r\n /**\r\n * Set current scene by index\r\n */\r\n setCurrentScene(index) {\r\n if (index >= 0 && index < this.scenes.length) {\r\n this.currentSceneIndex = index;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get all scenes\r\n */\r\n getAllScenes() {\r\n return this.scenes;\r\n }\r\n\r\n /**\r\n * Get all scenes (alias for getAllScenes)\r\n */\r\n getScenes() {\r\n return this.scenes;\r\n }\r\n\r\n /**\r\n * Clear all scenes\r\n */\r\n clearScenes() {\r\n if (this.scenes.length > 0) {\r\n if (!confirm(\"Are you sure you want to clear all scenes?\")) {\r\n return false;\r\n }\r\n }\r\n\r\n this.scenes = [];\r\n this.currentSceneIndex = -1;\r\n return true;\r\n }\r\n\r\n /**\r\n * Load scenes from data\r\n */\r\n loadScenes(scenesData) {\r\n this.scenes = scenesData || [];\r\n this.currentSceneIndex = this.scenes.length > 0 ? 0 : -1;\r\n }\r\n}\r\n\r\nexport default SceneManagerEditor;\r\n","// Hotspot Editor - Handles hotspot placement and editing\r\nimport { generateId, showToast } from './utils.js';\r\n\r\nclass HotspotEditor {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.currentHotspotIndex = -1;\r\n }\r\n\r\n /**\r\n * Add hotspot at position\r\n * @param {Object} position - The 3D position {x, y, z}\r\n * @param {string} targetSceneId - Target scene ID for navigation\r\n * @param {Object} cameraOrientation - Camera orientation at creation {pitch, yaw} in radians\r\n */\r\n addHotspot(position, targetSceneId = '', cameraOrientation = null) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('No scene selected', 'error');\r\n return null;\r\n }\r\n\r\n // Use unified library format with nested structure\r\n const hotspot = {\r\n id: generateId('hotspot'),\r\n position: position,\r\n cameraOrientation: cameraOrientation,\r\n action: {\r\n type: 'navigateTo',\r\n target: targetSceneId\r\n },\r\n appearance: {\r\n color: '#00ff00',\r\n scale: '1 1 1',\r\n icon: ''\r\n },\r\n tooltip: {\r\n text: 'New Hotspot',\r\n description: ''\r\n }\r\n };\r\n\r\n scene.hotspots.push(hotspot);\r\n this.currentHotspotIndex = scene.hotspots.length - 1;\r\n \r\n showToast('Hotspot added', 'success');\r\n \r\n return hotspot;\r\n }\r\n\r\n /**\r\n * Remove hotspot\r\n */\r\n removeHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return false;\r\n }\r\n\r\n if (!confirm('Are you sure you want to delete this hotspot?')) {\r\n return false;\r\n }\r\n\r\n scene.hotspots.splice(index, 1);\r\n \r\n // Update current index\r\n if (this.currentHotspotIndex === index) {\r\n this.currentHotspotIndex = -1;\r\n } else if (this.currentHotspotIndex > index) {\r\n this.currentHotspotIndex--;\r\n }\r\n\r\n showToast('Hotspot removed', 'success');\r\n return true;\r\n }\r\n\r\n /**\r\n * Update hotspot property\r\n * Supports nested properties like 'appearance.color', 'action.target', 'tooltip.text'\r\n */\r\n updateHotspot(index, property, value) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return false;\r\n }\r\n\r\n const hotspot = scene.hotspots[index];\r\n \r\n // Handle nested properties (e.g., 'appearance.color')\r\n if (property.includes('.')) {\r\n const parts = property.split('.');\r\n let obj = hotspot;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n if (!obj[parts[i]]) {\r\n obj[parts[i]] = {};\r\n }\r\n obj = obj[parts[i]];\r\n }\r\n obj[parts[parts.length - 1]] = value;\r\n } else {\r\n hotspot[property] = value;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n /**\r\n * Get hotspot by index\r\n */\r\n getHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return null;\r\n }\r\n return scene.hotspots[index];\r\n }\r\n\r\n /**\r\n * Update hotspot position\r\n */\r\n updateHotspotPosition(index, position) {\r\n return this.updateHotspot(index, 'position', position);\r\n }\r\n\r\n /**\r\n * Get current hotspot\r\n */\r\n getCurrentHotspot() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || this.currentHotspotIndex < 0) {\r\n return null;\r\n }\r\n return scene.hotspots[this.currentHotspotIndex] || null;\r\n }\r\n\r\n /**\r\n * Set current hotspot\r\n */\r\n setCurrentHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n this.currentHotspotIndex = -1;\r\n return false;\r\n }\r\n \r\n this.currentHotspotIndex = index;\r\n return true;\r\n }\r\n\r\n /**\r\n * Get all hotspots for current scene\r\n */\r\n getAllHotspots() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n return scene ? scene.hotspots : [];\r\n }\r\n\r\n /**\r\n * Duplicate hotspot\r\n */\r\n duplicateHotspot(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || index < 0 || index >= scene.hotspots.length) {\r\n return null;\r\n }\r\n\r\n const original = scene.hotspots[index];\r\n const duplicate = deepClone(original);\r\n duplicate.id = generateId('hotspot');\r\n if (duplicate.tooltip) {\r\n duplicate.tooltip.text = (original.tooltip?.text || 'Hotspot') + ' (Copy)';\r\n }\r\n \r\n // Offset position slightly\r\n duplicate.position = {\r\n x: original.position.x + 0.5,\r\n y: original.position.y,\r\n z: original.position.z\r\n };\r\n \r\n // Clear camera orientation since position changed - will fallback to position-based calculation\r\n duplicate.cameraOrientation = null;\r\n\r\n scene.hotspots.push(duplicate);\r\n this.currentHotspotIndex = scene.hotspots.length - 1;\r\n \r\n showToast('Hotspot duplicated', 'success');\r\n return duplicate;\r\n }\r\n\r\n /**\r\n * Clear all hotspots\r\n */\r\n clearAllHotspots() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n return false;\r\n }\r\n\r\n if (scene.hotspots.length === 0) {\r\n return true;\r\n }\r\n\r\n if (!confirm('Are you sure you want to remove all hotspots from this scene?')) {\r\n return false;\r\n }\r\n\r\n scene.hotspots = [];\r\n this.currentHotspotIndex = -1;\r\n \r\n showToast('All hotspots removed', 'success');\r\n return true;\r\n }\r\n}\r\n\r\nexport default HotspotEditor;\r\n","/**\r\n * Data Transform Utilities\r\n * \r\n * With the unified format, editor and library use the same structure:\r\n * - scenes: Array of scene objects with `panorama`\r\n * - hotspots: nested properties (action, appearance, tooltip)\r\n * \r\n * These utilities handle building the tour config for the SWT library.\r\n */\r\n\r\n/**\r\n * Build a complete tour configuration for the SWT library\r\n * Since unified format is used, this just wraps the scenes array with config\r\n * @param {Object} config - Config with initialSceneId, etc.\r\n * @param {Array} scenes - Array of scenes (already in unified format)\r\n * @returns {Object} Complete tour config\r\n */\r\nexport function buildTourConfig(config, scenes) {\r\n // Determine initial scene\r\n let initialScene = config.initialSceneId;\r\n if (!initialScene && scenes && scenes.length > 0) {\r\n initialScene = scenes[0].id;\r\n }\r\n\r\n return {\r\n initialScene: initialScene,\r\n scenes: scenes || [],\r\n };\r\n}\r\n\r\n/**\r\n * Build tour config for preview (sets initial scene to current scene)\r\n * @param {Object} currentScene - The scene to show initially\r\n * @param {Array} allScenes - All scenes for navigation support\r\n * @returns {Object} Complete tour config\r\n */\r\nexport function buildPreviewTourConfig(currentScene, allScenes) {\r\n return buildTourConfig(\r\n { initialSceneId: currentScene.id },\r\n allScenes\r\n );\r\n}\r\n","// Preview Controller - Manages A-Frame preview integration using SWT library\r\nimport { showToast } from \"./utils.js\";\r\nimport { buildPreviewTourConfig } from \"./data-transform.js\";\r\n\r\nclass PreviewController {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.tour = null;\r\n this.isInitialized = false;\r\n this.previewContainer = null;\r\n this.hasLoadedScene = false; // Track if we've ever loaded a scene\r\n }\r\n\r\n /**\r\n * Initialize A-Frame preview\r\n */\r\n async init() {\r\n this.previewContainer = document.getElementById(\"preview\");\r\n if (!this.previewContainer) {\r\n console.error(\"Preview element not found\");\r\n return false;\r\n }\r\n\r\n // Wait for A-Frame to be loaded\r\n if (typeof AFRAME === \"undefined\") {\r\n await this.waitForLibrary(\"AFRAME\", 5000);\r\n }\r\n\r\n // Wait for SWT library to be loaded\r\n if (typeof SWT === \"undefined\") {\r\n await this.waitForLibrary(\"SWT\", 5000);\r\n }\r\n this.isInitialized = true;\r\n return true;\r\n }\r\n\r\n /**\r\n * Wait for a global library to be available\r\n */\r\n async waitForLibrary(libraryName, timeout = 5000) {\r\n const startTime = Date.now();\r\n\r\n while (typeof window[libraryName] === \"undefined\") {\r\n if (Date.now() - startTime > timeout) {\r\n throw new Error(`Timeout waiting for ${libraryName} to load`);\r\n }\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n }\r\n }\r\n\r\n /**\r\n * Load scene into preview using SWT library\r\n * Scenes and hotspots now use unified library format directly\r\n */\r\n async loadScene(scene, preserveCameraRotation = true) {\r\n if (!this.isInitialized || !scene) {\r\n return;\r\n }\r\n\r\n // Validate scene has required data (panorama or imageUrl for backward compatibility)\r\n const panoramaUrl = scene.panorama || scene.imageUrl;\r\n if (!panoramaUrl || !scene.id) {\r\n console.error(\"Invalid scene data:\", scene);\r\n return;\r\n }\r\n\r\n // Show loading animation\r\n this.showLoading();\r\n\r\n // Save camera rotation before destroying scene\r\n let savedRotation = null;\r\n if (preserveCameraRotation && this.tour) {\r\n savedRotation = this.getCameraRotation();\r\n }\r\n\r\n // Destroy existing tour if any\r\n if (this.tour) {\r\n try {\r\n this.tour.destroy();\r\n } catch (error) {\r\n console.error(\"Error destroying tour:\", error);\r\n }\r\n this.tour = null;\r\n }\r\n\r\n // Clear preview container carefully\r\n // Only do complex cleanup if we've actually loaded a scene before\r\n if (this.hasLoadedScene) {\r\n const existingScene = this.previewContainer.querySelector(\"a-scene\");\r\n if (existingScene) {\r\n try {\r\n // Remove the scene element - A-Frame will handle cleanup if it's ready\r\n this.previewContainer.removeChild(existingScene);\r\n } catch (error) {\r\n console.error(\"Error removing scene:\", error);\r\n }\r\n }\r\n\r\n // Clear any remaining children (loading overlays, empty state, etc)\r\n while (this.previewContainer.firstChild) {\r\n this.previewContainer.removeChild(this.previewContainer.firstChild);\r\n }\r\n } else {\r\n // First load - only remove non-A-Frame elements (like empty state divs)\r\n const children = Array.from(this.previewContainer.children);\r\n children.forEach((child) => {\r\n // Only remove if it's NOT an a-scene (shouldn't be any, but be safe)\r\n if (child.tagName.toLowerCase() !== \"a-scene\") {\r\n this.previewContainer.removeChild(child);\r\n }\r\n });\r\n }\r\n\r\n // Create loading overlay (will be removed after scene loads)\r\n const loadingOverlay = this.createLoadingOverlay();\r\n this.previewContainer.appendChild(loadingOverlay);\r\n\r\n // Create A-Frame scene\r\n const aframeScene = document.createElement(\"a-scene\");\r\n aframeScene.id = \"preview-scene\";\r\n aframeScene.setAttribute(\"embedded\", \"\");\r\n aframeScene.setAttribute(\"vr-mode-ui\", \"enabled: false;\");\r\n this.previewContainer.appendChild(aframeScene);\r\n\r\n // Give A-Frame a moment to start initializing before we proceed\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n\r\n // Build tour config using shared transform utilities\r\n // This includes ALL scenes for navigation support\r\n const editorScenes = this.editor.sceneManager.scenes || [];\r\n const tourConfig = buildPreviewTourConfig(scene, editorScenes);\r\n\r\n try {\r\n // Create new tour instance\r\n this.tour = new SWT.Tour(aframeScene, tourConfig);\r\n\r\n // Set up event listeners\r\n this.tour.addEventListener(\"tour-started\", (e) => {});\r\n\r\n this.tour.addEventListener(\"scene-loaded\", (e) => {});\r\n\r\n this.tour.addEventListener(\"hotspot-activated\", (e) => {\r\n // Find the hotspot index by ID and select it\r\n const hotspotId = e.detail?.hotspotId;\r\n if (hotspotId) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (scene) {\r\n const hotspotIndex = scene.hotspots.findIndex(\r\n (h) => h.id === hotspotId\r\n );\r\n if (hotspotIndex >= 0) {\r\n this.editor.selectHotspot(hotspotIndex);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Start the tour\r\n await this.tour.start();\r\n\r\n // Mark that we've successfully loaded a scene\r\n this.hasLoadedScene = true;\r\n\r\n // Hide loading animation after scene loads\r\n this.hideLoading();\r\n\r\n // Handle camera rotation after scene loads\r\n if (savedRotation && preserveCameraRotation) {\r\n // Restore previous camera rotation\r\n this.setCameraRotation(savedRotation);\r\n } else if (scene.startingPosition) {\r\n // Set camera to scene's starting position immediately\r\n this.setCameraRotation({\r\n x: scene.startingPosition.pitch,\r\n y: scene.startingPosition.yaw,\r\n z: 0\r\n });\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to load preview:\", error);\r\n showToast(\"Failed to load preview: \" + error.message, \"error\");\r\n // Hide loading on error\r\n this.hideLoading();\r\n }\r\n }\r\n\r\n /**\r\n * Get the current cursor intersection point with the sky sphere.\r\n * Raycasts from the camera center (where the A-Cursor points) to find the intersection.\r\n * @returns {Object|null} The 3D position {x, y, z} or null if no intersection\r\n */\r\n getCursorIntersection() {\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return null;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n const sky = aframeScene.querySelector(\"a-sky\");\r\n\r\n if (!camera || !sky) {\r\n return null;\r\n }\r\n\r\n // Get pitch and yaw from look-controls (the authoritative source in A-Frame)\r\n const lookControls = camera.components?.[\"look-controls\"];\r\n let pitch = 0;\r\n let yaw = 0;\r\n\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n pitch = lookControls.pitchObject.rotation.x;\r\n yaw = lookControls.yawObject.rotation.y;\r\n } else {\r\n // Fallback to object3D rotation\r\n pitch = camera.object3D.rotation.x;\r\n yaw = camera.object3D.rotation.y;\r\n }\r\n\r\n // Calculate direction vector from pitch/yaw\r\n // In A-Frame/Three.js coordinate system:\r\n // - Looking forward is -Z\r\n // - Yaw rotates around Y axis\r\n // - Pitch rotates around X axis\r\n const direction = new THREE.Vector3();\r\n direction.x = -Math.sin(yaw) * Math.cos(pitch);\r\n direction.y = Math.sin(pitch);\r\n direction.z = -Math.cos(yaw) * Math.cos(pitch);\r\n direction.normalize();\r\n\r\n // Create raycaster from camera position in the direction we're looking\r\n const raycaster = new THREE.Raycaster();\r\n const origin = new THREE.Vector3(0, 0, 0); // Camera is typically at origin in 360 viewer\r\n raycaster.set(origin, direction);\r\n\r\n // Raycast against the sky sphere\r\n const intersects = raycaster.intersectObject(sky.object3D, true);\r\n\r\n if (intersects.length > 0) {\r\n const point = intersects[0].point;\r\n \r\n // Calculate an upward offset to center the hotspot visual on the cursor\r\n // The offset is applied along the \"up\" direction relative to the sphere surface\r\n // For a sphere, we shift the point slightly in the Y direction (vertical up in world space)\r\n // The offset compensates for the hotspot visual being centered, so the top aligns with cursor\r\n const offsetAmount = 200; // Adjust this value to fine-tune alignment\r\n \r\n return {\r\n x: parseFloat(point.x.toFixed(2)),\r\n y: parseFloat((point.y + offsetAmount).toFixed(2)),\r\n z: parseFloat(point.z.toFixed(2)),\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Get current camera rotation\r\n * Works with A-Frame's look-controls component by reading its internal state\r\n */\r\n getCameraRotation() {\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return null;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n if (!camera) {\r\n return null;\r\n }\r\n\r\n // Try to get rotation from look-controls internal state (more reliable)\r\n const lookControls = camera.components?.[\"look-controls\"];\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n const savedRotation = {\r\n x: lookControls.pitchObject.rotation.x,\r\n y: lookControls.yawObject.rotation.y,\r\n z: 0,\r\n };\r\n return savedRotation;\r\n }\r\n\r\n // Fallback to object3D rotation\r\n const rotation = camera.object3D.rotation;\r\n const savedRotation = {\r\n x: rotation.x,\r\n y: rotation.y,\r\n z: rotation.z,\r\n };\r\n return savedRotation;\r\n }\r\n\r\n /**\r\n * Set camera rotation\r\n * Works with A-Frame's look-controls component by setting its internal state\r\n */\r\n setCameraRotation(rotation) {\r\n if (!rotation) {\r\n return;\r\n }\r\n\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n if (!camera) {\r\n return;\r\n }\r\n\r\n // Set rotation via look-controls internal pitchObject/yawObject\r\n // This is required because look-controls overrides object3D.rotation on each tick\r\n const setRotation = () => {\r\n const cam = this.previewContainer?.querySelector(\"[camera]\");\r\n if (!cam) return;\r\n\r\n const lookControls = cam.components?.[\"look-controls\"];\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n // Set pitch (x rotation) on pitchObject\r\n lookControls.pitchObject.rotation.x = rotation.x;\r\n // Set yaw (y rotation) on yawObject\r\n lookControls.yawObject.rotation.y = rotation.y;\r\n } else if (cam.object3D) {\r\n // Fallback to direct object3D if look-controls not ready\r\n cam.object3D.rotation.set(rotation.x, rotation.y, rotation.z);\r\n }\r\n };\r\n\r\n // Try immediately and also after delays to ensure it sticks\r\n // A-Frame look-controls may not be fully initialized immediately\r\n setRotation();\r\n setTimeout(setRotation, 100);\r\n setTimeout(setRotation, 300);\r\n setTimeout(setRotation, 500);\r\n }\r\n\r\n /**\r\n * Refresh preview (reload current scene while preserving camera rotation)\r\n */\r\n async refresh() {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (scene) {\r\n // loadScene with preserveCameraRotation=true handles save/restore internally\r\n await this.loadScene(scene, true);\r\n }\r\n }\r\n\r\n /**\r\n * Reset camera\r\n */\r\n resetCamera() {\r\n const camera = this.previewContainer?.querySelector(\"[camera]\");\r\n if (camera) {\r\n camera.setAttribute(\"rotation\", \"0 0 0\");\r\n }\r\n }\r\n\r\n /**\r\n * Point camera to hotspot\r\n * Uses stored camera orientation if available, otherwise calculates from position\r\n * @param {Object} hotspot - The hotspot object with position and optional cameraOrientation\r\n */\r\n pointCameraToHotspot(hotspot) {\r\n if (!hotspot) {\r\n return;\r\n }\r\n\r\n const aframeScene = this.previewContainer?.querySelector(\"a-scene\");\r\n if (!aframeScene) {\r\n return;\r\n }\r\n\r\n const camera = aframeScene.querySelector(\"[camera]\");\r\n if (!camera || !camera.object3D) {\r\n return;\r\n }\r\n\r\n let pitch, yaw;\r\n\r\n // Use stored camera orientation if available (more reliable)\r\n if (hotspot.cameraOrientation) {\r\n // Stored values are in radians, convert to degrees for animateCameraRotation\r\n pitch = hotspot.cameraOrientation.pitch * (180 / Math.PI);\r\n yaw = hotspot.cameraOrientation.yaw * (180 / Math.PI);\r\n } else if (hotspot.position) {\r\n // Fallback: calculate from position (for legacy hotspots without cameraOrientation)\r\n const hotspotPosition = hotspot.position;\r\n const cameraPos = camera.object3D.position;\r\n\r\n // Calculate direction vector from camera to hotspot\r\n const direction = new THREE.Vector3(\r\n hotspotPosition.x - cameraPos.x,\r\n hotspotPosition.y - cameraPos.y,\r\n hotspotPosition.z - cameraPos.z\r\n );\r\n\r\n // Calculate spherical coordinates (yaw and pitch)\r\n const distance = direction.length();\r\n\r\n // Pitch (up/down rotation around X-axis) - in degrees\r\n pitch = Math.asin(direction.y / distance) * (180 / Math.PI);\r\n\r\n // Yaw (left/right rotation around Y-axis) - in degrees\r\n yaw = Math.atan2(direction.x, direction.z) * (180 / Math.PI);\r\n } else {\r\n return;\r\n }\r\n\r\n // Apply smooth rotation with animation\r\n this.animateCameraRotation(camera, { x: pitch, y: yaw, z: 0 });\r\n }\r\n\r\n /**\r\n * Animate camera rotation smoothly\r\n * Uses look-controls internal pitchObject/yawObject to avoid being overwritten\r\n */\r\n animateCameraRotation(camera, targetRotation, duration = 800) {\r\n if (!camera || !camera.object3D) return;\r\n\r\n // Get look-controls component\r\n const lookControls = camera.components?.[\"look-controls\"];\r\n \r\n // Get current rotation - prefer look-controls internal state\r\n let startRotation;\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n startRotation = {\r\n x: lookControls.pitchObject.rotation.x * (180 / Math.PI),\r\n y: lookControls.yawObject.rotation.y * (180 / Math.PI),\r\n z: 0,\r\n };\r\n } else {\r\n startRotation = {\r\n x: camera.object3D.rotation.x * (180 / Math.PI),\r\n y: camera.object3D.rotation.y * (180 / Math.PI),\r\n z: 0,\r\n };\r\n }\r\n\r\n // Handle angle wrapping for smooth rotation\r\n let deltaY = targetRotation.y - startRotation.y;\r\n\r\n // Normalize to -180 to 180 range\r\n while (deltaY > 180) deltaY -= 360;\r\n while (deltaY < -180) deltaY += 360;\r\n\r\n const endRotationY = startRotation.y + deltaY;\r\n\r\n const startTime = Date.now();\r\n\r\n const animate = () => {\r\n const elapsed = Date.now() - startTime;\r\n const progress = Math.min(elapsed / duration, 1);\r\n\r\n // Ease-in-out function for smooth animation\r\n const eased =\r\n progress < 0.5\r\n ? 2 * progress * progress\r\n : 1 - Math.pow(-2 * progress + 2, 2) / 2;\r\n\r\n // Interpolate rotation (in degrees)\r\n const currentX = startRotation.x + (targetRotation.x - startRotation.x) * eased;\r\n const currentY = startRotation.y + (endRotationY - startRotation.y) * eased;\r\n\r\n // Apply rotation using look-controls internal objects (in radians)\r\n if (lookControls && lookControls.pitchObject && lookControls.yawObject) {\r\n lookControls.pitchObject.rotation.x = currentX * (Math.PI / 180);\r\n lookControls.yawObject.rotation.y = currentY * (Math.PI / 180);\r\n } else {\r\n // Fallback to direct rotation\r\n camera.object3D.rotation.set(\r\n currentX * (Math.PI / 180),\r\n currentY * (Math.PI / 180),\r\n 0\r\n );\r\n }\r\n\r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n animate();\r\n }\r\n\r\n /**\r\n * Highlight hotspot (not needed with library, but keep for compatibility)\r\n */\r\n highlightHotspot(index) {\r\n // The library handles hotspot visualization\r\n // This is kept for API compatibility\r\n }\r\n\r\n /**\r\n * Update hotspot marker (refresh scene while preserving camera rotation)\r\n */\r\n async updateHotspotMarker(index) {\r\n const scene = this.editor.sceneManager.getCurrentScene();\r\n if (!scene || !this.tour) return;\r\n\r\n const hotspot = scene.hotspots[index];\r\n if (!hotspot) return;\r\n\r\n // Refresh the preview to reflect changes, camera rotation will be preserved\r\n await this.refresh();\r\n }\r\n\r\n /**\r\n * Create loading overlay element\r\n */\r\n createLoadingOverlay() {\r\n const overlay = document.createElement(\"div\");\r\n overlay.className = \"preview-loading\";\r\n overlay.innerHTML = `\r\n <div class=\"loading-spinner\"></div>\r\n <div class=\"loading-text\">Loading scene...</div>\r\n `;\r\n return overlay;\r\n }\r\n\r\n /**\r\n * Show loading animation\r\n */\r\n showLoading() {\r\n const existing = this.previewContainer?.querySelector(\".preview-loading\");\r\n if (existing) {\r\n existing.classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n /**\r\n * Hide loading animation\r\n */\r\n hideLoading() {\r\n const loading = this.previewContainer?.querySelector(\".preview-loading\");\r\n if (loading) {\r\n loading.classList.add(\"hidden\");\r\n // Remove after transition\r\n setTimeout(() => {\r\n if (loading.parentNode) {\r\n loading.parentNode.removeChild(loading);\r\n }\r\n }, 300);\r\n }\r\n }\r\n}\r\n\r\nexport default PreviewController;\r\n","// UI Controller - Handles DOM manipulation and rendering\r\n\r\n// Import icons list from SenangStart icons package (baked into bundle at build time)\r\nimport iconsData from \"@bookklik/senangstart-icons/src/icons.json\";\r\n\r\nclass UIController {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.sceneList = document.getElementById(\"sceneList\");\r\n this.hotspotList = document.getElementById(\"hotspotList\");\r\n this.draggedElement = null;\r\n }\r\n\r\n /**\r\n * Render scene list\r\n */\r\n renderSceneList() {\r\n if (!this.sceneList) return;\r\n\r\n this.sceneList.innerHTML = \"\";\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const currentIndex = this.editor.sceneManager.currentSceneIndex;\r\n\r\n if (scenes.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.className = \"empty-state\";\r\n empty.innerHTML = `\r\n <p>No scenes yet</p>\r\n <p class=\"hint\">Click \"Add Scene\" to upload a 360° panorama</p>\r\n `;\r\n this.sceneList.appendChild(empty);\r\n return;\r\n }\r\n\r\n scenes.forEach((scene, index) => {\r\n const card = this.createSceneCard(scene, index, index === currentIndex);\r\n this.sceneList.appendChild(card);\r\n });\r\n }\r\n\r\n /**\r\n * Create scene card element\r\n */\r\n createSceneCard(scene, index, isActive) {\r\n const card = document.createElement(\"div\");\r\n card.className = \"scene-card\" + (isActive ? \" active\" : \"\");\r\n card.draggable = true;\r\n card.dataset.index = index;\r\n\r\n // Drag handle\r\n const dragHandle = document.createElement(\"div\");\r\n dragHandle.className = \"drag-handle\";\r\n dragHandle.innerHTML =\r\n '<ss-icon icon=\"arrow-up-down-left-right\" thickness=\"2.2\"></ss-icon>';\r\n\r\n // Thumbnail - use thumbnail, panorama, or imageUrl (backward compatibility)\r\n const thumbnail = document.createElement(\"img\");\r\n thumbnail.src = scene.thumbnail || scene.panorama || scene.imageUrl;\r\n thumbnail.alt = scene.name;\r\n\r\n // Info\r\n const info = document.createElement(\"div\");\r\n info.className = \"scene-info\";\r\n\r\n const name = document.createElement(\"div\");\r\n name.className = \"scene-name\";\r\n name.textContent = scene.name;\r\n\r\n const meta = document.createElement(\"div\");\r\n meta.className = \"scene-meta\";\r\n meta.textContent = `${scene.hotspots.length} hotspot${\r\n scene.hotspots.length !== 1 ? \"s\" : \"\"\r\n }`;\r\n\r\n info.appendChild(name);\r\n info.appendChild(meta);\r\n\r\n // Actions\r\n const actions = document.createElement(\"div\");\r\n actions.className = \"scene-actions\";\r\n\r\n const deleteBtn = document.createElement(\"button\");\r\n deleteBtn.className = \"btn-icon\";\r\n deleteBtn.innerHTML = '<ss-icon icon=\"trash\" thickness=\"2.2\"></ss-icon>';\r\n deleteBtn.title = \"Delete scene\";\r\n deleteBtn.onclick = (e) => {\r\n e.stopPropagation();\r\n this.editor.removeScene(index);\r\n };\r\n\r\n actions.appendChild(deleteBtn);\r\n\r\n card.appendChild(dragHandle);\r\n card.appendChild(thumbnail);\r\n card.appendChild(info);\r\n card.appendChild(actions);\r\n\r\n // Click handler\r\n card.onclick = () => {\r\n this.editor.selectScene(index);\r\n };\r\n\r\n // Drag and drop handlers\r\n this.setupDragAndDrop(card);\r\n\r\n return card;\r\n }\r\n\r\n /**\r\n * Setup drag and drop for scene reordering\r\n */\r\n setupDragAndDrop(card) {\r\n card.addEventListener(\"dragstart\", (e) => {\r\n this.draggedElement = card;\r\n card.classList.add(\"dragging\");\r\n e.dataTransfer.effectAllowed = \"move\";\r\n });\r\n\r\n card.addEventListener(\"dragend\", () => {\r\n card.classList.remove(\"dragging\");\r\n this.draggedElement = null;\r\n });\r\n\r\n card.addEventListener(\"dragover\", (e) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = \"move\";\r\n\r\n if (this.draggedElement && this.draggedElement !== card) {\r\n const bounding = card.getBoundingClientRect();\r\n const offset = bounding.y + bounding.height / 2;\r\n\r\n if (e.clientY - offset > 0) {\r\n card.style.borderBottom = \"2px solid var(--accent-color)\";\r\n card.style.borderTop = \"\";\r\n } else {\r\n card.style.borderTop = \"2px solid var(--accent-color)\";\r\n card.style.borderBottom = \"\";\r\n }\r\n }\r\n });\r\n\r\n card.addEventListener(\"dragleave\", () => {\r\n card.style.borderTop = \"\";\r\n card.style.borderBottom = \"\";\r\n });\r\n\r\n card.addEventListener(\"drop\", (e) => {\r\n e.preventDefault();\r\n card.style.borderTop = \"\";\r\n card.style.borderBottom = \"\";\r\n\r\n if (this.draggedElement && this.draggedElement !== card) {\r\n const fromIndex = parseInt(this.draggedElement.dataset.index);\r\n const toIndex = parseInt(card.dataset.index);\r\n this.editor.reorderScenes(fromIndex, toIndex);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Render hotspot list\r\n */\r\n renderHotspotList() {\r\n if (!this.hotspotList) return;\r\n\r\n this.hotspotList.innerHTML = \"\";\r\n const hotspots = this.editor.hotspotEditor.getAllHotspots();\r\n const currentIndex = this.editor.hotspotEditor.currentHotspotIndex;\r\n\r\n if (hotspots.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.className = \"empty-state\";\r\n empty.textContent = 'No hotspots. Click \"Add Hotspot\" to create one.';\r\n this.hotspotList.appendChild(empty);\r\n return;\r\n }\r\n\r\n hotspots.forEach((hotspot, index) => {\r\n const item = this.createHotspotItem(\r\n hotspot,\r\n index,\r\n index === currentIndex\r\n );\r\n this.hotspotList.appendChild(item);\r\n });\r\n }\r\n\r\n /**\r\n * Create hotspot list item\r\n * Uses unified format with nested appearance, action, and tooltip\r\n */\r\n createHotspotItem(hotspot, index, isActive) {\r\n const item = document.createElement(\"div\");\r\n item.className = \"hotspot-item\" + (isActive ? \" active\" : \"\");\r\n\r\n // Get values from nested structure\r\n const color = hotspot.appearance?.color || \"#00ff00\";\r\n const icon = hotspot.appearance?.icon || \"\";\r\n const title = hotspot.tooltip?.text || \"Untitled Hotspot\";\r\n const targetSceneId = hotspot.action?.target || \"\";\r\n\r\n const colorIndicator = document.createElement(\"div\");\r\n colorIndicator.className = \"hotspot-color\";\r\n colorIndicator.style.backgroundColor = color;\r\n \r\n // If hotspot has an icon, show it with the color applied\r\n if (icon) {\r\n colorIndicator.innerHTML = `<ss-icon icon=\"${icon}\" thickness=\"2.2\" style=\"color: ${color}; width: 20px; height: 20px;\"></ss-icon>`;\r\n colorIndicator.style.backgroundColor = \"transparent\";\r\n colorIndicator.style.display = \"flex\";\r\n colorIndicator.style.alignItems = \"center\";\r\n colorIndicator.style.justifyContent = \"center\";\r\n }\r\n\r\n const info = document.createElement(\"div\");\r\n info.className = \"hotspot-info\";\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.className = \"hotspot-title\";\r\n titleEl.textContent = title;\r\n\r\n const target = document.createElement(\"div\");\r\n target.className = \"hotspot-target\";\r\n if (targetSceneId) {\r\n const targetScene = this.editor.sceneManager.getSceneById(\r\n targetSceneId\r\n );\r\n target.textContent = targetScene\r\n ? `→ ${targetScene.name}`\r\n : `→ ${targetSceneId}`;\r\n } else {\r\n target.textContent = \"No target\";\r\n }\r\n\r\n info.appendChild(titleEl);\r\n info.appendChild(target);\r\n\r\n const actions = document.createElement(\"div\");\r\n actions.className = \"hotspot-actions\";\r\n\r\n const deleteBtn = document.createElement(\"button\");\r\n deleteBtn.className = \"btn-delete\";\r\n deleteBtn.innerHTML = '<ss-icon icon=\"trash\" thickness=\"2.2\"></ss-icon>';\r\n deleteBtn.title = \"Delete\";\r\n deleteBtn.onclick = (e) => {\r\n e.stopPropagation();\r\n this.editor.removeHotspot(index);\r\n };\r\n\r\n actions.appendChild(deleteBtn);\r\n\r\n item.appendChild(colorIndicator);\r\n item.appendChild(info);\r\n item.appendChild(actions);\r\n\r\n item.onclick = () => {\r\n this.editor.selectHotspot(index);\r\n };\r\n\r\n return item;\r\n }\r\n\r\n /**\r\n * Set active state on icon grid button\r\n */\r\n setActiveIconButton(iconName) {\r\n const grid = document.getElementById(\"hotspotIconGrid\");\r\n if (!grid) return;\r\n \r\n // Remove active from all buttons\r\n grid.querySelectorAll(\".icon-btn\").forEach(btn => {\r\n btn.classList.remove(\"active\");\r\n });\r\n \r\n // Find and activate the matching button\r\n const activeBtn = grid.querySelector(`.icon-btn[data-icon=\"${iconName}\"]`);\r\n if (activeBtn) {\r\n activeBtn.classList.add(\"active\");\r\n }\r\n }\r\n\r\n /**\r\n * Populate icon grid from SenangStart icons (baked in at build time)\r\n */\r\n populateIconGrid() {\r\n const grid = document.getElementById(\"hotspotIconGrid\");\r\n if (!grid) return;\r\n\r\n // Clear existing content\r\n grid.innerHTML = \"\";\r\n\r\n // Add \"No icon\" button first\r\n const noIconBtn = document.createElement(\"button\");\r\n noIconBtn.type = \"button\";\r\n noIconBtn.className = \"icon-btn active\";\r\n noIconBtn.dataset.icon = \"\";\r\n noIconBtn.title = \"No icon\";\r\n noIconBtn.innerHTML = '<ss-icon icon=\"x-mark\" thickness=\"1.5\" style=\"opacity: 0.5;\"></ss-icon>';\r\n grid.appendChild(noIconBtn);\r\n\r\n // Add buttons for each icon from imported JSON\r\n iconsData.forEach(icon => {\r\n const btn = document.createElement(\"button\");\r\n btn.type = \"button\";\r\n btn.className = \"icon-btn\";\r\n btn.dataset.icon = icon.slug;\r\n btn.title = icon.name;\r\n btn.innerHTML = `<ss-icon icon=\"${icon.slug}\" thickness=\"2.2\"></ss-icon>`;\r\n grid.appendChild(btn);\r\n });\r\n\r\n console.log(`Loaded ${iconsData.length} icons`);\r\n }\r\n\r\n /**\r\n * Update properties panel for hotspot\r\n * Uses unified format with nested appearance, action, and tooltip\r\n */\r\n updateHotspotProperties(hotspot) {\r\n const hotspotAll = document.getElementById(\"hotspotAll\");\r\n const hotspotProperties = document.getElementById(\"hotspotProperties\");\r\n\r\n if (!hotspot) {\r\n // No hotspot selected - show list, hide properties\r\n if (hotspotAll) hotspotAll.style.display = \"block\";\r\n if (hotspotProperties) hotspotProperties.style.display = \"none\";\r\n\r\n // Clear form\r\n document.getElementById(\"hotspotTitle\").value = \"\";\r\n document.getElementById(\"hotspotDescription\").value = \"\";\r\n document.getElementById(\"hotspotTarget\").value = \"\";\r\n document.getElementById(\"hotspotColor\").value = \"#00ff00\";\r\n const colorText = document.getElementById(\"hotspotColorText\");\r\n if (colorText) colorText.value = \"#00ff00\";\r\n // Reset icon grid to \"no icon\" button\r\n this.setActiveIconButton(\"\");\r\n document.getElementById(\"hotspotPosX\").value = \"\";\r\n document.getElementById(\"hotspotPosY\").value = \"\";\r\n document.getElementById(\"hotspotPosZ\").value = \"\";\r\n return;\r\n }\r\n\r\n // Hotspot selected - show both list and properties\r\n if (hotspotAll) hotspotAll.style.display = \"block\";\r\n if (hotspotProperties) hotspotProperties.style.display = \"block\";\r\n\r\n // Get values from nested structure\r\n const title = hotspot.tooltip?.text || \"\";\r\n const description = hotspot.tooltip?.description || \"\";\r\n const targetSceneId = hotspot.action?.target || \"\";\r\n const color = hotspot.appearance?.color || \"#00ff00\";\r\n const icon = hotspot.appearance?.icon || \"\";\r\n\r\n document.getElementById(\"hotspotTitle\").value = title;\r\n document.getElementById(\"hotspotDescription\").value = description;\r\n document.getElementById(\"hotspotTarget\").value = targetSceneId;\r\n document.getElementById(\"hotspotColor\").value = color;\r\n\r\n // Update color text input if it exists\r\n const colorText = document.getElementById(\"hotspotColorText\");\r\n if (colorText) {\r\n colorText.value = color;\r\n }\r\n\r\n // Update icon grid active button\r\n this.setActiveIconButton(icon);\r\n\r\n // Update position inputs\r\n const pos = hotspot.position || { x: 0, y: 0, z: 0 };\r\n document.getElementById(\"hotspotPosX\").value = pos.x;\r\n document.getElementById(\"hotspotPosY\").value = pos.y;\r\n document.getElementById(\"hotspotPosZ\").value = pos.z;\r\n\r\n // Update target dropdown\r\n this.updateTargetSceneOptions();\r\n }\r\n\r\n /**\r\n * Update properties panel for scene\r\n */\r\n updateSceneProperties(scene) {\r\n const startingPosDisplay = document.getElementById(\"startingPositionDisplay\");\r\n \r\n if (!scene) {\r\n document.getElementById(\"sceneId\").value = \"\";\r\n document.getElementById(\"sceneName\").value = \"\";\r\n document.getElementById(\"sceneImageUrl\").value = \"\";\r\n if (startingPosDisplay) {\r\n startingPosDisplay.textContent = \"Not set (camera keeps current position)\";\r\n }\r\n return;\r\n }\r\n\r\n document.getElementById(\"sceneId\").value = scene.id || \"\";\r\n document.getElementById(\"sceneName\").value = scene.name || \"\";\r\n // Support both panorama (unified) and imageUrl (legacy)\r\n document.getElementById(\"sceneImageUrl\").value = scene.panorama || scene.imageUrl || \"\";\r\n \r\n // Update starting position display\r\n if (startingPosDisplay) {\r\n if (scene.startingPosition) {\r\n const pitchDeg = (scene.startingPosition.pitch * 180 / Math.PI).toFixed(1);\r\n const yawDeg = (scene.startingPosition.yaw * 180 / Math.PI).toFixed(1);\r\n startingPosDisplay.textContent = `Pitch: ${pitchDeg}° | Yaw: ${yawDeg}°`;\r\n startingPosDisplay.style.color = \"var(--accent-primary)\";\r\n } else {\r\n startingPosDisplay.textContent = \"Not set (camera keeps current position)\";\r\n startingPosDisplay.style.color = \"var(--text-muted)\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update properties panel for tour\r\n */\r\n updateTourProperties(config) {\r\n document.getElementById(\"tourTitle\").value = config.title || \"\";\r\n document.getElementById(\"tourDescription\").value = config.description || \"\";\r\n document.getElementById(\"tourInitialScene\").value =\r\n config.initialSceneId || \"\";\r\n\r\n // Also update project name in header if it exists\r\n const projectName = document.getElementById(\"project-name\");\r\n if (projectName) {\r\n projectName.value = config.title || \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Update target scene options in hotspot properties\r\n */\r\n updateTargetSceneOptions() {\r\n const select = document.getElementById(\"hotspotTarget\");\r\n if (!select) return;\r\n\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const currentValue = select.value;\r\n\r\n select.innerHTML = '<option value=\"\">Select target scene...</option>';\r\n\r\n scenes.forEach((scene) => {\r\n const option = document.createElement(\"option\");\r\n option.value = scene.id;\r\n option.textContent = scene.name;\r\n select.appendChild(option);\r\n });\r\n\r\n select.value = currentValue;\r\n }\r\n\r\n /**\r\n * Update initial scene options in tour properties\r\n */\r\n updateInitialSceneOptions() {\r\n const select = document.getElementById(\"tourInitialScene\");\r\n if (!select) return;\r\n\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const currentValue = select.value;\r\n\r\n select.innerHTML = '<option value=\"\">Select initial scene...</option>';\r\n\r\n scenes.forEach((scene) => {\r\n const option = document.createElement(\"option\");\r\n option.value = scene.id;\r\n option.textContent = scene.name;\r\n select.appendChild(option);\r\n });\r\n\r\n select.value = currentValue;\r\n }\r\n\r\n /**\r\n * Show/hide loading indicator\r\n */\r\n setLoading(isLoading) {\r\n const indicator = document.querySelector(\".loading-indicator\");\r\n if (indicator) {\r\n indicator.style.display = isLoading ? \"block\" : \"none\";\r\n }\r\n }\r\n\r\n /**\r\n * Switch properties tab\r\n */\r\n switchTab(tabName) {\r\n // Update tab buttons\r\n document.querySelectorAll(\".tab-btn\").forEach((btn) => {\r\n btn.classList.toggle(\"active\", btn.dataset.tab === tabName);\r\n });\r\n\r\n // Update tab content\r\n document.querySelectorAll(\".tab-content\").forEach((content) => {\r\n content.classList.toggle(\"active\", content.id === tabName + \"Tab\");\r\n });\r\n }\r\n}\r\n\r\nexport default UIController;\r\n","/**\r\n * IconRenderer - Converts SenangStart icon names to image data URLs for A-Frame\r\n */\r\nexport class IconRenderer {\r\n constructor() {\r\n this.iconCache = new Map();\r\n this.renderContainer = null;\r\n }\r\n\r\n /**\r\n * Initialize the hidden render container\r\n */\r\n init() {\r\n if (this.renderContainer) return;\r\n \r\n this.renderContainer = document.createElement('div');\r\n this.renderContainer.id = 'swt-icon-renderer';\r\n this.renderContainer.style.cssText = `\r\n position: absolute;\r\n left: -9999px;\r\n top: -9999px;\r\n width: 128px;\r\n height: 128px;\r\n pointer-events: none;\r\n visibility: hidden;\r\n `;\r\n document.body.appendChild(this.renderContainer);\r\n }\r\n\r\n /**\r\n * Generate an image data URL from a SenangStart icon\r\n * @param {string} iconName - SenangStart icon name (e.g., 'arrow-right')\r\n * @param {string} color - Hex color for the icon\r\n * @param {number} size - Size in pixels (default 128)\r\n * @returns {Promise<string>} - Data URL of the icon image\r\n */\r\n async generateIconDataUrl(iconName, color = '#ffffff', size = 128) {\r\n const cacheKey = `${iconName}-${color}-${size}`;\r\n \r\n if (this.iconCache.has(cacheKey)) {\r\n return this.iconCache.get(cacheKey);\r\n }\r\n\r\n this.init();\r\n\r\n return new Promise((resolve, reject) => {\r\n // Create the ss-icon element\r\n this.renderContainer.innerHTML = `\r\n <ss-icon \r\n icon=\"${iconName}\" \r\n thickness=\"2.5\" \r\n style=\"color: ${color}; width: ${size}px; height: ${size}px; display: block;\"\r\n ></ss-icon>\r\n `;\r\n\r\n // Wait for the custom element to render\r\n setTimeout(() => {\r\n try {\r\n const ssIcon = this.renderContainer.querySelector('ss-icon');\r\n if (!ssIcon || !ssIcon.shadowRoot) {\r\n console.warn(`Icon ${iconName} not rendered properly`);\r\n resolve(null);\r\n return;\r\n }\r\n\r\n // Get the SVG from shadow root\r\n const svg = ssIcon.shadowRoot.querySelector('svg');\r\n if (!svg) {\r\n console.warn(`SVG not found for icon ${iconName}`);\r\n resolve(null);\r\n return;\r\n }\r\n\r\n // Clone and prepare SVG\r\n const svgClone = svg.cloneNode(true);\r\n svgClone.setAttribute('width', size);\r\n svgClone.setAttribute('height', size);\r\n svgClone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n \r\n // Apply the color to all paths/elements\r\n svgClone.querySelectorAll('path, circle, rect, line, polyline, polygon').forEach(el => {\r\n el.setAttribute('stroke', color);\r\n // Keep fill as currentColor if it's set\r\n const fill = el.getAttribute('fill');\r\n if (fill && fill !== 'none') {\r\n el.setAttribute('fill', color);\r\n }\r\n });\r\n\r\n // Convert SVG to data URL\r\n const svgString = new XMLSerializer().serializeToString(svgClone);\r\n const dataUrl = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgString)));\r\n \r\n // Cache the result\r\n this.iconCache.set(cacheKey, dataUrl);\r\n \r\n resolve(dataUrl);\r\n } catch (error) {\r\n console.error('Error generating icon data URL:', error);\r\n resolve(null);\r\n }\r\n }, 100); // Wait for custom element to render\r\n });\r\n }\r\n\r\n /**\r\n * Clear the icon cache\r\n */\r\n clearCache() {\r\n this.iconCache.clear();\r\n }\r\n\r\n /**\r\n * Destroy the renderer\r\n */\r\n destroy() {\r\n if (this.renderContainer && this.renderContainer.parentNode) {\r\n this.renderContainer.parentNode.removeChild(this.renderContainer);\r\n }\r\n this.renderContainer = null;\r\n this.iconCache.clear();\r\n }\r\n}\r\n","// Export Manager - Handles JSON generation for SWT library\r\nimport { downloadTextAsFile, showModal, copyToClipboard } from \"./utils.js\";\r\nimport { IconRenderer } from \"../../IconRenderer.js\";\r\nimport { buildTourConfig } from \"./data-transform.js\";\r\n\r\nclass ExportManager {\r\n constructor(editor) {\r\n this.editor = editor;\r\n this.iconRenderer = new IconRenderer();\r\n }\r\n\r\n /**\r\n * Generate JSON compatible with SWT library\r\n * Follows the tourConfig structure from example-simple.html\r\n * Uses shared data-transform utilities for consistent transformation\r\n */\r\n generateJSON() {\r\n const scenes = this.editor.sceneManager.getAllScenes();\r\n const config = this.editor.config;\r\n\r\n return buildTourConfig(config, scenes);\r\n }\r\n\r\n /**\r\n * Generate JSON with icons baked in as SVG data URLs\r\n * This ensures the exported HTML doesn't need the SenangStart icons library\r\n */\r\n async generateJSONWithBakedIcons() {\r\n const jsonData = this.generateJSON();\r\n \r\n // Process all scenes and convert icon names to data URLs\r\n // Scenes are an array in unified format\r\n for (const scene of jsonData.scenes) {\r\n for (let i = 0; i < scene.hotspots.length; i++) {\r\n const hotspot = scene.hotspots[i];\r\n const icon = hotspot.appearance?.icon;\r\n \r\n // Skip if no icon or if it's already a data URL or URL\r\n if (!icon) continue;\r\n if (icon.startsWith('data:') || icon.startsWith('http') || icon.startsWith('/')) continue;\r\n \r\n // Generate SVG data URL from icon name\r\n try {\r\n const color = hotspot.appearance?.color || '#ffffff';\r\n const dataUrl = await this.iconRenderer.generateIconDataUrl(icon, color, 128);\r\n if (dataUrl) {\r\n hotspot.appearance.icon = dataUrl;\r\n }\r\n } catch (err) {\r\n console.warn(`Failed to bake icon \"${icon}\" for export:`, err);\r\n }\r\n }\r\n }\r\n \r\n return jsonData;\r\n }\r\n\r\n /**\r\n * Export as JSON file\r\n */\r\n exportJSON() {\r\n try {\r\n const jsonData = this.generateJSON();\r\n const json = JSON.stringify(jsonData, null, 2);\r\n\r\n const title = this.editor.config.title || \"tour\";\r\n const filename = sanitizeId(title) + \".json\";\r\n downloadTextAsFile(json, filename);\r\n\r\n showToast(\"Tour exported successfully\", \"success\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Export failed:\", error);\r\n showToast(\"Export failed\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Copy JSON to clipboard\r\n */\r\n async copyJSON() {\r\n try {\r\n const jsonData = this.generateJSON();\r\n const json = JSON.stringify(jsonData, null, 2);\r\n\r\n const success = await copyToClipboard(json);\r\n if (success) {\r\n showToast(\"JSON copied to clipboard\", \"success\");\r\n } else {\r\n showToast(\"Failed to copy to clipboard\", \"error\");\r\n }\r\n return success;\r\n } catch (error) {\r\n console.error(\"Copy failed:\", error);\r\n showToast(\"Copy failed\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Generate HTML viewer code with icons baked in\r\n */\r\n async generateViewerHTML() {\r\n const jsonData = await this.generateJSONWithBakedIcons();\r\n const title = this.editor.config.title || \"Virtual Tour\";\r\n\r\n return `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n <head>\r\n <meta charset=\"UTF-8\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n <title>${title}</title>\r\n <script src=\"https://unpkg.com/senangwebs-tour@latest/dist/swt.min.js\"></script>\r\n </head>\r\n <body>\r\n <a-scene id=\"tour-container\">\r\n <a-camera look-controls>\r\n <a-cursor></a-cursor>\r\n </a-camera>\r\n </a-scene>\r\n\r\n <script>\r\n // Tour configuration\r\n const tourConfig = ${JSON.stringify(jsonData, null, 8)\r\n .split(\"\\n\")\r\n .map((line, i) => (i === 0 ? line : \" \" + line))\r\n .join(\"\\n\")};\r\n\r\n // Initialize tour when scene is loaded\r\n const sceneEl = document.querySelector(\"#tour-container\");\r\n sceneEl.addEventListener(\"loaded\", () => {\r\n const tour = new SWT.Tour(sceneEl, tourConfig);\r\n tour.start();\r\n });\r\n </script>\r\n </body>\r\n</html>`;\r\n }\r\n\r\n /**\r\n * Export as standalone HTML viewer with icons baked in\r\n */\r\n async exportViewerHTML() {\r\n try {\r\n const html = await this.generateViewerHTML();\r\n const title = this.editor.config.title || \"tour\";\r\n const filename = sanitizeId(title) + \"-viewer.html\";\r\n\r\n downloadTextAsFile(html, filename);\r\n\r\n showToast(\"Viewer HTML exported successfully\", \"success\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Export viewer failed:\", error);\r\n showToast(\"Export viewer failed\", \"error\");\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Show export preview in modal\r\n */\r\n showExportPreview() {\r\n try {\r\n const jsonData = this.generateJSON();\r\n const json = JSON.stringify(jsonData, null, 2);\r\n\r\n const preview = document.getElementById(\"exportPreview\");\r\n if (preview) {\r\n preview.textContent = json;\r\n }\r\n\r\n showModal(\"exportModal\");\r\n return true;\r\n } catch (error) {\r\n console.error(\"Failed to show export preview:\", error);\r\n showToast(\"Failed to generate preview\", \"error\");\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport default ExportManager;\r\n","// Main Editor Controller\r\nimport { debounce, showModal, showToast } from './utils.js';\r\n\r\nclass TourEditor {\r\n constructor(options = {}) {\r\n this.config = {\r\n title: options.projectName || 'My Virtual Tour',\r\n description: '',\r\n initialSceneId: ''\r\n };\r\n \r\n // Store initialization options\r\n this.options = {\r\n sceneListElement: options.sceneListElement || null,\r\n previewElement: options.previewElement || null,\r\n propertiesElement: options.propertiesElement || null,\r\n autoSave: options.autoSave !== undefined ? options.autoSave : false,\r\n autoSaveInterval: options.autoSaveInterval || 30000,\r\n ...options\r\n };\r\n \r\n this.storageManager = new ProjectStorageManager();\r\n this.sceneManager = new SceneManagerEditor(this);\r\n this.hotspotEditor = new HotspotEditor(this);\r\n this.previewController = new PreviewController(this);\r\n this.uiController = new UIController(this);\r\n this.exportManager = new ExportManager(this);\r\n \r\n this.hasUnsavedChanges = false;\r\n this.lastRenderedSceneIndex = -1;\r\n this.listenersSetup = false;\r\n }\r\n\r\n /**\r\n * Initialize editor\r\n * @param {Object} config - Optional configuration object for programmatic init\r\n */\r\n async init(config = {}) {\r\n // Merge config with existing options\r\n if (config && Object.keys(config).length > 0) {\r\n Object.assign(this.options, config);\r\n if (config.projectName) {\r\n this.config.title = config.projectName;\r\n }\r\n }\r\n \r\n // Initialize preview\r\n const previewInit = await this.previewController.init();\r\n if (!previewInit) {\r\n console.error('Failed to initialize preview controller');\r\n showToast('Failed to initialize preview', 'error');\r\n return false;\r\n }\r\n \r\n // Setup event listeners\r\n this.setupEventListeners();\r\n \r\n // Populate icon grid\r\n this.uiController.populateIconGrid();\r\n \r\n // Load saved project if exists (but only if it has valid data)\r\n if (this.storageManager.hasProject()) {\r\n try {\r\n const projectData = this.storageManager.loadProject();\r\n if (projectData && projectData.scenes && projectData.scenes.length > 0) {\r\n this.loadProject();\r\n } else {\r\n // Invalid or empty project, clear it\r\n console.error('Invalid or empty project data, clearing storage');\r\n this.storageManager.clearProject();\r\n }\r\n } catch (error) {\r\n console.error('Error loading saved project:', error);\r\n this.storageManager.clearProject();\r\n }\r\n }\r\n \r\n // Start auto-save if enabled\r\n if (this.options.autoSave) {\r\n this.storageManager.startAutoSave(() => {\r\n this.saveProject();\r\n }, this.options.autoSaveInterval);\r\n }\r\n \r\n // Initial render (only if no project was loaded)\r\n if (this.sceneManager.getScenes().length === 0) {\r\n this.render();\r\n }\r\n \r\n showToast('Editor ready', 'success');\r\n \r\n return true;\r\n }\r\n\r\n /**\r\n * Setup event listeners\r\n */\r\n setupEventListeners() {\r\n if (this.listenersSetup) {\r\n return;\r\n }\r\n\r\n const addSceneBtns = document.querySelectorAll('#addSceneBtn');\r\n const sceneUploads = document.querySelectorAll('#sceneUpload');\r\n const importBtns = document.querySelectorAll('#importBtn');\r\n const importUploads = document.querySelectorAll('#importUpload');\r\n if (addSceneBtns.length > 1 || sceneUploads.length > 1 || importBtns.length > 1 || importUploads.length > 1) {\r\n console.error('Duplicate IDs found in DOM. This will cause double-trigger issues.');\r\n }\r\n \r\n // Toolbar buttons\r\n document.getElementById('newBtn')?.addEventListener('click', () => this.newProject());\r\n document.getElementById('saveBtn')?.addEventListener('click', () => this.saveProject());\r\n document.getElementById('exportBtn')?.addEventListener('click', () => this.exportManager.showExportPreview());\r\n document.getElementById('importBtn')?.addEventListener('click', () => this.importProject());\r\n document.getElementById('helpBtn')?.addEventListener('click', () => showModal('helpModal'));\r\n\r\n document.getElementById('addSceneBtn')?.addEventListener('click', () => {\r\n const sceneUpload = document.getElementById('sceneUpload');\r\n if (sceneUpload) {\r\n sceneUpload.click();\r\n }\r\n });\r\n \r\n document.getElementById('sceneUpload')?.addEventListener('change', (e) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n this.handleSceneUpload(e.target.files);\r\n setTimeout(() => {\r\n e.target.value = '';\r\n }, 100);\r\n }\r\n });\r\n\r\n document.getElementById('addHotspotBtn')?.addEventListener('click', () => {\r\n this.addHotspotAtCursor();\r\n });\r\n \r\n document.getElementById('clearHotspotsBtn')?.addEventListener('click', () => {\r\n if (this.hotspotEditor.clearAllHotspots()) {\r\n this.render();\r\n }\r\n });\r\n\r\n // Properties tabs\r\n document.querySelectorAll('.tab-btn').forEach(btn => {\r\n btn.addEventListener('click', () => {\r\n this.uiController.switchTab(btn.dataset.tab);\r\n });\r\n });\r\n\r\n document.getElementById('hotspotTitle')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspot('tooltip.text', e.target.value);\r\n }, 300));\r\n \r\n document.getElementById('hotspotDescription')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspot('tooltip.description', e.target.value);\r\n }, 300));\r\n \r\n document.getElementById('hotspotTarget')?.addEventListener('change', (e) => {\r\n this.updateCurrentHotspot('action.target', e.target.value);\r\n });\r\n \r\n document.getElementById('hotspotColor')?.addEventListener('input', (e) => {\r\n this.updateCurrentHotspot('appearance.color', e.target.value);\r\n });\r\n\r\n // Icon grid button clicks\r\n document.getElementById('hotspotIconGrid')?.addEventListener('click', (e) => {\r\n const btn = e.target.closest('.icon-btn');\r\n if (btn) {\r\n const iconValue = btn.dataset.icon;\r\n // Update active state\r\n document.querySelectorAll('#hotspotIconGrid .icon-btn').forEach(b => b.classList.remove('active'));\r\n btn.classList.add('active');\r\n // Update hotspot\r\n this.updateCurrentHotspot('appearance.icon', iconValue);\r\n }\r\n });\r\n\r\n document.getElementById('hotspotPosX')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspotPosition('x', parseFloat(e.target.value) || 0);\r\n }, 300));\r\n \r\n document.getElementById('hotspotPosY')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspotPosition('y', parseFloat(e.target.value) || 0);\r\n }, 300));\r\n \r\n document.getElementById('hotspotPosZ')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentHotspotPosition('z', parseFloat(e.target.value) || 0);\r\n }, 300));\r\n\r\n document.getElementById('sceneId')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentScene('id', sanitizeId(e.target.value));\r\n }, 300));\r\n \r\n document.getElementById('sceneName')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentScene('name', e.target.value);\r\n }, 300));\r\n \r\n document.getElementById('sceneImageUrl')?.addEventListener('input', debounce((e) => {\r\n this.updateCurrentSceneImage(e.target.value);\r\n }, 300));\r\n\r\n document.getElementById('setStartingPosBtn')?.addEventListener('click', () => {\r\n this.setSceneStartingPosition();\r\n });\r\n \r\n document.getElementById('clearStartingPosBtn')?.addEventListener('click', () => {\r\n this.clearSceneStartingPosition();\r\n });\r\n\r\n document.getElementById('tourTitle')?.addEventListener('input', debounce((e) => {\r\n this.config.title = e.target.value;\r\n this.markUnsavedChanges();\r\n const projectName = document.getElementById('project-name');\r\n if (projectName && projectName.value !== e.target.value) {\r\n projectName.value = e.target.value;\r\n }\r\n }, 300));\r\n \r\n document.getElementById('project-name')?.addEventListener('input', debounce((e) => {\r\n this.config.title = e.target.value;\r\n this.markUnsavedChanges();\r\n const tourTitle = document.getElementById('tourTitle');\r\n if (tourTitle && tourTitle.value !== e.target.value) {\r\n tourTitle.value = e.target.value;\r\n }\r\n }, 300));\r\n \r\n document.getElementById('tourDescription')?.addEventListener('input', debounce((e) => {\r\n this.config.description = e.target.value;\r\n this.markUnsavedChanges();\r\n }, 300));\r\n \r\n document.getElementById('tourInitialScene')?.addEventListener('change', (e) => {\r\n this.config.initialSceneId = e.target.value;\r\n this.markUnsavedChanges();\r\n });\r\n\r\n document.getElementById('exportJsonBtn')?.addEventListener('click', () => {\r\n this.exportManager.exportJSON();\r\n });\r\n \r\n document.getElementById('copyJsonBtn')?.addEventListener('click', () => {\r\n this.exportManager.copyJSON();\r\n });\r\n \r\n document.getElementById('exportViewerBtn')?.addEventListener('click', async () => {\r\n await this.exportManager.exportViewerHTML();\r\n });\r\n\r\n document.querySelectorAll('.modal-close').forEach(btn => {\r\n btn.addEventListener('click', () => {\r\n const modal = btn.closest('.modal');\r\n if (modal) {\r\n hideModal(modal.id);\r\n }\r\n });\r\n });\r\n\r\n document.getElementById('importUpload')?.addEventListener('change', (e) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n this.handleImportFile(e.target.files[0]);\r\n setTimeout(() => {\r\n e.target.value = '';\r\n }, 100);\r\n }\r\n });\r\n\r\n window.addEventListener('beforeunload', (e) => {\r\n if (this.hasUnsavedChanges) {\r\n e.preventDefault();\r\n e.returnValue = '';\r\n }\r\n });\r\n \r\n this.listenersSetup = true;\r\n }\r\n\r\n /**\r\n * Handle scene upload\r\n */\r\n async handleSceneUpload(files) {\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n this.uiController.setLoading(true);\r\n\r\n for (const file of files) {\r\n if (!file.type.startsWith('image/')) {\r\n showToast(`${file.name} is not an image`, 'error');\r\n continue;\r\n }\r\n\r\n const scene = await this.sceneManager.addScene(file);\r\n }\r\n this.uiController.setLoading(false);\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n\r\n /**\r\n * Add hotspot at position\r\n */\r\n addHotspotAtPosition(position) {\r\n const distance = Math.sqrt(position.x * position.x + position.y * position.y + position.z * position.z);\r\n if (distance > 5) {\r\n const scale = 5 / distance;\r\n position.x *= scale;\r\n position.y *= scale;\r\n position.z *= scale;\r\n position.x = parseFloat(position.x.toFixed(2));\r\n position.y = parseFloat(position.y.toFixed(2));\r\n position.z = parseFloat(position.z.toFixed(2));\r\n }\r\n \r\n // Capture current camera orientation for reliable pointing later\r\n const cameraRotation = this.previewController.getCameraRotation();\r\n const cameraOrientation = cameraRotation ? {\r\n pitch: cameraRotation.x,\r\n yaw: cameraRotation.y\r\n } : null;\r\n \r\n const hotspot = this.hotspotEditor.addHotspot(position, '', cameraOrientation);\r\n if (hotspot) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.render();\r\n this.markUnsavedChanges();\r\n } else {\r\n console.error('Failed to add hotspot');\r\n }\r\n }\r\n\r\n /**\r\n * Add hotspot at current cursor position (center of view)\r\n * This uses the A-Cursor's raycaster intersection with the sky sphere\r\n */\r\n addHotspotAtCursor() {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('Please select a scene first', 'error');\r\n return;\r\n }\r\n\r\n const position = this.previewController.getCursorIntersection();\r\n if (!position) {\r\n showToast('Could not get cursor position. Please ensure the preview is loaded.', 'error');\r\n return;\r\n }\r\n\r\n this.addHotspotAtPosition(position);\r\n }\r\n\r\n /**\r\n * Select scene by index\r\n */\r\n selectScene(index) {\r\n if (this.sceneManager.setCurrentScene(index)) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.hotspotEditor.currentHotspotIndex = -1;\r\n \r\n const scene = this.sceneManager.getCurrentScene();\r\n if (scene) {\r\n this.previewController.loadScene(scene, false);\r\n this.lastRenderedSceneIndex = index;\r\n }\r\n \r\n this.uiController.renderSceneList();\r\n this.uiController.updateSceneProperties(scene);\r\n this.uiController.renderHotspotList();\r\n this.uiController.updateHotspotProperties(null);\r\n this.uiController.updateInitialSceneOptions();\r\n this.uiController.updateTargetSceneOptions();\r\n }\r\n }\r\n\r\n /**\r\n * Select hotspot by index\r\n */\r\n selectHotspot(index) {\r\n if (this.hotspotEditor.setCurrentHotspot(index)) {\r\n const hotspot = this.hotspotEditor.getHotspot(index);\r\n \r\n this.uiController.renderHotspotList();\r\n this.uiController.updateHotspotProperties(hotspot);\r\n this.uiController.updateTargetSceneOptions();\r\n this.uiController.switchTab('hotspot');\r\n \r\n if (hotspot) {\r\n this.previewController.pointCameraToHotspot(hotspot);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove scene\r\n */\r\n removeScene(index) {\r\n if (this.sceneManager.removeScene(index)) {\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Remove hotspot\r\n */\r\n removeHotspot(index) {\r\n if (this.hotspotEditor.removeHotspot(index)) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Duplicate hotspot\r\n */\r\n duplicateHotspot(index) {\r\n const hotspot = this.hotspotEditor.duplicateHotspot(index);\r\n if (hotspot) {\r\n this.lastRenderedSceneIndex = -1;\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Reorder scenes\r\n */\r\n reorderScenes(fromIndex, toIndex) {\r\n if (this.sceneManager.reorderScenes(fromIndex, toIndex)) {\r\n this.render();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current hotspot property\r\n */\r\n async updateCurrentHotspot(property, value) {\r\n const index = this.hotspotEditor.currentHotspotIndex;\r\n if (this.hotspotEditor.updateHotspot(index, property, value)) {\r\n await this.previewController.updateHotspotMarker(index);\r\n this.uiController.renderHotspotList();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current hotspot position (X, Y, or Z)\r\n */\r\n async updateCurrentHotspotPosition(axis, value) {\r\n const index = this.hotspotEditor.currentHotspotIndex;\r\n const hotspot = this.hotspotEditor.getHotspot(index);\r\n \r\n if (hotspot) {\r\n if (!hotspot.position) {\r\n hotspot.position = { x: 0, y: 0, z: 0 };\r\n }\r\n \r\n hotspot.position[axis] = value;\r\n \r\n // Clear camera orientation since position changed manually\r\n // Will fallback to position-based calculation when pointing camera\r\n hotspot.cameraOrientation = null;\r\n \r\n const pos = hotspot.position;\r\n const distance = Math.sqrt(pos.x * pos.x + pos.y * pos.y + pos.z * pos.z);\r\n if (distance > 10) {\r\n const scale = 10 / distance;\r\n pos.x *= scale;\r\n pos.y *= scale;\r\n pos.z *= scale;\r\n \r\n document.getElementById(`hotspotPos${axis.toUpperCase()}`).value = pos[axis].toFixed(2);\r\n showToast('Position clamped to 10-unit radius', 'info');\r\n }\r\n \r\n await this.previewController.updateHotspotMarker(index);\r\n this.uiController.renderHotspotList();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current scene property\r\n */\r\n updateCurrentScene(property, value) {\r\n const index = this.sceneManager.currentSceneIndex;\r\n if (this.sceneManager.updateScene(index, property, value)) {\r\n this.uiController.renderSceneList();\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Update current scene image URL\r\n */\r\n async updateCurrentSceneImage(imageUrl) {\r\n const index = this.sceneManager.currentSceneIndex;\r\n if (index < 0) return;\r\n \r\n // Use panorama for unified format\r\n if (this.sceneManager.updateScene(index, 'panorama', imageUrl)) {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (scene) {\r\n scene.thumbnail = imageUrl;\r\n }\r\n \r\n this.uiController.renderSceneList();\r\n this.lastRenderedSceneIndex = -1;\r\n \r\n if (scene) {\r\n await this.previewController.loadScene(scene);\r\n this.lastRenderedSceneIndex = index;\r\n showToast('Scene image updated', 'success');\r\n }\r\n this.markUnsavedChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Set scene starting position to current camera rotation\r\n */\r\n setSceneStartingPosition() {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('No scene selected', 'error');\r\n return;\r\n }\r\n \r\n const rotation = this.previewController.getCameraRotation();\r\n if (!rotation) {\r\n showToast('Could not get camera rotation', 'error');\r\n return;\r\n }\r\n \r\n scene.startingPosition = {\r\n pitch: rotation.x,\r\n yaw: rotation.y\r\n };\r\n \r\n this.uiController.updateSceneProperties(scene);\r\n this.markUnsavedChanges();\r\n showToast('Starting position set', 'success');\r\n }\r\n\r\n /**\r\n * Clear scene starting position\r\n */\r\n clearSceneStartingPosition() {\r\n const scene = this.sceneManager.getCurrentScene();\r\n if (!scene) {\r\n showToast('No scene selected', 'error');\r\n return;\r\n }\r\n \r\n scene.startingPosition = null;\r\n \r\n this.uiController.updateSceneProperties(scene);\r\n this.markUnsavedChanges();\r\n showToast('Starting position cleared', 'success');\r\n }\r\n\r\n /**\r\n * Render all UI\r\n */\r\n render() {\r\n this.uiController.renderSceneList();\r\n this.uiController.renderHotspotList();\r\n \r\n const currentScene = this.sceneManager.getCurrentScene();\r\n const currentHotspot = this.hotspotEditor.getCurrentHotspot();\r\n \r\n this.uiController.updateSceneProperties(currentScene);\r\n this.uiController.updateHotspotProperties(currentHotspot);\r\n this.uiController.updateTourProperties(this.config);\r\n this.uiController.updateInitialSceneOptions();\r\n this.uiController.updateTargetSceneOptions();\r\n \r\n if (currentScene) {\r\n const emptyState = document.querySelector('.preview-empty');\r\n if (emptyState) {\r\n emptyState.style.display = 'none';\r\n }\r\n \r\n const currentSceneIndex = this.sceneManager.currentSceneIndex;\r\n if (currentSceneIndex !== this.lastRenderedSceneIndex) {\r\n this.previewController.loadScene(currentScene);\r\n this.lastRenderedSceneIndex = currentSceneIndex;\r\n }\r\n \r\n if (currentHotspot) {\r\n this.previewController.highlightHotspot(this.hotspotEditor.currentHotspotIndex);\r\n }\r\n } else {\r\n const emptyState = document.querySelector('.preview-empty');\r\n if (emptyState) {\r\n emptyState.style.display = 'flex';\r\n }\r\n this.lastRenderedSceneIndex = -1;\r\n }\r\n }\r\n\r\n /**\r\n * Save project\r\n */\r\n saveProject() {\r\n const projectData = {\r\n config: this.config,\r\n scenes: this.sceneManager.getAllScenes()\r\n };\r\n\r\n if (this.storageManager.saveProject(projectData)) {\r\n this.hasUnsavedChanges = false;\r\n showToast('Project saved', 'success');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Load project\r\n */\r\n loadProject() {\r\n const projectData = this.storageManager.loadProject();\r\n if (projectData) {\r\n this.config = projectData.config || this.config;\r\n this.sceneManager.loadScenes(projectData.scenes || []);\r\n this.hasUnsavedChanges = false;\r\n this.render();\r\n showToast('Project loaded', 'success');\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * New project\r\n */\r\n newProject() {\r\n if (this.hasUnsavedChanges) {\r\n if (!confirm('You have unsaved changes. Create new project?')) {\r\n return false;\r\n }\r\n }\r\n\r\n this.config = {\r\n title: 'My Virtual Tour',\r\n description: '',\r\n initialSceneId: ''\r\n };\r\n \r\n this.sceneManager.clearScenes();\r\n this.hasUnsavedChanges = false;\r\n this.render();\r\n \r\n showToast('New project created', 'success');\r\n return true;\r\n }\r\n\r\n /**\r\n * Import project\r\n */\r\n importProject() {\r\nconst importUpload = document.getElementById('importUpload');\r\n if (importUpload) {\r\n importUpload.click();\r\n }\r\n }\r\n\r\n /**\r\n * Handle import file\r\n */\r\n async handleImportFile(file) {\r\n try {\r\n this.uiController.setLoading(true);\r\n \r\n const projectData = await this.storageManager.importFromFile(file);\r\n \r\n this.config = projectData.config || projectData;\r\n this.sceneManager.loadScenes(projectData.scenes || []);\r\n this.hasUnsavedChanges = true;\r\n \r\n this.render();\r\n this.uiController.setLoading(false);\r\n \r\n showToast('Project imported successfully', 'success');\r\n } catch (error) {\r\n this.uiController.setLoading(false);\r\n console.error('Import failed:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Mark unsaved changes\r\n */\r\n markUnsavedChanges() {\r\n this.hasUnsavedChanges = true;\r\n }\r\n}\r\n\r\n// Initialize editor when DOM is ready\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n if (document.querySelector('[data-swt-editor]')) {\r\n // Declarative initialization will handle it\r\n return;\r\n }\r\n window.editor = new TourEditor();\r\n await window.editor.init();\r\n});\r\n\r\nexport default TourEditor;\r\n","// UI Initialization - Handles color picker sync, keyboard shortcuts, tab switching, and declarative init\r\n\r\n/**\r\n * Initialize editor from declarative HTML attributes\r\n */\r\nfunction initDeclarativeEditor() {\r\n const editorElement = document.querySelector(\"[data-swt-editor]\");\r\n\r\n if (!editorElement) {\r\n return null; // No declarative editor found\r\n }\r\n\r\n // Check if auto-init is enabled\r\n const autoInit = editorElement.getAttribute(\"data-swt-auto-init\");\r\n if (autoInit !== \"true\") {\r\n return null; // Auto-init disabled\r\n }\r\n\r\n // Find required elements by data attributes\r\n const sceneListElement = editorElement.querySelector(\"[data-swt-scene-list]\");\r\n const previewElement = editorElement.querySelector(\"[data-swt-preview-area]\");\r\n const propertiesElement = editorElement.querySelector(\r\n \"[data-swt-properties-panel]\"\r\n );\r\n\r\n // Get optional configuration from attributes\r\n const projectName =\r\n editorElement.getAttribute(\"data-swt-project-name\") || \"My Virtual Tour\";\r\n const autoSave = editorElement.getAttribute(\"data-swt-auto-save\") === \"true\";\r\n const autoSaveInterval =\r\n parseInt(editorElement.getAttribute(\"data-swt-auto-save-interval\")) ||\r\n 30000;\r\n\r\n // Create and initialize editor\r\n const editor = new TourEditor({\r\n projectName,\r\n autoSave,\r\n autoSaveInterval,\r\n });\r\n\r\n // Store element references for controllers\r\n if (sceneListElement) editor.options.sceneListElement = sceneListElement;\r\n if (previewElement) editor.options.previewElement = previewElement;\r\n if (propertiesElement) editor.options.propertiesElement = propertiesElement;\r\n\r\n editor.init().catch((err) => {\r\n console.error(\"Failed to initialize declarative editor:\", err);\r\n });\r\n\r\n return editor;\r\n}\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", () => {\r\n // Try declarative initialization first\r\n const declarativeEditor = initDeclarativeEditor();\r\n\r\n if (declarativeEditor) {\r\n // Store editor instance globally for declarative mode\r\n window.editor = declarativeEditor;\r\n }\r\n\r\n // Setup color picker sync\r\n const colorPicker = document.getElementById(\"hotspotColor\");\r\n const colorText = document.getElementById(\"hotspotColorText\");\r\n\r\n if (colorPicker && colorText) {\r\n colorPicker.addEventListener(\"input\", (e) => {\r\n colorText.value = e.target.value;\r\n });\r\n\r\n colorText.addEventListener(\"input\", (e) => {\r\n if (/^#[0-9A-F]{6}$/i.test(e.target.value)) {\r\n colorPicker.value = e.target.value;\r\n }\r\n });\r\n }\r\n\r\n // Keyboard shortcuts\r\n document.addEventListener(\"keydown\", (e) => {\r\n // Ctrl/Cmd + S to save\r\n if ((e.ctrlKey || e.metaKey) && e.key === \"s\") {\r\n e.preventDefault();\r\n if (window.editor) window.editor.saveProject();\r\n }\r\n\r\n // Ctrl/Cmd + E to export\r\n if ((e.ctrlKey || e.metaKey) && e.key === \"e\") {\r\n e.preventDefault();\r\n if (window.editor) window.editor.exportManager.showExportPreview();\r\n }\r\n\r\n // ESC to close modals\r\n if (e.key === \"Escape\") {\r\n document.querySelectorAll(\".modal.show\").forEach((modal) => {\r\n modal.classList.remove(\"show\");\r\n });\r\n }\r\n });\r\n\r\n // Preview button - just focuses on the preview area\r\n const previewBtn = document.getElementById(\"previewBtn\");\r\n if (previewBtn) {\r\n previewBtn.addEventListener(\"click\", () => {\r\n const preview = document.getElementById(\"preview\");\r\n const canvas = document.getElementById(\"canvasArea\");\r\n if (preview && canvas) {\r\n canvas.classList.toggle(\"preview-active\");\r\n // refresh preview\r\n if (window.editor && window.editor.previewController) {\r\n window.editor.previewController.refresh();\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Modal background click to close\r\n document.querySelectorAll(\".modal\").forEach((modal) => {\r\n modal.addEventListener(\"click\", (e) => {\r\n if (e.target === modal) {\r\n modal.classList.remove(\"show\");\r\n }\r\n });\r\n });\r\n\r\n // Tab switching functionality\r\n const tabs = document.querySelectorAll(\".tab\");\r\n const tabContents = document.querySelectorAll(\".tab-content\");\r\n\r\n tabs.forEach((tab) => {\r\n tab.addEventListener(\"click\", () => {\r\n const targetTab = tab.dataset.tab;\r\n\r\n // Update tab buttons\r\n tabs.forEach((t) => t.classList.remove(\"active\"));\r\n tab.classList.add(\"active\");\r\n\r\n // Update tab content\r\n tabContents.forEach((content) => {\r\n content.style.display = \"none\";\r\n });\r\n\r\n const targetContent = document.getElementById(targetTab + \"Tab\");\r\n if (targetContent) {\r\n targetContent.style.display = \"block\";\r\n }\r\n\r\n // Update panel title (if exists)\r\n const panelTitle = document.getElementById(\"panelTitle\");\r\n if (panelTitle) {\r\n switch (targetTab) {\r\n case \"scene\":\r\n panelTitle.textContent = \"Scene Properties\";\r\n break;\r\n case \"hotspot\":\r\n panelTitle.textContent = \"Hotspot Properties\";\r\n break;\r\n case \"tour\":\r\n panelTitle.textContent = \"Tour Settings\";\r\n break;\r\n }\r\n }\r\n });\r\n });\r\n});\r\n","// SenangWebs Tour Editor - Entry Point\r\n// This file bundles all editor modules for distribution\r\n\r\n// Import utility functions and make them global\r\nimport * as utils from './js/utils.js';\r\nObject.assign(window, utils);\r\n\r\n// Import classes\r\nimport ProjectStorageManager from './js/storage-manager.js';\r\nimport SceneManagerEditor from './js/scene-manager.js';\r\nimport HotspotEditor from './js/hotspot-editor.js';\r\nimport PreviewController from './js/preview-controller.js';\r\nimport UIController from './js/ui-controller.js';\r\nimport ExportManager from './js/export-manager.js';\r\nimport TourEditor from './js/editor.js';\r\n\r\n// Attach classes to window for global access\r\nwindow.ProjectStorageManager = ProjectStorageManager;\r\nwindow.SceneManagerEditor = SceneManagerEditor;\r\nwindow.HotspotEditor = HotspotEditor;\r\nwindow.PreviewController = PreviewController;\r\nwindow.UIController = UIController;\r\nwindow.ExportManager = ExportManager;\r\nwindow.TourEditor = TourEditor;\r\n\r\n// Import and execute UI initialization\r\nimport './js/ui-init.js';\r\n\r\n// Export main editor class for potential programmatic use\r\nexport default TourEditor;\r\n"],"names":["sanitizeId","showToast","hideModal","deepClone","TourEditor","ProjectStorageManager","SceneManagerEditor","HotspotEditor","PreviewController","UIController","ExportManager"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|