1
|
{"version":3,"file":"6849.70f9d65fd8ccf67cb94c.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":""}
|