{"version":3,"sources":["../../../src/components/Keyboard/index.tsx","../../../src/components/Keyboard/styles.css.ts"],"sourcesContent":["import { Popover } from \"@base-ui/react/popover\";\nimport type React from \"react\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport * as styles from \"./styles.css\";\n\nconst KEYBOARD_LAYOUTS = {\n  default: [\n    [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"0\"],\n    [\"q\", \"w\", \"e\", \"r\", \"t\", \"y\", \"u\", \"i\", \"o\", \"p\"],\n    [\"a\", \"s\", \"d\", \"f\", \"g\", \"h\", \"j\", \"k\", \"l\"],\n    [\"z\", \"x\", \"c\", \"v\", \"b\", \"n\", \"m\"],\n  ],\n  numeric: [[\"1\", \"2\", \"3\"], [\"4\", \"5\", \"6\"], [\"7\", \"8\", \"9\"], [\"0\"]],\n};\n\nexport const Keyboard = forwardRef(function Keyboard(\n  props: React.HTMLAttributes<HTMLDivElement>,\n  ref: React.Ref<HTMLDivElement>,\n) {\n  const [visible, setVisible] = useState(false);\n  const [focusedInput, setFocusedInput] = useState<HTMLInputElement | null>(\n    null,\n  );\n  const [keyboardType, setKeyboardType] = useState(\"default\");\n\n  useEffect(() => {\n    const handleFocusIn = (event: FocusEvent) => {\n      const target = event.target as HTMLInputElement;\n      if (target.tagName === \"INPUT\") {\n        setFocusedInput(target);\n        setKeyboardType(target.getAttribute(\"keyboard-type\") || \"default\");\n        setVisible(true);\n      }\n    };\n\n    const handleFocusOut = (event: FocusEvent) => {\n      if (\n        !(event.relatedTarget as HTMLElement)?.classList.contains(\n          \"keyboard-button\",\n        )\n      ) {\n        setVisible(false);\n        setFocusedInput(null);\n      }\n    };\n\n    window.addEventListener(\"focusin\", handleFocusIn);\n    window.addEventListener(\"focusout\", handleFocusOut);\n\n    return () => {\n      window.removeEventListener(\"focusin\", handleFocusIn);\n      window.removeEventListener(\"focusout\", handleFocusOut);\n    };\n  }, []);\n\n  const handleKeyPress = (\n    key: string,\n    e: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n  ) => {\n    e.preventDefault();\n    if (focusedInput) {\n      const start = focusedInput.selectionStart || 0;\n      const end = focusedInput.selectionEnd || 0;\n      const value = focusedInput.value;\n\n      if (key === \"Backspace\") {\n        focusedInput.value = value.slice(0, start - 1) + value.slice(end);\n        focusedInput.setSelectionRange(start - 1, start - 1);\n        focusedInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n        return;\n      }\n      focusedInput.value = value.slice(0, start) + key + value.slice(end);\n      focusedInput.setSelectionRange(start + 1, start + 1);\n      focusedInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n    }\n  };\n\n  return (\n    <Popover.Root open={visible} onOpenChange={setVisible}>\n      <Popover.Portal>\n        <Popover.Positioner\n          anchor={focusedInput}\n          side=\"bottom\"\n          align=\"start\"\n          sideOffset={4}\n          className={styles.keyboardPositioner}\n        >\n          <Popover.Popup\n            initialFocus={false}\n            finalFocus={false}\n            ref={ref}\n            {...props}\n            className={styles.keyboardContainer}\n          >\n            {KEYBOARD_LAYOUTS[\n              keyboardType as keyof typeof KEYBOARD_LAYOUTS\n            ].map((row) => {\n              return (\n                <div key={row.join(\"-\")} className={styles.keyboardRow}>\n                  {row.map((key) => (\n                    <button\n                      className={`${styles.keyButton} keyboard-button`}\n                      key={key}\n                      onMouseDown={(e) => handleKeyPress(key, e)}\n                    >\n                      {key}\n                    </button>\n                  ))}\n                </div>\n              );\n            })}\n          </Popover.Popup>\n        </Popover.Positioner>\n      </Popover.Portal>\n    </Popover.Root>\n  );\n});\n\nKeyboard.displayName = \"Keyboard\";\n","import 'src/theme/theme.css.ts.vanilla.css?source=#H4sIAAAAAAAAA-1d247buhV9P19BHL80QBzofjtPMxkEzVvRFuhjQEmUrRlZ8kjy2J6i_15QtiVeNmlppiiKghEmQaK1Nvfa2hJphQv-1m_JjvzKSYEPVf_34S-_bC_ddt5b4KJ__obQep01VdN2631b7nB7XlflZtuTrh-BVoJWxMc29v5Q49sRbidolacBCR01fAQ7FGy7heeD4GviI9xN0CqLbNdOYThuX0asl6BV7FmxVSixTNZ-glaBbTlWwKFbkssFCeCCTNgpbAgXY4SOwAguBAWKRYjhIgxQtgAYLsANx2SZwuLPpKqao6w_S9CqKEiaRWr4FDwf0HkUe0r0iCUDNvMDG8KKhSgGdOo6BYhma7GhNcuizM5VUCbjLS1cHIRC4TYtIbVcjTJBqzQjbk6U6Cn0c4JWUZzHmTL0CH1J0MqPsyKzAahYiipBK4dkcRpCYLYSuwSt7DwOokiBZLKtE7SyisD1MYdNqwOR69AMVcuLolCBp8B72nBBpsaOyNcErVw3BZFiEVqaro1hLFuDbgBGWZbBQCbTfoAGcRxz0KbF9QYowiFBqx8_nqLHJzV8Cv42oB_j6EGJHrHHARs_-iGEFUtxGtDhk-OBaLYY5wStvn_3f9hKKJPx-3CRPc_iy9GRrKnzX4o7xKYzyIP_PXz4cY_FTCN0HgnDx6fo8Q5potDZxHt6dIIHNUWslE3nFCd8iLzvGhJbMJvOLHYQ-q6jZ7Bq6PxiPXiOzadWk0Pf4mp93Jb9NDXbwfBkK8ROvqHlCtN5pgjooSEw6dDphuT0UOMn9DDjBPQA0VJJ6cwTYnrAeK6adPLxPXoowWzmdPJxhl8gPK1wxgSnk481_OLQRXkiuVh0Ahf9ghXiFkLcbovz5tjJhd4kyNqfhh_n-ueVaP_4OvzVlk853h9A2Cno9m5Q-s_enaDSZSvvhqUho3thuav7fDcmjWcHM4KyZX2Zwgr5uO61rMOQviJuf943mxbvt-d1gXdlJS817SpBv_-l2e_Luvv9K-pwTe_wtiykAEdCrw5dWG0OFWaS3CXIuzUIgN-RvDzsJnidIF8D78iuTJsqnwhNggINgQfvExQC4C7DFVnnZbev8HldNHX_t_KduSleE-R4-9MdXlXW5M-Eb9I2QU50l0lH_IfA7HSpbgnOy3oDpNonyLGUA954UKoHrUh2RDHVN12qaZNDJT0myFaPNpCgJE9aeeNYYoZnuAkvrAzv-7KpgSTfE2Q7ytFuPCBPx0qG23nGiEKqjg3fABdit8NVJSfqOMlwq2tZUJqu9ipMo4lJekw9uz3OaGecTt0E8BM0xh0BzPkgQZF4njkdsuW7nZ-eEk7E9urtfDWdjxPkOtL4DABTARKARaQJ8sYUW5yXh47NMGMEXs8y-eWMvOtZJjRh2-p6mh26YNXfzrOADSef7HDdl9matG0zPXidrfAJecR1hywjHaOlFD43jciyLpoJ9ix8shhhR9zWZb2ZkC_CZ9L3n3VOTuu8bfZ5c6wnYEX79tZIV9SuyTGjdZcg2xYgfdNUfbmfQDWtqATCzOLQaRJkuzfIrrncfxxinyDbt3YdB6mbdsem85og1xJBXdUcJ0g73ME3SNbs9k1N6p4uokiV_6yLZryD1znpXvqGUdKxvaHn9jitCJN_z97Md6hNT5h2PbANxzDLen_o1xVOSaVJ-W0Ju8LthnlwHZdwhbWCc1IIBsnDw2zinhV1Brlipem8EC0ji8m71hLl1xi8BtdeFIK75K7DTqSzuJICd1EVhhCCAE8r4PK7su9cX3v5BTbfd26whCsKD5eQBcmRtu8ErtB3brykXoq-wx-IIWhIF4Xg-y7TNg3ElRTki4cXBZAZEbbDkkfuuoJdOei5Qs9t5jNFyVt2PaOnClJLdqmgZ4rd9syugOZQpbRf5iuGO62ar1vos12C_JmXGO6yeoF6qMeaGdrTps1J-9fLCk_qtD2ziJwTQGi314V0sQDtQr6gv2MWyHPoYvf1Mx6UQABJxmGhDLgR35aq4btRv8xR8SUtp6VaoMY83w-yx_nwYV9qyfdkfFM1KwDfkp61kC7o9-zhKtzvixufV-45ye3d3Sy20JGeuzB7uCE97ypiYRhBi7-wFHxDesFVyyK6JCX8UBRBSaRR0pGKZOp-9GJNLQWueDXxAipfu1STcHroe-ZVklSxTLF0FHlCjXLFw1CkCfcbmTmaWJtC8biCeZLIzTK6oHU7N2n-qqgWOiBNSvl5EVvI-CVBjubqgKtBr1KsD3iSmOdOsSDiWUJ-tV4cvPzzGsUCCGJJee5nqYMb4HWWRuHyt4r1HkCSku3mKYUufa_Xyc2D656cmPoeEmRprwtPLrNmenHmvd3IyNLea3ICD3X-kwt1XBjqUj1BzIkG0T2iBDav5nxjIwucndUZSGrel4W6vOLmtPhWsoTLKfHtKxdZ4HpRObqow3cWBbreSLwOd26DXdm8Em9hWzApSGL8j8WCOs0P5nYaH4QXFy7rEjkfSWL0oYhQ-8Uz248LwcvDH2keTTOmy-IND0peVDa7FwcyLydf2j5jApIS8qFQYCMWsxuRjcEr2yzsGjEbSd_2IwGhLizndiETgdf2_IGm0fTgy6xwmhcifqVfROtehvg7-EMzROVXCH4NvzmAmMIKzG8WJAyvw3zFOyRNBCH91wXpcysyv12SPbQu87sFyQOLM7_X8mm3Ah-a_IN-tTzSxGzfFP-jIvKEJFWvhkSa2BynmWkqGuM8M1u4K97nJs21RGAlyJ1NE1MObP3nAoHNZxw4t404__rt29UPgNsXwQzgLTADuLkVWPz2YZ0ZANhZrjYD6Hbsf9IMoPMZyGYA3a590QwAFERlBtB5DEZgpNm5_wkzgMpfIJsBAPE6M4CHHSLssNSYAYLAzTXoEUv3Y8Yk8GDsJ80ARZG7IRxYNgMUBYkwX2CNGcAKXMuBdtdDZgBge73KDKDetf8pM4DaYyCbAQDrgtoMQPdierEKzJsBgC32CjOAct_-Z8wASoeBbAYAbAs6M4Cb22IDa8wAwNZ6pRkgy_xCsWcfMAMURZjPNAMURZwqXAayGaAo0jji-3eGGcAKbF94YN43A1jYc-x7Q00UZ84ufdgMgCMv05AkM4CXp06gyQwyA4Rhmkf8M0VjBrByeoBo2AxgB_TQEAQzgF3QQ42f0HTGcTE9QDRoBogwPWC8ZAbQOQ0AM4DGxgCYAZQb_P-LZgD7uimd_rSbFP_J8f2vtx_rmxV8kZ0BA876OhzffP8LMNI0znbZOKxZgBsnsIRxVJaBeyOFX2T_AD-SqAh0EcwdhrMUcOOEkiLYWHBvpOgL5DLgh7pJMl4D4zWYmMZrYLwGxmswIozXwHgNjNfAeA2M18B4DYzXwHgNblzjNTBeA-M1MF4D4zWYEcB4DYzXwHgNjNfAeA2M18B4DYzXwHgNjNfAeA2M18B4DS4xjNfAeA2M18B4DWbQjNfgP-w1SEmPBa-Bv8BrkBXEL2A_AOQ1iHEW6-DTfy7Snc8pjhRgyGtg41DcDqj0GtieX6Szv3jAyt0i4jcJmy8eMF88YL54wHzxgPnigQvYfPGA-eIBCW2-eMB88YD54gFjBjBmAGMGMGYAYwb4_zQDsO8djBnAmAGMGcCYARaEMGYAYwYwZoD7TGMGuAQwZoAFAYwZwJgBjBnAmAGMGcCYAS40YwYwZgBjBjBmAGMGMGYAYwYwZgBjBjBmAGMGmEM1ZoBrAGMGUNGMGWAG-3_QDPBvr-DT6oiQAAA';\nimport 'src/components/Keyboard/styles.css.ts.vanilla.css?source=LnN0eWxlc19rZXlib2FyZFBvc2l0aW9uZXJfX2VueHdiNzAgewogIHotaW5kZXg6IDEwMDA7Cn0KLnN0eWxlc19rZXlib2FyZENvbnRhaW5lcl9fZW54d2I3MSB7CiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3JzLW5ldXRyYWwtd2hpdGVfXzE0YmhzNHYxNik7CiAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICBib3JkZXItcmFkaXVzOiA4cHg7CiAgcGFkZGluZzogMTBweDsKICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBnYXA6IDhweDsKICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQouc3R5bGVzX2tleWJvYXJkUm93X19lbnh3YjcyIHsKICBkaXNwbGF5OiBmbGV4OwogIGdhcDogOHB4OwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9Ci5zdHlsZXNfa2V5QnV0dG9uX19lbnh3YjczIHsKICBmb250LXNpemU6IDE2cHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIGJvcmRlcjogbm9uZTsKICBib3JkZXItcmFkaXVzOiA0cHg7CiAgd2lkdGg6IDQwcHg7CiAgaGVpZ2h0OiA0MHB4OwogIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgY29sb3I6ICMzMzM7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2U7Cn0KLnN0eWxlc19rZXlCdXR0b25fX2VueHdiNzM6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Cn0KLnN0eWxlc19rZXlCdXR0b25fX2VueHdiNzM6YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOwp9';\nexport var keyButton = 'styles_keyButton__enxwb73';\nexport var keyboardContainer = 'styles_keyboardContainer__enxwb71';\nexport var keyboardPositioner = 'styles_keyboardPositioner__enxwb70';\nexport var keyboardRow = 'styles_keyboardRow__enxwb72';"],"mappings":"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","names":["Keyboard"]}