{"version":3,"file":"focus-fly.cjs","sources":["../utils.js","../index.js"],"sourcesContent":["/** Object.prototype.toString.call 快捷方式 */\nexport const objToStr = obj => Object.prototype.toString.call(obj);\n\n/** 参数是否是对象 */\nexport const isObj = obj => objToStr(obj) === \"[object Object]\";\n\n/** 是否为函数 */\nexport const isFun = fun => objToStr(fun) === \"[object Function]\";\n\n/** document.activeElement 的快捷方式 */\nexport const getActiveElement = () => document.activeElement;\n\n/** document.querySelector 的快捷方式 */\nexport const querySelector = str => document.querySelector(str);\n\n/** 通过字符串查找节点，或者直接返回节点 */\nexport const element = e => typeof e === \"string\" ? querySelector(e) : e;\n\n/** 滴答 */\nexport const tick = function(fn) {\n  setTimeout(fn, 0);\n};\n\n/** 是否是 input 可 select 的元素 */\nexport const isSelectableInput = function(node) {\n  return (\n    node.tagName &&\n    node.tagName.toLowerCase() === 'input' &&\n    typeof node.select === 'function'\n  );\n};\n\n/** 是否按下了 enter */\nexport const isEnterEvent = function(e) {\n  return e.key === \"Enter\" || e.keyCode === 13;\n};\n\n/** 按键是否是 esc */\nexport const isEscapeEvent = function (e) {\n  return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n};\n\n/** 按键是否是 tab */\nexport const isTabEvent = function(e) {\n  return e.key === 'Tab' || e.keyCode === 9;\n};\n\n/** 是否是向前的 tab */\nexport const isTabForward = function(e) {\n  return isTabEvent(e) && !e.shiftKey;\n};\n\n/** 是否是向后的 tab */\nexport const isTabBackward = function(e) {\n  return isTabEvent(e) && e.shiftKey;\n};\n\n/** 找到两个元素的最小公共祖先元素 */\nexport const findLowestCommonAncestorNode = function(x, y) {\n  if (x == null || y == null) return null;\n  if (x.contains(y)) return x;\n  if (y.contains(x)) return y;\n\n  const range = new Range();\n  range.setStartBefore(x);\n  range.setEndAfter(y);\n  if (range.collapsed) {\n     range.setStartBefore(y);\n     range.setEndAfter(x);\n  }\n  return range.commonAncestorContainer;\n};\n\n/** 从字符串中分解按键 */\nexport const getKeysFromStr = function(str) {\n  const firstMinus = str.indexOf('-');\n  const firstKey = firstMinus === -1 ? str : firstMinus === 0 ? '-' : str.slice(0, firstMinus);\n  const extraStr = str.replace(firstKey, '');\n  const keys = [firstKey];\n  const reg = /-(?:-|[^-]+)/g;\n  let res;\n  while(res = reg.exec(extraStr))\n    keys.push(res[0].slice(1));\n  let shift = false;\n  let meta = false;\n  let alt = false;\n  let ctrl = false;\n  let commonKey = null;\n  let enableKeyMap = new Map([\n    [\"Shift\", () => shift = true],\n    [\"Meta\", () => meta = true],\n    [\"Alt\", () => alt = true],\n    [\"Control\", () => ctrl = true],\n  ]);\n  for(let i = 0; i < keys.length; ++ i) {\n    const enableKey = enableKeyMap.get(keys[i]);\n    if (enableKey == null)\n      commonKey = keys[i];\n    else enableKey();\n  }\n  return {\n    shift,\n    meta,\n    alt,\n    ctrl,\n    commonKey,\n  };\n}","import { objToStr, isObj, isFun, getActiveElement, element, tick, isSelectableInput, isEnterEvent, isEscapeEvent, isTabForward, isTabBackward, findLowestCommonAncestorNode, getKeysFromStr } from \"./utils\";\n\n/** 聚焦，如果是 input，则聚焦后选中 */\nconst focus = function(e) {\n  e.focus();\n  if (isSelectableInput(e))\n    e.select();\n};\n\n/** 尝试聚焦，如果聚焦失效，则下个 setTimeout 再次聚焦 */\nconst tickFocus = function(e) {\n  if (e == null) tick(() => e && focus(e));\n  else focus(e);\n};\n\n/** 是否匹配按键 */\nconst matchKeys = function(keys, e, prevI, curI) {\n  let matched = false;\n  for (const key of keys) {\n    if (isFun(key)) {\n      matched = key(e, prevI, curI);\n    } else {\n      const { shift, meta, alt, ctrl, commonKey } = key;\n      matched = ((shift && e.shiftKey) || !(shift || e.shiftKey)) &&\n        ((meta && e.metaKey) || !(meta || e.metaKey)) &&\n        ((alt && e.altKey) || !(alt || e.altKey)) &&\n        ((ctrl && e.ctrlKey) || !(ctrl || e.ctrlKey)) &&\n        (commonKey == null || (commonKey === e.key));\n    }\n    if (matched) return matched; // true\n  }\n  return matched; // false\n};\n\n/** 转换用户输入的按键为程序可理解的按键 */\nconst convertKeys = function(keys, defaultKey) {\n  return [].concat(keys).map(k => typeof k === \"string\" ? getKeysFromStr(k) : k ?? defaultKey);\n}\n\n/** 获取根节点 */\nconst getRootNode = function(rootStr, listHead, listTail) {\n  return element(rootStr) ?? findLowestCommonAncestorNode(listHead, listTail);\n};\n\n/** 获取列表节点 */\nconst getListNodes = function(listAry) {\n  const list = listAry.map(item => element(item)).filter(item => item != null);\n  const head = list[0];\n  const tail = list.slice(-1)[0];\n  return { list, head, tail };\n}\n\n/** 获取封面节点 */\nconst getCoverNode = function(coverStr, coverIsRoot, root) {\n  return coverIsRoot ? root : element(coverStr);\n}\n\n/** 获取关键节点 */\nconst getKeyNodes = function(originRoot, originList, originCover, coverIsRoot) {\n  const { list, head, tail } = getListNodes(originList);\n  const root = getRootNode(originRoot, head, tail);\n  const cover = getCoverNode(originCover, coverIsRoot, root);\n\n  return {\n    root,\n    list, head, tail,\n    cover,\n  };\n};\n\n/** 用于处理节点属性可以传递数组的情况，用于入口和出口 */\nconst pickNodesAry = function(acc, cur) {\n  const isAryNodes = Array.isArray(cur.node);\n  const nodes = isAryNodes ? cur.node.map(n => ({\n    ...cur,\n    node: n,\n  })) : cur;\n  return acc.concat(nodes);\n};\n\n/** 获取分割的出口 */\nconst splitExits = function(exits, root) {\n  /** 生效的节点是否在根元素内部（列表中） */\n  const isInnerRoot = node => isFun(node) || (node != null && root.contains(element(node))) || node == null;\n\n  const [keyExits, clickExits, focusExits, clickExits_wild, focusExits_wild, outListExits] = exits.reduce((acc, e) => {\n    let [key, click, focus, click_wild, focus_wild, outList] = acc;\n    const includeType = type => e.type?.includes(type);\n    if (isInnerRoot(e.node)) {\n      if (includeType(\"keydown\")) key = key.concat(e);\n      if (includeType(\"click\")) click = click.concat(e);\n      if (includeType(\"focus\")) focus = focus.concat(e);\n      if (includeType(\"outlist\")) outList = outList.concat(e);\n    } else {\n      if (includeType(\"click\")) click_wild = click_wild.concat(e);\n      if (includeType(\"focus\")) focus_wild = focus_wild.concat(e);\n      if (includeType(\"outlist\")) outList = outList.concat(e);\n    }\n    return [key, click, focus, click_wild, focus_wild, outList];\n  }, new Array(6).fill([]));\n\n  const hasClickExits = clickExits.length > 0;\n  const hasFocusExits = focusExits.length > 0;\n  const hasKeyExits = keyExits.length > 0;\n  \n  return {\n    keyExits, clickExits, focusExits, hasClickExits, hasFocusExits, hasKeyExits,\n    clickExits_wild, focusExits_wild,\n    outListExits,\n  };\n}\n\n/** 获取（生成）出口 */\nconst getExits = function(exit, onEscape, enabledCover, cover, trigger, delayToBlur) {\n\n  let tempExits = [].concat(exit).filter(o => o != null)\n    .map(ele => isObj(ele) ? ele : { node: ele })\n    .map(e => ({\n      ...e,\n      preventDefault: e.preventDefault ?? true,\n      delay: e.delay ?? delayToBlur,\n      // undefined 表示用户没有主动设置\n      type: e.type === undefined ? [e.key == null ? '' : \"keydown\", e.node == null ? '' : \"click\"].filter(t => t !== '') : [].concat(e.type),\n      key: convertKeys(e.key),\n    }))\n    .reduce(pickNodesAry, []);\n  let _onEscape = isFun(onEscape) ? onEscape : onEscape === true ? tempExits[0]?.on ?? (() => {}) : onEscape;\n  /** 按下 esc 的出口 */\n  const escapeExit = isFun(_onEscape) ? {\n    node: null,\n    key: [isEscapeEvent],\n    on: _onEscape,\n    target: enabledCover ? cover : trigger,\n    type: [\"keydown\"],\n  } : null;\n  const exits = [escapeExit].concat(tempExits).filter(e => e != null);\n\n  return exits;\n};\n\n/** 延迟执行某些操作 */\nconst delayToProcess = function(delay, processor) {\n\n  const { promiseDelay, callbackDelay, commonDelay, delayRes } = getDelayType();\n  if (promiseDelay) delayRes.then(processor);\n  else if (callbackDelay) {} // 已执行完毕\n  else if (commonDelay) processor();\n\n  /** 获取聚焦或失焦时延迟的类型 */\n  function getDelayType() {\n\n    const isFunctionDelay = isFun(delay);\n    const delayRes = isFunctionDelay && delay(processor);\n    const promiseDelay = isFunctionDelay && objToStr(delayRes) === \"[object Promise]\" && typeof delayRes.then === \"function\";\n    const callbackDelay = isFunctionDelay && !promiseDelay;\n    const commonDelay = !promiseDelay && !callbackDelay; // 立即执行\n    return {\n      promiseDelay,\n      callbackDelay,\n      commonDelay,\n      delayRes,\n    };\n  }\n};\n\n/** 获取出口或者入口的目标 */\nconst getTarget = function(target, cover, list, root, enabledCover, activeIndex, defaultTarget, e) {\n  const isDefaultTarget = t => t == null || t === true;\n  // 空 target 走默认\n  if (isDefaultTarget(target))\n    return returnDefaultTarget();\n  // 函数 target 则传入节点执行\n  else if (isFun(target)) {\n    const gotTarget = target({ e, list, cover, root, last: list[activeIndex], lastI: activeIndex });\n    if (isDefaultTarget(gotTarget))\n      return returnDefaultTarget();\n    return gotTarget;\n  }\n  // 选择器字符串或者节点，则直接获取\n  else return element(target);\n\n  function returnDefaultTarget() {\n    if (enabledCover) return cover;\n    else return defaultTarget;\n  }\n};\n\n/** 保存的监听事件信息，方便监听和移除监听 */\nclass ListenersCache {\n  cache = [];\n  isEmpty = true;\n  push(node, type, handler) {\n    this.isEmpty = false;\n    this.cache.push({\n      node,\n      type,\n      handler,\n    });\n  }\n  clean() {\n    this.cache = [];\n    this.isEmpty = true;\n  }\n  addListeners() {\n    this.cache.forEach(l => l.node?.addEventListener(l.type, l.handler));\n  }\n  removeListeners() {\n    this.cache.forEach(l => l.node?.removeEventListener(l.type, l.handler));\n    this.clean();\n  }\n}\n\n/** 按键转发的缓存 */\nclass KeyForwardCache {\n  cache = new Map();\n  has(id) {\n    return this.cache.has(id);\n  }\n  push(id, node, handler) {\n    if (this.has(id)) return;\n    node.addEventListener(\"keydown\", handler);\n    this.cache.set(id, {\n      node,\n      handler,\n    })\n  }\n  remove(id) {\n    const ids = [].concat(id);\n    ids.forEach(id => this.cache.get(id).node.removeEventListener(\"keydown\", this.cache.get(id).handler));\n  }\n}\n\n/** 保存列表数据 */\nclass TabList {\n  data = [];\n  head = null;\n  tail = null;\n  prevI = -1;\n  curI = -1;\n  _prev = null;\n  _cur = null;\n  rangeBeforePrevCallback = false; // 范围模式下，当前是否在调用钩子回调（onMove、onPrev）之前\n  rangeBeforeNextCallback = false; // 范围模式下，当前是否在调用钩子回调（onMove、onNext）之前\n  get prev() {\n    return this._prev || this.data[this.prevI] || null; // _prev 可能由于 dom 未加载而为 null，为 null 则通过 prevI 取值\n  };\n  get cur() {\n    return this._cur || this.data[this.curI] || null;\n  };\n  set prev(v) {\n    this._prev = v;\n  };\n  set cur(v) {\n    this._cur = v;\n  };\n  update(list) {\n    this.data.splice(0, this.data.length);\n    Array.prototype.push.apply(this.data, list);\n    this.head = list[0];\n    this.tail = list.at(-1);\n  };\n  isEmpty() {\n    return this.data.length === 0;\n  };\n  has(i) {\n    return !!this.data[i];\n  };\n  record(cur, curI) {\n    this.recordPrev(this.cur, this.curI);\n    this.recordCur(cur, curI);\n  };\n  recordRange(cur) {\n    if (this.cur === cur || (this.cur == null && cur == null))\n      return;\n    this.record(cur, -1);\n  };\n  recordPrev(prev, prevI) {\n    this.prevI = prevI < 0 ? -1 : prevI;\n    this.prev = prev || null;\n  };\n  recordCur(cur, curI) {\n    this.curI = curI < 0 ? -1 : curI;\n    this.cur = cur || null;\n  };\n  recordSequenceByIdx(curI) {\n    const cur = this.data[curI];\n    if (this.curI === curI // this.curI 和 curI 必须不同\n      || (this.curI < 0 && curI < 0)) // curI 为 -1 后，不会再次更新新的 -1\n      return;\n    this.record(cur, curI);\n  };\n}\n\nconst focusFly = (...props) => {\n  const offset = 0 - (props[0] instanceof Array);\n  const rootNode = props[0 + offset];\n  const subNodes = props[1 + offset];\n  const options  = props[2 + offset] ?? {};\n\n  if (!(Array.isArray(subNodes) && subNodes.length > 1))\n    throw new Error(\"请至少传入一个数组，数组至少包含两个可聚焦元素，用来表示列表的头和尾。\");\n\n  const {\n    /** move: tab 序列，指定可以聚焦的元素，聚焦 list 内的元素 */\n    sequence,\n    /** move: 是否循环，设置后，尾元素的下个焦点是头元素，头元素的上个焦点是尾元素 */\n    loop,\n    /** move: 自定义前进焦点函数 */\n    next,\n    /** move: 自定义后退焦点函数 */\n    prev,\n    /** focus/blur: 触发器，如果使用 focusFly.enter 则不用设置，如果使用 entry.selector 则不用设置 */\n    trigger,\n    /** focus: 触发触发器的配置 */\n    entry,\n    /** blur: 触发退出触发器的配置 */\n    exit,\n    /** blur: 按下 esc 的行为，如果未设置，则取 exit.on */\n    onEscape,\n    /** 点击列表单项的响应，行为 */\n    onClick,\n    /** 移动的时候触发 */\n    onMove,\n    /** cover: 封面，默认情况，触发入口后首先聚焦封面，而不是子元素 */\n    cover: origin_cover,\n    /** 初始的列表中聚焦元素的序号 */\n    initialActive,\n    /** 矫正列表的焦点 */\n    correctionTarget,\n    /** 延迟挂载非触发器元素的事件，可以是一个返回 promise 的函数，可以是一个接收回调函数的函数 */\n    delayToFocus,\n    /** 延迟失焦，触发出口后等待执行 delayToBlur 完成后失焦 */\n    delayToBlur,\n    /** 每次退出列表回到入口是否移除列表事件 */\n    removeListenersEachExit = true,\n    /** 每次进入列表是否移除入口事件 */\n    removeListenersEachEnter,\n    /** 每次退出列表是否添加入口监听事件 */\n    addEntryListenersEachExit = true,\n    /** 阻止（列表移动）冒泡或捕获 */\n    stopPropagation: listStopPropagation = false,\n    /** 阻止（列表移动）默认行为 */\n    preventDefault,\n    /** 手动添加和移除监听事件，入口、列表、出口的监听事件，`removeListenersEachExit` 和 `removeListenersEachEnter` 将失效 */\n    manual,\n    /** 用于抹平 Safari 不同于其它浏览器，点击后 button 之类的元素不会被聚焦的问题 */\n    allowSafariToFocusAfterMousedown = true,\n    /** 用于内部调试 */\n    // demo = false,\n  } = options;\n\n  /** 入口们 */\n  const entries = [].concat(entry) // 转为数组\n    .filter(o => o != null) // 过滤空值\n    .map(ele => isObj(ele) ? ele : { node: ele }) // 元素转为对象，并且默认元素的值被看作对象的 node 属性\n    .map(entry => ({ // 对元素的属性进行默认处理\n      ...entry,\n      preventDefault: entry.preventDefault ?? true,\n      delay: entry.delay ?? delayToFocus,\n      type: entry.type === undefined ? [entry.key == null ? '' : \"keydown\", entry.node == null ? '' : \"click\"].filter(t => t != '') : [].concat(entry.type),\n      onExit: entry.onExit === true ? entry.on : entry.onExit, // 这个入口是开关吗\n      key: convertKeys(entry.key),\n    }))\n    .reduce(pickNodesAry, []); // 处理元素的 node 属性是数组的情况，将它分解成多个元素\n  /** 是否是空入口 */\n  const hasNoEntry = entries.length === 0;\n  /** 带切换的入口，如果 entry.onExit 有值，代表这个入口同时也是出口，也就是开关 */\n  const toggles = new Set(entries.map(e => isFun(e.onExit) ? e.node : null).filter(n => n != null).map(n => element(n)));\n  /** 默认入口，默认情况下，会从出口回到这个入口 */\n  let _trigger = element(trigger || entries[0]?.node);\n\n\n  const {\n    /** 封面节点 */\n    node: coverNode,\n    enterKey: coverEnterKey,\n    onEnter: onEnterCover,\n    exit: exitCover,\n  } = isObj(origin_cover) ? origin_cover : {};\n  /** 是否已经打开封面选项 */\n  const enabledCover = origin_cover != null && origin_cover !== false && coverNode !== false;\n  /** 封面即根元素 */\n  const coverIsRoot = enabledCover && (origin_cover === true || coverNode === true || coverNode == null);\n  /** 退出封面，封面的出口们 */\n  const exitsCover = [].concat(exitCover) // 转为数组\n    .filter(e => e != null) // 过滤空值\n    .map(e => isObj(e) ? e : { key: e }) // 元素转为对象，并且默认元素的值被看作对象的 key 属性\n    .map(e => ({ // 对元素的属性进行默认处理\n      ...e,\n      target: e.target ?? _trigger,\n      key: convertKeys(e.key),\n    }));\n  /** 是否使用默认的离开封面方法，也即 tab 和 shift-tab */\n  const isDefaultExitCover = enabledCover && exitsCover.length === 0;\n\n\n  /** 列表 */\n  const list = new TabList();\n  /** 根元素 */\n  let root = null;\n  /** 封面 */\n  let cover = null;\n\n  list.recordPrev(null, initialActive ?? -1);\n\n  const objNext = isObj(next) ? next : { key: next };\n  const {\n    key: isNext,\n    on: onNext,\n  } = {\n    ...objNext,\n    key: convertKeys(objNext.key, isTabForward)\n  };\n\n  const objPrev = isObj(prev) ? prev : { key: prev };\n  const {\n    key: isPrev,\n    on: onPrev,\n  } = {\n    ...objPrev,\n    key: convertKeys(objPrev.key, isTabBackward)\n  };\n\n  /** 禁用左上角 esc 出口 */\n  const disabledEsc = onEscape === false;\n\n  /** 取消循环则设置头和尾焦点 */\n  const isClamp = !(loop ?? true);\n\n  /** 是否打开列表序列，按照序列的顺序进行焦点导航 */\n  const enabledTabSequence = !!(next || prev || sequence); // 自定义前进或后退焦点函数，则设置 sequence 为 true\n\n  /** 移动列表，是否阻止默认行为 */\n  const listPreventDefault = preventDefault ?? enabledTabSequence;\n\n  /** 进入了列表 */\n  let trappedList = false;\n  /** 进入了封面 */\n  let trappedCover = false;\n\n  /** 是否已添加监听事件 */\n  const listListeners = new ListenersCache();\n  /** 是否已添加入口的监听事件 */\n  const entryListeners = new ListenersCache();\n  /** 按键转发，监听事件 */\n  const keyForwards = new KeyForwardCache();\n\n  if (!manual) { // 如果不是手动添加事件，则注册入口、列表相关（封面、列表、出口）的事件\n    // 入口点击事件\n    addEntryListeners();\n\n    // 如果有入口不需要延迟，则立即加载列表的监听事件\n    const hasImmediateEntry = (hasNoEntry ? [{}] : entries).some(({ delay }) => !delay);\n\n    if (hasImmediateEntry) {\n\n      const {\n        root: newRoot, list: newList, cover: newCover,\n      } = getKeyNodes(rootNode, subNodes, coverNode, coverIsRoot);\n      list.update(newList);\n      root = newRoot;\n      cover = newCover;\n\n      loadListRelatedListeners(root, list, cover);\n    }\n  }\n\n  const Return = {\n    /** 调用形式的入口 */\n    enter(entry) {\n      _trigger = _trigger || getActiveElement();\n\n      if (entry) {\n        const { on, target, delay } = entry;\n        return entryHandler({ fromInvoke: true }, on, target, delay);\n      } else {\n        for (let i = 0; i < entries.length; ++ i) {\n          const { on, type, node, target, delay } = entries[i];\n          const invokeType = \"invoke\";\n\n          if (type?.some(type => type == null || type === false || type === invokeType) || node == null) {\n            return entryHandler({ fromInvoke: true }, on, target, delay);\n          }\n        }\n        return entryHandler({ fromInvoke: true });\n      }\n    },\n    /** 调用形式的出口 */\n    exit(tempExit) {\n\n      const {\n        list: newList,\n        cover,\n        root,\n      } = getKeyNodes(rootNode, subNodes, coverNode, coverIsRoot);\n\n      if (tempExit) {\n        const { on, target: originTarget } = tempExit;\n        const target = element(originTarget);\n        return toExit(target, on);\n      } else {\n        const exits = getExits(exit, onEscape, enabledCover, cover, _trigger, delayToBlur);\n        for (let i = 0; i < exits.length; ++ i) {\n          const { on, type, target } = exits[i];\n          const invokeType = \"invoke\";\n  \n          if (type?.some(type => type == null || type === false || type === invokeType)) {\n            return toExit(target, on);\n          }\n        }\n      }\n\n      function toExit(target, on) {\n\n        if (list.isEmpty()) list.update(newList);\n\n        return exitHandler({ fromInvoke: true }, on, target, false, cover, list.data, root);\n      }\n    },\n    /** 移除所有的监听事件 */\n    removeListeners() {\n      listListeners.removeListeners();\n      entryListeners.removeListeners();\n    },\n    /** 移除列表相关的事件 */\n    removeListRelatedListeners() {\n      listListeners.removeListeners();\n    },\n    /** 移除入口事件 */\n    removeEntryListeners() {\n      entryListeners.removeListeners();\n    },\n    /** 添加入口的监听事件 */\n    addEntryListeners() {\n      addEntryListeners();\n    },\n    /** 添加列表相关（封面、列表、出口）的监听事件 */\n    addListRelatedListeners() {\n\n      const {\n        root,\n        list: newList,\n        cover,\n      } = getKeyNodes(rootNode, subNodes, coverNode, coverIsRoot);\n      if (list.isEmpty()) list.update(newList);\n\n      loadListRelatedListeners(root, list, cover);\n    },\n    /** 添加转发 */\n    addForward(id, forward) {\n      let opts = null;\n      if (isFun(forward)) {\n        const {\n          root,\n          list: listData, head, tail,\n          cover,\n        } = getKeyNodes(rootNode, subNodes, coverNode, coverIsRoot);\n\n        opts = forward({ root, list: listData, head, tail, cover, curI: list.curI, prevI: list.prevI });\n      }\n      else opts = forward;\n\n      const { node: origin_node, on, key: origin_key, target: origin_target } = opts;\n      const node = element(origin_node);\n      const target = element(origin_target);\n      const keys = convertKeys(origin_key);\n      keyForwards.push(id, node, e => {\n        if (matchKeys(keys, e, list.prevI, list.curI)) {\n          e.preventDefault();\n          on?.();\n          tickFocus(target);\n        }\n      });\n    },\n    /** 移除转发 */\n    removeForward(id) {\n      keyForwards.remove(id);\n    },\n    /** 更新列表 */\n    updateList(newList) {\n      const _newList = newList.map(item => element(item)).filter(item => item != null);\n      list.update(_newList);\n    },\n    /** 当前聚焦的列表单项序号 */\n    i(newI) {\n      if (list.has(newI) && trappedList) {\n        list.recordSequenceByIdx(newI);\n        const { prev, prevI, cur, curI } = list;\n        onMove?.({ e: { fromI: true }, prev, prevI, cur, curI });\n        focus(subNodes[curI]);\n        return newI;\n      }\n      else return list.curI < 0 ? list.prevI : list.curI;\n    },\n  };\n\n  return Return;\n\n  /** 入口 handler */\n  function entryHandler(e, onEnter, target, delay, preventDefault, stopPropagation) {\n\n    // 如果已经在列表或者封面，则不再触发入口；出口不需要该操作，因为不存在从出口退出到出口的子元素的情况，相反，存在入口进入到入口子元素的情况。\n    if (trappedCover || trappedList) return;\n\n    preventDefault && e.preventDefault?.();\n    stopPropagation && e.stopPropagation?.();\n\n    Promise.resolve(onEnter?.(e)).then(_ => {\n      delayToProcess(delay, findNodesToLoadListenersAndFocus);\n    });\n\n    /** 寻找节点，加载事件监听器，聚焦 subNodes 或 coverNode */\n    function findNodesToLoadListenersAndFocus() {\n\n      if (list.isEmpty()) {\n        const { list: newList } = getListNodes(subNodes);\n        list.update(newList);\n      }\n\n      if (root == null)\n        root = getRootNode(rootNode, list.head, list.tail);\n\n      if (cover == null && enabledCover)\n        cover = getCoverNode(coverNode, coverIsRoot, root);\n\n      if (!manual)\n        loadListRelatedListeners(root, list, cover);\n      if (target !== false)\n        focusTarget(cover, list, root);\n    }\n    \n    function focusTarget(cover, listInfo, rootNode) {\n      const list = listInfo.data;\n      const { prev, head, curI } = listInfo;\n      const defaultTarget = prev || head;\n      const gotTarget = getTarget(target, cover, list, rootNode, enabledCover, curI, defaultTarget, e);\n      if (enabledTabSequence) { // 序列模式\n        const targetIdx = list.indexOf(gotTarget);\n        if (targetIdx > -1) {\n          listInfo.recordSequenceByIdx(targetIdx); // 只有在聚焦列表元素时才设置，否则会破坏原有 curI\n          const { cur, curI } = listInfo;\n          onMove?.({ e, prev: null, cur, prevI: -1, curI });\n          trappedList = true;\n        }\n      } else { // 范围模式\n        if (rootNode.contains(gotTarget) && gotTarget !== cover) {\n          listInfo.recordRange(gotTarget);\n          const { cur, curI } = listInfo;\n          onMove?.({ e, prev: null, cur, prevI: -1, curI });\n          trappedList = true;\n        }\n      }\n      if (enabledCover && (gotTarget === cover || trappedList === true)) trappedCover = true;\n      tickFocus(gotTarget);\n    }\n  }\n\n  /** 出口 handler */\n  function exitHandler(e, on, target, delay, cover, listData, root, ef, preventDefault, stopPropagation) {\n\n    if (!trappedList || \n      !(isFun(ef) ? ef({ e, prev: list.prev, cur: list.cur, prevI: list.prevI, curI: list.curI }) : true))\n      return false;\n\n    preventDefault && e.preventDefault?.(); // 阻止默认行为，例如 tab 到下一个元素，例如 entry button 触发 click 事件\n    stopPropagation && e.stopPropagation?.();\n\n    if (enabledTabSequence) list.recordSequenceByIdx(-1);\n    else list.recordRange(null);\n\n    trappedList = false;\n\n    const gotTarget = getTarget(target, cover, listData, root, enabledCover, list.curI, _trigger, e);\n\n    if (gotTarget) return exitListWithTarget();\n    else return exitListWithoutTarget();\n\n    /** 退出列表，有 target */\n    function exitListWithTarget() {\n\n      Promise.resolve(on?.(e)).then(_ => {\n        delayToProcess(delay, focusThenRemoveListeners);\n      });\n\n      function focusThenRemoveListeners() {\n        if (!manual) {\n          if (gotTarget !== cover)\n            removeListRelatedListeners();\n          if (addEntryListenersEachExit)\n            addEntryListeners();\n        }\n        onMove?.({ e, prev: list.prev, cur: null, prevI: list.prevI, curI: -1 });\n        focus(gotTarget);\n      }\n    }\n\n    /** 退出列表，无 target */\n    function exitListWithoutTarget() {\n\n      Promise.resolve(on?.(e)).then(_ => {\n\n        if (gotTarget === false) { // 如果显式设为 false，则直接退出，不聚焦，会在一个列表退出另一个列表移动的场景使用\n\n          const removeListenersWithoutFocus = focusThenRemoveListeners();\n          removeListenersWithoutFocus();\n          return ;\n        }\n\n        const focusTriggerThenRemoveListeners = focusThenRemoveListeners(_trigger);\n        delayToProcess(delay, focusTriggerThenRemoveListeners);\n      });\n\n      function focusThenRemoveListeners(focusTarget) {\n        return _ => {\n          if (!manual) {\n            removeListRelatedListeners();\n            if (addEntryListenersEachExit)\n              addEntryListeners();\n          }\n          onMove?.({ e, prev: list.prev, cur: null, prevI: list.prevI, curI: -1 });\n          focusTarget && focus(focusTarget);\n        }\n      }\n    }\n  }\n\n  /** 生成事件行为，添加事件监听器 */\n  function loadListRelatedListeners(root, listInfo, cover) {\n\n    const list = listInfo.data;\n    const head = listInfo.head;\n    const tail = listInfo.tail;\n\n    if (!listListeners.isEmpty) return ; // 列表的监听事件没有移除之前，不需要再次添加列表监听事件\n\n    if (root == null)\n      throw new Error(`没有找到元素 ${rootNode}，您可以尝试 delayToFocus 选项，等待元素 ${rootNode} 渲染完毕后进行聚焦。`);\n    if (head == null || tail == null)\n      throw new Error(\"至少需要包含两个可以聚焦的元素，如果元素需要等待渲染，您可以尝试 delayToFocus 选项。\");\n\n    // 添加除 trigger 以外其它和焦点相关的事件监听器\n    addListRelatedListeners();\n\n    /** 添加焦点需要的事件监听器 */\n    function addListRelatedListeners() {\n\n      /** 是否是来自默认封面出口的聚焦 */\n      let focusFromDefaultExitCover = false;\n\n      const useActiveIndex = () => [listInfo.curI, listInfo.recordSequenceByIdx.bind(listInfo)];\n\n      const isTrappedList = () => hasNoEntry ? true : trappedList;\n\n      // 在焦点循环中触发聚焦\n      const keyListMoveHandler = enabledTabSequence ? focusNextListItemBySequence : focusNextListItemByRange;\n\n      /** 出口们，列表的出口们，list 的出口们 */\n      const exits = getExits(exit, onEscape, enabledCover, cover, _trigger, delayToBlur);\n      const {\n        keyExits, clickExits, focusExits, hasClickExits, hasFocusExits, hasKeyExits,\n        clickExits_wild, focusExits_wild,\n        outListExits,\n      } = splitExits(exits, root);\n\n      /** 非跟节点内的，是根节点之外的出口 */\n      const clickListExitHandlers_wild = clickExits_wild.map(exit => [element(exit?.node), clickListExitHandler_wild(exit)]);\n      const focusListExitHandlers_wild = focusExits_wild.map(exit => [element(exit?.node), focusListExitHandler_wild(exit)]);\n\n      listListeners.push(root, \"focusin\", focusTrapListHandler);\n\n      listListeners.push(root, \"focusout\", blurTrapListHandler);\n\n      if (!root.contains(cover) && cover != null) {\n\n        listListeners.push(cover, \"focus\", focusTrapCoverHandler);\n\n        listListeners.push(cover, \"blur\", blurTrapCoverHandler);\n      }\n\n      listListeners.push(root, \"keydown\", e => {\n        let exited = false;\n        // 列表键盘出口\n        if (hasKeyExits)\n          exited = keyListExitHandler(e);\n        // 列表中移动，监听移动的键盘事件，例如 tab 或其它自定义组合键\n        if (!exited) // 退出的优先级高于列表移动\n          keyListMoveHandler(e);\n      });\n\n      listListeners.push(root, \"click\", e => {\n        // 点击聚焦列表单项，只在手动列表时监听点击，因为自动模式不需要记录 list.curI\n        clickListItemHandler(e);\n        // 列表点击出口\n        hasClickExits && clickListExitHandler(e);\n      });\n\n      // 由于 click 事件在 focus 之后，这里用来判断是否通过点击进入列表，用于纠错未知进入列表的焦点定位\n      listListeners.push(root, \"mousedown\", mousedownListItemHandler);\n\n      if (hasFocusExits) {\n        // 列表聚焦出口\n        listListeners.push(root, \"focusin\", focusListExitHandler);\n      }\n\n      // 非列表内的出口\n      focusListExitHandlers_wild.forEach(([node, handler]) => {\n        listListeners.push(node, \"focus\", handler);\n      });\n      clickListExitHandlers_wild.forEach(([node, handler]) => {\n        listListeners.push(node, \"click\", handler);\n      });\n\n      if (cover != null) {\n        // 封面的事件\n        listListeners.push(cover, \"keydown\", keyCoverHandler);\n      }\n\n\n      /** 是否触发了开关的 mousedown，如果是，则代表当前触发的是开关，需要忽略跳过列表的 blur 事件 */\n      let triggeredToggleMousedown = false;\n\n      // 若存在 outlist 类型，则为入口添加 mousedown，用于入口是开关的情况\n      if (outListExits) {\n        toggles.forEach(toggle => {\n          listListeners.push(toggle, \"mousedown\", _ => triggeredToggleMousedown = true);\n        });\n      }\n\n      // flush\n      listListeners.addListeners();\n\n\n\n      let isMouseDown = false;\n      /** 标记是否从封面进入列表，用于防止纠正列表焦点的误判，用于野生封面 */\n      let isEnterFromCover = false;\n\n\n      /*~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~+\n       |          LIST HANDLERS          |\n       +~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/\n\n      function focusTrapListHandler(e) {\n\n        /** 当前焦点 */\n        const target = e.target;\n        /** 前一个焦点 */\n        const relatedTarget = e.relatedTarget;\n\n        // 默认封面退出\n        if (focusFromDefaultExitCover) {\n          focusFromDefaultExitCover = false;\n          return;\n        }\n\n        // 进入封面（封面在列表中）\n        if (enabledCover && target === cover) { // TODO: 保留确认，或是否需要添加 `&& trappedList` 条件\n          trappedCover = true;\n          return ;\n        }\n\n        // 纠正进入封面，从外部进入列表，如果没有通过封面，则重新聚焦封面\n        if (enabledCover && isMouseDown === false && trappedCover === false) {\n          tickFocus(cover);\n          return ;\n        }\n\n        // 调用范围模式下的 onPrev、onNext、onMove，此时焦点正在列表内移动\n        if (listInfo.rangeBeforePrevCallback || listInfo.rangeBeforeNextCallback) {\n          listInfo.recordRange(target);\n          listInfo.rangeBeforePrevCallback = false;\n          listInfo.rangeBeforeNextCallback = false;\n          const { cur, prev } = listInfo;\n          (listInfo.rangeBeforePrevCallback ? onNext : onPrev)?.({ e, prev, cur, prevI: -1, curI: -1 });\n          onMove?.({ e, prev, cur, prevI: -1, curI: -1 });\n          return ;\n        }\n\n        // 纠正外部聚焦进来的焦点。如果是内部的聚焦，无需纠正，防止嵌套情况的循环问题\n        if (correctionTarget !== false &&\n          trappedList === false &&\n          isMouseDown === false &&\n          (relatedTarget == null || // 上一个焦点为空\n            !root.contains(relatedTarget))) // 上一个焦点在根节点 root 以外的区域\n        {\n          const defaultLast = listInfo.prev || listInfo.head;\n          const originGotCorrectionTarget = correctionTarget?.({ list, cover, root, last: listInfo.prev, lastI: listInfo.prevI, e }) ?? defaultLast;\n          const gotCorrectionTarget = element(originGotCorrectionTarget);\n\n          onMoveTargetFromOuter(gotCorrectionTarget);\n          tickFocus(gotCorrectionTarget);\n        }\n\n        // 关闭焦点纠正，同时从外部进来了焦点\n        if (correctionTarget === false &&\n          trappedList === false &&\n          isMouseDown === false &&\n          (relatedTarget == null || !root.contains(relatedTarget)))\n          onMoveTargetFromOuter(target)\n\n        /** 矫正时的 onMove 调用 */\n        function onMoveTargetFromOuter(target) {\n          if (enabledTabSequence) { // 序列模式\n            const targetIndex = list.findIndex(item => item === target);\n            if (targetIndex > -1) {\n              listInfo.recordSequenceByIdx(targetIndex);\n              onMove?.({ e, prev: null, cur: listInfo.cur, prevI: -1, curI: listInfo.curI });\n              trappedList = true; // 在下一次 触发 focusin 调用 focusTrapListHandler 之前，设为 true。通过 api 调用的 focus，触发的 focusin 事件会被“同步”调用\n            }\n          } else { // 范围模式\n            listInfo.recordRange(target);\n            onMove?.({ e, prev: null, cur: listInfo.cur, prevI: -1, curI: listInfo.curI });\n            trappedList = true; // 在下一次 触发 focusin 调用 focusTrapListHandler 之前，设为 true。通过 api 调用的 focus，触发的 focusin 事件会被“同步”调用\n          }\n        }\n      }\n\n      function blurTrapListHandler(e) {\n        // 用于保护可切换的入口（开关，同时作为出口的入口）能够被触发；也可用 relatedTarget 判断，但 relatedTarget 不兼容 Safari（23.09.08）\n        if (triggeredToggleMousedown)\n          return triggeredToggleMousedown = false; // mousedown 一定优先 blur 触发，如果触发了 mousedown，则代表当前触发的是开关\n\n        tick(() => { // 延迟后获取下一次聚焦的元素，否则当前聚焦元素是 body\n\n          const active = getActiveElement();\n          const isOutRootNode = !root.contains(active);\n          const isActiveCover = active === cover;\n\n          // 从封面退出\n          if (e.target === cover && isOutRootNode) {\n            trappedCover = false; // 退出封面\n            return;\n          }\n\n          let isOutList = null;\n          if (isActiveCover || isOutRootNode) {\n            isOutList = outListExitHandler(e);\n            if (enabledTabSequence) listInfo.recordSequenceByIdx(-1);\n            else listInfo.recordRange(null);\n          }\n          if (isOutList === false) return; // 不符合 outlist 退出列表的条件\n\n          if (isActiveCover) { // 聚焦在封面\n            trappedList = false;\n          } else if (isOutRootNode) { // 聚焦在非封面、非列表的区域\n            trappedList = false;\n            trappedCover = false;\n          }\n        });\n      }\n\n      function mousedownListItemHandler(e) {\n        isMouseDown = true;\n        tick(() => isMouseDown = false); // mousedown 没有出口，只能使用定时器，isMouseDown 主要在两个 focus 事件中使用，当触发 focus 时，此定时器还未执行，以此保证正确性\n\n        let targetItem;\n        if (!enabledTabSequence || // 未打开 sequence 属性 或者\n          (enabledTabSequence && // 已打开 sequence 属性 并且\n            (targetItem = list.find(item => item.contains(e.target))) // 点击的目标是列表中的元素\n          )\n        ) {\n          trappedList = true;\n          if (enabledCover) trappedCover = true;\n          // 兼容 Safari（桌面端），具体问题查看：https://github.com/wswmsword/web-experiences/tree/main/browser/safari-button-focus\n          if (allowSafariToFocusAfterMousedown && targetItem && window.safari !== undefined) {\n            focus(targetItem); // Safari 不会聚焦按钮元素，这里强制使用 api 聚焦\n            e.preventDefault(); // 阻止默认行为可以避免 targetItem 失焦\n          }\n        }\n      }\n\n      /** 点击聚焦列表某一单项 */\n      function clickListItemHandler(e) {\n\n        const target = e.target;\n\n        if (enabledTabSequence) { // 序列模式\n\n          const targetIndex = list.findIndex(item => item.contains(target));\n          if (targetIndex > -1) {\n            const { prev: prevBeforeRecord, prevI: prevIBeforeRecord, curI: curIBeforeRecord } = listInfo;\n            listInfo.recordSequenceByIdx(targetIndex);\n  \n            let { prev, prevI, cur, curI } = listInfo;\n            if (curIBeforeRecord < 0) { // 从外部进入\n              if (prevIBeforeRecord !== targetIndex) { // 上一次进入 和 本次进入 的元素不同\n                prev = prevBeforeRecord;\n                prevI = prevIBeforeRecord;\n              }\n            }\n  \n            onClick?.({ e, prev, cur, prevI, curI });\n            if (curIBeforeRecord !== curI) // 从外部进入 或者 列表内的移动\n              onMove?.({ e, prev, cur, prevI, curI });\n          }\n        } else { // 范围模式\n\n          const { prev: prevBeforeRecord, cur: curBeforeRecord } = listInfo;\n          listInfo.recordRange(target);\n\n          let { prev, cur } = listInfo;\n          if (curBeforeRecord == null) { // 外部进入\n            if (prevBeforeRecord !== target) {\n              prev = prevBeforeRecord;\n            }\n          }\n\n          onClick?.({ e, prev, cur, prevI: -1, curI: -1 });\n          if (curBeforeRecord !== cur) // 从外部进入 或者 列表内的移动\n            onMove?.({ e, prev, cur, prevI: -1, curI: -1 });\n        }\n      }\n\n      /** 手动聚焦下一个元素 */\n      function focusNextListItemBySequence(e) {\n        if (e.target === cover) return;\n        if (!isTrappedList()) return;\n\n        const [index_, setIndex] = useActiveIndex();\n        const index = Math.max(0, index_);\n        const itemsLen = list.length;\n        let focused = false;\n\n        if (matchKeys(isNext, e, listInfo.prevI, listInfo.curI)) {\n          const increasedI = index + 1;\n          let nextI = isClamp ? Math.min(itemsLen - 1, increasedI) : increasedI;\n          nextI %= itemsLen;\n          onNext?.({ e, prev: list[index], cur: list[nextI], prevI: index, curI: nextI });\n          onMove?.({ e, prev: list[index], cur: list[nextI], prevI: index, curI: nextI });\n          setIndex(nextI);\n          focus(list[nextI]);\n          focused = true;\n        }\n        else if (matchKeys(isPrev, e, listInfo.prevI, listInfo.curI)) {\n          const decreasedI = index - 1;\n          let nextI = isClamp ? Math.max(0, decreasedI) : decreasedI;\n          nextI = (nextI + itemsLen) % itemsLen;\n          onPrev?.({ e, prev: list[index], cur: list[nextI], prevI: index, curI: nextI });\n          onMove?.({ e, prev: list[index], cur: list[nextI], prevI: index, curI: nextI });\n          setIndex(nextI);\n          focus(list[nextI]);\n          focused = true;\n        }\n\n        // 如果按下了 Tab，则阻止默认行为（聚焦下一个元素），无需阻止事件传播\n        (e.key === \"Tab\" || focused) && listPreventDefault && e.preventDefault();\n        focused && listStopPropagation && e.stopPropagation();\n      };\n\n      /** 按下 tab，以浏览器的行为聚焦下个元素 */\n      function focusNextListItemByRange(e) {\n        const head = list[0];\n        const tail = list.at(-1);\n        const current = e.target;\n        if (current === cover) return;\n        if (!isTrappedList()) return;\n\n        let needToPreventDefault = false;\n        let focused = false;\n        if (isTabForward(e)) {\n          listInfo.recordRange(current);\n          listInfo.rangeBeforeNextCallback = true;\n          if (current === tail) {\n            needToPreventDefault = true;\n            if (!isClamp) focus(head);\n          }\n          if (current === root) {\n            needToPreventDefault = true;\n            focus(head);\n          }\n          focused = true;\n        }\n        else if (isTabBackward(e)) {\n          listInfo.recordRange(current);\n          listInfo.rangeBeforePrevCallback = true;\n          if (current === head) {\n            needToPreventDefault = true;\n            if (!isClamp) focus(tail);\n          }\n          if (current === root) {\n            needToPreventDefault = true;\n            focus(tail);\n          }\n          focused = true;\n        }\n\n        if (needToPreventDefault || (focused && listPreventDefault)) e.preventDefault();\n        if (focused && listStopPropagation) e.stopPropagation();\n      };\n\n      /*~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~+\n      |         COVER HANDLERS          |\n      +~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/\n\n      function focusTrapCoverHandler() { trappedCover = true; } // 捕获点击封面的情况\n\n      function blurTrapCoverHandler() { // 捕获点击空白区域的情况\n        if (isEnterFromCover) // 用于防止纠正列表焦点的误判，如果是进入列表，则 trappedCover 还应是 true\n          isEnterFromCover = false;\n        else\n          trappedCover = false;\n      }\n\n      /** 封面的键盘事件响应 */\n      function keyCoverHandler(e) {\n        if (e.target !== cover) return;\n        if (!(trappedCover && !trappedList)) return; // 继续执行，必须满足焦点在封面上，且不在列表中\n\n        // 入口（封面），从封面进入列表\n        if((coverEnterKey ?? isEnterEvent)(e) && !trappedList) {\n          e.preventDefault();\n          isEnterFromCover = true;\n          trappedList = true;\n          onEnterCover?.(e);\n          if (enabledTabSequence) {\n            listInfo.recordSequenceByIdx(Math.max(0, listInfo.prevI));\n            focus(listInfo.cur);\n            onMove?.({ e, prev: null, cur: listInfo.cur, prevI: -1, curI: listInfo.curI });\n          } else {\n            listInfo.recordRange(listInfo.prev == null ? listInfo.head : listInfo.prev);\n            focus(listInfo.cur);\n            onMove?.({ e, prev: null, cur: listInfo.cur, prevI: -1, curI: -1 });\n          }\n          return;\n        }\n\n        // 出口（封面），从封面回到入口\n        for (let i = 0; i < exitsCover.length; ++ i) {\n          const { key, on, target: origin } = exitsCover[i];\n          const target = element(origin);\n          if (matchKeys(key, e, listInfo.prevI, listInfo.curI)) {\n            exitCoverHandler(e, on, target);\n            return;\n          }\n        }\n\n        // 默认出口，默认行为，默认的行为的场景是包含子元素的长列表\n        if (isDefaultExitCover &&\n          isTabForward(e)) { // 虽然也是离开列表，但是这里不移除监听事件，因为移除后就不能再次进入封面\n          focusFromDefaultExitCover = true;\n          focus(tail);\n          return;\n        }\n\n        /** 退出封面焦点的行为 */\n        function exitCoverHandler(e, onExit, target) {\n          onExit?.(e);\n          target && focus(target);\n          removeListRelatedListeners();\n        }\n      }\n\n      /*~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~+\n      |            + START +            |\n      |          EXIT HANDLERS          |\n      +~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/\n\n      function outListExitHandler(e) {\n        for (let i = 0; i < outListExits.length; ++ i) {\n          const { on, target: origin_target, delay, preventDefault, stopPropagation } = outListExits[i];\n          const target = element(origin_target);\n          return exitHandler(e, on, target, delay, cover, list, root, outListExits[i].if, preventDefault, stopPropagation);\n        }\n      }\n\n      function exitHandlerWithCondition(e, exit, condition) {\n        const { node: origin_node, on, target: origin_target, delay, preventDefault, stopPropagation } = exit;\n        const { data: list, head, tail } = listInfo;\n        const stringOrNode = isFun(origin_node) ? origin_node({ list, head, tail }) : origin_node;\n        const node = element(stringOrNode);\n        const target = element(origin_target);\n\n        if (condition(e, node, exit.key)) // 未设置点击目标\n          return false;\n        const res = exitHandler(e, on, target, delay, cover, list, root, exit.if, preventDefault, stopPropagation);\n        return res !== false;\n      }\n\n      function clickExitHandler(e, exit) {\n\n        const cantClick = (e, node) => (node != null && !node.contains(e.target)) || node == null; // 点击目标不匹配 或者 未设置点击目标\n        return exitHandlerWithCondition(e, exit, cantClick);\n      }\n\n      /** 点击列表的出口 */\n      function clickListExitHandler(e) {\n        for (let i = 0; i < clickExits.length; ++ i) {\n          const isOK = clickExitHandler(e, clickExits[i]);\n          if (isOK) break; // 只生效第一个满足条件的出口\n        }\n      }\n\n      function focusExitHandler(e, exit) {\n\n        const cantFocus = (e, node) => (node != null && e.target !== node) || node == null; // 聚焦目标不匹配 或者 未设置点击目标\n        return exitHandlerWithCondition(e, exit, cantFocus);\n      }\n\n      /** 聚焦列表一个单项而退出 */\n      function focusListExitHandler(e) {\n\n        for (let i = 0; i < focusExits.length; ++ i) {\n          const isOK = focusExitHandler(e, focusExits[i])\n          if (isOK) break;\n        }\n      }\n\n      function keyExitHandler(e, exit) {\n\n        const cantKey = (e, node, key) => (node != null && e.target !== node) || !(matchKeys(key, e, listInfo.prevI, listInfo.curI)); // 聚焦目标不匹配 或者 未设置点击目标\n        return exitHandlerWithCondition(e, exit, cantKey);\n      }\n\n      /** 触发键盘退出列表，退出列表焦点 */\n      function keyListExitHandler(e) {\n        if (e.target === cover) return; // 被封面触发直接返回\n\n        if (disabledEsc && isEscapeEvent(e)) return;\n\n        for (let i = 0; i < keyExits.length; ++ i) {\n          const isOK = keyExitHandler(e, keyExits[i]);\n          if (isOK) return true;\n        }\n      }\n\n      function clickListExitHandler_wild(exit) {\n        return function(e) { clickExitHandler(e, exit); }\n      }\n\n      function focusListExitHandler_wild(exit) {\n        return function(e) { focusExitHandler(e, exit); }\n      }\n\n      /*~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~+\n      |             - END -             |\n      |          EXIT HANDLERS          |\n      +~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/\n    };\n  }\n\n  /** 添加入口事件 */\n  function addEntryListeners() {\n\n    if (!entryListeners.isEmpty) return;\n\n    for (let i = 0; i < entries.length; ++ i) {\n      const entry = entries[i];\n      const { node: origin, on, key, type, target, delay, onExit, preventDefault, stopPropagation } = entry;\n      const ef = entry.if;\n      const types = [].concat(type);\n      const allTypes = [\"keydown\", \"focus\", \"click\"];\n      const node = element(origin);\n\n      types.forEach(type => {\n        if (node && allTypes.includes(type)) {\n\n          /** 是否是键盘事件 */\n          const isKey = type === \"keydown\";\n          /** 如果是键盘事件，则判断键位是否匹配，如果是非键盘事件，则直接返回 true */\n          const ifKey = isKey ? e => matchKeys(key, e, list.prevI, list.curI) : _ => true;\n          entryListeners.push(node, type, toggleHandler(ifKey)); // 保存事件信息\n        }\n      });\n      \n      function toggleHandler(ifKey) {\n        return e => {\n          if (\n            (isFun(ef)\n              ? ef({ e, prev: list.prev, cur: list.cur, prevI: list.prevI, curI: list.curI })\n              : true) &&\n            ifKey(e))\n            toggleEntryAndExit(e);\n        }\n      }\n\n      function toggleEntryAndExit(e) {\n\n        if (trappedList) {\n          if (isFun(onExit)) { // 若存在 onExit，则表示该入口同时是出口，是开关\n            const { list, cover, root } = getKeyNodes(rootNode, subNodes, coverNode, coverIsRoot);\n            exitHandler(e, onExit, target, false, cover, list, root, null, preventDefault, stopPropagation);\n          }\n        }\n        else {\n          entryHandler(e, on, target, delay, preventDefault, stopPropagation);\n          if (removeListenersEachEnter && !manual)\n            entryListeners.removeListeners();\n        }\n      }\n    }\n\n    // flush\n    entryListeners.addListeners();\n  }\n\n  /** 移除监听事件 */\n  function removeListRelatedListeners() {\n\n    // 如果是默认的，没有定义出口的封面，则不移除事件\n    if (isDefaultExitCover) return;\n\n    if (removeListenersEachExit && !manual) {\n      listListeners.removeListeners();\n    }\n  }\n};\n\nexport default focusFly;"],"names":["objToStr","obj","Object","prototype","toString","call","isObj","isFun","fun","getActiveElement","document","activeElement","querySelector","str","element","e","tick","fn","setTimeout","isSelectableInput","node","tagName","toLowerCase","select","isEnterEvent","key","keyCode","isEscapeEvent","isTabEvent","isTabForward","shiftKey","isTabBackward","findLowestCommonAncestorNode","x","y","contains","range","Range","setStartBefore","setEndAfter","collapsed","commonAncestorContainer","getKeysFromStr","firstMinus","indexOf","firstKey","slice","extraStr","replace","keys","reg","res","exec","push","shift","meta","alt","ctrl","commonKey","enableKeyMap","Map","i","length","enableKey","get","focus","tickFocus","matchKeys","prevI","curI","matched","_iterator","_createForOfIteratorHelperLoose","_step","done","value","metaKey","altKey","ctrlKey","convertKeys","defaultKey","concat","map","k","getRootNode","rootStr","listHead","listTail","_element","getListNodes","listAry","list","item","filter","head","tail","getCoverNode","coverStr","coverIsRoot","root","getKeyNodes","originRoot","originList","originCover","_getListNodes","cover","pickNodesAry","acc","cur","isAryNodes","Array","isArray","nodes","n","_extends","splitExits","exits","isInnerRoot","_exits$reduce","reduce","click","click_wild","focus_wild","outList","includeType","type","_e$type","includes","fill","keyExits","clickExits","focusExits","clickExits_wild","focusExits_wild","outListExits","hasClickExits","hasFocusExits","hasKeyExits","getExits","exit","onEscape","enabledCover","trigger","delayToBlur","_tempExits$0$on","_tempExits$","tempExits","o","ele","_e$preventDefault","_e$delay","preventDefault","delay","undefined","t","_onEscape","on","escapeExit","target","delayToProcess","processor","_getDelayType","getDelayType","promiseDelay","callbackDelay","commonDelay","delayRes","then","isFunctionDelay","getTarget","activeIndex","defaultTarget","isDefaultTarget","returnDefaultTarget","gotTarget","last","lastI","ListenersCache","cache","isEmpty","_proto","handler","clean","addListeners","forEach","l","_l$node","addEventListener","removeListeners","_l$node2","removeEventListener","KeyForwardCache","_proto2","has","id","set","remove","_this","ids","TabList","data","_prev","_cur","rangeBeforePrevCallback","rangeBeforeNextCallback","_proto3","update","splice","apply","at","record","recordPrev","recordCur","recordRange","prev","recordSequenceByIdx","_createClass","v","focusFly","_ref","_entries$","offset","arguments","rootNode","subNodes","options","Error","sequence","loop","next","entry","onClick","onMove","origin_cover","initialActive","correctionTarget","delayToFocus","_options$removeListen","removeListenersEachExit","removeListenersEachEnter","_options$addEntryList","addEntryListenersEachExit","_options$stopPropagat","stopPropagation","listStopPropagation","manual","_options$allowSafariT","allowSafariToFocusAfterMousedown","entries","_entry$preventDefault","_entry$delay","onExit","hasNoEntry","toggles","Set","_trigger","_ref2","coverNode","coverEnterKey","enterKey","onEnterCover","onEnter","exitCover","exitsCover","_e$target","isDefaultExitCover","objNext","_objNext$key","isNext","onNext","objPrev","_objPrev$key","isPrev","onPrev","disabledEsc","isClamp","enabledTabSequence","listPreventDefault","trappedList","trappedCover","listListeners","entryListeners","keyForwards","addEntryListeners","hasImmediateEntry","some","_ref3","_getKeyNodes","newRoot","newList","newCover","loadListRelatedListeners","Return","enter","entryHandler","fromInvoke","_loop","_entries$i","invokeType","_ret","tempExit","_getKeyNodes2","originTarget","toExit","_loop2","_exits$i","_ret2","exitHandler","removeListRelatedListeners","removeEntryListeners","addListRelatedListeners","_getKeyNodes3","addForward","forward","opts","_getKeyNodes4","listData","_opts","origin_node","origin_key","origin_target","removeForward","updateList","_newList","newI","fromI","_e$preventDefault2","_e$stopPropagation","Promise","resolve","_","findNodesToLoadListenersAndFocus","_getListNodes2","focusTarget","listInfo","targetIdx","ef","_e$preventDefault3","_e$stopPropagation2","exitListWithTarget","exitListWithoutTarget","focusThenRemoveListeners","removeListenersWithoutFocus","focusTriggerThenRemoveListeners","focusFromDefaultExitCover","useActiveIndex","bind","isTrappedList","keyListMoveHandler","focusNextListItemBySequence","focusNextListItemByRange","_splitExits","clickListExitHandlers_wild","clickListExitHandler_wild","focusListExitHandlers_wild","focusListExitHandler_wild","focusTrapListHandler","blurTrapListHandler","focusTrapCoverHandler","blurTrapCoverHandler","exited","keyListExitHandler","clickListItemHandler","clickListExitHandler","mousedownListItemHandler","focusListExitHandler","_ref4","_ref5","keyCoverHandler","triggeredToggleMousedown","toggle","isMouseDown","isEnterFromCover","relatedTarget","_ref6","_correctionTarget","defaultLast","originGotCorrectionTarget","gotCorrectionTarget","onMoveTargetFromOuter","targetIndex","findIndex","active","isOutRootNode","isActiveCover","isOutList","outListExitHandler","targetItem","find","window","safari","prevBeforeRecord","prevIBeforeRecord","curIBeforeRecord","curBeforeRecord","_useActiveIndex","index_","setIndex","index","Math","max","itemsLen","focused","increasedI","nextI","min","decreasedI","current","needToPreventDefault","_exitsCover$i","origin","exitCoverHandler","_outListExits$i","exitHandlerWithCondition","condition","stringOrNode","clickExitHandler","cantClick","isOK","focusExitHandler","cantFocus","keyExitHandler","cantKey","_loop3","types","allTypes","isKey","ifKey","toggleHandler","toggleEntryAndExit","_getKeyNodes5"],"mappings":"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"}