summaryrefslogtreecommitdiffhomepage
path: root/8573.47d8feac704668ee45d8.js.map
blob: b24581dc6a6c7e815f8263f92bc078b5d7c551da (plain)
1
{"version":3,"file":"8573.47d8feac704668ee45d8.js","mappings":"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","sources":["webpack:///./src/Common/action-button.module.css?ed83","webpack:///./src/Common/ActionButton.js","webpack:///./src/Common/tip.module.css?4f76","webpack:///./src/Common/Tip.js","webpack:///./src/EnhancedPickers/Keycode/KeycodeBindNode.js","webpack:///./src/EnhancedPickers/Keycode/helpers.js","webpack:///./src/EnhancedPickers/RGB/styles.module.css?270a","webpack:///./src/EnhancedPickers/RGB/HueSatValBindNode.js","webpack:///./src/Keyboard/Binding/BindParamlist.js","webpack:///./src/Keyboard/Binding/BindValue.js","webpack:///./src/Keyboard/Binding/Binding.js","webpack:///./src/Keyboard/Binding/bindPropTypes.js","webpack:///./src/Keyboard/Binding/reducers.js","webpack:///./src/Keyboard/Binding/binding-editor.js","webpack:///./src/Keyboard/Binding/util.js","webpack:///./src/Keyboard/Common/Devicetree/validators.js","webpack:///./src/Keyboard/Keys/Key.js","webpack:///./src/Keyboard/Keys/KeyWrapper.js","webpack:///./src/ValuePicker/util.js","webpack:///./src/ValuePicker/ResultList.js","webpack:///./src/ValuePicker/SearchFilter.js","webpack:///./src/ValuePicker/pickerPropTypes.js","webpack:///./src/ValuePicker/EnumPicker.js","webpack:///./src/ValuePicker/GenericPicker.js","webpack:///./src/EnhancedPickers/RGB/HueSatValPicker.js","webpack:///./src/EnhancedPickers/Keycode/styles.module.css?d2ba","webpack:///./src/EnhancedPickers/Keycode/ModifiersPicker.js","webpack:///./src/Common/hooks/use-cancelable-key-press.js","webpack:///./src/EnhancedPickers/Keycode/KeycodePicker.js","webpack:///./src/ValuePicker/RawValuePicker.js","webpack:///./src/ValuePicker/LayerPicker.js","webpack:///./src/ValuePicker/index.js","webpack:///./src/Common/action-button.module.css","webpack:///./src/Common/tip.module.css","webpack:///./src/EnhancedPickers/Keycode/styles.module.css","webpack:///./src/EnhancedPickers/RGB/styles.module.css","webpack:///./src/Keyboard/Keys/styles.module.css","webpack:///./src/ValuePicker/style.module.css","webpack:///./src/Keyboard/Keys/styles.module.css?bf9c","webpack:///./src/ValuePicker/style.module.css?0fff"],"sourcesContent":["\n      import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./action-button.module.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./action-button.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import styles from './action-button.module.css'\n\nfunction ActionButton ({ children, secondary, className, ...props }) {\n  return (\n    <button\n      className={[\n        className,\n        styles.action,\n        secondary && styles.secondary\n      ].join(' ')}\n      {...props}\n    >\n      {children}\n    </button>\n  )\n}\n\nActionButton.defaultProps = {\n  className: ''\n}\n\nexport default ActionButton\n","\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]!./tip.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]!./tip.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import Icon from './Icon'\nimport styles from './tip.module.css'\n\nexport default function Tip ({ children, className = '' }) {\n  const classNames = [styles.tip, className].join(' ')\n  return (\n    <div className={classNames}>\n      <Icon className=\"fa-flip-horizontal\" name=\"hand-point-up\" /> {children}\n    </div>\n  )\n}\n","import { Fragment, useCallback, useMemo } from 'react'\nimport compact from 'lodash/compact'\nimport map from 'lodash/map'\n\nimport { NullKey, getSourceTitle, renderSource } from '../../Keyboard/Binding/BindValue'\nimport styles from '../../Keyboard/Keys/styles.module.css'\nimport { treeToSequence } from './helpers'\n\nexport default function KeycodeBindNode ({ node, onSelect, expanded = false }) {\n  const handleClick = useCallback(function (event) {\n    event.stopPropagation()\n    onSelect({ node, type: 'tree' })\n  }, [node, onSelect])\n\n  const codes = useMemo(() => map(treeToSequence(node), 'source'), [node])\n  const key = useMemo(() => codes.at(-1), [codes])\n  const codesSerialized = useMemo(() => {\n    const mods = codes.slice(0, -1)\n    return mods.reduce((serialized, mod) => (\n      `${mod.code}(${serialized})`\n    ), key?.code)\n  }, [codes, key?.code])\n  const codeLabels = useMemo(() => (\n    codes.map(renderSource)\n      .map((label, i) => <Fragment key={i}>{label}</Fragment>)\n      .reduce((labels, label) => (\n        labels.length === 0\n          ? [label]\n          : [...labels, ' ', label]\n      ), [])\n  ), [codes])\n  const title = useMemo(() => (\n    codes.map(getSourceTitle).join(' + ')\n  ), [codes])\n\n  const display = useMemo(() => (\n    codes.map(code => (\n      code\n        ? code.description || code.name\n        : '⦸'\n    )).join(' + ')\n  ), [codes])\n\n  const missing = (\n    node.source?.code === undefined ||\n    node.value === undefined ||\n    node._isPlaceholder\n  )\n\n  const content = !expanded\n    ? codeLabels\n    : (\n      <>\n        <code>{codesSerialized}</code>\n        <span>{display}</span>\n      </>\n      )\n\n  return (\n    <span\n      className={compact([\n        styles.code,\n        missing && styles.missingValue\n      ]).join(' ')}\n      title={title}\n      onClick={handleClick}\n    >\n      {missing ? <NullKey /> : content}\n    </span>\n  )\n}\n","// `code` values may be \"trees\" in terms of structure, but this is only\n// because of \"modifier macros\" (e.g. `LS(A)`) which may be nested recursively\n// but each level of the tree has at most one child. This means the deepest\n// node is our actual keycode and everything above that is a modifier.\nexport function treeToSequence (tree) {\n  return tree.params.length > 0\n    ? [tree, ...treeToSequence(tree.params[0])]\n    : [tree]\n}\n\nexport function sequenceToTree ([value, ...seq]) {\n  const params = seq.length === 0 ? [] : [sequenceToTree(seq)]\n  return { value, params }\n}\n","\n      import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import { useCallback, useMemo } from 'react'\n\nimport BindValue from '../../Keyboard/Binding/BindValue'\nimport styles from './styles.module.css'\n\nfunction HueSatValBindNode ({ node, onSelect }) {\n  const { params: [h, s, b] } = node\n\n  // TODO: this component continues to work because of a hack/inconsistency in\n  // the &rgb_ug behavior definition's HSB_SEL command. RGB support is really\n  // unimportant so this will be left alone for now, but it probably comes down\n  // to an issue in correctly setting placeholder HSB values when selecting the\n  // applicable command, so that might be something that gets resolved with a\n  // proper refactor of the Binding node and its update functionality.\n\n  const handleSelectParams = useCallback(event => {\n    event?.stopPropagation?.()\n    onSelect({ node, type: 'tree' })\n  }, [node, onSelect])\n\n  const isEmpty = useMemo(() => (\n    [h, s, b].some(v => v?.value === undefined || v?._isPlaceholder)\n  ), [h, s, b])\n\n  const bgStyle = useMemo(() => {\n    if ([h, s, b].some(v => v?.value === undefined)) {\n      return {}\n    }\n\n    return {\n      backgroundColor: `hsl(${h.value}, ${s.value}%, ${b.value}%)`,\n      border: `.1em solid hsl(${h.value}, ${s.value}%, ${b.value * 0.75}%)`,\n      boxSizing: 'border-box'\n    }\n  }, [h, s, b])\n\n  return (\n    <>\n      <BindValue node={node} onSelect={onSelect} />\n      {!isEmpty\n        ? (\n        <div onClick={handleSelectParams} className={styles.colorIconWrapper}>\n          <div\n            className={styles.colorIcon}\n            title={bgStyle.backgroundColor}\n            style={bgStyle}\n          />\n        </div>\n          )\n        : <BindValue node={{}} onSelect={handleSelectParams} />}\n    </>\n  )\n}\n\nexport default HueSatValBindNode\n","import get from 'lodash/get'\nimport PropTypes from 'prop-types'\nimport { useMemo } from 'react'\n\nimport * as bindPropTypes from './bindPropTypes'\nimport BindValue from './BindValue'\nimport KeycodeBindNode from '../../EnhancedPickers/Keycode/KeycodeBindNode'\nimport HueSatValBindNode from '../../EnhancedPickers/RGB/HueSatValBindNode'\n\nimport styles from '../Keys/styles.module.css'\n\nfunction GenericBindNode ({ node, onSelect, expanded }) {\n  return (\n    <>\n      <BindValue\n        node={node}\n        onSelect={onSelect}\n        expanded={expanded}\n      />\n      {get(node, 'source.params.length') > 0\n        ? (\n            <BindParamlist\n              slots={node.source.params}\n              params={node.params}\n              onSelect={onSelect}\n            />\n          )\n        : null}\n    </>\n  )\n}\n\nexport function BindParam (props) {\n  const { node, onSelect, slot, expanded = false } = props\n  const BindComponent = useMemo(() => {\n    // TODO: allow components to register helpers\n    if (node.source?.helper === 'hsb-color-picker') return HueSatValBindNode\n    if (slot === 'code') return KeycodeBindNode\n    return GenericBindNode\n  }, [node, slot])\n\n  return (\n    <span className={styles.param}>\n      <BindComponent node={node} onSelect={onSelect} expanded={expanded} />\n    </span>\n  )\n}\n\nfunction BindParamlist (props) {\n  const { slots, params, onSelect, root, wrapperProps } = props\n  return (\n    <span\n      className={styles.params}\n      data-is-root={!!root}\n      data-param-count={params.length}\n      {...wrapperProps}\n    >\n      {slots.map((slot, i) => slot.type !== 'placeholder' && (\n        <BindParam\n          key={i}\n          slot={slot}\n          node={params[i]}\n          onSelect={onSelect}\n        />\n      ))}\n    </span>\n  )\n}\n\nBindParamlist.propTypes = {\n  slots: PropTypes.arrayOf(bindPropTypes.param).isRequired,\n  params: PropTypes.arrayOf(bindPropTypes.bindNode).isRequired,\n  source: bindPropTypes.source,\n  onSelect: PropTypes.func.isRequired\n}\n\nexport default BindParamlist\n","import compact from 'lodash/compact'\nimport { useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\nimport * as bindPropTypes from './bindPropTypes'\nimport styles from '../Keys/styles.module.css'\nimport Icon from '../../Common/Icon'\n\nexport function NullKey () {\n  return <span>⦸</span>\n}\n\nexport function getSourceTitle (source) {\n  const description = source?.displayName || source?.description\n  return source && `(${source.code}) ${description}`\n}\n\nexport function renderSource (source) {\n  const text = source?.symbol || source?.code?.toString()\n  const icon = source?.faIcon && <Icon name={source?.faIcon} />\n  return icon || text || <NullKey />\n}\n\nexport function Source ({ value, expanded = false }) {\n  if (!expanded) {\n    return renderSource(value)\n  } else if (!value) {\n    return <NullKey />\n  }\n\n  const icon = value.faIcon ? <Icon name={value.faIcon} /> : value.symbol\n  const code = value.code?.toString?.()\n  const name = value.displayName || value.description || value.name\n\n  // TODO: `name` will be falsey for raw values, maybe a RawValueBindNode would\n  // be a more appropriate way to handle them.\n\n  return (\n    <>\n      <code>{code}</code>\n      {name && <span>{name}</span>} {icon}\n    </>\n  )\n}\n\nfunction BindValue (props) {\n  const { node, onSelect, expanded = false } = props\n  const { value, source, _isPlaceholder } = node\n  const title = getSourceTitle(source)\n\n  const handleClick = useCallback(function (event) {\n    event.stopPropagation()\n    onSelect({ node })\n  }, [node, onSelect])\n\n  return (\n    <span\n      className={compact([\n        styles.code,\n        (value === undefined || _isPlaceholder) && styles.missingValue\n      ]).join(' ')}\n      title={title}\n      onClick={handleClick}\n    >\n      {_isPlaceholder ? <NullKey /> : <Source value={source} expanded={expanded} />}\n    </span>\n  )\n}\n\nBindValue.propTypes = {\n  node: bindPropTypes.bindNode.isRequired,\n  onSelect: PropTypes.func.isRequired\n}\n\nexport default BindValue\n","import compact from 'lodash/compact'\nimport PropTypes from 'prop-types'\n\nimport useBindingEditor from './binding-editor'\n\nimport BindParamlist from './BindParamlist'\nimport * as bindPropTypes from './bindPropTypes'\nimport {\n  createPromptMessage,\n  isSimple,\n  isComplex\n} from './util'\nimport styles from '../Keys/styles.module.css'\n\nimport Icon from '../../Common/Icon'\nimport ValuePicker from '../../ValuePicker'\n\nfunction Binding (props) {\n  const { context = 'none', hideBehaviour, value, params, paramIndex, onUpdate } = props\n  const [\n    { behavior, behaviorParams, bindTree, bindTreeParams, editing, invalid },\n    { selectNodeForEditing, clearEditing, handleUpdateAndConfirm, handleChange, handleConfirm }\n  ] = useBindingEditor({ value, params }, paramIndex, onUpdate)\n\n  return (\n    <>\n      {behavior && !hideBehaviour\n        ? (\n        <span\n          className={compact([\n            styles['behaviour-binding'],\n            !bindTree.source?.code && styles.missingValue\n          ]).join(' ')}\n          onClick={() => selectNodeForEditing({ node: bindTree })}\n        >\n          {bindTree.source?.code || '⦸'}\n        </span>\n          )\n        : null}\n      {invalid && (\n        <Icon\n          name=\"warning\"\n          className={styles.missing}\n          title=\"Binding has missing value(s)\"\n        />\n      )}\n      <BindParamlist\n        root={true}\n        slots={behaviorParams}\n        params={bindTreeParams}\n        onSelect={selectNodeForEditing}\n        wrapperProps={{\n          'data-simple': isSimple(bindTree),\n          'data-long': isComplex(bindTree, behaviorParams)\n        }}\n      />\n      {editing && (\n        <ValuePicker\n          node={editing.node}\n          type={editing.type}\n          behaviour={behavior}\n          context={context}\n          prompt={createPromptMessage(editing.node.slot)}\n          searchKey=\"code\"\n          onSelect={handleUpdateAndConfirm}\n          onConfirm={handleConfirm}\n          onChange={handleChange}\n          onCancel={clearEditing}\n        />\n      )}\n    </>\n  )\n}\n\nBinding.propTypes = {\n  context: PropTypes.string,\n  hideBehaviour: PropTypes.bool.isRequired,\n  value: bindPropTypes.value.isRequired,\n  params: PropTypes.arrayOf(bindPropTypes.node),\n  onUpdate: PropTypes.func.isRequired\n}\n\nBinding.defaultProps = {\n  hideBehaviour: false\n}\n\nexport default Binding\n","import PropTypes from 'prop-types'\n\nexport const enumOption = PropTypes.oneOfType([\n  PropTypes.number,\n  PropTypes.shape({\n    name: PropTypes.string,\n    type: PropTypes.string,\n    description: PropTypes.string,\n    code: PropTypes.any\n  })\n])\n\nexport const param = PropTypes.oneOfType([\n  PropTypes.oneOf(['code', 'layer']),\n  PropTypes.shape({ type: PropTypes.oneOf(['placeholder']) }),\n  PropTypes.shape({\n    enum: PropTypes.arrayOf(enumOption),\n    raw: PropTypes.bool,\n    name: PropTypes.string,\n    type: PropTypes.string.isRequired\n  })\n])\n\nexport const params = PropTypes.arrayOf(param)\nexport const value = PropTypes.oneOfType([\n  PropTypes.string,\n  PropTypes.number\n])\nexport const source = PropTypes.shape({\n  params,\n  code: value.isRequired,\n  description: PropTypes.string,\n  symbol: PropTypes.string,\n  faIcon: PropTypes.string\n})\n\nconst nodeShape = { value, source }\nnodeShape.params = PropTypes.arrayOf(PropTypes.shape(nodeShape))\n\nexport const node = PropTypes.shape(nodeShape)\n\nexport const bindNode = node\n\nexport const index = PropTypes.arrayOf(node)\n","import cloneDeep from 'lodash/cloneDeep'\nimport { makeIndex } from './util'\n\n/**\n * @typedef {number | string | Object} BindEnumOption\n * @property {string} name\n * @property {string} type\n * @property {string} [description]\n * @property {any} code\n*/\n\n/** @typedef {('behaviour' | 'code' | 'layer')} BindTypeBasic */\n/** @typedef {{ type: 'placeholder' }} BindTypePlaceholder */\n/** @typedef {{ enum: Array<BindEnumOption> }} BindTypeEnum */\n/** @typedef {BindTypeBasic | BindTypePlaceholder | BindTypeEnum} BindSlot */\n/** @typedef {Array<BindSlot>} BindSlots */\n\n/** @typedef {number | string} BindValue */\n\n/**\n * @typedef {Object} BindSource\n * @property {string} code\n * @property {BindSlots} [params]\n * @property {string} [description]\n * @property {string} [symbol]\n * @property {string} [faIcon]\n */\n\n/**\n * @typedef {Object} BindNode\n * @property {BindValue} value\n * @property {BindParams} params\n * @property {BindSource} source\n * @property {Boolean} [_isPlaceholder=false]\n */\n\n/** @typedef {BindNode} BindTree */\n\n/**\n * @typedef {Object} UpdateSubtreeAction\n * @property {number} nodeIndex\n * @property {BindNode} updatedNode\n */\n\n/**\n * @typedef {Object} UpdateNodeAction\n * @property {number} nodeIndex\n * @property {BindSource} source\n * @property {BehaviorSlots} behaviorParameters\n */\n\n/**\n * Apply a change to a subtree of a bindtree.\n * @param {BindTree} bindTree\n * @param {UpdateSubtreeAction} updateAction\n * @returns {BindTree}\n */\nexport function bindTreeReducer (bindTree, updateAction) {\n  const { nodeIndex, updatedNode } = updateAction\n  const updatedTree = cloneDeep(bindTree)\n  const index = makeIndex(updatedTree)\n  const targetNode = index[nodeIndex]\n\n  // Assume these are all fine?\n  targetNode.value = updatedNode.value\n  targetNode.params = updatedNode.params\n  delete targetNode._isPlaceholder\n\n  index.forEach(node => {\n    delete node.source\n    delete node.slot\n  })\n\n  return updatedTree\n}\n\n/**\n * Apply a value from a defined source to bind node\n * @param {BindTree} bindTree\n * @param {UpdateNodeAction} updateAction\n * @returns {BindTree}\n */\nexport function bindNodeReducer (bindTree, updateAction) {\n  const { nodeIndex, source, behaviorParameters } = updateAction\n  const updatedTree = cloneDeep(bindTree)\n  const index = makeIndex(updatedTree)\n  const targetNode = index[nodeIndex]\n\n  // Attempt to cast raw inputs to non-string type if such a type is defined\n  // and I've specifically accounted for casting to that type here.\n  // No error handling yet, so...\n  // TODO: can't RawValuePicker do this??\n  if (targetNode.slot.raw && targetNode.slot.type === 'number') {\n    source.code = Number(source.code)\n  }\n\n  const oldAdditionalParams = targetNode.source?.additionalParams?.length || 0\n  const newAdditionalParams = source.additionalParams?.length || 0\n  if (newAdditionalParams < oldAdditionalParams) {\n    // Originally 6c425092 -- src/Keyboard/Keys/Key.js\n    index[0].params.splice(1, index[0].params.length - 1)\n    index.splice(2, index.length - 1)\n  }\n\n  const newParamSlots = targetNode.slot === 'behaviour'\n    ? (behaviorParameters[source.value] || [])\n    : (source?.params || [])\n\n  const params = getNewParamsList(targetNode, newParamSlots)\n\n  delete targetNode._isPlaceholder\n  targetNode.value = source.code\n  targetNode.params = params\n\n  index.forEach(node => {\n    delete node.source\n    delete node.slot\n  })\n\n  return updatedTree\n}\n\n/**\n * Resolve parameter type mismatches when changing behaviors\n * @param {BindNode} node\n * @param {BindSlots} newParamSlots\n * @returns {BindParams}\n */\nfunction getNewParamsList (node, newParamSlots) {\n  const { params: oldParams, source } = node\n  const oldParamSlots = source?.params || []\n\n  // Clear parameters if the new source params list doesn't match the old one.\n  // TODO: instead of a reduce and iterating through the entire array in all\n  // cases, this could look for the first index where both params lists don't\n  // match and then splice targetNode.params from there\n  return newParamSlots.reduce((params, slot, i) => [\n    ...params,\n    // TODO: use `isEqual()`?\n    oldParamSlots[i] !== slot\n      ? { value: 0, _isPlaceholder: true }\n      : oldParams[i]\n  ], [])\n}\n","import cloneDeep from 'lodash/cloneDeep'\nimport get from 'lodash/get'\nimport { useCallback, useContext, useMemo, useState } from 'react'\n\nimport { SearchContext } from '../../providers'\nimport { createPromptMessage, hasErrors, hydrateTree, makeIndex, withoutMetadata } from './util'\nimport { getBindingSlots } from '../../keymap'\nimport { bindTreeReducer, bindNodeReducer } from './reducers'\n\nexport default function useBindingEditor (binding, paramIndex, onUpdate) {\n  const context = useContext(SearchContext)\n  const { sources } = context\n  const [editing, setEditing] = useState(null)\n\n  const bindTree = useMemo(() => (\n    hydrateTree(editing?.pending || binding, context)\n  ), [binding, editing?.pending, context])\n\n  const paramSlice = paramIndex === undefined ? [0] : [paramIndex, paramIndex + 1]\n\n  const bind = binding.value\n  const behavior = get(sources.behaviours, bind, {})\n  const behaviorParams = getBindingSlots(binding, context.behaviorParameters).slice(...paramSlice)\n  const bindTreeParams = bindTree.params.slice(...paramSlice)\n  const index = makeIndex(bindTree)\n  const invalid = useMemo(() => hasErrors(index), [index])\n\n  const clearEditing = useCallback(() => setEditing(null), [setEditing])\n\n  const handleUpdateAndConfirm = useCallback(source => {\n    const { nodeIndex } = editing\n    const updated = editing.type === 'tree'\n      ? bindTreeReducer(bindTree, { nodeIndex, updatedNode: source })\n      : bindNodeReducer(bindTree, {\n        source,\n        nodeIndex,\n        behaviorParameters: context.behaviorParameters\n      })\n\n    onUpdate(withoutMetadata(updated))\n    clearEditing()\n  }, [bindTree, editing, clearEditing, onUpdate, context.behaviorParameters])\n\n  const handleConfirm = useCallback(() => {\n    if (editing.pending) {\n      onUpdate(withoutMetadata(editing.pending))\n      clearEditing()\n    }\n  }, [editing?.pending, onUpdate, clearEditing])\n\n  const handleChange = useCallback(source => {\n    const { pending, nodeIndex } = editing\n    const updated = editing.type === 'tree'\n      ? bindTreeReducer(pending, { nodeIndex, updatedNode: source })\n      : bindNodeReducer(pending, {\n        source,\n        nodeIndex,\n        behaviorParameters: context.behaviorParameters\n      })\n\n    // TODO: probably shouldn't be doing this here but currently use of the\n    // binding and bindTree alternate and are kind of inconsistent.\n    const updatedTree = hydrateTree(updated, context)\n\n    const index = makeIndex(updatedTree)\n    const node = index[nodeIndex]\n\n    setEditing({ ...editing, pending: updatedTree, index, node })\n  }, [editing, setEditing, context])\n\n  const selectNodeForEditing = useCallback(({ node, type = 'value' }) => {\n    const pending = cloneDeep(bindTree)\n    const prompt = createPromptMessage(node.slot, node, type)\n    const nodeIndex = index.indexOf(node)\n\n    if (editing?.nodeIndex === nodeIndex && editing?.type === type) {\n      handleConfirm()\n      return\n    }\n\n    setEditing({ pending, node, type, nodeIndex, prompt })\n  }, [editing, bindTree, index, setEditing, handleConfirm])\n\n  const state = useMemo(\n    () => ({\n      behavior,\n      behaviorParams,\n      bindTree,\n      bindTreeParams,\n      editing,\n      index,\n      invalid\n    }),\n    [behavior, behaviorParams, bindTree, bindTreeParams, editing, index, invalid]\n  )\n\n  const callbacks = useMemo(\n    () => ({\n      clearEditing,\n      handleChange,\n      handleConfirm,\n      handleUpdateAndConfirm,\n      handleUpdateBindValue: handleUpdateAndConfirm,\n      selectNodeForEditing\n    }),\n    [\n      clearEditing,\n      selectNodeForEditing,\n      handleChange,\n      handleConfirm,\n      handleUpdateAndConfirm\n    ]\n  )\n\n  return useMemo(() => ([state, callbacks]), [state, callbacks])\n}\n","import cloneDeep from 'lodash/cloneDeep'\nimport find from 'lodash/find'\nimport get from 'lodash/get'\n\nimport { getBindingSlots } from '../../keymap'\n\nexport function makeIndex (tree) {\n  const index = []\n  ;(function traverse (tree) {\n    const params = tree.params || []\n    index.push(tree)\n    params.forEach(traverse)\n  })(tree)\n\n  return index\n}\n\n/**\n * Return a cloned bindtree with `source` and other added properties removed.\n *\n * I hate this a lot and really need to refactor bindings components to put this\n * metadata in a separate tree with its own defined type.\n * @param {BindTree} bindTree\n * @returns {BindTree}\n */\nexport function withoutMetadata (bindTree) {\n  const tree = cloneDeep(bindTree)\n  const index = makeIndex(tree)\n  for (const node of index) {\n    for (const key in node) {\n      if (\n        (key === '_isPlaceholder' && node._isPlaceholder) ||\n        ['value', 'params'].includes(key)\n      ) {\n        continue\n      }\n\n      delete node[key]\n    }\n  }\n\n  return tree\n}\n\nexport function isSimple (normalized) {\n  const [first] = normalized.params\n  const symbol = get(first, 'source.symbol', get(first, 'source.code', ''))\n  const hasIcon = !!get(first, 'source.faIcon')\n  const shortSymbol = hasIcon || symbol.length === 1\n  const singleParam = normalized.params.length === 1\n  return singleParam && shortSymbol\n}\n\nexport function isComplex (normalized, behaviourParams) {\n  const [first] = normalized.params\n  const symbol = get(first, 'source.symbol', get(first, 'value', ''))\n  const hasIcon = !!get(first, 'source.faIcon')\n  const isLongSymbol = !hasIcon && symbol.length > 4\n  const isMultiParam = behaviourParams.length > 1\n  const isNestedParam = get(first, 'params', []).length > 0\n\n  return isLongSymbol || isMultiParam || isNestedParam\n}\n\nexport function createPromptMessage (param, node, type) {\n  const promptMapping = {\n    layer: 'Assign layer',\n    mod: 'Assign modifier',\n    behaviour: 'Assign behavior',\n    keycode: 'Assign key code'\n  }\n\n  // This currently only applies to &rgb_ug RGB_COLOR_HSB(...) because it is\n  // technically a single binding cell in the devicetree and we treat it as\n  // multiple parameters.\n  if (node) {\n    const name = node.source?.displayName || node.source?.name\n    if (name) {\n      return name\n    }\n  }\n\n  if (param.name) {\n    return `Assign ${param.name}`\n  }\n\n  if (param.raw) {\n    return 'Enter raw value'\n  }\n\n  return (\n    promptMapping[param] ||\n    promptMapping.keycode\n  )\n}\n\nexport function hasErrors (index) {\n  // The first value in the list is the behaviour. If it doesn't have a source\n  // that means that we don't have details about what it is.\n  if (!index[0].source.code) {\n    return true\n  }\n\n  for (const value of index) {\n    if ((value.source?.params || []).length > value.params.length) {\n      return true\n    }\n\n    if (value.params.some(v => (\n      v.value === undefined ||\n      v.value === '' ||\n      v.source === undefined ||\n      (v._isPlaceholder && v.slot?.type !== 'placeholder')\n    ))) {\n      return true\n    }\n  }\n}\n\nexport function hydrateTree (binding, context) {\n  const { value, params } = binding\n  const { sources, mergedGlyphs, behaviorParameters } = context\n\n  const bind = value\n  const behaviour = get(sources.behaviours, bind, {})\n  const behaviourParams = getBindingSlots(binding, behaviorParameters)\n\n  function getSourceValue (value, as) {\n    value = get(sources.defines, value, value)\n    if (!Number.isNaN(Number(value))) {\n      value = Number(value)\n    }\n    if (as.raw) return { code: value }\n    if (as.enum) {\n      // TODO: this doesn't seem to handle type mismatches like `1` vs `\"1\"` but\n      // in fairness this has probably been true for some time.\n      // TODO: rewrite all behavior enums to wrap choices in objects instead of\n      // handling object and raw value formats.\n      return (\n        find(as.enum, { code: value }) ||\n        find(as.enum, value) ||\n        { code: value }\n      )\n    }\n    // TODO: Shouldn't need to render placeholder\n    if (as.type === 'placeholder') return { code: value }\n    return sources?.[as]?.[value]\n  }\n\n  function hydrateNode (node, slot) {\n    if (!node) {\n      return { value: undefined, slot, params: [] }\n    }\n    const { value, params, _isPlaceholder } = node\n    const source = getSourceValue(value, slot)\n\n    return {\n      value,\n      _isPlaceholder,\n      slot,\n      source: {\n        ...source,\n        symbol: get(mergedGlyphs, [source?.name, 'symbol'], source?.symbol),\n        faIcon: get(mergedGlyphs, [source?.name, 'faIcon'], source?.faIcon)\n      },\n      params: get(source, 'params', []).map((slot, i) => (\n        hydrateNode(params[i], slot)\n      ))\n    }\n  }\n\n  return {\n    value,\n    slot: 'behaviour',\n    source: behaviour,\n    params: behaviourParams.map((slot, i) => (\n      hydrateNode(params[i], slot)\n    ))\n  }\n}\n","\nexport function validateDevicetreeNodeName (value) {\n  if (value.length > 31) {\n    return 'maximum length: 31'\n  } else if (value.match(/^[^a-zA-Z]/)) {\n    return 'first character must be a letter'\n  } else if (value.match(/[^a-zA-Z0-9,._+-]/)) {\n    return 'valid characters: a-zA-Z0-9,._+-'\n  }\n}\n\nexport const validateDevicetreeIdentifier = validateDevicetreeNodeName\n\nexport function validateDevicetreeLabel (value) {\n  if (value.length > 31) {\n    return 'maximum length: 31'\n  } else if (value.match(/^[^a-zA-Z]/)) {\n    return 'first character must be a letter'\n  } else if (value.match(/[^a-zA-Z0-9_]/)) {\n    return 'valid characters: a-zA-Z0-9_'\n  }\n}\n\nexport function validateDevicetreeReference (value) {\n  if (value.length > 31) {\n    return 'maximum length: 31'\n  } else if (value.match(/^[^&]/)) {\n    return 'must start with \"&\"'\n  } else if (value.match(/^&[^a-zA-Z]/)) {\n    return 'first character must be a letter'\n  } else if (value.slice(1).match(/[^a-zA-Z0-9_]/)) {\n    return 'valid characters: a-zA-Z0-9_'\n  }\n}\n","import PropTypes from 'prop-types'\n\nimport KeyWrapper from './KeyWrapper'\n\nimport Binding from '../Binding/Binding'\nimport * as bindPropTypes from '../Binding/bindPropTypes'\n\nfunction Key (props) {\n  const { context, value, params, keyWrapperProps = {}, onUpdate } = props\n\n  return (\n    <KeyWrapper {...keyWrapperProps}>\n      <Binding\n        context={context}\n        value={value}\n        params={params}\n        onUpdate={onUpdate}\n      />\n    </KeyWrapper>\n  )\n}\n\nKey.propTypes = {\n  label: PropTypes.string,\n  value: bindPropTypes.value.isRequired,\n  params: PropTypes.arrayOf(bindPropTypes.node),\n  onUpdate: PropTypes.func.isRequired\n}\n\nexport default Key\n","import compact from 'lodash/compact'\nimport styles from './styles.module.css'\n\nfunction KeyWrapper (props) {\n  const {\n    children,\n    selectable = true,\n    themeClass = undefined,\n    className = '',\n    ...rest\n  } = props\n\n  const classes = compact([\n    styles.key,\n    selectable && styles.selectable,\n    themeClass ?? styles.keyDefaultTheme,\n    className\n  ]).join(' ')\n\n  return (\n    <div className={classes} {...rest}>\n      {children}\n    </div>\n  )\n}\n\nexport default KeyWrapper\n","\nexport const cycle = (array, index, step = 1) => {\n  const next = (index + step) % array.length\n  return next < 0 ? array.length + next : next\n}\n\nexport function scrollIntoViewIfNeeded (element, alignToTop) {\n  const scroll = element.offsetParent.scrollTop\n  const height = element.offsetParent.offsetHeight\n  const top = element.offsetTop\n  const bottom = top + element.scrollHeight\n\n  if (top < scroll || bottom > scroll + height) {\n    element.scrollIntoView(alignToTop)\n  }\n}\n","import PropTypes from 'prop-types'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cycle, scrollIntoViewIfNeeded } from './util'\nimport style from './style.module.css'\n\nfunction ResultList ({ results, onSelect, renderResult }) {\n  const [cursorIndex, setCursorIndex] = useState(0)\n  const listRef = useRef(null)\n\n  const moveCursor = useCallback(function (initial, offset) {\n    if (results.length === 0) {\n      setCursorIndex(null)\n      return\n    } else if (offset === undefined) {\n      setCursorIndex(initial)\n      return\n    }\n\n    const next = cursorIndex !== null\n      ? cycle(results, cursorIndex, offset)\n      : initial\n\n    const selector = `li[data-result-index=\"${next}\"]`\n    const element = listRef.current?.querySelector(selector)\n\n    scrollIntoViewIfNeeded(element, false)\n    setCursorIndex(next)\n  }, [results, cursorIndex, setCursorIndex])\n\n  const handleHighlightNext = useCallback(function () {\n    moveCursor(0, 1)\n  }, [moveCursor])\n\n  const handleHightightPrev = useCallback(function () {\n    moveCursor(results.length - 1, -1)\n  }, [moveCursor, results])\n\n  const handleSelectActive = useCallback(function (event) {\n    onSelect(results[cursorIndex], event)\n  }, [results, cursorIndex, onSelect])\n\n  const handleKeyDown = useCallback(function (event) {\n    // If the focus is on a button (most likely confirm/cancel) then we don't\n    // want to prevent 'Enter' from triggering that button. This isn't really\n    // a great solution but it's convenient in the short term until I can be\n    // bothered to refactor things.\n    if (event.target.nodeName === 'BUTTON') {\n      return\n    }\n\n    const mapping = {\n      ArrowDown: handleHighlightNext,\n      ArrowUp: handleHightightPrev,\n      Enter: handleSelectActive\n    }\n\n    const action = mapping[event.key]\n    if (action) {\n      event.preventDefault()\n      event.stopPropagation()\n      action(event)\n    }\n  }, [\n    handleHighlightNext,\n    handleHightightPrev,\n    handleSelectActive\n  ])\n\n  useEffect(() => {\n    document.body.addEventListener('keydown', handleKeyDown)\n    return () => document.body.removeEventListener('keydown', handleKeyDown)\n  }, [listRef, handleKeyDown])\n\n  return (\n    <ul className={style.results} ref={listRef}>\n      {results.map((result, i) => (\n        <li\n          key={i}\n          className={cursorIndex === i ? style.highlighted : ''}\n          title={result.description}\n          data-result-index={i}\n          onClick={event => onSelect(result, event)}\n          onDoubleClick={event => onSelect(result, event)}\n          onMouseOver={() => moveCursor(i)}\n        >\n          {renderResult(result, i)}\n        </li>\n      ))}\n    </ul>\n  )\n}\n\nResultList.propTypes = {\n  results: PropTypes.array.isRequired,\n  onSelect: PropTypes.func.isRequired,\n  renderResult: PropTypes.func.isRequired\n}\n\nexport default ResultList\n","import fuzzysort from 'fuzzysort'\nimport PropTypes from 'prop-types'\nimport { useCallback, useMemo, useState } from 'react'\n\nimport Icon from '../Common/Icon'\nimport style from './style.module.css'\n\nconst searchThreshold = 10\n\nfunction focusInput (node) {\n  if (node) {\n    node.focus()\n    node.select()\n  }\n}\n\nconst SearchFilter = ({ choices, searchKey, searchKeys, renderResults, initialQuery }) => {\n  const useSearch = !choices.length || choices.length > searchThreshold\n  const [query, setQuery] = useState(initialQuery)\n  const results = useMemo(() => {\n    if (!query || !useSearch) {\n      return choices\n    }\n\n    const options = searchKeys ? { keys: searchKeys, limit: 30 } : { key: searchKey, limit: 30 }\n    const filtered = fuzzysort.go(query, choices, options)\n    return filtered.map(result => ({\n      ...result.obj,\n      search: result\n    }))\n  }, [useSearch, query, choices, searchKey, searchKeys])\n\n  const handleKeyPress = useCallback(event => {\n    setQuery(event.target.value)\n  }, [setQuery])\n\n  return (\n    <>\n      {useSearch && (\n        <div className={style.searchWrapper}>\n          <input\n            ref={focusInput}\n            type=\"text\"\n            value={query}\n            onChange={handleKeyPress}\n          />\n          <Icon className={style.searchIcon} name=\"search\" />\n          <Icon\n            className={style.clearSearchIcon}\n            name=\"times\"\n            onClick={() => setQuery('')}\n          />\n        </div>\n      )}\n      {renderResults(results)}\n    </>\n  )\n}\n\nSearchFilter.propTypes = {\n  choices: PropTypes.array.isRequired,\n  searchKey: PropTypes.string,\n  initialQuery: PropTypes.string.isRequired,\n  renderResults: PropTypes.func.isRequired\n}\n\nSearchFilter.defaultProps = {\n  initialQuery: ''\n}\n\nexport default SearchFilter\n","import PropTypes from 'prop-types'\nimport { bindNode } from '../Keyboard/Binding/bindPropTypes'\n\nexport const pickerPropTypes = {\n  onCancel: PropTypes.func,\n\n  /**\n   * For multi-step selections, this just updates the parent component\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * For single-step selections or other events that \"complete\" the interaction\n   * this callback cues the parent to close the picker.\n   */\n  onSelect: PropTypes.func.isRequired,\n  node: bindNode.isRequired,\n  searchKey: PropTypes.string.isRequired,\n  searchThreshold: PropTypes.number\n}\n","import { useContext, useMemo } from 'react'\n\nimport { SearchContext } from '../providers'\nimport ResultList from './ResultList'\nimport style from './style.module.css'\nimport { pickerPropTypes } from './pickerPropTypes'\n\nexport default function EnumPicker (props) {\n  const { getSearchTargets } = useContext(SearchContext)\n  const { param, onSelect } = props\n\n  const choices = useMemo(() => (\n    getSearchTargets(param)\n  ), [getSearchTargets, param])\n\n  return (\n    <ResultList\n      results={choices}\n      onSelect={onSelect}\n      renderResult={result => (\n        <>\n          {result.code}\n          {result.description && (\n            <p className={style.description}>\n              {result.description}\n            </p>\n          )}\n        </>\n      )}\n    />\n  )\n}\n\nEnumPicker.propTypes = pickerPropTypes\n","import fuzzysort from 'fuzzysort'\nimport { useContext, useMemo } from 'react'\n\nimport { SearchContext } from '../providers'\nimport ResultList from './ResultList'\nimport SearchFilter from './SearchFilter'\nimport style from './style.module.css'\nimport { pickerPropTypes } from './pickerPropTypes'\n\nexport default function GenericPicker (props) {\n  const { searchKey, node, param, behaviour, context, onSelect } = props\n  const { getSearchTargets } = useContext(SearchContext)\n\n  const choices = useMemo(() => {\n    return getSearchTargets(param, behaviour.code, context)\n  }, [getSearchTargets, param, behaviour, context])\n\n  return (\n    <SearchFilter\n      choices={choices}\n      initialQuery={node.value || ''}\n      searchKey={searchKey}\n      renderResults={results => results && (\n        <ResultList\n          results={results}\n          onSelect={onSelect}\n          renderResult={renderSearchResult}\n        />\n      )}\n    />\n  )\n}\n\nGenericPicker.propTypes = pickerPropTypes\n\nfunction renderSearchResult (result) {\n  const title = result.search\n    ? (\n      <span>\n        {fuzzysort.highlight(result.search, (v, i) => (\n          <b key={i}>{v}</b>\n        ))}\n      </span>\n      )\n    : <span>{result.code}</span>\n\n  const description = result.displayName || result.description\n\n  return (\n    <>\n      {title}\n      {description && (\n        <p className={style.description}>\n          {description}\n        </p>\n      )}\n    </>\n  )\n}\n","import { useCallback, useMemo } from 'react'\nimport { HslColorPicker } from 'react-colorful'\nimport ActionButton from '../../Common/ActionButton'\n\nimport { pickerPropTypes } from '../../ValuePicker/pickerPropTypes'\n\nexport default function HSBPicker (props) {\n  const { node, onChange, onConfirm, inline } = props\n  const hsl = useMemo(() => ({\n    h: Number(node.params[0].value),\n    s: Number(node.params[1].value),\n    l: Number(node.params[2].value)\n  }), [node.params])\n\n  const handleChange = useCallback(({ h, s, l }) => {\n    onChange({\n      ...node,\n      params: [\n        { value: Math.round(h) },\n        { value: Math.round(s) },\n        { value: Math.round(l) }\n      ]\n    })\n  }, [node, onChange])\n\n  return (\n    <>\n      <div style={{ display: 'flex', justifyContent: 'center' }}>\n        <HslColorPicker\n          color={hsl}\n          onChange={handleChange}\n        />\n      </div>\n      {!inline && (\n        <p style={{ textAlign: 'center' }}>\n          <ActionButton onClick={onConfirm}>Confirm</ActionButton>\n        </p>\n      )}\n    </>\n  )\n}\n\nHSBPicker.propTypes = pickerPropTypes\n","\n      import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./styles.module.css\";\n       export default content && content.locals ? content.locals : undefined;\n","import classNames from 'classnames'\nimport without from 'lodash/without'\nimport PropTypes from 'prop-types'\nimport { useCallback } from 'react'\n\nimport useCancelableKeyPress from '../../Common/hooks/use-cancelable-key-press'\nimport style from './styles.module.css'\n\nconst leftModifiers = ['LS', 'LA', 'LC', 'LG']\nconst rightModifiers = ['RS', 'RA', 'RC', 'RG']\n\nconst modifiersMap = {\n  LS: { short: 'LSHFT', full: 'Left Shift' },\n  LC: { short: 'LCTRL', full: 'Left Control' },\n  LA: { short: 'LALT', full: 'Left Alt' },\n  LG: { short: 'LGUI', full: 'Left Gui' },\n  RS: { short: 'RSHFT', full: 'Right Shift' },\n  RC: { short: 'RCTRL', full: 'Right Control' },\n  RA: { short: 'RALT', full: 'Right Alt' },\n  RG: { short: 'RGUI', full: 'Right Gui' }\n}\n\nfunction mapDomModifier (event) {\n  const modKey = {\n    Control: 'C',\n    Shift: 'S',\n    Alt: 'A',\n    Meta: 'G'\n  }[event.key]\n  const side = {\n    [KeyboardEvent.DOM_KEY_LOCATION_LEFT]: 'L',\n    [KeyboardEvent.DOM_KEY_LOCATION_RIGHT]: 'R'\n  }[event.location]\n\n  return (modKey && side) ? `${side}${modKey}` : null\n}\n\nconst noDeselectMessage = ' (This modifier is implicitly used by the active keycode and cannot be de-selected)'\n\nfunction ModifiersRow ({ selected, implicit, row, onChange }) {\n  return (\n    <ul className={style.modifiers}>\n      {row.map((mod, i) => (\n        <li\n          key={i}\n          title={modifiersMap[mod].full + (implicit.includes(mod) ? noDeselectMessage : '')}\n          className={classNames({\n            [style.selected]: selected.includes(mod),\n            [style.implicit]: implicit.includes(mod)\n          })}\n        >\n          <label>\n            <input\n              type=\"checkbox\"\n              checked={(\n                selected.includes(mod) ||\n                implicit.includes(mod)\n              )}\n              disabled={implicit.includes(mod)}\n              onChange={e => {\n                onChange(\n                  e.target.checked\n                    ? [...selected, mod]\n                    : without(selected, mod)\n                )\n              }}\n            /> {(\n              modifiersMap[mod].short\n            )}\n          </label>\n        </li>\n      ))}\n    </ul>\n  )\n}\n\nexport default function ModifiersPicker ({ selected, implicit, onChange }) {\n  useModifierToggle(selected, implicit, onChange)\n\n  return (\n    <div className={style.allModifiers}>\n      <ModifiersRow row={leftModifiers} selected={selected} implicit={implicit} onChange={onChange} />\n      <ModifiersRow row={rightModifiers} selected={selected} implicit={implicit} onChange={onChange} />\n    </div>\n  )\n}\n\nModifiersPicker.propTypes = {\n  selected: PropTypes.arrayOf(PropTypes.string),\n  implicit: PropTypes.arrayOf(PropTypes.string),\n  onChange: PropTypes.func.isRequired\n}\n\nfunction useModifierToggle (selected, implicit, onChange) {\n  const handleKeyUp = useCallback(event => {\n    const modifier = mapDomModifier(event)\n    if (modifier && !implicit.includes(modifier)) {\n      onChange(\n        selected.includes(modifier)\n          ? without(selected, modifier)\n          : [...selected, modifier]\n      )\n    }\n  }, [selected, implicit, onChange])\n\n  useCancelableKeyPress(handleKeyUp, { singleKeyOnly: true })\n}\n","import without from 'lodash/without'\nimport { useCallback, useEffect, useState } from 'react'\n\n/**\n * Handle document keyup events, except when focus changed mid-keypress.\n *\n * Mostly this means we can have a handler for something like Ctrl that should\n * not trigger if the user is pressing Ctrl+Tab to switch focus to another\n * browser tab.\n *\n * This probably doesn't work for Cmd+Tab due to how macos gets in the way of\n * handling events for key combinations involving Command.\n *\n * @param {Function} onKeyup\n */\nexport default function useCancelableKeyPress (onKeyup, options = {}) {\n  const { singleKeyOnly = false } = options\n  const [, setHeld] = useState([])\n  const clear = useCallback(() => setHeld([]), [setHeld])\n\n  useEffect(() => {\n    function handleKeyDown (event) {\n      setHeld(held => (\n        singleKeyOnly ? [event.code] : [...held, event.code]\n      ))\n    }\n\n    function handleKeyUp (event) {\n      setHeld(held => {\n        if (held.includes(event.code)) {\n          // This is hacky but triggering this within the setState callback\n          // means we don't need to use the state as a dependency of the effect\n          // and triggering onKeyup asynchronously doesn't seem to be a problem\n          // (so far) for handling the event.\n          setTimeout(() => onKeyup(event))\n        }\n\n        return without(held, event.code)\n      })\n    }\n\n    document.body.addEventListener('keydown', handleKeyDown)\n    document.body.addEventListener('keyup', handleKeyUp)\n    document.body.addEventListener('focusout', clear)\n\n    return () => {\n      document.body.removeEventListener('keydown', handleKeyDown)\n      document.body.removeEventListener('keyup', handleKeyUp)\n      document.body.removeEventListener('focusout', clear)\n    }\n  }, [singleKeyOnly, setHeld, onKeyup, clear])\n}\n","import classNames from 'classnames'\nimport fuzzysort from 'fuzzysort'\nimport compact from 'lodash/compact'\nimport map from 'lodash/map'\nimport { useCallback, useContext, useMemo } from 'react'\n\n\nimport ActionButton from '../../Common/ActionButton'\nimport Icon from '../../Common/Icon'\nimport Tip from '../../Common/Tip'\nimport { hydrateTree } from '../../Keyboard/Binding/util'\nimport KeyWrapper from '../../Keyboard/Keys/KeyWrapper'\nimport { SearchContext } from '../../providers'\nimport ResultList from '../../ValuePicker/ResultList'\nimport resultListStyle from '../../ValuePicker/style.module.css'\nimport SearchFilter from '../../ValuePicker/SearchFilter'\nimport { pickerPropTypes } from '../../ValuePicker/pickerPropTypes'\n\nimport { treeToSequence, sequenceToTree } from './helpers'\nimport ModifiersPicker from './ModifiersPicker'\nimport KeycodeBindNode from './KeycodeBindNode'\nimport styles from './styles.module.css'\n\nfunction renderSymbol (result) {\n  const symbol = result?.symbol\n  const icon = result?.faIcon\n\n  if (icon) {\n    return <Icon name={icon} />\n  }\n\n  if (symbol && !result.aliases.includes(symbol)) {\n    return symbol\n  }\n}\n\nfunction renderSearchResult (result) {\n  const [titleResult] = result.search || []\n  const title = titleResult\n    ? <span dangerouslySetInnerHTML={{ __html: fuzzysort.highlight(titleResult) }} />\n    : <span>{result.code}</span>\n\n  const symbol = renderSymbol(result)\n\n  return (\n    <div className={styles.resultItem}>\n      <div className={styles.description}>\n        {title}\n        <p className={resultListStyle.description}>{result.description}</p>\n      </div>\n      {symbol && <div className={styles.symbol}>{symbol}</div>}\n    </div>\n  )\n}\n\nfunction KeycodePicker ({ node, onSelect, onChange, onConfirm, behaviour, inline }) {\n  const context = useContext(SearchContext)\n  const { getSearchTargets } = context\n\n  const codes = useMemo(() => map(treeToSequence(node), 'source'), [node])\n  const keycodeDefinition = useMemo(() => codes.at(-1), [codes])\n\n  const selectedKeycode = useMemo(() => codes.at(-1)?.code, [codes])\n  const selectedModifiers = useMemo(() => map(\n    codes.length === 1 ? [] : codes.slice(0, -1),\n    'code'\n  ), [codes])\n\n  const choices = useMemo(() => {\n    // bit of a hack; we can't use the search picker to select the \"function\"\n    // version of modifier keycodes because they won't end up in the modifiers\n    // list and we aren't allowing for population of their parameters.\n    // TODO: once this picker becomes the \"standard\" the function macros should\n    // not be treated as keycodes.\n    const codes = getSearchTargets('code', behaviour.code)\n    return codes.filter(code => code.params.length === 0)\n  }, [getSearchTargets, behaviour])\n\n  // have to hydrate to get merged glyphs\n  // hardcoding isn't great but it's the keycode picker so maybe '&kp' is reasonable\n  const hydrated = hydrateTree({\n    value: '&kp',\n    params: [{\n      value: selectedKeycode,\n      params: []\n    }]\n  }, context)\n\n  const handleChangeModifiers = useCallback(modifiers => {\n    onChange(sequenceToTree(compact([...modifiers, selectedKeycode])))\n  }, [onChange, selectedKeycode])\n\n  const handleChangeKeycode = useCallback(result => {\n    onChange(sequenceToTree(compact([...selectedModifiers, result?.code])))\n  }, [onChange, selectedModifiers])\n\n  const handleSelectKeycode = useCallback((result, event) => {\n    if (event.type === 'dblclick') {\n      onSelect(sequenceToTree(compact([...selectedModifiers, result?.code])))\n      return\n    }\n\n    handleChangeKeycode(result)\n  }, [onSelect, handleChangeKeycode, selectedModifiers])\n\n  function handleCancel () {\n    onSelect(node)\n  }\n\n  return (\n    <div className={classNames(resultListStyle.dialog, styles.wrapper)}>\n      <div style={{ display: 'flex', gap: '10px' }}>\n        <div>\n          <h3>Keycode</h3>\n          <KeyWrapper className={styles.previewKeycode} selectable={false}>\n            <KeycodeBindNode\n              node={hydrated.params[0]}\n              onSelect={() => {}}\n            />\n          </KeyWrapper>\n        </div>\n        <div>\n          <h3>Modifiers</h3>\n          <ModifiersPicker\n            selected={selectedModifiers}\n            implicit={keycodeDefinition?.modifiers || []}\n            onChange={handleChangeModifiers}\n          />\n        </div>\n      </div>\n      <h3>Available Keycodes</h3>\n      <SearchFilter\n        choices={choices}\n        initialQuery={selectedKeycode}\n        searchKeys={['code', 'symbol']}\n        renderResults={results => results && (\n          <ResultList\n            results={results}\n            onSelect={handleSelectKeycode}\n            renderResult={renderSearchResult}\n          />\n        )}\n      />\n      {!inline && (\n        <>\n          <Tip className={styles.quickCloseTip}>\n            Double-click to select and close the dialog\n          </Tip>\n          <div style={{ marginTop: '10px', textAlign: 'center' }}>\n            <ActionButton disabled={!selectedKeycode} onClick={onConfirm}>Confirm</ActionButton>\n            <ActionButton onClick={handleCancel} secondary>Cancel</ActionButton>\n          </div>\n        </>\n      )}\n    </div>\n  )\n}\n\nKeycodePicker.propTypes = pickerPropTypes\n\nexport default KeycodePicker\n","import { useCallback, useState } from 'react'\n\nimport { pickerPropTypes } from './pickerPropTypes'\n\nfunction focusInput (node) {\n  if (node) {\n    node.focus()\n    node.select()\n  }\n}\n\nexport default function RawValuePicker (props) {\n  const { value: initialValue, param, onSelect } = props\n  const [value, setValue] = useState(initialValue)\n\n  const handleKeyDown = useCallback(event => {\n    if (event.key === 'Enter') {\n      onSelect({ code: value })\n    }\n  }, [value, onSelect])\n\n  const handleKeyPress = useCallback(event => {\n    let value = event.target.value\n\n    if (param.type === 'number') {\n      value = Number(value)\n      if (Number.isNaN(value)) {\n        return\n      }\n    }\n\n    setValue(value)\n  }, [param, setValue])\n\n  return (\n    <input\n      ref={focusInput}\n      type=\"text\"\n      value={value}\n      onChange={handleKeyPress}\n      onKeyDown={handleKeyDown}\n    />\n  )\n}\n\nRawValuePicker.propTypes = pickerPropTypes\n","import { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\n\nimport { selectLayers } from '../Keyboard/Layers/layersSlice'\nimport ResultList from './ResultList'\nimport style from './style.module.css'\nimport { pickerPropTypes } from './pickerPropTypes'\n\nexport default function LayerPicker ({ onSelect }) {\n  const layers = useSelector(selectLayers)\n  const choices = useMemo(() => layers.map((layer, i) => ({\n    code: i,\n    description: layer.name || `Layer ${i}`\n  })), [layers])\n\n  return (\n    <ResultList\n      results={choices}\n      onSelect={onSelect}\n      renderResult={result => (\n        <>\n          {result.code}\n          {result.description && (\n            <p className={style.description}>\n              {result.description}\n            </p>\n          )}\n        </>\n      )}\n    />\n  )\n}\n\nLayerPicker.propTypes = pickerPropTypes\n","import pick from 'lodash/pick'\nimport PropTypes from 'prop-types'\nimport { useMemo } from 'react'\n\nimport DialogBox from '../Common/DialogBox'\nimport Modal from '../Common/Modal'\nimport EnumPicker from './EnumPicker'\nimport { bindNode } from '../Keyboard/Binding/bindPropTypes'\n\nimport GenericPicker from './GenericPicker'\nimport HueSatValPicker from '../EnhancedPickers/RGB/HueSatValPicker'\nimport KeycodePicker from '../EnhancedPickers/Keycode/KeycodePicker'\nimport RawValuePicker from './RawValuePicker'\nimport LayerPicker from './LayerPicker'\nimport styles from './style.module.css'\n\nexport function ValuePicker (props) {\n  const { node, type, onSelect, onChange, onConfirm } = props\n  const pickerProps = pick(props, [\n    'node', 'value', 'prompt', 'param', 'behaviour', 'context', 'searchKey', 'inline'\n  ])\n\n  const PickerComponent = useMemo(() => {\n    // TODO: allow components to register helpers\n    if (type === 'tree' && node.source?.helper === 'hsb-color-picker') return HueSatValPicker\n    if (node.slot.raw) return RawValuePicker\n    // TODO: Shouldn't need to render placeholder\n    if (node.slot.type === 'placeholder') return RawValuePicker\n    if (node.slot.enum) return EnumPicker\n    if (node.slot === 'code') return KeycodePicker\n    if (node.slot === 'layer') return LayerPicker\n    return GenericPicker\n  }, [node, type])\n\n  return (\n    <div className={styles.wrapper}>\n      <PickerComponent\n        {...pickerProps}\n        param={node.slot}\n        onSelect={onSelect}\n        onChange={onChange}\n        onConfirm={onConfirm}\n      />\n    </div>\n  )\n}\n\nValuePicker.propTypes = {\n  type: PropTypes.string.isRequired,\n  node: bindNode.isRequired,\n  behaviour: PropTypes.object.isRequired,\n  searchKey: PropTypes.string.isRequired,\n  searchThreshold: PropTypes.number,\n  inline: PropTypes.bool,\n  onCancel: PropTypes.func,\n  onUpdate: PropTypes.func,\n  onSelect: PropTypes.func.isRequired\n}\n\nValuePicker.defaultProps = {\n  type: 'value',\n  value: '',\n  freeForm: false,\n  inline: false,\n  searchThreshold: 10\n}\n\nexport default function ValuePickerDialog (props) {\n  const { prompt, onCancel, ...rest } = props\n\n  return (\n    <Modal onDismiss={onCancel}>\n      <DialogBox dismissText={null} classes={[styles.dialogWrapper]}>\n        <h2>{prompt}</h2>\n        <ValuePicker {...rest} />\n        {/* <div style={{ marginTop: '10px', textAlign: 'center' }}>\n          <ActionButton onClick={handleConfirm}>Confirm</ActionButton>\n          <ActionButton onClick={onCancel} secondary>Cancel</ActionButton>\n        </div> */}\n      </DialogBox>\n    </Modal>\n  )\n}\n\nValuePickerDialog.propTypes = {\n  type: PropTypes.string.isRequired,\n  node: bindNode.isRequired,\n  behaviour: PropTypes.object.isRequired,\n  prompt: PropTypes.string.isRequired,\n  searchKey: PropTypes.string.isRequired,\n  searchThreshold: PropTypes.number,\n  onCancel: PropTypes.func.isRequired,\n  onChange: PropTypes.func,\n  onSelect: PropTypes.func.isRequired\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, \"button.pi2Ig8c3Fdh4H2Jpxdo7 {\\n  display: inline-block;\\n  cursor: pointer;\\n  background-color: var(--hover-selection);\\n  color: white;\\n\\n  font-size: 16px;\\n  border: none;\\n  border-radius: 5px;\\n  padding: 0 5px;\\n\\n  height: 30px;\\n  line-height: 30px;\\n  vertical-align: middle;\\n}\\n\\nbutton.Ctpu4E2dZYJ6g8CUGFOF {\\n  color: var(--fg);\\n  background-color: transparent;\\n}\\n\\nbutton.pi2Ig8c3Fdh4H2Jpxdo7[disabled] {\\n  filter: saturate(20%);\\n  opacity: .5;\\n  cursor: not-allowed;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/action-button.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,qBAAqB;EACrB,eAAe;EACf,wCAAwC;EACxC,YAAY;;EAEZ,eAAe;EACf,YAAY;EACZ,kBAAkB;EAClB,cAAc;;EAEd,YAAY;EACZ,iBAAiB;EACjB,sBAAsB;AACxB;;AAEA;EACE,gBAAgB;EAChB,6BAA6B;AAC/B;;AAEA;EACE,qBAAqB;EACrB,WAAW;EACX,mBAAmB;AACrB\",\"sourcesContent\":[\"button.action {\\n  display: inline-block;\\n  cursor: pointer;\\n  background-color: var(--hover-selection);\\n  color: white;\\n\\n  font-size: 16px;\\n  border: none;\\n  border-radius: 5px;\\n  padding: 0 5px;\\n\\n  height: 30px;\\n  line-height: 30px;\\n  vertical-align: middle;\\n}\\n\\nbutton.secondary {\\n  color: var(--fg);\\n  background-color: transparent;\\n}\\n\\nbutton.action[disabled] {\\n  filter: saturate(20%);\\n  opacity: .5;\\n  cursor: not-allowed;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"action\": \"pi2Ig8c3Fdh4H2Jpxdo7\",\n\t\"secondary\": \"Ctpu4E2dZYJ6g8CUGFOF\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".sq9i7hQeTeeKuarmO8oA {\\n  display: inline-block;\\n  font-size: 70%;\\n  background: rgba(0, 0, 0, 0.5);\\n  color: white;\\n  padding: 4px;\\n  border-radius: 4px;\\n  width: max-content;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Common/tip.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,qBAAqB;EACrB,cAAc;EACd,8BAA8B;EAC9B,YAAY;EACZ,YAAY;EACZ,kBAAkB;EAClB,kBAAkB;AACpB\",\"sourcesContent\":[\".tip {\\n  display: inline-block;\\n  font-size: 70%;\\n  background: rgba(0, 0, 0, 0.5);\\n  color: white;\\n  padding: 4px;\\n  border-radius: 4px;\\n  width: max-content;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tip\": \"sq9i7hQeTeeKuarmO8oA\"\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, \".AmikJd3HeM7NGUa8io2A {\\n  width: 350px;\\n}\\n\\n.AmikJd3HeM7NGUa8io2A h3:first-child {\\n  margin-top: 0px;\\n}\\n\\n.xCOOsvxL5qQ3kR8ri91A {\\n  pointer-events: none;\\n  box-shadow: 0 4px 10px 0px rgba(0, 0, 0, 0.5);\\n}\\n\\n.Ox9WHfAMFuthXo6ZOJoI {\\n  padding: 2px 0;\\n}\\n\\n.u4uW9U2E0DfbUM9vP9pf {\\n  text-align: center;\\n  padding: 0;\\n  margin: 0;\\n}\\n\\n.u4uW9U2E0DfbUM9vP9pf li {\\n  display: inline-block;\\n  font-family: monospace, monospace;\\n  font-size: 70%;\\n  margin: 2px;\\n  border-radius: 2px;\\n\\n  background-color: rgba(0, 0, 0, .5);\\n  opacity: 0.5;\\n  color: white;\\n}\\n.u4uW9U2E0DfbUM9vP9pf li label {\\n  display: inline-block;\\n  padding: 4px;\\n}\\n\\n.u4uW9U2E0DfbUM9vP9pf li.YcHSun3PLo8dCb9qIZtc {\\n  opacity: 1;\\n  background-color: var(--selection);\\n  color: white;\\n}\\n\\n.u4uW9U2E0DfbUM9vP9pf li.Ix6wQt3EBFUH2PUcsqgm {\\n  background-color: var(--error-highlight);\\n  filter: saturate(50%);\\n}\\n\\n.u4uW9U2E0DfbUM9vP9pf li:not(.Ix6wQt3EBFUH2PUcsqgm):hover {\\n  opacity: 1;\\n  background-color: var(--hover-selection);\\n}\\n\\n.u4uW9U2E0DfbUM9vP9pf li.Ix6wQt3EBFUH2PUcsqgm:hover * {\\n  cursor: not-allowed;\\n}\\n\\n.u4uW9U2E0DfbUM9vP9pf li input[type=\\\"checkbox\\\"] {\\n  margin: 0;\\n  vertical-align: text-bottom;\\n}\\n\\n.d3hMEDpEkH8H7YLG_NjI {\\n  width: 100% !important;\\n  box-sizing: border-box;\\n  text-align: center;\\n}\\n\\n.gFHbtpz6TuduOVYLXwHu {\\n  display: flex;\\n  flex-direction: row;\\n  align-items: center;\\n}\\n\\n.AfAg5j2RJEcA0Zh3z7mX {\\n  flex-grow: 1;\\n}\\n\\n.YeOANHLbze2W1EGYOFiI {\\n  font-size: 120%;\\n  padding: 6px 10px;\\n  color: white !important;\\n  background-color: rgba(30, 30, 30, 0.4);\\n  border-radius: 5px;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/EnhancedPickers/Keycode/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,YAAY;AACd;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,oBAAoB;EACpB,6CAA6C;AAC/C;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,SAAS;AACX;;AAEA;EACE,qBAAqB;EACrB,iCAAiC;EACjC,cAAc;EACd,WAAW;EACX,kBAAkB;;EAElB,mCAAmC;EACnC,YAAY;EACZ,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,YAAY;AACd;;AAEA;EACE,UAAU;EACV,kCAAkC;EAClC,YAAY;AACd;;AAEA;EACE,wCAAwC;EACxC,qBAAqB;AACvB;;AAEA;EACE,UAAU;EACV,wCAAwC;AAC1C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,SAAS;EACT,2BAA2B;AAC7B;;AAEA;EACE,sBAAsB;EACtB,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,uBAAuB;EACvB,uCAAuC;EACvC,kBAAkB;AACpB\",\"sourcesContent\":[\".wrapper {\\n  width: 350px;\\n}\\n\\n.wrapper h3:first-child {\\n  margin-top: 0px;\\n}\\n\\n.previewKeycode {\\n  pointer-events: none;\\n  box-shadow: 0 4px 10px 0px rgba(0, 0, 0, 0.5);\\n}\\n\\n.allModifiers {\\n  padding: 2px 0;\\n}\\n\\n.modifiers {\\n  text-align: center;\\n  padding: 0;\\n  margin: 0;\\n}\\n\\n.modifiers li {\\n  display: inline-block;\\n  font-family: monospace, monospace;\\n  font-size: 70%;\\n  margin: 2px;\\n  border-radius: 2px;\\n\\n  background-color: rgba(0, 0, 0, .5);\\n  opacity: 0.5;\\n  color: white;\\n}\\n.modifiers li label {\\n  display: inline-block;\\n  padding: 4px;\\n}\\n\\n.modifiers li.selected {\\n  opacity: 1;\\n  background-color: var(--selection);\\n  color: white;\\n}\\n\\n.modifiers li.implicit {\\n  background-color: var(--error-highlight);\\n  filter: saturate(50%);\\n}\\n\\n.modifiers li:not(.implicit):hover {\\n  opacity: 1;\\n  background-color: var(--hover-selection);\\n}\\n\\n.modifiers li.implicit:hover * {\\n  cursor: not-allowed;\\n}\\n\\n.modifiers li input[type=\\\"checkbox\\\"] {\\n  margin: 0;\\n  vertical-align: text-bottom;\\n}\\n\\n.quickCloseTip {\\n  width: 100% !important;\\n  box-sizing: border-box;\\n  text-align: center;\\n}\\n\\n.resultItem {\\n  display: flex;\\n  flex-direction: row;\\n  align-items: center;\\n}\\n\\n.description {\\n  flex-grow: 1;\\n}\\n\\n.symbol {\\n  font-size: 120%;\\n  padding: 6px 10px;\\n  color: white !important;\\n  background-color: rgba(30, 30, 30, 0.4);\\n  border-radius: 5px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"wrapper\": \"AmikJd3HeM7NGUa8io2A\",\n\t\"previewKeycode\": \"xCOOsvxL5qQ3kR8ri91A\",\n\t\"allModifiers\": \"Ox9WHfAMFuthXo6ZOJoI\",\n\t\"modifiers\": \"u4uW9U2E0DfbUM9vP9pf\",\n\t\"selected\": \"YcHSun3PLo8dCb9qIZtc\",\n\t\"implicit\": \"Ix6wQt3EBFUH2PUcsqgm\",\n\t\"quickCloseTip\": \"d3hMEDpEkH8H7YLG_NjI\",\n\t\"resultItem\": \"gFHbtpz6TuduOVYLXwHu\",\n\t\"description\": \"AfAg5j2RJEcA0Zh3z7mX\",\n\t\"symbol\": \"YeOANHLbze2W1EGYOFiI\"\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\";\nimport ___CSS_LOADER_ICSS_IMPORT_0___ from \"-!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!../../Keyboard/Keys/styles.module.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_ICSS_IMPORT_0___, \"\", true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* @import \\\"../../Keyboard/Keys/styles.module.css\\\"; */\\n\\n.\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"key\"] + \" .ElYzpTlttqVbs6KKy9ob {\\n  align-self: center;\\n}\\n.\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"extracted\"] + \" .ElYzpTlttqVbs6KKy9ob {\\n  display: inline-block;\\n  border-bottom: .15em dotted var(--key-color-base);\\n  box-sizing: border-box;\\n  padding: 6px .25em;\\n}\\n\\n:hover .ElYzpTlttqVbs6KKy9ob:hover {\\n  cursor: pointer;\\n  background-color: var(--hover-selection);\\n  border-radius: 0;\\n  border-radius: 3px;\\n}\\n\\n.rdE_HhSUTcg2dK35N2WA {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  height: 1em;\\n  aspect-ratio: 1;\\n  border-radius: 2px;\\n}\\n\\n.\" + ___CSS_LOADER_ICSS_IMPORT_0___.locals[\"extracted\"] + \" .rdE_HhSUTcg2dK35N2WA {\\n  display: inline-block;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/EnhancedPickers/RGB/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA,qDAAqD;;AAMrD;EACE,kBAAkB;AACpB;AACA;EACE,qBAAqB;EACrB,iDAAiD;EACjD,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,wCAAwC;EACxC,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,eAAe;EACf,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;AACvB\",\"sourcesContent\":[\"/* @import \\\"../../Keyboard/Keys/styles.module.css\\\"; */\\n:import(\\\"../../Keyboard/Keys/styles.module.css\\\") {\\n  key: key;\\n  extracted: extracted;\\n}\\n\\n.key .colorIconWrapper {\\n  align-self: center;\\n}\\n.extracted .colorIconWrapper {\\n  display: inline-block;\\n  border-bottom: .15em dotted var(--key-color-base);\\n  box-sizing: border-box;\\n  padding: 6px .25em;\\n}\\n\\n:hover .colorIconWrapper:hover {\\n  cursor: pointer;\\n  background-color: var(--hover-selection);\\n  border-radius: 0;\\n  border-radius: 3px;\\n}\\n\\n.colorIcon {\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  height: 1em;\\n  aspect-ratio: 1;\\n  border-radius: 2px;\\n}\\n\\n.extracted .colorIcon {\\n  display: inline-block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"colorIconWrapper\": \"ElYzpTlttqVbs6KKy9ob\",\n\t\"colorIcon\": \"rdE_HhSUTcg2dK35N2WA\"\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, \".CoLZlKR1WcMrFd9XhDMC {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\talign-items: center;\\n\\n\\tfont-family: Quicksand, avenir, sans-serif;\\n\\n\\t/* TODO: remove this once I have a wrapper with size defaults */\\n\\twidth: 65px;\\n\\theight: 65px;\\n\\n\\tfont-size: 110%;\\n\\tborder-radius: 5px;\\n}\\n\\n.CoLZlKR1WcMrFd9XhDMC.MZMfZSmJbwqqfp28UUOi { cursor: pointer; }\\n.CoLZlKR1WcMrFd9XhDMC.MZMfZSmJbwqqfp28UUOi * {\\n\\tpointer-events: none;\\n\\tborder: none;\\n\\ttext-decoration: none !important;\\n}\\n\\n\\n.CT4uGhwl8sY0LwT3p39g:not(:hover) .UNzQquWsoIanOpIN0Q9L,\\n.OsA2qRpHoDPcN93o_TUX:not(:hover) .DejZXCvvhJILPbs9Q8ht.UNzQquWsoIanOpIN0Q9L {\\n\\ttext-decoration: underline wavy var(--error-highlight);\\n\\ttext-underline-offset: 4px;\\n\\tcolor: var(--error-highlight);\\n\\tfont-weight: bold;\\n}\\n\\n.Y5EVt8b0BaXNd9uLxhfh {\\n\\tposition: absolute;\\n\\tleft: 2px;\\n\\tbottom: 2px;\\n\\tfont-size: 80%;\\n\\n\\tanimation: sYr3l9y03JxO_2AP73jr ease-in-out 1s alternate-reverse;\\n}\\n.Y5EVt8b0BaXNd9uLxhfh:hover {\\n\\tcolor: rgb(255, 225, 0);\\n}\\n\\n@keyframes sYr3l9y03JxO_2AP73jr {\\n\\t0% { color: var(--key-color-base) }\\n\\t100% { color: var(--key-color-extreme) }\\n}\\n\\n.CoLZlKR1WcMrFd9XhDMC:hover .DejZXCvvhJILPbs9Q8ht,\\n.CoLZlKR1WcMrFd9XhDMC:hover .DejZXCvvhJILPbs9Q8ht :before,\\n.CoLZlKR1WcMrFd9XhDMC:hover .GliE4Ybwli9X6TNTjD1_ {\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n\\ttext-decoration: underline dotted white 2px;\\n\\ttext-underline-offset: 4px;\\n}\\n\\n\\n.huQDP3GbTLThbVIP8wFp {\\n\\tcolor: var(--key-color-base);\\n\\tbackground-color: var(--key-bg-base);\\n}\\n\\n.PpMmKpJfEi37Ldw7AeBT {\\n\\tborder-radius: 100%;\\n\\tbackground-color: var(--key-bg-base);\\n\\tcolor: var(--key-color-base);\\n}\\n\\n._F1Vep3btfY3Rl4VJaUQ {\\n\\twidth: 80px;\\n\\theight: 80px;\\n\\tborder-radius: 100%;\\n\\tbackground-color: var(--key-bg-base);\\n\\tcolor: var(--key-color-base);\\n}\\n\\n._F1Vep3btfY3Rl4VJaUQ .GliE4Ybwli9X6TNTjD1_ {\\n\\tleft: 50%;\\n\\ttransform: translateX(-50%);\\n}\\n._F1Vep3btfY3Rl4VJaUQ .ApHDJFJGYUaGTgzMeIKZ[data-is-root=\\\"true\\\"] {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n}\\n._F1Vep3btfY3Rl4VJaUQ .ApHDJFJGYUaGTgzMeIKZ[data-is-root=\\\"true\\\"] .mLz637Atn0jZXey6Rx4v:first-child::before {\\n\\tcontent: \\\"⟳\\\";\\n\\tfont-size: 140%;\\n\\tfont-weight: bold;\\n}\\n._F1Vep3btfY3Rl4VJaUQ .ApHDJFJGYUaGTgzMeIKZ[data-is-root=\\\"true\\\"] .mLz637Atn0jZXey6Rx4v:nth-child(2)::before {\\n\\tcontent: \\\"⟲\\\";\\n\\tfont-size: 140%;\\n\\tfont-weight: bold;\\n}\\n._F1Vep3btfY3Rl4VJaUQ:hover .ApHDJFJGYUaGTgzMeIKZ[data-is-root=\\\"true\\\"] .mLz637Atn0jZXey6Rx4v:first-child::before,\\n._F1Vep3btfY3Rl4VJaUQ:hover .ApHDJFJGYUaGTgzMeIKZ[data-is-root=\\\"true\\\"] .mLz637Atn0jZXey6Rx4v:nth-child(2)::before {\\n\\tcolor: white;\\n}\\n\\n\\n.k2EIh8YlFvp9sBuklSxx {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 50%;\\n\\ttransform: translateX(-50%);\\n\\tfont-size: 50%;\\n}\\n\\n.CoLZlKR1WcMrFd9XhDMC:hover, .PpMmKpJfEi37Ldw7AeBT:hover {\\n\\tbackground-color: var(--hover-selection);\\n\\ttransition: 200ms;\\n\\tz-index: 1;\\n}\\n.CoLZlKR1WcMrFd9XhDMC:hover .DejZXCvvhJILPbs9Q8ht, .CoLZlKR1WcMrFd9XhDMC:hover .GliE4Ybwli9X6TNTjD1_ {\\n\\tcolor: var(--key-color-hover);\\n}\\n.CoLZlKR1WcMrFd9XhDMC > .DejZXCvvhJILPbs9Q8ht {\\n\\tpadding: 5px;\\n}\\n\\n.mLz637Atn0jZXey6Rx4v {\\n\\tdisplay: inline-flex;\\n}\\n\\n[data-simple=\\\"true\\\"] { font-size: 140%; }\\n[data-long=\\\"true\\\"] { font-size: 60%; }\\n\\n.ApHDJFJGYUaGTgzMeIKZ:not([data-is-root=\\\"true\\\"])::before { content: '('; opacity: 0.4; font-weight: bold; margin: 2px; }\\n.ApHDJFJGYUaGTgzMeIKZ:not([data-is-root=\\\"true\\\"])::after { content: ')'; opacity: 0.4; font-weight: bold; margin: 2px; }\\n.ApHDJFJGYUaGTgzMeIKZ:not([data-is-root=\\\"true\\\"]) .mLz637Atn0jZXey6Rx4v:not(:last-child)::after { content: ','; }\\n\\n.DejZXCvvhJILPbs9Q8ht {\\n\\tcursor: default;\\n\\tpadding: 0px 4px;\\n\\tmargin-left: -2px;\\n\\tmargin-right: -2px;\\n}\\n\\n.CT4uGhwl8sY0LwT3p39g .DejZXCvvhJILPbs9Q8ht {\\n\\tcursor: pointer;\\n\\tdisplay: inline-block;\\n\\tbox-sizing: content-box;\\n\\tmin-width: 0.5em;\\n\\ttext-align: center;\\n\\tborder-radius: 4px;\\n}\\n.CoLZlKR1WcMrFd9XhDMC .DejZXCvvhJILPbs9Q8ht:hover {\\n\\tbackground-color: white !important;\\n\\tcolor: var(--hover-selection) !important;\\n\\tborder-radius: 4px !important;\\n}\\n\\n.DejZXCvvhJILPbs9Q8ht * {\\n\\tpointer-events: none;\\n}\\n\\n.OsA2qRpHoDPcN93o_TUX {\\n\\t/* display: inline-block; */\\n\\tmargin: 0 5px;\\n\\tfont-family: Quicksand, avenir, sans-serif;\\n\\tfont-size: 110%;\\n}\\n.OsA2qRpHoDPcN93o_TUX .mLz637Atn0jZXey6Rx4v {\\n\\talign-items: center;\\n\\tgap: 6px;\\n}\\n.OsA2qRpHoDPcN93o_TUX .DejZXCvvhJILPbs9Q8ht {\\n\\talign-items: center;\\n\\tpadding: 6px 12px;\\n\\tborder-radius: 5px;\\n\\tcolor: var(--key-color-base);\\n\\tborder-bottom: .15em dotted var(--key-color-base);\\n\\tborder-radius: 0;\\n}\\n\\n.OsA2qRpHoDPcN93o_TUX .DejZXCvvhJILPbs9Q8ht:hover {\\n\\tbackground-color: var(--hover-selection);\\n\\tborder-radius: 5px;\\n\\tcolor: white;\\n\\tcursor: pointer;\\n}\\n\\n.DejZXCvvhJILPbs9Q8ht code+*::before {\\n\\tcontent: \\\"|\\\";\\n\\tbackground-color: transparent;\\n\\tmargin: auto 5px;\\n}\\n\\n.GliE4Ybwli9X6TNTjD1_ {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  font-size: 10px;\\n  padding: 2px;\\n  opacity: 0.8;\\n}\\n\\n.GliE4Ybwli9X6TNTjD1_:hover {\\n  cursor: pointer;\\n  color: var(--hover-selection) !important;\\n  background-color: var(--key-bg-hover);\\n  border-radius: 5px 0;\\n  opacity: 1;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/Keyboard/Keys/styles.module.css\"],\"names\":[],\"mappings\":\"AAAA;CACC,kBAAkB;CAClB,aAAa;CACb,uBAAuB;CACvB,mBAAmB;;CAEnB,0CAA0C;;CAE1C,+DAA+D;CAC/D,WAAW;CACX,YAAY;;CAEZ,eAAe;CACf,kBAAkB;AACnB;;AAEA,6CAAe,eAAe,EAAE;AAChC;CACC,oBAAoB;CACpB,YAAY;CACZ,gCAAgC;AACjC;;;AAGA;;CAEC,sDAAsD;CACtD,0BAA0B;CAC1B,6BAA6B;CAC7B,iBAAiB;AAClB;;AAEA;CACC,kBAAkB;CAClB,SAAS;CACT,WAAW;CACX,cAAc;;CAEd,gEAAiD;AAClD;AACA;CACC,uBAAuB;AACxB;;AAEA;CACC,KAAK,6BAA6B;CAClC,OAAO,gCAAgC;AACxC;;AAEA;;;CAGC,4BAA4B;CAC5B,6BAA6B;CAC7B,2CAA2C;CAC3C,0BAA0B;AAC3B;;;AAGA;CACC,4BAA4B;CAC5B,oCAAoC;AACrC;;AAEA;CACC,mBAAmB;CACnB,oCAAoC;CACpC,4BAA4B;AAC7B;;AAEA;CACC,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,oCAAoC;CACpC,4BAA4B;AAC7B;;AAEA;CACC,SAAS;CACT,2BAA2B;AAC5B;AACA;CACC,aAAa;CACb,sBAAsB;AACvB;AACA;CACC,YAAY;CACZ,eAAe;CACf,iBAAiB;AAClB;AACA;CACC,YAAY;CACZ,eAAe;CACf,iBAAiB;AAClB;AACA;;CAEC,YAAY;AACb;;;AAGA;CACC,kBAAkB;CAClB,MAAM;CACN,SAAS;CACT,2BAA2B;CAC3B,cAAc;AACf;;AAEA;CACC,wCAAwC;CACxC,iBAAiB;CACjB,UAAU;AACX;AACA;CACC,6BAA6B;AAC9B;AACA;CACC,YAAY;AACb;;AAEA;CACC,oBAAoB;AACrB;;AAEA,uBAAuB,eAAe,EAAE;AACxC,qBAAqB,cAAc,EAAE;;AAErC,2DAA6C,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE;AACzG,0DAA4C,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE;AACxG,iGAAoE,YAAY,EAAE;;AAElF;CACC,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CACjB,kBAAkB;AACnB;;AAEA;CACC,eAAe;CACf,qBAAqB;CACrB,uBAAuB;CACvB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;AACnB;AACA;CACC,kCAAkC;CAClC,wCAAwC;CACxC,6BAA6B;AAC9B;;AAEA;CACC,oBAAoB;AACrB;;AAEA;CACC,2BAA2B;CAC3B,aAAa;CACb,0CAA0C;CAC1C,eAAe;AAChB;AACA;CACC,mBAAmB;CACnB,QAAQ;AACT;AACA;CACC,mBAAmB;CACnB,iBAAiB;CACjB,kBAAkB;CAClB,4BAA4B;CAC5B,iDAAiD;CACjD,gBAAgB;AACjB;;AAEA;CACC,wCAAwC;CACxC,kBAAkB;CAClB,YAAY;CACZ,eAAe;AAChB;;AAEA;CACC,YAAY;CACZ,6BAA6B;CAC7B,gBAAgB;AACjB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,eAAe;EACf,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,eAAe;EACf,wCAAwC;EACxC,qCAAqC;EACrC,oBAAoB;EACpB,UAAU;AACZ\",\"sourcesContent\":[\".key {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\talign-items: center;\\n\\n\\tfont-family: Quicksand, avenir, sans-serif;\\n\\n\\t/* TODO: remove this once I have a wrapper with size defaults */\\n\\twidth: 65px;\\n\\theight: 65px;\\n\\n\\tfont-size: 110%;\\n\\tborder-radius: 5px;\\n}\\n\\n.key.unified { cursor: pointer; }\\n.key.unified * {\\n\\tpointer-events: none;\\n\\tborder: none;\\n\\ttext-decoration: none !important;\\n}\\n\\n\\n.selectable:not(:hover) .missingValue,\\n.extracted:not(:hover) .code.missingValue {\\n\\ttext-decoration: underline wavy var(--error-highlight);\\n\\ttext-underline-offset: 4px;\\n\\tcolor: var(--error-highlight);\\n\\tfont-weight: bold;\\n}\\n\\n.missing {\\n\\tposition: absolute;\\n\\tleft: 2px;\\n\\tbottom: 2px;\\n\\tfont-size: 80%;\\n\\n\\tanimation: pulse ease-in-out 1s alternate-reverse;\\n}\\n.missing:hover {\\n\\tcolor: rgb(255, 225, 0);\\n}\\n\\n@keyframes pulse {\\n\\t0% { color: var(--key-color-base) }\\n\\t100% { color: var(--key-color-extreme) }\\n}\\n\\n.key:hover .code,\\n.key:hover .code :before,\\n.key:hover .behaviour-binding {\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n\\ttext-decoration: underline dotted white 2px;\\n\\ttext-underline-offset: 4px;\\n}\\n\\n\\n.keyDefaultTheme {\\n\\tcolor: var(--key-color-base);\\n\\tbackground-color: var(--key-bg-base);\\n}\\n\\n.encoder {\\n\\tborder-radius: 100%;\\n\\tbackground-color: var(--key-bg-base);\\n\\tcolor: var(--key-color-base);\\n}\\n\\n.encoder2 {\\n\\twidth: 80px;\\n\\theight: 80px;\\n\\tborder-radius: 100%;\\n\\tbackground-color: var(--key-bg-base);\\n\\tcolor: var(--key-color-base);\\n}\\n\\n.encoder2 .behaviour-binding {\\n\\tleft: 50%;\\n\\ttransform: translateX(-50%);\\n}\\n.encoder2 .params[data-is-root=\\\"true\\\"] {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n}\\n.encoder2 .params[data-is-root=\\\"true\\\"] .param:first-child::before {\\n\\tcontent: \\\"⟳\\\";\\n\\tfont-size: 140%;\\n\\tfont-weight: bold;\\n}\\n.encoder2 .params[data-is-root=\\\"true\\\"] .param:nth-child(2)::before {\\n\\tcontent: \\\"⟲\\\";\\n\\tfont-size: 140%;\\n\\tfont-weight: bold;\\n}\\n.encoder2:hover .params[data-is-root=\\\"true\\\"] .param:first-child::before,\\n.encoder2:hover .params[data-is-root=\\\"true\\\"] .param:nth-child(2)::before {\\n\\tcolor: white;\\n}\\n\\n\\n.encoderDirection {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 50%;\\n\\ttransform: translateX(-50%);\\n\\tfont-size: 50%;\\n}\\n\\n.key:hover, .encoder:hover {\\n\\tbackground-color: var(--hover-selection);\\n\\ttransition: 200ms;\\n\\tz-index: 1;\\n}\\n.key:hover .code, .key:hover .behaviour-binding {\\n\\tcolor: var(--key-color-hover);\\n}\\n.key > .code {\\n\\tpadding: 5px;\\n}\\n\\n.param {\\n\\tdisplay: inline-flex;\\n}\\n\\n[data-simple=\\\"true\\\"] { font-size: 140%; }\\n[data-long=\\\"true\\\"] { font-size: 60%; }\\n\\n.params:not([data-is-root=\\\"true\\\"])::before { content: '('; opacity: 0.4; font-weight: bold; margin: 2px; }\\n.params:not([data-is-root=\\\"true\\\"])::after { content: ')'; opacity: 0.4; font-weight: bold; margin: 2px; }\\n.params:not([data-is-root=\\\"true\\\"]) .param:not(:last-child)::after { content: ','; }\\n\\n.code {\\n\\tcursor: default;\\n\\tpadding: 0px 4px;\\n\\tmargin-left: -2px;\\n\\tmargin-right: -2px;\\n}\\n\\n.selectable .code {\\n\\tcursor: pointer;\\n\\tdisplay: inline-block;\\n\\tbox-sizing: content-box;\\n\\tmin-width: 0.5em;\\n\\ttext-align: center;\\n\\tborder-radius: 4px;\\n}\\n.key .code:hover {\\n\\tbackground-color: white !important;\\n\\tcolor: var(--hover-selection) !important;\\n\\tborder-radius: 4px !important;\\n}\\n\\n.code * {\\n\\tpointer-events: none;\\n}\\n\\n.extracted {\\n\\t/* display: inline-block; */\\n\\tmargin: 0 5px;\\n\\tfont-family: Quicksand, avenir, sans-serif;\\n\\tfont-size: 110%;\\n}\\n.extracted .param {\\n\\talign-items: center;\\n\\tgap: 6px;\\n}\\n.extracted .code {\\n\\talign-items: center;\\n\\tpadding: 6px 12px;\\n\\tborder-radius: 5px;\\n\\tcolor: var(--key-color-base);\\n\\tborder-bottom: .15em dotted var(--key-color-base);\\n\\tborder-radius: 0;\\n}\\n\\n.extracted .code:hover {\\n\\tbackground-color: var(--hover-selection);\\n\\tborder-radius: 5px;\\n\\tcolor: white;\\n\\tcursor: pointer;\\n}\\n\\n.code code+*::before {\\n\\tcontent: \\\"|\\\";\\n\\tbackground-color: transparent;\\n\\tmargin: auto 5px;\\n}\\n\\n.behaviour-binding {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  font-size: 10px;\\n  padding: 2px;\\n  opacity: 0.8;\\n}\\n\\n.behaviour-binding:hover {\\n  cursor: pointer;\\n  color: var(--hover-selection) !important;\\n  background-color: var(--key-bg-hover);\\n  border-radius: 5px 0;\\n  opacity: 1;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"key\": \"CoLZlKR1WcMrFd9XhDMC\",\n\t\"unified\": \"MZMfZSmJbwqqfp28UUOi\",\n\t\"selectable\": \"CT4uGhwl8sY0LwT3p39g\",\n\t\"missingValue\": \"UNzQquWsoIanOpIN0Q9L\",\n\t\"extracted\": \"OsA2qRpHoDPcN93o_TUX\",\n\t\"code\": \"DejZXCvvhJILPbs9Q8ht\",\n\t\"missing\": \"Y5EVt8b0BaXNd9uLxhfh\",\n\t\"pulse\": \"sYr3l9y03JxO_2AP73jr\",\n\t\"behaviour-binding\": \"GliE4Ybwli9X6TNTjD1_\",\n\t\"keyDefaultTheme\": \"huQDP3GbTLThbVIP8wFp\",\n\t\"encoder\": \"PpMmKpJfEi37Ldw7AeBT\",\n\t\"encoder2\": \"_F1Vep3btfY3Rl4VJaUQ\",\n\t\"params\": \"ApHDJFJGYUaGTgzMeIKZ\",\n\t\"param\": \"mLz637Atn0jZXey6Rx4v\",\n\t\"encoderDirection\": \"k2EIh8YlFvp9sBuklSxx\"\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, \".sP2kDRoTZElZUTNHq033 {\\n\\twidth: 300px;\\n\\tbackground-color: var(--dialog-bg);\\n}\\n\\n.yaxqlR_GEWJ1lBISL3_N {\\n  min-width: 300px;\\n\\tpadding: 15px\\n}\\n.lPSkq707ZDxmzbGw5Qqy input[type=\\\"text\\\"] {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 30px;\\n\\tline-height: 30px;\\n\\n\\tfont-size: 120%;\\n\\tmargin: 0;\\n\\tpadding: 4px;\\n\\tborder: none;\\n\\tborder-radius: 4px;\\n  box-sizing: border-box;\\n}\\nul.inAS9Qunkf3g5K3xz6o6 {\\n\\tposition: relative;\\n\\tfont-family: monospace;\\n\\tlist-style-position: inside;\\n\\tlist-style-type: none;\\n\\tmax-height: 300px;\\n\\toverflow: scroll;\\n\\tpadding: 4px;\\n  margin: 4px 0;\\n\\tbackground: rgba(0, 0, 0, 0.75);\\n\\tborder-radius: 4px;\\n}\\n.inAS9Qunkf3g5K3xz6o6 li {\\n\\tcursor: pointer;\\n\\tcolor: white;\\n\\tpadding: 5px;\\n}\\n.inAS9Qunkf3g5K3xz6o6 li:hover, .inAS9Qunkf3g5K3xz6o6 li.BL7Cxrn_efblQXY3W1Sw {\\n\\tbackground: white;\\n\\tcolor: black;\\n}\\n.inAS9Qunkf3g5K3xz6o6 li b { color: dodgerblue; }\\n.inAS9Qunkf3g5K3xz6o6 li .uld0XaeoQaQJJwp0LT0X {\\n\\tfont-style: italic;\\n\\tfont-size: 90%;\\n\\tmargin: 0;\\n\\tcolor: gray;\\n}\\n\\n.pqiZQublKXvmnT_ESDxQ {\\n  font-size: 10px;\\n}\\n\\n.pqiZQublKXvmnT_ESDxQ a {\\n  color: var(--selection);\\n  border-bottom: 1px dotted var(--selection);\\n  cursor: pointer;\\n}\\n\\n.ECUs4g2j1rekP4xxgQDr {\\n  position: relative;\\n}\\n.lPSkq707ZDxmzbGw5Qqy .ECUs4g2j1rekP4xxgQDr input {\\n  padding-left: 30px;\\n}\\n\\n.xDUAgQZeBp0TZSOqCwHm {\\n  position: absolute;\\n\\ttop: 50%;\\n\\tleft: 10px;\\n\\ttransform: translateY(-50%);\\n\\tpointer-events: none;\\n}\\n.eY5zRl49sESLjXmizMEP {\\n  position: absolute;\\n\\ttop: 50%;\\n\\tright: 10px;\\n\\ttransform: translateY(-50%);\\n\\tcursor: pointer;\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/ValuePicker/style.module.css\"],\"names\":[],\"mappings\":\"AAAA;CACC,YAAY;CACZ,kCAAkC;AACnC;;AAEA;EACE,gBAAgB;CACjB;AACD;AACA;CACC,cAAc;CACd,WAAW;CACX,YAAY;CACZ,iBAAiB;;CAEjB,eAAe;CACf,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,kBAAkB;EACjB,sBAAsB;AACxB;AACA;CACC,kBAAkB;CAClB,sBAAsB;CACtB,2BAA2B;CAC3B,qBAAqB;CACrB,iBAAiB;CACjB,gBAAgB;CAChB,YAAY;EACX,aAAa;CACd,+BAA+B;CAC/B,kBAAkB;AACnB;AACA;CACC,eAAe;CACf,YAAY;CACZ,YAAY;AACb;AACA;CACC,iBAAiB;CACjB,YAAY;AACb;AACA,6BAAgB,iBAAiB,EAAE;AACnC;CACC,kBAAkB;CAClB,cAAc;CACd,SAAS;CACT,WAAW;AACZ;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,uBAAuB;EACvB,0CAA0C;EAC1C,eAAe;AACjB;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;CACnB,QAAQ;CACR,UAAU;CACV,2BAA2B;CAC3B,oBAAoB;AACrB;AACA;EACE,kBAAkB;CACnB,QAAQ;CACR,WAAW;CACX,2BAA2B;CAC3B,eAAe;AAChB\",\"sourcesContent\":[\".dialog {\\n\\twidth: 300px;\\n\\tbackground-color: var(--dialog-bg);\\n}\\n\\n.dialogWrapper {\\n  min-width: 300px;\\n\\tpadding: 15px\\n}\\n.wrapper input[type=\\\"text\\\"] {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\theight: 30px;\\n\\tline-height: 30px;\\n\\n\\tfont-size: 120%;\\n\\tmargin: 0;\\n\\tpadding: 4px;\\n\\tborder: none;\\n\\tborder-radius: 4px;\\n  box-sizing: border-box;\\n}\\nul.results {\\n\\tposition: relative;\\n\\tfont-family: monospace;\\n\\tlist-style-position: inside;\\n\\tlist-style-type: none;\\n\\tmax-height: 300px;\\n\\toverflow: scroll;\\n\\tpadding: 4px;\\n  margin: 4px 0;\\n\\tbackground: rgba(0, 0, 0, 0.75);\\n\\tborder-radius: 4px;\\n}\\n.results li {\\n\\tcursor: pointer;\\n\\tcolor: white;\\n\\tpadding: 5px;\\n}\\n.results li:hover, .results li.highlighted {\\n\\tbackground: white;\\n\\tcolor: black;\\n}\\n.results li b { color: dodgerblue; }\\n.results li .description {\\n\\tfont-style: italic;\\n\\tfont-size: 90%;\\n\\tmargin: 0;\\n\\tcolor: gray;\\n}\\n\\n.choices-counter {\\n  font-size: 10px;\\n}\\n\\n.choices-counter a {\\n  color: var(--selection);\\n  border-bottom: 1px dotted var(--selection);\\n  cursor: pointer;\\n}\\n\\n.searchWrapper {\\n  position: relative;\\n}\\n.wrapper .searchWrapper input {\\n  padding-left: 30px;\\n}\\n\\n.searchIcon {\\n  position: absolute;\\n\\ttop: 50%;\\n\\tleft: 10px;\\n\\ttransform: translateY(-50%);\\n\\tpointer-events: none;\\n}\\n.clearSearchIcon {\\n  position: absolute;\\n\\ttop: 50%;\\n\\tright: 10px;\\n\\ttransform: translateY(-50%);\\n\\tcursor: pointer;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"dialog\": \"sP2kDRoTZElZUTNHq033\",\n\t\"dialogWrapper\": \"yaxqlR_GEWJ1lBISL3_N\",\n\t\"wrapper\": \"lPSkq707ZDxmzbGw5Qqy\",\n\t\"results\": \"inAS9Qunkf3g5K3xz6o6\",\n\t\"highlighted\": \"BL7Cxrn_efblQXY3W1Sw\",\n\t\"description\": \"uld0XaeoQaQJJwp0LT0X\",\n\t\"choices-counter\": \"pqiZQublKXvmnT_ESDxQ\",\n\t\"searchWrapper\": \"ECUs4g2j1rekP4xxgQDr\",\n\t\"searchIcon\": \"xDUAgQZeBp0TZSOqCwHm\",\n\t\"clearSearchIcon\": \"eY5zRl49sESLjXmizMEP\"\n};\nexport default ___CSS_LOADER_EXPORT___;\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]!./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"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","ActionButton","children","secondary","className","props","styles","join","defaultProps","Tip","classNames","Icon","name","KeycodeBindNode","node","onSelect","expanded","handleClick","useCallback","event","stopPropagation","type","codes","useMemo","map","treeToSequence","key","at","codesSerialized","slice","reduce","serialized","mod","code","codeLabels","renderSource","label","i","Fragment","labels","length","title","getSourceTitle","display","description","missing","source","value","_isPlaceholder","content","compact","onClick","tree","params","sequenceToTree","seq","h","s","b","handleSelectParams","isEmpty","some","v","bgStyle","backgroundColor","border","boxSizing","BindValue","style","GenericBindNode","get","BindParamlist","slots","BindParam","slot","BindComponent","helper","HueSatValBindNode","root","wrapperProps","propTypes","PropTypes","bindPropTypes","isRequired","NullKey","displayName","text","symbol","toString","faIcon","Source","icon","Binding","context","hideBehaviour","paramIndex","onUpdate","useBindingEditor","behavior","behaviorParams","bindTree","bindTreeParams","editing","invalid","selectNodeForEditing","clearEditing","handleUpdateAndConfirm","handleChange","handleConfirm","isSimple","isComplex","behaviour","prompt","createPromptMessage","searchKey","onConfirm","onChange","onCancel","enumOption","param","enum","raw","nodeShape","bindNode","bindTreeReducer","updateAction","nodeIndex","updatedNode","updatedTree","cloneDeep","index","makeIndex","targetNode","forEach","bindNodeReducer","behaviorParameters","Number","oldAdditionalParams","additionalParams","splice","newParamSlots","oldParams","oldParamSlots","getNewParamsList","binding","useContext","SearchContext","sources","useState","setEditing","hydrateTree","pending","paramSlice","bind","behaviours","getBindingSlots","hasErrors","updated","withoutMetadata","indexOf","state","callbacks","handleUpdateBindValue","traverse","push","includes","normalized","first","shortSymbol","behaviourParams","isLongSymbol","isMultiParam","isNestedParam","promptMapping","layer","keycode","mergedGlyphs","hydrateNode","as","defines","isNaN","find","getSourceValue","validateDevicetreeNodeName","match","validateDevicetreeIdentifier","validateDevicetreeLabel","Key","keyWrapperProps","selectable","themeClass","rest","classes","cycle","array","next","ResultList","results","renderResult","cursorIndex","setCursorIndex","listRef","useRef","moveCursor","initial","offset","element","scroll","height","top","bottom","selector","current","querySelector","offsetParent","scrollTop","offsetHeight","offsetTop","scrollHeight","scrollIntoView","handleHighlightNext","handleHightightPrev","handleSelectActive","handleKeyDown","target","nodeName","action","ArrowDown","ArrowUp","Enter","preventDefault","useEffect","document","body","addEventListener","removeEventListener","ref","result","onDoubleClick","onMouseOver","focusInput","focus","select","SearchFilter","choices","searchKeys","renderResults","initialQuery","useSearch","query","setQuery","keys","limit","fuzzysort","obj","search","handleKeyPress","pickerPropTypes","searchThreshold","EnumPicker","getSearchTargets","GenericPicker","renderSearchResult","HSBPicker","inline","hsl","l","Math","round","justifyContent","color","textAlign","leftModifiers","rightModifiers","modifiersMap","LS","short","full","LC","LA","LG","RS","RC","RA","RG","noDeselectMessage","ModifiersRow","selected","implicit","row","checked","disabled","e","without","ModifiersPicker","onKeyup","singleKeyOnly","setHeld","clear","held","handleKeyUp","setTimeout","useCancelableKeyPress","modifier","modKey","Control","Shift","Alt","Meta","side","KeyboardEvent","DOM_KEY_LOCATION_LEFT","DOM_KEY_LOCATION_RIGHT","location","mapDomModifier","useModifierToggle","titleResult","dangerouslySetInnerHTML","__html","aliases","renderSymbol","resultListStyle","KeycodePicker","keycodeDefinition","selectedKeycode","selectedModifiers","filter","hydrated","handleChangeModifiers","modifiers","handleChangeKeycode","handleSelectKeycode","gap","KeyWrapper","marginTop","RawValuePicker","initialValue","setValue","onKeyDown","LayerPicker","layers","useSelector","selectLayers","ValuePicker","pickerProps","pick","PickerComponent","HueSatValPicker","ValuePickerDialog","Modal","onDismiss","DialogBox","dismissText","freeForm","___CSS_LOADER_EXPORT___","module","id","locals"],"sourceRoot":""}