diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php index 3a265e876a535..5172194dd8ba1 100644 --- a/apps/files/lib/Controller/ViewController.php +++ b/apps/files/lib/Controller/ViewController.php @@ -288,16 +288,9 @@ public function index($dir = '', $view = '', $fileid = null, $fileNotFound = fal $this->initialState->provideInitialState('templates_path', $this->templateManager->hasTemplateDirectory() ? $this->templateManager->getTemplatePath() : false); $this->initialState->provideInitialState('templates', $this->templateManager->listCreators()); - $params = [ - 'fileNotFound' => $fileNotFound ? 1 : 0, - 'id-app-content' => '#app-content-vue', - 'id-app-navigation' => '#app-navigation-vue', - ]; - $response = new TemplateResponse( Application::APP_ID, 'index', - $params ); $policy = new ContentSecurityPolicy(); $policy->addAllowedFrameDomain('\'self\''); diff --git a/apps/files/src/FilesApp.vue b/apps/files/src/FilesApp.vue new file mode 100644 index 0000000000000..a2a7f495c097b --- /dev/null +++ b/apps/files/src/FilesApp.vue @@ -0,0 +1,25 @@ + + + diff --git a/apps/files/src/components/FileEntry/FileEntryActions.vue b/apps/files/src/components/FileEntry/FileEntryActions.vue index d9d8cefdbad03..02b1d9e6183b0 100644 --- a/apps/files/src/components/FileEntry/FileEntryActions.vue +++ b/apps/files/src/components/FileEntry/FileEntryActions.vue @@ -346,7 +346,7 @@ export default Vue.extend({ \n * ```\n */\n navigationClasses: {\n type: [String, Array, Object],\n required: !1,\n default: \"\"\n },\n /**\n * Optionally pass additionaly classes which will be set on the content wrapper for custom styling\n * @default ''\n */\n contentClasses: {\n type: [String, Array, Object],\n required: !1,\n default: \"\"\n },\n /**\n * Optionally pass additionaly classes which will be set on the dialog itself\n * (the default `class` attribute will be set on the modal wrapper)\n * @default ''\n */\n dialogClasses: {\n type: [String, Array, Object],\n required: !1,\n default: \"\"\n }\n },\n emits: [\"closing\", \"update:open\"],\n setup(a, { emit: e, slots: t }) {\n const n = l(), { width: o } = g(n, { width: 900 }), c = i(() => o.value < 876), u = i(() => (t == null ? void 0 : t.navigation) !== void 0), _ = l(C()), s = l(!0), f = () => {\n r(), window.setTimeout(() => d(), 300);\n }, r = () => {\n s.value = !1, e(\"closing\");\n }, d = () => {\n s.value = !0, e(\"update:open\", !1);\n }, p = i(() => ({\n canClose: a.canClose,\n container: a.container === void 0 ? \"body\" : a.container,\n // we do not pass the name as we already have the name as the headline\n // name: props.name,\n size: a.size,\n show: a.open && s.value,\n outTransition: a.outTransition,\n class: \"dialog__modal\",\n closeOnClickOutside: !1,\n enableSlideshow: !1,\n enableSwipe: !1\n }));\n return {\n handleButtonClose: f,\n handleClosing: r,\n handleClosed: d,\n hasNavigation: u,\n navigationId: _,\n isNavigationCollapsed: c,\n modalProps: p,\n wrapper: n\n };\n }\n});\nvar b = function() {\n var e = this, t = e._self._c;\n return e._self._setupProxy, e.open ? t(\"NcModal\", e._b({ on: { close: e.handleClosed, \"update:show\": e.handleClosing } }, \"NcModal\", e.modalProps, !1), [t(\"h2\", { staticClass: \"dialog__name\", attrs: { id: e.navigationId }, domProps: { textContent: e._s(e.name) } }), t(\"div\", { staticClass: \"dialog\", class: e.dialogClasses }, [t(\"div\", { ref: \"wrapper\", class: [\"dialog__wrapper\", { \"dialog__wrapper--collapsed\": e.isNavigationCollapsed }] }, [e.hasNavigation ? t(\"nav\", { staticClass: \"dialog__navigation\", class: e.navigationClasses, attrs: { \"aria-labelledby\": e.navigationId } }, [e._t(\"navigation\", null, { isCollapsed: e.isNavigationCollapsed })], 2) : e._e(), t(\"div\", { staticClass: \"dialog__content\", class: e.contentClasses }, [e._t(\"default\", function() {\n return [t(\"p\", { staticClass: \"dialog__text\" }, [e._v(\" \" + e._s(e.message) + \" \")])];\n })], 2)]), t(\"div\", { staticClass: \"dialog__actions\" }, [e._t(\"actions\", function() {\n return e._l(e.buttons, function(n, o) {\n return t(\"NcDialogButton\", e._b({ key: o, on: { click: e.handleButtonClose } }, \"NcDialogButton\", n, !1));\n });\n })], 2)])]) : e._e();\n}, w = [], S = /* @__PURE__ */ h(\n N,\n b,\n w,\n !1,\n null,\n \"758f0283\",\n null,\n null\n);\nconst T = S.exports;\nexport {\n T as default\n};\n","import { defineComponent as o } from \"vue\";\nimport l from \"./NcButton.mjs\";\nimport i from \"./NcIconSvgWrapper.mjs\";\nimport { n as a } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst u = o({\n name: \"NcDialogButton\",\n components: {\n NcButton: l,\n NcIconSvgWrapper: i\n },\n props: {\n /**\n * The function that will be called when the button is pressed\n * @type {() => void}\n */\n callback: {\n type: Function,\n required: !0\n },\n /**\n * The label of the button\n */\n label: {\n type: String,\n required: !0\n },\n /**\n * Optional inline SVG icon for the button\n */\n icon: {\n type: String,\n required: !1,\n default: void 0\n },\n /**\n * The button type, see NcButton\n * @type {'primary'|'secondary'|'error'|'warning'|'success'}\n */\n type: {\n type: String,\n required: !1,\n default: \"secondary\",\n validator: (n) => typeof n == \"string\" && [\"primary\", \"secondary\", \"error\", \"warning\", \"success\"].includes(n)\n }\n },\n emits: [\"click\"],\n setup(n, { emit: e }) {\n return { handleClick: (c) => {\n var r;\n (r = n.callback) == null || r.call(n), e(\"click\", c);\n } };\n }\n});\nvar s = function() {\n var e = this, t = e._self._c;\n return e._self._setupProxy, t(\"NcButton\", { attrs: { \"aria-label\": e.label, type: e.type }, on: { click: e.handleClick }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n return [e._t(\"icon\", function() {\n return [e.icon !== void 0 ? t(\"NcIconSvgWrapper\", { attrs: { svg: e.icon } }) : e._e()];\n })];\n }, proxy: !0 }], null, !0) }, [e._v(\" \" + e._s(e.label) + \" \")]);\n}, d = [], f = /* @__PURE__ */ a(\n u,\n s,\n d,\n !1,\n null,\n null,\n null,\n null\n);\nconst g = f.exports;\nexport {\n g as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-a2b51bce.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-a2b51bce.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-a2b51bce.css\";\nimport { N as i, F as n } from \"../chunks/index-20a9ace9.mjs\";\nimport { n as r } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst a = {\n name: \"NcEllipsisedOption\",\n components: {\n NcHighlight: i\n },\n props: {\n name: {\n type: String,\n default: \"\"\n },\n search: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n needsTruncate() {\n return this.name && this.name.length >= 10;\n },\n /**\n * Index at which to split the name if it is longer than 10 characters.\n *\n * @return {number} The position at which to split\n */\n split() {\n return this.name.length - Math.min(Math.floor(this.name.length / 2), 10);\n },\n part1() {\n return this.needsTruncate ? this.name.slice(0, this.split) : this.name;\n },\n part2() {\n return this.needsTruncate ? this.name.slice(this.split) : \"\";\n },\n /**\n * The ranges to highlight. Since we split the string for ellipsising,\n * the Highlight component cannot figure this out itself and needs the ranges provided.\n *\n * @return {Array} The array with the ranges to highlight\n */\n highlight1() {\n return this.search ? n(this.name, this.search) : [];\n },\n /**\n * We shift the ranges for the second part by the position of the split.\n * Ranges out of the string length are discarded by the Highlight component,\n * so we don't need to take care of this here.\n *\n * @return {Array} The array with the ranges to highlight\n */\n highlight2() {\n return this.highlight1.map((e) => ({\n start: e.start - this.split,\n end: e.end - this.split\n }));\n }\n }\n};\nvar h = function() {\n var t = this, s = t._self._c;\n return s(\"span\", { staticClass: \"name-parts\", attrs: { title: t.name } }, [s(\"NcHighlight\", { staticClass: \"name-parts__first\", attrs: { text: t.part1, search: t.search, highlight: t.highlight1 } }), t.part2 ? s(\"NcHighlight\", { staticClass: \"name-parts__last\", attrs: { text: t.part2, search: t.search, highlight: t.highlight2 } }) : t._e()], 1);\n}, l = [], c = /* @__PURE__ */ r(\n a,\n h,\n l,\n !1,\n null,\n \"08c4259e\",\n null,\n null\n);\nconst g = c.exports;\nexport {\n g as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-2a8e4ca1.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-2a8e4ca1.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-2a8e4ca1.css\";\nimport n from \"./NcPopover.mjs\";\nimport c from \"./NcTextField.mjs\";\nimport { r as l, l as u, y as f, E as p, a as r } from \"../chunks/_l10n-f5af5269.mjs\";\nimport { Emoji as m, Picker as d, EmojiIndex as h } from \"emoji-mart-vue-fast\";\nimport v from \"emoji-mart-vue-fast/data/all.json\";\nimport { n as y } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nl(p, f, u);\nlet o;\nconst _ = {\n search: r(\"Search emoji\"),\n notfound: r(\"No emoji found\"),\n categories: {\n search: r(\"Search results\"),\n recent: r(\"Frequently used\"),\n smileys: r(\"Smileys & Emotion\"),\n people: r(\"People & Body\"),\n nature: r(\"Animals & Nature\"),\n foods: r(\"Food & Drink\"),\n activity: r(\"Activities\"),\n places: r(\"Travel & Places\"),\n objects: r(\"Objects\"),\n symbols: r(\"Symbols\"),\n flags: r(\"Flags\"),\n custom: r(\"Custom\")\n }\n}, k = {\n name: \"NcEmojiPicker\",\n components: {\n NcPopover: n,\n NcTextField: c,\n Emoji: m,\n Picker: d\n },\n props: {\n /**\n * The emoji-set\n */\n activeSet: {\n type: String,\n default: \"native\"\n },\n /**\n * Show preview section when hovering emoji\n */\n showPreview: {\n type: Boolean,\n default: !1\n },\n /**\n * Allow unselecting the selected emoji\n */\n allowUnselect: {\n type: Boolean,\n default: !1\n },\n /**\n * Selected emoji to allow unselecting\n */\n selectedEmoji: {\n type: String,\n default: \"\"\n },\n /**\n * The fallback emoji in the preview section\n */\n previewFallbackEmoji: {\n type: String,\n default: \"grinning\"\n },\n /**\n * The fallback text in the preview section\n */\n previewFallbackName: {\n type: String,\n default: r(\"Pick an emoji\")\n },\n /**\n * Whether to close the emoji picker after picking one\n */\n closeOnSelect: {\n type: Boolean,\n default: !0\n },\n /**\n * Selector for the popover container\n */\n container: {\n type: [String, Object, Element, Boolean],\n default: \"body\"\n }\n },\n emits: [\n \"select\",\n \"select-data\",\n \"unselect\"\n ],\n setup() {\n return o || (o = new h(v)), {\n // Non-reactive constants\n emojiIndex: o,\n i18n: _\n };\n },\n data() {\n return {\n search: \"\",\n open: !1\n };\n },\n computed: {\n native() {\n return this.activeSet === \"native\";\n }\n },\n methods: {\n t: r,\n clearSearch() {\n var e, t;\n this.search = \"\";\n const i = (t = (e = this.$refs.search) == null ? void 0 : e.$refs.inputField) == null ? void 0 : t.$refs.input;\n i && i.focus();\n },\n select(i) {\n this.$emit(\"select\", i.native), this.$emit(\"select-data\", i), this.closeOnSelect && (this.open = !1);\n },\n unselect() {\n this.$emit(\"unselect\");\n },\n afterShow() {\n var t, s;\n this.$refs.picker.$el.addEventListener(\"keydown\", this.checkKeyEvent);\n const e = (s = (t = this.$refs.search) == null ? void 0 : t.$refs.inputField) == null ? void 0 : s.$refs.input;\n e && e.focus();\n },\n afterHide() {\n this.$refs.picker.$el.removeEventListener(\"keydown\", this.checkKeyEvent);\n },\n checkKeyEvent(i) {\n if (i.key !== \"Tab\")\n return;\n const t = this.$refs.picker.$el.querySelectorAll(\n \"button, input\"\n ), s = t.length - 1;\n if (t.length <= 1) {\n i.preventDefault();\n return;\n }\n i.shiftKey === !1 && i.target === t[s] ? (i.preventDefault(), t[0].focus()) : i.shiftKey === !0 && i.target === t[0] && (i.preventDefault(), t[s].focus());\n }\n }\n};\nvar j = function() {\n var e = this, t = e._self._c;\n return t(\"NcPopover\", e._g(e._b({ attrs: { shown: e.open, container: e.container }, on: { \"update:shown\": function(s) {\n e.open = s;\n }, \"after-show\": e.afterShow, \"after-hide\": e.afterHide }, scopedSlots: e._u([{ key: \"trigger\", fn: function() {\n return [e._t(\"default\")];\n }, proxy: !0 }], null, !0) }, \"NcPopover\", e.$attrs, !1), e.$listeners), [t(\"Picker\", e._b({ ref: \"picker\", attrs: { \"auto-focus\": !1, color: \"var(--color-primary-element)\", data: e.emojiIndex, emoji: e.previewFallbackEmoji, i18n: e.i18n, native: e.native, \"emoji-size\": 20, \"per-line\": 8, \"picker-styles\": { width: \"320px\" }, \"show-preview\": e.showPreview, title: e.previewFallbackName }, on: { select: e.select }, scopedSlots: e._u([{ key: \"searchTemplate\", fn: function(s) {\n return [t(\"NcTextField\", { ref: \"search\", staticClass: \"search\", attrs: { value: e.search, label: e.t(\"Search\"), \"label-visible\": !0, placeholder: e.i18n.search, \"trailing-button-icon\": \"close\", \"trailing-button-label\": e.t(\"Clear search\"), \"show-trailing-button\": e.search !== \"\" }, on: { \"update:value\": [function(a) {\n e.search = a;\n }, function(a) {\n return s.onSearch(e.search);\n }], \"trailing-button-click\": function(a) {\n e.clearSearch(), s.onSearch(e.search);\n } } })];\n } }, e.allowUnselect && e.selectedEmoji ? { key: \"customCategory\", fn: function() {\n return [t(\"div\", { staticClass: \"emoji-mart-category-label\" }, [t(\"h3\", { staticClass: \"emoji-mart-category-label\" }, [e._v(\" \" + e._s(e.t(\"Selected\")) + \" \")])]), t(\"Emoji\", { staticClass: \"emoji-selected\", attrs: { data: e.emojiIndex, emoji: e.selectedEmoji, native: !0, size: 32 }, on: { click: e.unselect } }), t(\"Emoji\", { staticClass: \"emoji-delete\", attrs: { data: e.emojiIndex, emoji: \":x:\", native: !0, size: 10 }, on: { click: e.unselect } })];\n }, proxy: !0 } : null], null, !0) }, \"Picker\", e.$attrs, !1))], 1);\n}, g = [], b = /* @__PURE__ */ y(\n k,\n j,\n g,\n !1,\n null,\n \"4d56e499\",\n null,\n null\n);\nconst F = b.exports;\nexport {\n F as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-c239a2fc.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-c239a2fc.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-c239a2fc.css\";\nimport { n as s } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst i = {\n name: \"NcEmptyContent\",\n props: {\n /**\n * A header message about an empty content shown\n * @example 'No comments'\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Desription of the empty content\n * @example 'No comments yet, start the conversation!'\n */\n description: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n hasName() {\n return this.name !== \"\";\n },\n /**\n * Check if a description is given as either property or slot\n */\n hasDescription() {\n var e;\n return this.description !== \"\" || ((e = this.$slots.description) == null ? void 0 : e[0]);\n }\n }\n};\nvar o = function() {\n var t = this, n = t._self._c;\n return n(\"div\", { staticClass: \"empty-content\", attrs: { role: \"note\" } }, [t.$slots.icon ? n(\"div\", { staticClass: \"empty-content__icon\", attrs: { \"aria-hidden\": \"true\" } }, [t._t(\"icon\")], 2) : t._e(), t._t(\"name\", function() {\n return [t.hasName ? n(\"span\", { staticClass: \"empty-content__name\" }, [t._v(\" \" + t._s(t.name) + \" \")]) : t._e()];\n }), t.hasDescription ? n(\"p\", { staticClass: \"empty-content__description\" }, [t._t(\"description\", function() {\n return [t._v(\" \" + t._s(t.description) + \" \")];\n })], 2) : t._e(), t.$slots.action ? n(\"div\", { staticClass: \"empty-content__action\" }, [t._t(\"action\")], 2) : t._e()], 2);\n}, a = [], _ = /* @__PURE__ */ s(\n i,\n o,\n a,\n !1,\n null,\n \"458108e7\",\n null,\n null\n);\nconst p = _.exports;\nexport {\n p as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-8aa4712e.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-8aa4712e.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-8aa4712e.css\";\nimport { n } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst s = {\n name: \"NcGuestContent\",\n mounted() {\n document.getElementById(\"content\").classList.add(\"nc-guest-content\");\n },\n destroyed() {\n document.getElementById(\"content\").classList.remove(\"nc-guest-content\");\n }\n};\nvar _ = function() {\n var t = this, e = t._self._c;\n return e(\"div\", { attrs: { id: \"guest-content-vue\" } }, [t._t(\"default\")], 2);\n}, c = [], o = /* @__PURE__ */ n(\n s,\n _,\n c,\n !1,\n null,\n \"36ad47ca\",\n null,\n null\n);\nconst r = o.exports;\nexport {\n r as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-aacb7cf8.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-aacb7cf8.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-aacb7cf8.css\";\nimport { vOnClickOutside as n } from \"@vueuse/components\";\nimport { createFocusTrap as o } from \"focus-trap\";\nimport { G as s } from \"../chunks/GenRandomId-cb9ccebe.mjs\";\nimport a from \"../Mixins/clickOutsideOptions.mjs\";\nimport \"../Composables/useIsFullscreen.mjs\";\nimport \"../Composables/useIsMobile.mjs\";\nimport \"@nextcloud/router\";\n/* empty css */import { n as c } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nimport \"linkify-string\";\nimport \"escape-html\";\nimport \"striptags\";\nimport \"vue\";\nimport \"@nextcloud/auth\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/capabilities\";\nimport { g as d } from \"../chunks/focusTrap-5d0f71d4.mjs\";\nconst p = {\n name: \"NcHeaderMenu\",\n directives: {\n ClickOutside: n\n },\n mixins: [\n a\n ],\n props: {\n /**\n * Unique id for this menu\n */\n id: {\n type: String,\n required: !0\n },\n /**\n * aria-label attribute of the menu open button\n */\n ariaLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Current menu open state\n */\n open: {\n type: Boolean,\n default: !1\n },\n /**\n * Pass `true` if the header menu is used for website navigation\n *\n * The wrapper tag will be set to `nav` and its `aria-labelledby`\n * will be associated with the menu open button\n */\n isNav: {\n type: Boolean,\n default: !1\n },\n /**\n * Additional visually hidden description text for the menu\n * open button\n */\n description: {\n type: String,\n default: null\n }\n },\n emits: [\n \"close\",\n \"closed\",\n \"open\",\n \"opened\",\n \"update:open\",\n \"cancel\"\n ],\n data() {\n var t, e, i;\n return {\n focusTrap: null,\n opened: this.open,\n shortcutsDisabled: (i = (e = (t = window.OCP) == null ? void 0 : t.Accessibility) == null ? void 0 : e.disableKeyboardShortcuts) == null ? void 0 : i.call(e),\n triggerId: s(),\n descriptionId: s()\n };\n },\n computed: {\n wrapperTag() {\n return this.isNav ? \"nav\" : \"div\";\n },\n clickOutsideConfig() {\n return [\n this.closeMenu,\n this.clickOutsideOptions\n ];\n }\n },\n watch: {\n open(t) {\n t ? this.openMenu() : this.closeMenu();\n }\n },\n mounted() {\n document.addEventListener(\"keydown\", this.onKeyDown);\n },\n beforeDestroy() {\n document.removeEventListener(\"keydown\", this.onKeyDown);\n },\n methods: {\n /**\n * Toggle the current menu open state\n */\n toggleMenu() {\n this.opened ? this.closeMenu() : this.openMenu();\n },\n /**\n * Close the current menu\n *\n * @param {boolean} cancelled emit a cancel event instead of close\n */\n closeMenu(t = !1) {\n this.opened = !1, this.$emit(t ? \"cancel\" : \"close\"), this.$emit(\"update:open\", !1), this.clearFocusTrap(), this.$nextTick(() => {\n this.$emit(\"closed\");\n });\n },\n /**\n * Open the current menu\n */\n openMenu() {\n this.opened = !0, this.$emit(\"open\"), this.$emit(\"update:open\", !0), this.$nextTick(() => {\n this.useFocusTrap(), this.$emit(\"opened\");\n });\n },\n onKeyDown(t) {\n this.shortcutsDisabled || !this.opened || t.key === \"Escape\" && (t.preventDefault(), this.closeMenu(!0));\n },\n /**\n * Add focus trap for accessibility.\n * Shall only be used when all children are mounted\n * and available in the DOM. We use $nextTick for that.\n */\n async useFocusTrap() {\n if (this.focusTrap)\n return;\n const t = this.$refs.content;\n this.focusTrap = o(t, {\n allowOutsideClick: !0,\n trapStack: d(),\n fallbackFocus: this.$refs.trigger\n }), this.focusTrap.activate();\n },\n clearFocusTrap() {\n var t;\n (t = this.focusTrap) == null || t.deactivate(), this.focusTrap = null;\n }\n }\n};\nvar u = function() {\n var e = this, i = e._self._c;\n return i(e.wrapperTag, { directives: [{ name: \"click-outside\", rawName: \"v-click-outside\", value: e.clickOutsideConfig, expression: \"clickOutsideConfig\" }], tag: \"component\", staticClass: \"header-menu\", class: { \"header-menu--opened\": e.opened }, attrs: { id: e.id, \"aria-labelledby\": e.isNav ? e.triggerId : null } }, [i(\"button\", { ref: \"trigger\", staticClass: \"header-menu__trigger button-vue\", attrs: { id: e.isNav ? e.triggerId : null, \"aria-label\": e.ariaLabel, \"aria-describedby\": e.description ? e.descriptionId : null, \"aria-controls\": `header-menu-${e.id}`, \"aria-expanded\": e.opened.toString() }, on: { click: function(r) {\n return r.preventDefault(), e.toggleMenu.apply(null, arguments);\n } } }, [e._t(\"trigger\")], 2), e.description ? i(\"span\", { staticClass: \"header-menu__description hidden-visually\", attrs: { id: e.descriptionId } }, [e._v(\" \" + e._s(e.description) + \" \")]) : e._e(), i(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.opened, expression: \"opened\" }], staticClass: \"header-menu__carret\" }), i(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.opened, expression: \"opened\" }], staticClass: \"header-menu__wrapper\", attrs: { id: `header-menu-${e.id}` } }, [i(\"div\", { ref: \"content\", staticClass: \"header-menu__content\" }, [e._t(\"default\")], 2)])]);\n}, l = [], m = /* @__PURE__ */ c(\n p,\n u,\n l,\n !1,\n null,\n \"7358bc59\",\n null,\n null\n);\nconst I = m.exports;\nexport {\n I as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-57b305d3.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-57b305d3.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-57b305d3.css\";\nimport n from \"vue\";\nimport a from \"dompurify\";\nimport { n as s } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst i = {\n name: \"NcIconSvgWrapper\",\n props: {\n /**\n * Raw SVG string to render\n */\n svg: {\n type: String,\n default: \"\"\n },\n /**\n * Label of the icon, used in aria-label\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Raw SVG path to render. Takes precedence over the SVG string in the `svg` prop.\n */\n path: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n cleanSvg() {\n if (!this.svg || this.path)\n return;\n const r = a.sanitize(this.svg), e = new DOMParser().parseFromString(r, \"image/svg+xml\");\n return e.querySelector(\"parsererror\") ? (n.util.warn(\"SVG is not valid\"), \"\") : (e.documentElement.id && e.documentElement.removeAttribute(\"id\"), e.documentElement.outerHTML);\n },\n attributes() {\n return {\n class: \"icon-vue\",\n role: \"img\",\n \"aria-hidden\": this.name ? void 0 : !0,\n \"aria-label\": this.name || void 0\n };\n }\n }\n};\nvar o = function() {\n var e = this, t = e._self._c;\n return e.cleanSvg ? t(\"span\", e._b({ domProps: { innerHTML: e._s(e.cleanSvg) } }, \"span\", e.attributes, !1)) : t(\"span\", e._b({}, \"span\", e.attributes, !1), [t(\"svg\", { attrs: { viewBox: \"0 0 24 24\", xmlns: \"http://www.w3.org/2000/svg\" } }, [t(\"path\", { attrs: { d: e.path } })])]);\n}, p = [], u = /* @__PURE__ */ s(\n i,\n o,\n p,\n !1,\n null,\n \"6176f396\",\n null,\n null\n);\nconst v = u.exports;\nexport {\n v as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-2a1ec06b.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-2a1ec06b.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-2a1ec06b.css\";\nimport l from \"./NcButton.mjs\";\nimport { G as a } from \"../chunks/GenRandomId-cb9ccebe.mjs\";\nimport { A as s } from \"../chunks/AlertCircleOutline-b73838e0.mjs\";\nimport { C as n } from \"../chunks/Check-2ea0a88a.mjs\";\nimport { n as r } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst u = {\n name: \"NcInputField\",\n components: {\n NcButton: l,\n AlertCircle: s,\n Check: n\n },\n inheritAttrs: !1,\n props: {\n /**\n * The value of the input field\n */\n value: {\n type: String,\n required: !0\n },\n /**\n * The type of the input element\n */\n type: {\n type: String,\n default: \"text\",\n validator: (t) => [\n \"text\",\n \"password\",\n \"email\",\n \"tel\",\n \"url\",\n \"search\",\n \"number\"\n ].includes(t)\n },\n /**\n * The input label, always provide one for accessibility purposes.\n * This will also be used as a placeholder unless the placeholder\n * prop is populated with a different string.\n *\n * Note: If the background color is not `--color-main-background` consider using an external label instead (see `labelOutside`).\n */\n label: {\n type: String,\n default: void 0\n },\n /**\n * Pass in true if you want to use an external label. This is useful\n * if you need a label that looks different from the one provided by\n * this component\n */\n labelOutside: {\n type: Boolean,\n default: !1\n },\n /**\n * The placeholder of the input. This defaults as the string that's\n * passed into the label prop. In order to remove the placeholder,\n * pass in an empty string.\n */\n placeholder: {\n type: String,\n default: void 0\n },\n /**\n * Controls whether to display the trailing button.\n */\n showTrailingButton: {\n type: Boolean,\n default: !1\n },\n /**\n * Label of the trailing button\n *\n * Required when showTrailingButton is set\n */\n trailingButtonLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Toggles the success state of the component. Adds a checkmark icon.\n * this cannot be used together with canClear.\n */\n success: {\n type: Boolean,\n default: !1\n },\n /**\n * Toggles the error state of the component. Adds an error icon.\n * this cannot be used together with canClear.\n */\n error: {\n type: Boolean,\n default: !1\n },\n /**\n * Additional helper text message\n *\n * This will be displayed beneath the input field. In case the field is\n * also marked as having an error, the text will be displayed in red.\n */\n helperText: {\n type: String,\n default: \"\"\n },\n /**\n * Disable the input field\n */\n disabled: {\n type: Boolean,\n default: !1\n },\n /**\n * Specifies whether the input should have a pill form.\n * By default, input has rounded corners.\n */\n pill: {\n type: Boolean,\n default: !1\n },\n /**\n * Class to add to the input field.\n * Necessary to use NcInputField in the NcActionInput component.\n */\n inputClass: {\n type: [Object, String],\n default: \"\"\n }\n },\n emits: [\n \"update:value\",\n \"trailing-button-click\"\n ],\n computed: {\n computedId() {\n return this.$attrs.id && this.$attrs.id !== \"\" ? this.$attrs.id : this.inputName;\n },\n inputName() {\n return \"input\" + a();\n },\n hasLeadingIcon() {\n return this.$slots.default;\n },\n hasTrailingIcon() {\n return this.success;\n },\n hasPlaceholder() {\n return this.placeholder !== \"\" && this.placeholder !== void 0;\n },\n computedPlaceholder() {\n return this.hasPlaceholder ? this.placeholder : this.label;\n },\n isValidLabel() {\n const t = this.label || this.labelOutside;\n return t || console.warn(\"You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation.\"), t;\n },\n ariaDescribedby() {\n const t = [];\n return this.helperText.length > 0 && t.push(`${this.inputName}-helper-text`), this.$attrs[\"aria-describedby\"] && t.push(this.$attrs[\"aria-describedby\"]), t.join(\" \") || null;\n }\n },\n methods: {\n /**\n * Focus the input element\n *\n * @public\n */\n focus() {\n this.$refs.input.focus();\n },\n /**\n * Select all the text in the input\n *\n * @public\n */\n select() {\n this.$refs.input.select();\n },\n handleInput(t) {\n this.$emit(\"update:value\", t.target.value);\n },\n handleTrailingButtonClick(t) {\n this.$emit(\"trailing-button-click\", t);\n }\n }\n};\nvar o = function() {\n var e = this, i = e._self._c;\n return i(\"div\", { staticClass: \"input-field\", class: { \"input-field--disabled\": e.disabled } }, [i(\"div\", { staticClass: \"input-field__main-wrapper\" }, [i(\"input\", e._g(e._b({ ref: \"input\", staticClass: \"input-field__input\", class: [\n e.inputClass,\n {\n \"input-field__input--trailing-icon\": e.showTrailingButton || e.hasTrailingIcon,\n \"input-field__input--leading-icon\": e.hasLeadingIcon,\n \"input-field__input--label-outside\": e.labelOutside,\n \"input-field__input--success\": e.success,\n \"input-field__input--error\": e.error,\n \"input-field__input--pill\": e.pill\n }\n ], attrs: { id: e.computedId, type: e.type, disabled: e.disabled, placeholder: e.computedPlaceholder, \"aria-describedby\": e.ariaDescribedby, \"aria-live\": \"polite\" }, domProps: { value: e.value }, on: { input: e.handleInput } }, \"input\", e.$attrs, !1), e.$listeners)), !e.labelOutside && e.isValidLabel ? i(\"label\", { staticClass: \"input-field__label\", class: [{\n \"input-field__label--trailing-icon\": e.showTrailingButton || e.hasTrailingIcon,\n \"input-field__label--leading-icon\": e.hasLeadingIcon\n }], attrs: { for: e.computedId } }, [e._v(\" \" + e._s(e.label) + \" \")]) : e._e(), i(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.hasLeadingIcon, expression: \"hasLeadingIcon\" }], staticClass: \"input-field__icon input-field__icon--leading\" }, [e._t(\"default\")], 2), e.showTrailingButton ? i(\"NcButton\", { staticClass: \"input-field__trailing-button\", class: [{\n \"input-field__trailing-button--pill\": e.pill\n }], attrs: { type: \"tertiary-no-background\", \"aria-label\": e.trailingButtonLabel, disabled: e.disabled }, on: { click: e.handleTrailingButtonClick }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n return [e._t(\"trailing-button-icon\")];\n }, proxy: !0 }], null, !0) }) : e.success || e.error ? i(\"div\", { staticClass: \"input-field__icon input-field__icon--trailing\" }, [e.success ? i(\"Check\", { staticStyle: { color: \"var(--color-success-text)\" }, attrs: { size: 20 } }) : e.error ? i(\"AlertCircle\", { staticStyle: { color: \"var(--color-error-text)\" }, attrs: { size: 20 } }) : e._e()], 1) : e._e()], 1), e.helperText.length > 0 ? i(\"p\", { staticClass: \"input-field__helper-text-message\", class: {\n \"input-field__helper-text-message--error\": e.error,\n \"input-field__helper-text-message--success\": e.success\n }, attrs: { id: `${e.inputName}-helper-text` } }, [e.success ? i(\"Check\", { staticClass: \"input-field__helper-text-message__icon\", attrs: { size: 18 } }) : e.error ? i(\"AlertCircle\", { staticClass: \"input-field__helper-text-message__icon\", attrs: { size: 18 } }) : e._e(), e._v(\" \" + e._s(e.helperText) + \" \")], 1) : e._e()]);\n}, d = [], c = /* @__PURE__ */ r(\n u,\n o,\n d,\n !1,\n null,\n \"e8c696ab\",\n null,\n null\n);\nconst g = c.exports;\nexport {\n g as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-f24e102f.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-f24e102f.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-f24e102f.css\";\nimport l from \"./NcActions.mjs\";\nimport r from \"./NcCounterBubble.mjs\";\nimport c from \"./NcVNodes.mjs\";\nimport { r as u, D as d, a as h } from \"../chunks/_l10n-f5af5269.mjs\";\nimport { n as p } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nu(d);\nconst f = {\n name: \"NcListItem\",\n components: {\n NcActions: l,\n NcCounterBubble: r,\n NcVNodes: c\n },\n props: {\n /**\n * The details text displayed in the upper right part of the component\n */\n details: {\n type: String,\n default: \"\"\n },\n /**\n * Name (first line of text)\n */\n name: {\n type: String,\n required: !0\n },\n /**\n * Pass in `true` if you want the matching behavior to\n * be non-inclusive: https://router.vuejs.org/api/#exact\n */\n exact: {\n type: Boolean,\n default: !1\n },\n /**\n * The route for the router link.\n */\n to: {\n type: [String, Object],\n default: null\n },\n /**\n * The value for the external link\n */\n href: {\n type: String,\n default: \"#\"\n },\n target: {\n type: String,\n default: \"\"\n },\n /**\n * Id for the `` element\n */\n anchorId: {\n type: String,\n default: \"\"\n },\n /**\n * Make subname bold\n */\n bold: {\n type: Boolean,\n default: !1\n },\n /**\n * Show the NcListItem in compact design\n */\n compact: {\n type: Boolean,\n default: !1\n },\n /**\n * Toggle the active state of the component\n */\n active: {\n type: Boolean,\n default: !1\n },\n /**\n * Aria label for the wrapper element\n */\n linkAriaLabel: {\n type: String,\n default: \"\"\n },\n /**\n * Aria label for the actions toggle\n */\n actionsAriaLabel: {\n type: String,\n default: \"\"\n },\n /**\n * If different from 0 this component will display the\n * NcCounterBubble component\n */\n counterNumber: {\n type: [Number, String],\n default: 0\n },\n /**\n * Outlined or highlighted state of the counter\n */\n counterType: {\n type: String,\n default: \"\",\n validator(i) {\n return [\"highlighted\", \"outlined\", \"\"].indexOf(i) !== -1;\n }\n },\n /**\n * To be used only when the elements in the actions menu are very important\n */\n forceDisplayActions: {\n type: Boolean,\n default: !1\n }\n },\n emits: [\n \"click\",\n \"update:menuOpen\"\n ],\n data() {\n return {\n hovered: !1,\n focused: !1,\n hasActions: !1,\n hasSubname: !1,\n displayActionsOnHoverFocus: !1,\n menuOpen: !1,\n hasIndicator: !1\n };\n },\n computed: {\n hasDetails() {\n return this.details !== \"\";\n },\n oneLine() {\n return !this.hasSubname && !this.showDetails;\n },\n showAdditionalElements() {\n return !this.displayActionsOnHoverFocus || this.forceDisplayActions;\n },\n showDetails() {\n return this.hasDetails && (!this.displayActionsOnHoverFocus || this.forceDisplayActions);\n },\n computedActionsAriaLabel() {\n return this.actionsAriaLabel || h('Actions for item with name \"{name}\"', { name: this.name });\n }\n },\n watch: {\n menuOpen(i) {\n !i && !this.hovered && (this.displayActionsOnHoverFocus = !1);\n }\n },\n mounted() {\n this.checkSlots();\n },\n updated() {\n this.checkSlots();\n },\n methods: {\n /**\n * Handle link click\n *\n * @param {PointerEvent} event - Native click event\n * @param {Function} [navigate] - VueRouter link's navigate if any\n * @param {string} [routerLinkHref] - VueRouter link's href\n */\n onClick(i, t, e) {\n this.$emit(\"click\", i), !(i.metaKey || i.altKey || i.ctrlKey || i.shiftKey) && e && (t == null || t(i), i.preventDefault());\n },\n handleMouseover() {\n this.showActions(), this.hovered = !0;\n },\n showActions() {\n this.hasActions && (this.displayActionsOnHoverFocus = !0), this.hovered = !1;\n },\n hideActions() {\n this.displayActionsOnHoverFocus = !1;\n },\n /**\n * Show actions upon focus\n */\n handleFocus() {\n this.focused = !0, this.showActions();\n },\n handleBlur() {\n this.focused = !1;\n },\n /**\n * Hide the actions on mouseleave unless the menu is open\n */\n handleMouseleave() {\n this.menuOpen || (this.displayActionsOnHoverFocus = !1), this.hovered = !1;\n },\n /**\n * This method checks if the root element of the component is focused and\n * if that's the case it focuses the actions button if available\n *\n * @param {Event} e the keydown event\n */\n handleTab(i) {\n this.focused && this.hasActions ? (i.preventDefault(), this.$refs.actions.$refs.menuButton.$el.focus(), this.focused = !1) : this.displayActionsOnHoverFocus = !1;\n },\n handleActionsUpdateOpen(i) {\n this.menuOpen = i, this.$emit(\"update:menuOpen\", i);\n },\n // Check if subname and actions slots are populated\n checkSlots() {\n this.hasActions !== !!this.$slots.actions && (this.hasActions = !!this.$slots.actions), this.hasSubname !== !!this.$slots.subname && (this.hasSubname = !!this.$slots.subname), this.hasIndicator !== !!this.$slots.indicator && (this.hasIndicator = !!this.$slots.indicator);\n }\n }\n};\nvar m = function() {\n var t = this, e = t._self._c;\n return e(t.to ? \"router-link\" : \"NcVNodes\", { tag: \"component\", attrs: { custom: t.to ? !0 : null, to: t.to, exact: t.to ? t.exact : null }, scopedSlots: t._u([{ key: \"default\", fn: function({ href: n, navigate: o, isActive: a }) {\n return [e(\"li\", { staticClass: \"list-item__wrapper\", class: { \"list-item__wrapper--active\": a || t.active } }, [e(\"a\", { ref: \"list-item\", staticClass: \"list-item\", attrs: { id: t.anchorId, href: n || t.href, target: t.target || (t.href === \"#\" ? void 0 : \"_blank\"), rel: t.href === \"#\" ? void 0 : \"noopener noreferrer\", \"aria-label\": t.linkAriaLabel }, on: { mouseover: t.handleMouseover, mouseleave: t.handleMouseleave, focus: t.handleFocus, blur: t.handleBlur, keydown: [function(s) {\n return !s.type.indexOf(\"key\") && t._k(s.keyCode, \"tab\", 9, s.key, \"Tab\") || s.ctrlKey || s.shiftKey || s.altKey || s.metaKey ? null : t.handleTab.apply(null, arguments);\n }, function(s) {\n return !s.type.indexOf(\"key\") && t._k(s.keyCode, \"esc\", 27, s.key, [\"Esc\", \"Escape\"]) ? null : t.hideActions.apply(null, arguments);\n }], click: function(s) {\n return t.onClick(s, o, n);\n } } }, [e(\"div\", { staticClass: \"list-item-content__wrapper\", class: { \"list-item-content__wrapper--compact\": t.compact } }, [t._t(\"icon\"), e(\"div\", { staticClass: \"list-item-content\" }, [e(\"div\", { staticClass: \"list-item-content__main\", class: { \"list-item-content__main--oneline\": t.oneLine } }, [e(\"div\", { staticClass: \"line-one\" }, [e(\"span\", { staticClass: \"line-one__name\" }, [t._v(\" \" + t._s(t.name) + \" \")]), t.showDetails ? e(\"span\", { staticClass: \"line-one__details\" }, [t._v(\" \" + t._s(t.details) + \" \")]) : t._e()]), e(\"div\", { staticClass: \"line-two\", class: { \"line-two--bold\": t.bold } }, [t.hasSubname ? e(\"span\", { staticClass: \"line-two__subname\" }, [t._t(\"subname\")], 2) : t._e(), t.counterNumber != 0 || t.hasIndicator ? e(\"span\", { directives: [{ name: \"show\", rawName: \"v-show\", value: t.showAdditionalElements, expression: \"showAdditionalElements\" }], staticClass: \"line-two__additional_elements\" }, [t.counterNumber != 0 ? e(\"NcCounterBubble\", { staticClass: \"line-two__counter\", attrs: { active: a || t.active, type: t.counterType } }, [t._v(\" \" + t._s(t.counterNumber) + \" \")]) : t._e(), t.hasIndicator ? e(\"span\", { staticClass: \"line-two__indicator\" }, [t._t(\"indicator\")], 2) : t._e()], 1) : t._e()])]), t.forceDisplayActions ? t._e() : e(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: t.displayActionsOnHoverFocus, expression: \"displayActionsOnHoverFocus\" }], staticClass: \"list-item-content__actions\", on: { click: function(s) {\n s.preventDefault(), s.stopPropagation();\n } } }, [e(\"NcActions\", { ref: \"actions\", attrs: { primary: a || t.active, \"aria-label\": t.computedActionsAriaLabel }, on: { \"update:open\": t.handleActionsUpdateOpen } }, [t._t(\"actions\")], 2)], 1)]), t.forceDisplayActions ? e(\"div\", { staticClass: \"list-item-content__actions\", on: { click: function(s) {\n s.preventDefault(), s.stopPropagation();\n } } }, [e(\"NcActions\", { ref: \"actions\", attrs: { primary: a || t.active, \"aria-label\": t.computedActionsAriaLabel }, on: { \"update:open\": t.handleActionsUpdateOpen } }, [t._t(\"actions\")], 2)], 1) : t._e()], 2), t.$slots.extra ? e(\"div\", { staticClass: \"list-item__extra\" }, [t._t(\"extra\")], 2) : t._e()])])];\n } }], null, !0) });\n}, _ = [], y = /* @__PURE__ */ p(\n f,\n m,\n _,\n !1,\n null,\n \"57c41e90\",\n null,\n null\n);\nconst O = y.exports;\nexport {\n O as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-6f721577.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-6f721577.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-6f721577.css\";\nimport { N as i, u as r } from \"../chunks/index-309426ff.mjs\";\nimport { N as n } from \"../chunks/index-20a9ace9.mjs\";\nimport o from \"./NcIconSvgWrapper.mjs\";\nimport \"../Composables/useIsFullscreen.mjs\";\nimport \"../Composables/useIsMobile.mjs\";\nimport \"@nextcloud/router\";\n/* empty css */import { n as c } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nimport \"linkify-string\";\nimport \"escape-html\";\nimport \"striptags\";\nimport \"vue\";\nconst l = 8, e = 32, u = {\n name: \"NcListItemIcon\",\n components: {\n NcAvatar: i,\n NcHighlight: n,\n NcIconSvgWrapper: o\n },\n mixins: [\n r\n ],\n props: {\n /**\n * Default first line text\n */\n name: {\n type: String,\n required: !0\n },\n /**\n * Secondary optional line\n * Only visible on size of 32 and above\n */\n subname: {\n type: String,\n default: \"\"\n },\n /**\n * Icon class to be displayed at the end of the component\n */\n icon: {\n type: String,\n default: \"\"\n },\n /**\n * SVG icon to be displayed at the end of the component\n */\n iconSvg: {\n type: String,\n default: \"\"\n },\n /**\n * Descriptive name for the icon\n */\n iconName: {\n type: String,\n default: \"\"\n },\n /**\n * Search within the highlight of name/subname\n */\n search: {\n type: String,\n default: \"\"\n },\n /**\n * Set a size in px that will define the avatar height/width\n * and therefore, the height of the component\n */\n avatarSize: {\n type: Number,\n default: e\n },\n /**\n * Disable the margins of this component.\n * Useful for integration in `NcSelect` for example\n */\n noMargin: {\n type: Boolean,\n default: !1\n },\n /**\n * See the [Avatar](#Avatar) displayName prop\n * Fallback to name\n */\n displayName: {\n type: String,\n default: null\n },\n /**\n * See the [Avatar](#Avatar) isNoUser prop\n * Enable/disable the UserStatus fetching\n */\n isNoUser: {\n type: Boolean,\n default: !1\n },\n /**\n * Unique list item ID\n */\n id: {\n type: String,\n default: null\n }\n },\n data() {\n return {\n margin: l\n };\n },\n computed: {\n hasIcon() {\n return this.icon !== \"\";\n },\n hasIconSvg() {\n return this.iconSvg !== \"\";\n },\n isValidSubname() {\n var a, t;\n return ((t = (a = this.subname) == null ? void 0 : a.trim) == null ? void 0 : t.call(a)) !== \"\";\n },\n isSizeBigEnough() {\n return this.avatarSize >= e;\n },\n cssVars() {\n const a = this.noMargin ? 0 : this.margin;\n return {\n \"--height\": this.avatarSize + 2 * a + \"px\",\n \"--margin\": this.margin + \"px\"\n };\n },\n /**\n * Seperates the search property into two parts, the first one is the search part on the name, the second on the subname.\n * @return {[string, string]}\n */\n searchParts() {\n const a = /^([^<]*)<([^>]+)>?$/, t = this.search.match(a);\n return this.isNoUser || !t ? [this.search, this.search] : [t[1].trim(), t[2]];\n }\n },\n beforeMount() {\n !this.isNoUser && !this.subname && this.fetchUserStatus(this.user);\n }\n};\nvar m = function() {\n var t = this, s = t._self._c;\n return s(\"span\", t._g({ staticClass: \"option\", style: t.cssVars, attrs: { id: t.id } }, t.$listeners), [s(\"NcAvatar\", t._b({ staticClass: \"option__avatar\", attrs: { \"disable-menu\": !0, \"disable-tooltip\": !0, \"display-name\": t.displayName || t.name, \"is-no-user\": t.isNoUser, size: t.avatarSize } }, \"NcAvatar\", t.$attrs, !1)), s(\"div\", { staticClass: \"option__details\" }, [s(\"NcHighlight\", { staticClass: \"option__lineone\", attrs: { text: t.name, search: t.searchParts[0] } }), t.isValidSubname && t.isSizeBigEnough ? s(\"NcHighlight\", { staticClass: \"option__linetwo\", attrs: { text: t.subname, search: t.searchParts[1] } }) : t.hasStatus ? s(\"span\", [s(\"span\", [t._v(t._s(t.userStatus.icon))]), s(\"span\", [t._v(t._s(t.userStatus.message))])]) : t._e()], 1), t._t(\"default\", function() {\n return [t.hasIconSvg ? s(\"NcIconSvgWrapper\", { staticClass: \"option__icon\", attrs: { svg: t.iconSvg, name: t.iconName } }) : t.hasIcon ? s(\"span\", { staticClass: \"icon option__icon\", class: t.icon, attrs: { \"aria-label\": t.iconName } }) : t._e()];\n })], 2);\n}, p = [], _ = /* @__PURE__ */ c(\n u,\n m,\n p,\n !1,\n null,\n \"562c32c6\",\n null,\n null\n);\nconst A = _.exports;\nexport {\n A as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-b8f13a1f.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-b8f13a1f.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-b8f13a1f.css\";\nimport { n as r } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst n = {\n name: \"NcLoadingIcon\",\n props: {\n /**\n * Specify the size of the loading icon.\n */\n size: {\n type: Number,\n default: 20\n },\n /**\n * The appearance of the loading icon.\n * 'auto' adjusts to the Nextcloud color scheme,\n * 'light' and 'dark' are static.\n */\n appearance: {\n type: String,\n validator(a) {\n return [\"auto\", \"light\", \"dark\"].includes(a);\n },\n default: \"auto\"\n },\n /**\n * Specify what is loading.\n */\n name: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n colors() {\n const a = [\"#777\", \"#CCC\"];\n return this.appearance === \"light\" ? a : this.appearance === \"dark\" ? a.reverse() : [\"var(--color-loading-light)\", \"var(--color-loading-dark)\"];\n }\n }\n};\nvar o = function() {\n var e = this, t = e._self._c;\n return t(\"span\", { staticClass: \"material-design-icon loading-icon\", attrs: { \"aria-label\": e.name, role: \"img\" } }, [t(\"svg\", { attrs: { width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [t(\"path\", { attrs: { fill: e.colors[0], d: \"M12,4V2A10,10 0 1,0 22,12H20A8,8 0 1,1 12,4Z\" } }), t(\"path\", { attrs: { fill: e.colors[1], d: \"M12,4V2A10,10 0 0,1 22,12H20A8,8 0 0,0 12,4Z\" } }, [e.name ? t(\"title\", [e._v(e._s(e.name))]) : e._e()])])]);\n}, i = [], s = /* @__PURE__ */ r(\n n,\n o,\n i,\n !1,\n null,\n \"626664cd\",\n null,\n null\n);\nconst d = s.exports;\nexport {\n d as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-a3c23731.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-a3c23731.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-a3c23731.css\";\nimport { S as c } from \"../chunks/ScopeComponent-b039a43c.mjs\";\nimport { g as r } from \"../chunks/focusTrap-5d0f71d4.mjs\";\nimport { r as u, e as d, f as p, a as i } from \"../chunks/_l10n-f5af5269.mjs\";\nimport { G as h } from \"../chunks/GenRandomId-cb9ccebe.mjs\";\nimport f from \"./NcActions.mjs\";\nimport m from \"./NcButton.mjs\";\nimport \"../Directives/Tooltip.mjs\";\nimport { n as l } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nimport { C as _ } from \"../chunks/ChevronRight-1a6a6cf2.mjs\";\nimport { C as y } from \"../chunks/Close-271f72e2.mjs\";\nimport { createFocusTrap as w } from \"focus-trap\";\nimport { useSwipe as v } from \"@vueuse/core\";\nimport { VTooltip as g } from \"floating-vue\";\nu(p, d);\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ \n *\n * @author John Molakvoæ \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\nfunction C(s, e) {\n let t, a, n = e, o;\n this.start = function() {\n o = !0, a = /* @__PURE__ */ new Date(), t = setTimeout(s, n);\n }, this.pause = function() {\n o = !1, clearTimeout(t), n -= /* @__PURE__ */ new Date() - a;\n }, this.clear = function() {\n o = !1, clearTimeout(t), n = 0;\n }, this.getTimeLeft = function() {\n return o && (this.pause(), this.start()), n;\n }, this.getStateRunning = function() {\n return o;\n }, this.start();\n}\nconst b = {\n name: \"ChevronLeftIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar k = function() {\n var e = this, t = e._self._c;\n return t(\"span\", e._b({ staticClass: \"material-design-icon chevron-left-icon\", attrs: { \"aria-hidden\": !e.title, \"aria-label\": e.title, role: \"img\" }, on: { click: function(a) {\n return e.$emit(\"click\", a);\n } } }, \"span\", e.$attrs, !1), [t(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: e.fillColor, width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [t(\"path\", { attrs: { d: \"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\" } }, [e.title ? t(\"title\", [e._v(e._s(e.title))]) : e._e()])])]);\n}, S = [], T = /* @__PURE__ */ l(\n b,\n k,\n S,\n !1,\n null,\n null,\n null,\n null\n);\nconst x = T.exports, N = {\n name: \"PauseIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar B = function() {\n var e = this, t = e._self._c;\n return t(\"span\", e._b({ staticClass: \"material-design-icon pause-icon\", attrs: { \"aria-hidden\": !e.title, \"aria-label\": e.title, role: \"img\" }, on: { click: function(a) {\n return e.$emit(\"click\", a);\n } } }, \"span\", e.$attrs, !1), [t(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: e.fillColor, width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [t(\"path\", { attrs: { d: \"M14,19H18V5H14M6,19H10V5H6V19Z\" } }, [e.title ? t(\"title\", [e._v(e._s(e.title))]) : e._e()])])]);\n}, $ = [], P = /* @__PURE__ */ l(\n N,\n B,\n $,\n !1,\n null,\n null,\n null,\n null\n);\nconst z = P.exports, L = {\n name: \"PlayIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar M = function() {\n var e = this, t = e._self._c;\n return t(\"span\", e._b({ staticClass: \"material-design-icon play-icon\", attrs: { \"aria-hidden\": !e.title, \"aria-label\": e.title, role: \"img\" }, on: { click: function(a) {\n return e.$emit(\"click\", a);\n } } }, \"span\", e.$attrs, !1), [t(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: e.fillColor, width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [t(\"path\", { attrs: { d: \"M8,5.14V19.14L19,12.14L8,5.14Z\" } }, [e.title ? t(\"title\", [e._v(e._s(e.title))]) : e._e()])])]);\n}, A = [], F = /* @__PURE__ */ l(\n L,\n M,\n A,\n !1,\n null,\n null,\n null,\n null\n);\nconst E = F.exports;\nconst I = {\n name: \"NcModal\",\n components: {\n NcActions: f,\n ChevronLeft: x,\n ChevronRight: _,\n Close: y,\n Pause: z,\n Play: E,\n NcButton: m\n },\n directives: {\n tooltip: g\n },\n props: {\n /**\n * Name to be shown with the modal\n */\n name: {\n type: String,\n default: \"\"\n },\n /**\n * Declare if a previous slide is available\n */\n hasPrevious: {\n type: Boolean,\n default: !1\n },\n /**\n * Declare if a next slide is available\n */\n hasNext: {\n type: Boolean,\n default: !1\n },\n /**\n * Declare if hiding the modal should be animated\n */\n outTransition: {\n type: Boolean,\n default: !1\n },\n /**\n * Declare if the slideshow functionality should be enabled\n */\n enableSlideshow: {\n type: Boolean,\n default: !1\n },\n /**\n * Declare the slide interval\n */\n slideshowDelay: {\n type: Number,\n default: 5e3\n },\n /**\n * Allow to pause an ongoing slideshow\n */\n slideshowPaused: {\n type: Boolean,\n default: !1\n },\n /**\n * Enable swipe between slides\n */\n enableSwipe: {\n type: Boolean,\n default: !0\n },\n spreadNavigation: {\n type: Boolean,\n default: !1\n },\n /**\n * Defines the modal size.\n * Default is 'normal'.\n * Available are 'small', 'normal', 'large' and 'full'.\n * All sizes except 'small' change automatically to full-screen on mobile.\n */\n size: {\n type: String,\n default: \"normal\",\n validator: (s) => [\"small\", \"normal\", \"large\", \"full\"].includes(s)\n },\n /**\n * Declare if the modal can be closed\n */\n canClose: {\n type: Boolean,\n default: !0\n },\n /**\n * Close the modal if the user clicked outside of the modal\n * Only relevant if `canClose` is set to true.\n */\n closeOnClickOutside: {\n type: Boolean,\n default: !0\n },\n /**\n * Makes the modal backdrop black if true\n * Will be overwritten if some buttons are shown outside\n */\n dark: {\n type: Boolean,\n default: !1\n },\n /**\n * Selector for the modal container, pass `null` to prevent automatic container mounting\n */\n container: {\n type: [String, null],\n default: \"body\"\n },\n /**\n * Pass in false if you want the modal 'close' button to be displayed\n * outside the modal boundaries, in the top right corner of the window\n */\n closeButtonContained: {\n type: Boolean,\n default: !0\n },\n /**\n * Additional elements to add to the focus trap\n */\n additionalTrapElements: {\n type: Array,\n default: () => []\n },\n /**\n * Display x items inline\n *\n * @see Actions component usage\n */\n inlineActions: {\n type: Number,\n default: 0\n },\n show: {\n type: Boolean,\n default: void 0\n }\n },\n emits: [\n \"previous\",\n \"next\",\n \"close\",\n \"update:show\"\n ],\n data() {\n return {\n mc: null,\n playing: !1,\n slideshowTimeout: null,\n iconSize: 24,\n focusTrap: null,\n randId: h(),\n internalShow: !0\n };\n },\n computed: {\n showModal() {\n return this.show === void 0 ? this.internalShow : this.show;\n },\n modalTransitionName() {\n return `modal-${this.outTransition ? \"out\" : \"in\"}`;\n },\n playPauseName() {\n return this.playing ? i(\"Pause slideshow\") : i(\"Start slideshow\");\n },\n cssVariables() {\n return {\n \"--slideshow-duration\": this.slideshowDelay + \"ms\",\n \"--icon-size\": this.iconSize + \"px\"\n };\n },\n closeButtonAriaLabel() {\n return i(\"Close\");\n },\n prevButtonAriaLabel() {\n return i(\"Previous\");\n },\n nextButtonAriaLabel() {\n return i(\"Next\");\n }\n },\n watch: {\n /**\n * Handle play/pause of an ongoing slideshow\n *\n * @param {boolean} paused is the player paused\n */\n slideshowPaused(s) {\n this.slideshowTimeout && (s ? this.slideshowTimeout.pause() : this.slideshowTimeout.start());\n },\n additionalTrapElements(s) {\n if (this.focusTrap) {\n const e = this.$refs.mask;\n this.focusTrap.updateContainerElements([e, ...s]);\n }\n }\n },\n beforeMount() {\n window.addEventListener(\"keydown\", this.handleKeydown);\n },\n beforeDestroy() {\n window.removeEventListener(\"keydown\", this.handleKeydown), this.mc.stop();\n },\n mounted() {\n this.useFocusTrap(), this.mc = v(this.$refs.mask, {\n onSwipeEnd: this.handleSwipe\n }), this.container && (this.container === \"body\" ? document.body.insertBefore(this.$el, document.body.lastChild) : document.querySelector(this.container).appendChild(this.$el));\n },\n destroyed() {\n this.clearFocusTrap(), this.$el.remove();\n },\n methods: {\n t: i,\n // Events emitters\n previous(s) {\n this.hasPrevious && (s && this.resetSlideshow(), this.$emit(\"previous\", s));\n },\n next(s) {\n this.hasNext && (s && this.resetSlideshow(), this.$emit(\"next\", s));\n },\n close(s) {\n this.canClose && (this.internalShow = !1, this.$emit(\"update:show\", !1), setTimeout(() => {\n this.$emit(\"close\", s);\n }, 300));\n },\n /**\n * Handle click on modal wrapper\n * If `closeOnClickOutside` is set the modal will be closed\n *\n * @param {MouseEvent} event The click event\n */\n handleClickModalWrapper(s) {\n this.closeOnClickOutside && this.close(s);\n },\n /**\n * @param {KeyboardEvent} event - keyboard event\n */\n handleKeydown(s) {\n if (s.key === \"Escape\") {\n const t = r();\n return t.length > 0 && t[t.length - 1] !== this.focusTrap ? void 0 : this.close(s);\n }\n const e = {\n ArrowLeft: this.previous,\n ArrowRight: this.next\n };\n if (e[s.key])\n return document.activeElement && !this.$el.contains(document.activeElement) ? void 0 : e[s.key](s);\n },\n /**\n * handle the swipe event\n *\n * @param {TouchEvent} e The touch event\n * @param {import('@vueuse/core').SwipeDirection} direction Swipe direction\n */\n handleSwipe(s, e) {\n this.enableSwipe && (e === \"left\" ? this.next(s) : e === \"right\" && this.previous(s));\n },\n /**\n * Toggle the slideshow state\n */\n togglePlayPause() {\n this.playing = !this.playing, this.playing ? this.handleSlideshow() : this.clearSlideshowTimeout();\n },\n /**\n * Reset the slideshow timer and keep going if it was on\n */\n resetSlideshow() {\n this.playing = !this.playing, this.clearSlideshowTimeout(), this.$nextTick(function() {\n this.togglePlayPause();\n });\n },\n /**\n * Handle the slideshow timer and next event\n */\n handleSlideshow() {\n this.playing = !0, this.hasNext ? this.slideshowTimeout = new C(() => {\n this.next(), this.handleSlideshow();\n }, this.slideshowDelay) : (this.playing = !1, this.clearSlideshowTimeout());\n },\n /**\n * Clear slideshowTimeout if ongoing\n */\n clearSlideshowTimeout() {\n this.slideshowTimeout && this.slideshowTimeout.clear();\n },\n /**\n * Add focus trap for accessibility.\n */\n async useFocusTrap() {\n if (!this.showModal || this.focusTrap)\n return;\n const s = this.$refs.mask;\n await this.$nextTick();\n const e = {\n allowOutsideClick: !0,\n fallbackFocus: s,\n trapStack: r(),\n // Esc can be used without stop in content or additionalTrapElements where it should not deacxtivate modal's focus trap.\n // Focus trap is deactivated on modal close anyway.\n escapeDeactivates: !1\n };\n this.focusTrap = w([s, ...this.additionalTrapElements], e), this.focusTrap.activate();\n },\n clearFocusTrap() {\n var s;\n this.focusTrap && ((s = this.focusTrap) == null || s.deactivate(), this.focusTrap = null);\n }\n }\n};\nvar R = function() {\n var e = this, t = e._self._c;\n return t(\"transition\", { attrs: { name: \"fade\", appear: \"\" }, on: { \"after-enter\": e.useFocusTrap, \"before-leave\": e.clearFocusTrap } }, [t(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.showModal, expression: \"showModal\" }], ref: \"mask\", staticClass: \"modal-mask\", class: { \"modal-mask--dark\": e.dark || !e.closeButtonContained || e.hasPrevious || e.hasNext }, style: e.cssVariables, attrs: { role: \"dialog\", \"aria-modal\": \"true\", \"aria-labelledby\": \"modal-name-\" + e.randId, \"aria-describedby\": \"modal-description-\" + e.randId, tabindex: \"-1\" } }, [t(\"transition\", { attrs: { name: \"fade-visibility\", appear: \"\" } }, [t(\"div\", { staticClass: \"modal-header\" }, [e.name.trim() !== \"\" ? t(\"h2\", { staticClass: \"modal-name\", attrs: { id: \"modal-name-\" + e.randId } }, [e._v(\" \" + e._s(e.name) + \" \")]) : e._e(), t(\"div\", { staticClass: \"icons-menu\" }, [e.hasNext && e.enableSlideshow ? t(\"button\", { directives: [{ name: \"tooltip\", rawName: \"v-tooltip.auto\", value: e.playPauseName, expression: \"playPauseName\", modifiers: { auto: !0 } }], staticClass: \"play-pause-icons\", class: { \"play-pause-icons--paused\": e.slideshowPaused }, attrs: { type: \"button\" }, on: { click: e.togglePlayPause } }, [e.playing ? t(\"Pause\", { staticClass: \"play-pause-icons__pause\", attrs: { size: e.iconSize } }) : t(\"Play\", { staticClass: \"play-pause-icons__play\", attrs: { size: e.iconSize } }), t(\"span\", { staticClass: \"hidden-visually\" }, [e._v(\" \" + e._s(e.playPauseName) + \" \")]), e.playing ? t(\"svg\", { staticClass: \"progress-ring\", attrs: { height: \"50\", width: \"50\" } }, [t(\"circle\", { staticClass: \"progress-ring__circle\", attrs: { stroke: \"white\", \"stroke-width\": \"2\", fill: \"transparent\", r: \"15\", cx: \"25\", cy: \"25\" } })]) : e._e()], 1) : e._e(), t(\"NcActions\", { staticClass: \"header-actions\", attrs: { inline: e.inlineActions } }, [e._t(\"actions\")], 2), e.canClose && !e.closeButtonContained ? t(\"NcButton\", { staticClass: \"header-close\", attrs: { \"aria-label\": e.closeButtonAriaLabel, type: \"tertiary\" }, on: { click: e.close }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n return [t(\"Close\", { attrs: { size: e.iconSize } })];\n }, proxy: !0 }], null, !1, 1841713362) }) : e._e()], 1)])]), t(\"transition\", { attrs: { name: e.modalTransitionName, appear: \"\" } }, [t(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.showModal, expression: \"showModal\" }], staticClass: \"modal-wrapper\", class: [\n `modal-wrapper--${e.size}`,\n { \"modal-wrapper--spread-navigation\": e.spreadNavigation }\n ], on: { mousedown: function(a) {\n return a.target !== a.currentTarget ? null : e.handleClickModalWrapper.apply(null, arguments);\n } } }, [t(\"transition\", { attrs: { name: \"fade-visibility\", appear: \"\" } }, [t(\"NcButton\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.hasPrevious, expression: \"hasPrevious\" }], staticClass: \"prev\", attrs: { type: \"tertiary-no-background\", \"aria-label\": e.prevButtonAriaLabel }, on: { click: e.previous }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n return [t(\"ChevronLeft\", { attrs: { size: 40 } })];\n }, proxy: !0 }]) })], 1), t(\"div\", { staticClass: \"modal-container\", attrs: { id: \"modal-description-\" + e.randId } }, [e.canClose && e.closeButtonContained ? t(\"NcButton\", { staticClass: \"modal-container__close\", attrs: { type: \"tertiary\", \"aria-label\": e.closeButtonAriaLabel }, on: { click: e.close }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n return [t(\"Close\", { attrs: { size: 20 } })];\n }, proxy: !0 }], null, !1, 2121748766) }) : e._e(), t(\"div\", { staticClass: \"modal-container__content\" }, [e._t(\"default\")], 2)], 1), t(\"transition\", { attrs: { name: \"fade-visibility\", appear: \"\" } }, [t(\"NcButton\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.hasNext, expression: \"hasNext\" }], staticClass: \"next\", attrs: { type: \"tertiary-no-background\", \"aria-label\": e.nextButtonAriaLabel }, on: { click: e.next }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n return [t(\"ChevronRight\", { attrs: { size: 40 } })];\n }, proxy: !0 }]) })], 1)], 1)])], 1)]);\n}, D = [], V = /* @__PURE__ */ l(\n I,\n R,\n D,\n !1,\n null,\n \"aaa85268\",\n null,\n null\n);\nconst H = V.exports;\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ \n *\n * @author John Molakvoæ \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\nc(H);\nexport {\n H as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-400b48a6.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-400b48a6.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-400b48a6.css\";\nimport { n } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst a = {\n name: \"CheckboxMarkedCircleIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar s = function() {\n var t = this, e = t._self._c;\n return e(\"span\", t._b({ staticClass: \"material-design-icon checkbox-marked-circle-icon\", attrs: { \"aria-hidden\": !t.title, \"aria-label\": t.title, role: \"img\" }, on: { click: function(r) {\n return t.$emit(\"click\", r);\n } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, c = [], o = /* @__PURE__ */ n(\n a,\n s,\n c,\n !1,\n null,\n null,\n null,\n null\n);\nconst _ = o.exports, u = {\n name: \"AlertDecagramIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar d = function() {\n var t = this, e = t._self._c;\n return e(\"span\", t._b({ staticClass: \"material-design-icon alert-decagram-icon\", attrs: { \"aria-hidden\": !t.title, \"aria-label\": t.title, role: \"img\" }, on: { click: function(r) {\n return t.$emit(\"click\", r);\n } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M23,12L20.56,9.22L20.9,5.54L17.29,4.72L15.4,1.54L12,3L8.6,1.54L6.71,4.72L3.1,5.53L3.44,9.21L1,12L3.44,14.78L3.1,18.47L6.71,19.29L8.6,22.47L12,21L15.4,22.46L17.29,19.28L20.9,18.46L20.56,14.78L23,12M13,17H11V15H13V17M13,13H11V7H13V13Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, f = [], p = /* @__PURE__ */ n(\n u,\n d,\n f,\n !1,\n null,\n null,\n null,\n null\n);\nconst m = p.exports, v = {\n name: \"AlertIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar g = function() {\n var t = this, e = t._self._c;\n return e(\"span\", t._b({ staticClass: \"material-design-icon alert-icon\", attrs: { \"aria-hidden\": !t.title, \"aria-label\": t.title, role: \"img\" }, on: { click: function(r) {\n return t.$emit(\"click\", r);\n } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M13 14H11V9H13M13 18H11V16H13M1 21H23L12 2L1 21Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, h = [], C = /* @__PURE__ */ n(\n v,\n g,\n h,\n !1,\n null,\n null,\n null,\n null\n);\nconst l = C.exports, L = {\n name: \"InformationIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar $ = function() {\n var t = this, e = t._self._c;\n return e(\"span\", t._b({ staticClass: \"material-design-icon information-icon\", attrs: { \"aria-hidden\": !t.title, \"aria-label\": t.title, role: \"img\" }, on: { click: function(r) {\n return t.$emit(\"click\", r);\n } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, y = [], w = /* @__PURE__ */ n(\n L,\n $,\n y,\n !1,\n null,\n null,\n null,\n null\n);\nconst k = w.exports;\nconst A = {\n name: \"NcNoteCard\",\n props: {\n /**\n * Type of the attribute\n */\n type: {\n type: String,\n default: \"warning\",\n validator: (i) => [\"success\", \"info\", \"warning\", \"error\"].includes(i)\n },\n showAlert: {\n type: Boolean,\n default: !1\n },\n heading: {\n type: String,\n default: \"\"\n }\n },\n computed: {\n shouldShowAlert() {\n return this.showAlert || this.type === \"error\";\n },\n icon() {\n switch (this.type) {\n case \"error\":\n return m;\n case \"success\":\n return _;\n case \"info\":\n return k;\n case \"warning\":\n return l;\n default:\n return l;\n }\n },\n color() {\n switch (this.type) {\n case \"error\":\n return \"var(--color-error)\";\n case \"success\":\n return \"var(--color-success)\";\n case \"info\":\n return \"var(--color-info)\";\n case \"warning\":\n return \"var(--color-warning)\";\n default:\n return \"var(--color-warning)\";\n }\n }\n }\n};\nvar b = function() {\n var t = this, e = t._self._c;\n return e(\"div\", { staticClass: \"notecard\", class: `notecard--${t.type}`, attrs: { role: t.shouldShowAlert ? \"alert\" : \"note\" } }, [e(t.icon, { tag: \"component\", staticClass: \"notecard__icon\", class: { \"notecard__icon--heading\": t.heading }, attrs: { \"fill-color\": t.color } }), e(\"div\", [t.heading ? e(\"h2\", [t._v(\" \" + t._s(t.heading) + \" \")]) : t._e(), t._t(\"default\")], 2)], 1);\n}, x = [], z = /* @__PURE__ */ n(\n A,\n b,\n x,\n !1,\n null,\n \"3a409988\",\n null,\n null\n);\nconst S = z.exports;\nexport {\n S as default\n};\n","import { n as l } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nimport a from \"./NcInputField.mjs\";\nimport o from \"debounce\";\nimport c from \"@nextcloud/axios\";\nimport { loadState as d } from \"@nextcloud/initial-state\";\nimport { generateOcsUrl as u } from \"@nextcloud/router\";\nimport { r as p, C as f, a as n } from \"../chunks/_l10n-f5af5269.mjs\";\nimport { l as m } from \"../chunks/logger-3612e664.mjs\";\nconst h = {\n name: \"EyeIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _ = function() {\n var t = this, s = t._self._c;\n return s(\"span\", t._b({ staticClass: \"material-design-icon eye-icon\", attrs: { \"aria-hidden\": !t.title, \"aria-label\": t.title, role: \"img\" }, on: { click: function(i) {\n return t.$emit(\"click\", i);\n } } }, \"span\", t.$attrs, !1), [s(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [s(\"path\", { attrs: { d: \"M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z\" } }, [t.title ? s(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, g = [], v = /* @__PURE__ */ l(\n h,\n _,\n g,\n !1,\n null,\n null,\n null,\n null\n);\nconst w = v.exports, C = {\n name: \"EyeOffIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar y = function() {\n var t = this, s = t._self._c;\n return s(\"span\", t._b({ staticClass: \"material-design-icon eye-off-icon\", attrs: { \"aria-hidden\": !t.title, \"aria-label\": t.title, role: \"img\" }, on: { click: function(i) {\n return t.$emit(\"click\", i);\n } } }, \"span\", t.$attrs, !1), [s(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [s(\"path\", { attrs: { d: \"M11.83,9L15,12.16C15,12.11 15,12.05 15,12A3,3 0 0,0 12,9C11.94,9 11.89,9 11.83,9M7.53,9.8L9.08,11.35C9.03,11.56 9,11.77 9,12A3,3 0 0,0 12,15C12.22,15 12.44,14.97 12.65,14.92L14.2,16.47C13.53,16.8 12.79,17 12,17A5,5 0 0,1 7,12C7,11.21 7.2,10.47 7.53,9.8M2,4.27L4.28,6.55L4.73,7C3.08,8.3 1.78,10 1,12C2.73,16.39 7,19.5 12,19.5C13.55,19.5 15.03,19.2 16.38,18.66L16.81,19.08L19.73,22L21,20.73L3.27,3M12,7A5,5 0 0,1 17,12C17,12.64 16.87,13.26 16.64,13.82L19.57,16.75C21.07,15.5 22.27,13.86 23,12C21.27,7.61 17,4.5 12,4.5C10.6,4.5 9.26,4.75 8,5.2L10.17,7.35C10.74,7.13 11.35,7 12,7Z\" } }, [t.title ? s(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, b = [], $ = /* @__PURE__ */ l(\n C,\n y,\n b,\n !1,\n null,\n null,\n null,\n null\n);\nconst P = $.exports;\np(f);\nconst r = d(\"core\", \"capabilities\", {}).password_policy || null, A = new Set(Object.keys(a.props)), x = {\n name: \"NcPasswordField\",\n components: {\n NcInputField: a,\n Eye: w,\n EyeOff: P\n },\n // Allow forwarding all attributes\n inheritAttrs: !1,\n props: {\n /**\n * Any [NcInputField](#/Components/NcFields?id=ncinputfield) props\n */\n // Not an actual prop but needed to show in vue-styleguidist docs\n // eslint-disable-next-line\n \" \": {},\n // Reuse all the props from NcInputField for better typing and documentation\n ...a.props,\n // Redefined props\n /**\n * Controls whether to display the trailing button.\n */\n showTrailingButton: {\n type: Boolean,\n default: !0\n },\n // Removed NcInputField props, defined only by this component\n trailingButtonLabel: void 0,\n // Custom props\n /**\n * Check if the user entered a valid password using the password_policy\n * app if available.\n *\n * Warning: this doesn't replace server side checking and will do nothing\n * if the password_policy app is disabled.\n */\n checkPasswordStrength: {\n type: Boolean,\n default: !1\n },\n /**\n * The minlength property defines the minimum number of characters\n * (as UTF-16 code units) the user can enter\n */\n minlength: {\n type: Number,\n default: 0\n },\n /**\n * The maxlength property defines the maximum number of characters\n * (as UTF-16 code units) the user can enter\n */\n maxlength: {\n type: Number,\n default: null\n }\n },\n emits: [\n \"valid\",\n \"invalid\",\n \"update:value\"\n ],\n data() {\n return {\n isPasswordHidden: !0,\n internalHelpMessage: \"\",\n isValid: null\n };\n },\n computed: {\n computedError() {\n return this.error || this.isValid === !1;\n },\n computedSuccess() {\n return this.success || this.isValid === !0;\n },\n computedHelperText() {\n return this.helperText.length > 0 ? this.helperText : this.internalHelpMessage;\n },\n rules() {\n const { minlength: e } = this;\n return {\n minlength: e != null ? e : r == null ? void 0 : r.minLength\n };\n },\n trailingButtonLabelPassword() {\n return this.isPasswordHidden ? n(\"Show password\") : n(\"Hide password\");\n },\n propsAndAttrsToForward() {\n return {\n // Proxy all the HTML attributes\n ...this.$attrs,\n // Proxy original NcInputField's props\n ...Object.fromEntries(\n Object.entries(this.$props).filter(([e]) => A.has(e))\n )\n };\n }\n },\n watch: {\n value(e) {\n if (this.checkPasswordStrength) {\n if (r === null)\n return;\n this.checkPassword(e);\n }\n }\n },\n methods: {\n /**\n * Focus the input element\n *\n * @public\n */\n focus() {\n this.$refs.inputField.focus();\n },\n /**\n * Select all the text in the input\n *\n * @public\n */\n select() {\n this.$refs.inputField.select();\n },\n handleInput(e) {\n this.$emit(\"update:value\", e.target.value);\n },\n togglePasswordVisibility() {\n this.isPasswordHidden = !this.isPasswordHidden;\n },\n checkPassword: o(async function(e) {\n try {\n const { data: t } = await c.post(u(\"apps/password_policy/api/v1/validate\"), { password: e });\n if (this.isValid = t.ocs.data.passed, t.ocs.data.passed) {\n this.internalHelpMessage = n(\"Password is secure\"), this.$emit(\"valid\");\n return;\n }\n this.internalHelpMessage = t.ocs.data.reason, this.$emit(\"invalid\");\n } catch (t) {\n m.error(\"Password policy returned an error\", t);\n }\n }, 500)\n }\n};\nvar L = function() {\n var t = this, s = t._self._c;\n return s(\"NcInputField\", t._g(t._b({ ref: \"inputField\", attrs: { type: t.isPasswordHidden ? \"password\" : \"text\", \"trailing-button-label\": t.trailingButtonLabelPassword, \"helper-text\": t.computedHelperText, error: t.computedError, success: t.computedSuccess, minlength: t.rules.minlength }, on: { \"trailing-button-click\": t.togglePasswordVisibility, input: t.handleInput }, scopedSlots: t._u([{ key: \"trailing-button-icon\", fn: function() {\n return [t.isPasswordHidden ? s(\"Eye\", { attrs: { size: 18 } }) : s(\"EyeOff\", { attrs: { size: 18 } })];\n }, proxy: !0 }]) }, \"NcInputField\", t.propsAndAttrsToForward, !1), t.$listeners), [t._t(\"default\")], 2);\n}, F = [], k = /* @__PURE__ */ l(\n x,\n L,\n F,\n !1,\n null,\n null,\n null,\n null\n);\nconst O = k.exports;\nexport {\n O as default\n};\n","\n import API from \"!../../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../css-loader/dist/cjs.js!./index-4ebacc78.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../css-loader/dist/cjs.js!./index-4ebacc78.css\";\n export default content && content.locals ? content.locals : undefined;\n","import \"../assets/index-4ebacc78.css\";\nimport { Dropdown as r } from \"floating-vue\";\nimport { createFocusTrap as s } from \"focus-trap\";\nimport { g as a } from \"../chunks/focusTrap-5d0f71d4.mjs\";\nimport { n } from \"../chunks/_plugin-vue2_normalizer-71e2aa87.mjs\";\nconst p = {\n name: \"NcPopover\",\n components: {\n Dropdown: r\n },\n inheritAttrs: !1,\n props: {\n popoverBaseClass: {\n type: String,\n default: \"\"\n },\n /**\n * Enable popover focus trap\n */\n focusTrap: {\n type: Boolean,\n default: !0\n },\n /**\n * Set element to return focus to after focus trap deactivation\n *\n * @type {import('focus-trap').FocusTargetValueOrFalse}\n */\n setReturnFocus: {\n default: void 0,\n type: [HTMLElement, SVGElement, String, Boolean]\n }\n },\n emits: [\n \"after-show\",\n \"after-hide\"\n ],\n beforeDestroy() {\n this.clearFocusTrap(), this.clearEscapeStopPropagation();\n },\n methods: {\n /**\n * @return {HTMLElement|undefined}\n */\n getPopoverContentElement() {\n var e, t;\n return (t = (e = this.$refs.popover) == null ? void 0 : e.$refs.popperContent) == null ? void 0 : t.$el;\n },\n /**\n * Add focus trap for accessibility.\n */\n async useFocusTrap() {\n if (await this.$nextTick(), !this.focusTrap)\n return;\n const e = this.getPopoverContentElement();\n e && (this.$focusTrap = s(e, {\n // Prevents to lose focus using esc key\n // Focus will be release when popover be hide\n escapeDeactivates: !1,\n allowOutsideClick: !0,\n setReturnFocus: this.setReturnFocus,\n trapStack: a()\n }), this.$focusTrap.activate());\n },\n /**\n * Remove focus trap\n *\n * @param {object} options The configuration options for focusTrap\n */\n clearFocusTrap(e = {}) {\n var t;\n try {\n (t = this.$focusTrap) == null || t.deactivate(e), this.$focusTrap = null;\n } catch (o) {\n console.warn(o);\n }\n },\n /**\n * Add stopPropagation for Escape.\n * It prevents global Escape handling after closing popover.\n *\n * Manual event handling is used here instead of v-on because there is no direct access to the node.\n * Alternative - wrap