diff --git a/js/controllers/menu_controller.js b/js/controllers/menu_controller.js index e51647d..d2f1237 100644 --- a/js/controllers/menu_controller.js +++ b/js/controllers/menu_controller.js @@ -35,6 +35,15 @@ export default class extends Controller { const id = event?.params.node; const status = event?.target?.checked; const node = AppState.normalizedNodes.find(n => n.id === id); + /** + * @type {HTMLElement|null} + */ + const eye = event.target.parentElement.querySelector('i'); + + if (eye) { + eye.classList.toggle('bi-eye'); + eye.classList.toggle('bi-eye-slash'); + } if (node.children.length > 0) { this.#toggleGroup(node, status); @@ -113,16 +122,22 @@ export default class extends Controller { } /** * @param {import("../state.js").NormalizedSceneNode} node + * @param {boolean} isGroup * @returns {HTMLDivElement} */ - #createLayerToggle(node) { + #createLayerToggle(node, isGroup = false) { + // This should be calculated somehow! + const labelIndent = node.depth < 3 ? '1.5rem' : '1rem'; + const labelText = isGroup ? '' : node.id; const toggle = html` `; @@ -135,8 +150,9 @@ export default class extends Controller { #createLayerGroup(node) { const { trigger, collapseDiv } = this.#createNodeCollapse(node); const wrapper = document.createElement('div'); + wrapper.classList.add('w-max-content', 'ps-1', 'mb-1'); - collapseDiv.appendChild(this.#createLayerToggle(node)); + collapseDiv.appendChild(this.#createLayerToggle(node, true)); for (const child of node.children) { collapseDiv.appendChild( @@ -148,11 +164,10 @@ export default class extends Controller { wrapper.appendChild(trigger); wrapper.appendChild(collapseDiv); - wrapper.classList.add('m-0', 'p-0'); + wrapper.classList.add('border-start', 'border-bottom', 'rounded', `ms-${node.depth}`); return wrapper; } - /** * * @param {import("../state.js").NormalizedSceneNode} node @@ -164,10 +179,18 @@ export default class extends Controller { trigger.className = 'btn btn-link p-0 fs-6 fw-bold text-decoration-none text-reset'; trigger.setAttribute('data-bs-toggle', 'collapse'); trigger.setAttribute('data-bs-target', `#group-${cleanId}`); - trigger.innerHTML = ` + trigger.setAttribute('data-action', 'menu#toggleChevron'); + trigger.innerHTML = html` ${node.id} -
`; + // Add color "swatch" only for first level groups + if (node.depth === 2) { + trigger.innerHTML += html` +