@littlecarlito/blorktools 0.50.4 → 0.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +69 -0
- package/package.json +13 -7
- package/src/asset_debugger/axis-indicator/axis-indicator.css +6 -0
- package/src/asset_debugger/axis-indicator/axis-indicator.html +20 -0
- package/src/asset_debugger/axis-indicator/axis-indicator.js +822 -0
- package/src/asset_debugger/debugger-scene/debugger-scene.css +142 -0
- package/src/asset_debugger/debugger-scene/debugger-scene.html +80 -0
- package/src/asset_debugger/debugger-scene/debugger-scene.js +791 -0
- package/src/asset_debugger/header/header.css +73 -0
- package/src/asset_debugger/header/header.html +24 -0
- package/src/asset_debugger/header/header.js +224 -0
- package/src/asset_debugger/index.html +76 -0
- package/src/asset_debugger/landing-page/landing-page.css +396 -0
- package/src/asset_debugger/landing-page/landing-page.html +81 -0
- package/src/asset_debugger/landing-page/landing-page.js +611 -0
- package/src/asset_debugger/loading-splash/loading-splash.css +195 -0
- package/src/asset_debugger/loading-splash/loading-splash.html +22 -0
- package/src/asset_debugger/loading-splash/loading-splash.js +59 -0
- package/src/asset_debugger/loading-splash/preview-loading-splash.js +66 -0
- package/src/asset_debugger/main.css +14 -0
- package/src/asset_debugger/modals/examples-modal/examples-modal.css +41 -0
- package/src/asset_debugger/modals/examples-modal/examples-modal.html +18 -0
- package/src/asset_debugger/modals/examples-modal/examples-modal.js +111 -0
- package/src/asset_debugger/modals/examples-modal/examples.js +125 -0
- package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.css +452 -0
- package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.html +87 -0
- package/src/asset_debugger/modals/html-editor-modal/html-editor-modal.js +675 -0
- package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.css +219 -0
- package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.html +20 -0
- package/src/asset_debugger/modals/mesh-info-modal/mesh-info-modal.js +548 -0
- package/src/asset_debugger/modals/settings-modal/settings-modal.css +103 -0
- package/src/asset_debugger/modals/settings-modal/settings-modal.html +158 -0
- package/src/asset_debugger/modals/settings-modal/settings-modal.js +475 -0
- package/src/asset_debugger/panels/asset-panel/asset-panel.css +263 -0
- package/src/asset_debugger/panels/asset-panel/asset-panel.html +123 -0
- package/src/asset_debugger/panels/asset-panel/asset-panel.js +136 -0
- package/src/asset_debugger/panels/asset-panel/atlas-heading/atlas-heading.css +94 -0
- package/src/asset_debugger/panels/asset-panel/atlas-heading/atlas-heading.js +312 -0
- package/src/asset_debugger/panels/asset-panel/mesh-heading/mesh-heading.css +129 -0
- package/src/asset_debugger/panels/asset-panel/mesh-heading/mesh-heading.js +486 -0
- package/src/asset_debugger/panels/asset-panel/rig-heading/rig-heading.css +545 -0
- package/src/asset_debugger/panels/asset-panel/rig-heading/rig-heading.js +538 -0
- package/src/asset_debugger/panels/asset-panel/uv-heading/uv-heading.css +70 -0
- package/src/asset_debugger/panels/asset-panel/uv-heading/uv-heading.js +586 -0
- package/src/asset_debugger/panels/world-panel/world-panel.css +364 -0
- package/src/asset_debugger/panels/world-panel/world-panel.html +173 -0
- package/src/asset_debugger/panels/world-panel/world-panel.js +1891 -0
- package/src/asset_debugger/router.js +190 -0
- package/src/asset_debugger/util/animation/playback/animation-playback-controller.js +150 -0
- package/src/asset_debugger/util/animation/playback/animation-preview-controller.js +316 -0
- package/src/asset_debugger/util/animation/playback/css3d-bounce-controller.js +400 -0
- package/src/asset_debugger/util/animation/playback/css3d-reversal-controller.js +821 -0
- package/src/asset_debugger/util/animation/render/css3d-prerender-controller.js +696 -0
- package/src/asset_debugger/util/animation/render/debug-texture-factory.js +0 -0
- package/src/asset_debugger/util/animation/render/iframe2texture-render-controller.js +199 -0
- package/src/asset_debugger/util/animation/render/image2texture-prerender-controller.js +461 -0
- package/src/asset_debugger/util/animation/render/pbr-material-factory.js +82 -0
- package/src/asset_debugger/util/common.css +280 -0
- package/src/asset_debugger/util/data/animation-classifier.js +323 -0
- package/src/asset_debugger/util/data/duplicate-handler.js +20 -0
- package/src/asset_debugger/util/data/glb-buffer-manager.js +407 -0
- package/src/asset_debugger/util/data/glb-classifier.js +290 -0
- package/src/asset_debugger/util/data/html-formatter.js +76 -0
- package/src/asset_debugger/util/data/html-linter.js +276 -0
- package/src/asset_debugger/util/data/localstorage-manager.js +265 -0
- package/src/asset_debugger/util/data/mesh-html-manager.js +295 -0
- package/src/asset_debugger/util/data/string-serder.js +303 -0
- package/src/asset_debugger/util/data/texture-classifier.js +663 -0
- package/src/asset_debugger/util/data/upload/background-file-handler.js +292 -0
- package/src/asset_debugger/util/data/upload/dropzone-preview-controller.js +396 -0
- package/src/asset_debugger/util/data/upload/file-upload-manager.js +495 -0
- package/src/asset_debugger/util/data/upload/glb-file-handler.js +36 -0
- package/src/asset_debugger/util/data/upload/glb-preview-controller.js +317 -0
- package/src/asset_debugger/util/data/upload/lighting-file-handler.js +194 -0
- package/src/asset_debugger/util/data/upload/model-file-manager.js +104 -0
- package/src/asset_debugger/util/data/upload/texture-file-handler.js +166 -0
- package/src/asset_debugger/util/data/upload/zip-handler.js +686 -0
- package/src/asset_debugger/util/loaders/html2canvas-loader.js +107 -0
- package/src/asset_debugger/util/rig/bone-kinematics.js +403 -0
- package/src/asset_debugger/util/rig/rig-constraint-manager.js +618 -0
- package/src/asset_debugger/util/rig/rig-controller.js +612 -0
- package/src/asset_debugger/util/rig/rig-factory.js +628 -0
- package/src/asset_debugger/util/rig/rig-handle-factory.js +46 -0
- package/src/asset_debugger/util/rig/rig-label-factory.js +441 -0
- package/src/asset_debugger/util/rig/rig-mouse-handler.js +377 -0
- package/src/asset_debugger/util/rig/rig-state-manager.js +175 -0
- package/src/asset_debugger/util/rig/rig-tooltip-manager.js +267 -0
- package/src/asset_debugger/util/rig/rig-ui-factory.js +700 -0
- package/src/asset_debugger/util/scene/background-manager.js +284 -0
- package/src/asset_debugger/util/scene/camera-controller.js +243 -0
- package/src/asset_debugger/util/scene/css3d-debug-controller.js +406 -0
- package/src/asset_debugger/util/scene/css3d-frame-factory.js +113 -0
- package/src/asset_debugger/util/scene/css3d-scene-manager.js +529 -0
- package/src/asset_debugger/util/scene/glb-controller.js +208 -0
- package/src/asset_debugger/util/scene/lighting-manager.js +690 -0
- package/src/asset_debugger/util/scene/threejs-model-manager.js +437 -0
- package/src/asset_debugger/util/scene/threejs-preview-manager.js +207 -0
- package/src/asset_debugger/util/scene/threejs-preview-setup.js +478 -0
- package/src/asset_debugger/util/scene/threejs-scene-controller.js +286 -0
- package/src/asset_debugger/util/scene/ui-manager.js +107 -0
- package/src/asset_debugger/util/state/animation-state.js +128 -0
- package/src/asset_debugger/util/state/css3d-state.js +83 -0
- package/src/asset_debugger/util/state/glb-preview-state.js +31 -0
- package/src/asset_debugger/util/state/log-util.js +197 -0
- package/src/asset_debugger/util/state/scene-state.js +452 -0
- package/src/asset_debugger/util/state/threejs-state.js +54 -0
- package/src/asset_debugger/util/workers/lighting-worker.js +61 -0
- package/src/asset_debugger/util/workers/model-worker.js +109 -0
- package/src/asset_debugger/util/workers/texture-worker.js +54 -0
- package/src/asset_debugger/util/workers/worker-manager.js +212 -0
- package/src/asset_debugger/widgets/mesh-info-widget.js +280 -0
- package/src/index.html +261 -0
- package/src/index.js +8 -0
- package/vite.config.js +66 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* Title area with debug controls */
|
|
2
|
+
.title-area {
|
|
3
|
+
display: flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
flex-shrink: 0;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* Ensure right-side buttons are properly aligned */
|
|
9
|
+
.header-controls {
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
gap: 10px;
|
|
13
|
+
margin-right: 0; /* Remove any potential margin */
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Debug controls in the header */
|
|
17
|
+
.debug-controls {
|
|
18
|
+
display: none; /* Hidden by default, shown when debugging starts */
|
|
19
|
+
align-items: center;
|
|
20
|
+
gap: 10px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Style for the settings button in the header */
|
|
24
|
+
.settings-button {
|
|
25
|
+
width: 40px;
|
|
26
|
+
height: 40px;
|
|
27
|
+
background-color: var(--secondary-color);
|
|
28
|
+
border: 1px solid var(--button-color);
|
|
29
|
+
color: var(--button-color);
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
padding: 0;
|
|
32
|
+
margin-left: 10px;
|
|
33
|
+
border-radius: 4px;
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
transition: all 0.3s ease;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.settings-button svg path {
|
|
41
|
+
fill: var(--button-color);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.settings-button:hover {
|
|
45
|
+
background-color: rgba(30, 136, 229, 0.2);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Pin button styles */
|
|
49
|
+
.pin-button {
|
|
50
|
+
padding: 8px;
|
|
51
|
+
display: flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
justify-content: center;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.pin-button svg {
|
|
57
|
+
transform: rotate(-90deg); /* Default state - horizontal */
|
|
58
|
+
transition: transform 0.3s ease, fill 0.3s ease;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.pin-button.pinned svg {
|
|
62
|
+
transform: rotate(0deg); /* Pinned state - vertical */
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.pin-button.pinned svg path {
|
|
66
|
+
fill: var(--button-color);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.pin-button:not(.pinned) svg path {
|
|
70
|
+
fill: none;
|
|
71
|
+
stroke: var(--button-color);
|
|
72
|
+
stroke-width: 1.5px;
|
|
73
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- Reusable header component -->
|
|
2
|
+
<header>
|
|
3
|
+
<div class="title-area">
|
|
4
|
+
<h1>Asset Debugger</h1>
|
|
5
|
+
<div class="debug-controls" style="display: none; margin-left: 15px;">
|
|
6
|
+
<button id="restart-debug" class="theme-toggle">Restart</button>
|
|
7
|
+
<button id="settings-button" class="theme-toggle pin-button" aria-label="Settings" style="padding: 8px; display: flex; align-items: center; justify-content: center;">
|
|
8
|
+
<svg width="16" height="16" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
9
|
+
<path d="M17.4039 10.9839C17.4373 10.6618 17.4373 10.3382 17.4039 10.0161L19.0039 8.7661C19.1706 8.63275 19.2239 8.41608 19.1373 8.23275L17.3039 5.10775C17.2173 4.92441 17.0039 4.84108 16.8206 4.92441L14.9373 5.69108C14.5039 5.35775 14.0373 5.09108 13.5373 4.89108L13.2706 2.89108C13.2373 2.69108 13.0706 2.55774 12.8706 2.55774H9.20394C9.00394 2.55774 8.83727 2.69108 8.80394 2.89108L8.53727 4.89108C8.03727 5.09108 7.57061 5.35775 7.13727 5.69108L5.25394 4.92441C5.07061 4.84108 4.85727 4.92441 4.77061 5.10775L2.93727 8.23275C2.85061 8.41608 2.90394 8.63275 3.07061 8.7661L4.67061 10.0161C4.63727 10.3382 4.63727 10.6618 4.67061 10.9839L3.07061 12.2339C2.90394 12.3672 2.85061 12.5839 2.93727 12.7672L4.77061 15.8922C4.85727 16.0755 5.07061 16.1589 5.25394 16.0755L7.13727 15.3089C7.57061 15.6422 8.03727 15.9089 8.53727 16.1089L8.80394 18.1089C8.83727 18.3089 9.00394 18.4422 9.20394 18.4422H12.8706C13.0706 18.4422 13.2373 18.3089 13.2706 18.1089L13.5373 16.1089C14.0373 15.9089 14.5039 15.6422 14.9373 15.3089L16.8206 16.0755C17.0039 16.1589 17.2173 16.0755 17.3039 15.8922L19.1373 12.7672C19.2239 12.5839 19.1706 12.3672 19.0039 12.2339L17.4039 10.9839ZM11.0373 13.8089C9.17061 13.8089 7.65394 12.2922 7.65394 10.4255C7.65394 8.55889 9.17061 7.04222 11.0373 7.04222C12.9039 7.04222 14.4206 8.55889 14.4206 10.4255C14.4206 12.2922 12.9039 13.8089 11.0373 13.8089Z" fill="currentColor"/>
|
|
10
|
+
</svg>
|
|
11
|
+
</button>
|
|
12
|
+
<button id="toggle-panel" class="theme-toggle pin-button" aria-label="Toggle Panel" title="Hide Side Panel" style="padding: 8px; display: flex; align-items: center; justify-content: center;">
|
|
13
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
14
|
+
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z" fill="currentColor"/>
|
|
15
|
+
</svg>
|
|
16
|
+
</button>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="header-controls">
|
|
20
|
+
<button id="return-to-toolbox" class="theme-toggle">Exit to Toolbox</button>
|
|
21
|
+
<button id="theme-toggle" class="theme-toggle">System Status</button>
|
|
22
|
+
<div id="pin-button-container"></div>
|
|
23
|
+
</div>
|
|
24
|
+
</header>
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Header Component Loader
|
|
3
|
+
* Loads the common header component into the specified container element
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Import settings utilities for pin button functionality
|
|
7
|
+
// Using relative path with "../" to navigate up from components directory
|
|
8
|
+
import { loadSettings, saveSettings } from '../util/data/localstorage-manager.js';
|
|
9
|
+
|
|
10
|
+
// Mac dock behavior settings
|
|
11
|
+
const HEADER_SHOW_DISTANCE = 20; // px from top to show header
|
|
12
|
+
const HEADER_HIDE_DISTANCE = 60; // px from top to hide header
|
|
13
|
+
const HEADER_HIDE_DELAY = 1000; // ms to wait before hiding header
|
|
14
|
+
let headerHideTimer = null;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Loads the header component into the specified container
|
|
18
|
+
* @param {string} containerId - The ID of the container element
|
|
19
|
+
* @returns {Promise} - A promise that resolves when the header is loaded
|
|
20
|
+
*/
|
|
21
|
+
export function loadHeader(containerId = 'header-container') {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
const container = document.getElementById(containerId);
|
|
24
|
+
if (!container) {
|
|
25
|
+
console.error(`Header container with ID '${containerId}' not found`);
|
|
26
|
+
reject(new Error(`Header container with ID '${containerId}' not found`));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Fetch the header HTML
|
|
31
|
+
fetch('./header/header.html')
|
|
32
|
+
.then(response => {
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(`Failed to load header: ${response.status} ${response.statusText}`);
|
|
35
|
+
}
|
|
36
|
+
return response.text();
|
|
37
|
+
})
|
|
38
|
+
.then(html => {
|
|
39
|
+
// Insert the header HTML into the container
|
|
40
|
+
container.innerHTML = html;
|
|
41
|
+
|
|
42
|
+
// Wait for the DOM to be updated before setting up components
|
|
43
|
+
return new Promise(resolve => {
|
|
44
|
+
// Use requestAnimationFrame to ensure DOM is painted
|
|
45
|
+
requestAnimationFrame(() => {
|
|
46
|
+
resolve();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
})
|
|
50
|
+
.then(() => {
|
|
51
|
+
// Add the pin button with the correct state
|
|
52
|
+
setupPinButton();
|
|
53
|
+
|
|
54
|
+
// Set up all header button event listeners
|
|
55
|
+
setupHeaderButtons();
|
|
56
|
+
|
|
57
|
+
// Set up Mac-like dock behavior for header
|
|
58
|
+
setupHeaderDockBehavior(true);
|
|
59
|
+
|
|
60
|
+
resolve();
|
|
61
|
+
})
|
|
62
|
+
.catch(error => {
|
|
63
|
+
console.error('Error loading header:', error);
|
|
64
|
+
reject(error);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Sets up all header button event listeners
|
|
71
|
+
*/
|
|
72
|
+
function setupHeaderButtons() {
|
|
73
|
+
// System status button
|
|
74
|
+
const themeToggle = document.getElementById('theme-toggle');
|
|
75
|
+
if (themeToggle) {
|
|
76
|
+
themeToggle.textContent = 'System Status';
|
|
77
|
+
|
|
78
|
+
themeToggle.addEventListener('click', function() {
|
|
79
|
+
alert('System Status: Online\nAsset Debugger: Ready\nRig Visualizer: Ready');
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Return to Toolbox functionality
|
|
84
|
+
const returnToToolboxBtn = document.getElementById('return-to-toolbox');
|
|
85
|
+
if (returnToToolboxBtn) {
|
|
86
|
+
returnToToolboxBtn.addEventListener('click', function() {
|
|
87
|
+
window.location.href = '../../../';
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Pin button functionality with localStorage persistence
|
|
92
|
+
const pinButton = document.getElementById('pin-button');
|
|
93
|
+
if (pinButton) {
|
|
94
|
+
pinButton.addEventListener('click', function() {
|
|
95
|
+
this.classList.toggle('pinned');
|
|
96
|
+
|
|
97
|
+
// Save the new state to settings
|
|
98
|
+
const isPinned = this.classList.contains('pinned');
|
|
99
|
+
const currentSettings = loadSettings() || {};
|
|
100
|
+
currentSettings.pinned = isPinned;
|
|
101
|
+
saveSettings(currentSettings);
|
|
102
|
+
|
|
103
|
+
// If pinned, ensure header is visible
|
|
104
|
+
const header = document.querySelector('#header-container > header');
|
|
105
|
+
if (isPinned) {
|
|
106
|
+
header.style.transform = 'translateY(0)';
|
|
107
|
+
header.style.opacity = '1';
|
|
108
|
+
} else {
|
|
109
|
+
// If not pinned, just register the dock behavior
|
|
110
|
+
// but don't hide the header immediately - keep it visible
|
|
111
|
+
// and let the mouse movement behavior handle when to hide it
|
|
112
|
+
setupHeaderDockBehavior(false);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Sets up the pin button with the correct state
|
|
120
|
+
*/
|
|
121
|
+
function setupPinButton() {
|
|
122
|
+
const pinButtonContainer = document.getElementById('pin-button-container');
|
|
123
|
+
if (!pinButtonContainer) return;
|
|
124
|
+
|
|
125
|
+
// Get pinned state from localStorage
|
|
126
|
+
let isPinned = true; // Default to pinned
|
|
127
|
+
try {
|
|
128
|
+
const savedSettings = localStorage.getItem('assetDebuggerSettings');
|
|
129
|
+
if (savedSettings) {
|
|
130
|
+
const settings = JSON.parse(savedSettings);
|
|
131
|
+
if (settings && settings.hasOwnProperty('pinned')) {
|
|
132
|
+
isPinned = settings.pinned;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
} catch (e) {
|
|
136
|
+
console.error('Error checking pin state:', e);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Generate the pin button HTML with the correct state
|
|
140
|
+
const pinnedClass = isPinned ? "pinned" : "";
|
|
141
|
+
|
|
142
|
+
// Create the pin button HTML
|
|
143
|
+
pinButtonContainer.innerHTML = `
|
|
144
|
+
<button id="pin-button" class="theme-toggle pin-button ${pinnedClass}" aria-label="Pin">
|
|
145
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
146
|
+
<path d="M16 9V4H17C17.55 4 18 3.55 18 3C18 2.45 17.55 2 17 2H7C6.45 2 6 2.45 6 3C6 3.55 6.45 4 7 4H8V9C8 10.66 6.66 12 5 12V14H10.97V21L11.97 22L12.97 21V14H19V12C17.34 12 16 10.66 16 9Z" fill="currentColor"/>
|
|
147
|
+
</svg>
|
|
148
|
+
</button>
|
|
149
|
+
`;
|
|
150
|
+
|
|
151
|
+
// Store for later use in JS
|
|
152
|
+
window.initialPinState = isPinned;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Sets up the Mac-like dock behavior for the header
|
|
157
|
+
* @param {boolean} hideInitially - Whether to hide the header initially if unpinned
|
|
158
|
+
*/
|
|
159
|
+
function setupHeaderDockBehavior(hideInitially = true) {
|
|
160
|
+
// Wait for the header to be loaded
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
const header = document.querySelector('#header-container > header');
|
|
163
|
+
const pinButton = document.getElementById('pin-button');
|
|
164
|
+
|
|
165
|
+
if (!header || !pinButton) {
|
|
166
|
+
console.warn('Header or pin button not found for dock behavior setup, retrying...');
|
|
167
|
+
// Retry after a short delay
|
|
168
|
+
setTimeout(() => setupHeaderDockBehavior(hideInitially), 100);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Add CSS transitions for smooth show/hide
|
|
173
|
+
header.style.transition = 'transform 0.3s ease, opacity 0.3s ease';
|
|
174
|
+
|
|
175
|
+
// Initial state
|
|
176
|
+
const isPinned = pinButton.classList.contains('pinned');
|
|
177
|
+
if (!isPinned && hideInitially) {
|
|
178
|
+
// Start with header hidden if not pinned and hideInitially is true
|
|
179
|
+
header.style.transform = 'translateY(-100%)';
|
|
180
|
+
header.style.opacity = '0';
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Add mouse movement listener to show/hide header
|
|
184
|
+
document.addEventListener('mousemove', (e) => {
|
|
185
|
+
// Get latest pin state
|
|
186
|
+
const isPinned = pinButton.classList.contains('pinned');
|
|
187
|
+
|
|
188
|
+
// If pinned, keep header visible at all times
|
|
189
|
+
if (isPinned) {
|
|
190
|
+
header.style.transform = 'translateY(0)';
|
|
191
|
+
header.style.opacity = '1';
|
|
192
|
+
|
|
193
|
+
// Clear any pending hide timer
|
|
194
|
+
if (headerHideTimer) {
|
|
195
|
+
clearTimeout(headerHideTimer);
|
|
196
|
+
headerHideTimer = null;
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// When mouse is near the top, show the header
|
|
202
|
+
if (e.clientY <= HEADER_SHOW_DISTANCE) {
|
|
203
|
+
header.style.transform = 'translateY(0)';
|
|
204
|
+
header.style.opacity = '1';
|
|
205
|
+
|
|
206
|
+
// Clear any pending hide timer
|
|
207
|
+
if (headerHideTimer) {
|
|
208
|
+
clearTimeout(headerHideTimer);
|
|
209
|
+
headerHideTimer = null;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// When mouse moves away, start timer to hide header
|
|
213
|
+
else if (e.clientY > HEADER_HIDE_DISTANCE && !headerHideTimer) {
|
|
214
|
+
headerHideTimer = setTimeout(() => {
|
|
215
|
+
header.style.transform = 'translateY(-100%)';
|
|
216
|
+
header.style.opacity = '0';
|
|
217
|
+
headerHideTimer = null;
|
|
218
|
+
}, HEADER_HIDE_DELAY);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}, 100); // Wait for header to load
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export default { loadHeader };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Asset Debugger - Blorktools</title>
|
|
7
|
+
<link rel="stylesheet" href="main.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
|
|
11
|
+
<!-- Loading screen -->
|
|
12
|
+
<div id="loading-splash" class="loading-splash" style="display: none;">
|
|
13
|
+
<div class="loading-content">
|
|
14
|
+
<h1 class="loading-title">ASSET DEBUGGER</h1>
|
|
15
|
+
<div class="loading-spinner-container">
|
|
16
|
+
<div class="atomic-spinner">
|
|
17
|
+
<div class="nucleus"></div>
|
|
18
|
+
<div class="electron-orbit">
|
|
19
|
+
<div class="electron"></div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="electron-orbit">
|
|
22
|
+
<div class="electron"></div>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="electron-orbit">
|
|
25
|
+
<div class="electron"></div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
<div id="loading-progress-text" class="loading-progress-text">Initializing</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<!-- Header container - will be populated by the header.js script -->
|
|
34
|
+
<div id="header-container"></div>
|
|
35
|
+
|
|
36
|
+
<div id="app">
|
|
37
|
+
<div class="loading">
|
|
38
|
+
<h1>Asset Debugger</h1>
|
|
39
|
+
<p>Loading application...</p>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<!-- Load the header component -->
|
|
44
|
+
<script type="module">
|
|
45
|
+
import { loadHeader } from './header/header.js';
|
|
46
|
+
|
|
47
|
+
// Load the header when the DOM is ready
|
|
48
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
49
|
+
loadHeader('header-container');
|
|
50
|
+
});
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<script>
|
|
54
|
+
console.log('Asset Debugger page loaded');
|
|
55
|
+
console.log('Current URL:', window.location.href);
|
|
56
|
+
console.log('Current hash:', window.location.hash);
|
|
57
|
+
|
|
58
|
+
// DOM ready handler for debugging
|
|
59
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
60
|
+
console.log('DOM loaded for asset debugger');
|
|
61
|
+
|
|
62
|
+
// Log app div status
|
|
63
|
+
const appDiv = document.getElementById('app');
|
|
64
|
+
if (appDiv) {
|
|
65
|
+
console.log('App div found:', appDiv);
|
|
66
|
+
console.log('App div content:', appDiv.innerHTML.substring(0, 100));
|
|
67
|
+
} else {
|
|
68
|
+
console.error('App div not found!');
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
</script>
|
|
72
|
+
|
|
73
|
+
<!-- Load router as a module -->
|
|
74
|
+
<script type="module" src="router.js"></script>
|
|
75
|
+
</body>
|
|
76
|
+
</html>
|