1
|
{"version":3,"file":"5858.6e8f5975904a2a2282f5.js","mappings":"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U,uBACV,UAAa,wBAEd,6BCXA,IAAIlF,EAAM,CACT,eAAgB,CACf,MACA,MAED,eAAgB,CACf,MACA,MAED,mBAAoB,CACnB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,yBAA0B,CACzB,KACA,MAED,iBAAkB,CACjB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,iBAAkB,CACjB,KACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,KACA,MAED,cAAe,CACd,MACA,MAED,gBAAiB,CAChB,MACA,MAED,eAAgB,CACf,MACA,MAED,sBAAuB,CACtB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,cAAe,CACd,MACA,MAED,aAAc,CACb,MACA,MAED,oBAAqB,CACpB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,wBAAyB,CACxB,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,sBAAuB,CACtB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,eAAgB,CACf,MACA,MAED,qBAAsB,CACrB,MACA,MAED,cAAe,CACd,MACA,MAED,cAAe,CACd,MACA,MAED,eAAgB,CACf,MACA,MAED,eAAgB,CACf,MACA,MAED,2BAA4B,CAC3B,KACA,MAED,qBAAsB,CACrB,MACA,MAED,eAAgB,CACf,MACA,MAED,oBAAqB,CACpB,MACA,MAED,oBAAqB,CACpB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,aAAc,CACb,MACA,MAED,kBAAmB,CAClB,MACA,MAED,kBAAmB,CAClB,KACA,MAED,iBAAkB,CACjB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,gBAAiB,CAChB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,qBAAsB,CACrB,MACA,MAED,sBAAuB,CACtB,MACA,MAED,aAAc,CACb,MACA,MAED,mBAAoB,CACnB,MACA,MAED,eAAgB,CACf,MACA,MAED,mBAAoB,CACnB,MACA,MAED,kBAAmB,CAClB,MACA,MAED,eAAgB,CACf,MACA,MAED,oBAAqB,CACpB,MACA,MAED,eAAgB,CACf,MACA,MAED,cAAe,CACd,MACA,MAED,eAAgB,CACf,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,+BAAgC,CAC/B,KACA,MAED,8BAA+B,CAC9B,KACA,MAED,qBAAsB,CACrB,MACA,MAED,cAAe,CACd,MACA,MAED,gBAAiB,CAChB,MACA,MAED,0BAA2B,CAC1B,MACA,MAED,mBAAoB,CACnB,MACA,MAED,iBAAkB,CACjB,MACA,MAED,iBAAkB,CACjB,MACA,OAGF,SAASmF,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEtF,EAAKoF,GAC9B,OAAOrL,QAAQC,UAAUmB,MAAK,WAC7B,IAAIoK,EAAI,IAAIC,MAAM,uBAAyBJ,EAAM,KAEjD,MADAG,EAAEE,KAAO,mBACHF,CACP,IAGD,IAAIG,EAAM1F,EAAIoF,GAAMjF,EAAKuF,EAAI,GAC7B,OAAOL,EAAoBE,EAAEG,EAAI,IAAIvK,MAAK,WACzC,OAAOkK,EAAoBM,EAAExF,EAAI,GAClC,GACD,CACAgF,EAAoBxG,KAAO,WAAa,OAAOD,OAAOC,KAAKqB,EAAM,EACjEmF,EAAoBhF,GAAK,MACzB8E,EAAOW,QAAUT","sources":["webpack:///./src/Common/action-button.module.css?ed83","webpack:///./src/Common/ActionButton.js","webpack:///./node_modules/idb-keyval/dist/index.js","webpack:///./src/Sources/FileSystem/store.js","webpack:///./src/Sources/FileSystem/ImportKeymapsButton.js","webpack:///./src/Sources/FileSystem/FileSystemKeymapPicker.js","webpack:///./src/Sources/FileSystem/ImportKeymapsDialog.js","webpack:///./src/Sources/FileSystem/updater.js","webpack:///./src/Sources/FileSystem/ExportKeymapButton.js","webpack:///./src/Sources/FileSystem/FeedbackModalButton.js","webpack:///./src/Sources/FileSystem/FeedbackDialog.js","webpack:///./src/Sources/FileSystem/FileSystemPicker.js","webpack:///./src/Common/action-button.module.css","webpack:///./node_modules/keymap-editor-contrib/keyboard-data/ lazy ^\\.\\/.*\\.json$ include: \\.json$ chunkName: keyboard-data/[request]-metadata 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","function promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const dbp = promisifyRequest(request);\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","import { get as idbGet, set as idbSet } from 'idb-keyval'\nimport { createContext, useMemo, useReducer } from 'react'\nimport { createSlice } from '@reduxjs/toolkit'\n\nconst STORAGE_KEY_HANDLES = 'KEYMAP_EDITOR_IDB_FS_KEYMAP_HANDLES'\nconst STORAGE_KEY_SELECTED_HANDLE_INDEX = 'KEYMAP_EDITOR_IDB_FS_KEYMAP_SELECTED_HANDLE_INDEX'\n\n// Using thunks would be better but because I'm not putting this slice into a\n// proper redux store I don't actually have the thunk middleware loaded\n// TODO: is adding the middleware manually feasible?\n// TODO: is having multiple independent stores possible?\nexport const loadHandles = () => idbGet(STORAGE_KEY_HANDLES)\nexport const saveHandles = handles => idbSet(STORAGE_KEY_HANDLES, handles)\nexport const loadActiveHandle = () => idbGet(STORAGE_KEY_SELECTED_HANDLE_INDEX)\nexport const saveActiveHandle = index => idbSet(STORAGE_KEY_SELECTED_HANDLE_INDEX, index)\n\nconst initialState = () => ({\n keymapHandles: [],\n selectedHandleIndex: null,\n activeKeymap: {\n handleIndex: null,\n keymapRaw: null,\n keymapParsed: null,\n metadataParsed: null\n },\n importModalOpen: false,\n feedbackModalOpen: false,\n pendingImports: null\n})\n\nconst slice = createSlice({\n name: 'filesystem-picker',\n initialState,\n reducers: {\n openImportModal (state) { state.importModalOpen = true },\n closeImportModal (state) { state.importModalOpen = false },\n openFeedbackModal (state) { state.feedbackModalOpen = true },\n closeFeedbackModal (state) { state.feedbackModalOpen = false },\n selectFilesForImport (state, action) {\n const { handles } = action.payload\n state.pendingImports = handles\n },\n updatedHandles (state, action) {\n state.keymapHandles = action.payload.handles\n },\n initHandles (state, action) {\n const { handles = [] } = action.payload\n // No point in trying to initialize the active handle based on a previous\n // session, as this is likely happening during the initial load before any\n // user interaction and therefore we can't request user permissions.\n state.keymapHandles = handles\n },\n selectHandle (state, action) {\n state.selectedHandleIndex = action.payload.index\n },\n selectKeymap (state, action) {\n const { handleIndex, keymapRaw, keymapParsed, metadataParsed } = action.payload\n state.activeKeymap = {\n handleIndex,\n keymapRaw,\n keymapParsed,\n metadataParsed\n }\n },\n updateActiveKeymap (state, action) {\n const { keymapParsed, keymapRaw } = action.payload\n state.activeKeymap.keymapParsed = keymapParsed\n state.activeKeymap.keymapRaw = keymapRaw\n }\n }\n})\n\nfunction useActionDispatchers (dispatch) {\n return useMemo(() => (\n Object.keys(slice.actions).reduce((actions, action) => {\n actions[action] = (...args) => dispatch(slice.actions[action](...args))\n return actions\n }, {})\n ), [dispatch])\n}\n\nexport function useFileSystemStore () {\n const [state, dispatch] = useReducer(slice.reducer, null, initialState)\n const dispatchers = useActionDispatchers(dispatch)\n\n return [state, dispatchers]\n}\n\nexport const FileSystemContext = createContext([{}, {}])\n\nexport function FileSystemStore ({ children }) {\n const [state, dispatchers] = useFileSystemStore()\n\n return (\n <FileSystemContext.Provider value={[state, dispatchers]}>\n {children}\n </FileSystemContext.Provider>\n )\n}\n\nexport function withFileSystemStore (Component) {\n return props => (\n <FileSystemStore>\n <Component {...props} />\n </FileSystemStore>\n )\n}\n","import { useCallback, useContext } from 'react'\n\nimport Icon from '../../Common/Icon'\nimport { FileSystemContext } from './store'\n\nexport default function ImportKeymapsButton () {\n const [, { openImportModal, selectFilesForImport }] = useContext(FileSystemContext)\n const handleClick = useCallback(async () => {\n const handles = await window.showOpenFilePicker({\n mode: 'readwrite',\n multiple: true,\n excludeAcceptAllOption: true,\n types: [{\n accept: {\n 'text/plain': ['.keymap']\n }\n }]\n })\n\n selectFilesForImport({ handles })\n openImportModal()\n }, [openImportModal, selectFilesForImport])\n\n return (\n <button onClick={handleClick}>\n <Icon name=\"file-import\" /> Import Keymaps\n </button>\n )\n}\n","import { useCallback, useContext, useEffect, useMemo } from 'react'\n\nimport { Select } from '../Controls'\nimport ImportKeymapsButton from './ImportKeymapsButton'\nimport { FileSystemContext, saveActiveHandle } from './store'\nimport extractKeymapData from 'keymap-editor-zmk-backend/lib/extract-keymap-data'\nimport { stripLegacyProperties } from '../../keymap'\n\nconst fileOptions = { mode: 'read' }\n\nexport default function FileSystemKeymapPicker () {\n const [{ keymapHandles, selectedHandleIndex }, { selectHandle, selectKeymap }] = useContext(FileSystemContext)\n const choices = useMemo(() => keymapHandles.map((handle, i) => ({\n id: i, name: handle.name\n })), [keymapHandles])\n\n const handleSelect = useCallback(async choice => {\n await saveActiveHandle(choice.id)\n selectHandle({ index: choice.id })\n }, [selectHandle])\n\n useEffect(() => {\n const index = selectedHandleIndex\n const handle = keymapHandles[index]\n\n if (!handle) {\n return\n }\n\n ;(async function () {\n if (\n await handle.queryPermission(fileOptions) !== 'granted' &&\n await handle.requestPermission(fileOptions) !== 'granted'\n ) {\n return\n }\n\n const name = handle.name.replace('.keymap', '')\n const file = await handle.getFile()\n const text = await file.text()\n const parsed = await extractKeymapData(text)\n const metadata = await import(\n /* webpackInclude: /\\.json$/ */\n /* webpackMode: \"lazy\" */\n /* webpackChunkName: \"keyboard-data/[request]-metadata\" */\n `keymap-editor-contrib/keyboard-data/${name}.json`\n )\n\n stripLegacyProperties(parsed)\n selectKeymap({\n handleIndex: index,\n keymapRaw: text,\n keymapParsed: parsed,\n metadataParsed: metadata\n })\n })()\n }, [keymapHandles, selectedHandleIndex, selectKeymap])\n\n const value = useMemo(\n () => choices[selectedHandleIndex],\n [choices, selectedHandleIndex]\n )\n\n return (\n <Select\n value={value}\n options={choices}\n onChange={handleSelect}\n getOptionLabel={option => option.name}\n getOptionValue={option => option.id}\n >\n <ImportKeymapsButton />\n </Select>\n )\n}\n","import { useCallback, useContext, useMemo } from 'react'\n\nimport keyboardCatalog from 'keymap-editor-contrib/keyboard-catalog.json'\n\nimport ActionButton from '../../Common/ActionButton'\nimport DialogBox from '../../Common/DialogBox'\nimport Icon from '../../Common/Icon'\nimport Modal from '../../Common/Modal'\nimport { FileSystemContext, saveHandles } from './store'\n\nexport default function ImportKeymapsDialog () {\n const [{ pendingImports }, { closeImportModal, updatedHandles }] = useContext(FileSystemContext)\n const acceptedImports = useMemo(() => pendingImports.filter(handle => keymapInCatalog(handle.name)), [pendingImports])\n const rejectedImports = useMemo(() => pendingImports.filter(handle => !keymapInCatalog(handle.name)), [pendingImports])\n\n const handleConfirm = useCallback(async () => {\n await saveHandles(acceptedImports)\n saveHandles(acceptedImports)\n updatedHandles({ handles: acceptedImports })\n closeImportModal()\n }, [acceptedImports, updatedHandles, closeImportModal])\n\n const handleCancel = useCallback(() => {\n closeImportModal()\n }, [closeImportModal])\n\n return (\n <Modal>\n <DialogBox dismissText={null}>\n <h2>Importing Keymaps</h2>\n <h3>Keymap files ready to be imported</h3>\n <ul>\n {pendingImports.map((handle, i) => (\n <li key={i}><Handle value={handle} /></li>\n ))}\n </ul>\n {rejectedImports.length > 0 && (\n <p>\n <em>\n Some keymap files could not be matched with known keyboards and\n will not be imported. This is a work in progress and in the future\n you will have the option to import your own metadata file.\n </em>\n </p>\n )}\n <div style={{ textAlign: 'center' }}>\n <ActionButton onClick={handleConfirm}>Continue</ActionButton>\n <ActionButton onClick={handleCancel} secondary>Cancel</ActionButton>\n </div>\n </DialogBox>\n </Modal>\n )\n}\n\nfunction keymapInCatalog (name) {\n return name.replace('.keymap', '') in keyboardCatalog\n}\n\nfunction Handle ({ value }) {\n return (\n <>\n {keymapInCatalog(value.name)\n ? <Icon name=\"check\" style={{ color: 'mediumseagreen' }} />\n : <Icon name=\"question\" style={{ color: 'firebrick' }} />\n } {value.name}\n </>\n )\n}\n","import cloneDeep from 'lodash/cloneDeep'\nimport isEqual from 'lodash/isEqual'\nimport { useCallback, useContext, useMemo } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport { FileSystemContext } from './store'\nimport applyKeymapChanges from 'keymap-editor-zmk-backend/lib/apply-keymap-changes'\nimport extractKeymapData from 'keymap-editor-zmk-backend/lib/extract-keymap-data'\nimport { stripLegacyProperties } from '../../keymap'\n\nconst keymapSelector = state => state.keyboard?.keymap\nconst settingsSelector = state => state.experimentalSettings\n\nconst fileOptions = { mode: 'readwrite' }\n\nexport default function useKeymapUpdater () {\n const appKeymapState = useSelector(keymapSelector)\n const { enableBehaviorEditing = false } = useSelector(settingsSelector)\n const [\n { keymapHandles, activeKeymap },\n { updateActiveKeymap }\n ] = useContext(FileSystemContext)\n\n const updateNeeded = useMemo(() => (\n appKeymapState &&\n activeKeymap?.keymapParsed &&\n !isEqual(appKeymapState, activeKeymap.keymapParsed)\n ), [appKeymapState, activeKeymap])\n\n const update = useCallback(async function () {\n const handle = keymapHandles[activeKeymap.handleIndex]\n\n if (!handle) {\n return\n }\n\n if (\n await handle.queryPermission(fileOptions) !== 'granted' &&\n await handle.requestPermission(fileOptions) !== 'granted'\n ) {\n return\n }\n\n // When opening the clipboard dialog and a previously parsed keymap differs\n // from the app's current keymap state we're probably wanting to update the\n // keymap source\n const { layouts } = activeKeymap.metadataParsed\n const preferredLayout = appKeymapState.chosen['zmk,matrix_transform']\n ? appKeymapState.chosen['zmk,matrix_transform'].replace(/^&/, '')\n : null\n\n const defaultLayout = Object.keys(layouts)[0]\n const { layout } = (\n layouts[preferredLayout] ||\n layouts[defaultLayout]\n )\n\n const raw = await applyKeymapChanges(layout, cloneDeep(appKeymapState), activeKeymap.keymapRaw, { enableBehaviorEditing })\n const parsed = await extractKeymapData(raw)\n stripLegacyProperties(parsed)\n\n const stream = await handle.createWritable()\n await stream.write(raw)\n stream.close()\n\n updateActiveKeymap({ keymapParsed: parsed, keymapRaw: raw })\n }, [appKeymapState, keymapHandles, activeKeymap, updateActiveKeymap, enableBehaviorEditing])\n\n return [updateNeeded, update]\n}\n","import Icon from '../../Common/Icon'\nimport useKeymapUpdater from './updater'\n\nexport default function ExportKeymapButton () {\n const [updateNeeded, update] = useKeymapUpdater()\n return (\n <button\n disabled={!updateNeeded}\n title={updateNeeded ? 'Save changes' : 'No changes'}\n onClick={update}\n >\n <Icon name=\"file-export\" />\n </button>\n )\n}\n","import { useContext } from 'react'\n\nimport Icon from '../../Common/Icon'\nimport { FileSystemContext } from './store'\n\nexport default function FeedbackModalButton () {\n const [, { openFeedbackModal }] = useContext(FileSystemContext)\n\n return (\n <button onClick={openFeedbackModal}>\n <Icon name=\"comments\" /> Feedback?\n </button>\n )\n}\n","import { useContext } from 'react'\n\nimport ActionButton from '../../Common/ActionButton'\nimport DialogBox from '../../Common/DialogBox'\nimport Modal from '../../Common/Modal'\nimport Link from '../../Common/Link'\nimport {\n GitHubIssuesLink,\n DiscordProfileLink\n} from '../../Dialogs/support'\n\nimport { FileSystemContext } from './store'\n\nconst discussionUrl = 'https://github.com/nickcoutsos/keymap-editor/discussions/106'\nconst DiscussionLink = (\n <Link external href={discussionUrl}>\n Feature Discussion\n </Link>\n)\n\nexport default function FeedbackDialog () {\n const [, { closeFeedbackModal }] = useContext(FileSystemContext)\n\n return (\n <Modal onDismiss={closeFeedbackModal}>\n <DialogBox dismissText={null}>\n <h2>Beta Feedback</h2>\n <p>Hey, feel free to ignore this!</p>\n <p>\n I just launched this feature very quickly, I hope it's working well\n for you! Your feedback, if you can spare a moment, would be immensely\n helpful to me. This feature is completely browser-based which means I\n have no server analytics, so even just letting me know that it worked\n would be cool!\n </p>\n <p>Good ways to contact me:</p>\n <ul>\n <li>Ping me at {DiscordProfileLink}</li>\n <li>File an issue at {GitHubIssuesLink}</li>\n <li>Join the {DiscussionLink}</li>\n </ul>\n <div style={{ textAlign: 'center' }}>\n <ActionButton onClick={closeFeedbackModal}>\n Back to editor\n </ActionButton>\n </div>\n </DialogBox>\n </Modal>\n )\n}\n","import cloneDeep from 'lodash/cloneDeep'\nimport { useContext, useEffect } from 'react'\n\nimport FileSystemKeymapPicker from './FileSystemKeymapPicker'\nimport ImportKeymapsButton from './ImportKeymapsButton'\nimport ImportKeymapsDialog from './ImportKeymapsDialog'\nimport ExportKeymapButton from './ExportKeymapButton'\nimport { loadHandles, FileSystemContext, withFileSystemStore, loadActiveHandle } from './store'\nimport FeedbackModalButton from './FeedbackModalButton'\nimport FeedbackDialog from './FeedbackDialog'\n\nfunction FileSystemPicker ({ onSelect }) {\n const [{\n keymapHandles,\n activeKeymap,\n importModalOpen,\n feedbackModalOpen\n }, { initHandles }] = useContext(FileSystemContext)\n\n useEffect(() => {\n ;(async () => {\n const handles = await loadHandles()\n const activeHandle = await loadActiveHandle()\n\n initHandles({ handles, activeHandle })\n })()\n }, [initHandles])\n\n useEffect(() => {\n if (!activeKeymap.keymapParsed) {\n return\n }\n\n const { keymapParsed: keymap, metadataParsed: metadata } = activeKeymap\n const { layouts } = metadata\n const preferredLayout = keymap.chosen['zmk,matrix_transform']\n ? keymap.chosen['zmk,matrix_transform'].replace(/^&/, '')\n : null\n\n const defaultLayout = Object.keys(layouts)[0]\n const layoutMetadata = (\n layouts[preferredLayout] ||\n layouts[defaultLayout]\n )\n\n onSelect(cloneDeep({\n source: 'filesystem',\n keyboard: metadata.id,\n layoutMetadata,\n layout: layoutMetadata.layout,\n keymap,\n sensors: layoutMetadata.sensors || []\n }))\n }, [activeKeymap, onSelect])\n\n return (\n <>\n {keymapHandles.length > 0\n ? <FileSystemKeymapPicker />\n : <ImportKeymapsButton />}\n {activeKeymap?.keymapParsed && <ExportKeymapButton />}\n {importModalOpen && <ImportKeymapsDialog />}\n <FeedbackModalButton />\n {feedbackModalOpen && <FeedbackDialog />}\n </>\n )\n}\n\nexport default withFileSystemStore(FileSystemPicker)\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","var map = {\n\t\"./a_dux.json\": [\n\t\t73158,\n\t\t3712\n\t],\n\t\"./bat43.json\": [\n\t\t60888,\n\t\t3712\n\t],\n\t\"./bdn9_rev2.json\": [\n\t\t94591,\n\t\t3712\n\t],\n\t\"./bfo9000.json\": [\n\t\t19684,\n\t\t3712\n\t],\n\t\"./boardsource3x4.json\": [\n\t\t88602,\n\t\t3712\n\t],\n\t\"./boardsource5x12.json\": [\n\t\t8058,\n\t\t3712\n\t],\n\t\"./bt60_v1.json\": [\n\t\t92628,\n\t\t3712\n\t],\n\t\"./bt60_v1_hs.json\": [\n\t\t84628,\n\t\t3712\n\t],\n\t\"./bt60_v2.json\": [\n\t\t9417,\n\t\t3712\n\t],\n\t\"./bt65_v1.json\": [\n\t\t88455,\n\t\t3712\n\t],\n\t\"./bt75_v1.json\": [\n\t\t25397,\n\t\t3712\n\t],\n\t\"./chalice.json\": [\n\t\t7936,\n\t\t3712\n\t],\n\t\"./clog.json\": [\n\t\t31638,\n\t\t3712\n\t],\n\t\"./contra.json\": [\n\t\t42718,\n\t\t3712\n\t],\n\t\"./corne.json\": [\n\t\t26453,\n\t\t3712\n\t],\n\t\"./corneish_zen.json\": [\n\t\t39757,\n\t\t3712\n\t],\n\t\"./cradio.json\": [\n\t\t62089,\n\t\t3712\n\t],\n\t\"./crbn.json\": [\n\t\t48945,\n\t\t3712\n\t],\n\t\"./eek.json\": [\n\t\t63072,\n\t\t3712\n\t],\n\t\"./elephant42.json\": [\n\t\t83634,\n\t\t3712\n\t],\n\t\"./ergodash.json\": [\n\t\t68972,\n\t\t3712\n\t],\n\t\"./ergodox.json\": [\n\t\t75507,\n\t\t3712\n\t],\n\t\"./eternal_keypad.json\": [\n\t\t69416,\n\t\t3712\n\t],\n\t\"./eternal_keypad_lefty.json\": [\n\t\t56785,\n\t\t3712\n\t],\n\t\"./ferris_rev02.json\": [\n\t\t97365,\n\t\t3712\n\t],\n\t\"./fourier.json\": [\n\t\t14446,\n\t\t3712\n\t],\n\t\"./helix.json\": [\n\t\t73549,\n\t\t3712\n\t],\n\t\"./hummingbird.json\": [\n\t\t98321,\n\t\t3712\n\t],\n\t\"./iris.json\": [\n\t\t55262,\n\t\t3712\n\t],\n\t\"./jian.json\": [\n\t\t46228,\n\t\t3712\n\t],\n\t\"./jiran.json\": [\n\t\t14465,\n\t\t3712\n\t],\n\t\"./jorne.json\": [\n\t\t19151,\n\t\t3712\n\t],\n\t\"./kbdfans_tofu65_v2.json\": [\n\t\t7450,\n\t\t3712\n\t],\n\t\"./knob_goblin.json\": [\n\t\t71497,\n\t\t3712\n\t],\n\t\"./kyria.json\": [\n\t\t34458,\n\t\t3712\n\t],\n\t\"./kyria_rev2.json\": [\n\t\t70165,\n\t\t3712\n\t],\n\t\"./kyria_rev3.json\": [\n\t\t33669,\n\t\t3712\n\t],\n\t\"./leeloo.json\": [\n\t\t53677,\n\t\t3712\n\t],\n\t\"./lily58.json\": [\n\t\t21479,\n\t\t3712\n\t],\n\t\"./lotus58.json\": [\n\t\t63918,\n\t\t3712\n\t],\n\t\"./m60.json\": [\n\t\t53132,\n\t\t3712\n\t],\n\t\"./microdox.json\": [\n\t\t56792,\n\t\t3712\n\t],\n\t\"./murphpad.json\": [\n\t\t8662,\n\t\t3712\n\t],\n\t\"./naked60.json\": [\n\t\t79707,\n\t\t3712\n\t],\n\t\"./nibble.json\": [\n\t\t58244,\n\t\t3712\n\t],\n\t\"./nice60.json\": [\n\t\t41501,\n\t\t3712\n\t],\n\t\"./osprette.json\": [\n\t\t13467,\n\t\t3712\n\t],\n\t\"./pancake.json\": [\n\t\t19011,\n\t\t3712\n\t],\n\t\"./planck_rev6.json\": [\n\t\t55991,\n\t\t3712\n\t],\n\t\"./preonic_rev3.json\": [\n\t\t47308,\n\t\t3712\n\t],\n\t\"./qaz.json\": [\n\t\t46923,\n\t\t3712\n\t],\n\t\"./quefrency.json\": [\n\t\t23956,\n\t\t3712\n\t],\n\t\"./redox.json\": [\n\t\t17104,\n\t\t3712\n\t],\n\t\"./reviung41.json\": [\n\t\t71414,\n\t\t3712\n\t],\n\t\"./reviung5.json\": [\n\t\t31009,\n\t\t3712\n\t],\n\t\"./romac.json\": [\n\t\t15683,\n\t\t3712\n\t],\n\t\"./romac_plus.json\": [\n\t\t55318,\n\t\t3712\n\t],\n\t\"./s40nc.json\": [\n\t\t56036,\n\t\t3712\n\t],\n\t\"./snap.json\": [\n\t\t24380,\n\t\t3712\n\t],\n\t\"./sofle.json\": [\n\t\t45082,\n\t\t3712\n\t],\n\t\"./splitkb_aurora_corne.json\": [\n\t\t20216,\n\t\t3712\n\t],\n\t\"./splitkb_aurora_lily58.json\": [\n\t\t2674,\n\t\t3712\n\t],\n\t\"./splitkb_aurora_sweep.json\": [\n\t\t9738,\n\t\t3712\n\t],\n\t\"./splitreus62.json\": [\n\t\t47003,\n\t\t3712\n\t],\n\t\"./tg4x.json\": [\n\t\t87454,\n\t\t3712\n\t],\n\t\"./tidbit.json\": [\n\t\t60386,\n\t\t3712\n\t],\n\t\"./two_percent_milk.json\": [\n\t\t67150,\n\t\t3712\n\t],\n\t\"./waterfowl.json\": [\n\t\t14194,\n\t\t3712\n\t],\n\t\"./zmk_uno.json\": [\n\t\t71578,\n\t\t3712\n\t],\n\t\"./zodiark.json\": [\n\t\t12069,\n\t\t3712\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 __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 25690;\nmodule.exports = webpackAsyncContext;"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","ActionButton","children","secondary","className","props","styles","join","defaultProps","promisifyRequest","request","Promise","resolve","reject","oncomplete","onsuccess","result","onabort","onerror","error","defaultGetStoreFunc","defaultGetStore","dbName","storeName","indexedDB","open","onupgradeneeded","createObjectStore","dbp","txMode","callback","then","db","transaction","objectStore","createStore","get","key","customStore","store","set","value","put","STORAGE_KEY_HANDLES","STORAGE_KEY_SELECTED_HANDLE_INDEX","saveHandles","handles","idbSet","saveActiveHandle","index","initialState","keymapHandles","selectedHandleIndex","activeKeymap","handleIndex","keymapRaw","keymapParsed","metadataParsed","importModalOpen","feedbackModalOpen","pendingImports","slice","createSlice","name","reducers","openImportModal","state","closeImportModal","openFeedbackModal","closeFeedbackModal","selectFilesForImport","action","payload","updatedHandles","initHandles","selectHandle","selectKeymap","updateActiveKeymap","FileSystemContext","createContext","FileSystemStore","dispatch","useReducer","reducer","dispatchers","useMemo","Object","keys","actions","reduce","useFileSystemStore","Provider","ImportKeymapsButton","useContext","handleClick","useCallback","window","showOpenFilePicker","mode","multiple","excludeAcceptAllOption","types","accept","onClick","Icon","fileOptions","FileSystemKeymapPicker","choices","map","handle","i","id","handleSelect","choice","useEffect","queryPermission","requestPermission","replace","getFile","file","text","extractKeymapData","parsed","metadata","stripLegacyProperties","onChange","getOptionLabel","option","getOptionValue","ImportKeymapsDialog","acceptedImports","filter","keymapInCatalog","rejectedImports","handleConfirm","handleCancel","Modal","DialogBox","dismissText","Handle","length","style","textAlign","keyboardCatalog","color","keymapSelector","keyboard","keymap","settingsSelector","experimentalSettings","ExportKeymapButton","appKeymapState","enableBehaviorEditing","useSelector","isEqual","layouts","preferredLayout","chosen","defaultLayout","layout","applyKeymapChanges","cloneDeep","raw","createWritable","stream","write","close","updateNeeded","update","disabled","title","FeedbackModalButton","DiscussionLink","Link","external","href","FeedbackDialog","onDismiss","DiscordProfileLink","GitHubIssuesLink","Component","onSelect","idbGet","activeHandle","layoutMetadata","source","sensors","___CSS_LOADER_EXPORT___","push","module","locals","webpackAsyncContext","req","__webpack_require__","o","e","Error","code","ids","t","exports"],"sourceRoot":""}
|