1
|
{"version":3,"file":"main.2e1001a9d9c858bd360c.js","mappings":"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AED,qBAAsB,CACrB,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,qBAAsB,CACrB,KACA,MAED,0BAA2B,CAC1B,KACA,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,MAED,uBAAwB,CACvB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,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,KAED,uBAAwB,CACvB,MACA,KAED,aAAc,CACb,MACA,KAED,kBAAmB,CAClB,MACA,KAED,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,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,gBAAiB,CAChB,MACA,KAED,qBAAsB,CACrB,MACA,KAED,gBAAiB,CAChB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,kBAAmB,CAClB,MACA,KAED,uBAAwB,CACvB,MACA,KAED,sBAAuB,CACtB,MACA,IAED,2BAA4B,CAC3B,MACA,IAED,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,MAED,iBAAkB,CACjB,MACA,MAED,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,MAED,0BAA2B,CAC1B,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,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,KAED,mCAAoC,CACnC,MACA,KAED,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,IAED,kBAAmB,CAClB,MACA,IAED,YAAa,CACZ,KACA,MAED,iBAAkB,CACjB,KACA,MAED,qBAAsB,CACrB,MACA,KAED,0BAA2B,CAC1B,MACA,KAED,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,KAED,qBAAsB,CACrB,KACA,KAED,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,MAED,qBAAsB,CACrB,MACA,MAED,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,MAED,yBAA0B,CACzB,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,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,KAED,iBAAkB,CACjB,KACA,KAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,sBAAuB,CACtB,MACA,KAED,2BAA4B,CAC3B,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,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,MAED,iBAAkB,CACjB,MACA,MAED,qBAAsB,CACrB,MACA,KAED,0BAA2B,CAC1B,MACA,KAED,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,KAED,iBAAkB,CACjB,MACA,KAED,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,KAED,iBAAkB,CACjB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,wBAAyB,CACxB,IACA,MAED,6BAA8B,CAC7B,IACA,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,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,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,IAED,iBAAkB,CACjB,MACA,IAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,uBAAwB,CACvB,MACA,MAED,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,KAED,2BAA4B,CAC3B,MACA,KAED,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,MAED,4BAA6B,CAC5B,MACA,MAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,KAED,kBAAmB,CAClB,MACA,KAED,sBAAuB,CACtB,MACA,KAED,2BAA4B,CAC3B,MACA,KAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,YAAa,CACZ,MACA,MAED,iBAAkB,CACjB,MACA,MAED,cAAe,CACd,MACA,MAED,mBAAoB,CACnB,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,YAAa,CACZ,MACA,KAED,iBAAkB,CACjB,MACA,KAED,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,SAAS0gB,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAE7gB,EAAK2gB,GAC9B,OAAOtnB,QAAQynB,UAAUzF,MAAK,WAC7B,IAAI/jB,EAAI,IAAI+W,MAAM,uBAAyBsS,EAAM,KAEjD,MADArpB,EAAEmZ,KAAO,mBACHnZ,CACP,IAGD,IAAIypB,EAAM/gB,EAAI2gB,GAAMha,EAAKoa,EAAI,GAC7B,OAAO1nB,QAAQC,IAAIynB,EAAIta,MAAM,GAAGzG,IAAI4gB,EAAoBtpB,IAAI+jB,MAAK,WAChE,OAAOuF,EAAoBI,EAAEra,EAAI,GAClC,GACD,CACA+Z,EAAoBpkB,KAAO,WAAa,OAAOzG,OAAOyG,KAAK0D,EAAM,EACjE0gB,EAAoB/Z,GAAK,MACzB6Z,EAAOS,QAAUP","sources":["webpack:///./src/Common/action-button.module.css?ed83","webpack:///./src/Common/ActionButton.js","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/spinner.module.css?7e51","webpack:///./src/Common/Spinner.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/BuildLink.js","webpack:///./src/Sources/Github/Dialogs/Commit.js","webpack:///./src/Sources/Github/Actions.js","webpack:///./src/Sources/Github/api.js","webpack:///./src/Sources/Local/api.js","webpack:///./src/config.js","webpack:///./src/index.css?cfe4","webpack:///./src/App.css?d9cd","webpack:///./src/Keyboard/Context.js","webpack:///./src/Keyboard/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/Sources/sources.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/Dialogs/SuggestAutoLayoutTweak.js","webpack:///./src/Sources/styles.module.css?2b76","webpack:///./src/Sources/SourcePicker.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/action-button.module.css","webpack:///./src/Common/dialog-box.module.css","webpack:///./src/Common/link.module.css","webpack:///./src/Common/spinner.module.css","webpack:///./src/Dialogs/unexpected-error.module.css","webpack:///./src/Keyboard/styles.module.css","webpack:///./src/Sources/Github/styles.module.css","webpack:///./src/Sources/styles.module.css","webpack:///./src/styles.module.css","webpack:///./src/Keyboard/styles.module.css?75da","webpack:///./src/Sources/Github/styles.module.css?529c","webpack:///./node_modules/zmk-data/data/locales/ lazy ^\\.\\/.*$ include: \\.json$ chunkName: locale-[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]!./action-button.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]!./action-button.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import styles from './action-button.module.css'\n\nfunction ActionButton ({ children, secondary, className, ...props }) {\n return (\n <button\n className={[\n className,\n styles.action,\n secondary && styles.secondary\n ].join(' ')}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nActionButton.defaultProps = {\n className: ''\n}\n\nexport default ActionButton\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]!./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 <div className={[styles.dialog, ...classes].join(' ')} {...rest}>\n {children}\n {dismissText && (\n <button className={styles.button} onClick={onDismiss}>\n {dismissText}\n </button>\n )}\n </div>\n )\n}\n","import PropTypes from 'prop-types'\n\nconst faCollections = {\n brands: 'fab',\n default: 'fa',\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 <span\n className={[className, groupClass, iconClass].join(' ')}\n {...iconProps}\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 <button onClick={onClick} {...rest}>\n <Icon collection={collection} name={icon} /> {text || children}\n </button>\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 <a {...properties}>\n {children}\n {external && showExternal && (\n <Icon\n className={styles.icon}\n name=\"arrow-up-right-from-square\"\n />\n )}\n </a>\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 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 <div onClick={handleClick} style={style}>\n <div ref={content} style={styles.content}>\n {children}\n </div>\n </div>,\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","\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]!./spinner.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]!./spinner.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import styles from './spinner.module.css'\n\nexport default function Spinner ({ children, ...rest }) {\n return (\n <div {...rest} className={styles.spinner}>\n <i className={`${styles.icon} fa fa-spinner`} />\n {children}\n </div>\n )\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 <DefinitionsContext.Provider value={definitions}>\n {children}\n </DefinitionsContext.Provider>\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 <LayoutContext.Provider value={context}>\n {children}\n </LayoutContext.Provider>\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 <Link external href={githubIssuesUrl}>\n Keymap Editor Issues\n </Link>\n)\n\nexport const GitHubWikiLayoutsLink = (\n <Link external href={githubWikiLayoutsUrl}>\n Keymap Editor Wiki: Defining keyboard layouts\n </Link>\n)\n\nexport const layoutToolsLink = (\n <Link external href={keymapLayoutToolsUrl}>\n Keymap Layout Tools - Helper\n </Link>\n)\n\nexport const DiscordProfileLink = (\n <Link external href={discordProfileUrl}>\n Discord - nickcoutsos#4351\n </Link>\n)\n\nexport const GeneralHelpOfferCopy = (\n <>\n <p>\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 </p>\n <ul>\n <li>{GitHubIssuesLink}</li>\n <li>{DiscordProfileLink}</li>\n </ul>\n </>\n)\n\nexport const KeymapLayoutResources = (\n <p>\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 </p>\n)\n","import omit from 'lodash/omit'\nimport { createSlice } from '@reduxjs/toolkit'\nimport { resolveBehaviorParams } from 'zmk-data/parameters'\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] = omit(action.payload.behavior, 'params')\n resolveBehaviorParams(state)\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 { getBehaviourParams } from '../../keymap'\n\nexport function selectLayerParamsFromBinding (binding, behaviors) {\n const { value, params } = binding\n const behavior = get(behaviors, value, {})\n const behaviorParams = getBehaviourParams(params, behavior)\n\n return behaviorParams.reduce((layerParams, param, i) => {\n if (param === 'layer') {\n layerParams.push(params[i])\n }\n\n return layerParams\n }, [])\n}\n\nexport const layerIndexChanged = createAction(\n 'layers/indexChanged',\n function prepare (currentIndex, targetIndex, layers, sources, behaviorSchemas) {\n const positionMapping = createLayerIndexMapping(currentIndex, targetIndex, layers)\n\n return {\n payload: {\n currentIndex,\n targetIndex,\n sources,\n behaviorSchemas,\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, positionMapping } = action.payload\n const { behaviours: behaviors, defines } = sources\n const layerParamsIterator = makeLayerParamsIterator(\n state, behaviors, behaviorSchemas, 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<Object>} state\n * @param {*} behaviors\n * @param {*} behaviorSchemas\n * @param {Function} selectPhandleArrays\n */\nfunction * makeLayerParamsIterator (state, behaviors, behaviorSchemas, 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, behaviors)) {\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 properties['sensor-bindings'].parsed[sensorIndex] = binding\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 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 <div style={{ ...baseStyle, ...style }}>\n {children}\n </div>\n )\n}\n\nexport function Button ({ children, style = {}, ...rest }) {\n return (\n <Control style={style}>\n <button style={{ height: '100%' }} {...rest}>\n {children}\n </button>\n </Control>\n )\n}\n\nconst darkModePreference = window.matchMedia('(prefers-color-scheme: dark)')\nconst invertedNeutralColors = [0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90].reduce((colors, i) => {\n colors[`neutral${i}`] = `hsl(0, 0%, ${i}%)`\n return colors\n}, {})\n\nexport function Select ({ label, ...rest }) {\n const { theme } = useSelector(state => state)\n const isDark = theme === 'dark' || (theme === 'system' && darkModePreference.matches)\n\n return (\n <div style={{\n display: 'inline-block',\n width: 'auto'\n }}>\n <label style={{\n display: 'block',\n width: '100%',\n fontSize: '120%',\n color: 'var(--fg)'\n }}>\n {label}\n </label>\n <ReactSelect\n styles={{\n container: (baseStyles, state) => ({\n ...baseStyles,\n display: 'inline-block'\n }),\n menu: (baseStyles) => ({\n ...baseStyles,\n width: 'max-content',\n zIndex: 10\n })\n }}\n theme={theme => ({\n ...theme,\n colors: {\n ...theme.colors,\n ...(isDark ? invertedNeutralColors : {})\n }\n })}\n isSearchable={false}\n {...rest}\n />\n </div>\n )\n}\n","import dayjs from 'dayjs'\nimport dayjsRelative from 'dayjs/plugin/relativeTime'\nimport PropTypes from 'prop-types'\nimport { useEffect, useState } from 'react'\n\nimport Icon from '../../Common/Icon'\nimport Link from '../../Common/Link'\nimport Spinner from '../../Common/Spinner'\nimport styles from './styles.module.css'\n\ndayjs.extend(dayjsRelative)\n\nconst goodConclusions = [\n 'success'\n]\n\nconst badConclusions = [\n 'action_required',\n 'cancelled',\n 'failure',\n 'skipped',\n 'stale',\n 'timed_out'\n]\n\nfunction FuzzyTimestamp (props) {\n const { timestamp } = props\n const [fuzzy, setFuzzy] = useState(\n dayjs(timestamp).fromNow()\n )\n\n useEffect(() => {\n setFuzzy(dayjs(timestamp).fromNow())\n const interval = setInterval(() => {\n setFuzzy(dayjs(timestamp).fromNow())\n }, 60 * 1000)\n\n return () => clearInterval(interval)\n }, [timestamp, setFuzzy])\n\n return (\n <span title={timestamp}>\n {fuzzy}\n </span>\n )\n}\n\nfunction BuildLink (props) {\n const { latestRun } = props\n const mappedIcon = goodConclusions.includes(latestRun.conclusion)\n ? <Icon name=\"check\" />\n : badConclusions.includes(latestRun.conclusion)\n ? <Icon name=\"xmark\" />\n : <Spinner />\n\n return (\n <Link\n href={latestRun.html_url}\n className={styles.buildDetails}\n external={true}\n showExternal={false}\n >\n <span className={styles.buildSummary}>\n Firmware build (<code>{latestRun.head_sha.slice(0, 5)}</code>) {mappedIcon}\n <br />\n <FuzzyTimestamp timestamp={latestRun.updated_at} />\n </span>\n <Icon\n name=\"file-arrow-down\"\n className={[\n styles.buildStatus,\n styles.buildSuccess\n ].join(' ')}\n />\n </Link>\n )\n}\n\nBuildLink.propTypes = {\n latestRun: PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n head_sha: PropTypes.string.isRequired,\n status: PropTypes.oneOf([\n 'completed',\n 'action_required',\n 'cancelled',\n 'failure',\n 'neutral',\n 'skipped',\n 'stale',\n 'success',\n 'timed_out',\n 'in_progress',\n 'queued',\n 'requested',\n 'waiting'\n ]).isRequired,\n conclusion: PropTypes.oneOf([\n null,\n 'action_required',\n 'cancelled',\n 'failure',\n 'neutral',\n 'success',\n 'skipped',\n 'stale',\n 'timed_out'\n ]),\n created_at: PropTypes.string.isRequired,\n updated_at: PropTypes.string.isRequired\n })\n}\n\nexport default BuildLink\n","import { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport ActionButton from '../../../Common/ActionButton'\nimport DialogBox from '../../../Common/DialogBox'\nimport Modal from '../../../Common/Modal'\n\nfunction Commit ({ onConfirm, onCancel }) {\n const [message, setMessage] = useState('')\n\n return (\n <Modal>\n <DialogBox dismissText={null}>\n <h2>Commit keymap changes</h2>\n <textarea\n style={{ width: '100%' }}\n placeholder='Message (optional)'\n value={message}\n onChange={event => {\n setMessage(event.target.value)\n }}\n />\n <p style={{ textAlign: 'center', gap: '10px' }}>\n <ActionButton onClick={() => onConfirm(message)}>Commit</ActionButton>\n <ActionButton onClick={onCancel} secondary>Cancel</ActionButton>\n </p>\n </DialogBox>\n </Modal>\n )\n}\n\nCommit.propTypes = {\n onConfirm: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired\n}\n\nexport default Commit\n","import { useCallback } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport BuildLink from './BuildLink'\nimport styles from './styles.module.css'\nimport ActionButton from '../../Common/ActionButton'\nimport Commit from './Dialogs/Commit'\nimport Icon from '../../Common/Icon'\nimport Spinner from '../../Common/Spinner'\nimport github from './api'\n\nconst stateSelector = state => state\n\nexport function Actions () {\n const dispatch = useDispatch()\n const state = useSelector(stateSelector)\n const {\n source,\n sourceOther,\n keyboard,\n _unmodifiedKeymap,\n saving,\n experimentalSettings,\n latestBuild\n } = state\n\n const hasChanged = keyboard && !Object.is(keyboard.keymap, _unmodifiedKeymap)\n\n function openCommitDialog () {\n dispatch({ type: 'COMMIT_DIALOG_OPEN' })\n }\n\n const handleCommitChanges = useCallback(function (message) {\n const { repository, branch } = sourceOther.github\n\n ;(async function () {\n dispatch({ type: 'COMMIT_DIALOG_CLOSE' })\n dispatch({ type: 'KEYMAP_SAVE_START' })\n\n const { layout, keymap } = keyboard\n\n try {\n const { data: updated } = await github.commitChanges(repository, branch, layout, keymap, {\n message, experimentalSettings, keyboard: sourceOther.github.keyboard\n })\n dispatch({ type: 'KEYMAP_SAVE_SUCCESS', keymap: updated })\n } catch {\n dispatch({ type: 'KEYMAP_SAVE_FAILURE' })\n }\n })()\n }, [sourceOther, keyboard, dispatch, experimentalSettings])\n\n return (\n <div className={styles.pickerActions}>\n {source === 'github' && !sourceOther.github.isProtected && (\n <ActionButton\n title=\"Commit keymap changes to GitHub repository\"\n disabled={!hasChanged}\n onClick={openCommitDialog}\n >\n {saving ? <>Saving <Spinner /></> : 'Save changes'}\n </ActionButton>\n )}\n {source === 'github' && sourceOther.github.isProtected && (\n <ActionButton title=\"Cannot commit changes to this branch\" disabled>\n <Icon name=\"shield\" /> Read-only\n </ActionButton>\n )}\n {state.commitDialogOpen && (\n <Commit\n onConfirm={handleCommitChanges}\n onCancel={() => dispatch({ type: 'COMMIT_DIALOG_CLOSE' })}\n />\n )}\n\n {latestBuild && <BuildLink latestRun={latestBuild} />}\n </div>\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","import * as config from '../../config'\n\nexport async function loadAvailableKeyboards () {\n const response = await fetch(`${config.apiBaseUrl}/v2/local/keyboards`)\n return response.json()\n}\n\nexport async function loadKeyboardFiles (keyboard) {\n const path = `v2/local/keyboards/${encodeURIComponent(keyboard)}`\n const url = `${config.apiBaseUrl}/${path}`\n const response = await fetch(url)\n\n if (!response.ok) {\n const err = new Error()\n err.response = response\n throw err\n }\n return response.json()\n}\n\nexport async function updateKeymap (keyboard, keymap) {\n const path = `v2/local/keyboards/${encodeURIComponent(keyboard)}/keymap`\n const url = `${config.apiBaseUrl}/${path}`\n\n const response = await fetch(url, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(keymap)\n })\n\n return response.json()\n}\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)\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'\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: \"locale-[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,\n ...(customBehaviors || []).map(behavior => ({\n code: `&${behavior.labels[0]}`,\n bind: `&${behavior.labels[0]}`,\n name: behavior.name,\n description: `Custom behavior: \"${behavior.properties.label.raw || behavior.name}\"`,\n params: behavior.params,\n context: behavior.context\n })),\n ...keymap.macros.map(macro => ({\n code: `&${macro.labels[0]}`,\n name: macro.name,\n description: 'Custom macro',\n params: []\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 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 <SearchContext.Provider value={{ getSearchTargets, mergedGlyphs, sources, identifiers }}>\n {children}\n </SearchContext.Provider>\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 '../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 './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 <h3 style={{ display: 'inline' }}>{text}</h3>\n <ul className={styles.editorModeTabs}>\n {tabs.map(({ name: tab, tabClasses = [] }, i) => (\n <li\n key={i}\n onClick={() => setActiveTab(i)}\n className={compact([\n activeTab === i && styles.activeEditTab,\n ...tabClasses\n ]).join(' ')}\n >\n {tab}\n </li>\n ))}\n </ul>\n <Suspense>\n {children[activeTab]}\n </Suspense>\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: <LayerEditor /> },\n { name: 'combos', component: <ComboEditor /> },\n { name: 'macros', component: <MacroEditor /> },\n { name: <span className={styles.beta}>behaviors</span>, component: <Behaviors /> },\n warningCount > 0 && ({\n name: `warnings (${warningCount})`,\n tabClasses: [styles.warningTab],\n component: <Warnings sanityChecks={sanityChecks} />\n })\n ])\n\n const defaultTab = 0\n\n return (\n <Context keymap={keymap}>\n <Tabs text=\"Editor mode:\" tabs={tabs} defaultTab={defaultTab}>\n {tabs.map((tab, i) => (\n <Fragment key={i}>\n {tab.component}\n </Fragment>\n ))}\n </Tabs>\n </Context>\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 <div className={style.wrapper}>\n <label>Need help? Open an issue:</label>\n <a className={style.githubLink} target=\"_blank\" rel=\"noreferrer\" href={repositoryUrl}>\n <Icon collection=\"brands\" name=\"github\" />/nickcoutsos/keymap-editor\n </a>\n </div>\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 <Modal onDismiss={onClose}>\n <DialogBox onDismiss={onClose}>\n <h1>Settings</h1>\n\n <h2>Keycode glyphs</h2>\n\n <h3>\n <label htmlFor=\"enable-unicode-glyphs\">\n <input\n id=\"enable-unicode-glyphs\"\n type=\"checkbox\"\n checked={settings.unicodeGlyphs}\n onChange={e => (\n handleUpdateSetting('unicodeGlyphs', e.target.checked)\n )}\n />\n Use Unicode Glyphs\n </label>\n </h3>\n <p style={styles.description}>\n Use unicode glyphs for visual representations of keycodes\n like <code>Enter</code> (⮐), <code>Right Arrow</code> (⏵), etc. You\n can disable this if the symbols don't render correctly.\n </p>\n\n <h3>\n <label htmlFor=\"platform-specific-glyphs\">\n Platform specific glyphs\n <select\n id=\"platform-specific-glyphs\"\n value={settings.platformGlyphs || 'auto'}\n onChange={e => (\n handleUpdateSetting('platformGlyphs', e.target.value)\n )}\n >\n <option value=\"auto\">Automatic</option>\n <option value=\"win\">Windows</option>\n <option value=\"mac\">macOS</option>\n </select>\n </label>\n </h3>\n <p style={styles.description}>\n Render symbols specific to your platform. E.g., render left/right meta\n key as <Icon name=\"windows fa-brands\" /> for Windows, or\n ⌘ for macOS.\n </p>\n </DialogBox>\n </Modal>\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 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 },\n config.enableLocal && {\n id: 'local',\n name: 'Local',\n collapsible: false\n },\n config.enableGitHub && {\n id: 'github',\n name: 'GitHub',\n collapsible: 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","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 <Modal>\n <DialogBox onDismiss={onDismiss}>\n <h2>Could not parse keymap</h2>\n <p>\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 </p>\n <p>\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 </p>\n {GeneralHelpOfferCopy}\n </DialogBox>\n </Modal>\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 <Modal>\n <DialogBox onDismiss={onDismiss}>\n <h2>Could not parse keymap</h2>\n <p>\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 </p>\n <p>\n A common occurrence here is keymaps using a variety of pre-processor\n macros to define layers/combos/etc.\n </p>\n {GeneralHelpOfferCopy}\n </DialogBox>\n </Modal>\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 <Modal>\n <DialogBox onDismiss={onDismiss}>\n <h2>Could not parse Miryoku keymap</h2>\n <p>\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 </p>\n <p>\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 </p>\n </DialogBox>\n </Modal>\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 <Modal>\n <DialogBox onDismiss={onDismiss}>\n <h2>Could not parse keymap</h2>\n <p>\n Missing devicetree root node.\n </p>\n <p>\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 </p>\n <p>\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 </p>\n </DialogBox>\n </Modal>\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 <Modal>\n <DialogBox onDismiss={onDismiss}>\n <h2>Could not parse keymap</h2>\n <p>\n Detected use of <code>zmk-nodefree-config</code>\n </p>\n <p>\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 </p>\n <p>\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 </p>\n </DialogBox>\n </Modal>\n )\n}\n\nZmkNodefreeConfig.propTypes = {\n onDismiss: PropTypes.func.isRequired\n}\n\nexport default ZmkNodefreeConfig\n","import DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\nimport { KeymapLayoutResources } from './support'\n\nfunction SuggestAutoLayoutTweak (props) {\n return (\n <Modal>\n <DialogBox {...props}>\n <h2>This layout was Auto-Generated</h2>\n <p>\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 </p>\n <p>\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 <code>info.json</code> file.\n </p>\n {KeymapLayoutResources}\n </DialogBox>\n </Modal>\n )\n}\n\nSuggestAutoLayoutTweak.propTypes = {}\n\nexport default SuggestAutoLayoutTweak\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'\nimport { sourceChoices, defaultSource } from './sources'\nimport { Button, Select } from './Controls'\nimport { getErrorDialog } from './errors'\nimport SuggestAutoLayoutTweak from '../Dialogs/SuggestAutoLayoutTweak'\nimport Icon from '../Common/Icon'\nimport styles from './styles.module.css'\n\nconst LocalPicker = lazy(() => import('./Local/Picker'))\nconst DemoPicker = lazy(() => import('./Demo/Picker'))\nconst GithubPicker = lazy(() => import('./Github/Picker'))\n\nfunction useToggle (initial) {\n const [toggleState, setToggleState] = useState(initial)\n const setTrue = useCallback(() => setToggleState(true), [setToggleState])\n const setFalse = useCallback(() => setToggleState(false), [setToggleState])\n const setInvert = useCallback(() => setToggleState(state => !state), [setToggleState])\n\n return [toggleState, setTrue, setFalse, setInvert]\n}\n\nfunction 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\nfunction KeyboardPicker (props) {\n const { onSelect } = props\n const wrapperRef = useRef()\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, isExpanded && selectedSource?.collapsible === true)\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 <div\n ref={wrapperRef}\n className={classNames(styles.wrapper, { [styles.compact]: !isExpanded })}\n >\n {isExpanded && (\n <Select\n label=\"Source\"\n value={selectedSource}\n options={sourceChoices}\n getOptionLabel={option => option.name}\n getOptionValue={option => option.id}\n onChange={({ id }) => setSource(id)}\n />\n )}\n\n {showDialog?.component && <showDialog.component {...showDialog.dialogProps || {}} onDismiss={showDialog.onClose} />}\n\n <Suspense>\n {source === 'local' && <LocalPicker onError={handleError} onSelect={handleKeyboardSelected} />}\n {source === 'demo' && <DemoPicker onSelect={handleKeyboardSelected} />}\n {source === 'github' && (\n <GithubPicker\n expanded={isExpanded}\n onSelect={handleKeyboardSelected}\n onError={handleError}\n onExpand={setExpanded}\n />\n )}\n </Suspense>\n\n {autoGenerated && (\n <Button onClick={showLayoutHelp}>\n <Icon name=\"warning\" /> Layout wrong?\n </Button>\n )}\n </div>\n )\n}\n\nKeyboardPicker.propTypes = {\n onSelect: PropTypes.func.isRequired\n}\n\nexport default KeyboardPicker\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 <Link external href=\"https://github.com/nickcoutsos/keymap-editor/issues/new\">\n new issue\n </Link>\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 <Modal>\n <DialogBox dismissText={false} style={{ maxWidth: '700px' }}>\n <h2>Unexpected error</h2>\n <p>\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 </p>\n <div className={styles.stackTrace}>\n <pre>{formattedError}</pre>\n <IconButton\n icon=\"copy\"\n title=\"Copy error text\"\n className={styles.button}\n onClick={copyErrorText}\n />\n {copied && (\n <div className={styles.copyMessage}>Copied!</div>\n )}\n </div>\n </DialogBox>\n </Modal>\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 <UnexpectedError error={error} />\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 <Modal>\n <DialogBox onDismiss={onDismiss}>\n <h2>Failed to save keymap changes</h2>\n <p>\n Sorry, an unexpected error occurred while trying to save your keymap.\n </p>\n <p>\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 </p>\n <p>\n {GitHubIssuesLink}\n </p>\n </DialogBox>\n </Modal>\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 SourceActions from './Sources/SourceActions'\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'\nimport Icon from './Common/Icon'\nimport Link from './Common/Link'\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 <ErrorBoundary>\n <SettingsContext.Provider value={{\n settings: experimentalSettings,\n openSettingsDialog\n }}>\n <SourcePicker onSelect={handleKeyboardSelected} />\n\n <div id=\"settings-bar\">\n <IconButton\n id=\"light-mode\"\n title=\"Toggle theme\"\n icon={{\n light: 'sun',\n dark: 'moon',\n system: 'circle-half-stroke'\n }[theme] || 'circle-half-stroke'}\n onClick={() => dispatch({ type: 'CYCLE_THEME' })}\n />\n\n <IconButton\n id=\"settings-button\"\n icon=\"cog\"\n onClick={openSettingsDialog}\n />\n {settingsVisible && (\n <Settings\n settings={experimentalSettings}\n onUpdate={handleUpdateSettings}\n onClose={() => dispatch({ type: 'SETTINGS_CLOSE' })}\n />\n )}\n </div>\n\n <DefinitionsContextProvider>\n {keyboard && (\n <LayoutContextProvider layout={keyboard.layout}>\n <Keyboard\n keymap={keyboard.keymap}\n sensors={keyboard.sensors}\n />\n </LayoutContextProvider>\n )}\n {saveError && (\n <KeymapSaveFailed onDismiss={() => dispatch({ type: 'CLEAR_SAVE_ERROR' })} />\n )}\n </DefinitionsContextProvider>\n </SettingsContext.Provider>\n </ErrorBoundary>\n <GitHubLink />\n\n {/* <div style={{\n position: 'absolute',\n bottom: '10px',\n left: '50%',\n transform: 'translateX(-50%)'\n }}>\n <Icon name=\"warning\" style={{ color: 'gold', backgroundColor: '#555', padding: '6px', margin: '5px', borderRadius: '100%' }} />\n <Link external href=\"https://www.githubstatus.com/incidents/rcnl10p4hywg\">\n Note: Experiencing GitHub API issues, keymap loading/saving may fail\n </Link>\n </div> */}\n </>\n )\n}\n\nexport default App\n","import cloneDeep from 'lodash/cloneDeep'\nimport get from 'lodash/get'\nimport pick from 'lodash/pick'\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 newKeyboardState.keymap.layers = newKeyboardState.keymap.layers.map(layer => (\n pick(layer, ['index', 'name', 'labels', 'properties'])\n ))\n\n newKeyboardState.keymap.combos = newKeyboardState.keymap.combos.map(combo => (\n pick(combo, ['index', 'name', 'labels', 'properties'])\n ))\n\n newKeyboardState.keymap.behaviors = newKeyboardState.keymap.behaviors.map(behavior => (\n pick(behavior, ['index', 'name', 'labels', 'properties', 'params'])\n ))\n\n newKeyboardState.keymap.macros = newKeyboardState.keymap.macros.map(macro => (\n pick(macro, ['index', 'name', 'labels', 'properties'])\n ))\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 newKeymapState.layers = newKeymapState.layers.map(layer => (\n pick(layer, ['index', 'name', 'labels', 'properties'])\n ))\n\n newKeymapState.combos = newKeymapState.combos.map(combo => (\n pick(combo, ['index', 'name', 'labels', 'properties'])\n ))\n\n newKeymapState.behaviors = newKeymapState.behaviors.map(behavior => (\n pick(behavior, ['index', 'name', 'labels', 'properties', 'params'])\n ))\n\n newKeymapState.macros = newKeymapState.macros.map(macro => (\n pick(macro, ['index', 'name', 'labels', 'properties'])\n ))\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 combos: combosReducer,\n layers: layersReducer,\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 <React.StrictMode>\n <Provider store={store}>\n <App />\n </Provider>\n </React.StrictMode>\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'\n\nexport function getBehaviourParams (parsedParams, behaviour) {\n return [].concat(\n behaviour.params || [],\n getAdditionalParams(parsedParams, behaviour)\n )\n}\n\nfunction getAdditionalParams (parsedParams, behavior) {\n const firstParsedParam = get(parsedParams, '[0]', {})\n\n if (get(behavior, 'params[0].enum')) {\n const source = find(behavior.params[0].enum, { code: firstParsedParam.value })\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: #6f6f6f;\\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 --bg: #123;\\n --bg-rgb: 17,34,51;\\n --fg: white;\\n --key-bg-base: #1c2c3b;\\n --key-color-base: #b7b7b7;\\n --key-color-extreme: #e7e7e7;\\n}\\n@media (prefers-color-scheme: dark) {\\n body[data-theme=\\\"system\\\"] {\\n color-scheme: dark;\\n --bg: #123;\\n --bg-rgb: 17,34,51;\\n --fg: white;\\n --key-bg-base: #1c2c3b;\\n --key-color-base: #b7b7b7;\\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 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,yBAAyB;EACzB,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,UAAU;EACV,kBAAkB;EAClB,WAAW;EACX,sBAAsB;EACtB,yBAAyB;EACzB,4BAA4B;AAC9B;AACA;EACE;IACE,kBAAkB;IAClB,UAAU;IACV,kBAAkB;IAClB,WAAW;IACX,sBAAsB;IACtB,yBAAyB;IACzB,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,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: #6f6f6f;\\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 --bg: #123;\\n --bg-rgb: 17,34,51;\\n --fg: white;\\n --key-bg-base: #1c2c3b;\\n --key-color-base: #b7b7b7;\\n --key-color-extreme: #e7e7e7;\\n}\\n@media (prefers-color-scheme: dark) {\\n body[data-theme=\\\"system\\\"] {\\n color-scheme: dark;\\n --bg: #123;\\n --bg-rgb: 17,34,51;\\n --fg: white;\\n --key-bg-base: #1c2c3b;\\n --key-color-base: #b7b7b7;\\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 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, \"button.pi2Ig8c3Fdh4H2Jpxdo7 {\\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\\nbutton.Ctpu4E2dZYJ6g8CUGFOF {\\n color: var(--fg);\\n background-color: transparent;\\n}\\n\\nbutton.pi2Ig8c3Fdh4H2Jpxdo7[disabled] {\\n filter: saturate(20%);\\n opacity: .5;\\n cursor: not-allowed;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/action-button.module.css\"],\"names\":[],\"mappings\":\"AAAA;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,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,qBAAqB;EACrB,WAAW;EACX,mBAAmB;AACrB\",\"sourcesContent\":[\"button.action {\\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\\nbutton.secondary {\\n color: var(--fg);\\n background-color: transparent;\\n}\\n\\nbutton.action[disabled] {\\n filter: saturate(20%);\\n opacity: .5;\\n cursor: not-allowed;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"action\": \"pi2Ig8c3Fdh4H2Jpxdo7\",\n\t\"secondary\": \"Ctpu4E2dZYJ6g8CUGFOF\"\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, \".ZpdcqlK42OntJos3eGw0 {\\n background-color: var(--bg);\\n padding: 20px 40px;\\n margin: 40px;\\n max-width: 500px;\\n box-shadow: 0px 10px 25px rgba(0, 0, 0, 0.4);\\n border-radius: 2px;\\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,2BAA2B;EAC3B,kBAAkB;EAClB,YAAY;EACZ,gBAAgB;EAChB,4CAA4C;EAC5C,kBAAkB;AACpB;;AAEA;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,cAAc;AAChB\",\"sourcesContent\":[\".dialog {\\n background-color: var(--bg);\\n padding: 20px 40px;\\n margin: 40px;\\n max-width: 500px;\\n box-shadow: 0px 10px 25px rgba(0, 0, 0, 0.4);\\n border-radius: 2px;\\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, \".FMkASzwt_oMscZdObpDQ {\\n display: inline-block;\\n text-align: center;\\n}\\n.TNF6aRMBPANvZifB27ZK {\\n display: inline-block;\\n animation: GGCs7iiBiwDCnT80cyTh 1s linear infinite;\\n}\\n\\n@keyframes GGCs7iiBiwDCnT80cyTh {\\n from { transform: rotate(0deg); }\\n to { transform: rotate(360deg); }\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/spinner.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,qBAAqB;EACrB,kBAAkB;AACpB;AACA;EACE,qBAAqB;EACrB,kDAAkC;AACpC;;AAEA;EACE,OAAO,uBAAuB,EAAE;EAChC,KAAK,yBAAyB,EAAE;AAClC\",\"sourcesContent\":[\".spinner {\\n display: inline-block;\\n text-align: center;\\n}\\n.icon {\\n display: inline-block;\\n animation: spin 1s linear infinite;\\n}\\n\\n@keyframes spin {\\n from { transform: rotate(0deg); }\\n to { transform: rotate(360deg); }\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"spinner\": \"FMkASzwt_oMscZdObpDQ\",\n\t\"icon\": \"TNF6aRMBPANvZifB27ZK\",\n\t\"spin\": \"GGCs7iiBiwDCnT80cyTh\"\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: red;\\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,qBAAqB;EACrB,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: red;\\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, \".z8z3GXuYqlepCz4tRPZj {\\n cursor: pointer;\\n display: flex;\\n box-sizing: border-box;\\n border-width: 1px;\\n text-align: left;\\n border-radius: 4px;\\n gap: 5px;\\n height: 38px;\\n padding: 0 8px;\\n\\n /* color: hsl(0, 0%, 20%); */\\n}\\n\\n.z8z3GXuYqlepCz4tRPZj:hover {\\n background-color: var(--hover-selection);\\n color: white;\\n}\\n\\n.yyHfal9pM4DzShMl4LAY {\\n display: inline-flex;\\n height: 30px;\\n border-radius: 5px;\\n align-items: center;\\n\\n font-size: 70%;\\n padding: 0 4px;\\n\\n background-color: royalblue;\\n color: white;\\n text-decoration: none;\\n}\\n\\n.ukdycT4tarWVlV3PC6Rr {\\n display: flex;\\n height: 38px;\\n gap: 4px;\\n}\\n\\n.ukdycT4tarWVlV3PC6Rr button,\\n.ukdycT4tarWVlV3PC6Rr .yyHfal9pM4DzShMl4LAY {\\n height: 38px !important;\\n}\\n\\n.yyHfal9pM4DzShMl4LAY code {\\n font-family: monospace;\\n}\\n\\n.QvI5wo7_u6OeAc12ib0W {\\n width: 30px;\\n height: 30px;\\n line-height: 30px;\\n font-size: 200%;\\n text-align: center;\\n}\\n\\n.eUw5NZqoPPF3BcyYDpJx {\\n /* color: var(--selection); */\\n}\\n\\n.XjY4lN_lY3nSgHcw67bX {\\n /* color: brown; */\\n}\\n\\n.Ap_OwCtp3j1Q29Phpw3V {\\n color: gold;\\n animation: WjBuPfls4V41d2sjbNFU 1s linear alternate infinite;\\n}\\n\\n@keyframes WjBuPfls4V41d2sjbNFU {\\n from { opacity: 0.5; }\\n to { opacity: 1; }\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Sources/Github/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;EACf,aAAa;EACb,sBAAsB;EACtB,iBAAiB;EACjB,gBAAgB;EAChB,kBAAkB;EAClB,QAAQ;EACR,YAAY;EACZ,cAAc;;EAEd,4BAA4B;AAC9B;;AAEA;EACE,wCAAwC;EACxC,YAAY;AACd;;AAEA;EACE,oBAAoB;EACpB,YAAY;EACZ,kBAAkB;EAClB,mBAAmB;;EAEnB,cAAc;EACd,cAAc;;EAEd,2BAA2B;EAC3B,YAAY;EACZ,qBAAqB;AACvB;;AAEA;EACE,aAAa;EACb,YAAY;EACZ,QAAQ;AACV;;AAEA;;EAEE,uBAAuB;AACzB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,kBAAkB;AACpB;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,4DAA6C;AAC/C;;AAEA;EACE,OAAO,YAAY,EAAE;EACrB,KAAK,UAAU,EAAE;AACnB\",\"sourcesContent\":[\".compactWrapper {\\n cursor: pointer;\\n display: flex;\\n box-sizing: border-box;\\n border-width: 1px;\\n text-align: left;\\n border-radius: 4px;\\n gap: 5px;\\n height: 38px;\\n padding: 0 8px;\\n\\n /* color: hsl(0, 0%, 20%); */\\n}\\n\\n.compactWrapper:hover {\\n background-color: var(--hover-selection);\\n color: white;\\n}\\n\\n.buildDetails {\\n display: inline-flex;\\n height: 30px;\\n border-radius: 5px;\\n align-items: center;\\n\\n font-size: 70%;\\n padding: 0 4px;\\n\\n background-color: royalblue;\\n color: white;\\n text-decoration: none;\\n}\\n\\n.pickerActions {\\n display: flex;\\n height: 38px;\\n gap: 4px;\\n}\\n\\n.pickerActions button,\\n.pickerActions .buildDetails {\\n height: 38px !important;\\n}\\n\\n.buildDetails code {\\n font-family: monospace;\\n}\\n\\n.buildStatus {\\n width: 30px;\\n height: 30px;\\n line-height: 30px;\\n font-size: 200%;\\n text-align: center;\\n}\\n\\n.buildSuccess {\\n /* color: var(--selection); */\\n}\\n\\n.buildFailed {\\n /* color: brown; */\\n}\\n\\n.buildPending {\\n color: gold;\\n animation: pulse 1s linear alternate infinite;\\n}\\n\\n@keyframes pulse {\\n from { opacity: 0.5; }\\n to { opacity: 1; }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"compactWrapper\": \"z8z3GXuYqlepCz4tRPZj\",\n\t\"buildDetails\": \"yyHfal9pM4DzShMl4LAY\",\n\t\"pickerActions\": \"ukdycT4tarWVlV3PC6Rr\",\n\t\"buildStatus\": \"QvI5wo7_u6OeAc12ib0W\",\n\t\"buildSuccess\": \"eUw5NZqoPPF3BcyYDpJx\",\n\t\"buildFailed\": \"XjY4lN_lY3nSgHcw67bX\",\n\t\"buildPending\": \"Ap_OwCtp3j1Q29Phpw3V\",\n\t\"pulse\": \"WjBuPfls4V41d2sjbNFU\"\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\", \"\",{\"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\",\"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\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"wrapper\": \"hY07j_e1kQx0WX5BwG6I\",\n\t\"compact\": \"_0h266lacmB1N_qDdQcy\"\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","\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\t3277\n\t],\n\t\"./keys_ar.json\": [\n\t\t73810,\n\t\t3277\n\t],\n\t\"./keys_ar_102\": [\n\t\t78381,\n\t\t8791\n\t],\n\t\"./keys_ar_102.json\": [\n\t\t78381,\n\t\t8791\n\t],\n\t\"./keys_ar_azerty\": [\n\t\t56724,\n\t\t5375\n\t],\n\t\"./keys_ar_azerty.json\": [\n\t\t56724,\n\t\t5375\n\t],\n\t\"./keys_as\": [\n\t\t68045,\n\t\t8301\n\t],\n\t\"./keys_as.json\": [\n\t\t68045,\n\t\t8301\n\t],\n\t\"./keys_az\": [\n\t\t21708,\n\t\t4985\n\t],\n\t\"./keys_az.json\": [\n\t\t21708,\n\t\t4985\n\t],\n\t\"./keys_az_cyrillic\": [\n\t\t7200,\n\t\t945\n\t],\n\t\"./keys_az_cyrillic.json\": [\n\t\t7200,\n\t\t945\n\t],\n\t\"./keys_az_standard\": [\n\t\t2498,\n\t\t4501\n\t],\n\t\"./keys_az_standard.json\": [\n\t\t2498,\n\t\t4501\n\t],\n\t\"./keys_ba\": [\n\t\t24745,\n\t\t9153\n\t],\n\t\"./keys_ba.json\": [\n\t\t24745,\n\t\t9153\n\t],\n\t\"./keys_be\": [\n\t\t80468,\n\t\t6409\n\t],\n\t\"./keys_be.json\": [\n\t\t80468,\n\t\t6409\n\t],\n\t\"./keys_bg\": [\n\t\t87317,\n\t\t7395\n\t],\n\t\"./keys_bg.json\": [\n\t\t87317,\n\t\t7395\n\t],\n\t\"./keys_bg_latin\": [\n\t\t80885,\n\t\t4226\n\t],\n\t\"./keys_bg_latin.json\": [\n\t\t80885,\n\t\t4226\n\t],\n\t\"./keys_bg_phonetic\": [\n\t\t10220,\n\t\t4922\n\t],\n\t\"./keys_bg_phonetic.json\": [\n\t\t10220,\n\t\t4922\n\t],\n\t\"./keys_bm\": [\n\t\t71350,\n\t\t998\n\t],\n\t\"./keys_bm.json\": [\n\t\t71350,\n\t\t998\n\t],\n\t\"./keys_bn\": [\n\t\t99691,\n\t\t7136\n\t],\n\t\"./keys_bn.json\": [\n\t\t99691,\n\t\t7136\n\t],\n\t\"./keys_bn_inscript\": [\n\t\t31658,\n\t\t4436\n\t],\n\t\"./keys_bn_inscript.json\": [\n\t\t31658,\n\t\t4436\n\t],\n\t\"./keys_bo\": [\n\t\t29692,\n\t\t814\n\t],\n\t\"./keys_bo.json\": [\n\t\t29692,\n\t\t814\n\t],\n\t\"./keys_bs\": [\n\t\t5396,\n\t\t3201\n\t],\n\t\"./keys_bs.json\": [\n\t\t5396,\n\t\t3201\n\t],\n\t\"./keys_bug\": [\n\t\t15317,\n\t\t1444\n\t],\n\t\"./keys_bug.json\": [\n\t\t15317,\n\t\t1444\n\t],\n\t\"./keys_chr\": [\n\t\t8250,\n\t\t7767\n\t],\n\t\"./keys_chr.json\": [\n\t\t8250,\n\t\t7767\n\t],\n\t\"./keys_chr_phonetic\": [\n\t\t6221,\n\t\t7082\n\t],\n\t\"./keys_chr_phonetic.json\": [\n\t\t6221,\n\t\t7082\n\t],\n\t\"./keys_ckb\": [\n\t\t29448,\n\t\t6511\n\t],\n\t\"./keys_ckb.json\": [\n\t\t29448,\n\t\t6511\n\t],\n\t\"./keys_cs\": [\n\t\t98019,\n\t\t5788\n\t],\n\t\"./keys_cs.json\": [\n\t\t98019,\n\t\t5788\n\t],\n\t\"./keys_cs_programmers\": [\n\t\t7578,\n\t\t1932\n\t],\n\t\"./keys_cs_programmers.json\": [\n\t\t7578,\n\t\t1932\n\t],\n\t\"./keys_cs_qwerty\": [\n\t\t58733,\n\t\t7548\n\t],\n\t\"./keys_cs_qwerty.json\": [\n\t\t58733,\n\t\t7548\n\t],\n\t\"./keys_da\": [\n\t\t81460,\n\t\t7296\n\t],\n\t\"./keys_da.json\": [\n\t\t81460,\n\t\t7296\n\t],\n\t\"./keys_de\": [\n\t\t68013,\n\t\t6121\n\t],\n\t\"./keys_de.json\": [\n\t\t68013,\n\t\t6121\n\t],\n\t\"./keys_de_belgian\": [\n\t\t69798,\n\t\t2174\n\t],\n\t\"./keys_de_belgian.json\": [\n\t\t69798,\n\t\t2174\n\t],\n\t\"./keys_de_belgian_period\": [\n\t\t12991,\n\t\t1546\n\t],\n\t\"./keys_de_belgian_period.json\": [\n\t\t12991,\n\t\t1546\n\t],\n\t\"./keys_de_ibm\": [\n\t\t85155,\n\t\t8734\n\t],\n\t\"./keys_de_ibm.json\": [\n\t\t85155,\n\t\t8734\n\t],\n\t\"./keys_de_swiss\": [\n\t\t57153,\n\t\t707\n\t],\n\t\"./keys_de_swiss.json\": [\n\t\t57153,\n\t\t707\n\t],\n\t\"./keys_dsb\": [\n\t\t93859,\n\t\t979\n\t],\n\t\"./keys_dsb.json\": [\n\t\t93859,\n\t\t979\n\t],\n\t\"./keys_dsb_extended\": [\n\t\t45816,\n\t\t6331\n\t],\n\t\"./keys_dsb_extended.json\": [\n\t\t45816,\n\t\t6331\n\t],\n\t\"./keys_dv\": [\n\t\t60573,\n\t\t5377\n\t],\n\t\"./keys_dv.json\": [\n\t\t60573,\n\t\t5377\n\t],\n\t\"./keys_dvorak\": [\n\t\t17499,\n\t\t4045\n\t],\n\t\"./keys_dvorak.json\": [\n\t\t17499,\n\t\t4045\n\t],\n\t\"./keys_dvorak_left\": [\n\t\t5085,\n\t\t3208\n\t],\n\t\"./keys_dvorak_left.json\": [\n\t\t5085,\n\t\t3208\n\t],\n\t\"./keys_dvorak_right\": [\n\t\t43474,\n\t\t7445\n\t],\n\t\"./keys_dvorak_right.json\": [\n\t\t43474,\n\t\t7445\n\t],\n\t\"./keys_dyu\": [\n\t\t56817,\n\t\t3572\n\t],\n\t\"./keys_dyu.json\": [\n\t\t56817,\n\t\t3572\n\t],\n\t\"./keys_dz\": [\n\t\t3461,\n\t\t2036\n\t],\n\t\"./keys_dz.json\": [\n\t\t3461,\n\t\t2036\n\t],\n\t\"./keys_el\": [\n\t\t82182,\n\t\t3756\n\t],\n\t\"./keys_el.json\": [\n\t\t82182,\n\t\t3756\n\t],\n\t\"./keys_el_220\": [\n\t\t74695,\n\t\t913\n\t],\n\t\"./keys_el_220.json\": [\n\t\t74695,\n\t\t913\n\t],\n\t\"./keys_el_319\": [\n\t\t43615,\n\t\t1914\n\t],\n\t\"./keys_el_319.json\": [\n\t\t43615,\n\t\t1914\n\t],\n\t\"./keys_el_latin\": [\n\t\t61897,\n\t\t722\n\t],\n\t\"./keys_el_latin.json\": [\n\t\t61897,\n\t\t722\n\t],\n\t\"./keys_el_latin_220\": [\n\t\t52401,\n\t\t61\n\t],\n\t\"./keys_el_latin_220.json\": [\n\t\t52401,\n\t\t61\n\t],\n\t\"./keys_el_latin_319\": [\n\t\t70286,\n\t\t9876\n\t],\n\t\"./keys_el_latin_319.json\": [\n\t\t70286,\n\t\t9876\n\t],\n\t\"./keys_el_polytonic\": [\n\t\t19430,\n\t\t4029\n\t],\n\t\"./keys_el_polytonic.json\": [\n\t\t19430,\n\t\t4029\n\t],\n\t\"./keys_en_gb\": [\n\t\t85702,\n\t\t6071\n\t],\n\t\"./keys_en_gb.json\": [\n\t\t85702,\n\t\t6071\n\t],\n\t\"./keys_en_gb_extended\": [\n\t\t30206,\n\t\t3789\n\t],\n\t\"./keys_en_gb_extended.json\": [\n\t\t30206,\n\t\t3789\n\t],\n\t\"./keys_en_india\": [\n\t\t28440,\n\t\t3595\n\t],\n\t\"./keys_en_india.json\": [\n\t\t28440,\n\t\t3595\n\t],\n\t\"./keys_es\": [\n\t\t68633,\n\t\t4671\n\t],\n\t\"./keys_es.json\": [\n\t\t68633,\n\t\t4671\n\t],\n\t\"./keys_es_latin_american\": [\n\t\t67356,\n\t\t9781\n\t],\n\t\"./keys_es_latin_american.json\": [\n\t\t67356,\n\t\t9781\n\t],\n\t\"./keys_es_variation\": [\n\t\t73173,\n\t\t8496\n\t],\n\t\"./keys_es_variation.json\": [\n\t\t73173,\n\t\t8496\n\t],\n\t\"./keys_et\": [\n\t\t76498,\n\t\t7287\n\t],\n\t\"./keys_et.json\": [\n\t\t76498,\n\t\t7287\n\t],\n\t\"./keys_fa\": [\n\t\t76451,\n\t\t9534\n\t],\n\t\"./keys_fa.json\": [\n\t\t76451,\n\t\t9534\n\t],\n\t\"./keys_fa_standard\": [\n\t\t79355,\n\t\t9461\n\t],\n\t\"./keys_fa_standard.json\": [\n\t\t79355,\n\t\t9461\n\t],\n\t\"./keys_fi\": [\n\t\t36863,\n\t\t2527\n\t],\n\t\"./keys_fi.json\": [\n\t\t36863,\n\t\t2527\n\t],\n\t\"./keys_fi_sami\": [\n\t\t58592,\n\t\t6779\n\t],\n\t\"./keys_fi_sami.json\": [\n\t\t58592,\n\t\t6779\n\t],\n\t\"./keys_fo\": [\n\t\t48622,\n\t\t7706\n\t],\n\t\"./keys_fo.json\": [\n\t\t48622,\n\t\t7706\n\t],\n\t\"./keys_fr\": [\n\t\t50955,\n\t\t4835\n\t],\n\t\"./keys_fr.json\": [\n\t\t50955,\n\t\t4835\n\t],\n\t\"./keys_fr_belgian\": [\n\t\t39330,\n\t\t9953\n\t],\n\t\"./keys_fr_belgian.json\": [\n\t\t39330,\n\t\t9953\n\t],\n\t\"./keys_fr_belgian_period\": [\n\t\t17494,\n\t\t8623\n\t],\n\t\"./keys_fr_belgian_period.json\": [\n\t\t17494,\n\t\t8623\n\t],\n\t\"./keys_fr_canadian_french\": [\n\t\t74301,\n\t\t4455\n\t],\n\t\"./keys_fr_canadian_french.json\": [\n\t\t74301,\n\t\t4455\n\t],\n\t\"./keys_fr_canadian_standard\": [\n\t\t76297,\n\t\t2000\n\t],\n\t\"./keys_fr_canadian_standard.json\": [\n\t\t76297,\n\t\t2000\n\t],\n\t\"./keys_fr_swiss\": [\n\t\t41417,\n\t\t6441\n\t],\n\t\"./keys_fr_swiss.json\": [\n\t\t41417,\n\t\t6441\n\t],\n\t\"./keys_ga\": [\n\t\t47467,\n\t\t7711\n\t],\n\t\"./keys_ga.json\": [\n\t\t47467,\n\t\t7711\n\t],\n\t\"./keys_gd\": [\n\t\t50596,\n\t\t6067\n\t],\n\t\"./keys_gd.json\": [\n\t\t50596,\n\t\t6067\n\t],\n\t\"./keys_gn\": [\n\t\t78996,\n\t\t7894\n\t],\n\t\"./keys_gn.json\": [\n\t\t78996,\n\t\t7894\n\t],\n\t\"./keys_got\": [\n\t\t45327,\n\t\t8760\n\t],\n\t\"./keys_got.json\": [\n\t\t45327,\n\t\t8760\n\t],\n\t\"./keys_gu\": [\n\t\t21372,\n\t\t4401\n\t],\n\t\"./keys_gu.json\": [\n\t\t21372,\n\t\t4401\n\t],\n\t\"./keys_ha\": [\n\t\t28061,\n\t\t2590\n\t],\n\t\"./keys_ha.json\": [\n\t\t28061,\n\t\t2590\n\t],\n\t\"./keys_haw\": [\n\t\t63525,\n\t\t12\n\t],\n\t\"./keys_haw.json\": [\n\t\t63525,\n\t\t12\n\t],\n\t\"./keys_he\": [\n\t\t2357,\n\t\t8247\n\t],\n\t\"./keys_he.json\": [\n\t\t2357,\n\t\t8247\n\t],\n\t\"./keys_he_standard\": [\n\t\t58311,\n\t\t992\n\t],\n\t\"./keys_he_standard.json\": [\n\t\t58311,\n\t\t992\n\t],\n\t\"./keys_hi\": [\n\t\t55225,\n\t\t5824\n\t],\n\t\"./keys_hi.json\": [\n\t\t55225,\n\t\t5824\n\t],\n\t\"./keys_hi_traditional\": [\n\t\t48923,\n\t\t8168\n\t],\n\t\"./keys_hi_traditional.json\": [\n\t\t48923,\n\t\t8168\n\t],\n\t\"./keys_hu\": [\n\t\t4526,\n\t\t5192\n\t],\n\t\"./keys_hu.json\": [\n\t\t4526,\n\t\t5192\n\t],\n\t\"./keys_hu_101\": [\n\t\t3013,\n\t\t653\n\t],\n\t\"./keys_hu_101.json\": [\n\t\t3013,\n\t\t653\n\t],\n\t\"./keys_hy\": [\n\t\t15584,\n\t\t4168\n\t],\n\t\"./keys_hy.json\": [\n\t\t15584,\n\t\t4168\n\t],\n\t\"./keys_hy_phonetic\": [\n\t\t28860,\n\t\t2069\n\t],\n\t\"./keys_hy_phonetic.json\": [\n\t\t28860,\n\t\t2069\n\t],\n\t\"./keys_ig\": [\n\t\t4055,\n\t\t1146\n\t],\n\t\"./keys_ig.json\": [\n\t\t4055,\n\t\t1146\n\t],\n\t\"./keys_is\": [\n\t\t87591,\n\t\t7498\n\t],\n\t\"./keys_is.json\": [\n\t\t87591,\n\t\t7498\n\t],\n\t\"./keys_it\": [\n\t\t24277,\n\t\t7052\n\t],\n\t\"./keys_it.json\": [\n\t\t24277,\n\t\t7052\n\t],\n\t\"./keys_it_142\": [\n\t\t83333,\n\t\t8008\n\t],\n\t\"./keys_it_142.json\": [\n\t\t83333,\n\t\t8008\n\t],\n\t\"./keys_iu\": [\n\t\t79407,\n\t\t7809\n\t],\n\t\"./keys_iu.json\": [\n\t\t79407,\n\t\t7809\n\t],\n\t\"./keys_iu_latin\": [\n\t\t90290,\n\t\t6028\n\t],\n\t\"./keys_iu_latin.json\": [\n\t\t90290,\n\t\t6028\n\t],\n\t\"./keys_jv\": [\n\t\t83271,\n\t\t8859\n\t],\n\t\"./keys_jv.json\": [\n\t\t83271,\n\t\t8859\n\t],\n\t\"./keys_ka\": [\n\t\t36196,\n\t\t8559\n\t],\n\t\"./keys_ka.json\": [\n\t\t36196,\n\t\t8559\n\t],\n\t\"./keys_ka_ergonomic\": [\n\t\t76892,\n\t\t6546\n\t],\n\t\"./keys_ka_ergonomic.json\": [\n\t\t76892,\n\t\t6546\n\t],\n\t\"./keys_ka_qwerty\": [\n\t\t84211,\n\t\t7602\n\t],\n\t\"./keys_ka_qwerty.json\": [\n\t\t84211,\n\t\t7602\n\t],\n\t\"./keys_khb\": [\n\t\t93128,\n\t\t5955\n\t],\n\t\"./keys_khb.json\": [\n\t\t93128,\n\t\t5955\n\t],\n\t\"./keys_khb_tai_le\": [\n\t\t16011,\n\t\t6723\n\t],\n\t\"./keys_khb_tai_le.json\": [\n\t\t16011,\n\t\t6723\n\t],\n\t\"./keys_kk\": [\n\t\t81713,\n\t\t1943\n\t],\n\t\"./keys_kk.json\": [\n\t\t81713,\n\t\t1943\n\t],\n\t\"./keys_kl\": [\n\t\t87006,\n\t\t8305\n\t],\n\t\"./keys_kl.json\": [\n\t\t87006,\n\t\t8305\n\t],\n\t\"./keys_km\": [\n\t\t86151,\n\t\t5633\n\t],\n\t\"./keys_km.json\": [\n\t\t86151,\n\t\t5633\n\t],\n\t\"./keys_km_nida\": [\n\t\t91831,\n\t\t1091\n\t],\n\t\"./keys_km_nida.json\": [\n\t\t91831,\n\t\t1091\n\t],\n\t\"./keys_kn\": [\n\t\t88868,\n\t\t3174\n\t],\n\t\"./keys_kn.json\": [\n\t\t88868,\n\t\t3174\n\t],\n\t\"./keys_ko\": [\n\t\t96130,\n\t\t7527\n\t],\n\t\"./keys_ko.json\": [\n\t\t96130,\n\t\t7527\n\t],\n\t\"./keys_ky\": [\n\t\t49911,\n\t\t8692\n\t],\n\t\"./keys_ky.json\": [\n\t\t49911,\n\t\t8692\n\t],\n\t\"./keys_la_old_italic\": [\n\t\t72596,\n\t\t1001\n\t],\n\t\"./keys_la_old_italic.json\": [\n\t\t72596,\n\t\t1001\n\t],\n\t\"./keys_lb\": [\n\t\t6012,\n\t\t608\n\t],\n\t\"./keys_lb.json\": [\n\t\t6012,\n\t\t608\n\t],\n\t\"./keys_lis\": [\n\t\t86353,\n\t\t3998\n\t],\n\t\"./keys_lis.json\": [\n\t\t86353,\n\t\t3998\n\t],\n\t\"./keys_lis_standard\": [\n\t\t70912,\n\t\t842\n\t],\n\t\"./keys_lis_standard.json\": [\n\t\t70912,\n\t\t842\n\t],\n\t\"./keys_lo\": [\n\t\t34659,\n\t\t8211\n\t],\n\t\"./keys_lo.json\": [\n\t\t34659,\n\t\t8211\n\t],\n\t\"./keys_lt\": [\n\t\t92979,\n\t\t7435\n\t],\n\t\"./keys_lt.json\": [\n\t\t92979,\n\t\t7435\n\t],\n\t\"./keys_lt_ibm\": [\n\t\t90075,\n\t\t356\n\t],\n\t\"./keys_lt_ibm.json\": [\n\t\t90075,\n\t\t356\n\t],\n\t\"./keys_lt_standard\": [\n\t\t70040,\n\t\t6786\n\t],\n\t\"./keys_lt_standard.json\": [\n\t\t70040,\n\t\t6786\n\t],\n\t\"./keys_lv\": [\n\t\t25622,\n\t\t4433\n\t],\n\t\"./keys_lv.json\": [\n\t\t25622,\n\t\t4433\n\t],\n\t\"./keys_lv_qwerty\": [\n\t\t70689,\n\t\t1790\n\t],\n\t\"./keys_lv_qwerty.json\": [\n\t\t70689,\n\t\t1790\n\t],\n\t\"./keys_lv_standard\": [\n\t\t68148,\n\t\t6853\n\t],\n\t\"./keys_lv_standard.json\": [\n\t\t68148,\n\t\t6853\n\t],\n\t\"./keys_man\": [\n\t\t95287,\n\t\t5569\n\t],\n\t\"./keys_man.json\": [\n\t\t95287,\n\t\t5569\n\t],\n\t\"./keys_mi\": [\n\t\t97585,\n\t\t9522\n\t],\n\t\"./keys_mi.json\": [\n\t\t97585,\n\t\t9522\n\t],\n\t\"./keys_mk\": [\n\t\t8069,\n\t\t2033\n\t],\n\t\"./keys_mk.json\": [\n\t\t8069,\n\t\t2033\n\t],\n\t\"./keys_ml\": [\n\t\t79302,\n\t\t8319\n\t],\n\t\"./keys_ml.json\": [\n\t\t79302,\n\t\t8319\n\t],\n\t\"./keys_mn\": [\n\t\t78647,\n\t\t2200\n\t],\n\t\"./keys_mn.json\": [\n\t\t78647,\n\t\t2200\n\t],\n\t\"./keys_mn_phags_pa\": [\n\t\t94641,\n\t\t986\n\t],\n\t\"./keys_mn_phags_pa.json\": [\n\t\t94641,\n\t\t986\n\t],\n\t\"./keys_mn_traditional\": [\n\t\t1301,\n\t\t5822\n\t],\n\t\"./keys_mn_traditional.json\": [\n\t\t1301,\n\t\t5822\n\t],\n\t\"./keys_mr\": [\n\t\t28928,\n\t\t7893\n\t],\n\t\"./keys_mr.json\": [\n\t\t28928,\n\t\t7893\n\t],\n\t\"./keys_mt\": [\n\t\t5848,\n\t\t8975\n\t],\n\t\"./keys_mt.json\": [\n\t\t5848,\n\t\t8975\n\t],\n\t\"./keys_mt_101\": [\n\t\t10244,\n\t\t3185\n\t],\n\t\"./keys_mt_101.json\": [\n\t\t10244,\n\t\t3185\n\t],\n\t\"./keys_my\": [\n\t\t14052,\n\t\t6927\n\t],\n\t\"./keys_my.json\": [\n\t\t14052,\n\t\t6927\n\t],\n\t\"./keys_nb\": [\n\t\t56360,\n\t\t9974\n\t],\n\t\"./keys_nb.json\": [\n\t\t56360,\n\t\t9974\n\t],\n\t\"./keys_nb_sami\": [\n\t\t96408,\n\t\t4539\n\t],\n\t\"./keys_nb_sami.json\": [\n\t\t96408,\n\t\t4539\n\t],\n\t\"./keys_ne\": [\n\t\t97192,\n\t\t7856\n\t],\n\t\"./keys_ne.json\": [\n\t\t97192,\n\t\t7856\n\t],\n\t\"./keys_nl\": [\n\t\t37853,\n\t\t388\n\t],\n\t\"./keys_nl.json\": [\n\t\t37853,\n\t\t388\n\t],\n\t\"./keys_nl_period\": [\n\t\t80045,\n\t\t9335\n\t],\n\t\"./keys_nl_period.json\": [\n\t\t80045,\n\t\t9335\n\t],\n\t\"./keys_non\": [\n\t\t50248,\n\t\t7353\n\t],\n\t\"./keys_non.json\": [\n\t\t50248,\n\t\t7353\n\t],\n\t\"./keys_nso\": [\n\t\t34757,\n\t\t3532\n\t],\n\t\"./keys_nso.json\": [\n\t\t34757,\n\t\t3532\n\t],\n\t\"./keys_or\": [\n\t\t40914,\n\t\t178\n\t],\n\t\"./keys_or.json\": [\n\t\t40914,\n\t\t178\n\t],\n\t\"./keys_pa\": [\n\t\t51095,\n\t\t5608\n\t],\n\t\"./keys_pa.json\": [\n\t\t51095,\n\t\t5608\n\t],\n\t\"./keys_pl\": [\n\t\t91654,\n\t\t7401\n\t],\n\t\"./keys_pl.json\": [\n\t\t91654,\n\t\t7401\n\t],\n\t\"./keys_pl_programmers\": [\n\t\t188,\n\t\t2368\n\t],\n\t\"./keys_pl_programmers.json\": [\n\t\t188,\n\t\t2368\n\t],\n\t\"./keys_ps\": [\n\t\t65138,\n\t\t4009\n\t],\n\t\"./keys_ps.json\": [\n\t\t65138,\n\t\t4009\n\t],\n\t\"./keys_pt\": [\n\t\t33474,\n\t\t3955\n\t],\n\t\"./keys_pt.json\": [\n\t\t33474,\n\t\t3955\n\t],\n\t\"./keys_pt_abnt\": [\n\t\t84986,\n\t\t5341\n\t],\n\t\"./keys_pt_abnt.json\": [\n\t\t84986,\n\t\t5341\n\t],\n\t\"./keys_pt_abnt2\": [\n\t\t50167,\n\t\t1731\n\t],\n\t\"./keys_pt_abnt2.json\": [\n\t\t50167,\n\t\t1731\n\t],\n\t\"./keys_ro\": [\n\t\t35695,\n\t\t2675\n\t],\n\t\"./keys_ro.json\": [\n\t\t35695,\n\t\t2675\n\t],\n\t\"./keys_ro_programmers\": [\n\t\t53693,\n\t\t5674\n\t],\n\t\"./keys_ro_programmers.json\": [\n\t\t53693,\n\t\t5674\n\t],\n\t\"./keys_ru\": [\n\t\t62672,\n\t\t9430\n\t],\n\t\"./keys_ru.json\": [\n\t\t62672,\n\t\t9430\n\t],\n\t\"./keys_ru_phonetic\": [\n\t\t48927,\n\t\t4411\n\t],\n\t\"./keys_ru_phonetic.json\": [\n\t\t48927,\n\t\t4411\n\t],\n\t\"./keys_sah\": [\n\t\t75234,\n\t\t3057\n\t],\n\t\"./keys_sah.json\": [\n\t\t75234,\n\t\t3057\n\t],\n\t\"./keys_sat\": [\n\t\t767,\n\t\t7392\n\t],\n\t\"./keys_sat.json\": [\n\t\t767,\n\t\t7392\n\t],\n\t\"./keys_se\": [\n\t\t31828,\n\t\t5937\n\t],\n\t\"./keys_se.json\": [\n\t\t31828,\n\t\t5937\n\t],\n\t\"./keys_se_finland_sweden\": [\n\t\t44292,\n\t\t3508\n\t],\n\t\"./keys_se_finland_sweden.json\": [\n\t\t44292,\n\t\t3508\n\t],\n\t\"./keys_si\": [\n\t\t39915,\n\t\t6484\n\t],\n\t\"./keys_si.json\": [\n\t\t39915,\n\t\t6484\n\t],\n\t\"./keys_sk\": [\n\t\t49999,\n\t\t2972\n\t],\n\t\"./keys_sk.json\": [\n\t\t49999,\n\t\t2972\n\t],\n\t\"./keys_sk_qwerty\": [\n\t\t92153,\n\t\t6015\n\t],\n\t\"./keys_sk_qwerty.json\": [\n\t\t92153,\n\t\t6015\n\t],\n\t\"./keys_sl\": [\n\t\t11998,\n\t\t38\n\t],\n\t\"./keys_sl.json\": [\n\t\t11998,\n\t\t38\n\t],\n\t\"./keys_so\": [\n\t\t32727,\n\t\t5410\n\t],\n\t\"./keys_so.json\": [\n\t\t32727,\n\t\t5410\n\t],\n\t\"./keys_sq\": [\n\t\t93752,\n\t\t494\n\t],\n\t\"./keys_sq.json\": [\n\t\t93752,\n\t\t494\n\t],\n\t\"./keys_sr\": [\n\t\t45358,\n\t\t7854\n\t],\n\t\"./keys_sr.json\": [\n\t\t45358,\n\t\t7854\n\t],\n\t\"./keys_sr_latin\": [\n\t\t80121,\n\t\t6626\n\t],\n\t\"./keys_sr_latin.json\": [\n\t\t80121,\n\t\t6626\n\t],\n\t\"./keys_srb\": [\n\t\t929,\n\t\t8873\n\t],\n\t\"./keys_srb.json\": [\n\t\t929,\n\t\t8873\n\t],\n\t\"./keys_sv\": [\n\t\t74243,\n\t\t6692\n\t],\n\t\"./keys_sv.json\": [\n\t\t74243,\n\t\t6692\n\t],\n\t\"./keys_sv_sami\": [\n\t\t26330,\n\t\t7096\n\t],\n\t\"./keys_sv_sami.json\": [\n\t\t26330,\n\t\t7096\n\t],\n\t\"./keys_syr\": [\n\t\t20591,\n\t\t7277\n\t],\n\t\"./keys_syr.json\": [\n\t\t20591,\n\t\t7277\n\t],\n\t\"./keys_syr_phonetic\": [\n\t\t85609,\n\t\t746\n\t],\n\t\"./keys_syr_phonetic.json\": [\n\t\t85609,\n\t\t746\n\t],\n\t\"./keys_ta\": [\n\t\t17843,\n\t\t5760\n\t],\n\t\"./keys_ta.json\": [\n\t\t17843,\n\t\t5760\n\t],\n\t\"./keys_te\": [\n\t\t69130,\n\t\t9800\n\t],\n\t\"./keys_te.json\": [\n\t\t69130,\n\t\t9800\n\t],\n\t\"./keys_tg\": [\n\t\t79797,\n\t\t3944\n\t],\n\t\"./keys_tg.json\": [\n\t\t79797,\n\t\t3944\n\t],\n\t\"./keys_th\": [\n\t\t70732,\n\t\t7746\n\t],\n\t\"./keys_th.json\": [\n\t\t70732,\n\t\t7746\n\t],\n\t\"./keys_th_pattachote\": [\n\t\t85219,\n\t\t7632\n\t],\n\t\"./keys_th_pattachote.json\": [\n\t\t85219,\n\t\t7632\n\t],\n\t\"./keys_tk\": [\n\t\t31794,\n\t\t2924\n\t],\n\t\"./keys_tk.json\": [\n\t\t31794,\n\t\t2924\n\t],\n\t\"./keys_tmh\": [\n\t\t89416,\n\t\t426\n\t],\n\t\"./keys_tmh.json\": [\n\t\t89416,\n\t\t426\n\t],\n\t\"./keys_tmh_extended\": [\n\t\t33866,\n\t\t607\n\t],\n\t\"./keys_tmh_extended.json\": [\n\t\t33866,\n\t\t607\n\t],\n\t\"./keys_tn\": [\n\t\t79848,\n\t\t289\n\t],\n\t\"./keys_tn.json\": [\n\t\t79848,\n\t\t289\n\t],\n\t\"./keys_tr\": [\n\t\t32066,\n\t\t5571\n\t],\n\t\"./keys_tr.json\": [\n\t\t32066,\n\t\t5571\n\t],\n\t\"./keys_tr_f\": [\n\t\t77176,\n\t\t6749\n\t],\n\t\"./keys_tr_f.json\": [\n\t\t77176,\n\t\t6749\n\t],\n\t\"./keys_tt\": [\n\t\t13069,\n\t\t155\n\t],\n\t\"./keys_tt.json\": [\n\t\t13069,\n\t\t155\n\t],\n\t\"./keys_tzm\": [\n\t\t93917,\n\t\t1837\n\t],\n\t\"./keys_tzm.json\": [\n\t\t93917,\n\t\t1837\n\t],\n\t\"./keys_ug\": [\n\t\t29436,\n\t\t380\n\t],\n\t\"./keys_ug.json\": [\n\t\t29436,\n\t\t380\n\t],\n\t\"./keys_uk\": [\n\t\t18936,\n\t\t1656\n\t],\n\t\"./keys_uk.json\": [\n\t\t18936,\n\t\t1656\n\t],\n\t\"./keys_uk_enhanced\": [\n\t\t60895,\n\t\t6629\n\t],\n\t\"./keys_uk_enhanced.json\": [\n\t\t60895,\n\t\t6629\n\t],\n\t\"./keys_ur\": [\n\t\t48883,\n\t\t5443\n\t],\n\t\"./keys_ur.json\": [\n\t\t48883,\n\t\t5443\n\t],\n\t\"./keys_us_international\": [\n\t\t61141,\n\t\t1003\n\t],\n\t\"./keys_us_international.json\": [\n\t\t61141,\n\t\t1003\n\t],\n\t\"./keys_uz\": [\n\t\t8196,\n\t\t4239\n\t],\n\t\"./keys_uz.json\": [\n\t\t8196,\n\t\t4239\n\t],\n\t\"./keys_vi\": [\n\t\t88305,\n\t\t2911\n\t],\n\t\"./keys_vi.json\": [\n\t\t88305,\n\t\t2911\n\t],\n\t\"./keys_wo\": [\n\t\t97528,\n\t\t1533\n\t],\n\t\"./keys_wo.json\": [\n\t\t97528,\n\t\t1533\n\t],\n\t\"./keys_yo\": [\n\t\t8962,\n\t\t9185\n\t],\n\t\"./keys_yo.json\": [\n\t\t8962,\n\t\t9185\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 = 20201;\nmodule.exports = webpackAsyncContext;"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","ActionButton","children","secondary","className","props","styles","join","defaultProps","DialogBox","dismissText","classes","onDismiss","rest","onClick","faCollections","brands","default","solid","round","Icon","name","collection","iconProps","groupClass","iconClass","propTypes","PropTypes","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","Spinner","i","DefinitionsContext","createContext","keycodes","behaviours","behaviors","behaviorBinds","glyphs","selectDefinitions","state","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","initialState","reducers","addBehavior","action","payload","behavior","updateBehavior","behaviorIndex","omit","resolveBehaviorParams","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","get","getBehaviourParams","layerParams","param","createAction","currentIndex","targetIndex","sources","layerIndices","map","bothBefore","bothAfter","betweenOldAndNew","createLayerIndexMapping","defaultSelectPhandleArrays","selectPhandleArrays","defines","selectedIndex","Number","isNaN","toString","_isPlaceholder","DEFAULT_BIND_BEHAVIOUR","selectLayers","layersSlice","createLayer","times","createEmptyBinding","updateLayerMetadata","layerIndex","label","renameLayer","repositionLayer","layer","replacementIndex","deleteLayer","updateKeyBinding","bindIndex","updateSensorBindings","sensorIndex","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","invertedNeutralColors","colors","Select","theme","isDark","matches","fontSize","color","container","baseStyles","menu","isSearchable","dayjs","dayjsRelative","goodConclusions","badConclusions","FuzzyTimestamp","timestamp","fromNow","fuzzy","setFuzzy","interval","setInterval","clearInterval","title","BuildLink","latestRun","mappedIcon","includes","conclusion","html_url","head_sha","slice","updated_at","id","status","created_at","Commit","onConfirm","onCancel","message","setMessage","placeholder","onChange","textAlign","gap","stateSelector","Actions","source","sourceOther","_unmodifiedKeymap","saving","experimentalSettings","latestBuild","hasChanged","is","handleCommitChanges","github","repository","branch","updated","data","isProtected","disabled","commitDialogOpen","websocketUrl","config","API","url","startsWith","headers","this","token","Authorization","axios","response","console","error","emit","initializing","initEvents","installationUrl","URLSearchParams","location","search","beginLoginFlow","setTimeout","localStorage","auth_token","history","replaceState","pathname","_request","suspended","installations","installation","suspended_at","warn","username","repositories","repoInstallationMap","bufferedMessages","send","socket","readyState","WebSocket","OPEN","log","onopen","Date","shift","flush","JSON","stringify","onclose","onerror","err","onmessage","parse","workflow_run","on","fetchAvailableFeatures","removeItem","installationId","find","every","some","repository_selection","repo","encodeURIComponent","full_name","URL","query","set","layouts","info","defaultLayout","preferredLayout","chosen","layoutMetadata","keyboards","defaultKeymap","sensors","isGitHubAuthorized","betaFeatures","features","enableBehaviorEditing","method","EventEmitter","api","loadAvailableKeyboards","fetch","json","loadKeyboardFiles","path","ok","Error","updateKeymap","body","parseBoolean","val","toLowerCase","apiBaseUrl","process","githubAppName","enableGitHub","enableLocal","enableDemo","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","bind","description","macro","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","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","sourceChoices","collapsible","selectedSource","getItem","defaultSource","KeymapBindingsUsePreprocessorMacros","KeymapParsingFailed","KeymapUsingMiryoku","MissingRootNode","ZmkNodefreeConfig","SuggestAutoLayoutTweak","LocalPicker","DemoPicker","GithubPicker","KeyboardPicker","toggleState","setToggleState","onSelect","wrapperRef","setSource","autoGenerated","setLayoutInfo","showDialog","setShowDialog","closeDialog","isExpanded","setExpanded","setCompact","showLayoutHelp","callback","enabled","isInDocument","isInWrapper","addEventListener","removeEventListener","useClickOutsideHandler","handleKeyboardSelected","warningFlags","getErrorDialog","handleError","dialog","dialogProps","setItem","classNames","getOptionLabel","getOptionValue","onError","expanded","onExpand","formatStackFrame","frame","fileName","lineNumber","columnNumber","newGithubIssue","reportError","stacktrace","UnexpectedError","stack","setStack","formattedError","setFormattedError","copied","setCopied","StackTrace","fromError","parseStack","trim","formatErrorText","maxWidth","clipboard","writeText","then","ErrorBoundary","React","KeymapSaveFailed","saveError","settingsVisible","handler","run","head_branch","build","other","handleUpdateSettings","openSettingsDialog","SourcePicker","light","dark","system","Definitions","Layout","init","INITIAL_STATE","keyboardReducer","combineReducers","behaviorsReducer","combosReducer","layersReducer","macrosReducer","configureStore","reducer","newState","newKeyboardState","pick","selectKeyboard","newKeymapState","unsaved","keymapSaveSuccess","themes","indexOf","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","parsedParams","firstParsedParam","additionalParams","getAdditionalParams","SearchContext","___CSS_LOADER_EXPORT___","module","locals","webpackAsyncContext","req","__webpack_require__","o","resolve","ids","t","exports"],"sourceRoot":""}
|