{"version":3,"file":"index.cjs","sources":["../node_modules/zeed/dist/chunk-FLKB7XIS.js","../node_modules/zeed/dist/chunk-NZQXKE2T.js","../node_modules/zeed/dist/chunk-SLALP6PY.js","../node_modules/zeed/dist/chunk-RXVGRALQ.js","../src/state.ts","../plugin-vue:export-helper","../src/tw-icon.vue","../src/tw-symbol.vue","../src/tw-button.vue","../src/lib/directives/trapFocus.ts","../src/use/active.ts","../src/use/key.ts","../src/tw-modal.vue","../src/tw-items.vue","../src/tw-list.vue","../src/tw-popover.vue","../src/tw-completion.vue","../src/tw-tag-input.vue","../src/tw-input.vue","../src/tw-dropdown.vue","../src/tw-notification.vue","../src/lib/clone.ts","../src/tw-object.vue","../src/tw-label.vue","../src/tw-menu.vue","../src/debug/util.js","../src/debug/NullWrapper.vue","../src/debug/UndefinedWrapper.vue","../src/debug/BooleanWrapper.vue","../src/debug/NumberWrapper.vue","../src/debug/StringWrapper.vue","../src/debug/hooks.js","../src/debug/ArrayWrapper.vue","../src/debug/ObjectWrapper.vue","../src/tw-debug.vue","../src/menu.ts","../src/notification.ts","../src/tw-tooltip-trigger.vue","../src/tooltip.ts","../src/use/app-mode.ts","../src/config.ts","../src/use/dark-mode.ts","../src/use/document-class.ts","../src/use/focus-desktop.ts","../src/use/font-loaded.ts","../src/use/window-resize.ts","../src/use/input-grow.ts","../src/use/on.ts","../src/use/separator.ts","../src/use/textarea-grow.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/common/data/is.ts\nfunction isObject(obj) {\n  return obj != null && typeof obj === \"object\";\n}\n__name(isObject, \"isObject\");\nfunction isPrimitive(obj) {\n  return Object(obj) !== obj;\n}\n__name(isPrimitive, \"isPrimitive\");\nfunction isArray(obj) {\n  return Array.isArray(obj);\n}\n__name(isArray, \"isArray\");\nfunction isRecord(obj) {\n  return isObject(obj) && !isArray(obj);\n}\n__name(isRecord, \"isRecord\");\nfunction isString(obj) {\n  return typeof obj === \"string\";\n}\n__name(isString, \"isString\");\nfunction isNumber(obj) {\n  return typeof obj === \"number\";\n}\n__name(isNumber, \"isNumber\");\nfunction isInteger(obj) {\n  return typeof obj === \"number\" && Number.isInteger(obj);\n}\n__name(isInteger, \"isInteger\");\nfunction isSafeInteger(obj) {\n  return typeof obj === \"number\" && Number.isSafeInteger(obj);\n}\n__name(isSafeInteger, \"isSafeInteger\");\nfunction isBoolean(obj) {\n  return typeof obj === \"boolean\";\n}\n__name(isBoolean, \"isBoolean\");\nfunction isNullOrUndefined(obj) {\n  return obj == null;\n}\n__name(isNullOrUndefined, \"isNullOrUndefined\");\n\n// src/common/data/deep.ts\nfunction deepEqual(a, b, hash = /* @__PURE__ */ new WeakSet()) {\n  if (a === b) {\n    return true;\n  }\n  if (hash.has(b)) {\n    return true;\n  }\n  if (!isPrimitive(b)) {\n    hash.add(b);\n  }\n  if (!(a instanceof Object) || !(b instanceof Object)) {\n    return false;\n  }\n  if (a.constructor !== b.constructor) {\n    return false;\n  }\n  if (a.length !== b.length) {\n    return false;\n  }\n  for (let p in a) {\n    if (!a.hasOwnProperty(p)) {\n      continue;\n    }\n    if (!b.hasOwnProperty(p)) {\n      return false;\n    }\n    let aa = a[p];\n    let bb = b[p];\n    if (!deepEqual(aa, bb, hash)) {\n      return false;\n    }\n  }\n  for (let p in b) {\n    if (b.hasOwnProperty(p) && !a.hasOwnProperty(p)) {\n      return false;\n    }\n  }\n  return true;\n}\n__name(deepEqual, \"deepEqual\");\nfunction deepMerge(target, ...sources) {\n  for (let source of sources) {\n    if (!isObject(target)) {\n      target = {};\n    }\n    if (source == null)\n      continue;\n    Object.keys(source).forEach((key) => {\n      const targetValue = target[key];\n      const sourceValue = source[key];\n      if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n        target[key] = targetValue.concat(sourceValue);\n      } else if (isObject(targetValue) && isObject(sourceValue)) {\n        target[key] = deepMerge(Object.assign({}, targetValue), sourceValue);\n      } else {\n        target[key] = sourceValue;\n      }\n    });\n  }\n  return target;\n}\n__name(deepMerge, \"deepMerge\");\n\n// src/common/log-console.ts\nfunction LoggerConsoleHandler(opt = {}) {\n  const {\n    level = void 0,\n    filter = void 0,\n    colors = true,\n    levelHelper = false,\n    nameBrackets = true,\n    padding = 16\n  } = opt;\n  const matchesNamespace = useNamespaceFilter(filter);\n  const matchesLevel = useLevelFilter(level);\n  return (msg) => {\n    if (!matchesLevel(msg.level))\n      return;\n    if (!matchesNamespace(msg.name))\n      return;\n    let name = msg.name ? `[${msg.name}]` : \"\";\n    switch (msg.level) {\n      case 1 /* info */:\n        console.info(`I|*   ${name}`, ...msg.messages);\n        break;\n      case 2 /* warn */:\n        console.warn(`W|**  ${name}`, ...msg.messages);\n        break;\n      case 3 /* error */:\n        console.error(`E|*** ${name}`, ...msg.messages);\n        break;\n      default:\n        console.debug(`D|    ${name}`, ...msg.messages);\n        break;\n    }\n  };\n}\n__name(LoggerConsoleHandler, \"LoggerConsoleHandler\");\n\n// src/common/log-base.ts\nvar LogLevel = /* @__PURE__ */ ((LogLevel2) => {\n  LogLevel2[LogLevel2[\"all\"] = -1] = \"all\";\n  LogLevel2[LogLevel2[\"debug\"] = 0] = \"debug\";\n  LogLevel2[LogLevel2[\"info\"] = 1] = \"info\";\n  LogLevel2[LogLevel2[\"warn\"] = 2] = \"warn\";\n  LogLevel2[LogLevel2[\"error\"] = 3] = \"error\";\n  LogLevel2[LogLevel2[\"fatal\"] = 4] = \"fatal\";\n  LogLevel2[LogLevel2[\"off\"] = Infinity] = \"off\";\n  return LogLevel2;\n})(LogLevel || {});\nvar LogLevelAlias = {\n  \"*\": -1 /* all */,\n  a: -1 /* all */,\n  all: -1 /* all */,\n  d: 0 /* debug */,\n  dbg: 0 /* debug */,\n  debug: 0 /* debug */,\n  i: 1 /* info */,\n  inf: 1 /* info */,\n  info: 1 /* info */,\n  w: 2 /* warn */,\n  warn: 2 /* warn */,\n  warning: 2 /* warn */,\n  e: 3 /* error */,\n  err: 3 /* error */,\n  error: 3 /* error */,\n  fatal: 4 /* fatal */,\n  off: Infinity /* off */,\n  \"-\": Infinity /* off */\n};\nfunction LoggerContext(prefix = \"\") {\n  let logHandlers = [LoggerConsoleHandler()];\n  let logAssertLevel = 2 /* warn */;\n  let logCheckNamespace = /* @__PURE__ */ __name((name) => true, \"logCheckNamespace\");\n  let logLock = false;\n  let logFactory = LoggerBaseFactory;\n  function LoggerBaseFactory(name = \"\") {\n    log.extend = function(prefix2) {\n      return logFactory(name ? `${name}:${prefix2}` : prefix2);\n    };\n    const emit = /* @__PURE__ */ __name((msg) => {\n      if (log.active === true) {\n        if (msg.level >= Logger2.level && msg.level >= log.level) {\n          if (logCheckNamespace(name)) {\n            for (let handler of logHandlers) {\n              if (handler)\n                handler(msg);\n            }\n          }\n        }\n      }\n    }, \"emit\");\n    function log(...messages) {\n      emit({\n        name,\n        messages,\n        level: 0 /* debug */\n      });\n    }\n    __name(log, \"log\");\n    log.active = true;\n    log.level = -1 /* all */;\n    log.debug = function(...messages) {\n      emit({\n        name,\n        messages,\n        level: 0 /* debug */\n      });\n    };\n    log.info = function(...messages) {\n      emit({\n        name,\n        messages,\n        level: 1 /* info */\n      });\n    };\n    log.warn = function(...messages) {\n      emit({\n        name,\n        messages,\n        level: 2 /* warn */\n      });\n    };\n    log.error = function(...messages) {\n      emit({\n        name,\n        messages,\n        level: 3 /* error */\n      });\n    };\n    log.assert = function(cond, ...messages) {\n      if (!cond) {\n        if (typeof console !== void 0) {\n          if (console.assert) {\n            console.assert(cond, ...messages);\n          } else {\n            console.error(`Assert did fail with: ${cond}`, ...messages);\n          }\n        }\n        emit({\n          name,\n          messages: messages || [`Assert did fail with: ${cond}`],\n          level: logAssertLevel\n        });\n      }\n    };\n    log.assertEqual = function(value, expected, ...args) {\n      let equal = deepEqual(value, expected);\n      if (!equal) {\n        log.assert(equal, `Assert did fail. Expected ${expected} got ${value}`, expected, value, ...args);\n      }\n    };\n    log.assertNotEqual = function(value, expected, ...args) {\n      let equal = deepEqual(value, expected);\n      if (equal) {\n        log.assert(equal, `Assert did fail. Expected ${expected} not to be equal with ${value}`, expected, value, ...args);\n      }\n    };\n    return log;\n  }\n  __name(LoggerBaseFactory, \"LoggerBaseFactory\");\n  function Logger2(name = \"\") {\n    return logFactory(name);\n  }\n  __name(Logger2, \"Logger\");\n  Logger2.registerHandler = function(handler) {\n    logHandlers.push(handler);\n  };\n  Logger2.setFilter = function(namespaces) {\n    logCheckNamespace = useNamespaceFilter(namespaces);\n  };\n  Logger2.setLock = (lock = true) => logLock = lock;\n  Logger2.setHandlers = function(handlers = []) {\n    if (logFactory !== LoggerBaseFactory) {\n      logFactory = LoggerBaseFactory;\n    }\n    if (logLock)\n      return;\n    logHandlers = [...handlers].filter((h) => typeof h === \"function\");\n  };\n  Logger2.level = -1 /* all */;\n  Logger2.setLogLevel = function(level = -1 /* all */) {\n    if (logLock)\n      return;\n    Logger2.level = level;\n  };\n  Logger2.setFactory = function(factory) {\n    if (logLock)\n      return;\n    logFactory = factory;\n  };\n  return Logger2;\n}\n__name(LoggerContext, \"LoggerContext\");\n\n// src/common/log-filter.ts\nfunction getNamespaceFilterString(defaultNamespaceFilter2) {\n  if (defaultNamespaceFilter2 === true || defaultNamespaceFilter2 === \"true\" || defaultNamespaceFilter2 === \"1\" || typeof defaultNamespaceFilter2 === \"number\" && defaultNamespaceFilter2 !== 0) {\n    defaultNamespaceFilter2 = \"*\";\n  } else if (defaultNamespaceFilter2 === false || defaultNamespaceFilter2 === \"false\" || defaultNamespaceFilter2 === 0 || defaultNamespaceFilter2 === \"0\" || defaultNamespaceFilter2 == null || defaultNamespaceFilter2 === \"null\" || defaultNamespaceFilter2 === \"undefined\") {\n    defaultNamespaceFilter2 = \"\";\n  } else {\n    defaultNamespaceFilter2 = String(defaultNamespaceFilter2);\n  }\n  return defaultNamespaceFilter2;\n}\n__name(getNamespaceFilterString, \"getNamespaceFilterString\");\nvar _a, _b;\nvar defaultNamespaceFilter = getNamespaceFilterString(typeof process !== \"undefined\" ? (_a = process.env.ZEED) != null ? _a : process.env.DEBUG : typeof localStorage !== \"undefined\" ? (_b = localStorage.zeed) != null ? _b : localStorage.debug : \"*\");\nfunction useNamespaceFilter(filter = defaultNamespaceFilter) {\n  let fn;\n  let reject = [];\n  let accept = [];\n  if (!filter) {\n    fn = /* @__PURE__ */ __name(function(name) {\n      return false;\n    }, \"fn\");\n  } else if (filter === \"*\") {\n    fn = /* @__PURE__ */ __name(function(name) {\n      return true;\n    }, \"fn\");\n  } else {\n    let i;\n    const split = filter.split(/[\\s,]+/);\n    const len = split.length;\n    for (i = 0; i < len; i++) {\n      if (!split[i]) {\n        continue;\n      }\n      let template = split[i].replace(/\\*/g, \".*?\");\n      if (template[0] === \"-\") {\n        reject.push(new RegExp(\"^\" + template.substr(1) + \"$\"));\n      } else {\n        accept.push(new RegExp(\"^\" + template + \"$\"));\n      }\n    }\n    fn = /* @__PURE__ */ __name(function(name) {\n      if (reject.length === 0 && accept.length === 0) {\n        return true;\n      }\n      let i2, len2;\n      for (i2 = 0, len2 = reject.length; i2 < len2; i2++) {\n        if (reject[i2].test(name)) {\n          return false;\n        }\n      }\n      for (i2 = 0, len2 = accept.length; i2 < len2; i2++) {\n        if (accept[i2].test(name)) {\n          return true;\n        }\n      }\n      return false;\n    }, \"fn\");\n  }\n  fn.accept = accept;\n  fn.reject = reject;\n  fn.filter = filter;\n  return fn;\n}\n__name(useNamespaceFilter, \"useNamespaceFilter\");\nvar _a2, _b2, _c, _d;\nvar defaultLevelFilter = typeof process !== \"undefined\" ? (_b2 = (_a2 = process.env.ZEED_LEVEL) != null ? _a2 : process.env.LEVEL) != null ? _b2 : process.env.DEBUG_LEVEL : typeof localStorage !== \"undefined\" ? (_d = (_c = localStorage.zeed_level) != null ? _c : localStorage.level) != null ? _d : localStorage.debug_level : void 0;\nfunction useLevelFilter(filter = defaultLevelFilter) {\n  let filterLevel = -1 /* all */;\n  if (typeof filter === \"string\") {\n    const l = LogLevelAlias[filter.toLocaleLowerCase().trim()];\n    if (l != null)\n      filterLevel = l;\n  } else if (typeof filter === \"number\") {\n    filterLevel = filter;\n  }\n  return (level) => level >= filterLevel;\n}\n__name(useLevelFilter, \"useLevelFilter\");\n\n// src/common/global.ts\nfunction _global() {\n  if (typeof self !== \"undefined\")\n    return self;\n  if (typeof window !== \"undefined\")\n    return window;\n  if (typeof global !== \"undefined\")\n    return global;\n  if (typeof globalThis !== \"undefined\")\n    return globalThis;\n  throw new Error(\"unable to locate global object\");\n}\n__name(_global, \"_global\");\nfunction getGlobalContext() {\n  let gcontext = _global();\n  if (gcontext._zeedGlobal == null) {\n    gcontext._zeedGlobal = {};\n  }\n  return gcontext._zeedGlobal;\n}\n__name(getGlobalContext, \"getGlobalContext\");\n\n// src/common/log.ts\nvar globalLogger;\nfunction getLoggerContext() {\n  let logger = LoggerContext();\n  logger.setHandlers([LoggerConsoleHandler()]);\n  return logger;\n}\n__name(getLoggerContext, \"getLoggerContext\");\ntry {\n  let _global2 = getGlobalContext();\n  if (_global2 != null) {\n    if ((_global2 == null ? void 0 : _global2.logger) == null) {\n      globalLogger = getLoggerContext();\n      _global2.logger = globalLogger;\n    } else {\n      globalLogger = _global2.logger;\n    }\n  } else {\n    globalLogger = getLoggerContext();\n  }\n} catch (e) {\n  globalLogger = getLoggerContext();\n}\nvar Logger = globalLogger;\n\n// src/common/time.ts\nvar getTimestamp = /* @__PURE__ */ __name(() => Date.now(), \"getTimestamp\");\nfunction formatMilliseconds(ms) {\n  return ms > 999 ? (ms / 1e3).toFixed(1) + \"s\" : ms.toFixed(2) + \"ms\";\n}\n__name(formatMilliseconds, \"formatMilliseconds\");\nfunction parseDate(...dateCandidates) {\n  for (let dateCandidate of dateCandidates) {\n    if (dateCandidate instanceof Date) {\n      return dateCandidate;\n    }\n    if (typeof dateCandidate === \"string\") {\n      let date = null;\n      if (dateCandidate.includes(\":\")) {\n        try {\n          date = new Date(dateCandidate);\n        } catch (err) {\n        }\n      }\n      if (!(date instanceof Date)) {\n        let m = /(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)/.exec(dateCandidate);\n        if (m) {\n          date = new Date(+m[1], +m[2] - 1, +m[3], 12, 0);\n        }\n      }\n      if (date instanceof Date) {\n        return date;\n      }\n    }\n  }\n}\n__name(parseDate, \"parseDate\");\n\nexport {\n  __spreadValues,\n  __spreadProps,\n  __name,\n  isObject,\n  isPrimitive,\n  isArray,\n  isRecord,\n  isString,\n  isNumber,\n  isInteger,\n  isSafeInteger,\n  isBoolean,\n  isNullOrUndefined,\n  deepEqual,\n  deepMerge,\n  getNamespaceFilterString,\n  useNamespaceFilter,\n  useLevelFilter,\n  LogLevel,\n  LogLevelAlias,\n  LoggerContext,\n  LoggerConsoleHandler,\n  getGlobalContext,\n  Logger,\n  getTimestamp,\n  formatMilliseconds,\n  parseDate\n};\n//# sourceMappingURL=chunk-FLKB7XIS.js.map","import {\n  __name,\n  deepEqual,\n  formatMilliseconds,\n  getTimestamp,\n  useLevelFilter,\n  useNamespaceFilter\n} from \"./chunk-FLKB7XIS.js\";\n\n// src/browser/log-colors.ts\nvar colors = [\n  \"#0000CC\",\n  \"#0000FF\",\n  \"#0033CC\",\n  \"#0033FF\",\n  \"#0066CC\",\n  \"#0066FF\",\n  \"#0099CC\",\n  \"#0099FF\",\n  \"#00CC00\",\n  \"#00CC33\",\n  \"#00CC66\",\n  \"#00CC99\",\n  \"#00CCCC\",\n  \"#00CCFF\",\n  \"#3300CC\",\n  \"#3300FF\",\n  \"#3333CC\",\n  \"#3333FF\",\n  \"#3366CC\",\n  \"#3366FF\",\n  \"#3399CC\",\n  \"#3399FF\",\n  \"#33CC00\",\n  \"#33CC33\",\n  \"#33CC66\",\n  \"#33CC99\",\n  \"#33CCCC\",\n  \"#33CCFF\",\n  \"#6600CC\",\n  \"#6600FF\",\n  \"#6633CC\",\n  \"#6633FF\",\n  \"#66CC00\",\n  \"#66CC33\",\n  \"#9900CC\",\n  \"#9900FF\",\n  \"#9933CC\",\n  \"#9933FF\",\n  \"#99CC00\",\n  \"#99CC33\",\n  \"#CC0000\",\n  \"#CC0033\",\n  \"#CC0066\",\n  \"#CC0099\",\n  \"#CC00CC\",\n  \"#CC00FF\",\n  \"#CC3300\",\n  \"#CC3333\",\n  \"#CC3366\",\n  \"#CC3399\",\n  \"#CC33CC\",\n  \"#CC33FF\",\n  \"#CC6600\",\n  \"#CC6633\",\n  \"#CC9900\",\n  \"#CC9933\",\n  \"#CCCC00\",\n  \"#CCCC33\",\n  \"#FF0000\",\n  \"#FF0033\",\n  \"#FF0066\",\n  \"#FF0099\",\n  \"#FF00CC\",\n  \"#FF00FF\",\n  \"#FF3300\",\n  \"#FF3333\",\n  \"#FF3366\",\n  \"#FF3399\",\n  \"#FF33CC\",\n  \"#FF33FF\",\n  \"#FF6600\",\n  \"#FF6633\",\n  \"#FF9900\",\n  \"#FF9933\",\n  \"#FFCC00\",\n  \"#FFCC33\"\n];\nfunction supportsColors() {\n  if (typeof window !== \"undefined\" && window.process && (window.process.type === \"renderer\" || window.process.__nwjs)) {\n    return true;\n  }\n  if (typeof navigator !== \"undefined\" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n    return false;\n  }\n  return typeof document !== \"undefined\" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== \"undefined\" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== \"undefined\" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== \"undefined\" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n__name(supportsColors, \"supportsColors\");\nfunction selectColor(namespace) {\n  let hash = 0;\n  for (let i = 0; i < namespace.length; i++) {\n    hash = (hash << 5) - hash + namespace.charCodeAt(i);\n    hash |= 0;\n  }\n  return colors[Math.abs(hash) % colors.length];\n}\n__name(selectColor, \"selectColor\");\n\n// src/browser/log-browser.ts\nvar styleFont = `font-family: \"JetBrains Mono\", Menlo; font-size: 11px;`;\nvar styleDefault = `${styleFont}`;\nvar styleBold = `font-weight: 600; ${styleFont}`;\nvar useColors = supportsColors();\nvar namespaces = {};\nvar time = getTimestamp();\nfunction LoggerBrowserHandler(opt = {}) {\n  const {\n    filter = void 0,\n    level = void 0,\n    colors: colors2 = true,\n    levelHelper = false,\n    nameBrackets = true,\n    padding = 16\n  } = opt;\n  const matchesNamespace = useNamespaceFilter(filter);\n  const matchesLevel = useLevelFilter(level);\n  return (msg) => {\n    var _a, _b;\n    if (!matchesLevel(msg.level))\n      return;\n    if (!matchesNamespace(msg.name))\n      return;\n    const timeNow = getTimestamp();\n    let name = msg.name || \"\";\n    let ninfo = namespaces[name || \"\"];\n    if (ninfo == null) {\n      ninfo = {\n        color: selectColor(name)\n      };\n      namespaces[name] = ninfo;\n    }\n    const diff = formatMilliseconds(timeNow - time);\n    let args;\n    if (padding > 0) {\n      name = name.padEnd(16, \" \");\n    }\n    if (colors2 && useColors) {\n      args = [`%c${name}%c \t%s %c+${diff}`];\n      args.push(`color:${ninfo.color}; ${styleBold}`);\n      args.push(styleDefault);\n      args.push((_b = (_a = msg.messages) == null ? void 0 : _a[0]) != null ? _b : \"\");\n      args.push(`color:${ninfo.color};`);\n      args.push(...msg.messages.slice(1));\n    } else {\n      args = [name, ...msg.messages, `+${diff}`];\n    }\n    switch (msg.level) {\n      case 1 /* info */:\n        if (opt.levelHelper)\n          args[0] = `I|*   ` + args[0];\n        console.info(...args);\n        break;\n      case 2 /* warn */:\n        if (opt.levelHelper)\n          args[0] = `W|**  ` + args[0];\n        console.warn(...args);\n        break;\n      case 3 /* error */:\n        if (opt.levelHelper)\n          args[0] = `E|*** ` + args[0];\n        console.error(...args);\n        break;\n      default:\n        if (opt.levelHelper)\n          args[0] = `D|    ` + args[0];\n        console.debug(...args);\n        break;\n    }\n  };\n}\n__name(LoggerBrowserHandler, \"LoggerBrowserHandler\");\nfunction LoggerBrowserSetupDebugFactory(opt = {}) {\n  var _a, _b;\n  const filter = (_b = (_a = opt.filter) != null ? _a : localStorage.zeed) != null ? _b : localStorage.debug;\n  return /* @__PURE__ */ __name(function LoggerBrowserDebugFactory(name = \"\") {\n    let log;\n    const matches = useNamespaceFilter(filter);\n    if (matches(name)) {\n      let fixedArgs = [];\n      if (useColors) {\n        const color = selectColor(name);\n        fixedArgs.push(`%c${name.padEnd(16, \" \")}%c \t%s`);\n        fixedArgs.push(`color:${color}; ${styleBold}`);\n        fixedArgs.push(styleDefault);\n      } else {\n        fixedArgs.push(`[${name}] \t%s`);\n      }\n      log = console.debug.bind(console, ...fixedArgs);\n      log.debug = console.debug.bind(console, ...fixedArgs);\n      log.info = console.info.bind(console, ...fixedArgs);\n      log.warn = console.warn.bind(console, ...fixedArgs);\n      log.error = console.error.bind(console, ...fixedArgs);\n      log.assert = console.assert.bind(console);\n      log.assertEqual = function(value, expected, ...args) {\n        let equal = deepEqual(value, expected);\n        if (!equal) {\n          log.assert(equal, `Assert did fail. Expected ${expected} got ${value}`, expected, value, ...args);\n        }\n      };\n      log.assertNotEqual = function(value, expected, ...args) {\n        let equal = deepEqual(value, expected);\n        if (equal) {\n          log.assert(equal, `Assert did fail. Expected ${expected} not to be equal with ${value}`, expected, value, ...args);\n        }\n      };\n    } else {\n      const noop = /* @__PURE__ */ __name(() => {\n      }, \"noop\");\n      log = noop;\n      log.debug = noop;\n      log.info = noop;\n      log.warn = noop;\n      log.error = noop;\n      log.assert = noop;\n      log.assertEqual = noop;\n      log.assertNotEqual = noop;\n    }\n    log.extend = (subName) => {\n      return LoggerBrowserDebugFactory(name ? `${name}:${subName}` : subName);\n    };\n    return log;\n  }, \"LoggerBrowserDebugFactory\");\n}\n__name(LoggerBrowserSetupDebugFactory, \"LoggerBrowserSetupDebugFactory\");\nfunction activateConsoleDebug(opt = {}) {\n  console.info(\"activateConsoleDebug is activated by default in browsers\");\n}\n__name(activateConsoleDebug, \"activateConsoleDebug\");\n\nexport {\n  supportsColors,\n  selectColor,\n  LoggerBrowserHandler,\n  LoggerBrowserSetupDebugFactory,\n  activateConsoleDebug\n};\n//# sourceMappingURL=chunk-NZQXKE2T.js.map","import {\n  Logger,\n  __name,\n  __spreadProps,\n  __spreadValues,\n  getGlobalContext,\n  getTimestamp\n} from \"./chunk-FLKB7XIS.js\";\n\n// src/common/data/bin.ts\nvar log = Logger(\"bin\");\nfunction _encodeUtf8Polyfill(str) {\n  const encodedString = unescape(encodeURIComponent(str));\n  const len = encodedString.length;\n  const buf = new Uint8Array(len);\n  for (let i = 0; i < len; i++) {\n    buf[i] = encodedString.codePointAt(i) || 0;\n  }\n  return buf;\n}\n__name(_encodeUtf8Polyfill, \"_encodeUtf8Polyfill\");\nfunction _decodeUtf8Polyfill(buf) {\n  let remainingLen = buf.length;\n  let encodedString = \"\";\n  let bufPos = 0;\n  while (remainingLen > 0) {\n    const nextLen = remainingLen < 1e4 ? remainingLen : 1e4;\n    const bytes = buf.subarray(bufPos, bufPos + nextLen);\n    bufPos += nextLen;\n    encodedString += String.fromCodePoint.apply(null, bytes);\n    remainingLen -= nextLen;\n  }\n  return decodeURIComponent(escape(encodedString));\n}\n__name(_decodeUtf8Polyfill, \"_decodeUtf8Polyfill\");\nvar _textEncoder;\nfunction stringToUInt8Array(text) {\n  if (_textEncoder == null) {\n    _textEncoder = _encodeUtf8Polyfill;\n    if (typeof TextEncoder !== \"undefined\") {\n      const encoder = new TextEncoder();\n      _textEncoder = /* @__PURE__ */ __name((data) => encoder.encode(data), \"_textEncoder\");\n    }\n  }\n  return _textEncoder(text.normalize(\"NFC\"));\n}\n__name(stringToUInt8Array, \"stringToUInt8Array\");\nvar _textDecoder;\nfunction Uint8ArrayToString(bin) {\n  if (_textDecoder == null) {\n    _textDecoder = _decodeUtf8Polyfill;\n    if (typeof TextDecoder !== \"undefined\") {\n      const decoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\n      _textDecoder = /* @__PURE__ */ __name((data) => decoder.decode(data), \"_textDecoder\");\n    }\n  }\n  return _textDecoder(bin).normalize(\"NFC\");\n}\n__name(Uint8ArrayToString, \"Uint8ArrayToString\");\nfunction toUint8Array(data) {\n  if (data instanceof ArrayBuffer)\n    return new Uint8Array(data);\n  if (typeof data === \"string\")\n    return stringToUInt8Array(data);\n  if (data.length)\n    return new Uint8Array(data);\n  return data;\n}\n__name(toUint8Array, \"toUint8Array\");\nfunction toHex(bin) {\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(toUint8Array(bin)).toString(\"hex\");\n  }\n  const h = \"0123456789abcdef\";\n  let s = \"\";\n  for (const v of [...toUint8Array(bin)]) {\n    s += h[v >> 4] + h[v & 15];\n  }\n  return s;\n}\n__name(toHex, \"toHex\");\nfunction toBase64(bin) {\n  const bytes = toUint8Array(bin);\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(bytes).toString(\"base64\");\n  }\n  let s = \"\";\n  for (let i = 0; i < bytes.byteLength; i++) {\n    s += String.fromCharCode(bytes[i]);\n  }\n  return btoa(s);\n}\n__name(toBase64, \"toBase64\");\nfunction toBase64Url(bin) {\n  const bytes = toUint8Array(bin);\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(bytes).toString(\"base64url\");\n  }\n  let s = \"\";\n  for (let i = 0; i < bytes.byteLength; i++) {\n    s += String.fromCharCode(bytes[i]);\n  }\n  return btoa(s).replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n}\n__name(toBase64Url, \"toBase64Url\");\nfunction fromBase64(s) {\n  if (typeof Buffer !== \"undefined\") {\n    const buf = Buffer.from(s, \"base64\");\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n  const a = atob(s);\n  const bytes = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    bytes[i] = a.charCodeAt(i);\n  }\n  return bytes;\n}\n__name(fromBase64, \"fromBase64\");\nfunction equalBinary(a, b) {\n  if (a.byteLength !== b.byteLength)\n    return false;\n  const aa = toUint8Array(a);\n  const bb = toUint8Array(b);\n  for (let i = 0; i < aa.length; i++) {\n    if (aa[i] !== bb[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n__name(equalBinary, \"equalBinary\");\nfunction jsonToUint8Array(json) {\n  try {\n    return stringToUInt8Array(JSON.stringify(json));\n  } catch (err) {\n    log.warn(\"jsonToUint8Array\", json);\n    throw err;\n  }\n}\n__name(jsonToUint8Array, \"jsonToUint8Array\");\nfunction Uint8ArrayToJson(data) {\n  try {\n    return JSON.parse(Uint8ArrayToString(data));\n  } catch (err) {\n    log.warn(\"Uint8ArrayToJson\", data);\n    throw err;\n  }\n}\n__name(Uint8ArrayToJson, \"Uint8ArrayToJson\");\n\n// src/common/crypto.ts\nfunction randomUint8Array(length = 16) {\n  let randomBytes = new Uint8Array(length);\n  if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n    crypto.getRandomValues(randomBytes);\n  } else {\n    for (let i = 0; i < length; i++) {\n      randomBytes[i] = Math.floor(Math.random() * 256);\n    }\n  }\n  return randomBytes;\n}\n__name(randomUint8Array, \"randomUint8Array\");\nvar DEFAULT_HASH_ALG = \"SHA-256\";\nvar DEFAULT_CRYPTO_ALG = \"AES-GCM\";\nvar DEFAULT_DERIVE_ALG = \"PBKDF2\";\nasync function digest(message, algorithm = DEFAULT_HASH_ALG) {\n  return toUint8Array(await crypto.subtle.digest(algorithm, toUint8Array(message)));\n}\n__name(digest, \"digest\");\nasync function deriveKeyPbkdf2(secret, opt = {}) {\n  var _a;\n  const secretBuffer = toUint8Array(secret);\n  const keyMaterial = await crypto.subtle.importKey(\"raw\", secretBuffer, DEFAULT_DERIVE_ALG, false, [\"deriveKey\"]);\n  return await crypto.subtle.deriveKey({\n    name: DEFAULT_DERIVE_ALG,\n    salt: opt.salt ? toUint8Array(opt.salt) : new Uint8Array(0),\n    iterations: (_a = opt.iterations) != null ? _a : 1e5,\n    hash: DEFAULT_HASH_ALG\n  }, keyMaterial, {\n    name: DEFAULT_CRYPTO_ALG,\n    length: 256\n  }, true, [\"encrypt\", \"decrypt\"]);\n}\n__name(deriveKeyPbkdf2, \"deriveKeyPbkdf2\");\nvar MAGIC_ID = new Uint8Array([1, 1]);\nasync function encrypt(data, key) {\n  const iv = randomUint8Array(12);\n  const cipher = await crypto.subtle.encrypt({ name: DEFAULT_CRYPTO_ALG, iv }, key, data);\n  const binCypher = new Uint8Array(cipher);\n  const bufferLength = MAGIC_ID.length + iv.length + binCypher.length;\n  const buffer = new Uint8Array(bufferLength);\n  let pos = 0;\n  buffer.set(MAGIC_ID, pos);\n  pos += MAGIC_ID.length;\n  buffer.set(iv, pos);\n  pos += iv.length;\n  buffer.set(binCypher, pos);\n  return buffer;\n}\n__name(encrypt, \"encrypt\");\nasync function decrypt(data, key) {\n  let magic = data.subarray(0, 2);\n  if (!equalBinary(magic, MAGIC_ID)) {\n    return Promise.reject(`Unknown magic ${magic}`);\n  }\n  let iv = data.subarray(2, 2 + 12);\n  let cipher = data.subarray(2 + 12, data.length);\n  const plain = await crypto.subtle.decrypt({ name: DEFAULT_CRYPTO_ALG, iv }, key, cipher);\n  return new Uint8Array(plain);\n}\n__name(decrypt, \"decrypt\");\n\n// src/common/csv.ts\nvar separator = \",\";\nvar preventCast = false;\nvar ignoreNullOrUndefined = true;\nfunction filterFloat(value) {\n  if (/^([-+])?([0-9]+(\\.[0-9]+)?|Infinity)$/.test(value)) {\n    return Number(value);\n  }\n  return NaN;\n}\n__name(filterFloat, \"filterFloat\");\nfunction escape2(field) {\n  if (ignoreNullOrUndefined && field == void 0) {\n    return \"\";\n  }\n  if (preventCast) {\n    return '=\"' + String(field).replace(/\"/g, '\"\"') + '\"';\n  }\n  if (!isNaN(filterFloat(field)) && isFinite(field)) {\n    return parseFloat(field);\n  }\n  return '\"' + String(field).replace(/\"/g, '\"\"') + '\"';\n}\n__name(escape2, \"escape\");\nfunction csv(data, headerRow) {\n  let body = \"\";\n  if (headerRow) {\n    body = headerRow.join(separator) + \"\\r\\n\";\n  }\n  for (let i = 0; i < data.length; i++) {\n    body += data[i].map(escape2).join(separator) + \"\\r\\n\";\n  }\n  return body;\n}\n__name(csv, \"csv\");\n\n// src/common/data/orderby.ts\nfunction parseOrderby(value = \"\") {\n  let [field = \"\", orderby = \"asc\"] = value.split(\" \");\n  orderby = orderby.toLowerCase();\n  return {\n    field,\n    orderby,\n    asc: orderby !== \"desc\",\n    desc: orderby === \"desc\"\n  };\n}\n__name(parseOrderby, \"parseOrderby\");\nfunction composeOrderby(field, asc = true) {\n  return `${field} ${asc ? \"asc\" : \"desc\"}`;\n}\n__name(composeOrderby, \"composeOrderby\");\nfunction cmp(a, b, asc = true) {\n  const aa = a || 0;\n  const bb = b || 0;\n  return aa > bb ? asc ? 1 : -1 : aa < bb ? asc ? -1 : 1 : 0;\n}\n__name(cmp, \"cmp\");\nfunction sortedOrderby(values, ...orderby) {\n  if (orderby.length > 0) {\n    let orderByList = orderby.map(parseOrderby);\n    let sortValues = Array.from(values);\n    sortValues.sort((a, b) => {\n      for (let { field, asc } of orderByList) {\n        const result = cmp(a[field], b[field], asc);\n        if (result !== 0)\n          return result;\n      }\n      return 0;\n    });\n    return sortValues;\n  }\n  return values;\n}\n__name(sortedOrderby, \"sortedOrderby\");\n\n// src/common/data/array.ts\nfunction arrayUnique(x) {\n  return x.filter((n, index) => x.indexOf(n) === index);\n}\n__name(arrayUnique, \"arrayUnique\");\nfunction arrayMinus(x, y) {\n  return arrayUnique(x.filter((n) => !y.includes(n)));\n}\n__name(arrayMinus, \"arrayMinus\");\nfunction arrayUnion(...a) {\n  return arrayUnique(a.reduce((acc = [], value) => acc.concat(value), []));\n}\n__name(arrayUnion, \"arrayUnion\");\nfunction arrayFlatten(...list) {\n  return list.flat(Infinity);\n}\n__name(arrayFlatten, \"arrayFlatten\");\nfunction arrayIntersection(x, y) {\n  return arrayUnique(x).filter((n) => y.includes(n));\n}\n__name(arrayIntersection, \"arrayIntersection\");\nfunction arraySymmetricDifference(x, y) {\n  return arrayMinus(arrayUnion(x, y), arrayIntersection(x, y));\n}\n__name(arraySymmetricDifference, \"arraySymmetricDifference\");\nfunction arrayRemoveElement(arr, el) {\n  if (arr && Array.isArray(arr)) {\n    let index;\n    while ((index = arr.indexOf(el)) !== -1) {\n      arr.splice(index, 1);\n    }\n    return arr;\n  }\n  return [];\n}\n__name(arrayRemoveElement, \"arrayRemoveElement\");\nfunction arraySetElement(arr, el) {\n  if (!arr.includes(el))\n    arr.push(el);\n  return arr;\n}\n__name(arraySetElement, \"arraySetElement\");\nfunction arrayFilterInPlace(array, fn) {\n  array.splice(0, array.length, ...array.filter(fn));\n  return array;\n}\n__name(arrayFilterInPlace, \"arrayFilterInPlace\");\nfunction arrayToggleInPlace(array, el) {\n  const index = array.findIndex((e) => e === el);\n  if (index >= 0)\n    array.splice(index, 1);\n  else\n    array.push(el);\n  return array;\n}\n__name(arrayToggleInPlace, \"arrayToggleInPlace\");\nfunction arrayEmptyInPlace(array) {\n  array.splice(0, array.length);\n  return array;\n}\n__name(arrayEmptyInPlace, \"arrayEmptyInPlace\");\nfunction arraySorted(arr, cond = cmp) {\n  return Array.from(arr).sort(cond);\n}\n__name(arraySorted, \"arraySorted\");\nfunction arraySortedNumbers(arr) {\n  return arraySorted(arr, (l, r) => l - r);\n}\n__name(arraySortedNumbers, \"arraySortedNumbers\");\nfunction arrayIsEqual(array1, array2) {\n  return array1.length === array2.length && array1.every((value, index) => value === array2[index]);\n}\n__name(arrayIsEqual, \"arrayIsEqual\");\nfunction arrayShuffleInPlace(array) {\n  array.sort(() => Math.random() > 0.5 ? 1 : -1);\n  return array;\n}\n__name(arrayShuffleInPlace, \"arrayShuffleInPlace\");\nfunction arrayShuffle(array) {\n  return arrayShuffleInPlace(Array.from(array));\n}\n__name(arrayShuffle, \"arrayShuffle\");\nfunction arrayShuffleForce(array) {\n  while (array.length > 1) {\n    const copy = Array.from(array);\n    arrayShuffleInPlace(copy);\n    if (!arrayIsEqual(array, copy))\n      return copy;\n  }\n  return array;\n}\n__name(arrayShuffleForce, \"arrayShuffleForce\");\nfunction arrayRandomElement(array) {\n  return array[Math.floor(Math.random() * array.length)];\n}\n__name(arrayRandomElement, \"arrayRandomElement\");\nfunction arrayMax(...array) {\n  return arrayFlatten(array).reduce((acc, value) => acc != null ? value > acc ? value : acc : value, void 0);\n}\n__name(arrayMax, \"arrayMax\");\nfunction arrayMin(...array) {\n  return arrayFlatten(array).reduce((acc, value) => acc != null ? value < acc ? value : acc : value, void 0);\n}\n__name(arrayMin, \"arrayMin\");\nfunction createArray(size2 = 0, item) {\n  if (size2 <= 0)\n    return [];\n  let arr = new Array(size2);\n  for (let i = 0; i < size2; i++) {\n    arr[i] = item instanceof Function ? item(i) : item;\n  }\n  return arr;\n}\n__name(createArray, \"createArray\");\n\n// src/common/data/basex.ts\nvar log2 = Logger(\"zeed:basex\");\nvar alphabets = {\n  \"2\": \"01\",\n  \"8\": \"01234567\",\n  \"11\": \"0123456789a\",\n  \"16\": \"0123456789abcdef\",\n  \"32\": \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\",\n  \"32-rfc\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\",\n  \"32-hex\": \"0123456789ABCDEFGHIJKLMNOPQRSTUV\",\n  \"32-zbase\": \"ybndrfg8ejkmcpqxot1uwisza345h769\",\n  \"36\": \"0123456789abcdefghijklmnopqrstuvwxyz\",\n  \"58\": \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\",\n  \"62\": \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n  \"64\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n  \"64-url\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\",\n  \"66\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~\",\n  \"85\": \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~\"\n};\nfunction useBase(alphaOrBase) {\n  let ALPHABET;\n  if (typeof alphaOrBase === \"string\") {\n    ALPHABET = alphaOrBase;\n  } else {\n    ALPHABET = alphabets[alphaOrBase.toString()];\n    if (ALPHABET == null)\n      throw new Error(`Unknown base ${alphaOrBase}`);\n  }\n  if (ALPHABET.length >= 255)\n    throw new TypeError(\"Alphabet too long\");\n  const BASE_MAP = new Uint8Array(256);\n  for (let j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (let i = 0; i < ALPHABET.length; i++) {\n    const x = ALPHABET.charAt(i);\n    const xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255)\n      throw new TypeError(x + \" is ambiguous\");\n    BASE_MAP[xc] = i;\n  }\n  const BASE = ALPHABET.length;\n  const LEADER = ALPHABET.charAt(0);\n  const FACTOR = Math.log(BASE) / Math.log(256);\n  const iFACTOR = Math.log(256) / Math.log(BASE);\n  function encode(source, padToLength = -1) {\n    let data = toUint8Array(source);\n    if (data.byteLength === 0)\n      return \"\";\n    let length = 0;\n    let pbegin = 0;\n    const pend = data.byteLength;\n    while (pbegin !== pend && data[pbegin] === 0)\n      pbegin++;\n    const size2 = (pend - pbegin) * iFACTOR + 1 >>> 0;\n    const dataEncoded = new Uint8Array(size2);\n    while (pbegin !== pend) {\n      let carry = data[pbegin];\n      let i = 0;\n      for (let it1 = size2 - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n        carry += 256 * dataEncoded[it1] >>> 0;\n        dataEncoded[it1] = carry % BASE >>> 0;\n        carry = carry / BASE >>> 0;\n      }\n      if (carry !== 0) {\n        log2.warn(\"Non-zero carry\", data, padToLength, i, size2);\n        throw new Error(\"Non-zero carry\");\n      }\n      length = i;\n      pbegin++;\n    }\n    let it2 = size2 - length;\n    while (it2 !== size2 && dataEncoded[it2] === 0) {\n      it2++;\n    }\n    let str = \"\";\n    for (; it2 < size2; ++it2)\n      str += ALPHABET.charAt(dataEncoded[it2]);\n    if (padToLength > 0) {\n      return str.padStart(padToLength, LEADER);\n    }\n    return str;\n  }\n  __name(encode, \"encode\");\n  function decode(source, padToLength = -1) {\n    if (typeof source !== \"string\")\n      throw new TypeError(\"Expected String\");\n    if (source.length === 0)\n      return new Uint8Array();\n    source = source.replace(/\\s+/gi, \"\");\n    let psz = 0;\n    let length = 0;\n    while (source[psz] === LEADER) {\n      psz++;\n    }\n    const size2 = (source.length - psz) * FACTOR + 1 >>> 0;\n    const dataDecoded = new Uint8Array(size2);\n    while (source[psz]) {\n      let carry = BASE_MAP[source.charCodeAt(psz)];\n      if (carry === 255)\n        throw new Error(`Unsupported character \"${source[psz]}\"`);\n      let i = 0;\n      for (let it3 = size2 - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n        carry += BASE * dataDecoded[it3] >>> 0;\n        dataDecoded[it3] = carry % 256 >>> 0;\n        carry = carry / 256 >>> 0;\n      }\n      if (carry !== 0)\n        throw new Error(\"Non-zero carry\");\n      length = i;\n      psz++;\n    }\n    let it4 = size2 - length;\n    while (it4 !== size2 && dataDecoded[it4] === 0) {\n      it4++;\n    }\n    if (padToLength > 0) {\n      return new Uint8Array([\n        ...new Uint8Array(padToLength - dataDecoded.length + it4),\n        ...dataDecoded.slice(it4)\n      ]);\n    }\n    return dataDecoded.slice(it4);\n  }\n  __name(decode, \"decode\");\n  return {\n    encode,\n    decode\n  };\n}\n__name(useBase, \"useBase\");\nvar { encode: encodeBase16, decode: decodeBase16 } = useBase(16);\nvar { encode: encodeBase32, decode: decodeBase32 } = useBase(32);\nvar { encode: encodeBase58, decode: decodeBase58 } = useBase(58);\nvar { encode: encodeBase62, decode: decodeBase62 } = useBase(62);\nvar { encode: encodeBase64, decode: decodeBase64 } = useBase(62);\n\n// src/common/data/camelcase.ts\nvar toCamelCase = /* @__PURE__ */ __name((s) => {\n  if (s.length > 0) {\n    if (/^[A-Z0-9_\\-\\ ]*$/g.test(s)) {\n      s = s.toLowerCase();\n    }\n    s = s.replace(/^[-_\\ ]+/gi, \"\").replace(/[-_\\ ]+$/gi, \"\").replace(/[-_\\ ]+([a-z0-9])/gi, ($0, $1) => $1.toUpperCase());\n    s = s[0].toLowerCase() + s.substring(1);\n  }\n  return s;\n}, \"toCamelCase\");\nfunction toCapitalize(s) {\n  return s.charAt(0).toUpperCase() + s.toLowerCase().slice(1);\n}\n__name(toCapitalize, \"toCapitalize\");\nfunction toCapitalizeWords(s) {\n  return s.replace(/\\w\\S*/g, toCapitalize);\n}\n__name(toCapitalizeWords, \"toCapitalizeWords\");\nfunction fromCamelCase(str, separator2 = \"-\") {\n  separator2 = typeof separator2 === \"undefined\" ? \"_\" : separator2;\n  return str.replace(/([a-z\\d])([A-Z])/g, \"$1\" + separator2 + \"$2\").replace(/([A-Z]+)([A-Z][a-z\\d]+)/g, \"$1\" + separator2 + \"$2\").toLowerCase();\n}\n__name(fromCamelCase, \"fromCamelCase\");\n\n// src/common/data/json.ts\nfunction serializer(replacer, cycleReplacer) {\n  var stack = [], keys = [];\n  if (cycleReplacer == null)\n    cycleReplacer = /* @__PURE__ */ __name(function(key, value) {\n      if (stack[0] === value)\n        return \"[Circular ~]\";\n      return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\n    }, \"cycleReplacer\");\n  return function(key, value) {\n    if (stack.length > 0) {\n      var thisPos = stack.indexOf(this);\n      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n      if (~stack.indexOf(value))\n        value = cycleReplacer == null ? void 0 : cycleReplacer.call(this, key, value);\n    } else\n      stack.push(value);\n    return replacer == null ? value : replacer.call(this, key, value);\n  };\n}\n__name(serializer, \"serializer\");\nfunction jsonStringify(obj, replacer, spaces, cycleReplacer) {\n  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n__name(jsonStringify, \"jsonStringify\");\n\n// src/common/data/convert.ts\nvar TRUE_VALUES_LIST = [\"1\", \"true\", \"yes\", \"y\", \"on\"];\nfunction stringToBoolean(value, defaultValue = false) {\n  if (value == null || typeof value !== \"string\")\n    return defaultValue;\n  return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase());\n}\n__name(stringToBoolean, \"stringToBoolean\");\nfunction stringToInteger(value, defaultValue = 0) {\n  var _a;\n  if (value == null || typeof value !== \"string\")\n    return defaultValue;\n  return (_a = parseInt(value.trim(), 10)) != null ? _a : defaultValue;\n}\n__name(stringToInteger, \"stringToInteger\");\nfunction stringToFloat(value, defaultValue = 0) {\n  var _a;\n  if (value == null || typeof value !== \"string\")\n    return defaultValue;\n  return (_a = parseFloat(value.trim())) != null ? _a : defaultValue;\n}\n__name(stringToFloat, \"stringToFloat\");\nfunction valueToBoolean(value, defaultValue = false) {\n  if (value == null)\n    return defaultValue;\n  if (typeof value === \"boolean\")\n    return value;\n  if (typeof value === \"number\")\n    return value !== 0;\n  return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase());\n}\n__name(valueToBoolean, \"valueToBoolean\");\nfunction valueToInteger(value, defaultValue = 0) {\n  var _a;\n  if (value == null)\n    return defaultValue;\n  if (typeof value === \"boolean\")\n    return value ? 1 : 0;\n  if (typeof value === \"number\")\n    return Math.floor(value);\n  return (_a = parseInt(String(value).trim(), 10)) != null ? _a : defaultValue;\n}\n__name(valueToInteger, \"valueToInteger\");\nfunction valueToFloat(value, defaultValue = 0) {\n  var _a;\n  if (value == null)\n    return defaultValue;\n  if (typeof value === \"boolean\")\n    return value ? 1 : 0;\n  if (typeof value === \"number\")\n    return Math.floor(value);\n  return (_a = parseFloat(String(value).trim())) != null ? _a : defaultValue;\n}\n__name(valueToFloat, \"valueToFloat\");\nfunction valueToString(value, defaultValue = \"\") {\n  var _a;\n  if (value == null)\n    return defaultValue;\n  return (_a = String(value)) != null ? _a : defaultValue;\n}\n__name(valueToString, \"valueToString\");\nvar toFloat = valueToFloat;\nvar toInt = valueToInteger;\nvar toString = valueToString;\nvar toBool = valueToBoolean;\nfunction formatMessages(messages2, opt = {}) {\n  const { trace = true, pretty = true } = opt;\n  return messages2.map((obj) => {\n    if (obj && typeof obj === \"object\") {\n      if (obj instanceof Error) {\n        if (!trace) {\n          return `${obj.name || \"Error\"}: ${obj.message}`;\n        }\n        return `${obj.name || \"Error\"}: ${obj.message}\n${obj.stack}`;\n      }\n      return pretty ? jsonStringify(obj, null, 2) : jsonStringify(obj);\n    }\n    return String(obj);\n  });\n}\n__name(formatMessages, \"formatMessages\");\nfunction renderMessages(messages2, opt = {}) {\n  return formatMessages(messages2, opt).join(\" \");\n}\n__name(renderMessages, \"renderMessages\");\nfunction fixBrokenUth8String(brokenString) {\n  try {\n    return decodeURIComponent(escape(brokenString));\n  } catch (e) {\n  }\n  return brokenString;\n}\n__name(fixBrokenUth8String, \"fixBrokenUth8String\");\n\n// src/common/data/currency.ts\nvar defaults = {\n  symbol: \"$\",\n  separator: \",\",\n  decimal: \".\",\n  errorOnInvalid: false,\n  precision: 2,\n  pattern: \"!#\",\n  negativePattern: \"-!#\",\n  format,\n  fromCents: false\n};\nvar round = /* @__PURE__ */ __name((v) => Math.round(v), \"round\");\nvar pow = /* @__PURE__ */ __name((p) => Math.pow(10, p), \"pow\");\nvar rounding = /* @__PURE__ */ __name((value, increment) => round(value / increment) * increment, \"rounding\");\nvar groupRegex = /(\\d)(?=(\\d{3})+\\b)/g;\nvar vedicRegex = /(\\d)(?=(\\d\\d)+\\d\\b)/g;\nfunction currency(value, opts = {}) {\n  return new Currency(value, opts);\n}\n__name(currency, \"currency\");\nvar _Currency = class {\n  constructor(value, opts = {}) {\n    var _a;\n    let settings = Object.assign({}, defaults, opts);\n    let precision = pow((_a = settings.precision) != null ? _a : 2);\n    let v = parse(value, settings);\n    this.intValue = v;\n    this.value = v / precision;\n    settings.increment = settings.increment || 1 / precision;\n    if (settings.useVedic) {\n      settings.groups = vedicRegex;\n    } else {\n      settings.groups = groupRegex;\n    }\n    this._settings = settings;\n    this._precision = precision;\n  }\n  add(number) {\n    let { intValue, _settings, _precision } = this;\n    return currency((intValue += parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);\n  }\n  subtract(number) {\n    let { intValue, _settings, _precision } = this;\n    return currency((intValue -= parse(number, _settings)) / (_settings.fromCents ? 1 : _precision), _settings);\n  }\n  multiply(number) {\n    let { intValue, _settings, _precision } = this;\n    return currency((intValue *= number) / (_settings.fromCents ? 1 : pow(_precision)), _settings);\n  }\n  divide(number) {\n    let { intValue, _settings } = this;\n    return currency(intValue /= parse(number, _settings, false), _settings);\n  }\n  distribute(count) {\n    let { intValue, _precision, _settings } = this, distribution = [], split = Math[intValue >= 0 ? \"floor\" : \"ceil\"](intValue / count), pennies = Math.abs(intValue - split * count), precision = _settings.fromCents ? 1 : _precision;\n    for (; count !== 0; count--) {\n      let item = currency(split / precision, _settings);\n      pennies-- > 0 && (item = item[intValue >= 0 ? \"add\" : \"subtract\"](1 / precision));\n      distribution.push(item);\n    }\n    return distribution;\n  }\n  dollars() {\n    return ~~this.value;\n  }\n  cents() {\n    let { intValue, _precision } = this;\n    return ~~(intValue % _precision);\n  }\n  format(options) {\n    let { _settings } = this;\n    if (typeof options === \"function\") {\n      return options(this, _settings);\n    }\n    return _settings.format(this, Object.assign({}, _settings, options));\n  }\n  toString() {\n    let { intValue, _precision, _settings } = this;\n    return rounding(intValue / _precision, _settings.increment).toFixed(_settings.precision);\n  }\n  toJSON() {\n    return this.value;\n  }\n  static sum(...array) {\n    return arrayFlatten(array).reduce((acc, value) => currency(acc).add(value), this.zero);\n  }\n  static avg(...array) {\n    let arr = arrayFlatten(array);\n    return arr.reduce((acc, value) => currency(acc).add(value), this.zero).divide(arr.length);\n  }\n};\nvar Currency = _Currency;\n__name(Currency, \"Currency\");\nCurrency.zero = new _Currency(0);\nCurrency.one = new _Currency(1);\nfunction parse(value, opts, useRounding = true) {\n  let v = 0, { decimal, errorOnInvalid, precision: decimals, fromCents } = opts, precision = pow(decimals), isNumber = typeof value === \"number\";\n  if (value instanceof Currency && fromCents) {\n    return value.intValue;\n  }\n  if (isNumber || value instanceof Currency) {\n    v = value instanceof Currency ? value.value : value;\n  } else if (typeof value === \"string\") {\n    let regex = new RegExp(\"[^-\\\\d\" + decimal + \"]\", \"g\"), decimalString = new RegExp(\"\\\\\" + decimal, \"g\");\n    v = value.replace(/\\((.*)\\)/, \"-$1\").replace(regex, \"\").replace(decimalString, \".\");\n    v = v || 0;\n  } else {\n    if (errorOnInvalid) {\n      throw Error(\"Invalid Input\");\n    }\n    v = 0;\n  }\n  if (!fromCents) {\n    v *= precision;\n    v = v.toFixed(4);\n  }\n  return useRounding ? round(v) : v;\n}\n__name(parse, \"parse\");\nfunction format(currency2, settings) {\n  let { pattern: pattern2, negativePattern, symbol, separator: separator2, decimal, groups } = settings, split = (\"\" + currency2).replace(/^-/, \"\").split(\".\"), dollars = split[0], cents = split[1];\n  return (currency2.value >= 0 ? pattern2 : negativePattern).replace(\"!\", symbol).replace(\"#\", dollars.replace(groups, \"$1\" + separator2) + (cents ? decimal + cents : \"\"));\n}\n__name(format, \"format\");\nvar isHalf = /* @__PURE__ */ __name((value) => Math.abs(value) % 1 === 0.5, \"isHalf\");\nvar isEven = /* @__PURE__ */ __name((value) => value % 2 === 0, \"isEven\");\nvar roundUp = /* @__PURE__ */ __name((value) => Math.ceil(value), \"roundUp\");\nvar roundDown = /* @__PURE__ */ __name((value) => Math.floor(value), \"roundDown\");\nvar roundHalfUp = /* @__PURE__ */ __name((value) => Math.round(value), \"roundHalfUp\");\nvar roundHalfOdd = /* @__PURE__ */ __name((value) => {\n  const rounded = Math.round(value);\n  if (!isHalf(value)) {\n    return rounded;\n  }\n  return isEven(rounded) ? rounded - 1 : rounded;\n}, \"roundHalfOdd\");\nvar roundHalfAwayFromZero = /* @__PURE__ */ __name((value) => {\n  return isHalf(value) ? Math.sign(value) * Math.ceil(Math.abs(value)) : Math.round(value);\n}, \"roundHalfAwayFromZero\");\nvar roundHalfDown = /* @__PURE__ */ __name((value) => isHalf(value) ? Math.floor(value) : Math.round(value), \"roundHalfDown\");\nvar roundHalfEven = /* @__PURE__ */ __name((value) => {\n  const rounded = Math.round(value);\n  if (!isHalf(value)) {\n    return rounded;\n  }\n  return isEven(rounded) ? rounded : rounded - 1;\n}, \"roundHalfEven\");\nvar roundHalfTowardsZero = /* @__PURE__ */ __name((value) => isHalf(value) ? Math.sign(value) * Math.floor(Math.abs(value)) : Math.round(value), \"roundHalfTowardsZero\");\n\n// src/common/promise.ts\nvar { warn } = Logger(\"zeed:promise\");\nasync function sleep(milliSeconds) {\n  return new Promise((resolve) => setTimeout(resolve, milliSeconds));\n}\n__name(sleep, \"sleep\");\nasync function immediate() {\n  return new Promise((resolve) => setTimeout(resolve, 0));\n}\n__name(immediate, \"immediate\");\nvar timeoutReached = Symbol(\"timeout\");\nasync function timeout(promise, milliSeconds, timeoutValue = timeoutReached) {\n  return new Promise(async (resolve, reject) => {\n    let done = false;\n    const timeout2 = setTimeout(() => {\n      done = true;\n      resolve(timeoutValue);\n    }, milliSeconds);\n    try {\n      let result = await promise;\n      clearTimeout(timeout2);\n      if (!done)\n        resolve(result);\n    } catch (err) {\n      clearTimeout(timeout2);\n      if (!done)\n        reject(err);\n    }\n  });\n}\n__name(timeout, \"timeout\");\nvar timoutError = new Error(\"Timeout reached\");\nfunction isTimeout(value) {\n  return value === timeoutReached || value === timoutError;\n}\n__name(isTimeout, \"isTimeout\");\nasync function tryTimeout(promise, milliSeconds) {\n  if (milliSeconds <= 0) {\n    return await promise;\n  }\n  return new Promise(async (resolve, reject) => {\n    let done = false;\n    const timeout2 = setTimeout(() => {\n      done = true;\n      reject(timoutError);\n    }, milliSeconds);\n    try {\n      let result = await promise;\n      clearTimeout(timeout2);\n      if (!done)\n        resolve(result);\n    } catch (err) {\n      clearTimeout(timeout2);\n      if (!done)\n        reject(err);\n    }\n  });\n}\n__name(tryTimeout, \"tryTimeout\");\nfunction waitOn(obj, event, timeoutMS = 1e3) {\n  return new Promise((resolve, reject) => {\n    let fn = /* @__PURE__ */ __name((value) => {\n      if (timer) {\n        clearTimeout(timer);\n        done();\n        resolve(value);\n      }\n    }, \"fn\");\n    let done = /* @__PURE__ */ __name(() => {\n      timer = null;\n      if (obj.off) {\n        obj.off(event, fn);\n      } else if (obj.removeEventListener) {\n        obj.removeEventListener(event, fn);\n      } else {\n        warn(\"No remove listener method found for\", obj, event);\n      }\n    }, \"done\");\n    let timer = setTimeout(() => {\n      done();\n      reject(new Error(`Did not response in time`));\n    }, timeoutMS);\n    if (obj.on) {\n      obj.on(event, fn);\n    } else if (obj.addEventListener) {\n      obj.addEventListener(event, fn);\n    } else {\n      warn(\"No listener method found for\", obj);\n    }\n  });\n}\n__name(waitOn, \"waitOn\");\nfunction isPromise(value) {\n  return Boolean(value && (value instanceof Promise || typeof value.then === \"function\"));\n}\n__name(isPromise, \"isPromise\");\nfunction promisify(value) {\n  return Promise.resolve(value);\n}\n__name(promisify, \"promisify\");\n\n// src/common/data/day.ts\nvar DAY_MS = 1e3 * 60 * 60 * 24;\nvar Day = class {\n  constructor(days) {\n    var _a;\n    if (typeof days === \"number\") {\n      this.days = days;\n      return;\n    }\n    if (days != null) {\n      days = (_a = Day.from(days)) == null ? void 0 : _a.days;\n    }\n    if (days == null) {\n      const date = new Date();\n      this.days = date.getFullYear() * 1e4 + (date.getMonth() + 1) * 100 + date.getDate();\n    } else {\n      this.days = days;\n    }\n  }\n  static fromNumber(n) {\n    return new Day(n);\n  }\n  static fromString(dateString) {\n    return new Day(+dateString.replace(/[^0-9]/g, \"\"));\n  }\n  static fromDate(date, gmt = false) {\n    return gmt ? Day.fromString(date.toISOString().substr(0, 10)) : new Day(date.getFullYear() * 1e4 + (date.getMonth() + 1) * 100 + date.getDate());\n  }\n  static fromDateGMT(date) {\n    return Day.fromDate(date, true);\n  }\n  static from(value, gmt = false) {\n    if (typeof value === \"number\") {\n      return new Day(value);\n    } else if (typeof value === \"string\") {\n      return Day.fromString(value);\n    } else if (value instanceof Date) {\n      return Day.fromDate(value, gmt);\n    } else if (value instanceof Day) {\n      return value;\n    }\n  }\n  toNumber() {\n    return this.days;\n  }\n  toJson() {\n    return this.days;\n  }\n  toString(sep = \"-\") {\n    let baseString = String(this.days);\n    return baseString.slice(0, 4) + sep + baseString.slice(4, 6) + sep + baseString.slice(6, 8);\n  }\n  toDate(gmt = false) {\n    return gmt ? new Date(`${this.toString()}T00:00:00.000Z`) : new Date(this.days / 1e4, this.days / 100 % 100 - 1, this.days % 100);\n  }\n  toDateGMT() {\n    return this.toDate(true);\n  }\n  dayOffset(offset) {\n    return Day.fromDateGMT(new Date(this.toDateGMT().getTime() + offset * DAY_MS));\n  }\n  daysUntil(otherDay) {\n    var _a;\n    return Math.round((((_a = new Day(otherDay)) == null ? void 0 : _a.toDateGMT().getTime()) - this.toDateGMT().getTime()) / DAY_MS);\n  }\n  yesterday() {\n    return this.dayOffset(-1);\n  }\n  tomorrow() {\n    return this.dayOffset(1);\n  }\n};\n__name(Day, \"Day\");\nasync function forEachDay(from, to, handler) {\n  let start = Day.from(from);\n  let end = Day.from(to);\n  while (start && end && (start == null ? void 0 : start.days) <= (end == null ? void 0 : end.days)) {\n    let result = handler(start);\n    if (isPromise(result)) {\n      await result;\n    }\n    start = start.dayOffset(1);\n  }\n}\n__name(forEachDay, \"forEachDay\");\nfunction today() {\n  return new Day();\n}\n__name(today, \"today\");\nfunction day(days) {\n  return new Day(days);\n}\n__name(day, \"day\");\n\n// src/common/data/html.ts\nvar escapeHTML = /* @__PURE__ */ __name((s) => s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/'/g, \"&apos;\").replace(/\"/g, \"&quot;\"), \"escapeHTML\");\nvar unescapeHTML = /* @__PURE__ */ __name((s) => s.replace(/&lt;/gi, \"<\").replace(/&gt;/gi, \">\").replace(/&quot;/gi, '\"').replace(/&apos;/gi, \"'\").replace(/&amp;/gi, \"&\"), \"unescapeHTML\");\n\n// src/common/data/math.ts\nfunction randomBoolean(bias = 0.25) {\n  return Math.random() < bias;\n}\n__name(randomBoolean, \"randomBoolean\");\nfunction randomInt(max = 100, min = 0) {\n  return min + Math.floor(Math.random() * (max - min));\n}\n__name(randomInt, \"randomInt\");\nfunction randomFloat(max = 100, min = 0) {\n  return min + Math.random() * (max - min);\n}\n__name(randomFloat, \"randomFloat\");\nfunction between(min, value, max) {\n  return Math.max(min, Math.min(max, value));\n}\n__name(between, \"between\");\n\n// src/common/data/path.ts\nvar MAX_FILENAME_LENGTH = 100;\nvar reControlChars = /[\\u0000-\\u001F\\u0080-\\u009F]/g;\nvar reRelativePath = /^\\.+/;\nvar reTrailingPeriods = /\\.+$/;\nfunction filenameReservedRegex() {\n  return /[<>:\"/\\\\|?*\\u0000-\\u001F]/g;\n}\n__name(filenameReservedRegex, \"filenameReservedRegex\");\nfunction windowsReservedNameRegex() {\n  return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i;\n}\n__name(windowsReservedNameRegex, \"windowsReservedNameRegex\");\nfunction toValidFilename(string) {\n  if (typeof string !== \"string\") {\n    throw new TypeError(\"Expected a string\");\n  }\n  const replacement = \"_\";\n  if (filenameReservedRegex().test(replacement) && reControlChars.test(replacement)) {\n    throw new Error(\"Replacement string cannot contain reserved filename characters\");\n  }\n  string = string.replace(filenameReservedRegex(), replacement).replace(reControlChars, replacement).replace(reRelativePath, replacement).replace(reTrailingPeriods, \"\");\n  string = windowsReservedNameRegex().test(string) ? string + replacement : string;\n  return string.slice(0, MAX_FILENAME_LENGTH);\n}\n__name(toValidFilename, \"toValidFilename\");\n\n// src/common/data/regexp.ts\nvar rxEscape = /[\\\\\\-\\[\\]\\/{}()*+?.^$|]/g;\nfunction escapeRegExp(value) {\n  if (!value)\n    return \"\";\n  if (value instanceof RegExp) {\n    return value.source;\n  }\n  return value.replace(rxEscape, \"\\\\$&\");\n}\n__name(escapeRegExp, \"escapeRegExp\");\n\n// src/common/data/sortable.ts\nfunction startSortWeight(items) {\n  return items.reduce((acc, item) => Math.min(acc, item.sort_weight || 0), 0) - 1 - Math.random();\n}\n__name(startSortWeight, \"startSortWeight\");\nfunction endSortWeight(items) {\n  return items.reduce((acc, item) => Math.max(acc, item.sort_weight || 0), 0) + 1 + Math.random();\n}\n__name(endSortWeight, \"endSortWeight\");\nfunction moveSortWeight(newIndex, oldIndex, items) {\n  let count = items.length;\n  const moveLower = newIndex < oldIndex;\n  if (count <= 0 || newIndex >= count - 1) {\n    return endSortWeight(items);\n  }\n  if (newIndex <= 0) {\n    return startSortWeight(items);\n  }\n  items = sortedItems([...items]);\n  const step = moveLower ? -1 : 0;\n  const lower = items[newIndex + step].sort_weight || 0;\n  const upper = items[newIndex + step + 1].sort_weight || 0;\n  const distance = upper - lower;\n  if (distance === 0) {\n    if (moveLower) {\n      return startSortWeight(items);\n    }\n    return endSortWeight(items);\n  }\n  const middle = lower + distance / 2;\n  const fuzzy = distance * 0.01 * (Math.random() - 0.5);\n  return middle + fuzzy;\n}\n__name(moveSortWeight, \"moveSortWeight\");\nfunction sortedItems(items) {\n  items.sort((a, b) => (a.sort_weight || 0) - (b.sort_weight || 0));\n  return items;\n}\n__name(sortedItems, \"sortedItems\");\n\n// src/common/data/url.ts\nvar findURL = /((?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?)/gim;\nfunction linkifyPlainText(text) {\n  return text.split(findURL).map((part, i) => {\n    const escapedPart = escapeHTML(part);\n    return i % 2 ? `<a target=\"_blank\" href=\"${escapedPart}\">${toHumanReadableUrl(escapedPart)}</a>` : escapedPart;\n  }).join(\"\");\n}\n__name(linkifyPlainText, \"linkifyPlainText\");\nfunction toHumanReadableUrl(url) {\n  return url.replace(/^https?:\\/\\/(www\\.)?/, \"\").replace(/\\/$/, \"\");\n}\n__name(toHumanReadableUrl, \"toHumanReadableUrl\");\nfunction encodeQuery(data) {\n  let pairs = [];\n  for (let [key, value] of Object.entries(data)) {\n    if (value != null) {\n      if (!Array.isArray(value)) {\n        value = [value];\n      }\n      for (let v of value) {\n        if (v != null) {\n          pairs.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(v.toString() || \"\"));\n        }\n      }\n    }\n  }\n  return pairs.join(\"&\");\n}\n__name(encodeQuery, \"encodeQuery\");\nfunction parseQuery(queryString) {\n  let query = {};\n  let pairs = (queryString[0] === \"?\" ? queryString.substr(1) : queryString).split(\"&\");\n  for (let i = 0; i < pairs.length; i++) {\n    let pair = pairs[i].split(\"=\");\n    let key = decodeURIComponent(pair[0]);\n    let value = decodeURIComponent(pair[1] || \"\");\n    if (query[key] != null) {\n      if (!Array.isArray(query[key])) {\n        query[key] = [query[key]];\n      }\n      query[key].push(value);\n    } else {\n      query[key] = value;\n    }\n  }\n  return query;\n}\n__name(parseQuery, \"parseQuery\");\n\n// src/common/data/utils.ts\nfunction ensureKey(obj, key, createFn) {\n  let value = obj[key];\n  if (value === void 0) {\n    value = createFn(key, obj);\n    obj[key] = value;\n  }\n  return value;\n}\n__name(ensureKey, \"ensureKey\");\nasync function ensureKeyAsync(obj, key, createFn) {\n  let value = obj[key];\n  if (value === void 0) {\n    value = await createFn(key, obj);\n    obj[key] = value;\n  }\n  return value;\n}\n__name(ensureKeyAsync, \"ensureKeyAsync\");\nfunction size(obj) {\n  if (obj != null) {\n    if (obj.size != null) {\n      return obj.size;\n    }\n    if (obj.length != null) {\n      return obj.length;\n    }\n    return Object.keys(obj).length;\n  }\n  return 0;\n}\n__name(size, \"size\");\nfunction last(array) {\n  return array != null && array.length > 0 ? array[array.length - 1] : void 0;\n}\n__name(last, \"last\");\nfunction empty(value) {\n  try {\n    if (value != null) {\n      if (Array.isArray(value)) {\n        return value.length <= 0;\n      } else if (typeof value === \"string\") {\n        return value.length <= 0;\n      } else if ((value == null ? void 0 : value.size) != null) {\n        return value.size <= 0;\n      } else {\n        return Object.keys(value).length <= 0;\n      }\n    }\n  } catch (err) {\n    console.error(\"Failed to check if empty for\", value, err);\n  }\n  return true;\n}\n__name(empty, \"empty\");\nfunction cloneObject(obj) {\n  if (Object(obj) !== obj)\n    return obj;\n  return JSON.parse(JSON.stringify(obj));\n}\n__name(cloneObject, \"cloneObject\");\nfunction cloneJsonObject(obj) {\n  if (Object(obj) !== obj)\n    return obj;\n  return JSON.parse(JSON.stringify(obj));\n}\n__name(cloneJsonObject, \"cloneJsonObject\");\n\n// src/common/dispose-defer.ts\nasync function callDisposer(disposable) {\n  if (typeof disposable === \"function\") {\n    await promisify(disposable());\n  } else if (isPromise(disposable)) {\n    await disposable;\n  } else if (typeof disposable.dispose === \"function\") {\n    await promisify(disposable.dispose());\n  } else if (isPromise(disposable.dispose)) {\n    await disposable.dispose;\n  } else if (typeof disposable.cleanup === \"function\") {\n    await promisify(disposable.cleanup());\n  } else if (isPromise(disposable.cleanup)) {\n    await disposable.cleanup;\n  }\n}\n__name(callDisposer, \"callDisposer\");\nfunction useDispose() {\n  let tracked = [];\n  const untrack = /* @__PURE__ */ __name(async (disposable) => {\n    if (tracked.includes(disposable)) {\n      arrayFilterInPlace(tracked, (el) => el !== disposable);\n      await callDisposer(disposable);\n    }\n  }, \"untrack\");\n  const dispose = /* @__PURE__ */ __name(async () => {\n    while (tracked.length > 0) {\n      await untrack(tracked[0]);\n    }\n  }, \"dispose\");\n  const track = /* @__PURE__ */ __name((obj) => {\n    tracked.unshift(obj);\n    return () => untrack(obj);\n  }, \"track\");\n  return Object.assign(dispose, {\n    track,\n    add: track,\n    untrack,\n    dispose,\n    exec: dispose,\n    getSize() {\n      return tracked.length;\n    }\n  });\n}\n__name(useDispose, \"useDispose\");\nvar useDisposer = useDispose;\nfunction useDefer(config = {}) {\n  const { mode = \"fifo\" } = config;\n  let steps = [];\n  const exec = /* @__PURE__ */ __name(async (expectSync = false) => {\n    while (steps.length > 0) {\n      let step = steps[0];\n      arrayFilterInPlace(steps, (el) => el !== step);\n      if (typeof step === \"function\") {\n        let result = step();\n        if (isPromise(result)) {\n          if (expectSync)\n            throw new Error(`Expected sync only function, but found async: ${step}`);\n          await result;\n        }\n      } else if (isPromise(step)) {\n        if (expectSync)\n          throw new Error(`Expected sync only function, but found async: ${step}`);\n        await step;\n      } else {\n        throw new Error(`Unhandled disposable: ${step}`);\n      }\n    }\n  }, \"exec\");\n  const add = /* @__PURE__ */ __name((obj) => {\n    if (mode === \"lifo\") {\n      steps.unshift(obj);\n    } else {\n      steps.push(obj);\n    }\n  }, \"add\");\n  return Object.assign(exec, {\n    add,\n    exec,\n    getSize() {\n      return steps.length;\n    }\n  });\n}\n__name(useDefer, \"useDefer\");\nfunction useTimeout(fn, timeout2 = 0) {\n  let timeoutHandle = setTimeout(fn, timeout2);\n  return () => {\n    if (timeoutHandle) {\n      clearTimeout(timeoutHandle);\n      timeoutHandle = void 0;\n    }\n  };\n}\n__name(useTimeout, \"useTimeout\");\nfunction useInterval(fn, interval) {\n  let intervalHandle = setInterval(fn, interval);\n  return () => {\n    if (intervalHandle) {\n      clearInterval(intervalHandle);\n      intervalHandle = void 0;\n    }\n  };\n}\n__name(useInterval, \"useInterval\");\nfunction useEventListener(emitter, eventName, fn, ...args) {\n  if (emitter == null)\n    return () => {\n    };\n  if (emitter.on) {\n    emitter.on(eventName, fn, ...args);\n  } else if (emitter.addEventListener) {\n    emitter.addEventListener(eventName, fn, ...args);\n  }\n  return () => {\n    if (emitter.off) {\n      emitter.off(eventName, fn, ...args);\n    } else if (emitter.removeEventListener) {\n      emitter.removeEventListener(eventName, fn, ...args);\n    }\n  };\n}\n__name(useEventListener, \"useEventListener\");\n\n// src/common/localhost.ts\nfunction isLocalHost(hostname = ((_b) => (_b = ((_a) => (_a = globalThis == null ? void 0 : globalThis.location) == null ? void 0 : _a.hostname)()) != null ? _b : \"\")()) {\n  return [\"localhost\", \"127.0.0.1\", \"\", \"::1\", \"::\"].includes(hostname) || hostname.startsWith(\"192.168.\") || hostname.startsWith(\"10.0.\") || hostname.endsWith(\".local\");\n}\n__name(isLocalHost, \"isLocalHost\");\n\n// src/common/uuid.ts\nvar { encode: encode62, decode: decode62 } = useBase(62);\nvar { encode: encode32 } = useBase(32);\nfunction uuidBytes() {\n  return randomUint8Array(16);\n}\n__name(uuidBytes, \"uuidBytes\");\nvar uuid32bit = /* @__PURE__ */ __name(() => new Uint32Array(randomUint8Array(4))[0], \"uuid32bit\");\nfunction uuid() {\n  return encode62(uuidBytes(), 22);\n}\n__name(uuid, \"uuid\");\nfunction uuidEncode(bytes) {\n  return encode62(bytes, 22);\n}\n__name(uuidEncode, \"uuidEncode\");\nfunction uuidDecode(uuid2) {\n  return decode62(uuid2, 16);\n}\n__name(uuidDecode, \"uuidDecode\");\nfunction uuidB32() {\n  return encode32(uuidBytes(), 26);\n}\n__name(uuidB32, \"uuidB32\");\nvar _unameCounters = {};\nfunction uname(name = \"id\") {\n  if (_unameCounters[name] == null) {\n    _unameCounters[name] = 0;\n  }\n  return `${name}-${_unameCounters[name]++}`;\n}\n__name(uname, \"uname\");\nvar _qid = 0;\nfunction qid() {\n  return `id-${_qid++}`;\n}\n__name(qid, \"qid\");\nvar pattern = \"10000000-1000-4000-8000-100000000000\";\nvar uuidv4 = /* @__PURE__ */ __name(() => pattern.replace(/[018]/g, (c) => (c ^ randomUint8Array(1)[0] & 15 >> c / 4).toString(16)), \"uuidv4\");\nvar ReferenceDateInMS = 16e11;\nfunction longToByteArray(long) {\n  var byteArray = new Uint8Array([0, 0, 0, 0, 0, 0]);\n  const bytes = byteArray.length - 1;\n  for (var index = 0; index < byteArray.length; index++) {\n    var byte = long & 255;\n    byteArray[bytes - index] = byte;\n    long = (long - byte) / 256;\n  }\n  return byteArray;\n}\n__name(longToByteArray, \"longToByteArray\");\nfunction suidBytes() {\n  const ms = getTimestamp() - ReferenceDateInMS;\n  return new Uint8Array([...longToByteArray(ms), ...randomUint8Array(10)]);\n}\n__name(suidBytes, \"suidBytes\");\nfunction suid() {\n  return encode62(suidBytes(), 22);\n}\n__name(suid, \"suid\");\nfunction suidDate(id) {\n  return suidBytesDate(decode62(id, 16));\n}\n__name(suidDate, \"suidDate\");\nfunction suidBytesDate(id) {\n  return new Date(ReferenceDateInMS + id.slice(0, 6).reduce((acc, byte) => {\n    return acc * 256 + byte;\n  }, 0));\n}\n__name(suidBytesDate, \"suidBytesDate\");\n\n// src/common/msg/emitter.ts\nvar log3 = Logger(\"zeed:emitter\");\nvar Emitter = class {\n  constructor() {\n    this.subscribers = {};\n    this.subscribersOnAny = [];\n    this.call = new Proxy({}, {\n      get: (target, name) => (...args) => this.emit(name, ...args)\n    });\n  }\n  async emit(event, ...args) {\n    let ok = false;\n    try {\n      let subscribers = this.subscribers[event] || [];\n      this.subscribersOnAny.forEach((fn) => fn(event, ...args));\n      if (subscribers.length > 0) {\n        let all = subscribers.map((fn) => {\n          try {\n            return promisify(fn(...args));\n          } catch (err) {\n            log3.warn(\"emit warning:\", err);\n          }\n        });\n        ok = true;\n        await Promise.all(all);\n      }\n    } catch (err) {\n      log3.error(\"emit exception\", err);\n    }\n    return ok;\n  }\n  onAny(fn) {\n    this.subscribersOnAny.push(fn);\n  }\n  on(event, listener) {\n    let subscribers = this.subscribers[event] || [];\n    subscribers.push(listener);\n    this.subscribers[event] = subscribers;\n    return () => {\n      this.off(event, listener);\n    };\n  }\n  onCall(handlers) {\n    for (const [name, handler] of Object.entries(handlers)) {\n      this.on(name, handler);\n    }\n  }\n  once(event, listener) {\n    const onceListener = /* @__PURE__ */ __name(async (...args) => {\n      this.off(event, onceListener);\n      return await promisify(listener(...args));\n    }, \"onceListener\");\n    this.on(event, onceListener);\n    return () => {\n      this.off(event, listener);\n    };\n  }\n  off(event, listener) {\n    this.subscribers[event] = (this.subscribers[event] || []).filter((f) => listener && f !== listener);\n    return this;\n  }\n  removeAllListeners(event) {\n    this.subscribers = {};\n    return this;\n  }\n  dispose() {\n    this.subscribers = {};\n    this.subscribersOnAny = [];\n  }\n};\n__name(Emitter, \"Emitter\");\nfunction getGlobalEmitter() {\n  let emitter = getGlobalContext().emitter;\n  if (!emitter) {\n    emitter = new Emitter();\n    getGlobalContext().emitter = emitter;\n  }\n  return emitter;\n}\n__name(getGlobalEmitter, \"getGlobalEmitter\");\nvar messages = new Emitter();\nfunction lazyListener(emitter, listenerKey) {\n  const name = Math.round(Math.random() * 100);\n  var events = [];\n  var lazyResolve;\n  const incoming = /* @__PURE__ */ __name((key, obj) => {\n    let ev = { key, obj };\n    events.push(ev);\n    lazyResolve && lazyResolve();\n  }, \"incoming\");\n  if (listenerKey) {\n    if (emitter.on) {\n      emitter.on(listenerKey, (obj) => {\n        incoming(listenerKey, obj);\n      });\n    } else if (emitter.addEventListener) {\n      emitter.addEventListener(listenerKey, (obj) => {\n        incoming(listenerKey, obj);\n      });\n    } else {\n      log3.error(name, \"Cannot listen to key\");\n    }\n  } else {\n    if (emitter.onAny) {\n      emitter.onAny((key, obj) => {\n        incoming(key, obj);\n      });\n    } else {\n      log3.error(name, \"cannot listen to all for\", emitter);\n    }\n  }\n  let on = /* @__PURE__ */ __name((key, skipUnmatched = true) => {\n    return new Promise((resolve, reject) => {\n      if (!key) {\n        key = listenerKey;\n        if (!key) {\n          if (events.length) {\n            key = events[0].key;\n          }\n        }\n      }\n      lazyResolve = /* @__PURE__ */ __name(() => {\n        while (events.length > 0) {\n          let ev = events.shift();\n          if (ev.key === key) {\n            lazyResolve = void 0;\n            resolve(ev.obj);\n          } else {\n            if (skipUnmatched) {\n              log3.warn(name, `Unhandled event ${key} with value: ${ev.obj}`);\n              continue;\n            }\n            reject(`Expected ${key}, but found ${ev.key} with value=${ev.obj}`);\n            log3.error(name, `Unhandled event ${key} with value: ${ev.obj}`);\n          }\n          break;\n        }\n      }, \"lazyResolve\");\n      lazyResolve();\n    });\n  }, \"on\");\n  return on;\n}\n__name(lazyListener, \"lazyListener\");\n\n// src/common/msg/channel.ts\nvar Channel = class extends Emitter {\n  constructor() {\n    super(...arguments);\n    this.id = uuid();\n  }\n  close() {\n  }\n};\n__name(Channel, \"Channel\");\nvar LocalChannel = class extends Channel {\n  constructor() {\n    super(...arguments);\n    this.isConnected = true;\n  }\n  postMessage(data) {\n    var _a;\n    (_a = this.other) == null ? void 0 : _a.emit(\"message\", {\n      data,\n      origin: \"local\",\n      lastEventId: uuid()\n    });\n  }\n};\n__name(LocalChannel, \"LocalChannel\");\nfunction fakeWorkerPair() {\n  let w1 = new LocalChannel();\n  let w2 = new LocalChannel();\n  w1.other = w2;\n  w2.other = w1;\n  return [w1, w2];\n}\n__name(fakeWorkerPair, \"fakeWorkerPair\");\n\n// src/common/msg/encoder.ts\nvar NoopEncoder = class {\n  async encode(data) {\n    return data;\n  }\n  async decode(data) {\n    return data;\n  }\n};\n__name(NoopEncoder, \"NoopEncoder\");\nvar JsonEncoder = class {\n  async encode(data) {\n    return jsonToUint8Array(data);\n  }\n  async decode(data) {\n    return Uint8ArrayToJson(data);\n  }\n};\n__name(JsonEncoder, \"JsonEncoder\");\nvar CryptoEncoder = class {\n  constructor(key) {\n    this.key = key;\n  }\n  async encode(data) {\n    const plain = jsonToUint8Array(data);\n    return await encrypt(plain, this.key);\n  }\n  async decode(data) {\n    const plain = await decrypt(data, this.key);\n    return Uint8ArrayToJson(plain);\n  }\n};\n__name(CryptoEncoder, \"CryptoEncoder\");\n\n// src/common/msg/messages.ts\nvar createPromiseProxy = /* @__PURE__ */ __name((fn, opt, predefinedMethods = {}) => new Proxy(predefinedMethods, {\n  get: (target, name) => {\n    if (name in target)\n      return target[name];\n    return (...args) => fn(name, args, opt);\n  }\n}), \"createPromiseProxy\");\nfunction useMessageHub(opt = {}) {\n  let {\n    name = uname(\"hub\"),\n    encoder = new JsonEncoder(),\n    retryAfter = 1e3,\n    ignoreUnhandled = true\n  } = opt;\n  const log8 = Logger(name);\n  let handlers = {};\n  let channel;\n  let queue = [];\n  let queueRetryTimer;\n  let waitingForResponse = {};\n  const dispose = /* @__PURE__ */ __name(() => {\n    clearTimeout(queueRetryTimer);\n  }, \"dispose\");\n  const postNext = /* @__PURE__ */ __name(async () => {\n    clearTimeout(queueRetryTimer);\n    if (channel) {\n      if (channel.isConnected) {\n        while (queue.length) {\n          let message = queue[0];\n          try {\n            channel.postMessage(await encoder.encode(message));\n            queue.shift();\n          } catch (err) {\n            log8.warn(\"postMessage\", err);\n            break;\n          }\n        }\n      }\n      if (queue.length > 0 && retryAfter > 0) {\n        queueRetryTimer = setTimeout(postNext, retryAfter);\n      }\n    }\n  }, \"postNext\");\n  const postMessage = /* @__PURE__ */ __name(async (message) => {\n    log8(\"enqueue postMessage\", message);\n    queue.push(message);\n    await postNext();\n  }, \"postMessage\");\n  const connect = /* @__PURE__ */ __name(async (newChannel) => {\n    channel = newChannel;\n    channel.on(\"connect\", postNext);\n    channel.on(\"message\", async (msg) => {\n      log8(\"onmessage\", typeof msg);\n      const { name: name2, args, id, result, error } = await encoder.decode(msg.data);\n      if (name2) {\n        log8(`name ${name2} id ${id}`);\n        try {\n          if (handlers[name2] == null) {\n            throw new Error(`handler for ${name2} was not found`);\n          }\n          let result2 = handlers[name2](...args);\n          if (isPromise(result2))\n            result2 = await result2;\n          log8(`result ${result2}`);\n          if (id) {\n            postMessage({ id, result: result2 });\n          }\n        } catch (error2) {\n          let err = error2 instanceof Error ? error2 : new Error(valueToString(error2));\n          log8.warn(\"execution error\", err.name);\n          postMessage({\n            id,\n            error: {\n              message: err.message,\n              stack: err.stack,\n              name: err.name\n            }\n          });\n        }\n      } else if (id) {\n        log8(`response for id=${id}: result=${result}, error=${error}`);\n        if (waitingForResponse[id] == null) {\n          if (result === void 0) {\n            log8(`skip response for ${id}`);\n          } else {\n            log8.warn(`no response hook for ${id}`);\n          }\n        } else {\n          const [resolve, reject] = waitingForResponse[id];\n          if (resolve && reject) {\n            delete waitingForResponse[id];\n            if (error) {\n              let err = new Error(error.message);\n              err.stack = error.stack;\n              err.name = error.name;\n              log8.warn(\"reject\", err.name);\n              reject(err);\n            } else {\n              log8(\"resolve\", result);\n              resolve(result);\n            }\n          }\n        }\n      } else if (!ignoreUnhandled) {\n        log8.warn(\"Unhandled message\", msg);\n      }\n    });\n    postNext();\n  }, \"connect\");\n  const fetchMessage = /* @__PURE__ */ __name(async (name2, args, opt2 = {}) => {\n    const { timeout: timeout2 = 5e3 } = opt2;\n    const id = uuid();\n    postMessage({\n      name: name2,\n      args,\n      id\n    });\n    return tryTimeout(new Promise((resolve, reject) => waitingForResponse[id] = [resolve, reject]), timeout2);\n  }, \"fetchMessage\");\n  if (opt.channel) {\n    connect(opt.channel);\n  }\n  return {\n    dispose,\n    connect,\n    listen(newHandlers) {\n      Object.assign(handlers, newHandlers);\n    },\n    send() {\n      return createPromiseProxy(fetchMessage, {}, {\n        options(perCallopt) {\n          return createPromiseProxy(fetchMessage, __spreadValues({}, perCallopt));\n        }\n      });\n    }\n  };\n}\n__name(useMessageHub, \"useMessageHub\");\n\n// src/common/msg/pubsub.ts\nvar PubSub = class extends Emitter {\n  constructor(opt) {\n    super();\n    this.publish = this.emit;\n    this.subscribe = this.on;\n    var _a;\n    let { name, encoder = new JsonEncoder(), channel, debug = false } = opt;\n    this.channel = channel;\n    this.encoder = encoder;\n    this.debug = debug;\n    this.name = (_a = name != null ? name : this.channel.id) != null ? _a : uname(\"pubsub\");\n    this.log = Logger(`${this.shortId}`);\n    if (this.debug) {\n      this.channel.on(\"connect\", () => {\n        this.log(\"channel connected\");\n      });\n      this.channel.on(\"disconnect\", () => {\n        this.log(\"channel disconnected\");\n      });\n    }\n    this.channel.on(\"message\", async ({ data }) => {\n      let info = await this.encoder.decode(data);\n      if (this.debug)\n        this.log(`channel message, event=${info == null ? void 0 : info.event}, info=`, info);\n      else\n        this.log(`channel message, event=${info == null ? void 0 : info.event}`);\n      if (info) {\n        const { event, args } = info;\n        await this.emitSuper(event, ...args);\n      }\n    });\n  }\n  get shortId() {\n    return this.name.substr(0, 6);\n  }\n  async emitSuper(event, ...args) {\n    return await super.emit(event, ...args);\n  }\n  async emit(event, ...args) {\n    try {\n      if (this.debug)\n        this.log(`emit(${event})`, event);\n      else\n        this.log(`emit(${event})`, args.length);\n      if (!this.channel.isConnected) {\n        this.log.warn(\"channel not connected\");\n        return false;\n      }\n      const data = await this.encoder.encode({ event, args });\n      this.channel.postMessage(data);\n      return true;\n    } catch (err) {\n      this.log.warn(`emit(${event})`, err);\n    }\n    return false;\n  }\n};\n__name(PubSub, \"PubSub\");\nfunction usePubSub(opt) {\n  return new PubSub(opt);\n}\n__name(usePubSub, \"usePubSub\");\n\n// src/common/mutex.ts\nfunction useMutex() {\n  let token = true;\n  return (fn, elseFn) => {\n    let executed = false;\n    if (token) {\n      token = false;\n      try {\n        fn();\n        executed = true;\n      } finally {\n        token = true;\n      }\n    } else if (elseFn !== void 0) {\n      elseFn();\n    }\n    return executed;\n  };\n}\n__name(useMutex, \"useMutex\");\nfunction useAsyncMutex() {\n  let token = true;\n  return async (fn, elseFn) => {\n    let executed = false;\n    if (token) {\n      token = false;\n      try {\n        let result = fn();\n        if (isPromise(result))\n          await result;\n        executed = true;\n      } finally {\n        token = true;\n      }\n    } else if (elseFn !== void 0) {\n      let result = elseFn();\n      if (isPromise(result))\n        await result;\n    }\n    return executed;\n  };\n}\n__name(useAsyncMutex, \"useAsyncMutex\");\n\n// src/common/network.ts\nvar log4 = Logger(\"network\");\nvar defaultOptions = {\n  cache: \"no-cache\",\n  redirect: \"follow\"\n};\nasync function fetchBasic(url, fetchOptions = {}, fetchFn = fetch) {\n  try {\n    const response = await fetchFn(url, fetchOptions);\n    if (response.status < 400) {\n      return response;\n    }\n    try {\n      log4.warn(`Fetch of ${url} with ${fetchOptions} returned status=${response.status}`);\n      log4.warn(`Response: ${await response.text()}`);\n    } catch (err) {\n      log4.error(\"Exception:\", err);\n    }\n  } catch (err) {\n    log4.error(\"fetchBasic\", err);\n  }\n}\n__name(fetchBasic, \"fetchBasic\");\nasync function fetchJson(url, opts = {}, fetchFn = fetch) {\n  try {\n    let res = await fetchBasic(url, __spreadValues(__spreadProps(__spreadValues({\n      method: \"GET\"\n    }, defaultOptions), {\n      headers: {}\n    }), opts), fetchFn);\n    if (res) {\n      return await res.json();\n    }\n  } catch (err) {\n    log4.error(\"fetchJSON error:\", err);\n  }\n}\n__name(fetchJson, \"fetchJson\");\nfunction fetchOptionsFormURLEncoded(data, method = \"POST\") {\n  return __spreadProps(__spreadValues({\n    method\n  }, defaultOptions), {\n    headers: {\n      \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\"\n    },\n    body: encodeQuery(data)\n  });\n}\n__name(fetchOptionsFormURLEncoded, \"fetchOptionsFormURLEncoded\");\nfunction fetchOptionsJson(data, method = \"POST\") {\n  return __spreadProps(__spreadValues({\n    method\n  }, defaultOptions), {\n    headers: {\n      \"Content-Type\": \"application/json; charset=utf-8\",\n      Accept: \"application/json\"\n    },\n    body: JSON.stringify(data)\n  });\n}\n__name(fetchOptionsJson, \"fetchOptionsJson\");\nasync function fetchText(url, opts = {}, fetchFn = fetch) {\n  try {\n    let res = await fetchBasic(url, __spreadValues(__spreadProps(__spreadValues({\n      method: \"GET\"\n    }, defaultOptions), {\n      headers: {}\n    }), opts), fetchFn);\n    if (res) {\n      return await res.text();\n    }\n  } catch (err) {\n    log4.error(\"fetchHTML error:\", err);\n  }\n}\n__name(fetchText, \"fetchText\");\n\n// src/common/platform.ts\nfunction getWindow() {\n  if (typeof window !== \"undefined\")\n    return window;\n}\n__name(getWindow, \"getWindow\");\nfunction getNavigator() {\n  if (typeof navigator !== \"undefined\")\n    return navigator;\n}\n__name(getNavigator, \"getNavigator\");\nfunction getGlobal() {\n  var _a;\n  return ((_a = getWindow()) != null ? _a : typeof WorkerGlobalScope !== \"undefined\") ? self : typeof global !== \"undefined\" ? global : Function(\"return this;\")();\n}\n__name(getGlobal, \"getGlobal\");\nvar _navigator = getNavigator();\nvar _window = getWindow();\nfunction detect(info = {\n  ios: false,\n  macos: false,\n  windows: false,\n  beaker: false,\n  electron: false,\n  wkwebview: false,\n  pwa: false,\n  pwaInstalled: false,\n  browser: false,\n  node: false,\n  worker: false,\n  jest: false,\n  macosNative: false,\n  iosNative: false,\n  appleNative: false,\n  touch: false\n}) {\n  var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n  info.ios = ((_a = _navigator == null ? void 0 : _navigator.platform) == null ? void 0 : _a.match(/(iPhone|iPod|iPad)/i)) != null;\n  info.macos = !!((_b = _navigator == null ? void 0 : _navigator.platform) == null ? void 0 : _b.startsWith(\"Mac\"));\n  info.windows = !!((_c = _navigator == null ? void 0 : _navigator.platform) == null ? void 0 : _c.startsWith(\"Win\"));\n  info.beaker = (_window == null ? void 0 : _window[\"beaker\"]) != null;\n  info.electron = (((_e = (_d = _navigator == null ? void 0 : _navigator.userAgent) == null ? void 0 : _d.toLowerCase()) == null ? void 0 : _e.indexOf(\" electron/\")) || -1) > -1 && !info.beaker;\n  info.wkwebview = ((_f = _window == null ? void 0 : _window.webkit) == null ? void 0 : _f[\"messageHandlers\"]) != null;\n  info.pwa = (_navigator == null ? void 0 : _navigator.serviceWorker) != null;\n  info.pwaInstalled = (_navigator == null ? void 0 : _navigator.standalone) || ((_h = (_g = _window == null ? void 0 : _window.matchMedia) == null ? void 0 : _g.call(_window, \"(display-mode: standalone)\")) == null ? void 0 : _h.matches);\n  info.node = typeof process !== \"undefined\" && ((_i = process == null ? void 0 : process.release) == null ? void 0 : _i.name) === \"node\";\n  info.browser = !info.electron && !info.wkwebview && !info.node;\n  info.worker = typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope;\n  info.jest = typeof jest !== \"undefined\";\n  info.macosNative = info.wkwebview && info.macos;\n  info.iosNative = info.wkwebview && info.ios;\n  info.appleNative = info.wkwebview;\n  info.touch = _window && \"ontouchstart\" in _window || ((_navigator == null ? void 0 : _navigator.maxTouchPoints) || 0) > 1 || (_navigator == null ? void 0 : _navigator.msPointerEnabled) && (_window == null ? void 0 : _window.MSGesture) || (_window == null ? void 0 : _window.DocumentTouch) && document instanceof DocumentTouch;\n  return info;\n}\n__name(detect, \"detect\");\nvar isBrowser = /* @__PURE__ */ __name(() => typeof window !== \"undefined\" && globalThis === window, \"isBrowser\");\nvar platform = detect();\nfunction useExitHandler(handler) {\n  if (isBrowser()) {\n    window.addEventListener(\"beforeunload\", handler);\n  } else if (typeof process !== \"undefined\") {\n    process.on(\"exit\", () => handler);\n  }\n}\n__name(useExitHandler, \"useExitHandler\");\n\n// src/common/pool.ts\nfunction usePool(config = {}) {\n  const { maxParallel = 3 } = config;\n  let currentParallel = 0;\n  let priority = 0;\n  let tasks = {};\n  function performNext() {\n    if (currentParallel >= maxParallel)\n      return;\n    let waitingTasks = Object.values(tasks).filter((t) => !t.running);\n    if (waitingTasks.length > 0) {\n      let taskInfo;\n      for (let t of waitingTasks) {\n        if (taskInfo == null || t.priority < taskInfo.priority) {\n          taskInfo = t;\n        }\n      }\n      if (taskInfo) {\n        taskInfo.running = true;\n        ++currentParallel;\n        taskInfo.task().then((r) => {\n          if (taskInfo == null ? void 0 : taskInfo.id)\n            delete tasks[taskInfo.id];\n          --currentParallel;\n          performNext();\n        }).catch((err) => {\n          if (taskInfo == null ? void 0 : taskInfo.id)\n            delete tasks[taskInfo.id];\n          --currentParallel;\n          performNext();\n        });\n      }\n    }\n  }\n  __name(performNext, \"performNext\");\n  function cancel(id) {\n    let taskInfo = tasks[id];\n    if (taskInfo && taskInfo.running !== true) {\n      delete tasks[id];\n    }\n  }\n  __name(cancel, \"cancel\");\n  return {\n    cancel,\n    enqueue(id, task) {\n      if (tasks[id] == null) {\n        tasks[id] = {\n          id,\n          task,\n          priority: ++priority,\n          running: false\n        };\n        performNext();\n      }\n      return () => cancel(id);\n    }\n  };\n}\n__name(usePool, \"usePool\");\n\n// src/common/queue.ts\nvar log5 = Logger(\"zeed:queue\");\nvar SerialQueue = class {\n  constructor(opt = {}) {\n    this.queue = [];\n    this.isPaused = false;\n    this.waitToFinish = [];\n    const { name = uname(\"queue\"), logLevel } = opt;\n    this.name = name;\n    this.log = Logger(`zeed:queue:${name}`);\n    this.log.level = logLevel != null ? logLevel : Infinity /* off */;\n  }\n  async performNext() {\n    this.log(`performNext, queue.length =`, this.queue.length);\n    if (this.currentTask != null) {\n      this.log(`performNext => skip while another task is running`);\n      return;\n    }\n    if (this.isPaused) {\n      this.log(`performNext => skip while is paused`);\n      return;\n    }\n    while (this.currentTask == null && !this.isPaused) {\n      let info = this.queue.shift();\n      this.log(`performNext => ${info == null ? void 0 : info.name}`);\n      if (info == null) {\n        break;\n      }\n      const { name, task, resolve } = info;\n      this.currentTask = task();\n      let result = void 0;\n      try {\n        this.log.info(`start task ${name}`);\n        result = await this.currentTask;\n        this.log(`finished task ${name} with result =`, result);\n      } catch (err) {\n        log5.warn(\"Error performing task\", err);\n      }\n      resolve(result);\n      this.currentTask = void 0;\n    }\n    while (this.waitToFinish.length > 0) {\n      this.waitToFinish.shift()();\n    }\n  }\n  async enqueue(task, opt = {}) {\n    const { immediate: immediate2 = false, name = uname(this.name) } = opt;\n    if (immediate2) {\n      this.log.info(`immediate execution ${name}`);\n      return await task();\n    }\n    this.log(`enqueue ${name}`);\n    return new Promise((resolve) => {\n      this.queue.push({\n        name,\n        task,\n        resolve\n      });\n      this.performNext();\n    });\n  }\n  async enqueueReentrant(task, opt = {}) {\n    return this.enqueue(task, {\n      immediate: this.currentTask != null,\n      name: opt.name\n    });\n  }\n  async cancelAll(unblock = true) {\n    this.log(`cancelAll`);\n    let resolver = this.queue.map((task) => task.resolve);\n    this.queue = [];\n    resolver.forEach((r) => r(void 0));\n    await this.wait();\n  }\n  async pause() {\n    this.log(`pause`);\n    this.isPaused = true;\n    await this.wait();\n  }\n  resume() {\n    this.log(`resume`);\n    this.isPaused = false;\n    this.performNext();\n  }\n  async wait() {\n    this.log(`wait`);\n    if (this.currentTask == null && (this.queue.length === 0 || this.isPaused)) {\n      return;\n    }\n    return new Promise((resolve) => {\n      this.waitToFinish.push(resolve);\n    });\n  }\n};\n__name(SerialQueue, \"SerialQueue\");\n\n// src/common/storage/memstorage.ts\nvar log6 = Logger(\"zeed:memstorage\");\nvar MemStorage = class {\n  constructor(opt = {}) {\n    this.store = {};\n  }\n  setItem(key, value) {\n    this.store[key] = cloneObject(value);\n  }\n  getItem(key) {\n    if (this.store.hasOwnProperty(key)) {\n      return cloneObject(this.store[key]);\n    }\n  }\n  removeItem(key) {\n    delete this.store[key];\n  }\n  clear() {\n    this.store = {};\n  }\n  allKeys() {\n    return Object.keys(this.store);\n  }\n};\n__name(MemStorage, \"MemStorage\");\n\n// src/common/throttle-debounce.ts\nvar DEBUG = false;\nvar log7 = DEBUG ? Logger(\"zeed:throttle\") : () => {\n};\nfunction throttle(callback, opt = {}) {\n  const { delay = 100, trailing = true, leading = true } = opt;\n  let timeoutID = 0;\n  let checkpoint = 0;\n  let visited = 0;\n  let debugCheckpoint = Date.now();\n  function clearExistingTimeout() {\n    if (timeoutID) {\n      clearTimeout(timeoutID);\n      timeoutID = void 0;\n    }\n  }\n  __name(clearExistingTimeout, \"clearExistingTimeout\");\n  function wrapper(...arguments_) {\n    const now = Date.now();\n    let self2 = this;\n    let elapsed = now - checkpoint;\n    function debugElapsed() {\n      const dnow = Date.now();\n      return `total ${(dnow - debugCheckpoint).toFixed(1)}ms - elapsed ${(dnow - checkpoint).toFixed(1)}ms - visited ${visited}x`;\n    }\n    __name(debugElapsed, \"debugElapsed\");\n    function exec() {\n      visited = 0;\n      checkpoint = Date.now();\n      callback.apply(self2, arguments_);\n    }\n    __name(exec, \"exec\");\n    if (elapsed > delay || !timeoutID) {\n      DEBUG && log7(\"elapsed\", debugElapsed());\n      if (leading) {\n        if (elapsed > delay) {\n          DEBUG && log7(\"\\u{1F680} leading\", debugElapsed());\n          exec();\n        } else {\n          ++visited;\n        }\n      }\n      const timeout2 = elapsed > delay ? delay : delay - elapsed;\n      log7(`\\u23F1 start timeout with ${timeout2.toFixed(1)}ms}`, debugElapsed());\n      clearExistingTimeout();\n      checkpoint = now;\n      timeoutID = setTimeout(() => {\n        DEBUG && log7(\"\\u23F1 reached timeout\", debugElapsed());\n        timeoutID = 0;\n        if (trailing && (!leading || visited > 0)) {\n          DEBUG && log7(\"\\u{1F680} trailing\", debugElapsed());\n          exec();\n        }\n      }, timeout2);\n    } else {\n      ++visited;\n      DEBUG && log7(\"visited\", debugElapsed());\n    }\n  }\n  __name(wrapper, \"wrapper\");\n  wrapper.cancel = clearExistingTimeout;\n  wrapper.dispose = clearExistingTimeout;\n  return wrapper;\n}\n__name(throttle, \"throttle\");\nfunction debounce(callback, opt = {}) {\n  const { delay = 100 } = opt;\n  let timeoutID = 0;\n  function clearExistingTimeout() {\n    if (timeoutID) {\n      clearTimeout(timeoutID);\n      timeoutID = 0;\n    }\n  }\n  __name(clearExistingTimeout, \"clearExistingTimeout\");\n  function wrapper(...arguments_) {\n    let self2 = this;\n    clearExistingTimeout();\n    timeoutID = setTimeout(() => {\n      timeoutID = 0;\n      callback.apply(self2, arguments_);\n    }, delay);\n  }\n  __name(wrapper, \"wrapper\");\n  wrapper.cancel = clearExistingTimeout;\n  wrapper.dispose = clearExistingTimeout;\n  return wrapper;\n}\n__name(debounce, \"debounce\");\n\nexport {\n  _encodeUtf8Polyfill,\n  _decodeUtf8Polyfill,\n  stringToUInt8Array,\n  Uint8ArrayToString,\n  toUint8Array,\n  toHex,\n  toBase64,\n  toBase64Url,\n  fromBase64,\n  equalBinary,\n  jsonToUint8Array,\n  Uint8ArrayToJson,\n  randomUint8Array,\n  digest,\n  deriveKeyPbkdf2,\n  encrypt,\n  decrypt,\n  csv,\n  parseOrderby,\n  composeOrderby,\n  cmp,\n  sortedOrderby,\n  arrayUnique,\n  arrayMinus,\n  arrayUnion,\n  arrayFlatten,\n  arrayIntersection,\n  arraySymmetricDifference,\n  arrayRemoveElement,\n  arraySetElement,\n  arrayFilterInPlace,\n  arrayToggleInPlace,\n  arrayEmptyInPlace,\n  arraySorted,\n  arraySortedNumbers,\n  arrayIsEqual,\n  arrayShuffleInPlace,\n  arrayShuffle,\n  arrayShuffleForce,\n  arrayRandomElement,\n  arrayMax,\n  arrayMin,\n  createArray,\n  useBase,\n  encodeBase16,\n  decodeBase16,\n  encodeBase32,\n  decodeBase32,\n  encodeBase58,\n  decodeBase58,\n  encodeBase62,\n  decodeBase62,\n  encodeBase64,\n  decodeBase64,\n  toCamelCase,\n  toCapitalize,\n  toCapitalizeWords,\n  fromCamelCase,\n  jsonStringify,\n  stringToBoolean,\n  stringToInteger,\n  stringToFloat,\n  valueToBoolean,\n  valueToInteger,\n  valueToFloat,\n  valueToString,\n  toFloat,\n  toInt,\n  toString,\n  toBool,\n  formatMessages,\n  renderMessages,\n  fixBrokenUth8String,\n  currency,\n  Currency,\n  isHalf,\n  isEven,\n  roundUp,\n  roundDown,\n  roundHalfUp,\n  roundHalfOdd,\n  roundHalfAwayFromZero,\n  roundHalfDown,\n  roundHalfEven,\n  roundHalfTowardsZero,\n  sleep,\n  immediate,\n  timeoutReached,\n  timeout,\n  timoutError,\n  isTimeout,\n  tryTimeout,\n  waitOn,\n  isPromise,\n  promisify,\n  DAY_MS,\n  Day,\n  forEachDay,\n  today,\n  day,\n  escapeHTML,\n  unescapeHTML,\n  randomBoolean,\n  randomInt,\n  randomFloat,\n  between,\n  toValidFilename,\n  escapeRegExp,\n  startSortWeight,\n  endSortWeight,\n  moveSortWeight,\n  sortedItems,\n  linkifyPlainText,\n  toHumanReadableUrl,\n  encodeQuery,\n  parseQuery,\n  ensureKey,\n  ensureKeyAsync,\n  size,\n  last,\n  empty,\n  cloneObject,\n  cloneJsonObject,\n  useDispose,\n  useDisposer,\n  useDefer,\n  useTimeout,\n  useInterval,\n  useEventListener,\n  isLocalHost,\n  uuidBytes,\n  uuid32bit,\n  uuid,\n  uuidEncode,\n  uuidDecode,\n  uuidB32,\n  uname,\n  qid,\n  uuidv4,\n  suidBytes,\n  suid,\n  suidDate,\n  suidBytesDate,\n  Emitter,\n  getGlobalEmitter,\n  messages,\n  lazyListener,\n  Channel,\n  LocalChannel,\n  fakeWorkerPair,\n  NoopEncoder,\n  JsonEncoder,\n  CryptoEncoder,\n  createPromiseProxy,\n  useMessageHub,\n  PubSub,\n  usePubSub,\n  useMutex,\n  useAsyncMutex,\n  fetchBasic,\n  fetchJson,\n  fetchOptionsFormURLEncoded,\n  fetchOptionsJson,\n  fetchText,\n  getWindow,\n  getNavigator,\n  getGlobal,\n  detect,\n  isBrowser,\n  platform,\n  useExitHandler,\n  usePool,\n  SerialQueue,\n  MemStorage,\n  throttle,\n  debounce\n};\n//# sourceMappingURL=chunk-SLALP6PY.js.map","import {\n  LoggerBrowserHandler,\n  LoggerBrowserSetupDebugFactory,\n  selectColor,\n  supportsColors\n} from \"./chunk-NZQXKE2T.js\";\nimport {\n  isBrowser\n} from \"./chunk-SLALP6PY.js\";\nimport {\n  Logger,\n  __name,\n  formatMilliseconds,\n  getTimestamp,\n  useLevelFilter,\n  useNamespaceFilter\n} from \"./chunk-FLKB7XIS.js\";\n\n// src/browser/base64.ts\nvar { error } = Logger(\"zeed:base64\");\nfunction urlBase64ToUint8Array(base64String) {\n  try {\n    let padding = \"=\".repeat((4 - base64String.length % 4) % 4);\n    let base64 = (base64String + padding).replace(/-/g, \"+\").replace(/_/g, \"/\");\n    let rawData = window.atob(base64);\n    let outputArray = new Uint8Array(rawData.length);\n    for (let i = 0; i < rawData.length; ++i) {\n      outputArray[i] = rawData.charCodeAt(i);\n    }\n    return outputArray;\n  } catch (err) {\n    error(err, base64String);\n  }\n}\n__name(urlBase64ToUint8Array, \"urlBase64ToUint8Array\");\n\n// src/browser/gravatar.ts\nvar log = Logger(\"zeed:gravatar\");\nfunction gravatar(email, options) {\n  function md5cycle(e, t) {\n    var n = e[0], r = e[1], i = e[2], s = e[3];\n    n = ff(n, r, i, s, t[0], 7, -680876936);\n    s = ff(s, n, r, i, t[1], 12, -389564586);\n    i = ff(i, s, n, r, t[2], 17, 606105819);\n    r = ff(r, i, s, n, t[3], 22, -1044525330);\n    n = ff(n, r, i, s, t[4], 7, -176418897);\n    s = ff(s, n, r, i, t[5], 12, 1200080426);\n    i = ff(i, s, n, r, t[6], 17, -1473231341);\n    r = ff(r, i, s, n, t[7], 22, -45705983);\n    n = ff(n, r, i, s, t[8], 7, 1770035416);\n    s = ff(s, n, r, i, t[9], 12, -1958414417);\n    i = ff(i, s, n, r, t[10], 17, -42063);\n    r = ff(r, i, s, n, t[11], 22, -1990404162);\n    n = ff(n, r, i, s, t[12], 7, 1804603682);\n    s = ff(s, n, r, i, t[13], 12, -40341101);\n    i = ff(i, s, n, r, t[14], 17, -1502002290);\n    r = ff(r, i, s, n, t[15], 22, 1236535329);\n    n = gg(n, r, i, s, t[1], 5, -165796510);\n    s = gg(s, n, r, i, t[6], 9, -1069501632);\n    i = gg(i, s, n, r, t[11], 14, 643717713);\n    r = gg(r, i, s, n, t[0], 20, -373897302);\n    n = gg(n, r, i, s, t[5], 5, -701558691);\n    s = gg(s, n, r, i, t[10], 9, 38016083);\n    i = gg(i, s, n, r, t[15], 14, -660478335);\n    r = gg(r, i, s, n, t[4], 20, -405537848);\n    n = gg(n, r, i, s, t[9], 5, 568446438);\n    s = gg(s, n, r, i, t[14], 9, -1019803690);\n    i = gg(i, s, n, r, t[3], 14, -187363961);\n    r = gg(r, i, s, n, t[8], 20, 1163531501);\n    n = gg(n, r, i, s, t[13], 5, -1444681467);\n    s = gg(s, n, r, i, t[2], 9, -51403784);\n    i = gg(i, s, n, r, t[7], 14, 1735328473);\n    r = gg(r, i, s, n, t[12], 20, -1926607734);\n    n = hh(n, r, i, s, t[5], 4, -378558);\n    s = hh(s, n, r, i, t[8], 11, -2022574463);\n    i = hh(i, s, n, r, t[11], 16, 1839030562);\n    r = hh(r, i, s, n, t[14], 23, -35309556);\n    n = hh(n, r, i, s, t[1], 4, -1530992060);\n    s = hh(s, n, r, i, t[4], 11, 1272893353);\n    i = hh(i, s, n, r, t[7], 16, -155497632);\n    r = hh(r, i, s, n, t[10], 23, -1094730640);\n    n = hh(n, r, i, s, t[13], 4, 681279174);\n    s = hh(s, n, r, i, t[0], 11, -358537222);\n    i = hh(i, s, n, r, t[3], 16, -722521979);\n    r = hh(r, i, s, n, t[6], 23, 76029189);\n    n = hh(n, r, i, s, t[9], 4, -640364487);\n    s = hh(s, n, r, i, t[12], 11, -421815835);\n    i = hh(i, s, n, r, t[15], 16, 530742520);\n    r = hh(r, i, s, n, t[2], 23, -995338651);\n    n = ii(n, r, i, s, t[0], 6, -198630844);\n    s = ii(s, n, r, i, t[7], 10, 1126891415);\n    i = ii(i, s, n, r, t[14], 15, -1416354905);\n    r = ii(r, i, s, n, t[5], 21, -57434055);\n    n = ii(n, r, i, s, t[12], 6, 1700485571);\n    s = ii(s, n, r, i, t[3], 10, -1894986606);\n    i = ii(i, s, n, r, t[10], 15, -1051523);\n    r = ii(r, i, s, n, t[1], 21, -2054922799);\n    n = ii(n, r, i, s, t[8], 6, 1873313359);\n    s = ii(s, n, r, i, t[15], 10, -30611744);\n    i = ii(i, s, n, r, t[6], 15, -1560198380);\n    r = ii(r, i, s, n, t[13], 21, 1309151649);\n    n = ii(n, r, i, s, t[4], 6, -145523070);\n    s = ii(s, n, r, i, t[11], 10, -1120210379);\n    i = ii(i, s, n, r, t[2], 15, 718787259);\n    r = ii(r, i, s, n, t[9], 21, -343485551);\n    e[0] = add32(n, e[0]);\n    e[1] = add32(r, e[1]);\n    e[2] = add32(i, e[2]);\n    e[3] = add32(s, e[3]);\n  }\n  __name(md5cycle, \"md5cycle\");\n  function cmn(e, t, n, r, i, s) {\n    t = add32(add32(t, e), add32(r, s));\n    return add32(t << i | t >>> 32 - i, n);\n  }\n  __name(cmn, \"cmn\");\n  function ff(e, t, n, r, i, s, o) {\n    return cmn(t & n | ~t & r, e, t, i, s, o);\n  }\n  __name(ff, \"ff\");\n  function gg(e, t, n, r, i, s, o) {\n    return cmn(t & r | n & ~r, e, t, i, s, o);\n  }\n  __name(gg, \"gg\");\n  function hh(e, t, n, r, i, s, o) {\n    return cmn(t ^ n ^ r, e, t, i, s, o);\n  }\n  __name(hh, \"hh\");\n  function ii(e, t, n, r, i, s, o) {\n    return cmn(n ^ (t | ~r), e, t, i, s, o);\n  }\n  __name(ii, \"ii\");\n  function md51(e) {\n    var t = e.length, n = [1732584193, -271733879, -1732584194, 271733878], r;\n    for (r = 64; r <= e.length; r += 64) {\n      md5cycle(n, md5blk(e.substring(r - 64, r)));\n    }\n    e = e.substring(r - 64);\n    var i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n    for (r = 0; r < e.length; r++)\n      i[r >> 2] |= e.charCodeAt(r) << (r % 4 << 3);\n    i[r >> 2] |= 128 << (r % 4 << 3);\n    if (r > 55) {\n      md5cycle(n, i);\n      for (r = 0; r < 16; r++)\n        i[r] = 0;\n    }\n    i[14] = t * 8;\n    md5cycle(n, i);\n    return n;\n  }\n  __name(md51, \"md51\");\n  function md5blk(e) {\n    var t = [], n;\n    for (n = 0; n < 64; n += 4) {\n      t[n >> 2] = e.charCodeAt(n) + (e.charCodeAt(n + 1) << 8) + (e.charCodeAt(n + 2) << 16) + (e.charCodeAt(n + 3) << 24);\n    }\n    return t;\n  }\n  __name(md5blk, \"md5blk\");\n  function rhex(e) {\n    var t = \"\", n = 0;\n    for (; n < 4; n++)\n      t += hex_chr[e >> n * 8 + 4 & 15] + hex_chr[e >> n * 8 & 15];\n    return t;\n  }\n  __name(rhex, \"rhex\");\n  function hex(e) {\n    for (var t = 0; t < e.length; t++)\n      e[t] = rhex(e[t]);\n    return e.join(\"\");\n  }\n  __name(hex, \"hex\");\n  function md5(e) {\n    return hex(md51(e));\n  }\n  __name(md5, \"md5\");\n  function add32(e, t) {\n    return e + t & 4294967295;\n  }\n  __name(add32, \"add32\");\n  var hex_chr = \"0123456789abcdef\".split(\"\");\n  var options = options || {}, base, params = [];\n  options = {\n    size: options.size || \"50\",\n    rating: options.rating || \"g\",\n    secure: options.secure || location.protocol === \"https:\",\n    backup: options.backup || \"\"\n  };\n  email = email.trim().toLowerCase();\n  base = options.secure ? \"https://secure.gravatar.com/avatar/\" : \"http://www.gravatar.com/avatar/\";\n  if (options.rating) {\n    params.push(\"r=\" + options.rating);\n  }\n  if (options.backup) {\n    params.push(\"d=\" + encodeURIComponent(options.backup));\n  }\n  if (options.size) {\n    params.push(\"s=\" + options.size);\n  }\n  return base + md5(email) + \"?\" + params.join(\"&\");\n}\n__name(gravatar, \"gravatar\");\nfunction gravatarURLByEmail(email, defaultURL = \"\") {\n  try {\n    return gravatar(email, {\n      size: 256,\n      backup: \"monsterid\",\n      secure: true\n    });\n  } catch (error2) {\n    log(\"Gravatar issue: Did not find an image for \" + email);\n    return defaultURL;\n  }\n}\n__name(gravatarURLByEmail, \"gravatarURLByEmail\");\n\n// src/browser/localstorage.ts\nvar log2 = Logger(\"zeed:localstorage\");\nvar LocalStorage = class {\n  constructor(opt) {\n    this.pretty = false;\n    var _a, _b;\n    log2.assert(opt.name, \"name required\");\n    this.name = opt.name;\n    this.prefix = `${opt.name}$`;\n    this.objectToString = (_a = opt.objectToString) != null ? _a : (data) => {\n      return this.pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);\n    };\n    this.objectFromString = (_b = opt.objectFromString) != null ? _b : (data) => {\n      try {\n        return JSON.parse(data);\n      } catch (err) {\n        log2.warn(`LocalStorage parse error '${err}' in`, data);\n      }\n    };\n  }\n  setItem(key, value) {\n    const data = this.objectToString(value);\n    localStorage.setItem(`${this.prefix}${key}`, data);\n  }\n  getItem(key) {\n    let value = localStorage.getItem(`${this.prefix}${key}`);\n    if (value != null) {\n      return this.objectFromString(value);\n    }\n  }\n  removeItem(key) {\n    localStorage.removeItem(`${this.prefix}${key}`);\n  }\n  clear() {\n    Object.keys(localStorage).filter((key) => key.startsWith(this.prefix)).forEach((key) => {\n      localStorage.removeItem(key);\n    });\n  }\n  allKeys() {\n    const prefixLength = this.prefix.length;\n    return Object.keys(localStorage).filter((key) => key.startsWith(this.prefix)).map((key) => key.substr(prefixLength));\n  }\n};\n__name(LocalStorage, \"LocalStorage\");\n\n// src/browser/log-browser-classic.ts\nvar namespaces = {};\nvar time = getTimestamp();\nvar useColors = supportsColors();\nfunction LoggerBrowserClassicHandler(level, opt = {}) {\n  const { filter = void 0 } = opt;\n  const matchesNamespace = useNamespaceFilter(filter);\n  const matchesLevel = useLevelFilter(level);\n  return (msg) => {\n    if (!matchesLevel(msg.level))\n      return;\n    if (!matchesNamespace(msg.name))\n      return;\n    const timeNow = getTimestamp();\n    let name = msg.name || \"\";\n    let ninfo = namespaces[name || \"\"];\n    if (ninfo == null) {\n      ninfo = {\n        color: selectColor(name)\n      };\n      namespaces[name] = ninfo;\n    }\n    const diff = formatMilliseconds(timeNow - time);\n    let args;\n    if (opt.colors && useColors) {\n      args = opt.nameBrackets ? [`%c[${name}]`] : [`%c${name}`];\n      args.push(`color:${ninfo.color}`);\n      args.push(...msg.messages);\n    } else {\n      args = [name, ...msg.messages];\n    }\n    args.push(`+${diff}`);\n    switch (msg.level) {\n      case 1 /* info */:\n        if (opt.levelHelper)\n          args[0] = `I|*   ` + args[0];\n        console.info(...args);\n        break;\n      case 2 /* warn */:\n        if (opt.levelHelper)\n          args[0] = `W|**  ` + args[0];\n        console.warn(...args);\n        break;\n      case 3 /* error */:\n        if (opt.levelHelper)\n          args[0] = `E|*** ` + args[0];\n        console.error(...args);\n        break;\n      default:\n        if (opt.levelHelper)\n          args[0] = `D|    ` + args[0];\n        console.debug(...args);\n        break;\n    }\n  };\n}\n__name(LoggerBrowserClassicHandler, \"LoggerBrowserClassicHandler\");\n\n// src/browser/log-context-browser.ts\nif (isBrowser()) {\n  Logger.setHandlers([LoggerBrowserHandler()]);\n  Logger.setFactory(LoggerBrowserSetupDebugFactory({}));\n}\n\nexport {\n  urlBase64ToUint8Array,\n  gravatarURLByEmail,\n  LocalStorage,\n  LoggerBrowserClassicHandler\n};\n//# sourceMappingURL=chunk-RXVGRALQ.js.map","import { ref, Ref } from \"vue\"\nimport { Logger } from \"zeed\"\nimport { TwindyNotification } from \"./types\"\n\nconst log = Logger(\"state\")\n\nexport var notifications: Ref<TwindyNotification[]> = ref([])\n\nexport var twIconUrl: string | undefined\n\nexport function setIconUrl(url: string) {\n  twIconUrl = url\n  log.info(\"set icon\", twIconUrl)\n}\n","\nexport default (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n}\n","<template>\n  <svg v-if=\"name\" preserveAspectRatio=\"xMinYMin\">\n    <use :xlink:href=\"url\"></use>\n  </svg>\n  <svg\n    v-else\n    xmlns=\"http://www.w3.org/2000/svg\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    stroke-linecap=\"round\"\n    stroke-linejoin=\"round\"\n  >\n    <slot />\n  </svg>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from \"vue\"\nimport { Logger } from \"zeed\"\nimport { twIconUrl } from \"./state\"\n\nconst log = Logger(\"icon\")\n\nexport default defineComponent({\n  props: {\n    name: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup(props) {\n    // log(\"twicon\", twIconUrl)\n\n    // @ts-ignore\n    let url = twIconUrl ?? window.twIconUrl\n    return {\n      url:\n        (url ?? `${import.meta.env.BASE_URL}assets/sprites.svg`) +\n        \"#\" +\n        props.name,\n    }\n  },\n})\n\n/*\n\nCreate a file in `public/assets/sprites.svg` which looks like this:\n\n<svg xmlns=\"http://www.w3.org/2000/svg\">\n\n  <!-- When adding new entries, please remove the following propertiers, such it can be set via CSS: -->\n  <!-- stroke-width, width, height, xmlns -->\n  <!-- Add `id` for direct access -->\n\n  <svg id=\"test\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n    <!-- ... -->\n  </svg>\n \n</svg>\n*/\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <i class=\"f7\" :data-f7-icon=\"name\" aria-hidden=\"true\" />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from \"vue\"\n\nexport default defineComponent({\n  props: {\n    name: {\n      type: String,\n      default: 0,\n      required: true,\n    },\n  },\n})\n</script>\n","<template>\n  <button\n    :class=\"class\"\n    @click.prevent=\"$emit('action'), $emit('click', $event)\"\n    :disabled=\"disabled\"\n  >\n    <span v-if=\"right && (title || $slots.default)\">{{ title }}<slot /></span>\n    <tw-icon v-if=\"name || icon\" :name=\"name || icon\" />\n    <tw-symbol v-if=\"symbol\" :name=\"symbol\" />\n    <span v-if=\"!right && (title || $slots.default)\">{{ title }}<slot /></span>\n  </button>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from \"vue\"\nimport twIcon from \"./tw-icon.vue\"\nimport twSymbol from \"./tw-symbol.vue\"\n\n/**\n * Features:\n *\n * - Supports `icon` (svg) and `symbol` (fonts)\n * - Image can go `left` or `right`\n * - Title can be passed via slot\n * - `@action` to have simple TS compatible event listeners\n */\n\nexport default defineComponent({\n  components: {\n    twIcon,\n    twSymbol,\n  },\n  emits: [\"action\", \"click\"],\n  props: {\n    class: {\n      type: String,\n      default: \"tw-button\",\n    },\n    name: String,\n    icon: String,\n    symbol: String,\n    right: Boolean,\n    disabled: Boolean,\n    title: String,\n  },\n})\n</script>\n","const findFocusable = (element: HTMLElement): HTMLElement[] => {\n  if (!element) {\n    return []\n  }\n  return Array.from(\n    element.querySelectorAll(\n      `\n    a[href],\n    area[href],\n    input:not([disabled]),\n    select:not([disabled]),\n    textarea:not([disabled]),\n    button:not([disabled]),\n    iframe,\n    object,\n    embed,\n    *[tabindex],\n    *[contenteditable]\n    `.trim()\n    ) || []\n  )\n}\n\nlet onKeyDown: any\n\nconst bind = (el: HTMLElement, { value = true }) => {\n  if (value && el) {\n    onKeyDown = (event: KeyboardEvent) => {\n      const focusable: HTMLElement[] = findFocusable(el)\n      let currentFocus = document.querySelector(\":focus\")\n      let index = focusable.findIndex((f: Node) => f.isSameNode(currentFocus))\n      let length = focusable.length\n\n      if (event.key === \"Tab\") {\n        event.preventDefault()\n        if (!event.shiftKey) {\n          ++index\n          if (index >= length) index = 0\n        } else {\n          --index\n          if (index <= 0) index = length - 1\n        }\n        focusable[index].focus()\n      }\n    }\n    el.addEventListener(\"keydown\", onKeyDown)\n  }\n}\n\nconst unbind = (el: HTMLElement) => {\n  el?.removeEventListener(\"keydown\", onKeyDown)\n}\n\nconst directive = {\n  beforeMount: bind,\n  unMount: unbind,\n}\n\nexport default directive\n","import { ref, Ref, watch } from \"vue\"\n\n/*\nprops: {\n    modelValue: {\n      type: Boolean,\n      default: false,\n    },\n    active: {\n      type: Boolean,\n      default: false,\n    },\n*/\n\nexport function useActive(props: any): Ref<boolean> {\n  let show = ref(Boolean(props?.active || props?.modelValue))\n\n  watch(\n    () => props?.active,\n    () => {\n      // console.log(\"useActive :active =\", props?.active)\n      show.value = props?.active\n    }\n  )\n\n  watch(\n    () => props?.modelValue,\n    () => {\n      // console.log(\"useActive v-model =\", props?.modelValue)\n      show.value = props?.modelValue\n    }\n  )\n\n  return show\n}\n","import { onBeforeUnmount, onMounted } from \"vue\"\n\ninterface KeyListener {\n  key: string\n  ignoreInput: boolean\n  handler: Function\n}\n\nlet listeners: KeyListener[] = []\n\nlet handler = (ev: KeyboardEvent) => {\n  for (let { key, ignoreInput, handler } of listeners) {\n    // @ts-ignore\n    let tagName = ev.target.tagName\n    if (ignoreInput && [\"INPUT\", \"TEXTAREA\"].includes(tagName)) {\n      continue\n    }\n    // console.log(\"key match\", key)\n    if (ev.key === key) {\n      handler(ev)\n      ev.preventDefault()\n      ev.stopPropagation()\n    }\n  }\n}\n\nfunction addListener(listener: KeyListener) {\n  if (listeners.length <= 0) {\n    window.addEventListener(\"keydown\", handler)\n  }\n  listeners.push(listener)\n}\n\nfunction removeListener(listener: KeyListener) {\n  let index = listeners.indexOf(listener)\n  if (index >= 0) {\n    listeners.splice(index, 1)\n  }\n  if (listeners.length <= 0) {\n    window.removeEventListener(\"keydown\", handler)\n  }\n}\n\n/**\n * Also consider https://vueuse.org/core/usemagickeys/#usemagickeys\n */\nexport function useKey(\n  key: string,\n  fn: () => void,\n  opt: { ignoreInputElements: boolean } = { ignoreInputElements: true }\n) {\n  const handler: KeyListener = {\n    key,\n    ignoreInput: opt?.ignoreInputElements === true,\n    handler: fn,\n  }\n\n  onMounted(() => {\n    addListener(handler)\n  })\n  onBeforeUnmount(() => {\n    removeListener(handler)\n  })\n}\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <transition\n    name=\"tw-modal-animation\"\n    @before-enter=\"$emit('willOpen')\"\n    @after-enter=\"didOpen\"\n    @before-leave=\"$emit('willClose')\"\n    @after-leave=\"$emit('didClose')\"\n    appear\n  >\n    <div\n      class=\"tw-modal\"\n      :class=\"{ active: open }\"\n      v-if=\"open\"\n      :tabindex=\"-1\"\n      v-trap-focus\n      aria-modal=\"true\"\n      :role=\"role\"\n      ref=\"root\"\n      :data-test-modal=\"title || '1'\"\n    >\n      <a\n        @click=\"doCancel\"\n        class=\"tw-modal-overlay overlay\"\n        aria-label=\"Close\"\n      ></a>\n      <div class=\"tw-modal-container\">\n        <header class=\"tw-modal-header header\" v-if=\"title || close\">\n          <div class=\"tw-modal-title title\">\n            <slot name=\"title\">{{ title }}</slot>\n          </div>\n          <tw-button\n            v-if=\"close\"\n            tooltip=\"Close\"\n            @click=\"doCancel\"\n            class=\"tw-modal-close\"\n          >\n            <slot name=\"close\">\n              <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"24\"\n                height=\"24\"\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                stroke-width=\"2\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              >\n                <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n                <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n              </svg>\n            </slot>\n          </tw-button>\n        </header>\n        <section class=\"tw-modal-body body\">\n          <slot></slot>\n        </section>\n        <footer class=\"tw-modal-footer footer\">\n          <slot name=\"footer\"></slot>\n        </footer>\n      </div>\n    </div>\n  </transition>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref } from \"vue\"\nimport trapFocus from \"./lib/directives/trapFocus\"\nimport TwButton from \"./tw-button.vue\"\nimport { useActive } from \"./use/active\"\nimport { useKey } from \"./use/key\"\n\nexport default defineComponent({\n  components: {\n    TwButton,\n  },\n  props: {\n    modelValue: {\n      type: Boolean,\n      default: false,\n    },\n    active: {\n      type: Boolean,\n      default: false,\n    },\n    title: {\n      type: String,\n      default: \"\",\n    },\n    close: {\n      type: Boolean,\n      default: true,\n    },\n    role: {\n      default: \"dialog\",\n    },\n    canCancel: {\n      type: Boolean,\n      default: true,\n    },\n    onCancel: {\n      type: Function,\n      default: () => {\n        // log(\"onCancel not defined\")\n      },\n    },\n  },\n  directives: {\n    trapFocus,\n  },\n\n  // https://v3.vuejs.org/guide/transitions-enterleave.html#javascript-hooks\n  emits: [\n    \"close\",\n    \"update:modelValue\",\n    \"didOpen\",\n    \"willOpen\",\n    \"willClose\",\n    \"didClose\",\n    \"cancel\",\n  ],\n\n  setup(props, { emit }) {\n    // console.log(\"setup\")\n\n    let root = ref()\n    let open = useActive(props)\n\n    const methods = {\n      doCancel() {\n        emit(\"cancel\")\n        methods.doClose()\n      },\n      doClose() {\n        emit(\"close\", false)\n        emit(\"update:modelValue\", false)\n        open.value = false\n      },\n      didOpen() {\n        root.value?.querySelector(\".focus\")?.focus()\n        emit(\"didOpen\")\n      },\n    }\n\n    useKey(\"Escape\", methods.doCancel, { ignoreInputElements: false })\n\n    return {\n      ...methods,\n      root,\n      open,\n    }\n  },\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <div class=\"tw-items\" ref=\"$container\">\n    <div\n      v-for=\"(item, index) in items\"\n      :key=\"item.id\"\n      :data-id=\"item.id\"\n      :data-index=\"index\"\n      @mousedown=\"doAction(item)\"\n      @keydown.enter=\"doAction(item)\"\n      class=\"tw-items-item\"\n      :class=\"{ '-selected': selected === index || selected === item.id }\"\n    >\n      <slot :item=\"item\" :index=\"index\"> {{ index }}. {{ item }} </slot>\n    </div>\n    <slot name=\"empty\" v-if=\"items.length <= 0\">Empty</slot>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType } from \"vue\"\nimport { TwindyMenuItem } from \"./types\"\n\nexport default defineComponent({\n  props: {\n    items: {\n      type: Array as PropType<TwindyMenuItem[] | any[]>,\n      default: () => [],\n    },\n    selected: {\n      type: [String, Number],\n      default: 0,\n    },\n  },\n  emits: [\"selected\"],\n  setup(props, { emit }) {\n    let methods = {\n      doAction(item: any) {\n        // console.log(\"item selected\", item)\n        emit(\"selected\", item)\n      },\n    }\n    return {\n      ...methods,\n    }\n  },\n  // watch(() => props.selected, selected => {\n  //   const divItem = state.$container.querySelector(`[data-id=\"${state.selected}\"],[data-index=\"${state.selected}\"]`)\n  //   if (divItem) {\n  //     divItem.scrollIntoView({\n  //       behavior: 'smooth',\n  //       block: 'nearest',\n  //       inline: 'nearest'\n  //     })\n  //   }\n  // })\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <div\n    class=\"tw-list\"\n    @scroll=\"onScroll\"\n    :class=\"{ '-scrollable': scrollable }\"\n  >\n    <slot></slot>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from \"vue\"\n\nexport default defineComponent({\n  props: {\n    distance: {\n      type: Number,\n      default: 50,\n    },\n    scrollable: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  data() {\n    return {\n      count: 0,\n      loading: false,\n    }\n  },\n  mounted() {\n    this.doMore()\n  },\n  methods: {\n    doMore() {\n      this.$emit(\"load\", {\n        start: 0,\n        end: this.distance,\n      })\n    },\n    onScroll(ev: any) {\n      const scrollY = ev.target.scrollTop\n      const visible = ev.target.clientHeight\n      const bufferHeight = /* this.getFillHeight */ +visible * 0.75 // px before scroll end\n      const pageHeight = ev.target.scrollHeight - bufferHeight\n      const bottomOfPage = visible + scrollY >= pageHeight\n      if (bottomOfPage) {\n        this.doMore()\n      }\n    },\n  },\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <teleport to=\"body\">\n    <div\n      :data-transition=\"transition\"\n      class=\"tw-popover\"\n      :class=\"`-${theme}`\"\n      ref=\"popover\"\n      :id=\"id\"\n      v-show=\"open && target\"\n      :aria-hidden=\"!(open && target)\"\n      draggable=\"false\"\n    >\n      <div\n        v-show=\"arrow\"\n        id=\"arrow\"\n        class=\"tw-popover-arrow\"\n        :class=\"`-${theme}-arrow`\"\n        data-popper-arrow\n      ></div>\n      <div class=\"tw-popover-inner\" :class=\"`-${theme}-inner`\">\n        {{ text }}\n        <slot />\n      </div>\n    </div>\n  </teleport>\n</template>\n\n<script lang=\"ts\">\nimport { createPopper } from \"@popperjs/core\"\nimport type { StrictModifiers } from \"@popperjs/core\"\nimport { useEventListener } from \"@vueuse/core\"\nimport {\n  defineComponent,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  watch,\n  onUpdated,\n  PropType,\n} from \"vue\"\nimport { useActive } from \"./use/active\"\nimport { uname } from \"zeed\"\n\n// if (document.getElementById(\"__popoverContainer\") == null) {\n//   var popoverContainer = document.createElement(\"div\")\n//   popoverContainer.id = \"__popoverContainer\"\n//   popoverContainer.setAttribute(\n//     \"style\",\n//     \"position: absolute; top: 0; left: 0; width: 1px; height: 1px; overflow: hidden\"\n//   )\n//   document.body.appendChild(popoverContainer)\n// }\n\ninterface Box {\n  left: number\n  top: number\n  bottom: number\n  right: number\n}\n\nclass RefObj {\n  box: Box\n\n  constructor(box: Box) {\n    this.box = box\n  }\n\n  getBoundingClientRect() {\n    return this.box\n  }\n\n  get clientWidth() {\n    return Math.abs(this.box.right - this.box.left)\n  }\n\n  get clientHeight() {\n    return Math.abs(this.box.bottom - this.box.top)\n  }\n}\n\nexport default defineComponent({\n  props: {\n    modelValue: {\n      type: Boolean,\n      default: false,\n    },\n    active: {\n      type: Boolean,\n      default: false,\n    },\n    target: {\n      type: [Object, Boolean] as PropType<HTMLElement | false>,\n      default: false,\n    },\n    transition: {\n      type: String,\n      default: \"tw-popover-fade\",\n    },\n    arrow: {\n      type: Boolean,\n      default: true,\n    },\n    placement: {\n      default: \"top\",\n    },\n    theme: {\n      default: \"dropdown\",\n    },\n    text: {\n      default: \"\",\n    },\n    offset: {\n      default: () => [0, 8],\n    },\n  },\n  emits: [\"update:modelValue\"],\n  setup(props: any, { emit }) {\n    let popper: any, element\n    let popover = ref<HTMLElement>()\n    let id = ref(uname(\"tw-popover\"))\n    let open = useActive(props)\n\n    async function show() {\n      // console.log(\"tw-popover show\")\n      let target = <Node | Box>props.target\n      if (target != null) {\n        hide()\n        await nextTick()\n        element = popover.value\n        if (element) {\n          let popperTarget: Node | RefObj\n          if (target instanceof Node) {\n            popperTarget = target\n          } else {\n            popperTarget = new RefObj(target)\n          }\n\n          // https://popper.js.org/docs/v2/tutorial/\n          // @ts-ignore\n          popper = createPopper<StrictModifiers>(popperTarget, element, {\n            // https://popper.js.org/popper-documentation.html#defaults\n            placement: props.placement,\n            modifiers: [\n              {\n                name: \"offset\",\n                options: {\n                  offset: props.offset,\n                },\n              },\n              {\n                name: \"preventOverflow\",\n                options: {\n                  // escapeWithReference: true,\n                  boundariesElement: \"window\",\n                  padding: 8,\n                },\n              },\n            ],\n          })\n        }\n      }\n    }\n\n    function hide() {\n      // console.log(\"tw-popover hide\")\n      if (popper != null) {\n        popper.destroy()\n        popper = null\n      }\n    }\n\n    useEventListener(window, \"mousedown\", (event) => {\n      if (\n        open.value === true &&\n        !(\n          props?.target?.contains(event.target) ||\n          popper?.value?.contains(event.target)\n        )\n      ) {\n        emit(\"update:modelValue\", false)\n      }\n    })\n\n    function checkActive() {\n      // console.log(\n      //   \"open\",\n      //   props.active,\n      //   props.modelValue,\n      //   props.target,\n      //   open.value\n      // )\n      if (open.value && props.target) {\n        hide()\n        nextTick()\n        show()\n      } else {\n        hide()\n      }\n    }\n\n    watch([() => open.value, () => props.target], checkActive)\n\n    onMounted(checkActive)\n    onUpdated(checkActive)\n    onBeforeUnmount(hide)\n\n    return {\n      id,\n      popover,\n      open,\n    }\n  },\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <div\n    class=\"tw-completion\"\n    ref=\"target\"\n    @click=\"input.focus()\"\n    :class=\"{ '-focus': focus }\"\n  >\n    <slot name=\"before\"></slot>\n    <input\n      xtype=\"text\"\n      ref=\"input\"\n      :id=\"uid\"\n      v-model=\"filterText\"\n      autocomplete=\"off\"\n      :placeholder=\"placeholder\"\n      @focus=\"focus = true\"\n      @blur=\"focus = false\"\n      @input=\"doInput\"\n      @keydown.down.prevent=\"doMove(+1)\"\n      @keydown.up.prevent=\"doMove(-1)\"\n      @keydown.enter=\"doAddSelection\"\n      @keydown.esc=\"doClear\"\n      @keydown.backspace=\"doDeleteLast\"\n      class=\"tw-completion-input\"\n    />\n    <div class=\"tw-completion-after\">\n      <slot name=\"after\" class=\"completion-after\"></slot>\n    </div>\n    <tw-popover\n      :active=\"active\"\n      :target=\"target\"\n      placement=\"bottom-start\"\n      :arrow=\"false\"\n      theme=\"dropdown\"\n      :offset=\"[0, 2]\"\n    >\n      <tw-items\n        :items=\"items\"\n        :selected=\"selected\"\n        #default=\"{ item }\"\n        @selected=\"doAddItem\"\n      >\n        <slot name=\"item\" v-bind:item=\"item\">\n          {{ item }}\n        </slot>\n      </tw-items>\n      <slot></slot>\n    </tw-popover>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport twPopover from \"./tw-popover.vue\"\nimport twItems from \"./tw-items.vue\"\nimport { defineComponent, ref, reactive, toRefs, watch, computed } from \"vue\"\nimport { uname } from \"zeed\"\n\nexport default defineComponent({\n  components: {\n    twItems,\n    twPopover,\n  },\n  props: {\n    uid: {\n      type: String,\n      default: uname(\"tw-completion\"),\n    },\n    items: {\n      type: Array,\n      default: [],\n    },\n    placeholder: {\n      type: String,\n      default: \"\",\n    },\n    minSize: {\n      type: [Number, String],\n      default: 32,\n    },\n    filter: {\n      type: String,\n      default: \"\",\n    },\n  },\n\n  emits: [\"filter\", \"deleteLast\", \"add\", \"update:filter\"],\n  setup(props, { emit }) {\n    let target = ref()\n    let input = ref()\n    let filterText = ref(\"\")\n\n    // mounted(() => {\n    //   console.log(\"mounted\")\n    //   // input?.value?.style?.width = `${props.minSize}px`\n    // })\n\n    let data = reactive({\n      selected: 0,\n      itemCandidate: null,\n      focus: false,\n    })\n\n    let active = computed(() => Boolean(props.items.length && data.focus))\n\n    let methods = {\n      resizeInput() {\n        const el = input.value\n        let value = el.value.trim()\n        el.style.width = \"1px\"\n        el.style.width =\n          Math.max(+props.minSize, value ? el.scrollWidth : 0) + \"px\"\n      },\n      doInput() {\n        methods.resizeInput()\n      },\n      doClear() {\n        filterText.value = \"\"\n        emit(\"filter\", \"\")\n      },\n      doMove(delta: number) {\n        data.selected = Math.max(\n          0,\n          Math.min(props.items.length - 1, data.selected + delta)\n        )\n      },\n      doAddItem(item: any) {\n        // console.log(\"add item\", item.title, filterText.value)\n        emit(\"add\", item)\n        methods.doClear()\n      },\n      doAddSelection() {\n        const item = props.items[data.selected]\n        methods.doAddItem(item)\n      },\n      doDeleteLast(ev: Event) {\n        if (!filterText.value) {\n          ev.preventDefault()\n          emit(\"deleteLast\")\n        }\n      },\n    }\n\n    filterText.value = props.filter\n\n    watch(filterText, () => {\n      emit(\"filter\", filterText.value)\n    })\n\n    return {\n      ...methods,\n      ...toRefs(data),\n      filterText,\n      target,\n      input,\n      active,\n    }\n  },\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <tw-completion\n    :items=\"candidates\"\n    @add=\"handleSelection\"\n    @deleteLast=\"handleDeleteLast\"\n    @filter=\"handleFilter\"\n    class=\"tw-tag-input\"\n    placeholder=\"Add Tag\"\n    min-size=\"120\"\n  >\n    <template #before>\n      <template v-for=\"t in tags\" :key=\"t?.id\">\n        <span class=\"tw-tag-field\" v-if=\"t?.id\">\n          {{ t?.title }}\n          <span @click.prevent=\"doRemoveTag(t?.id)\" class=\"tw-tag-remove\">\n            <svg\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\"\n              class=\"feather feather-x\"\n            >\n              <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n              <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n            </svg>\n          </span>\n        </span>\n      </template>\n    </template>\n    <template #item=\"{ item }\">\n      <span v-if=\"item.action\" class=\"tw-tag-item-create\">\n        Create new tag <b>{{ item.value }}</b>\n      </span>\n      <span v-else class=\"tw-tag-item\">\n        {{ item.title }}\n      </span>\n    </template>\n  </tw-completion>\n</template>\n\n<script lang=\"ts\">\nimport twCompletion from \"./tw-completion.vue\"\nimport { defineComponent, ref, computed, PropType } from \"vue\"\n\nexport function arrayRemoveElement(arr: any[], el: any) {\n  if (arr && Array.isArray(arr)) {\n    let index: number\n    while ((index = arr.indexOf(el)) !== -1) {\n      arr.splice(index, 1)\n    }\n    return arr\n  }\n  return []\n}\n\ninterface Tag {\n  id: string\n  title: string\n}\n\nexport default defineComponent({\n  components: {\n    twCompletion,\n  },\n  props: {\n    modelValue: {\n      type: Array as PropType<Tag[]>,\n    },\n    allTags: {\n      type: Object as PropType<{ [key: string]: Tag }>,\n    },\n  },\n  emits: [\"update:modelValue\", \"create\"],\n  setup(props: any, { emit }) {\n    let filter = ref(\"\")\n\n    let tags = computed(() => {\n      // console.log(\"calc tags\")\n      return (props.modelValue || []).map((tagID: string) => {\n        return props.allTags[tagID]\n      })\n    })\n\n    let candidates = ref<Tag[]>(Object.values(props.allTags))\n    let methods = {\n      setTags(tags: string[] = []) {\n        emit(\"update:modelValue\", [...tags])\n      },\n      doRemoveTag(id: string) {\n        methods.setTags(arrayRemoveElement(props.modelValue, id))\n      },\n      async handleSelection(item: any) {\n        // console.log(\"add item\", item)\n        if (item.action) {\n          let title = item.value.toString().trim()\n          if (title) {\n            // console.log(\"add item title\", title)\n            emit(\"create\", title)\n          }\n        } else if (item.id) {\n          methods.setTags([...props.modelValue, item.id])\n          // } else {\n          //   console.log(\"unknown item\", item)\n        }\n      },\n      handleFilter(filter: string) {\n        let value = filter.trim()\n        // console.log(\"calc candidates\", value)\n        let lvalue = value.toLowerCase()\n        let exactMatch = false\n        let currentTags = props.modelValue || []\n        // @ts-ignore\n        let items: Tags[] = Object.values(props.allTags).filter((item: Tag) => {\n          if (!currentTags.includes(item.id)) {\n            if (value) {\n              const title = item.title.toString().toLowerCase()\n              if (item.title === lvalue) {\n                exactMatch = true\n              }\n              return title.indexOf(lvalue) >= 0\n            }\n            return true\n          }\n          return false\n        })\n        if (value && !exactMatch) {\n          items.push({ action: \"create\", value })\n        }\n        candidates.value = items\n      },\n      handleDeleteLast() {\n        // console.log(\"delete last\")\n        // TODO:2020-06-16 Mark before deletion\n        let tags = props.modelValue\n        if (tags.pop()) {\n          methods.setTags(tags)\n        }\n      },\n    }\n\n    return {\n      ...methods,\n      candidates,\n      tags,\n      filter,\n    }\n  },\n})\n</script>\n","<template>\n  <input type=\"text\" :placeholder=\"placeholder\" ref=\"input\" />\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onBeforeUnmount, onMounted, ref } from \"vue\"\nimport { onStartTyping } from \"@vueuse/core\"\n\nexport default defineComponent({\n  props: {\n    resize: {\n      type: Boolean,\n      default: false,\n    },\n    typing: {\n      type: Boolean,\n      default: false,\n    },\n    minSize: {\n      type: [Number, String],\n      default: 32,\n    },\n    placeholder: {\n      type: String,\n      default: \"\",\n    },\n  },\n  setup(props) {\n    let input = ref()\n\n    let placeholderWidth = 0\n\n    if (props.typing) {\n      onStartTyping(() => {\n        if (!input?.value?.active) {\n          input.value.focus()\n        }\n      })\n    }\n\n    if (props.resize) {\n      let resizeInput = () => {\n        const el = input.value\n        let value = el.value\n        el.style.width = \"1px\"\n        if (value === \"\" && placeholderWidth) {\n          el.style.width = Math.max(+props.minSize, placeholderWidth) + \"px\"\n        } else {\n          el.style.width =\n            Math.max(+props.minSize, value ? el.scrollWidth : 0) + \"px\"\n        }\n      }\n      onMounted(() => {\n        let el = input.value\n        el.addEventListener(\"input\", resizeInput)\n        // console.log(props.placeholder)\n        if (el.value === \"\" && props.placeholder?.length > 0) {\n          el.style.width = \"1px\"\n          el.value = props.placeholder\n          placeholderWidth = el.scrollWidth\n          // console.log(placeholderWidth)\n          el.value = \"\"\n        }\n        resizeInput()\n      })\n      onBeforeUnmount(() => {\n        input.value?.removeEventListener(\"input\", resizeInput)\n      })\n    }\n    return {\n      input,\n    }\n  },\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <div\n    ref=\"target\"\n    style=\"display: inline-block\"\n    @click.stop=\"active = !active\"\n  >\n    <slot class=\"tw-dropdown\"></slot>\n  </div>\n  <tw-popover\n    :arrow=\"false\"\n    v-model=\"active\"\n    :target=\"target\"\n    theme=\"dropdown\"\n    transition=\"tw-tooltip-transition\"\n    :offset=\"() => [0, 4]\"\n    placement=\"bottom-start\"\n    ><div><slot name=\"content\">Define #content</slot></div></tw-popover\n  >\n</template>\n\n<script lang=\"ts\">\nimport { ref, defineComponent } from \"vue\"\nimport twPopover from \"./tw-popover.vue\"\n\nexport default defineComponent({\n  components: {\n    twPopover,\n  },\n  props: {\n    title: {\n      type: String,\n      default: \"Hello\",\n    },\n  },\n\n  // computed: {\n  //   slottedTitle() {\n  //     return this.title || this.$slots?.content?.[0] != null\n  //   }\n  // },\n\n  setup() {\n    let active = ref<boolean>(false)\n    let target = ref<HTMLElement>()\n\n    return {\n      target,\n      active,\n    }\n  },\n})\n</script>\n","<template>\n  <div class=\"tw-notification-container\">\n    <transition-group name=\"tw-notification\" tag=\"div\">\n      <div class=\"tw-notification\" v-for=\"n in notifications\" :key=\"n.id\">\n        <div class=\"tw-notification-header\">\n          <div class=\"tw-notification-title\">{{ n.title }}</div>\n          <div class=\"tw-notification-close\">\n            <slot name=\"close\">\n              <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"24\"\n                height=\"24\"\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                stroke-width=\"2\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              >\n                <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n                <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n              </svg>\n            </slot>\n          </div>\n        </div>\n        <div class=\"tw-notification-message\">{{ n.message }}</div>\n      </div>\n    </transition-group>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from \"vue\"\nimport { notifications } from \"./state\"\n\nexport default defineComponent({\n  setup() {\n    return {\n      notifications,\n    }\n  },\n})\n</script>\n","export function cloneObject<T>(obj: T): T | undefined {\n  try {\n    if (typeof obj === \"object\") {\n      return JSON.parse(JSON.stringify(obj))\n    }\n    return obj\n  } catch (err) {\n    console.error(\"cloneObject error:\", err)\n  }\n  return undefined\n}\n","<template>\n  <div class=\"tw-object\">\n    <div v-if=\"isNull\" class=\"-null\">null</div>\n    <div v-else-if=\"isNumber\" class=\"-number\">\n      {{ value }}\n    </div>\n    <div v-else-if=\"isString\" class=\"-string\">\"{{ value }}\"</div>\n    <div v-else-if=\"isTrue\" class=\"-true\">true</div>\n    <div v-else-if=\"isFalse\" class=\"-false\">false</div>\n    <div v-else-if=\"isDate\" class=\"-date\">\n      {{ value }}\n    </div>\n    <div v-else-if=\"isArray\">\n      <div>[</div>\n      <tw-object v-for=\"(v, i) in obj\" :value=\"v\" :key=\"i\">\n        <div v-if=\"i !== obj.length - 1\" class=\"-comma\">\n          {{ \", \" }}\n        </div>\n      </tw-object>\n      <div>]</div>\n    </div>\n    <table v-else-if=\"isObject\">\n      <tr v-for=\"[k, v] of entries\" :key=\"k\">\n        <th>\n          <div class=\"-title\">{{ k }}</div>\n        </th>\n        <td>\n          <tw-object :value=\"v\"></tw-object>\n        </td>\n      </tr>\n    </table>\n    <div v-else>{{ String(value) }}</div>\n    <slot></slot>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { cloneObject } from \"./lib/clone\"\nimport { defineComponent, PropType } from \"vue\"\n\nexport default defineComponent({\n  props: {\n    value: {\n      type: Object as PropType<any>,\n      default: null,\n    },\n  },\n  computed: {\n    obj(): any {\n      return cloneObject(this.value)\n    },\n    entries() {\n      if (this.isObject) {\n        let entries = Object.entries(this.obj)\n        entries.sort()\n        return entries\n      }\n      return []\n    },\n    isArray(): boolean {\n      return Array.isArray(this.obj)\n    },\n    isObject(): boolean {\n      return !Array.isArray(this.obj) && typeof this.obj === \"object\"\n    },\n    isNull(): boolean {\n      return this.value == null\n    },\n    isTrue(): boolean {\n      return this.value === true\n    },\n    isFalse(): boolean {\n      return this.value === false\n    },\n    isDate(): boolean {\n      return this.obj instanceof Date\n    },\n    isNumber(): boolean {\n      return typeof this.value === \"number\"\n    },\n    isString(): boolean {\n      return typeof this.value === \"string\"\n    },\n  },\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <div class=\"form-group\">\n    <label :for=\"id\" class=\"form-label\" v-if=\"label\">\n      {{ label }}\n    </label>\n    <div class=\"form-body\">\n      <slot v-bind=\"{ id }\"></slot>\n    </div>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from \"vue\"\nimport { uname } from \"zeed\"\n\nexport default defineComponent({\n  props: {\n    label: {\n      type: String,\n      default: null,\n    },\n  },\n  setup() {\n    return {\n      id: uname(\"tw-label\"),\n    }\n  },\n})\n</script>\n","<!-- Copyright (c) 2020 Dirk Holtwick. All rights reserved. https://holtwick.de/copyright -->\n\n<template>\n  <tw-popover :target=\"target\">\n    <div class=\"tw-menu\">\n      <template v-for=\"item in items\">\n        <a\n          class=\"-item\"\n          v-if=\"item.title\"\n          @click.prevent.stop=\"doAction(item)\"\n          @contextmenu.prevent.stop=\"doAction(item)\"\n          :data-test-menu=\"item.title\"\n        >\n          {{ item.title }}\n        </a>\n        <hr class=\"-separator\" v-else />\n      </template>\n    </div>\n  </tw-popover>\n</template>\n\n<script lang=\"ts\">\nimport { PropType, defineComponent } from \"vue\"\nimport { TwindyMenuItem } from \"./types\"\n\nexport default defineComponent({\n  props: {\n    items: {\n      type: Array as PropType<TwindyMenuItem[]>,\n      default: () => [],\n    },\n    target: {\n      type: Object as PropType<HTMLElement>,\n    },\n  },\n  data() {\n    return {\n      blocked: false,\n    }\n  },\n  methods: {\n    async doAction(item: TwindyMenuItem) {\n      if (item && item.action) {\n        item.action(item)\n      }\n    },\n  },\n})\n</script>\n","export const objectToString = (...args) =>\n  Object.prototype.toString.call(...args).slice(8, -1)\n","<template>\n  <span class=\"null\">\n    <span class=\"key\">{{ name }}</span>\n    <span v-if=\"name !== ''\" class=\"separator\">:&nbsp;</span>\n    <span class=\"value\">null</span>\n  </span>\n</template>\n\n<script>\nimport { objectToString } from \"./util\"\n\nexport default {\n  props: {\n    data: {\n      required: true,\n      validator(data) {\n        return objectToString(data) === \"Null\"\n      },\n    },\n    name: {\n      required: true,\n      type: String,\n    },\n  },\n}\n</script>\n","<template>\n  <span class=\"null\">\n    <span class=\"key\">{{ name }}</span>\n    <span v-if=\"name !== ''\" class=\"separator\">:&nbsp;</span>\n    <span class=\"value\">undefined</span>\n  </span>\n</template>\n\n<script>\nimport { objectToString } from \"./util\"\n\nexport default {\n  props: {\n    data: {\n      required: true,\n      validator(data) {\n        return objectToString(data) === \"Undefined\"\n      },\n    },\n    name: {\n      required: true,\n      type: String,\n    },\n  },\n}\n</script>\n","<template>\n  <span class=\"boolean\">\n    <span class=\"key\">{{ name }}</span>\n    <span v-if=\"name !== ''\" class=\"separator\">:&nbsp;</span>\n    <span class=\"value\">{{ data }}</span>\n  </span>\n</template>\n\n<script>\nimport { objectToString } from \"./util\"\n\nexport default {\n  props: {\n    data: {\n      required: true,\n      validator(data) {\n        return objectToString(data) === \"Boolean\"\n      },\n    },\n    name: {\n      required: true,\n      type: String,\n    },\n  },\n}\n</script>\n","<template>\n  <span class=\"number\">\n    <span class=\"key\">{{ name }}</span>\n    <span v-if=\"name !== ''\" class=\"separator\">:&nbsp;</span>\n    <span class=\"value\">{{ data }}</span>\n  </span>\n</template>\n\n<script>\nimport { objectToString } from \"./util\"\n\nexport default {\n  props: {\n    data: {\n      required: true,\n      validator(data) {\n        return objectToString(data) === \"Number\"\n      },\n    },\n    name: {\n      required: true,\n      type: String,\n    },\n  },\n}\n</script>\n","<template>\n  <span class=\"string\">\n    <span class=\"key\">{{ name }}</span>\n    <span v-if=\"name !== ''\" class=\"separator\">:&nbsp;</span>\n    <span class=\"quotes\">\"</span>\n    <span class=\"value\">{{ data }}</span>\n    <span class=\"quotes\">\"</span>\n  </span>\n</template>\n\n<script>\nimport { objectToString } from \"./util\"\n\nexport default {\n  props: {\n    data: {\n      required: true,\n      validator(data) {\n        return objectToString(data) === \"String\"\n      },\n    },\n    name: {\n      required: true,\n      type: String,\n    },\n  },\n}\n</script>\n","import { ref, watch } from \"vue\"\n\nexport const cache = new Set()\n\nexport function useExpand(props = { collapseSignal, expandSignal }) {\n  const isExpanding = ref(false)\n  const toggle = () => {\n    isExpanding.value = !isExpanding.value\n  }\n\n  const innerCollapseSignal = ref(false)\n  const collapse = () => {\n    isExpanding.value = false\n    innerCollapseSignal.value = !innerCollapseSignal.value\n  }\n  watch(() => props.collapseSignal, collapse)\n\n  const innerExpandSignal = ref(false)\n  const expand = () => {\n    isExpanding.value = true\n    innerExpandSignal.value = !innerExpandSignal.value\n  }\n  watch(() => props.expandSignal, expand)\n\n  const handleClick = (ev) => {\n    cache.clear()\n\n    if (ev.metaKey === true && ev.shiftKey === true) {\n      collapse(ev)\n    } else if (ev.metaKey === true) {\n      expand(ev)\n    } else {\n      toggle(ev)\n    }\n  }\n\n  watch(\n    () => props.data,\n    () => {\n      const shouldExpand = props.expandOnCreatedAndUpdated(props.path)\n      if (shouldExpand) {\n        expand()\n      } else {\n        collapse()\n      }\n    },\n    { immediate: true }\n  )\n\n  return {\n    isExpanding,\n    innerCollapseSignal,\n    innerExpandSignal,\n    handleClick,\n  }\n}\n","<template>\n  <span class=\"array\">\n    <span class=\"indicator\" @click=\"handleClick\" v-if=\"data.length > 0\">{{\n      isExpanding ? \"\\u25BC\" : \"\\u25B6\"\n    }}</span>\n    <span class=\"key\" @click=\"handleClick\">{{ name === \"\" ? \"\" : name }}</span>\n    <span class=\"separator\" @click=\"handleClick\">{{\n      name === \"\" ? \"\" : \": \"\n    }}</span>\n    <span class=\"count\" @click=\"handleClick\">\n      {{ !isExpanding ? `Array(${data.length})` : \"\" }}\n    </span>\n    <span class=\"preview\" @click=\"handleClick\"> </span>\n\n    <template v-if=\"isCircular\">\n      <span v-if=\"isExpanding\" class=\"value\">\n        <template v-for=\"key of keys\" :key=\"key\">\n          <wrapper\n            :name=\"key\"\n            :path=\"path.concat(key)\"\n            :data=\"data[key]\"\n            :expand-signal=\"innerExpandSignal\"\n            :collapse-signal=\"innerCollapseSignal\"\n            :expandOnCreatedAndUpdated=\"() => false\"\n            :getKeys=\"getKeys\"\n          ></wrapper>\n        </template>\n      </span>\n    </template>\n\n    <template v-else>\n      <span v-if=\"isExpanding\" class=\"value\">\n        <template v-for=\"key of keys\" :key=\"key\">\n          <wrapper\n            :name=\"key\"\n            :path=\"path.concat(key)\"\n            :data=\"data[key]\"\n            :expand-signal=\"innerExpandSignal\"\n            :collapse-signal=\"innerCollapseSignal\"\n            :expandOnCreatedAndUpdated=\"expandOnCreatedAndUpdated\"\n            :getKeys=\"getKeys\"\n          ></wrapper>\n        </template>\n      </span>\n    </template>\n  </span>\n</template>\n\n<script>\nimport { computed } from \"vue\"\nimport { objectToString } from \"./util\"\nimport { useExpand, cache } from \"./hooks\"\n\nexport default {\n  name: \"array-wrapper\",\n  props: {\n    path: {\n      required: true,\n      validator(path) {\n        return (\n          objectToString(path) === \"Array\" &&\n          path.every(\n            (key) =>\n              objectToString(key) === \"String\" ||\n              objectToString(key) === \"Number\"\n          )\n        )\n      },\n    },\n    data: {\n      required: true,\n      validator(data) {\n        return objectToString(data) === \"Array\"\n      },\n    },\n    name: {\n      required: true,\n      type: String,\n    },\n    collapseSignal: {\n      default: false,\n      type: Boolean,\n    },\n    expandSignal: {\n      default: false,\n      type: Boolean,\n    },\n    expandOnCreatedAndUpdated: {\n      required: true,\n      type: Function,\n    },\n    getKeys: {\n      required: true,\n      type: Function,\n    },\n  },\n  setup(props) {\n    const { isExpanding, innerExpandSignal, innerCollapseSignal, handleClick } =\n      useExpand(props)\n\n    const keys = computed(() => {\n      return props.getKeys(props.data, props.path)\n    })\n\n    const isCircular = cache.has(props.data)\n    cache.add(props.data)\n\n    return {\n      keys,\n      isExpanding,\n      innerExpandSignal,\n      innerCollapseSignal,\n      handleClick,\n      isCircular,\n    }\n  },\n  components: {\n    // Wrapper,\n  },\n}\n</script>\n","<template>\n  <span class=\"object\">\n    <span class=\"indicator\" @click=\"handleClick\" v-if=\"keys.length > 0\">{{\n      isExpanding ? \"\\u25BC\" : \"\\u25B6\"\n    }}</span>\n\n    <span class=\"key\" @click=\"handleClick\">{{ name === \"\" ? \"\" : name }}</span>\n\n    <span class=\"separator\" @click=\"handleClick\">\n      {{ name === \"\" ? \"\" : \": \" }}\n    </span>\n\n    <span class=\"preview\" @click=\"handleClick\">\n      {{\n        isExpanding\n          ? \"\"\n          : keys.length > 0\n          ? \"{ \" + keys.join(\", \") + \" }\"\n          : \"{}\"\n      }}\n    </span>\n\n    <template v-if=\"isCircular\">\n      <span v-if=\"isExpanding\" class=\"value\">\n        <template v-for=\"key of keys\" :key=\"key\">\n          <wrapper\n            class=\"value\"\n            :name=\"key\"\n            :path=\"path.concat(key)\"\n            :data=\"data[key]\"\n            :expand-signal=\"innerExpandSignal\"\n            :collapse-signal=\"innerCollapseSignal\"\n            :expandOnCreatedAndUpdated=\"() => false\"\n            :getKeys=\"getKeys\"\n          ></wrapper>\n        </template>\n      </span>\n    </template>\n\n    <template v-else>\n      <span v-show=\"isExpanding\" class=\"value\">\n        <template v-for=\"key of keys\" :key=\"key\">\n          <wrapper\n            class=\"value\"\n            :name=\"key\"\n            :path=\"path.concat(key)\"\n            :data=\"data[key]\"\n            :expand-signal=\"innerExpandSignal\"\n            :collapse-signal=\"innerCollapseSignal\"\n            :expandOnCreatedAndUpdated=\"expandOnCreatedAndUpdated\"\n            :getKeys=\"getKeys\"\n          ></wrapper>\n        </template>\n      </span>\n    </template>\n  </span>\n</template>\n\n<script>\nimport { computed } from \"vue\"\nimport { objectToString } from \"./util\"\nimport { useExpand, cache } from \"./hooks\"\n\nexport default {\n  name: \"object-wrapper\",\n  props: {\n    path: {\n      required: true,\n      validator(path) {\n        return (\n          objectToString(path) === \"Array\" &&\n          path.every(\n            (key) =>\n              objectToString(key) === \"String\" ||\n              objectToString(key) === \"Number\"\n          )\n        )\n      },\n    },\n    data: {\n      required: true,\n      validator(data) {\n        return objectToString(data) === \"Object\"\n      },\n    },\n    name: {\n      required: true,\n      type: String,\n    },\n    collapseSignal: {\n      default: false,\n      type: Boolean,\n    },\n    expandSignal: {\n      default: false,\n      type: Boolean,\n    },\n    expandOnCreatedAndUpdated: {\n      required: true,\n      type: Function,\n    },\n    getKeys: {\n      required: true,\n      type: Function,\n    },\n  },\n  setup(props) {\n    const { isExpanding, innerExpandSignal, innerCollapseSignal, handleClick } =\n      useExpand(props)\n\n    const keys = computed(() => {\n      return props.getKeys(props.data, props.path)\n    })\n\n    const isCircular = cache.has(props.data)\n    cache.add(props.data)\n\n    return {\n      keys,\n      isExpanding,\n      innerExpandSignal,\n      innerCollapseSignal,\n      handleClick,\n      isCircular,\n    }\n  },\n  components: {\n    // Wrapper,\n  },\n}\n</script>\n","<template>\n  <div class=\"tw-debug\">\n    <null-wrapper\n      v-if=\"objectToString(data) === 'Null'\"\n      :name=\"name\"\n      :data=\"data\"\n    />\n\n    <undefined-wrapper\n      v-if=\"objectToString(data) === 'Undefined'\"\n      :name=\"name\"\n      :data=\"data\"\n    />\n\n    <boolean-wrapper\n      v-else-if=\"objectToString(data) === 'Boolean'\"\n      :name=\"name\"\n      :data=\"data\"\n    />\n\n    <number-wrapper\n      v-else-if=\"objectToString(data) === 'Number'\"\n      :name=\"name\"\n      :data=\"data\"\n    />\n\n    <string-wrapper\n      v-else-if=\"objectToString(data) === 'String'\"\n      :name=\"name\"\n      :data=\"data\"\n    />\n\n    <array-wrapper\n      v-else-if=\"objectToString(data) === 'Array'\"\n      :name=\"name\"\n      :path=\"path\"\n      :data=\"data\"\n      :collapse-signal=\"collapseSignal\"\n      :expand-signal=\"expandSignal\"\n      :expandOnCreatedAndUpdated=\"expandOnCreatedAndUpdated\"\n      :getKeys=\"getKeys\"\n    />\n\n    <object-wrapper\n      v-else-if=\"objectToString(data) === 'Object'\"\n      :name=\"name\"\n      :path=\"path\"\n      :data=\"data\"\n      :collapse-signal=\"collapseSignal\"\n      :expand-signal=\"expandSignal\"\n      :expandOnCreatedAndUpdated=\"expandOnCreatedAndUpdated\"\n      :getKeys=\"getKeys\"\n    />\n  </div>\n</template>\n\n<script lang=\"js\">\nimport \"./debug/index.css\"\n\nimport NullWrapper from \"./debug/NullWrapper.vue\"\nimport UndefinedWrapper from \"./debug/UndefinedWrapper.vue\"\nimport BooleanWrapper from \"./debug/BooleanWrapper.vue\"\nimport NumberWrapper from \"./debug/NumberWrapper.vue\"\nimport StringWrapper from \"./debug/StringWrapper.vue\"\nimport ArrayWrapper from \"./debug/ArrayWrapper.vue\"\nimport ObjectWrapper from \"./debug/ObjectWrapper.vue\"\nimport { objectToString } from \"./debug/util\"\n\nconst Wrapper = {\n  props: {\n    path: {\n      default: [],\n      validator(path) {\n        return (\n          objectToString(path) === \"Array\" &&\n          path.every(\n            (key) =>\n              objectToString(key) === \"String\" ||\n              objectToString(key) === \"Number\"\n          )\n        )\n      },\n    },\n    data: {\n      required: true,\n      // validator(data) {\n      //   let ok =\n      //     objectToString(data) === \"Null\" ||\n      //     objectToString(data) === \"Undefined\" ||\n      //     objectToString(data) === \"Boolean\" ||\n      //     objectToString(data) === \"Number\" ||\n      //     objectToString(data) === \"String\" ||\n      //     objectToString(data) === \"Array\" ||\n      //     objectToString(data) === \"Object\"\n      //   console.log(\">>>\", objectToString(data))\n      //   return ok\n      // },\n    },\n    name: {\n      type: String,\n      default: \"\",\n    },\n    collapseSignal: {\n      default: false,\n      type: Boolean,\n    },\n    expandSignal: {\n      default: false,\n      type: Boolean,\n    },\n    level: {\n      default: 1,\n      type: [Number, String],\n    },\n    getKeys: {\n      type: Function,\n      default: (object, path) => {\n        let keys = Object.keys(object)\n        keys.sort()\n        return keys\n      },\n    },\n  },\n  computed: {\n    expandOnCreatedAndUpdated() {\n      return (path) => path.length < Number(this.level)\n    },\n  },\n  setup() {\n    return {\n      objectToString,\n    }\n  },\n  components: {\n    NullWrapper,\n    UndefinedWrapper,\n    BooleanWrapper,\n    NumberWrapper,\n    StringWrapper,\n    ArrayWrapper,\n    ObjectWrapper,\n  },\n}\n\nArrayWrapper.components.Wrapper = Wrapper\nObjectWrapper.components.Wrapper = Wrapper\n\nexport default Wrapper\n</script>\n","import { createApp, Ref } from \"vue\"\nimport twMenu from \"./tw-menu.vue\"\nimport { TwindyMenuItem } from \"./types\"\n\nlet container: HTMLElement | undefined\n\nexport function useMenu(items: TwindyMenuItem[], ref?: Ref) {\n  if (container == null) {\n    let container = document.createElement(\"div\")\n    document.body.appendChild(container)\n    createApp(twMenu).mount(container)\n  }\n\n  return {\n    toggleMenu() {\n      // console.log(\"toggle menu\")\n    },\n  }\n}\n","import { uname } from \"zeed\"\nimport { notifications } from \"./state\"\nimport { TwindyNotification } from \"./types\"\n// import { createApp } from \"vue\"\n// import twNotification from \"./tw-notification.vue\"\n\nexport function closeNotification(id?: string) {\n  let index = notifications.value.findIndex((n) => n.id === id)\n  if (index >= 0) {\n    notifications.value.splice(index, 1)\n    // console.log(\"remove index\", index, id)\n  }\n}\n\n// let container = document.createElement(\"div\")\n// document.body.appendChild(container)\n// createApp(twNotification).mount(container)\n\nexport function emitNotification(n: TwindyNotification): TwindyNotification {\n  if (!n.id) n.id = uname(\"tw-notification\")\n  if (!n.active) n.active = true\n  if (n.timeout == null) n.timeout = 5 * 1000\n\n  if (n.timeout != null && n.timeout > 0) {\n    setTimeout(() => {\n      n.active = false\n      closeNotification(n.id)\n    }, n.timeout)\n  }\n\n  n.close = () => closeNotification(n.id)\n\n  notifications.value.unshift(n)\n  // console.log(\"add id\", n.id, notifications)\n\n  return n\n}\n\nexport function useNotification(\n  n: TwindyNotification = {\n    title: \"title is missing!\",\n  }\n) {\n  return (nn: TwindyNotification) => {\n    emitNotification(Object.assign({}, n, nn))\n  }\n}\n","<template>\n  <tw-popover\n    v-model=\"active\"\n    :target=\"target\"\n    arrow\n    theme=\"tooltip\"\n    :placement=\"placement\"\n  >\n    {{ text }}\n  </tw-popover>\n</template>\n\n<script lang=\"ts\">\nimport twPopover from \"./tw-popover.vue\"\nimport { defineComponent, ref, PropType } from \"vue\"\nimport { useEventListener } from \"@vueuse/core\"\nimport { Logger } from \"zeed\"\n\n// const log = Logger(\"tw:tooltip\")\n// log.active = false\n\nvar _activated = false\nvar ignore = false\n\nexport default defineComponent({\n  props: {\n    placement: {\n      default: \"top\",\n    },\n    active: Boolean,\n    target: Object as PropType<HTMLElement>,\n    text: String,\n  },\n  components: {\n    twPopover,\n  },\n  setup(props) {\n    if (_activated) {\n      console.error(\"tw-tooltip-trigger can only be activated once\")\n      return\n    }\n\n    _activated = true\n\n    let active = ref<boolean>(false)\n    let placement = ref(props.placement)\n    let target = ref<HTMLElement | null>(null)\n    let text = ref(\"\")\n    let debounceTimer: any = 0\n\n    let onTooltipHover = (ev: Event) => {\n      // log(\"onTooltipHover\", ignore, ev)\n      if (ignore) return\n\n      clearTimeout(debounceTimer)\n      let el: any = ev.target\n      debounceTimer = setTimeout(() => {\n        while (el != null && el?.tagName !== \"BODY\") {\n          // let title = el.title\n          // if (title) {\n          //   el.setAttribute(\"tooltip\", title)\n          // }\n          let tooltip = el.getAttribute(\"tooltip\")\n          if (tooltip && tooltip?.length > 0) {\n            // el.title = \"\"\n            target.value = el\n            text.value = tooltip?.toString()?.trim() || \"\"\n            placement.value =\n              el.getAttribute(\"tooltip-placement\") || props.placement\n            active.value = true\n            return\n          }\n          el = el.parentElement\n        }\n        active.value = false\n        target.value = null\n      }, /*props.delay || */ 50) // debounce\n    }\n\n    let onTouchDown = (ev: Event) => {\n      // log(\"onTouchDown\")\n      active.value = false\n      ignore = true\n    }\n\n    let onTouchUp = (ev: Event) => {\n      // log(\"onTouchUp\")\n      ignore = false\n    }\n\n    const useCapture = true\n\n    useEventListener(window, \"mouseover\", onTooltipHover, useCapture)\n\n    // These are for handling touch events. Since mouseover comes AFTER touch events\n    // we use `mouseup` to finish the touch exception. We cannot generally set\n    // ignore on first touch, because these days devices may have mixed input\n    useEventListener(window, \"touchstart\", onTouchDown, useCapture)\n    useEventListener(window, \"mouseup\", onTouchUp, useCapture)\n\n    // useEventListener(window, \"focus\", onTooltipHover, useCapture)\n\n    // log(\"did setup tooltips\")\n\n    return {\n      placement,\n      target,\n      text,\n      active,\n    }\n  },\n})\n</script>\n","import { createApp } from \"vue\"\nimport twTooltipTrigger from \"./tw-tooltip-trigger.vue\"\n\nif (typeof document !== \"undefined\") {\n  let container = document.createElement(\"div\")\n  document.body.appendChild(container)\n  createApp(twTooltipTrigger).mount(container)\n}\n\nexport function useTooltip() {\n  return {}\n}\n","import { onBeforeMount, onBeforeUnmount } from \"vue\"\n\n// deprecated: prefer useDocumentClass\n\nexport function useAppMode() {\n  let oldOverflow: string\n  let oldHeight: string\n\n  onBeforeMount(() => {\n    oldOverflow = document.body.style.overflow\n    oldHeight = document.body.style.height\n\n    // const appStyle = \"-webkit-overflow: hidden; overflow: hidden; height: 100%\"\n    // document.documentElement.setAttribute(\"style\", appStyle)\n    // document.body.setAttribute(\"style\", appStyle)\n    document.body.style.overflow = \"hidden\"\n    document.body.style.height = \"100%\"\n  })\n  onBeforeUnmount(() => {\n    document.body.style.overflow = oldOverflow\n    document.body.style.height = oldHeight\n  })\n}\n","export const names = {\n  darkMode: \"twindy-headless.darkMode\",\n}\n","import { useSessionStorage } from \"@vueuse/core\"\nimport { names } from \"../config\"\nimport { watch, Ref, ref } from \"vue\"\n\nlet darkMode = ref(false)\n\nif (typeof window !== \"undefined\") {\n  const query = \"(prefers-color-scheme: dark)\"\n  const mediaQuery = window.matchMedia(query)\n\n  if (\"addEventListener\" in mediaQuery) {\n    mediaQuery.addEventListener(\"change\", (event) => {\n      setDarkMode(event.matches)\n    })\n  }\n\n  darkMode = useSessionStorage(names.darkMode, mediaQuery.matches)\n\n  function setDarkMode(value: boolean) {\n    darkMode.value = !!value\n    applyTheme()\n  }\n\n  watch(darkMode, applyTheme)\n\n  function applyTheme() {\n    if (darkMode.value) {\n      document.documentElement.classList.add(\"dark\")\n      document.documentElement.classList.remove(\"light\")\n    } else {\n      document.documentElement.classList.add(\"light\")\n      document.documentElement.classList.remove(\"dark\")\n    }\n  }\n\n  applyTheme()\n}\n\nexport function useDarkMode(): Ref<boolean> {\n  return darkMode\n}\n","import { onBeforeMount, onBeforeUnmount } from \"vue\"\n\nexport function useDocumentClass(className: string) {\n  onBeforeMount(() => {\n    document.documentElement.classList.add(className)\n  })\n  onBeforeUnmount(() => {\n    document.documentElement.classList.remove(className)\n  })\n}\n","import { watch, Ref } from \"vue\"\n// import { supportsTouch } from \"../lib/helpers\"\n\nexport function useFocusDesktopInput(input: Ref<HTMLElement>) {\n  // if (!supportsTouch) {\n  //   watch(input, () => input?.value?.focus())\n  //   // input?.value?.focus()\n  // }\n}\n","export function useFontLoaded(fontName: string, action: Function) {\n  // @ts-ignore\n  if (document?.fonts) {\n    setTimeout(() => {\n      // @ts-ignore\n      document.fonts.load('16px \"' + fontName + '\"').then(() => {\n        // console.log(\"Font loaded\", fontName)\n        action()\n      })\n    }, 0)\n  }\n}\n","import { onBeforeUnmount, onMounted } from \"vue\"\n\nexport function useWindowResize(fn: () => void) {\n  onMounted(() => {\n    window.addEventListener(\"resize\", fn)\n  })\n  onBeforeUnmount(() => {\n    window.removeEventListener(\"resize\", fn)\n  })\n}\n","import { useEventListener } from \"@vueuse/core\"\nimport { onMounted, Ref } from \"vue\"\nimport { useFontLoaded } from \"./font-loaded\"\nimport { useWindowResize } from \"./window-resize\"\n\nexport function useResizeInput(\n  input: Ref<HTMLInputElement>,\n  props: { minSize?: number; placeholder?: string }\n) {\n  let { minSize = 32, placeholder = \"\" } = props\n\n  let resizeInput = () => {\n    // console.log(\"resize\")\n    const el = input.value\n    let value = el.value\n    el.style.width = \"1px\"\n    if (value === \"\") {\n      el.value = placeholder\n      el.style.width = Math.max(+minSize, el.scrollWidth) + \"px\"\n      el.value = \"\"\n    } else {\n      el.style.width = Math.max(+minSize, value ? el.scrollWidth : 0) + \"px\"\n    }\n    // el.style.maxWidth = \"80vw\"\n  }\n\n  useWindowResize(resizeInput)\n\n  // Some triggers\n  useEventListener(input, \"input\", resizeInput)\n  useEventListener(window, \"load\", resizeInput)\n  useFontLoaded(\"Inter\", resizeInput)\n\n  onMounted(() => {\n    resizeInput()\n  })\n\n  return {\n    resize: resizeInput,\n  }\n}\n","import { onBeforeUnmount, onMounted } from \"vue\"\nimport { TwindyEventEmitter, TwindyEventHandler } from \"../types\"\n\nexport function useOn(\n  emitter: TwindyEventEmitter,\n  eventName: string,\n  fn: TwindyEventHandler,\n  trigger = false\n) {\n  if (emitter == null) return\n\n  onMounted(() => {\n    if (trigger === true) {\n      fn(null)\n    }\n    if (emitter.on) {\n      emitter.on(eventName, fn)\n    } else if (emitter.addEventListener) {\n      emitter.addEventListener(eventName, fn)\n    }\n  })\n\n  onBeforeUnmount(() => {\n    if (emitter.off) {\n      emitter.off(eventName, fn)\n    } else if (emitter.removeEventListener) {\n      emitter.removeEventListener(eventName, fn)\n    }\n  })\n\n  return () => {\n    if (emitter.off) {\n      emitter.off(eventName, fn)\n    } else if (emitter.removeEventListener) {\n      emitter.removeEventListener(eventName, fn)\n    }\n  }\n}\n","import { useEventListener } from \"@vueuse/core\"\nimport { useWindowResize } from \"./window-resize\"\nimport { onMounted, Ref, ref } from \"vue\"\n\ninterface SeparatorState {\n  value: number\n  startValue: number\n  pageX: number\n  pageY: number\n  deltaX: number\n  deltaY: number\n}\nexport function useSeparator(\n  el: Ref<HTMLElement>,\n  value: Ref<number>,\n  opt: {\n    minValue?: number\n    maxValue?: number\n    calcFirstElementSize?: (info: SeparatorState) => number\n  } = {}\n) {\n  let dragging = ref(false)\n  let collapsed = ref(false)\n  let startX = 0\n  let startY = 0\n  let deltaX = ref(0)\n  let deltaY = ref(0)\n  let startValue = value.value ?? 0\n\n  const {\n    minValue = 0,\n    maxValue = Infinity,\n    calcFirstElementSize = (info) => {\n      return Math.max(\n        minValue,\n        Math.min(maxValue, info.startValue + info.deltaX)\n      )\n    },\n  } = opt\n\n  let lastSeparatorState: SeparatorState = {\n    startValue,\n    deltaX: deltaX.value,\n    deltaY: deltaY.value,\n    pageX: 0,\n    pageY: 0,\n    value: value?.value ?? 0,\n  }\n\n  function cancelEvent(e: MouseEvent) {\n    e?.stopPropagation()\n    e?.preventDefault()\n  }\n\n  function onMouseDown(e: MouseEvent) {\n    const { pageX, pageY } = e\n    dragging.value = true\n    startX = pageX\n    startY = pageY\n    startValue = value?.value || 0\n    // document.body.style.userSelect = \"none\"\n    // document.body.style.webkitUserSelect = \"none\"\n    bindEvents()\n    return cancelEvent(e)\n  }\n\n  function onMouseMove(e: MouseEvent) {\n    if (!dragging.value) return\n    const { pageX, pageY } = e\n    deltaX.value = pageX - startX\n    deltaY.value = pageY - startY\n    if (value) {\n      lastSeparatorState = {\n        startValue,\n        deltaX: deltaX.value,\n        deltaY: deltaY.value,\n        pageX,\n        pageY,\n        value: value.value,\n      }\n      const size = calcFirstElementSize(lastSeparatorState)\n      value.value = size\n    }\n    return cancelEvent(e)\n  }\n\n  function onMouseUp(e: MouseEvent) {\n    dragging.value = false\n    // document.body.style.userSelect = \"auto\"\n    // document.body.style.webkitUserSelect = \"auto\"\n    unbindEvents()\n    return cancelEvent(e)\n  }\n\n  function onDblClick() {\n    collapsed.value = !collapsed.value\n  }\n\n  const mouseOptions = { passive: false }\n\n  useEventListener(el, \"mousedown\", onMouseDown)\n  useEventListener(el, \"touchdown\", onMouseDown)\n  useEventListener(el, \"dblclick\", onDblClick)\n\n  let docListeners: any[] = []\n\n  // https://github.com/antoniandre/splitpanes/blob/master/src/components/splitpanes/splitpanes.vue\n  function bindEvents() {\n    docListeners = [\n      useEventListener(document, \"mousemove\", onMouseMove, mouseOptions),\n      useEventListener(document, \"mouseup\", onMouseUp),\n      useEventListener(document, \"touchmove\", onMouseMove, mouseOptions),\n      useEventListener(document, \"touchend\", onMouseUp),\n    ]\n  }\n\n  function unbindEvents() {\n    docListeners.forEach((stop) => stop())\n    docListeners = []\n  }\n\n  function recalc() {\n    value.value = calcFirstElementSize(lastSeparatorState)\n  }\n\n  useWindowResize(recalc)\n  onMounted(recalc)\n\n  return {\n    dragging,\n    collapsed,\n    deltaX,\n    deltaY,\n    recalc,\n  }\n}\n","import { useEventListener, useResizeObserver } from \"@vueuse/core\"\nimport { onUpdated, Ref } from \"vue\"\n\nexport function useTextareaResize(r: Ref<HTMLTextAreaElement>): void {\n  const resize = () => {\n    let el = r.value\n    if (el) {\n      el.style.height = \"1px\"\n      el.style.height = el.scrollHeight + 2 + \"px\"\n    }\n  }\n\n  onUpdated(() => {\n    let el = r?.value\n    if (el) {\n      el.setAttribute(\n        \"style\",\n        \"height:\" + (el.scrollHeight + 2) + \"px;overflow-y:hidden;resize:none;\"\n      )\n    }\n  })\n\n  useEventListener(r, \"input\", resize)\n  useResizeObserver(r, resize)\n}\n"],"names":["useColors","namespaces","time","log","arrayRemoveElement","log2","cloneObject","ref","twIconUrl","_sfc_main","defineComponent","_createElementBlock","_openBlock","_normalizeClass","_hoisted_2","_createTextVNode","_toDisplayString","_createCommentVNode","_hoisted_3","trapFocus","_hoisted_5","_Transition","_withCtx","_hoisted_1","_Fragment","_withKeys","nextTick","createPopper","_createBlock","_createElementVNode","reactive","computed","toRefs","_hoisted_4","_withModifiers","_hoisted_6","_TransitionGroup","_renderList","watch","useSessionStorage","useEventListener"],"mappings":"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"}