const { LitElement, html, css } = require('lit') const audioContext = new window.AudioContext() const sounds = {} async function playSound (path) { let volume = 1 const options = document.getElementById('options-screen') if (options) { volume = options.sound / 100 } let soundBuffer = sounds[path] if (!soundBuffer) { const res = await window.fetch(path) const data = await res.arrayBuffer() soundBuffer = await audioContext.decodeAudioData(data) sounds[path] = soundBuffer } const gainNode = audioContext.createGain() const source = audioContext.createBufferSource() source.buffer = soundBuffer source.connect(gainNode) gainNode.connect(audioContext.destination) gainNode.gain.value = volume source.start(0) } class Button extends LitElement { static get styles () { return css` .button { --txrV: 66px; position: relative; width: 200px; height: 20px; font-family: minecraft, mojangles, monospace; font-size: 10px; color: white; text-shadow: 1px 1px #222; border: none; z-index: 1; outline: none; } .button:hover, .button:focus-visible { --txrV: 86px; } .button:disabled { --txrV: 46px; color: #A0A0A0; text-shadow: 1px 1px #111; } .button::after { content: ''; display: block; position: absolute; top: 0; left: 0; width: 50%; height: 20px; background: url('textures/1.17.1/gui/widgets.png'); background-size: 256px; background-position-y: calc(var(--txrV) * -1); z-index: -1; } .button::before { content: ''; display: block; position: absolute; top: 0; left: 50%; width: 50%; height: 20px; background: url('textures/1.17.1/gui/widgets.png'); background-size: 256px; background-position-x: calc(-200px + 100%); background-position-y: calc(var(--txrV) * -1); z-index: -1; } ` } static get properties () { return { label: { type: String, attribute: 'pmui-label' }, width: { type: String, attribute: 'pmui-width' }, disabled: { type: Boolean, attribute: 'pmui-disabled' }, onPress: { type: Function, attribute: 'pmui-click' } } } constructor () { super() this.label = '' this.disabled = false this.width = '200px' this.onPress = () => {} } render () { return html` ` } onBtnClick () { playSound('click_stereo.ogg') this.dispatchEvent(new window.CustomEvent('pmui-click')) } } window.customElements.define('pmui-button', Button) const _playSound = playSound export { _playSound as playSound }