{"version":3,"file":"ofa.min.mjs","sources":["../packages/ofa-error/main.js","../packages/stanz/public.mjs","../packages/xhear/public.mjs","../packages/stanz/watch.mjs","../packages/stanz/array.mjs","../packages/stanz/main.mjs","../packages/stanz/accessor.mjs","../packages/xhear/accessor.mjs","../packages/xhear/render/render.mjs","../packages/xhear/render/sync.mjs","../packages/xhear/event.mjs","../packages/xhear/array.mjs","../packages/stanz/base.mjs","../packages/xhear/form.mjs","../packages/xhear/css.mjs","../packages/xhear/dollar.mjs","../packages/xhear/register.mjs","../packages/xhear/render/fake-node.mjs","../packages/xhear/render/condition.mjs","../packages/xhear/render/fill.mjs","../packages/xhear/main.mjs","../packages/xhear/util.mjs","../packages/ofa/inject-host.mjs","../packages/xhear/base.mjs","../packages/drill.js/onion.mjs","../packages/drill.js/use.mjs","../packages/drill.js/config.mjs","../packages/drill.js/main.mjs","../packages/drill.js/component.mjs","../packages/drill.js/base.mjs","../packages/ofa/public.mjs","../packages/ofa/link.mjs","../packages/ofa/draw-template.mjs","../packages/ofa/page.mjs","../packages/ofa/comp.mjs","../packages/ofa/app.mjs","../packages/ofa/extend.mjs","../packages/ofa/context.mjs","../packages/ofa/match-var.mjs","../packages/ofa/if.mjs","../packages/ofa/fill.mjs","../packages/ofa/main.mjs"],"sourcesContent":["// const error_origin = \"http://127.0.0.1:5793/errors\";\nconst error_origin = \"https://ofajs.github.io/ofa-errors/errors\";\n\n// 存放错误信息的数据对象\nconst errors = {\n  load_fail: \"Load {url} failed\",\n  load_fail_status: \"Load {url} failed, status code: {status}\",\n  load_module: \"Load module failed, module address: {url}\",\n  no_alias: \"No alias found: {name}, so '{url}' request is invalid\",\n  config_alias_name_error: \"Error in setting alias, must start with '@'\",\n  alias_already: \"Alias ​​'{name}' already exists\",\n  alias_relate_name:\n    \"Alias ​​cannot be configured with relative address, '{name}': '{path}'\",\n  failed_to_set_data: \"Error in setting attribute value {key}\",\n  failed_to_get_data: \"Error in getting {key}\",\n  nexttick_thread_limit:\n    \"nextTick exceeds thread limit, may have an infinite loop, please try to repair or optimize the function\",\n  not_func: \"The callback parameter of the {name} method must be a Function\",\n  not_found_func:\n    \"The '{name}' method was not found on the target {tag}. Please define the '{name}' method on the 'proto' of the component {tag}\",\n  invalid_key:\n    \"The parameters for registering the '{compName}' component are incorrect. The '{name}' on '{targetName}' is already occupied. Please change '{name}' to another name.\",\n  xhear_wrap_no_parent:\n    \"The target element has no parent element, the warp method cannot be used\",\n  xhear_unwrap_has_siblings:\n    \"The target element contains adjacent nodes, the unwrap method cannot be used\",\n  xhear_reander_err: \"Failed to render the tag '{tag}'\",\n  xhear_register_exists:\n    \"The component '{name}' already exists, and this component cannot be registered repeatedly\",\n  xhear_register_err: \"Error in registering the '{tag}' component\",\n  xhear_validate_tag:\n    \"The registered component name '{str}' is incorrect. For the Web Components naming rules, please refer to: https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define#valid_custom_element_names \",\n  xhear_tag_noline:\n    \"The registered component name '{str}' is incorrect and contains at least one '-' character; Web Components For naming rules, please refer to: https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define#valid_custom_element_names \",\n  xhear_regster_data_noset:\n    \"Error in registering component {tag}, custom data cannot have data of type 'Set' or 'Map'\",\n  xhear_regster_data_nofunc:\n    \"Registration component {tag} error, functions cannot appear in custom data, please put the function in 'proto'; or change '{key}' to '_{key}'\",\n  xhear_fakenode_unclose:\n    \"This is an unclosed FakeNode; use the wrong attribute name: {name}\",\n  xhear_fill_tempname: \"Fill component template '{name}' not found\",\n  xhear_eval:\n    \"Template syntax '{name}' error, expression {name}:{arg0}=\\\"{arg1}\\\"\",\n  xhear_listen_already:\n    \"An old listener already exists, and this element is rendering incorrectly. \",\n  xhear_dbfill_noname:\n    \"Only fill components with the 'name' attribute can be rendered in the fill component\",\n  xhear_temp_exist: \"Template '{name}' already exists\",\n  xhear_sync_no_options:\n    \"Direct use of the 'sync' method is not allowed, it is only used for template rendering\",\n  xhear_sync_object_value:\n    \"Cannot use 'sync' to synchronize values ​​of Object type, target {targetName}\",\n  loading_nothing: \"Loading function has no return content\",\n  app_src_change:\n    \"The app element that has been initialized cannot modify the src attribute\",\n  no_cross_access_func:\n    \"To jump to a page across domains, you must set the access function\",\n  access_return_error: \"Jumping to {src} is not allowed\",\n  load_comp_module:\n    \"Error loading component module, wrong module address: {url}\",\n  comp_registered:\n    \"Component '{tag}' has been registered, and the component cannot be registered again\",\n  \"inject-link-rel\":\n    \"The rel attribute value of the link element in the inject-host component can only be 'stylesheet'\",\n  \"use-data-inject\":\n    \"Please do not use data() on the style element in the inject-host, because it will cause serious performance crisis\",\n  load_page_module: \"Loading page module {url} failed\",\n  page_no_defaults:\n    \"The current page ({src}) has been rendered and cannot be rendered again\",\n  not_page_module:\n    \"{src} is not a page module and cannot be set as the src of the page component\",\n  page_failed: \"Loading page failed: {src}\",\n  fetch_temp_err: \"Page module {url} failed to load template {tempSrc}\",\n  page_wrap_fetch: \"Page {before} failed to get the parent page ({current})\",\n  context_change_name:\n    \"Changing the 'name' of {compName} may cause performance issues, please avoid changing this property\",\n  no_provider:\n    \"The consumer named '{name}' was not captured by the corresponding provider\",\n  page_invalid_key:\n    \"The registration parameters of page {src} are incorrect. '{name}' on '{targetName}' is already taken. Please change '{name}' to another name.\",\n  root_provider_exist:\n    \"An exception occurred in the root provider named '{name}'. The root provider component can only appear once\",\n  root_provider_name_change:\n    \"An exception occurred in the root provider named '{name}'. The root provider component cannot change the 'name' attribute\",\n  change_lm_src:\n    \"{tag} element changes 'src' attribute invalid, this attribute can only be set once.\",\n  error_no_owner:\n    \"This data is incorrect, the owner has not registered this object\",\n  circular_data: \"An object with a circular reference\",\n  fill_type:\n    \"'value' of 'x-fill' must be of type Array, the current value is of type {type}\",\n  fill_key_duplicates: \"The key in the fill component is repeated\",\n  render_el_error: \"Rendering element failed, rendering error is {expr}\",\n  temp_multi_child:\n    \"The template element can only contain one child element. If multiple child elements appear, the child elements will be repackaged in a <div> element\",\n  temp_wrap_child:\n    \"The template '{tempName}' contains {len} child elements, which have been wrapped in a div element with the attribute '{wrapName}'.\",\n  app_noback:\n    \"This is already the first page, and the 'back' operation cannot be performed again\",\n  invalidated_inject_host: \"This element will be invalidated in 'inject-host'\",\n  olink_out_app: \"The element of [olink] is only allowed in o-app\",\n  app_noforward:\n    \"This is the last page, you can no longer perform the 'forward' operation\",\n  need_forwards:\n    \"The target o-app does not allow forward operations, please add the '_forwards' attribute to the target; or in the app config file, add 'export const allowForward = true' \",\n  watchuntil_timeout: \"watchUntil timed out, target value not monitored\",\n};\n\nif (globalThis.navigator && navigator.language) {\n  let langFirst = navigator.language.toLowerCase().split(\"-\")[0];\n\n  if (langFirst === \"zh\" && navigator.language.toLowerCase() !== \"zh-cn\") {\n    langFirst = \"zhft\";\n  }\n\n  // 根据用户的语言首字母加载对应的错误匹配库，匹配开发人员报错信息\n  (async () => {\n    if (!globalThis.localStorage) {\n      // 不支持 localStorage，不加载错误库\n      return;\n    }\n\n    if (globalThis.navigator && !navigator.onLine) {\n      // 网络不可用，不加载错误库\n      return;\n    }\n\n    if (localStorage[\"ofa-errors\"]) {\n      const targetLangErrors = JSON.parse(localStorage[\"ofa-errors\"]);\n      Object.assign(errors, targetLangErrors);\n    }\n\n    const errCacheTime = localStorage[\"ofa-errors-time\"];\n\n    if (!errCacheTime || Date.now() > Number(errCacheTime) + 5 * 60 * 1000) {\n      const targetLangErrors = await fetch(`${error_origin}/${langFirst}.json`)\n        .then((e) => e.json())\n        .catch(() => null);\n\n      if (targetLangErrors) {\n        localStorage[\"ofa-errors\"] = JSON.stringify(targetLangErrors);\n        localStorage[\"ofa-errors-time\"] = Date.now();\n      } else {\n        targetLangErrors = await fetch(`${error_origin}/en.json`)\n          .then((e) => e.json())\n          .catch((error) => {\n            return null;\n          });\n      }\n\n      Object.assign(errors, targetLangErrors);\n    }\n  })();\n}\n\nlet isSafari = false;\nif (globalThis.navigator) {\n  isSafari =\n    navigator.userAgent.includes(\"Safari\") &&\n    !navigator.userAgent.includes(\"Chrome\");\n}\n\n/**\n * 根据键、选项和错误对象生成错误对象。\n *\n * @param {string} key - 错误描述的键。\n * @param {Object} [options] - 映射相关值的选项对象。\n * @param {Error} [error] - 原始错误对象。\n * @returns {Error} 生成的错误对象。\n */\nexport const getErr = (key, options, error) => {\n  let desc = getErrDesc(key, options);\n\n  let errObj;\n  if (error) {\n    if (isSafari) {\n      desc += `\\nCaused by: ${error.toString()}\\n`;\n\n      if (error.stack) {\n        desc += `  ${error.stack.replace(/\\n/g, \"\\n    \")}`;\n      }\n    }\n    errObj = new Error(desc, { cause: error });\n  } else {\n    errObj = new Error(desc);\n  }\n  errObj.code = key;\n  return errObj;\n};\n\n/**\n * 根据键、选项生成错误描述\n *\n * @param {string} key - 错误描述的键。\n * @param {Object} [options] - 映射相关值的选项对象。\n * @returns {string} 生成的错误描述。\n */\nexport const getErrDesc = (key, options) => {\n  if (!errors[key]) {\n    return `Error code: \"${key}\", please go to https://github.com/ofajs/ofa-errors to view the corresponding error information`;\n  }\n\n  let desc = errors[key];\n\n  // 映射相关值\n  if (options) {\n    for (let k in options) {\n      desc = desc.replace(new RegExp(`{${k}}`, \"g\"), options[k]);\n    }\n  }\n\n  return desc;\n};\n","import { getErr, getErrDesc } from \"../ofa-error/main.js\";\n\nexport const getRandomId = () => Math.random().toString(32).slice(2);\n\nconst objectToString = Object.prototype.toString;\nexport const getType = (value) =>\n  objectToString\n    .call(value)\n    .toLowerCase()\n    .replace(/(\\[object )|(])/g, \"\");\n\nexport const isObject = (obj) => {\n  const type = getType(obj);\n  return type === \"array\" || type === \"object\";\n};\n\n// export const isDebug = {\n//   value: null,\n// };\n\n// try {\n//   const fileUrl = import.meta.url;\n//   isDebug.value = fileUrl.includes(\"#debug\");\n// } catch (err) {\n//   isDebug.value = false;\n// }\n\n// const TICKERR = \"nexttick_thread_limit\";\n\nlet asyncsCounter = 0;\nlet afterTimer;\nconst tickSets = new Set();\nexport function nextTick(callback) {\n  clearTimeout(afterTimer);\n  afterTimer = setTimeout(() => {\n    asyncsCounter = 0;\n  });\n\n  // if (isDebug.value) {\n  Promise.resolve().then(() => {\n    asyncsCounter++;\n    if (asyncsCounter > 100000) {\n      const err = getErr(\"nexttick_thread_limit\");\n      console.warn(err, \"lastCall => \", callback);\n      throw err;\n    }\n\n    callback();\n  });\n  return;\n  // }\n\n  // const tickId = `t-${getRandomId()}`;\n  // tickSets.add(tickId);\n  // Promise.resolve().then(() => {\n  //   asyncsCounter++;\n  //   // console.log(\"asyncsCounter => \", asyncsCounter);\n  //   if (asyncsCounter > 50000) {\n  //     tickSets.clear();\n\n  //     const err = getErr(TICKERR);\n  //     console.warn(err, \"lastCall => \", callback);\n  //     throw err;\n  //   }\n  //   if (tickSets.has(tickId)) {\n  //     callback();\n  //     tickSets.delete(tickId);\n  //   }\n  // });\n  // return tickId;\n}\n\n// export const clearTick = (id) => tickSets.delete(id);\n\nexport function debounce(func, wait = 0) {\n  let timeout = null;\n  let hisArgs = [];\n\n  return function (...args) {\n    hisArgs.push(...args);\n\n    if (wait > 0) {\n      clearTimeout(timeout);\n      timeout = setTimeout(() => {\n        func.call(this, hisArgs);\n        hisArgs = [];\n        timeout = null;\n      }, wait);\n    } else {\n      if (timeout === null) {\n        timeout = 1;\n        nextTick(() => {\n          timeout = null;\n          const args = hisArgs.slice();\n          hisArgs = [];\n          func.call(this, args);\n        });\n      }\n    }\n  };\n}\n\n// Enhanced methods for extending objects\nexport const extend = (_this, proto, descriptor = {}) => {\n  [\n    ...Object.getOwnPropertyNames(proto),\n    ...Object.getOwnPropertySymbols(proto),\n  ].forEach((k) => {\n    const result = Object.getOwnPropertyDescriptor(proto, k);\n    const { configurable, enumerable, writable, get, set, value } = result;\n\n    if (\"value\" in result) {\n      if (_this.hasOwnProperty(k)) {\n        _this[k] = value;\n      } else {\n        Object.defineProperty(_this, k, {\n          enumerable,\n          configurable,\n          writable,\n          ...descriptor,\n          value,\n        });\n      }\n    } else {\n      Object.defineProperty(_this, k, {\n        enumerable,\n        configurable,\n        ...descriptor,\n        get,\n        set,\n      });\n    }\n  });\n\n  return _this;\n};\n\n// 检测 Proxy 是否被撤销的函数\nexport function dataRevoked(proxyToCheck) {\n  try {\n    // 尝试对 Proxy 做一个无害的操作，例如获取原型\n    Object.getPrototypeOf(proxyToCheck);\n    return false; // 如果没有抛出错误，则 Proxy 没有被撤销\n  } catch (error) {\n    if (error instanceof TypeError) {\n      return true; // 如果抛出了 TypeError，则 Proxy 已经被撤销\n    }\n    // throw error; // 抛出其他类型的错误\n    return false;\n  }\n}\n","import { getErr } from \"../ofa-error/main.js\";\nimport { getType } from \"../stanz/public.mjs\";\n\nexport const isFunction = (val) => getType(val).includes(\"function\");\n\nexport const hyphenToUpperCase = (str) =>\n  str.replace(/-([a-z])/g, (match, p1) => {\n    return p1.toUpperCase();\n  });\n\nexport function capitalizeFirstLetter(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport const isArrayEqual = (arr1, arr2) => {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  for (let i = 0, len = arr1.length; i < len; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n};\n\nexport const toDashCase = (str) => {\n  return str.replace(/[A-Z]/g, function (match) {\n    return \"-\" + match.toLowerCase();\n  });\n};\n\nexport function isEmptyObject(obj) {\n  if (!obj) {\n    return false;\n  }\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport const removeArrayValue = (arr, target) => {\n  const index = arr.indexOf(target);\n  if (index > -1) {\n    arr.splice(index, 1);\n  }\n};\n\nexport const searchEle = (el, expr) => {\n  if (el instanceof HTMLTemplateElement) {\n    return Array.from(el.content.querySelectorAll(expr));\n  }\n  return Array.from(el.querySelectorAll(expr));\n};\n\nexport function mergeObjects(obj1, obj2) {\n  for (let key of Object.keys(obj1)) {\n    if (!obj2.hasOwnProperty(key)) {\n      delete obj1[key];\n    }\n  }\n\n  for (let [key, value] of Object.entries(obj2)) {\n    obj1[key] = value;\n  }\n}\n\nexport const isSafariBrowser = () =>\n  /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nexport const getRenderErrorSupplementary = (data) => {\n  if (!data) {\n    return \"\";\n  }\n\n  let supplementary = \"\";\n  if (data.$host || data.$data) {\n    supplementary = \"Please check the usage of $host or $data, \";\n  }\n\n  const fromSrc = data.$host?.PATH || data.PATH;\n\n  if (fromSrc) {\n    supplementary += `from file: ${fromSrc}, `;\n  }\n\n  return supplementary;\n};\n","import { getRandomId, debounce, dataRevoked } from \"./public.mjs\";\nimport { WATCHS } from \"./main.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\nconst { assign, freeze } = Object;\n\nclass Watcher {\n  constructor(opts) {\n    assign(this, opts);\n    freeze(this);\n  }\n\n  hasModified(k) {\n    if (this.type === \"array\") {\n      return this.path.includes(this.currentTarget.get(k));\n    }\n\n    const keys = k.split(\".\");\n\n    if (this.currentTarget === this.target && this.name === keys[0]) {\n      return true;\n    }\n\n    const modifieds = getModifieds(this, keys);\n\n    const positionIndex = modifieds.indexOf(this.target);\n    if (positionIndex > -1) {\n      const currentKeys = keys.slice(positionIndex + 1);\n\n      if (!currentKeys.length) {\n        // This is listening for changes in the child object itself\n        return true;\n      }\n\n      return this.name === currentKeys[0];\n    }\n\n    // Data belonging to the chain of change\n    return this.path.includes(this.currentTarget[k]);\n  }\n\n  hasReplaced(k) {\n    if (this.type !== \"set\") {\n      return false;\n    }\n\n    const keys = k.split(\".\");\n\n    if (this.target === this.currentTarget && this.name === keys[0]) {\n      return true;\n    }\n\n    const modifieds = getModifieds(this, keys);\n\n    const positionIndex = modifieds.indexOf(this.target);\n\n    if (positionIndex > -1) {\n      const currentKeys = keys.slice(positionIndex + 1);\n\n      return currentKeys[0] === this.name;\n    }\n\n    return false;\n  }\n}\n\nconst getModifieds = (_this, keys) => {\n  const modifieds = [];\n\n  const cloneKeys = keys.slice();\n  let target = _this.currentTarget;\n  while (cloneKeys.length) {\n    const targetKey = cloneKeys.shift();\n    if (target) {\n      target = target[targetKey];\n    }\n\n    modifieds.push(target);\n  }\n\n  return modifieds;\n};\n\nclass Watchers extends Array {\n  constructor(arr) {\n    super(...arr);\n  }\n\n  hasModified(key) {\n    return this.some((e) => e.hasModified(key));\n  }\n\n  hasReplaced(key) {\n    return this.some((e) => e.hasReplaced(key));\n  }\n}\n\nexport const emitUpdate = ({\n  type,\n  currentTarget,\n  target,\n  name,\n  value,\n  oldValue,\n  args,\n  path = [],\n}) => {\n  if (path && path.includes(currentTarget)) {\n    const err = getErr(\"circular_data\");\n\n    console.warn(err, {\n      currentTarget,\n      target,\n      path,\n    });\n\n    return;\n  }\n\n  let options = {\n    type,\n    target,\n    name,\n    oldValue,\n    value,\n  };\n\n  if (type === \"array\") {\n    delete options.value;\n    options.args = args;\n  }\n\n  if (currentTarget._hasWatchs) {\n    const watcher = new Watcher({\n      currentTarget,\n      ...options,\n      path: [...path],\n    });\n\n    currentTarget[WATCHS].forEach((func) => {\n      func(watcher);\n    });\n  }\n\n  currentTarget._update &&\n    currentTarget.owner.forEach((parent) => {\n      emitUpdate({\n        currentTarget: parent,\n        ...options,\n        path: [currentTarget, ...path],\n      });\n    });\n};\n\nexport default {\n  watch(callback) {\n    if (!(callback instanceof Function)) {\n      throw getErr(\"not_func\", { name: \"watch\" });\n    }\n\n    const wid = \"w-\" + getRandomId();\n\n    this[WATCHS].set(wid, callback);\n\n    return wid;\n  },\n\n  unwatch(wid) {\n    return this[WATCHS].delete(wid);\n  },\n\n  watchTick(callback, wait) {\n    if (!(callback instanceof Function)) {\n      throw getErr(\"not_func\", { name: \"watchTick\" });\n    }\n\n    return this.watch(\n      debounce((arr) => {\n        if (dataRevoked(this)) {\n          // console.warn(`The revoked object cannot use watchTick : `, this);\n          return;\n        }\n        arr = arr.filter((e) => {\n          try {\n            e.path.forEach((item) => item.xid);\n          } catch (err) {\n            return false;\n          }\n\n          return true;\n        });\n\n        callback(new Watchers(arr));\n      }, wait || 0)\n    );\n  },\n  // For manual use of emitUpdate\n  refresh(opts) {\n    const options = {\n      ...opts,\n      type: \"refresh\",\n      target: this,\n      currentTarget: this,\n    };\n    emitUpdate(options);\n  },\n  watchUntil(func, outTime = 30000) {\n    return new Promise((resolve, reject) => {\n      let f;\n      let timer;\n      const tid = this.watch(\n        (f = () => {\n          const bool = func();\n          if (bool) {\n            clearTimeout(timer);\n            this.unwatch(tid);\n            resolve(this);\n          }\n        })\n      );\n\n      timer = setTimeout(() => {\n        this.unwatch(tid);\n        const err = getErr(\"watchuntil_timeout\");\n        console.warn(err, func, this);\n        reject(err);\n      }, outTime);\n\n      f();\n    });\n  },\n};\n","import { clearOwner } from \"./accessor.mjs\";\nimport { SELF, PROXY, isxdata } from \"./main.mjs\";\nimport { isObject } from \"./public.mjs\";\nimport { emitUpdate } from \"./watch.mjs\";\n\nconst mutatingMethods = [\n  \"push\",\n  \"pop\",\n  \"shift\",\n  \"unshift\",\n  \"splice\",\n  \"reverse\",\n  \"sort\",\n  \"fill\",\n  \"copyWithin\",\n];\n\nconst holder = Symbol(\"placeholder\");\n\nfunction compareArrays(oldArray, newArray) {\n  const backupNewArray = Array.from(newArray);\n  const backupOldArray = Array.from(oldArray);\n  const deletedItems = [];\n  const addedItems = new Map();\n\n  const oldLen = oldArray.length;\n  for (let i = 0; i < oldLen; i++) {\n    const oldItem = oldArray[i];\n    const newIndex = backupNewArray.indexOf(oldItem);\n    if (newIndex > -1) {\n      backupNewArray[newIndex] = holder;\n    } else {\n      deletedItems.push(oldItem);\n    }\n  }\n\n  const newLen = newArray.length;\n  for (let i = 0; i < newLen; i++) {\n    const newItem = newArray[i];\n    const oldIndex = backupOldArray.indexOf(newItem);\n    if (oldIndex > -1) {\n      backupOldArray[oldIndex] = holder;\n    } else {\n      addedItems.set(i, newItem);\n    }\n  }\n\n  return { deletedItems, addedItems };\n}\n\nconst fn = {};\n\nconst arrayFn = Array.prototype;\n\nmutatingMethods.forEach((methodName) => {\n  if (arrayFn[methodName]) {\n    fn[methodName] = function (...args) {\n      const backupArr = Array.from(this);\n\n      const reval = arrayFn[methodName].apply(this[SELF], args);\n\n      const { deletedItems, addedItems } = compareArrays(backupArr, this);\n\n      // Refactoring objects as proxy instances\n      for (let [key, value] of addedItems) {\n        if (isxdata(value)) {\n          value._owner.push(this);\n        } else if (isObject(value)) {\n          this.__unupdate = 1;\n          this[key] = value;\n          delete this.__unupdate;\n        }\n      }\n\n      for (let item of deletedItems) {\n        clearOwner(item, this);\n      }\n\n      emitUpdate({\n        type: \"array\",\n        currentTarget: this,\n        target: this,\n        args,\n        name: methodName,\n        oldValue: backupArr,\n      });\n\n      if (reval === this[SELF]) {\n        return this[PROXY];\n      }\n\n      return reval;\n    };\n  }\n});\n\n// Object.getOwnPropertyNames(Array.prototype).forEach((methodName) => {\n[\"concat\", \"filter\", \"slice\", \"flatMap\", \"map\"].forEach((methodName) => {\n  if (methodName === \"constructor\" || mutatingMethods.includes(methodName)) {\n    return;\n  }\n\n  const oldFunc = Array.prototype[methodName];\n  if (oldFunc instanceof Function) {\n    fn[methodName] = function (...args) {\n      return oldFunc.call(Array.from(this), ...args);\n    };\n  }\n});\n\nexport default fn;\n","import { extend, getRandomId } from \"./public.mjs\";\nimport { handler as stanzHandler } from \"./accessor.mjs\";\nimport arrayFn from \"./array.mjs\";\nimport watchFn from \"./watch.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\nconst { defineProperties, getOwnPropertyDescriptor, entries } = Object;\n\nexport const SELF = Symbol(\"self\");\nexport const PROXY = Symbol(\"proxy\");\nexport const WATCHS = Symbol(\"watchs\");\nexport const ISXDATA = Symbol(\"isxdata\");\n\nexport const isxdata = (val) => val && !!val[ISXDATA];\n\nexport function constructor(data, handler = stanzHandler) {\n  // const proxySelf = new Proxy(this, handler);\n  let { proxy: proxySelf, revoke } = Proxy.revocable(this, handler);\n\n  // Determines the properties of the listener bubble\n  proxySelf._update = 1;\n\n  let watchs;\n\n  defineProperties(this, {\n    xid: { value: data.xid || getRandomId() },\n    // Save all parent objects\n    _owner: {\n      value: [],\n    },\n    owner: {\n      configurable: true,\n      get() {\n        return new Set(this._owner);\n      },\n    },\n    [ISXDATA]: {\n      value: true,\n    },\n    [SELF]: {\n      configurable: true,\n      get: () => this,\n    },\n    [PROXY]: {\n      configurable: true,\n      get: () => proxySelf,\n    },\n    // Save the object of the listener function\n    [WATCHS]: {\n      get: () => watchs || (watchs = new Map()),\n    },\n    _hasWatchs: {\n      get: () => !!watchs,\n    },\n    _revoke: {\n      value: revoke,\n    },\n    __init_is_array: {\n      value: Array.isArray(data),\n    },\n  });\n\n  Object.keys(data).forEach((key) => {\n    const descObj = getOwnPropertyDescriptor(data, key);\n    let { value, get, set } = descObj;\n\n    if (get || set) {\n      defineProperties(this, {\n        [key]: descObj,\n      });\n    } else {\n      // Set the function directly\n      proxySelf[key] = value;\n    }\n  });\n\n  return proxySelf;\n}\n\nexport default class Stanz extends Array {\n  constructor(data, options) {\n    // options是被继承的类库使用的参数，当前stanz不需要使用\n    super();\n\n    return constructor.call(this, data);\n  }\n\n  // This method is still in the experimental period\n  revoke() {\n    const self = this[SELF];\n\n    if (self._onrevokes) {\n      self._onrevokes.forEach((f) => f());\n      self._onrevokes.length = 0;\n    }\n\n    self.__unupdate = 1;\n\n    self[WATCHS].clear();\n\n    entries(this).forEach(([name, value]) => {\n      if (isxdata(value)) {\n        this[name] = null;\n      }\n    });\n\n    self._owner.forEach((parent) => {\n      entries(parent).forEach(([name, value]) => {\n        if (value === this) {\n          parent[name] = null;\n        }\n      });\n    });\n\n    delete self[SELF];\n    delete self[PROXY];\n    self._revoke();\n  }\n\n  toJSON() {\n    let obj = {};\n\n    let isPureArray = true;\n    let maxId = -1;\n\n    const initIsArray = this.__init_is_array;\n\n    Object.keys(this).forEach((k) => {\n      let val = this[k];\n\n      if (!/\\D/.test(k)) {\n        k = parseInt(k);\n        if (k > maxId) {\n          maxId = k;\n        }\n      } else {\n        isPureArray = false;\n      }\n\n      if (isxdata(val)) {\n        val = val.toJSON();\n      }\n\n      obj[k] = val;\n    });\n\n    if (isPureArray) {\n      obj.length = maxId + 1;\n      obj = Array.from(obj);\n\n      if (!obj.length && !initIsArray) {\n        // 初始化不是数组，就是对象\n        obj = {};\n      }\n    }\n    const xid = this.xid;\n    defineProperties(obj, {\n      xid: {\n        get: () => xid,\n      },\n    });\n\n    return obj;\n  }\n\n  toString() {\n    return JSON.stringify(this.toJSON());\n  }\n\n  extend(obj, desc) {\n    return extend(this, obj, desc);\n  }\n\n  get(key) {\n    if (/\\./.test(key)) {\n      const keys = key.split(\".\");\n      let target = this;\n      for (let i = 0, len = keys.length; i < len; i++) {\n        try {\n          target = target[keys[i]];\n        } catch (error) {\n          const err = getErr(\n            \"failed_to_get_data\",\n            {\n              key: keys.slice(0, i).join(\".\"),\n            },\n            error\n          );\n\n          console.warn(err, {\n            key,\n            self: this,\n          });\n\n          throw err;\n        }\n      }\n\n      return target;\n    }\n\n    return this[key];\n  }\n  set(key, value) {\n    if (/\\./.test(key)) {\n      const keys = key.split(\".\");\n      const lastKey = keys.pop();\n      let target = this;\n      for (let i = 0, len = keys.length; i < len; i++) {\n        try {\n          target = target[keys[i]];\n        } catch (error) {\n          const err = getErr(\n            \"failed_to_get_data\",\n            {\n              key: keys.slice(0, i).join(\".\"),\n            },\n            error\n          );\n\n          console.warn(err, {\n            key,\n            self: this,\n          });\n\n          throw err;\n        }\n      }\n\n      return (target[lastKey] = value);\n    }\n\n    return (this[key] = value);\n  }\n}\n\nStanz.prototype.extend(\n  { ...watchFn, ...arrayFn },\n  {\n    enumerable: false,\n  }\n);\n","import { isObject } from \"./public.mjs\";\nimport Stanz, { PROXY, isxdata } from \"./main.mjs\";\nimport { emitUpdate } from \"./watch.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\n\nconst { defineProperties } = Object;\n\nexport const setData = ({ target, key, value, receiver, type, succeed }) => {\n  const oldValue = receiver[key];\n\n  let data = value;\n  if (isxdata(data)) {\n    if (oldValue === value) {\n      return true;\n    }\n    data._owner.push(receiver);\n  } else if (isObject(value)) {\n    const desc = Object.getOwnPropertyDescriptor(target, key);\n    if (!desc || desc.hasOwnProperty(\"value\")) {\n      data = new (target.__OriginStanz || Stanz)(value, {\n        owner: receiver,\n      });\n\n      data._owner.push(receiver);\n    }\n  }\n\n  const isSame = oldValue === value;\n\n  if (!isSame && isxdata(oldValue)) {\n    clearOwner(oldValue, receiver);\n  }\n\n  const reval = succeed(data);\n\n  !isSame &&\n    // __unupdate: Let the system not trigger an upgrade, system self-use attribute\n    !target.__unupdate &&\n    emitUpdate({\n      type: type || \"set\",\n      target: receiver,\n      currentTarget: receiver,\n      name: key,\n      value,\n      oldValue,\n    });\n\n  return reval;\n};\n\n// 当数据被移除时，清除 owner 数据\nexport const clearOwner = (targetData, owner) => {\n  if (isxdata(targetData)) {\n    const index = targetData._owner.indexOf(owner);\n    if (index > -1) {\n      targetData._owner.splice(index, 1);\n    } else {\n      const err = getErr(\"error_no_owner\");\n      console.warn(err, {\n        owner,\n        mismatch: targetData,\n      });\n      console.error(err);\n    }\n  }\n};\n\nexport const handler = {\n  set(target, key, value, receiver) {\n    if (typeof key === \"symbol\") {\n      return Reflect.set(target, key, value, receiver);\n    }\n\n    // Set properties with _ prefix directly\n    if (/^_/.test(key)) {\n      if (!target.hasOwnProperty(key)) {\n        defineProperties(target, {\n          [key]: {\n            writable: true,\n            configurable: true,\n            value,\n          },\n        });\n      } else {\n        Reflect.set(target, key, value, receiver);\n      }\n      return true;\n    }\n\n    try {\n      return setData({\n        target,\n        key,\n        value,\n        receiver,\n        succeed(data) {\n          return Reflect.set(target, key, data, receiver);\n        },\n      });\n    } catch (error) {\n      const err = getErr(\n        \"failed_to_set_data\",\n        {\n          key,\n        },\n        error\n      );\n\n      console.warn(err, { target, value });\n\n      throw err;\n    }\n  },\n  deleteProperty(target, key) {\n    if (/^_/.test(key) || typeof key === \"symbol\") {\n      return Reflect.deleteProperty(target, key);\n    }\n\n    return setData({\n      target,\n      key,\n      value: undefined,\n      receiver: target[PROXY],\n      type: \"delete\",\n      succeed() {\n        return Reflect.deleteProperty(target, key);\n      },\n    });\n  },\n};\n","import { eleX } from \"./util.mjs\";\nimport { handler as stanzHandler } from \"../stanz/accessor.mjs\";\n\n// const tempEl = document.createElement(\"template\");\n\nexport const handler = {\n  set(target, key, value, receiver) {\n    if (!/\\D/.test(String(key))) {\n      return Reflect.set(target, key, value, receiver);\n    }\n\n    if (target[key] === value) {\n      // Optimise performance;\n      // fix focus remapping caused by 'text' being reset\n      return true;\n    }\n\n    if (key === \"html\") {\n      // When setting HTML values that contain single quotes, they become double quotes when set, leading to an infinite loop of updates.\n      // tempEl.innerHTML = value;\n      // value = tempEl.innerHTML;\n\n      // If custom elements are stuffed, the html values may remain inconsistent\n      return Reflect.set(target, key, value, receiver);\n    }\n\n    return stanzHandler.set(target, key, value, receiver);\n  },\n  get(target, key, receiver) {\n    if (!/\\D/.test(String(key))) {\n      return eleX(target.ele.children[key]);\n    }\n\n    return Reflect.get(target, key, receiver);\n  },\n  ownKeys(target) {\n    let keys = Reflect.ownKeys(target);\n    let len = target.ele.children.length;\n    for (let i = 0; i < len; i++) {\n      keys.push(String(i));\n    }\n    return keys;\n  },\n  getOwnPropertyDescriptor(target, key) {\n    if (typeof key === \"string\" && !/\\D/.test(key)) {\n      return {\n        enumerable: true,\n        configurable: true,\n      };\n    }\n    return Reflect.getOwnPropertyDescriptor(target, key);\n  },\n};\n","import { getErr, getErrDesc } from \"../../ofa-error/main.js\";\nimport { getRandomId, dataRevoked } from \"../../stanz/public.mjs\";\nimport stanzProto from \"../../stanz/watch.mjs\";\nimport { isxdata } from \"../../stanz/main.mjs\";\n\nimport {\n  isFunction,\n  hyphenToUpperCase,\n  isEmptyObject,\n  searchEle,\n  removeArrayValue as remove,\n  getRenderErrorSupplementary,\n} from \"../public.mjs\";\nimport { eleX } from \"../util.mjs\";\n\nexport const renderExtends = {\n  beforeConvert() {},\n  afterConvert() {},\n  beforeRender() {},\n  render() {},\n};\n\nconst getRevokes = (target) => target.__revokes || (target.__revokes = []);\nconst addRevoke = (target, revoke) => getRevokes(target).push(revoke);\n\nconst convertToFunc = (expr, data, opts) => {\n  const funcStr = `\nconst dataRevoked = ${dataRevoked.toString()};\nconst [$event] = $args;\nconst {data, errCall} = this;\nif(dataRevoked(data)){\n  return;\n}\ntry{\n  with(data){\n    return ${expr};\n  }\n}catch(error){\n  if(data.ele && !data.ele.isConnected){\n    return;\n  }\n  if(errCall){\n    const result = errCall(error);\n    if(result !== false){\n      console.error(error);\n    }\n  }else{\n    console.error(error);\n  }\n}\n`;\n  return new Function(\"...$args\", funcStr).bind({ data, ...opts });\n};\n\nexport function render({\n  data,\n  target,\n  template,\n  temps,\n  isRenderSelf, // 是否将当前target元素也渲染处理\n  ...otherOpts\n}) {\n  try {\n    data.watchTick;\n  } catch (e) {\n    // data 已经被回收，不需要继续操作\n    return;\n  }\n\n  const content = template && template.innerHTML;\n\n  if (content) {\n    target.innerHTML = content;\n  }\n\n  renderExtends.beforeRender({\n    target,\n  });\n\n  const texts = searchEle(target, \"xtext\");\n\n  const tasks = [];\n  const revokes = getRevokes(target);\n\n  // Styles with data() function to monitor and correct rendering\n  searchEle(target, \"style\").forEach((el) => {\n    const originStyle = el.innerHTML;\n\n    if (/data\\(.+\\)/.test(originStyle)) {\n      const matchs = Array.from(new Set(originStyle.match(/data\\(.+?\\)/g))).map(\n        (dataExpr) => {\n          const expr = dataExpr.replace(/data\\((.+)\\)/, \"$1\");\n          const func = convertToFunc(expr, data, {\n            errCall: (error) => {\n              const supplementary = getRenderErrorSupplementary(data);\n\n              const err = new Error(\n                `Error evaluating data() expression in style: \"${expr}\", ${supplementary}`,\n                {\n                  cause: error,\n                },\n              );\n\n              console.error(err, {\n                style: originStyle,\n                target,\n              });\n            },\n          });\n\n          return {\n            dataExpr,\n            func,\n          };\n        },\n      );\n\n      const renderStyle = () => {\n        let afterStyle = originStyle;\n\n        matchs.forEach(({ dataExpr, func }) => {\n          afterStyle = afterStyle.replace(dataExpr, func());\n        });\n\n        if (el.innerHTML !== afterStyle) {\n          el.innerHTML = afterStyle;\n        }\n      };\n      tasks.push(renderStyle);\n\n      const revokeStyle = () => {\n        matchs.length = 0;\n        remove(tasks, renderStyle);\n        remove(getRevokes(el), revokeStyle);\n        remove(revokes, revokeStyle);\n      };\n\n      addRevoke(el, revokeStyle);\n      revokes.push(revokeStyle);\n    }\n  });\n\n  // Render text nodes\n  texts.forEach((el) => {\n    const textEl = document.createTextNode(\"\");\n    const { parentNode } = el;\n    parentNode.insertBefore(textEl, el);\n    parentNode.removeChild(el);\n\n    const expr = decodeURIComponent(el.getAttribute(\"expr\"));\n    const func = convertToFunc(expr, data, {\n      errCall: (error) => {\n        const supplementary = getRenderErrorSupplementary(data);\n\n        const err = new Error(\n          `Error evaluating text expression: '${expr}', ${supplementary}`,\n          {\n            cause: error,\n          },\n        );\n\n        console.error(err, {\n          element: textEl,\n          parent: parentNode,\n        });\n\n        return false;\n      },\n    });\n    const renderFunc = () => {\n      const content = func();\n      if (textEl.textContent !== String(content)) {\n        textEl.textContent = content;\n      }\n    };\n    tasks.push(renderFunc);\n\n    const textRevoke = () => {\n      remove(revokes, textRevoke);\n      remove(tasks, renderFunc);\n      remove(getRevokes(textEl), textRevoke);\n    };\n    revokes.push(textRevoke);\n    addRevoke(textEl, textRevoke);\n  });\n\n  const eles = searchEle(target, `[x-bind-data]`);\n\n  if (isRenderSelf && target.matches(`[x-bind-data]`)) {\n    eles.unshift(target);\n  }\n\n  // Render properties based on expressions\n  eles.forEach((el) => {\n    const bindData = JSON.parse(el.getAttribute(\"x-bind-data\"));\n\n    const $el = eleX(el);\n\n    for (let [actionName, arr] of Object.entries(bindData)) {\n      arr.forEach((args) => {\n        try {\n          const { always } = $el[actionName];\n          let afterArgs = [];\n\n          let workResult;\n\n          const work = () => {\n            const [key, expr] = args;\n\n            const func = convertToFunc(expr, data, {\n              errCall: (error) => {\n                const errorExpr = `${actionName === \"prop\" ? \"\" : actionName}:${key}=\"${expr}\"`;\n                const supplementary = getRenderErrorSupplementary(data);\n\n                const err = new Error(\n                  `Error evaluating element expression: '${errorExpr}', ${supplementary}`,\n                  {\n                    cause: error,\n                  },\n                );\n\n                console.error(err, {\n                  element: $el.ele,\n                });\n\n                return false;\n              },\n            });\n\n            afterArgs = [key, func];\n\n            const reval = $el[actionName](...afterArgs, {\n              actionName,\n              target: $el,\n              data,\n              beforeArgs: args,\n              args: afterArgs,\n            });\n\n            renderExtends.render({\n              step: \"refresh\",\n              args,\n              name: actionName,\n              target: $el,\n            });\n\n            return reval;\n          };\n\n          let clearRevs = () => {\n            const { revoke: methodRevoke } = $el[actionName];\n\n            if (methodRevoke) {\n              methodRevoke({\n                actionName,\n                target: $el,\n                data,\n                beforeArgs: args,\n                args: afterArgs,\n                result: workResult,\n              });\n            }\n\n            remove(revokes, clearRevs);\n            remove(getRevokes(el), clearRevs);\n            remove(tasks, work);\n            clearRevs = null;\n          };\n\n          if (always) {\n            // Run every data update\n            tasks.push(work);\n          } else {\n            workResult = work();\n          }\n\n          revokes.push(clearRevs);\n          if (el !== target) {\n            addRevoke(el, clearRevs);\n          }\n        } catch (error) {\n          const err = getErr(\n            \"xhear_eval\",\n            {\n              name: actionName,\n              arg0: args[0],\n              arg1: args[1],\n            },\n            error,\n          );\n          console.warn(err, el);\n          throw err;\n        }\n      });\n    }\n\n    el.removeAttribute(\"x-bind-data\");\n\n    el._bindingRendered = true;\n    el.dispatchEvent(new Event(\"binding-rendered\"));\n  });\n\n  if (!target.__render_temps && !isEmptyObject(temps)) {\n    target.__render_temps = temps;\n  }\n\n  if (target.__render_data && target.__render_data !== data) {\n    const err = getErr(\"xhear_listen_already\");\n\n    console.warn(err, {\n      element: target,\n      old: target.__render_data,\n      new: data,\n    });\n\n    throw err;\n  }\n\n  target.__render_data = data;\n\n  if (tasks.length) {\n    tasks.forEach((f) => f());\n\n    // After the data changes, traverse the rendering tasks\n    const wid = data.watchTick((e) => {\n      if (tasks.length) {\n        tasks.forEach((f) => f());\n      } else {\n        data.unwatch(wid);\n      }\n    });\n  }\n\n  renderExtends.render({ step: \"init\", target });\n}\n\n// XML reserved namespace prefixes; attributes like xmlns:xlink, xlink:href\n// and xml:space are namespace declarations, not template directives\nconst nsAttrPrefixes = new Set([\"xmlns\", \"xml\", \"xlink\"]);\n\nconst convertEl = (el) => {\n  const { tagName } = el;\n\n  if (tagName === \"TEMPLATE\") {\n    return;\n  }\n\n  if (tagName) {\n    // Converting elements\n    const obj = {};\n\n    Array.from(el.attributes).forEach((attr) => {\n      const matchData = /(.*):(.+)/.exec(attr.name);\n\n      if (!matchData) {\n        return;\n      }\n\n      let [, actionName, param0] = matchData;\n\n      if (nsAttrPrefixes.has(actionName)) {\n        return;\n      }\n\n      if (!actionName) {\n        actionName = \"prop\";\n      }\n\n      const targetActions = obj[actionName] || (obj[actionName] = []);\n\n      targetActions.push([param0, attr.value]);\n\n      el.removeAttribute(attr.name);\n    });\n\n    const keys = Object.keys(obj);\n\n    if (keys.length) {\n      el.setAttribute(\"x-bind-data\", JSON.stringify(obj));\n    }\n  }\n\n  Array.from(el.children).forEach(convertEl);\n};\n\nconst searchTemp = (template, expr, func) => {\n  const rearr = Array.from(template.content.querySelectorAll(expr));\n\n  if (func) {\n    rearr.forEach(func);\n  }\n\n  return rearr;\n};\n\nlet isWarned;\n\nexport const convert = (template) => {\n  let temps = {};\n  const codeEls = {};\n\n  renderExtends.beforeConvert({\n    template,\n  });\n\n  searchTemp(template, \"code\", (code) => {\n    const cid = getRandomId();\n    code.setAttribute(\"code-id\", cid);\n\n    codeEls[cid] = code.innerHTML;\n    code.innerHTML = \"\";\n  });\n\n  template.innerHTML = template.innerHTML.replace(\n    /{{([\\s\\S]+?)}}/g,\n    (str, match) => {\n      return `<xtext expr=\"${encodeURIComponent(match)}\"></xtext>`;\n    },\n  );\n\n  const tempName = template.getAttribute(\"name\");\n\n  if (tempName) {\n    const tempChilds = template.content.children;\n    if (tempChilds.length > 1) {\n      if (!isWarned) {\n        const err = getErr(\"temp_multi_child\");\n        console.warn(err, {\n          content: template.content,\n        });\n        isWarned = 1;\n      }\n\n      const wrapName = `wrapper-${tempName}`;\n      template.innerHTML = `<div ${wrapName} style=\"display:contents\">${template.innerHTML}</div>`;\n      console.warn(\n        getErr(\"temp_wrap_child\", {\n          tempName,\n          len: tempChilds.length,\n          wrapName,\n        }),\n      );\n    }\n    temps[tempName] = template;\n    template.remove();\n  }\n\n  searchTemp(template, \"x-fill:not([name])\", (fillEl) => {\n    if (fillEl.querySelector(\"x-fill:not([name])\")) {\n      throw getErr(\"xhear_dbfill_noname\");\n    }\n\n    if (fillEl.innerHTML.trim()) {\n      const tid = `t${getRandomId()}`;\n      fillEl.setAttribute(\"name\", tid);\n\n      const temp = document.createElement(\"template\");\n      temp.setAttribute(\"name\", tid);\n      temp.innerHTML = fillEl.innerHTML;\n      fillEl.innerHTML = \"\";\n      fillEl.appendChild(temp);\n    }\n  });\n\n  searchTemp(template, \"x-if,x-else-if,x-else\", (condiEl) => {\n    const firstChild = condiEl.children[0];\n    if (!firstChild || firstChild.tagName !== \"TEMPLATE\") {\n      condiEl.innerHTML = `<template condition>${condiEl.innerHTML}</template>`;\n    }\n  });\n\n  searchTemp(template, \"template\", (e) => {\n    const newTemps = convert(e);\n\n    Object.keys(newTemps).forEach((tempName) => {\n      if (temps[tempName]) {\n        throw getErr(\"xhear_temp_exist\", {\n          name: tempName,\n        });\n      }\n    });\n\n    temps = { ...temps, ...newTemps };\n  });\n\n  Array.from(template.content.children).forEach((el) => convertEl(el));\n\n  // Restore the contents of the code\n  for (let [key, value] of Object.entries(codeEls)) {\n    searchTemp(template, `[code-id=\"${key}\"]`, (el) => {\n      el.removeAttribute(\"code-id\");\n      // el.innerHTML = htmlEncode(value);\n      el.innerHTML = value;\n    });\n  }\n\n  renderExtends.afterConvert({\n    template,\n    temps,\n  });\n\n  return temps;\n};\n\nconst getVal = (val) => {\n  if (isFunction(val)) {\n    return val();\n  }\n\n  return val;\n};\n\nconst defaultData = {\n  prop(...args) {\n    let [name, value] = args;\n\n    if (args.length === 1) {\n      return this[name];\n    }\n\n    value = getVal(value);\n    name = hyphenToUpperCase(name);\n\n    this.set(name, value);\n  },\n  attr(...args) {\n    let [name, value] = args;\n\n    const { ele } = this;\n\n    if (args.length === 1) {\n      return ele.getAttribute(name);\n    }\n\n    value = getVal(value);\n\n    if (value === false) {\n      value = null;\n    } else if (value === true) {\n      value = \"\";\n    }\n\n    if (value === null || value === undefined) {\n      ele.removeAttribute(name);\n    } else if (ele.getAttribute(name) != value) {\n      ele.setAttribute(name, value);\n    }\n  },\n  class(...args) {\n    let [name, value] = args;\n\n    if (args.length === 1) {\n      return this.ele.classList.contains(name);\n    }\n\n    value = getVal(value);\n\n    if (value) {\n      this.ele.classList.add(name);\n    } else {\n      this.ele.classList.remove(name);\n    }\n  },\n  watch(...args) {\n    if (args.length < 3) {\n      return stanzProto.watch.apply(this, args);\n    }\n\n    const options = args[2];\n    const { beforeArgs, data: target } = options;\n    const [selfPropName, targetPropName] = beforeArgs;\n    const propName = hyphenToUpperCase(selfPropName);\n\n    const setData = () => {\n      let val = this.get(propName);\n      target.set(targetPropName, val);\n    };\n\n    const wid = this.watch((e) => {\n      if (e.hasModified(propName)) {\n        setData();\n      }\n    });\n\n    // Initialize once\n    setData();\n\n    return () => {\n      this.unwatch(wid);\n    };\n  },\n};\n\ndefaultData.prop.always = true;\ndefaultData.attr.always = true;\ndefaultData.class.always = true;\n\ndefaultData.prop.revoke = ({ target, args, $ele, data }) => {\n  const propName = args[0];\n\n  const oldVal = target.get(propName);\n  if (isxdata(oldVal)) {\n    target.set(propName, {});\n  }\n};\n\ndefaultData.watch.revoke = (e) => {\n  e.result();\n  const propName = e.beforeArgs[1];\n\n  const oldVal = e.data.get(propName);\n  if (isxdata(oldVal)) {\n    e.data.set(propName, {});\n  }\n};\n\nexport default defaultData;\n","import { hyphenToUpperCase } from \"../public.mjs\";\nimport { dataRevoked } from \"../../stanz/public.mjs\";\nimport { getErr } from \"../../ofa-error/main.js\";\n\nconst syncFn = {\n  sync(propName, targetName, options) {\n    if (!options) {\n      throw getErr(\"xhear_sync_no_options\");\n    }\n\n    [propName, targetName] = options.beforeArgs;\n\n    propName = hyphenToUpperCase(propName);\n    targetName = hyphenToUpperCase(targetName);\n\n    const { data } = options;\n\n    const val = data.get(targetName);\n\n    if (val instanceof Object) {\n      const err = getErr(\"xhear_sync_object_value\", { targetName });\n      console.warn(err, data);\n      throw err;\n    }\n\n    this[propName] = data.get(targetName);\n\n    const wid1 = this.watch((e) => {\n      if (e.hasModified(propName)) {\n        try {\n          const value = this.get(propName);\n          data.set(targetName, value);\n        } catch (err) {\n          // Errors are reported when a proxy is revoked.\n          // console.warn(err);\n        }\n      }\n    });\n\n    const wid2 = data.watch((e) => {\n      if (e.hasModified(targetName)) {\n        try {\n          const value = data.get(targetName);\n          this.set(propName, value);\n        } catch (err) {\n          // Errors are reported when a proxy is revoked.\n          // console.warn(err);\n        }\n      }\n    });\n\n    return () => {\n      this.unwatch(wid1);\n      if (!dataRevoked(data)) {\n        data.unwatch(wid2);\n      }\n    };\n  },\n};\n\nsyncFn.sync.revoke = (e) => {\n  e.result();\n};\n\nexport default syncFn;\n","import { getRenderErrorSupplementary } from \"./public.mjs\";\n\nfunction getBindOptions(name, func, options) {\n  let revoker;\n  if (options) {\n    const beforeValue = options.beforeArgs[1];\n\n    if (!/[^\\d\\w_\\$\\.]/.test(beforeValue)) {\n      func = options.data.get(beforeValue);\n      if (!func) {\n        const supplementary = getRenderErrorSupplementary(options.data);\n\n        const err = new Error(\n          `Event binding error: function \"${beforeValue}\" not found in expression on:${name}=\"${beforeValue}\", ${supplementary}`,\n        );\n\n        console.error(err, {\n          target: options.data,\n        });\n\n        // throw err;\n      } else {\n        func = func.bind(options.data);\n      }\n    }\n\n    revoker = () => this.ele.removeEventListener(name, func);\n  }\n\n  return { revoker, name, func };\n}\n\nconst eventFn = {\n  on(...args) {\n    const { revoker, name, func } = getBindOptions.call(this, ...args);\n\n    this.ele.addEventListener(name, func);\n\n    if (revoker) {\n      return revoker;\n    }\n\n    return this;\n  },\n  one(...args) {\n    const { revoker, name, func } = getBindOptions.call(this, ...args);\n\n    let callback = (e) => {\n      this.off(name, callback);\n      func(e);\n    };\n\n    this.ele.addEventListener(name, callback);\n\n    if (revoker) {\n      return revoker;\n    }\n\n    return this;\n  },\n  off(name, func) {\n    this.ele.removeEventListener(name, func);\n    return this;\n  },\n  emit(name, opts) {\n    const options = { ...opts };\n\n    let data;\n    if (options.hasOwnProperty(\"data\")) {\n      data = options.data;\n      delete options.data;\n    }\n\n    let event;\n\n    if (name instanceof Event) {\n      event = name;\n    } else if (name) {\n      event = new Event(name, { bubbles: true, ...options });\n    }\n\n    event.data = data;\n\n    this.ele.dispatchEvent(event);\n\n    return this;\n  },\n};\n\neventFn.on.revoke = (e) => {\n  e.result();\n};\n\neventFn.one.revoke = (e) => {\n  e.result();\n};\n\nexport default eventFn;\n","import { isFunction } from \"./public.mjs\";\nimport { createXEle, eleX } from \"./util.mjs\";\nimport { emitUpdate } from \"../stanz/watch.mjs\";\n\nconst originSplice = (ele, start, count, ...items) => {\n  const { children } = ele;\n  if (start < 0) {\n    start += ele.children.length;\n  }\n\n  if (count === undefined) {\n    count = ele.children.length - start;\n  }\n\n  const removes = [];\n  for (let i = start, len = start + count; i < len; i++) {\n    const target = children[i];\n    removes.push(target);\n  }\n\n  removes.forEach((el) => el && el.remove());\n\n  if (items.length) {\n    const frag = document.createDocumentFragment();\n    items.forEach((e) => frag.append(createXEle(e).ele));\n\n    const positionEle = children[start];\n    if (positionEle) {\n      ele.insertBefore(frag, positionEle);\n    } else {\n      ele.appendChild(frag);\n    }\n  }\n\n  return removes;\n};\n\nconst mutatingMethods = [\n  \"push\",\n  \"pop\",\n  \"shift\",\n  \"unshift\",\n  \"splice\",\n  \"reverse\",\n  \"sort\",\n  \"fill\",\n  \"copyWithin\",\n];\n\nconst likeArrayFn = {\n  push(...args) {\n    const { ele } = this;\n\n    originSplice(ele, ele.children.length, 0, ...args);\n\n    emitUpdate({\n      type: \"array\",\n      currentTarget: this,\n      target: this,\n      args,\n      name: \"push\",\n    });\n\n    return ele.children.length;\n  },\n\n  pop(...args) {\n    const { ele } = this;\n\n    const targets = originSplice(ele, ele.children.length - 1, 1, ...args);\n\n    emitUpdate({\n      type: \"array\",\n      currentTarget: this,\n      target: this,\n      args,\n      name: \"pop\",\n    });\n\n    return eleX(targets[0]);\n  },\n\n  shift(...args) {\n    const { ele } = this;\n\n    const targets = originSplice(ele, 0, 1, ...args);\n\n    emitUpdate({\n      type: \"array\",\n      currentTarget: this,\n      target: this,\n      args,\n      name: \"shift\",\n    });\n\n    return eleX(targets[0]);\n  },\n\n  unshift(...args) {\n    const { ele } = this;\n\n    originSplice(ele, 0, 0, ...args);\n\n    emitUpdate({\n      type: \"array\",\n      currentTarget: this,\n      target: this,\n      args,\n      name: \"unshift\",\n    });\n\n    return ele.children.length;\n  },\n  splice(...args) {\n    const reVal = originSplice(this.ele, ...args);\n\n    emitUpdate({\n      type: \"array\",\n      currentTarget: this,\n      target: this,\n      args,\n      name: \"splice\",\n    });\n\n    return reVal.map(eleX);\n  },\n  reverse(...args) {\n    const childs = Array.from(this.ele.childNodes);\n\n    arrayFn.reverse.call(childs, ...args);\n\n    const frag = document.createDocumentFragment();\n\n    childs.forEach((ele) => {\n      // Identify internal operations to prevent detached corrections\n      ele.__internal = 1;\n      frag.append(ele);\n    });\n\n    this.ele.append(frag);\n\n    childs.forEach((ele) => {\n      delete ele.__internal;\n    });\n\n    emitUpdate({\n      type: \"array\",\n      currentTarget: this,\n      target: this,\n      args,\n      name: \"reverse\",\n    });\n\n    return this;\n  },\n  sort(...args) {\n    const childs = Array.from(this.ele.children).map(eleX);\n\n    arrayFn.sort.call(childs, ...args);\n\n    const frag = document.createDocumentFragment();\n\n    childs.forEach((e) => {\n      e.ele.__internal = 1;\n      frag.append(e.ele);\n    });\n\n    this.ele.append(frag);\n\n    childs.forEach((e) => {\n      delete e.ele.__internal;\n    });\n\n    emitUpdate({\n      type: \"array\",\n      currentTarget: this,\n      target: this,\n      args,\n      name: \"sort\",\n    });\n\n    return this;\n  },\n};\n\nconst arrayFn = Array.prototype;\n\nObject.keys(Object.getOwnPropertyDescriptors(arrayFn)).forEach((key) => {\n  if (\n    key === \"constructor\" ||\n    key === \"length\" ||\n    mutatingMethods.includes(key)\n  ) {\n    return;\n  }\n\n  const targetFunc = arrayFn[key];\n\n  if (isFunction(targetFunc)) {\n    likeArrayFn[key] = function (...args) {\n      return targetFunc.apply(Array.from(this.ele.children).map(eleX), args);\n    };\n  }\n});\n\nexport default class LikeArray {}\n\nfor (let [name, value] of Object.entries(likeArrayFn)) {\n  Object.defineProperty(LikeArray.prototype, name, {\n    value,\n  });\n}\n","import Stanz, { isxdata } from \"./main.mjs\";\n\nconst stanz = (data) => {\n  return new Stanz(data);\n};\n\nObject.assign(stanz, { is: isxdata });\n\nexport default stanz;\n\nexport { stanz, Stanz };\n","import stanz from \"../stanz/base.mjs\";\nimport { emitUpdate } from \"../stanz/watch.mjs\";\nimport { mergeObjects, searchEle } from \"./public.mjs\";\n\nconst { defineProperty, assign } = Object;\n\nconst hasValueEleNames = [\"input\", \"textarea\", \"select\"];\n\nconst setKeys = (keys, $ele) => {\n  const { ele } = $ele;\n\n  keys.forEach((k) => {\n    if (k in ele) {\n      let isNum = false;\n      defineProperty($ele, k, {\n        enumerable: true,\n        get: () => {\n          let val = ele[k];\n          if (isNum) {\n            if (/\\D/.test(val)) {\n              isNum = false;\n            } else {\n              val = Number(val);\n            }\n          }\n          return val;\n        },\n        set: (val) => {\n          isNum = typeof val === \"number\";\n          ele[k] = val;\n        },\n      });\n    }\n  });\n};\n\nconst formEleNames = new Set([\n  ...hasValueEleNames,\n  \"option\",\n  \"button\",\n  \"label\",\n  \"fieldset\",\n  \"legend\",\n  \"form\",\n]);\n\nconst bindProp = ($ele, opts = {}) => {\n  const { name: keyName, type } = opts;\n\n  const { ele } = $ele;\n  let old = ele[keyName];\n\n  $ele.on(type, () => {\n    emitUpdate({\n      type: \"set\",\n      target: $ele,\n      currentTarget: $ele,\n      name: keyName,\n      value: ele[keyName],\n      oldValue: old,\n    });\n\n    old = ele[keyName];\n  });\n};\n\nexport const initFormEle = ($ele) => {\n  const { tag } = $ele;\n\n  if (!formEleNames.has(tag)) {\n    return;\n  }\n\n  setKeys([\"type\", \"name\", \"disabled\"], $ele);\n\n  switch (tag) {\n    case \"input\":\n      initInput($ele);\n      break;\n    case \"textarea\":\n      setKeys([\"value\"], $ele);\n      bindProp($ele, { name: \"value\", type: \"input\" });\n      break;\n    case \"option\":\n      setKeys([\"selected\", \"value\"], $ele);\n      break;\n    case \"select\":\n      {\n        const { ele } = $ele;\n        $ele.__unupdate = 1;\n        $ele.value = ele.value;\n        delete $ele.__unupdate;\n\n        $ele.watch(() => {\n          ele.value = $ele.value;\n        });\n        $ele.on(\"change\", () => {\n          $ele.value = ele.value;\n        });\n      }\n      break;\n  }\n};\n\nconst initInput = ($ele) => {\n  const type = $ele.attr(\"type\");\n\n  switch (type) {\n    case \"file\":\n      setKeys([\"multiple\", \"files\"], $ele);\n      bindProp($ele, { name: \"files\", type: \"change\" });\n      break;\n    case \"checkbox\":\n      setKeys([\"checked\", \"multiple\", \"value\"], $ele);\n      bindProp($ele, { name: \"checked\", type: \"change\" });\n      break;\n    case \"radio\":\n      setKeys([\"checked\", \"value\"], $ele);\n      bindProp($ele, { name: \"checked\", type: \"change\" });\n      break;\n    case \"text\":\n    default:\n      setKeys([\"placeholder\", \"value\"], $ele);\n      bindProp($ele, { name: \"value\", type: \"input\" });\n      break;\n  }\n};\n\nconst getFormData = (target, expr) => {\n  const data = {};\n\n  target.all(expr).forEach(($el) => {\n    const { name, tag, ele } = $el;\n\n    if (tag === \"input\") {\n      switch ($el.type) {\n        case \"checkbox\":\n          if (!(name in data)) {\n            data[name] = [];\n          }\n\n          if (ele.checked) {\n            data[name].push(ele.value);\n          }\n          break;\n        case \"radio\":\n          if (ele.checked) {\n            data[name] = ele.value;\n          }\n          break;\n        case \"file\":\n          data[name] = ele.files;\n          break;\n        default:\n          data[name] = ele.value;\n      }\n    } else if (tag === \"textarea\") {\n      data[name] = ele.value;\n    } else if (tag === \"select\") {\n      const selectedsOpt = searchEle(ele, `option:checked`);\n\n      if (ele.multiple) {\n        data[name] = selectedsOpt.map((e) => e.value || e.textContent);\n      } else {\n        const [e] = selectedsOpt;\n        data[name] = e.value || e.textContent;\n      }\n    } else {\n      // custom element\n      data[name] = $el.value;\n    }\n  });\n\n  return data;\n};\n\nexport default {\n  // This method is still being tested\n  formData(expr, opts = { wait: 200 }) {\n    const data = stanz({});\n\n    assign(data, getFormData(this, expr || \"input,select,textarea\"));\n\n    const wid1 = this.watchTick((e) => {\n      const newData = getFormData(this, expr || \"input,select,textarea\");\n      mergeObjects(data, newData);\n    }, opts.wait);\n\n    const wid2 = data.watchTick((e) => {\n      resetValue(this, expr || \"input,select,textarea\", data);\n    });\n\n    const _this = this;\n\n    const oldRevoke = data.revoke;\n    data.extend({\n      revoke() {\n        _this.unwatch(wid1);\n        data.unwatch(wid2);\n        oldRevoke.call(this);\n      },\n    });\n\n    return data;\n  },\n};\n\nfunction resetValue(el, expr, data) {\n  const eles = el.all(expr);\n\n  Object.keys(data).forEach((name) => {\n    const targets = eles.filter((e) => e.attr(\"name\") === name);\n\n    if (targets.length === 0) {\n      return;\n    }\n\n    const val = data[name];\n    const target = targets[0];\n    const type = target.attr(\"type\");\n    if (targets.length === 1) {\n      let isUseValue = true;\n\n      if (target.tag === \"input\" && (type === \"radio\" || type === \"checkbox\")) {\n        isUseValue = false;\n      }\n\n      if (isUseValue) {\n        if (target.value !== val) {\n          target.value = val;\n        }\n        return;\n      }\n    }\n\n    // checkbox or radio\n    targets.forEach((e) => {\n      switch (e.attr(\"type\")) {\n        case \"radio\":\n          if (e.value === val) {\n            e.checked = true;\n          } else {\n            e.checked = false;\n          }\n          break;\n        case \"checkbox\":\n          e.checked = val.includes(e.value);\n          break;\n      }\n    });\n  });\n}\n","import { getType } from \"../stanz/public.mjs\";\n\nconst cssHandler = {\n  set(target, key, value, receiver) {\n    target._ele.style[key] = value;\n    Reflect.set(target, key, value, receiver);\n    return true;\n  },\n  get(target, key, receiver) {\n    if (key === \"length\") {\n      return 0;\n    }\n\n    if (key.startsWith && key.startsWith(\"--\")) {\n      return getComputedStyle(target._ele).getPropertyValue(key);\n    }\n\n    const { style } = target._ele;\n    if (Array.from(style).includes(key)) {\n      return style[key];\n    }\n\n    return getComputedStyle(target._ele)[key];\n  },\n};\n\nclass XhearCSS {\n  constructor($el) {\n    const obj = {};\n\n    Object.defineProperty(obj, \"_ele\", {\n      enumerable: false,\n      get: () => $el.ele,\n    });\n\n    const { style } = $el.ele;\n\n    Array.from(style).forEach((key) => {\n      obj[key] = style[key];\n    });\n\n    return ($el._css = new Proxy(obj, cssHandler));\n  }\n}\n\nexport default {\n  get css() {\n    return new XhearCSS(this);\n  },\n  set css(d) {\n    if (getType(d) == \"string\") {\n      this.ele.style = d;\n      return;\n    }\n\n    let { style } = this;\n\n    // Covering the old style\n    let nextKeys = Object.keys(d);\n\n    // Clear the unused key\n    Array.from(style).forEach((k) => {\n      if (!nextKeys.includes(k)) {\n        style[k] = \"\";\n      }\n    });\n\n    Object.assign(style, d);\n  },\n};\n","import { eleX, createXEle } from \"./util.mjs\";\nimport { getType } from \"../stanz/public.mjs\";\n\nexport default function $(expr) {\n  if (getType(expr) === \"string\" && !/<.+>/.test(expr)) {\n    const ele = document.querySelector(expr);\n\n    return eleX(ele);\n  }\n\n  return createXEle(expr);\n}\n\nObject.defineProperties($, {\n  // Convenient objects for use as extensions\n  extensions: {\n    value: {},\n  },\n});\n","import { getErr, getErrDesc } from \"../ofa-error/main.js\";\nimport { getType } from \"../stanz/public.mjs\";\nimport {\n  hyphenToUpperCase,\n  capitalizeFirstLetter,\n  toDashCase,\n} from \"./public.mjs\";\nimport { convert, render } from \"./render/render.mjs\";\nimport { eleX } from \"./util.mjs\";\nimport $ from \"./dollar.mjs\";\n\nconst COMPS = {};\n\nexport const renderElement = ({ defaults, ele, template, temps }) => {\n  let $ele;\n\n  try {\n    const data = {\n      ...deepCopyData(defaults.data, defaults.tag),\n      ...defaults.attrs,\n    };\n\n    defaults.attrs &&\n      Object.keys(defaults.attrs).forEach((name) => {\n        const value = ele.getAttribute(toDashCase(name));\n        if (value !== null && value !== undefined) {\n          data[name] = value;\n        }\n      });\n\n    $ele = eleX(ele);\n\n    defaults.proto && $ele.extend(defaults.proto, { enumerable: false });\n\n    for (let [key, value] of Object.entries(data)) {\n      if (!$ele.hasOwnProperty(key)) {\n        $ele[key] = value;\n      }\n    }\n\n    if (defaults.temp) {\n      const root = ele.attachShadow({ mode: \"open\" });\n\n      root.innerHTML = template.innerHTML;\n\n      render({\n        target: root,\n        data: $ele,\n        temps,\n      });\n    }\n\n    defaults.ready && defaults.ready.call($ele);\n  } catch (error) {\n    throw getErr(\n      \"xhear_reander_err\",\n      {\n        tag: ele.tagName.toLowerCase(),\n      },\n      error\n    );\n  }\n\n  if (defaults.watch) {\n    const wen = Object.entries(defaults.watch);\n\n    $ele.watchTick((e) => {\n      for (let [name, func] of wen) {\n        const names = name.split(\",\");\n\n        if (names.length >= 2) {\n          if (names.some((name) => e.hasModified(name))) {\n            func.call(\n              $ele,\n              names.map((name) => $ele[name]),\n              {\n                watchers: e,\n              }\n            );\n          }\n        } else {\n          if (e.hasModified(name)) {\n            func.call($ele, $ele[name], {\n              watchers: e,\n            });\n          }\n        }\n      }\n    });\n\n    for (let [name, func] of wen) {\n      const names = name.split(\",\");\n      if (names.length >= 2) {\n        func.call(\n          $ele,\n          names.map((name) => $ele[name]),\n          {}\n        );\n      } else {\n        func.call($ele, $ele[name], {});\n      }\n    }\n  }\n};\n\nexport const register = (opts = {}) => {\n  const defaults = {\n    // Registered component name\n    tag: \"\",\n    // Body content string\n    temp: \"\",\n    // Initialization data after element creation\n    data: {},\n    // Values that will not be traversed\n    proto: {},\n    // Keys bound to attributes\n    // attrs: {},\n    // The listener function for the element\n    // watch: {},\n    // Function triggered when the component is created (data initialization complete)\n    // created() { },\n    // Function triggered after component data initialization is complete (initial rendering completed)\n    // ready() { },\n    // Functions that are added to the document trigger\n    // attached() { },\n    // Functions triggered by moving out of the document\n    // detached() { },\n    // The container element is changed\n    // slotchange() { }\n    ...opts,\n  };\n\n  const { fn, extensions } = $;\n  if (fn) {\n    // 检查 proto 和 data 上的key，是否和fn上的key冲突\n    Object.keys(defaults.data).forEach((name) => {\n      if (fn.hasOwnProperty(name)) {\n        throw getErr(\"invalid_key\", {\n          compName: defaults.tag,\n          targetName: \"data\",\n          name,\n        });\n      }\n    });\n    Object.keys(defaults.proto).forEach((name) => {\n      if (fn.hasOwnProperty(name)) {\n        console.warn(\n          getErrDesc(\"invalid_key\", {\n            compName: defaults.tag,\n            targetName: \"proto\",\n            name,\n          }),\n          opts\n        );\n      }\n    });\n  }\n\n  let template, temps, name;\n\n  try {\n    validateTagName(defaults.tag);\n\n    defaults.data = deepCopyData(defaults.data, defaults.tag);\n\n    name = capitalizeFirstLetter(hyphenToUpperCase(defaults.tag));\n\n    if (COMPS[name]) {\n      throw getErr(\"xhear_register_exists\", { name });\n    }\n\n    template = document.createElement(\"template\");\n    template.innerHTML = defaults.temp;\n    temps = convert(template);\n  } catch (error) {\n    throw getErr(\"xhear_register_err\", { tag: defaults.tag }, error);\n  }\n\n  const getAttrKeys = (attrs) => {\n    let attrKeys;\n\n    if (attrs instanceof Array) {\n      attrKeys = [...attrs];\n    } else {\n      attrKeys = Object.keys(attrs);\n    }\n\n    return attrKeys;\n  };\n\n  const XElement = (COMPS[name] = class extends HTMLElement {\n    constructor(...args) {\n      super(...args);\n\n      const $ele = eleX(this);\n\n      defaults.created && defaults.created.call($ele);\n\n      if (defaults.attrs) {\n        const attrKeys = getAttrKeys(defaults.attrs);\n\n        // fix self attribule value\n        $ele.watchTick((e) => {\n          attrKeys.forEach((key) => {\n            if (e.hasModified(key)) {\n              const val = $ele[key];\n              const attrName = toDashCase(key);\n              const oldVal = this.getAttribute(attrName);\n              if (val === null || val === undefined) {\n                this.removeAttribute(attrName);\n              } else if (oldVal !== val) {\n                let reval = val;\n\n                const valType = getType(val);\n\n                if (valType === \"number\" && oldVal === String(val)) {\n                  // Setting the number will cause an infinite loop\n                  return;\n                }\n                if (valType === \"object\") {\n                  // Setting the object will cause an infinite loop\n                  reval = JSON.stringify(reval);\n                  if (reval === oldVal) {\n                    return;\n                  }\n                }\n\n                this.setAttribute(attrName, reval);\n              }\n            }\n          });\n        });\n\n        // The data set before initialization needs to be reflected in attrs\n        attrKeys.forEach((key) => {\n          if (\n            $ele[key] !== null &&\n            $ele[key] !== undefined &&\n            $ele[key] !== defaults.attrs[key]\n          ) {\n            this.setAttribute(toDashCase(key), $ele[key]);\n          }\n        });\n      }\n\n      renderElement({\n        defaults,\n        ele: this,\n        template,\n        temps,\n      });\n    }\n\n    connectedCallback() {\n      if (isInternal(this)) {\n        return;\n      }\n\n      const $ele = eleX(this);\n      defaults.attached && defaults.attached.call($ele);\n      $ele.emit(\"attached\", { bubbles: false });\n      extensions.afterAttached && extensions.afterAttached($ele);\n    }\n\n    disconnectedCallback() {\n      if (isInternal(this)) {\n        return;\n      }\n\n      const $ele = eleX(this);\n      defaults.detached && defaults.detached.call($ele);\n      $ele.emit(\"detached\", { bubbles: false });\n      extensions.afterDetached && extensions.afterDetached($ele);\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n      const $ele = eleX(this);\n\n      if (!/[^\\d.]/.test(newValue) && typeof $ele[name] === \"number\") {\n        newValue = Number(newValue);\n      }\n\n      $ele[hyphenToUpperCase(name)] = newValue;\n    }\n\n    static get observedAttributes() {\n      return getAttrKeys(defaults.attrs || {}).map((e) => toDashCase(e));\n    }\n  });\n\n  if (document.readyState !== \"loading\") {\n    customElements.define(defaults.tag, XElement);\n  } else {\n    const READYSTATE = \"readystatechange\";\n    let f;\n    document.addEventListener(\n      READYSTATE,\n      (f = () => {\n        customElements.define(defaults.tag, XElement);\n        document.removeEventListener(READYSTATE, f);\n      })\n    );\n  }\n};\n\n// 判断元素是否临时脱离节点，防止数组操作导致元素触发detached问题\nfunction isInternal(ele) {\n  let target = ele;\n\n  while (target) {\n    if (target.__internal) {\n      return true;\n    }\n\n    target = target.parentNode || target.host;\n\n    if (!target || (target.tagName && target.tagName === \"BODY\")) {\n      break;\n    }\n  }\n\n  return false;\n}\n\nfunction validateTagName(str) {\n  // Check if the string has at least one '-' character\n  if (!str.includes(\"-\")) {\n    throw getErr(\"xhear_tag_noline\", { str });\n  }\n\n  // Check if the string starts or ends with '-'\n  if (str.charAt(0) === \"-\" || str.charAt(str.length - 1) === \"-\") {\n    throw getErr(\"xhear_validate_tag\", { str });\n  }\n\n  // Check if the string has consecutive '-' characters\n  for (let i = 0; i < str.length - 1; i++) {\n    if (str.charAt(i) === \"-\" && str.charAt(i + 1) === \"-\") {\n      throw getErr(\"xhear_validate_tag\", { str });\n    }\n  }\n\n  return true;\n}\n\nfunction deepCopyData(obj, tag = \"\", keyName) {\n  if (obj instanceof Set || obj instanceof Map) {\n    throw getErr(\"xhear_regster_data_noset\", { tag });\n  }\n\n  if (obj instanceof Function) {\n    throw getErr(\"xhear_regster_data_nofunc\", { tag, key: keyName });\n  }\n\n  if (typeof obj !== \"object\" || obj === null) {\n    return obj;\n  }\n\n  const copy = Array.isArray(obj) ? [] : {};\n\n  for (let key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      if (/^_/.test(key) && obj[key] instanceof Function) {\n        // 直接赋值私有属性\n        copy[key] = obj[key];\n      } else {\n        copy[key] = deepCopyData(obj[key], tag, key);\n      }\n    }\n  }\n\n  return copy;\n}\n","import { renderExtends, render } from \"./render.mjs\";\nimport { isSafariBrowser } from \"../public.mjs\";\nimport { getErr } from \"../../ofa-error/main.js\";\nimport { getRenderData } from \"./condition.mjs\";\nexport class FakeNode extends Comment {\n  constructor(markname) {\n    const tagText = `Fake Node${markname ? \": \" + markname : \"\"}`;\n\n    super(` ${tagText} --end `);\n\n    this._mark = markname;\n    this._inited = false;\n\n    const startCom = new Comment(` ${tagText} --start `);\n    startCom.__fake_end = this;\n\n    Object.defineProperty(this, \"_start\", {\n      value: startCom,\n    });\n  }\n\n  init() {\n    if (this._inited) {\n      return;\n    }\n\n    this.parentNode.insertBefore(this._start, this);\n    this._inited = true;\n  }\n\n  querySelector(expr) {\n    return this.__searchEl(expr, \"find\");\n  }\n\n  querySelectorAll(expr) {\n    return this.__searchEl(expr);\n  }\n\n  __searchEl(expr, funcName = \"filter\") {\n    const startParent = this.parentNode;\n    if (!startParent) return [];\n\n    const childs = this.children;\n\n    return Array.from(startParent.querySelectorAll(expr))[funcName]((e) => {\n      let par = e;\n      while (true) {\n        if (childs.includes(par)) {\n          return true;\n        }\n\n        par = par.parentNode;\n\n        if (!par) {\n          break;\n        }\n      }\n    });\n  }\n\n  insertBefore(newEle, target) {\n    const { parentNode } = this;\n\n    if (Array.from(parentNode.children).includes(target)) {\n      parentNode.insertBefore(newEle, target);\n    } else {\n      parentNode.insertBefore(newEle, this);\n    }\n  }\n\n  appendChild(newEle) {\n    this.parentNode.insertBefore(newEle, this);\n  }\n\n  get children() {\n    const childs = [];\n\n    let prev = this;\n    while (true) {\n      prev = prev.previousSibling;\n\n      if (prev) {\n        if (prev instanceof HTMLElement) {\n          childs.unshift(prev);\n        } else if (prev === this._start) {\n          break;\n        }\n      } else if (this.isConnected) {\n        throw getErr(\"xhear_fakenode_unclose\", { name: \"children\" });\n      } else {\n        break;\n      }\n    }\n\n    return childs;\n  }\n\n  get childNodes() {\n    const childs = [];\n\n    let prev = this;\n    while (true) {\n      prev = prev.previousSibling;\n\n      if (prev) {\n        if (prev === this._start) {\n          break;\n        }\n        childs.unshift(prev);\n      } else {\n        if (!this.isConnected) {\n          break;\n        }\n        throw getErr(\"xhear_fakenode_unclose\", { name: \"childNodes\" });\n      }\n    }\n\n    return childs;\n  }\n\n  set innerHTML(val) {\n    this.childNodes.forEach((e) => {\n      e.remove();\n    });\n\n    const temp = document.createElement(\"template\");\n    temp.innerHTML = val;\n\n    Array.from(temp.content.childNodes).forEach((e) => {\n      this.appendChild(e);\n    });\n  }\n\n  get innerHTML() {\n    const { children } = this;\n    let content = \"\";\n\n    children.forEach((e) => {\n      content += e.outerHTML + \"\\n\";\n    });\n\n    return content;\n  }\n\n  get nextElementSibling() {\n    let next = this.nextSibling;\n\n    if (!next) {\n      return null;\n    }\n\n    if (next.__fake_end) {\n      return next.__fake_end;\n    }\n\n    if (next && !(next instanceof Element)) {\n      next = next.nextElementSibling;\n    }\n\n    return next;\n  }\n\n  get previousElementSibling() {\n    const { _start } = this;\n    let prev = _start.previousSibling;\n\n    if (!prev) {\n      return null;\n    }\n\n    if (prev instanceof FakeNode) {\n      return prev;\n    }\n\n    return _start.previousElementSibling;\n  }\n}\n\n// 将temp元素替换到原来的位置上\nconst replaceTempInit = (_this) => {\n  const parent = _this.parentNode;\n  if (parent) {\n    const parent = _this.parentNode;\n    const children = Array.from(_this.content.children);\n    children.forEach((e) => {\n      parent.insertBefore(e, _this);\n    });\n\n    _this.remove();\n\n    if (parent.querySelector(\"[x-bind-data]\")) {\n      const regData = getRenderData(parent);\n\n      if (regData) {\n        // 重新渲染未绑定元素\n        render({\n          data: regData.data,\n          target: regData.target,\n          temps: regData.temps,\n        });\n      }\n    }\n  }\n};\n\nif (isSafariBrowser()) {\n  renderExtends.beforeRender = ({ target }) => {\n    let replaces = [];\n\n    while (true) {\n      replaces = Array.from(\n        target.querySelectorAll('template[is=\"replace-temp\"]')\n      );\n\n      if (!replaces.length) {\n        break;\n      }\n\n      replaces.forEach((temp) => {\n        replaceTempInit(temp);\n      });\n    }\n  };\n} else {\n  class ReplaceTemp extends HTMLTemplateElement {\n    constructor() {\n      super();\n      this.init();\n    }\n\n    init() {\n      replaceTempInit(this);\n    }\n\n    connectedCallback() {\n      this.init();\n    }\n  }\n\n  customElements.define(\"replace-temp\", ReplaceTemp, {\n    extends: \"template\",\n  });\n}\n","/**\n * `x-if` first replaces all neighboring conditional elements with token elements and triggers the rendering process once; the rendering process is triggered again after each `value` change.\n * The rendering process is as follows:\n * 1. First, collect all conditional elements adjacent to `x-if`.\n * 2. Mark these elements and wait for the `value` of each conditional element to be set successfully before proceeding to the next step.\n * 3. Based on the marking, perform a judgment operation asynchronously, the element that satisfies the condition first will be rendered; after successful rendering, the subsequent conditional elements will clear the rendered content.\n */\n\nimport { dataRevoked } from \"../../stanz/public.mjs\";\nimport { register } from \"../register.mjs\";\nimport { eleX, revokeAll } from \"../util.mjs\";\nimport { FakeNode } from \"./fake-node.mjs\";\nimport { render } from \"./render.mjs\";\n\nconst regOptions = {\n  data: {\n    value: null,\n    __rendered: false,\n  },\n  watch: {\n    value() {\n      if (!this._bindend) {\n        return;\n      }\n\n      this.refreshValue();\n    },\n  },\n  proto: {\n    refreshValue() {\n      clearTimeout(this._timer);\n      this._timer = setTimeout(() => {\n        const conditions = [this, ...this._others];\n\n        let isOK = false;\n\n        conditions.forEach((conditionEl) => {\n          if (isOK) {\n            // A success condition has preceded it, and any subsequent conditional elements should be clear\n            conditionEl._clearContent();\n            return;\n          }\n\n          if (conditionEl.value || conditionEl.tag === \"x-else\") {\n            isOK = true;\n            conditionEl._renderContent();\n          } else {\n            conditionEl._clearContent();\n          }\n        });\n        if (this._fake.parentNode) {\n          eleX(this._fake.parentNode).refresh();\n        }\n\n        // const fakeParent = eleX(this._fake.parentNode);\n        // fakeParent.refresh();\n        // fakeParent.host && fakeParent.host.refresh({ unupdate: 1 });\n      }, 0);\n    },\n    _renderContent() {\n      if (this.__rendered) {\n        return;\n      }\n      this.__rendered = true;\n\n      const result = getRenderData(this._fake);\n\n      if (!result) {\n        return;\n      }\n\n      const { target, data, temps } = result;\n\n      if (dataRevoked(data)) {\n        return;\n      }\n\n      this._fake.innerHTML = this.__originHTML;\n\n      render({ target, data, temps });\n\n      this.emit(\"rendered\", {\n        bubbles: false,\n      });\n    },\n    _clearContent() {\n      if (!this.__rendered) {\n        return;\n      }\n\n      this.__rendered = false;\n\n      // revokeAll(this._fake);\n      this._fake?.childNodes?.forEach((el) => revokeAll(el));\n      this._fake.innerHTML = \"\";\n\n      this.emit(\"clear\", {\n        bubbles: false,\n      });\n    },\n    init() {\n      if (this._bindend) {\n        return;\n      }\n\n      this._bindend = true;\n      const fake = (this._fake = new FakeNode(this.tag));\n      fake.__revokes = this.ele.__revokes;\n      this.before(fake);\n      fake.init();\n      this.remove();\n\n      // 给 else-if 添加 _xif，给 else 初始化\n      if (this.tag === \"x-if\") {\n        const others = (this._others = []);\n\n        let next = fake;\n        while (true) {\n          next = next.nextElementSibling;\n\n          if (!next || next.tagName == \"X-IF\") {\n            // 下一个还是if的话，就直接跳过遍历的逻辑，因为下一个if后面可能有它们的else\n            break;\n          }\n\n          switch (next.tagName) {\n            case \"X-ELSE\": {\n              const $el = eleX(next);\n              if ($el.init) {\n                $el.init();\n              } else {\n                $el._if_ready = 1;\n              }\n\n              others.push($el);\n              return;\n            }\n            case \"X-ELSE-IF\": {\n              const $el = eleX(next);\n\n              $el._xif = this;\n\n              others.push($el);\n              break;\n            }\n            default:\n              break;\n          }\n        }\n      }\n    },\n  },\n  created() {\n    // 元素可能先于子内容构造（如 createElement 或第三方库 cloneNode），\n    // 此时 template[condition] 不存在，需要回退到自身内容\n    const conditionTemp = this.$(\"template[condition]\");\n    this.__originHTML = conditionTemp ? conditionTemp.html : this.html;\n    this.html = \"\";\n  },\n  ready() {\n    if (this.ele._bindingRendered) {\n      this.init();\n    } else {\n      this.one(\"binding-rendered\", () => this.init());\n    }\n  },\n};\n\nregister({\n  tag: \"x-if\",\n  ...regOptions,\n});\n\nregister({\n  tag: \"x-else-if\",\n  ...regOptions,\n  watch: {\n    value() {\n      if (!this._bindend) {\n        return;\n      }\n\n      if (this._xif) {\n        this._xif.refreshValue();\n      }\n    },\n  },\n});\n\nregister({\n  tag: \"x-else\",\n  ...regOptions,\n  watch: {},\n  ready() {\n    if (this._if_ready) {\n      this.init();\n    }\n  },\n});\n\nexport const getRenderData = (target) => {\n  while (target && !target.__render_data) {\n    target = target.parentNode;\n  }\n\n  if (target) {\n    return {\n      target,\n      data: target.__render_data,\n      temps: target.__render_temps,\n    };\n  }\n\n  return null;\n};\n","import { register } from \"../register.mjs\";\nimport { render } from \"./render.mjs\";\nimport { FakeNode } from \"./fake-node.mjs\";\nimport Stanz from \"../../stanz/main.mjs\";\nimport { createXEle, eleX, revokeAll } from \"../util.mjs\";\nimport { removeArrayValue } from \"../public.mjs\";\nimport { getRenderData } from \"./condition.mjs\";\nimport { getErr } from \"../../ofa-error/main.js\";\nimport { getType } from \"../../stanz/public.mjs\";\n\nregister({\n  tag: \"x-fill\",\n  data: {\n    value: null,\n  },\n  watch: {\n    value(value, t) {\n      this.refreshValue(t?.watchers);\n    },\n  },\n  proto: {\n    refreshValue(watchers) {\n      const arrayData = this.value;\n\n      if (!this._bindend) {\n        return;\n      }\n\n      const childs = this._fake.children;\n\n      if (!arrayData) {\n        childs.forEach((e) => revokeAll(e));\n        this._fake.innerHTML = \"\";\n        return;\n      }\n\n      if (!(arrayData instanceof Array)) {\n        console.warn(\n          getErr(\"fill_type\", {\n            type: getType(arrayData),\n          }),\n        );\n\n        childs &&\n          childs.forEach((el) => {\n            revokeAll(el);\n            el.remove();\n          });\n        return;\n      }\n\n      const regData = getRenderData(this._fake);\n\n      if (!regData) {\n        return;\n      }\n\n      const { data, temps } = regData;\n\n      const targetTemp = temps[this._name];\n\n      const keyName = this.attr(\"fill-key\") || \"xid\";\n\n      if (!childs.length) {\n        const frag = document.createDocumentFragment();\n\n        arrayData.forEach((e, i) => {\n          const $ele = createItem(\n            e,\n            temps,\n            targetTemp,\n            data.$host || data,\n            i,\n            keyName,\n          );\n          frag.appendChild($ele.ele);\n        });\n\n        this._fake.appendChild(frag);\n      } else {\n        if (watchers) {\n          const isReplaced = watchers.some((e) => e.path.length <= 1);\n\n          if (!isReplaced) {\n            // It is not a replacement, it can be corrected by binding the item internally.\n            return;\n          }\n        }\n\n        const vals = arrayData.slice();\n        const valsKeys = new Set(\n          vals.map((e) => {\n            if (!e) {\n              return;\n            }\n\n            const val = e[keyName];\n            return val === undefined ? e : val;\n          }),\n        );\n\n        const { parentNode } = this._fake;\n\n        if (keyName !== \"xid\" && vals.length !== valsKeys.size) {\n          const err = getErr(\"fill_key_duplicates\");\n          console.error(err);\n          console.warn(err, {\n            parentNode,\n            host: eleX(parentNode)?.host?.ele,\n          });\n        }\n\n        // const positionKeys = childs.map((e) => e._data_xid || e);\n        // Delete non-existing projects in advance (used to improve performance, this step can be removed and the above comment is turned on)\n        const positionKeys = [];\n        for (let i = 0, len = childs.length; i < len; i++) {\n          const e = childs[i];\n          const key = e._data_xid || e;\n\n          if (!valsKeys.has(key)) {\n            // If it no longer exists, delete it in advance.\n            revokeAll(e);\n            e.remove();\n            childs.splice(i, 1);\n            len--;\n            i--;\n          } else {\n            positionKeys.push(key);\n          }\n        }\n\n        let target = this._fake._start;\n\n        const needRemoves = [];\n\n        let count = 0;\n\n        while (target) {\n          if (target === this._fake) {\n            if (vals.length) {\n              // We have reached the end, add all elements directly to the front\n              vals.forEach((item) => {\n                const $ele = createItem(\n                  item,\n                  temps,\n                  targetTemp,\n                  data.$host || data,\n                  count,\n                  keyName,\n                );\n\n                count++;\n\n                // target.parentNode.insertBefore($ele.ele, target);\n                parentNode.insertBefore($ele.ele, target);\n              });\n            }\n            break;\n          }\n          if (!(target instanceof Element)) {\n            target = target.nextSibling;\n            continue;\n          }\n          const currentVal = vals.shift();\n          const isObj = currentVal instanceof Object;\n          const $tar = eleX(target);\n          const item = $tar.__item;\n\n          if (currentVal === undefined && !vals.length) {\n            // There will be no follow-up, just delete it directly\n            needRemoves.push(target);\n            target = target.nextSibling;\n            continue;\n          }\n\n          const oldId = positionKeys.indexOf(\n            isObj ? currentVal[keyName] : currentVal,\n          );\n          if (oldId > -1) {\n            // If the key originally exists, perform key displacement.\n            const oldItem = childs[oldId];\n            if (\n              isObj\n                ? currentVal[keyName] !== item.$data[keyName]\n                : currentVal !== item.$data\n            ) {\n              // Adjust position\n              oldItem.__internal = 1;\n              // target.parentNode.insertBefore(oldItem, target);\n              parentNode.insertBefore(oldItem, target);\n              delete oldItem.__internal;\n              target = oldItem;\n            }\n\n            // Update object\n            const $old = eleX(oldItem);\n            if ($old.__item.$data !== currentVal) {\n              $old.__item.$data = currentVal;\n            }\n            $old.__item.$index = count;\n          } else {\n            // Add new element\n            const $ele = createItem(\n              currentVal,\n              temps,\n              targetTemp,\n              data.$host || data,\n              count,\n              keyName,\n            );\n\n            // target.parentNode.insertBefore($ele.ele, target);\n            parentNode.insertBefore($ele.ele, target);\n            target = $ele.ele;\n          }\n\n          count++;\n          target = target.nextSibling;\n        }\n\n        if (needRemoves.length) {\n          needRemoves.forEach((e) => {\n            revokeAll(e);\n            e.remove();\n          });\n        }\n      }\n\n      if (this._fake.parentNode) {\n        eleX(this._fake.parentNode).refresh();\n      }\n\n      this.emit(\"rendered\", {\n        bubbles: false,\n      });\n    },\n    init() {\n      if (this._bindend) {\n        return;\n      }\n\n      this._bindend = true;\n      const fake = (this._fake = new FakeNode(\"x-fill\"));\n\n      // 搬动 revokes\n      fake.__revokes = this.ele.__revokes;\n\n      this.before(fake);\n      fake.init();\n      this.remove();\n\n      this.refreshValue();\n    },\n  },\n  ready() {\n    this._name = this.attr(\"name\");\n\n    if (!this._name) {\n      const err = getErr(\"xhear_fill_tempname\", { name: this._name });\n      console.warn(err, this.ele);\n      throw err;\n    }\n\n    if (this.ele._bindingRendered) {\n      this.init();\n    } else {\n      this.one(\"binding-rendered\", () => this.init());\n    }\n  },\n});\n\n/**\n * 为 x-fill 渲染创建列表项元素\n * @param {Object} $data - 列表项的数据对象\n * @param {Object} temps - 包含所有可用模板的模板集合\n * @param {HTMLTemplateElement} targetTemp - 要渲染的目标模板元素\n * @param {Object} $host - 包含 x-fill 指令的宿主元素\n * @param {number} $index - 列表中项的索引\n * @param {string} keyName - 用于标识列表项的键名\n * @param {Object} $parent - 父元素的实例对象\n * @returns {Object} 创建的元素，包含绑定的数据和项属性\n */\nexport const createItem = (\n  $data,\n  temps,\n  targetTemp,\n  $host,\n  $index,\n  keyName,\n  $parent,\n) => {\n  const $ele = createXEle(targetTemp.innerHTML);\n\n  const itemData = new Stanz({\n    $data,\n    $host,\n    $index,\n  });\n\n  // tips: 如果$ele被设置为item的子属性，$ele内出现自定义组件，进一步导致改动冒泡，会出现xfill内元素不停渲染的死循环\n  Object.defineProperties(itemData, {\n    $ele: {\n      get() {\n        return $ele;\n      },\n    },\n  });\n\n  if ($parent) {\n    itemData.$parent = $parent;\n  }\n\n  render({\n    target: $ele.ele,\n    data: itemData,\n    temps,\n    // $host,\n    isRenderSelf: true,\n  });\n\n  const revokes = $ele.ele.__revokes;\n\n  const revoke = () => {\n    removeArrayValue(revokes, revoke);\n    itemData.revoke();\n  };\n\n  revokes.push(revoke);\n\n  $ele.__item = itemData;\n  $ele.ele._data_xid = $data?.[keyName] || $data;\n\n  return $ele;\n};\n","import { createXEle, eleX } from \"./util.mjs\";\nimport { searchEle } from \"./public.mjs\";\nimport { handler } from \"./accessor.mjs\";\nimport renderFn from \"./render/render.mjs\";\nimport syncFn from \"./render/sync.mjs\";\nimport eventFn from \"./event.mjs\";\nimport LikeArray from \"./array.mjs\";\nimport formFn, { initFormEle } from \"./form.mjs\";\nimport cssFn from \"./css.mjs\";\nimport { extend } from \"../stanz/public.mjs\";\nimport Stanz, { constructor } from \"../stanz/main.mjs\";\nimport watchFn from \"../stanz/watch.mjs\";\nimport \"./render/condition.mjs\";\nimport \"./render/fill.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\nconst { defineProperties } = Object;\n\nconst GET_COMPOSE_PATH = `get-${Math.random()}`;\n\nconst init = ({ _this, ele, proxySelf }) => {\n  const descs = {\n    owner: {\n      get() {\n        const { parentNode } = ele;\n        const { _owner } = _this;\n        const arr = parentNode ? [eleX(parentNode), ..._owner] : [..._owner];\n        return new Set(arr);\n      },\n    },\n    ele: {\n      get: () => ele,\n    },\n  };\n\n  const tag = ele.tagName && ele.tagName.toLowerCase();\n\n  if (tag) {\n    descs.tag = {\n      enumerable: true,\n      value: tag,\n    };\n  }\n\n  defineProperties(_this, descs);\n\n  initFormEle(proxySelf);\n};\n\nexport default class Xhear extends LikeArray {\n  constructor({ ele }) {\n    super();\n\n    const proxySelf = constructor.call(this, {}, handler);\n\n    init({\n      _this: this,\n      ele,\n      proxySelf,\n    });\n\n    ele.__xhear__ = proxySelf;\n\n    return proxySelf;\n  }\n\n  get length() {\n    return this.ele && this.ele.children.length;\n  }\n\n  $(expr) {\n    let { ele } = this;\n    if (ele instanceof HTMLTemplateElement) {\n      ele = ele.content;\n    }\n\n    const target = ele.querySelector(expr);\n    return target ? eleX(target) : null;\n  }\n\n  all(expr) {\n    return searchEle(this.ele, expr).map(eleX);\n  }\n\n  extend(obj, desc) {\n    return extend(this, obj, desc);\n  }\n\n  get text() {\n    return this.ele.textContent;\n  }\n\n  set text(val) {\n    this.ele.textContent = val;\n  }\n\n  get html() {\n    return this.ele.innerHTML;\n  }\n\n  set html(val) {\n    this.ele.innerHTML = val;\n  }\n\n  get classList() {\n    return this.ele.classList;\n  }\n\n  get data() {\n    return this.ele.dataset;\n  }\n\n  get shadow() {\n    return eleX(this.ele.shadowRoot);\n  }\n\n  get root() {\n    const rootNode = this.ele.getRootNode();\n    return rootNode ? eleX(rootNode) : null;\n  }\n  get host() {\n    let root = this.ele.getRootNode();\n    let { host } = root;\n    return host instanceof Node ? eleX(host) : null;\n  }\n\n  get parent() {\n    let { parentNode } = this.ele;\n    return !parentNode || parentNode === document ? null : eleX(parentNode);\n  }\n\n  get parents() {\n    const parents = [];\n    let target = this;\n    while (target.parent) {\n      target = target.parent;\n      parents.push(target);\n    }\n    return parents;\n  }\n\n  parentsUntil(expr) {\n    const allParents = this.parents;\n    const parents = [];\n\n    const exprIsObj = typeof expr === \"object\";\n\n    while (allParents.length) {\n      const target = allParents.shift();\n\n      if (exprIsObj) {\n        if (target === expr || target.ele === expr) {\n          break;\n        }\n      } else if (target.ele.matches(expr)) {\n        break;\n      }\n\n      parents.push(target);\n    }\n\n    return parents;\n  }\n\n  get hosts() {\n    const hosts = [];\n    let target = this;\n    while (target.host) {\n      target = target.host;\n      hosts.push(target);\n    }\n    return hosts;\n  }\n\n  composedPath() {\n    let paths = [];\n    this.one(GET_COMPOSE_PATH, (e) => {\n      paths = e.composedPath();\n      e.stopPropagation();\n    });\n    this.emit(GET_COMPOSE_PATH, {\n      composed: true,\n    });\n    return paths;\n  }\n\n  get next() {\n    const nextEle = this.ele.nextElementSibling;\n    return nextEle ? eleX(nextEle) : null;\n  }\n\n  after(val) {\n    const { next: nextEl } = this;\n\n    if (nextEl) {\n      nextEl.before(val);\n    } else {\n      this.parent.push(val);\n    }\n  }\n\n  get nexts() {\n    const { parent } = this;\n    const selfIndex = this.index;\n    return parent.filter((e, i) => i > selfIndex);\n  }\n\n  get prev() {\n    const prevEle = this.ele.previousElementSibling;\n    return prevEle ? eleX(prevEle) : null;\n  }\n\n  before(val) {\n    const $el = createXEle(val);\n    this.parent.ele.insertBefore($el.ele, this.ele);\n  }\n\n  get prevs() {\n    const { parent } = this;\n    const selfIndex = this.index;\n    return parent.filter((e, i) => i < selfIndex);\n  }\n\n  get siblings() {\n    return this.parent.filter((e) => e !== this);\n  }\n\n  get index() {\n    let { parentNode } = this.ele;\n\n    if (!parentNode) {\n      return null;\n    }\n\n    return Array.prototype.indexOf.call(parentNode.children, this.ele);\n  }\n\n  get style() {\n    return this.ele.style;\n  }\n\n  // get width() {\n  //   return parseInt(getComputedStyle(this.ele).width) || 0;\n  // }\n\n  // get height() {\n  //   return parseInt(getComputedStyle(this.ele).height) || 0;\n  // }\n\n  // get clientWidth() {\n  //   return this.ele.clientWidth;\n  // }\n\n  // get clientHeight() {\n  //   return this.ele.clientHeight;\n  // }\n\n  // get offsetWidth() {\n  //   return this.ele.offsetWidth;\n  // }\n\n  // get offsetHeight() {\n  //   return this.ele.offsetHeight;\n  // }\n\n  // get outerWidth() {\n  //   let computedStyle = getComputedStyle(this.ele);\n  //   return (\n  //     this.ele.offsetWidth +\n  //     parseInt(computedStyle[\"margin-left\"]) +\n  //     parseInt(computedStyle[\"margin-right\"])\n  //   );\n  // }\n\n  // get outerHeight() {\n  //   let computedStyle = getComputedStyle(this.ele);\n  //   return (\n  //     this.ele.offsetHeight +\n  //     parseInt(computedStyle[\"margin-top\"]) +\n  //     parseInt(computedStyle[\"margin-bottom\"])\n  //   );\n  // }\n\n  is(expr) {\n    if (typeof expr === \"string\") {\n      return this.ele.matches(expr);\n    }\n\n    if (expr instanceof Xhear) {\n      return this.ele === expr.ele;\n    }\n\n    if (expr instanceof Node) {\n      return this.ele === expr;\n    }\n  }\n\n  contains(expr) {\n    if (typeof expr === \"string\") {\n      return this.ele.querySelector(expr) !== null;\n    }\n\n    if (expr instanceof Xhear) {\n      return this.ele.contains(expr.ele);\n    }\n\n    if (expr instanceof Node) {\n      return this.ele.contains(expr);\n    }\n  }\n\n  remove() {\n    const { parent } = this;\n    if (parent) {\n      parent.splice(parent.indexOf(this), 1);\n    }\n    // this.ele.remove();\n  }\n\n  clone(bool = true) {\n    return eleX(this.ele.cloneNode(bool));\n  }\n\n  wrap(content) {\n    const $el = createXEle(content);\n\n    const { ele } = this;\n\n    if (!ele.parentNode) {\n      throw getErr(\"xhear_wrap_no_parent\");\n    }\n\n    ele.parentNode.insertBefore($el.ele, ele);\n\n    ele.__internal = 1;\n\n    $el.ele.appendChild(ele);\n\n    delete ele.__internal;\n\n    return this;\n  }\n\n  unwrap() {\n    const { ele } = this;\n\n    const target = ele.parentNode;\n\n    if (target.children.length > 1) {\n      throw getErr(\"xhear_unwrap_has_siblings\");\n    }\n\n    ele.__internal = 1;\n\n    target.parentNode.insertBefore(ele, target);\n\n    target.remove();\n\n    delete ele.__internal;\n\n    return this;\n  }\n}\n\nconst sfn = Stanz.prototype;\nconst fn = Xhear.prototype;\n\nfn.extend(\n  {\n    get: sfn.get,\n    set: sfn.set,\n    toJSON: sfn.toJSON,\n    toString: sfn.toString,\n    ...watchFn,\n    ...eventFn,\n    ...renderFn,\n    ...syncFn,\n    ...formFn,\n  },\n  {\n    enumerable: false,\n  }\n);\n\nfn.extend(cssFn);\n","import Xhear from \"./main.mjs\";\nimport { getType } from \"../stanz/public.mjs\";\n\nexport const eleX = (ele) => {\n  if (!ele) return null;\n\n  if (ele.__xhear__) {\n    return ele.__xhear__;\n  }\n\n  return new Xhear({ ele });\n};\n\nexport const objToXEle = (obj) => {\n  const data = { ...obj };\n\n  if (!obj.tag) {\n    return null;\n  }\n\n  const ele = document.createElement(obj.tag);\n  delete data.tag;\n  const $ele = eleX(ele);\n\n  Object.assign($ele, data);\n\n  return $ele;\n};\n\nconst temp = document.createElement(\"template\");\n\nexport const strToXEle = (str) => {\n  temp.innerHTML = str;\n  const ele = temp.content.children[0] || temp.content.childNodes[0];\n  temp.innerHTML = \"\";\n\n  return eleX(ele);\n};\n\nexport const createXEle = (expr, exprType) => {\n  if (expr instanceof Xhear) {\n    return expr;\n  }\n\n  if (expr instanceof Node || expr === window) {\n    return eleX(expr);\n  }\n\n  const type = getType(expr);\n\n  switch (type) {\n    case \"object\":\n      return objToXEle(expr);\n    case \"string\":\n      return strToXEle(expr);\n  }\n};\n\nexport const revokeAll = (target) => {\n  if (target.__revokes) {\n    Array.from(target.__revokes).forEach((f) => f && f());\n  }\n  target.childNodes &&\n    Array.from(target.childNodes).forEach((el) => {\n      revokeAll(el);\n    });\n\n  const revokes = target?.shadowRoot?.__revokes;\n\n  if (revokes) {\n    [...revokes].forEach((f) => f());\n  }\n};\n","import { getErr } from \"../ofa-error/main.js\";\nimport $ from \"../xhear/base.mjs\";\nimport { eleX } from \"../xhear/util.mjs\";\n\n$.register({\n  tag: \"inject-host\",\n  temp: `<slot></slot>`,\n  data: {},\n  proto: {\n    init() {\n      if (!this.ele.isConnected) {\n        return;\n      }\n\n      this.forEach((e) => this._init(e));\n    },\n\n    _init(e) {\n      if (e.ele.__inited) {\n        return;\n      }\n\n      switch (e.tag) {\n        case \"link\":\n          this._initLink(e);\n          break;\n        case \"style\":\n          this._initStyle(e);\n          break;\n        case \"x-if\":\n        case \"x-else-if\":\n        case \"x-else\":\n        case \"x-fill\":\n          // Components of a rendered nature do not need to be alerted\n          break;\n        default:\n          const err = getErr(\"invalidated_inject_host\");\n          console.warn(err, e);\n      }\n    },\n\n    _initLink(e) {\n      const href = e.attr(\"href\");\n\n      const rel = e.attr(\"rel\");\n\n      if (rel !== \"stylesheet\" && rel !== \"host\") {\n        throw getErr(\"inject-link-rel\");\n      }\n\n      let { ele } = e;\n\n      if (rel !== \"host\") {\n        e.attr(\"rel\", \"host\");\n        // It needs to be reset or it will contaminate itself\n        e.attr(\"href\", href);\n      }\n\n      ele.__inited = true;\n\n      ele._revoke = () => {\n        revokeLink(ele);\n        ele._revoke = null;\n      };\n\n      initInjectEle(\n        this,\n        href,\n        () => {\n          const newEl = e.clone();\n          newEl.attr(\"rel\", \"stylesheet\");\n          return newEl;\n        },\n        ele\n      );\n    },\n    async _initStyle(e) {\n      if (/data\\(.+?\\)/.test(e.html)) {\n        const err = getErr(\"use-data-inject\");\n        console.warn(err, e.ele);\n        throw err;\n      }\n\n      // Use only the text inside the style to prevent contaminating yourself\n      const com = new Comment(e.html);\n      com.__inited = true;\n\n      com._revoke = () => {\n        revokeLink(e.ele);\n        delete com.__inited;\n        delete e.ele.__inited;\n        com._revoke = null;\n        e.ele._revoke = null;\n      };\n\n      e.html = \"\";\n      e.push(com);\n      e.ele.__inited = true;\n      e.ele._revoke = com._revoke;\n\n      // const hash = await getHash(com.data);\n      const hash = getStringHash(com.data);\n\n      initInjectEle(this, hash, () => $(`<style>${com.data}</style>`), e.ele);\n    },\n  },\n  attached() {\n    const observer = (this._obs = new MutationObserver((mutationsList) => {\n      for (let mutation of mutationsList) {\n        if (mutation.type === \"attributes\") {\n          if (mutation.attributeName === \"x-bind-data\") {\n            // x component render\n            continue;\n          }\n\n          // Logic for handling attribute changes\n          const { target } = mutation;\n\n          if (target.__inited) {\n            target._revoke();\n            this._init(eleX(target));\n          }\n        } else if (mutation.type === \"childList\") {\n          mutation.removedNodes.forEach((e) => {\n            if (e.__inited) {\n              e._revoke();\n            }\n          });\n\n          mutation.addedNodes.forEach((e) => {\n            if (!e.__inited) {\n              if (e instanceof Text) {\n                if (e.parentElement.tagName === \"STYLE\") {\n                  // change style text\n                  this.init(e.parentNode);\n                }\n              }\n\n              if (e.__inited) {\n                // Don't get involved if you've been initialized.\n                return;\n              }\n\n              if (e instanceof Text || e instanceof Comment) {\n                // Invalid content\n                return;\n              }\n\n              this._init(eleX(e));\n            }\n          });\n        }\n      }\n    }));\n\n    const config = { attributes: true, childList: true, subtree: true };\n\n    observer.observe(this.ele, config);\n\n    this.init();\n  },\n  detached() {\n    this.forEach((e) => revokeLink(e.ele));\n\n    this._obs.disconnect();\n  },\n});\n\nfunction getStringHash(str) {\n  let hash = 0;\n  let len = str.length;\n  for (let i = 0; i < len; i++) {\n    const charCode = str.charCodeAt(i);\n    hash = ((hash << 5) - hash) ^ charCode;\n    hash = (hash << 13) | (hash >>> 19);\n    hash = hash * 7 - hash * 3;\n  }\n  return hash.toString(36) + \"--\" + len;\n}\n\nfunction initInjectEle(injectEl, mark, cloneFunc, item) {\n  const hostRoot = injectEl.host.root;\n\n  let clink = hostRoot.$(`[inject-host=\"${mark}\"]`);\n\n  if (clink) {\n    clink.ele.__items.add(item);\n    item.__host_link = clink;\n    return;\n  }\n\n  clink = cloneFunc();\n\n  clink.attr(\"inject-host\", mark);\n\n  clink.ele.__items = new Set([item]);\n  item.__host_link = clink;\n\n  const { root } = injectEl.host;\n  if (root.ele === document) {\n    document.head.appendChild(clink.ele);\n  } else {\n    root.root.push(clink);\n  }\n}\n\nfunction revokeLink(item) {\n  if (item.__inited && item.__host_link) {\n    const items = item.__host_link.ele.__items;\n    items.delete(item);\n\n    if (!items.size) {\n      item.__host_link.remove();\n    }\n\n    delete item.__inited;\n  }\n}\n","import { eleX } from \"./util.mjs\";\nimport { render, convert } from \"./render/render.mjs\";\nimport Xhear from \"./main.mjs\";\nimport stanz from \"../stanz/base.mjs\";\nimport Stanz from \"../stanz/main.mjs\";\nimport { register } from \"./register.mjs\";\nimport { searchEle } from \"./public.mjs\";\nimport $ from \"./dollar.mjs\";\nimport { nextTick } from \"../stanz/public.mjs\";\n\nObject.assign($, {\n  stanz,\n  Stanz,\n  render,\n  convert,\n  register,\n  nextTick,\n  fn: Xhear.prototype,\n  all: (expr) => searchEle(document, expr).map(eleX),\n  frag: () => $(document.createDocumentFragment()),\n});\n\nexport default $;\n","const getOid = () => Math.random().toString(32).slice(2);\n\nexport default class Onion {\n  constructor() {\n    this._middlewares = new Map();\n  }\n\n  use(middleware) {\n    const oid = getOid();\n    this._middlewares.set(oid, middleware);\n    return oid;\n  }\n\n  unuse(oid) {\n    return this._middlewares.delete(oid);\n  }\n\n  async run(context) {\n    let index = -1;\n\n    const middlewares = Array.from(this._middlewares.values());\n\n    const next = async () => {\n      index++;\n      if (index < middlewares.length) {\n        await middlewares[index](context, next);\n      }\n    };\n\n    await next();\n  }\n}\n","import { getErr } from \"../ofa-error/main.js\";\nimport Onion from \"./onion.mjs\";\n\nconst getNotHttp = (url) => /^blob:/.test(url) || /^data:/.test(url);\n\nexport const caches = new Map();\nexport const wrapFetch = async (url, params) => {\n  let reUrl = url;\n\n  if (!getNotHttp(url)) {\n    const d = new URL(url);\n    reUrl = params.includes(\"-direct\") ? url : `${d.origin}${d.pathname}`;\n  }\n\n  let fetchObj = caches.get(reUrl);\n\n  if (!fetchObj) {\n    fetchObj = fetch(reUrl);\n    caches.set(reUrl, fetchObj);\n  }\n\n  const resp = await fetchObj;\n\n  return resp.clone();\n};\n\nexport const processor = {};\n\nconst addHandler = (name, handler) => {\n  const oni = processor[name] || (processor[name] = new Onion());\n  oni.use(handler);\n};\n\nexport const use = (name, handler) => {\n  if (name instanceof Function) {\n    handler = name;\n    name = [\"js\", \"mjs\"];\n  }\n\n  if (name instanceof Array) {\n    name.forEach((name) => {\n      addHandler(name, handler);\n    });\n    return;\n  }\n\n  addHandler(name, handler);\n};\n\nuse([\"mjs\", \"js\"], async (ctx, next) => {\n  if (!ctx.result) {\n    const { url, params } = ctx;\n    const d = new URL(url);\n\n    const notHttp = getNotHttp(url);\n    try {\n      if (notHttp || params.includes(\"-direct\")) {\n        ctx.result = await import(url);\n      } else {\n        ctx.result = await import(`${d.origin}${d.pathname}`);\n      }\n    } catch (error) {\n      const err = getErr(\n        \"load_module\",\n        {\n          url: ctx.realUrl || url,\n        },\n        error\n      );\n\n      if (notHttp) {\n        console.warn(err, ctx);\n      }\n\n      throw err;\n    }\n  }\n\n  await next();\n});\n\nuse([\"txt\", \"html\", \"htm\"], async (ctx, next) => {\n  if (!ctx.result) {\n    const { url, params } = ctx;\n\n    let resp;\n    try {\n      resp = await wrapFetch(url, params);\n    } catch (error) {\n      throw getErr(\"load_fail\", { url }, error);\n    }\n\n    if (!/^2.{2}$/.test(resp.status)) {\n      throw getErr(\"load_fail_status\", {\n        url,\n        status: resp.status,\n      });\n    }\n\n    ctx.result = await resp.text();\n  }\n\n  await next();\n});\n\nuse(\"json\", async (ctx, next) => {\n  if (!ctx.result) {\n    const { url, params } = ctx;\n\n    ctx.result = await wrapFetch(url, params).then((e) => e.json());\n  }\n\n  await next();\n});\n\nuse(\"wasm\", async (ctx, next) => {\n  if (!ctx.result) {\n    const { url, params } = ctx;\n\n    const data = await wrapFetch(url, params).then((e) => e.arrayBuffer());\n\n    const module = await WebAssembly.compile(data);\n    const instance = new WebAssembly.Instance(module);\n\n    ctx.result = instance.exports;\n  }\n\n  await next();\n});\n\nuse(\"css\", async (ctx, next) => {\n  if (!ctx.result) {\n    const { url, element, params } = ctx;\n\n    if (element) {\n      const link = document.createElement(\"link\");\n      link.rel = \"stylesheet\";\n      link.href = url;\n\n      const root = element.getRootNode();\n\n      if (root === document) {\n        root.head.append(link);\n      } else {\n        root.appendChild(link);\n      }\n\n      let f;\n      element.addEventListener(\n        \"disconnected\",\n        (f = (e) => {\n          link.remove();\n          element.removeEventListener(\"disconnected\", f);\n        })\n      );\n    } else {\n      ctx.result = await wrapFetch(url, params).then((e) => e.text());\n    }\n  }\n\n  await next();\n});\n","import { getErr } from \"../ofa-error/main.js\";\n\nexport const aliasMap = {};\n\nexport default async function config(opts) {\n  const { alias } = opts;\n\n  if (alias) {\n    Object.entries(alias).forEach(([name, path]) => {\n      if (!/^@.+/.test(name)) {\n        throw getErr(\"config_alias_name_error\", {\n          name,\n        });\n      }\n\n      if (!aliasMap[name]) {\n        if (!/^\\./.test(path)) {\n          aliasMap[name] = path;\n        } else {\n          throw getErr(\"alias_relate_name\", {\n            name,\n            path,\n          });\n        }\n      } else {\n        throw getErr(\"alias_already\", {\n          name,\n        });\n      }\n    });\n  }\n  return true;\n}\n\nexport const path = (moduleName, baseURI) => {\n  if (moduleName.startsWith(\"http://\") || moduleName.startsWith(\"https://\")) {\n    return moduleName;\n  }\n\n  const [url, ...params] = moduleName.split(\" \");\n\n  let lastUrl = url;\n\n  if (/^@/.test(url)) {\n    const [first, ...args] = url.split(\"/\");\n\n    if (aliasMap[first]) {\n      lastUrl = [aliasMap[first].replace(/\\/$/, \"\"), ...args].join(\"/\");\n    } else {\n      throw getErr(\"no_alias\", {\n        name: first,\n        url: moduleName,\n      });\n    }\n  }\n\n  if (typeof location !== \"undefined\") {\n    const base = baseURI ? new URL(baseURI, location.href) : location.href;\n\n    const moduleURL = new URL(lastUrl, base);\n\n    lastUrl = moduleURL.href;\n  }\n\n  if (params.length) {\n    return `${lastUrl} ${params.join(\" \")}`;\n  }\n\n  return lastUrl;\n};\n","import { processor, use } from \"./use.mjs\";\nimport { aliasMap, path } from \"./config.mjs\";\nexport const LOADED = Symbol(\"loaded\");\n\nconst createLoad = (meta, opts) => {\n  if (!meta) {\n    meta = {\n      url: document.location.href,\n    };\n  }\n  const load = (ourl) => {\n    let [url, ...params] = ourl.split(\" \");\n\n    const reurl = path(url, meta.url);\n\n    return agent(reurl, { params, ...opts });\n  };\n  return load;\n};\n\nexport const agent = async (url, opts) => {\n  const urldata = new URL(url);\n  const { pathname } = urldata;\n\n  let type;\n  let realUrl = null;\n\n  opts.params &&\n    opts.params.forEach((e) => {\n      if (/^\\..+/.test(e)) {\n        type = e.replace(/^\\.(.+)/, \"$1\");\n      } else if (/^\\-\\-real/.test(e)) {\n        realUrl = e.replace(/^\\-\\-real\\:/, \"\");\n      }\n    });\n\n  if (!type) {\n    type = pathname.slice(((pathname.lastIndexOf(\".\") - 1) >>> 0) + 2);\n  }\n\n  const ctx = {\n    url,\n    result: null,\n    realUrl,\n    ...opts,\n  };\n\n  const oni = processor[type];\n\n  if (oni) {\n    await oni.run(ctx);\n  } else {\n    const result = await fetch(url);\n    const contentType = result.headers.get(\"Content-Type\");\n\n    const targetMapObject = [\n      [\"application/javascript\", \"js\"],\n      [\"application/json\", \"json\"],\n      [\"text/html\", \"html\"],\n      [\"text/xml\", \"xml\"],\n    ].find((e) => contentType.includes(e[0]));\n\n    let newOni;\n    if (targetMapObject) {\n      newOni = processor[targetMapObject[1]];\n    }\n\n    if (newOni) {\n      await newOni.run(ctx);\n    } else {\n      ctx.result = result;\n    }\n  }\n\n  if (opts && opts.element) {\n    const { element } = opts;\n    element[LOADED] = true;\n    const event = new Event(\"load\");\n    element.dispatchEvent(event);\n  }\n\n  if (opts.params && opts.params.includes(\"-ctx\")) {\n    return ctx;\n  }\n\n  return ctx.result;\n};\n\nexport default function lm(meta, opts) {\n  return createLoad(meta, opts);\n}\n\nObject.defineProperties(lm, {\n  use: {\n    value: use,\n  },\n  alias: {\n    get() {\n      return { ...aliasMap };\n    },\n  },\n});\n","import { getErr } from \"../ofa-error/main.js\";\nimport { agent, LOADED } from \"./main.mjs\";\n\nclass LoadModule extends HTMLElement {\n  constructor(...args) {\n    super(...args);\n\n    this[LOADED] = false;\n\n    Object.defineProperties(this, {\n      loaded: {\n        get: () => this[LOADED],\n      },\n    });\n\n    this._init();\n  }\n\n  _init() {\n    if (this.__initSrc || this.attributes.hasOwnProperty(\"pause\")) {\n      return;\n    }\n\n    let src = this.getAttribute(\"src\");\n\n    if (!src) {\n      return;\n      // throw `The ${this.tagName.toLowerCase()} element requires the src attribut `;\n    }\n    this.__initSrc = src;\n\n    const load = lm(undefined, {\n      element: this,\n    });\n\n    load(src);\n\n    Object.defineProperties(this, {\n      src: {\n        configurable: true,\n        value: src,\n      },\n    });\n  }\n\n  connectedCallback() {\n    const event = new CustomEvent(\"connected\");\n    event.root = this._root = this.getRootNode();\n    this.dispatchEvent(event);\n  }\n\n  disconnectedCallback() {\n    const event = new CustomEvent(\"disconnected\");\n    event.root = this._root;\n    delete this._root;\n    this.dispatchEvent(event);\n  }\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (name === \"src\") {\n      if (newValue && oldValue === null) {\n        this._init();\n      } else if (this.__initSrc && oldValue && newValue !== this.__initSrc) {\n        this.setAttribute(\"src\", this.__initSrc);\n\n        throw getErr(\"change_lm_src\", {\n          tag: this.tagName.toLowerCase(),\n        });\n      }\n    } else if (name === \"pause\" && newValue === null) {\n      this._init();\n    }\n  }\n\n  static get observedAttributes() {\n    return [\"src\", \"pause\"];\n  }\n}\n\nclass LM extends LoadModule {\n  constructor(...args) {\n    super(...args);\n  }\n}\n\nconst ready = () => {\n  customElements.define(\"load-module\", LoadModule);\n  customElements.define(\"l-m\", LM);\n  window.removeEventListener(\"load\", ready);\n};\n\nif (document.readyState === \"complete\") {\n  ready();\n} else {\n  window.addEventListener(\"load\", ready);\n}\n","import lm from \"./main.mjs\";\nimport \"./component.mjs\";\nimport config, { path } from \"./config.mjs\";\nlm.config = config;\nlm.path = path;\nObject.freeze(lm);\n\nwindow.lm = lm;\n\nexport default lm;\n","import { nextTick } from \"../stanz/public.mjs\";\nimport { searchEle } from \"../xhear/public.mjs\";\nimport { path } from \"../drill.js/config.mjs\";\nimport { eleX } from \"../xhear/util.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\nimport $ from \"../xhear/base.mjs\";\n\nexport const resolvePath = path;\n\nconst isInCode = (el) =>\n  $(el)\n    .composedPath()\n    .some((e) => e.tagName && e.tagName.toLowerCase() === \"code\");\n\nexport function fixRelate(element, basePath) {\n  searchEle(element, \"[href],[src]\").forEach((el) => {\n    if (isInCode(el)) {\n      return;\n    }\n\n    [\"href\", \"src\"].forEach((attrName) => {\n      const value = el.getAttribute(attrName);\n\n      if (/^#/.test(value)) {\n        return;\n      }\n\n      if (value && !/^(https?:)?\\/\\/\\S+/.test(value)) {\n        el.setAttribute(attrName, resolvePath(value, basePath));\n      }\n    });\n  });\n\n  searchEle(element, \"template\").forEach((el) => {\n    if (isInCode(el)) {\n      return;\n    }\n\n    fixRelate(el.content, basePath);\n  });\n}\n\nexport function fixRelatePathContent(content, basePath) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = content;\n\n  fixRelate(template.content, basePath);\n\n  searchEle(template.content, \"style\").forEach((styleEl) => {\n    const html = styleEl.innerHTML;\n\n    styleEl.innerHTML = html.replace(/url\\((.+)\\)/g, (original, urlPath) => {\n      return `url(${resolvePath(urlPath, basePath)})`;\n    });\n  });\n\n  return template.innerHTML;\n}\n\nexport const ISERROR = Symbol(\"loadError\");\n\nexport const getPagesData = async (src) => {\n  const load = lm({\n    url: src,\n  });\n  const pagesData = [];\n  let defaults;\n  let currentPageSrc = src;\n  let previousPageSrc;\n  let errorObj;\n\n  while (true) {\n    try {\n      let lastSrc = currentPageSrc;\n      const [realPageSrc] = currentPageSrc.split(\" \");\n      const pageSrcObj = new URL(realPageSrc);\n      if (/\\/$/.test(pageSrcObj.pathname)) {\n        lastSrc += \" .html\";\n      }\n\n      defaults = await load(lastSrc);\n    } catch (error) {\n      let err;\n      if (previousPageSrc) {\n        err = getErr(\n          \"page_wrap_fetch\",\n          {\n            before: previousPageSrc,\n            current: currentPageSrc,\n          },\n          error,\n        );\n      } else {\n        err = getErr(\n          \"load_page_module\",\n          {\n            url: currentPageSrc,\n          },\n          error,\n        );\n      }\n      errorObj = err;\n\n      console.error(errorObj);\n    }\n\n    if (errorObj) {\n      pagesData.unshift({\n        src,\n        ISERROR,\n        error: errorObj,\n      });\n      break;\n    }\n\n    pagesData.unshift({\n      src: currentPageSrc,\n      defaults,\n    });\n\n    if (!defaults.parent) {\n      break;\n    }\n\n    previousPageSrc = currentPageSrc;\n    currentPageSrc = resolvePath(defaults.parent, currentPageSrc);\n  }\n\n  return pagesData;\n};\n\nexport const createPage = (src, defaults) => {\n  const tempCon = document.createElement(\"div\");\n\n  tempCon.innerHTML = `<o-page src=\"${src}\" data-pause-init=\"1\"></o-page>`;\n\n  const targetPage = eleX(tempCon.children[0]);\n\n  nextTick(async () => {\n    if (!targetPage._renderDefault) {\n      await waitPageReaded(targetPage);\n    }\n\n    targetPage._renderDefault(defaults);\n    targetPage.attr(\"data-pause-init\", null);\n  });\n\n  return targetPage;\n};\n\nexport const waitPageReaded = (pageElement) => {\n  if (pageElement._rendered) {\n    return;\n  }\n\n  return new Promise((resolve) => {\n    const timer = setInterval(() => {\n      if (pageElement._rendered) {\n        clearInterval(timer);\n        resolve();\n      }\n    }, 500);\n  });\n};\n","import { nextTick } from \"../stanz/public.mjs\";\nimport $ from \"../xhear/base.mjs\";\nimport { fixRelate } from \"./public.mjs\";\nimport { renderExtends } from \"../xhear/render/render.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\n\nconst oldRender = renderExtends.render;\nrenderExtends.render = (e) => {\n  oldRender && oldRender(e);\n\n  const { step, name, target } = e;\n\n  const { link } = $.extensions;\n\n  if (step === \"init\") {\n    // Renders the component or page only once\n    if (target.host && link) {\n      $(target)\n        .all(\"a\")\n        .forEach((e) => link(e));\n    }\n  } else if (\n    name === \"attr\" &&\n    step === \"refresh\" &&\n    target.attr(\"olink\") === \"\"\n  ) {\n    const top = target.parents.pop() || target;\n\n    if (top.__fixLinkTimer) {\n      return;\n    }\n\n    top.__fixLinkTimer = nextTick(() => {\n      const { host } = target;\n\n      if (host && host.tag === \"o-page\") {\n        fixRelate(top.ele, host.src);\n      }\n\n      if (link) {\n        $(top)\n          .all(\"a\")\n          .forEach((e) => link(e));\n      }\n      delete top.__fixLinkTimer;\n    });\n  }\n};\n\nexport const initLink = (_this) => {\n  const $ele = $(_this);\n\n  // olink click to amend\n  $ele.on(\"click\", (e) => {\n    if (e.__processed) {\n      return;\n    }\n\n    const $tar = $(e.target);\n    const all = [$tar, ...$tar.parents];\n\n    let currentTarget = all.find((e) => e.tag === \"a\");\n    if (currentTarget) {\n      currentTarget = currentTarget.ele;\n    }\n\n    if (!currentTarget) {\n      return;\n    }\n\n    const targetVal = currentTarget.getAttribute(\"target\");\n    if (targetVal || currentTarget.getAttribute(\"download\")) {\n      return;\n    }\n\n    if (currentTarget.attributes.hasOwnProperty(\"olink\")) {\n      if ($ele.app) {\n        if (e.metaKey || e.shiftKey) {\n          return;\n        }\n\n        if (e.defaultPrevented) {\n          return;\n        }\n\n        e.preventDefault();\n\n        // Whether to abort the goto event\n        let prevented = false;\n        e.preventDefault = () => {\n          prevented = true;\n        };\n\n        e.__processed = true;\n\n        if (currentTarget.tagName === \"A\") {\n          const originHref = currentTarget.getAttribute(\"origin-href\");\n          // Prioritize the use of origin links\n          setTimeout(() => {\n            const finalHref = originHref || currentTarget.href;\n            finalHref && !prevented && $ele.app.goto(finalHref);\n          });\n        }\n      } else {\n        console.warn(getErr(\"olink_out_app\"), _this);\n      }\n    }\n  });\n};\n","import { resolvePath } from \"./public.mjs\";\nimport $ from \"../xhear/base.mjs\";\n\nconst strToBase64DataURI = async (str, mime, isb64 = true) => {\n  const file = new File([str], \"genfile\", { type: mime });\n\n  if (!isb64) {\n    return URL.createObjectURL(file);\n  }\n\n  const result = await new Promise((resolve) => {\n    const fr = new FileReader();\n\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n\n    fr.readAsDataURL(file);\n  });\n\n  return result;\n};\n\n/**\n * In the actual logical code, the generated code and the source code actually use the exact same logic, with only a change in line numbers. Therefore, it is only necessary to map the generated valid code back to the corresponding line numbers in the source file.\n *  */\nconst getSourcemapUrl = async (\n  filePath,\n  originStarRowIndex,\n  originEndRowIndex,\n  originContent,\n  startLine\n) => {\n  const originLineArr = originContent.split(\"\\n\");\n\n  let mappings = \"\";\n\n  for (let i = 0; i <= startLine; i++) {\n    mappings += \";\";\n  }\n\n  let beforeRowIndex = 0;\n  let beforeColIndex = 0;\n\n  for (let rowId = originStarRowIndex + 1; rowId < originEndRowIndex; rowId++) {\n    const target = originLineArr[rowId] || \"\";\n\n    let rowStr = \"\";\n\n    Array.from(target).forEach((e, colId) => {\n      const currentStr = `AA${vlcEncode(rowId - beforeRowIndex)}${vlcEncode(\n        colId - beforeColIndex\n      )}`;\n\n      if (!rowStr) {\n        rowStr = currentStr;\n      } else {\n        rowStr += `,${currentStr}`;\n      }\n\n      beforeRowIndex = rowId;\n      beforeColIndex = colId;\n    });\n\n    mappings += `${rowStr};`;\n  }\n\n  const sourcesContent = JSON.stringify([originContent])\n    .replace(/^\\[/, \"\")\n    .replace(/\\]$/, \"\");\n\n  const str = `{\"version\": 3,\n    \"sources\": [\"${filePath.replace(/\\?.+/, \"\")}\"],\n    \"sourcesContent\":[${sourcesContent}],\n    \"mappings\": \"${mappings}\"}`;\n\n  return await strToBase64DataURI(str, \"application/json\");\n};\n\n// 将 style 映射为 sourcemap 的 base64 link 标签，方便调试\nconst addStyleSourcemap = async (temp, originContent, filePath) => {\n  let reTemp = temp;\n\n  // 备份一份可修改的的原始内容\n  let backupOriginContent = originContent;\n\n  const tempEl = document.createElement(\"template\");\n  tempEl.innerHTML = temp;\n\n  const styleEls = tempEl.content.querySelectorAll(\"style\");\n\n  for (let e of Array.from(styleEls)) {\n    const styleContent = e.innerHTML;\n    const { outerHTML } = e;\n\n    // 编译后开始的行数\n    let startLine = 0;\n\n    // 拆分原内容\n    const matchArr = backupOriginContent.split(outerHTML);\n\n    // 编译前开始的行数\n    const originStarRowIndex = matchArr[0].split(\"\\n\").length - 1;\n\n    // 编译前结束的行数\n    const originEndRowIndex =\n      originStarRowIndex + styleContent.split(\"\\n\").length - 1;\n\n    // 替换 backupOriginContent 中已经sourcemap过的代码为换行符\n    let middleStr = \"\";\n    for (let i = 0, len = outerHTML.split(\"\\n\").length - 1; i < len; i++) {\n      middleStr += \"\\n\";\n    }\n    backupOriginContent = [matchArr[0], middleStr, matchArr[1]].join(\"\");\n\n    const sourceMapJSONURL = await getSourcemapUrl(\n      filePath,\n      originStarRowIndex,\n      originEndRowIndex,\n      originContent,\n      startLine\n    );\n\n    const sourcemapStr = `/*# sourceMappingURL=${sourceMapJSONURL}*/`;\n\n    reTemp = reTemp.replace(\n      outerHTML,\n      `${outerHTML.replace(\"</style>\", \"\")}\\n${sourcemapStr}</style>`\n    );\n  }\n\n  return reTemp;\n};\n\nconst cacheLink = new Map();\n\nconst isIdChar = (char) => /[A-Za-z0-9_$]/.test(char);\n\n/**\n * Locate the end of a quoted string starting at `start` (index of the quote char).\n * Returns the index right after the closing quote.\n */\nconst skipString = (code, start) => {\n  const quote = code[start];\n  let i = start + 1;\n  while (i < code.length) {\n    if (code[i] === \"\\\\\") {\n      i += 2;\n      continue;\n    }\n    if (code[i] === quote) {\n      return i + 1;\n    }\n    i++;\n  }\n  return i;\n};\n\n// Skip a template literal (`` ` ``) including ${ } interpolations.\nconst skipTemplate = (code, start) => {\n  let i = start + 1;\n  let depth = 0;\n  while (i < code.length) {\n    if (code[i] === \"\\\\\") {\n      i += 2;\n      continue;\n    }\n    if (depth === 0) {\n      if (code[i] === \"`\") {\n        return i + 1;\n      }\n      if (code[i] === \"$\" && code[i + 1] === \"{\") {\n        depth = 1;\n        i += 2;\n        continue;\n      }\n    } else {\n      if (code[i] === \"{\") {\n        depth++;\n      } else if (code[i] === \"}\") {\n        depth--;\n      }\n    }\n    i++;\n  }\n  return i;\n};\n\n// Skip a regex literal starting at `start` (index of `/`). Returns end index.\nconst skipRegExp = (code, start) => {\n  let i = start + 1;\n  let inClass = false;\n  while (i < code.length) {\n    if (code[i] === \"\\\\\") {\n      i += 2;\n      continue;\n    }\n    if (code[i] === \"\\n\") {\n      break;\n    }\n    if (inClass) {\n      if (code[i] === \"]\") {\n        inClass = false;\n      }\n    } else if (code[i] === \"[\") {\n      inClass = true;\n    } else if (code[i] === \"/\") {\n      return i + 1;\n    }\n    i++;\n  }\n  return i;\n};\n\n/**\n * Scan script code and rewrite the module specifier of every top-level\n * `import` declaration with resolvePath. Comments, strings, template\n * literals and regex literals are passed through untouched, so imports\n * surrounded or suffixed by comments are rewritten correctly.\n */\nconst rewriteImportPaths = (code, url) => {\n  let output = \"\";\n  let i = 0;\n  let prev = \"\"; // last significant code char, for regex vs division detection\n\n  while (i < code.length) {\n    const char = code[i];\n\n    // line comment\n    if (char === \"/\" && code[i + 1] === \"/\") {\n      let end = code.indexOf(\"\\n\", i);\n      if (end === -1) {\n        end = code.length;\n      }\n      output += code.slice(i, end);\n      i = end;\n      continue;\n    }\n\n    // block comment\n    if (char === \"/\" && code[i + 1] === \"*\") {\n      let end = code.indexOf(\"*/\", i + 2);\n      end = end === -1 ? code.length : end + 2;\n      output += code.slice(i, end);\n      i = end;\n      continue;\n    }\n\n    // string\n    if (char === '\"' || char === \"'\") {\n      const end = skipString(code, i);\n      output += code.slice(i, end);\n      i = end;\n      prev = char;\n      continue;\n    }\n\n    // template literal\n    if (char === \"`\") {\n      const end = skipTemplate(code, i);\n      output += code.slice(i, end);\n      i = end;\n      prev = char;\n      continue;\n    }\n\n    // regex literal (a `/` that can't be division)\n    if (char === \"/\" && !isIdChar(prev) && !\")]}\".includes(prev) && prev !== '\"' && prev !== \"'\" && prev !== \"`\") {\n      const end = skipRegExp(code, i);\n      output += code.slice(i, end);\n      i = end;\n      prev = char;\n      continue;\n    }\n\n    // top-level import keyword\n    if (\n      char === \"i\" &&\n      !isIdChar(prev) &&\n      code.startsWith(\"import\", i) &&\n      !isIdChar(code[i + 6])\n    ) {\n      // find the module specifier: the first string token after the keyword,\n      // skipping whitespace and comments. `import(` and `import.` are not\n      // static import declarations, leave them alone.\n      let j = i + 6;\n      let specifierStart = -1;\n      let specifierEnd = -1;\n      let quote = \"\";\n      while (j < code.length) {\n        const cj = code[j];\n        if (/\\s/.test(cj)) {\n          j++;\n          continue;\n        }\n        if (cj === \"/\" && code[j + 1] === \"/\") {\n          const end = code.indexOf(\"\\n\", j);\n          j = end === -1 ? code.length : end;\n          continue;\n        }\n        if (cj === \"/\" && code[j + 1] === \"*\") {\n          const end = code.indexOf(\"*/\", j + 2);\n          j = end === -1 ? code.length : end + 2;\n          continue;\n        }\n        if (cj === \"(\" || cj === \".\") {\n          // dynamic import or import.meta, not a static declaration\n          break;\n        }\n        if (cj === '\"' || cj === \"'\") {\n          specifierStart = j + 1;\n          specifierEnd = skipString(code, j) - 1;\n          quote = cj;\n          break;\n        }\n        j++;\n      }\n\n      if (specifierStart !== -1) {\n        const pathStr = code.slice(specifierStart, specifierEnd);\n        output += code.slice(i, specifierStart - 1);\n        output += `${quote}${resolvePath(pathStr, url)}${quote}`;\n        i = specifierEnd + 1;\n        continue;\n      }\n    }\n\n    if (!/\\s/.test(char)) {\n      prev = char;\n    }\n    output += char;\n    i++;\n  }\n\n  return output;\n};\n\nexport async function drawUrl(content, url, isPage = true) {\n  let targetUrl = cacheLink.get(url);\n  if (targetUrl) {\n    return targetUrl;\n  }\n\n  let isDebug = $.debugMode;\n\n  const tempEl = $(\"<template></template>\");\n  tempEl.html = content;\n  const titleEl = tempEl.$(\"title\");\n\n  const targetTemp = tempEl.$(`template[${isPage ? \"page\" : \"component\"}]`);\n  const scriptEl = targetTemp.$(\"script\");\n\n  scriptEl && scriptEl.remove();\n\n  // If there is no content other than the <script>, then the shadow root is not set.\n  const hasTemp = !!targetTemp.html\n    .replace(/\\<\\!\\-\\-[\\s\\S]*?\\-\\-\\>/g, \"\")\n    .trim();\n  let temp = \"\";\n\n  if (hasTemp) {\n    temp = targetTemp.html\n      .replace(/\\s+$/, \"\")\n      .replace(/`/g, \"\\\\`\")\n      .replace(/\\$\\{/g, \"\\\\${\");\n\n    if (isDebug) {\n      temp = await addStyleSourcemap(temp, content, url);\n    }\n\n    temp = \"<style>*:not(:defined){display:none;}</style>\" + temp;\n  }\n\n  // 原来html文件中，转译后，属于前半部分的内容（后半部分就是script标签内的内容）\n  const beforeContent = `\n  export const type = ${isPage ? \"ofa.PAGE\" : \"ofa.COMP\"};\n  ${\n    isPage && titleEl\n      ? `export const title = '${titleEl.text.replace(/\\'/g, \"\\\\'\")}';`\n      : \"\"\n  }\n  export const temp = \\`${temp}\\`;`;\n\n  let scriptContent = \"\";\n  if (scriptEl) {\n    scriptContent = rewriteImportPaths(scriptEl.html, url);\n  }\n\n  const fileContent = `${beforeContent};\n${scriptContent}`;\n\n  let sourcemapStr = \"\";\n\n  if (isDebug) {\n    const originLineArr = content.split(\"\\n\");\n\n    // Determine the starting line number of the source file.\n    const originStarRowIndex = originLineArr.findIndex(\n      (lineContent) => {\n        const trimmed = lineContent.trim();\n        return trimmed === \"<script>\" || trimmed.startsWith(\"<script \");\n      }\n    );\n\n    // Determine the ending line number of the source file.\n    const originEndRowIndex = originLineArr.findIndex(\n      (lineContent) => lineContent.trim() === \"</script>\"\n    );\n\n    sourcemapStr = `//# sourceMappingURL=${await getSourcemapUrl(\n      url,\n      originStarRowIndex,\n      originEndRowIndex,\n      content,\n      beforeContent.split(\"\\n\").length\n    )}`;\n  }\n\n  const finalContent = `${fileContent}\\n${sourcemapStr}`;\n\n  const isFirefox = navigator.userAgent.includes(\"Firefox\");\n\n  targetUrl = strToBase64DataURI(\n    finalContent,\n    \"text/javascript\",\n    isFirefox ? false : true\n  );\n\n  cacheLink.set(url, targetUrl);\n\n  return targetUrl;\n}\n\nconst base64 =\n  \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction toVLQSigned(value) {\n  return value < 0 ? (-value << 1) + 1 : (value << 1) + 0;\n}\n\nfunction vlcEncode(value) {\n  let encoded = \"\";\n  let vlq = toVLQSigned(value);\n\n  do {\n    let digit = vlq & 0b11111;\n    vlq >>>= 5;\n    if (vlq > 0) {\n      digit |= 0b100000;\n    }\n    encoded += base64[digit];\n  } while (vlq > 0);\n\n  return encoded;\n}\n","import lm from \"../drill.js/base.mjs\";\nimport $ from \"../xhear/base.mjs\";\nimport { renderElement } from \"../xhear/register.mjs\";\nimport { convert } from \"../xhear/render/render.mjs\";\nimport { searchEle, isFunction } from \"../xhear/public.mjs\";\nimport {\n  fixRelatePathContent,\n  resolvePath,\n  getPagesData,\n  createPage,\n  ISERROR,\n} from \"./public.mjs\";\nimport { initLink } from \"./link.mjs\";\nimport { nextTick } from \"../stanz/public.mjs\";\n\nimport { drawUrl } from \"./draw-template.mjs\";\nimport { getErr, getErrDesc } from \"../ofa-error/main.js\";\n\nconst clone = (obj) => JSON.parse(JSON.stringify(obj));\n\nconst PAGE = Symbol(\"Page\");\n\nObject.defineProperty($, \"PAGE\", {\n  value: PAGE,\n});\n\nlm.use([\"html\", \"htm\"], async (ctx, next) => {\n  const { result: content, params } = ctx;\n\n  if (\n    content &&\n    /<template +page *>/.test(content) &&\n    !params.includes(\"-ignore-temp\")\n  ) {\n    try {\n      const url = await drawUrl(content, ctx.url);\n      ctx.result = await lm()(`${url} .mjs --real:${ctx.url}`);\n    } catch (error) {\n      throw getErr(\n        \"load_page_module\",\n        {\n          url: ctx.url,\n        },\n        error,\n      );\n    }\n    ctx.resultContent = content;\n  }\n\n  await next();\n});\n\nlm.use([\"js\", \"mjs\"], async (ctx, next) => {\n  const { result: moduleData, url, realUrl } = ctx;\n  if (typeof moduleData !== \"object\" || moduleData.type !== PAGE) {\n    await next();\n    return;\n  }\n\n  const defaultsData = await getDefault(moduleData, realUrl || url);\n\n  let tempSrc = defaultsData.temp;\n\n  if (!/<.+>/.test(tempSrc)) {\n    if (tempSrc) {\n      tempSrc = resolvePath(tempSrc, url);\n    } else {\n      tempSrc = url.replace(/\\.m?js.*/, \".html\");\n    }\n\n    try {\n      defaultsData.temp = await fetch(tempSrc).then((e) => e.text());\n    } catch (error) {\n      const err = getErr(\n        \"fetch_temp_err\",\n        {\n          url: realUrl || url,\n          tempSrc,\n        },\n        error,\n      );\n      self.emit(\"error\", { data: { error: err } });\n      throw err;\n    }\n  }\n\n  ctx.result = defaultsData;\n\n  await next();\n});\n\nsetTimeout(() => {\n  // Let the pod's running time be slower than the `type=\"module\"` time\n  $.register({\n    tag: \"o-page\",\n    attrs: {\n      src: null,\n    },\n    data: {\n      pageIsReady: null,\n    },\n    watch: {\n      async src(src) {\n        if (!src) {\n          return;\n        }\n\n        if (!src.startsWith(\"//\") && !/[a-z]+:\\/\\//.test(src)) {\n          src = resolvePath(src);\n          this.src = src;\n          return;\n        }\n\n        if (this.__init_src) {\n          if (this.__init_src !== src) {\n            throw Error(\n              \"A page that has already been initialized cannot be set with the src attribute\",\n            );\n          }\n          return;\n        }\n\n        this.__init_src = src;\n\n        if (this._defaults || this.attr(\"data-pause-init\")) {\n          return;\n        }\n\n        const pagesData = await getPagesData(src);\n\n        if (this._defaults) {\n          return;\n        }\n\n        const target = pagesData.pop();\n\n        pagesData.forEach((e, i) => {\n          const parentPage = createPage(e.src, e.defaults);\n\n          if (this.parent) {\n            this.wrap(parentPage);\n          } else {\n            const needWraps = this.__need_wraps || (this.__need_wraps = []);\n            needWraps.push(parentPage);\n          }\n        });\n\n        if (target.ISERROR === ISERROR) {\n          const failContent = getFailContent(\n            src,\n            target,\n            this?.app?._module?.fail,\n          );\n\n          this._renderDefault({\n            type: PAGE,\n            temp: failContent,\n          });\n        } else {\n          this._renderDefault(target.defaults);\n        }\n      },\n    },\n    attached() {\n      // this.css.display = \"block\";\n\n      const needWraps = this.__need_wraps;\n      if (needWraps) {\n        needWraps.forEach((page) => {\n          this.wrap(page);\n        });\n        delete this.__need_wraps;\n      }\n\n      if (this.__not_run_attached) {\n        if (this._defaults.attached) {\n          this._defaults.attached.call(this);\n        }\n        delete this.__not_run_attached;\n      }\n    },\n    detached() {\n      const { _defaults } = this;\n\n      if (_defaults && _defaults.detached) {\n        _defaults.detached.call(this);\n      }\n    },\n    proto: {\n      async _renderDefault(defaults) {\n        const { src } = this;\n\n        if (defaults.data) {\n          // 检查是否有key冲突\n          Object.keys(defaults.data).forEach((name) => {\n            if (\n              [\n                \"src\",\n                \"goto\",\n                \"replace\",\n                \"back\",\n                \"pageAnime\",\n                \"pageIsReady\",\n              ].includes(name) ||\n              name in $.fn\n            ) {\n              throw getErr(\"page_invalid_key\", {\n                src,\n                targetName: \"data\",\n                name,\n              });\n            }\n          });\n        }\n\n        if (defaults.proto) {\n          Object.keys(defaults.proto).forEach((name) => {\n            if (name in this) {\n              console.warn(\n                getErrDesc(\"page_invalid_key\", {\n                  src,\n                  targetName: \"proto\",\n                  name,\n                }),\n                defaults,\n              );\n            }\n          });\n        }\n\n        if (this._defaults) {\n          const err = getErr(\"page_no_defaults\", { src });\n          console.warn(err, this);\n          throw err;\n        }\n\n        this._defaults = defaults;\n\n        if (defaults.pageAnime) {\n          this._pageAnime = defaults.pageAnime;\n        }\n\n        if (!defaults || defaults.type !== PAGE) {\n          const err = getErr(\"not_page_module\", { src });\n          console.warn(err, this);\n          this.emit(\"error\", { data: { error: err } });\n          this.__reject(err);\n          throw err;\n        }\n\n        const template = document.createElement(\"template\");\n        template.innerHTML = fixRelatePathContent(defaults.temp, src);\n        const temps = convert(template);\n\n        try {\n          renderElement({\n            defaults,\n            ele: this.ele,\n            template,\n            temps,\n          });\n        } catch (error) {\n          const err = getErr(\"page_failed\", { src }, error);\n          console.error(err);\n          console.warn(err, this);\n        }\n\n        await dispatchLoad(this, defaults.loaded);\n\n        initLink(this.shadow);\n\n        this.emit(\"page-loaded\");\n\n        this.__resolve();\n\n        this.pageIsReady = 1;\n\n        const { app } = this;\n        if (app && !app.appIsReady) {\n          nextTick(() => {\n            app.appIsReady = 1;\n          });\n        }\n\n        if (this.ele.isConnected) {\n          if (defaults.attached) {\n            defaults.attached.call(this);\n          }\n        } else {\n          this.__not_run_attached = 1;\n        }\n      },\n      back() {\n        this.app.back();\n      },\n      goto(src) {\n        this.app.goto(resolvePath(src, this.src));\n      },\n      replace(src) {\n        this.app.replace(resolvePath(src, this.src));\n      },\n      get pageAnime() {\n        const { app, _pageAnime } = this;\n\n        const { pageAnime } = app?._module || {};\n\n        return clone({ ...pageAnime, ...(_pageAnime || {}) });\n      },\n      set pageAnime(val) {\n        this._pageAnime = val;\n      },\n    },\n\n    ready() {\n      this._rendered = new Promise((resolve, reject) => {\n        this.__resolve = () => {\n          delete this.__resolve;\n          delete this.__reject;\n          resolve();\n        };\n        this.__reject = () => {\n          delete this.__resolve;\n          delete this.__reject;\n          reject();\n        };\n      });\n    },\n  });\n});\n\nexport const dispatchLoad = async (_this, loaded) => {\n  const shadow = _this.ele.shadowRoot;\n\n  if (shadow) {\n    const srcEles = searchEle(shadow, `l-m,load-module`);\n    const pms = srcEles.map(\n      (el) =>\n        new Promise((res) => {\n          el.addEventListener(\"load\", (e) => {\n            res();\n          });\n        }),\n    );\n\n    const links = searchEle(shadow, `link`);\n\n    links.forEach((link) => {\n      if (link.rel === \"stylesheet\") {\n        pms.push(\n          new Promise((res) => {\n            let resolve = () => {\n              clearInterval(timer);\n              link.removeEventListener(\"load\", resolve);\n              link.removeEventListener(\"error\", resolve);\n              res();\n            };\n            const timer = setInterval(() => {\n              if (!link.parentNode) {\n                resolve();\n              }\n            }, 100);\n\n            if (link.sheet) {\n              resolve();\n            } else {\n              link.addEventListener(\"load\", resolve);\n              link.addEventListener(\"error\", resolve);\n            }\n          }),\n        );\n      }\n    });\n\n    await Promise.all(pms);\n  }\n\n  if (loaded) {\n    loaded.call(_this);\n  }\n};\n\nexport const getDefault = async (moduleData, url) => {\n  let finnalDefault = {};\n\n  const { default: defaultData } = moduleData;\n\n  const relateLoad = lm({\n    url,\n  });\n\n  if (isFunction(defaultData)) {\n    finnalDefault = await defaultData({\n      load: relateLoad,\n      url,\n      get query() {\n        const urlObj = new URL(url);\n        return Object.fromEntries(Array.from(urlObj.searchParams.entries()));\n      },\n    });\n  } else if (defaultData instanceof Object) {\n    finnalDefault = { ...defaultData };\n  }\n\n  const defaults = {\n    proto: {},\n    ...moduleData,\n    ...finnalDefault,\n  };\n\n  return defaults;\n};\n\nexport const getFailContent = (src, target, fail) => {\n  let failContent;\n\n  if (fail) {\n    failContent = fail({\n      src,\n      error: target.error,\n    });\n  } else {\n    failContent = `<div style=\"padding:20px;color:red;\">${(\n      target.error.stack || target.error.toString()\n    )\n      .replace(/\\n/g, \"<br>\")\n      .replace(/ /g, \"&nbsp;\")}</div>`;\n  }\n\n  return failContent;\n};\n","import lm from \"../drill.js/base.mjs\";\nimport $ from \"../xhear/base.mjs\";\nimport { isFunction, toDashCase } from \"../xhear/public.mjs\";\nimport { dispatchLoad } from \"./page.mjs\";\nimport { drawUrl } from \"./draw-template.mjs\";\nimport { fixRelatePathContent, resolvePath } from \"./public.mjs\";\nimport { initLink } from \"./link.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\n\nconst COMP = Symbol(\"Component\");\nexport const COMPONENT_PATH = Symbol(\"PATH\");\n\nObject.defineProperty($, \"COMP\", {\n  value: COMP,\n});\n\nconst cacheComps = {};\n\nlm.use([\"html\", \"htm\"], async (ctx, next) => {\n  const { result: content, params } = ctx;\n\n  if (\n    content &&\n    /<template +component *>/.test(content) &&\n    !params.includes(\"-ignore-temp\")\n  ) {\n    try {\n      const url = await drawUrl(content, ctx.url, false);\n      ctx.result = await lm()(`${url} .mjs --real:${ctx.url}`);\n    } catch (err) {\n      throw getErr(\n        \"load_comp_module\",\n        {\n          url: ctx.url,\n        },\n        err,\n      );\n    }\n    ctx.resultContent = content;\n  }\n\n  await next();\n});\n\nlm.use([\"js\", \"mjs\"], async (ctx, next) => {\n  const { result: moduleData, url, realUrl } = ctx;\n  if (typeof moduleData !== \"object\" || moduleData.type !== COMP) {\n    next();\n    return;\n  }\n\n  let finnalDefault = {};\n\n  const { default: defaultData } = moduleData;\n\n  const path = realUrl || url;\n\n  if (isFunction(defaultData)) {\n    finnalDefault = await defaultData({\n      load: lm({\n        url: path,\n      }),\n      url: path,\n    });\n  } else if (defaultData instanceof Object) {\n    finnalDefault = { ...defaultData };\n  }\n\n  const { tag, temp } = { ...moduleData, ...finnalDefault };\n\n  let tagName = tag;\n  const matchName = path.match(/\\/([^/]+)\\.m?(js|htm|html)$/);\n\n  if (!tagName) {\n    if (matchName) {\n      tagName = toDashCase(matchName[1]);\n    }\n  }\n\n  const cacheUrl = cacheComps[tagName];\n  if (cacheUrl) {\n    if (path !== cacheUrl) {\n      throw getErr(\"comp_registered\", {\n        tag: tagName,\n      });\n    }\n\n    await next();\n    return;\n  }\n\n  cacheComps[tagName] = path;\n\n  let tempUrl,\n    tempContent = \"\";\n\n  if (/<.+>/.test(temp)) {\n    tempUrl = path;\n    tempContent = temp;\n  } else if (temp !== \"\") {\n    // An empty string means the shadow root is not needed.\n    if (!temp) {\n      tempUrl = resolvePath(`${matchName[1]}.html`, path);\n    } else {\n      tempUrl = resolvePath(temp, path);\n    }\n\n    tempContent = await fetch(tempUrl).then((e) => e.text());\n  }\n\n  const registerOpts = {\n    ...moduleData,\n    ...finnalDefault,\n  };\n\n  const oldReady = registerOpts.ready;\n  const { loaded } = registerOpts;\n  registerOpts.ready = async function (...args) {\n    oldReady && oldReady.apply(this, args);\n    loaded && dispatchLoad(this, loaded);\n    this.shadow && initLink(this.shadow);\n  };\n\n  const oldCreated = registerOpts.created;\n  registerOpts.created = function (...args) {\n    this[COMPONENT_PATH] = path;\n    oldCreated && oldCreated.call(this, ...args);\n  };\n\n  const regTemp = fixRelatePathContent(tempContent, path || tempUrl);\n\n  $.register({\n    ...registerOpts,\n    tag: tagName,\n    temp: regTemp,\n  });\n\n  await next();\n});\n","// import lm from \"../drill.js/base.mjs\";\nimport $ from \"../xhear/base.mjs\";\nimport {\n  resolvePath,\n  getPagesData,\n  ISERROR,\n  createPage,\n  waitPageReaded,\n} from \"./public.mjs\";\nimport { getDefault, getFailContent } from \"./page.mjs\";\nimport { createXEle } from \"../xhear/util.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\n\nconst HISTORY = \"_history\";\nconst FORWARDS = \"_forwards\";\n\nconst appendPage = async ({ src, app }) => {\n  const { loading, fail } = app._module || {};\n\n  let loadingEl;\n  if (loading) {\n    loadingEl = createXEle(loading());\n\n    if (!loadingEl) {\n      const err = getErr(\"loading_nothing\");\n      console.warn(err, loading);\n      throw err;\n    }\n\n    app.push(loadingEl);\n  }\n\n  const oriNextPages = await getPagesData(src);\n\n  // Snapshot current pages after await;\n  // concurrent navigations (e.g. the initial hash goto racing with a\n  // popstate-driven goto) would otherwise both see \"no current page\"\n  // and append the same page twice.\n  const currentPages = [];\n  {\n    const { current } = app;\n    if (current) {\n      currentPages.push(current);\n      for (let page of current.parents) {\n        if (page.tag !== \"o-page\") {\n          break;\n        }\n\n        currentPages.unshift(page);\n      }\n    }\n  }\n\n  let container = app;\n\n  const publicParents = []; // Public parent pages that have not been cleared\n  const finalPages = [];\n  let old;\n\n  // Nested routing code\n  // Keep the parent page with the same src\n  let isSame = true;\n  oriNextPages.forEach((e, index) => {\n    const current = currentPages[index];\n\n    if (!isSame) {\n      finalPages.push(e);\n      return;\n    }\n\n    if (!current || current.src !== e.src) {\n      isSame = false;\n      finalPages.push(e);\n      old = current;\n      return;\n    }\n\n    publicParents.push(current);\n\n    container = current;\n  });\n\n  // In the case of only the parent page, the old variable needs to be corrected\n  if (currentPages.length > oriNextPages.length && !old) {\n    currentPages.some((e, index) => {\n      const current = oriNextPages[index];\n\n      if (!current || current.src !== e.src) {\n        old = e;\n        return true;\n      }\n    });\n  }\n\n  let topPage, innerPage;\n\n  finalPages.forEach((pageData) => {\n    const { ISERROR: isError } = pageData;\n\n    let page;\n    if (isError) {\n      const failContent = getFailContent(pageData.src, pageData, fail);\n\n      page = createPage(pageData.src, {\n        type: $.PAGE,\n        temp: failContent,\n      });\n    } else {\n      page = createPage(pageData.src, pageData.defaults);\n    }\n\n    if (!topPage) {\n      topPage = page;\n      return;\n    }\n\n    if (!innerPage) {\n      topPage.push(page);\n      innerPage = page;\n      return;\n    }\n\n    innerPage.push(page);\n    innerPage = page;\n  });\n\n  if (topPage) {\n    container.push(topPage);\n  }\n\n  loadingEl && loadingEl.remove();\n\n  return { current: topPage, old, publics: publicParents };\n};\n\n// 触发父page的 routerChange 事件\nconst emitRouterChange = (_this, publics, type) => {\n  if (publics && publics.length) {\n    const { current } = _this;\n    publics.forEach((page) => {\n      // const { page } = e;\n      const { routerChange } = page._defaults;\n\n      if (routerChange) {\n        routerChange.call(page, { type, current });\n      }\n    });\n  }\n};\n\n$.register({\n  tag: \"o-app\",\n  temp: `<style>:host{position:relative;display:block}::slotted(*){display:block;width:100%;height:100%;}</style><slot></slot>`,\n  attrs: {\n    src: null,\n  },\n  data: {\n    [HISTORY]: [],\n    appIsReady: null,\n    // _forwards: [],\n  },\n  watch: {\n    async src(val) {\n      if (this.__init_src) {\n        if (this.__init_src !== val) {\n          throw getErr(\"app_src_change\");\n        }\n        return;\n      }\n\n      if (!val) {\n        return;\n      }\n\n      this.__init_src = val;\n\n      let selfUrl = val;\n      if (val && !val.startsWith(\"//\") && !/[a-z]+:\\/\\//.test(val)) {\n        selfUrl = resolvePath(val);\n      }\n\n      const load = lm();\n\n      const moduleData = await load(selfUrl);\n\n      if (moduleData.allowForward) {\n        this[FORWARDS] = [];\n      }\n\n      const defaults = await getDefault(moduleData, selfUrl);\n\n      this._module = defaults;\n\n      this.extend(defaults.proto);\n\n      if (defaults.ready) {\n        defaults.ready.call(this);\n      }\n\n      if (this._settedRouters) {\n        return;\n      }\n\n      if (!this.$(\"o-page\") && !this._initHome && defaults.home) {\n        const homeUrl = new URL(defaults.home, selfUrl).href;\n        this.push(`<o-page src=\"${homeUrl}\"></o-page>`);\n      }\n    },\n  },\n  proto: {\n    async forward(delta = 1) {\n      if (!this[FORWARDS]) {\n        const err = getErr(\"need_forwards\");\n        console.warn(err, this);\n        return;\n      }\n\n      delta = delta < this[FORWARDS].length ? delta : this[FORWARDS].length;\n\n      const forwardHistory = this[FORWARDS].splice(-delta);\n\n      if (!forwardHistory.length) {\n        const err = getErr(\"app_noforward\");\n        console.warn(err, {\n          app: this,\n        });\n        return;\n      }\n\n      return this._navigate({\n        type: \"forward\",\n        src: forwardHistory[0].src,\n        forwardHistory,\n        delta,\n      });\n    },\n    async back(delta = 1) {\n      if (!this[HISTORY].length) {\n        const err = getErr(\"app_noback\");\n        console.warn(err, {\n          app: this,\n        });\n        return;\n      }\n\n      const oldRouters = this.routers;\n\n      const { _noanime } = this;\n\n      // Delete historical data for response numbers\n      delta = delta < this[HISTORY].length ? delta : this[HISTORY].length;\n\n      const newCurrent = this[HISTORY].splice(-delta)[0];\n\n      let {\n        current: page,\n        old: needRemovePage,\n        publics,\n      } = await appendPage({\n        src: newCurrent.src,\n        app: this,\n      });\n\n      if (!_noanime && page) {\n        await pageInAnime({\n          page,\n          key: \"previous\",\n        });\n      }\n\n      if (needRemovePage) {\n        needRemovePage = resetOldPage(needRemovePage);\n      }\n\n      const oldHis = oldRouters.slice(-1 * delta);\n\n      if (this[FORWARDS]) {\n        this[FORWARDS].push(...oldHis);\n      }\n\n      this.emit(\"router-change\", {\n        data: { name: \"back\", delta, historys: oldHis },\n      });\n\n      emitRouterChange(this, publics, \"back\");\n\n      if (!_noanime && needRemovePage) {\n        await pageOutAnime({\n          page: needRemovePage,\n          key: \"next\",\n        });\n      }\n\n      if (needRemovePage) {\n        needRemovePage.remove();\n      }\n    },\n    async _navigate(options) {\n      let { type, src } = options;\n\n      const { _noanime } = this;\n      const { current: oldCurrent } = this;\n      // src = new URL(src, location.href).href;\n      src = resolvePath(src);\n\n      runAccess(this, src);\n\n      if (!oldCurrent) {\n        this._initHome = src;\n      }\n\n      let {\n        current: page,\n        old: needRemovePage,\n        publics,\n      } = await appendPage({\n        src,\n        app: this,\n      });\n\n      if (!page) {\n        return;\n      }\n\n      if (!_noanime && page) {\n        await pageInAnime({\n          page,\n          key: \"next\",\n        });\n      }\n\n      if (needRemovePage) {\n        needRemovePage = resetOldPage(needRemovePage);\n      }\n\n      const routerData = { name: type, src };\n\n      if (type === \"goto\" || type === \"forward\") {\n        oldCurrent && this[HISTORY].push({ src: oldCurrent.src });\n      }\n\n      if (type === \"goto\") {\n        if (Array.isArray(this[FORWARDS])) {\n          this[FORWARDS] = [];\n        }\n      }\n\n      if (type === \"forward\") {\n        const { forwardHistory } = options;\n        const nextHistory = forwardHistory.slice(1).reverse();\n        this[HISTORY].push(...nextHistory);\n        routerData.delta = options.delta;\n      }\n\n      this.emit(\"router-change\", {\n        data: routerData,\n      });\n\n      emitRouterChange(this, publics, type);\n\n      if (oldCurrent && needRemovePage) {\n        if (!_noanime) {\n          await pageOutAnime({\n            page: needRemovePage,\n            key: \"previous\",\n          });\n        }\n        needRemovePage.remove();\n      }\n    },\n    goto(src) {\n      return this._navigate({ type: \"goto\", src });\n    },\n    replace(src) {\n      return this._navigate({ type: \"replace\", src });\n    },\n    get current() {\n      return this.all(\"o-page\")\n        .reverse()\n        .find((page) => {\n          let target = page;\n          while (target.tag === \"o-page\") {\n            if (target.data.willRemoved) {\n              return false;\n            }\n            target = target.parent;\n          }\n\n          return true;\n        });\n    },\n    get routers() {\n      let { current } = this;\n\n      if (!current) {\n        return [];\n      }\n\n      const routers = [\n        ...this[HISTORY],\n        {\n          src: current.src,\n        },\n      ];\n\n      return routers;\n    },\n    set routers(_routers) {\n      _routers = _routers.map((e) => {\n        runAccess(this, e.src);\n\n        return { src: e.src };\n      });\n\n      this._settedRouters = 1;\n\n      this.html = \"\";\n\n      const historyRouters = _routers.slice();\n\n      const currentRouter = historyRouters.pop();\n\n      this[HISTORY].length = 0;\n      this[HISTORY].push(...historyRouters);\n\n      this.push({\n        tag: \"o-page\",\n        src: currentRouter.src,\n      });\n    },\n  },\n});\n\n// Ensure that the page is available, handle cross-domain pages and other operations\nconst runAccess = (app, src) => {\n  const access = app?._module?.access;\n\n  const srcObj = new URL(src);\n\n  if (srcObj.origin !== location.origin && !access) {\n    const err = getErr(\"no_cross_access_func\");\n    console.warn(err, app.ele, app?._module);\n    throw err;\n  }\n\n  if (access) {\n    const result = access(src);\n\n    if (result !== true) {\n      const err = getErr(\n        \"access_return_error\",\n        { src },\n        result instanceof Error ? result : undefined\n      );\n      console.warn(err, app);\n      throw err;\n    }\n  }\n};\n\nconst pageInAnime = async ({ page, key }) => {\n  if (!page._rendered) {\n    // firefox bug\n    await waitPageReaded(page);\n  }\n\n  const { pageAnime } = page;\n\n  const targetAnime = pageAnime[key];\n\n  if (targetAnime) {\n    page.css = {\n      ...page.css,\n      ...targetAnime,\n    };\n\n    nextAnimeFrame(() => {\n      page.css = {\n        ...page.css,\n        transition: \"all ease .3s\",\n        ...(pageAnime.current || {}),\n      };\n    });\n  }\n};\n\nconst pageOutAnime = ({ page, key }) =>\n  new Promise((resolve) => {\n    const targetAnime = page.pageAnime[key];\n\n    if (targetAnime) {\n      nextAnimeFrame(() => {\n        let resolved = false;\n        const finish = () => {\n          if (resolved) {\n            return;\n          }\n          resolved = true;\n          clearTimeout(timer);\n          resolve();\n        };\n\n        const timer = setTimeout(finish, 350);\n\n        page.one(\"transitionend\", finish);\n\n        // Ensure the current style is computed before changing it,\n        // so the transition starts reliably on Firefox.\n        void page.ele.offsetHeight;\n\n        page.css = {\n          ...page.css,\n          transition: \"all ease .3s\",\n          ...targetAnime,\n        };\n      });\n    } else {\n      resolve();\n    }\n  });\n\nconst nextAnimeFrame = (func) =>\n  requestAnimationFrame(() => {\n    setTimeout(func, 5);\n  });\n\nconst resetOldPage = (needRemovePage) => {\n  // Measure while the page is still in flow, before applying position:absolute\n  const { offsetWidth, offsetHeight } = needRemovePage.ele;\n  needRemovePage.css = {\n    position: \"absolute\",\n    width: `${offsetWidth}px`,\n    height: `${offsetHeight}px`,\n  };\n  needRemovePage.data.willRemoved = 1;\n\n  return needRemovePage;\n};\n","import $ from \"../xhear/base.mjs\";\nimport { isFunction } from \"../xhear/public.mjs\";\nimport { COMPONENT_PATH } from \"./comp.mjs\";\n\nconst oldAttr = $.fn.attr;\n\nfunction attr(...args) {\n  let [name, value, options] = args;\n\n  if (isFunction(value)) {\n    value = value();\n  }\n\n  const { host } = this;\n\n  if (host && [\"href\", \"src\"].includes(name) && /^\\./.test(value)) {\n    const { PATH } = host;\n\n    if (PATH) {\n      const { href } = new URL(value, PATH);\n\n      return oldAttr.call(this, name, href);\n    }\n  }\n\n  return oldAttr.call(this, ...args);\n}\n\nattr.always = oldAttr.always;\n\n$.fn.extend({\n  get app() {\n    // 获取所有上级元素\n    const composed = this.composedPath();\n\n    // 查找o-app元素\n    const app = composed.find((el) => el.tagName === \"O-APP\");\n\n    if (app) {\n      return $(app);\n    }\n  },\n  get PATH() {\n    // component or page file path\n    return this[COMPONENT_PATH] || this.src || null;\n  },\n  attr,\n});\n","import $ from \"../xhear/base.mjs\";\nimport { hyphenToUpperCase, toDashCase } from \"../xhear/public.mjs\";\n\nconst InvalidKeys = [\n  \"tag\",\n  \"name\",\n  \"class\",\n  \"style\",\n  \"id\",\n  \"x-bind-data\",\n  \"is-root\",\n];\n\nconst consumers = {}; // 存储所有的consumer元素\n\n// 根provider\nconst rootProviders = {};\n\nconst temp = `<style>:host{display:contents}</style><slot></slot>`;\n\nObject.defineProperty($, \"getRootProvider\", {\n  value(name) {\n    return rootProviders[name];\n  },\n});\n\nconst publicWatch = {\n  name(name) {\n    const oldName = this.__oldName;\n    this.__oldName = name;\n\n    // 是否已经设置过\n    if (!this.__named) {\n      this.__named = 1;\n      return;\n    }\n\n    if (oldName !== name) {\n      if (this.tag === \"o-consumer\") {\n        // consumer 导致的更新\n        if (consumers[oldName]) {\n          consumers[oldName].delete(this);\n        }\n        if (!consumers[name]) {\n          consumers[name] = new Set();\n        }\n        consumers[name].add(this);\n        this._refresh();\n      } else {\n        // provider 导致的更新\n        if (oldName && consumers[oldName]) {\n          consumers[oldName].forEach((item) => item._refresh());\n        }\n        if (name && consumers[name]) {\n          consumers[name].forEach((item) => item._refresh());\n        }\n      }\n    }\n  },\n};\n\nconst updateProvider = (provider) => {\n  if (!provider.name) {\n    return;\n  }\n\n  // 更新底层的所有consumer\n  const pool = consumers[provider.name];\n  if (pool) {\n    // 通知对应name所有的consumer更新数据\n    pool.forEach((item) => item._refresh());\n  }\n};\n\n// 初始化 provider\nconst initProvider = async (provider) => {\n  const needRemoves = [];\n\n  const ele = provider.ele;\n\n  // 将 attributes 上的属性设置到 provider 上\n  for (const key of ele.attributes) {\n    if (InvalidKeys.includes(key.name)) {\n      continue;\n    }\n\n    provider[hyphenToUpperCase(key.name)] = key.value;\n    needRemoves.push(key.name);\n  }\n\n  needRemoves.forEach((key) => ele.removeAttribute(key));\n\n  // 监听数据变化升级consumer\n  provider._init_tid = provider.watchTick(() => updateProvider(provider));\n\n  updateProvider(provider); // 尝试初次更新 consumer\n};\n\nconst providerProto = {\n  dispatch(eventName, options) {\n    const pool = consumers[this.name];\n\n    // 筛选可用的元素\n    if (pool) {\n      const event = new Event(eventName, { bubbles: false, cancelable: true });\n      event.data = options?.data;\n\n      for (let $ele of pool) {\n        if (event.defaultPrevented) {\n          break;\n        }\n        // 确认是当前provider的consumer\n        if ($ele.providers.includes(this)) {\n          event.provider = this.ele;\n\n          $ele.ele.dispatchEvent(event);\n        }\n      }\n    }\n  },\n};\n\n$.register({\n  tag: \"o-root-provider\",\n  attrs: {\n    name: null,\n  },\n  watch: {\n    ...publicWatch,\n  },\n  proto: {\n    ...providerProto,\n  },\n  attached() {\n    initProvider(this);\n    rootProviders[this.name] = this;\n  },\n  detached() {\n    this.unwatch(this._init_tid);\n    delete rootProviders[this.name];\n    updateProvider(this);\n  },\n});\n\n// 获取对应 name 的上一级 provider 元素\n$.fn.getProvider = function (name) {\n  const ancestors = this.composedPath();\n\n  // 获取最近的 provider 元素\n  let provider = ancestors.find((element) => {\n    return (\n      element !== this.ele &&\n      element.tagName &&\n      element.tagName.toLowerCase() === \"o-provider\" &&\n      element.getAttribute(\"name\") === name\n    );\n  });\n\n  if (!provider && this !== rootProviders[name]) {\n    provider = rootProviders[name];\n  }\n\n  if (!provider) {\n    return null;\n  }\n\n  return $(provider);\n};\n/**\n * 向消费者元素池中添加元素\n * @param {$ele} $ele - 要添加的元素\n */\nconst addConsumer = ($ele) => {\n  if (!consumers[$ele.name]) {\n    consumers[$ele.name] = new Set();\n  }\n  consumers[$ele.name].add($ele);\n};\n\n/**\n * 从消费者元素池中移除元素\n * @param {$ele} $ele - 要移除的元素\n */\nconst removeConsumer = ($ele) => {\n  const pool = consumers[$ele.name];\n  if (pool) {\n    pool.delete($ele);\n  }\n};\n\n$.register({\n  tag: \"o-provider\",\n  temp,\n  attrs: {\n    name: null,\n  },\n  watch: {\n    ...publicWatch,\n  },\n  proto: {\n    ...providerProto,\n  },\n  attached() {\n    initProvider(this);\n  },\n  detached() {\n    this.unwatch(this._init_tid);\n    updateProvider(this);\n  },\n});\n\n$.register({\n  tag: \"o-consumer\",\n  temp,\n  attrs: {\n    name: null,\n  },\n  watch: {\n    ...publicWatch,\n  },\n  proto: {\n    get provider() {\n      return this.getProvider(this.name);\n    },\n\n    get providers() {\n      const providers = [];\n\n      let provider = this.provider;\n      while (provider) {\n        providers.push(provider);\n        provider = provider.getProvider(this.name);\n      }\n\n      return providers;\n    },\n\n    // 更新自身的数据\n    _refresh() {\n      if (!this.getProvider(this.name)) {\n        // 应该清空自身的数据\n        for (let name of Object.keys(this)) {\n          if (InvalidKeys.includes(name) || !/\\D/.test(name)) {\n            // 跳过默认key和数字\n            continue;\n          }\n          this[name] = undefined;\n        }\n        return;\n      }\n\n      const finnalData = {};\n\n      for (let provider of this.providers) {\n        for (let name of Object.keys(provider)) {\n          if (InvalidKeys.includes(name) || !/\\D/.test(name)) {\n            // 跳过默认key和数字\n            continue;\n          }\n\n          if (!finnalData[name]) {\n            finnalData[name] = provider[name];\n          }\n        }\n      }\n\n      // 更新自身的数据\n      for (let name of Object.keys(finnalData)) {\n        const value = finnalData[name];\n\n        if (this[name] !== value) {\n          this[name] = value;\n        }\n      }\n\n      // 删除 consumer 上 provider没有的数据\n      for (let name of Object.keys(this)) {\n        if (InvalidKeys.includes(name) || !/\\D/.test(name)) {\n          // 跳过默认key和数字\n          continue;\n        }\n\n        if (finnalData[name] === undefined) {\n          this[name] = undefined;\n        }\n      }\n    },\n  },\n  attached() {\n    // 记录自身的 attributes\n    const existKeys = Object.values(this.ele.attributes)\n      .map((e) => e.name)\n      .filter((e) => !InvalidKeys.includes(e));\n\n    // 更新 attributes\n    this.watch((e) => {\n      if (e.target === this && e.type === \"set\") {\n        const attrName = toDashCase(e.name);\n\n        if (existKeys.includes(attrName)) {\n          if (e.value === null || e.value === undefined) {\n            this.ele.removeAttribute(attrName);\n          } else {\n            this.ele.setAttribute(attrName, e.value);\n          }\n        }\n      }\n    });\n\n    addConsumer(this);\n    this._refresh();\n  },\n  detached() {\n    removeConsumer(this);\n  },\n});\n","import $ from \"../xhear/base.mjs\";\n\n// 是否支持  @container style 查询\nconst supportStyleQueries = supportsContainerStyleQueries();\n// const supportStyleQueries = false; // debug code\n\n$.register({\n  tag: \"match-var\",\n  temp: `<style>:host{display:none !important; }</style>`,\n  data: {},\n  proto: {\n    initContainerStyle() {\n      // 支持 container style query 的时候，可以直接使用\n      if (!this.__style) {\n        this.__style = $(\"<style></style>\");\n        this.before(this.__style);\n      }\n\n      const styleContent = this._styleOriginText;\n\n      // 获取属性值\n      const attrs = Array.from(this.ele.attributes);\n\n      this.__style.html = `@container ${attrs\n        .map((attr) => `style(--${attr.name}: ${attr.value})`)\n        .join(\" and \")} {${styleContent}}`;\n\n      // 清空内容\n      this.html = \"\";\n    },\n    __addStyle() {\n      if (this.__added || supportStyleQueries) {\n        return;\n      }\n\n      // 在不兼容 container style query 的时候，运行这个方法代表塞入原样式\n      this.html = `<style>\n      ${this._styleOriginText}\n      </style>`;\n\n      this.__added = true;\n    },\n    __removeStyle() {\n      if (!this.__added || supportStyleQueries) {\n        return;\n      }\n\n      this.html = \"\";\n\n      this.__added = false;\n    },\n  },\n  async attached() {\n    // 获取style内容后，清除内容\n    if (!this._styleOriginText) {\n      const styleEl = this.$(\"style\");\n      if (styleEl) {\n        this._styleOriginText = styleEl.text;\n      }\n      const linkEl = this.$(\"link\");\n      if (linkEl) {\n        const href = linkEl.attr(\"href\");\n        this.html = \"\"; // 必须提前清空，不然会提前载入样式\n        const content = await fetch(href).then((res) => res.text());\n        this._styleOriginText = content;\n      }\n      this.html = \"\";\n    }\n\n    const isConnected = this.ele.isConnected;\n\n    if (!isConnected) {\n      return;\n    }\n\n    if (supportStyleQueries) {\n      this.initContainerStyle();\n    } else {\n      matchEles.add(this);\n    }\n  },\n  detached() {\n    if (supportStyleQueries) {\n      if (this.__style) {\n        this.__style.remove();\n        this.__style = null;\n      }\n    } else {\n      matchEles.delete(this);\n    }\n  },\n});\n\nconst matchEles = new Set();\n{\n  let timer = null;\n  const checkMatchEles = async () => {\n    clearTimeout(timer);\n    for (const $e of matchEles) {\n      const result = Array.from($e.ele.attributes).every((e) => {\n        const value = getComputedStyle($e.ele).getPropertyValue(`--${e.name}`);\n\n        return value === e.value;\n      });\n\n      if ($.checkMatch.delay) {\n        // 添加延迟，防止频繁执行无法渲染\n        await new Promise((resolve) => setTimeout(resolve, $.checkMatch.delay));\n      }\n\n      if (result) {\n        $e.__addStyle();\n      } else {\n        $e.__removeStyle();\n      }\n    }\n\n    timer = setTimeout(checkMatchEles, $.checkMatch.time || 100);\n  };\n\n  if (!supportStyleQueries) {\n    // 每秒轮询检测一次\n    setTimeout(() => {\n      checkMatchEles();\n    }, 100);\n  }\n\n  Object.defineProperties($, {\n    // 添加主动刷新 match var 方法\n    checkMatch: {\n      value() {\n        if (supportStyleQueries) {\n          // 如果支持，不需要执行此方法\n          return false;\n        }\n\n        requestAnimationFrame(() => {\n          checkMatchEles();\n        });\n\n        return true;\n      },\n    },\n  });\n\n  if (!supportStyleQueries) {\n    // 延迟时间，单位毫秒\n    $.checkMatch.delay = 2;\n  }\n}\n\n/**\n * 检测浏览器是否原生支持 @container style 查询\n * @returns {boolean} 返回是否支持\n */\nfunction supportsContainerStyleQueries() {\n  try {\n    // 创建测试用的DOM元素\n    const container = document.createElement(\"div\");\n    const child = document.createElement(\"div\");\n\n    // 设置容器和子元素的样式\n    container.style.cssText = `\n          container-type: style;\n          position: absolute;\n          left: -9px;\n          width: 1px;\n          height: 1px;\n          overflow: hidden;\n          --test-prop: true;\n        `;\n\n    child.style.cssText = `\n          position: absolute;\n        `;\n\n    // 添加测试样式\n    const style = document.createElement(\"style\");\n    style.textContent = `\n          @container style(--test-prop: true) {\n            #match-var-test-child {\n              font-family: \"match-var-test\";\n            }\n          }\n        `;\n\n    // 组装DOM结构\n    container.id = \"match-var-test-container\";\n    child.id = \"match-var-test-child\";\n    container.appendChild(child);\n    document.documentElement.appendChild(style);\n    document.documentElement.appendChild(container);\n\n    // 检测是否应用了样式\n    const isSupported = window\n      .getComputedStyle(child)\n      .fontFamily.includes(\"match-var-test\");\n\n    // 清理测试元素\n    document.documentElement.removeChild(style);\n    document.documentElement.removeChild(container);\n\n    return isSupported;\n  } catch (err) {\n    console.error(err);\n    return false;\n  }\n}\n","import $ from \"../xhear/base.mjs\";\nimport { getRenderData } from \"../xhear/render/condition.mjs\";\nimport { render } from \"../xhear/render/render.mjs\";\nimport { revokeAll } from \"../xhear/util.mjs\";\n\nconst refreshCondition = (conditionEl) => {\n  const conditionEls = [conditionEl];\n\n  // 获取所有兄弟元素\n  if (conditionEl.tag == \"o-if\") {\n    let nexts = getNexts(conditionEl.next);\n    conditionEls.push(...nexts);\n  } else if (conditionEl.tag == \"o-else-if\") {\n    let nexts = getNexts(conditionEl.next);\n    conditionEls.push(...nexts);\n    let prevs = getPrevs(conditionEl.prev);\n    conditionEls.unshift(...prevs);\n  }\n\n  // 在第一个元素上做缓刷新\n  const firstEl = conditionEls[0];\n  if (firstEl.tag == \"o-if\") {\n    clearTimeout(firstEl.__refreshTimer);\n    firstEl.__refreshTimer = setTimeout(() => {\n      // 按顺序获取条件元素的value值，找到第一个为true的元素\n      let targetCondition = null;\n      for (let i = 0; i < conditionEls.length; i++) {\n        const el = conditionEls[i];\n        if (el.tag == \"o-if\" || el.tag == \"o-else-if\") {\n          if (el.value) {\n            targetCondition = el;\n            break;\n          }\n        } else {\n          // 最后一个 o-else 元素\n          targetCondition = el;\n        }\n      }\n\n      // 如果找到目标，就渲染目标元素\n      if (targetCondition) {\n        renderContent(targetCondition);\n        targetCondition.attr(\"actived\", \"\");\n      }\n\n      // 清空其他元素内容\n      conditionEls.forEach((el) => {\n        if (el !== targetCondition) {\n          el.attr(\"actived\", null);\n          clearContent(el);\n        }\n      });\n    }, 0);\n  } else {\n    // 报错\n    console.error(\"o-if must be the first element\", conditionEls);\n  }\n};\n\n// 渲染内容\nconst renderContent = (conditionEl) => {\n  if (conditionEl.__rendered) {\n    // 已经渲染过，直接返回\n    return;\n  }\n\n  const result = getRenderData(conditionEl.ele);\n\n  if (!result) {\n    return;\n  }\n\n  const { target, data, temps } = result;\n\n  conditionEl.html = conditionEl.__originHTML;\n\n  render({ target, data, temps });\n\n  conditionEl.__rendered = true;\n\n  // 触发渲染事件\n  conditionEl.emit(\"rendered\", {\n    bubbles: false,\n  });\n};\n\n// 清空内容\nconst clearContent = (conditionEl) => {\n  if (!conditionEl.__rendered) {\n    // 没有渲染过，直接返回\n    return;\n  }\n\n  conditionEl.ele.childNodes?.forEach((el) => revokeAll(el));\n\n  // 清空元素内容\n  conditionEl.html = \"\";\n\n  conditionEl.__rendered = false;\n};\n\n// 获取后方兄弟元素\nconst getNexts = (next) => {\n  const nexts = [];\n  while (next && (next.tag === \"o-else-if\" || next.tag === \"o-else\")) {\n    nexts.push(next);\n    if (next.tag == \"o-else\") {\n      break;\n    }\n    next = next.next;\n  }\n  return nexts;\n};\n\n// 获取前方兄弟元素\nconst getPrevs = (prev) => {\n  const prevs = [];\n  while (prev && (prev.tag == \"o-if\" || prev.tag == \"o-else-if\")) {\n    prevs.unshift(prev);\n    if (prev.tag == \"o-if\") {\n      break;\n    }\n    prev = prev.prev;\n  }\n  return prevs;\n};\n\nconst createdFunc = function (_this) {\n  // 元素可能先于子内容构造（如 createElement 或第三方库 cloneNode），\n  // 此时首个子元素不存在，需要回退到自身内容\n  const firstEle = _this[0];\n  if (firstEle && firstEle.is(\"template[inner-code]\")) {\n    _this.__originHTML = firstEle.html.trim();\n  } else {\n    _this.__originHTML = _this.html.trim();\n  }\n  _this.html = \"\";\n};\n\nconst temp = `<style>:host{display:contents;}</style><slot></slot>`;\n\n$.register({\n  tag: \"o-if\",\n  temp,\n  data: {\n    value: null,\n  },\n  watch: {\n    value() {\n      refreshCondition(this);\n    },\n  },\n  created() {\n    createdFunc(this);\n  },\n});\n\n$.register({\n  tag: \"o-else-if\",\n  temp,\n  data: {\n    value: null,\n  },\n  watch: {\n    value() {\n      refreshCondition(this);\n    },\n  },\n  created() {\n    createdFunc(this);\n  },\n});\n\n$.register({\n  tag: \"o-else\",\n  temp,\n  created() {\n    createdFunc(this);\n  },\n});\n","import $ from \"../xhear/base.mjs\";\nimport { getRenderData } from \"../xhear/render/condition.mjs\";\nimport { eleX, revokeAll } from \"../xhear/util.mjs\";\nimport { createItem } from \"../xhear/render/fill.mjs\";\nimport { getErr } from \"../ofa-error/main.js\";\nimport { renderExtends } from \"../xhear/render/render.mjs\";\n\n$.register({\n  tag: \"o-fill\",\n  temp: `<style>:host{display:contents;}</style><slot></slot>`,\n  data: {\n    value: null,\n  },\n  proto: {\n    refreshView() {\n      const arr = this.value;\n      const tempName = this.attr(\"name\");\n\n      if (\n        !arr ||\n        !arr.length ||\n        (this.__oldTempName && this.__oldTempName !== tempName)\n      ) {\n        // 没有值，清空内容\n        Array.from(this.ele.childNodes).forEach((e) => {\n          revokeAll(e);\n          e.remove();\n        });\n        return;\n      }\n\n      const { data, target, temps = {} } = getRenderData(this.ele);\n\n      const keyName = this.attr(\"fill-key\") || \"xid\";\n\n      let targetTemp = temps[tempName];\n\n      if (!targetTemp) {\n        // 没有找到模板，查看是否有默认的模板\n        if (this.__originHTML) {\n          targetTemp = $(`<template>${this.__originHTML}</template>`).ele;\n        } else {\n          throw new Error(\"o-fill - Template not found: \" + tempName);\n        }\n      }\n\n      this.__oldTempName = tempName;\n\n      if (!this.length) {\n        // 没有子元素，优化性能的添加方式\n        const frag = document.createDocumentFragment();\n\n        // 渲染模板\n        for (let i = 0, len = arr.length; i < len; i++) {\n          const item = arr[i];\n\n          const $ele = createItem(\n            item,\n            temps,\n            targetTemp,\n            data.$host || data,\n            i,\n            keyName,\n            this._$parent,\n          );\n\n          frag.appendChild($ele.ele);\n        }\n\n        this.ele.appendChild(frag);\n        return;\n      }\n\n      const getKeyVal = (e, i) => {\n        const key = e[keyName];\n\n        if (key === undefined || key === null) {\n          if (e.xid) {\n            return e.xid;\n          }\n\n          return `${i}-${e}`;\n        }\n\n        return key;\n      };\n\n      // 有子元素，优化性能的方式更新方式\n      const keyValsArr = arr.map(getKeyVal);\n\n      const tempChildren = Array.from(this.ele.children);\n\n      // 先删除不存在的元素\n      for (let i = 0; i < tempChildren.length; i++) {\n        const e = tempChildren[i];\n        const renderedItem = e.__render_data;\n\n        const currentKeyVal = getKeyVal(renderedItem.$data, i);\n\n        // 不存在的id，需要删除\n        if (!keyValsArr.includes(currentKeyVal)) {\n          e.remove();\n          revokeAll(e);\n        }\n      }\n\n      const { children } = this.ele;\n\n      // 获取当前所有的key值\n      let keyVals = [];\n      const refreshKeyVals = () => {\n        keyVals = Array.from(children).map((e, i) =>\n          getKeyVal(e.__render_data.$data, i),\n        );\n      };\n      refreshKeyVals();\n\n      const selfEl = this.ele;\n\n      // 遍历一遍进行更新数据\n      for (let i = 0, len = arr.length; i < len; i++) {\n        const item = arr[i];\n        // const keyVal = item[keyName];\n        const keyVal = getKeyVal(item, i);\n\n        // 查找是否存在\n        const index = keyVals.indexOf(keyVal);\n\n        if (index > -1) {\n          // 存在，更新数据\n          const $ele = eleX(children[index]);\n\n          // 如果不是目标元素，则进行位置调整\n          if (children[i] !== $ele.ele) {\n            selfEl.insertBefore($ele.ele, children[i]);\n            refreshKeyVals();\n          }\n\n          // 按需更新绑定的数据\n          if ($ele.__item.$data !== item) {\n            $ele.__item.$data = item;\n          }\n          if ($ele.__item.$index !== i) {\n            $ele.__item.$index = i;\n          }\n        } else {\n          // 不存在，添加新的元素\n          const $ele = createItem(\n            item,\n            temps,\n            targetTemp,\n            data.$host || data,\n            i,\n            keyName,\n            this._$parent,\n          );\n\n          selfEl.insertBefore($ele.ele, children[i]);\n          refreshKeyVals();\n        }\n      }\n    },\n  },\n  ready() {\n    this.watchTick((e) => {\n      if (e.hasModified(\"value\")) {\n        // value发生变动，重新渲染\n        this.refreshView();\n      }\n    });\n  },\n  attached() {\n    if (this.value) {\n      this.refreshView();\n    }\n  },\n  created() {\n    let originHTML = \"\";\n\n    const firstEle = this[0];\n    if (firstEle && firstEle.is(\"template[inner-code]\")) {\n      originHTML = firstEle.html.trim();\n    } else {\n      originHTML = this.html.trim();\n    }\n\n    // 判断是否有多个子元素\n    const temp = $(`<template><div>${originHTML}</div></template>`);\n    const tempContent = temp.ele.content.children[0];\n\n    if (\n      tempContent.children.length > 1 ||\n      (tempContent.children.length === 0 && tempContent.innerHTML.trim())\n    ) {\n      const err = getErr(\"temp_multi_child\");\n      console.warn(err, this.ele, {\n        content: this.html.trim(),\n      });\n\n      originHTML = `<div style=\"display: contents;\">${originHTML}</div>`;\n    }\n\n    this.__originHTML = originHTML;\n\n    this.html = \"\";\n  },\n});\n\n// 修正转换前的内容\nconst oldAfterConvert = renderExtends.afterConvert;\nrenderExtends.afterConvert = (e) => {\n  oldAfterConvert(e);\n  const { template, temps } = e;\n  wrapTemp(template);\n  Object.values(temps).forEach((temp) => wrapTemp(temp));\n};\n\n// 给需要预处理的元素的外部添加一个template包裹标签，防止被提前污染代码\nconst needWrapTags = [\"o-fill\", \"o-if\", \"o-else-if\", \"o-else\"];\n\nexport const wrapTemp = (template) => {\n  const eles = Array.from(\n    template.content.querySelectorAll(needWrapTags.join(\",\")),\n  );\n\n  // 倒转之后性能好像好点\n  // eles.reverse();\n\n  // 对已有的 inner-code 先进行解套，不然导致渲染失败\n  eles.forEach((e) => {\n    while (true) {\n      const innerCodeTempEl = e.querySelector(\"template[inner-code]\");\n\n      if (!innerCodeTempEl) {\n        break;\n      }\n\n      const childs = innerCodeTempEl.content.childNodes;\n\n      childs.forEach((child) => {\n        innerCodeTempEl.parentNode.insertBefore(\n          child.cloneNode(true),\n          innerCodeTempEl,\n        );\n      });\n\n      innerCodeTempEl.remove();\n    }\n\n    const originCode = e.innerHTML;\n    // 对已有的 inner-code 先进行解套\n    e.innerHTML = `<template inner-code>${originCode}</template>`;\n    wrapTemp(e.children[0]);\n  });\n};\n","import $ from \"../xhear/base.mjs\";\nimport \"./inject-host.mjs\";\nimport \"./comp.mjs\";\nimport \"./page.mjs\";\nimport \"./app.mjs\";\nimport \"./extend.mjs\";\nimport \"./link.mjs\";\nimport \"./context.mjs\";\nimport \"./match-var.mjs\";\nimport \"./if.mjs\";\nimport \"./fill.mjs\";\nimport Stanz from \"../stanz/main.mjs\";\n\nconst version = \"ofa.js@4.7.7\";\n$.version = version.replace(\"ofa.js@\", \"\");\n\nlet isDebug = false;\n\ntry {\n  const fileUrl = import.meta.url;\n  isDebug = fileUrl.includes(\"#debug\");\n} catch (err) {\n  isDebug = false;\n}\n\nObject.defineProperty($, \"debugMode\", {\n  get: () => isDebug,\n});\n\nif (typeof window !== \"undefined\") {\n  window.$ = $;\n}\n\nObject.defineProperty(globalThis, \"ofa\", {\n  value: $,\n});\n\nexport default $;\n\nexport { Stanz };\n"],"names":["error_origin","errors","load_fail","load_fail_status","load_module","no_alias","config_alias_name_error","alias_already","alias_relate_name","failed_to_set_data","failed_to_get_data","nexttick_thread_limit","not_func","not_found_func","invalid_key","xhear_wrap_no_parent","xhear_unwrap_has_siblings","xhear_reander_err","xhear_register_exists","xhear_register_err","xhear_validate_tag","xhear_tag_noline","xhear_regster_data_noset","xhear_regster_data_nofunc","xhear_fakenode_unclose","xhear_fill_tempname","xhear_eval","xhear_listen_already","xhear_dbfill_noname","xhear_temp_exist","xhear_sync_no_options","xhear_sync_object_value","loading_nothing","app_src_change","no_cross_access_func","access_return_error","load_comp_module","comp_registered","load_page_module","page_no_defaults","not_page_module","page_failed","fetch_temp_err","page_wrap_fetch","context_change_name","no_provider","page_invalid_key","root_provider_exist","root_provider_name_change","change_lm_src","error_no_owner","circular_data","fill_type","fill_key_duplicates","render_el_error","temp_multi_child","temp_wrap_child","app_noback","invalidated_inject_host","olink_out_app","app_noforward","need_forwards","watchuntil_timeout","globalThis","navigator","language","langFirst","toLowerCase","split","localStorage","onLine","targetLangErrors","JSON","parse","Object","assign","errCacheTime","Date","now","Number","fetch","then","e","json","catch","stringify","error","isSafari","userAgent","includes","getErr","key","options","errObj","desc","getErrDesc","toString","stack","replace","Error","cause","code","k","RegExp","getRandomId","Math","random","slice","objectToString","prototype","getType","value","call","isObject","obj","type","afterTimer","asyncsCounter","nextTick","callback","clearTimeout","setTimeout","Promise","resolve","err","console","warn","extend","_this","proto","descriptor","getOwnPropertyNames","getOwnPropertySymbols","forEach","result","getOwnPropertyDescriptor","configurable","enumerable","writable","get","set","hasOwnProperty","defineProperty","dataRevoked","proxyToCheck","getPrototypeOf","TypeError","isFunction","val","hyphenToUpperCase","str","match","p1","toUpperCase","toDashCase","removeArrayValue","arr","target","index","indexOf","splice","searchEle","el","expr","HTMLTemplateElement","Array","from","content","querySelectorAll","getRenderErrorSupplementary","data","supplementary","$host","$data","fromSrc","PATH","freeze","Watcher","constructor","opts","this","hasModified","path","currentTarget","keys","name","positionIndex","getModifieds","currentKeys","length","hasReplaced","modifieds","cloneKeys","targetKey","shift","push","Watchers","super","some","emitUpdate","oldValue","args","_hasWatchs","watcher","WATCHS","func","_update","owner","parent","watchFn","watch","Function","wid","unwatch","delete","watchTick","wait","timeout","hisArgs","debounce","filter","item","xid","refresh","watchUntil","outTime","reject","f","timer","tid","mutatingMethods","holder","Symbol","fn","arrayFn","methodName","backupArr","reval","apply","SELF","deletedItems","addedItems","oldArray","newArray","backupNewArray","backupOldArray","Map","oldLen","i","oldItem","newIndex","newLen","newItem","oldIndex","compareArrays","isxdata","_owner","__unupdate","clearOwner","PROXY","oldFunc","defineProperties","entries","ISXDATA","handler","stanzHandler","watchs","proxy","proxySelf","revoke","Proxy","revocable","Set","_revoke","__init_is_array","isArray","descObj","Stanz","self","_onrevokes","clear","toJSON","isPureArray","maxId","initIsArray","test","parseInt","len","join","lastKey","pop","setData","receiver","succeed","__OriginStanz","isSame","targetData","mismatch","Reflect","deleteProperty","undefined","String","eleX","ele","children","ownKeys","renderExtends","beforeConvert","afterConvert","beforeRender","render","getRevokes","__revokes","addRevoke","convertToFunc","funcStr","bind","template","temps","isRenderSelf","otherOpts","innerHTML","texts","tasks","revokes","originStyle","matchs","map","dataExpr","errCall","style","renderStyle","afterStyle","revokeStyle","remove","textEl","document","createTextNode","parentNode","insertBefore","removeChild","decodeURIComponent","getAttribute","element","renderFunc","textContent","textRevoke","eles","matches","unshift","bindData","$el","actionName","always","workResult","afterArgs","work","errorExpr","beforeArgs","step","clearRevs","methodRevoke","arg0","arg1","removeAttribute","_bindingRendered","dispatchEvent","Event","__render_temps","isEmptyObject","__render_data","old","new","nsAttrPrefixes","convertEl","tagName","attributes","attr","matchData","exec","param0","has","setAttribute","searchTemp","rearr","isWarned","convert","codeEls","cid","encodeURIComponent","tempName","tempChilds","wrapName","fillEl","querySelector","trim","temp","createElement","appendChild","condiEl","firstChild","newTemps","getVal","defaultData","prop","classList","contains","add","stanzProto","selfPropName","targetPropName","propName","class","$ele","oldVal","syncFn","sync","targetName","wid1","wid2","getBindOptions","revoker","beforeValue","removeEventListener","eventFn","on","addEventListener","one","off","emit","event","bubbles","originSplice","start","count","items","removes","frag","createDocumentFragment","append","createXEle","positionEle","likeArrayFn","targets","reVal","reverse","childs","childNodes","__internal","sort","getOwnPropertyDescriptors","targetFunc","LikeArray","stanz","is","setKeys","isNum","formEleNames","bindProp","keyName","initInput","getFormData","all","tag","checked","files","selectedsOpt","multiple","formFn","formData","newData","obj1","obj2","mergeObjects","isUseValue","resetValue","oldRevoke","cssHandler","_ele","startsWith","getComputedStyle","getPropertyValue","XhearCSS","_css","cssFn","css","d","nextKeys","$","extensions","COMPS","renderElement","defaults","deepCopyData","attrs","root","attachShadow","mode","ready","wen","names","watchers","register","compName","charAt","validateTagName","getAttrKeys","attrKeys","XElement","HTMLElement","created","attrName","valType","connectedCallback","isInternal","attached","afterAttached","disconnectedCallback","detached","afterDetached","attributeChangedCallback","newValue","observedAttributes","readyState","customElements","define","READYSTATE","host","copy","FakeNode","Comment","markname","tagText","_mark","_inited","startCom","__fake_end","init","_start","__searchEl","funcName","startParent","par","newEle","prev","previousSibling","isConnected","outerHTML","nextElementSibling","next","nextSibling","Element","previousElementSibling","replaceTempInit","regData","getRenderData","replaces","ReplaceTemp","extends","regOptions","__rendered","_bindend","refreshValue","_timer","conditions","_others","isOK","conditionEl","_clearContent","_renderContent","_fake","__originHTML","revokeAll","fake","before","others","_if_ready","_xif","conditionTemp","html","t","arrayData","targetTemp","_name","vals","valsKeys","size","positionKeys","_data_xid","needRemoves","createItem","currentVal","isObj","__item","oldId","$old","$index","$parent","itemData","GET_COMPOSE_PATH","descs","initFormEle","Xhear","__xhear__","text","dataset","shadow","shadowRoot","rootNode","getRootNode","Node","parents","parentsUntil","allParents","exprIsObj","hosts","composedPath","paths","stopPropagation","composed","nextEle","after","nextEl","nexts","selfIndex","prevEle","prevs","siblings","clone","bool","cloneNode","wrap","unwrap","sfn","renderFn","exprType","window","objToXEle","strToXEle","initInjectEle","injectEl","mark","cloneFunc","clink","__items","__host_link","head","revokeLink","__inited","_init","_initLink","_initStyle","href","rel","newEl","com","hash","charCodeAt","getStringHash","_obs","MutationObserver","mutationsList","mutation","attributeName","removedNodes","addedNodes","Text","parentElement","observe","childList","subtree","disconnect","Onion","_middlewares","use","middleware","oid","unuse","run","context","middlewares","values","async","getNotHttp","url","caches","wrapFetch","params","reUrl","URL","origin","pathname","fetchObj","processor","addHandler","ctx","notHttp","import","realUrl","resp","status","arrayBuffer","module","WebAssembly","compile","instance","Instance","exports","link","aliasMap","moduleName","baseURI","lastUrl","first","location","base","LOADED","agent","urldata","lastIndexOf","oni","contentType","headers","targetMapObject","find","newOni","lm","meta","ourl","reurl","createLoad","alias","LoadModule","loaded","__initSrc","src","load","CustomEvent","_root","LM","config","resolvePath","isInCode","fixRelate","basePath","fixRelatePathContent","styleEl","original","urlPath","ISERROR","getPagesData","pagesData","previousPageSrc","errorObj","currentPageSrc","lastSrc","realPageSrc","pageSrcObj","current","createPage","tempCon","targetPage","_renderDefault","waitPageReaded","pageElement","_rendered","setInterval","clearInterval","oldRender","top","__fixLinkTimer","initLink","__processed","$tar","app","metaKey","shiftKey","defaultPrevented","preventDefault","prevented","originHref","finalHref","goto","strToBase64DataURI","mime","isb64","file","File","createObjectURL","fr","FileReader","onload","readAsDataURL","getSourcemapUrl","filePath","originStarRowIndex","originEndRowIndex","originContent","startLine","originLineArr","mappings","beforeRowIndex","beforeColIndex","rowId","rowStr","colId","currentStr","vlcEncode","sourcesContent","cacheLink","isIdChar","char","skipString","quote","skipTemplate","depth","skipRegExp","inClass","drawUrl","isPage","targetUrl","isDebug","debugMode","tempEl","titleEl","scriptEl","reTemp","backupOriginContent","styleEls","styleContent","matchArr","middleStr","sourcemapStr","addStyleSourcemap","beforeContent","scriptContent","output","j","specifierStart","specifierEnd","cj","end","pathStr","rewriteImportPaths","fileContent","findIndex","lineContent","trimmed","finalContent","isFirefox","base64","encoded","vlq","toVLQSigned","digit","PAGE","resultContent","moduleData","defaultsData","getDefault","tempSrc","pageIsReady","__init_src","_defaults","parentPage","__need_wraps","failContent","getFailContent","_module","fail","needWraps","page","__not_run_attached","pageAnime","_pageAnime","__reject","dispatchLoad","__resolve","appIsReady","back","pms","res","sheet","finnalDefault","default","relateLoad","query","urlObj","fromEntries","searchParams","COMP","COMPONENT_PATH","cacheComps","matchName","cacheUrl","tempUrl","tempContent","registerOpts","oldReady","oldCreated","regTemp","HISTORY","FORWARDS","appendPage","loading","loadingEl","oriNextPages","currentPages","container","publicParents","finalPages","topPage","innerPage","pageData","isError","publics","emitRouterChange","routerChange","selfUrl","allowForward","_settedRouters","_initHome","home","homeUrl","forward","delta","forwardHistory","_navigate","oldRouters","routers","_noanime","newCurrent","needRemovePage","pageInAnime","resetOldPage","oldHis","historys","pageOutAnime","oldCurrent","runAccess","routerData","nextHistory","willRemoved","_routers","historyRouters","currentRouter","access","targetAnime","nextAnimeFrame","transition","resolved","finish","offsetHeight","requestAnimationFrame","offsetWidth","position","width","height","oldAttr","InvalidKeys","consumers","rootProviders","publicWatch","oldName","__oldName","__named","_refresh","updateProvider","provider","pool","initProvider","_init_tid","providerProto","dispatch","eventName","cancelable","providers","getProvider","finnalData","existKeys","removeConsumer","supportStyleQueries","child","cssText","id","documentElement","isSupported","fontFamily","supportsContainerStyleQueries","initContainerStyle","__style","_styleOriginText","__addStyle","__added","__removeStyle","linkEl","matchEles","checkMatchEles","$e","every","checkMatch","delay","time","refreshCondition","conditionEls","getNexts","getPrevs","firstEl","__refreshTimer","targetCondition","renderContent","clearContent","createdFunc","firstEle","refreshView","__oldTempName","_$parent","getKeyVal","keyValsArr","tempChildren","renderedItem","currentKeyVal","keyVals","refreshKeyVals","selfEl","keyVal","originHTML","oldAfterConvert","wrapTemp","needWrapTags","innerCodeTempEl","originCode","version","fileUrl"],"mappings":";AACA,MAAMA,EAAe,4CAGfC,EAAS,CACbC,UAAW,oBACXC,iBAAkB,2CAClBC,YAAa,4CACbC,SAAU,wDACVC,wBAAyB,8CACzBC,cAAe,kCACfC,kBACE,yEACFC,mBAAoB,yCACpBC,mBAAoB,yBACpBC,sBACE,0GACFC,SAAU,iEACVC,eACE,iIACFC,YACE,uKACFC,qBACE,2EACFC,0BACE,+EACFC,kBAAmB,mCACnBC,sBACE,4FACFC,mBAAoB,6CACpBC,mBACE,sNACFC,iBACE,0PACFC,yBACE,4FACFC,0BACE,gJACFC,uBACE,qEACFC,oBAAqB,6CACrBC,WACE,sEACFC,qBACE,8EACFC,oBACE,uFACFC,iBAAkB,mCAClBC,sBACE,yFACFC,wBACE,gFACFC,gBAAiB,yCACjBC,eACE,4EACFC,qBACE,qEACFC,oBAAqB,kCACrBC,iBACE,8DACFC,gBACE,sFACF,kBACE,oGACF,kBACE,qHACFC,iBAAkB,mCAClBC,iBACE,0EACFC,gBACE,gFACFC,YAAa,6BACbC,eAAgB,sDAChBC,gBAAiB,0DACjBC,oBACE,sGACFC,YACE,6EACFC,iBACE,gJACFC,oBACE,8GACFC,0BACE,4HACFC,cACE,sFACFC,eACE,mEACFC,cAAe,sCACfC,UACE,iFACFC,oBAAqB,4CACrBC,gBAAiB,sDACjBC,iBACE,uJACFC,gBACE,qIACFC,WACE,qFACFC,wBAAyB,oDACzBC,cAAe,kDACfC,cACE,2EACFC,cACE,6KACFC,mBAAoB,oDAGtB,GAAIC,WAAWC,WAAaA,UAAUC,SAAU,CAC9C,IAAIC,EAAYF,UAAUC,SAASE,cAAcC,MAAM,KAAK,GAE1C,OAAdF,GAA2D,UAArCF,UAAUC,SAASE,gBAC3CD,EAAY,QAId,WACE,IAAKH,WAAWM,aAEd,OAGF,GAAIN,WAAWC,YAAcA,UAAUM,OAErC,OAGF,GAAID,aAAa,cAAe,CAC9B,MAAME,EAAmBC,KAAKC,MAAMJ,aAAa,eACjDK,OAAOC,OAAO1E,EAAQsE,EACxB,CAEA,MAAMK,EAAeP,aAAa,mBAElC,IAAKO,GAAgBC,KAAKC,MAAQC,OAAO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"}