{"version":3,"file":"main.1ccf91e007bfc3b748a6.js","mappings":"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BAAmB,CAClB,MACA,MAED,aAAc,CACb,KACA,MAED,kBAAmB,CAClB,KACA,MAED,sBAAuB,CACtB,KACA,MAED,2BAA4B,CAC3B,KACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,wBAAyB,CACxB,KACA,MAED,6BAA8B,CAC7B,KACA,MAED,mBAAoB,CACnB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,yBAA0B,CACzB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,gBAAiB,CAChB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,qBAAsB,CACrB,KACA,MAED,0BAA2B,CAC1B,KACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,aAAc,CACb,MACA,KAED,kBAAmB,CAClB,MACA,KAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,eAAgB,CACf,MACA,MAED,oBAAqB,CACpB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,2BAA4B,CAC3B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,qBAAsB,CACrB,MACA,KAED,0BAA2B,CAC1B,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,yBAA0B,CACzB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,iCAAkC,CACjC,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,mCAAoC,CACnC,MACA,MAED,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,gBAAiB,CAChB,KACA,MAED,qBAAsB,CACrB,KACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,gBAAiB,CAChB,MACA,KAED,qBAAsB,CACrB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,mBAAoB,CACnB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,oBAAqB,CACpB,MACA,KAED,yBAA0B,CACzB,MACA,KAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,gBAAiB,CAChB,MACA,KAED,qBAAsB,CACrB,MACA,KAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,mBAAoB,CACnB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,wBAAyB,CACxB,KACA,MAED,6BAA8B,CAC7B,KACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,gBAAiB,CAChB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,mBAAoB,CACnB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,wBAAyB,CACxB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,YAAa,CACZ,MACA,IAED,iBAAkB,CACjB,MACA,IAED,wBAAyB,CACxB,MACA,MAED,6BAA8B,CAC7B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,aAAc,CACb,IACA,MAED,kBAAmB,CAClB,IACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,mBAAoB,CACnB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,kBAAmB,CAClB,MACA,KAED,uBAAwB,CACvB,MACA,KAED,aAAc,CACb,IACA,MAED,kBAAmB,CAClB,IACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,uBAAwB,CACvB,MACA,KAED,4BAA6B,CAC5B,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,cAAe,CACd,MACA,MAED,mBAAoB,CACnB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,KAED,kBAAmB,CAClB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,OAGF,SAAS6f,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEhgB,EAAK8f,GAC9B,OAAOvmB,QAAQ0mB,UAAUlG,MAAK,WAC7B,IAAI1iB,EAAI,IAAI2iB,MAAM,uBAAyB8F,EAAM,KAEjD,MADAzoB,EAAE2W,KAAO,mBACH3W,CACP,IAGD,IAAI6oB,EAAMlgB,EAAI8f,GAAMhW,EAAKoW,EAAI,GAC7B,OAAO3mB,QAAQC,IAAI0mB,EAAIC,MAAM,GAAGngB,IAAI+f,EAAoB1oB,IAAI0iB,MAAK,WAChE,OAAOgG,EAAoBK,EAAEtW,EAAI,GAClC,GACD,CACA+V,EAAoBrjB,KAAO,WAAa,OAAO5G,OAAO4G,KAAKwD,EAAM,EACjE6f,EAAoB/V,GAAK,MACzB6V,EAAOU,QAAUR","sources":["webpack:///./src/Common/dialog-box.module.css?bee6","webpack:///./src/Common/DialogBox.js","webpack:///./src/Common/Icon.js","webpack:///./src/Common/IconButton.js","webpack:///./src/Common/link.module.css?df4e","webpack:///./src/Common/Link.js","webpack:///./src/Common/Modal.js","webpack:///./src/Common/hooks/use-toggle.js","webpack:///./src/Contexts/Definitions.js","webpack:///./src/Contexts/Layout.js","webpack:///./src/Dialogs/support.js","webpack:///./src/Keyboard/Behaviors/behaviorsSlice.js","webpack:///./src/Keyboard/Combos/combosSlice.js","webpack:///./src/Keyboard/Layers/layer-index-change-action.js","webpack:///./src/Keyboard/Layers/layersSlice.js","webpack:///./src/Keyboard/Macros/macrosSlice.js","webpack:///./src/Keyboard/util.js","webpack:///./src/Sources/Controls.js","webpack:///./src/Sources/Github/api.js","webpack:///./src/config.js","webpack:///./src/index.css?cfe4","webpack:///./src/App.css?d9cd","webpack:///./src/Keyboard/Context.js","webpack:///./src/Keyboard/Binding/bindingPropTypes.js","webpack:///./src/Keyboard/Combos/comboPropTypes.js","webpack:///./src/Keyboard/keymapPropTypes.js","webpack:///./src/Keyboard/Warnings/sanity-checks-layout.js","webpack:///./src/Keyboard/Warnings/sanity-checks.js","webpack:///./src/Keyboard/Keyboard.js","webpack:///./src/styles.module.css?f79c","webpack:///./src/GitHubLink.js","webpack:///./src/Dialogs/Settings.js","webpack:///./src/Dialogs/SuggestAutoLayoutTweak.js","webpack:///./src/Dialogs/KeymapBindingsUsePreprocessorMacros.js","webpack:///./src/Dialogs/KeymapParsingFailed.js","webpack:///./src/Dialogs/KeymapUsingMiryoku.js","webpack:///./src/Dialogs/MissingRootNode.js","webpack:///./src/Dialogs/ZmkNodefreeConfig.js","webpack:///./src/Sources/sources.js","webpack:///./src/Sources/styles.module.css?2b76","webpack:///./src/Sources/SourcePicker.js","webpack:///./src/Common/hooks/use-click-outside-handler.js","webpack:///./src/Sources/errors.js","webpack:///./src/Dialogs/unexpected-error.module.css?94c7","webpack:///./src/Dialogs/UnexpectedError.js","webpack:///./src/ErrorBoundary.js","webpack:///./src/Dialogs/KeymapSaveFailed.js","webpack:///./src/App.js","webpack:///./src/appReducer.js","webpack:///./src/store.js","webpack:///./src/index.js","webpack:///./src/key-units.js","webpack:///./src/keycodes.js","webpack:///./src/keymap.js","webpack:///./src/providers.js","webpack:///./src/App.css","webpack:///./src/index.css","webpack:///./src/Common/dialog-box.module.css","webpack:///./src/Common/link.module.css","webpack:///./src/Dialogs/unexpected-error.module.css","webpack:///./src/Keyboard/styles.module.css","webpack:///./src/Sources/styles.module.css","webpack:///./src/styles.module.css","webpack:///./src/Keyboard/styles.module.css?75da","webpack:///./node_modules/zmk-data/data/locales/ lazy ^\\.\\/.*$ include: \\.json$ chunkName: locales/[request]-keycodes namespace object"],"sourcesContent":["\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./dialog-box.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./dialog-box.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import styles from './dialog-box.module.css'\n\nexport default function DialogBox (props) {\n const { dismissText = 'Ok', classes = [], onDismiss, children, ...rest } = props\n\n return (\n
\n {children}\n {dismissText && (\n \n )}\n
\n )\n}\n","import PropTypes from 'prop-types'\n\nconst faCollections = {\n brands: 'fab',\n default: 'fa',\n regular: 'fa-regular',\n light: 'fa-light',\n solid: 'fas',\n round: 'far'\n}\n\nfunction Icon (props) {\n const { name, className, collection, ...iconProps } = props\n const groupClass = faCollections[collection]\n const iconClass = `fa-${name}`\n\n return (\n \n )\n}\n\nIcon.propTypes = {\n name: PropTypes.string.isRequired,\n className: PropTypes.string,\n collection: PropTypes.string\n}\n\nIcon.defaultProps = {\n collection: 'default',\n className: ''\n}\n\nexport default Icon\n","import Icon from './Icon'\n\nexport default function IconButton ({ collection, icon, text, children, onClick, ...rest }) {\n return (\n \n )\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./link.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./link.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import PropTypes from 'prop-types'\n\nimport Icon from './Icon'\nimport styles from './link.module.css'\n\nfunction Link (props) {\n const { href, children, external, showExternal, ...rest } = props\n const properties = Object.assign({ href }, rest, external && {\n rel: 'noreferrer',\n target: '_blank'\n })\n\n return (\n \n {children}\n {external && showExternal && (\n \n )}\n \n )\n}\n\nLink.propTypes = {\n href: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]).isRequired,\n external: PropTypes.bool.isRequired,\n showExternal: PropTypes.bool\n}\n\nLink.defaultProps = {\n external: false,\n showExternal: true\n}\n\nexport default Link\n","import ReactDOM from 'react-dom'\nimport { useCallback, useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nconst styles = {\n wrapper: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100vw',\n height: '100vh',\n backgroundColor: 'rgba(104, 123, 162, 0.39)',\n backdropFilter: 'blur(1px)',\n zIndex: '50',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n centerOnly: {\n background: 'transparent',\n backdropFilter: 'none',\n pointerEvents: 'none'\n },\n content: {\n display: 'block',\n pointerEvents: 'all'\n }\n}\n\nexport default function Modal ({ onDismiss, centerOnly = false, children }) {\n const content = useRef()\n const handleClick = useCallback(function (e) {\n if (onDismiss && content.current && e.target.contains(content.current)) {\n e.stopPropagation()\n onDismiss()\n }\n }, [content, onDismiss])\n\n const style = centerOnly\n ? { ...styles.wrapper, ...styles.centerOnly }\n : styles.wrapper\n\n return ReactDOM.createPortal(\n
\n
\n {children}\n
\n
,\n document.getElementById('modal-root')\n )\n}\n\nModal.propTypes = {\n onDismiss: PropTypes.func\n}\n\nexport function useModalState () {\n const [isOpen, setIsOpen] = useState(false)\n\n const open = useCallback(event => {\n event?.stopPropagation && event.stopPropagation()\n setIsOpen(true)\n }, [setIsOpen])\n\n const close = useCallback(event => {\n event?.stopPropagation && event.stopPropagation()\n setIsOpen(false)\n }, [setIsOpen])\n\n return [isOpen, open, close]\n}\n","import { useCallback, useState } from 'react'\n\nexport default function useToggle (initialState) {\n const [toggleState, setToggleState] = useState(initialState)\n const toggle = useCallback(() => setToggleState(state => !state), [setToggleState])\n const forceOn = useCallback(() => setToggleState(true), [setToggleState])\n const forceOff = useCallback(() => setToggleState(false), [setToggleState])\n return [toggleState, toggle, forceOn, forceOff]\n}\n","import cloneDeep from 'lodash/cloneDeep'\nimport filter from 'lodash/filter'\nimport keyBy from 'lodash/keyBy'\nimport { createContext, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { normalizeZmkKeycodes } from '../keycodes'\n\nexport const DefinitionsContext = createContext({\n keycodes: [],\n behaviours: [],\n behaviors: {},\n behaviorBinds: [],\n glyphs: []\n})\n\n// TODO: I bet this doesn't need to be in the app state at all\nconst selectDefinitions = state => state.definitions\n\nexport function DefinitionsContextProvider ({ children }) {\n const definitions = useSelector(selectDefinitions)\n const dispatch = useDispatch()\n\n useEffect(() => {\n (async function () {\n if (definitions !== null) {\n return\n }\n\n const [[keycodes, glyphs], behaviors] = await Promise.all([\n loadKeycodes(),\n loadBehaviourBindings()\n ])\n\n // TODO: update references to better understand the difference between\n // \"behaviors\" (e.g. hold tap) and the \"behavior bindings\" that implement\n // them (e.g. < and &mt)\n const schemas = cloneDeep(behaviors.behaviors)\n const behaviours = cloneDeep(behaviors.bindings)\n\n keycodes.indexed = keyBy(keycodes, 'code')\n behaviours.indexed = keyBy(behaviours, 'code')\n behaviours.context = {\n none: behaviours.filter(({ context }) => !context),\n macros: filter(behaviours, { context: 'macros' }),\n encoders: filter(behaviours, { context: 'encoders' })\n }\n behaviours.byContext = {\n none: keyBy(behaviours.context.none, 'code'),\n macros: keyBy(behaviours.context.macros, 'code'),\n encoders: keyBy(behaviours.context.encoders, 'code')\n }\n\n dispatch({\n type: 'DEFINITIONS_SET',\n definitions: {\n keycodes,\n behaviours,\n behaviors: schemas,\n behaviorBinds: behaviours,\n glyphs\n }\n })\n })()\n }, [definitions, dispatch])\n\n // TODO: show a spinner MAYBE\n if (!definitions) {\n return\n }\n\n return (\n \n {children}\n \n )\n}\n\nasync function loadBehaviourBindings () {\n const { behaviorSchemas, behaviorBindings } = await import('zmk-data/behaviors')\n return {\n behaviors: behaviorSchemas,\n bindings: behaviorBindings\n }\n}\n\nasync function loadKeycodes () {\n const { keycodes, keycodeGlyphs } = await import('zmk-data/keycodes')\n return [\n normalizeZmkKeycodes(keycodes),\n keycodeGlyphs\n ]\n}\n","import { createContext, useMemo } from 'react'\nimport { getWrapperDimensions, getWrapperStyle } from '../Keyboard/util'\n\nexport const LayoutContext = createContext({\n layout: [],\n bindingCount: 0,\n wrapperDimensions: {},\n wrapperStyle: {}\n})\n\nexport function LayoutContextProvider ({ layout, children }) {\n const bindingCount = useMemo(() => layout.length, [layout.length])\n const wrapperDimensions = useMemo(() => getWrapperDimensions(layout), [layout])\n const wrapperStyle = useMemo(() => getWrapperStyle(wrapperDimensions), [wrapperDimensions])\n\n const context = {\n layout,\n bindingCount,\n wrapperDimensions,\n wrapperStyle\n }\n\n return (\n \n {children}\n \n )\n}\n","import Link from '../Common/Link'\n\nexport const githubIssuesUrl = 'https://github.com/nickcoutsos/keymap-editor/issues'\nexport const githubWikiLayoutsUrl = 'https://github.com/nickcoutsos/keymap-editor/wiki/Defining-keyboard-layouts'\nexport const keymapLayoutToolsUrl = 'https://nickcoutsos.github.io/keymap-layout-tools/'\nexport const discordProfileUrl = 'https://discord.com/users/115507966555193345'\n\nexport const GitHubIssuesLink = (\n \n Keymap Editor Issues\n \n)\n\nexport const GitHubWikiLayoutsLink = (\n \n Keymap Editor Wiki: Defining keyboard layouts\n \n)\n\nexport const layoutToolsLink = (\n \n Keymap Layout Tools - Helper\n \n)\n\nexport const DiscordProfileLink = (\n \n Discord - nickcoutsos#4351\n \n)\n\nexport const GeneralHelpOfferCopy = (\n <>\n

\n If you are looking for help in getting up and running or want a better\n understanding of the issue, please feel free to reach out to me:\n

\n \n \n)\n\nexport const KeymapLayoutResources = (\n

\n For more information about how Keymap Editor layouts are defined, you can\n read {GitHubWikiLayoutsLink}, and if you need an environment to quickly test\n changes to a layout try {layoutToolsLink}.\n

\n)\n","import { createSlice } from '@reduxjs/toolkit'\nimport { layerIndexChanged, makeLayerIndexChangeReducer } from '../Layers/layer-index-change-action'\n\nexport const selectBehaviors = state => state.keyboard.keymap.behaviors\n\nconst selectNodeCompatible = node => (\n node.properties.compatible?.parsed ||\n node.properties.compatible?.raw?.replace(/\"/g, '')\n)\n\nconst selectNodePhandleArrays = (node, behaviors, schemas) => {\n const compatible = selectNodeCompatible(node)\n const schema = schemas[compatible]\n\n if (!schema) {\n return []\n }\n\n return Object.keys(schema.properties).reduce((phandleArrays, prop) => {\n const propSchema = schema.properties[prop]\n const propValues = node.properties[prop]\n if (propSchema.type === 'phandle-array' && propValues) {\n phandleArrays.push(propValues.parsed)\n }\n\n return phandleArrays\n }, [])\n}\n\nconst behaviorsSlice = createSlice({\n name: 'behaviors',\n initialState: [],\n reducers: {\n addBehavior (state, action) {\n state.push(action.payload.behavior)\n },\n updateBehavior (state, action) {\n state[action.payload.behaviorIndex] = action.payload.behavior\n },\n deleteBehavior (state, action) {\n state.splice(action.payload.behaviorIndex, 1)\n }\n },\n extraReducers: builder => {\n builder.addCase(\n layerIndexChanged,\n makeLayerIndexChangeReducer(\n selectNodePhandleArrays\n )\n )\n }\n})\n\nexport const {\n addBehavior,\n updateBehavior,\n deleteBehavior\n} = behaviorsSlice.actions\n\nexport default behaviorsSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\nimport { layerIndexChanged, makeLayerIndexChangeReducer } from '../Layers/layer-index-change-action'\n\nexport const selectCombos = state => state.keyboard.keymap.combos\n\nconst combosSlice = createSlice({\n name: 'combos',\n initialState: [],\n reducers: {\n updateComboBinding (state, action) {\n state[action.payload.comboIndex].properties.bindings = { parsed: action.payload.bindings }\n },\n updateComboKeypositions (state, action) {\n state[action.payload.comboIndex].properties['key-positions'] = {\n parsed: action.payload.keyPositions\n }\n },\n createCombo (state) {\n state.push({\n name: 'new_combo',\n labels: [],\n properties: {\n bindings: {\n parsed: [{ value: '&trans', params: [] }]\n },\n 'key-positions': {\n parsed: []\n }\n }\n })\n },\n renameCombo (state, action) {\n state[action.payload.index].name = action.payload.name\n },\n deleteCombo (state, action) {\n state.splice(action.payload.index, 1)\n },\n customizeCombo (state, action) {\n const { index, combo } = action.payload\n state[index] = combo\n }\n },\n extraReducers: builder => {\n const comboBindingsReducer = makeLayerIndexChangeReducer()\n\n builder.addCase(\n layerIndexChanged,\n function reducer (state, action) {\n const { positionMapping } = action.payload\n comboBindingsReducer(state, action)\n for (const { properties } of state) {\n if (!properties.layers?.parsed?.length) {\n continue\n }\n\n properties.layers.parsed = properties.layers.parsed.reduce((layers, index) => {\n const newIndex = positionMapping[index]\n if (newIndex !== null) {\n layers.push(newIndex)\n }\n\n return layers\n }, [])\n }\n }\n )\n }\n})\n\nexport const {\n updateComboBinding,\n updateComboKeypositions,\n createCombo,\n renameCombo,\n deleteCombo,\n customizeCombo\n} = combosSlice.actions\n\nexport default combosSlice.reducer\n","import get from 'lodash/get'\nimport { createAction } from '@reduxjs/toolkit'\n\nimport { getBindingSlots } from '../../keymap'\n\nexport function selectLayerParamsFromBinding (binding, behaviorParameters) {\n const behaviorParams = getBindingSlots(binding, behaviorParameters)\n\n return behaviorParams.reduce((layerParams, param, i) => {\n if (param === 'layer') {\n layerParams.push(binding.params[i])\n }\n\n return layerParams\n }, [])\n}\n\nexport const layerIndexChanged = createAction(\n 'layers/indexChanged',\n function prepare (currentIndex, targetIndex, layers, searchContext, definitionsContext) {\n const positionMapping = createLayerIndexMapping(currentIndex, targetIndex, layers)\n const { sources, behaviorParameters } = searchContext\n const { behaviors: behaviorSchemas } = definitionsContext\n\n return {\n payload: {\n currentIndex,\n targetIndex,\n sources,\n behaviorSchemas,\n behaviorParameters,\n positionMapping\n }\n }\n }\n)\n\nconst defaultSelectPhandleArrays = node => [node.properties.bindings.parsed]\n\n/**\n * Create a reducer to update layer index binding cells after a layer shift.\n * @param {Function} selectPhandleArrays - callback to return parsed phandle-array values from any relevant property in a node\n * @returns {Function} reducer\n */\nexport function makeLayerIndexChangeReducer (selectPhandleArrays = defaultSelectPhandleArrays) {\n return function reducer (state, action) {\n const { sources, behaviorSchemas, behaviorParameters, positionMapping } = action.payload\n const { behaviours: behaviors, defines } = sources\n const layerParamsIterator = makeLayerParamsIterator(\n state, behaviors, behaviorSchemas, behaviorParameters, selectPhandleArrays\n )\n\n for (const param of layerParamsIterator) {\n let selectedIndex = get(defines, param.value, param.value)\n if (!Number.isNaN(Number(selectedIndex))) {\n selectedIndex = Number(selectedIndex)\n }\n\n param.value = positionMapping[selectedIndex]?.toString()\n if (param.value === undefined) {\n param.value = '0'\n param._isPlaceholder = true\n }\n }\n }\n}\n\nfunction createLayerIndexMapping (currentIndex, targetIndex, layers) {\n const layerIndices = [...layers.keys()]\n\n // Deleted layer means references to currentIndex are nulled,\n // and referencs > currentIndex are decremented\n if (targetIndex === null) {\n return layerIndices.map(i => {\n if (i === currentIndex) {\n return null\n }\n\n return i > currentIndex ? i - 1 : i\n })\n }\n\n return layerIndices.map(i => {\n const sameIndex = i === currentIndex\n const bothBefore = i > currentIndex && i > targetIndex\n const bothAfter = i < currentIndex && i < targetIndex\n const betweenOldAndNew = currentIndex < i && i < targetIndex\n\n if (sameIndex) {\n // Normally the \"target\" is another layer whose position is being taken,\n // but in the case of targetting the end of the list this isn't a valid\n // array index.\n if (targetIndex === layers.length) {\n return targetIndex - 1\n }\n\n return targetIndex\n } else if (bothBefore || bothAfter) {\n return i\n } else if (betweenOldAndNew) {\n return i - 1\n }\n\n return i + 1\n })\n}\n\n/**\n * Create iterator for all layer-related binding cells in a state slice.\n * This reducer is used with state slices that represent a collection of nodes\n * each of which have one or more properties representing phandle arrays which\n * may have parameters binding to layer indices. This iterator abstracts that\n * so we can just loop through layer parameters.\n * @param {Array} state\n * @param {*} behaviors\n * @param {*} behaviorSchemas\n * @param {Function} selectPhandleArrays\n */\nfunction * makeLayerParamsIterator (state, behaviors, behaviorSchemas, behaviorParameters, selectPhandleArrays) {\n for (const node of state) {\n for (const bindings of selectPhandleArrays(node, behaviors, behaviorSchemas)) {\n for (const binding of bindings) {\n for (const param of selectLayerParamsFromBinding(binding, behaviorParameters)) {\n yield param\n }\n }\n }\n }\n}\n","import times from 'lodash/times'\nimport { createSlice } from '@reduxjs/toolkit'\nimport { layerIndexChanged, makeLayerIndexChangeReducer } from './layer-index-change-action'\n\nconst DEFAULT_BIND_BEHAVIOUR = '&trans'\nconst createEmptyBinding = (value = DEFAULT_BIND_BEHAVIOUR) => ({\n value, params: []\n})\n\nexport const selectLayers = state => state.keyboard.keymap.layers\n\nconst layersSlice = createSlice({\n name: 'layers',\n initialState: [],\n reducers: {\n createLayer (state, action) {\n state.push({\n name: `layer_${state.length}`,\n labels: [],\n properties: {\n bindings: {\n parsed: times(action.payload.bindingCount, () => createEmptyBinding())\n }\n }\n })\n },\n updateLayerMetadata (state, action) {\n const { layerIndex, name, label } = action.payload\n if (name) {\n state[layerIndex].name = name\n }\n if (label !== undefined) {\n state[layerIndex].properties.label = {\n parsed: label\n }\n }\n },\n renameLayer (state, action) {\n state[action.payload.index].name = action.payload.name\n },\n repositionLayer (state, action) {\n const { currentIndex, targetIndex } = action.payload\n if (currentIndex === targetIndex) {\n return\n }\n\n const layer = state[currentIndex]\n\n // moving a layer up means shifting other layers down\n const replacementIndex = targetIndex > currentIndex\n ? targetIndex - 1\n : targetIndex\n\n state.splice(currentIndex, 1)\n state.splice(replacementIndex, 0, layer)\n },\n deleteLayer (state, action) {\n state.splice(action.payload.index, 1)\n },\n updateKeyBinding (state, action) {\n state[action.payload.layerIndex].properties.bindings.parsed[action.payload.bindIndex] = action.payload.binding\n },\n updateSensorBindings (state, action) {\n const { layerIndex, sensorIndex, bindings: binding } = action.payload\n const { properties } = state[layerIndex]\n properties['sensor-bindings'] = properties['sensor-bindings'] || { parsed: [] }\n const bindings = properties['sensor-bindings'].parsed\n\n bindings[sensorIndex] = binding\n\n // Ensure that every sensor binding up to this one has SOME value defined\n // so that we don't barf when attempting to serialize these bindings.\n // TODO: default to `&trans` once ZMK allows it in sensor bindings.\n for (let i = 0; i < sensorIndex; i++) {\n bindings[i] = (\n bindings[i] || {\n value: '&inc_dec_kp',\n params: [\n { value: 0, _isPlaceholder: true, params: [] },\n { value: 0, _isPlaceholder: true, params: [] }\n ]\n }\n )\n }\n\n const undefinedStart = bindings.indexOf(undefined)\n if (undefinedStart !== -1) {\n bindings.splice(undefinedStart, bindings.length - undefinedStart)\n }\n },\n rebindTransparentToKeyPress (state, action) {\n for (const binding of state[action.payload.layerIndex].properties.bindings.parsed) {\n if (binding.value === '&trans') {\n binding.value = '&kp'\n binding.params = []\n }\n }\n },\n rebindTransparentToNone (state, action) {\n for (const binding of state[action.payload.layerIndex].properties.bindings.parsed) {\n if (binding.value === '&trans') {\n binding.value = '&none'\n binding.params = []\n }\n }\n },\n rebindNoneToKeypress (state, action) {\n for (const binding of state[action.payload.layerIndex].properties.bindings.parsed) {\n if (binding.value === '&none') {\n binding.value = '&kp'\n binding.params = []\n }\n }\n },\n rebindNoneToTransparent (state, action) {\n for (const binding of state[action.payload.layerIndex].properties.bindings.parsed) {\n if (binding.value === '&none') {\n binding.value = '&trans'\n binding.params = []\n }\n }\n },\n rebindEmptyKeypressToTransparent (state, action) {\n for (const binding of state[action.payload.layerIndex].properties.bindings.parsed) {\n if (binding.value === '&kp' && !binding.params[0]?.value) {\n binding.value = '&trans'\n binding.params = []\n }\n }\n },\n rebindEmptyKeypressToNone (state, action) {\n for (const binding of state[action.payload.layerIndex].properties.bindings.parsed) {\n if (binding.value === '&kp' && !binding.params[0]?.value) {\n binding.value = '&none'\n binding.params = []\n }\n }\n }\n },\n extraReducers: builder => {\n builder.addCase(\n layerIndexChanged,\n makeLayerIndexChangeReducer(node => [\n node.properties.bindings.parsed,\n node.properties['sensor-bindings']?.parsed || []\n ])\n )\n }\n})\n\nexport const {\n createLayer,\n renameLayer,\n repositionLayer,\n deleteLayer,\n updateLayerMetadata,\n updateKeyBinding,\n updateSensorBindings,\n rebindTransparentToKeyPress,\n rebindTransparentToNone,\n rebindNoneToKeypress,\n rebindNoneToTransparent,\n rebindEmptyKeypressToTransparent,\n rebindEmptyKeypressToNone\n} = layersSlice.actions\n\nexport default layersSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\nimport { layerIndexChanged, makeLayerIndexChangeReducer } from '../Layers/layer-index-change-action'\n\nexport const selectMacros = state => state.keyboard.keymap.macros\n\nconst macrosSlice = createSlice({\n name: 'macros',\n initialState: [],\n reducers: {\n addMacro (state, action) {\n state.push(action.payload)\n },\n deleteMacro (state, action) {\n state.splice(action.payload.index, 1)\n },\n updateMacroBindings (state, action) {\n const { index, bindings } = action.payload\n state[index].properties.bindings.parsed = bindings\n },\n customizeMacroOptions (state, action) {\n Object.assign(state[action.payload.macroIndex], action.payload.options)\n }\n },\n extraReducers: builder => {\n builder.addCase(\n layerIndexChanged,\n makeLayerIndexChangeReducer()\n )\n }\n})\n\nexport const {\n addMacro,\n deleteMacro,\n updateMacroBindings,\n customizeMacroOptions\n} = macrosSlice.actions\n\nexport default macrosSlice.reducer\n","import { transformKeyPolygon, getKeyBoundingBox } from '../key-units'\n\nexport function getLayoutPolygons (layout, { scale = 1 }) {\n return layout.map(key => transformKeyPolygon(\n { x: key.x, y: key.y },\n { u: key.u || key.w || 1, h: key.h || 1 },\n { x: key.rx, y: key.ry, a: key.r }\n ))\n}\n\nexport function getWrapperDimensions (layout) {\n return layout.map(key => getKeyBoundingBox(\n { x: key.x, y: key.y },\n { u: key.u || key.w || 1, h: key.h || 1 },\n { x: key.rx, y: key.ry, a: key.r }\n )).reduce(({ x, y }, { max }) => ({\n x: Math.max(x, max.x),\n y: Math.max(y, max.y)\n }), { x: 0, y: 0 })\n}\n\nexport function getWrapperStyle (layoutOrBBox, { scale = 1, overrides = {} } = {}) {\n const bbox = Array.isArray(layoutOrBBox)\n ? getWrapperDimensions(layoutOrBBox)\n : layoutOrBBox\n\n return {\n width: `${bbox.x * scale}px`,\n height: `${bbox.y * scale}px`,\n margin: '0 auto',\n padding: '0 40px 40px',\n ...overrides\n }\n}\n","import ReactSelect, { components } from 'react-select'\nimport { useSelector } from 'react-redux'\n\nexport function Control ({ style = {}, children }) {\n // based on react-select's control height, which should come from a theme instead\n const baseStyle = {\n height: '38px',\n lineHeight: '38px'\n }\n\n return (\n
\n {children}\n
\n )\n}\n\nexport function Button ({ children, style = {}, ...rest }) {\n return (\n \n \n \n )\n}\n\nconst darkModePreference = window.matchMedia('(prefers-color-scheme: dark)')\nconst invertedThemeColors = [0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90].reduce((colors, i) => {\n colors[`neutral${i}`] = `hsl(210, 33%, ${i + 15}%)`\n return colors\n}, {})\n\ninvertedThemeColors.primary25 = 'hsl(214, 100%, 40%)'\n\nexport function Select ({ label, children: extraChildren, ...rest }) {\n const { theme } = useSelector(state => state)\n const isDark = theme === 'dark' || (theme === 'system' && darkModePreference.matches)\n\n const MenuList = ({ children, ...props }) => (\n \n {children}\n {extraChildren}\n \n )\n\n return (\n
\n \n ({\n ...baseStyles,\n display: 'inline-block'\n }),\n menu: (baseStyles) => ({\n ...baseStyles,\n width: 'max-content',\n zIndex: 10\n })\n }}\n components={{ MenuList }}\n theme={theme => ({\n ...theme,\n colors: {\n ...theme.colors,\n ...(isDark ? invertedThemeColors : {})\n }\n })}\n isSearchable={false}\n {...rest}\n />\n
\n )\n}\n","import axios from 'axios'\nimport EventEmitter from 'eventemitter3'\n\nimport * as config from '../../config'\n\nconst websocketUrl = `${config.apiBaseUrl.replace('http', 'ws')}/github/events`\n\nexport class API extends EventEmitter {\n token = null\n initializing = false\n installations = null\n repositories = null\n repoInstallationMap = null\n features = null\n socket = null\n\n async _request (options) {\n if (typeof options === 'string') {\n options = {\n url: options\n }\n }\n\n if (options.url.startsWith('/')) {\n options.url = `${config.apiBaseUrl}${options.url}`\n }\n\n options.headers = Object.assign({}, options.headers)\n if (this.token && !options.headers.Authorization) {\n options.headers.Authorization = `Bearer ${this.token}`\n }\n\n try {\n return await axios(options)\n } catch (err) {\n if (err.response?.status === 401) {\n console.error('Authentication failed.')\n this.emit('authentication-failed', err.response)\n }\n\n throw err\n }\n }\n\n init () {\n if (this.initializing) {\n return this.initializing\n }\n\n this.initializing = (async () => {\n this.initEvents()\n\n const installationUrl = `${config.apiBaseUrl}/github/installation`\n const params = new URLSearchParams(window.location.search)\n\n // I don't really understand the callback parameters but as long as\n // *something* installation related has changed then its worth refreshing\n // the authentication.\n if (params.get('setup_action') && params.get('installation_id')) {\n this.beginLoginFlow()\n }\n\n if (params.get('blocked')) {\n setTimeout(() => this.emit('blocked'))\n return\n }\n\n const param = params.get('token')\n if (!window.localStorage.auth_token && param) {\n window.history.replaceState({}, null, window.location.pathname)\n window.localStorage.auth_token = param\n }\n\n if (window.localStorage.auth_token) {\n this.token = window.localStorage.auth_token\n const { data } = await this._request(installationUrl)\n const suspended = data.installations.filter(installation => installation.suspended_at)\n\n if (data.installations.length === suspended.length) {\n console.warn('No GitHub app installation found for authenticated user.')\n this.emit('app-not-installed')\n }\n\n this.username = data.username\n this.installations = data.installations\n this.repositories = data.repositories\n this.repoInstallationMap = data.repoInstallationMap\n this.emit('authenticated')\n }\n })()\n\n return this.initializing\n }\n\n initEvents () {\n const bufferedMessages = []\n const isOpen = () => {\n return this.socket.readyState === window.WebSocket.OPEN\n }\n\n const send = (message) => {\n if (isOpen()) {\n this.socket.send(message)\n return\n }\n\n bufferedMessages.push(message)\n console.log(\n 'buffering websocket message',\n { readyState: this.socket.readyState },\n message\n )\n }\n\n const flush = () => {\n let message\n while ((message = bufferedMessages.shift())) {\n console.log('sending buffered websocket message', message)\n this.socket.send(message)\n }\n }\n\n this.socket = new window.WebSocket(websocketUrl)\n this.socket.onopen = () => {\n console.log(new Date(), 'connected to console')\n flush()\n setInterval(() => {\n send(JSON.stringify({ message: 'ping' }))\n }, 20000)\n }\n\n this.socket.onclose = () => console.log(new Date(), 'disconnected from server')\n this.socket.onerror = err => console.error(new Date(), err)\n this.socket.onmessage = event => {\n const message = JSON.parse(event.data)\n if (message.event === 'workflow_run') {\n this.emit('build-update', message.workflow_run)\n }\n }\n\n this.on('authenticated', () => {\n if (!this.installations?.length) {\n return\n }\n\n this.fetchAvailableFeatures()\n\n send(JSON.stringify({\n message: 'authorize',\n data: this.token\n }))\n })\n }\n\n beginLoginFlow () {\n window.localStorage.removeItem('auth_token')\n window.location.href = `${config.apiBaseUrl}/github/authorize`\n }\n\n beginInstallAppFlow () {\n window.location.href = `https://github.com/apps/${config.githubAppName}/installations/new`\n }\n\n manageInstallationRepos (installationId) {\n const installation = this.installations.find(installation => installation.id === installationId)\n window.location.href = installation.html_url\n }\n\n isGitHubAuthorized () {\n return !!this.token\n }\n\n isAppSuspendedForRepoSelection () {\n return (\n this.installations?.length > 0 &&\n this.installations?.every(installation => installation.suspended_at) &&\n this.installations?.some(installation => installation.repository_selection === 'all')\n )\n }\n\n isAppInstalled () {\n return this.installations?.length && this.repositories?.length\n }\n\n async fetchRepoBranches (repo) {\n const installation = encodeURIComponent(this.repoInstallationMap[repo.full_name])\n const repository = encodeURIComponent(repo.full_name)\n const { data } = await this._request(\n `/github/installation/${installation}/${repository}/branches`\n )\n\n return data\n }\n\n async fetchBranchKeyboards (repo, branch) {\n const installation = encodeURIComponent(this.repoInstallationMap[repo.full_name])\n const repository = encodeURIComponent(repo.full_name)\n const { data } = await this._request(\n `/github/installation/${installation}/${repository}/keyboards/${branch}`\n )\n\n return data\n }\n\n async fetchLayoutAndKeymap (repo, branch, { keyboard } = {}) {\n const installation = encodeURIComponent(this.repoInstallationMap[repo])\n const repository = encodeURIComponent(repo)\n const url = new URL(`${config.apiBaseUrl}/github/keyboard-files/${installation}/${repository}`)\n const query = new URLSearchParams()\n\n if (branch) {\n query.set('branch', branch)\n }\n if (keyboard) {\n query.set('keyboard', keyboard)\n }\n\n url.search = query.toString()\n\n try {\n const { data } = await this._request(url.toString())\n const { info: { layouts }, keymap } = data\n const defaultLayout = Object.keys(data.info.layouts)[0]\n const preferredLayout = keymap.chosen['zmk,matrix_transform']\n ? keymap.chosen['zmk,matrix_transform'].replace(/^&/, '')\n : null\n\n const layoutMetadata = (\n layouts[preferredLayout] ||\n layouts[defaultLayout]\n )\n const layout = layoutMetadata.layout\n\n return {\n layoutMetadata,\n layout,\n keymap,\n keyboards: data.keyboards,\n default: data.defaultKeymap,\n sensors: data.sensors\n }\n } catch (err) {\n if (err.response?.status === 400) {\n console.error('Failed to load keymap and layout from github', err.response.data)\n this.emit('repo-validation-error', err.response.data)\n } else if (err.response?.status === 500 && err.response.data.name === 'LayoutGenerationError') {\n this.emit('layout-generation-failed', err.response.data)\n }\n\n throw err\n }\n }\n\n async fetchAvailableFeatures () {\n if (!this.isGitHubAuthorized()) {\n return { betaFeatures: [] }\n }\n\n if (!this.features) {\n this.features = this._request(`${config.apiBaseUrl}/github/features`)\n }\n\n const { data } = await this.features\n return data\n }\n\n async fetchBuildStatus (repo, branch) {\n const installation = encodeURIComponent(this.repoInstallationMap[repo])\n const repository = encodeURIComponent(repo)\n const url = new URL(`${config.apiBaseUrl}/github/latest-run/${installation}/${repository}/${encodeURIComponent(branch)}`)\n\n const { data } = await this._request(url.toString())\n return data\n }\n\n commitChanges (repo, branch, layout, keymap, options = {}) {\n const {\n message = null,\n experimentalSettings = {},\n keyboard\n } = options\n const installation = encodeURIComponent(this.repoInstallationMap[repo])\n const repository = encodeURIComponent(repo)\n const url = new URL(`${config.apiBaseUrl}/github/keyboard-files/${installation}/${repository}/${encodeURIComponent(branch)}`)\n const { enableBehaviorEditing = false } = experimentalSettings\n const query = new URLSearchParams({\n enableBehaviorEditing\n })\n\n if (keyboard) {\n query.set('keyboard', keyboard)\n }\n\n url.search = query.toString()\n\n return this._request({\n url: url.toString(),\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n data: { keyboard, keymap, message }\n })\n }\n}\n\nconst api = new API()\nexport default api\n","function parseBoolean (val) {\n return val && ['1', 'on', 'yes', 'true'].includes(val.toString().toLowerCase())\n}\n\nexport const apiBaseUrl = process.env.API_BASE_URL\nexport const appBaseUrl = process.env.APP_BASE_URL\nexport const githubAppName = process.env.GITHUB_APP_NAME\nexport const enableGitHub = parseBoolean(process.env.ENABLE_GITHUB)\nexport const enableLocal = parseBoolean(process.env.ENABLE_LOCAL)\nexport const enableDemo = parseBoolean(process.env.ENABLE_DEMO)\nexport const enableClipboard = parseBoolean(process.env.ENABLE_CLIPBOARD)\nexport const enableFileSystem = parseBoolean(process.env.ENABLE_FILESYSTEM)\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./App.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./App.css\";\n export default content && content.locals ? content.locals : undefined;\n","import cloneDeep from 'lodash/cloneDeep'\nimport filter from 'lodash/filter'\nimport get from 'lodash/get'\nimport isEmpty from 'lodash/isEmpty'\nimport keyBy from 'lodash/keyBy'\nimport { useContext, useEffect, useMemo, useState } from 'react'\n\nimport {\n behaviorOverlays,\n mergeBehaviorOverlays\n} from 'zmk-data/behaviors'\nimport localeCatalog from 'zmk-data/data/locales/catalog.json'\n\nimport { DefinitionsContext } from '../Contexts/Definitions'\nimport { SearchContext, SettingsContext } from '../providers'\nimport { getMergedGlyphs, normalizeZmkKeycodes } from '../keycodes'\nimport { resolveBehaviorParams } from 'zmk-data/parameters'\n\nfunction useLocaleDefinitions (keymap) {\n const [loadedLocales, setLoadedLocales] = useState([])\n const locales = useMemo(() => {\n return keymap.headers.reduce((acc, header) => {\n if (header in localeCatalog) {\n acc.push(localeCatalog[header])\n }\n return acc\n }, [])\n }, [keymap.headers])\n\n useEffect(() => {\n (async function loadLocales () {\n const loaded = []\n for (const locale of locales) {\n // https://stackoverflow.com/a/62012224\n const data = await import(\n /* webpackInclude: /\\.json$/ */\n /* webpackMode: \"lazy\" */\n /* webpackChunkName: \"locales/[request]-keycodes\" */\n `zmk-data/data/locales/${locale.filename}`\n )\n loaded.push(...normalizeZmkKeycodes(data.keys))\n }\n\n setLoadedLocales(loaded)\n })()\n }, [locales])\n\n return loadedLocales\n}\n\nfunction Context ({ children, ...props }) {\n const { keymap } = props\n const { keycodes, behaviours, glyphs } = useContext(DefinitionsContext)\n const { settings } = useContext(SettingsContext)\n const localeKeycodes = useLocaleDefinitions(keymap)\n\n const mergedGlyphs = useMemo(() => {\n const isMac = window.navigator.platform.startsWith('Mac')\n const isWin = window.navigator.platform.startsWith('Win')\n const platform = (isMac && 'mac') || (isWin && 'win')\n\n return getMergedGlyphs(glyphs, {\n unicode: get(settings, 'unicodeGlyphs', true),\n platform: get(settings, 'platformGlyphs', 'auto') !== 'auto'\n ? settings.platformGlyphs\n : platform\n })\n }, [glyphs, settings])\n\n const extendedBehaviours = useMemo(() => {\n const customBehaviors = keymap.behaviors.map(behavior => {\n behavior = cloneDeep(behavior)\n behavior.code = `&${behavior.labels[0]}`\n behavior.compatible = behavior.properties.compatible.parsed\n return behavior\n })\n mergeBehaviorOverlays(customBehaviors, behaviorOverlays)\n const fullList = [\n ...behaviours.map(behavior => ({\n ...behavior,\n description: behavior.description || behavior.schema?.description\n })),\n ...(customBehaviors || []).map(behavior => ({\n code: `&${behavior.labels[0]}`,\n bind: `&${behavior.labels[0]}`,\n name: behavior.name,\n displayName: behavior.properties.label?.raw || behavior.name,\n description: `Custom behavior: ${behavior.properties.label?.raw || behavior.name}`,\n context: behavior.context\n })),\n ...keymap.macros.map(macro => ({\n code: `&${macro.labels[0]}`,\n name: macro.name,\n description: `Custom macro ${macro.properties.label?.raw || macro.name}`\n }))\n ]\n\n // TODO: at this point we're just duplicating work that was done at a higher\n // level. It still needs to happen here because of the extended list of\n // keyboard-specific behaviours, so the App can just pass the list without\n // doing its own indexing.\n fullList.indexed = keyBy(fullList, 'code')\n fullList.context = {\n none: fullList.filter(({ context }) => !context),\n macros: filter(fullList, { context: 'macros' }),\n encoders: filter(fullList, { context: 'encoders' })\n }\n fullList.byContext = {\n none: keyBy(fullList.context.none, 'code'),\n macros: keyBy(fullList.context.macros, 'code'),\n encoders: keyBy(fullList.context.encoders, 'code')\n }\n\n return fullList\n }, [behaviours, keymap.behaviors, keymap.macros])\n\n const behaviorParameters = useMemo(() => {\n return resolveBehaviorParams([\n ...behaviours,\n ...keymap.behaviors,\n ...keymap.macros\n ])\n }, [behaviours, keymap.behaviors, keymap.macros])\n\n const availableLayers = useMemo(() => isEmpty(keymap)\n ? []\n : (\n keymap.layers.map((layer, i) => ({\n code: i,\n description: layer.name || `Layer ${i}`\n }))\n ), [keymap])\n\n const keycodesList = useMemo(() => {\n return [\n ...keycodes.map(keycode => cloneDeep(keycode)),\n ...localeKeycodes.map(keycode => cloneDeep(keycode))\n ]\n }, [keycodes, localeKeycodes])\n\n const keycodesIndexed = useMemo(() => {\n const indexed = keyBy(keycodesList, 'code')\n for (const name in mergedGlyphs) {\n const glyph = mergedGlyphs[name]\n const keycode = indexed[name]\n for (const alias of keycode.aliases) {\n indexed[alias].symbol = glyph.symbol || indexed[alias].symbol\n indexed[alias].faIcon = glyph.faIcon || indexed[alias].faIcon\n }\n }\n\n // last minute transform, the following keys are all implicitly shifted\n // TODO: don't do this here\n const shiftedKeys = [\n 'EXCL',\n 'AT',\n 'HASH',\n 'DLLR',\n 'PRCNT',\n 'CARET',\n 'AMPS',\n 'STAR',\n 'UNDER',\n 'PLUS',\n 'PIPE',\n 'TILDE2',\n 'COLON',\n 'TILDE',\n 'LT',\n 'QMARK',\n 'CLEAR2',\n 'PIPE2',\n 'LPAR',\n 'RPAR',\n 'LBRC',\n 'RBRC',\n 'DQT',\n 'GT'\n ]\n\n for (const key of shiftedKeys) {\n indexed[key].modifiers = ['LS']\n }\n\n return indexed\n }, [keycodesList, mergedGlyphs])\n\n // Extend ZMK definitions (keycodes and behaviours) with additional\n // definitions specific to this keyboard. This includes a list of layers for\n // layer-related behaviours and in the future can include custom behaviours\n // defined in the keymap and potentially preprocessor definitions for psuedo\n // layer names or aliased key codes.\n const sources = useMemo(() => ({\n code: keycodesIndexed,\n behaviours: extendedBehaviours.indexed,\n behavioursByContext: extendedBehaviours.byContext,\n layer: keyBy(availableLayers, 'code'),\n defines: keymap.defines\n }), [keycodesIndexed, extendedBehaviours, availableLayers, keymap.defines])\n\n const searchTargets = useMemo(() => {\n return {\n behaviour: extendedBehaviours,\n code: keycodesList\n }\n }, [extendedBehaviours, keycodesList])\n\n const getSearchTargets = useMemo(() => function (param, behaviour, context = 'none') {\n // Special case for behaviour commands which can dynamically add another\n // parameter that isn't defined at the root level of the behaviour.\n // Currently this is just `&bt BT_SEL` and is only represented as an enum.\n if (param.enum) {\n return param.enum.map(option => (\n typeof option === 'object'\n ? option\n : { code: option }\n ))\n }\n\n if (param.raw) {\n return []\n }\n\n if (!searchTargets[param]) {\n console.error('cannot find target for', param)\n }\n\n if (param === 'behaviour') {\n return searchTargets.behaviour.context[context]\n }\n\n return searchTargets[param]\n }, [searchTargets])\n\n const identifiers = useMemo(() => {\n return [\n ...Object.keys(keycodesIndexed),\n ...Object.keys(keymap.defines || {})\n ]\n }, [keycodesIndexed, keymap.defines])\n\n return (\n \n {children}\n \n )\n}\n\nexport default Context\n","import PropTypes from 'prop-types'\n\nconst bindShape = {}\n\nexport const value = PropTypes.string.isRequired\nexport const params = PropTypes.arrayOf(PropTypes.shape(bindShape))\n\nbindShape.value = value\nbindShape.params = params\n\nexport const binding = PropTypes.shape(bindShape)\n","import PropTypes from 'prop-types'\nimport { binding } from '../Binding/bindingPropTypes'\n\nexport const combo = PropTypes.shape({\n index: PropTypes.number,\n name: PropTypes.string,\n properties: PropTypes.shape({\n bindings: PropTypes.shape({\n parsed: PropTypes.arrayOf(binding).isRequired\n }).isRequired,\n 'key-positions': PropTypes.shape({\n parsed: PropTypes.arrayOf(PropTypes.number).isRequired\n }).isRequired\n })\n})\n","import PropTypes from 'prop-types'\nimport { binding } from './Binding/bindingPropTypes'\nimport { combo } from './Combos/comboPropTypes'\n\nexport const layer = PropTypes.shape({\n index: PropTypes.number,\n name: PropTypes.string,\n properties: PropTypes.shape({\n bindings: PropTypes.shape({\n parsed: PropTypes.arrayOf(binding).isRequired\n }).isRequired,\n 'sensor-bindings': PropTypes.shape({\n parsed: PropTypes.arrayOf(binding).isRequired\n })\n })\n})\n\nexport const keymap = PropTypes.shape({\n layers: PropTypes.arrayOf(layer).isRequired,\n combos: PropTypes.arrayOf(combo)\n})\n","\nexport function sanityCheckLayout (layout) {\n return {\n layoutMissingPositions: sanityCheckPosiitions(layout)\n // overlappedPositions: sanityCheckOverlappingPositions(layout),\n // unorderedRows: sanityCheckRowOrdering(layout),\n // undereredColumns: sanityCheckColumnOrdering(layout)\n }\n}\n\nfunction sanityCheckPosiitions (layout) {\n const noKeyHasPosition = layout.every(key => (\n key.row === undefined &&\n key.col === undefined\n ))\n\n return noKeyHasPosition\n ? ['Layout in info.json has no row/col definitions. Generated keymap files will not be nicely formatted.']\n : []\n}\n\nfunction sanityCheckOverlappingPositions (layout) {\n const errors = []\n const keysByPosition = layout.reduce((acc, key, i) => {\n const { row, col } = key\n const position = `(${row},${col})`\n\n if (row !== undefined && col !== undefined) {\n acc[position] = [...(acc[position] || []), i]\n }\n\n return acc\n }, {})\n\n for (const group of Object.values(keysByPosition)) {\n if (group.length <= 1) {\n continue\n }\n\n const { row, col } = layout[group[0]]\n for (const index of group) {\n errors.push({\n location: `Layout JSON [${index}]`,\n position: { row, col }\n })\n }\n }\n\n return errors\n}\n\nfunction sanityCheckRowOrdering (layout) {\n let currentRow = -Infinity\n const errors = []\n\n for (const index of layout.keys()) {\n const { row } = layout[index]\n if (row === undefined) {\n continue\n }\n\n if (row < currentRow) {\n errors.push({ location: `Layout JSON [${index}]` })\n } else {\n currentRow = row\n }\n }\n\n return errors\n}\n\nfunction sanityCheckColumnOrdering (layout) {\n let currentRow = 0\n let currentCol = -Infinity\n const errors = []\n\n for (const index of layout.keys()) {\n const { row, col } = layout[index]\n if (row === undefined || col === undefined) {\n continue\n }\n\n if (currentRow !== row) {\n currentRow = row\n currentCol = -Infinity\n }\n\n if (col < currentCol) {\n errors.push({ location: `Layout JSON [${index}]` })\n } else {\n currentCol = col\n }\n }\n\n return errors\n}\n","import groupBy from 'lodash/groupBy'\n\nimport { sanityCheckLayout } from './sanity-checks-layout'\nimport reservedIdentifiers from 'zmk-data/data/extracted-data/zmk-reserved-identifiers.json'\n\nconst selectName = item => item.name\nconst selectBind = item => item.labels[0]\nconst selectLabel = item => item.properties.label?.parsed\n\nexport function sanityCheck (keymap, layout) {\n return {\n nodeNames: sanityCheckNodeNames(keymap),\n nodeLabels: sanityCheckNodeLabels(keymap),\n nodeReferences: sanityCheckNodeReferences(keymap),\n deprecations: sanityCheckDeprecations(keymap),\n ...sanityCheckLayout(layout)\n }\n}\n\nfunction getDuplicatesBy (collection, key) {\n const itemsByKey = groupBy(collection, key)\n return Object.values(itemsByKey)\n .filter(group => group.length > 1)\n}\n\nfunction doesNameSuggestPassword (name) {\n const patterns = [\n /(^|[\\b_])pass(word)?([\\b_]|$)/\n ]\n return patterns.some(pattern => name.match(pattern))\n}\n\nfunction sanityCheckNodeNames (keymap) {\n const layerNames = getLayerNodeNames(keymap.layers)\n const comboNames = getComboNodeNames(keymap.combos)\n const macroNames = getMacroNodeNames(keymap.macros)\n const behaviorNames = getBehaviorNodeNames(keymap.behaviors)\n\n const duplicates = [\n ...getDuplicatesBy(layerNames, 'name'),\n ...getDuplicatesBy(comboNames, 'name'),\n ...getDuplicatesBy(macroNames, 'name'),\n ...getDuplicatesBy(behaviorNames, 'name')\n ]\n\n const redefined = [\n ...layerNames.filter(layer => reservedIdentifiers.includes(layer.name)),\n ...comboNames.filter(combo => reservedIdentifiers.includes(combo.name)),\n ...macroNames.filter(macro => reservedIdentifiers.includes(macro.name)),\n ...behaviorNames.filter(behavior => reservedIdentifiers.includes(behavior.name))\n ]\n\n const passwordMacros = [\n ...macroNames.filter(macro => doesNameSuggestPassword(macro.name))\n ]\n\n return { duplicates, redefined, passwordMacros }\n}\n\nfunction sanityCheckNodeLabels (keymap) {\n const duplicates = getDuplicatesBy([].concat(\n getLayerLabels(keymap.layers),\n getMacroLabels(keymap.macros),\n getBehaviorLabels(keymap.behaviors)\n ), 'label')\n\n return { duplicates }\n}\n\nfunction sanityCheckNodeReferences (keymap) {\n const nodesByRef = groupBy([].concat(\n getMacroReferences(keymap.macros),\n getBehaviorReferences(keymap.behaviors)\n ), 'ref')\n\n const duplicates = Object.values(nodesByRef).reduce((duplicates, nodes) => {\n if (nodes.length > 1) {\n duplicates.push(nodes)\n }\n\n return duplicates\n }, [])\n\n return { duplicates }\n}\n\nfunction sanityCheckDeprecations (keymap) {\n const resetBindings = [\n ...keymap.layers.reduce((deprecations, layer, i) => {\n layer.properties.bindings?.parsed?.forEach((binding, j) => {\n if (binding.value === '&reset') {\n deprecations.push({\n location: `Keymap - Layer #${i} (${layer.name}) - Key position ${j}`,\n path: `keymap.layers[${i}].bindings[${j}]`,\n name: '&reset'\n })\n }\n })\n\n return deprecations\n }, []),\n ...keymap.macros.reduce((deprecations, macro, i) => {\n macro.properties.bindings.parsed.forEach((binding, j) => {\n if (binding.value === '&reset') {\n deprecations.push({\n location: `Macros - Macro #${i} (${macro.name}) - Binding position ${j}`,\n path: `keymap.macros[${i}].properties.bindings[${j}].parsed`,\n name: '&reset'\n })\n }\n })\n\n return deprecations\n }, []),\n ...keymap.combos.reduce((deprecations, combos, i) => {\n combos.properties.bindings.parsed.forEach((binding, j) => {\n if (binding.value === '&reset') {\n deprecations.push({\n location: `Combos - Combo #${i} (${combos.name})`,\n path: `keymap.combos[${i}].bindings[${j}]`,\n name: '&reset'\n })\n }\n })\n\n return deprecations\n }, []),\n ...keymap.behaviors.reduce((deprecations, behavior, i) => {\n // TODO: should I try to handle this more generically?\n // Not all behaviors will have bindings, not all behaviors will be actual\n // ZMK behaviors that the editor can recognize, which means there may not\n // be a parsed `bindings` property to inspect.\n // Additionally, by only looking for `bindings` we're ignoring the layer\n // node's `sensor-bindings` property.\n behavior.properties.bindings?.parsed?.forEach((binding, j) => {\n if (binding.value === '&reset' || binding === '&reset') {\n deprecations.push({\n location: `Behaviors - Behavior #${i} (${behavior.name}) - Bind position ${j}`,\n path: `keymap.behaviors[${i}].parsed.bindings[${j}].parsed`,\n name: '&reset'\n })\n }\n })\n\n return deprecations\n }, [])\n ]\n\n return { resetBindings }\n}\n\nfunction getLayerNodeNames (layers) {\n return layers.map((layer, i) => ({\n location: `Keymap - Layer #${i} (${layer.name})`,\n path: `keymap.layers[${i}]`,\n name: selectName(layer)\n }))\n}\n\nfunction getLayerLabels (layers) {\n return layers.reduce((labels, layer, i) => {\n const label = selectLabel(layer)\n if (label) {\n labels.push({\n location: `Keymap - Layer #${i} (${layer.name})`,\n path: `keymap.layers[${i}].label`,\n label\n })\n }\n\n return labels\n }, [])\n}\n\nfunction getComboNodeNames (combos) {\n return combos.map((combo, i) => ({\n location: `Combos - Combo #${i} (${combo.name})`,\n path: `combos[${i}].name`,\n name: combo.name\n }))\n}\n\nfunction getMacroNodeNames (macros) {\n return macros.map((macro, i) => ({\n location: `Macros - Macro #${i} (${selectName(macro)})`,\n path: `macros[${i}].name`,\n name: selectName(macro)\n }))\n}\n\nfunction getMacroLabels (macros) {\n return macros.reduce((labels, macro, i) => {\n if (macro.label) {\n labels.push({\n location: `Macros - Macro #${i} (${selectLabel(macro)}) - Label`,\n path: `macros[${i}].label`,\n label: selectLabel(macro)\n })\n }\n\n return labels\n }, [])\n}\n\nfunction getMacroReferences (macros) {\n return macros.map((macro, i) => ({\n location: `Macros > Macro #${i} (${selectBind(macro)})`,\n path: `macros[${i}].name`,\n ref: selectBind(macro)\n }))\n}\n\nfunction getBehaviorNodeNames (behaviors) {\n return behaviors.map((behavior, i) => ({\n location: `Behaviors - Behavior #${i} (${selectBind(behavior)}) - Name`,\n path: `behaviors[${i}].name`,\n name: selectName(behavior)\n }))\n}\n\nfunction getBehaviorLabels (behaviors) {\n return behaviors.reduce((labels, behavior, i) => {\n const label = selectLabel(behavior)\n const ref = selectBind(behavior)\n if (label) {\n labels.push({\n location: `Behaviors - Behavior #${i} (${ref}) - Label`,\n path: `behaviors[${i}].label`,\n label\n })\n }\n\n return labels\n }, [])\n}\n\nfunction getBehaviorReferences (behaviors) {\n return behaviors.map((behavior, i) => ({\n location: `Behaviors - Behavior #${i} (${selectBind(behavior)}) - Bind`,\n path: `behaviors[${i}].bind`,\n ref: selectBind(behavior)\n }))\n}\n","import compact from 'lodash/compact'\nimport { Fragment, lazy, Suspense, useContext, useMemo, useState } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport Context from './Context'\nimport * as keymapProptypes from './keymapPropTypes'\nimport styles from './styles.module.css'\nimport { sanityCheck } from './Warnings/sanity-checks'\nimport { LayoutContext } from '../Contexts/Layout'\n\nconst Behaviors = lazy(() => import('./Behaviors/Behaviors'))\nconst ComboEditor = lazy(() => import('./Combos/ComboEditor'))\nconst LayerEditor = lazy(() => import('./Layers/LayerEditor'))\nconst MacroEditor = lazy(() => import('./Macros/MacroEditor'))\nconst Warnings = lazy(() => import('./Warnings/Warnings'))\n\n// import github from '../Sources/Github/api'\n\n// function useFeatures () {\n// const [features, setFeatures] = useState({ betaFeatures: [] })\n// useEffect(() => {\n// (async function () {\n// setFeatures(await github.fetchAvailableFeatures())\n// })()\n// }, [setFeatures])\n\n// return features\n// }\n\n// import LayoutEditor from './Layout/LayoutEditor'\n\nfunction Tabs ({ text, tabs, defaultTab, children }) {\n const [activeTab, setActiveTab] = useState(defaultTab)\n\n return (\n <>\n

{text}

\n \n \n {children[activeTab]}\n \n \n )\n}\n\nconst selectKeymap = state => state.keyboard.keymap\n\nfunction Keyboard (props) {\n const keymap = useSelector(selectKeymap)\n const { layout } = useContext(LayoutContext)\n const sanityChecks = useMemo(() => sanityCheck(keymap, layout), [keymap, layout])\n const warningCount = useMemo(() => {\n const { nodeNames, nodeLabels, nodeReferences, deprecations, layoutMissingPositions } = sanityChecks\n return (\n nodeNames.duplicates.length +\n nodeNames.redefined.length +\n nodeNames.passwordMacros.length +\n nodeLabels.duplicates.length +\n nodeReferences.duplicates.length +\n deprecations.resetBindings.length +\n layoutMissingPositions.length\n )\n }, [sanityChecks])\n\n const tabs = compact([\n { name: 'layers', component: },\n { name: 'combos', component: },\n { name: 'macros', component: },\n { name: behaviors, component: },\n warningCount > 0 && ({\n name: `warnings (${warningCount})`,\n tabClasses: [styles.warningTab],\n component: \n })\n ])\n\n const defaultTab = 0\n\n return (\n \n \n {tabs.map((tab, i) => (\n \n {tab.component}\n \n ))}\n \n \n )\n}\n\nKeyboard.propTypes = {\n keymap: keymapProptypes.keymap\n}\n\nexport default Keyboard\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import Icon from './Common/Icon'\n\nimport style from './styles.module.css'\n\nconst repositoryUrl = 'https://github.com/nickcoutsos/keymap-editor'\n\nexport default function GitHubLink () {\n return (\n
\n \n \n /nickcoutsos/keymap-editor\n \n
\n )\n}\n","import PropTypes from 'prop-types'\n\nimport DialogBox from '../Common/DialogBox'\nimport Icon from '../Common/Icon'\nimport Modal from '../Common/Modal'\n\nconst styles = {\n description: {\n fontStyle: 'italic',\n fontSize: '90%'\n }\n}\n\nfunction Settings (props) {\n const { settings, onUpdate, onClose } = props\n\n function handleUpdateSetting (key, value) {\n onUpdate({ ...settings, [key]: value })\n }\n\n return (\n \n \n

Settings

\n\n

Keycode glyphs

\n\n

\n \n

\n

\n Use unicode glyphs for visual representations of keycodes\n like Enter (⮐), Right Arrow (⏵), etc. You\n can disable this if the symbols don't render correctly.\n

\n\n

\n \n

\n

\n Render symbols specific to your platform. E.g., render left/right meta\n key as for Windows, or\n ⌘ for macOS.\n

\n
\n
\n )\n}\n\nSettings.propTypes = {\n settings: PropTypes.object.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired\n}\n\nSettings.defaultProps = {\n settings: {}\n}\n\nexport default Settings\n","import DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\nimport { KeymapLayoutResources } from './support'\n\nfunction SuggestAutoLayoutTweak (props) {\n return (\n \n \n

This layout was Auto-Generated

\n

\n Hi there! There wasn't a layout definition to accompany your keymap\n file, so the keymap editor tried to generate one automatically in a\n last-ditch effort to help you get into the app.\n

\n

\n This layout definition was (or will be) saved when you first save\n keymap changes with the keymap editor, so remember that if there are\n any tweaks you'd like to make to improve it you can do so by editing\n the info.json file.\n

\n {KeymapLayoutResources}\n
\n
\n )\n}\n\nSuggestAutoLayoutTweak.propTypes = {}\n\nexport default SuggestAutoLayoutTweak\n","import PropTypes from 'prop-types'\n\nimport DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\nimport { GeneralHelpOfferCopy } from './support'\n\nfunction KeymapBindingsUsePreprocessorMacros (props) {\n const { onDismiss } = props\n\n return (\n \n \n

Could not parse keymap

\n

\n It looks like some bindings in your keymap are using custom pre-processor\n macros which isn't supported by the Keymap Editor. These macros make\n it difficult both to resolve bindings to behaviors and parameters, as\n well as to generate modified keymap code that is consistent with your\n original intentions.\n

\n

\n Please either continue editing your keymap by hand with these helpers\n or if you would like to use this editor, rewrite the keymap to use\n ZMK's syntax directly.\n

\n {GeneralHelpOfferCopy}\n
\n
\n )\n}\n\nKeymapBindingsUsePreprocessorMacros.propTypes = {\n onDismiss: PropTypes.func.isRequired\n}\n\nexport default KeymapBindingsUsePreprocessorMacros\n","import PropTypes from 'prop-types'\n\nimport DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\nimport { GeneralHelpOfferCopy } from './support'\n\nfunction KeymapParsingFailed (props) {\n const { onDismiss } = props\n\n return (\n \n \n

Could not parse keymap

\n

\n Something went wrong while trying to parse your keymap. It's hard to\n say what exactly, because I wasn't expecting this.\n

\n

\n A common occurrence here is keymaps using a variety of pre-processor\n macros to define layers/combos/etc.\n

\n {GeneralHelpOfferCopy}\n
\n
\n )\n}\n\nKeymapParsingFailed.propTypes = {\n onDismiss: PropTypes.func.isRequired\n}\n\nexport default KeymapParsingFailed\n","import PropTypes from 'prop-types'\n\nimport DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\n\nfunction KeymapUsingMiryoku (props) {\n const { onDismiss } = props\n\n return (\n \n \n

Could not parse Miryoku keymap

\n

\n It looks like your keyboard is built using Miryoku to manage the\n configuration and keymap. Parsing and editing keymaps that use this\n syntax is unsupported by the Keymap Editor.\n

\n

\n Please either continue editing your keymap by hand with these helpers\n or if you would like to use this editor, rewrite the keymap to use\n ZMK's syntax directly.\n

\n
\n
\n )\n}\n\nKeymapUsingMiryoku.propTypes = {\n onDismiss: PropTypes.func.isRequired\n}\n\nexport default KeymapUsingMiryoku\n","import PropTypes from 'prop-types'\n\nimport DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\nimport { GitHubIssuesLink } from './support'\n\nfunction MissingRootNode (props) {\n const { onDismiss } = props\n\n return (\n \n \n

Could not parse keymap

\n

\n Missing devicetree root node.\n

\n

\n The keymap editor was unable to find a devicetree root node in your\n keymap. This means that either something is wrong with the parser or\n something is wrong with your keymap's syntax.\n

\n

\n If you've been using the keymap editor succesfully up to now it's\n possible that it has introduced an error in the keymap file. Please\n reach out for support at {GitHubIssuesLink}.\n

\n
\n
\n )\n}\n\nMissingRootNode.propTypes = {\n onDismiss: PropTypes.func.isRequired\n}\n\nexport default MissingRootNode\n","import PropTypes from 'prop-types'\n\nimport DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\n\nfunction ZmkNodefreeConfig (props) {\n const { onDismiss } = props\n\n return (\n \n \n

Could not parse keymap

\n

\n Detected use of zmk-nodefree-config\n

\n

\n It looks like your keymap is built using helper functions from the\n zmk-nodefree-config library to replace devicetree syntax. Parsing and\n editing keymaps that use this syntax is unsupported by the Keymap\n Editor.\n

\n

\n Please either continue editing your keymap by hand with these helpers\n or if you would like to use this editor, rewrite the keymap to use\n ZMK's syntax directly.\n

\n
\n
\n )\n}\n\nZmkNodefreeConfig.propTypes = {\n onDismiss: PropTypes.func.isRequired\n}\n\nexport default ZmkNodefreeConfig\n","import compact from 'lodash/compact'\nimport * as config from '../config'\n\nexport const sourceChoices = compact([\n config.enableDemo && {\n id: 'demo',\n name: 'Demo Keyboard',\n description: 'Play around with a sample keymap'\n },\n config.enableLocal && {\n id: 'local',\n name: 'Local',\n description: 'Hello, me',\n collapsible: false\n },\n config.enableGitHub && {\n id: 'github',\n name: 'GitHub',\n description: 'Integrate with a GitHub repo, leveraging GitHub actions to compile firmware',\n collapsible: true\n },\n config.enableClipboard && {\n id: 'clipboard',\n name: 'Clipboard',\n description: 'Read and write keymap data directly from your clipboard',\n isBeta: true\n },\n config.enableFileSystem && window.showOpenFilePicker && {\n id: 'filesystem',\n name: 'File System',\n description: 'Read and write keymap files on your local filesystem',\n isBeta: true\n }\n])\n\nconst selectedSource = localStorage.getItem('selectedSource')\nconst onlySource = sourceChoices.length === 1 ? sourceChoices[0].id : null\n\nexport const defaultSource = onlySource || (\n sourceChoices.find(source => source.id === selectedSource)\n ? selectedSource\n : sourceChoices[0].id\n)\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import classNames from 'classnames'\nimport find from 'lodash/find'\nimport PropTypes from 'prop-types'\nimport { lazy, Suspense, useCallback, useEffect, useRef, useState } from 'react'\n\nimport Icon from '../Common/Icon'\nimport useClickOutsideHandler from '../Common/hooks/use-click-outside-handler'\nimport useToggle from '../Common/hooks/use-toggle'\nimport SuggestAutoLayoutTweak from '../Dialogs/SuggestAutoLayoutTweak'\nimport { Button, Select } from './Controls'\nimport { getErrorDialog } from './errors'\nimport { sourceChoices, defaultSource } from './sources'\nimport styles from './styles.module.css'\nimport { useSelector } from 'react-redux'\n\nconst LocalPicker = lazy(() => import('./Local/Picker'))\nconst DemoPicker = lazy(() => import('./Demo/Picker'))\nconst GithubPicker = lazy(() => import('./Github/Picker'))\nconst ClipboardPicker = lazy(() => import('./Clipboard/Picker'))\nconst FileSystemPicker = lazy(() => import('./FileSystem/FileSystemPicker'))\n\nconst keyboardSelector = state => state.keyboard\n\nfunction KeyboardPicker (props) {\n const { onSelect } = props\n const wrapperRef = useRef()\n const keyboard = useSelector(keyboardSelector)\n const [source, setSource] = useState(defaultSource)\n const [{ autoGenerated }, setLayoutInfo] = useState({ autoGenerated: false })\n const [showDialog, setShowDialog] = useState(null)\n const closeDialog = useCallback(() => setShowDialog(null), [setShowDialog])\n const [isExpanded, , setExpanded, setCompact] = useToggle(true)\n const showLayoutHelp = useCallback(() => {\n setShowDialog({\n component: SuggestAutoLayoutTweak,\n onClose: closeDialog\n })\n }, [setShowDialog, closeDialog])\n\n const selectedSource = find(sourceChoices, { id: source })\n\n useClickOutsideHandler(wrapperRef, setCompact, (\n selectedSource?.collapsible === true &&\n keyboard &&\n isExpanded\n ))\n\n const handleSelectSource = useCallback(choice => {\n onSelect({ source: choice.id, keyboard: null })\n setSource(choice.id)\n }, [setSource, onSelect])\n\n const handleKeyboardSelected = useCallback(function (event) {\n const { warningFlags = [] } = event.keymap\n const { autoGenerated = false } = event.layoutMetadata || {}\n const error = getErrorDialog(warningFlags)\n\n if (error) {\n setShowDialog({ component: error, onClose: closeDialog })\n onSelect({ source, keyboard: null })\n return\n }\n\n setLayoutInfo({ autoGenerated })\n onSelect({ source, ...event })\n }, [onSelect, source, setShowDialog, closeDialog])\n\n const handleError = useCallback(function ({ dialog, dialogProps }) {\n setShowDialog({ component: dialog, dialogProps, onClose: closeDialog })\n onSelect({ source, keyboard: null })\n }, [setShowDialog, closeDialog, onSelect, source])\n\n useEffect(() => {\n localStorage.setItem('selectedSource', source)\n }, [source])\n\n return (\n \n {isExpanded && (\n option.name}\n getOptionValue={option => option.id}\n formatOptionLabel={(option, { context }) => (\n context === 'value'\n ? option.name\n : (\n <>\n
{option.name}{option.isBeta && }
\n
{option.description}
\n \n )\n )}\n />\n )}\n\n {showDialog?.component && }\n\n \n {source === 'local' && }\n {source === 'demo' && }\n {source === 'github' && (\n \n )}\n {source === 'clipboard' && }\n {source === 'filesystem' && }\n \n\n {autoGenerated && (\n \n )}\n \n )\n}\n\nfunction Beta () {\n const style = {\n color: 'white',\n backgroundColor: 'var(--error-highlight)',\n fontSize: '12px',\n fontWeight: 'bold',\n padding: '1px 3px',\n margin: '2px',\n borderRadius: '6px',\n verticalAlign: 'top'\n }\n return (\n beta\n )\n}\n\nKeyboardPicker.propTypes = {\n onSelect: PropTypes.func.isRequired\n}\n\nexport default KeyboardPicker\n","import { useEffect } from 'react'\n\nexport default function useClickOutsideHandler (ref, callback, enabled = true) {\n useEffect(() => {\n if (enabled) {\n const handleClick = event => {\n const isInDocument = document.body.contains(event.target)\n const isInWrapper = ref.current.contains(event.target)\n if (isInDocument && !isInWrapper) {\n callback()\n }\n }\n\n document.body.addEventListener('click', handleClick)\n return () => document.body.removeEventListener('click', handleClick)\n }\n }, [ref, enabled, callback])\n}\n","import KeymapBindingsUsePreprocessorMacros from '../Dialogs/KeymapBindingsUsePreprocessorMacros'\nimport KeymapParsingFailed from '../Dialogs/KeymapParsingFailed'\nimport KeymapUsingMiryoku from '../Dialogs/KeymapUsingMiryoku'\nimport MissingRootNode from '../Dialogs/MissingRootNode'\nimport ZmkNodefreeConfig from '../Dialogs/ZmkNodefreeConfig'\n\nexport function getErrorDialog (warningFlags) {\n switch (warningFlags[0]) {\n case 'USING_ZMK_NODEFREE_MACROS':\n return ZmkNodefreeConfig\n case 'USING_MIRYOKU_DTSI':\n return KeymapUsingMiryoku\n case 'USING_NON_ZMK_MACRO':\n return KeymapBindingsUsePreprocessorMacros\n case 'KEYMAP_PARSING_FAILED':\n return KeymapParsingFailed\n case 'MISSING_ROOT_NODE':\n return MissingRootNode\n default:\n return null\n }\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./unexpected-error.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./unexpected-error.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import PropTypes from 'prop-types'\n\nimport { apiBaseUrl } from '../config'\nimport Link from '../Common/Link'\nimport Modal from '../Common/Modal'\nimport DialogBox from '../Common/DialogBox'\nimport IconButton from '../Common/IconButton'\n\nimport styles from './unexpected-error.module.css'\nimport { useEffect, useState } from 'react'\n\nfunction formatStackFrame (frame) {\n return ` ${frame.fileName}:${frame.lineNumber}:${frame.columnNumber}`\n}\n\nfunction formatErrorText (error, stack = []) {\n return `\n${error.name}\n\n${error.message}\n\n${stack.map(formatStackFrame).join('\\n')}\n`.trim()\n}\n\nconst newGithubIssue = (\n \n new issue\n \n)\n\nasync function reportError (error, stacktrace) {\n const url = `${apiBaseUrl}/v2/events/client-errors`\n const body = JSON.stringify({\n error: error.toString(),\n stacktrace\n })\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body\n })\n\n if (!response.ok) {\n console.error('Failed to submit error report', response)\n }\n}\n\nfunction UnexpectedError ({ error }) {\n const [stack, setStack] = useState([])\n const [formattedError, setFormattedError] = useState('')\n const [copied, setCopied] = useState(false)\n\n useEffect(() => {\n async function parseStack () {\n const StackTrace = await import('stacktrace-js')\n const stacktrace = await StackTrace.fromError(error)\n setStack(stacktrace)\n reportError(error, stacktrace)\n }\n\n parseStack()\n }, [setStack, error])\n\n useEffect(() => {\n setFormattedError(formatErrorText(error, stack))\n }, [error, stack])\n\n useEffect(() => {\n if (copied) {\n setTimeout(() => {\n setCopied(false)\n }, 3000)\n }\n }, [copied, setCopied])\n\n function copyErrorText () {\n const backTicks = '```'\n const text = `${backTicks}\\n${formattedError}\\n${backTicks}`\n navigator.clipboard.writeText(text)\n .then(() => setCopied(true))\n }\n\n return (\n \n \n

Unexpected error

\n

\n Something unexpected happened and the keymap editor app cannot\n recover. Please consider taking a moment to open a {newGithubIssue}\n with the details below to help me investigate and improve the app.\n

\n
\n
{formattedError}
\n \n {copied && (\n
Copied!
\n )}\n
\n
\n
\n )\n}\n\nUnexpectedError.propTypes = {\n error: PropTypes.instanceOf(Error).isRequired\n}\n\nexport default UnexpectedError\n","import React from 'react'\nimport UnexpectedError from './Dialogs/UnexpectedError'\n\nexport default class ErrorBoundary extends React.Component {\n constructor (props) {\n super(props)\n this.state = {\n error: null\n }\n }\n\n static getDerivedStateFromError (error) {\n return { error }\n }\n\n render () {\n const { children } = this.props\n const { error } = this.state\n\n if (error) {\n return \n }\n\n return children\n }\n}\n","import PropTypes from 'prop-types'\n\nimport DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\nimport { GitHubIssuesLink } from './support'\n\nfunction KeymapSaveFailed (props) {\n const { onDismiss } = props\n return (\n \n \n

Failed to save keymap changes

\n

\n Sorry, an unexpected error occurred while trying to save your keymap.\n

\n

\n Please try again or raise an issue if the problem persists and I'll\n try to work it out with you. Seriously I can only get this right if I\n know what's wrong, and in some cases that comes down to people using\n this editor in more advanced ways than I myself have.\n

\n

\n {GitHubIssuesLink}\n

\n
\n
\n )\n}\n\nKeymapSaveFailed.propTypes = {\n onDismiss: PropTypes.func.isRequired\n}\n\nexport default KeymapSaveFailed\n","import '@fortawesome/fontawesome-free/css/all.min.css'\n\nimport { useCallback, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport './App.css'\nimport { SettingsContext } from './providers'\n\nimport IconButton from './Common/IconButton'\nimport Keyboard from './Keyboard/Keyboard'\nimport GitHubLink from './GitHubLink'\nimport Settings from './Dialogs/Settings'\nimport SourcePicker from './Sources/SourcePicker'\nimport github from './Sources/Github/api'\n\nimport ErrorBoundary from './ErrorBoundary'\nimport KeymapSaveFailed from './Dialogs/KeymapSaveFailed'\nimport { DefinitionsContextProvider } from './Contexts/Definitions'\nimport { LayoutContextProvider } from './Contexts/Layout'\n\nfunction App () {\n const state = useSelector(state => state)\n const dispatch = useDispatch()\n const {\n sourceOther,\n keyboard,\n saveError,\n theme,\n settingsVisible,\n experimentalSettings\n } = state\n\n // useEffect(() => {\n // (async function () {\n // console.log('loading devicetree parser')\n // const { getParser } = await import('devicetree')\n // const parser = await getParser()\n // const tree = parser.parse('/ {};')\n // console.log(tree, tree.rootNode.toString())\n // })()\n // }, [])\n\n useEffect(() => {\n if (!sourceOther?.github) {\n dispatch({ type: 'GITHUB_BUILD_UPDATE', build: null })\n return\n }\n\n function handler (run) {\n if (run.head_branch === sourceOther.github.branch) {\n dispatch({ type: 'GITHUB_BUILD_UPDATE', build: run })\n }\n }\n\n ;(async function () {\n const { repository, branch } = sourceOther.github\n handler(await github.fetchBuildStatus(repository, branch))\n })()\n\n github.on('build-update', handler)\n return () => github.off('build-update', handler)\n }, [sourceOther, dispatch])\n\n const handleKeyboardSelected = useCallback(function (event) {\n const { source, layout, keymap, sensors = [], ...other } = event\n\n if (!keymap) {\n dispatch({ type: 'CLEAR_KEYBOARD_SELECTION' })\n return\n }\n\n dispatch({\n type: 'SELECT_KEYBOARD',\n source,\n sourceOther: other,\n layout,\n keymap,\n sensors\n })\n }, [dispatch])\n\n const handleUpdateSettings = useCallback(function (settings) {\n dispatch({ type: 'SETTINGS_UPDATE', settings })\n }, [dispatch])\n\n const openSettingsDialog = useCallback(\n () => dispatch({ type: 'SETTINGS_OPEN' }),\n [dispatch]\n )\n\n return (\n <>\n \n \n \n\n
\n dispatch({ type: 'CYCLE_THEME' })}\n />\n\n \n {settingsVisible && (\n dispatch({ type: 'SETTINGS_CLOSE' })}\n />\n )}\n
\n\n \n {keyboard && (\n \n \n \n )}\n {saveError && (\n dispatch({ type: 'CLEAR_SAVE_ERROR' })} />\n )}\n \n
\n
\n \n\n {/*
\n \n \n Note: Experiencing GitHub API issues, keymap loading/saving may fail\n \n
*/}\n \n )\n}\n\nexport default App\n","import cloneDeep from 'lodash/cloneDeep'\nimport get from 'lodash/get'\nimport pick from 'lodash/pick'\n\nimport { stripLegacyProperties } from './keymap'\n\nfunction init () {\n const settings = JSON.parse(\n localStorage.getItem('experimental-settings') || '{}'\n )\n\n return {\n definitions: null,\n source: null,\n sourceOther: null,\n keyboard: null,\n _unmodifiedKeymap: null,\n saving: null,\n saveError: null,\n settingsVisible: null,\n commitDialogOpen: false,\n theme: JSON.parse(localStorage.getItem('theme' || '\"system\"')),\n experimentalSettings: {\n unicodeGlyphs: get(settings, 'unicodeGlyphs', true),\n platformGlyphs: get(settings, 'platformGlyphs', 'auto'),\n enableBehaviorEditing: get(settings, 'enableBehaviorEditing', false)\n },\n latestBuild: null\n }\n}\n\nexport const INITIAL_STATE = init()\n\nexport default function reducer (state, action) {\n const { type } = action\n\n switch (type) {\n case 'INITIALIZE':\n return init()\n\n case 'DEFINITIONS_SET':\n return { ...state, definitions: action.definitions }\n\n case 'CLEAR_KEYBOARD_SELECTION':\n return { ...state, keyboard: null }\n\n case 'SELECT_KEYBOARD':\n return selectKeyboard(state, action)\n\n case 'COMMIT_DIALOG_OPEN':\n return { ...state, commitDialogOpen: true }\n\n case 'COMMIT_DIALOG_CLOSE':\n return { ...state, commitDialogOpen: false }\n\n case 'GITHUB_BUILD_UPDATE':\n return { ...state, latestBuild: action.build }\n\n case 'KEYMAP_SAVE_START':\n return { ...state, saving: true, saveError: false }\n\n case 'KEYMAP_SAVE_SUCCESS':\n return keymapSaveSuccess(state, action)\n\n case 'KEYMAP_SAVE_FAILURE':\n return {\n ...state,\n saving: false,\n saveError: true\n }\n\n case 'CLEAR_SAVE_ERROR':\n return { ...state, saveError: null }\n\n case 'SETTINGS_OPEN':\n return { ...state, settingsVisible: true }\n\n case 'SETTINGS_CLOSE':\n return { ...state, settingsVisible: false }\n\n case 'SETTINGS_UPDATE':\n localStorage.setItem('experimental-settings', JSON.stringify(action.settings))\n return { ...state, experimentalSettings: action.settings }\n\n case 'CYCLE_THEME':\n return cycleTheme(state, action)\n\n default:\n return state\n }\n}\n\n// Here we can adapt the payload to account for API changes\nfunction selectKeyboard (state, action) {\n const { keyboard } = state\n const newKeyboardState = pick(action, ['layout', 'keymap', 'sensors'])\n\n stripLegacyProperties(newKeyboardState.keymap)\n\n return {\n ...state,\n source: action.source,\n sourceOther: action.sourceOther,\n keyboard: { ...keyboard, ...newKeyboardState },\n _unmodifiedKeymap: cloneDeep(newKeyboardState.keymap)\n }\n}\n\nfunction keymapSaveSuccess (state, action) {\n const newKeymapState = { ...action.keymap }\n\n stripLegacyProperties(newKeymapState)\n\n return {\n ...state,\n saving: false,\n unsaved: false,\n keyboard: {\n ...state.keyboard,\n keymap: newKeymapState\n },\n _unmodifiedKeymap: newKeymapState\n }\n}\n\nfunction cycleTheme (state, action) {\n const themes = ['light', 'dark', 'system']\n const index = themes.indexOf(state.theme)\n const theme = themes.at((index + 1) % themes.length)\n localStorage.setItem('theme', `\"${theme}\"`)\n document.body.dataset.theme = theme\n return { ...state, theme }\n}\n","import { combineReducers, configureStore } from '@reduxjs/toolkit'\n\nimport appReducer, { INITIAL_STATE } from './appReducer'\nimport layersReducer from './Keyboard/Layers/layersSlice'\nimport combosReducer from './Keyboard/Combos/combosSlice'\nimport macrosReducer from './Keyboard/Macros/macrosSlice'\nimport behaviorsReducer from './Keyboard/Behaviors/behaviorsSlice'\n\nconst keyboardReducer = combineReducers({\n layout: (state = []) => state,\n sensors: (state = []) => state,\n keymap: combineReducers({\n warningFlags: (state = []) => state,\n defines: (state = []) => state,\n headers: (state = []) => state,\n chosen: (state = {}) => state,\n behaviors: behaviorsReducer,\n layers: layersReducer,\n combos: combosReducer,\n macros: macrosReducer\n })\n})\n\nfunction rootReducer (state, action) {\n const newState = appReducer(state, action)\n return {\n ...newState,\n keyboard: newState.keyboard && {\n ...newState.keyboard,\n ...keyboardReducer(newState.keyboard, action)\n }\n }\n}\n\nconst store = configureStore({\n reducer: rootReducer,\n preloadedState: INITIAL_STATE\n})\n\nexport default store\n","import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { Provider } from 'react-redux'\n\nimport './index.css'\nimport App from './App'\n\nimport { INITIAL_STATE } from './appReducer'\nimport store from './store'\n\ndocument.body.dataset.theme = INITIAL_STATE.theme\n\nconst root = ReactDOM.createRoot(document.getElementById('app-root'))\n\nroot.render(\n \n \n \n \n \n)\n","import map from 'lodash/map'\n\nconst DEFAULT_SIZE = 65\nconst DEFAULT_PADDING = 5\n\nexport function getComputedParams (position, size, rotation = {}) {\n return {\n x: position.x * (DEFAULT_SIZE + DEFAULT_PADDING),\n y: position.y * (DEFAULT_SIZE + DEFAULT_PADDING),\n u: size.u * DEFAULT_SIZE + DEFAULT_PADDING * (size.u - 1),\n h: size.h * DEFAULT_SIZE + DEFAULT_PADDING * (size.h - 1),\n rx: (position.x - (rotation.x || position.x)) * -(DEFAULT_SIZE + DEFAULT_PADDING),\n ry: (position.y - (rotation.y || position.y)) * -(DEFAULT_SIZE + DEFAULT_PADDING),\n a: rotation.a || 0\n }\n}\n\nexport function getKeyStyles (position, size, rotation) {\n const { x, y, u, h, a, rx, ry } = getComputedParams(position, size, rotation)\n\n return {\n top: `${y}px`,\n left: `${x}px`,\n width: `${u}px`,\n height: `${h}px`,\n transformOrigin: `${rx}px ${ry}px`,\n transform: `rotate(${a || 0}deg)`\n }\n}\n\nexport function transformKeyPolygon (position, size, rotation) {\n const { x, y, u, h, a, rx, ry } = getComputedParams(position, size, rotation)\n\n const points = [\n { x: 0, y: 0 },\n { x: u, y: 0 },\n { x: u, y: h },\n { x: 0, y: h }\n ]\n\n function translate (point) {\n return {\n x: point.x + x,\n y: point.y + y\n }\n }\n\n function rotate (point) {\n const x = point.x - rx\n const y = point.y - ry\n const angle = Math.PI * a / 180\n\n return {\n x: rx + x * Math.cos(angle) - y * Math.sin(angle),\n y: ry + y * Math.cos(angle) + x * Math.sin(angle)\n }\n }\n\n return points.map(rotate).map(translate)\n}\n\nexport function getKeyBoundingBox (position, size, rotation) {\n const transformed = transformKeyPolygon(position, size, rotation)\n const xValues = map(transformed, 'x')\n const yValues = map(transformed, 'y')\n const min = {\n x: Math.min(...xValues),\n y: Math.min(...yValues)\n }\n const max = {\n x: Math.max(...xValues),\n y: Math.max(...yValues)\n }\n\n return { min, max }\n}\n","import compact from 'lodash/compact'\n\nfunction shortestAlias (aliases) {\n return [...aliases]\n .sort((a, b) => a.length - b.length)[0]\n}\n\nconst fnPattern = /^(.+?)\\((code)\\)$/\n\nexport function normalizeZmkKeycodes (keycodes) {\n return keycodes.reduce((keycodes, keycode) => {\n const { description, context, symbol, faIcon, modifiers = [] } = keycode\n const aliases = keycode.names.filter(name => !name.match(fnPattern))\n const name = shortestAlias(aliases)\n const fnCode = keycode.names.map(name => name.match(fnPattern)).filter(v => !!v)[0]\n const base = {\n name,\n aliases,\n description,\n context,\n faIcon,\n symbol: symbol || name,\n modifiers,\n params: []\n }\n\n for (const code of aliases) {\n keycodes.push(Object.assign({}, base, {\n code,\n isModifier: !!fnCode\n }))\n }\n\n if (fnCode) {\n keycodes.push(Object.assign({}, base, {\n code: fnCode[1],\n params: fnCode[2].split(',')\n }))\n }\n\n return keycodes\n }, [])\n}\n\nexport function getMergedGlyphs (glyphs, options) {\n return compact([\n glyphs.basic,\n options.unicode && glyphs.unicode,\n options.platform === 'mac' && glyphs.platforms.mac,\n options.platform === 'win' && glyphs.platforms.win\n ]).reduce((glyphs, collection) => {\n for (const overlay of collection) {\n const aliases = overlay.names.filter(name => !name.match(fnPattern))\n const name = shortestAlias(aliases)\n\n if (!glyphs[name]) {\n glyphs[name] = {}\n }\n\n glyphs[name].symbol = glyphs[name].symbol || overlay.symbol\n glyphs[name].faIcon = glyphs[name].faIcon || overlay.faIcon\n }\n return glyphs\n }, {})\n}\n","import find from 'lodash/find'\nimport get from 'lodash/get'\nimport pick from 'lodash/pick'\n\nexport function stripLegacyProperties (keymap) {\n keymap.layers = keymap.layers.map(layer => (\n pick(layer, ['index', 'name', 'labels', 'properties'])\n ))\n\n keymap.combos = keymap.combos.map(combo => (\n pick(combo, ['index', 'name', 'labels', 'properties'])\n ))\n\n keymap.behaviors = keymap.behaviors.map(behavior => (\n pick(behavior, ['index', 'name', 'labels', 'properties', 'params'])\n ))\n\n keymap.macros = keymap.macros.map(macro => (\n pick(macro, ['index', 'name', 'labels', 'properties'])\n ))\n}\n\nexport function getBindingSlots (binding, behaviorParameters) {\n const { value, params } = binding\n const base = behaviorParameters[value] || []\n const additional = getAdditionalParams(params, base)\n return [...base, ...additional]\n}\n\nfunction getAdditionalParams (parsedParams, slots) {\n const firstParsedParam = get(parsedParams, '[0]', {})\n const firstSlot = get(slots, '[0]')\n\n if (firstSlot?.enum) {\n const match = { code: firstParsedParam.value }\n const source = find(firstSlot.enum, match)\n if (source?.additionalParams) {\n return source.additionalParams\n }\n }\n\n return []\n}\n","import { createContext } from 'react'\n\nexport const SearchContext = createContext({\n getSearchTargets: null\n})\n\nexport const SettingsContext = createContext({\n settings: null,\n openSettingsDialog: null\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root {\\n --bg: white;\\n --bg-rgb: 255,255,255;\\n --fg: black;\\n\\t--dark-red: #910e0e;\\n\\t--dark-blue: #6d99c6;\\n --error-highlight: rgb(179, 60, 60);\\n --selection: rgb(60, 179, 113);\\n --hover-selection: rgba(60, 179, 113, 0.85);\\n --delete: rgb(179, 60, 72);\\n --delete-faint: rgba(179, 60, 72, 0.6);\\n --link: royalblue;\\n --link-hover: #6d99c6;\\n --key-bg-base: #f2f2f2;\\n --key-bg-hover: white;\\n --key-bg-highlight: sandybrown;\\n --key-color-base: hsl(0, 0%, 30%);\\n --key-color-extreme: #313131;\\n --key-color-hover: white;\\n --code-bg: rgba(0, 0, 0, 0.15);\\n}\\nhtml {\\n font-family: sans-serif;\\n}\\nhtml, body {\\n\\twidth: 100vw;\\n\\theight: 100vh;\\n\\toverflow: auto;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n background-color: var(--bg);\\n color: var(--fg);\\n\\n transition: 300ms ease-in-out;\\n transition-property: color, background-color, border-color;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n font-family: Quicksand, avenir, sans-serif;\\n}\\n\\nbody[data-theme=\\\"dark\\\"] {\\n color-scheme: dark;\\n --fg: white;\\n --bg: hsl(211, 31.9%, 13%);\\n --bg-rgb: 17,34,51;\\n --dialog-bg: hsl(210, 30%, 17%);\\n --key-bg-base: hsl(208.2, 23%, 25%);\\n --key-color-base: hsl(0, 0%, 90%);\\n --key-color-extreme: #e7e7e7;\\n}\\n@media (prefers-color-scheme: dark) {\\n body[data-theme=\\\"system\\\"] {\\n color-scheme: dark;\\n --fg: white;\\n --bg: hsl(211, 31.9%, 13%);\\n --bg-rgb: 17,34,51;\\n --dialog-bg: hsl(210, 30%, 17%);\\n --key-bg-base: hsl(208.2, 23%, 25%);\\n --key-color-base: hsl(0, 0%, 90%);\\n --key-color-extreme: #e7e7e7;\\n }\\n}\\n\\nh3 {\\n margin-bottom: 10px;\\n}\\n\\na { color: var(--link) }\\na:hover { color: var(--link-hover) }\\n\\ncode {\\n background-color: var(--code-bg);\\n border-radius: 2px;\\n padding: .15em .3em .05em;\\n}\\n\\np {\\n line-height: 1.3rem;\\n}\\n\\n#actions {\\n\\tposition: absolute;\\n display: flex;\\n\\tbottom: 5px;\\n\\tright: 5px;\\n gap: 4px;\\n}\\n\\n#actions button {\\n display: inline-block;\\n cursor: pointer;\\n background-color: var(--hover-selection);\\n color: white;\\n\\n font-size: 16px;\\n border: none;\\n border-radius: 5px;\\n padding: 0 5px;\\n\\n height: 30px;\\n line-height: 30px;\\n vertical-align: middle;\\n}\\n\\n#actions button[disabled] {\\n filter: saturate(20%);\\n opacity: .5;\\n cursor: not-allowed;\\n}\\n\\n#settings-bar {\\n position: absolute;\\n z-index: 5;\\n top: 10px;\\n right: 10px;\\n}\\n\\n#settings-bar button {\\n background: none;\\n color: var(--fg);\\n border: none;\\n}\\n#settings-bar button:hover {\\n cursor: pointer;\\n color: royalblue;\\n}\\n\\n.fa-delete-right::before {\\n content: '\\\\f55a';\\n transform-origin: center;\\n transform: rotateZ(180deg);\\n display: inline-block;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/App.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;EACX,qBAAqB;EACrB,WAAW;CACZ,mBAAmB;CACnB,oBAAoB;EACnB,mCAAmC;EACnC,8BAA8B;EAC9B,2CAA2C;EAC3C,0BAA0B;EAC1B,sCAAsC;EACtC,iBAAiB;EACjB,qBAAqB;EACrB,sBAAsB;EACtB,qBAAqB;EACrB,8BAA8B;EAC9B,iCAAiC;EACjC,4BAA4B;EAC5B,wBAAwB;EACxB,8BAA8B;AAChC;AACA;EACE,uBAAuB;AACzB;AACA;CACC,YAAY;CACZ,aAAa;CACb,cAAc;CACd,UAAU;CACV,SAAS;EACR,2BAA2B;EAC3B,gBAAgB;;EAEhB,6BAA6B;EAC7B,0DAA0D;AAC5D;;AAEA;EACE,0CAA0C;AAC5C;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,0BAA0B;EAC1B,kBAAkB;EAClB,+BAA+B;EAC/B,mCAAmC;EACnC,iCAAiC;EACjC,4BAA4B;AAC9B;AACA;EACE;IACE,kBAAkB;IAClB,WAAW;IACX,0BAA0B;IAC1B,kBAAkB;IAClB,+BAA+B;IAC/B,mCAAmC;IACnC,iCAAiC;IACjC,4BAA4B;EAC9B;AACF;;AAEA;EACE,mBAAmB;AACrB;;AAEA,IAAI,mBAAmB;AACvB,UAAU,yBAAyB;;AAEnC;EACE,gCAAgC;EAChC,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;CACC,kBAAkB;EACjB,aAAa;CACd,WAAW;CACX,UAAU;EACT,QAAQ;AACV;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,wCAAwC;EACxC,YAAY;;EAEZ,eAAe;EACf,YAAY;EACZ,kBAAkB;EAClB,cAAc;;EAEd,YAAY;EACZ,iBAAiB;EACjB,sBAAsB;AACxB;;AAEA;EACE,qBAAqB;EACrB,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;AACd;AACA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;EACxB,0BAA0B;EAC1B,qBAAqB;AACvB\",\"sourcesContent\":[\":root {\\n --bg: white;\\n --bg-rgb: 255,255,255;\\n --fg: black;\\n\\t--dark-red: #910e0e;\\n\\t--dark-blue: #6d99c6;\\n --error-highlight: rgb(179, 60, 60);\\n --selection: rgb(60, 179, 113);\\n --hover-selection: rgba(60, 179, 113, 0.85);\\n --delete: rgb(179, 60, 72);\\n --delete-faint: rgba(179, 60, 72, 0.6);\\n --link: royalblue;\\n --link-hover: #6d99c6;\\n --key-bg-base: #f2f2f2;\\n --key-bg-hover: white;\\n --key-bg-highlight: sandybrown;\\n --key-color-base: hsl(0, 0%, 30%);\\n --key-color-extreme: #313131;\\n --key-color-hover: white;\\n --code-bg: rgba(0, 0, 0, 0.15);\\n}\\nhtml {\\n font-family: sans-serif;\\n}\\nhtml, body {\\n\\twidth: 100vw;\\n\\theight: 100vh;\\n\\toverflow: auto;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n background-color: var(--bg);\\n color: var(--fg);\\n\\n transition: 300ms ease-in-out;\\n transition-property: color, background-color, border-color;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n font-family: Quicksand, avenir, sans-serif;\\n}\\n\\nbody[data-theme=\\\"dark\\\"] {\\n color-scheme: dark;\\n --fg: white;\\n --bg: hsl(211, 31.9%, 13%);\\n --bg-rgb: 17,34,51;\\n --dialog-bg: hsl(210, 30%, 17%);\\n --key-bg-base: hsl(208.2, 23%, 25%);\\n --key-color-base: hsl(0, 0%, 90%);\\n --key-color-extreme: #e7e7e7;\\n}\\n@media (prefers-color-scheme: dark) {\\n body[data-theme=\\\"system\\\"] {\\n color-scheme: dark;\\n --fg: white;\\n --bg: hsl(211, 31.9%, 13%);\\n --bg-rgb: 17,34,51;\\n --dialog-bg: hsl(210, 30%, 17%);\\n --key-bg-base: hsl(208.2, 23%, 25%);\\n --key-color-base: hsl(0, 0%, 90%);\\n --key-color-extreme: #e7e7e7;\\n }\\n}\\n\\nh3 {\\n margin-bottom: 10px;\\n}\\n\\na { color: var(--link) }\\na:hover { color: var(--link-hover) }\\n\\ncode {\\n background-color: var(--code-bg);\\n border-radius: 2px;\\n padding: .15em .3em .05em;\\n}\\n\\np {\\n line-height: 1.3rem;\\n}\\n\\n#actions {\\n\\tposition: absolute;\\n display: flex;\\n\\tbottom: 5px;\\n\\tright: 5px;\\n gap: 4px;\\n}\\n\\n#actions button {\\n display: inline-block;\\n cursor: pointer;\\n background-color: var(--hover-selection);\\n color: white;\\n\\n font-size: 16px;\\n border: none;\\n border-radius: 5px;\\n padding: 0 5px;\\n\\n height: 30px;\\n line-height: 30px;\\n vertical-align: middle;\\n}\\n\\n#actions button[disabled] {\\n filter: saturate(20%);\\n opacity: .5;\\n cursor: not-allowed;\\n}\\n\\n#settings-bar {\\n position: absolute;\\n z-index: 5;\\n top: 10px;\\n right: 10px;\\n}\\n\\n#settings-bar button {\\n background: none;\\n color: var(--fg);\\n border: none;\\n}\\n#settings-bar button:hover {\\n cursor: pointer;\\n color: royalblue;\\n}\\n\\n.fa-delete-right::before {\\n content: '\\\\f55a';\\n transform-origin: center;\\n transform: rotateZ(180deg);\\n display: inline-block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"body {\\n margin: 0;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n\\ncode {\\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\\n monospace;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/index.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,SAAS;EACT,mCAAmC;EACnC,kCAAkC;AACpC;;AAEA;EACE;aACW;AACb\",\"sourcesContent\":[\"body {\\n margin: 0;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n\\ncode {\\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\\n monospace;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ZpdcqlK42OntJos3eGw0 {\\n background-color: var(--dialog-bg, var(--bg));\\n padding: 20px 40px;\\n max-width: 500px;\\n box-shadow: 0px 10px 25px rgba(0, 0, 0, 0.4);\\n border-radius: 3px;\\n border: 0.25px solid rgba(0, 0, 0, 0.4);\\n}\\n\\n.ZpdcqlK42OntJos3eGw0 > h2:first-child {\\n margin-top: 0;\\n}\\n\\n.ZpdcqlK42OntJos3eGw0 p, .ZpdcqlK42OntJos3eGw0 ul {\\n font-family: sans-serif;\\n line-height: 1.3rem;\\n}\\n\\n.Mywg1Gw3bKMc9Kd9qcEO {\\n display: block;\\n margin: 0 auto;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/dialog-box.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,6CAA6C;EAC7C,kBAAkB;EAClB,gBAAgB;EAChB,4CAA4C;EAC5C,kBAAkB;EAClB,uCAAuC;AACzC;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,cAAc;AAChB\",\"sourcesContent\":[\".dialog {\\n background-color: var(--dialog-bg, var(--bg));\\n padding: 20px 40px;\\n max-width: 500px;\\n box-shadow: 0px 10px 25px rgba(0, 0, 0, 0.4);\\n border-radius: 3px;\\n border: 0.25px solid rgba(0, 0, 0, 0.4);\\n}\\n\\n.dialog > h2:first-child {\\n margin-top: 0;\\n}\\n\\n.dialog p, .dialog ul {\\n font-family: sans-serif;\\n line-height: 1.3rem;\\n}\\n\\n.button {\\n display: block;\\n margin: 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"dialog\": \"ZpdcqlK42OntJos3eGw0\",\n\t\"button\": \"Mywg1Gw3bKMc9Kd9qcEO\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".J2R67AQeCK_aC1DKFCMJ {\\n margin: 4px;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/link.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;AACb\",\"sourcesContent\":[\".icon {\\n margin: 4px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"icon\": \"J2R67AQeCK_aC1DKFCMJ\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".Q5veln3l3laVkuNPs5dQ {\\n position: relative;\\n}\\n\\n.Q5veln3l3laVkuNPs5dQ pre {\\n white-space: pre;\\n background-color: var(--code-bg);\\n color: var(--key-color-base);\\n padding: 10px;\\n max-height: 320px;\\n overflow: scroll;\\n}\\n\\n.dqzgBwJ1Rq0XgMqeAKe7 {\\n position: absolute;\\n top: 15px;\\n right: 15px;\\n padding: 4px 7px;\\n color: var(--key-color-base);\\n background-color: var(--key-bg-base);\\n border: 1px solid var(--key-color-base);\\n border-radius: 3px;\\n}\\n.dqzgBwJ1Rq0XgMqeAKe7:hover {\\n cursor: pointer;\\n background-color: var(--selection);\\n border: var(--selection);\\n color: white;\\n}\\n\\n.YV2lKA9hbJpP4Vs4udw8 {\\n position: absolute;\\n top: 5px;\\n right: 0px;\\n background-color: var(--selection);\\n color: white;\\n padding: 10px;\\n border-radius: 2px;\\n cursor: none;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Dialogs/unexpected-error.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;EAChC,4BAA4B;EAC5B,aAAa;EACb,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,SAAS;EACT,WAAW;EACX,gBAAgB;EAChB,4BAA4B;EAC5B,oCAAoC;EACpC,uCAAuC;EACvC,kBAAkB;AACpB;AACA;EACE,eAAe;EACf,kCAAkC;EAClC,wBAAwB;EACxB,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,kCAAkC;EAClC,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,YAAY;AACd\",\"sourcesContent\":[\".stackTrace {\\n position: relative;\\n}\\n\\n.stackTrace pre {\\n white-space: pre;\\n background-color: var(--code-bg);\\n color: var(--key-color-base);\\n padding: 10px;\\n max-height: 320px;\\n overflow: scroll;\\n}\\n\\n.button {\\n position: absolute;\\n top: 15px;\\n right: 15px;\\n padding: 4px 7px;\\n color: var(--key-color-base);\\n background-color: var(--key-bg-base);\\n border: 1px solid var(--key-color-base);\\n border-radius: 3px;\\n}\\n.button:hover {\\n cursor: pointer;\\n background-color: var(--selection);\\n border: var(--selection);\\n color: white;\\n}\\n\\n.copyMessage {\\n position: absolute;\\n top: 5px;\\n right: 0px;\\n background-color: var(--selection);\\n color: white;\\n padding: 10px;\\n border-radius: 2px;\\n cursor: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"stackTrace\": \"Q5veln3l3laVkuNPs5dQ\",\n\t\"button\": \"dqzgBwJ1Rq0XgMqeAKe7\",\n\t\"copyMessage\": \"YV2lKA9hbJpP4Vs4udw8\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".D0BH39_6wwiclW8aKuoi {\\n display: inline-flex;\\n list-style-type: none;\\n margin: 0;\\n padding: 0;\\n}\\n.D0BH39_6wwiclW8aKuoi li {\\n cursor: pointer;\\n padding: 5px;\\n margin: 5px;\\n border-radius: 4px;\\n font-variant: small-caps;\\n}\\n.D0BH39_6wwiclW8aKuoi li.xwo6V7AWCmy8CDvuTwRg {\\n background-color: var(--selection);\\n color: white;\\n cursor: default;\\n}\\n\\n.nVbskEoaGxWf96qEgtxz {\\n position: absolute;\\n}\\n.nVbskEoaGxWf96qEgtxz > * {\\n width: 100% !important;\\n height: 100% !important;\\n}\\n\\n.Ae2s0eqIVhebTEcJGc3F {\\n position: relative\\n}\\n.Ae2s0eqIVhebTEcJGc3F::after {\\n content: 'beta';\\n background-color: var(--error-highlight);\\n color: white;\\n font-size: 12px;\\n font-weight: bold;\\n padding: 1px 3px;\\n border-radius: 6px;\\n position: absolute;\\n top: 0;\\n right: 0;\\n transform: translate(60%, -60%) rotate(13deg);\\n}\\n.xwo6V7AWCmy8CDvuTwRg .Ae2s0eqIVhebTEcJGc3F::after {\\n background-color: white;\\n color: var(--selection);\\n border: 1px solid var(--selection);\\n}\\n.sQQ0qFjHptJbQ8qvuXGa {\\n color: var(--error-highlight);\\n}\\n.D0BH39_6wwiclW8aKuoi li.xwo6V7AWCmy8CDvuTwRg.sQQ0qFjHptJbQ8qvuXGa {\\n background-color: var(--error-highlight);\\n color: white;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Keyboard/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,oBAAoB;EACpB,qBAAqB;EACrB,SAAS;EACT,UAAU;AACZ;AACA;EACE,eAAe;EACf,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,wBAAwB;AAC1B;AACA;EACE,kCAAkC;EAClC,YAAY;EACZ,eAAe;AACjB;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;EACE;AACF;AACA;EACE,eAAe;EACf,wCAAwC;EACxC,YAAY;EACZ,eAAe;EACf,iBAAiB;EACjB,gBAAgB;EAChB,kBAAkB;EAClB,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,6CAA6C;AAC/C;AACA;EACE,uBAAuB;EACvB,uBAAuB;EACvB,kCAAkC;AACpC;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,wCAAwC;EACxC,YAAY;AACd\",\"sourcesContent\":[\".editorModeTabs {\\n display: inline-flex;\\n list-style-type: none;\\n margin: 0;\\n padding: 0;\\n}\\n.editorModeTabs li {\\n cursor: pointer;\\n padding: 5px;\\n margin: 5px;\\n border-radius: 4px;\\n font-variant: small-caps;\\n}\\n.editorModeTabs li.activeEditTab {\\n background-color: var(--selection);\\n color: white;\\n cursor: default;\\n}\\n\\n.placer {\\n position: absolute;\\n}\\n.placer > * {\\n width: 100% !important;\\n height: 100% !important;\\n}\\n\\n.beta {\\n position: relative\\n}\\n.beta::after {\\n content: 'beta';\\n background-color: var(--error-highlight);\\n color: white;\\n font-size: 12px;\\n font-weight: bold;\\n padding: 1px 3px;\\n border-radius: 6px;\\n position: absolute;\\n top: 0;\\n right: 0;\\n transform: translate(60%, -60%) rotate(13deg);\\n}\\n.activeEditTab .beta::after {\\n background-color: white;\\n color: var(--selection);\\n border: 1px solid var(--selection);\\n}\\n.warningTab {\\n color: var(--error-highlight);\\n}\\n.editorModeTabs li.activeEditTab.warningTab {\\n background-color: var(--error-highlight);\\n color: white;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"editorModeTabs\": \"D0BH39_6wwiclW8aKuoi\",\n\t\"activeEditTab\": \"xwo6V7AWCmy8CDvuTwRg\",\n\t\"placer\": \"nVbskEoaGxWf96qEgtxz\",\n\t\"beta\": \"Ae2s0eqIVhebTEcJGc3F\",\n\t\"warningTab\": \"sQQ0qFjHptJbQ8qvuXGa\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".hY07j_e1kQx0WX5BwG6I {\\n display: flex;\\n flex-direction: row;\\n align-items: end;\\n gap: 5px;\\n margin: 5px;\\n height: 58px;\\n}\\n\\n._0h266lacmB1N_qDdQcy {\\n align-items: center;\\n}\\n\\n.hY07j_e1kQx0WX5BwG6I button {\\n height: 38px;\\n}\\n\\n.xwu_0RR7bcAhL2xRBstH {\\n font-style: italic;\\n max-width: 250px;\\n opacity: 0.6;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Sources/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,gBAAgB;EAChB,QAAQ;EACR,WAAW;EACX,YAAY;AACd;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,gBAAgB;EAChB,YAAY;AACd\",\"sourcesContent\":[\".wrapper {\\n display: flex;\\n flex-direction: row;\\n align-items: end;\\n gap: 5px;\\n margin: 5px;\\n height: 58px;\\n}\\n\\n.compact {\\n align-items: center;\\n}\\n\\n.wrapper button {\\n height: 38px;\\n}\\n\\n.sourceDescription {\\n font-style: italic;\\n max-width: 250px;\\n opacity: 0.6;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"wrapper\": \"hY07j_e1kQx0WX5BwG6I\",\n\t\"compact\": \"_0h266lacmB1N_qDdQcy\",\n\t\"sourceDescription\": \"xwu_0RR7bcAhL2xRBstH\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n._vWNIXMkemQax9rkCJQh {\\n display: inline-block;\\n position: absolute;\\n z-index: 100;\\n bottom: 5px;\\n left: 5px;\\n}\\n\\n._vWNIXMkemQax9rkCJQh label {\\n font-size: 75%;\\n font-style: italic;\\n display: block;\\n padding: 0 10px;\\n}\\n\\n.qiC2NrujE4ebqmHjzq0_ {\\n display: inline-block;\\n font-size: 110%;\\n font-style: italic;\\n background-color: var(--code-bg);\\n border-radius: 20px;\\n padding: 5px 10px;\\n text-decoration: none;\\n\\n color: royalblue;\\n}\\n.qiC2NrujE4ebqmHjzq0_:hover {\\n background-color: royalblue;\\n color: white;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles.module.css\"],\"names\":[],\"mappings\":\";AACA;EACE,qBAAqB;EACrB,kBAAkB;EAClB,YAAY;EACZ,WAAW;EACX,SAAS;AACX;;AAEA;EACE,cAAc;EACd,kBAAkB;EAClB,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,kBAAkB;EAClB,gCAAgC;EAChC,mBAAmB;EACnB,iBAAiB;EACjB,qBAAqB;;EAErB,gBAAgB;AAClB;AACA;EACE,2BAA2B;EAC3B,YAAY;AACd\",\"sourcesContent\":[\"\\n.wrapper {\\n display: inline-block;\\n position: absolute;\\n z-index: 100;\\n bottom: 5px;\\n left: 5px;\\n}\\n\\n.wrapper label {\\n font-size: 75%;\\n font-style: italic;\\n display: block;\\n padding: 0 10px;\\n}\\n\\n.githubLink {\\n display: inline-block;\\n font-size: 110%;\\n font-style: italic;\\n background-color: var(--code-bg);\\n border-radius: 20px;\\n padding: 5px 10px;\\n text-decoration: none;\\n\\n color: royalblue;\\n}\\n.githubLink:hover {\\n background-color: royalblue;\\n color: white;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"wrapper\": \"_vWNIXMkemQax9rkCJQh\",\n\t\"githubLink\": \"qiC2NrujE4ebqmHjzq0_\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","var map = {\n\t\"./catalog\": [\n\t\t51785\n\t],\n\t\"./catalog.json\": [\n\t\t51785\n\t],\n\t\"./keys_ar\": [\n\t\t73810,\n\t\t6392\n\t],\n\t\"./keys_ar.json\": [\n\t\t73810,\n\t\t6392\n\t],\n\t\"./keys_ar_102\": [\n\t\t78381,\n\t\t8017\n\t],\n\t\"./keys_ar_102.json\": [\n\t\t78381,\n\t\t8017\n\t],\n\t\"./keys_ar_azerty\": [\n\t\t56724,\n\t\t2650\n\t],\n\t\"./keys_ar_azerty.json\": [\n\t\t56724,\n\t\t2650\n\t],\n\t\"./keys_as\": [\n\t\t68045,\n\t\t9082\n\t],\n\t\"./keys_as.json\": [\n\t\t68045,\n\t\t9082\n\t],\n\t\"./keys_az\": [\n\t\t21708,\n\t\t8070\n\t],\n\t\"./keys_az.json\": [\n\t\t21708,\n\t\t8070\n\t],\n\t\"./keys_az_cyrillic\": [\n\t\t7200,\n\t\t8242\n\t],\n\t\"./keys_az_cyrillic.json\": [\n\t\t7200,\n\t\t8242\n\t],\n\t\"./keys_az_standard\": [\n\t\t2498,\n\t\t3647\n\t],\n\t\"./keys_az_standard.json\": [\n\t\t2498,\n\t\t3647\n\t],\n\t\"./keys_ba\": [\n\t\t24745,\n\t\t5332\n\t],\n\t\"./keys_ba.json\": [\n\t\t24745,\n\t\t5332\n\t],\n\t\"./keys_be\": [\n\t\t80468,\n\t\t308\n\t],\n\t\"./keys_be.json\": [\n\t\t80468,\n\t\t308\n\t],\n\t\"./keys_bg\": [\n\t\t87317,\n\t\t2408\n\t],\n\t\"./keys_bg.json\": [\n\t\t87317,\n\t\t2408\n\t],\n\t\"./keys_bg_latin\": [\n\t\t80885,\n\t\t421\n\t],\n\t\"./keys_bg_latin.json\": [\n\t\t80885,\n\t\t421\n\t],\n\t\"./keys_bg_phonetic\": [\n\t\t10220,\n\t\t4595\n\t],\n\t\"./keys_bg_phonetic.json\": [\n\t\t10220,\n\t\t4595\n\t],\n\t\"./keys_bm\": [\n\t\t71350,\n\t\t8956\n\t],\n\t\"./keys_bm.json\": [\n\t\t71350,\n\t\t8956\n\t],\n\t\"./keys_bn\": [\n\t\t99691,\n\t\t1480\n\t],\n\t\"./keys_bn.json\": [\n\t\t99691,\n\t\t1480\n\t],\n\t\"./keys_bn_inscript\": [\n\t\t31658,\n\t\t9142\n\t],\n\t\"./keys_bn_inscript.json\": [\n\t\t31658,\n\t\t9142\n\t],\n\t\"./keys_bo\": [\n\t\t29692,\n\t\t3282\n\t],\n\t\"./keys_bo.json\": [\n\t\t29692,\n\t\t3282\n\t],\n\t\"./keys_bs\": [\n\t\t5396,\n\t\t1315\n\t],\n\t\"./keys_bs.json\": [\n\t\t5396,\n\t\t1315\n\t],\n\t\"./keys_bug\": [\n\t\t15317,\n\t\t4443\n\t],\n\t\"./keys_bug.json\": [\n\t\t15317,\n\t\t4443\n\t],\n\t\"./keys_chr\": [\n\t\t8250,\n\t\t6943\n\t],\n\t\"./keys_chr.json\": [\n\t\t8250,\n\t\t6943\n\t],\n\t\"./keys_chr_phonetic\": [\n\t\t6221,\n\t\t4688\n\t],\n\t\"./keys_chr_phonetic.json\": [\n\t\t6221,\n\t\t4688\n\t],\n\t\"./keys_ckb\": [\n\t\t29448,\n\t\t1936\n\t],\n\t\"./keys_ckb.json\": [\n\t\t29448,\n\t\t1936\n\t],\n\t\"./keys_cs\": [\n\t\t98019,\n\t\t8207\n\t],\n\t\"./keys_cs.json\": [\n\t\t98019,\n\t\t8207\n\t],\n\t\"./keys_cs_programmers\": [\n\t\t7578,\n\t\t3735\n\t],\n\t\"./keys_cs_programmers.json\": [\n\t\t7578,\n\t\t3735\n\t],\n\t\"./keys_cs_qwerty\": [\n\t\t58733,\n\t\t2659\n\t],\n\t\"./keys_cs_qwerty.json\": [\n\t\t58733,\n\t\t2659\n\t],\n\t\"./keys_da\": [\n\t\t81460,\n\t\t6691\n\t],\n\t\"./keys_da.json\": [\n\t\t81460,\n\t\t6691\n\t],\n\t\"./keys_de\": [\n\t\t68013,\n\t\t3359\n\t],\n\t\"./keys_de.json\": [\n\t\t68013,\n\t\t3359\n\t],\n\t\"./keys_de_belgian\": [\n\t\t69798,\n\t\t9619\n\t],\n\t\"./keys_de_belgian.json\": [\n\t\t69798,\n\t\t9619\n\t],\n\t\"./keys_de_belgian_period\": [\n\t\t12991,\n\t\t1808\n\t],\n\t\"./keys_de_belgian_period.json\": [\n\t\t12991,\n\t\t1808\n\t],\n\t\"./keys_de_ibm\": [\n\t\t85155,\n\t\t1507\n\t],\n\t\"./keys_de_ibm.json\": [\n\t\t85155,\n\t\t1507\n\t],\n\t\"./keys_de_swiss\": [\n\t\t57153,\n\t\t6184\n\t],\n\t\"./keys_de_swiss.json\": [\n\t\t57153,\n\t\t6184\n\t],\n\t\"./keys_dsb\": [\n\t\t93859,\n\t\t9616\n\t],\n\t\"./keys_dsb.json\": [\n\t\t93859,\n\t\t9616\n\t],\n\t\"./keys_dsb_extended\": [\n\t\t45816,\n\t\t7686\n\t],\n\t\"./keys_dsb_extended.json\": [\n\t\t45816,\n\t\t7686\n\t],\n\t\"./keys_dv\": [\n\t\t60573,\n\t\t5485\n\t],\n\t\"./keys_dv.json\": [\n\t\t60573,\n\t\t5485\n\t],\n\t\"./keys_dvorak\": [\n\t\t17499,\n\t\t6157\n\t],\n\t\"./keys_dvorak.json\": [\n\t\t17499,\n\t\t6157\n\t],\n\t\"./keys_dvorak_left\": [\n\t\t5085,\n\t\t8793\n\t],\n\t\"./keys_dvorak_left.json\": [\n\t\t5085,\n\t\t8793\n\t],\n\t\"./keys_dvorak_right\": [\n\t\t43474,\n\t\t3362\n\t],\n\t\"./keys_dvorak_right.json\": [\n\t\t43474,\n\t\t3362\n\t],\n\t\"./keys_dyu\": [\n\t\t56817,\n\t\t749\n\t],\n\t\"./keys_dyu.json\": [\n\t\t56817,\n\t\t749\n\t],\n\t\"./keys_dz\": [\n\t\t3461,\n\t\t3893\n\t],\n\t\"./keys_dz.json\": [\n\t\t3461,\n\t\t3893\n\t],\n\t\"./keys_el\": [\n\t\t82182,\n\t\t1545\n\t],\n\t\"./keys_el.json\": [\n\t\t82182,\n\t\t1545\n\t],\n\t\"./keys_el_220\": [\n\t\t74695,\n\t\t3743\n\t],\n\t\"./keys_el_220.json\": [\n\t\t74695,\n\t\t3743\n\t],\n\t\"./keys_el_319\": [\n\t\t43615,\n\t\t4263\n\t],\n\t\"./keys_el_319.json\": [\n\t\t43615,\n\t\t4263\n\t],\n\t\"./keys_el_latin\": [\n\t\t61897,\n\t\t8971\n\t],\n\t\"./keys_el_latin.json\": [\n\t\t61897,\n\t\t8971\n\t],\n\t\"./keys_el_latin_220\": [\n\t\t52401,\n\t\t7603\n\t],\n\t\"./keys_el_latin_220.json\": [\n\t\t52401,\n\t\t7603\n\t],\n\t\"./keys_el_latin_319\": [\n\t\t70286,\n\t\t5821\n\t],\n\t\"./keys_el_latin_319.json\": [\n\t\t70286,\n\t\t5821\n\t],\n\t\"./keys_el_polytonic\": [\n\t\t19430,\n\t\t4296\n\t],\n\t\"./keys_el_polytonic.json\": [\n\t\t19430,\n\t\t4296\n\t],\n\t\"./keys_en_gb\": [\n\t\t85702,\n\t\t7495\n\t],\n\t\"./keys_en_gb.json\": [\n\t\t85702,\n\t\t7495\n\t],\n\t\"./keys_en_gb_extended\": [\n\t\t30206,\n\t\t1343\n\t],\n\t\"./keys_en_gb_extended.json\": [\n\t\t30206,\n\t\t1343\n\t],\n\t\"./keys_en_india\": [\n\t\t28440,\n\t\t8302\n\t],\n\t\"./keys_en_india.json\": [\n\t\t28440,\n\t\t8302\n\t],\n\t\"./keys_es\": [\n\t\t68633,\n\t\t771\n\t],\n\t\"./keys_es.json\": [\n\t\t68633,\n\t\t771\n\t],\n\t\"./keys_es_latin_american\": [\n\t\t67356,\n\t\t6429\n\t],\n\t\"./keys_es_latin_american.json\": [\n\t\t67356,\n\t\t6429\n\t],\n\t\"./keys_es_variation\": [\n\t\t73173,\n\t\t3033\n\t],\n\t\"./keys_es_variation.json\": [\n\t\t73173,\n\t\t3033\n\t],\n\t\"./keys_et\": [\n\t\t76498,\n\t\t7022\n\t],\n\t\"./keys_et.json\": [\n\t\t76498,\n\t\t7022\n\t],\n\t\"./keys_fa\": [\n\t\t76451,\n\t\t8599\n\t],\n\t\"./keys_fa.json\": [\n\t\t76451,\n\t\t8599\n\t],\n\t\"./keys_fa_standard\": [\n\t\t79355,\n\t\t819\n\t],\n\t\"./keys_fa_standard.json\": [\n\t\t79355,\n\t\t819\n\t],\n\t\"./keys_fi\": [\n\t\t36863,\n\t\t8706\n\t],\n\t\"./keys_fi.json\": [\n\t\t36863,\n\t\t8706\n\t],\n\t\"./keys_fi_sami\": [\n\t\t58592,\n\t\t9866\n\t],\n\t\"./keys_fi_sami.json\": [\n\t\t58592,\n\t\t9866\n\t],\n\t\"./keys_fo\": [\n\t\t48622,\n\t\t9586\n\t],\n\t\"./keys_fo.json\": [\n\t\t48622,\n\t\t9586\n\t],\n\t\"./keys_fr\": [\n\t\t50955,\n\t\t7554\n\t],\n\t\"./keys_fr.json\": [\n\t\t50955,\n\t\t7554\n\t],\n\t\"./keys_fr_belgian\": [\n\t\t39330,\n\t\t8855\n\t],\n\t\"./keys_fr_belgian.json\": [\n\t\t39330,\n\t\t8855\n\t],\n\t\"./keys_fr_belgian_period\": [\n\t\t17494,\n\t\t7950\n\t],\n\t\"./keys_fr_belgian_period.json\": [\n\t\t17494,\n\t\t7950\n\t],\n\t\"./keys_fr_canadian_french\": [\n\t\t74301,\n\t\t4491\n\t],\n\t\"./keys_fr_canadian_french.json\": [\n\t\t74301,\n\t\t4491\n\t],\n\t\"./keys_fr_canadian_standard\": [\n\t\t76297,\n\t\t8251\n\t],\n\t\"./keys_fr_canadian_standard.json\": [\n\t\t76297,\n\t\t8251\n\t],\n\t\"./keys_fr_swiss\": [\n\t\t41417,\n\t\t1514\n\t],\n\t\"./keys_fr_swiss.json\": [\n\t\t41417,\n\t\t1514\n\t],\n\t\"./keys_ga\": [\n\t\t47467,\n\t\t8185\n\t],\n\t\"./keys_ga.json\": [\n\t\t47467,\n\t\t8185\n\t],\n\t\"./keys_gd\": [\n\t\t50596,\n\t\t6457\n\t],\n\t\"./keys_gd.json\": [\n\t\t50596,\n\t\t6457\n\t],\n\t\"./keys_gn\": [\n\t\t78996,\n\t\t4289\n\t],\n\t\"./keys_gn.json\": [\n\t\t78996,\n\t\t4289\n\t],\n\t\"./keys_got\": [\n\t\t45327,\n\t\t9893\n\t],\n\t\"./keys_got.json\": [\n\t\t45327,\n\t\t9893\n\t],\n\t\"./keys_gu\": [\n\t\t21372,\n\t\t2787\n\t],\n\t\"./keys_gu.json\": [\n\t\t21372,\n\t\t2787\n\t],\n\t\"./keys_ha\": [\n\t\t28061,\n\t\t2982\n\t],\n\t\"./keys_ha.json\": [\n\t\t28061,\n\t\t2982\n\t],\n\t\"./keys_haw\": [\n\t\t63525,\n\t\t3618\n\t],\n\t\"./keys_haw.json\": [\n\t\t63525,\n\t\t3618\n\t],\n\t\"./keys_he\": [\n\t\t2357,\n\t\t7446\n\t],\n\t\"./keys_he.json\": [\n\t\t2357,\n\t\t7446\n\t],\n\t\"./keys_he_standard\": [\n\t\t58311,\n\t\t7108\n\t],\n\t\"./keys_he_standard.json\": [\n\t\t58311,\n\t\t7108\n\t],\n\t\"./keys_hi\": [\n\t\t55225,\n\t\t6688\n\t],\n\t\"./keys_hi.json\": [\n\t\t55225,\n\t\t6688\n\t],\n\t\"./keys_hi_traditional\": [\n\t\t48923,\n\t\t8119\n\t],\n\t\"./keys_hi_traditional.json\": [\n\t\t48923,\n\t\t8119\n\t],\n\t\"./keys_hu\": [\n\t\t4526,\n\t\t4156\n\t],\n\t\"./keys_hu.json\": [\n\t\t4526,\n\t\t4156\n\t],\n\t\"./keys_hu_101\": [\n\t\t3013,\n\t\t3322\n\t],\n\t\"./keys_hu_101.json\": [\n\t\t3013,\n\t\t3322\n\t],\n\t\"./keys_hy\": [\n\t\t15584,\n\t\t2015\n\t],\n\t\"./keys_hy.json\": [\n\t\t15584,\n\t\t2015\n\t],\n\t\"./keys_hy_phonetic\": [\n\t\t28860,\n\t\t9136\n\t],\n\t\"./keys_hy_phonetic.json\": [\n\t\t28860,\n\t\t9136\n\t],\n\t\"./keys_ig\": [\n\t\t4055,\n\t\t7892\n\t],\n\t\"./keys_ig.json\": [\n\t\t4055,\n\t\t7892\n\t],\n\t\"./keys_is\": [\n\t\t87591,\n\t\t5604\n\t],\n\t\"./keys_is.json\": [\n\t\t87591,\n\t\t5604\n\t],\n\t\"./keys_it\": [\n\t\t24277,\n\t\t4465\n\t],\n\t\"./keys_it.json\": [\n\t\t24277,\n\t\t4465\n\t],\n\t\"./keys_it_142\": [\n\t\t83333,\n\t\t833\n\t],\n\t\"./keys_it_142.json\": [\n\t\t83333,\n\t\t833\n\t],\n\t\"./keys_iu\": [\n\t\t79407,\n\t\t5840\n\t],\n\t\"./keys_iu.json\": [\n\t\t79407,\n\t\t5840\n\t],\n\t\"./keys_iu_latin\": [\n\t\t90290,\n\t\t9176\n\t],\n\t\"./keys_iu_latin.json\": [\n\t\t90290,\n\t\t9176\n\t],\n\t\"./keys_jv\": [\n\t\t83271,\n\t\t6710\n\t],\n\t\"./keys_jv.json\": [\n\t\t83271,\n\t\t6710\n\t],\n\t\"./keys_ka\": [\n\t\t36196,\n\t\t3687\n\t],\n\t\"./keys_ka.json\": [\n\t\t36196,\n\t\t3687\n\t],\n\t\"./keys_ka_ergonomic\": [\n\t\t76892,\n\t\t9698\n\t],\n\t\"./keys_ka_ergonomic.json\": [\n\t\t76892,\n\t\t9698\n\t],\n\t\"./keys_ka_qwerty\": [\n\t\t84211,\n\t\t2621\n\t],\n\t\"./keys_ka_qwerty.json\": [\n\t\t84211,\n\t\t2621\n\t],\n\t\"./keys_khb\": [\n\t\t93128,\n\t\t5842\n\t],\n\t\"./keys_khb.json\": [\n\t\t93128,\n\t\t5842\n\t],\n\t\"./keys_khb_tai_le\": [\n\t\t16011,\n\t\t539\n\t],\n\t\"./keys_khb_tai_le.json\": [\n\t\t16011,\n\t\t539\n\t],\n\t\"./keys_kk\": [\n\t\t81713,\n\t\t951\n\t],\n\t\"./keys_kk.json\": [\n\t\t81713,\n\t\t951\n\t],\n\t\"./keys_kl\": [\n\t\t87006,\n\t\t7303\n\t],\n\t\"./keys_kl.json\": [\n\t\t87006,\n\t\t7303\n\t],\n\t\"./keys_km\": [\n\t\t86151,\n\t\t6794\n\t],\n\t\"./keys_km.json\": [\n\t\t86151,\n\t\t6794\n\t],\n\t\"./keys_km_nida\": [\n\t\t91831,\n\t\t3268\n\t],\n\t\"./keys_km_nida.json\": [\n\t\t91831,\n\t\t3268\n\t],\n\t\"./keys_kn\": [\n\t\t88868,\n\t\t8709\n\t],\n\t\"./keys_kn.json\": [\n\t\t88868,\n\t\t8709\n\t],\n\t\"./keys_ko\": [\n\t\t96130,\n\t\t8427\n\t],\n\t\"./keys_ko.json\": [\n\t\t96130,\n\t\t8427\n\t],\n\t\"./keys_ky\": [\n\t\t49911,\n\t\t9244\n\t],\n\t\"./keys_ky.json\": [\n\t\t49911,\n\t\t9244\n\t],\n\t\"./keys_la_old_italic\": [\n\t\t72596,\n\t\t8438\n\t],\n\t\"./keys_la_old_italic.json\": [\n\t\t72596,\n\t\t8438\n\t],\n\t\"./keys_lb\": [\n\t\t6012,\n\t\t5606\n\t],\n\t\"./keys_lb.json\": [\n\t\t6012,\n\t\t5606\n\t],\n\t\"./keys_lis\": [\n\t\t86353,\n\t\t8945\n\t],\n\t\"./keys_lis.json\": [\n\t\t86353,\n\t\t8945\n\t],\n\t\"./keys_lis_standard\": [\n\t\t70912,\n\t\t4887\n\t],\n\t\"./keys_lis_standard.json\": [\n\t\t70912,\n\t\t4887\n\t],\n\t\"./keys_lo\": [\n\t\t34659,\n\t\t398\n\t],\n\t\"./keys_lo.json\": [\n\t\t34659,\n\t\t398\n\t],\n\t\"./keys_lt\": [\n\t\t92979,\n\t\t7771\n\t],\n\t\"./keys_lt.json\": [\n\t\t92979,\n\t\t7771\n\t],\n\t\"./keys_lt_ibm\": [\n\t\t90075,\n\t\t129\n\t],\n\t\"./keys_lt_ibm.json\": [\n\t\t90075,\n\t\t129\n\t],\n\t\"./keys_lt_standard\": [\n\t\t70040,\n\t\t3746\n\t],\n\t\"./keys_lt_standard.json\": [\n\t\t70040,\n\t\t3746\n\t],\n\t\"./keys_lv\": [\n\t\t25622,\n\t\t1671\n\t],\n\t\"./keys_lv.json\": [\n\t\t25622,\n\t\t1671\n\t],\n\t\"./keys_lv_qwerty\": [\n\t\t70689,\n\t\t6777\n\t],\n\t\"./keys_lv_qwerty.json\": [\n\t\t70689,\n\t\t6777\n\t],\n\t\"./keys_lv_standard\": [\n\t\t68148,\n\t\t9081\n\t],\n\t\"./keys_lv_standard.json\": [\n\t\t68148,\n\t\t9081\n\t],\n\t\"./keys_man\": [\n\t\t95287,\n\t\t1156\n\t],\n\t\"./keys_man.json\": [\n\t\t95287,\n\t\t1156\n\t],\n\t\"./keys_mi\": [\n\t\t97585,\n\t\t9512\n\t],\n\t\"./keys_mi.json\": [\n\t\t97585,\n\t\t9512\n\t],\n\t\"./keys_mk\": [\n\t\t8069,\n\t\t8041\n\t],\n\t\"./keys_mk.json\": [\n\t\t8069,\n\t\t8041\n\t],\n\t\"./keys_ml\": [\n\t\t79302,\n\t\t1547\n\t],\n\t\"./keys_ml.json\": [\n\t\t79302,\n\t\t1547\n\t],\n\t\"./keys_mn\": [\n\t\t78647,\n\t\t389\n\t],\n\t\"./keys_mn.json\": [\n\t\t78647,\n\t\t389\n\t],\n\t\"./keys_mn_phags_pa\": [\n\t\t94641,\n\t\t3194\n\t],\n\t\"./keys_mn_phags_pa.json\": [\n\t\t94641,\n\t\t3194\n\t],\n\t\"./keys_mn_traditional\": [\n\t\t1301,\n\t\t8568\n\t],\n\t\"./keys_mn_traditional.json\": [\n\t\t1301,\n\t\t8568\n\t],\n\t\"./keys_mr\": [\n\t\t28928,\n\t\t2247\n\t],\n\t\"./keys_mr.json\": [\n\t\t28928,\n\t\t2247\n\t],\n\t\"./keys_mt\": [\n\t\t5848,\n\t\t7568\n\t],\n\t\"./keys_mt.json\": [\n\t\t5848,\n\t\t7568\n\t],\n\t\"./keys_mt_101\": [\n\t\t10244,\n\t\t3880\n\t],\n\t\"./keys_mt_101.json\": [\n\t\t10244,\n\t\t3880\n\t],\n\t\"./keys_my\": [\n\t\t14052,\n\t\t5015\n\t],\n\t\"./keys_my.json\": [\n\t\t14052,\n\t\t5015\n\t],\n\t\"./keys_nb\": [\n\t\t56360,\n\t\t4919\n\t],\n\t\"./keys_nb.json\": [\n\t\t56360,\n\t\t4919\n\t],\n\t\"./keys_nb_sami\": [\n\t\t96408,\n\t\t8636\n\t],\n\t\"./keys_nb_sami.json\": [\n\t\t96408,\n\t\t8636\n\t],\n\t\"./keys_ne\": [\n\t\t97192,\n\t\t4892\n\t],\n\t\"./keys_ne.json\": [\n\t\t97192,\n\t\t4892\n\t],\n\t\"./keys_nl\": [\n\t\t37853,\n\t\t6415\n\t],\n\t\"./keys_nl.json\": [\n\t\t37853,\n\t\t6415\n\t],\n\t\"./keys_nl_period\": [\n\t\t80045,\n\t\t2271\n\t],\n\t\"./keys_nl_period.json\": [\n\t\t80045,\n\t\t2271\n\t],\n\t\"./keys_non\": [\n\t\t50248,\n\t\t5991\n\t],\n\t\"./keys_non.json\": [\n\t\t50248,\n\t\t5991\n\t],\n\t\"./keys_nso\": [\n\t\t34757,\n\t\t8307\n\t],\n\t\"./keys_nso.json\": [\n\t\t34757,\n\t\t8307\n\t],\n\t\"./keys_or\": [\n\t\t40914,\n\t\t2383\n\t],\n\t\"./keys_or.json\": [\n\t\t40914,\n\t\t2383\n\t],\n\t\"./keys_pa\": [\n\t\t51095,\n\t\t9989\n\t],\n\t\"./keys_pa.json\": [\n\t\t51095,\n\t\t9989\n\t],\n\t\"./keys_pl\": [\n\t\t91654,\n\t\t8391\n\t],\n\t\"./keys_pl.json\": [\n\t\t91654,\n\t\t8391\n\t],\n\t\"./keys_pl_programmers\": [\n\t\t188,\n\t\t920\n\t],\n\t\"./keys_pl_programmers.json\": [\n\t\t188,\n\t\t920\n\t],\n\t\"./keys_ps\": [\n\t\t65138,\n\t\t6049\n\t],\n\t\"./keys_ps.json\": [\n\t\t65138,\n\t\t6049\n\t],\n\t\"./keys_pt\": [\n\t\t33474,\n\t\t4821\n\t],\n\t\"./keys_pt.json\": [\n\t\t33474,\n\t\t4821\n\t],\n\t\"./keys_pt_abnt\": [\n\t\t84986,\n\t\t1872\n\t],\n\t\"./keys_pt_abnt.json\": [\n\t\t84986,\n\t\t1872\n\t],\n\t\"./keys_pt_abnt2\": [\n\t\t50167,\n\t\t9112\n\t],\n\t\"./keys_pt_abnt2.json\": [\n\t\t50167,\n\t\t9112\n\t],\n\t\"./keys_ro\": [\n\t\t35695,\n\t\t68\n\t],\n\t\"./keys_ro.json\": [\n\t\t35695,\n\t\t68\n\t],\n\t\"./keys_ro_programmers\": [\n\t\t53693,\n\t\t4795\n\t],\n\t\"./keys_ro_programmers.json\": [\n\t\t53693,\n\t\t4795\n\t],\n\t\"./keys_ru\": [\n\t\t62672,\n\t\t8986\n\t],\n\t\"./keys_ru.json\": [\n\t\t62672,\n\t\t8986\n\t],\n\t\"./keys_ru_phonetic\": [\n\t\t48927,\n\t\t7292\n\t],\n\t\"./keys_ru_phonetic.json\": [\n\t\t48927,\n\t\t7292\n\t],\n\t\"./keys_sah\": [\n\t\t75234,\n\t\t7289\n\t],\n\t\"./keys_sah.json\": [\n\t\t75234,\n\t\t7289\n\t],\n\t\"./keys_sat\": [\n\t\t767,\n\t\t9414\n\t],\n\t\"./keys_sat.json\": [\n\t\t767,\n\t\t9414\n\t],\n\t\"./keys_se\": [\n\t\t31828,\n\t\t8019\n\t],\n\t\"./keys_se.json\": [\n\t\t31828,\n\t\t8019\n\t],\n\t\"./keys_se_finland_sweden\": [\n\t\t44292,\n\t\t8699\n\t],\n\t\"./keys_se_finland_sweden.json\": [\n\t\t44292,\n\t\t8699\n\t],\n\t\"./keys_si\": [\n\t\t39915,\n\t\t9707\n\t],\n\t\"./keys_si.json\": [\n\t\t39915,\n\t\t9707\n\t],\n\t\"./keys_sk\": [\n\t\t49999,\n\t\t7803\n\t],\n\t\"./keys_sk.json\": [\n\t\t49999,\n\t\t7803\n\t],\n\t\"./keys_sk_qwerty\": [\n\t\t92153,\n\t\t1720\n\t],\n\t\"./keys_sk_qwerty.json\": [\n\t\t92153,\n\t\t1720\n\t],\n\t\"./keys_sl\": [\n\t\t11998,\n\t\t5715\n\t],\n\t\"./keys_sl.json\": [\n\t\t11998,\n\t\t5715\n\t],\n\t\"./keys_so\": [\n\t\t32727,\n\t\t9193\n\t],\n\t\"./keys_so.json\": [\n\t\t32727,\n\t\t9193\n\t],\n\t\"./keys_sq\": [\n\t\t93752,\n\t\t8173\n\t],\n\t\"./keys_sq.json\": [\n\t\t93752,\n\t\t8173\n\t],\n\t\"./keys_sr\": [\n\t\t45358,\n\t\t2231\n\t],\n\t\"./keys_sr.json\": [\n\t\t45358,\n\t\t2231\n\t],\n\t\"./keys_sr_latin\": [\n\t\t80121,\n\t\t578\n\t],\n\t\"./keys_sr_latin.json\": [\n\t\t80121,\n\t\t578\n\t],\n\t\"./keys_srb\": [\n\t\t929,\n\t\t5354\n\t],\n\t\"./keys_srb.json\": [\n\t\t929,\n\t\t5354\n\t],\n\t\"./keys_sv\": [\n\t\t74243,\n\t\t8649\n\t],\n\t\"./keys_sv.json\": [\n\t\t74243,\n\t\t8649\n\t],\n\t\"./keys_sv_sami\": [\n\t\t26330,\n\t\t4717\n\t],\n\t\"./keys_sv_sami.json\": [\n\t\t26330,\n\t\t4717\n\t],\n\t\"./keys_syr\": [\n\t\t20591,\n\t\t4777\n\t],\n\t\"./keys_syr.json\": [\n\t\t20591,\n\t\t4777\n\t],\n\t\"./keys_syr_phonetic\": [\n\t\t85609,\n\t\t2619\n\t],\n\t\"./keys_syr_phonetic.json\": [\n\t\t85609,\n\t\t2619\n\t],\n\t\"./keys_ta\": [\n\t\t17843,\n\t\t4036\n\t],\n\t\"./keys_ta.json\": [\n\t\t17843,\n\t\t4036\n\t],\n\t\"./keys_te\": [\n\t\t69130,\n\t\t4824\n\t],\n\t\"./keys_te.json\": [\n\t\t69130,\n\t\t4824\n\t],\n\t\"./keys_tg\": [\n\t\t79797,\n\t\t3393\n\t],\n\t\"./keys_tg.json\": [\n\t\t79797,\n\t\t3393\n\t],\n\t\"./keys_th\": [\n\t\t70732,\n\t\t6684\n\t],\n\t\"./keys_th.json\": [\n\t\t70732,\n\t\t6684\n\t],\n\t\"./keys_th_pattachote\": [\n\t\t85219,\n\t\t422\n\t],\n\t\"./keys_th_pattachote.json\": [\n\t\t85219,\n\t\t422\n\t],\n\t\"./keys_tk\": [\n\t\t31794,\n\t\t2275\n\t],\n\t\"./keys_tk.json\": [\n\t\t31794,\n\t\t2275\n\t],\n\t\"./keys_tmh\": [\n\t\t89416,\n\t\t2835\n\t],\n\t\"./keys_tmh.json\": [\n\t\t89416,\n\t\t2835\n\t],\n\t\"./keys_tmh_extended\": [\n\t\t33866,\n\t\t8110\n\t],\n\t\"./keys_tmh_extended.json\": [\n\t\t33866,\n\t\t8110\n\t],\n\t\"./keys_tn\": [\n\t\t79848,\n\t\t4257\n\t],\n\t\"./keys_tn.json\": [\n\t\t79848,\n\t\t4257\n\t],\n\t\"./keys_tr\": [\n\t\t32066,\n\t\t5303\n\t],\n\t\"./keys_tr.json\": [\n\t\t32066,\n\t\t5303\n\t],\n\t\"./keys_tr_f\": [\n\t\t77176,\n\t\t4670\n\t],\n\t\"./keys_tr_f.json\": [\n\t\t77176,\n\t\t4670\n\t],\n\t\"./keys_tt\": [\n\t\t13069,\n\t\t7305\n\t],\n\t\"./keys_tt.json\": [\n\t\t13069,\n\t\t7305\n\t],\n\t\"./keys_tzm\": [\n\t\t93917,\n\t\t814\n\t],\n\t\"./keys_tzm.json\": [\n\t\t93917,\n\t\t814\n\t],\n\t\"./keys_ug\": [\n\t\t29436,\n\t\t3474\n\t],\n\t\"./keys_ug.json\": [\n\t\t29436,\n\t\t3474\n\t],\n\t\"./keys_uk\": [\n\t\t18936,\n\t\t2602\n\t],\n\t\"./keys_uk.json\": [\n\t\t18936,\n\t\t2602\n\t],\n\t\"./keys_uk_enhanced\": [\n\t\t60895,\n\t\t7228\n\t],\n\t\"./keys_uk_enhanced.json\": [\n\t\t60895,\n\t\t7228\n\t],\n\t\"./keys_ur\": [\n\t\t48883,\n\t\t8216\n\t],\n\t\"./keys_ur.json\": [\n\t\t48883,\n\t\t8216\n\t],\n\t\"./keys_us_international\": [\n\t\t61141,\n\t\t2947\n\t],\n\t\"./keys_us_international.json\": [\n\t\t61141,\n\t\t2947\n\t],\n\t\"./keys_uz\": [\n\t\t8196,\n\t\t7080\n\t],\n\t\"./keys_uz.json\": [\n\t\t8196,\n\t\t7080\n\t],\n\t\"./keys_vi\": [\n\t\t88305,\n\t\t7994\n\t],\n\t\"./keys_vi.json\": [\n\t\t88305,\n\t\t7994\n\t],\n\t\"./keys_wo\": [\n\t\t97528,\n\t\t7069\n\t],\n\t\"./keys_wo.json\": [\n\t\t97528,\n\t\t7069\n\t],\n\t\"./keys_yo\": [\n\t\t8962,\n\t\t5998\n\t],\n\t\"./keys_yo.json\": [\n\t\t8962,\n\t\t5998\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 34366;\nmodule.exports = webpackAsyncContext;"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","DialogBox","props","dismissText","classes","onDismiss","children","rest","className","styles","join","onClick","faCollections","brands","default","regular","light","solid","round","Icon","name","collection","iconProps","groupClass","iconClass","propTypes","PropTypes","defaultProps","IconButton","icon","text","Link","href","external","showExternal","properties","Object","assign","rel","target","isRequired","wrapper","position","top","left","width","height","backgroundColor","backdropFilter","zIndex","display","justifyContent","alignItems","centerOnly","background","pointerEvents","content","Modal","useRef","handleClick","useCallback","e","current","contains","stopPropagation","style","ReactDOM","ref","document","getElementById","useModalState","useState","isOpen","setIsOpen","event","useToggle","initialState","toggleState","setToggleState","state","i","DefinitionsContext","createContext","keycodes","behaviours","behaviors","behaviorBinds","glyphs","selectDefinitions","definitions","DefinitionsContextProvider","useSelector","dispatch","useDispatch","useEffect","Promise","all","loadKeycodes","loadBehaviourBindings","schemas","cloneDeep","bindings","indexed","keyBy","context","none","filter","macros","encoders","byContext","type","Provider","value","behaviorSchemas","behaviorBindings","keycodeGlyphs","normalizeZmkKeycodes","LayoutContext","layout","bindingCount","wrapperDimensions","wrapperStyle","LayoutContextProvider","useMemo","length","getWrapperDimensions","getWrapperStyle","GitHubIssuesLink","GitHubWikiLayoutsLink","layoutToolsLink","DiscordProfileLink","GeneralHelpOfferCopy","KeymapLayoutResources","selectBehaviors","keyboard","keymap","selectNodePhandleArrays","node","compatible","parsed","raw","replace","selectNodeCompatible","schema","keys","reduce","phandleArrays","prop","propSchema","propValues","push","behaviorsSlice","createSlice","reducers","addBehavior","action","payload","behavior","updateBehavior","behaviorIndex","deleteBehavior","splice","extraReducers","builder","addCase","layerIndexChanged","makeLayerIndexChangeReducer","actions","selectCombos","combos","combosSlice","updateComboBinding","comboIndex","updateComboKeypositions","keyPositions","createCombo","labels","params","renameCombo","index","deleteCombo","customizeCombo","combo","comboBindingsReducer","positionMapping","layers","newIndex","makeLayerParamsIterator","selectLayerParamsFromBinding","binding","behaviorParameters","getBindingSlots","layerParams","param","createAction","currentIndex","targetIndex","searchContext","definitionsContext","layerIndices","map","bothBefore","bothAfter","betweenOldAndNew","createLayerIndexMapping","sources","defaultSelectPhandleArrays","selectPhandleArrays","defines","selectedIndex","get","Number","isNaN","toString","_isPlaceholder","DEFAULT_BIND_BEHAVIOUR","selectLayers","layersSlice","createLayer","times","createEmptyBinding","updateLayerMetadata","layerIndex","label","renameLayer","repositionLayer","layer","replacementIndex","deleteLayer","updateKeyBinding","bindIndex","updateSensorBindings","sensorIndex","undefinedStart","indexOf","rebindTransparentToKeyPress","rebindTransparentToNone","rebindNoneToKeypress","rebindNoneToTransparent","rebindEmptyKeypressToTransparent","rebindEmptyKeypressToNone","selectMacros","macrosSlice","addMacro","deleteMacro","updateMacroBindings","customizeMacroOptions","macroIndex","getLayoutPolygons","scale","key","transformKeyPolygon","x","y","u","w","h","rx","ry","a","r","getKeyBoundingBox","max","Math","layoutOrBBox","overrides","bbox","Array","isArray","margin","padding","Control","lineHeight","Button","darkModePreference","window","matchMedia","invertedThemeColors","colors","Select","extraChildren","theme","isDark","matches","fontSize","color","container","baseStyles","menu","components","MenuList","c","isSearchable","primary25","websocketUrl","config","API","url","startsWith","headers","this","token","Authorization","axios","response","status","console","error","emit","initializing","initEvents","installationUrl","URLSearchParams","location","search","beginLoginFlow","setTimeout","localStorage","auth_token","history","replaceState","pathname","_request","data","suspended","installations","installation","suspended_at","warn","username","repositories","repoInstallationMap","bufferedMessages","send","message","socket","readyState","WebSocket","OPEN","log","onopen","Date","shift","flush","setInterval","JSON","stringify","onclose","onerror","err","onmessage","parse","workflow_run","on","fetchAvailableFeatures","removeItem","installationId","find","id","html_url","every","some","repository_selection","repo","encodeURIComponent","full_name","repository","branch","URL","query","set","layouts","info","defaultLayout","preferredLayout","chosen","layoutMetadata","keyboards","defaultKeymap","sensors","isGitHubAuthorized","betaFeatures","features","experimentalSettings","enableBehaviorEditing","method","EventEmitter","api","parseBoolean","val","includes","toLowerCase","apiBaseUrl","process","githubAppName","enableGitHub","enableLocal","enableDemo","enableClipboard","enableFileSystem","useLocaleDefinitions","loadedLocales","setLoadedLocales","locales","acc","header","localeCatalog","loaded","locale","filename","useContext","settings","SettingsContext","localeKeycodes","mergedGlyphs","isMac","navigator","platform","isWin","getMergedGlyphs","unicode","platformGlyphs","extendedBehaviours","customBehaviors","code","mergeBehaviorOverlays","behaviorOverlays","fullList","description","bind","displayName","macro","resolveBehaviorParams","availableLayers","isEmpty","keycodesList","keycode","keycodesIndexed","glyph","aliases","alias","symbol","faIcon","modifiers","behavioursByContext","searchTargets","behaviour","getSearchTargets","enum","option","identifiers","bindShape","sanityCheckPosiitions","row","col","selectName","item","selectBind","selectLabel","getDuplicatesBy","itemsByKey","groupBy","values","group","sanityCheckNodeNames","layerNames","path","comboNames","macroNames","behaviorNames","getBehaviorNodeNames","duplicates","redefined","reservedIdentifiers","passwordMacros","pattern","match","sanityCheckNodeLabels","concat","getBehaviorLabels","sanityCheckNodeReferences","nodesByRef","getBehaviorReferences","nodes","sanityCheckDeprecations","resetBindings","deprecations","forEach","j","Behaviors","lazy","ComboEditor","LayerEditor","MacroEditor","Warnings","Tabs","tabs","defaultTab","activeTab","setActiveTab","tab","tabClasses","compact","Suspense","selectKeymap","Keyboard","sanityChecks","nodeNames","nodeLabels","nodeReferences","layoutMissingPositions","sanityCheckLayout","sanityCheck","warningCount","component","Fragment","keymapProptypes","repositoryUrl","GitHubLink","fontStyle","Settings","onUpdate","onClose","handleUpdateSetting","htmlFor","checked","unicodeGlyphs","onChange","SuggestAutoLayoutTweak","KeymapBindingsUsePreprocessorMacros","KeymapParsingFailed","KeymapUsingMiryoku","MissingRootNode","ZmkNodefreeConfig","sourceChoices","collapsible","isBeta","showOpenFilePicker","selectedSource","getItem","defaultSource","source","LocalPicker","DemoPicker","GithubPicker","ClipboardPicker","FileSystemPicker","keyboardSelector","KeyboardPicker","onSelect","wrapperRef","setSource","autoGenerated","setLayoutInfo","showDialog","setShowDialog","closeDialog","isExpanded","setExpanded","setCompact","showLayoutHelp","callback","enabled","isInDocument","body","isInWrapper","addEventListener","removeEventListener","useClickOutsideHandler","handleSelectSource","choice","handleKeyboardSelected","warningFlags","getErrorDialog","handleError","dialog","dialogProps","setItem","classNames","getOptionLabel","getOptionValue","formatOptionLabel","Beta","onError","expanded","onExpand","fontWeight","borderRadius","verticalAlign","formatStackFrame","frame","fileName","lineNumber","columnNumber","newGithubIssue","reportError","stacktrace","fetch","ok","UnexpectedError","stack","setStack","formattedError","setFormattedError","copied","setCopied","StackTrace","fromError","parseStack","trim","formatErrorText","maxWidth","title","clipboard","writeText","then","Error","ErrorBoundary","React","KeymapSaveFailed","sourceOther","saveError","settingsVisible","github","handler","run","head_branch","build","other","handleUpdateSettings","openSettingsDialog","SourcePicker","dark","system","Definitions","Layout","init","_unmodifiedKeymap","saving","commitDialogOpen","latestBuild","INITIAL_STATE","keyboardReducer","combineReducers","behaviorsReducer","layersReducer","combosReducer","macrosReducer","configureStore","reducer","newState","newKeyboardState","pick","stripLegacyProperties","selectKeyboard","newKeymapState","unsaved","keymapSaveSuccess","themes","at","dataset","cycleTheme","appReducer","preloadedState","render","store","DEFAULT_SIZE","DEFAULT_PADDING","getComputedParams","size","rotation","getKeyStyles","transformOrigin","transform","point","angle","PI","cos","sin","transformed","xValues","yValues","min","shortestAlias","sort","b","fnPattern","names","fnCode","v","base","isModifier","split","basic","platforms","mac","win","overlay","additional","parsedParams","slots","firstParsedParam","firstSlot","additionalParams","getAdditionalParams","SearchContext","___CSS_LOADER_EXPORT___","module","locals","webpackAsyncContext","req","__webpack_require__","o","resolve","ids","slice","t","exports"],"sourceRoot":""}