Styling changes + tooltips and defaults

This commit is contained in:
2026-05-11 11:31:38 +02:00
parent cabfe687e2
commit 589b551558
8 changed files with 142 additions and 47 deletions

View File

@@ -1,5 +1,5 @@
// Global ATON
import { Controller } from "@hotwired/stimulus"
import { Controller } from "@hotwired/stimulus";
import AppState from "../state.js";
import { traverseOntology } from "../ontology.js";
@@ -16,7 +16,6 @@ export default class extends Controller {
}
/**
* Open settings panel
* @param {Event} event
*/
async toggleMenu() {
ATON.UI.setSidePanelRight();
@@ -33,8 +32,8 @@ export default class extends Controller {
* The node's id
* @type {string}
*/
const id = event.params.node;
const status = event.target.checked;
const id = event?.params.node;
const status = event?.target?.checked;
ATON.getSceneNode(id).toggle(status);
AppState.normalizedNodes.find(n => n.id === id).active = status;
}
@@ -44,7 +43,7 @@ export default class extends Controller {
* @returns {DocumentFragment}
*/
#cloneTemplate(id) {
return document.getElementById(id).content.cloneNode(true);
return document.getElementById(id)?.content?.cloneNode(true);
}
/**
* Create the left-side settings panel
@@ -58,7 +57,7 @@ export default class extends Controller {
}
/**
* @todo Don't rebuild it every time, use caching, return a container with checkboxes
* @param {Array} nodes The normalized scene nodes (IDs and status)
* @param {Array<import("../state.js").NormalizedSceneNode>} nodes The normalized scene nodes (IDs and status)
* @param {HTMLElement} tab Tab content element
*/
#buildLayersMenu(nodes, tab) {

View File

@@ -64,8 +64,8 @@ export function openScene (marker, nodes) {
ATON.setAutoLP(config.scene.autoLP);
AppState.lightProbe = config.scene.autoLP;
toggleAmbientOcclusion(true);
AppState.ambientOcclusion = true;
toggleAmbientOcclusion(config.scene.ambientOcclusion);
AppState.ambientOcclusion = config.scene.ambientOcclusion;
AppState.root = ATON.getRootScene();
}

View File

@@ -1,3 +1,5 @@
/** @import { Vector3 } from 'three' */
// Global ATON and THREE
import AppState from "../state.js";
@@ -7,8 +9,7 @@ import AppState from "../state.js";
*/
/**
*
* @param {THREE.Vector3} vector - An object with x,y,z coordinates
* @param {Vector3} vector - An object with x,y,z coordinates
*/
export function changeLightDirection(vector) {
ATON.setMainLightDirection(vector);
@@ -26,14 +27,12 @@ export function toggleAmbientOcclusion(isEnabled) {
* Slider to change light direction, based on ATON.UI
* @param {String} direction - The axis direction, one of 'x','y','z'
* @param {String} label - The slider label
* @param {Array<Number>} range - The slider's range
* @param {[number, number]} range - The slider's range
* @param {Number} step - The slider's step
*/
export function createLightSlider(direction, label, range, step) {
const currentVal = AppState.lightDirection[direction];
console.debug(currentVal);
const lightSlider = ATON.UI.createSlider({
range,
label,
@@ -48,19 +47,20 @@ export function createLightSlider(direction, label, range, step) {
},
});
lightSlider.classList.add('ms-4');
lightSlider.querySelector('input').step = step;
lightSlider.classList.add('ms-1');
const input = lightSlider.querySelector('input');
if (input) input.step = step;
return lightSlider;
}
/**
* Slider to change the env exposure level, based on ATON.UI
* @param {String} label - The slider label
* @param {Array<Number>} range - The slider's range
* @param {[number, number]} range - The slider's range
* @param {Number} step - The slider's step
*/
export function createExposureSlider(label, range, step = 0.05) {
const currentVal = AppState.exposure;
const currentVal = String(AppState.exposure);
const exposureSlider = ATON.UI.createSlider({
range,
@@ -74,8 +74,9 @@ export function createExposureSlider(label, range, step = 0.05) {
},
});
exposureSlider.classList.add('ms-4');
exposureSlider.querySelector('input').step = step;
exposureSlider.classList.add('ms-1');
let input = exposureSlider.querySelector('input');
if (input) input.step = step;
return exposureSlider;
}