import { LitElement, html } from "lit"; import { template } from "./template"; export class QuickActionsMenu extends LitElement { render() { return html`${template(this)}`; } firstUpdated(p) { super.firstUpdated(p); // Escuchar por cambios en el contenido del slot const slot = this.shadowRoot?.querySelector('slot[name="anchor"]'); slot?.addEventListener("slotchange", this.handleSlotChange.bind(this)); } handleSlotChange(event) { const slot = event.target; const assignedElements = slot.assignedElements(); // Si hay algún elemento asignado al slot if (assignedElements.length > 0) { const element = assignedElements[0]; // Asumimos que el primer elemento es el botón if (element.id === "usage-anchor") { // Añadir el listener de evento element.addEventListener("click", this._handleOpenMenu.bind(this)); } } } _handleOpenMenu(e) { // Obtener el otro slot (target-slot) const contentSlot = this.shadowRoot?.querySelector('slot[name="content"]') as HTMLSlotElement; const actionMenu = this.querySelector("dss-action-menu"); // Obtener los elementos asignados al otro slot const assignedElements = contentSlot?.assignedElements(); if (assignedElements[0]) this._addMenuCustomStyle(contentSlot as HTMLElement, actionMenu as HTMLElement); // Hacer target al elemento que deseas (por ejemplo, un
) const targetElement = assignedElements.find((el) => el.id === "content"); if (targetElement) { // Modificar el contenido o estilo del elemento targetElement.show(); } } _addMenuCustomStyle(contentSlot: HTMLElement, actionMenu: HTMLElement) { contentSlot.style.borderRadius = "var(--dss-radius-sm)"; const list = actionMenu.shadowRoot?.querySelector("ul"); if (list) list.style.overflow = "hidden"; } }