diff options
Diffstat (limited to '6839.518183318476e6ba7662.js.map')
-rw-r--r-- | 6839.518183318476e6ba7662.js.map | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/6839.518183318476e6ba7662.js.map b/6839.518183318476e6ba7662.js.map deleted file mode 100644 index a0451f8..0000000 --- a/6839.518183318476e6ba7662.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"6839.518183318476e6ba7662.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/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/Layers/layer-switcher.module.css","webpack:///./src/Keyboard/Layers/style.module.css"],"sourcesContent":["\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./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 { useCallback } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport KeyboardLayout from '../KeyboardLayout'\nimport Key from '../Keys/Key'\nimport { selectLayers, updateKeyBinding } from './layersSlice'\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\n const handleUpdateBind = useCallback(function (bindIndex, binding) {\n dispatch(updateKeyBinding({ layerIndex: activeLayer, bindIndex, binding }))\n }, [dispatch, activeLayer])\n\n return (\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 onUpdate={bind => handleUpdateBind(index, bind)}\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 { sources } = useContext(SearchContext)\n const { behaviors } = 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, sources, behaviors))\n }\n }, [layers, dispatch, sources, behaviors])\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, sources, behaviors))\n }, [layers, dispatch, sources, behaviors])\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, \".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"],"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","LayerBindings","activeLayer","bindings","useSelector","selectLayers","properties","handleUpdateBind","bindIndex","binding","updateKeyBinding","parsed","Key","label","params","onUpdate","bind","EncoderBindings","context","KeyWrapper","themeClass","Binding","bindPropTypes","SensorBindings","layer","sensors","sensorBindings","handleUpdate","sensorIndex","updateSensorBindings","margin","display","flexDirection","gap","sensor","Sensor","canAdd","length","canDelete","labelText","identifier","_isPlaceholder","handleDelete","handleAdd","fontVariant","fontSize","title","classNames","keyStyles","onClose","pending","setPending","Modal","onDismiss","DialogBox","dismissText","htmlFor","id","placeholder","validateDevicetreeNodeName","onChange","event","state","textAlign","ActionButton","updateLayerMetadata","secondary","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","includes","useKeyHandler","appliedModifiers","compact","altKey","ctrlKey","metaKey","shiftKey","getModifiers","mapped","mapCharacter","toLowerCase","prefix","location","getSidePrefix","normalizeKey","reduce","modifier","getBindFromKey","startQuickAssignment","cancelQuickAssignment","QuickAssignmentModal","status","wrapperStyle","getWrapperStyle","overrides","minWidth","classes","keyWrapperProps","selectable","Tip","selectSensors","keyboard","Layer","isActiveLayer","showConfig","setShowConfig","showQuickAssignModal","setShowQuickAssignModal","useContext","LayoutContext","openConfig","openQuickAssign","closeQuickAssign","width","height","padding","LayerSwitcher","onSelect","bindingCount","sources","SearchContext","behaviors","DefinitionsContext","layers","handleSelect","createLayer","window","confirm","deleteLayer","layerIndexChanged","handleDrop","dragState","stopPropagation","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"],"sourceRoot":""}
\ No newline at end of file |