summaryrefslogtreecommitdiffhomepage
path: root/6849.f8489f2de61249601be5.js.map
blob: 3a00467c15b31c9e391b374fb8ad123567d09762 (plain)
1
{"version":3,"file":"6849.f8489f2de61249601be5.js","mappings":"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","sources":["webpack:///./src/Common/input.module.css?8347","webpack:///./src/Common/Input.js","webpack:///./src/Keyboard/layoutPropTypes.js","webpack:///./src/Keyboard/KeyPlacer.js","webpack:///./src/Keyboard/KeyboardLayout.js","webpack:///./src/Common/action-menu.module.css?8c52","webpack:///./src/Common/ActionMenu.js","webpack:///./src/Keyboard/Layers/LayerActionsMenu.js","webpack:///./src/Keyboard/Common/KeyPositionIndicator.js","webpack:///./src/Keyboard/Binding/BindingDialog.js","webpack:///./src/Keyboard/Layers/LayerBindings.js","webpack:///./src/Keyboard/Layers/EncoderBindings.js","webpack:///./src/Keyboard/Layers/style.module.css?200d","webpack:///./src/Keyboard/Layers/SensorBindings.js","webpack:///./src/Keyboard/Layers/ConfigModal.js","webpack:///./src/Keyboard/Layers/use-key-handler.js","webpack:///./src/Keyboard/Layers/quick-assignment.js","webpack:///./src/Keyboard/Layers/QuickAssignModal.js","webpack:///./src/Keyboard/Layers/Layer.js","webpack:///./src/Keyboard/Layers/layer-switcher.module.css?e898","webpack:///./src/Keyboard/Layers/LayerSwitcher.js","webpack:///./src/Keyboard/Layers/PromptForFirstLayer.js","webpack:///./src/Keyboard/Layers/LayerEditor.js","webpack:///./src/event-util.js","webpack:///./src/Common/action-menu.module.css","webpack:///./src/Common/input.module.css","webpack:///./src/Keyboard/Common/keyPositionSelectorStyles.module.css","webpack:///./src/Keyboard/Layers/layer-switcher.module.css","webpack:///./src/Keyboard/Layers/style.module.css","webpack:///./node_modules/lodash/_arrayReduce.js","webpack:///./node_modules/lodash/_asciiToArray.js","webpack:///./node_modules/lodash/_asciiWords.js","webpack:///./node_modules/lodash/_basePropertyOf.js","webpack:///./node_modules/lodash/_castSlice.js","webpack:///./node_modules/lodash/_createCaseFirst.js","webpack:///./node_modules/lodash/_createCompounder.js","webpack:///./node_modules/lodash/_deburrLetter.js","webpack:///./node_modules/lodash/_hasUnicode.js","webpack:///./node_modules/lodash/_hasUnicodeWord.js","webpack:///./node_modules/lodash/_stringToArray.js","webpack:///./node_modules/lodash/_unicodeToArray.js","webpack:///./node_modules/lodash/_unicodeWords.js","webpack:///./node_modules/lodash/deburr.js","webpack:///./node_modules/lodash/startCase.js","webpack:///./node_modules/lodash/upperFirst.js","webpack:///./node_modules/lodash/words.js","webpack:///./src/Keyboard/Common/keyPositionSelectorStyles.module.css?d54d"],"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]!./input.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]!./input.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import PropTypes from 'prop-types'\nimport styles from './input.module.css'\n\nexport default function Input ({ validator, required = false, value = '', ...rest }) {\n  const error = validator(value) || (!value && required && 'cannot be empty')\n\n  return (\n    <span className={styles.wrapper}>\n      <input type=\"text\" value={value} {...rest} />\n      {error && <span className={styles.error}>{error}</span>}\n    </span>\n  )\n}\n\nInput.propTypes = {\n  value: PropTypes.any.isRequired,\n  required: PropTypes.bool,\n  validator: PropTypes.func\n}\n","import PropTypes from 'prop-types'\n\nexport const position = {\n  x: PropTypes.number.isRequired,\n  y: PropTypes.number.isRequired\n}\n\nexport const rotation = {\n  a: PropTypes.number,\n  rx: PropTypes.number,\n  ry: PropTypes.number\n}\n\nexport const dimensions = {\n  u: PropTypes.number,\n  h: PropTypes.number\n}\n\nexport const keyLayout = PropTypes.shape({\n  ...position,\n  ...rotation,\n  ...dimensions\n})\n\nexport const layout = PropTypes.arrayOf(\n  keyLayout\n)\n","import pick from 'lodash/pick'\nimport PropTypes from 'prop-types'\n\nimport { getKeyStyles } from '../key-units'\nimport styles from './styles.module.css'\nimport * as layoutPropTypes from './layoutPropTypes'\n\nconst getPosition = keyLayout => pick(keyLayout, ['x', 'y'])\nconst getRotation = keyLayout => {\n  const { rx, ry, r } = keyLayout\n  return { x: rx, y: ry, a: r }\n}\nconst getSize = keyLayout => {\n  const { w = 1, u = w, h = 1 } = keyLayout\n  return { u, h }\n}\n\nfunction Placer (props) {\n  const { keyLayout, children, ...rest } = props\n  const position = getPosition(keyLayout)\n  const rotation = getRotation(keyLayout)\n  const size = getSize(keyLayout)\n  const positioningStyle = getKeyStyles(position, size, rotation)\n\n  return (\n    <div\n      className={styles.placer}\n      style={positioningStyle}\n      data-u={size.u}\n      data-h={size.h}\n      {...rest}\n    >\n      {children}\n    </div>\n  )\n}\n\nPlacer.propTypes = {\n  scale: PropTypes.number,\n  keyLayout: layoutPropTypes.keyLayout.isRequired\n}\n\nPlacer.defaultProps = {\n  scale: 1\n}\n\nexport default Placer\n","import PropTypes from 'prop-types'\n\nimport Placer from './KeyPlacer'\nimport * as layoutPropTypes from './layoutPropTypes'\n\nfunction KeyboardLayout (props) {\n  const { layout, renderKey, scale } = props\n\n  return (\n    <div style={{\n      position: 'relative',\n      transform: `scale(${scale})`,\n      transformOrigin: 0\n    }}>\n      {layout.map((keyLayout, index) => (\n        <Placer key={index} keyLayout={keyLayout}>\n          {renderKey({ index, keyLayout })}\n        </Placer>\n      ))}\n    </div>\n  )\n}\n\nKeyboardLayout.propTypes = {\n  layout: layoutPropTypes.layout.isRequired,\n  renderKey: PropTypes.func.isRequired,\n  scale: PropTypes.number\n}\n\nKeyboardLayout.defaultProps = {\n  scale: 1\n}\n\nexport default KeyboardLayout\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]!./action-menu.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-menu.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport Icon from './Icon'\nimport styles from './action-menu.module.css'\n\nexport default function ActionMenu ({ actions }) {\n  const [isOpen, setOpen] = useState(false)\n  const element = useRef()\n\n  function closeAnd (action) {\n    setOpen(false)\n    action()\n  }\n\n  const handleClick = useCallback(function (e) {\n    if (element.current && !element.current.contains(e.target)) {\n      setOpen(false)\n    }\n  }, [element, setOpen])\n\n  useEffect(() => {\n    document.body.addEventListener('click', handleClick)\n    return () => document.body.removeEventListener('click', handleClick)\n  }, [handleClick])\n\n  return (\n    <div ref={element} className={[\n      styles.menu,\n      isOpen && styles.open\n    ].join(' ')}>\n      <p onClick={() => setOpen(!isOpen)}>\n        <Icon name=\"ellipsis\" />\n      </p>\n      <ul>\n        {actions.map((action, i) => (\n          <li\n            key={i}\n            onClick={() => closeAnd(action.callback)}\n          >\n            {action.content}\n          </li>\n        ))}\n      </ul>\n    </div>\n  )\n}\n\nActionMenu.propTypes = {\n  actions: PropTypes.arrayOf(\n    PropTypes.shape({\n      callback: PropTypes.func.isRequired,\n      content: PropTypes.oneOfType([\n        PropTypes.node,\n        PropTypes.string\n      ]).isRequired\n    })\n  ).isRequired\n}\n","import PropTypes from 'prop-types'\nimport { useMemo } from 'react'\nimport { useDispatch } from 'react-redux'\n\nimport {\n  rebindTransparentToKeyPress,\n  rebindTransparentToNone,\n  rebindNoneToKeypress,\n  rebindNoneToTransparent,\n  rebindEmptyKeypressToTransparent,\n  rebindEmptyKeypressToNone\n} from './layersSlice'\nimport ActionMenu from '../../Common/ActionMenu'\n\nexport default function LayerActionsMenu ({ layerIndex, additionalActions = [] }) {\n  const dispatch = useDispatch()\n  const actions = useMemo(() => ({\n    transparentToKeypress: () => dispatch(rebindTransparentToKeyPress({ layerIndex })),\n    transparentToNone: () => dispatch(rebindTransparentToNone({ layerIndex })),\n    noneToKeypress: () => dispatch(rebindNoneToKeypress({ layerIndex })),\n    noneToTransparent: () => dispatch(rebindNoneToTransparent({ layerIndex })),\n    emptyKeypressToTransparent: () => dispatch(rebindEmptyKeypressToTransparent({ layerIndex })),\n    emptyKeypressToNone: () => dispatch(rebindEmptyKeypressToNone({ layerIndex }))\n  }), [dispatch, layerIndex])\n\n  return (\n    <ActionMenu actions={[\n      ...additionalActions,\n      {\n        callback: actions.transparentToKeypress,\n        content: <>Convert <code>&trans</code> to <code>&kp</code></>\n      },\n      {\n        callback: actions.transparentToNone,\n        content: <>Convert <code>&trans</code> to <code>&none</code></>\n      },\n      {\n        callback: actions.noneToKeypress,\n        content: <>Convert <code>&none</code> to <code>&kp</code></>\n      },\n      {\n        callback: actions.noneToTransparent,\n        content: <>Convert <code>&none</code> to <code>&trans</code></>\n      },\n      {\n        callback: actions.emptyKeypressToTransparent,\n        content: <>Convert <code>&kp ⦸</code> to <code>&trans</code></>\n      },\n      {\n        callback: actions.emptyKeypressToNone,\n        content: <>Convert <code>&kp ⦸</code> to <code>&none</code></>\n      }\n    ]} />\n  )\n}\n\nLayerActionsMenu.propTypes = {\n  layerIndex: PropTypes.number.isRequired,\n  additionalActions: PropTypes.arrayOf(\n    PropTypes.shape({\n      callback: PropTypes.func.isRequired,\n      content: PropTypes.oneOfType([\n        PropTypes.node,\n        PropTypes.string\n      ]).isRequired\n    })\n  )\n}\n","import classNames from 'classnames'\nimport { useContext, useMemo } from 'react'\n\nimport { getWrapperStyle } from '../util'\nimport KeyboardLayout from '../KeyboardLayout'\nimport KeyWrapper from '../Keys/KeyWrapper'\n\nimport styles from './keyPositionSelectorStyles.module.css'\nimport { LayoutContext } from '../../Contexts/Layout'\n\nexport default function KeyPositionIndicator ({ keyPositions, scale = 0.2, styleOverrides = {} }) {\n  const { layout, wrapperDimensions } = useContext(LayoutContext)\n  const wrapperStyle = useMemo(() => getWrapperStyle(wrapperDimensions, {\n    scale,\n    overrides: {\n      position: 'relative',\n      pointerEvents: 'none',\n      padding: 0,\n      margin: 0,\n      ...styleOverrides\n    }\n  }), [scale, wrapperDimensions, styleOverrides])\n\n  return (\n    <div style={wrapperStyle}>\n      <KeyboardLayout\n        layout={layout}\n        bindings={[]}\n        scale={scale}\n        renderKey={({ index }) => (\n          <KeyWrapper\n            onClick={() => {}}\n            selectable={false}\n            themeClass={classNames({\n              [styles.key]: true,\n              [styles.highlight]: keyPositions.includes(index)\n            })}\n          />\n        )}\n      />\n    </div>\n  )\n}\n","import classNames from 'classnames'\nimport startCase from 'lodash/startCase'\nimport PropTypes from 'prop-types'\n\nimport Modal from '../../Common/Modal'\nimport DialogBox from '../../Common/DialogBox'\nimport { useCallback, useMemo, useState } from 'react'\nimport { BindParam } from './BindParamlist'\nimport KeyWrapper from '../Keys/KeyWrapper'\nimport Binding from './Binding'\nimport useBindingEditor from './binding-editor'\n\nimport keyStyles from '../Keys/styles.module.css'\nimport ValuePicker from '../../ValuePicker'\nimport BindValue from './BindValue'\nimport Icon from '../../Common/Icon'\nimport KeyPositionIndicator from '../Common/KeyPositionIndicator'\nimport Link from '../../Common/Link'\nimport ActionButton from '../../Common/ActionButton'\n\nconst discussionUrl = 'https://github.com/nickcoutsos/keymap-editor/discussions/109'\n\nexport default function BindingDialog (props) {\n  const { binding: initialBinding, bindingIndex, onUpdate, onCancel, context = 'none' } = props\n  const [binding, setBinding] = useState(initialBinding)\n  const [{\n    bindTree,\n    behavior,\n    behaviorParams,\n    editing,\n    invalid\n  }, {\n    clearEditing,\n    handleUpdateBindValue,\n    selectNodeForEditing\n  }] = useBindingEditor(binding, undefined, setBinding)\n\n  const onConfirm = useCallback(() => {\n    onUpdate(binding)\n  }, [binding, onUpdate])\n\n  return (\n    <Modal onDismiss={onCancel}>\n      <div style={{\n        position: 'absolute',\n        top: 0,\n        background: 'var(--bg)',\n        borderRadius: '30px',\n        boxShadow: '0px 10px 25px rgba(0, 0, 0, 0.4)',\n        fontSize: '80%',\n        width: '541px',\n        padding: '0 20px',\n        margin: '20px 0'\n      }}>\n        <p style={{ margin: '5px 0' }}>\n          <Icon name=\"bullhorn\" /> I'm trying out a new way of editing bindings,\n          if you hate it then <Link href={discussionUrl} external>please let me\n          know</Link>!\n        </p>\n      </div>\n      <DialogBox dismissText={null} style={{ width: '500px' }}>\n        <div style={{\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          borderBottom: '1px solid var(--key-bg-base)',\n          paddingBottom: '20px',\n          gap: '40px'\n        }}>\n          <KeyPositionIndicator\n            keyPositions={[bindingIndex]}\n            styleOverrides={{\n              display: 'inline-block',\n              padding: '3px',\n              borderRadius: '3px'\n            }}\n            scale={0.15}\n            />\n          <Icon name=\"arrow-right\" />\n          <KeyWrapper selectable={false} style={{ pointerEvents: 'none' }}>\n            <Binding\n              context={context}\n              value={binding.value}\n              params={binding.params}\n              onUpdate={() => {}}\n            />\n          </KeyWrapper>\n        </div>\n\n        <h2>Set Key Binding</h2>\n        <h3>\n          Behavior <div\n            style={{\n              display: 'inline-block',\n              fontSize: 'initial',\n              fontWeight: 'normal'\n            }}\n          >\n            <span className={keyStyles.extracted}>\n              <span className={keyStyles.param}>\n                <BindValue\n                  slot=\"behaviour\"\n                  node={bindTree}\n                  expanded={true}\n                  onSelect={selectNodeForEditing}\n                />\n              </span>\n            </span>\n          </div>\n        </h3>\n\n        <Parameters\n          slots={behaviorParams}\n          node={bindTree}\n          onSelect={selectNodeForEditing}\n        />\n\n        {editing && (\n          <ValuePicker\n            node={editing.node}\n            type={editing.type}\n            behaviour={behavior}\n            context={context}\n            prompt={editing.prompt}\n            searchKey=\"code\"\n            onSelect={handleUpdateBindValue}\n            onCancel={clearEditing}\n          />\n        )}\n\n        <div style={{ textAlign: 'center' }}>\n          <ActionButton onClick={onConfirm} disabled={invalid}>\n            Okay\n          </ActionButton>\n          <ActionButton onClick={onCancel} secondary>\n            Cancel\n          </ActionButton>\n        </div>\n      </DialogBox>\n    </Modal>\n  )\n}\n\nfunction Parameters ({ slots, node, onSelect }) {\n  const styles = {\n    listStyleType: slots.length === 1 ? 'none' : undefined\n  }\n\n  if (slots.length === 0) {\n    return null\n  }\n\n  return (\n    <>\n      <h3>Parameters</h3>\n      <ol style={styles}>\n        {slots.map((slot, i) => slot.type !== 'placeholder' && (\n          <Parameter\n            key={i}\n            slot={slot}\n            param={node.params[i]}\n            onSelect={onSelect}\n          />\n        ))}\n      </ol>\n    </>\n  )\n}\n\nfunction Parameter ({ slot, param, onSelect }) {\n  const name = useMemo(() => {\n    const simpleNameMap = {\n      code: 'key-code'\n    }\n\n    const name = slot.raw ? 'Raw value' : (slot.name || slot)\n    const mappedName = simpleNameMap[name] || name\n    return startCase(mappedName)\n  }, [slot])\n\n  return (\n    <li style={{ margin: '15px 0' }}>\n      <label>{name}</label>\n        <span className={classNames(keyStyles.extracted)}>\n          <BindParam\n            slot={slot}\n            node={param}\n            onSelect={onSelect}\n            expanded={true}\n          />\n        </span>\n    </li>\n  )\n}\n\nBindingDialog.propTypes = {\n  context: PropTypes.string,\n  hideBehaviour: PropTypes.bool.isRequired,\n  onUpdate: PropTypes.func.isRequired\n}\n\nBindingDialog.defaultProps = {\n  hideBehaviour: false\n}\n","import { useCallback, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport KeyboardLayout from '../KeyboardLayout'\nimport Key from '../Keys/Key'\nimport { selectLayers, updateKeyBinding } from './layersSlice'\nimport BindingDialog from '../Binding/BindingDialog'\nimport keyStyles from '../Keys/styles.module.css'\n\nexport default function LayerBindings ({ layout, activeLayer }) {\n  const dispatch = useDispatch()\n  const layers = useSelector(selectLayers)\n  const layer = layers[activeLayer]\n  const { bindings } = layer.properties\n  const [editBindIndex, setEditBindIndex] = useState(null)\n\n  const handleUpdateBind = useCallback(function (bindIndex, binding) {\n    dispatch(updateKeyBinding({ layerIndex: activeLayer, bindIndex, binding }))\n  }, [dispatch, activeLayer])\n\n  return (\n    <>\n      <KeyboardLayout\n        layout={layout}\n        renderKey={({ index, keyLayout }) => bindings.parsed[index] && (\n          <Key\n            label={keyLayout.label}\n            value={bindings.parsed[index]?.value}\n            params={bindings.parsed[index]?.params}\n            noBindingClick={true}\n            keyWrapperProps={{\n              className: keyStyles.unified,\n              onClick: event => {\n                event.stopPropagation()\n                setEditBindIndex(index)\n              }\n            }}\n            onUpdate={bind => handleUpdateBind(index, bind)}\n          />\n        )}\n      />\n      {editBindIndex !== null && (\n        <BindingDialog\n          binding={bindings.parsed[editBindIndex]}\n          bindingIndex={editBindIndex}\n          onCancel={() => setEditBindIndex(null)}\n          onUpdate={bind => {\n            handleUpdateBind(editBindIndex, bind)\n            setEditBindIndex(null)\n          }}\n        />\n      )}\n    </>\n  )\n}\n","import PropTypes from 'prop-types'\n\nimport Binding from '../Binding/Binding'\nimport * as bindPropTypes from '../Binding/bindPropTypes'\n\nimport KeyWrapper from '../Keys/KeyWrapper'\nimport styles from '../Keys/styles.module.css'\n\nfunction EncoderBindings (props) {\n  const { context, binding, onUpdate } = props\n  const { value, params } = binding\n\n  return (\n    <KeyWrapper themeClass={styles.encoder2}>\n      <Binding\n        context={context}\n        value={value}\n        params={params}\n        onUpdate={onUpdate}\n      />\n    </KeyWrapper>\n  )\n}\n\nEncoderBindings.propTypes = {\n  binding: bindPropTypes.node,\n  onUpdate: PropTypes.func.isRequired\n}\n\nexport default EncoderBindings\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]!./style.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]!./style.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import classNames from 'classnames'\nimport { useCallback } from 'react'\nimport { useDispatch } from 'react-redux'\n\nimport { updateSensorBindings } from './layersSlice'\nimport EncoderBindings from './EncoderBindings'\nimport styles from './style.module.css'\nimport Icon from '../../Common/Icon'\nimport KeyWrapper from '../Keys/KeyWrapper'\nimport keyStyles from '../Keys/styles.module.css'\n\nexport default function SensorBindings ({ layerIndex, layer, sensors }) {\n  const dispatch = useDispatch()\n  const { parsed: sensorBindings = [] } = layer.properties['sensor-bindings'] || {}\n\n  function handleUpdate (sensorIndex, binding) {\n    // TODO: handle sensor bindings list that doesn't match sensor count\n    dispatch(updateSensorBindings({\n      layerIndex,\n      sensorIndex,\n      bindings: binding\n    }))\n  }\n\n  return (\n    <div style={{ margin: '0 0 30px' }}>\n      <h3>Sensor bindings</h3>\n      <div style={{\n        display: 'flex',\n        flexDirection: 'row',\n        gap: '25px'\n      }}>\n        {sensors.map((sensor, i) => (\n          <Sensor\n            key={i}\n            index={i}\n            sensor={sensor}\n            binding={sensorBindings[i]}\n            canAdd={sensorBindings[i] === undefined && sensorBindings.length === i}\n            canDelete={sensorBindings[i] !== undefined && sensorBindings.length === i + 1}\n            onUpdate={handleUpdate}\n          />\n        ))}\n      </div>\n    </div>\n  )\n}\n\nfunction Sensor ({ sensor, binding, index, onUpdate, canAdd, canDelete }) {\n  const labelText = sensor.label || sensor.identifier\n  const value = binding?.value || '&inc_dec_kp'\n  const params = binding?.params || [\n    { value: 0, _isPlaceholder: true, params: [] },\n    { value: 0, _isPlaceholder: true, params: [] }\n  ]\n\n  const handleDelete = useCallback(() => {\n    onUpdate(index, undefined)\n  }, [index, onUpdate])\n\n  const handleAdd = useCallback(() => {\n    onUpdate(index, {\n      value: '&inc_dec_kp',\n      params: [\n        { value: 0, _isPlaceholder: true, params: [] },\n        { value: 0, _isPlaceholder: true, params: [] }\n      ]\n    })\n  }, [index, onUpdate])\n\n  return (\n    <div className={styles.sensor} data-unbound={!binding}>\n      <label style={{ fontVariant: 'small-caps', fontSize: '90%' }}>\n        <code>{labelText}</code>\n        {canDelete && (\n          <Icon\n            name=\"trash-can\"\n            title=\"Remove sensor binding from this layer\"\n            className={styles.deleteSensorBinding}\n            onClick={handleDelete}\n          />\n        )}\n      </label>\n      {binding && (\n        <EncoderBindings\n          context=\"encoders\"\n          binding={binding || { value, params }}\n          onUpdate={bind => onUpdate(index, bind)}\n        />\n      )}\n      {canAdd && (\n        <KeyWrapper\n          onClick={handleAdd}\n          title=\"Add sensor binding to this layer\"\n          themeClass={classNames(\n            keyStyles.encoder2,\n            styles.addSensorBinding\n          )}\n        >\n          <Icon name=\"add\" />\n        </KeyWrapper>\n      )}\n    </div>\n  )\n}\n","import { useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport Input from '../../Common/Input'\nimport Modal from '../../Common/Modal'\nimport DialogBox from '../../Common/DialogBox'\nimport styles from './style.module.css'\nimport { validateDevicetreeNodeName } from '../Common/Devicetree/validators'\nimport ActionButton from '../../Common/ActionButton'\nimport { selectLayers, updateLayerMetadata } from './layersSlice'\n\nfunction ConfigModal ({ layerIndex, onClose }) {\n  const dispatch = useDispatch()\n  const layers = useSelector(selectLayers)\n  const layer = layers[layerIndex]\n\n  const [pending, setPending] = useState({\n    name: layer.name,\n    label: layer.properties.label?.parsed || ''\n  })\n\n  function handleConfirm () {\n    dispatch(updateLayerMetadata({ layerIndex, ...pending }))\n    onClose()\n  }\n\n  return (\n    <Modal onDismiss={onClose}>\n      <DialogBox dismissText=\"\">\n        <h2>Customize Layer <code>{layer.name}</code></h2>\n        <div>\n\n          <div className={styles.field}>\n            <label htmlFor=\"customize-layer-name\">\n              Name\n            </label>\n            <Input\n              id=\"customize-layer-name\"\n              placeholder=\"Default\"\n              value={pending.name}\n              validator={validateDevicetreeNodeName}\n              onChange={event => (\n                setPending(state => ({\n                  ...state,\n                  name: event.target.value\n                }))\n              )}\n            />\n          </div>\n\n          <div className={styles.field}>\n            <label htmlFor=\"customize-layer-label\">\n              Label\n            </label>\n            <input\n              id=\"customize-layer-label\"\n              placeholder=\"Default\"\n              value={pending.label}\n              onChange={event => (\n                setPending(state => ({\n                  ...state,\n                  label: event.target.value\n                }))\n              )}\n            />\n          </div>\n\n        </div>\n        <div style={{ textAlign: 'center', gap: '5px' }}>\n          <ActionButton onClick={handleConfirm}>OK</ActionButton>\n          <ActionButton onClick={onClose} secondary>Cancel</ActionButton>\n        </div>\n      </DialogBox>\n    </Modal>\n  )\n}\n\nexport default ConfigModal\n","import { useCallback, useEffect, useReducer } from 'react'\n\nconst INITIAL_STATE = {\n  keysHeld: [],\n  keysHeldBeforeLastRelease: []\n}\n\nfunction reduceKeyDown (state, action) {\n  return {\n    keysHeld: [...state.keysHeld, action.event.key],\n    keysHeldBeforeLastRelease: []\n  }\n}\n\nfunction reduceKeyUp (state, action) {\n  const keysHeld = state.keysHeld.filter(key => key !== action.event.key)\n  return {\n    keysHeld: [],\n    keysHeldBeforeLastRelease: keysHeld\n  }\n}\n\nfunction useKeyState () {\n  return useReducer((state, action) => {\n    switch (action.type) {\n      case 'KEY_DOWN':\n        return reduceKeyDown(state, action)\n\n      case 'KEY_UP':\n        return reduceKeyUp(state, action)\n\n      case 'RESET':\n        return INITIAL_STATE\n\n      default:\n        return state\n    }\n  }, INITIAL_STATE)\n}\n\n/**\n * Handle keydown/keyup events\n *\n * This takes care to avoid firing again upon release of modifiers after the\n * modified key has already been fired.\n *\n * @param {Boolean} isActive - use false to deactivate events\n * @param {Function} onKeyPress - handler for filtered key events\n * @returns null\n */\nexport default function useKeyHandler (isActive, onKeyPress) {\n  const [state, dispatch] = useKeyState()\n  const handleKeyDown = useCallback((event) => {\n    if (event.repeat) {\n      return\n    }\n\n    event.preventDefault()\n    dispatch({ type: 'KEY_DOWN', event })\n  }, [dispatch])\n\n  const handleKeyUp = useCallback((event) => {\n    if (state.keysHeldBeforeLastRelease.includes(event.key)) {\n      return\n    }\n\n    event.preventDefault()\n    onKeyPress(event)\n    dispatch({ type: 'KEY_UP', event })\n  }, [state.keysHeldBeforeLastRelease, onKeyPress, dispatch])\n\n  useEffect(() => {\n    if (!isActive) {\n      return\n    }\n\n    document.body.addEventListener('keydown', handleKeyDown)\n    document.body.addEventListener('keyup', handleKeyUp)\n\n    return () => {\n      document.body.removeEventListener('keydown', handleKeyDown)\n      document.body.removeEventListener('keyup', handleKeyUp)\n    }\n  }, [isActive, handleKeyDown, handleKeyUp])\n}\n","import compact from 'lodash/compact'\nimport { useCallback, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { mapCharacter } from 'zmk-data/keycode-mappings'\n\nimport { updateKeyBinding } from './layersSlice'\nimport useKeyHandler from './use-key-handler'\n\nconst mappings = {\n  Alt: 'ALT',\n  Control: 'CTRL',\n  Shift: 'SHFT',\n  Meta: 'GUI',\n  ArrowUp: 'UP',\n  ArrowDown: 'DOWN',\n  ArrowLeft: 'LEFT',\n  ArrowRight: 'RIGHT',\n  Escape: 'ESC',\n  Tab: 'TAB',\n  Enter: 'RET',\n  Home: 'HOME',\n  End: 'END',\n  PageDown: 'PG_DN',\n  PageUp: 'PG_UP',\n  Backspace: 'BSPC',\n  Delete: 'DEL'\n}\n\nfunction normalizeKey (event) {\n  const mapped = mappings[event.key]\n  const prefix = getSidePrefix(event)\n\n  if (!mapped) {\n    return null\n  }\n\n  return {\n    value: '&kp',\n    params: [{\n      value: prefix + mapped,\n      params: []\n    }]\n  }\n}\n\nfunction getSidePrefix (event) {\n  switch (event.location) {\n    case 1:\n      return 'L'\n    case 2:\n      return 'R'\n    case 0:\n    default:\n      return ''\n  }\n}\n\nfunction getModifiers (event) {\n  return compact([\n    event.altKey && 'LA',\n    event.ctrlKey && 'LC',\n    event.metaKey && 'LG',\n    event.shiftKey && 'LS'\n  ])\n}\n\nfunction getBindFromKey (event) {\n  const appliedModifiers = getModifiers(event)\n  const mapped = (\n    mapCharacter(event.key.toLowerCase()) ||\n    normalizeKey(event)\n  )\n\n  if (!mapped) {\n    return\n  }\n\n  return {\n    value: mapped.value,\n    params: appliedModifiers.reduce((params, modifier) => {\n      return [{ value: modifier, params }]\n    }, mapped.params)\n  }\n}\n\nexport function useQuickAssignment (layerIndex, layout, defaultStart = false) {\n  const dispatch = useDispatch()\n  const [isActive, setIsActive] = useState(defaultStart)\n  const [bindIndex, setBindIndex] = useState(0)\n\n  const nextBind = useCallback(() => {\n    if (bindIndex === layout.length - 1) {\n      setBindIndex(0)\n      setIsActive(false)\n    } else {\n      setBindIndex(bindIndex + 1)\n    }\n  }, [bindIndex, setBindIndex, layout.length, setIsActive])\n\n  const handleKeyPress = useCallback(event => {\n    const binding = getBindFromKey(event)\n\n    if (binding) {\n      dispatch(updateKeyBinding({\n        layerIndex,\n        bindIndex,\n        binding\n      }))\n\n      nextBind()\n    }\n  }, [layerIndex, bindIndex, nextBind, dispatch])\n\n  useKeyHandler(isActive, handleKeyPress)\n\n  const startQuickAssignment = useCallback(() => {\n    setIsActive(true)\n  }, [setIsActive])\n\n  const cancelQuickAssignment = useCallback(() => {\n    setIsActive(false)\n  }, [setIsActive])\n\n  return [\n    { isActive, bindIndex },\n    { startQuickAssignment, cancelQuickAssignment, setBindIndex }\n  ]\n}\n","import compact from 'lodash/compact'\nimport { useEffect, useMemo } from 'react'\n\nimport ActionButton from '../../Common/ActionButton'\nimport DialogBox from '../../Common/DialogBox'\nimport Modal from '../../Common/Modal'\nimport Tip from '../../Common/Tip'\nimport KeyboardLayout from '../KeyboardLayout'\nimport Key from '../Keys/Key'\nimport { getWrapperStyle } from '../util'\nimport { useQuickAssignment } from './quick-assignment'\nimport styles from './style.module.css'\n\nexport function QuickAssignmentModal ({ layout, layer, layerIndex, onClose }) {\n  const [status, actions] = useQuickAssignment(layerIndex, layout, true)\n  const wrapperStyle = useMemo(() => getWrapperStyle(layout, {\n    overrides: { minWidth: '400px' }\n  }), [layout])\n\n  useEffect(() => {\n    if (!status.isActive) {\n      onClose()\n    }\n  }, [status.isActive, onClose])\n\n  return (\n    <Modal onDismiss={onClose}>\n      <DialogBox classes={[styles.quickAssignDialog]} dismissText=\"\">\n        <h2>Quick-assign layer keybindings</h2>\n        <p>\n          Press a key on your keyboard to set a <code>&kp</code> binding at the\n          highlighted position in your keymap.\n        </p>\n        <div style={wrapperStyle}>\n          <KeyboardLayout\n            layout={layout}\n            bindings={layer.properties.bindings.parsed}\n            renderKey={({ index, keyLayout }) => layer.properties.bindings.parsed[index] && (\n              <Key\n                label={keyLayout.label}\n                keyWrapperProps={{\n                  selectable: false,\n                  onClick: () => actions.setBindIndex(index),\n                  className: compact([\n                    styles.quickBindKey,\n                    status.bindIndex === index && styles.quickBindKeyHighlight\n                  ]).join(' ')\n                }}\n                value={layer.properties.bindings.parsed[index]?.value}\n                params={layer.properties.bindings.parsed[index]?.params}\n                onUpdate={bind => {}}\n              />\n            )}\n          />\n        </div>\n        <div style={{ textAlign: 'center' }}>\n          <Tip>Click on a different key to jump ahead or correct a previous binding.</Tip>\n          <p>\n            <ActionButton onClick={onClose}>Done</ActionButton>\n          </p>\n        </div>\n      </DialogBox>\n    </Modal>\n  )\n}\n","import { useSelector } from 'react-redux'\n\nimport LayerActionsMenu from './LayerActionsMenu'\nimport LayerBindings from './LayerBindings'\nimport SensorBindings from './SensorBindings'\nimport ConfigModal from './ConfigModal'\nimport styles from './style.module.css'\nimport { QuickAssignmentModal } from './QuickAssignModal'\n\nimport { useCallback, useContext, useMemo, useState } from 'react'\nimport { LayoutContext } from '../../Contexts/Layout'\n\nconst selectSensors = state => state.keyboard.sensors\n\nexport default function Layer ({ layer, layerIndex, isActiveLayer }) {\n  const sensors = useSelector(selectSensors)\n  const [showConfig, setShowConfig] = useState(false)\n  const [showQuickAssignModal, setShowQuickAssignModal] = useState(false)\n\n  const { layout, wrapperStyle } = useContext(LayoutContext)\n\n  const openConfig = useCallback(() => setShowConfig(true), [setShowConfig])\n  const openQuickAssign = useCallback(() => setShowQuickAssignModal(true), [setShowQuickAssignModal])\n  const closeQuickAssign = useCallback(() => setShowQuickAssignModal(false), [setShowQuickAssignModal])\n  const additionalActions = useMemo(() => [\n    { callback: openConfig, content: 'Change Configuration' },\n    { callback: openQuickAssign, content: <>Quick <code>&kp</code> Assignment</> }\n  ], [openConfig, openQuickAssign])\n\n  const { width, height, margin, padding } = wrapperStyle\n\n  return (\n    <>\n      <div className={styles.layerWrapper} style={{ margin, padding }}>\n        <div style={{ width }}>\n          <h3 style={{ position: 'relative' }}>\n            {layer.name} {(\n              <LayerActionsMenu\n                layerIndex={layerIndex}\n                additionalActions={additionalActions}\n              />\n            )}\n          </h3>\n          <div style={{ height }}>\n            <LayerBindings\n              layout={layout}\n              activeLayer={layerIndex}\n            />\n          </div>\n        </div>\n        <div\n          className={styles.sensors}\n          data-sensor-count={sensors.length}\n          style={{}}\n        >\n          <SensorBindings\n            sensors={sensors}\n            layerIndex={layerIndex}\n            layer={layer}\n          />\n        </div>\n      </div>\n      {showConfig && (\n        <ConfigModal\n          layerIndex={layerIndex}\n          onClose={() => setShowConfig(false)}\n        />\n      )}\n      {showQuickAssignModal && (\n        <QuickAssignmentModal\n          layout={layout}\n          layer={layer}\n          layerIndex={layerIndex}\n          onClose={closeQuickAssign}\n        />\n      )}\n    </>\n  )\n}\n","\n      import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./layer-switcher.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]!./layer-switcher.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import compact from 'lodash/compact'\nimport PropTypes from 'prop-types'\nimport { useCallback, useContext, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport Icon from '../../Common/Icon'\nimport styles from './layer-switcher.module.css'\nimport { stop } from '../../event-util'\nimport {\n  selectLayers,\n  createLayer,\n  repositionLayer,\n  deleteLayer\n} from './layersSlice'\nimport { LayoutContext } from '../../Contexts/Layout'\nimport { layerIndexChanged } from './layer-index-change-action'\nimport { SearchContext } from '../../providers'\nimport { DefinitionsContext } from '../../Contexts/Definitions'\n\nfunction LayerSwitcher ({ activeLayer, onSelect }) {\n  const ref = useRef(null)\n  const dispatch = useDispatch()\n  const { bindingCount } = useContext(LayoutContext)\n  const searchContext = useContext(SearchContext)\n  const definitionsContext = useContext(DefinitionsContext)\n  const layers = useSelector(selectLayers)\n\n  const handleSelect = useCallback(function (layerIndex) {\n    onSelect(layerIndex)\n  }, [onSelect])\n\n  const handleAdd = useCallback(() => dispatch(createLayer({\n    bindingCount\n  })), [dispatch, bindingCount])\n\n  const handleDelete = useMemo(() => function (layerIndex) {\n    const { name } = layers[layerIndex]\n    if (window.confirm(`Really delete layer: ${name}?`)) {\n      dispatch(deleteLayer({ index: layerIndex }))\n      dispatch(layerIndexChanged(layerIndex, null, layers, searchContext, definitionsContext))\n    }\n  }, [layers, dispatch, searchContext, definitionsContext])\n\n  const handleDrop = useCallback(function (event, dragState) {\n    event.stopPropagation()\n    const {\n      dragIndex: currentIndex,\n      dropIndex: targetIndex\n    } = dragState\n\n    if (currentIndex === targetIndex) {\n      return\n    }\n\n    dispatch(repositionLayer({ currentIndex, targetIndex }))\n    dispatch(layerIndexChanged(currentIndex, targetIndex, layers, searchContext, definitionsContext))\n  }, [layers, dispatch, searchContext, definitionsContext])\n\n  const [dragState, dragHandlers] = useDragAndDrop(handleDrop)\n\n  return (\n    <div\n      className={styles.layerSelector}\n      ref={ref}\n    >\n      <ul data-dragging={dragState.isDragging}>\n        {layers.map((layer, i) => (\n          <li\n            key={`slot-${i}`}\n            className={activeLayer === i ? styles.active : ''}\n            data-slot-index={i}\n            draggable\n            onDragStart={dragHandlers.handleDragStart}\n            onDragEnd={dragHandlers.handleDragEnd}\n            onDrop={dragHandlers.handleDrop}\n          >\n            <div\n              className={compact([\n                styles.dropper,\n                dragState.dropIndex === i && styles.dropTarget\n              ]).join(' ')}\n              data-drop-position={i}\n              onDragEnter={dragHandlers.handleDragEnter}\n              onDragOver={dragHandlers.handleDragOver}\n              onDragLeave={dragHandlers.handleDragLeave}\n              onDrop={dragHandlers.handleDrop}\n            />\n            <div\n              onClick={() => handleSelect(i)}\n              className={compact([\n                styles.layer,\n                dragState.dragIndex === i && styles.dragging,\n                dragState.isDragging &&\n                dragState.dropIndex !== dragState.dragIndex &&\n                dragState.dropIndex !== dragState.dragIndex + 1 &&\n                dragState.dropIndex !== null &&\n                i >= dragState.dropIndex &&\n                styles.displaced\n              ]).join(' ')}\n            >\n              <span className={styles.index}>{i}</span>\n              <span className={styles.name}>\n                {layer.name}\n                <Icon\n                  name=\"times-circle\"\n                  className={styles.delete}\n                  onClick={stop(() => handleDelete(i))}\n                />\n              </span>\n            </div>\n          </li>\n        ))}\n        {dragState.isDragging && dragState.dragIndex < layers.length - 1 && (\n          <li\n            key={`slot-${layers.length}`}\n            data-slot-index={layers.length}\n            onDragEnd={dragHandlers.handleDragEnd}\n            onDrop={dragHandlers.handleDrop}\n          >\n            <div\n              className={compact([\n                styles.dropper,\n                dragState.dropIndex === layers.length && styles.dropTarget\n              ]).join(' ')}\n              data-drop-position={layers.length}\n              onDragEnter={dragHandlers.handleDragEnter}\n              onDragOver={dragHandlers.handleDragOver}\n              onDragLeave={dragHandlers.handleDragLeave}\n              onDrop={dragHandlers.handleDrop}\n            />\n          </li>\n        )}\n        {!dragState.isDragging && (\n          <li onClick={handleAdd}>\n            <div className={styles.layer}>\n              <Icon className={styles.index} name=\"plus\" />\n              <span className={styles.name}>Add Layer</span>\n            </div>\n          </li>\n        )}\n      </ul>\n    </div>\n  )\n}\n\nfunction useDragAndDrop (onDrop) {\n  const [{ dragIndex, dropIndex }, setDragState] = useState({ dragIndex: null, dropIndex: null })\n\n  const handleDragOver = useCallback(event => event.preventDefault(), [])\n\n  const handleDragStart = useCallback(function (event) {\n    const dragIndex = Number(event.target.dataset.slotIndex)\n    setDragState({ dragIndex, dropIndex: null })\n  }, [setDragState])\n\n  const handleDragEnd = useCallback(function (event) {\n    setDragState(state => {\n      if (state.dropIndex === null) {\n        event.stopPropagation()\n      }\n\n      return { dragIndex: null, dropIndex: null }\n    })\n  }, [setDragState])\n\n  const handleDragEnter = useCallback(function (event) {\n    event.preventDefault()\n    const dropIndex = Number(event.target.dataset.dropPosition)\n    setDragState(state => ({ ...state, dropIndex }))\n  }, [setDragState])\n\n  const handleDragLeave = useCallback(function (event) {\n    const dropIndex = Number(event.target.dataset.dropPosition)\n    setDragState(state => ({\n      ...state, dropIndex: state.dropIndex === dropIndex ? null : state.dropIndex\n    }))\n  }, [setDragState])\n\n  const handleDrop = useCallback(function (event) {\n    onDrop(event, { dragIndex, dropIndex })\n    setDragState({ dragIndex: null, dropIndex: null })\n  }, [dragIndex, dropIndex, setDragState, onDrop])\n\n  const isDragging = dragIndex !== null\n\n  return [\n    { isDragging, dragIndex, dropIndex },\n    {\n      handleDragStart,\n      handleDragEnd,\n      handleDragEnter,\n      handleDragLeave,\n      handleDragOver,\n      handleDrop\n    }\n  ]\n}\n\nLayerSwitcher.propTypes = {\n  activeLayer: PropTypes.number.isRequired,\n  onSelect: PropTypes.func.isRequired\n}\n\nexport default LayerSwitcher\n","import { useContext } from 'react'\nimport { useDispatch } from 'react-redux'\n\nimport { createLayer } from './layersSlice'\nimport ActionButton from '../../Common/ActionButton'\nimport { LayoutContext } from '../../Contexts/Layout'\n\nexport default function PromptForFirstLayer () {\n  const dispatch = useDispatch()\n  const { bindingCount } = useContext(LayoutContext)\n\n  return (\n    <div style={{ textAlign: 'center' }}>\n      <h3>No keymap layers defined</h3>\n      <ActionButton onClick={() => dispatch(createLayer({ bindingCount }))}>\n        Add layer\n      </ActionButton>\n    </div>\n  )\n}\n","import { useState } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport Layer from './Layer'\nimport LayerSwitcher from './LayerSwitcher'\nimport { selectLayers } from './layersSlice'\n\nimport PromptForFirstLayer from './PromptForFirstLayer'\n// import LayerScroller from './LayerScroller'\n\nconst KeymapEditor = () => {\n  const layers = useSelector(selectLayers)\n  const [activeLayer, setActiveLayer] = useState(0)\n\n  const clampedActiveLayer = Math.max(0, Math.min(activeLayer, layers.length - 1))\n\n  if (layers.length === 0) {\n    return <PromptForFirstLayer />\n  }\n\n  return (\n    <>\n      <LayerSwitcher\n        activeLayer={clampedActiveLayer}\n        onSelect={setActiveLayer}\n      />\n      {/* <LayerScroller>\n        {layers.map((layer, i) => (\n          <Layer\n            key={i}\n            layer={layer}\n            layerIndex={i}\n            isActiveLayer={i === clampedActiveLayer}\n          />\n        ))}\n      </LayerScroller> */}\n      <Layer\n        layer={layers[clampedActiveLayer]}\n        layerIndex={clampedActiveLayer}\n        isActiveLayer={true}\n      />\n    </>\n  )\n}\n\nexport default KeymapEditor\n","\nexport function stop (fn) {\n  return function (event) {\n    event.stopPropagation()\n    fn()\n  }\n}\n\nexport function onKey (mapping) {\n  return function (event) {\n    if (mapping[event.key]) {\n      mapping[event.key]()\n    }\n  }\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".jThiLc5_BrUyl71v3rKn {\\n  display: inline-block;\\n  position: absolute;\\n  z-index: 1;\\n  font-size: 70%;\\n  padding: 5px 10px;\\n  margin-left: 10px;\\n\\n  border-radius: 4px;\\n}\\n\\n.jThiLc5_BrUyl71v3rKn p {\\n  display: inline-block;\\n  cursor: pointer;\\n  margin: 0;\\n}\\n\\n.jThiLc5_BrUyl71v3rKn ul {\\n  display: none;\\n}\\n.jThiLc5_BrUyl71v3rKn.xG2GKlsc07jLEb2aMC6H {\\n  background: var(--dialog-bg, var(--bg));\\n  box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.5);\\n}\\n.jThiLc5_BrUyl71v3rKn.xG2GKlsc07jLEb2aMC6H ul {\\n  display: block;\\n  padding: 0;\\n  margin: 0;\\n  list-style-type: none;\\n}\\n\\n.jThiLc5_BrUyl71v3rKn li {\\n  cursor: pointer;\\n  margin: 2px 0;\\n  line-height: 20px;\\n  padding: 0 5px;\\n  border-radius: 10px;\\n}\\n\\n.jThiLc5_BrUyl71v3rKn li:hover {\\n  background-color: var(--hover-selection);\\n  color: white;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/action-menu.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,qBAAqB;EACrB,kBAAkB;EAClB,UAAU;EACV,cAAc;EACd,iBAAiB;EACjB,iBAAiB;;EAEjB,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;EACrB,eAAe;EACf,SAAS;AACX;;AAEA;EACE,aAAa;AACf;AACA;EACE,uCAAuC;EACvC,8CAA8C;AAChD;AACA;EACE,cAAc;EACd,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;EACE,eAAe;EACf,aAAa;EACb,iBAAiB;EACjB,cAAc;EACd,mBAAmB;AACrB;;AAEA;EACE,wCAAwC;EACxC,YAAY;AACd\",\"sourcesContent\":[\".menu {\\n  display: inline-block;\\n  position: absolute;\\n  z-index: 1;\\n  font-size: 70%;\\n  padding: 5px 10px;\\n  margin-left: 10px;\\n\\n  border-radius: 4px;\\n}\\n\\n.menu p {\\n  display: inline-block;\\n  cursor: pointer;\\n  margin: 0;\\n}\\n\\n.menu ul {\\n  display: none;\\n}\\n.menu.open {\\n  background: var(--dialog-bg, var(--bg));\\n  box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.5);\\n}\\n.menu.open ul {\\n  display: block;\\n  padding: 0;\\n  margin: 0;\\n  list-style-type: none;\\n}\\n\\n.menu li {\\n  cursor: pointer;\\n  margin: 2px 0;\\n  line-height: 20px;\\n  padding: 0 5px;\\n  border-radius: 10px;\\n}\\n\\n.menu li:hover {\\n  background-color: var(--hover-selection);\\n  color: white;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"menu\": \"jThiLc5_BrUyl71v3rKn\",\n\t\"open\": \"xG2GKlsc07jLEb2aMC6H\"\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, \".OaJISbD1WCmb03at77EG {\\n  position: relative;\\n}\\n\\n.MUN9De8dUvbPGH9cEDoQ {\\n  position: absolute;\\n  z-index: 10;\\n  bottom: 0;\\n  left: 50%;\\n  transform: translate(-50%, 100%);\\n  max-width: 250px;\\n  width: 100%;\\n\\n  border-radius: 4px;\\n  padding: 3px 5px;\\n\\n  color: white;\\n  background-color: var(--error-highlight);\\n  font-size: 85%;\\n  font-family: sans-serif;\\n\\n  opacity: 0.9;\\n}\\n.MUN9De8dUvbPGH9cEDoQ::before {\\n  position: absolute;\\n  display: block;\\n  content: ' ';\\n  z-index: -1;\\n\\n  left: 50%;\\n  width: 10px;\\n  height: 10px;\\n\\n  background-color: var(--error-highlight);\\n  transform: translate(-50%, -7px) rotate(45deg);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/input.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,SAAS;EACT,SAAS;EACT,gCAAgC;EAChC,gBAAgB;EAChB,WAAW;;EAEX,kBAAkB;EAClB,gBAAgB;;EAEhB,YAAY;EACZ,wCAAwC;EACxC,cAAc;EACd,uBAAuB;;EAEvB,YAAY;AACd;AACA;EACE,kBAAkB;EAClB,cAAc;EACd,YAAY;EACZ,WAAW;;EAEX,SAAS;EACT,WAAW;EACX,YAAY;;EAEZ,wCAAwC;EACxC,8CAA8C;AAChD\",\"sourcesContent\":[\".wrapper {\\n  position: relative;\\n}\\n\\n.error {\\n  position: absolute;\\n  z-index: 10;\\n  bottom: 0;\\n  left: 50%;\\n  transform: translate(-50%, 100%);\\n  max-width: 250px;\\n  width: 100%;\\n\\n  border-radius: 4px;\\n  padding: 3px 5px;\\n\\n  color: white;\\n  background-color: var(--error-highlight);\\n  font-size: 85%;\\n  font-family: sans-serif;\\n\\n  opacity: 0.9;\\n}\\n.error::before {\\n  position: absolute;\\n  display: block;\\n  content: ' ';\\n  z-index: -1;\\n\\n  left: 50%;\\n  width: 10px;\\n  height: 10px;\\n\\n  background-color: var(--error-highlight);\\n  transform: translate(-50%, -7px) rotate(45deg);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"wrapper\": \"OaJISbD1WCmb03at77EG\",\n\t\"error\": \"MUN9De8dUvbPGH9cEDoQ\"\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, \".lD5TsvdIbEAHNdmhfnlb {\\n  background-color: var(--key-bg-base);\\n}\\n.yk89E4zK9zlO69OXhKn5:hover {\\n  cursor: pointer;\\n  border: 4px solid var(--selection);\\n  box-sizing: border-box;\\n}\\n\\n.pzTvsxKjpy6MqcFhxh9j {\\n  background-color: var(--selection);\\n}\\n.pzTvsxKjpy6MqcFhxh9j:hover {\\n  background-color: var(--hover-selection);\\n}\\n\\n.r_Sdklnj57CE2ZjnBDw6 {\\n  background-color: var(--hover-selection);\\n  filter: brightness(135%);\\n}\\n\\n.Ich9T1nSzHs1a84insfp {\\n  background-color: var(--hover-selection);\\n  filter: brightness(75%);\\n}\\n\\n._3U1zi1J1sXT41AzpAA1j {\\n  position: absolute;\\n  bottom: 0;\\n  right: 50%;\\n  transform: translate(50%, 100%);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Keyboard/Common/keyPositionSelectorStyles.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,oCAAoC;AACtC;AACA;EACE,eAAe;EACf,kCAAkC;EAClC,sBAAsB;AACxB;;AAEA;EACE,kCAAkC;AACpC;AACA;EACE,wCAAwC;AAC1C;;AAEA;EACE,wCAAwC;EACxC,wBAAwB;AAC1B;;AAEA;EACE,wCAAwC;EACxC,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,+BAA+B;AACjC\",\"sourcesContent\":[\".key {\\n  background-color: var(--key-bg-base);\\n}\\n.selectable:hover {\\n  cursor: pointer;\\n  border: 4px solid var(--selection);\\n  box-sizing: border-box;\\n}\\n\\n.highlight {\\n  background-color: var(--selection);\\n}\\n.highlight:hover {\\n  background-color: var(--hover-selection);\\n}\\n\\n.previewAdd {\\n  background-color: var(--hover-selection);\\n  filter: brightness(135%);\\n}\\n\\n.previewRemove {\\n  background-color: var(--hover-selection);\\n  filter: brightness(75%);\\n}\\n\\n.tip {\\n  position: absolute;\\n  bottom: 0;\\n  right: 50%;\\n  transform: translate(50%, 100%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"key\": \"lD5TsvdIbEAHNdmhfnlb\",\n\t\"selectable\": \"yk89E4zK9zlO69OXhKn5\",\n\t\"highlight\": \"pzTvsxKjpy6MqcFhxh9j\",\n\t\"previewAdd\": \"r_Sdklnj57CE2ZjnBDw6\",\n\t\"previewRemove\": \"Ich9T1nSzHs1a84insfp\",\n\t\"tip\": \"_3U1zi1J1sXT41AzpAA1j\"\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, \".JeRmYfUKXTg9VqWZshKO {\\n  position: absolute;\\n  pointer-events: none;\\n  z-index: 2;\\n}\\n.JeRmYfUKXTg9VqWZshKO > * {\\n  pointer-events: all;\\n}\\n\\n.JeRmYfUKXTg9VqWZshKO ul {\\n  display: flex;\\n  position: relative;\\n  flex-direction: column;\\n  list-style-type: none;\\n  margin: 0;\\n  padding: 0;\\n}\\n.JeRmYfUKXTg9VqWZshKO li {\\n  position: relative;\\n  padding: 0;\\n  margin: 0;\\n  width: max-content;\\n  height: 34px;\\n  cursor: pointer;\\n}\\n.JeRmYfUKXTg9VqWZshKO .u2LnyyXbhUKWkR8h1WgY {\\n  cursor: grab;\\n}\\n.Svi1LYw7uQ_NUkdl_Qqu, .QHkrJNCowEE3i9FocgKe {\\n  background-color: rgba(201, 201, 201, 0.5);\\n  color: darkgray;\\n  border-radius: 15px;\\n  height: 30px;\\n  padding: 0px;\\n  margin: 2px;\\n  width: max-content;\\n}\\n.JeRmYfUKXTg9VqWZshKO:not([data-dragging=\\\"true\\\"]) li:hover .Svi1LYw7uQ_NUkdl_Qqu {\\n  background-color: rgba(60, 179, 113, 0.85);\\n  color: white;\\n  padding-right: 35px;\\n}\\n[data-dragging=\\\"true\\\"] .Svi1LYw7uQ_NUkdl_Qqu {\\n  padding-right: 35px;\\n}\\n.JeRmYfUKXTg9VqWZshKO .u2LnyyXbhUKWkR8h1WgY .Svi1LYw7uQ_NUkdl_Qqu {\\n  background-color: rgb(60, 179, 113);\\n  color: white;\\n}\\n\\n.JeRmYfUKXTg9VqWZshKO li * {\\n  display: inline-block;\\n}\\n.JeRmYfUKXTg9VqWZshKO li .yVeX9ivshCU7PiJfbG2v {\\n  overflow: auto;\\n  width: 30px;\\n  height: 30px;\\n  line-height: 30px;\\n  text-align: center;\\n}\\n.JeRmYfUKXTg9VqWZshKO li .tV7QyJybi_Gy9OnFqX6l {\\n  overflow: hidden;\\n  width: 0;\\n  height: 30px;\\n  line-height: 30px;\\n  padding: 0;\\n  font-variant: small-caps;\\n}\\n\\n.Svi1LYw7uQ_NUkdl_Qqu {\\n  margin: 4px 2px;\\n  transition: margin-top .15s ease-in;\\n}\\n.Svi1LYw7uQ_NUkdl_Qqu.pRqaGgm21Psy3msTmiKg {\\n  cursor: grabbing;\\n  background-color: royalblue !important;\\n  color: white;\\n  opacity: 0.3;\\n}\\n\\n.v7BdtxvE2YVCWNVJlnry {\\n  position: absolute;\\n\\n  min-width: 200px;\\n  width: 100%;\\n  height: 34px;\\n  /* border: 1px dotted tomato; */\\n}\\n\\n[data-dragging=\\\"false\\\"] .v7BdtxvE2YVCWNVJlnry {\\n  display: none;\\n}\\n.a4BtINSAm0wAMDfWjTWQ {\\n  /* position: relative; */\\n  width: 200px;\\n  opacity: .3;\\n}\\n\\n.Svi1LYw7uQ_NUkdl_Qqu.RMyVbbtfIDcsWDY7Qb1c {\\n  margin-top: 34px;\\n}\\n\\n.JeRmYfUKXTg9VqWZshKO ul :hover .Svi1LYw7uQ_NUkdl_Qqu .tV7QyJybi_Gy9OnFqX6l,\\n[data-dragging=\\\"true\\\"] .Svi1LYw7uQ_NUkdl_Qqu .tV7QyJybi_Gy9OnFqX6l {\\n  transition: .15s ease-in;\\n  width: auto;\\n  padding: 0 0 0 10px;\\n}\\n\\n.JeRmYfUKXTg9VqWZshKO button {\\n  width: 30px;\\n  height: 30px;\\n  line-height: 30px;\\n  padding: 0;\\n  text-align: center;\\n  border-radius: 15px;\\n}\\n\\n.JeRmYfUKXTg9VqWZshKO .htA0l4uMnWt9050_zphf {\\n  cursor: pointer;\\n  position: absolute;\\n  right: 10px;\\n  visibility: hidden;\\n\\n  height: 30px;\\n  line-height: 30px;\\n}\\n.JeRmYfUKXTg9VqWZshKO li:hover .htA0l4uMnWt9050_zphf {\\n  visibility: visible;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Keyboard/Layers/layer-switcher.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,oBAAoB;EACpB,UAAU;AACZ;AACA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,sBAAsB;EACtB,qBAAqB;EACrB,SAAS;EACT,UAAU;AACZ;AACA;EACE,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,kBAAkB;EAClB,YAAY;EACZ,eAAe;AACjB;AACA;EACE,YAAY;AACd;AACA;EACE,0CAA0C;EAC1C,eAAe;EACf,mBAAmB;EACnB,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,kBAAkB;AACpB;AACA;EACE,0CAA0C;EAC1C,YAAY;EACZ,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mCAAmC;EACnC,YAAY;AACd;;AAEA;EACE,qBAAqB;AACvB;AACA;EACE,cAAc;EACd,WAAW;EACX,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;AACpB;AACA;EACE,gBAAgB;EAChB,QAAQ;EACR,YAAY;EACZ,iBAAiB;EACjB,UAAU;EACV,wBAAwB;AAC1B;;AAEA;EACE,eAAe;EACf,mCAAmC;AACrC;AACA;EACE,gBAAgB;EAChB,sCAAsC;EACtC,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,kBAAkB;;EAElB,gBAAgB;EAChB,WAAW;EACX,YAAY;EACZ,+BAA+B;AACjC;;AAEA;EACE,aAAa;AACf;AACA;EACE,wBAAwB;EACxB,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB;;AAEA;;EAEE,wBAAwB;EACxB,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,iBAAiB;EACjB,UAAU;EACV,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,eAAe;EACf,kBAAkB;EAClB,WAAW;EACX,kBAAkB;;EAElB,YAAY;EACZ,iBAAiB;AACnB;AACA;EACE,mBAAmB;AACrB\",\"sourcesContent\":[\".layerSelector {\\n  position: absolute;\\n  pointer-events: none;\\n  z-index: 2;\\n}\\n.layerSelector > * {\\n  pointer-events: all;\\n}\\n\\n.layerSelector ul {\\n  display: flex;\\n  position: relative;\\n  flex-direction: column;\\n  list-style-type: none;\\n  margin: 0;\\n  padding: 0;\\n}\\n.layerSelector li {\\n  position: relative;\\n  padding: 0;\\n  margin: 0;\\n  width: max-content;\\n  height: 34px;\\n  cursor: pointer;\\n}\\n.layerSelector .active {\\n  cursor: grab;\\n}\\n.layer, .addLayer {\\n  background-color: rgba(201, 201, 201, 0.5);\\n  color: darkgray;\\n  border-radius: 15px;\\n  height: 30px;\\n  padding: 0px;\\n  margin: 2px;\\n  width: max-content;\\n}\\n.layerSelector:not([data-dragging=\\\"true\\\"]) li:hover .layer {\\n  background-color: rgba(60, 179, 113, 0.85);\\n  color: white;\\n  padding-right: 35px;\\n}\\n[data-dragging=\\\"true\\\"] .layer {\\n  padding-right: 35px;\\n}\\n.layerSelector .active .layer {\\n  background-color: rgb(60, 179, 113);\\n  color: white;\\n}\\n\\n.layerSelector li * {\\n  display: inline-block;\\n}\\n.layerSelector li .index {\\n  overflow: auto;\\n  width: 30px;\\n  height: 30px;\\n  line-height: 30px;\\n  text-align: center;\\n}\\n.layerSelector li .name {\\n  overflow: hidden;\\n  width: 0;\\n  height: 30px;\\n  line-height: 30px;\\n  padding: 0;\\n  font-variant: small-caps;\\n}\\n\\n.layer {\\n  margin: 4px 2px;\\n  transition: margin-top .15s ease-in;\\n}\\n.layer.dragging {\\n  cursor: grabbing;\\n  background-color: royalblue !important;\\n  color: white;\\n  opacity: 0.3;\\n}\\n\\n.dropper {\\n  position: absolute;\\n\\n  min-width: 200px;\\n  width: 100%;\\n  height: 34px;\\n  /* border: 1px dotted tomato; */\\n}\\n\\n[data-dragging=\\\"false\\\"] .dropper {\\n  display: none;\\n}\\n.dropTarget {\\n  /* position: relative; */\\n  width: 200px;\\n  opacity: .3;\\n}\\n\\n.layer.displaced {\\n  margin-top: 34px;\\n}\\n\\n.layerSelector ul :hover .layer .name,\\n[data-dragging=\\\"true\\\"] .layer .name {\\n  transition: .15s ease-in;\\n  width: auto;\\n  padding: 0 0 0 10px;\\n}\\n\\n.layerSelector button {\\n  width: 30px;\\n  height: 30px;\\n  line-height: 30px;\\n  padding: 0;\\n  text-align: center;\\n  border-radius: 15px;\\n}\\n\\n.layerSelector .delete {\\n  cursor: pointer;\\n  position: absolute;\\n  right: 10px;\\n  visibility: hidden;\\n\\n  height: 30px;\\n  line-height: 30px;\\n}\\n.layerSelector li:hover .delete {\\n  visibility: visible;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"layerSelector\": \"JeRmYfUKXTg9VqWZshKO\",\n\t\"active\": \"u2LnyyXbhUKWkR8h1WgY\",\n\t\"layer\": \"Svi1LYw7uQ_NUkdl_Qqu\",\n\t\"addLayer\": \"QHkrJNCowEE3i9FocgKe\",\n\t\"index\": \"yVeX9ivshCU7PiJfbG2v\",\n\t\"name\": \"tV7QyJybi_Gy9OnFqX6l\",\n\t\"dragging\": \"pRqaGgm21Psy3msTmiKg\",\n\t\"dropper\": \"v7BdtxvE2YVCWNVJlnry\",\n\t\"dropTarget\": \"a4BtINSAm0wAMDfWjTWQ\",\n\t\"displaced\": \"RMyVbbtfIDcsWDY7Qb1c\",\n\t\"delete\": \"htA0l4uMnWt9050_zphf\"\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, \".ULm7RKJYCZDRV0HmcA7C {\\n  position: absolute;\\n  top: 0;\\n  width: 100vw;\\n  height: 100vh;\\n  overflow: auto;\\n  scroll-snap-stop: normal;\\n  scroll-snap-type: y proximity;\\n}\\n\\n.XWq43GGa2yCVXqY4Syw3 {\\n  width: fit-content;\\n  scroll-snap-align: start;\\n}\\n\\n.EwvVNY6vlf7HwYmXTbzi {\\n  margin: 10px 0;\\n  display: flex;\\n}\\n\\n.EwvVNY6vlf7HwYmXTbzi label {\\n  display: inline-block;\\n  width: 120px;\\n  text-align: right;\\n  margin-right: 10px;\\n}\\n\\n.uhiC_7TzN7eCNbm5C6a8[data-sensor-count=\\\"0\\\"] {\\n  display: none;\\n}\\n\\n.ztwqyyB2FFS4oWgcCyZC label {\\n  display: inline-block;\\n  margin-bottom: 10px;\\n}\\n.ztwqyyB2FFS4oWgcCyZC[data-unbound=\\\"true\\\"] label code {\\n  opacity: 0.5;\\n}\\n\\n.N98b5r9XUT9yotsaxhB7 {\\n  cursor: pointer;\\n  margin-left: 5px;\\n}\\n\\n.QZ1jUOy1FEDFG3IrI5JM { cursor: pointer; }\\n.QZ1jUOy1FEDFG3IrI5JM:hover {\\n  color: white;\\n}\\n\\n.raNkhxmGTqtKQI9X2gVA:not(.y7y6ypMwmSafQKgt7oBw) {\\n  cursor: pointer;\\n}\\n.raNkhxmGTqtKQI9X2gVA > * {\\n  pointer-events: none;\\n}\\n.raNkhxmGTqtKQI9X2gVA:hover, .y7y6ypMwmSafQKgt7oBw {\\n  color: var(--key-color-hover);\\n  background-color: var(--selection);\\n}\\n.raNkhxmGTqtKQI9X2gVA:hover {\\n  background-color: var(--hover-selection);\\n}\\n\\n.sahMSNIG_94Hn9tEEZ8q {\\n  max-width: 80vw;\\n  overflow-x: scroll;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Keyboard/Layers/style.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,MAAM;EACN,YAAY;EACZ,aAAa;EACb,cAAc;EACd,wBAAwB;EACxB,6BAA6B;AAC/B;;AAEA;EACE,kBAAkB;EAClB,wBAAwB;AAC1B;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,mBAAmB;AACrB;AACA;EACE,YAAY;AACd;;AAEA;EACE,eAAe;EACf,gBAAgB;AAClB;;AAEA,wBAAoB,eAAe,EAAE;AACrC;EACE,YAAY;AACd;;AAEA;EACE,eAAe;AACjB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,6BAA6B;EAC7B,kCAAkC;AACpC;AACA;EACE,wCAAwC;AAC1C;;AAEA;EACE,eAAe;EACf,kBAAkB;AACpB\",\"sourcesContent\":[\".layerScrollContainer {\\n  position: absolute;\\n  top: 0;\\n  width: 100vw;\\n  height: 100vh;\\n  overflow: auto;\\n  scroll-snap-stop: normal;\\n  scroll-snap-type: y proximity;\\n}\\n\\n.layerWrapper {\\n  width: fit-content;\\n  scroll-snap-align: start;\\n}\\n\\n.field {\\n  margin: 10px 0;\\n  display: flex;\\n}\\n\\n.field label {\\n  display: inline-block;\\n  width: 120px;\\n  text-align: right;\\n  margin-right: 10px;\\n}\\n\\n.sensors[data-sensor-count=\\\"0\\\"] {\\n  display: none;\\n}\\n\\n.sensor label {\\n  display: inline-block;\\n  margin-bottom: 10px;\\n}\\n.sensor[data-unbound=\\\"true\\\"] label code {\\n  opacity: 0.5;\\n}\\n\\n.deleteSensorBinding {\\n  cursor: pointer;\\n  margin-left: 5px;\\n}\\n\\n.addSensorBinding { cursor: pointer; }\\n.addSensorBinding:hover {\\n  color: white;\\n}\\n\\n.quickBindKey:not(.quickBindKeyHighlight) {\\n  cursor: pointer;\\n}\\n.quickBindKey > * {\\n  pointer-events: none;\\n}\\n.quickBindKey:hover, .quickBindKeyHighlight {\\n  color: var(--key-color-hover);\\n  background-color: var(--selection);\\n}\\n.quickBindKey:hover {\\n  background-color: var(--hover-selection);\\n}\\n\\n.quickAssignDialog {\\n  max-width: 80vw;\\n  overflow-x: scroll;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"layerScrollContainer\": \"ULm7RKJYCZDRV0HmcA7C\",\n\t\"layerWrapper\": \"XWq43GGa2yCVXqY4Syw3\",\n\t\"field\": \"EwvVNY6vlf7HwYmXTbzi\",\n\t\"sensors\": \"uhiC_7TzN7eCNbm5C6a8\",\n\t\"sensor\": \"ztwqyyB2FFS4oWgcCyZC\",\n\t\"deleteSensorBinding\": \"N98b5r9XUT9yotsaxhB7\",\n\t\"addSensorBinding\": \"QZ1jUOy1FEDFG3IrI5JM\",\n\t\"quickBindKey\": \"raNkhxmGTqtKQI9X2gVA\",\n\t\"quickBindKeyHighlight\": \"y7y6ypMwmSafQKgt7oBw\",\n\t\"quickAssignDialog\": \"sahMSNIG_94Hn9tEEZ8q\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\nmodule.exports = arrayReduce;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\nmodule.exports = asciiWords;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = basePropertyOf;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","var castSlice = require('./_castSlice'),\n    hasUnicode = require('./_hasUnicode'),\n    stringToArray = require('./_stringToArray'),\n    toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nmodule.exports = createCaseFirst;\n","var arrayReduce = require('./_arrayReduce'),\n    deburr = require('./deburr'),\n    words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\nmodule.exports = createCompounder;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\nmodule.exports = hasUnicodeWord;\n","var asciiToArray = require('./_asciiToArray'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n    rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n  rsUpper + '+' + rsOptContrUpper,\n  rsOrdUpper,\n  rsOrdLower,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\nmodule.exports = unicodeWords;\n","var deburrLetter = require('./_deburrLetter'),\n    toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","var createCompounder = require('./_createCompounder'),\n    upperFirst = require('./upperFirst');\n\n/**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\nvar startCase = createCompounder(function(result, word, index) {\n  return result + (index ? ' ' : '') + upperFirst(word);\n});\n\nmodule.exports = startCase;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","var asciiWords = require('./_asciiWords'),\n    hasUnicodeWord = require('./_hasUnicodeWord'),\n    toString = require('./toString'),\n    unicodeWords = require('./_unicodeWords');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = words;\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]!./keyPositionSelectorStyles.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]!./keyPositionSelectorStyles.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","Input","validator","required","value","rest","error","className","styles","type","propTypes","PropTypes","position","x","y","rotation","a","rx","ry","dimensions","u","h","keyLayout","layout","getPosition","pick","getRotation","r","getSize","w","Placer","props","children","size","positioningStyle","getKeyStyles","style","scale","layoutPropTypes","defaultProps","KeyboardLayout","renderKey","transform","transformOrigin","map","index","ActionMenu","actions","useState","isOpen","setOpen","element","useRef","handleClick","useCallback","e","current","contains","target","useEffect","document","body","addEventListener","removeEventListener","ref","join","onClick","Icon","name","action","i","closeAnd","callback","content","LayerActionsMenu","layerIndex","additionalActions","dispatch","useDispatch","useMemo","transparentToKeypress","rebindTransparentToKeyPress","transparentToNone","rebindTransparentToNone","noneToKeypress","rebindNoneToKeypress","noneToTransparent","rebindNoneToTransparent","emptyKeypressToTransparent","rebindEmptyKeypressToTransparent","emptyKeypressToNone","rebindEmptyKeypressToNone","isRequired","KeyPositionIndicator","keyPositions","styleOverrides","useContext","LayoutContext","wrapperDimensions","wrapperStyle","getWrapperStyle","overrides","pointerEvents","padding","margin","bindings","KeyWrapper","selectable","themeClass","classNames","includes","discussionUrl","BindingDialog","initialBinding","binding","bindingIndex","onUpdate","onCancel","context","setBinding","useBindingEditor","bindTree","behavior","behaviorParams","editing","invalid","clearEditing","handleUpdateBindValue","selectNodeForEditing","onConfirm","Modal","onDismiss","top","background","borderRadius","boxShadow","fontSize","width","Link","href","external","DialogBox","dismissText","display","alignItems","justifyContent","borderBottom","paddingBottom","gap","Binding","params","fontWeight","keyStyles","BindValue","slot","node","expanded","onSelect","Parameters","slots","ValuePicker","behaviour","prompt","searchKey","textAlign","ActionButton","disabled","secondary","listStyleType","length","Parameter","param","raw","mappedName","code","startCase","LayerBindings","activeLayer","useSelector","selectLayers","properties","editBindIndex","setEditBindIndex","handleUpdateBind","bindIndex","updateKeyBinding","parsed","Key","label","noBindingClick","keyWrapperProps","event","stopPropagation","bind","hideBehaviour","EncoderBindings","bindPropTypes","SensorBindings","layer","sensors","sensorBindings","handleUpdate","sensorIndex","updateSensorBindings","flexDirection","sensor","Sensor","canAdd","canDelete","labelText","identifier","_isPlaceholder","handleDelete","handleAdd","fontVariant","title","onClose","pending","setPending","htmlFor","id","placeholder","validateDevicetreeNodeName","onChange","state","updateLayerMetadata","INITIAL_STATE","keysHeld","keysHeldBeforeLastRelease","mappings","Alt","Control","Shift","Meta","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Escape","Tab","Enter","Home","End","PageDown","PageUp","Backspace","Delete","useQuickAssignment","defaultStart","isActive","setIsActive","setBindIndex","nextBind","onKeyPress","useReducer","key","reduceKeyDown","filter","reduceKeyUp","handleKeyDown","repeat","preventDefault","handleKeyUp","useKeyHandler","appliedModifiers","compact","altKey","ctrlKey","metaKey","shiftKey","getModifiers","mapped","mapCharacter","toLowerCase","prefix","location","getSidePrefix","normalizeKey","reduce","modifier","getBindFromKey","startQuickAssignment","cancelQuickAssignment","QuickAssignmentModal","status","minWidth","classes","Tip","selectSensors","keyboard","Layer","isActiveLayer","showConfig","setShowConfig","showQuickAssignModal","setShowQuickAssignModal","openConfig","openQuickAssign","closeQuickAssign","height","LayerSwitcher","bindingCount","searchContext","SearchContext","definitionsContext","DefinitionsContext","layers","handleSelect","createLayer","window","confirm","deleteLayer","layerIndexChanged","handleDrop","dragState","currentIndex","dragIndex","targetIndex","dropIndex","repositionLayer","onDrop","setDragState","handleDragOver","handleDragStart","Number","dataset","slotIndex","handleDragEnd","handleDragEnter","dropPosition","handleDragLeave","isDragging","useDragAndDrop","dragHandlers","draggable","onDragStart","onDragEnd","onDragEnter","onDragOver","onDragLeave","stop","PromptForFirstLayer","setActiveLayer","clampedActiveLayer","Math","max","min","fn","onKey","mapping","___CSS_LOADER_EXPORT___","push","module","locals","exports","array","iteratee","accumulator","initAccum","string","split","reAsciiWord","match","object","baseSlice","start","end","castSlice","hasUnicode","stringToArray","toString","methodName","strSymbols","chr","charAt","trailing","slice","arrayReduce","deburr","words","reApos","RegExp","replace","deburrLetter","basePropertyOf","reHasUnicode","test","reHasUnicodeWord","asciiToArray","unicodeToArray","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsModifier","rsOptVar","rsSeq","rsSymbol","reUnicode","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsEmoji","reUnicodeWord","reLatin","reComboMark","createCompounder","upperFirst","result","word","createCaseFirst","asciiWords","hasUnicodeWord","unicodeWords","pattern","guard"],"sourceRoot":""}