t2-mapper/docs/assets/KeyboardControls-CJjZbu2D.js
2026-03-17 15:21:14 -07:00

1 line
No EOL
1.4 KiB
JavaScript

import{r as e}from"./chunk-DECur_0Z.js";import{r as t}from"./jsx-runtime-BpGWiA-R.js";import{i as n}from"./traditional-ec-lUAFC.js";import{s as r}from"./engineStore-CXPwEu5b.js";var i=e(t(),1),a=e=>e;function o(e,t=a){let n=i.useSyncExternalStore(e.subscribe,i.useCallback(()=>t(e.getState()),[e,t]),i.useCallback(()=>t(e.getInitialState()),[e,t]));return i.useDebugValue(n),n}var s=e=>{let t=n(e),r=e=>o(t,e);return Object.assign(r,t),r},c=(e=>e?s(e):s),l=i.createContext(null);function u({map:e,children:t,onChange:n,domElement:a}){let o=e.map(e=>e.name+e.keys).join(`-`),s=i.useMemo(()=>c(r(()=>e.reduce((e,t)=>({...e,[t.name]:!1}),{}))),[o]),u=i.useMemo(()=>[s.subscribe,s.getState,s],[o]),d=s.setState;return i.useEffect(()=>{let t=e.map(({name:e,keys:t,up:r})=>({keys:t,up:r,fn:t=>{d({[e]:t}),n&&n(e,t,u[1]())}})).reduce((e,{keys:t,fn:n,up:r=!0})=>(t.forEach(t=>e[t]={fn:n,pressed:!1,up:r}),e),{}),r=({key:e,code:n})=>{let r=t[e]||t[n];if(!r)return;let{fn:i,pressed:a,up:o}=r;r.pressed=!0,(o||!a)&&i(!0)},i=({key:e,code:n})=>{let r=t[e]||t[n];if(!r)return;let{fn:i,up:a}=r;r.pressed=!1,a&&i(!1)},o=a||window;return o.addEventListener(`keydown`,r,{passive:!0}),o.addEventListener(`keyup`,i,{passive:!0}),()=>{o.removeEventListener(`keydown`,r),o.removeEventListener(`keyup`,i)}},[a,o]),i.createElement(l.Provider,{value:u,children:t})}function d(e){let[t,n,r]=i.useContext(l);return e?r(e):[t,n]}export{d as n,u as t};