{"version":3,"file":"Create-BDEmJUVR.chunk.mjs","sources":["../node_modules/@material-symbols/svg-400/outlined/lock.svg?raw","../src/components/AddQuestionMenu.vue","../src/views/Create.vue"],"sourcesContent":["export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M220-80q-24.75 0-42.37-17.63Q160-115.25 160-140v-434q0-24.75 17.63-42.38Q195.25-634 220-634h70v-96q0-78.85 55.61-134.42Q401.21-920 480.11-920q78.89 0 134.39 55.58Q670-808.85 670-730v96h70q24.75 0 42.38 17.62Q800-598.75 800-574v434q0 24.75-17.62 42.37Q764.75-80 740-80H220Zm0-60h520v-434H220v434Zm314.5-162.03Q557-324.06 557-355q0-30-22.67-54.5t-54.5-24.5q-31.83 0-54.33 24.5t-22.5 55q0 30.5 22.67 52.5t54.5 22q31.83 0 54.33-22.03ZM350-634h260v-96q0-54.17-37.88-92.08-37.88-37.92-92-37.92T388-822.08q-38 37.91-38 92.08v96ZM220-140v-434 434Z\\\"/></svg>\"","<!--\n  - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcActions\n\t\tv-model:open=\"openLocal\"\n\t\t:container=\"container\"\n\t\t:menuName=\"menuName\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t:variant=\"variant\"\n\t\t:primary=\"primary\">\n\t\t<template #icon>\n\t\t\t<NcLoadingIcon v-if=\"isLoadingQuestions\" :size=\"20\" />\n\t\t\t<NcIconSvgWrapper v-else :svg=\"IconPlus\" />\n\t\t</template>\n\n\t\t<template v-if=\"!activeQuestionType\">\n\t\t\t<NcActionButton\n\t\t\t\tv-for=\"(answer, type) in answerTypesFilter\"\n\t\t\t\t:key=\"answer.label\"\n\t\t\t\t:closeAfterClick=\"!hasSubtypes(answer)\"\n\t\t\t\t:disabled=\"isLoadingQuestions\"\n\t\t\t\t:isMenu=\"hasSubtypes(answer)\"\n\t\t\t\tclass=\"question-menu__question\"\n\t\t\t\t@click=\"onPrimaryClick(answer, type, position)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"answer.icon\" />\n\t\t\t\t</template>\n\t\t\t\t{{ answer.label }}\n\t\t\t</NcActionButton>\n\t\t</template>\n\n\t\t<template v-else>\n\t\t\t<NcActionButton\n\t\t\t\t:disabled=\"isLoadingQuestions\"\n\t\t\t\tclass=\"question-menu__question\"\n\t\t\t\t@click=\"activeQuestionType = null\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconChevronLeft\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('forms', 'Grid') }}\n\t\t\t</NcActionButton>\n\t\t\t<NcActionSeparator />\n\n\t\t\t<NcActionButton\n\t\t\t\tv-for=\"(answer, type) in answerTypesFilter[activeQuestionType]\n\t\t\t\t\t.subtypes\"\n\t\t\t\t:key=\"'subtype-' + answer.label\"\n\t\t\t\tcloseAfterClick\n\t\t\t\t:disabled=\"isLoadingQuestions\"\n\t\t\t\tclass=\"question-menu__question\"\n\t\t\t\t@click=\"onSubtypeClick(activeQuestionType, type, position)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"answer.icon\" />\n\t\t\t\t</template>\n\t\t\t\t{{ answer.label }}\n\t\t\t</NcActionButton>\n\t\t</template>\n\t</NcActions>\n</template>\n\n<script>\nimport IconPlus from '@material-symbols/svg-400/outlined/add.svg?raw'\nimport IconChevronLeft from '@material-symbols/svg-400/outlined/chevron_left.svg?raw'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcActionSeparator from '@nextcloud/vue/components/NcActionSeparator'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\n\nexport default {\n\tname: 'AddQuestionMenu',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionSeparator,\n\t\tNcIconSvgWrapper,\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\topen: { type: Boolean, default: false },\n\t\tcontainer: { type: String, default: 'body' },\n\t\tmenuName: { type: String, default: null },\n\t\tariaLabel: { type: String, default: null },\n\t\tvariant: { type: String, default: null },\n\t\tprimary: { type: Boolean, default: false },\n\t\tposition: { type: Number, default: null },\n\t\tisLoadingQuestions: { type: Boolean, default: false },\n\t\tanswerTypesFilter: { type: Object, required: true },\n\t\thasSubtypes: { type: Function, required: true },\n\t},\n\n\temits: ['update:open', 'addQuestion'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconChevronLeft,\n\t\t\tIconPlus,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tactiveQuestionType: null,\n\t\t\topenLocal: this.open,\n\t\t}\n\t},\n\n\twatch: {\n\t\topen(v) {\n\t\t\tthis.openLocal = v\n\t\t},\n\n\t\topenLocal(v) {\n\t\t\tthis.$emit('update:open', v)\n\t\t\tif (!v) this.activeQuestionType = null\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonPrimaryClick(answer, type, position) {\n\t\t\tif (this.hasSubtypes(answer)) {\n\t\t\t\tthis.activeQuestionType = type\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('addQuestion', type, null, position)\n\t\t\tthis.openLocal = false\n\t\t},\n\n\t\tonSubtypeClick(type, subtype, position) {\n\t\t\tthis.$emit('addQuestion', type, subtype, position)\n\t\t\tthis.openLocal = false\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.question-menu__question {\n\tmin-width: 200px;\n}\n</style>\n","<!--\n  - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcAppContent\n\t\t:pageHeading=\"\n\t\t\tform.title ? t('forms', 'Edit form') : t('forms', 'Create form')\n\t\t\">\n\t\t<!-- Show results & sidebar button -->\n\t\t<TopBar\n\t\t\t:archived=\"isFormArchived\"\n\t\t\t:locked=\"isFormLocked\"\n\t\t\t:permissions=\"form?.permissions\"\n\t\t\t:sidebarOpened=\"sidebarOpened\"\n\t\t\t:submissionCount=\"form?.submissionCount\"\n\t\t\t@shareForm=\"onShareForm\" />\n\n\t\t<NcEmptyContent\n\t\t\tv-if=\"isLoadingForm\"\n\t\t\tclass=\"emtpycontent\"\n\t\t\t:name=\"t('forms', 'Loading {title} …', { title: form.title })\">\n\t\t\t<template #icon>\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"isFormArchived\"\n\t\t\tclass=\"emtpycontent\"\n\t\t\t:name=\"t('forms', 'Form is archived')\"\n\t\t\t:description=\"\n\t\t\t\tt('forms', 'Form \\'{title}\\' is archived and cannot be modified.', {\n\t\t\t\t\ttitle: form.title,\n\t\t\t\t})\n\t\t\t\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :svg=\"IconLock\" :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"isFormLocked\"\n\t\t\tclass=\"emtpycontent\"\n\t\t\t:name=\"t('forms', 'Form is locked')\"\n\t\t\t:description=\"\n\t\t\t\tt(\n\t\t\t\t\t'forms',\n\t\t\t\t\t'Form \\'{title}\\' is locked by {lockedBy} and cannot be modified. The lock expires: {lockedUntil}',\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: form.title,\n\t\t\t\t\t\tlockedBy: form.lockedBy,\n\t\t\t\t\t\tlockedUntil:\n\t\t\t\t\t\t\tform.lockedUntil === 0\n\t\t\t\t\t\t\t\t? t('forms', 'never')\n\t\t\t\t\t\t\t\t: lockedUntilFormatted,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :svg=\"IconLock\" :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<template v-else>\n\t\t\t<!-- Forms title & description-->\n\t\t\t<header>\n\t\t\t\t<h2>\n\t\t\t\t\t<label class=\"hidden-visually\" for=\"form-title\">{{\n\t\t\t\t\t\tt('forms', 'Form title')\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tid=\"form-title\"\n\t\t\t\t\t\tref=\"title\"\n\t\t\t\t\t\tv-model=\"form.title\"\n\t\t\t\t\t\tclass=\"form-title\"\n\t\t\t\t\t\trows=\"1\"\n\t\t\t\t\t\tdir=\"auto\"\n\t\t\t\t\t\t:maxlength=\"maxStringLengths.formTitle\"\n\t\t\t\t\t\t:placeholder=\"t('forms', 'Form title')\"\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tautofocus\n\t\t\t\t\t\t@keydown.enter.prevent\n\t\t\t\t\t\t@input=\"onTitleChange\" />\n\t\t\t\t</h2>\n\t\t\t\t<label class=\"hidden-visually\" for=\"form-desc\">\n\t\t\t\t\t{{ t('forms', 'Description') }}\n\t\t\t\t</label>\n\t\t\t\t<textarea\n\t\t\t\t\tid=\"form-desc\"\n\t\t\t\t\tref=\"description\"\n\t\t\t\t\tclass=\"form-desc\"\n\t\t\t\t\trows=\"1\"\n\t\t\t\t\tdir=\"auto\"\n\t\t\t\t\t:value=\"form.description\"\n\t\t\t\t\t:placeholder=\"\n\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t\t'Description (formatting using Markdown is supported)',\n\t\t\t\t\t\t)\n\t\t\t\t\t\"\n\t\t\t\t\t:maxlength=\"maxStringLengths.formDescription\"\n\t\t\t\t\t@input=\"updateDescription\" />\n\t\t\t\t<!-- Show expiration message-->\n\t\t\t\t<p v-if=\"form.expires && form.showExpiration\" class=\"info-message\">\n\t\t\t\t\t{{ expirationMessage }}\n\t\t\t\t</p>\n\t\t\t\t<!-- Generate form information message-->\n\t\t\t\t<p v-if=\"infoMessage\" class=\"info-message\">\n\t\t\t\t\t{{ infoMessage }}\n\t\t\t\t</p>\n\t\t\t</header>\n\n\t\t\t<section>\n\t\t\t\t<!-- Questions list -->\n\t\t\t\t<Draggable\n\t\t\t\t\tv-model=\"form.questions\"\n\t\t\t\t\t:animation=\"300\"\n\t\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t\tdirection=\"vertical\"\n\t\t\t\t\tinvertSwap\n\t\t\t\t\thandle=\".question__drag-handle\"\n\t\t\t\t\t@update=\"onQuestionOrderChange\"\n\t\t\t\t\t@start=\"onDragStart\"\n\t\t\t\t\t@end=\"onDragEnd\">\n\t\t\t\t\t<TransitionGroup\n\t\t\t\t\t\ttag=\"ul\"\n\t\t\t\t\t\t:name=\"isDragging ? undefined : 'question-list'\"\n\t\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"answerTypes[question.type].component\"\n\t\t\t\t\t\t\tv-for=\"(question, index) in form.questions\"\n\t\t\t\t\t\t\t:key=\"question.id\"\n\t\t\t\t\t\t\t:ref=\"(el) => setQuestionRef(el, question)\"\n\t\t\t\t\t\t\tv-bind=\"form.questions[index]\"\n\t\t\t\t\t\t\t:canMoveDown=\"index < form.questions.length - 1\"\n\t\t\t\t\t\t\t:canMoveUp=\"index > 0\"\n\t\t\t\t\t\t\t:answerType=\"answerTypes[question.type]\"\n\t\t\t\t\t\t\t:index=\"index + 1\"\n\t\t\t\t\t\t\t:maxStringLengths=\"maxStringLengths\"\n\t\t\t\t\t\t\t@update:text=\"\n\t\t\t\t\t\t\t\t(val) => (form.questions[index].text = val)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@update:description=\"\n\t\t\t\t\t\t\t\t(val) => (form.questions[index].description = val)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@update:isRequired=\"\n\t\t\t\t\t\t\t\t(val) => (form.questions[index].isRequired = val)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@update:name=\"\n\t\t\t\t\t\t\t\t(val) => (form.questions[index].name = val)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@update:extraSettings=\"\n\t\t\t\t\t\t\t\t(val) => (form.questions[index].extraSettings = val)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@update:options=\"\n\t\t\t\t\t\t\t\t(val) => (form.questions[index].options = val)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@clone=\"cloneQuestion(question, index)\"\n\t\t\t\t\t\t\t@delete=\"deleteQuestion(question.id)\"\n\t\t\t\t\t\t\t@moveDown=\"onMoveDown(index)\"\n\t\t\t\t\t\t\t@moveUp=\"onMoveUp(index)\">\n\t\t\t\t\t\t\t<template\n\t\t\t\t\t\t\t\tv-if=\"index < form.questions.length - 1\"\n\t\t\t\t\t\t\t\t#insert>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"question-insert\"\n\t\t\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t'is-open':\n\t\t\t\t\t\t\t\t\t\t\t\tinsertMenuOpenedIndex === index,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t'is-mobile': isMobile,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t]\">\n\t\t\t\t\t\t\t\t\t<AddQuestionMenu\n\t\t\t\t\t\t\t\t\t\t:menuName=\"t('forms', 'Insert question')\"\n\t\t\t\t\t\t\t\t\t\t:aria-label=\"\n\t\t\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t\t\t\t\t\t\t'Insert question after question {index}',\n\t\t\t\t\t\t\t\t\t\t\t\t{ index: index + 1 },\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t\t:position=\"index\"\n\t\t\t\t\t\t\t\t\t\t:isLoadingQuestions=\"isLoadingQuestions\"\n\t\t\t\t\t\t\t\t\t\t:answerTypesFilter=\"answerTypesFilter\"\n\t\t\t\t\t\t\t\t\t\t:hasSubtypes=\"hasSubtypes\"\n\t\t\t\t\t\t\t\t\t\t@update:open=\"\n\t\t\t\t\t\t\t\t\t\t\t(v) =>\n\t\t\t\t\t\t\t\t\t\t\t\t(insertMenuOpenedIndex = v\n\t\t\t\t\t\t\t\t\t\t\t\t\t? index\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null)\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t@addQuestion=\"addQuestion\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</component>\n\t\t\t\t\t</TransitionGroup>\n\t\t\t\t</Draggable>\n\n\t\t\t\t<!-- Add new questions menu -->\n\t\t\t\t<div class=\"question-menu\">\n\t\t\t\t\t<AddQuestionMenu\n\t\t\t\t\t\tv-model:open=\"questionMenuOpened\"\n\t\t\t\t\t\t:menuName=\"t('forms', 'Add a question')\"\n\t\t\t\t\t\t:aria-label=\"t('forms', 'Add a question')\"\n\t\t\t\t\t\t:isLoadingQuestions=\"isLoadingQuestions\"\n\t\t\t\t\t\t:answerTypesFilter=\"answerTypesFilter\"\n\t\t\t\t\t\t:hasSubtypes=\"hasSubtypes\"\n\t\t\t\t\t\tprimary\n\t\t\t\t\t\t@addQuestion=\"addQuestion\" />\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t</template>\n\t</NcAppContent>\n</template>\n\n<script>\nimport IconLock from '@material-symbols/svg-400/outlined/lock.svg?raw'\nimport axios from '@nextcloud/axios'\nimport { showError } from '@nextcloud/dialogs'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport moment from '@nextcloud/moment'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { useIsMobile } from '@nextcloud/vue'\nimport debounce from 'debounce'\nimport { VueDraggable as Draggable } from 'vue-draggable-plus'\nimport NcAppContent from '@nextcloud/vue/components/NcAppContent'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\nimport AddQuestionMenu from '../components/AddQuestionMenu.vue'\nimport Question from '../components/Questions/Question.vue'\nimport QuestionLong from '../components/Questions/QuestionLong.vue'\nimport QuestionMultiple from '../components/Questions/QuestionMultiple.vue'\nimport QuestionShort from '../components/Questions/QuestionShort.vue'\nimport TopBar from '../components/TopBar.vue'\nimport ViewsMixin from '../mixins/ViewsMixin.js'\nimport answerTypes from '../models/AnswerTypes.js'\nimport { FormState, INPUT_DEBOUNCE_MS } from '../models/Constants.ts'\nimport logger from '../utils/Logger.js'\nimport OcsResponse2Data from '../utils/OcsResponse2Data.js'\nimport SetWindowTitle from '../utils/SetWindowTitle.js'\n\nwindow.axios = axios\n\nexport default {\n\t// eslint-disable-next-line vue/multi-word-component-names\n\tname: 'Create',\n\tcomponents: {\n\t\tDraggable,\n\t\tNcIconSvgWrapper,\n\t\tAddQuestionMenu,\n\t\tNcAppContent,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tNcNoteCard,\n\t\tQuestion,\n\t\tQuestionLong,\n\t\tQuestionShort,\n\t\tQuestionMultiple,\n\t\tTopBar,\n\t},\n\n\tmixins: [ViewsMixin],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconLock,\n\t\t\tisMobile: useIsMobile(),\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tanswerTypes,\n\n\t\t\t// Various states\n\t\t\tisLoadingQuestions: false,\n\t\t\tisDragging: false,\n\n\t\t\tmaxStringLengths: loadState('forms', 'maxStringLengths'),\n\t\t\tquestionMenuOpened: false,\n\t\t\tactiveQuestionType: null,\n\t\t\tquestionRefsMap: {},\n\n\t\t\t// when set to a number, the next created question will be inserted at this index\n\t\t\tinsertMenuOpenedIndex: null,\n\t\t\t// controls per-question insert menu visibility\n\t\t\tinsertMenuOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasQuestions() {\n\t\t\treturn this.form.questions && this.form.questions.length === 0\n\t\t},\n\n\t\tisRequiredUsed() {\n\t\t\treturn this.form.questions.reduce(\n\t\t\t\t(isUsed, question) => isUsed || question.isRequired,\n\t\t\t\tfalse,\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Check if form is expired\n\t\t */\n\t\tisExpired() {\n\t\t\treturn this.form.expires && moment().unix() > this.form.expires\n\t\t},\n\n\t\t/**\n\t\t * Check if the form was archived\n\t\t */\n\t\tisFormArchived() {\n\t\t\treturn this.form.state === FormState.FormArchived\n\t\t},\n\n\t\tinfoMessage() {\n\t\t\tlet message = ''\n\t\t\tif (this.form.isAnonymous) {\n\t\t\t\tmessage += t('forms', 'Responses are anonymous.')\n\t\t\t}\n\n\t\t\t// On Submit, this is dependent on `isLoggedIn`. Create-view is always logged in and the variable isLoggedIn does not exist.\n\t\t\tif (!this.form.isAnonymous && true) {\n\t\t\t\tmessage += t('forms', 'Responses are connected to your account.')\n\t\t\t}\n\n\t\t\tif (this.isRequiredUsed) {\n\t\t\t\tmessage +=\n\t\t\t\t\t' '\n\t\t\t\t\t+ t('forms', 'An asterisk (*) indicates mandatory questions.')\n\t\t\t}\n\n\t\t\treturn message\n\t\t},\n\n\t\texpirationMessage() {\n\t\t\tconst relativeDate = moment(this.form.expires, 'X')\n\t\t\t\t.locale(window.OC.getLanguage())\n\t\t\t\t.fromNow()\n\t\t\tif (this.isExpired) {\n\t\t\t\treturn t('forms', 'Expired {relativeDate}.', { relativeDate })\n\t\t\t}\n\t\t\treturn t('forms', 'Expires {relativeDate}.', { relativeDate })\n\t\t},\n\n\t\t// Remove properties from answerTypes for create button\n\t\tanswerTypesFilter() {\n\t\t\t// Remove 'datetime' from answerTypes for create button\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\tconst { datetime, ...filteredAnswerTypes } = answerTypes\n\t\t\treturn filteredAnswerTypes\n\t\t},\n\n\t\thasSubtypes() {\n\t\t\treturn (answer) =>\n\t\t\t\tanswer && answer.subtypes && Object.keys(answer.subtypes).length > 0\n\t\t},\n\n\t\tlockedUntilFormatted() {\n\t\t\treturn moment(this.form.lockedUntil, 'X').fromNow()\n\t\t},\n\t},\n\n\twatch: {\n\t\t// Fetch full form on change\n\t\thash() {\n\t\t\tthis.fetchFullForm(this.form.id)\n\t\t},\n\n\t\t// Update Window-Title on title change\n\t\t'form.title': function () {\n\t\t\tSetWindowTitle(this.formTitle)\n\t\t},\n\n\t\t// resize description if form is loaded\n\t\tisLoadingForm(value) {\n\t\t\tif (!value) {\n\t\t\t\tthis.resizeTitle()\n\t\t\t\tthis.resizeDescription()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.fetchFullForm(this.form.id)\n\t\tSetWindowTitle(this.formTitle)\n\t},\n\n\tmethods: {\n\t\tonDragStart() {\n\t\t\tthis.isDragging = true\n\t\t},\n\n\t\tonDragEnd() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.isDragging = false\n\t\t\t})\n\t\t},\n\n\t\tsetQuestionRef(el, question) {\n\t\t\tif (el) {\n\t\t\t\tthis.questionRefsMap[question.id] = el\n\t\t\t} else {\n\t\t\t\tdelete this.questionRefsMap[question.id]\n\t\t\t}\n\t\t},\n\n\t\tonMoveUp(index) {\n\t\t\tif (index > 0) {\n\t\t\t\t;[this.form.questions[index - 1], this.form.questions[index]] = [\n\t\t\t\t\tthis.form.questions[index],\n\t\t\t\t\tthis.form.questions[index - 1],\n\t\t\t\t]\n\t\t\t\tthis.onQuestionOrderChange()\n\t\t\t}\n\t\t},\n\n\t\tonMoveDown(index) {\n\t\t\t// only if not the last one\n\t\t\tif (index < this.form.questions.length - 1) {\n\t\t\t\tthis.onMoveUp(index + 1)\n\t\t\t}\n\t\t},\n\n\t\tonTitleChange() {\n\t\t\tthis.resizeTitle()\n\t\t\tthis.saveTitle()\n\t\t},\n\n\t\t/**\n\t\t * Auto adjust the title height based its scroll height\n\t\t */\n\t\tresizeTitle() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst textarea = this.$refs.title\n\t\t\t\ttextarea.style.cssText = 'height: 0'\n\t\t\t\t// include 2px border\n\t\t\t\ttextarea.style.cssText = `height: ${textarea.scrollHeight + 4}px`\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Auto adjust the description height based on its scroll height\n\t\t */\n\t\tresizeDescription() {\n\t\t\t// nextTick to ensure textarea is attached to DOM\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst textarea = this.$refs.description\n\t\t\t\ttextarea.style.cssText = 'height: 0'\n\t\t\t\t// include 2px border\n\t\t\t\ttextarea.style.cssText = `height: ${textarea.scrollHeight + 4}px`\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Update the description\n\t\t *\n\t\t * @param {InputEvent} ev The input event of the textarea\n\t\t */\n\t\tupdateDescription({ target }) {\n\t\t\tthis.form.description = target.value\n\t\t\tthis.resizeDescription()\n\t\t\tthis.saveDescription()\n\t\t},\n\n\t\t/**\n\t\t * Title & description save methods\n\t\t */\n\t\tsaveTitle: debounce(async function () {\n\t\t\tthis.saveFormProperty('title')\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\tsaveDescription: debounce(async function () {\n\t\t\tthis.saveFormProperty('description')\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\t/**\n\t\t * Add a new question to the current form\n\t\t *\n\t\t * @param {string} type the question type, see AnswerTypes\n\t\t * @param {string|null} subtype the question subtype, see AnswerTypes.subtypes\n\t\t * @param {number|null} position where the new question should be added\n\t\t */\n\t\tasync addQuestion(type, subtype = null, position = null) {\n\t\t\tthis.activeQuestionType = null\n\t\t\tconst text = ''\n\t\t\tthis.isLoadingQuestions = true\n\n\t\t\ttry {\n\t\t\t\tconst body = { type, text, subtype }\n\t\t\t\tif (position !== null) {\n\t\t\t\t\t// position: current question position + 2 (0-based index: +1, next position: +1)\n\t\t\t\t\tbody.position = position + 2\n\t\t\t\t}\n\n\t\t\t\tconst response = await axios.post(\n\t\t\t\t\tgenerateOcsUrl('apps/forms/api/v3/forms/{id}/questions', {\n\t\t\t\t\t\tid: this.form.id,\n\t\t\t\t\t}),\n\t\t\t\t\tbody,\n\t\t\t\t)\n\t\t\t\tconst question = OcsResponse2Data(response)\n\n\t\t\t\t// Delegate insertion & focus handling to helper\n\t\t\t\tthis.insertQuestion(question, { text, type, answers: [] }, position)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while adding new question', { error })\n\t\t\t\tshowError(\n\t\t\t\t\tt('forms', 'There was an error while adding the new question'),\n\t\t\t\t)\n\t\t\t} finally {\n\t\t\t\tthis.isLoadingQuestions = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Delete a question\n\t\t *\n\t\t * @param {number} questionId the question id to delete\n\t\t */\n\t\tasync deleteQuestion(questionId) {\n\t\t\tthis.isLoadingQuestions = true\n\n\t\t\ttry {\n\t\t\t\tawait axios.delete(\n\t\t\t\t\tgenerateOcsUrl(\n\t\t\t\t\t\t'apps/forms/api/v3/forms/{id}/questions/{questionId}',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: this.form.id,\n\t\t\t\t\t\t\tquestionId,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\tconst index = this.form.questions.findIndex(\n\t\t\t\t\t(search) => search.id === questionId,\n\t\t\t\t)\n\t\t\t\tthis.form.questions.splice(index, 1)\n\t\t\t\temit('forms:last-updated:set', this.form.id)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(`Error while removing question ${questionId}`, {\n\t\t\t\t\terror,\n\t\t\t\t})\n\t\t\t\tshowError(\n\t\t\t\t\tt('forms', 'There was an error while removing the question'),\n\t\t\t\t)\n\t\t\t} finally {\n\t\t\t\tthis.isLoadingQuestions = false\n\t\t\t}\n\t\t},\n\n\t\tinsertQuestion(questionData, defaultFields = {}, position = null) {\n\t\t\tconst newQuestionObj = {\n\t\t\t\t...defaultFields,\n\t\t\t\t...questionData,\n\t\t\t}\n\n\t\t\tlet insertAt = null\n\t\t\tif (\n\t\t\t\tquestionData\n\t\t\t\t&& questionData.order !== undefined\n\t\t\t\t&& questionData.order !== null\n\t\t\t) {\n\t\t\t\tinsertAt = Number(questionData.order) - 1\n\t\t\t} else if (position !== null) {\n\t\t\t\tinsertAt = position\n\t\t\t}\n\n\t\t\tif (insertAt !== null && insertAt <= this.form.questions.length) {\n\t\t\t\tthis.form.questions.splice(insertAt, 0, newQuestionObj)\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Prefer ref by id when available, fallback to positional refs\n\t\t\t\t\tthis.questionRefsMap[newQuestionObj.id]?.focus()\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.form.questions.push(newQuestionObj)\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.questionRefsMap[newQuestionObj.id]?.focus()\n\t\t\t\t})\n\t\t\t}\n\n\t\t\temit('forms:last-updated:set', this.form.id)\n\t\t},\n\n\t\t/**\n\t\t * Clone a question\n\t\t *\n\t\t * @param {number} id the question id to clone in the current form\n\t\t * @param {number} position where the cloned question should be added\n\t\t */\n\t\tasync cloneQuestion({ id }, position) {\n\t\t\tthis.isLoadingQuestions = true\n\n\t\t\ttry {\n\t\t\t\tconst url = generateOcsUrl(\n\t\t\t\t\t'apps/forms/api/v3/forms/{id}/questions?fromId={questionId}',\n\t\t\t\t\t{\n\t\t\t\t\t\tid: this.form.id,\n\t\t\t\t\t\tquestionId: id,\n\t\t\t\t\t},\n\t\t\t\t)\n\n\t\t\t\tconst body = {}\n\t\t\t\tif (position !== null) {\n\t\t\t\t\t// position: current question position + 2 (0-based index: +1, next position: +1)\n\t\t\t\t\tbody.position = position + 2\n\t\t\t\t}\n\n\t\t\t\tconst response = await axios.post(url, body)\n\t\t\t\tconst question = OcsResponse2Data(response)\n\n\t\t\t\t// Delegate insertion & focus handling to helper\n\t\t\t\tthis.insertQuestion(question, { answers: [] })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(`Error while duplicating question ${id}`, {\n\t\t\t\t\terror,\n\t\t\t\t})\n\t\t\t\tshowError('There was an error while duplicating the question')\n\t\t\t} finally {\n\t\t\t\tthis.isLoadingQuestions = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reorder questions on dragEnd\n\t\t */\n\t\tasync onQuestionOrderChange() {\n\t\t\tthis.isLoadingQuestions = true\n\t\t\tconst newOrder = this.form.questions.map((question) => question.id)\n\n\t\t\ttry {\n\t\t\t\tawait axios.patch(\n\t\t\t\t\tgenerateOcsUrl('apps/forms/api/v3/forms/{id}/questions', {\n\t\t\t\t\t\tid: this.form.id,\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tnewOrder,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\temit('forms:last-updated:set', this.form.id)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while saving form', { error })\n\t\t\t\tshowError(t('forms', 'Error while saving form'))\n\t\t\t} finally {\n\t\t\t\tthis.isLoadingQuestions = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.emptycontent {\n\tdisplay: flex;\n\theight: 100%;\n}\n\n.app-content {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: column;\n\n\theader,\n\tsection {\n\t\twidth: 100%;\n\t\tmax-width: 750px;\n\t}\n\n\t// Title & description header\n\theader {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tmargin: 0;\n\t\tmargin-block-end: 24px;\n\t\tpadding-inline-start: 32px;\n\t\tmargin-inline-end: -24px;\n\n\t\t.form-title {\n\t\t\tfont-size: 28px;\n\t\t\tfont-weight: bold;\n\t\t\tline-height: 34px;\n\t\t\tcolor: var(--color-main-text);\n\t\t\tmin-height: 36px;\n\t\t\t// padding and margin should be aligned with the submit view (but keep the 2px border in mind)\n\t\t\tpadding-block: 4px;\n\t\t\tpadding-inline: 10px;\n\t\t\tmargin-block: 22px 14px;\n\t\t\tmargin-inline: 0;\n\t\t\twidth: calc(\n\t\t\t\t100% - 58px\n\t\t\t); // margin of header, needed if screen is < 806px (max-width + margin-left)\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tresize: none;\n\n\t\t\t&::placeholder {\n\t\t\t\tfont-size: 28px;\n\t\t\t}\n\t\t}\n\n\t\t.form-desc,\n\t\t.info-message {\n\t\t\tfont-size: 100%;\n\t\t\tmin-height: unset;\n\t\t\tpadding-block: 0px 20px;\n\t\t\tpadding-inline: 12px;\n\t\t\twidth: calc(100% - 58px);\n\t\t}\n\n\t\t.form-desc {\n\t\t\tcolor: var(--color-main-text);\n\t\t\tline-height: 22px;\n\t\t\tmin-height: 47px; // one line (25px padding + 22px text height)\n\t\t\tpadding-block-start: 5px; // spacing border<>text\n\t\t\tmargin: 0px;\n\t\t\tpadding-block: 3px 18px; // 2px smaller because of border\n\t\t\tpadding-inline: 10px;\n\t\t\tresize: none;\n\t\t}\n\n\t\t.info-message {\n\t\t\tmargin-block-start: 4px;\n\t\t\tresize: none;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\n\t// Questions container\n\tsection {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tmargin-block-end: 250px;\n\n\t\t.question-menu {\n\t\t\tposition: sticky;\n\t\t\tinset-block-end: 0px;\n\t\t\tpadding-block-end: 16px;\n\t\t\t// Above other menus\n\t\t\tz-index: 55;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\talign-self: flex-start;\n\n\t\t\t// To align with text\n\t\t\tmargin-inline-start: var(--default-clickable-area);\n\t\t}\n\t}\n}\n\n.question-list-move,\n.question-list-enter-active,\n.question-list-leave-active {\n\ttransition: all var(--animation-slow) ease;\n}\n\n.question-list-enter-from,\n.question-list-leave-to {\n\topacity: 0;\n\ttransform: translateX(var(--clickable-area-large));\n}\n\n/* ensure leaving items are taken out of layout flow so that moving\n   animations can be calculated correctly. */\n.question-list-leave-active {\n\tposition: absolute;\n}\n\n.question-insert {\n\t/* closer to the question above */\n\tposition: relative;\n\tmargin-block-end: -34px;\n\tinset-block-end: -16px;\n\tmargin-inline-start: -12px;\n\twidth: calc(100% - var(--default-clickable-area));\n\tdisplay: flex;\n\tjustify-content: center;\n\topacity: 0;\n\ttransition: opacity 0.12s ease;\n}\n\n.question-insert.is-mobile {\n\topacity: 0.3;\n}\n\n.question:hover > .question-insert,\n.question-insert:focus-within,\n.question-insert.is-open {\n\topacity: 1;\n}\n</style>\n"],"names":["IconLock","_sfc_main","NcActions","NcActionButton","NcActionSeparator","NcIconSvgWrapper","NcLoadingIcon","IconChevronLeft","IconPlus","v","answer","type","position","subtype","_createBlock","_component_NcActions","$data","$event","$props","_component_NcLoadingIcon","_component_NcIconSvgWrapper","$setup","_createElementBlock","_Fragment","_createVNode","_component_NcActionButton","_createTextVNode","_ctx","_component_NcActionSeparator","_renderList","$options","_toDisplayString","_openBlock","axios","Draggable","AddQuestionMenu","NcAppContent","NcEmptyContent","NcNoteCard","Question","QuestionLong","QuestionShort","QuestionMultiple","TopBar","ViewsMixin","useIsMobile","answerTypes","loadState","isUsed","question","moment","FormState","message","relativeDate","datetime","filteredAnswerTypes","SetWindowTitle","value","el","index","textarea","target","debounce","INPUT_DEBOUNCE_MS","text","body","response","generateOcsUrl","OcsResponse2Data","error","logger","showError","questionId","search","emit","questionData","defaultFields","newQuestionObj","insertAt","id","url","newOrder","_hoisted_7","_component_NcAppContent","_component_TopBar","_component_NcEmptyContent","_createElementVNode","_hoisted_1","_cache","args","_vModelText","_hoisted_3","_hoisted_5","_hoisted_6","_component_Draggable","_TransitionGroup","_resolveDynamicComponent","_mergeProps","val","_component_AddQuestionMenu"],"mappings":"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","x_google_ignoreList":[0]}