summaryrefslogtreecommitdiffhomepage
path: root/9085.39899f7953cfc1d27e62.js.map
blob: 786ec7fa7423de3005c7a217988617e71d4a1b3f (plain)
1
{"version":3,"file":"9085.39899f7953cfc1d27e62.js","mappings":"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","sources":["webpack:///./src/Common/action-button.module.css?ed83","webpack:///./src/Common/ActionButton.js","webpack:///./src/Sources/Clipboard/store.js","webpack:///./src/Sources/Clipboard/styles.module.css?ff1a","webpack:///./src/Sources/Clipboard/FeedbackModalButton.js","webpack:///./src/Sources/Clipboard/updater.js","webpack:///./src/Sources/Clipboard/ClipboardActions.js","webpack:///./src/Sources/Clipboard/FeedbackDialog.js","webpack:///./src/Sources/Clipboard/KeyboardAddButton.js","webpack:///./src/Sources/Clipboard/KeyboardSelector.js","webpack:///./src/Sources/Clipboard/KeymapRawInput.js","webpack:///./src/Sources/Clipboard/KeymapSourceDialog.js","webpack:///./src/Sources/Clipboard/Picker.js","webpack:///./src/Common/action-button.module.css","webpack:///./src/Sources/Clipboard/styles.module.css"],"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","import { createContext, useMemo, useReducer } from 'react'\nimport { createSlice } from '@reduxjs/toolkit'\n\nconst STORAGE_KEY_KEYBOARDS = 'keymap_editor_clipboard_keyboards'\nconst STORAGE_KEY_KEYBOARD = `${STORAGE_KEY_KEYBOARDS}:`\nconst STORAGE_KEY_SELECTED_KEYBOARD = 'keymap_editor_clipboard_selected_keyboard'\n\nconst BLANK_KEYBOARD_ENTRY = JSON.stringify({\n  keymapRaw: '',\n  keymapParsed: null,\n  metadataRaw: '',\n  metadataParsed: null\n})\n\nfunction initialState () {\n  const storedKeyboardId = JSON.parse(localStorage.getItem(STORAGE_KEY_SELECTED_KEYBOARD) || 'null')\n\n  const INITIAL_KEYBOARDS = JSON.parse(localStorage.getItem(STORAGE_KEY_KEYBOARDS) || '[]')\n  const INITIAL_KEYBOARD_ID = storedKeyboardId || INITIAL_KEYBOARDS[0]?.id\n\n  const INITIAL_KEYBOARD_DATA = JSON.parse(\n    localStorage.getItem(`${STORAGE_KEY_KEYBOARD}${INITIAL_KEYBOARD_ID}`) || 'null'\n  )\n\n  const INITIAL_KEYMAP_RAW = INITIAL_KEYBOARD_DATA?.keymapRaw\n  const INITIAL_KEYMAP_PARSED = INITIAL_KEYBOARD_DATA?.keymapParsed\n  const INITIAL_METADATA_RAW = INITIAL_KEYBOARD_DATA?.metadataRaw\n  const INITIAL_METADATA_PARSED = INITIAL_KEYBOARD_DATA?.metadataParsed\n\n  return {\n    keyboards: INITIAL_KEYBOARDS,\n    selectedKeyboard: INITIAL_KEYBOARD_ID,\n    keymapRaw: INITIAL_KEYMAP_RAW,\n    keymapParsed: INITIAL_KEYMAP_PARSED,\n    metadataRaw: INITIAL_METADATA_RAW,\n    metadataParsed: INITIAL_METADATA_PARSED,\n    modalOpen: !INITIAL_KEYMAP_RAW,\n    feedbackModalOpen: false,\n    pending: {\n      keymapRaw: INITIAL_KEYMAP_RAW,\n      keymapParsed: INITIAL_KEYMAP_PARSED,\n      metadataRaw: INITIAL_METADATA_RAW,\n      metadataParsed: INITIAL_METADATA_PARSED\n    }\n  }\n}\n\nexport const pickerSlice = createSlice({\n  name: 'clipboard-picker',\n  initialState,\n  reducers: {\n    selectedKeyboard (state, action) {\n      state.selectedKeyboard = action.payload.keyboard\n\n      const key = `${STORAGE_KEY_KEYBOARD}${state.selectedKeyboard}`\n      const {\n        keymapRaw, keymapParsed, metadataRaw, metadataParsed\n      } = JSON.parse(localStorage.getItem(key) || BLANK_KEYBOARD_ENTRY)\n\n      state.keymapRaw = keymapRaw\n      state.keymapParsed = keymapParsed\n      state.metadataRaw = metadataRaw\n      state.metadataParsed = metadataParsed\n\n      localStorage.setItem(STORAGE_KEY_SELECTED_KEYBOARD, JSON.stringify(state.selectedKeyboard))\n    },\n    addKeyboard (state, action) {\n      const { id, name = null } = action.payload\n      const keyboard = { id, name }\n\n      state.keyboards.push(keyboard)\n      localStorage.setItem(STORAGE_KEY_KEYBOARDS, JSON.stringify(state.keyboards))\n      localStorage.setItem(`${STORAGE_KEY_KEYBOARD}${id}`, BLANK_KEYBOARD_ENTRY)\n    },\n    setKeymap (state, action) {\n      const { raw, parsed, pending = false } = action.payload\n\n      state.pending.keymapRaw = raw\n      state.pending.keymapParsed = parsed\n      if (!pending) {\n        state.keymapRaw = raw\n        state.keymapParsed = parsed\n      }\n    },\n    setMetadata (state, action) {\n      const { raw, parsed, pending = false } = action.payload\n      const target = pending ? state.pending : state\n      target.metadataRaw = raw\n      target.metadataParsed = parsed\n    },\n    confirmPending (state) {\n      state.keymapRaw = state.pending.keymapRaw\n      state.keymapParsed = state.pending.keymapParsed\n      state.metadataRaw = state.pending.metadataRaw\n      state.metadataParsed = state.pending.metadataParsed\n\n      const key = `${STORAGE_KEY_KEYBOARD}${state.selectedKeyboard}`\n      localStorage.setItem(key, JSON.stringify({\n        keymapRaw: state.keymapRaw,\n        keymapParsed: state.keymapParsed,\n        metadataRaw: state.metadataRaw,\n        metadataParsed: state.metadataParsed\n      }))\n\n      if (!state.keyboards.length) {\n        state.keyboards.push({ id: state.selectedKeyboard })\n      }\n\n      const keyboard = state.keyboards.find(keyboard => keyboard.id === state.selectedKeyboard)\n      if (!keyboard.name) {\n        keyboard.name = state.metadataParsed.name\n        localStorage.setItem(STORAGE_KEY_KEYBOARDS, JSON.stringify(state.keyboards))\n      }\n    },\n    openModal (state) {\n      state.modalOpen = true\n      state.pending.keymapRaw = state.keymapRaw\n      state.pending.keymapParsed = state.keymapParsed\n      state.pending.metadataRaw = state.metadataRaw\n      state.pending.metadataParsed = state.metadataRaw ? JSON.parse(state.metadataRaw) : null\n    },\n    closeModal (state) {\n      state.modalOpen = false\n    },\n    openFeedbackModal (state) { state.feedbackModalOpen = true },\n    closeFeedbackModal (state) { state.feedbackModalOpen = false }\n  }\n})\n\nfunction useActionDispatchers (dispatch) {\n  return useMemo(() => (\n    Object.keys(pickerSlice.actions).reduce((actions, action) => {\n      actions[action] = (...args) => dispatch(pickerSlice.actions[action](...args))\n      return actions\n    }, {})\n  ), [dispatch])\n}\n\nexport function usePickerStore () {\n  const [state, dispatch] = useReducer(pickerSlice.reducer, null, initialState)\n  const dispatchers = useActionDispatchers(dispatch)\n\n  return [state, dispatchers]\n}\n\nexport const ClipboardContext = createContext([{}, {}])\n\nexport function PickerStore ({ children }) {\n  const [state, dispatchers] = usePickerStore()\n\n  return (\n    <ClipboardContext.Provider value={[state, dispatchers]}>\n      {children}\n    </ClipboardContext.Provider>\n  )\n}\n\nexport function withPickerStore (Component) {\n  return props => (\n    <PickerStore>\n      <Component {...props} />\n    </PickerStore>\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]!./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 { useContext } from 'react'\n\nimport Icon from '../../Common/Icon'\nimport { ClipboardContext } from './store'\n\nexport default function FeedbackModalButton () {\n  const [, { openFeedbackModal }] = useContext(ClipboardContext)\n\n  return (\n    <button onClick={openFeedbackModal}>\n      <Icon name=\"comments\" /> Feedback?\n    </button>\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 applyKeymapChanges from 'keymap-editor-zmk-backend/lib/apply-keymap-changes'\nimport extractKeymapData from 'keymap-editor-zmk-backend/lib/extract-keymap-data'\n\nimport { stripLegacyProperties } from '../../keymap'\nimport { ClipboardContext } from './store'\n\nconst keymapSelector = state => state.keyboard?.keymap\nconst settingsSelector = state => state.experimentalSettings\n\nexport function useKeymapUpdater () {\n  const appKeymapState = useSelector(keymapSelector)\n  const { enableBehaviorEditing = false } = useSelector(settingsSelector)\n  const [state, actions] = useContext(ClipboardContext)\n\n  const updateNeeded = useMemo(() => (\n    appKeymapState &&\n    state.keymapParsed &&\n    !isEqual(appKeymapState, state.keymapParsed)\n  ), [appKeymapState, state.keymapParsed])\n\n  const update = useCallback(async function () {\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 } = state.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    try {\n      const raw = await applyKeymapChanges(layout, cloneDeep(appKeymapState), state.keymapRaw, { enableBehaviorEditing })\n      const parsed = await extractKeymapData(raw)\n      stripLegacyProperties(parsed)\n\n      actions.setKeymap({ raw, parsed })\n      return raw\n    } catch (err) {\n      console.error('Failed to update/parse', appKeymapState)\n      console.error(err)\n      throw err\n    }\n  }, [appKeymapState, state, actions, enableBehaviorEditing])\n\n  return [updateNeeded, update]\n}\n","import { useCallback, useContext, useState } from 'react'\nimport { ClipboardContext } from './store'\n\nimport styles from './styles.module.css'\nimport FeedbackModalButton from './FeedbackModalButton'\nimport { Button } from '../Controls'\nimport Icon from '../../Common/Icon'\nimport { useKeymapUpdater } from './updater'\n\nexport default function ClipboardActions () {\n  const [updateNeeded, update] = useKeymapUpdater()\n  const props = { updateNeeded, update }\n\n  return (\n    <>\n      <ModalButton {...props} />\n      <CopyButton {...props} />\n      <FeedbackModalButton />\n    </>\n  )\n}\n\nexport function ModalButton ({ updateNeeded, update }) {\n  const [{ selectedKeyboard }, { openModal }] = useContext(ClipboardContext)\n  const handleOpenModal = useCallback(async () => {\n    if (updateNeeded) {\n      await update()\n    }\n\n    openModal()\n  }, [openModal, update, updateNeeded])\n\n  if (!selectedKeyboard) {\n    return\n  }\n\n  return (\n    <Button onClick={handleOpenModal} title=\"View/update keymap code\">\n      Keymap\n    </Button>\n  )\n}\n\nexport function CopyButton ({ updateNeeded, update }) {\n  const title = updateNeeded ? 'Copy updated keymap' : 'No changes'\n  const [{ keymapParsed }] = useContext(ClipboardContext)\n  const [isCopiedVisible, showCopied] = useState(false)\n\n  const handleCopy = useCallback(async function () {\n    try {\n      const raw = await update()\n      await navigator.clipboard.writeText(raw)\n      showCopied(true)\n      setTimeout(() => showCopied(false), 1500)\n    } catch (err) {\n      console.error('Clipboard write failed')\n      console.log(err)\n    }\n  }, [update])\n\n  if (!keymapParsed) {\n    return null\n  }\n\n  return (\n    <Button\n      title={title}\n      disabled={!updateNeeded}\n      className={styles.copyButton}\n      onClick={handleCopy}\n      data-show-copied={isCopiedVisible}\n    >\n      <Icon name={updateNeeded ? 'clipboard-list' : 'clipboard-check'} />\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 { ClipboardContext } from './store'\n\nconst discussionUrl = 'https://github.com/nickcoutsos/keymap-editor/discussions/105'\nconst DiscussionLink = (\n  <Link external href={discussionUrl}>\n    Feature Discussion\n  </Link>\n)\n\nexport default function FeedbackDialog () {\n  const [, { closeFeedbackModal }] = useContext(ClipboardContext)\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 { useCallback, useContext } from 'react'\n\nimport Icon from '../../Common/Icon'\nimport { ClipboardContext } from './store'\n\nexport default function KeyboardAddButton () {\n  const [, { selectedKeyboard, addKeyboard, openModal }] = useContext(ClipboardContext)\n\n  const handleAddKeyboard = useCallback(() => {\n    const id = Date.now()\n    addKeyboard({ id })\n    selectedKeyboard({ keyboard: id })\n    openModal()\n  }, [addKeyboard, selectedKeyboard, openModal])\n\n  return (\n    <button onClick={handleAddKeyboard}>\n      <Icon name=\"gear\" /> Add Keyboard\n    </button>\n  )\n}\n","import { useCallback, useContext, useMemo } from 'react'\n\nimport { Select } from '../Controls'\nimport { ClipboardContext } from './store'\nimport KeyboardAddButton from './KeyboardAddButton'\n\nexport default function KeyboardSelector () {\n  const [{ keyboards, selectedKeyboard: selectedKeyboardId }, { selectedKeyboard }] = useContext(ClipboardContext)\n\n  const selectedKeyboardChoice = useMemo(() => (\n    keyboards.find(keyboard => keyboard.id === selectedKeyboardId)\n  ), [keyboards, selectedKeyboardId])\n\n  const handleSelectKeyboard = useCallback(choice => {\n    selectedKeyboard({ keyboard: choice.id })\n  }, [selectedKeyboard])\n\n  if (keyboards.length === 0) {\n    return <KeyboardAddButton />\n  }\n\n  return (\n    <Select\n      value={selectedKeyboardChoice}\n      options={keyboards}\n      onChange={handleSelectKeyboard}\n      getOptionLabel={option => option.name || '<unnamed>'}\n      getOptionValue={option => option.id}\n      formatOptionLabel={option => option.name || <em>[unnamed]</em>}\n    >\n      <KeyboardAddButton />\n    </Select>\n  )\n}\n","import { useCallback, useEffect, useState } from 'react'\n\nimport extractKeymapData from 'keymap-editor-zmk-backend/lib/extract-keymap-data'\nimport { stripLegacyProperties } from '../../keymap'\n\nexport default function KeymapRaw ({ value, onChange, ...props }) {\n  const [{ raw }, setState] = useState({ raw: value, parsed: null })\n\n  useEffect(() => {\n    setState(state => ({ ...state, raw: value }))\n  }, [value, setState])\n\n  const handleChange = useCallback(event => {\n    const raw = event.target.value\n    setState(state => ({ ...state, raw }))\n  }, [setState])\n\n  useEffect(() => {\n    async function parse () {\n      // debounce? handle errors?\n      const parsed = await extractKeymapData(raw)\n      stripLegacyProperties(parsed)\n      setState(state => ({ ...state, parsed }))\n      onChange({ raw, parsed })\n    }\n\n    if (raw) {\n      parse()\n    }\n  }, [raw, setState, onChange])\n\n  return (\n    <textarea\n      onChange={handleChange}\n      value={raw}\n      {...props}\n    />\n  )\n}\n","import { useCallback, useContext } from 'react'\n\nimport useToggle from '../../Common/hooks/use-toggle'\nimport Modal from '../../Common/Modal'\nimport DialogBox from '../../Common/DialogBox'\nimport ActionButton from '../../Common/ActionButton'\nimport { GitHubWikiLayoutsLink } from '../../Dialogs/support'\n\nimport { ClipboardContext } from './store'\nimport KeymapRaw from './KeymapRawInput'\nimport styles from './styles.module.css'\n\nexport default function KeymapSourceDialog ({ onSubmit, onCancel }) {\n  const [state, actions] = useContext(ClipboardContext)\n  const { pending } = state\n  const [metadataExpanded, toggleMetadataExpanded] = useToggle(!pending.metadataRaw)\n\n  const handleMetadataChange = useCallback(event => {\n    const raw = event.target.value\n    let parsed = null\n    let errors = null\n\n    try {\n      parsed = JSON.parse(raw)\n    } catch (err) {\n      errors = err\n    }\n\n    actions.setMetadata({ pending: true, raw, parsed, errors })\n  }, [actions])\n\n  const handleKeymapChange = useCallback(({ raw, parsed }) => {\n    actions.setKeymap({ pending: true, raw, parsed })\n  }, [actions])\n\n  const handleSubmit = useCallback(() => {\n    actions.confirmPending()\n    onSubmit({\n      keymap: pending.keymapParsed,\n      metadata: pending.metadataParsed\n    })\n  }, [actions, pending, onSubmit])\n\n  const disabled = (\n    !pending.metadataParsed ||\n    !pending.keymapParsed\n  )\n\n  return (\n    <Modal onDismiss={onCancel}>\n      <DialogBox style={{ maxWidth: '640px', maxHeight: '90vh', overflow: 'auto' }} dismissText={null}>\n        <article className={styles.source} data-expanded={metadataExpanded}>\n          <h2 onClick={toggleMetadataExpanded}>Keyboard{pending.metadataParsed && (\n            <>: <code>{pending.metadataParsed.name}</code></>\n          )}</h2>\n          <section className={styles.sourceContent}>\n            <p>\n              In order to understand what keyboard you're using and now to display\n              it visually, please paste the JSON source metadata file below.\n            </p>\n            {pending.metadataParsed && (\n              <p>Parsed metadata for: {pending.metadataParsed.name}</p>\n            )}\n            <textarea\n              cols={80}\n              rows={pending.metadataParsed ? 22 : 5}\n              wrap=\"off\"\n              spellCheck={false}\n              value={pending.metadataRaw}\n              onChange={handleMetadataChange}\n            />\n            {!pending.metadataParsed && (\n              <div className={styles.metadataHelp}>\n                <h3>Not sure what to put here?</h3>\n                <p>\n                  The <em>Keymap Editor</em> app depends on a defined keyboard\n                  layout both to provide a friendly graphical representation to\n                  edit and a readable textual representation. You can learn more\n                  about this at {GitHubWikiLayoutsLink}.\n                </p>\n                <p>\n                  Note: If your keyboard works with QMK's Configurator you may\n                  be able to quickly get a visual representation by pasting the\n                  contents of that keyboard's <code>info.json</code> file here.\n                </p>\n              </div>\n            )}\n          </section>\n        </article>\n        <h2>Keymap</h2>\n        <p>Paste the devicetree source from your <code>.keymap</code> file below.</p>\n        <p>\n          You can <em>technically</em> make changes directly to the DeviceTree\n          code here, but this isn't intended as an editor.\n        </p>\n        <KeymapRaw\n          cols={80}\n          rows={22}\n          wrap=\"off\"\n          spellCheck={false}\n          value={pending.keymapRaw}\n          onChange={handleKeymapChange}\n        />\n        <p style={{ textAlign: 'center' }}>\n          <ActionButton disabled={disabled} onClick={handleSubmit}>Set Keymap</ActionButton>\n          <ActionButton onClick={onCancel} secondary>Cancel</ActionButton>\n        </p>\n      </DialogBox>\n    </Modal>\n  )\n}\n","import cloneDeep from 'lodash/cloneDeep'\nimport { useCallback, useContext, useEffect, useState } from 'react'\n\nimport { ClipboardContext, withPickerStore } from './store'\nimport ClipboardActions from './ClipboardActions'\nimport FeedbackDialog from './FeedbackDialog'\nimport KeyboardSelector from './KeyboardSelector'\nimport KeymapSourceDialog from './KeymapSourceDialog'\n\nexport function ClipboardPicker ({ onSelect, onError }) {\n  const [state, { closeModal }] = useContext(ClipboardContext)\n  const [initState, setInitState] = useState(null)\n\n  const selectKeymap = useCallback((keymap, metadata) => {\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: 'clipboard',\n      keyboard: '',\n      layoutMetadata,\n      layout: layoutMetadata.layout,\n      keymap,\n      sensors: layoutMetadata.sensors || []\n    }))\n  }, [onSelect])\n\n  useEffect(() => {\n    if (state.keymapParsed && state.metadataParsed) {\n      selectKeymap(state.keymapParsed, state.metadataParsed)\n    }\n  }, [selectKeymap, state.keymapParsed, state.metadataParsed])\n\n  const handleSelectKeymap = useCallback(({ keymap, metadata }) => {\n    selectKeymap(keymap, metadata)\n    closeModal()\n  }, [selectKeymap, closeModal])\n\n  useEffect(() => {\n    if (initState) {\n      return\n    }\n\n    setInitState(true)\n\n    if (state.keymapParsed && state.metadataParsed) {\n      selectKeymap(state.keymapParsed, state.metadataParsed)\n    }\n  }, [initState, setInitState, selectKeymap, state])\n\n  return (\n    <>\n      <KeyboardSelector />\n      <ClipboardActions />\n      {state.modalOpen && (\n        <KeymapSourceDialog\n          onSubmit={handleSelectKeymap}\n          onCancel={closeModal}\n        />\n      )}\n      {state.feedbackModalOpen && <FeedbackDialog />}\n    </>\n  )\n}\n\nexport default withPickerStore(ClipboardPicker)\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, \".fnnwBtqwiwSQgnuN5sqg h2 {\\n  cursor: pointer;\\n}\\n\\n.meN56P3rXkTYWdDY0oZq {\\n  height: auto;\\n  transition: height 100ms ease-out;\\n}\\n\\n.H4OUxP43w5pZ9RYBB72x {\\n  background-color: rgba(0, 0, 0, 0.1);\\n  margin: 10px;\\n  padding: 0 10px;\\n  border-radius: 4px;\\n}\\n\\n[data-expanded=\\\"false\\\"] .meN56P3rXkTYWdDY0oZq {\\n  height: 0;\\n  overflow: hidden;\\n}\\n\\n[data-expanded=\\\"false\\\"] h2 {\\n  margin-bottom: 0;\\n}\\n\\n.eVrbmh_w8MbnDUOfUD2N {\\n  position: relative;\\n}\\n.eVrbmh_w8MbnDUOfUD2N span {\\n  font-size: 120%;\\n  margin: auto 5px;\\n}\\n\\n.eVrbmh_w8MbnDUOfUD2N[data-show-copied=\\\"true\\\"]::after {\\n  content: \\\"Copied!\\\";\\n  position: absolute;\\n  right: -5px;\\n  top: 50%;\\n\\n  transform: translate(100%, -50%);\\n  background-color: var(--selection);\\n  color: white;\\n  padding: 10px;\\n  border-radius: 4px;\\n\\n  animation: normal 1.5s h0IIQBfKFzrLn6r9v5qG;\\n}\\n\\n@keyframes h0IIQBfKFzrLn6r9v5qG {\\n  0% { opacity: 0; width: 0; margin-left: -100%; }\\n  2.5% { opacity: 1; width: auto; }\\n  75% { opacity: 1; margin-left: 0; }\\n  100% { opacity: 0; }\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Sources/Clipboard/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,iCAAiC;AACnC;;AAEA;EACE,oCAAoC;EACpC,YAAY;EACZ,eAAe;EACf,kBAAkB;AACpB;;AAEA;EACE,SAAS;EACT,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,WAAW;EACX,QAAQ;;EAER,gCAAgC;EAChC,kCAAkC;EAClC,YAAY;EACZ,aAAa;EACb,kBAAkB;;EAElB,2CAA+B;AACjC;;AAEA;EACE,KAAK,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE;EAC/C,OAAO,UAAU,EAAE,WAAW,EAAE;EAChC,MAAM,UAAU,EAAE,cAAc,EAAE;EAClC,OAAO,UAAU,EAAE;AACrB\",\"sourcesContent\":[\".source h2 {\\n  cursor: pointer;\\n}\\n\\n.sourceContent {\\n  height: auto;\\n  transition: height 100ms ease-out;\\n}\\n\\n.metadataHelp {\\n  background-color: rgba(0, 0, 0, 0.1);\\n  margin: 10px;\\n  padding: 0 10px;\\n  border-radius: 4px;\\n}\\n\\n[data-expanded=\\\"false\\\"] .sourceContent {\\n  height: 0;\\n  overflow: hidden;\\n}\\n\\n[data-expanded=\\\"false\\\"] h2 {\\n  margin-bottom: 0;\\n}\\n\\n.copyButton {\\n  position: relative;\\n}\\n.copyButton span {\\n  font-size: 120%;\\n  margin: auto 5px;\\n}\\n\\n.copyButton[data-show-copied=\\\"true\\\"]::after {\\n  content: \\\"Copied!\\\";\\n  position: absolute;\\n  right: -5px;\\n  top: 50%;\\n\\n  transform: translate(100%, -50%);\\n  background-color: var(--selection);\\n  color: white;\\n  padding: 10px;\\n  border-radius: 4px;\\n\\n  animation: normal 1.5s popInOut;\\n}\\n\\n@keyframes popInOut {\\n  0% { opacity: 0; width: 0; margin-left: -100%; }\\n  2.5% { opacity: 1; width: auto; }\\n  75% { opacity: 1; margin-left: 0; }\\n  100% { opacity: 0; }\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"source\": \"fnnwBtqwiwSQgnuN5sqg\",\n\t\"sourceContent\": \"meN56P3rXkTYWdDY0oZq\",\n\t\"metadataHelp\": \"H4OUxP43w5pZ9RYBB72x\",\n\t\"copyButton\": \"eVrbmh_w8MbnDUOfUD2N\",\n\t\"popInOut\": \"h0IIQBfKFzrLn6r9v5qG\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","ActionButton","children","secondary","className","props","styles","join","defaultProps","STORAGE_KEY_KEYBOARDS","STORAGE_KEY_KEYBOARD","STORAGE_KEY_SELECTED_KEYBOARD","BLANK_KEYBOARD_ENTRY","JSON","stringify","keymapRaw","keymapParsed","metadataRaw","metadataParsed","initialState","storedKeyboardId","parse","localStorage","getItem","INITIAL_KEYBOARDS","INITIAL_KEYBOARD_ID","id","INITIAL_KEYBOARD_DATA","INITIAL_KEYMAP_RAW","INITIAL_KEYMAP_PARSED","INITIAL_METADATA_RAW","INITIAL_METADATA_PARSED","keyboards","selectedKeyboard","modalOpen","feedbackModalOpen","pending","pickerSlice","createSlice","name","reducers","state","action","payload","keyboard","key","setItem","addKeyboard","push","setKeymap","raw","parsed","setMetadata","target","confirmPending","length","find","openModal","closeModal","openFeedbackModal","closeFeedbackModal","ClipboardContext","createContext","PickerStore","dispatch","useReducer","reducer","dispatchers","useMemo","Object","keys","actions","reduce","usePickerStore","Provider","value","FeedbackModalButton","useContext","onClick","Icon","i","keymapSelector","keymap","settingsSelector","experimentalSettings","ClipboardActions","appKeymapState","enableBehaviorEditing","useSelector","isEqual","useCallback","layouts","preferredLayout","chosen","replace","defaultLayout","layout","applyKeymapChanges","cloneDeep","extractKeymapData","stripLegacyProperties","console","error","updateNeeded","update","ModalButton","CopyButton","handleOpenModal","title","useState","isCopiedVisible","showCopied","handleCopy","navigator","clipboard","writeText","setTimeout","log","disabled","DiscussionLink","Link","external","href","FeedbackDialog","Modal","onDismiss","DialogBox","dismissText","DiscordProfileLink","GitHubIssuesLink","style","textAlign","KeyboardAddButton","handleAddKeyboard","Date","now","KeyboardSelector","selectedKeyboardId","selectedKeyboardChoice","handleSelectKeyboard","choice","onChange","getOptionLabel","option","getOptionValue","formatOptionLabel","KeymapRaw","setState","useEffect","handleChange","event","KeymapSourceDialog","onSubmit","onCancel","useToggle","metadataExpanded","toggleMetadataExpanded","handleMetadataChange","errors","err","handleKeymapChange","handleSubmit","metadata","maxWidth","maxHeight","overflow","cols","rows","wrap","spellCheck","GitHubWikiLayoutsLink","ClipboardPicker","onSelect","onError","initState","setInitState","selectKeymap","layoutMetadata","source","sensors","handleSelectKeymap","Component","___CSS_LOADER_EXPORT___","module","locals"],"sourceRoot":""}