summaryrefslogtreecommitdiffhomepage
path: root/5634.101aafcc869529de97d5.js.map
diff options
context:
space:
mode:
Diffstat (limited to '5634.101aafcc869529de97d5.js.map')
-rw-r--r--5634.101aafcc869529de97d5.js.map1
1 files changed, 0 insertions, 1 deletions
diff --git a/5634.101aafcc869529de97d5.js.map b/5634.101aafcc869529de97d5.js.map
deleted file mode 100644
index cf54da8..0000000
--- a/5634.101aafcc869529de97d5.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"5634.101aafcc869529de97d5.js","mappings":"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","sources":["webpack:///./src/Common/input.module.css?8347","webpack:///./src/Common/Input.js","webpack:///./src/Keyboard/Common/Devicetree/nodePropTypes.js","webpack:///./src/Keyboard/Common/Devicetree/NodeIdentifiers.js","webpack:///./src/Keyboard/Macros/util.js","webpack:///./src/Keyboard/Macros/styles.module.css?ef8e","webpack:///./src/Keyboard/Macros/drag-and-drop.module.css?fdd8","webpack:///./src/Keyboard/Macros/DragAndDrop.js","webpack:///./src/Keyboard/Macros/SequenceModal.js","webpack:///./src/Keyboard/Macros/MacroBinds.js","webpack:///./src/Keyboard/Macros/ConfigModal.js","webpack:///./src/Keyboard/Macros/Macro.js","webpack:///./src/Keyboard/Macros/NewMacroModal.js","webpack:///./src/Keyboard/Macros/MacroEditor.js","webpack:///./src/event-util.js","webpack:///./src/reducer-util.js","webpack:///./src/Common/input.module.css","webpack:///./src/Keyboard/Macros/drag-and-drop.module.css","webpack:///./src/Keyboard/Macros/styles.module.css","webpack:///./node_modules/lodash/isEqual.js"],"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 propValueShape = {\n useRaw: PropTypes.bool,\n raw: PropTypes.string,\n parsed: PropTypes.any\n}\n\nexport const devicetreeNodeShape = {\n name: PropTypes.string.isRequired,\n labels: PropTypes.arrayOf(PropTypes.string).isRequired,\n properties: PropTypes.objectOf(function (propValue, key, componentName, location, propFullName) {\n try {\n PropTypes.checkPropTypes({\n propValue: PropTypes.shape(propValueShape).isRequired\n }, { propValue }, location, componentName)\n } catch (err) {\n return new Error(\n 'Invalid prop `' + propFullName + '` supplied to' +\n ' `' + componentName + '`. Validation failed.'\n )\n }\n }).isRequired\n}\n","import { useCallback, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport Input from '../../../Common/Input'\nimport { devicetreeNodeShape } from './nodePropTypes'\nimport {\n validateDevicetreeLabel,\n validateDevicetreeNodeName\n} from './validators'\n\n// TODO: break this apart to match individual toggles\nfunction isCombined (node) {\n const { name } = node\n const { labels: [nodeLabel] = [] } = node\n const { label: labelProp } = node.properties\n\n return (\n name.toLowerCase() === (nodeLabel || '').toLowerCase() &&\n name.toLowerCase() === (labelProp?.parsed || '').toLowerCase()\n )\n}\n\nexport default function NodeIdentifiers ({ node, onUpdate }) {\n // TODO: trigger value updates when toggling\n const [nameFromBind, setNameFromBind] = useState(isCombined(node))\n const [labelFromBind, setLabelFromBind] = useState(isCombined(node))\n const [\n handleUpdateNodeName,\n handleUpdateNodeLabel,\n handleUpdateLabelProperty\n ] = useIdentifierUpdaters(node, onUpdate, nameFromBind, labelFromBind)\n\n return (\n <table>\n <tbody>\n <tr>\n <th>Bind</th>\n <td>\n <Input\n type=\"text\"\n value={node.labels[0] || ''}\n required={true}\n validator={validateDevicetreeLabel}\n onChange={handleUpdateNodeLabel}\n />\n </td>\n </tr>\n <tr>\n <th>Node</th>\n <td>\n <Input\n value={node.name}\n required={true}\n readOnly={nameFromBind}\n disabled={nameFromBind}\n validator={validateDevicetreeNodeName}\n onChange={handleUpdateNodeName}\n />\n <label title=\"Set automatically using bind name\">\n <input\n type=\"checkbox\"\n checked={nameFromBind}\n onChange={e => setNameFromBind(e.target.checked)}\n /> Automatic\n </label>\n </td>\n </tr>\n <tr>\n <th>Label</th>\n <td>\n <Input\n type=\"text\"\n value={node.properties.label.parsed || ''}\n required={true}\n readOnly={labelFromBind}\n disabled={labelFromBind}\n validator={() => null}\n onChange={handleUpdateLabelProperty}\n />\n <label title=\"Set automatically using bind name\">\n <input\n type=\"checkbox\"\n checked={labelFromBind}\n onChange={e => setLabelFromBind(e.target.checked)}\n /> Automatic\n </label>\n </td>\n </tr>\n </tbody>\n </table>\n )\n}\n\nfunction useIdentifierUpdaters (node, onUpdate, nameFromBind, labelFromBind) {\n const handleUpdateNodeName = useCallback(e => {\n onUpdate({ ...node, name: e.target.value })\n }, [node, onUpdate])\n\n const handleUpdateNodeLabel = useCallback(e => {\n const { value } = e.target\n const labels = [value, ...node.labels.slice(1)]\n const name = nameFromBind ? value : node.name\n const properties = labelFromBind\n ? {\n ...node.properties,\n label: {\n parsed: value.toUpperCase(),\n raw: `\"${value.toUpperCase()}\"`,\n useRaw: false\n }\n }\n : node.properties\n\n onUpdate({ ...node, name, labels, properties })\n }, [node, onUpdate, nameFromBind, labelFromBind])\n\n const handleUpdateLabelProperty = useCallback(e => onUpdate({\n ...node,\n properties: {\n ...node.properties,\n label: {\n ...node.properties.label,\n parsed: e.target.value,\n useRaw: false\n }\n }\n }), [node, onUpdate])\n\n return [\n handleUpdateNodeName,\n handleUpdateNodeLabel,\n handleUpdateLabelProperty\n ]\n}\n\nNodeIdentifiers.propTypes = {\n node: PropTypes.shape(devicetreeNodeShape).isRequired,\n onUpdate: PropTypes.func.isRequired\n}\n","\nexport function isControlBinding (bind) {\n return [\n '&macro_tap',\n '&macro_press',\n '&macro_release',\n '&macro_tap_time',\n '&macro_wait_time',\n '&macro_pause_for_release'\n ].includes(bind.value)\n}\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\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]!./drag-and-drop.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]!./drag-and-drop.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import isEqual from 'lodash/isEqual'\nimport { Fragment, useMemo, useState } from 'react'\n\nimport { isControlBinding } from './util'\nimport styles from './drag-and-drop.module.css'\n\nexport function groupIntoRows (bindings) {\n return bindings.reduce((rows, bind, i) => {\n const addRow = () => rows.push([])\n const addToRow = () => rows.at(-1).push({ ...bind, index: i })\n const isRowEmpty = () => rows.at(-1).length === 0\n const isRowFull = () => (\n (!isRowEmpty() && isControlBinding(rows.at(-1)[0])) ||\n rows.at(-1).length === 6\n )\n\n if (isControlBinding(bind) && !isRowEmpty()) {\n addRow()\n } else if (isRowFull()) {\n addRow()\n }\n\n addToRow()\n\n return rows\n }, [[]])\n}\n\nexport function DropZoneContainer ({ bindings, children, dragging, dragMode, ...rest }) {\n const [currentTarget, setCurrentTarget] = useState([null, null])\n const bindingRows = useMemo(\n () => groupIntoRows(bindings),\n [bindings]\n )\n\n function handleDragEnter (target) {\n console.log('enter', target)\n setCurrentTarget(() => target)\n }\n\n function isCurrentTarget (target) {\n return isEqual(currentTarget, target)\n }\n\n function handleDragLeave (target) {\n setCurrentTarget(state => {\n console.log('leaving', target, 'currently in', state)\n return isEqual(state, target) ? [null, null] : state\n })\n }\n\n function handleDrop () {\n console.log('handleDrop', currentTarget)\n const [row, col, half] = currentTarget\n const { index } = bindingRows[row][col]\n const next = index < bindings.length - 1\n ? index + 1\n : -1\n\n rest.onDrop(half === 1 ? next : index)\n }\n\n return dragging && (\n <div className={[\n styles.dropTargets,\n dragging ? styles.dragging : '',\n dragMode === 'row' ? styles.dropRowOnly : ''\n ].join(' ')}>\n {bindingRows.map((row, i) => (\n <Fragment key={i}>\n <DropZoneRow\n row={row}\n isDropping={isCurrentTarget([i, 0, -1])}\n onDragEnter={() => handleDragEnter([i, 0, -1])}\n onDragLeave={() => handleDragLeave([i, 0, -1])}\n onDrop={handleDrop}\n />\n {row.map((bind, j) => (\n <Fragment key={j}>\n <DropZoneBefore\n bind={bind}\n isDropping={isCurrentTarget([i, j, 0])}\n onDragEnter={() => handleDragEnter([i, j, 0])}\n onDragLeave={() => handleDragLeave([i, j, 0])}\n onDrop={handleDrop}\n />\n <DropZoneAfter\n bind={bind}\n isDropping={isCurrentTarget([i, j, 1])}\n onDragEnter={() => handleDragEnter([i, j, 1])}\n onDragLeave={() => handleDragLeave([i, j, 1])}\n onDrop={handleDrop}\n data-extend={\n !isControlBinding(bind) && j === row.length - 1\n ? Math.max(0, 5 - j)\n : 0\n }\n />\n </Fragment>\n ))}\n </Fragment>\n ))}\n <DropZoneRow\n row={bindingRows.length - 1}\n isDropping={isCurrentTarget([bindingRows.length - 1, bindingRows.at(-1).length - 1, 1])}\n onDragEnter={() => handleDragEnter([bindingRows.length - 1, bindingRows.at(-1).length - 1, 1])}\n onDragLeave={() => handleDragLeave([bindingRows.length - 1, bindingRows.at(-1).length - 1, 1])}\n onDrop={handleDrop}\n />\n </div>\n )\n}\n\nfunction DropZone ({ isDropping, control = false, classes = [], ...rest }) {\n return (\n <div\n data-is-control={control}\n className={[\n styles.dropTargetHalf,\n isDropping ? styles.droppable : '',\n ...classes\n ].join(' ')}\n {...rest}\n />\n )\n}\n\nexport function DropZoneBefore ({ bind, ...rest }) {\n return (\n <DropZone control={isControlBinding(bind)} {...rest} />\n )\n}\n\nexport function DropZoneAfter ({ bind, ...rest }) {\n return (\n <DropZone control={isControlBinding(bind)} classes={[styles.secondHalf]} {...rest} />\n )\n}\n\nexport function DropZoneRow ({ row, isDropping, ...rest }) {\n return (\n <div\n data-drop-mode=\"row\"\n className={[\n styles.dropTargetRow,\n isDropping ? styles.droppable : ''\n ].join(' ')}\n {...rest}\n />\n )\n}\n","import { Fragment, useCallback, useContext, useMemo, useState } from 'react'\n\nimport Modal from '../../Common/Modal'\nimport DialogBox from '../../Common/DialogBox'\nimport KeyWrapper from '../Keys/KeyWrapper'\nimport styles from './styles.module.css'\nimport { hydrateTree } from '../Binding/util'\nimport { SearchContext } from '../../providers'\nimport KeycodeBindNode from '../../EnhancedPickers/Keycode/KeycodeBindNode'\nimport ActionButton from '../../Common/ActionButton'\n\nconst singleValue = value => ({ value: '&kp', params: [{ value, params: [] }] })\n\nconst patternMappings = [\n { pattern: /[0-9]/, convert: digit => singleValue(`N${digit}`) },\n { pattern: /[a-z]/, convert: char => singleValue(char.toUpperCase()) },\n {\n pattern: /[A-Z]/,\n convert: char => ({\n value: '&kp',\n params: [{\n value: 'LS',\n params: [{\n value: char.toUpperCase(),\n params: []\n }]\n }]\n })\n }\n]\n\nconst simpleMappings = {\n '!': singleValue('EXCL'),\n '@': singleValue('AT'),\n '#': singleValue('POUND'),\n $: singleValue('DLLR'),\n '%': singleValue('PRCNT'),\n '^': singleValue('CARET'),\n '&': singleValue('AMPS'),\n '*': singleValue('STAR'),\n '(': singleValue('LPAR'),\n ')': singleValue('RPAR'),\n '\\n': singleValue('RET'),\n ' ': singleValue('SPACE'),\n '-': singleValue('MINUS'),\n _: singleValue('UNDER'),\n '=': singleValue('EQUAL'),\n '+': singleValue('PLUS'),\n '[': singleValue('LBKT'),\n ']': singleValue('LBRC'),\n '{': singleValue('RBKT'),\n '}': singleValue('RBRC'),\n '\\\\': singleValue('BSLH'),\n '|': singleValue('PIPE'),\n '': singleValue('TILDE2'),\n ';': singleValue('SEMI'),\n ':': singleValue('COLON'),\n '\\'': singleValue('SQT'),\n '\"': singleValue('DQT'),\n '`': singleValue('GRAVE'),\n '~': singleValue('TILDE'),\n ',': singleValue('COMMA'),\n '<': singleValue('LT'),\n '.': singleValue('DOT'),\n '>': singleValue('GT'),\n '/': singleValue('FSLH'),\n '?': singleValue('QMARK')\n}\n\nfunction mapCharacter (char) {\n if (simpleMappings[char]) {\n return simpleMappings[char]\n }\n\n for (const { pattern, convert } of patternMappings) {\n if (char.match(pattern)) {\n return convert(char)\n }\n }\n}\n\nfunction SequenceModal ({ onClose }) {\n const { sources, mergedGlyphs } = useContext(SearchContext)\n const [string, setString] = useState('Type something...')\n const sequence = useMemo(() => {\n return string.split('').reduce((sequence, char) => {\n const mapped = mapCharacter(char)\n if (mapped) {\n sequence.push(mapped)\n }\n\n return sequence\n }, [])\n }, [string])\n\n const bindings = sequence.map(({ value, params }) => hydrateTree(\n value,\n params,\n sources,\n undefined,\n mergedGlyphs\n ))\n\n const focusInput = useCallback(node => {\n if (node) {\n node.focus()\n node.select()\n }\n }, [])\n\n return (\n <Modal>\n <DialogBox dismissText={false}>\n <h2>Create Typing Sequence</h2>\n <p>Type a message to generate a sequence of bindings in the macro.</p>\n\n <textarea\n value={string}\n ref={focusInput}\n style={{ width: '100%', height: '6rem' }}\n onChange={e => setString(e.target.value)}\n />\n\n <div className={styles.macroBindings}>\n {bindings.map((bind, i) => (\n <Fragment key={i}>\n <KeyWrapper selectable={false}>\n <KeycodeBindNode\n node={bind.params[0]}\n onSelect={() => {}}\n />\n </KeyWrapper>\n </Fragment>\n ))}\n </div>\n\n <div className={styles.macroActions}>\n <ActionButton onClick={() => onClose(bindings)}>Add to macro</ActionButton>\n <ActionButton onClick={() => onClose([])} secondary>Cancel</ActionButton>\n </div>\n </DialogBox>\n </Modal>\n )\n}\n\nexport default SequenceModal\n","import React, { useCallback, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { isControlBinding } from './util'\nimport styles from './styles.module.css'\nimport { DropZoneContainer } from './DragAndDrop'\nimport SequenceModal from './SequenceModal'\n\nimport Key from '../Keys/Key'\nimport KeyWrapper from '../Keys/KeyWrapper'\n\nimport ActionButton from '../../Common/ActionButton'\nimport Icon from '../../Common/Icon'\nimport { useModalState } from '../../Common/Modal'\n\nimport { stop } from '../../event-util'\nimport { replaceIndex, repositionElement, withoutIndex } from '../../reducer-util'\n\nexport default function MacroBinds (props) {\n const { bindings, onUpdate } = props\n const [dragging, setDragging] = useState(null)\n\n const [\n isSequenceModalOpen,\n openSequenceModal,\n closeSequenceModal\n ] = useModalState()\n\n const [\n handleUpdateBinding,\n handleDeleteBinding,\n handleAddBindings,\n handleAddControlBinding,\n handleAddKeyBinding\n ] = useBindingUpdaters(bindings, onUpdate)\n\n function handleDragStart (event, index) {\n if (event.dataTransfer.items.length) {\n event.dataTransfer.clearData()\n return\n }\n\n const binding = bindings[index]\n setDragging({\n index,\n mode: isControlBinding(binding) ? 'row' : 'col',\n isControlBinding: isControlBinding(binding)\n })\n }\n\n useEffect(() => {\n function clearDrop () {\n setDragging(null)\n }\n function clearDrag (event) {\n event.stopPropagation()\n event.preventDefault()\n }\n\n document.body.addEventListener('drop', clearDrop)\n document.body.addEventListener('dragover', clearDrag)\n return () => {\n document.body.removeEventListener('drop', clearDrop)\n document.body.removeEventListener('dragover', clearDrag)\n }\n }, [setDragging])\n\n function handleDrop (targetIndex) {\n onUpdate(repositionElement(bindings, dragging.index, targetIndex))\n setDragging(null)\n }\n\n return (\n <>\n <div className={styles.macroBindings}>\n {bindings.map((bind, i) => (\n <React.Fragment key={i}>\n <KeyWrapper\n key={i}\n data-index={i}\n themeClass={isControlBinding(bind) ? styles.controlBinding : ''}\n draggable\n onDragStart={e => handleDragStart(e, i)}\n >\n <Key\n context={isControlBinding(bind) ? 'macros' : undefined}\n value={bind.value}\n params={bind.params}\n onUpdate={updated => handleUpdateBinding(i, updated)}\n />\n <div className={styles.actions}>\n <Icon\n name=\"trash\"\n className={styles.deleteBind}\n onClick={stop(() => handleDeleteBinding(i))}\n />\n </div>\n </KeyWrapper>\n </React.Fragment>\n ))}\n <DropZoneContainer\n dragging={dragging}\n bindings={bindings}\n onDrop={handleDrop}\n />\n </div>\n\n {isSequenceModalOpen && (\n <SequenceModal onClose={bindings => {\n closeSequenceModal()\n handleAddBindings(bindings)\n }} />\n )}\n\n <div className={styles.macroActions}>\n <ActionButton onClick={handleAddControlBinding}>\n Add Control Binding\n </ActionButton>\n <ActionButton onClick={handleAddKeyBinding}>\n Add Key Binding\n </ActionButton>\n <ActionButton onClick={openSequenceModal}>\n Add String Sequence\n </ActionButton>\n </div>\n </>\n )\n}\n\nMacroBinds.propTypes = {\n bindings: PropTypes.array.isRequired,\n macroIndex: PropTypes.number.isRequired,\n dispatch: PropTypes.func.isRequired\n}\n\nfunction useBindingUpdaters (bindings, onUpdate) {\n const handleUpdateBinding = useCallback((index, binding) => {\n onUpdate(replaceIndex(bindings, index, binding))\n }, [bindings, onUpdate])\n\n const handleDeleteBinding = useCallback(index => {\n onUpdate(withoutIndex(bindings, index))\n }, [bindings, onUpdate])\n\n const handleAddBindings = useCallback(newBindings => {\n onUpdate([...bindings, ...newBindings])\n }, [bindings, onUpdate])\n\n const handleAddControlBinding = useCallback(() => {\n handleAddBindings([{ value: '&macro_press', params: [] }])\n }, [handleAddBindings])\n\n const handleAddKeyBinding = useCallback(() => {\n handleAddBindings([{ value: '&kp', params: [] }])\n }, [handleAddBindings])\n\n return [\n handleUpdateBinding,\n handleDeleteBinding,\n handleAddBindings,\n handleAddControlBinding,\n handleAddKeyBinding\n ]\n}\n","import { useState } from 'react'\n\nimport Modal from '../../Common/Modal'\nimport DialogBox from '../../Common/DialogBox'\nimport styles from './styles.module.css'\nimport NodeIdentifiers from '../Common/Devicetree/NodeIdentifiers'\n\nfunction ConfigModal ({ macro, onUpdate }) {\n const [pending, setPending] = useState(macro)\n\n function handleConfirm () {\n onUpdate(pending)\n }\n\n function handleCancel () {\n onUpdate(macro)\n }\n\n return (\n <Modal onDismiss={handleCancel}>\n <DialogBox onDismiss={handleConfirm}>\n <h2>Customize <code>{macro.name}</code></h2>\n <div>\n <NodeIdentifiers\n node={pending}\n onUpdate={setPending}\n />\n\n <div className={styles.field}>\n <label htmlFor=\"customize-macro-wait\">\n Wait (ms)\n </label>\n <input\n id=\"customize-macro-wait\"\n type=\"number\"\n placeholder=\"Default\"\n value={pending.properties['wait-ms']?.parsed || ''}\n onChange={event => (\n setPending(state => ({\n ...state,\n properties: {\n ...state.properties,\n 'wait-ms': event.target.value === ''\n ? undefined\n : { parsed: Number(event.target.value) }\n }\n }))\n )}\n />\n </div>\n\n <div className={styles.field}>\n <label htmlFor=\"customize-macro-tap\">\n Tap (ms)\n </label>\n <input\n id=\"customize-macro-tap\"\n type=\"number\"\n placeholder=\"Default\"\n value={pending.properties['tap-ms']?.parsed || ''}\n onChange={event => (\n setPending(state => ({\n ...state,\n properties: {\n ...state.properties,\n 'tap-ms': event.target.value === ''\n ? undefined\n : { parsed: Number(event.target.value) }\n }\n }))\n )}\n />\n </div>\n\n </div>\n </DialogBox>\n </Modal>\n )\n}\n\nexport default ConfigModal\n","import PropTypes from 'prop-types'\nimport { useCallback, useState } from 'react'\n\nimport MacroBinds from './MacroBinds'\nimport ConfigModal from './ConfigModal'\nimport styles from './styles.module.css'\nimport Icon from '../../Common/Icon'\nimport { customizeMacroOptions, updateMacroBindings, deleteMacro } from './macrosSlice'\n\nfunction Macro (props) {\n const { index, macro, dispatch } = props\n const [showConfig, setShowConfig] = useState(false)\n\n const openConfigModal = useCallback(function (event) {\n event.stopPropagation && event.stopPropagation()\n setShowConfig(true)\n }, [setShowConfig])\n\n function handleUpdateConfig (options) {\n setShowConfig(false)\n dispatch(customizeMacroOptions({ macroIndex: index, options }))\n }\n\n const handleUpdateBindings = useCallback(bindings => {\n dispatch(updateMacroBindings({ index, bindings }))\n }, [dispatch, index])\n\n return (\n <div className={styles.macro}>\n {showConfig && (\n <ConfigModal macro={macro} onUpdate={handleUpdateConfig} />\n )}\n <div className={styles.heading}>\n <h5 onClick={openConfigModal}>\n &amp;{macro.labels[0]}\n </h5>\n <div>\n <Icon\n name=\"wrench\"\n className={`${styles.action}`}\n onClick={openConfigModal}\n />\n <Icon\n name=\"trash-can\"\n className={`${styles.action} ${styles.remove}`}\n onClick={() => dispatch(deleteMacro({ index }))}\n />\n </div>\n </div>\n <MacroBinds\n bindings={macro.properties.bindings.parsed}\n onUpdate={handleUpdateBindings}\n />\n </div>\n )\n}\n\nMacro.propTypes = {\n index: PropTypes.number.isRequired,\n macro: PropTypes.shape({\n name: PropTypes.string.isRequired,\n labels: PropTypes.arrayOf(PropTypes.string).isRequired,\n properties: PropTypes.object.isRequired\n }).isRequired,\n dispatch: PropTypes.func.isRequired\n}\n\nexport default Macro\n","import PropTypes from 'prop-types'\nimport { useCallback, useState } from 'react'\n\nimport ActionButton from '../../Common/ActionButton'\nimport DialogBox from '../../Common/DialogBox'\nimport Modal from '../../Common/Modal'\nimport { validateDevicetreeLabel } from '../Common/Devicetree/validators'\nimport Input from '../../Common/Input'\n\nexport default function NewMacroModal ({ onCreate, onCancel }) {\n const [name, setName] = useState('new_macro')\n const handleNameChange = useCallback(event => setName(event.target.value), [setName])\n\n const handleCreate = useCallback(() => {\n onCreate(macroFromName(name))\n }, [name, onCreate])\n\n const error = validateDevicetreeLabel(name)\n\n return (\n <Modal onDismiss={onCancel}>\n <DialogBox dismissText={null}>\n <h3>Add new macro</h3>\n <div>\n <label>Macro name: <Input\n required\n value={name}\n validator={validateDevicetreeLabel}\n onChange={handleNameChange}\n /></label>\n </div>\n <p>\n <em>\n This value will be used for binding the macro's actions in your\n keymap (e.g. <code>&amp;{name}</code>) and should be unique. It will\n also be used internally for the node name and label property, which\n you can customize later.\n </em>\n </p>\n <div style={{ textAlign: 'center', margin: '10px' }}>\n <ActionButton\n disabled={!name || error}\n onClick={handleCreate}\n >\n Create\n </ActionButton>\n <ActionButton onClick={onCancel} secondary>Cancel</ActionButton>\n </div>\n </DialogBox>\n </Modal>\n )\n}\n\nNewMacroModal.propTypes = {\n onCreate: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired\n}\n\nfunction macroFromName (name) {\n const labels = [name]\n const label = name.toUpperCase()\n\n return {\n name,\n labels,\n properties: {\n compatible: {\n parsed: 'zmk,behavior-macro',\n raw: '\"zmk,behavior-macro\"'\n },\n label: {\n parsed: label,\n raw: `\"${label}\"`\n },\n '#binding-cells': {\n parsed: 0,\n raw: '<0>'\n },\n bindings: {\n parsed: [{ value: '&none', params: [] }],\n raw: '&none'\n }\n }\n }\n}\n","import { useCallback } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\n\nimport Macro from './Macro'\nimport styles from './styles.module.css'\n\nimport { useModalState } from '../../Common/Modal'\nimport ActionButton from '../../Common/ActionButton'\nimport Link from '../../Common/Link'\nimport Icon from '../../Common/Icon'\n\nimport { selectMacros, addMacro } from './macrosSlice'\nimport NewMacroModal from './NewMacroModal'\n\nfunction MacroEditor () {\n const macros = useSelector(selectMacros)\n const dispatch = useDispatch()\n\n const [showNewMacro, openNewMacro, closeNewMacro] = useModalState()\n const handleNewMacro = useCallback(macro => {\n dispatch(addMacro(macro))\n closeNewMacro()\n }, [closeNewMacro, dispatch])\n\n return (\n <div className={styles.main}>\n <div className={styles.sidebar}>\n <Link external href=\"https://zmk.dev/docs/behaviors/macros\">\n <Icon name=\"book\" /> ZMK Docs: Macros\n </Link>\n\n <ActionButton onClick={openNewMacro}>\n Add New Macro\n </ActionButton>\n\n {showNewMacro && (\n <NewMacroModal\n onCreate={handleNewMacro}\n onCancel={closeNewMacro}\n />\n )}\n </div>\n\n {macros.map((macro, i) => (\n <Macro\n key={i}\n macro={macro}\n index={i}\n dispatch={dispatch}\n />\n ))}\n </div>\n )\n}\n\nexport default MacroEditor\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","\nexport const withoutIndex = (array, index) => [\n ...array.slice(0, index),\n ...array.slice(index + 1)\n]\n\nexport const replaceIndex = (array, index, value) => [\n ...array.slice(0, index),\n value,\n ...array.slice(index + 1)\n]\n\nexport function repositionElement (array, index, target) {\n if (target === -1) {\n return [...array.filter((_, i) => i !== index), array[index]]\n }\n\n const reordered = array.reduce((arr, val, i) => {\n if (i === target) arr.push(array[index])\n if (i !== index) arr.push(val)\n return arr\n }, [])\n\n return reordered\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, \".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, \"\\n.O8SEfqE2Ewc3b7c7mY_N {\\n position:absolute;\\n top: -5px;\\n left: 0px;\\n width: 100%;\\n /* border: 1px solid red; */\\n /* padding: 5px; */\\n /* opacity: 0.5; */\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.s9O56LWZBKHctVZ4a6fa {\\n position: relative;\\n width: 37.5px;\\n height: 65px;\\n margin: 0;\\n}\\n\\n.s9O56LWZBKHctVZ4a6fa[data-is-control=\\\"true\\\"] {\\n width: 450px;\\n height: 15px;\\n}\\n\\n.NNwZmurJWlIfvb3BWlNX {\\n position: relative;\\n width: 450px;\\n height: 10px;\\n}\\n.NNwZmurJWlIfvb3BWlNX.wVYVfDVsCKFNjQcGKIVI::after {\\n content: '';\\n display: block;\\n position: absolute;\\n top: 50%;\\n transform: translate(0, -50%);\\n width: 450px;\\n height: 4px;\\n background-color: var(--selection);\\n}\\n.MDfy6RcGBlm8W_ChRhyP[data-extend=\\\"1\\\"] { width: calc(37.5px + 1 * 75px); }\\n.MDfy6RcGBlm8W_ChRhyP[data-extend=\\\"2\\\"] { width: calc(37.5px + 2 * 75px); }\\n.MDfy6RcGBlm8W_ChRhyP[data-extend=\\\"3\\\"] { width: calc(37.5px + 3 * 75px); }\\n.MDfy6RcGBlm8W_ChRhyP[data-extend=\\\"4\\\"] { width: calc(37.5px + 4 * 75px); }\\n.MDfy6RcGBlm8W_ChRhyP[data-extend=\\\"5\\\"] { width: calc(37.5px + 5 * 75px); }\\n\\n/* .dropTargetHalf {\\n background-color: blue;\\n opacity: 0.25;\\n}\\n.dropTargetHalf.secondHalf {\\n background-color: red;\\n}\\n.dropTargetRow {\\n background-color: purple;\\n opacity: 0.25;\\n} */\\n\\n.wVYVfDVsCKFNjQcGKIVI.s9O56LWZBKHctVZ4a6fa:not(.MDfy6RcGBlm8W_ChRhyP):not([data-is-control=\\\"true\\\"])::before,\\n.wVYVfDVsCKFNjQcGKIVI.MDfy6RcGBlm8W_ChRhyP:not([data-is-control=\\\"true\\\"])::after {\\n content: '';\\n display: block;\\n height: 65px;\\n width: 4px;\\n border-radius: 4px;\\n background-color: var(--selection);\\n}\\n\\n.AuFB9WiCynP_oONYhOvq .wVYVfDVsCKFNjQcGKIVI:not([data-drop-mode=\\\"row\\\"])::before,\\n.AuFB9WiCynP_oONYhOvq .wVYVfDVsCKFNjQcGKIVI:not([data-drop-mode=\\\"row\\\"])::after {\\n visibility: hidden;\\n }\\n\\n.s9O56LWZBKHctVZ4a6fa:not(.MDfy6RcGBlm8W_ChRhyP):not([data-is-control=\\\"true\\\"])::before {\\n transform: translate(-50%, 0);\\n}\\n.MDfy6RcGBlm8W_ChRhyP:not([data-is-control=\\\"true\\\"])::after {\\n position: absolute;\\n left: 32.5px;\\n transform: translate(50%, 0);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Keyboard/Macros/drag-and-drop.module.css\"],\"names\":[],\"mappings\":\";AACA;EACE,iBAAiB;EACjB,SAAS;EACT,SAAS;EACT,WAAW;EACX,2BAA2B;EAC3B,kBAAkB;EAClB,kBAAkB;EAClB,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,YAAY;EACZ,SAAS;AACX;;AAEA;EACE,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,YAAY;EACZ,YAAY;AACd;AACA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;EAC7B,YAAY;EACZ,WAAW;EACX,kCAAkC;AACpC;AACA,yCAA+B,8BAA8B,EAAE;AAC/D,yCAA+B,8BAA8B,EAAE;AAC/D,yCAA+B,8BAA8B,EAAE;AAC/D,yCAA+B,8BAA8B,EAAE;AAC/D,yCAA+B,8BAA8B,EAAE;;AAE/D;;;;;;;;;;GAUG;;AAEH;;EAEE,WAAW;EACX,cAAc;EACd,YAAY;EACZ,UAAU;EACV,kBAAkB;EAClB,kCAAkC;AACpC;;AAEA;;GAEG,kBAAkB;CACpB;;AAED;EACE,6BAA6B;AAC/B;AACA;EACE,kBAAkB;EAClB,YAAY;EACZ,4BAA4B;AAC9B\",\"sourcesContent\":[\"\\n.dropTargets {\\n position:absolute;\\n top: -5px;\\n left: 0px;\\n width: 100%;\\n /* border: 1px solid red; */\\n /* padding: 5px; */\\n /* opacity: 0.5; */\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.dropTargetHalf {\\n position: relative;\\n width: 37.5px;\\n height: 65px;\\n margin: 0;\\n}\\n\\n.dropTargetHalf[data-is-control=\\\"true\\\"] {\\n width: 450px;\\n height: 15px;\\n}\\n\\n.dropTargetRow {\\n position: relative;\\n width: 450px;\\n height: 10px;\\n}\\n.dropTargetRow.droppable::after {\\n content: '';\\n display: block;\\n position: absolute;\\n top: 50%;\\n transform: translate(0, -50%);\\n width: 450px;\\n height: 4px;\\n background-color: var(--selection);\\n}\\n.secondHalf[data-extend=\\\"1\\\"] { width: calc(37.5px + 1 * 75px); }\\n.secondHalf[data-extend=\\\"2\\\"] { width: calc(37.5px + 2 * 75px); }\\n.secondHalf[data-extend=\\\"3\\\"] { width: calc(37.5px + 3 * 75px); }\\n.secondHalf[data-extend=\\\"4\\\"] { width: calc(37.5px + 4 * 75px); }\\n.secondHalf[data-extend=\\\"5\\\"] { width: calc(37.5px + 5 * 75px); }\\n\\n/* .dropTargetHalf {\\n background-color: blue;\\n opacity: 0.25;\\n}\\n.dropTargetHalf.secondHalf {\\n background-color: red;\\n}\\n.dropTargetRow {\\n background-color: purple;\\n opacity: 0.25;\\n} */\\n\\n.droppable.dropTargetHalf:not(.secondHalf):not([data-is-control=\\\"true\\\"])::before,\\n.droppable.secondHalf:not([data-is-control=\\\"true\\\"])::after {\\n content: '';\\n display: block;\\n height: 65px;\\n width: 4px;\\n border-radius: 4px;\\n background-color: var(--selection);\\n}\\n\\n.dropRowOnly .droppable:not([data-drop-mode=\\\"row\\\"])::before,\\n.dropRowOnly .droppable:not([data-drop-mode=\\\"row\\\"])::after {\\n visibility: hidden;\\n }\\n\\n.dropTargetHalf:not(.secondHalf):not([data-is-control=\\\"true\\\"])::before {\\n transform: translate(-50%, 0);\\n}\\n.secondHalf:not([data-is-control=\\\"true\\\"])::after {\\n position: absolute;\\n left: 32.5px;\\n transform: translate(50%, 0);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"dropTargets\": \"O8SEfqE2Ewc3b7c7mY_N\",\n\t\"dropTargetHalf\": \"s9O56LWZBKHctVZ4a6fa\",\n\t\"dropTargetRow\": \"NNwZmurJWlIfvb3BWlNX\",\n\t\"droppable\": \"wVYVfDVsCKFNjQcGKIVI\",\n\t\"secondHalf\": \"MDfy6RcGBlm8W_ChRhyP\",\n\t\"dropRowOnly\": \"AuFB9WiCynP_oONYhOvq\"\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, \".kc8Au327pmIjKO7auLXT {\\n padding-bottom: 60px;\\n}\\n\\n.B8FpRtVdxbvJjwZoVNB4 {\\n display: flex;\\n position: fixed;\\n width: 180px;\\n flex-direction: column;\\n padding: 10px;\\n gap: 10px;\\n}\\n\\n.Us3Ihf0AoVbZvDulP74Q {\\n width: 550px;\\n margin: 10px auto 40px;\\n}\\n.OVI4IkVsVzyk0eIAn9NX {\\n display: flex;\\n position: relative;\\n justify-content: space-between;\\n border-bottom: 2px solid var(--key-bg-base);\\n margin: 5px 0;\\n}\\n.OVI4IkVsVzyk0eIAn9NX h5 {\\n margin: 0;\\n cursor: pointer;\\n}\\n.QNlSO_GSGhRfUFRE_v8E {\\n cursor: pointer;\\n padding: 5px;\\n opacity: 0.6;\\n}\\n.QNlSO_GSGhRfUFRE_v8E:hover {\\n opacity: 1;\\n}\\n.DvzBwGDH7HsnnIbqaeHi {\\n color: var(--delete);\\n}\\n\\n.mwhR_W7iqHq803xNBV1H {\\n text-align: center;\\n}\\n.mwhR_W7iqHq803xNBV1H > * {\\n margin: 5px;\\n}\\n\\n.TBgT7nB7JSSjnTpMQeXp {\\n position: relative;\\n width: 450px;\\n /* border: 1px solid lightgray; */\\n margin: 0 auto;\\n padding: 5px;\\n\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.TBgT7nB7JSSjnTpMQeXp > * {\\n margin: 5px;\\n width: 65px;\\n height: 65px;\\n}\\n\\n.YMJbsLvnEGObUy4Y_i6w {\\n width: 100%;\\n height: 30px;\\n box-sizing: border-box;\\n}\\n.YMJbsLvnEGObUy4Y_i6w:hover {\\n background-color: var(--hover-selection);\\n color: var(--key-color-hover);\\n}\\n.YMJbsLvnEGObUy4Y_i6w > :first-child {\\n width: 100% !important;\\n height: 100% !important;\\n}\\n\\n.TBgT7nB7JSSjnTpMQeXp [draggable] {\\n cursor: grab;\\n}\\n\\n.I5drc4dA5Kpshp3PPle1 {\\n visibility: hidden;\\n position: absolute;\\n top: 0px;\\n right: 0px;\\n font-size: 80%;\\n\\n color: var(--key-color-hover);\\n}\\n.I5drc4dA5Kpshp3PPle1 > * {\\n margin: 2px;\\n opacity: 0.5;\\n cursor: pointer;\\n}\\n.TBgT7nB7JSSjnTpMQeXp :hover .I5drc4dA5Kpshp3PPle1 {\\n visibility: visible;\\n z-index: 10;\\n}\\n\\n.I5drc4dA5Kpshp3PPle1 :hover {\\n opacity: 1;\\n}\\n\\n\\n.iD9DsKMZZ1dQxr04488w {\\n margin: 10px 0;\\n display: flex;\\n}\\n\\n.iD9DsKMZZ1dQxr04488w label {\\n display: inline-block;\\n width: 120px;\\n text-align: right;\\n margin-right: 10px;\\n}\\n\\n.quGO7XFPrHoYiqu22mwg {\\n font-size: 80%;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Keyboard/Macros/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,oBAAoB;AACtB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,YAAY;EACZ,sBAAsB;EACtB,aAAa;EACb,SAAS;AACX;;AAEA;EACE,YAAY;EACZ,sBAAsB;AACxB;AACA;EACE,aAAa;EACb,kBAAkB;EAClB,8BAA8B;EAC9B,2CAA2C;EAC3C,aAAa;AACf;AACA;EACE,SAAS;EACT,eAAe;AACjB;AACA;EACE,eAAe;EACf,YAAY;EACZ,YAAY;AACd;AACA;EACE,UAAU;AACZ;AACA;EACE,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,YAAY;EACZ,iCAAiC;EACjC,cAAc;EACd,YAAY;;EAEZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,WAAW;EACX,YAAY;AACd;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,sBAAsB;AACxB;AACA;EACE,wCAAwC;EACxC,6BAA6B;AAC/B;AACA;EACE,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,QAAQ;EACR,UAAU;EACV,cAAc;;EAEd,6BAA6B;AAC/B;AACA;EACE,WAAW;EACX,YAAY;EACZ,eAAe;AACjB;AACA;EACE,mBAAmB;EACnB,WAAW;AACb;;AAEA;EACE,UAAU;AACZ;;;AAGA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,cAAc;AAChB\",\"sourcesContent\":[\".main {\\n padding-bottom: 60px;\\n}\\n\\n.sidebar {\\n display: flex;\\n position: fixed;\\n width: 180px;\\n flex-direction: column;\\n padding: 10px;\\n gap: 10px;\\n}\\n\\n.macro {\\n width: 550px;\\n margin: 10px auto 40px;\\n}\\n.heading {\\n display: flex;\\n position: relative;\\n justify-content: space-between;\\n border-bottom: 2px solid var(--key-bg-base);\\n margin: 5px 0;\\n}\\n.heading h5 {\\n margin: 0;\\n cursor: pointer;\\n}\\n.action {\\n cursor: pointer;\\n padding: 5px;\\n opacity: 0.6;\\n}\\n.action:hover {\\n opacity: 1;\\n}\\n.remove {\\n color: var(--delete);\\n}\\n\\n.macroActions {\\n text-align: center;\\n}\\n.macroActions > * {\\n margin: 5px;\\n}\\n\\n.macroBindings {\\n position: relative;\\n width: 450px;\\n /* border: 1px solid lightgray; */\\n margin: 0 auto;\\n padding: 5px;\\n\\n display: flex;\\n flex-wrap: wrap;\\n}\\n\\n.macroBindings > * {\\n margin: 5px;\\n width: 65px;\\n height: 65px;\\n}\\n\\n.controlBinding {\\n width: 100%;\\n height: 30px;\\n box-sizing: border-box;\\n}\\n.controlBinding:hover {\\n background-color: var(--hover-selection);\\n color: var(--key-color-hover);\\n}\\n.controlBinding > :first-child {\\n width: 100% !important;\\n height: 100% !important;\\n}\\n\\n.macroBindings [draggable] {\\n cursor: grab;\\n}\\n\\n.actions {\\n visibility: hidden;\\n position: absolute;\\n top: 0px;\\n right: 0px;\\n font-size: 80%;\\n\\n color: var(--key-color-hover);\\n}\\n.actions > * {\\n margin: 2px;\\n opacity: 0.5;\\n cursor: pointer;\\n}\\n.macroBindings :hover .actions {\\n visibility: visible;\\n z-index: 10;\\n}\\n\\n.actions :hover {\\n opacity: 1;\\n}\\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.betaDisclaimer {\\n font-size: 80%;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"main\": \"kc8Au327pmIjKO7auLXT\",\n\t\"sidebar\": \"B8FpRtVdxbvJjwZoVNB4\",\n\t\"macro\": \"Us3Ihf0AoVbZvDulP74Q\",\n\t\"heading\": \"OVI4IkVsVzyk0eIAn9NX\",\n\t\"action\": \"QNlSO_GSGhRfUFRE_v8E\",\n\t\"remove\": \"DvzBwGDH7HsnnIbqaeHi\",\n\t\"macroActions\": \"mwhR_W7iqHq803xNBV1H\",\n\t\"macroBindings\": \"TBgT7nB7JSSjnTpMQeXp\",\n\t\"controlBinding\": \"YMJbsLvnEGObUy4Y_i6w\",\n\t\"actions\": \"I5drc4dA5Kpshp3PPle1\",\n\t\"field\": \"iD9DsKMZZ1dQxr04488w\",\n\t\"betaDisclaimer\": \"quGO7XFPrHoYiqu22mwg\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","Input","validator","required","value","rest","error","className","styles","type","propTypes","PropTypes","propValueShape","useRaw","raw","parsed","devicetreeNodeShape","name","labels","isRequired","properties","propValue","key","componentName","location","propFullName","err","Error","isCombined","node","nodeLabel","labelProp","label","toLowerCase","NodeIdentifiers","onUpdate","useState","nameFromBind","setNameFromBind","labelFromBind","setLabelFromBind","useCallback","e","target","slice","toUpperCase","useIdentifierUpdaters","handleUpdateNodeName","handleUpdateNodeLabel","handleUpdateLabelProperty","validateDevicetreeLabel","onChange","readOnly","disabled","validateDevicetreeNodeName","title","checked","isControlBinding","bind","includes","DropZoneContainer","bindings","dragging","children","dragMode","currentTarget","setCurrentTarget","bindingRows","useMemo","reduce","rows","i","isRowEmpty","at","length","push","index","groupIntoRows","handleDragEnter","console","log","isCurrentTarget","isEqual","handleDragLeave","state","handleDrop","row","col","half","next","onDrop","join","map","Fragment","DropZoneRow","isDropping","onDragEnter","onDragLeave","j","DropZoneBefore","DropZoneAfter","Math","max","DropZone","control","classes","singleValue","params","patternMappings","pattern","convert","digit","char","simpleMappings","$","_","onClose","useContext","SearchContext","sources","mergedGlyphs","string","setString","split","sequence","mapped","match","mapCharacter","hydrateTree","focusInput","focus","select","Modal","DialogBox","dismissText","ref","style","width","height","KeyWrapper","selectable","KeycodeBindNode","onSelect","ActionButton","onClick","secondary","MacroBinds","props","setDragging","useModalState","isSequenceModalOpen","openSequenceModal","closeSequenceModal","handleUpdateBinding","binding","replaceIndex","handleDeleteBinding","withoutIndex","handleAddBindings","newBindings","handleAddControlBinding","handleAddKeyBinding","useBindingUpdaters","useEffect","clearDrop","clearDrag","event","stopPropagation","preventDefault","document","body","addEventListener","removeEventListener","themeClass","draggable","onDragStart","dataTransfer","items","clearData","mode","handleDragStart","Key","context","updated","Icon","stop","targetIndex","repositionElement","macroIndex","dispatch","macro","pending","setPending","onDismiss","htmlFor","id","placeholder","Number","Macro","showConfig","setShowConfig","openConfigModal","handleUpdateBindings","updateMacroBindings","customizeMacroOptions","deleteMacro","NewMacroModal","onCreate","onCancel","setName","handleNameChange","handleCreate","compatible","macroFromName","textAlign","margin","macros","useSelector","selectMacros","useDispatch","showNewMacro","openNewMacro","closeNewMacro","handleNewMacro","addMacro","Link","external","href","fn","onKey","mapping","array","filter","arr","val","___CSS_LOADER_EXPORT___","module","locals","baseIsEqual","exports","other"],"sourceRoot":""} \ No newline at end of file