{"version":3,"file":"NcAvatar-DkAX4nqq-B0poB0w8.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/Composables/useIsFullscreen.mjs","../node_modules/striptags/src/striptags.js","../node_modules/@nextcloud/vue/dist/Functions/isDarkTheme.mjs","../node_modules/@nextcloud/vue/dist/chunks/constants-wIEKSp2G.mjs","../node_modules/@nextcloud/vue/dist/Composables/useIsDarkTheme.mjs","../node_modules/@vueuse/components/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/autolink-CeB9uxD9.mjs","../node_modules/@nextcloud/vue/dist/Functions/contactsMenu.mjs","../node_modules/crypt/crypt.js","../node_modules/charenc/charenc.js","../node_modules/is-buffer/index.js","../node_modules/md5/md5.js","../node_modules/@nextcloud/vue/dist/chunks/colors-Bp0JzIQ4.mjs","../node_modules/@nextcloud/vue/dist/Functions/usernameToColor.mjs","../node_modules/@nextcloud/vue/dist/chunks/getAvatarUrl-BGOeDmNO.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcUserStatusIcon-DdPPN-cP.mjs","../node_modules/@nextcloud/vue/dist/Components/NcActionLink.mjs","../node_modules/@nextcloud/vue/dist/Components/NcActionRouter.mjs","../node_modules/@nextcloud/vue/dist/Components/NcActionText.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAvatar-DkAX4nqq.mjs"],"sourcesContent":["import { ref, readonly } from \"vue\";\nconst isFullscreen = ref(checkIfIsFullscreen());\nwindow.addEventListener(\"resize\", () => {\n  isFullscreen.value = checkIfIsFullscreen();\n});\nfunction checkIfIsFullscreen() {\n  return window.outerHeight === window.screen.height;\n}\nfunction useIsFullscreen() {\n  return readonly(isFullscreen);\n}\nconst isFullscreenState = readonly(isFullscreen);\nexport {\n  isFullscreenState,\n  useIsFullscreen\n};\n//# sourceMappingURL=useIsFullscreen.mjs.map\n","'use strict';\n\n(function (global) {\n\n    // minimal symbol polyfill for IE11 and others\n    if (typeof Symbol !== 'function') {\n        var Symbol = function(name) {\n            return name;\n        }\n\n        Symbol.nonNative = true;\n    }\n\n    const STATE_PLAINTEXT = Symbol('plaintext');\n    const STATE_HTML      = Symbol('html');\n    const STATE_COMMENT   = Symbol('comment');\n\n    const ALLOWED_TAGS_REGEX  = /<(\\w*)>/g;\n    const NORMALIZE_TAG_REGEX = /<\\/?([^\\s\\/>]+)/;\n\n    function striptags(html, allowable_tags, tag_replacement) {\n        html            = html || '';\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return striptags_internal(html, context);\n    }\n\n    function init_striptags_stream(allowable_tags, tag_replacement) {\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return function striptags_stream(html) {\n            return striptags_internal(html || '', context);\n        };\n    }\n\n    striptags.init_streaming_mode = init_striptags_stream;\n\n    function init_context(allowable_tags, tag_replacement) {\n        allowable_tags = parse_allowable_tags(allowable_tags);\n\n        return {\n            allowable_tags : allowable_tags,\n            tag_replacement: tag_replacement,\n\n            state         : STATE_PLAINTEXT,\n            tag_buffer    : '',\n            depth         : 0,\n            in_quote_char : ''\n        };\n    }\n\n    function striptags_internal(html, context) {\n        if (typeof html != \"string\") {\n            throw new TypeError(\"'html' parameter must be a string\");\n        }\n\n        let allowable_tags  = context.allowable_tags;\n        let tag_replacement = context.tag_replacement;\n\n        let state         = context.state;\n        let tag_buffer    = context.tag_buffer;\n        let depth         = context.depth;\n        let in_quote_char = context.in_quote_char;\n        let output        = '';\n\n        for (let idx = 0, length = html.length; idx < length; idx++) {\n            let char = html[idx];\n\n            if (state === STATE_PLAINTEXT) {\n                switch (char) {\n                    case '<':\n                        state       = STATE_HTML;\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        output += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_HTML) {\n                switch (char) {\n                    case '<':\n                        // ignore '<' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // we're seeing a nested '<'\n                        depth++;\n                        break;\n\n                    case '>':\n                        // ignore '>' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // something like this is happening: '<<>>'\n                        if (depth) {\n                            depth--;\n\n                            break;\n                        }\n\n                        // this is closing the tag in tag_buffer\n                        in_quote_char = '';\n                        state         = STATE_PLAINTEXT;\n                        tag_buffer   += '>';\n\n                        if (allowable_tags.has(normalize_tag(tag_buffer))) {\n                            output += tag_buffer;\n                        } else {\n                            output += tag_replacement;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    case '\"':\n                    case '\\'':\n                        // catch both single and double quotes\n\n                        if (char === in_quote_char) {\n                            in_quote_char = '';\n                        } else {\n                            in_quote_char = in_quote_char || char;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case '-':\n                        if (tag_buffer === '<!-') {\n                            state = STATE_COMMENT;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case ' ':\n                    case '\\n':\n                        if (tag_buffer === '<') {\n                            state      = STATE_PLAINTEXT;\n                            output    += '< ';\n                            tag_buffer = '';\n\n                            break;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_COMMENT) {\n                switch (char) {\n                    case '>':\n                        if (tag_buffer.slice(-2) == '--') {\n                            // close the comment\n                            state = STATE_PLAINTEXT;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n        }\n\n        // save the context for future iterations\n        context.state         = state;\n        context.tag_buffer    = tag_buffer;\n        context.depth         = depth;\n        context.in_quote_char = in_quote_char;\n\n        return output;\n    }\n\n    function parse_allowable_tags(allowable_tags) {\n        let tag_set = new Set();\n\n        if (typeof allowable_tags === 'string') {\n            let match;\n\n            while ((match = ALLOWED_TAGS_REGEX.exec(allowable_tags))) {\n                tag_set.add(match[1]);\n            }\n        }\n\n        else if (!Symbol.nonNative &&\n                 typeof allowable_tags[Symbol.iterator] === 'function') {\n\n            tag_set = new Set(allowable_tags);\n        }\n\n        else if (typeof allowable_tags.forEach === 'function') {\n            // IE11 compatible\n            allowable_tags.forEach(tag_set.add, tag_set);\n        }\n\n        return tag_set;\n    }\n\n    function normalize_tag(tag_buffer) {\n        let match = NORMALIZE_TAG_REGEX.exec(tag_buffer);\n\n        return match ? match[1].toLowerCase() : null;\n    }\n\n    if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(function module_factory() { return striptags; });\n    }\n\n    else if (typeof module === 'object' && module.exports) {\n        // Node\n        module.exports = striptags;\n    }\n\n    else {\n        // Browser\n        global.striptags = striptags;\n    }\n}(this));\n","function checkIfDarkTheme(el = document.body) {\n  const backgroundInvertIfDark = window.getComputedStyle(el).getPropertyValue(\"--background-invert-if-dark\");\n  if (backgroundInvertIfDark !== void 0) {\n    return backgroundInvertIfDark === \"invert(100%)\";\n  }\n  return false;\n}\nconst isDarkTheme = checkIfDarkTheme();\nexport {\n  checkIfDarkTheme,\n  isDarkTheme\n};\n//# sourceMappingURL=isDarkTheme.mjs.map\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nconst INJECTION_KEY_THEME = /* @__PURE__ */ Symbol.for(\"nc:theme:enforced\");\nexport {\n  INJECTION_KEY_THEME as I\n};\n//# sourceMappingURL=constants-wIEKSp2G.mjs.map\n","import { createSharedComposable, toValue, usePreferredDark, useMutationObserver } from \"@vueuse/core\";\nimport { computed, ref, watch, readonly, inject } from \"vue\";\nimport { checkIfDarkTheme } from \"../Functions/isDarkTheme.mjs\";\nimport { I as INJECTION_KEY_THEME } from \"../chunks/constants-wIEKSp2G.mjs\";\n/*!\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction useIsDarkThemeElement(el) {\n  const element = computed(() => toValue(el) ?? document.body);\n  const isDarkTheme = ref(checkIfDarkTheme(element.value));\n  const isDarkSystemTheme = usePreferredDark();\n  function updateIsDarkTheme() {\n    isDarkTheme.value = checkIfDarkTheme(element.value);\n  }\n  useMutationObserver(element, updateIsDarkTheme, { attributes: true });\n  watch(element, updateIsDarkTheme);\n  watch(isDarkSystemTheme, updateIsDarkTheme, { immediate: true });\n  return readonly(isDarkTheme);\n}\nconst useInternalIsDarkTheme = createSharedComposable(() => useIsDarkThemeElement());\nfunction useIsDarkTheme() {\n  const isDarkTheme = useInternalIsDarkTheme();\n  const enforcedTheme = inject(INJECTION_KEY_THEME, void 0);\n  return computed(() => {\n    if (enforcedTheme?.value) {\n      return enforcedTheme.value === \"dark\";\n    }\n    return isDarkTheme.value;\n  });\n}\nexport {\n  useIsDarkTheme,\n  useIsDarkThemeElement\n};\n//# sourceMappingURL=useIsDarkTheme.mjs.map\n","import { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useClipboard, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize as useElementSize$1, useElementVisibility as useElementVisibility$1, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, usePointer, usePointerLock, usePreferredColorScheme, usePreferredContrast, usePreferredDark as usePreferredDark$1, usePreferredLanguages, usePreferredReducedMotion, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';\nimport { defineComponent, ref, h, watch, computed, reactive, getCurrentInstance, onMounted, isVue2, watchEffect, shallowRef, nextTick, toRefs } from 'vue-demi';\nimport { isClient, toValue, noop, isObject, tryOnScopeDispose, isIOS, directiveHooks, pausableWatch, tryOnMounted, toRef, useToggle, notNullish, promiseTimeout, until, useDebounceFn, useThrottleFn, tryOnUnmounted } from '@vueuse/shared';\n\nconst OnClickOutside = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"OnClickOutside\",\n  props: [\"as\", \"options\"],\n  emits: [\"trigger\"],\n  setup(props, { slots, emit }) {\n    const target = ref();\n    onClickOutside$1(target, (e) => {\n      emit(\"trigger\", e);\n    }, props.options);\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default());\n    };\n  }\n});\n\nconst defaultWindow = isClient ? window : void 0;\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = toValue(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options2) => {\n    el.addEventListener(event, listener, options2);\n    return () => el.removeEventListener(event, listener, options2);\n  };\n  const stopWatch = watch(\n    () => [unrefElement(target), toValue(options)],\n    ([el, options2]) => {\n      cleanup();\n      if (!el)\n        return;\n      const optionsClone = isObject(options2) ? { ...options2 } : options2;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, optionsClone));\n        })\n      );\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return noop;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n    window.document.documentElement.addEventListener(\"click\", noop);\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return toValue(ignore).some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  function hasMultipleRoots(target2) {\n    const vm = toValue(target2);\n    return vm && vm.$.subTree.shapeFlag === 16;\n  }\n  function checkMultipleRoots(target2, event) {\n    const vm = toValue(target2);\n    const children = vm.$.subTree && vm.$.subTree.children;\n    if (children == null || !Array.isArray(children))\n      return false;\n    return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n  }\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (event.target == null)\n      return;\n    if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n      return;\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  let isProcessingClick = false;\n  const cleanup = [\n    useEventListener(window, \"click\", (event) => {\n      if (!isProcessingClick) {\n        isProcessingClick = true;\n        setTimeout(() => {\n          isProcessingClick = false;\n        }, 0);\n        listener(event);\n      }\n    }, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\n        var _a;\n        const el = unrefElement(target);\n        if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n          handler(event);\n        }\n      }, 0);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nconst vOnClickOutside = {\n  [directiveHooks.mounted](el, binding) {\n    const capture = !binding.modifiers.bubble;\n    if (typeof binding.value === \"function\") {\n      el.__onClickOutside_stop = onClickOutside(el, binding.value, { capture });\n    } else {\n      const [handler, options] = binding.value;\n      el.__onClickOutside_stop = onClickOutside(el, handler, Object.assign({ capture }, options));\n    }\n  },\n  [directiveHooks.unmounted](el) {\n    el.__onClickOutside_stop();\n  }\n};\n\nfunction createKeyPredicate(keyFilter) {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n}\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const {\n    target = defaultWindow,\n    eventName = \"keydown\",\n    passive = false,\n    dedupe = false\n  } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (e.repeat && toValue(dedupe))\n      return;\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\n\nconst vOnKeyStroke = {\n  [directiveHooks.mounted](el, binding) {\n    var _a, _b;\n    const keys = (_b = (_a = binding.arg) == null ? void 0 : _a.split(\",\")) != null ? _b : true;\n    if (typeof binding.value === \"function\") {\n      onKeyStroke(keys, binding.value, {\n        target: el\n      });\n    } else {\n      const [handler, options] = binding.value;\n      onKeyStroke(keys, handler, {\n        target: el,\n        ...options\n      });\n    }\n  }\n};\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  let posStart;\n  let startTimestamp;\n  let hasLongPressed = false;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n    posStart = void 0;\n    startTimestamp = void 0;\n    hasLongPressed = false;\n  }\n  function onRelease(ev) {\n    var _a2, _b2, _c;\n    const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n    clear();\n    if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n      return;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    const dx = ev.x - _posStart.x;\n    const dy = ev.y - _posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    posStart = {\n      x: ev.x,\n      y: ev.y\n    };\n    startTimestamp = ev.timeStamp;\n    timeout = setTimeout(\n      () => {\n        hasLongPressed = true;\n        handler(ev);\n      },\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  function onMove(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n      return;\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    const dx = ev.x - posStart.x;\n    const dy = ev.y - posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n      clear();\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n  ];\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nconst OnLongPress = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"OnLongPress\",\n  props: [\"as\", \"options\"],\n  emits: [\"trigger\"],\n  setup(props, { slots, emit }) {\n    const target = ref();\n    onLongPress(\n      target,\n      (e) => {\n        emit(\"trigger\", e);\n      },\n      props.options\n    );\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default());\n    };\n  }\n});\n\nconst vOnLongPress = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      onLongPress(el, binding.value, { modifiers: binding.modifiers });\n    else\n      onLongPress(el, ...binding.value);\n  }\n};\n\nconst UseActiveElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseActiveElement\",\n  setup(props, { slots }) {\n    const data = reactive({\n      element: useActiveElement()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseBattery = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseBattery\",\n  setup(props, { slots }) {\n    const data = reactive(useBattery(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseBrowserLocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseBrowserLocation\",\n  setup(props, { slots }) {\n    const data = reactive(useBrowserLocation());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseClipboard = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseClipboard\",\n  props: [\n    \"source\",\n    \"read\",\n    \"navigator\",\n    \"copiedDuring\",\n    \"legacy\"\n  ],\n  setup(props, { slots }) {\n    const data = reactive(useClipboard(props));\n    return () => {\n      var _a;\n      return (_a = slots.default) == null ? void 0 : _a.call(slots, data);\n    };\n  }\n});\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n  if (!(globalKey in _global))\n    _global[globalKey] = _global[globalKey] || {};\n  return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  const instance = getCurrentInstance();\n  if (instance) {\n    onMounted(() => {\n      isMounted.value = true;\n    }, isVue2 ? void 0 : instance);\n  }\n  return isMounted;\n}\n\nfunction useSupported(callback) {\n  const isMounted = useMounted();\n  return computed(() => {\n    isMounted.value;\n    return Boolean(callback());\n  });\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const handler = (event) => {\n    matches.value = event.matches;\n  };\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", handler);\n    else\n      mediaQuery.removeListener(handler);\n  };\n  const stopWatch = watchEffect(() => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toValue(query));\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", handler);\n    else\n      mediaQuery.addListener(handler);\n    matches.value = mediaQuery.matches;\n  });\n  tryOnScopeDispose(() => {\n    stopWatch();\n    cleanup();\n    mediaQuery = void 0;\n  });\n  return matches;\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    },\n    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = toValue(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n    data,\n    () => write(data.value),\n    { flush, deep, eventFilter }\n  );\n  if (window && listenToStorageChanges) {\n    tryOnMounted(() => {\n      if (storage instanceof Storage)\n        useEventListener(window, \"storage\", update);\n      else\n        useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  function dispatchWriteEvent(oldValue, newValue) {\n    if (window) {\n      const payload = {\n        key,\n        oldValue,\n        newValue,\n        storageArea: storage\n      };\n      window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n        detail: payload\n      }));\n    }\n  }\n  function write(v) {\n    try {\n      const oldValue = storage.getItem(key);\n      if (v == null) {\n        dispatchWriteEvent(oldValue, null);\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          dispatchWriteEvent(oldValue, serialized);\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit != null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (typeof mergeDefaults === \"function\")\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return { ...rawInit, ...value };\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n        data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto,\n    disableTransition = true\n  } = options;\n  const modes = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\n  const preferredDark = usePreferredDark({ window });\n  const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n  const updateHTMLAttrs = getSSRHandler(\n    \"updateHTMLAttrs\",\n    (selector2, attribute2, value) => {\n      const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n      if (!el)\n        return;\n      const classesToAdd = /* @__PURE__ */ new Set();\n      const classesToRemove = /* @__PURE__ */ new Set();\n      let attributeToChange = null;\n      if (attribute2 === \"class\") {\n        const current = value.split(/\\s/g);\n        Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n          if (current.includes(v))\n            classesToAdd.add(v);\n          else\n            classesToRemove.add(v);\n        });\n      } else {\n        attributeToChange = { key: attribute2, value };\n      }\n      if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n        return;\n      let style;\n      if (disableTransition) {\n        style = window.document.createElement(\"style\");\n        style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n        window.document.head.appendChild(style);\n      }\n      for (const c of classesToAdd) {\n        el.classList.add(c);\n      }\n      for (const c of classesToRemove) {\n        el.classList.remove(c);\n      }\n      if (attributeToChange) {\n        el.setAttribute(attributeToChange.key, attributeToChange.value);\n      }\n      if (disableTransition) {\n        window.getComputedStyle(style).opacity;\n        document.head.removeChild(style);\n      }\n    }\n  );\n  function defaultOnChanged(mode) {\n    var _a;\n    updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  tryOnMounted(() => onChanged(state.value));\n  const auto = computed({\n    get() {\n      return emitAuto ? store.value : state.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  try {\n    return Object.assign(auto, { store, system, state });\n  } catch (e) {\n    return auto;\n  }\n}\n\nconst UseColorMode = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseColorMode\",\n  props: [\"selector\", \"attribute\", \"modes\", \"onChanged\", \"storageKey\", \"storage\", \"emitAuto\"],\n  setup(props, { slots }) {\n    const mode = useColorMode(props);\n    const data = reactive({\n      mode,\n      system: mode.system,\n      store: mode.store\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDark\",\n  props: [\"selector\", \"attribute\", \"valueDark\", \"valueLight\", \"onChanged\", \"storageKey\", \"storage\"],\n  setup(props, { slots }) {\n    const isDark = useDark(props);\n    const data = reactive({\n      isDark,\n      toggleDark: useToggle(isDark)\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDeviceMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDeviceMotion\",\n  setup(props, { slots }) {\n    const data = reactive(useDeviceMotion());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDeviceOrientation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDeviceOrientation\",\n  setup(props, { slots }) {\n    const data = reactive(useDeviceOrientation());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDevicePixelRatio = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDevicePixelRatio\",\n  setup(props, { slots }) {\n    const data = reactive({\n      pixelRatio: useDevicePixelRatio()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDevicesList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDevicesList\",\n  props: [\"onUpdated\", \"requestPermissions\", \"constraints\"],\n  setup(props, { slots }) {\n    const data = reactive(useDevicesList(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDocumentVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDocumentVisibility\",\n  setup(props, { slots }) {\n    const data = reactive({\n      visibility: useDocumentVisibility()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDraggable = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDraggable\",\n  props: [\n    \"storageKey\",\n    \"storageType\",\n    \"initialValue\",\n    \"exact\",\n    \"preventDefault\",\n    \"stopPropagation\",\n    \"pointerTypes\",\n    \"as\",\n    \"handle\",\n    \"axis\",\n    \"onStart\",\n    \"onMove\",\n    \"onEnd\",\n    \"disabled\",\n    \"buttons\",\n    \"containerElement\"\n  ],\n  setup(props, { slots }) {\n    const target = ref();\n    const handle = computed(() => {\n      var _a;\n      return (_a = props.handle) != null ? _a : target.value;\n    });\n    const containerElement = computed(() => {\n      var _a;\n      return (_a = props.containerElement) != null ? _a : void 0;\n    });\n    const disabled = computed(() => !!props.disabled);\n    const storageValue = props.storageKey && useStorage$1(\n      props.storageKey,\n      toValue(props.initialValue) || { x: 0, y: 0 },\n      isClient$1 ? props.storageType === \"session\" ? sessionStorage : localStorage : void 0\n    );\n    const initialValue = storageValue || props.initialValue || { x: 0, y: 0 };\n    const onEnd = (position, event) => {\n      var _a;\n      (_a = props.onEnd) == null ? void 0 : _a.call(props, position, event);\n      if (!storageValue)\n        return;\n      storageValue.value.x = position.x;\n      storageValue.value.y = position.y;\n    };\n    const data = reactive(useDraggable(target, {\n      ...props,\n      handle,\n      initialValue,\n      onEnd,\n      disabled,\n      containerElement\n    }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target, style: `touch-action:none;${data.style}` }, slots.default(data));\n    };\n  }\n});\n\nconst UseElementBounding = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementBounding\",\n  props: [\"box\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useElementBounding(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nfunction useElementHover(el, options = {}) {\n  const {\n    delayEnter = 0,\n    delayLeave = 0,\n    window = defaultWindow\n  } = options;\n  const isHovered = ref(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  return isHovered;\n}\n\nconst vElementHover = {\n  [directiveHooks.mounted](el, binding) {\n    const value = binding.value;\n    if (typeof value === \"function\") {\n      const isHovered = useElementHover(el);\n      watch(isHovered, (v) => value(v));\n    } else {\n      const [handler, options] = value;\n      const isHovered = useElementHover(el, options);\n      watch(isHovered, (v) => handler(v));\n    }\n  }\n};\n\nconst UseElementSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementSize\",\n  props: [\"width\", \"height\", \"box\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useElementSize$1(target, { width: props.width, height: props.height }, { box: props.box }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => {\n    const _targets = toValue(target);\n    return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n  });\n  const stopWatch = watch(\n    targets,\n    (els) => {\n      cleanup();\n      if (isSupported.value && window) {\n        observer = new ResizeObserver(callback);\n        for (const _el of els) {\n          if (_el)\n            observer.observe(_el, observerOptions);\n        }\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  const { stop: stop1 } = useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n      if (window && isSVG.value) {\n        const $elem = unrefElement(target);\n        if ($elem) {\n          const rect = $elem.getBoundingClientRect();\n          width.value = rect.width;\n          height.value = rect.height;\n        }\n      } else {\n        if (boxSize) {\n          const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n          width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n          height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n        } else {\n          width.value = entry.contentRect.width;\n          height.value = entry.contentRect.height;\n        }\n      }\n    },\n    options\n  );\n  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\n  };\n}\n\nconst vElementSize = {\n  [directiveHooks.mounted](el, binding) {\n    var _a;\n    const handler = typeof binding.value === \"function\" ? binding.value : (_a = binding.value) == null ? void 0 : _a[0];\n    const options = typeof binding.value === \"function\" ? [] : binding.value.slice(1);\n    const { width, height } = useElementSize(el, ...options);\n    watch([width, height], ([width2, height2]) => handler({ width: width2, height: height2 }));\n  }\n};\n\nconst UseElementVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementVisibility\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive({\n      isVisible: useElementVisibility$1(target)\n    });\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0,\n    window = defaultWindow,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  const targets = computed(() => {\n    const _target = toValue(target);\n    return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n  });\n  let cleanup = noop;\n  const isActive = ref(immediate);\n  const stopWatch = isSupported.value ? watch(\n    () => [targets.value, unrefElement(root), isActive.value],\n    ([targets2, root2]) => {\n      cleanup();\n      if (!isActive.value)\n        return;\n      if (!targets2.length)\n        return;\n      const observer = new IntersectionObserver(\n        callback,\n        {\n          root: unrefElement(root2),\n          rootMargin,\n          threshold\n        }\n      );\n      targets2.forEach((el) => el && observer.observe(el));\n      cleanup = () => {\n        observer.disconnect();\n        cleanup = noop;\n      };\n    },\n    { immediate, flush: \"post\" }\n  ) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n    isActive.value = false;\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    isActive,\n    pause() {\n      cleanup();\n      isActive.value = false;\n    },\n    resume() {\n      isActive.value = true;\n    },\n    stop\n  };\n}\n\nfunction useElementVisibility(element, options = {}) {\n  const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    (intersectionObserverEntries) => {\n      let isIntersecting = elementIsVisible.value;\n      let latestTime = 0;\n      for (const entry of intersectionObserverEntries) {\n        if (entry.time >= latestTime) {\n          latestTime = entry.time;\n          isIntersecting = entry.isIntersecting;\n        }\n      }\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold\n    }\n  );\n  return elementIsVisible;\n}\n\nconst vElementVisibility = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const handler = binding.value;\n      const isVisible = useElementVisibility(el);\n      watch(isVisible, (v) => handler(v), { immediate: true });\n    } else {\n      const [handler, options] = binding.value;\n      const isVisible = useElementVisibility(el, options);\n      watch(isVisible, (v) => handler(v), { immediate: true });\n    }\n  }\n};\n\nconst UseEyeDropper = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseEyeDropper\",\n  props: {\n    sRGBHex: String\n  },\n  setup(props, { slots }) {\n    const data = reactive(useEyeDropper());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseFullscreen = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseFullscreen\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useFullscreen(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseGeolocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseGeolocation\",\n  props: [\"enableHighAccuracy\", \"maximumAge\", \"timeout\", \"navigator\"],\n  setup(props, { slots }) {\n    const data = reactive(useGeolocation(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseIdle = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseIdle\",\n  props: [\"timeout\", \"events\", \"listenForVisibilityChange\", \"initialState\"],\n  setup(props, { slots }) {\n    const data = reactive(useIdle(props.timeout, props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = shallowRef(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw e;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  const shell = {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n  function waitUntilIsLoaded() {\n    return new Promise((resolve, reject) => {\n      until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  };\n}\n\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    if (clazz)\n      img.className = clazz;\n    if (loading)\n      img.loading = loading;\n    if (crossorigin)\n      img.crossOrigin = crossorigin;\n    if (referrerPolicy)\n      img.referrerPolicy = referrerPolicy;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n  const state = useAsyncState(\n    () => loadImage(toValue(options)),\n    void 0,\n    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nconst UseImage = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseImage\",\n  props: [\n    \"src\",\n    \"srcset\",\n    \"sizes\",\n    \"as\",\n    \"alt\",\n    \"class\",\n    \"loading\",\n    \"crossorigin\",\n    \"referrerPolicy\"\n  ],\n  setup(props, { slots }) {\n    const data = reactive(useImage(props));\n    return () => {\n      if (data.isLoading && slots.loading)\n        return slots.loading(data);\n      else if (data.error && slots.error)\n        return slots.error(data.error);\n      if (slots.default)\n        return slots.default(data);\n      return h(props.as || \"img\", props);\n    };\n  }\n});\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\",\n    window = defaultWindow,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c, _d;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = toValue(_y)) != null ? _a : y.value,\n      left: (_b = toValue(_x)) != null ? _b : x.value,\n      behavior: toValue(behavior)\n    });\n    const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n    if (x != null)\n      internalX.value = scrollContainer.scrollLeft;\n    if (y != null)\n      internalY.value = scrollContainer.scrollTop;\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const setArrivedState = (target) => {\n    var _a;\n    if (!window)\n      return;\n    const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n    const { display, flexDirection } = getComputedStyle(el);\n    const scrollLeft = el.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalX.value;\n    const left = Math.abs(scrollLeft) <= (offset.left || 0);\n    const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"row-reverse\") {\n      arrivedState.left = right;\n      arrivedState.right = left;\n    } else {\n      arrivedState.left = left;\n      arrivedState.right = right;\n    }\n    internalX.value = scrollLeft;\n    let scrollTop = el.scrollTop;\n    if (target === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= (offset.top || 0);\n    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"column-reverse\") {\n      arrivedState.top = bottom;\n      arrivedState.bottom = top;\n    } else {\n      arrivedState.top = top;\n      arrivedState.bottom = bottom;\n    }\n    internalY.value = scrollTop;\n  };\n  const onScrollHandler = (e) => {\n    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n    setArrivedState(eventTarget);\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(\n    element,\n    \"scroll\",\n    throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n    eventListenerOptions\n  );\n  tryOnMounted(() => {\n    try {\n      const _element = toValue(element);\n      if (!_element)\n        return;\n      setArrivedState(_element);\n    } catch (e) {\n      onError(e);\n    }\n  });\n  useEventListener(\n    element,\n    \"scrollend\",\n    onScrollEnd,\n    eventListenerOptions\n  );\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions,\n    measure() {\n      const _element = toValue(element);\n      if (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100,\n    canLoadMore = () => true\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n    if (state.arrivedState[direction] || isNarrower) {\n      if (!promise.value) {\n        promise.value = Promise.all([\n          onLoadMore(state),\n          new Promise((resolve) => setTimeout(resolve, interval))\n        ]).finally(() => {\n          promise.value = null;\n          nextTick(() => checkAndLoad());\n        });\n      }\n    }\n  }\n  const stop = watch(\n    () => [state.arrivedState[direction], isElementVisible.value],\n    checkAndLoad,\n    { immediate: true }\n  );\n  tryOnUnmounted(stop);\n  return {\n    isLoading,\n    reset() {\n      nextTick(() => checkAndLoad());\n    }\n  };\n}\n\nconst vInfiniteScroll = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      useInfiniteScroll(el, binding.value);\n    else\n      useInfiniteScroll(el, ...binding.value);\n  }\n};\n\nconst vIntersectionObserver = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      useIntersectionObserver(el, binding.value);\n    else\n      useIntersectionObserver(el, ...binding.value);\n  }\n};\n\nconst UseMouse = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMouse\",\n  props: [\"touch\", \"resetOnTouchEnds\", \"initialValue\"],\n  setup(props, { slots }) {\n    const data = reactive(useMouse(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseMouseInElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMouseElement\",\n  props: [\"handleOutside\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useMouseInElement(target, props));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseMousePressed = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMousePressed\",\n  props: [\"touch\", \"initialValue\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useMousePressed({ ...props, target }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseNetwork = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseNetwork\",\n  setup(props, { slots }) {\n    const data = reactive(useNetwork());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseNow = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseNow\",\n  props: [\"interval\"],\n  setup(props, { slots }) {\n    const data = reactive(useNow({ ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseObjectUrl = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseObjectUrl\",\n  props: [\n    \"object\"\n  ],\n  setup(props, { slots }) {\n    const object = toRef(props, \"object\");\n    const url = useObjectUrl(object);\n    return () => {\n      if (slots.default && url.value)\n        return slots.default(url);\n    };\n  }\n});\n\nconst UseOffsetPagination = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseOffsetPagination\",\n  props: [\n    \"total\",\n    \"page\",\n    \"pageSize\",\n    \"onPageChange\",\n    \"onPageSizeChange\",\n    \"onPageCountChange\"\n  ],\n  emits: [\n    \"page-change\",\n    \"page-size-change\",\n    \"page-count-change\"\n  ],\n  setup(props, { slots, emit }) {\n    const data = reactive(useOffsetPagination({\n      ...props,\n      onPageChange(...args) {\n        var _a;\n        (_a = props.onPageChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-change\", ...args);\n      },\n      onPageSizeChange(...args) {\n        var _a;\n        (_a = props.onPageSizeChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-size-change\", ...args);\n      },\n      onPageCountChange(...args) {\n        var _a;\n        (_a = props.onPageCountChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-count-change\", ...args);\n      }\n    }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseOnline = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseOnline\",\n  setup(props, { slots }) {\n    const data = reactive({\n      isOnline: useOnline()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePageLeave = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePageLeave\",\n  setup(props, { slots }) {\n    const data = reactive({\n      isLeft: usePageLeave()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePointer = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePointer\",\n  props: [\n    \"pointerTypes\",\n    \"initialValue\",\n    \"target\"\n  ],\n  setup(props, { slots }) {\n    const el = ref(null);\n    const data = reactive(usePointer({\n      ...props,\n      target: props.target === \"self\" ? el : defaultWindow\n    }));\n    return () => {\n      if (slots.default)\n        return slots.default(data, { ref: el });\n    };\n  }\n});\n\nconst UsePointerLock = /* #__PURE__ */ defineComponent({\n  name: \"UsePointerLock\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(usePointerLock(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UsePreferredColorScheme = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredColorScheme\",\n  setup(props, { slots }) {\n    const data = reactive({\n      colorScheme: usePreferredColorScheme()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredContrast = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredContrast\",\n  setup(props, { slots }) {\n    const data = reactive({\n      contrast: usePreferredContrast()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredDark\",\n  setup(props, { slots }) {\n    const data = reactive({\n      prefersDark: usePreferredDark$1()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredLanguages = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredLanguages\",\n  setup(props, { slots }) {\n    const data = reactive({\n      languages: usePreferredLanguages()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredReducedMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredReducedMotion\",\n  setup(props, { slots }) {\n    const data = reactive({\n      motion: usePreferredReducedMotion()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst vResizeObserver = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      useResizeObserver(el, binding.value);\n    else\n      useResizeObserver(el, ...binding.value);\n  }\n};\n\nfunction useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => {\n    const value = toValue(target);\n    const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n    return new Set(items);\n  });\n  const stopWatch = watch(\n    () => targets.value,\n    (targets2) => {\n      cleanup();\n      if (isSupported.value && targets2.size) {\n        observer = new MutationObserver(callback);\n        targets2.forEach((el) => observer.observe(el, mutationOptions));\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\n  };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n  const { window = defaultWindow, initialValue, observe = false } = options;\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  function updateCssVar() {\n    var _a;\n    const key = toValue(prop);\n    const el = toValue(elRef);\n    if (el && window && key) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }\n  if (observe) {\n    useMutationObserver(elRef, updateCssVar, {\n      attributeFilter: [\"style\", \"class\"],\n      window\n    });\n  }\n  watch(\n    [elRef, () => toValue(prop)],\n    (_, old) => {\n      if (old[0] && old[1])\n        old[0].style.removeProperty(old[1]);\n      updateCssVar();\n    },\n    { immediate: true }\n  );\n  watch(\n    variable,\n    (val) => {\n      var _a;\n      const raw_prop = toValue(prop);\n      if (((_a = elRef.value) == null ? void 0 : _a.style) && raw_prop) {\n        if (val == null)\n          elRef.value.style.removeProperty(raw_prop);\n        else\n          elRef.value.style.setProperty(raw_prop, val);\n      }\n    }\n  );\n  return variable;\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nconst UseScreenSafeArea = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseScreenSafeArea\",\n  props: {\n    top: Boolean,\n    right: Boolean,\n    bottom: Boolean,\n    left: Boolean\n  },\n  setup(props, { slots }) {\n    const {\n      top,\n      right,\n      bottom,\n      left\n    } = useScreenSafeArea();\n    return () => {\n      if (slots.default) {\n        return h(\"div\", {\n          style: {\n            paddingTop: props.top ? top.value : \"\",\n            paddingRight: props.right ? right.value : \"\",\n            paddingBottom: props.bottom ? bottom.value : \"\",\n            paddingLeft: props.left ? left.value : \"\",\n            boxSizing: \"border-box\",\n            maxHeight: \"100vh\",\n            maxWidth: \"100vw\",\n            overflow: \"auto\"\n          }\n        }, slots.default());\n      }\n    };\n  }\n});\n\nconst vScroll = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const handler = binding.value;\n      const state = useScroll(el, {\n        onScroll() {\n          handler(state);\n        },\n        onStop() {\n          handler(state);\n        }\n      });\n    } else {\n      const [handler, options] = binding.value;\n      const state = useScroll(el, {\n        ...options,\n        onScroll(e) {\n          var _a;\n          (_a = options.onScroll) == null ? void 0 : _a.call(options, e);\n          handler(state);\n        },\n        onStop(e) {\n          var _a;\n          (_a = options.onStop) == null ? void 0 : _a.call(options, e);\n          handler(state);\n        }\n      });\n    }\n  }\n};\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow = \"\";\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, ele.style.overflow);\n      if (ele.style.overflow !== \"hidden\")\n        initialOverflow = ele.style.overflow;\n      if (ele.style.overflow === \"hidden\")\n        return isLocked.value = true;\n      if (isLocked.value)\n        return ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    if (isIOS)\n      stopTouchMoveListener == null ? void 0 : stopTouchMoveListener();\n    el.style.overflow = initialOverflow;\n    elInitialOverflow.delete(el);\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else unlock();\n    }\n  });\n}\n\nfunction onScrollLock() {\n  let isMounted = false;\n  const state = ref(false);\n  return (el, binding) => {\n    state.value = binding.value;\n    if (isMounted)\n      return;\n    isMounted = true;\n    const isLocked = useScrollLock(el, binding.value);\n    watch(state, (v) => isLocked.value = v);\n  };\n}\nconst vScrollLock = onScrollLock();\n\nconst UseTimeAgo = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseTimeAgo\",\n  props: [\"time\", \"updateInterval\", \"max\", \"fullDateFormatter\", \"messages\", \"showSecond\"],\n  setup(props, { slots }) {\n    const data = reactive(useTimeAgo(() => props.time, { ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseTimestamp = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseTimestamp\",\n  props: [\"immediate\", \"interval\", \"offset\"],\n  setup(props, { slots }) {\n    const data = reactive(useTimestamp({ ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseVirtualList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseVirtualList\",\n  props: [\n    \"list\",\n    \"options\",\n    \"height\"\n  ],\n  setup(props, { slots, expose }) {\n    const { list: listRef } = toRefs(props);\n    const { list, containerProps, wrapperProps, scrollTo } = useVirtualList(listRef, props.options);\n    expose({ scrollTo });\n    if (containerProps.style && typeof containerProps.style === \"object\" && !Array.isArray(containerProps.style))\n      containerProps.style.height = props.height || \"300px\";\n    return () => h(\"div\", { ...containerProps }, [\n      h(\"div\", { ...wrapperProps.value }, list.value.map((item) => h(\"div\", { style: { overflow: \"hidden\", height: item.height } }, slots.default ? slots.default(item) : \"Please set content!\")))\n    ]);\n  }\n});\n\nconst UseWindowFocus = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseWindowFocus\",\n  setup(props, { slots }) {\n    const data = reactive({\n      focused: useWindowFocus()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseWindowSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseWindowSize\",\n  props: [\"initialWidth\", \"initialHeight\"],\n  setup(props, { slots }) {\n    const data = reactive(useWindowSize(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nexport { OnClickOutside, OnLongPress, UseActiveElement, UseBattery, UseBrowserLocation, UseClipboard, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseImage, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseObjectUrl, UseOffsetPagination, UseOnline, UsePageLeave, UsePointer, UsePointerLock, UsePreferredColorScheme, UsePreferredContrast, UsePreferredDark, UsePreferredLanguages, UsePreferredReducedMotion, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, vOnClickOutside as VOnClickOutside, vOnLongPress as VOnLongPress, vElementHover, vElementSize, vElementVisibility, vInfiniteScroll, vIntersectionObserver, vOnClickOutside, vOnKeyStroke, vOnLongPress, vResizeObserver, vScroll, vScrollLock };\n","import '../assets/autolink-KPdaBewQ.css';\nimport { getBaseUrl, getRootUrl } from \"@nextcloud/router\";\nimport { u } from \"unist-builder\";\nimport { visitParents, SKIP } from \"unist-util-visit-parents\";\nimport { defineComponent } from \"vue\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"NcRichTextExternalLink\",\n  props: {\n    href: null,\n    decorateExternal: { type: Boolean }\n  },\n  setup(__props) {\n    const { href, decorateExternal = false } = __props;\n    return { __sfc: true };\n  }\n});\nconst externalLink = \"_externalLink_13JXa\";\nconst externalLink_decorated = \"_externalLink_decorated_-4s4L\";\nconst style0 = {\n  \"material-design-icon\": \"_material-design-icon_0S7Ib\",\n  externalLink,\n  externalLink_decorated\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  _vm._self._setupProxy;\n  return _c(\"a\", { class: [_vm.$style.externalLink, {\n    [_vm.$style.externalLink_decorated]: _vm.decorateExternal\n  }], attrs: { \"href\": _vm.href, \"rel\": \"noopener noreferrer\", \"target\": \"_blank\" } }, [_vm._t(\"default\", function() {\n    return [_vm._v(_vm._s(_vm.href))];\n  })], 2);\n};\nvar _sfc_staticRenderFns = [];\nconst __cssModules = {\n  \"$style\": style0\n};\nfunction _sfc_injectStyles(ctx) {\n  for (var key in __cssModules) {\n    this[key] = __cssModules[key];\n  }\n}\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  _sfc_injectStyles,\n  null\n);\nconst NcRichTextExternalLink = __component__.exports;\nconst URL_PATTERN = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig;\nconst URL_PATTERN_AUTOLINK = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig;\nfunction remarkAutolink({ autolink, useMarkdown, useExtendedMarkdown }) {\n  return function(tree) {\n    if (useExtendedMarkdown || !useMarkdown || !autolink) {\n      return;\n    }\n    visitParents(tree, (node) => node.type === \"text\", (node, ancestors) => {\n      if (ancestors.some((ancestor) => ancestor.type === \"link\" || ancestor.type === \"linkReference\")) {\n        return;\n      }\n      const parent = ancestors.at(-1);\n      const index = parent.children.indexOf(node) ?? 0;\n      let parsed = parseUrl(node.value);\n      parsed = parsed.map((n) => {\n        if (typeof n === \"string\") {\n          return u(\"text\", n);\n        }\n        return u(\"link\", {\n          url: n.props.href\n        }, [u(\"text\", n.props.href)]);\n      }).filter((x) => x);\n      parent.children.splice(index, 1, ...parsed.flat());\n      return [SKIP, index + parsed.flat().length];\n    });\n  };\n}\nfunction parseUrl(text) {\n  let match = URL_PATTERN_AUTOLINK.exec(text);\n  const list = [];\n  let start = 0;\n  while (match !== null) {\n    let href = match[2];\n    let textAfter;\n    let textBefore = text.substring(start, match.index + match[1].length);\n    if (href[0] === \" \") {\n      textBefore += href[0];\n      href = href.substring(1).trim();\n    }\n    const lastChar = href[href.length - 1];\n    if (lastChar === \".\" || lastChar === \",\" || lastChar === \";\" || match[0][0] === \"(\" && lastChar === \")\") {\n      href = href.substring(0, href.length - 1);\n      textAfter = lastChar;\n    }\n    list.push(textBefore);\n    list.push({ component: NcRichTextExternalLink, props: { href: href.trim(), decorateExternal: true } });\n    if (textAfter) {\n      list.push(textAfter);\n    }\n    start = match.index + match[0].length;\n    match = URL_PATTERN_AUTOLINK.exec(text);\n  }\n  list.push(text.substring(start));\n  const joinedText = list.map((item) => typeof item === \"string\" ? item : item.props.href).join(\"\");\n  if (text === joinedText) {\n    return list;\n  }\n  logger.error(\"Failed to reassemble the chunked text: \" + text);\n  return text;\n}\nfunction getRoute(router, url) {\n  const removePrefix = (str, prefix) => str.startsWith(prefix) ? str.slice(prefix.length) : str;\n  const removePrefixes = (str, ...prefixes) => prefixes.reduce((acc, prefix) => removePrefix(acc, prefix), str);\n  if (!router) {\n    return null;\n  }\n  const isAbsoluteURL = /^https?:\\/\\//.test(url);\n  const isNonHttpLink = /^[a-z][a-z0-9+.-]*:.+/.test(url);\n  if (!isAbsoluteURL && isNonHttpLink) {\n    return null;\n  }\n  if (isAbsoluteURL && !url.startsWith(getBaseUrl())) {\n    return null;\n  }\n  if (!isAbsoluteURL && !url.startsWith(\"/\")) {\n    return null;\n  }\n  const relativeUrl = isAbsoluteURL ? removePrefixes(url, getBaseUrl(), \"/index.php\") : url;\n  const relativeRouterBase = removePrefixes(router.history.base, getRootUrl(), \"/index.php\");\n  const potentialRouterPath = removePrefixes(relativeUrl, relativeRouterBase) || \"/\";\n  const route = router.resolve(potentialRouterPath).route;\n  if (!route.matched.length) {\n    return null;\n  }\n  return route.fullPath;\n}\nexport {\n  NcRichTextExternalLink as N,\n  URL_PATTERN as U,\n  getRoute as g,\n  parseUrl as p,\n  remarkAutolink as r\n};\n//# sourceMappingURL=autolink-CeB9uxD9.mjs.map\n","import { l as logger } from \"../chunks/logger-D3RVzcfQ.mjs\";\nfunction registerContactsMenuAction(action) {\n  window._nc_contacts_menu_hooks ??= {};\n  if (window._nc_contacts_menu_hooks[action.id]) {\n    logger.error(`ContactsMenu action for id ${action.id} has already been registered`, {\n      action\n    });\n    return;\n  }\n  window._nc_contacts_menu_hooks[action.id] = action;\n}\nfunction getEnabledContactsMenuActions(entry) {\n  if (!window._nc_contacts_menu_hooks) {\n    return [];\n  }\n  return Object.values(window._nc_contacts_menu_hooks).filter((action) => action.enabled(entry));\n}\nexport {\n  getEnabledContactsMenuActions,\n  registerContactsMenuAction\n};\n//# sourceMappingURL=contactsMenu.mjs.map\n","(function() {\n  var base64map\n      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n  crypt = {\n    // Bit-wise rotation left\n    rotl: function(n, b) {\n      return (n << b) | (n >>> (32 - b));\n    },\n\n    // Bit-wise rotation right\n    rotr: function(n, b) {\n      return (n << (32 - b)) | (n >>> b);\n    },\n\n    // Swap big-endian to little-endian and vice versa\n    endian: function(n) {\n      // If number given, swap endian\n      if (n.constructor == Number) {\n        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n      }\n\n      // Else, assume array and swap all items\n      for (var i = 0; i < n.length; i++)\n        n[i] = crypt.endian(n[i]);\n      return n;\n    },\n\n    // Generate an array of any length of random bytes\n    randomBytes: function(n) {\n      for (var bytes = []; n > 0; n--)\n        bytes.push(Math.floor(Math.random() * 256));\n      return bytes;\n    },\n\n    // Convert a byte array to big-endian 32-bit words\n    bytesToWords: function(bytes) {\n      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n        words[b >>> 5] |= bytes[i] << (24 - b % 32);\n      return words;\n    },\n\n    // Convert big-endian 32-bit words to a byte array\n    wordsToBytes: function(words) {\n      for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n        bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a hex string\n    bytesToHex: function(bytes) {\n      for (var hex = [], i = 0; i < bytes.length; i++) {\n        hex.push((bytes[i] >>> 4).toString(16));\n        hex.push((bytes[i] & 0xF).toString(16));\n      }\n      return hex.join('');\n    },\n\n    // Convert a hex string to a byte array\n    hexToBytes: function(hex) {\n      for (var bytes = [], c = 0; c < hex.length; c += 2)\n        bytes.push(parseInt(hex.substr(c, 2), 16));\n      return bytes;\n    },\n\n    // Convert a byte array to a base-64 string\n    bytesToBase64: function(bytes) {\n      for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n        var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n        for (var j = 0; j < 4; j++)\n          if (i * 8 + j * 6 <= bytes.length * 8)\n            base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n          else\n            base64.push('=');\n      }\n      return base64.join('');\n    },\n\n    // Convert a base-64 string to a byte array\n    base64ToBytes: function(base64) {\n      // Remove non-base-64 characters\n      base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n      for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n          imod4 = ++i % 4) {\n        if (imod4 == 0) continue;\n        bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n            & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n            | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n      }\n      return bytes;\n    }\n  };\n\n  module.exports = crypt;\n})();\n","var charenc = {\n  // UTF-8 encoding\n  utf8: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n    }\n  },\n\n  // Binary encoding\n  bin: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      for (var bytes = [], i = 0; i < str.length; i++)\n        bytes.push(str.charCodeAt(i) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      for (var str = [], i = 0; i < bytes.length; i++)\n        str.push(String.fromCharCode(bytes[i]));\n      return str.join('');\n    }\n  }\n};\n\nmodule.exports = charenc;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","(function(){\r\n  var crypt = require('crypt'),\r\n      utf8 = require('charenc').utf8,\r\n      isBuffer = require('is-buffer'),\r\n      bin = require('charenc').bin,\r\n\r\n  // The core\r\n  md5 = function (message, options) {\r\n    // Convert to byte array\r\n    if (message.constructor == String)\r\n      if (options && options.encoding === 'binary')\r\n        message = bin.stringToBytes(message);\r\n      else\r\n        message = utf8.stringToBytes(message);\r\n    else if (isBuffer(message))\r\n      message = Array.prototype.slice.call(message, 0);\r\n    else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n      message = message.toString();\r\n    // else, assume byte array already\r\n\r\n    var m = crypt.bytesToWords(message),\r\n        l = message.length * 8,\r\n        a =  1732584193,\r\n        b = -271733879,\r\n        c = -1732584194,\r\n        d =  271733878;\r\n\r\n    // Swap endian\r\n    for (var i = 0; i < m.length; i++) {\r\n      m[i] = ((m[i] <<  8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n             ((m[i] << 24) | (m[i] >>>  8)) & 0xFF00FF00;\r\n    }\r\n\r\n    // Padding\r\n    m[l >>> 5] |= 0x80 << (l % 32);\r\n    m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n    // Method shortcuts\r\n    var FF = md5._ff,\r\n        GG = md5._gg,\r\n        HH = md5._hh,\r\n        II = md5._ii;\r\n\r\n    for (var i = 0; i < m.length; i += 16) {\r\n\r\n      var aa = a,\r\n          bb = b,\r\n          cc = c,\r\n          dd = d;\r\n\r\n      a = FF(a, b, c, d, m[i+ 0],  7, -680876936);\r\n      d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n      c = FF(c, d, a, b, m[i+ 2], 17,  606105819);\r\n      b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n      a = FF(a, b, c, d, m[i+ 4],  7, -176418897);\r\n      d = FF(d, a, b, c, m[i+ 5], 12,  1200080426);\r\n      c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n      b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n      a = FF(a, b, c, d, m[i+ 8],  7,  1770035416);\r\n      d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n      c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n      b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n      a = FF(a, b, c, d, m[i+12],  7,  1804603682);\r\n      d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n      c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n      b = FF(b, c, d, a, m[i+15], 22,  1236535329);\r\n\r\n      a = GG(a, b, c, d, m[i+ 1],  5, -165796510);\r\n      d = GG(d, a, b, c, m[i+ 6],  9, -1069501632);\r\n      c = GG(c, d, a, b, m[i+11], 14,  643717713);\r\n      b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n      a = GG(a, b, c, d, m[i+ 5],  5, -701558691);\r\n      d = GG(d, a, b, c, m[i+10],  9,  38016083);\r\n      c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n      b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n      a = GG(a, b, c, d, m[i+ 9],  5,  568446438);\r\n      d = GG(d, a, b, c, m[i+14],  9, -1019803690);\r\n      c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n      b = GG(b, c, d, a, m[i+ 8], 20,  1163531501);\r\n      a = GG(a, b, c, d, m[i+13],  5, -1444681467);\r\n      d = GG(d, a, b, c, m[i+ 2],  9, -51403784);\r\n      c = GG(c, d, a, b, m[i+ 7], 14,  1735328473);\r\n      b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n      a = HH(a, b, c, d, m[i+ 5],  4, -378558);\r\n      d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n      c = HH(c, d, a, b, m[i+11], 16,  1839030562);\r\n      b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n      a = HH(a, b, c, d, m[i+ 1],  4, -1530992060);\r\n      d = HH(d, a, b, c, m[i+ 4], 11,  1272893353);\r\n      c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n      b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n      a = HH(a, b, c, d, m[i+13],  4,  681279174);\r\n      d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n      c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n      b = HH(b, c, d, a, m[i+ 6], 23,  76029189);\r\n      a = HH(a, b, c, d, m[i+ 9],  4, -640364487);\r\n      d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n      c = HH(c, d, a, b, m[i+15], 16,  530742520);\r\n      b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n      a = II(a, b, c, d, m[i+ 0],  6, -198630844);\r\n      d = II(d, a, b, c, m[i+ 7], 10,  1126891415);\r\n      c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n      b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n      a = II(a, b, c, d, m[i+12],  6,  1700485571);\r\n      d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n      c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n      b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n      a = II(a, b, c, d, m[i+ 8],  6,  1873313359);\r\n      d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n      c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n      b = II(b, c, d, a, m[i+13], 21,  1309151649);\r\n      a = II(a, b, c, d, m[i+ 4],  6, -145523070);\r\n      d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n      c = II(c, d, a, b, m[i+ 2], 15,  718787259);\r\n      b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n      a = (a + aa) >>> 0;\r\n      b = (b + bb) >>> 0;\r\n      c = (c + cc) >>> 0;\r\n      d = (d + dd) >>> 0;\r\n    }\r\n\r\n    return crypt.endian([a, b, c, d]);\r\n  };\r\n\r\n  // Auxiliary functions\r\n  md5._ff  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._gg  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._hh  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._ii  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n\r\n  // Package private blocksize\r\n  md5._blocksize = 16;\r\n  md5._digestsize = 16;\r\n\r\n  module.exports = function (message, options) {\r\n    if (message === undefined || message === null)\r\n      throw new Error('Illegal argument ' + message);\r\n\r\n    var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n    return options && options.asBytes ? digestbytes :\r\n        options && options.asString ? bin.bytesToString(digestbytes) :\r\n        crypt.bytesToHex(digestbytes);\r\n  };\r\n\r\n})();\r\n","import { r as register, t as t3, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nregister(t3);\nclass Color {\n  /**\n   * @param r - The red value\n   * @param g - The green value\n   * @param b - The blue value\n   * @param name - The name of the color\n   */\n  constructor(r, g, b, name) {\n    this.r = r;\n    this.g = g;\n    this.b = b;\n    this.name = name;\n    this.r = Math.min(r, 255);\n    this.g = Math.min(g, 255);\n    this.b = Math.min(b, 255);\n    this.name = name;\n  }\n  r;\n  g;\n  b;\n  name;\n  /**\n   * The hexadecimal color string.\n   */\n  get color() {\n    const toHex = (int) => `00${int.toString(16)}`.slice(-2);\n    return `#${toHex(this.r)}${toHex(this.g)}${toHex(this.b)}`;\n  }\n}\nfunction calculateStepIncrement(steps, color1, color2) {\n  return {\n    r: (color2.r - color1.r) / steps,\n    g: (color2.g - color1.g) / steps,\n    b: (color2.b - color1.b) / steps\n  };\n}\nfunction mixPalette(steps, color1, color2) {\n  const palette = [];\n  palette.push(color1);\n  const increment = calculateStepIncrement(steps, color1, color2);\n  for (let i = 1; i < steps; i++) {\n    const r = Math.floor(color1.r + increment.r * i);\n    const g = Math.floor(color1.g + increment.g * i);\n    const b = Math.floor(color1.b + increment.b * i);\n    palette.push(new Color(r, g, b));\n  }\n  return palette;\n}\nconst COLOR_RED = new Color(182, 70, 157, t(\"Purple\"));\nconst COLOR_YELLOW = new Color(221, 203, 85, t(\"Gold\"));\nconst COLOR_BLUE = new Color(0, 130, 201, t(\"Nextcloud blue\"));\nconst COLOR_BLACK = new Color(0, 0, 0, t(\"Black\"));\nconst COLOR_WHITE = new Color(255, 255, 255, t(\"White\"));\nconst defaultPalette = [\n  COLOR_RED,\n  new Color(\n    ...[191, 103, 139],\n    t(\"Rosy brown\")\n    // TRANSLATORS: A color name for RGB(191, 103, 139)\n  ),\n  new Color(\n    ...[201, 136, 121],\n    t(\"Feldspar\")\n    // TRANSLATORS: A color name for RGB(201, 136, 121)\n  ),\n  new Color(\n    ...[211, 169, 103],\n    t(\"Whiskey\")\n    // TRANSLATORS: A color name for RGB(211, 169, 103)\n  ),\n  COLOR_YELLOW,\n  new Color(\n    ...[165, 184, 114],\n    t(\"Olivine\")\n    // TRANSLATORS: A color name for RGB(165, 184, 114)\n  ),\n  new Color(\n    ...[110, 166, 143],\n    t(\"Acapulco\")\n    // TRANSLATORS: A color name for RGB(110, 166, 143)\n  ),\n  new Color(\n    ...[55, 148, 172],\n    t(\"Boston Blue\")\n    // TRANSLATORS: A color name for RGB(55, 148, 172)\n  ),\n  COLOR_BLUE,\n  new Color(\n    ...[45, 115, 190],\n    t(\"Mariner\")\n    // TRANSLATORS: A color name for RGB(45, 115, 190)\n  ),\n  new Color(\n    ...[91, 100, 179],\n    t(\"Blue Violet\")\n    // TRANSLATORS: A color name for RGB(91, 100, 179)\n  ),\n  new Color(\n    ...[136, 85, 168],\n    t(\"Deluge\")\n    // TRANSLATORS: A color name for RGB(136, 85, 168)\n  )\n];\nfunction generatePalette(steps) {\n  const palette1 = mixPalette(steps, COLOR_RED, COLOR_YELLOW);\n  const palette2 = mixPalette(steps, COLOR_YELLOW, COLOR_BLUE);\n  const palette3 = mixPalette(steps, COLOR_BLUE, COLOR_RED);\n  return palette1.concat(palette2).concat(palette3);\n}\nexport {\n  Color as C,\n  COLOR_BLACK as a,\n  COLOR_WHITE as b,\n  defaultPalette as d,\n  generatePalette as g\n};\n//# sourceMappingURL=colors-Bp0JzIQ4.mjs.map\n","import md5 from \"md5\";\nimport { g as generatePalette } from \"../chunks/colors-Bp0JzIQ4.mjs\";\nfunction usernameToColor(username) {\n  let hash = username.toLowerCase();\n  if (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) {\n    hash = md5(hash);\n  }\n  hash = hash.replace(/[^0-9a-f]/g, \"\");\n  const steps = 6;\n  const finalPalette = generatePalette(steps);\n  function hashToInt(hash2, maximum) {\n    let finalInt = 0;\n    const result = [];\n    for (let i = 0; i < hash2.length; i++) {\n      result.push(parseInt(hash2.charAt(i), 16) % 16);\n    }\n    for (const j in result) {\n      finalInt += result[j];\n    }\n    return parseInt(parseInt(finalInt, 10) % maximum, 10);\n  }\n  return finalPalette[hashToInt(hash, steps * 3)];\n}\nexport {\n  usernameToColor as default,\n  usernameToColor\n};\n//# sourceMappingURL=usernameToColor.mjs.map\n","import { generateUrl } from \"@nextcloud/router\";\nimport { checkIfDarkTheme } from \"../Functions/isDarkTheme.mjs\";\nfunction getAvatarUrl(user, options) {\n  const size = (options?.size || 64) <= 64 ? 64 : 512;\n  const guestUrl = options?.isGuest ? \"/guest\" : \"\";\n  const themeUrl = options?.isDarkTheme ?? checkIfDarkTheme(document.body) ? \"/dark\" : \"\";\n  return generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}?guestFallback=true`, {\n    user,\n    size\n  });\n}\nexport {\n  getAvatarUrl as g\n};\n//# sourceMappingURL=getAvatarUrl-BGOeDmNO.mjs.map\n","import '../assets/NcUserStatusIcon-Bw8yMFMP.css';\nimport axios from \"@nextcloud/axios\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { generateOcsUrl } from \"@nextcloud/router\";\nimport { r as register, W as t53, X as t11, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport { a as isLegacy32 } from \"./legacy-DV3mGZdh.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst awayLegacySvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"-1 -1 18 18\" width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path fill=\"none\" d=\"M-4-4h24v24H-4z\" />\\n\t<path fill=\"var(--color-warning)\" d=\"M6.9.1C3 .6-.1 4-.1 8c0 4.4 3.6 8 8 8 4 0 7.4-3 8-6.9-1.2 1.3-2.9 2.1-4.7 2.1-3.5 0-6.4-2.9-6.4-6.4 0-1.9.8-3.6 2.1-4.7z\" />\\n</svg>\\n';\nconst awaySvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"0 -960 960 960\" width=\"24px\" height=\"24px\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path\\n\t\tfill=\"var(--user-status-color-away, var(--color-warning, #C88800))\"\\n\t\td=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\"/>\\n</svg>\\n';\nconst busySvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"0 -960 960 960\" width=\"24px\" height=\"24px\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path\\n\t\tfill=\"var(--user-status-color-busy, var(--color-error, #DB0606))\"\\n\t\td=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\"/>\\n</svg>\\n';\nconst dndLegacySvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"-1 -1 18 18\" width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path fill=\"none\" d=\"M-4-4h24v24H-4V-4z\" />\\n\t<path fill=\"var(--color-border-error, var(--color-error))\" d=\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\" />\\n\t<path fill=\"#fdffff\" d=\"M5 6.5h6c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5H5c-.8 0-1.5-.7-1.5-1.5S4.2 6.5 5 6.5z\" />\\n</svg>\\n';\nconst dndSvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"0 -960 960 960\" width=\"24px\" height=\"24px\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path\\n\t\tfill=\"var(--user-status-color-busy, var(--color-error, #DB0606))\"\\n\t\td=\"M280-440h400v-80H280v80ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\"/>\\n</svg>\\n';\nconst invisibleLegacySvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"-1 -1 18 18\" width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path fill=\"none\" d=\"M-4-4h24v24H-4V-4z\" />\\n\t<path d=\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 3.2c2.7 0 4.8 2.1 4.8 4.8s-2.1 4.8-4.8 4.8S3.2 10.7 3.2 8 5.3 3.2 8 3.2z\" />\\n</svg>\\n';\nconst invisibleSvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"0 -960 960 960\" width=\"24px\" height=\"24px\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path\\n\t\tfill=\"var(--user-status-color-offline, var(--color-text-maxcontrast, #6B6B6B))\"\\n\t\td=\"M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/>\\n</svg>\\n';\nconst onlineLegacySvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"-1 -1 18 18\" width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path fill=\"var(--color-success)\" d=\"M4.8 11.2h6.4V4.8H4.8v6.4zM8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\" />\\n</svg>\\n';\nconst onlineSvg = '<!--\\n  - SPDX-FileCopyrightText: 2020 Google Inc.\\n  - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\"0 -960 960 960\" width=\"24px\" height=\"24px\" xmlns=\"http://www.w3.org/2000/svg\">\\n\t<path\\n\t\tfill=\"var(--user-status-color-online, var(--color-success, #2D7B41))\"\\n\t\td=\"m424-296 282-282-56-56-226 226-114-114-56 56 170 170Zm56 216q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\"/>\\n</svg>\\n';\nregister(t53);\nregister(t11);\nfunction getUserStatusText(status) {\n  switch (status) {\n    case \"away\":\n      return t(\"away\");\n    // TRANSLATORS: User status if the user is currently away from keyboard\n    case \"busy\":\n      return t(\"busy\");\n    case \"dnd\":\n      return t(\"do not disturb\");\n    case \"online\":\n      return t(\"online\");\n    case \"invisible\":\n      return t(\"invisible\");\n    case \"offline\":\n      return t(\"offline\");\n    default:\n      return status;\n  }\n}\nconst matchSvg = {\n  online: isLegacy32 ? onlineLegacySvg : onlineSvg,\n  away: isLegacy32 ? awayLegacySvg : awaySvg,\n  busy: isLegacy32 ? awayLegacySvg : busySvg,\n  dnd: isLegacy32 ? dndLegacySvg : dndSvg,\n  invisible: isLegacy32 ? invisibleLegacySvg : invisibleSvg,\n  offline: isLegacy32 ? invisibleLegacySvg : invisibleSvg\n};\nconst _sfc_main = {\n  name: \"NcUserStatusIcon\",\n  props: {\n    /**\n     * Set the user id to fetch the status\n     */\n    user: {\n      type: String,\n      default: null\n    },\n    /**\n     * Set the status\n     *\n     * @type {'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'}\n     */\n    status: {\n      type: String,\n      default: null,\n      validator: (value) => [\n        \"online\",\n        \"away\",\n        \"busy\",\n        \"dnd\",\n        \"invisible\",\n        \"offline\"\n      ].includes(value)\n    },\n    /**\n     * Set the `aria-hidden` attribute\n     *\n     * @type {'true' | 'false'}\n     */\n    ariaHidden: {\n      type: String,\n      default: null,\n      validator: (value) => [\n        \"true\",\n        \"false\"\n      ].includes(value)\n    }\n  },\n  data() {\n    return {\n      fetchedUserStatus: null\n    };\n  },\n  computed: {\n    activeStatus() {\n      return this.status ?? this.fetchedUserStatus;\n    },\n    activeSvg() {\n      return matchSvg[this.activeStatus] ?? null;\n    },\n    ariaLabel() {\n      if (this.ariaHidden === \"true\") {\n        return null;\n      }\n      return t(\"User status: {status}\", { status: getUserStatusText(this.activeStatus) });\n    }\n  },\n  watch: {\n    user: {\n      immediate: true,\n      async handler(user) {\n        if (!user || !getCapabilities()?.user_status?.enabled) {\n          this.fetchedUserStatus = null;\n          return;\n        }\n        try {\n          const { data } = await axios.get(generateOcsUrl(\"/apps/user_status/api/v1/statuses/{user}\", { user }));\n          this.fetchedUserStatus = data.ocs?.data?.status;\n        } catch {\n          this.fetchedUserStatus = null;\n        }\n      }\n    }\n  }\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _vm.activeStatus ? _c(\"span\", { staticClass: \"user-status-icon\", class: {\n    \"user-status-icon--invisible\": [\"invisible\", \"offline\"].includes(_vm.status)\n  }, attrs: { \"role\": \"img\", \"aria-hidden\": _vm.ariaHidden, \"aria-label\": _vm.ariaLabel }, domProps: { \"innerHTML\": _vm._s(_vm.activeSvg) } }) : _vm._e();\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"86b73d39\"\n);\nconst NcUserStatusIcon = __component__.exports;\nexport {\n  NcUserStatusIcon as N,\n  getUserStatusText as g\n};\n//# sourceMappingURL=NcUserStatusIcon-DdPPN-cP.mjs.map\n","import '../assets/NcActionLink-Bt-73iBm.css';\nimport { A as ActionTextMixin } from \"../chunks/actionText-BMig9Egt.mjs\";\nimport { n as normalizeComponent } from \"../chunks/_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst _sfc_main = {\n  name: \"NcActionLink\",\n  mixins: [ActionTextMixin],\n  inject: {\n    isInSemanticMenu: {\n      from: \"NcActions:isSemanticMenu\",\n      default: false\n    }\n  },\n  props: {\n    /**\n     * destionation to link to\n     */\n    href: {\n      type: String,\n      required: true,\n      validator: (value) => {\n        try {\n          return new URL(value);\n        } catch {\n          return value.startsWith(\"#\") || value.startsWith(\"/\");\n        }\n      }\n    },\n    /**\n     * download the link instead of opening\n     */\n    download: {\n      type: String,\n      default: null\n    },\n    /**\n     * target to open the link\n     */\n    target: {\n      type: String,\n      default: \"_self\",\n      validator: (value) => {\n        return value && (!value.startsWith(\"_\") || [\"_blank\", \"_self\", \"_parent\", \"_top\"].indexOf(value) > -1);\n      }\n    },\n    /**\n     * Declares a native tooltip when not null\n     */\n    title: {\n      type: String,\n      default: null\n    },\n    /**\n     * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n     * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n     * otherwise root element will inherit incorrect aria-hidden.\n     */\n    ariaHidden: {\n      type: Boolean,\n      // eslint-disable-next-line vue/no-boolean-default\n      default: null\n    }\n  }\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"li\", { staticClass: \"action\", attrs: { \"role\": _vm.isInSemanticMenu && \"presentation\" } }, [_c(\"a\", { staticClass: \"action-link focusable\", attrs: { \"download\": _vm.download, \"href\": _vm.href, \"aria-label\": _vm.ariaLabel, \"target\": _vm.target, \"title\": _vm.title, \"rel\": \"nofollow noreferrer noopener\", \"role\": _vm.isInSemanticMenu && \"menuitem\" }, on: { \"click\": _vm.onClick } }, [_vm._t(\"icon\", function() {\n    return [_c(\"span\", { staticClass: \"action-link__icon\", class: [_vm.isIconUrl ? \"action-link__icon--url\" : _vm.icon], style: { backgroundImage: _vm.isIconUrl ? `url(${_vm.icon})` : null }, attrs: { \"aria-hidden\": \"true\" } })];\n  }), _vm.name ? _c(\"span\", { staticClass: \"action-link__longtext-wrapper\" }, [_c(\"strong\", { staticClass: \"action-link__name\" }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")]), _c(\"br\"), _c(\"span\", { staticClass: \"action-link__longtext\", domProps: { \"textContent\": _vm._s(_vm.text) } })]) : _vm.isLongText ? _c(\"span\", { staticClass: \"action-link__longtext\", domProps: { \"textContent\": _vm._s(_vm.text) } }) : _c(\"span\", { staticClass: \"action-link__text\" }, [_vm._v(_vm._s(_vm.text))]), _vm._e()], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"b7a160c7\"\n);\nconst NcActionLink = __component__.exports;\nexport {\n  NcActionLink as default\n};\n//# sourceMappingURL=NcActionLink.mjs.map\n","import '../assets/NcActionRouter-Bpv5Ywxq.css';\nimport { A as ActionTextMixin } from \"../chunks/actionText-BMig9Egt.mjs\";\nimport { n as normalizeComponent } from \"../chunks/_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst _sfc_main = {\n  name: \"NcActionRouter\",\n  mixins: [ActionTextMixin],\n  inject: {\n    isInSemanticMenu: {\n      from: \"NcActions:isSemanticMenu\",\n      default: false\n    }\n  },\n  props: {\n    /**\n     * router-link to prop [https://router.vuejs.org/api/#to](https://router.vuejs.org/api/#to)\n     */\n    to: {\n      type: [String, Object],\n      required: true\n    },\n    /**\n     * router-link exact prop [https://router.vuejs.org/api/#exact](https://router.vuejs.org/api/#exact)\n     */\n    exact: {\n      type: Boolean,\n      default: false\n    }\n  }\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"li\", { staticClass: \"action\", attrs: { \"role\": _vm.isInSemanticMenu && \"presentation\" } }, [_c(\"RouterLink\", { staticClass: \"action-router focusable\", attrs: { \"to\": _vm.to, \"aria-label\": _vm.ariaLabel, \"exact\": _vm.exact, \"title\": _vm.title, \"rel\": \"nofollow noreferrer noopener\", \"role\": _vm.isInSemanticMenu && \"menuitem\" }, nativeOn: { \"click\": function($event) {\n    return _vm.onClick.apply(null, arguments);\n  } } }, [_vm._t(\"icon\", function() {\n    return [_c(\"span\", { staticClass: \"action-router__icon\", class: [_vm.isIconUrl ? \"action-router__icon--url\" : _vm.icon], style: { backgroundImage: _vm.isIconUrl ? `url(${_vm.icon})` : null }, attrs: { \"aria-hidden\": \"true\" } })];\n  }), _vm.name ? _c(\"span\", { staticClass: \"action-router__longtext-wrapper\" }, [_c(\"strong\", { staticClass: \"action-router__name\" }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")]), _c(\"br\"), _c(\"span\", { staticClass: \"action-router__longtext\", domProps: { \"textContent\": _vm._s(_vm.text) } })]) : _vm.isLongText ? _c(\"span\", { staticClass: \"action-router__longtext\", domProps: { \"textContent\": _vm._s(_vm.text) } }) : _c(\"span\", { staticClass: \"action-router__text\" }, [_vm._v(_vm._s(_vm.text))]), _vm._e()], 2)], 1);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"4dae1ff7\"\n);\nconst NcActionRouter = __component__.exports;\nexport {\n  NcActionRouter as default\n};\n//# sourceMappingURL=NcActionRouter.mjs.map\n","import '../assets/NcActionText-IMOkntPi.css';\nimport { A as ActionTextMixin } from \"../chunks/actionText-BMig9Egt.mjs\";\nimport { n as normalizeComponent } from \"../chunks/_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst _sfc_main = {\n  name: \"NcActionText\",\n  mixins: [ActionTextMixin],\n  inject: {\n    isInSemanticMenu: {\n      from: \"NcActions:isSemanticMenu\",\n      default: false\n    }\n  }\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"li\", { staticClass: \"action\", attrs: { \"role\": _vm.isInSemanticMenu && \"presentation\" } }, [_c(\"span\", { staticClass: \"action-text\", on: { \"click\": _vm.onClick } }, [_vm._t(\"icon\", function() {\n    return [_vm.icon !== \"\" ? _c(\"span\", { staticClass: \"action-text__icon\", class: [_vm.isIconUrl ? \"action-text__icon--url\" : _vm.icon], style: { backgroundImage: _vm.isIconUrl ? `url(${_vm.icon})` : null }, attrs: { \"aria-hidden\": \"true\" } }) : _vm._e()];\n  }), _vm.name ? _c(\"span\", { staticClass: \"action-text__longtext-wrapper\" }, [_c(\"strong\", { staticClass: \"action-text__name\" }, [_vm._v(\" \" + _vm._s(_vm.name) + \" \")]), _c(\"span\", { staticClass: \"action-text__longtext\", domProps: { \"textContent\": _vm._s(_vm.text) } })]) : _vm.isLongText ? _c(\"span\", { staticClass: \"action-text__longtext\", domProps: { \"textContent\": _vm._s(_vm.text) } }) : _c(\"span\", { staticClass: \"action-text__text\" }, [_vm._v(_vm._s(_vm.text))]), _vm._e()], 2)]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"2fe7eb92\"\n);\nconst NcActionText = __component__.exports;\nexport {\n  NcActionText as default\n};\n//# sourceMappingURL=NcActionText.mjs.map\n","import '../assets/NcMentionBubble-CaztX9Pv.css';\nimport '../assets/NcAvatar-CK9ipsjF.css';\nimport { getCurrentUser } from \"@nextcloud/auth\";\nimport axios from \"@nextcloud/axios\";\nimport { getBuilder } from \"@nextcloud/browser-storage\";\nimport { unsubscribe, subscribe } from \"@nextcloud/event-bus\";\nimport { generateOcsUrl, generateUrl } from \"@nextcloud/router\";\nimport { vOnClickOutside } from \"@vueuse/components\";\nimport { N as NcActions, D as DotsHorizontalIcon } from \"./NcActions-DbPerbGE.mjs\";\nimport { g as getRoute } from \"./autolink-CeB9uxD9.mjs\";\nimport { useIsDarkTheme } from \"../Composables/useIsDarkTheme.mjs\";\nimport { getEnabledContactsMenuActions } from \"../Functions/contactsMenu.mjs\";\nimport { usernameToColor } from \"../Functions/usernameToColor.mjs\";\nimport { r as register, s as t10, a as t } from \"./_l10n-DVz9Qdzk.mjs\";\nimport \"../Composables/useIsFullscreen.mjs\";\nimport \"../Composables/useIsMobile.mjs\";\nimport \"escape-html\";\nimport \"striptags\";\nimport \"vue\";\nimport { g as getAvatarUrl } from \"./getAvatarUrl-BGOeDmNO.mjs\";\n/* empty css                                                                          */\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport { N as NcUserStatusIcon, g as getUserStatusText } from \"./NcUserStatusIcon-DdPPN-cP.mjs\";\nimport { N as NcActionButton } from \"./NcActionButton-K4jUGMlW.mjs\";\nimport NcActionLink from \"../Components/NcActionLink.mjs\";\nimport NcActionRouter from \"../Components/NcActionRouter.mjs\";\nimport NcActionText from \"../Components/NcActionText.mjs\";\nimport { N as NcButton } from \"./NcButton-CCWEL9Ci.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport NcLoadingIcon from \"../Components/NcLoadingIcon.mjs\";\nregister(t10);\nconst userStatus = {\n  data() {\n    return {\n      hasStatus: false,\n      userStatus: {\n        status: null,\n        message: null,\n        icon: null\n      }\n    };\n  },\n  methods: {\n    /**\n     * Fetches the user-status from the server\n     *\n     * @param {string} userId UserId of the user to fetch the status for\n     *\n     * @return {Promise<void>}\n     */\n    async fetchUserStatus(userId) {\n      if (!userId) {\n        return;\n      }\n      const capabilities = getCapabilities();\n      if (!Object.hasOwn(capabilities, \"user_status\") || !capabilities.user_status.enabled) {\n        return;\n      }\n      if (!getCurrentUser()) {\n        return;\n      }\n      try {\n        const { data } = await axios.get(generateOcsUrl(\"apps/user_status/api/v1/statuses/{userId}\", { userId }));\n        this.setUserStatus(data.ocs.data);\n      } catch (error) {\n        if (error.response.status === 404 && error.response.data.ocs?.data?.length === 0) {\n          return;\n        }\n        logger.error(\"Could not fetch user status\", { error });\n      }\n    },\n    /**\n     * Sets the user status\n     *\n     * @param {string} status user's status\n     * @param {string} message user's message\n     * @param {string} icon user's icon\n     */\n    setUserStatus({ status, message, icon }) {\n      this.userStatus.status = status || \"\";\n      this.userStatus.message = message || \"\";\n      this.userStatus.icon = icon || \"\";\n      this.hasStatus = !!status;\n    }\n  }\n};\nconst browserStorage = getBuilder(\"nextcloud\").persist().build();\nfunction getUserHasAvatar(userId) {\n  const flag = browserStorage.getItem(\"user-has-avatar.\" + userId);\n  if (typeof flag === \"string\") {\n    return Boolean(flag);\n  }\n  return null;\n}\nfunction setUserHasAvatar(userId, flag) {\n  if (userId) {\n    browserStorage.setItem(\"user-has-avatar.\" + userId, flag);\n  }\n}\nconst _sfc_main = {\n  name: \"NcAvatar\",\n  directives: {\n    ClickOutside: vOnClickOutside\n  },\n  components: {\n    IconDotsHorizontal: DotsHorizontalIcon,\n    NcActions,\n    NcButton,\n    NcIconSvgWrapper,\n    NcLoadingIcon,\n    NcUserStatusIcon\n  },\n  mixins: [userStatus],\n  props: {\n    /**\n     * Set a custom url to the avatar image\n     * either the url, user or displayName property must be defined\n     */\n    url: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Set a css icon-class for an icon to be used instead of the avatar.\n     */\n    iconClass: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Set the user id to fetch the avatar\n     * either the url, user or displayName property must be defined\n     */\n    user: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Do not show the user status on the avatar.\n     */\n    hideStatus: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Whether or not to display the user-status.\n     *\n     * @deprecated - Use `hideStatus` instead. Will be removed with v9.\n     */\n    showUserStatus: {\n      type: Boolean,\n      // eslint-disable-next-line vue/no-boolean-default\n      default: true\n    },\n    /**\n     * Show the verbose user status (e.g. \"online\" / \"away\") instead of just the status icon.\n     */\n    verboseStatus: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Whether or not to the status-icon should be used instead of online/away\n     *\n     * @deprecated - Use `verboseStatus` instead. Will be removed with v9.\n     */\n    showUserStatusCompact: {\n      type: Boolean,\n      // eslint-disable-next-line vue/no-boolean-default\n      default: true\n    },\n    /**\n     * When the user status was preloaded via another source it can be handed in with this property to save the request.\n     * If this property is not set the status will be fetched automatically.\n     * If a preloaded no-status is available provide this object with properties \"status\", \"icon\" and \"message\" set to null.\n     */\n    preloadedUserStatus: {\n      type: Object,\n      default: void 0\n    },\n    /**\n     * Is the user a guest user (then we have to user a different endpoint)\n     */\n    isGuest: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Set a display name that will be rendered as a tooltip\n     * either the url, user or displayName property must be defined\n     * specify just the displayname to generate a placeholder avatar without\n     * trying to fetch the avatar based on the user id\n     */\n    displayName: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Set a size in px for the rendered avatar\n     */\n    size: {\n      type: Number,\n      default: 32\n    },\n    /**\n     * Do not automatically generate a placeholder avatars if there is no real avatar is available.\n     */\n    noPlaceholder: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Placeholder avatars will be automatically generated when this is set to true.\n     *\n     * @deprecated - Use `noPlaceholder` instead. Will be removed in v9.\n     */\n    allowPlaceholder: {\n      type: Boolean,\n      // eslint-disable-next-line vue/no-boolean-default\n      default: true\n    },\n    /**\n     * Disable the tooltip\n     */\n    disableTooltip: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Disable the menu\n     */\n    disableMenu: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Declares a custom tooltip when not null\n     * Fallback will be the displayName\n     *\n     * requires disableTooltip not to be set to true\n     */\n    tooltipMessage: {\n      type: String,\n      default: null\n    },\n    /**\n     * Declares username is not a user's name, when true.\n     * Prevents loading user's avatar from server and forces generating colored initials,\n     * i.e. if the user is a group\n     */\n    isNoUser: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Selector for the popover menu container\n     */\n    menuContainer: {\n      type: [Boolean, String, Object, Element],\n      default: \"body\"\n    }\n  },\n  setup() {\n    const isDarkTheme = useIsDarkTheme();\n    return {\n      isDarkTheme\n    };\n  },\n  data() {\n    return {\n      avatarUrlLoaded: null,\n      avatarSrcSetLoaded: null,\n      userDoesNotExist: false,\n      isAvatarLoaded: false,\n      isMenuLoaded: false,\n      contactsMenuLoading: false,\n      contactsMenuData: {},\n      contactsMenuActions: [],\n      contactsMenuOpenState: false\n    };\n  },\n  computed: {\n    avatarAriaLabel() {\n      if (!this.hasMenu) {\n        return;\n      }\n      if (this.canDisplayUserStatus || this.showUserStatusIconOnAvatar) {\n        return t(\"Avatar of {displayName}, {status}\", { displayName: this.displayName ?? this.user, status: getUserStatusText(this.userStatus.status) });\n      }\n      return t(\"Avatar of {displayName}\", { displayName: this.displayName ?? this.user });\n    },\n    canDisplayUserStatus() {\n      return !this.hideStatus && this.showUserStatus && this.hasStatus && [\"online\", \"away\", \"busy\", \"dnd\"].includes(this.userStatus.status);\n    },\n    showUserStatusIconOnAvatar() {\n      return !this.hideStatus && this.showUserStatus && !this.verboseStatus && this.showUserStatusCompact && this.hasStatus && this.userStatus.status !== \"dnd\" && this.userStatus.icon;\n    },\n    /**\n     * The user identifier, either the display name if set or the user property\n     * If both properties are not set an empty string is returned\n     */\n    userIdentifier() {\n      if (this.isDisplayNameDefined) {\n        return this.displayName;\n      }\n      if (this.isUserDefined) {\n        return this.user;\n      }\n      return \"\";\n    },\n    isUserDefined() {\n      return typeof this.user !== \"undefined\";\n    },\n    isDisplayNameDefined() {\n      return typeof this.displayName !== \"undefined\";\n    },\n    isUrlDefined() {\n      return typeof this.url !== \"undefined\";\n    },\n    hasMenu() {\n      if (this.disableMenu) {\n        return false;\n      }\n      if (this.isMenuLoaded) {\n        return this.menu.length > 0;\n      }\n      return !(this.user === getCurrentUser()?.uid || this.userDoesNotExist || this.url);\n    },\n    /**\n     * True if initials should be shown as the user icon fallback\n     */\n    showInitials() {\n      return !this.noPlaceholder && this.allowPlaceholder && this.userDoesNotExist && !(this.iconClass || this.$scopedSlots.icon);\n    },\n    avatarStyle() {\n      return {\n        \"--avatar-size\": this.size + \"px\",\n        lineHeight: this.showInitials ? this.size + \"px\" : 0,\n        fontSize: Math.round(this.size * 0.45) + \"px\"\n      };\n    },\n    initialsWrapperStyle() {\n      const { r, g, b } = usernameToColor(this.userIdentifier);\n      return {\n        backgroundColor: `rgba(${r}, ${g}, ${b}, 0.1)`\n      };\n    },\n    initialsStyle() {\n      const { r, g, b } = usernameToColor(this.userIdentifier);\n      return {\n        color: `rgb(${r}, ${g}, ${b})`\n      };\n    },\n    tooltip() {\n      if (this.disableTooltip) {\n        return false;\n      }\n      if (this.tooltipMessage) {\n        return this.tooltipMessage;\n      }\n      return this.displayName;\n    },\n    /**\n     * Get the (max. two) initials of the user as uppcase string\n     */\n    initials() {\n      let initials = \"?\";\n      if (this.showInitials) {\n        const user = this.userIdentifier.trim();\n        if (user === \"\") {\n          return initials;\n        }\n        const filteredChars = user.match(/[\\p{L}\\p{N}\\s]/gu);\n        if (!filteredChars) {\n          return initials;\n        }\n        const filtered = filteredChars.join(\"\");\n        const idx = filtered.lastIndexOf(\" \");\n        initials = String.fromCodePoint(filtered.codePointAt(0));\n        if (idx !== -1) {\n          initials = initials.concat(String.fromCodePoint(filtered.codePointAt(idx + 1)));\n        }\n      }\n      return initials.toLocaleUpperCase();\n    },\n    menu() {\n      const actions = this.contactsMenuActions.map((item) => {\n        const route = getRoute(this.$router, item.hyperlink);\n        return {\n          ncActionComponent: route ? NcActionRouter : NcActionLink,\n          ncActionComponentProps: route ? {\n            to: route,\n            icon: item.icon\n          } : {\n            href: item.hyperlink,\n            icon: item.icon\n          },\n          text: item.title\n        };\n      });\n      for (const action of getEnabledContactsMenuActions(this.contactsMenuData)) {\n        try {\n          actions.push({\n            ncActionComponent: NcActionButton,\n            ncActionComponentProps: {},\n            ncActionComponentHandlers: {\n              click: () => action.callback(this.contactsMenuData)\n            },\n            text: action.displayName(this.contactsMenuData),\n            iconSvg: action.iconSvg(this.contactsMenuData)\n          });\n        } catch (error) {\n          logger.error(`Failed to render ContactsMenu action ${action.id}`, {\n            error,\n            action\n          });\n        }\n      }\n      function escape(html) {\n        const text = document.createTextNode(html);\n        const p = document.createElement(\"p\");\n        p.appendChild(text);\n        return p.innerHTML;\n      }\n      if (!this.hideStatus && this.showUserStatus && (this.userStatus.icon || this.userStatus.message)) {\n        const emojiIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t<text x=\"50%\" y=\"50%\" text-anchor=\"middle\" style=\"dominant-baseline: central; font-size: 85%\">${escape(this.userStatus.icon)}</text>\n\t\t\t\t</svg>`;\n        return [{\n          ncActionComponent: NcActionText,\n          ncActionComponentProps: {},\n          iconSvg: this.userStatus.icon ? emojiIcon : void 0,\n          text: `${this.userStatus.message}`\n        }].concat(actions);\n      }\n      return actions;\n    }\n  },\n  watch: {\n    url() {\n      this.userDoesNotExist = false;\n      this.loadAvatarUrl();\n    },\n    user() {\n      this.userDoesNotExist = false;\n      this.isMenuLoaded = false;\n      this.loadAvatarUrl();\n    }\n  },\n  mounted() {\n    this.loadAvatarUrl();\n    subscribe(\"settings:avatar:updated\", this.loadAvatarUrl);\n    subscribe(\"settings:display-name:updated\", this.loadAvatarUrl);\n    if (!this.hideStatus && this.showUserStatus && this.user && !this.isNoUser) {\n      if (!this.preloadedUserStatus) {\n        this.fetchUserStatus(this.user);\n      } else {\n        this.setUserStatus(this.preloadedUserStatus);\n      }\n      subscribe(\"user_status:status.updated\", this.handleUserStatusUpdated);\n    } else if (!this.hideStatus && this.preloadedUserStatus) {\n      this.setUserStatus(this.preloadedUserStatus);\n    }\n  },\n  beforeDestroy() {\n    unsubscribe(\"settings:avatar:updated\", this.loadAvatarUrl);\n    unsubscribe(\"settings:display-name:updated\", this.loadAvatarUrl);\n    unsubscribe(\"user_status:status.updated\", this.handleUserStatusUpdated);\n  },\n  methods: {\n    t,\n    handleUserStatusUpdated(state) {\n      if (this.user === state.userId) {\n        this.userStatus = {\n          status: state.status,\n          icon: state.icon,\n          message: state.message\n        };\n        this.hasStatus = state.status !== null;\n      }\n    },\n    /**\n     * Toggle the popover menu on click or enter\n     *\n     * @param {KeyboardEvent|MouseEvent} event the UI event\n     */\n    async toggleMenu(event) {\n      if (event.type === \"keydown\" && event.key !== \"Enter\") {\n        return;\n      }\n      if (!this.contactsMenuOpenState) {\n        await this.fetchContactsMenu();\n      }\n      this.contactsMenuOpenState = !this.contactsMenuOpenState;\n    },\n    closeMenu() {\n      this.contactsMenuOpenState = false;\n    },\n    async fetchContactsMenu() {\n      this.contactsMenuLoading = true;\n      try {\n        const user = encodeURIComponent(this.user);\n        const { data } = await axios.post(generateUrl(\"contactsmenu/findOne\"), `shareType=0&shareWith=${user}`);\n        this.contactsMenuData = data;\n        this.contactsMenuActions = data.topAction ? [data.topAction].concat(data.actions) : data.actions;\n      } catch {\n        this.contactsMenuOpenState = false;\n      }\n      this.contactsMenuLoading = false;\n      this.isMenuLoaded = true;\n    },\n    /**\n     * Handle avatar loading if user or url defined\n     */\n    loadAvatarUrl() {\n      this.isAvatarLoaded = false;\n      if (!this.isUrlDefined && (!this.isUserDefined || this.isNoUser || this.iconClass || this.$scopedSlots.icon)) {\n        this.isAvatarLoaded = true;\n        this.userDoesNotExist = true;\n        return;\n      }\n      if (this.isUrlDefined) {\n        this.updateImageIfValid(this.url);\n        return;\n      }\n      if (this.size <= 64) {\n        const avatarUrl = this.avatarUrlGenerator(this.user, 64);\n        const srcset = [\n          avatarUrl + \" 1x\",\n          this.avatarUrlGenerator(this.user, 512) + \" 8x\"\n        ].join(\", \");\n        this.updateImageIfValid(avatarUrl, srcset);\n      } else {\n        const avatarUrl = this.avatarUrlGenerator(this.user, 512);\n        this.updateImageIfValid(avatarUrl);\n      }\n    },\n    /**\n     * Generate an avatar url from the server's avatar endpoint\n     *\n     * @param {string} user the user id\n     * @param {number} size the desired size\n     * @return {string}\n     */\n    avatarUrlGenerator(user, size) {\n      let avatarUrl = getAvatarUrl(user, {\n        size,\n        isDarkTheme: this.isDarkTheme,\n        isGuest: this.isGuest\n      });\n      if (user === getCurrentUser()?.uid && typeof window.oc_userconfig !== \"undefined\") {\n        avatarUrl += \"?v=\" + window.oc_userconfig.avatar.version;\n      }\n      return avatarUrl;\n    },\n    /**\n     * Check if the provided url is valid and update Avatar if so\n     *\n     * @param {string} url the avatar url\n     * @param {Array} srcset the avatar srcset\n     */\n    updateImageIfValid(url, srcset = null) {\n      const userHasAvatar = getUserHasAvatar(this.user);\n      if (this.isUserDefined && typeof userHasAvatar === \"boolean\") {\n        this.isAvatarLoaded = true;\n        this.avatarUrlLoaded = url;\n        if (srcset) {\n          this.avatarSrcSetLoaded = srcset;\n        }\n        if (userHasAvatar === false) {\n          this.userDoesNotExist = true;\n        }\n        return;\n      }\n      const img = new Image();\n      img.onload = () => {\n        this.avatarUrlLoaded = url;\n        if (srcset) {\n          this.avatarSrcSetLoaded = srcset;\n        }\n        this.isAvatarLoaded = true;\n        setUserHasAvatar(this.user, true);\n      };\n      img.onerror = (error) => {\n        logger.debug(\"Invalid avatar url\", { error, url });\n        this.avatarUrlLoaded = null;\n        this.avatarSrcSetLoaded = null;\n        this.userDoesNotExist = true;\n        this.isAvatarLoaded = false;\n        setUserHasAvatar(this.user, false);\n      };\n      if (srcset) {\n        img.srcset = srcset;\n      }\n      img.src = url;\n    }\n  }\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"span\", { directives: [{ name: \"click-outside\", rawName: \"v-click-outside\", value: _vm.closeMenu, expression: \"closeMenu\" }], staticClass: \"avatardiv popovermenu-wrapper\", class: {\n    \"avatardiv--unknown\": _vm.userDoesNotExist,\n    \"avatardiv--with-menu\": _vm.hasMenu,\n    \"avatardiv--with-menu-loading\": _vm.contactsMenuLoading\n  }, style: _vm.avatarStyle, attrs: { \"title\": _vm.tooltip } }, [_vm._t(\"icon\", function() {\n    return [_vm.iconClass ? _c(\"span\", { staticClass: \"avatar-class-icon\", class: _vm.iconClass }) : _vm.isAvatarLoaded && !_vm.userDoesNotExist ? _c(\"img\", { attrs: { \"src\": _vm.avatarUrlLoaded, \"srcset\": _vm.avatarSrcSetLoaded, \"alt\": \"\" } }) : _vm._e()];\n  }), _vm.hasMenu && _vm.menu.length === 0 ? _c(\"NcButton\", { staticClass: \"action-item action-item__menutoggle\", attrs: { \"aria-label\": _vm.avatarAriaLabel, \"variant\": \"tertiary-no-background\" }, on: { \"click\": _vm.toggleMenu }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n    return [_vm.contactsMenuLoading ? _c(\"NcLoadingIcon\") : _c(\"IconDotsHorizontal\", { attrs: { \"size\": 20 } })];\n  }, proxy: true }], null, false, 1269954734) }) : _vm.hasMenu ? _c(\"NcActions\", { attrs: { \"aria-label\": _vm.avatarAriaLabel, \"container\": _vm.menuContainer, \"force-menu\": \"\", \"manual-open\": \"\", \"open\": _vm.contactsMenuOpenState, \"variant\": \"tertiary-no-background\" }, on: { \"update:open\": function($event) {\n    _vm.contactsMenuOpenState = $event;\n  }, \"click\": _vm.toggleMenu }, scopedSlots: _vm._u([_vm.contactsMenuLoading ? { key: \"icon\", fn: function() {\n    return [_c(\"NcLoadingIcon\")];\n  }, proxy: true } : null], null, true) }, _vm._l(_vm.menu, function(item, key) {\n    return _c(item.ncActionComponent, _vm._g(_vm._b({ key, tag: \"component\", scopedSlots: _vm._u([item.iconSvg ? { key: \"icon\", fn: function() {\n      return [_c(\"NcIconSvgWrapper\", { attrs: { \"svg\": item.iconSvg } })];\n    }, proxy: true } : null], null, true) }, \"component\", item.ncActionComponentProps, false), item.ncActionComponentHandlers), [_vm._v(\" \" + _vm._s(item.text) + \" \")]);\n  }), 1) : _vm._e(), _vm.showUserStatusIconOnAvatar ? _c(\"span\", { staticClass: \"avatardiv__user-status avatardiv__user-status--icon\" }, [_vm._v(\" \" + _vm._s(_vm.userStatus.icon) + \" \")]) : _vm.canDisplayUserStatus ? _c(\"NcUserStatusIcon\", { staticClass: \"avatardiv__user-status\", attrs: { \"status\": _vm.userStatus.status, \"aria-hidden\": String(_vm.hasMenu) } }) : _vm._e(), _vm.showInitials ? _c(\"span\", { staticClass: \"avatardiv__initials-wrapper\", style: _vm.initialsWrapperStyle }, [_c(\"span\", { staticClass: \"avatardiv__initials\", style: _vm.initialsStyle }, [_vm._v(\" \" + _vm._s(_vm.initials) + \" \")])]) : _vm._e()], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"a4de1e87\"\n);\nconst NcAvatar = __component__.exports;\nexport {\n  NcAvatar as N,\n  userStatus as u\n};\n//# sourceMappingURL=NcAvatar-DkAX4nqq.mjs.map\n"],"names":["isFullscreen","ref","checkIfIsFullscreen","readonly","global","Symbol","name","STATE_PLAINTEXT","STATE_HTML","STATE_COMMENT","ALLOWED_TAGS_REGEX","NORMALIZE_TAG_REGEX","striptags","html","allowable_tags","tag_replacement","context","init_context","striptags_internal","init_striptags_stream","parse_allowable_tags","state","tag_buffer","depth","in_quote_char","output","idx","length","char","normalize_tag","tag_set","match","module","this","checkIfDarkTheme","el","backgroundInvertIfDark","INJECTION_KEY_THEME","useIsDarkThemeElement","element","computed","toValue","isDarkTheme","isDarkSystemTheme","usePreferredDark","updateIsDarkTheme","useMutationObserver","watch","useInternalIsDarkTheme","createSharedComposable","useIsDarkTheme","enforcedTheme","inject","defaultWindow","isClient","unrefElement","elRef","_a","plain","useEventListener","args","target","events","listeners","options","noop","cleanups","cleanup","fn","register","event","listener","options2","stopWatch","optionsClone","isObject","stop","tryOnScopeDispose","_iOSWorkaround","onClickOutside","handler","window","ignore","capture","detectIframe","isIOS","shouldListen","shouldIgnore","target2","hasMultipleRoots","vm","checkMultipleRoots","children","child","isProcessingClick","e","vOnClickOutside","directiveHooks","binding","resolveElement","checkOverflowScroll","ele","style","parent","preventDefault","rawEvent","_target","elInitialOverflow","useScrollLock","initialState","isLocked","stopTouchMoveListener","initialOverflow","toRef","lock","unlock","v","onScrollLock","isMounted","getRoute","router","url","removePrefix","str","prefix","removePrefixes","prefixes","acc","isAbsoluteURL","isNonHttpLink","getBaseUrl","relativeUrl","relativeRouterBase","getRootUrl","potentialRouterPath","route","getEnabledContactsMenuActions","entry","action","base64map","crypt","n","b","i","bytes","words","hex","c","base64","triplet","j","imod4","cryptModule","charenc","charenc_1","isBuffer_1","obj","isBuffer","isSlowBuffer","require$$0","utf8","require$$1","require$$2","bin","md5","message","m","l","a","d","FF","GG","HH","II","aa","bb","cc","dd","x","s","t","md5Module","digestbytes","t3","Color","r","g","toHex","int","calculateStepIncrement","steps","color1","color2","mixPalette","palette","increment","COLOR_RED","COLOR_YELLOW","COLOR_BLUE","COLOR_BLACK","COLOR_WHITE","defaultPalette","generatePalette","palette1","palette2","palette3","usernameToColor","username","hash","finalPalette","hashToInt","hash2","maximum","finalInt","result","getAvatarUrl","user","size","guestUrl","themeUrl","generateUrl","awayLegacySvg","awaySvg","busySvg","dndLegacySvg","dndSvg","invisibleLegacySvg","invisibleSvg","onlineLegacySvg","onlineSvg","t53","t11","getUserStatusText","status","matchSvg","isLegacy32","_sfc_main","value","getCapabilities","data","axios","generateOcsUrl","_sfc_render","_vm","_c","_sfc_staticRenderFns","__component__","normalizeComponent","NcUserStatusIcon","ActionTextMixin","NcActionLink","$event","NcActionRouter","NcActionText","t10","userStatus","userId","capabilities","getCurrentUser","error","logger","icon","browserStorage","getBuilder","getUserHasAvatar","flag","setUserHasAvatar","DotsHorizontalIcon","NcActions","NcButton","NcIconSvgWrapper","NcLoadingIcon","initials","filteredChars","filtered","actions","item","NcActionButton","escape","text","p","emojiIcon","subscribe","unsubscribe","avatarUrl","srcset","userHasAvatar","img","key","NcAvatar"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}