summaryrefslogtreecommitdiffhomepage
path: root/5858.6e8f5975904a2a2282f5.js.map
blob: f2274a081316b482b60f08ae558125660c9db97b (plain)
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":""}