{"version":3,"file":"MenuBar-BrSXzUYa.chunk.mjs","sources":["../src/composables/useMenuEntries.ts","../src/components/Menu/ActionListItem.vue","../src/components/Menu/ActionList.vue","../src/components/Menu/ActionSingle.vue","../src/components/Menu/ToolBarLogic.js","../src/components/Menu/ReadonlyBar.vue","../node_modules/@nextcloud/vue/dist/chunks/NcActionCheckbox-23CmleUh.mjs","../node_modules/path-normalize/lib/index.js","../src/services/AttachmentResolver.js","../src/helpers/platform.js","../src/components/HelpModal.vue","../src/components/Menu/ActionFormattingHelp.vue","../src/components/Menu/CharacterCount.vue","../src/components/Menu/WidthToggle.vue","../src/components/Menu/MenuBar.vue"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport {\n\tgetAssistantMenuEntries,\n\tgetMenuEntries,\n\toutlineEntries,\n\treadOnlyDoneEntries,\n\treadOnlyEditEntries,\n} from '../components/Menu/entries'\nimport { useEditorFlags } from './useEditorFlags'\n\nexport const useMenuEntries = () => {\n\tconst { isRichWorkspace } = useEditorFlags()\n\n\tconst assistantMenuEntries = getAssistantMenuEntries()\n\tconst menuEntries = getMenuEntries(isRichWorkspace)\n\n\treturn {\n\t\tassistantMenuEntries,\n\t\tmenuEntries,\n\t\toutlineEntries,\n\t\treadOnlyDoneEntries,\n\t\treadOnlyEditEntries,\n\t}\n}\n","<!--\n  - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NextcloudVueNcActionButton\n\t\tclass=\"entry-single-action entry-action entry-action-item\"\n\t\t:title=\"listItemTooltip || undefined\"\n\t\t:class=\"state.class\"\n\t\t:disabled=\"state.disabled\"\n\t\t:aria-keyshortcuts=\"keyshortcuts || undefined\"\n\t\t:data-text-action-entry=\"actionEntry.key\"\n\t\t:model-value=\"actionType !== 'button' ? state.active : undefined\"\n\t\tclose-after-click\n\t\tv-on=\"$listeners\"\n\t\t@click=\"runAction\">\n\t\t<template #icon>\n\t\t\t<component :is=\"icon\" />\n\t\t</template>\n\t\t{{ label }}\n\t</NextcloudVueNcActionButton>\n</template>\n\n<script>\nimport NextcloudVueNcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport { BaseActionEntry } from './BaseActionEntry.js'\n\nexport default {\n\t// This component is used as a direct child of NcActions.\n\t// Even if it actually renders NcActionButton, NcActions cannot see it due to rendering limitations in Vue.\n\t// Though it works in general, NcActions doesn't handle it correctly. See NcActions docs for details.\n\t// Hotfix - rename the component to NcActionButton because it represents and renders it.\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'NcActionButton',\n\n\tcomponents: {\n\t\tNextcloudVueNcActionButton,\n\t},\n\n\textends: BaseActionEntry,\n\n\tmounted() {\n\t\tthis.editor?.on('transaction', () => this.updateState())\n\t},\n\n\tmethods: {\n\t\trunAction() {\n\t\t\tconst { actionEntry } = this\n\n\t\t\tif (actionEntry.click) {\n\t\t\t\tactionEntry.click(this)\n\t\t\t} else {\n\t\t\t\t// Some actions run themselves.\n\t\t\t\t// others still need to have .run() called upon them.\n\t\t\t\tactionEntry.action(this.editor?.chain().focus(), this.editor)?.run()\n\t\t\t}\n\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$emit('trigged', { ...actionEntry })\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcActions\n\t\t:title=\"tooltip\"\n\t\tclass=\"entry-list-action entry-action\"\n\t\tv-bind=\"state\"\n\t\t:container=\"menuIDSelector\"\n\t\t:aria-label=\"labelWithSelected\"\n\t\t:variant=\"state.active ? 'primary' : 'tertiary'\"\n\t\t:force-menu=\"true\"\n\t\t:data-text-action-entry=\"actionEntry.key\"\n\t\t:data-text-action-active=\"activeKey\"\n\t\t:disabled=\"!isEnabled\"\n\t\t@update:open=\"onOpenChange\">\n\t\t<template #icon>\n\t\t\t<component :is=\"icon\" :key=\"iconKey\" />\n\t\t</template>\n\t\t<template v-for=\"child in children\">\n\t\t\t<NcActionSeparator\n\t\t\t\tv-if=\"child.isSeparator\"\n\t\t\t\t:key=\"`child-${child.key}`\" />\n\t\t\t<ActionListItem\n\t\t\t\tv-else\n\t\t\t\t:key=\"`child-${child.key}`\"\n\t\t\t\t:active=\"currentChild?.key === child.key\"\n\t\t\t\tis-item\n\t\t\t\t:action-entry=\"child\"\n\t\t\t\tv-on=\"$listeners\"\n\t\t\t\t@trigged=\"onTrigger\" />\n\t\t</template>\n\t\t<slot v-bind=\"{ visible }\" name=\"lastAction\" />\n\t</NcActions>\n</template>\n\n<script>\nimport { t } from '@nextcloud/l10n'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcActionSeparator from '@nextcloud/vue/components/NcActionSeparator'\nimport debounce from 'debounce'\nimport ActionListItem from './ActionListItem.vue'\nimport { BaseActionEntry } from './BaseActionEntry.js'\nimport { useMenuIDMixin } from './MenuBar.provider.js'\nimport { getActionState, getIsActive } from './utils.js'\n\nexport default {\n\tname: 'ActionList',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tActionListItem,\n\t},\n\textends: BaseActionEntry,\n\tmixins: [useMenuIDMixin],\n\tprops: {\n\t\tforceEnabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata: () => ({\n\t\tvisible: false,\n\t\thasEnabledChild: true,\n\t}),\n\tcomputed: {\n\t\tcurrentChild() {\n\t\t\tconst {\n\t\t\t\tstate,\n\t\t\t\teditor,\n\t\t\t\tactionEntry: { children },\n\t\t\t} = this\n\n\t\t\tif (!state.active) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\treturn children.find((child) => {\n\t\t\t\treturn getIsActive(child, editor)\n\t\t\t})\n\t\t},\n\t\ticon() {\n\t\t\tif (this.currentChild) {\n\t\t\t\treturn this.currentChild.icon\n\t\t\t}\n\n\t\t\treturn this.actionEntry.icon\n\t\t},\n\t\ticonKey() {\n\t\t\treturn `${this.actionEntry.key}/${this.activeKey}`\n\t\t},\n\t\tactiveKey() {\n\t\t\treturn this.currentChild?.key\n\t\t},\n\t\tchildren() {\n\t\t\treturn this.actionEntry.children.filter(({ visible }) => {\n\t\t\t\tif (visible === undefined) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\treturn typeof visible === 'function' ? visible(this) : visible\n\t\t\t})\n\t\t},\n\t\tlabelWithSelected() {\n\t\t\tif (this.currentChild) {\n\t\t\t\t// TRANSLATORS: examples - Headings, \"Heading 1\" is selected - Blocks, \"Info callout\" is selected\n\t\t\t\treturn t(\n\t\t\t\t\t'text',\n\t\t\t\t\t'{menuItemName}, \"{selectedSubMenuItemName}\" is selected',\n\t\t\t\t\t{\n\t\t\t\t\t\tmenuItemName: this.actionEntry.label,\n\t\t\t\t\t\tselectedSubMenuItemName: this.currentChild.label,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn this.actionEntry.label\n\t\t},\n\t\tisEnabled() {\n\t\t\treturn this.forceEnabled || this.hasEnabledChild\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$_updateState = debounce(this.checkStateOfChildren.bind(this), 50)\n\t\tthis.editor?.on('update', this.$_updateState)\n\t\tthis.editor?.on('selectionUpdate', this.$_updateState)\n\t},\n\tbeforeDestroy() {\n\t\tthis.editor?.off('update', this.$_updateState)\n\t\tthis.editor?.off('selectionUpdate', this.$_updateState)\n\t},\n\tmethods: {\n\t\tonOpenChange(val) {\n\t\t\tthis.visible = val\n\t\t},\n\t\trunAction() {\n\t\t\t// nothing todo\n\t\t},\n\t\tonTrigger(entry) {\n\t\t\tif (entry?.click) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.editor?.chain().focus().run()\n\t\t\tthis.$emit('trigged', entry)\n\t\t},\n\t\tcheckStateOfChildren() {\n\t\t\tthis.hasEnabledChild = this.children.some((child) =>\n\t\t\t\tthis.isChildEnabled(child),\n\t\t\t)\n\t\t},\n\t\tisChildEnabled(child) {\n\t\t\treturn !child.isSeparator && !getActionState(child, this.editor).disabled\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcButton\n\t\tclass=\"entry-single-action entry-action\"\n\t\t:class=\"state.class\"\n\t\t:disabled=\"state.disabled\"\n\t\t:aria-keyshortcuts=\"keyshortcuts || undefined\"\n\t\t:data-text-action-entry=\"actionEntry.key\"\n\t\t:aria-label=\"label\"\n\t\t:title=\"tooltip\"\n\t\tvariant=\"tertiary\"\n\t\t:pressed=\"actionType !== 'button' ? state.active : undefined\"\n\t\tv-on=\"$listeners\"\n\t\t@click=\"runAction\">\n\t\t<template #icon>\n\t\t\t<component :is=\"icon\" />\n\t\t</template>\n\n\t\t<template v-if=\"actionEntry.forceLabel\" #default>\n\t\t\t{{ label }}\n\t\t</template>\n\t</NcButton>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport { BaseActionEntry } from './BaseActionEntry.js'\n\nexport default {\n\tname: 'ActionSingle',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\textends: BaseActionEntry,\n\n\tprops: {\n\t\tisItem: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.editor?.on('transaction', () => this.updateState())\n\t},\n\n\tmethods: {\n\t\trunAction() {\n\t\t\tconst { actionEntry } = this\n\n\t\t\tif (actionEntry.click) {\n\t\t\t\tactionEntry.click(this)\n\t\t\t} else {\n\t\t\t\t// Some actions run themselves.\n\t\t\t\t// others still need to have .run() called upon them.\n\t\t\t\tactionEntry.action(this.editor?.chain().focus(), this.editor)?.run()\n\t\t\t}\n\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$emit('trigged', { ...actionEntry })\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n\tdata() {\n\t\treturn {\n\t\t\t/** Current menu entry that has focus */\n\t\t\tactiveMenuEntry: 0,\n\t\t\tentries: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tvisibleEntries() {\n\t\t\treturn this.entries\n\t\t},\n\t},\n\twatch: {\n\t\tvisibleEntries() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tif (\n\t\t\t\t\tthis.activeMenuEntry > this.visibleEntries.length\n\t\t\t\t\t|| this.visibleEntries[this.activeMenuEntry]?.disabled\n\t\t\t\t) {\n\t\t\t\t\tthis.setNextMenuEntry()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Update the disabled state of an menu entry\n\t\t * @param {string} menuKey The key of the menu entry that changed\n\t\t * @param {boolean} state The new disabled state\n\t\t */\n\t\tdisableMenuEntry(menuKey, state) {\n\t\t\tconst index = this.visibleEntries.findIndex(({ key }) => key === menuKey)\n\t\t\tthis.visibleEntries[index].disabled = state\n\t\t\tif (state === false && this.activeMenuEntry === index) {\n\t\t\t\tthis.$nextTick(() => this.setNextMenuEntry())\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Set the active menu entry to the next one (or reset to first)\n\t\t */\n\t\tsetNextMenuEntry() {\n\t\t\t// refs is not reactive so we must check this every time\n\t\t\tconst modulo =\n\t\t\t\tthis.visibleEntries.length + (this.$refs.remainingEntries ? 1 : 0)\n\n\t\t\tdo {\n\t\t\t\tthis.activeMenuEntry = (this.activeMenuEntry + 1) % modulo\n\t\t\t} while (\n\t\t\t\tthis.activeMenuEntry < this.visibleEntries.length\n\t\t\t\t&& this.visibleEntries[this.activeMenuEntry].disabled\n\t\t\t)\n\t\t},\n\t\t/**\n\t\t * Set the active menu entry to the previous one (or reset to last entry (remaining actions))\n\t\t */\n\t\tsetPreviousMenuEntry() {\n\t\t\t// refs is not reactive so we must check this every time\n\t\t\tconst modulo =\n\t\t\t\tthis.visibleEntries.length + (this.$refs.remainingEntries ? 1 : 0)\n\n\t\t\tdo {\n\t\t\t\tconst index = this.activeMenuEntry - 1\n\t\t\t\tthis.activeMenuEntry = ((index % modulo) + modulo) % modulo // needed as JS does not work with negative modulos\n\t\t\t} while (\n\t\t\t\tthis.activeMenuEntry < this.visibleEntries.length\n\t\t\t\t&& this.visibleEntries[this.activeMenuEntry].disabled\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Handle navigation in toolbar\n\t\t * @param {KeyboardEvent} event The keyup event\n\t\t */\n\t\thandleToolbarNavigation(event) {\n\t\t\tif (event.key === 'ArrowRight') {\n\t\t\t\tthis.setNextMenuEntry()\n\t\t\t} else if (event.key === 'ArrowLeft') {\n\t\t\t\tthis.setPreviousMenuEntry()\n\t\t\t}\n\n\t\t\tif (this.activeMenuEntry === this.visibleEntries.length) {\n\t\t\t\tthis.$refs.remainingEntries?.focusButton?.()\n\t\t\t} else {\n\t\t\t\t// The ref is in no order (ordered by the time they needed to mount), so we need to order them like they are shown on the menu\n\t\t\t\tconst entries = [...this.$refs.menuEntries].sort(\n\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\tthis.visibleEntries.findIndex(\n\t\t\t\t\t\t\t({ key }) => key === a.$vnode.data.key,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t- this.visibleEntries.findIndex(\n\t\t\t\t\t\t\t({ key }) => key === b.$vnode.data.key,\n\t\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\tentries[this.activeMenuEntry].focusButton()\n\t\t\t}\n\t\t},\n\t},\n})\n","<!--\n  - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div\n\t\tdata-text-el=\"readonly-bar\"\n\t\tclass=\"text-readonly-bar\"\n\t\t:class=\"{\n\t\t\t'text-readonly-bar--ready': isReady,\n\t\t\t'text-readonly-bar--is-workspace': isRichWorkspace,\n\t\t\t'text-readonly-bar--hide': isHidden,\n\t\t\t'is-mobile': $isMobile,\n\t\t}\">\n\t\t<div\n\t\t\tref=\"menubar\"\n\t\t\trole=\"toolbar\"\n\t\t\tclass=\"text-readonly-bar__entries\"\n\t\t\t:aria-label=\"t('text', 'Editor actions')\">\n\t\t\t<component\n\t\t\t\t:is=\"\n\t\t\t\t\tactionEntry.component\n\t\t\t\t\t\t? actionEntry.component\n\t\t\t\t\t\t: actionEntry.children\n\t\t\t\t\t\t\t? 'ActionList'\n\t\t\t\t\t\t\t: 'ActionSingle'\n\t\t\t\t\"\n\t\t\t\tv-for=\"(actionEntry, index) in visibleEntries\"\n\t\t\t\tref=\"menuEntries\"\n\t\t\t\t:key=\"actionEntry.key\"\n\t\t\t\t:action-entry=\"actionEntry\"\n\t\t\t\t:can-be-focussed=\"activeMenuEntry === index\"\n\t\t\t\t@disabled=\"disableMenuEntry(actionEntry.key, $event)\" />\n\t\t</div>\n\t\t<div class=\"text-readonly-bar__slot\">\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue'\n\nimport { t } from '@nextcloud/l10n'\nimport { useEditorFlags } from '../../composables/useEditorFlags.ts'\nimport { useMenuEntries } from '../../composables/useMenuEntries.ts'\nimport { useIsMobileMixin } from '../Editor.provider.ts'\nimport ActionList from './ActionList.vue'\nimport ActionSingle from './ActionSingle.vue'\nimport ToolBarLogic from './ToolBarLogic.js'\n\nexport default defineComponent({\n\tname: 'ReadonlyBar',\n\n\tcomponents: {\n\t\tActionList,\n\t\tActionSingle,\n\t},\n\n\textends: ToolBarLogic,\n\n\tmixins: [useIsMobileMixin],\n\n\tprops: {\n\t\tisHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\topenReadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: ['update:loaded'],\n\n\tsetup() {\n\t\tconst { isRichWorkspace } = useEditorFlags()\n\t\tconst { outlineEntries, readOnlyEditEntries } = useMenuEntries()\n\t\treturn {\n\t\t\tisRichWorkspace,\n\t\t\toutlineEntries,\n\t\t\treadOnlyEditEntries,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tentries: this.openReadOnly\n\t\t\t\t? [...this.readOnlyEditEntries, ...this.outlineEntries]\n\t\t\t\t: [...this.outlineEntries],\n\t\t\tisReady: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tthis.$nextTick(() => {\n\t\t\tthis.isReady = true\n\t\t\tthis.$emit('update:loaded', true)\n\t\t})\n\t},\n\n\tmethods: {\n\t\tt,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\n.text-readonly-bar {\n\t--background-blur: blur(10px);\n\tposition: sticky;\n\ttop: 0;\n\tbottom: var(--default-grid-baseline);\n\twidth: 100%;\n\t// Display above link previews and tables, but below dialogs and calendar event popover\n\tz-index: 4;\n\tbackground-color: var(--color-main-background-translucent);\n\tbackdrop-filter: var(--background-blur);\n\tmax-height: var(\n\t\t--default-clickable-area\n\t); // important for mobile so that the buttons are always inside the container\n\tborder-bottom: 1px solid var(--color-border);\n\tpadding-block: var(--default-grid-baseline);\n\n\tvisibility: hidden;\n\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\n\t&.is-mobile {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tborder-bottom: unset;\n\t}\n\n\t&.text-readonly-bar--ready:not(.text-readonly-bar--hide) {\n\t\tvisibility: visible;\n\t\tanimation-name: fadeInDown;\n\t\tanimation-duration: 0.3s;\n\t}\n\n\t&.text-readonly-bar--hide {\n\t\topacity: 0;\n\t\ttransition:\n\t\t\tvisibility 0.2s 0.4s,\n\t\t\topacity 0.2s 0.4s;\n\t}\n\t.text-readonly-bar__entries {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tmargin-left: max(0px, calc((100% - var(--text-editor-max-width)) / 2));\n\t}\n\n\t.text-readonly-bar__slot {\n\t\tjustify-content: flex-end;\n\t\tdisplay: flex;\n\t\tmin-width: max(0px, min(100px, (100% - var(--text-editor-max-width)) / 2));\n\t}\n\n\t&.text-readonly-bar--is-workspace {\n\t\t.text-readonly-bar__entries {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t@media (max-width: 660px) {\n\t\t.text-readonly-bar__entries {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n}\n</style>\n","import '../assets/NcActionCheckbox-CzUElysW.css';\nimport { i as mdiCheckboxMarked, j as mdiCheckboxBlankOutline } from \"./mdi-DkJglNiS.mjs\";\nimport { ref, watch } from \"vue\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-Bui9PhAS.mjs\";\nimport { u as useModelMigration } from \"./useModelMigration-EhAWvqDD.mjs\";\nimport { A as ActionGlobalMixin } from \"./actionGlobal-DqVa7c7G.mjs\";\nimport { G as GenRandomId } from \"./GenRandomId-F5ebeBB_.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst _sfc_main = {\n  name: \"NcActionCheckbox\",\n  components: {\n    NcIconSvgWrapper\n  },\n  mixins: [ActionGlobalMixin],\n  inject: {\n    isInSemanticMenu: {\n      from: \"NcActions:isSemanticMenu\",\n      default: false\n    }\n  },\n  model: {\n    prop: \"modelValue\",\n    event: \"update:modelValue\"\n  },\n  props: {\n    /**\n     * id attribute of the checkbox element\n     */\n    id: {\n      type: String,\n      default: () => \"action-\" + GenRandomId(),\n      validator: (id) => id.trim() !== \"\"\n    },\n    /**\n     * Removed in v9 - use `modelValue` (`v-model`) instead\n     *\n     * @deprecated\n     */\n    checked: {\n      type: Boolean,\n      // eslint-disable-next-line vue/no-boolean-default\n      default: void 0\n    },\n    /**\n     * checked state of the the checkbox element\n     */\n    modelValue: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * value of the checkbox input\n     */\n    value: {\n      type: [String, Number],\n      default: \"\"\n    },\n    /**\n     * disabled state of the checkbox element\n     */\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: [\n    /** Native change event */\n    \"change\",\n    /** Checkbox is checked */\n    \"check\",\n    /** Checkbox is unchecked */\n    \"uncheck\",\n    /**\n     * Removed in v9 - use `update:modelValue` (`v-model`) instead\n     *\n     * @deprecated\n     */\n    \"update:checked\",\n    /**\n     * Emitted when the checkbox state is changed\n     *\n     * @type {boolean}\n     */\n    \"update:modelValue\",\n    /** Same as update:modelValue for Vue 2 compatibility */\n    \"update:model-value\"\n  ],\n  setup() {\n    const model = useModelMigration(\"checked\", \"update:checked\");\n    const localModel = ref(model.value);\n    watch(model, (newValue) => localModel.value = newValue, { flush: \"sync\" });\n    watch(localModel, (newValue) => model.value = newValue, { flush: \"sync\" });\n    return {\n      localModel,\n      mdiCheckboxBlankOutline,\n      mdiCheckboxMarked\n    };\n  },\n  methods: {\n    onChange(event) {\n      this.$emit(\"change\", event);\n      if (event.target.checked) {\n        this.$emit(\"check\");\n      } else {\n        this.$emit(\"uncheck\");\n      }\n    }\n  }\n};\nvar _sfc_render = function render() {\n  var _vm = this, _c = _vm._self._c;\n  return _c(\"li\", { staticClass: \"action\", class: { \"action--disabled\": _vm.disabled }, attrs: { \"role\": _vm.isInSemanticMenu && \"presentation\" } }, [_c(\"label\", { staticClass: \"action-checkbox\", attrs: { \"role\": _vm.isInSemanticMenu && \"menuitemcheckbox\", \"aria-checked\": _vm.isInSemanticMenu && _vm.localModel.toString() } }, [_c(\"span\", { staticClass: \"action-checkbox__icon\" }, [_c(\"input\", { directives: [{ name: \"model\", rawName: \"v-model\", value: _vm.localModel, expression: \"localModel\" }], staticClass: \"action-checkbox__input\", class: { focusable: !_vm.disabled }, attrs: { \"id\": _vm.id, \"type\": \"checkbox\", \"disabled\": _vm.disabled }, domProps: { \"value\": _vm.value, \"checked\": Array.isArray(_vm.localModel) ? _vm._i(_vm.localModel, _vm.value) > -1 : _vm.localModel }, on: { \"change\": [function($event) {\n    var $$a = _vm.localModel, $$el = $event.target, $$c = $$el.checked ? true : false;\n    if (Array.isArray($$a)) {\n      var $$v = _vm.value, $$i = _vm._i($$a, $$v);\n      if ($$el.checked) {\n        $$i < 0 && (_vm.localModel = $$a.concat([$$v]));\n      } else {\n        $$i > -1 && (_vm.localModel = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));\n      }\n    } else {\n      _vm.localModel = $$c;\n    }\n  }, _vm.onChange] } }), _c(\"NcIconSvgWrapper\", { attrs: { \"path\": _vm.localModel ? _vm.mdiCheckboxMarked : _vm.mdiCheckboxBlankOutline, \"size\": 20 } })], 1), _c(\"span\", { staticClass: \"action-checkbox__text\" }, [_vm._v(_vm._s(_vm.text))])])]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"7fbb3c95\"\n);\nconst NcActionCheckbox = __component__.exports;\nexport {\n  NcActionCheckbox as N\n};\n//# sourceMappingURL=NcActionCheckbox-23CmleUh.mjs.map\n","\"use strict\";\n/* eslint-disable @typescript-eslint/no-magic-numbers */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalize = void 0;\nconst SLASH = 47;\nconst DOT = 46;\nconst assertPath = (path) => {\n    const t = typeof path;\n    if (t !== 'string') {\n        throw new TypeError(`Expected a string, got a ${t}`);\n    }\n};\n// this function is directly from node source\n// eslint-disable-next-line complexity\nconst posixNormalize = (path, allowAboveRoot) => {\n    let res = '';\n    let lastSegmentLength = 0;\n    let lastSlash = -1;\n    let dots = 0;\n    // eslint-disable-next-line @typescript-eslint/init-declarations\n    let code;\n    // eslint-disable-next-line no-plusplus\n    for (let i = 0; i <= path.length; ++i) {\n        if (i < path.length) {\n            code = path.charCodeAt(i);\n        }\n        else if (code === SLASH) {\n            break;\n        }\n        else {\n            code = SLASH;\n        }\n        if (code === SLASH) {\n            if (lastSlash === i - 1 || dots === 1) {\n                // NOOP\n            }\n            else if (lastSlash !== i - 1 && dots === 2) {\n                if (res.length < 2 ||\n                    lastSegmentLength !== 2 ||\n                    res.charCodeAt(res.length - 1) !== DOT ||\n                    res.charCodeAt(res.length - 2) !== DOT) {\n                    if (res.length > 2) {\n                        const lastSlashIndex = res.lastIndexOf('/');\n                        if (lastSlashIndex !== res.length - 1) {\n                            // eslint-disable-next-line max-depth\n                            if (lastSlashIndex === -1) {\n                                res = '';\n                                lastSegmentLength = 0;\n                            }\n                            else {\n                                res = res.slice(0, lastSlashIndex);\n                                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n                            }\n                            lastSlash = i;\n                            dots = 0;\n                            continue;\n                        }\n                    }\n                    else if (res.length === 2 || res.length === 1) {\n                        res = '';\n                        lastSegmentLength = 0;\n                        lastSlash = i;\n                        dots = 0;\n                        continue;\n                    }\n                }\n                if (allowAboveRoot) {\n                    if (res.length > 0) {\n                        res += '/..';\n                    }\n                    else {\n                        res = '..';\n                    }\n                    lastSegmentLength = 2;\n                }\n            }\n            else {\n                if (res.length > 0) {\n                    res += '/' + path.slice(lastSlash + 1, i);\n                }\n                else {\n                    res = path.slice(lastSlash + 1, i);\n                }\n                lastSegmentLength = i - lastSlash - 1;\n            }\n            lastSlash = i;\n            dots = 0;\n        }\n        else if (code === DOT && dots !== -1) {\n            // eslint-disable-next-line no-plusplus\n            ++dots;\n        }\n        else {\n            dots = -1;\n        }\n    }\n    return res;\n};\nconst decode = (s) => {\n    try {\n        return decodeURIComponent(s);\n    }\n    catch {\n        return s;\n    }\n};\nconst normalize = (p) => {\n    assertPath(p);\n    let path = p;\n    if (path.length === 0) {\n        return '.';\n    }\n    const isAbsolute = path.charCodeAt(0) === SLASH;\n    const trailingSeparator = path.charCodeAt(path.length - 1) === SLASH;\n    path = decode(path);\n    path = posixNormalize(path, !isAbsolute);\n    if (path.length === 0 && !isAbsolute) {\n        path = '.';\n    }\n    if (path.length > 0 && trailingSeparator) {\n        path += '/';\n    }\n    if (isAbsolute) {\n        return '/' + path;\n    }\n    return path;\n};\nexports.normalize = normalize;\nexports.default = exports.normalize;\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport pathNormalize from 'path-normalize'\n\nexport default class AttachmentResolver {\n\t#session\n\t#user\n\t#shareToken\n\t#currentDirectory\n\t#documentId\n\t#initAttachmentListPromise\n\t#attachmentList = []\n\n\tconstructor({ session, user, shareToken, currentDirectory, fileId }) {\n\t\tthis.#session = session\n\t\tthis.#user = user\n\t\tthis.#shareToken = shareToken\n\t\tthis.#currentDirectory = currentDirectory\n\t\tthis.#documentId = fileId ?? session.documentId\n\t\tthis.#initAttachmentListPromise = this.#updateAttachmentList()\n\t}\n\n\tasync #updateAttachmentList() {\n\t\tconst response = await axios.post(generateUrl('/apps/text/attachments'), {\n\t\t\tdocumentId: this.#session?.documentId ?? this.#documentId,\n\t\t\tsessionId: this.#session?.id,\n\t\t\tsessionToken: this.#session?.token,\n\t\t\tshareToken: this.#shareToken,\n\t\t})\n\t\tthis.#attachmentList = response.data\n\t}\n\n\t#findAttachment(fileName) {\n\t\treturn this.#attachmentList.find((a) => a.name === fileName)\n\t}\n\n\t/*\n\t * Resolve a given image/attachment src.\n\t * @param { string } src - the original src in the node.\n\t * @param { bool } fallback - fetch again attachmentsList if not found | defaul = true\n\t */\n\tasync resolve(src, fallback = true) {\n\t\tlet attachment\n\n\t\t// Native attachment\n\t\tconst directoryRegexp = /^\\.attachments\\.\\d+\\//\n\t\tif (src.match(directoryRegexp)) {\n\t\t\tconst imageFileName = decodeURIComponent(\n\t\t\t\tsrc.replace(directoryRegexp, '').split('?')[0],\n\t\t\t)\n\n\t\t\t// Wait until attachment list got fetched (initialized by constructor)\n\t\t\tawait this.#initAttachmentListPromise\n\t\t\tattachment = this.#findAttachment(imageFileName)\n\n\t\t\tif (fallback && !attachment) {\n\t\t\t\t// Update attachments list. Needed if attachments gets added to the session\n\t\t\t\tawait this.#updateAttachmentList()\n\t\t\t\tattachment = this.#findAttachment(imageFileName)\n\t\t\t}\n\n\t\t\tif (attachment) {\n\t\t\t\treturn attachment\n\t\t\t}\n\t\t}\n\n\t\t// Direct URLs\n\t\tif (isDirectUrl(src)) {\n\t\t\treturn {\n\t\t\t\tisImage: true,\n\t\t\t\tname: this.#name(src),\n\t\t\t\tpreviewUrl: src,\n\t\t\t\tfullUrl: src,\n\t\t\t}\n\t\t}\n\n\t\t// Fallback: Return DAV url (e.g. for relative paths to images)\n\t\treturn {\n\t\t\tisImage: true,\n\t\t\tname: this.#name(src),\n\t\t\tpreviewUrl: this.#davUrl(src),\n\t\t\tfullUrl: this.#davUrl(src),\n\t\t}\n\t}\n\n\t#name(src) {\n\t\treturn src.split('/').pop()\n\t}\n\n\t#davUrl(src) {\n\t\tif (this.#user) {\n\t\t\tconst uid = this.#user.uid\n\t\t\tconst encoded = this.#filePath(src)\n\t\t\t\t.split('/')\n\t\t\t\t.map(encodeURIComponent)\n\t\t\t\t.join('/')\n\t\t\treturn generateRemoteUrl(`dav/files/${uid}${encoded}`)\n\t\t}\n\n\t\tconst path = this.#filePath(src).split('/')\n\t\tconst basename = path.pop()\n\t\tconst dirname = path.join('/')\n\n\t\treturn generateUrl('/s/{token}/download?path={dirname}&files={basename}', {\n\t\t\ttoken: this.#shareToken,\n\t\t\tbasename,\n\t\t\tdirname,\n\t\t})\n\t}\n\n\t/**\n\t * Return the relativePath to a file specified in the url\n\t *\n\t * @param {string} src - url to extract path from\n\t */\n\t#relativePath(src) {\n\t\treturn decodeURI(src.split('?')[0])\n\t}\n\n\t#filePath(src) {\n\t\tconst f = [this.#currentDirectory, this.#relativePath(src)].join('/')\n\n\t\treturn pathNormalize(f)\n\t}\n}\n\n/**\n * Check if src is a direct URL.\n * Full URLs only work for images on the same Nextcloud instance (due to CORS restrictions).\n *\n * @param {string} src - the url to check\n */\nfunction isDirectUrl(src) {\n\treturn (\n\t\tsrc.startsWith('http://')\n\t\t|| src.startsWith('https://')\n\t\t|| src.startsWith('data:')\n\t)\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Check if current platform is a mobile device\n *\n * @return {boolean} whether the platform is a mobile device\n */\nexport function isMobilePlatform() {\n\t// Use client hints if already available\n\tif (navigator?.userAgentData?.mobile !== undefined)\n\t\treturn navigator.userAgentData.mobile\n\n\t// use regex to match userAgent (required for Safari and Firefox in 2022)\n\tconst mobileDevices = [\n\t\t/Android/i,\n\t\t/webOS/i,\n\t\t/iPhone/i,\n\t\t/iPad/i,\n\t\t/iPod/i,\n\t\t/playbook/i,\n\t\t/silk/i,\n\t\t/BlackBerry/i,\n\t\t/Windows Phone/i,\n\t]\n\n\treturn mobileDevices.some((regex) => navigator.userAgent.match(regex))\n}\n","<!--\n  - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcDialog\n\t\tsize=\"large\"\n\t\tdata-text-el=\"formatting-help\"\n\t\t:name=\"t('text', 'Formatting and shortcuts')\"\n\t\t:close-on-click-outside=\"true\"\n\t\t@closing=\"$emit('close')\">\n\t\t<h2>{{ t('text', 'Formatting and shortcuts') }}</h2>\n\t\t<p>{{ t('text', 'Speed up your writing with simple shortcuts.') }}</p>\n\t\t<p v-if=\"!isMobileCached\">\n\t\t\t{{\n\t\t\t\tt(\n\t\t\t\t\t'text',\n\t\t\t\t\t'Just type the Markdown syntax or use keyboard shortcuts from below.',\n\t\t\t\t)\n\t\t\t}}\n\t\t</p>\n\t\t<p v-else>\n\t\t\t{{ t('text', 'Just type the Markdown syntax from below.') }}\n\t\t</p>\n\n\t\t<table>\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>{{ t('text', 'Style') }}</th>\n\t\t\t\t\t<th>{{ t('text', 'Syntax') }}</th>\n\t\t\t\t\t<th v-if=\"!isMobileCached\">\n\t\t\t\t\t\t{{ t('text', 'Keyboard shortcuts') }}\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'New paragraph') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<kbd>{{ t('text', 'Enter') }}</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" />\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Hard line break') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<kbd>{{ t('text', 'Enter') }}</kbd>\n\t\t\t\t\t\t{{ t('text', 'followed by') }}\n\t\t\t\t\t\t<kbd>{{ t('text', 'Backspace') }}</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ t('text', 'Shift') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Enter') }}</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Bold') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>**{{ t('text', 'Bold text') }}**</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>B</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Italic') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>*{{ t('text', 'Italicized text') }}*</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>I</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Strikethrough') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>~~{{ t('text', 'Mistaken text') }}~~</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Shift') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>S</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Underline') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>__{{ t('text', 'Underlined text') }}__</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>U</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td class=\"ellipsis_top\">\n\t\t\t\t\t\t{{ t('text', 'Heading 1') }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td class=\"ellipsis_top\">\n\t\t\t\t\t\t<code># {{ t('text', 'Heading level 1') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" class=\"ellipsis_top\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Shift') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>1</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td class=\"noborder ellipsis\">…</td>\n\t\t\t\t\t<td class=\"noborder ellipsis\">…</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" class=\"ellipsis noborder\">…</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td class=\"noborder ellipsis_bottom\">\n\t\t\t\t\t\t{{ t('text', 'Heading 6') }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td class=\"noborder ellipsis_bottom\">\n\t\t\t\t\t\t<code>###### {{ t('text', 'Heading level 6') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" class=\"noborder ellipsis_bottom\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Shift') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>6</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Unordered list') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>* {{ t('text', 'An item') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Shift') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>8</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Ordered list') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>1. {{ t('text', 'First item') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Shift') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>7</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Checklist') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>* [] {{ t('text', 'To-Do item') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Shift') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>9</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Blockquote') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>> {{ t('text', 'Quoted text') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>></kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Code block') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>``` {{ t('text', 'Some code') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" />\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Link') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>[Title](https://example.org)</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\">\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>K</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Insert emoji') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>:{{ t('text', 'emoji') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" />\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Mention someone') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>@{{ t('text', 'name') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" />\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Smart picker') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<code>/{{ t('text', 'something') }}</code>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td v-if=\"!isMobileCached\" />\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\n\t\t<table vif=\"!isMobileCached\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>{{ t('text', 'Action') }}</th>\n\t\t\t\t\t<th>{{ t('text', 'Keyboard shortcuts') }}</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Undo') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>Z</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Redo') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>Y</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>{{ t('text', 'Toggle outline') }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<kbd>{{ ctrlOrModKey }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>{{ t('text', 'Alt') }}</kbd>\n\t\t\t\t\t\t+\n\t\t\t\t\t\t<kbd>H</kbd>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</NcDialog>\n</template>\n\n<script>\nimport { t } from '@nextcloud/l10n'\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\nimport { isMobilePlatform } from '../helpers/platform.js'\nimport { MODIFIERS, TRANSLATIONS } from './Menu/keys.js'\n\nexport default {\n\tname: 'HelpModal',\n\tcomponents: {\n\t\tNcDialog,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tformatted: {\n\t\t\t\tbold: true,\n\t\t\t\titalic: true,\n\t\t\t\tstrikethrough: true,\n\t\t\t\theading1: true,\n\t\t\t\theading6: true,\n\t\t\t\tunorderdList: true,\n\t\t\t\torderedList: true,\n\t\t\t\tcheckList: true,\n\t\t\t\tblockQuote: true,\n\t\t\t\tcodeBlock: true,\n\t\t\t},\n\t\t\tctrlOrModKey: TRANSLATIONS[MODIFIERS.Mod],\n\t\t}\n\t},\n\tcomputed: {\n\t\tisFormatted() {\n\t\t\treturn (style) => this.formatted[style]\n\t\t},\n\t\t// Cache the output of `isMobilePlatform()`\n\t\tisMobileCached() {\n\t\t\treturn this.isMobilePlatform()\n\t\t},\n\t},\n\tmethods: {\n\t\tt,\n\t\ttoggleFormatted(style) {\n\t\t\tthis.formatted[style] = !this.formatted[style]\n\t\t},\n\t\tisMobilePlatform,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../css/prosemirror';\n\ntable {\n\tmargin-top: 24px;\n\tborder-collapse: collapse;\n\twidth: 100%;\n\n\ttbody tr {\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\t}\n\n\tthead tr {\n\t\tborder: none;\n\t}\n\n\tth {\n\t\tfont-weight: bold;\n\t\tpadding: 0.75rem 1rem 0.75rem 0;\n\t\tborder-bottom: 2px solid var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tpadding: 0.75rem 1rem 0.75rem 0;\n\t\tborder-top: 1px solid var(--color-background-dark);\n\t\tborder-bottom: unset;\n\n\t\t&.noborder {\n\t\t\tborder-top: unset;\n\t\t}\n\n\t\t&.ellipsis_top {\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\t&.ellipsis {\n\t\t\tpadding-top: 0;\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\t&.ellipsis_bottom {\n\t\t\tpadding-top: 0;\n\t\t}\n\t}\n\n\tkbd {\n\t\tfont-size: smaller;\n\t}\n\n\tcode {\n\t\tpadding: 0.2em 0.4em;\n\t\tfont-size: 90%;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: 6px;\n\t}\n}\n\ndiv.ProseMirror {\n\tdisplay: inline;\n\tmargin-top: unset;\n\tposition: unset;\n\tpadding: unset;\n\tline-height: unset;\n\n\th1,\n\th6 {\n\t\tdisplay: inline;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t}\n}\n</style>\n","<!--\n  - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<NextcloudVueNcActionButton\n\t\tclose-after-click\n\t\tdata-text-action-entry=\"formatting-help\"\n\t\tv-on=\"$listeners\">\n\t\t<template #icon>\n\t\t\t<Help />\n\t\t</template>\n\t\t{{ t('text', 'Formatting help') }}\n\t</NextcloudVueNcActionButton>\n</template>\n\n<script>\nimport { t } from '@nextcloud/l10n'\nimport NextcloudVueNcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport { defineComponent } from 'vue'\nimport { Help } from '../icons.js'\n\nexport default defineComponent({\n\t// This component is used as a direct child of NcActions.\n\t// Even if it actually renders NcActionButton, NcActions cannot see it due to rendering limitations in Vue.\n\t// Though it works in general, NcActions doesn't handle it correctly. See NcActions docs for details.\n\t// Hotfix - rename the component to NcActionButton because it represents and renders it.\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'NcActionButton',\n\tcomponents: {\n\t\tNextcloudVueNcActionButton,\n\t\tHelp,\n\t},\n\tmethods: {\n\t\tt,\n\t},\n})\n</script>\n","<!--\n  - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcActionText data-text-action-entry=\"character-count\" :name=\"countString\">\n\t\t<template #icon>\n\t\t\t<AlphabeticalVariant />\n\t\t</template>\n\t</NcActionText>\n</template>\n\n<script>\nimport { translatePlural as n } from '@nextcloud/l10n'\nimport NcActionText from '@nextcloud/vue/components/NcActionText'\nimport { defineComponent, ref } from 'vue'\nimport { useEditor } from '../../composables/useEditor.ts'\nimport { AlphabeticalVariant } from '../icons.js'\n\nexport default defineComponent({\n\tname: 'CharacterCount',\n\tcomponents: {\n\t\tAlphabeticalVariant,\n\t\tNcActionText,\n\t},\n\tprops: {\n\t\tvisible: Boolean,\n\t},\n\tsetup() {\n\t\tconst { editor } = useEditor()\n\t\tconst countString = ref('')\n\t\tconst refresh = () => {\n\t\t\tconst { storage, state } = editor\n\t\t\t// characterCount is not reactive so we need this workaround\n\t\t\t// We also need to provide the doc as storage is a singleton in tiptap v2.\n\t\t\t// See ueberdosis/tiptap#6060\n\t\t\tconst wordCount = storage.characterCount.words({ node: state.doc })\n\t\t\tconst charCount = storage.characterCount.characters({ node: state.doc })\n\t\t\tconst words = n('text', '%n word', '%n words', wordCount)\n\t\t\tconst chars = n('text', '%n char', '%n chars', charCount)\n\t\t\tcountString.value = [words, chars].join(', ')\n\t\t\tconsole.debug({ wordCount, charCount, countString: countString.value })\n\t\t}\n\t\treturn { countString, refresh }\n\t},\n\twatch: {\n\t\tvisible: 'refresh',\n\t},\n\tcreated() {\n\t\tthis.refresh()\n\t},\n})\n</script>\n","<!--\n  - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcActionCheckbox\n\t\tv-if=\"canToggleWidth\"\n\t\t:checked=\"isFullWidth\"\n\t\t@update:checked=\"setFullWidth\">\n\t\t{{ t('text', 'Full width editor') }}\n\t</NcActionCheckbox>\n</template>\n\n<script setup>\nimport { t } from '@nextcloud/l10n'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport { useEditorWidth } from '../../composables/useEditorWidth.ts'\n\nconst { canToggleWidth, isFullWidth, setFullWidth } = useEditorWidth()\n</script>\n","<!--\n  - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div\n\t\t:id=\"randomID\"\n\t\tclass=\"text-menubar\"\n\t\tdata-text-el=\"menubar\"\n\t\trole=\"region\"\n\t\t:aria-label=\"t('text', 'Editor actions')\"\n\t\t:class=\"{\n\t\t\t'text-menubar--ready': isReady,\n\t\t\t'text-menubar--hide': isHidden,\n\t\t\t'text-menubar--is-workspace': isRichWorkspace,\n\t\t\t'is-mobile': $isMobile,\n\t\t}\">\n\t\t<HelpModal v-if=\"displayHelp\" @close=\"hideHelp\" />\n\n\t\t<div\n\t\t\tv-if=\"isRichEditor\"\n\t\t\tref=\"menubar\"\n\t\t\trole=\"toolbar\"\n\t\t\tclass=\"text-menubar__entries\"\n\t\t\t:aria-label=\"t('text', 'Formatting menu bar')\"\n\t\t\t@keyup.left.stop=\"handleToolbarNavigation\"\n\t\t\t@keyup.right.stop=\"handleToolbarNavigation\">\n\t\t\t<!-- The visible inline actions -->\n\t\t\t<component\n\t\t\t\t:is=\"\n\t\t\t\t\tactionEntry.component\n\t\t\t\t\t\t? actionEntry.component\n\t\t\t\t\t\t: actionEntry.children\n\t\t\t\t\t\t\t? 'ActionList'\n\t\t\t\t\t\t\t: 'ActionSingle'\n\t\t\t\t\"\n\t\t\t\tv-for=\"(actionEntry, index) in visibleEntries\"\n\t\t\t\tref=\"menuEntries\"\n\t\t\t\t:key=\"actionEntry.key\"\n\t\t\t\t:action-entry=\"actionEntry\"\n\t\t\t\t:can-be-focussed=\"activeMenuEntry === index\"\n\t\t\t\t@disabled=\"disableMenuEntry(actionEntry.key, $event)\"\n\t\t\t\t@click=\"activeMenuEntry = index\" />\n\n\t\t\t<!-- The remaining actions -->\n\t\t\t<ActionList\n\t\t\t\tref=\"remainingEntries\"\n\t\t\t\t:action-entry=\"hiddenEntries\"\n\t\t\t\t:can-be-focussed=\"activeMenuEntry === visibleEntries.length\"\n\t\t\t\t:force-enabled=\"true\"\n\t\t\t\t@click=\"activeMenuEntry = 'remain'\">\n\t\t\t\t<template #lastAction=\"{ visible }\">\n\t\t\t\t\t<WidthToggle />\n\t\t\t\t\t<ActionFormattingHelp @click=\"showHelp\" />\n\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t<CharacterCount v-bind=\"{ visible }\" />\n\t\t\t\t</template>\n\t\t\t</ActionList>\n\t\t</div>\n\t\t<div class=\"text-menubar__slot\">\n\t\t\t<slot />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport NcActionSeparator from '@nextcloud/vue/components/NcActionSeparator'\nimport { useElementSize } from '@vueuse/core'\nimport { ref } from 'vue'\n\nimport { t } from '@nextcloud/l10n'\nimport { useEditor } from '../../composables/useEditor.ts'\nimport { useEditorFlags } from '../../composables/useEditorFlags.ts'\nimport { useMenuEntries } from '../../composables/useMenuEntries.ts'\nimport { useIsMobileMixin } from '../Editor.provider.ts'\nimport HelpModal from '../HelpModal.vue'\nimport { DotsHorizontal } from '../icons.js'\nimport ActionFormattingHelp from './ActionFormattingHelp.vue'\nimport ActionList from './ActionList.vue'\nimport ActionSingle from './ActionSingle.vue'\nimport CharacterCount from './CharacterCount.vue'\nimport { MENU_ID } from './MenuBar.provider.js'\nimport ToolBarLogic from './ToolBarLogic.js'\nimport WidthToggle from './WidthToggle.vue'\n\nexport default {\n\tname: 'MenuBar',\n\tcomponents: {\n\t\tActionFormattingHelp,\n\t\tActionList,\n\t\tActionSingle,\n\t\tHelpModal,\n\t\tNcActionSeparator,\n\t\tCharacterCount,\n\t\tWidthToggle,\n\t},\n\textends: ToolBarLogic,\n\tmixins: [useIsMobileMixin],\n\tprovide() {\n\t\tconst val = {}\n\n\t\tObject.defineProperties(val, {\n\t\t\t[MENU_ID]: {\n\t\t\t\tget: () => this.randomID,\n\t\t\t},\n\t\t})\n\n\t\treturn val\n\t},\n\tprops: {\n\t\tisHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\topenReadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst editor = useEditor()\n\t\tconst { isPublic, isRichEditor, isRichWorkspace } = useEditorFlags()\n\t\tconst { assistantMenuEntries, menuEntries, readOnlyDoneEntries } =\n\t\t\tuseMenuEntries()\n\t\tconst menubar = ref()\n\t\tconst { width } = useElementSize(menubar)\n\t\treturn {\n\t\t\tassistantMenuEntries,\n\t\t\teditor,\n\t\t\tisPublic,\n\t\t\tisRichEditor,\n\t\t\tisRichWorkspace,\n\t\t\tmenubar,\n\t\t\tmenuEntries,\n\t\t\treadOnlyDoneEntries,\n\t\t\twidth,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tentries: (this.openReadOnly\n\t\t\t\t? [...this.readOnlyDoneEntries, ...this.menuEntries]\n\t\t\t\t: this.isPublic || this.isRichWorkspace\n\t\t\t\t\t? [...this.menuEntries]\n\t\t\t\t\t: [...this.menuEntries, ...this.assistantMenuEntries]\n\t\t\t).filter((entry) => !!entry),\n\t\t\trandomID: `menu-bar-${Math.ceil(Math.random() * 10000 + 500).toString(16)}`,\n\t\t\tdisplayHelp: false,\n\t\t\tisReady: false,\n\t\t\tresize: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tvisibleEntryKeys() {\n\t\t\t// if entry has no priority, we assume it always will be visible (priority: 0)\n\t\t\treturn this.entries\n\t\t\t\t.toSorted((a, b) => (a.priority ?? 0) - (b.priority ?? 0))\n\t\t\t\t.map((e) => e.key)\n\t\t\t\t.slice(0, this.iconsLimit)\n\t\t},\n\t\tvisibleEntries() {\n\t\t\t// only entries from `visibleEntryKeys but in original order\n\t\t\treturn this.entries.filter((entry) => {\n\t\t\t\treturn this.visibleEntryKeys.includes(entry.key)\n\t\t\t})\n\t\t},\n\t\thiddenEntries() {\n\t\t\tconst remainingEntries = this.entries.filter((entry) => {\n\t\t\t\t// reverse logic from visibleEntries\n\t\t\t\treturn !this.visibleEntryKeys.includes(entry.key)\n\t\t\t})\n\t\t\tconst entries = remainingEntries.reduce((acc, entry, index) => {\n\t\t\t\t// If entry has children, merge them into list. Otherwise keep entry itself.\n\t\t\t\tconst children = entry.children ?? [entry]\n\t\t\t\t// If this block has menu entries, it should be separated for better visibility and a11y (menu item radio grouping)\n\t\t\t\tif (children.length > 1) {\n\t\t\t\t\tconst hasPreviousItem = acc.length && !acc.at(-1).isSeparator\n\t\t\t\t\tconst separatorBefore = hasPreviousItem\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: `separator-before-${entry.id}`,\n\t\t\t\t\t\t\t\t\tisSeparator: true,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []\n\n\t\t\t\t\tconst hasNextItem = index !== remainingEntries.length - 1\n\t\t\t\t\tconst separatorAfter = hasNextItem\n\t\t\t\t\t\t? [{ key: `separator-after-${entry.id}`, isSeparator: true }]\n\t\t\t\t\t\t: []\n\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t...separatorBefore,\n\t\t\t\t\t\t...children,\n\t\t\t\t\t\t...separatorAfter,\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t\treturn [...acc, ...children]\n\t\t\t}, [])\n\n\t\t\treturn {\n\t\t\t\tkey: 'remain',\n\t\t\t\tlabel: this.t('text', 'Remaining actions'),\n\t\t\t\ticon: DotsHorizontal,\n\t\t\t\tchildren: entries,\n\t\t\t}\n\t\t},\n\t\ticonWidth() {\n\t\t\tconst style = this.menubar && getComputedStyle(this.menubar)\n\t\t\tconst clickableArea = style?.getPropertyValue('--default-clickable-area')\n\t\t\treturn parseInt(clickableArea) || 34\n\t\t},\n\t\ticonsLimit() {\n\t\t\t// leave some buffer - this is necessary so the bar does not wrap during resizing\n\t\t\tconst spaceToFill = this.width - 4\n\t\t\tconst spacePerSlot = this.$isMobile ? this.iconWidth : this.iconWidth + 2\n\t\t\tconst slots = Math.floor(spaceToFill / spacePerSlot)\n\t\t\t// Leave one slot empty for the three dot menu\n\t\t\treturn slots - 1\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$nextTick(() => {\n\t\t\tthis.isReady = true\n\t\t\tthis.$emit('update:loaded', true)\n\t\t})\n\t},\n\tmethods: {\n\t\tshowHelp() {\n\t\t\tthis.displayHelp = true\n\t\t},\n\n\t\thideHelp() {\n\t\t\tthis.displayHelp = false\n\t\t},\n\t\tt,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.text-menubar {\n\t--background-blur: blur(10px);\n\tposition: sticky;\n\ttop: 0;\n\tbottom: 0;\n\twidth: 100%;\n\t// Display above link previews and tables, but below dialogs and calendar event popover\n\tz-index: 4;\n\tbackground-color: var(--color-main-background-translucent);\n\tbackdrop-filter: var(--background-blur);\n\tborder-bottom: 1px solid var(--color-border);\n\tpadding-block: var(--default-grid-baseline);\n\n\tvisibility: hidden;\n\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\n\t&.is-mobile {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tborder-bottom: unset;\n\t}\n\n\t&.text-menubar--ready:not(.text-menubar--hide) {\n\t\tvisibility: visible;\n\t\tanimation-name: fadeInRight;\n\t\tanimation-duration: 0.3s;\n\t}\n\n\t&.text-menubar--hide {\n\t\topacity: 0;\n\t\ttransition:\n\t\t\tvisibility 0.2s 0.4s,\n\t\t\topacity 0.2s 0.4s;\n\t}\n\t.text-menubar__entries {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tmargin-left: max(0px, calc((100% - var(--text-editor-max-width)) / 2));\n\t}\n\n\t.text-menubar__slot {\n\t\tjustify-content: flex-end;\n\t\tdisplay: flex;\n\t\tmin-width: max(0px, min(100px, (100% - var(--text-editor-max-width)) / 2));\n\t}\n\n\t&.text-menubar--is-workspace {\n\t\t.text-menubar__entries {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t@media (max-width: 660px) {\n\t\t.text-menubar__entries {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n}\n</style>\n"],"names":["useMenuEntries","isRichWorkspace","useEditorFlags","assistantMenuEntries","getAssistantMenuEntries","menuEntries","getMenuEntries","outlineEntries","readOnlyDoneEntries","readOnlyEditEntries","_sfc_main","NextcloudVueNcActionButton","BaseActionEntry","actionEntry","NcActions","NcActionSeparator","ActionListItem","useMenuIDMixin","state","editor","children","child","getIsActive","visible","t","debounce","val","entry","getActionState","NcButton","ToolBarLogic","defineComponent","menuKey","index","key","modulo","event","a","b","ActionList","ActionSingle","useIsMobileMixin","NcIconSvgWrapper","ActionGlobalMixin","GenRandomId","id","model","useModelMigration","localModel","ref","watch","newValue","mdiCheckboxBlankOutline","mdiCheckboxMarked","_sfc_render","_vm","_c","$event","$$a","$$el","$$c","$$v","$$i","_sfc_staticRenderFns","__component__","normalizeComponent","NcActionCheckbox","exports","SLASH","DOT","assertPath","path","posixNormalize","allowAboveRoot","res","lastSegmentLength","lastSlash","dots","code","i","lastSlashIndex","decode","s","normalize","p","isAbsolute","trailingSeparator","AttachmentResolver","#session","#user","#shareToken","#currentDirectory","#documentId","#initAttachmentListPromise","#attachmentList","session","user","shareToken","currentDirectory","fileId","#updateAttachmentList","response","axios","generateUrl","#findAttachment","fileName","src","fallback","attachment","directoryRegexp","imageFileName","isDirectUrl","#name","#davUrl","uid","encoded","#filePath","generateRemoteUrl","basename","dirname","#relativePath","f","pathNormalize","isMobilePlatform","regex","NcDialog","TRANSLATIONS","MODIFIERS","style","Help","AlphabeticalVariant","NcActionText","useEditor","countString","storage","wordCount","charCount","words","n","chars","canToggleWidth","isFullWidth","setFullWidth","useEditorWidth","ActionFormattingHelp","HelpModal","CharacterCount","WidthToggle","MENU_ID","isPublic","isRichEditor","menubar","width","useElementSize","e","remainingEntries","entries","acc","separatorBefore","separatorAfter","DotsHorizontal","clickableArea","spaceToFill","spacePerSlot"],"mappings":"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","x_google_ignoreList":[6,7]}