import {html, SVGTemplateResult, TemplateResult} from "lit" import {view} from "@chasemoskal/magical" import {DispatchCause} from "../types.js" import {Keylog} from "../starters/keylog.js" import {KeyLayout} from "../layouts/key-layout.js" import {prepGridboardEvents} from "../setups/prep-gridboard-events.js" import gearSvg from "../../../framework/icons/akar/gear.svg.js" import mentionSvg from "../../../framework/icons/akar/mention.svg.js" import arrowUpThickSvg from "../../../framework/icons/akar/arrow-up-thick.svg.js" import arrowDownThickSvg from "../../../framework/icons/akar/arrow-down-thick.svg.js" import arrowLeftThickSvg from "../../../framework/icons/akar/arrow-left-thick.svg.js" import arrowRightThickSvg from "../../../framework/icons/akar/arrow-right-thick.svg.js" import circleChevronUpFillSvg from "../../../framework/icons/akar/circle-chevron-up-fill.svg.js" import circleChevronDownFillSvg from "../../../framework/icons/akar/circle-chevron-down-fill.svg.js" import circleChevronLeftFillSvg from "../../../framework/icons/akar/circle-chevron-left-fill.svg.js" import circleChevronRightFillSvg from "../../../framework/icons/akar/circle-chevron-right-fill.svg.js" import crossSvg from "../../../framework/icons/akar/cross.svg.js" import peopleGroupSvg from "../../../framework/icons/akar/people-group.svg.js" import personSvg from "../../../framework/icons/akar/person.svg.js" import chatDotsSvg from "../../../framework/icons/akar/chat-dots.svg.js" import blockSvg from "../../../framework/icons/akar/block.svg.js" import dragHorizontalFillSvg from "../../../framework/icons/akar/drag-horizontal-fill.svg.js" import gridSvg from "../../../framework/icons/akar/grid.svg.js" import bugSvg from "../../../framework/icons/akar/bug.svg.js" import wifiSvg from "../../../framework/icons/akar/wifi.svg.js" export type Embellishment = { label: string icon?: TemplateResult | SVGTemplateResult | void } export type Embellishments = { [keycode: string]: Embellishment } const embellishments: Embellishments = { KeyQ: {label: "back", icon: blockSvg}, KeyW: {label: "settings", icon: gearSvg}, KeyE: {label: "profiler", icon: bugSvg}, KeyR: {label: "social", icon: peopleGroupSvg}, KeyT: {label: "connection", icon: wifiSvg}, // KeyQ: {label: "menu", icon: gridSvg}, // KeyE: {label: "forth", icon: arrowUpThickSvg}, // KeyD: {label: "back", icon: arrowDownThickSvg}, // KeyS: {label: "left", icon: arrowLeftThickSvg}, // KeyF: {label: "right", icon: arrowRightThickSvg}, } satisfies {[key: string]: Embellishment} export const GridButtonsView = view({}, use => ({ keylog, layout, dispatchCause, }: { layout: KeyLayout keylog: Keylog dispatchCause: DispatchCause }) => { const {pointerup, pointerdown} = prepGridboardEvents(dispatchCause) function isKeyPressed(code: string) { return keylog[code]?.pressed ?? false } function renderButton([keycap, keycode]: string[]) { const embellishment = embellishments[keycode] const isEmbellished = !!embellishment return html` ` } function renderRow(row: string[][]) { return html`