presentation/components/menu.component.ts

presentation/components/menu.component.ts is a file in Bane's Lab Site. 20 lines of code and 3 definitions.

import { ICON_BASE_CLASS } from "#configuration/icons/element.icons";
import type { PageEntry } from "#types/page.types";
import { ROUTE_REQUESTED } from "#core/ids/route.ids";
import { createElement } from "#core/factories/element.factory";
import { emitEvent } from "#core/buses/base.bus";

export const PAGE_ATTRIBUTE = "data-page";

export const createMenuButton = function createMenuButton(page: PageEntry): HTMLButtonElement {
    const button = createElement("button", {
        attributes: { [PAGE_ATTRIBUTE]: page.id, title: page.title, type: "button" },
        children: [
            createElement("i", { className: `${ICON_BASE_CLASS} ${page.icon}` }),
            createElement("span", { className: "tab-label", text: page.title }),
        ],
        className: `tab-button ${page.accent}`,
    });
    button.addEventListener("click", () => {
        emitEvent({ name: ROUTE_REQUESTED, page: page.id });
    });
    return button;
};