{"version":3,"file":"SetWindowTitle-BxzqOgB9.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionRadio-BA08CAtA.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFormBox-3Ql2JSK8.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcFormGroup-W-Wgps0q.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRadioGroup-DYwRkXaY.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcRadioGroupButton-WKdAdfUy.mjs","../node_modules/@material-symbols/svg-400/outlined/asterisk.svg?raw","../node_modules/@material-symbols/svg-400/outlined/badge.svg?raw","../node_modules/@material-symbols/svg-400/outlined/drag_indicator.svg?raw","../node_modules/@material-symbols/svg-400/outlined/error.svg?raw","../node_modules/@material-symbols/svg-400/outlined/keyboard_arrow_down.svg?raw","../node_modules/@material-symbols/svg-400/outlined/keyboard_arrow_up.svg?raw","../node_modules/@material-symbols/svg-400/outlined/more_horiz.svg?raw","../src/components/Icons/IconOverlay.vue","../src/components/Questions/Question.vue","../src/mixins/QuestionMixin.js","../src/components/Questions/QuestionLong.vue","../node_modules/@material-symbols/svg-400/outlined/check_box_outline_blank.svg?raw","../node_modules/@material-symbols/svg-400/outlined/content_paste.svg?raw","../node_modules/@material-symbols/svg-400/outlined/radio_button_unchecked.svg?raw","../node_modules/vue-draggable-plus/dist/vue-draggable-plus.js","../src/components/OptionInputDialog.vue","../node_modules/@material-symbols/svg-400/outlined/view_column.svg?raw","../node_modules/@material-symbols/svg-400/outlined/view_stream.svg?raw","../src/components/Questions/AnswerInput.vue","../src/mixins/QuestionMultipleMixin.ts","../src/components/Questions/QuestionMultiple.vue","../node_modules/@material-symbols/svg-400/outlined/regular_expression.svg?raw","../node_modules/@material-symbols/svg-400/outlined/123.svg?raw","../node_modules/@material-symbols/svg-400/outlined/call.svg?raw","../node_modules/@material-symbols/svg-400/outlined/short_text.svg?raw","../src/models/ValidationTypes.js","../src/utils/RegularExpression.js","../src/components/Questions/QuestionShort.vue","../node_modules/@material-symbols/svg-400/outlined/visibility.svg?raw","../src/components/PillMenu.vue","../src/components/TopBar.vue","../node_modules/@material-symbols/svg-400/outlined/arrow_drop_down_circle.svg?raw","../node_modules/@material-symbols/svg-400/outlined/calendar_today.svg?raw","../node_modules/@material-symbols/svg-400/outlined/check_box.svg?raw","../node_modules/@material-symbols/svg-400/outlined/draft.svg?raw","../node_modules/@material-symbols/svg-400/outlined/grid_view.svg?raw","../node_modules/@material-symbols/svg-400/outlined/linear_scale.svg?raw","../node_modules/@material-symbols/svg-400/outlined/palette.svg?raw","../node_modules/@material-symbols/svg-400/outlined/radio_button_checked.svg?raw","../node_modules/@material-symbols/svg-400/outlined/schedule.svg?raw","../node_modules/@material-symbols/svg-400/outlined/subject.svg?raw","../node_modules/@material-symbols/svg-400/outlined/swap_vert.svg?raw","../src/components/Questions/QuestionColor.vue","../img/clock_loader_20.svg?raw","../img/clock_loader_80.svg?raw","../img/event.svg?raw","../img/today.svg?raw","../src/components/Questions/QuestionDate.vue","../src/components/Questions/QuestionDropdown.vue","../node_modules/@material-symbols/svg-400/outlined/chevron_left.svg?raw","../node_modules/@material-symbols/svg-400/outlined/quick_reference.svg?raw","../node_modules/@material-symbols/svg-400/outlined/upload.svg?raw","../node_modules/@material-symbols/svg-400/outlined/upload_file.svg?raw","../src/models/FileTypes.js","../src/components/Questions/QuestionFile.vue","../src/components/Questions/QuestionGrid.vue","../src/components/Questions/QuestionLinearScale.vue","../src/components/Questions/QuestionRanking.vue","../src/models/AnswerTypes.js","../src/utils/SetWindowTitle.js"],"sourcesContent":["import '../assets/NcActionRadio-D2rLM1ci.css';\nimport { f as mdiRadioboxMarked, g as mdiRadioboxBlank } from \"./mdi-CpchYUUV.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withDirectives, vModelRadio, createVNode, toDisplayString, useModel } from \"vue\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport { A as ActionGlobalMixin } from \"./actionGlobal-BZFdtdJL.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as NC_ACTIONS_IS_SEMANTIC_MENU } from \"./useNcActions-BzPO2c4h.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n  name: \"NcActionRadio\",\n  components: {\n    NcIconSvgWrapper\n  },\n  mixins: [ActionGlobalMixin],\n  inject: {\n    isInSemanticMenu: {\n      from: NC_ACTIONS_IS_SEMANTIC_MENU,\n      default: false\n    }\n  },\n  props: {\n    /**\n     * id attribute of the radio element\n     */\n    id: {\n      type: String,\n      default: () => createElementId(),\n      validator: (id) => id.trim() !== \"\"\n    },\n    /**\n     * checked state of the radio element\n     */\n    modelValue: {\n      type: [String, Number],\n      default: \"\"\n    },\n    /**\n     * Define if this radio is part of a set.\n     * Checking the radio will disable all the\n     * others with the same name.\n     */\n    name: {\n      type: String,\n      required: true\n    },\n    /**\n     * value of the radio input\n     */\n    value: {\n      type: [String, Number],\n      default: \"\"\n    },\n    /**\n     * disabled state of the radio element\n     */\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: [\n    \"change\",\n    \"update:modelValue\"\n  ],\n  setup(props) {\n    return {\n      model: useModel(props, \"modelValue\"),\n      mdiRadioboxBlank,\n      mdiRadioboxMarked\n    };\n  },\n  computed: {\n    checked() {\n      return this.model === this.value;\n    }\n  }\n};\nconst _hoisted_1 = [\"role\"];\nconst _hoisted_2 = [\"role\", \"aria-checked\"];\nconst _hoisted_3 = { class: \"action-radio__icon\" };\nconst _hoisted_4 = [\"id\", \"value\", \"name\", \"disabled\"];\nconst _hoisted_5 = { class: \"action-radio__text\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n  return openBlock(), createElementBlock(\"li\", {\n    class: normalizeClass([\"action\", { \"action--disabled\": $props.disabled }]),\n    role: $options.isInSemanticMenu && \"presentation\"\n  }, [\n    createElementVNode(\"label\", {\n      class: \"action-radio\",\n      role: $options.isInSemanticMenu && \"menuitemradio\",\n      \"aria-checked\": $options.isInSemanticMenu && $options.checked.toString()\n    }, [\n      createElementVNode(\"span\", _hoisted_3, [\n        withDirectives(createElementVNode(\"input\", {\n          id: $props.id,\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $setup.model = $event),\n          type: \"radio\",\n          class: normalizeClass([\"action-radio__input\", { focusable: !$props.disabled }]),\n          value: $props.value,\n          name: $props.name,\n          disabled: $props.disabled,\n          onChange: _cache[1] || (_cache[1] = ($event) => _ctx.$emit(\"change\", $event))\n        }, null, 42, _hoisted_4), [\n          [vModelRadio, $setup.model]\n        ]),\n        createVNode(_component_NcIconSvgWrapper, {\n          path: $options.checked ? $setup.mdiRadioboxMarked : $setup.mdiRadioboxBlank,\n          size: 20\n        }, null, 8, [\"path\"])\n      ]),\n      createElementVNode(\"span\", _hoisted_5, toDisplayString(_ctx.text), 1)\n    ], 8, _hoisted_2)\n  ], 10, _hoisted_1);\n}\nconst NcActionRadio = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-6c208ddd\"]]);\nexport {\n  NcActionRadio as N\n};\n//# sourceMappingURL=NcActionRadio-BA08CAtA.mjs.map\n","import '../assets/NcFormBox-D_5h4Op_.css';\nimport { defineComponent, useCssModule, provide, openBlock, createElementBlock, normalizeClass, renderSlot } from \"vue\";\nimport { N as NC_FORM_BOX_CONTEXT_KEY } from \"./useNcFormBox-Djlh582y.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"NcFormBox\",\n  props: {\n    row: { type: Boolean }\n  },\n  setup(__props) {\n    const style = useCssModule();\n    provide(NC_FORM_BOX_CONTEXT_KEY, {\n      isInFormBox: true,\n      formBoxItemClass: style.ncFormBox__item\n    });\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass([_ctx.$style.ncFormBox, __props.row ? _ctx.$style.ncFormBox_row : _ctx.$style.ncFormBox_col])\n      }, [\n        renderSlot(_ctx.$slots, \"default\", {\n          itemClass: _ctx.$style.ncFormBox__item\n        })\n      ], 2);\n    };\n  }\n});\nconst ncFormBox = \"_ncFormBox_BhWbh\";\nconst ncFormBox_row = \"_ncFormBox_row_F5s-i\";\nconst ncFormBox__item = \"_ncFormBox__item_655o7\";\nconst ncFormBox_col = \"_ncFormBox_col_nIEpL\";\nconst style0 = {\n  \"material-design-icon\": \"_material-design-icon_TxQIB\",\n  ncFormBox,\n  ncFormBox_row,\n  ncFormBox__item,\n  ncFormBox_col\n};\nconst cssModules = {\n  \"$style\": style0\n};\nconst NcFormBox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n  NcFormBox as N\n};\n//# sourceMappingURL=NcFormBox-3Ql2JSK8.mjs.map\n","import '../assets/NcFormGroup-C9rXaPCl.css';\nimport { defineComponent, useSlots, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from \"vue\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"aria-describedby\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"NcFormGroup\",\n  props: {\n    label: { default: () => void 0 },\n    description: { default: () => void 0 },\n    hideLabel: { type: Boolean, default: false },\n    hideDescription: { type: Boolean, default: false },\n    noGap: { type: Boolean, default: false }\n  },\n  setup(__props) {\n    const slots = useSlots();\n    const id = `nc-form-group-${createElementId()}`;\n    const descriptionId = `${id}-description`;\n    const hasDescription = () => !!__props.description || !!slots.description;\n    const getDescriptionId = () => hasDescription() ? descriptionId : void 0;\n    const hasContentOnly = () => __props.hideLabel && (!hasDescription() || __props.hideDescription);\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"fieldset\", {\n        class: normalizeClass([_ctx.$style.formGroup, { [_ctx.$style.formGroup_noGap]: __props.noGap }]),\n        \"aria-describedby\": getDescriptionId()\n      }, [\n        createElementVNode(\"legend\", {\n          class: normalizeClass([_ctx.$style.formGroup__label, { \"hidden-visually\": __props.hideLabel }])\n        }, [\n          renderSlot(_ctx.$slots, \"label\", {}, () => [\n            createTextVNode(toDisplayString(__props.label || \"⚠️ Missing label\"), 1)\n          ])\n        ], 2),\n        hasDescription() ? (openBlock(), createElementBlock(\"div\", {\n          key: 0,\n          id: descriptionId,\n          class: normalizeClass([_ctx.$style.formGroup__description, { \"hidden-visually\": __props.hideDescription }])\n        }, [\n          renderSlot(_ctx.$slots, \"description\", {}, () => [\n            createTextVNode(toDisplayString(__props.description), 1)\n          ])\n        ], 2)) : createCommentVNode(\"\", true),\n        createElementVNode(\"div\", {\n          class: normalizeClass([_ctx.$style.formGroup__content, { [_ctx.$style.formGroup__content_only]: hasContentOnly() }])\n        }, [\n          renderSlot(_ctx.$slots, \"default\")\n        ], 2)\n      ], 10, _hoisted_1);\n    };\n  }\n});\nconst formGroup = \"_formGroup_qS7n2\";\nconst formGroup_noGap = \"_formGroup_noGap_-dO6k\";\nconst formGroup__label = \"_formGroup__label_sqDH-\";\nconst formGroup__description = \"_formGroup__description_TJcbK\";\nconst formGroup__content = \"_formGroup__content_qlp3e\";\nconst formGroup__content_only = \"_formGroup__content_only_-KAAy\";\nconst style0 = {\n  \"material-design-icon\": \"_material-design-icon_9zf-E\",\n  formGroup,\n  formGroup_noGap,\n  formGroup__label,\n  formGroup__description,\n  formGroup__content,\n  formGroup__content_only\n};\nconst cssModules = {\n  \"$style\": style0\n};\nconst NcFormGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n  NcFormGroup as N\n};\n//# sourceMappingURL=NcFormGroup-W-Wgps0q.mjs.map\n","import '../assets/NcRadioGroup-CqQ5ahHP.css';\nimport { defineComponent, useModel, ref, provide, computed, warn, openBlock, createBlock, withCtx, renderSlot, createElementBlock, normalizeClass, mergeModels } from \"vue\";\nimport { N as NcFormBox } from \"./NcFormBox-3Ql2JSK8.mjs\";\nimport { N as NcFormGroup } from \"./NcFormGroup-W-Wgps0q.mjs\";\nimport { I as INSIDE_RADIO_GROUP_KEY } from \"./useNcRadioGroup-D6llQmAl.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"NcRadioGroup\",\n  props: /* @__PURE__ */ mergeModels({\n    label: {},\n    labelHidden: { type: Boolean },\n    hideLabel: { type: Boolean },\n    description: {}\n  }, {\n    \"modelValue\": { required: false, default: \"\" },\n    \"modelModifiers\": {}\n  }),\n  emits: [\"update:modelValue\"],\n  setup(__props) {\n    const modelValue = useModel(__props, \"modelValue\");\n    const buttonVariant = ref();\n    provide(INSIDE_RADIO_GROUP_KEY, computed(() => ({\n      register,\n      modelValue: modelValue.value,\n      onUpdate\n    })));\n    function register(isButton) {\n      if (buttonVariant.value !== void 0 && buttonVariant.value !== isButton) {\n        warn(\"[NcRadioGroup] Mixing NcCheckboxRadioSwitch and NcRadioGroupButton is not possible!\");\n      }\n      buttonVariant.value = isButton;\n    }\n    function onUpdate(value) {\n      modelValue.value = value;\n    }\n    return (_ctx, _cache) => {\n      return openBlock(), createBlock(NcFormGroup, {\n        label: __props.label,\n        description: __props.description,\n        hideLabel: __props.labelHidden || __props.hideLabel\n      }, {\n        default: withCtx(() => [\n          buttonVariant.value ? (openBlock(), createBlock(NcFormBox, {\n            key: 0,\n            row: \"\"\n          }, {\n            default: withCtx(() => [\n              renderSlot(_ctx.$slots, \"default\")\n            ]),\n            _: 3\n          })) : (openBlock(), createElementBlock(\"span\", {\n            key: 1,\n            class: normalizeClass(_ctx.$style.radioGroup_checkboxRadioContainer)\n          }, [\n            renderSlot(_ctx.$slots, \"default\")\n          ], 2))\n        ]),\n        _: 3\n      }, 8, [\"label\", \"description\", \"hideLabel\"]);\n    };\n  }\n});\nconst radioGroup_checkboxRadioContainer = \"_radioGroup_checkboxRadioContainer_rSDM3\";\nconst style0 = {\n  \"material-design-icon\": \"_material-design-icon_-byXP\",\n  radioGroup_checkboxRadioContainer\n};\nconst cssModules = {\n  \"$style\": style0\n};\nconst NcRadioGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n  NcRadioGroup as N\n};\n//# sourceMappingURL=NcRadioGroup-DYwRkXaY.mjs.map\n","import '../assets/NcRadioGroupButton-B1d2yRTk.css';\nimport { defineComponent, onMounted, computed, openBlock, createElementBlock, normalizeClass, unref, renderSlot, createCommentVNode, toDisplayString, createElementVNode } from \"vue\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { u as useNcFormBox } from \"./useNcFormBox-Djlh582y.mjs\";\nimport { u as useInsideRadioGroup } from \"./useNcRadioGroup-D6llQmAl.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _hoisted_1 = [\"id\"];\nconst _hoisted_2 = [\"aria-labelledby\", \"aria-label\", \"checked\", \"disabled\", \"value\"];\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n  __name: \"NcRadioGroupButton\",\n  props: {\n    ariaLabel: {},\n    label: {},\n    value: {},\n    disabled: { type: Boolean }\n  },\n  setup(__props) {\n    const props = __props;\n    const labelId = createElementId();\n    const radioGroup = useInsideRadioGroup();\n    const { formBoxItemClass } = useNcFormBox();\n    onMounted(() => radioGroup.value.register(true));\n    const isChecked = computed(() => radioGroup?.value.modelValue === props.value);\n    function onUpdate() {\n      if (props.disabled) {\n        return;\n      }\n      radioGroup.value.onUpdate(props.value);\n    }\n    return (_ctx, _cache) => {\n      return openBlock(), createElementBlock(\"div\", {\n        class: normalizeClass([{\n          [_ctx.$style.radioGroupButton_active]: isChecked.value,\n          [_ctx.$style.radioGroupButton_disabled]: __props.disabled\n        }, _ctx.$style.radioGroupButton, unref(formBoxItemClass)]),\n        onClick: onUpdate\n      }, [\n        _ctx.$slots.icon ? (openBlock(), createElementBlock(\"div\", {\n          key: 0,\n          class: normalizeClass(_ctx.$style.radioGroupButton__icon)\n        }, [\n          renderSlot(_ctx.$slots, \"icon\")\n        ], 2)) : createCommentVNode(\"\", true),\n        __props.label ? (openBlock(), createElementBlock(\"div\", {\n          key: 1,\n          id: unref(labelId),\n          class: normalizeClass(_ctx.$style.radioGroupButton__label)\n        }, toDisplayString(__props.label), 11, _hoisted_1)) : createCommentVNode(\"\", true),\n        createElementVNode(\"input\", {\n          \"aria-labelledby\": __props.label ? unref(labelId) : void 0,\n          \"aria-label\": __props.label ? void 0 : __props.ariaLabel,\n          class: \"hidden-visually\",\n          checked: isChecked.value,\n          type: \"radio\",\n          disabled: __props.disabled,\n          value: __props.value,\n          onInput: onUpdate\n        }, null, 40, _hoisted_2)\n      ], 2);\n    };\n  }\n});\nconst radioGroupButton = \"_radioGroupButton_X-VUZ\";\nconst radioGroupButton__label = \"_radioGroupButton__label_vK-9z\";\nconst radioGroupButton__icon = \"_radioGroupButton__icon_5jUox\";\nconst radioGroupButton_disabled = \"_radioGroupButton_disabled_-1hSN\";\nconst radioGroupButton_active = \"_radioGroupButton_active_D4Uvj\";\nconst style0 = {\n  \"material-design-icon\": \"_material-design-icon_gRPNS\",\n  radioGroupButton,\n  radioGroupButton__label,\n  radioGroupButton__icon,\n  radioGroupButton_disabled,\n  radioGroupButton_active\n};\nconst cssModules = {\n  \"$style\": style0\n};\nconst NcRadioGroupButton = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__cssModules\", cssModules]]);\nexport {\n  NcRadioGroupButton as N\n};\n//# sourceMappingURL=NcRadioGroupButton-WKdAdfUy.mjs.map\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M450-120v-288L247-205l-42-42 203-203H120v-60h289L205-714l42-42 203 203v-287h60v288l204-204 42 42-204 204h288v60H553l203 203-42 42-204-204v289h-60Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M140-80q-24 0-42-18t-18-42v-480q0-24 18-42t42-18h250v-140q0-24 18-42t42-18h60q24 0 42 18t18 42v140h250q24 0 42 18t18 42v480q0 24-18 42t-42 18H140Zm0-60h680v-480H570v30q0 28-18 44t-42 16h-60q-24 0-42-16t-18-44v-30H140v480Zm92-107h239v-14q0-18-9-32t-23-19q-32-11-50-14.5t-35-3.5q-19 0-40.5 4.5T265-312q-15 5-24 19t-9 32v14Zm336-67h170v-50H568v50Zm-175.5-65.5Q408-395 408-418t-15.5-38.5Q377-472 354-472t-38.5 15.5Q300-441 300-418t15.5 38.5Q331-364 354-364t38.5-15.5ZM568-427h170v-50H568v50ZM450-590h60v-230h-60v230Zm30 210Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M349.91-160q-28.91 0-49.41-20.59-20.5-20.59-20.5-49.5t20.59-49.41q20.59-20.5 49.5-20.5t49.41 20.59q20.5 20.59 20.5 49.5t-20.59 49.41q-20.59 20.5-49.5 20.5Zm260 0q-28.91 0-49.41-20.59-20.5-20.59-20.5-49.5t20.59-49.41q20.59-20.5 49.5-20.5t49.41 20.59q20.5 20.59 20.5 49.5t-20.59 49.41q-20.59 20.5-49.5 20.5Zm-260-250q-28.91 0-49.41-20.59-20.5-20.59-20.5-49.5t20.59-49.41q20.59-20.5 49.5-20.5t49.41 20.59q20.5 20.59 20.5 49.5t-20.59 49.41q-20.59 20.5-49.5 20.5Zm260 0q-28.91 0-49.41-20.59-20.5-20.59-20.5-49.5t20.59-49.41q20.59-20.5 49.5-20.5t49.41 20.59q20.5 20.59 20.5 49.5t-20.59 49.41q-20.59 20.5-49.5 20.5Zm-260-250q-28.91 0-49.41-20.59-20.5-20.59-20.5-49.5t20.59-49.41q20.59-20.5 49.5-20.5t49.41 20.59q20.5 20.59 20.5 49.5t-20.59 49.41q-20.59 20.5-49.5 20.5Zm260 0q-28.91 0-49.41-20.59-20.5-20.59-20.5-49.5t20.59-49.41q20.59-20.5 49.5-20.5t49.41 20.59q20.5 20.59 20.5 49.5t-20.59 49.41q-20.59 20.5-49.5 20.5Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M503.5-289.48q9.5-9.48 9.5-23.5t-9.48-23.52q-9.48-9.5-23.5-9.5t-23.52 9.48q-9.5 9.48-9.5 23.5t9.48 23.52q9.48 9.5 23.5 9.5t23.52-9.48ZM453-433h60v-253h-60v253Zm27.27 353q-82.74 0-155.5-31.5Q252-143 197.5-197.5t-86-127.34Q80-397.68 80-480.5t31.5-155.66Q143-709 197.5-763t127.34-85.5Q397.68-880 480.5-880t155.66 31.5Q709-817 763-763t85.5 127Q880-563 880-480.27q0 82.74-31.5 155.5Q817-252 763-197.68q-54 54.31-127 86Q563-80 480.27-80Zm.23-60Q622-140 721-239.5t99-241Q820-622 721.19-721T480-820q-141 0-240.5 98.81T140-480q0 141 99.5 240.5t241 99.5Zm-.5-340Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M480-344 240-584l43-43 197 197 197-197 43 43-240 240Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M480-554 283-357l-43-43 240-240 240 240-43 43-197-197Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M207.86-432Q188-432 174-446.14t-14-34Q160-500 174.14-514t34-14Q228-528 242-513.86t14 34Q256-460 241.86-446t-34 14Zm272 0Q460-432 446-446.14t-14-34Q432-500 446.14-514t34-14Q500-528 514-513.86t14 34Q528-460 513.86-446t-34 14Zm272 0Q732-432 718-446.14t-14-34Q704-500 718.14-514t34-14Q772-528 786-513.86t14 34Q800-460 785.86-446t-34 14Z\\\"/></svg>\"","<!--\n  - SPDX-FileCopyrightText: 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<span>\n\t\t<slot />\n\t\t<span class=\"icon-overlay\">\n\t\t\t<slot name=\"overlay\" />\n\t\t</span>\n\t</span>\n</template>\n\n<style scoped>\n.icon-overlay-wrapper {\n\tposition: relative;\n}\n\n.icon-overlay {\n\tposition: absolute;\n\tinset-inline-start: 0;\n\tinset-block-start: -2px;\n\n\ttransform: scale(0.7);\n}\n</style>\n","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<li\n\t\tclass=\"question\"\n\t\t:class=\"{\n\t\t\t'question--editable': !readOnly,\n\t\t}\"\n\t\t:aria-label=\"t('forms', 'Question number {index}', { index })\">\n\t\t<!-- Drag handle -->\n\t\t<!-- TODO: implement arrow key mapping to reorder question -->\n\t\t<div\n\t\t\tv-if=\"!readOnly\"\n\t\t\tclass=\"question__drag-handle\"\n\t\t\t:class=\"{\n\t\t\t\t'question__drag-handle--shiftup': shiftDragHandle,\n\t\t\t}\">\n\t\t\t<NcButton\n\t\t\t\tref=\"buttonUp\"\n\t\t\t\t:aria-label=\"t('forms', 'Move question up')\"\n\t\t\t\t:disabled=\"!canMoveUp\"\n\t\t\t\tclass=\"question__drag-handle-button\"\n\t\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t\t@click.stop=\"onMoveUp\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconArrowUp\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcIconSvgWrapper :svg=\"IconDragIndicator\" />\n\t\t\t<NcButton\n\t\t\t\tref=\"buttonDown\"\n\t\t\t\t:aria-label=\"t('forms', 'Move question down')\"\n\t\t\t\t:disabled=\"!canMoveDown\"\n\t\t\t\tclass=\"question__drag-handle-button\"\n\t\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t\t@click.stop=\"onMoveDown\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconArrowDown\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<!-- Header -->\n\t\t<div class=\"question__header\">\n\t\t\t<div class=\"question__header__title\">\n\t\t\t\t<input\n\t\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\t\t:placeholder=\"titlePlaceholder\"\n\t\t\t\t\t:aria-label=\"\n\t\t\t\t\t\tt('forms', 'Title of question number {index}', {\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t})\n\t\t\t\t\t\"\n\t\t\t\t\t:value=\"text\"\n\t\t\t\t\tclass=\"question__header__title__text question__header__title__text__input\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tdir=\"auto\"\n\t\t\t\t\tminlength=\"1\"\n\t\t\t\t\t:maxlength=\"maxStringLengths.questionText\"\n\t\t\t\t\trequired\n\t\t\t\t\t@input=\"onTitleChange\" />\n\t\t\t\t<h3\n\t\t\t\t\tv-else\n\t\t\t\t\t:id=\"titleId\"\n\t\t\t\t\tclass=\"question__header__title__text\"\n\t\t\t\t\tdir=\"auto\">\n\t\t\t\t\t{{ computedText }}\n\t\t\t\t</h3>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!readOnly && !questionValid\"\n\t\t\t\t\t:title=\"warningInvalid\"\n\t\t\t\t\tclass=\"question__header__title__warning\"\n\t\t\t\t\ttabindex=\"0\">\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconAlertCircleOutline\" />\n\t\t\t\t</div>\n\t\t\t\t<NcActions\n\t\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\t\t:id=\"actionsId\"\n\t\t\t\t\tforceMenu\n\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\tclass=\"question__header__title__menu\">\n\t\t\t\t\t<template v-if=\"isRequired\" #icon>\n\t\t\t\t\t\t<IconOverlay>\n\t\t\t\t\t\t\t<template #overlay>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconAsterisk\" inline />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconDotsHorizontal\" />\n\t\t\t\t\t\t</IconOverlay>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t\t:modelValue=\"isRequired\"\n\t\t\t\t\t\t@update:modelValue=\"onRequiredChange\">\n\t\t\t\t\t\t<!-- TRANSLATORS Making this question necessary to be answered when submitting to a form -->\n\t\t\t\t\t\t{{ t('forms', 'Required') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<slot name=\"actions\" />\n\t\t\t\t\t<NcActionInput\n\t\t\t\t\t\t:label=\"t('forms', 'Technical name of the question')\"\n\t\t\t\t\t\t:labelOutside=\"false\"\n\t\t\t\t\t\t:showTrailingButton=\"false\"\n\t\t\t\t\t\t:modelValue=\"name\"\n\t\t\t\t\t\t@update:modelValue=\"onNameChange\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconIdentifier\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('forms', 'Technical name') }}\n\t\t\t\t\t</NcActionInput>\n\t\t\t\t\t<NcActionButton closeAfterClick @click=\"onClone\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconContentCopy\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('forms', 'Copy question') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton @click=\"onDelete\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconDelete\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('forms', 'Delete question') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"hasDescription || !readOnly\"\n\t\t\t\tclass=\"question__header__description\">\n\t\t\t\t<textarea\n\t\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\t\tref=\"description\"\n\t\t\t\t\tdir=\"auto\"\n\t\t\t\t\t:value=\"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.questionDescription\"\n\t\t\t\t\tclass=\"question__header__description__input\"\n\t\t\t\t\t@input=\"onDescriptionChange\" />\n\t\t\t\t<!-- eslint-disable vue/no-v-html -->\n\t\t\t\t<div\n\t\t\t\t\tv-else\n\t\t\t\t\t:id=\"descriptionId\"\n\t\t\t\t\tclass=\"question__header__description__output\"\n\t\t\t\t\tv-html=\"computedDescription\" />\n\t\t\t\t<!-- eslint-enable vue/no-v-html -->\n\t\t\t</div>\n\t\t\t<NcNoteCard v-if=\"hasInfo\" :id=\"infoId\" type=\"info\">\n\t\t\t\t{{ infoMessage }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"hasError\" :id=\"errorId\" type=\"error\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</NcNoteCard>\n\t\t</div>\n\n\t\t<!-- Question content -->\n\t\t<slot />\n\t\t<!-- Insert question menu -->\n\t\t<slot name=\"insert\" />\n\t</li>\n</template>\n\n<script>\nimport IconAsterisk from '@material-symbols/svg-400/outlined/asterisk.svg?raw'\nimport IconIdentifier from '@material-symbols/svg-400/outlined/badge.svg?raw'\nimport IconContentCopy from '@material-symbols/svg-400/outlined/content_copy.svg?raw'\nimport IconDelete from '@material-symbols/svg-400/outlined/delete.svg?raw'\nimport IconDragIndicator from '@material-symbols/svg-400/outlined/drag_indicator.svg?raw'\nimport IconAlertCircleOutline from '@material-symbols/svg-400/outlined/error.svg?raw'\nimport IconArrowDown from '@material-symbols/svg-400/outlined/keyboard_arrow_down.svg?raw'\nimport IconArrowUp from '@material-symbols/svg-400/outlined/keyboard_arrow_up.svg?raw'\nimport IconDotsHorizontal from '@material-symbols/svg-400/outlined/more_horiz.svg?raw'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/components/NcActionInput'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\nimport IconOverlay from '../Icons/IconOverlay.vue'\n\nexport default {\n\t// eslint-disable-next-line vue/multi-word-component-names\n\tname: 'Question',\n\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tIconOverlay,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcButton,\n\t\tNcNoteCard,\n\t},\n\n\tinject: ['$markdownit'],\n\n\tprops: {\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttitlePlaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tisRequired: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\n\t\tshiftDragHandle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\tmaxStringLengths: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\tcontentValid: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\twarningInvalid: {\n\t\t\ttype: String,\n\t\t\tdefault: t('forms', 'This question needs a title!'),\n\t\t},\n\n\t\tcanMoveDown: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\tcanMoveUp: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\terrorMessage: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\tinfoMessage: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'update:text',\n\t\t'update:description',\n\t\t'update:name',\n\t\t'update:isRequired',\n\t\t'moveDown',\n\t\t'moveUp',\n\t\t'delete',\n\t\t'clone',\n\t],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconAsterisk,\n\t\t\tIconAlertCircleOutline,\n\t\t\tIconArrowDown,\n\t\t\tIconArrowUp,\n\t\t\tIconContentCopy,\n\t\t\tIconDelete,\n\t\t\tIconDotsHorizontal,\n\t\t\tIconDragIndicator,\n\t\t\tIconIdentifier,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Extend text with asterisk if question is required\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcomputedText() {\n\t\t\tif (this.isRequired) {\n\t\t\t\treturn this.text + ' *'\n\t\t\t}\n\t\t\treturn this.text\n\t\t},\n\n\t\tcomputedDescription() {\n\t\t\treturn this.$markdownit.render(this.description)\n\t\t},\n\n\t\t/**\n\t\t * Question valid, if text not empty and content valid\n\t\t *\n\t\t * @return {boolean} true if question valid\n\t\t */\n\t\tquestionValid() {\n\t\t\treturn this.text && this.contentValid\n\t\t},\n\n\t\tactionsId() {\n\t\t\treturn 'q' + this.index + '_actions'\n\t\t},\n\n\t\ttitleId() {\n\t\t\treturn 'q' + this.index + '_title'\n\t\t},\n\n\t\tdescriptionId() {\n\t\t\treturn 'q' + this.index + '_desc'\n\t\t},\n\n\t\thasDescription() {\n\t\t\treturn this.description !== ''\n\t\t},\n\n\t\thasError() {\n\t\t\treturn !!this.errorMessage\n\t\t},\n\n\t\thasInfo() {\n\t\t\treturn !!this.infoMessage\n\t\t},\n\n\t\terrorId() {\n\t\t\treturn `q${this.index}_error`\n\t\t},\n\n\t\tinfoId() {\n\t\t\treturn `q${this.index}_info`\n\t\t},\n\t},\n\n\t// Ensure description is sized correctly on initial render\n\tmounted() {\n\t\tthis.$nextTick(() => this.resizeDescription())\n\t},\n\n\tmethods: {\n\t\tonTitleChange({ target }) {\n\t\t\tthis.$emit('update:text', target.value)\n\t\t},\n\n\t\tonDescriptionChange({ target }) {\n\t\t\tthis.resizeDescription()\n\t\t\tthis.$emit('update:description', target.value)\n\t\t},\n\n\t\tonNameChange(name) {\n\t\t\tthis.$emit('update:name', name)\n\t\t},\n\n\t\tonRequiredChange(isRequired) {\n\t\t\tthis.$emit('update:isRequired', isRequired)\n\t\t},\n\n\t\tresizeDescription() {\n\t\t\t// next tick ensures that the textarea is attached to DOM\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst textarea = this.$refs.description\n\t\t\t\tif (textarea) {\n\t\t\t\t\ttextarea.style.cssText = 'height: 0'\n\t\t\t\t\t// include 2px border\n\t\t\t\t\ttextarea.style.cssText = `height: ${textarea.scrollHeight + 4}px`\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Reorder question but keep focus on the button\n\t\t */\n\t\tonMoveDown() {\n\t\t\tthis.$emit('moveDown')\n\t\t\tthis.$nextTick(() => this.$refs.buttonDown.$el.focus())\n\t\t},\n\n\t\tonMoveUp() {\n\t\t\tthis.$emit('moveUp')\n\t\t\tthis.$nextTick(() => this.$refs.buttonUp.$el.focus())\n\t\t},\n\n\t\t/**\n\t\t * Delete this question\n\t\t */\n\t\tonDelete() {\n\t\t\tthis.$emit('delete')\n\t\t},\n\n\t\t/**\n\t\t * Clone this question\n\t\t */\n\t\tonClone() {\n\t\t\tthis.$emit('clone')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../../scssmixins/markdownOutput' as *;\n\n.question {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: stretch;\n\tflex-direction: column;\n\tjustify-content: stretch;\n\tmargin-block-end: 64px;\n\tpadding-inline-start: var(--default-clickable-area);\n\tuser-select: none;\n\tbackground-color: var(--color-main-background);\n\n\t&--editable {\n\t\tpadding-inline-start: 56px; // add 12px for the title input box\n\t}\n\n\t> * {\n\t\tcursor: pointer;\n\t}\n\n\t&__drag-handle {\n\t\tposition: absolute;\n\t\tdisplay: flex;\n\t\tinset-inline-start: var(--default-grid-baseline);\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tgap: 12px;\n\t\twidth: var(--default-clickable-area);\n\t\theight: 100%;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tcursor: grab;\n\n\t\t&-button {\n\t\t\tposition: absolute;\n\t\t\tinset-block-start: -9999px;\n\t\t}\n\n\t\t// Avoid moving drag-handle due to newAnswer-input on multiple-Questions\n\t\t&--shiftup {\n\t\t\theight: calc(100% - var(--default-clickable-area));\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:focus-within {\n\t\t\tcolor: var(--color-main-text);\n\n\t\t\t.question__drag-handle-button {\n\t\t\t\tposition: initial;\n\t\t\t\tinset-block-start: initial;\n\t\t\t}\n\t\t}\n\n\t\t&:active {\n\t\t\tcursor: grabbing;\n\t\t}\n\n\t\t> * {\n\t\t\tcursor: grab;\n\t\t}\n\t}\n\n\t&__title,\n\t&__content {\n\t\tflex: 1 1 100%;\n\t\tmax-width: 100%;\n\t\tpadding: 0;\n\t}\n\n\t&__header {\n\t\tdisplay: block;\n\t\tpadding-block-end: 8px;\n\t\talign-items: center;\n\t\tflex: 1 1 100%;\n\t\tjustify-content: space-between;\n\t\twidth: auto;\n\n\t\t&__title {\n\t\t\tdisplay: flex;\n\t\t\tmin-height: 44px;\n\n\t\t\t&__text {\n\t\t\t\tflex: 1 1 100%;\n\t\t\t\tfont-size: 16px !important;\n\t\t\t\tpadding-block: 10px;\n\t\t\t\tpadding-inline: 0px;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tmargin: auto !important;\n\n\t\t\t\t&__input {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\tinset-inline-start: -12px;\n\t\t\t\t\tmargin-inline-end: -12px !important;\n\t\t\t\t\tpadding-inline-start: 10px !important;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__warning {\n\t\t\t\tmargin-block: auto;\n\t\t\t\tmargin-inline: 8px;\n\t\t\t\tcolor: var(--color-error);\n\t\t\t}\n\n\t\t\t&__menu {\n\t\t\t\tmargin-block: auto;\n\t\t\t\tmargin-inline-end: 12px;\n\t\t\t}\n\t\t}\n\n\t\t&__description {\n\t\t\tdisplay: flex;\n\n\t\t\t&__input {\n\t\t\t\tmargin: 0px;\n\t\t\t\tmin-height: 1.5em;\n\t\t\t\tborder-width: 2px;\n\t\t\t\tposition: relative;\n\t\t\t\tinset-inline-start: -12px;\n\t\t\t\tpadding-block: 4px;\n\t\t\t\tpadding-inline: 10px;\n\t\t\t\tresize: none;\n\t\t\t}\n\n\t\t\t&__input,\n\t\t\t&__output {\n\t\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\t\tline-height: 1.5em;\n\t\t\t\tz-index: inherit;\n\t\t\t\toverflow-wrap: break-word;\n\t\t\t\t// match with other inputs\n\t\t\t\twidth: calc(100% - var(--default-clickable-area));\n\t\t\t}\n\t\t\t&__output {\n\t\t\t\t//compensate border\n\t\t\t\tpadding-block: 6px;\n\t\t\t\tpadding-inline: 0;\n\t\t\t\t// Styling for rendered Output\n\t\t\t\t@include markdown-output;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import axios from '@nextcloud/axios'\n/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { showError } from '@nextcloud/dialogs'\nimport { emit } from '@nextcloud/event-bus'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport debounce from 'debounce'\nimport Question from '../components/Questions/Question.vue'\nimport { INPUT_DEBOUNCE_MS, OptionType } from '../models/Constants.ts'\nimport logger from '../utils/Logger.js'\nimport OcsResponse2Data from '../utils/OcsResponse2Data.js'\n\nexport default {\n\tinheritAttrs: false,\n\n\temits: [\n\t\t'update:text',\n\t\t'update:description',\n\t\t'update:isRequired',\n\t\t'update:extraSettings',\n\t\t'update:name',\n\t\t'update:values',\n\t\t'delete',\n\t\t'clone',\n\t\t'keydown',\n\t\t'moveDown',\n\t\t'moveUp',\n\t],\n\n\tprops: {\n\t\t/**\n\t\t * Question-Id\n\t\t */\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * ID of the form\n\t\t */\n\t\tformId: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The question title\n\t\t */\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Question Description\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Required-Setting\n\t\t */\n\t\tisRequired: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * The index of the question\n\t\t */\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Technical name\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The user answers\n\t\t */\n\t\tvalues: {\n\t\t\ttype: [Array, Object],\n\t\t\tdefault() {\n\t\t\t\treturn []\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * The question list of answers\n\t\t */\n\t\toptions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Order of the question\n\t\t */\n\t\torder: {\n\t\t\ttype: Number,\n\t\t\tdefault: -1,\n\t\t},\n\n\t\t/**\n\t\t * Question type\n\t\t */\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Answer type model object\n\t\t */\n\t\tanswerType: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Submission or Edit-Mode\n\t\t */\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Database-Restrictions\n\t\t */\n\t\tmaxStringLengths: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Extra settings\n\t\t */\n\t\textraSettings: {\n\t\t\tdefault: () => {\n\t\t\t\treturn {}\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Mime-Types and file extensions that are allowed to be uploaded\n\t\t */\n\t\taccept: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn []\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can question be moved up in order?\n\t\t */\n\t\tcanMoveUp: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Can question be moved down in order?\n\t\t */\n\t\tcanMoveDown: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tcomponents: {\n\t\tQuestion,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * The shown error message\n\t\t\t */\n\t\t\terrorMessage: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tquestionProps() {\n\t\t\tconst props = { ...this.$props }\n\t\t\tconst allowedKeys = Object.keys(Question.props)\n\t\t\tObject.keys(props).forEach((key) => {\n\t\t\t\tif (!allowedKeys.includes(key)) {\n\t\t\t\t\tdelete props[key]\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn props\n\t\t},\n\n\t\ttitleId() {\n\t\t\treturn 'q' + this.index + '_title'\n\t\t},\n\n\t\tdescriptionId() {\n\t\t\treturn 'q' + this.index + '_desc'\n\t\t},\n\n\t\thasError() {\n\t\t\treturn !!this.errorMessage\n\t\t},\n\n\t\thasInfo() {\n\t\t\treturn !!this.infoMessage\n\t\t},\n\n\t\terrorId() {\n\t\t\treturn `q${this.index}_error`\n\t\t},\n\n\t\tinfoId() {\n\t\t\treturn `q${this.index}_info`\n\t\t},\n\n\t\t/**\n\t\t * Listeners for all questions to forward\n\t\t */\n\t\tcommonListeners() {\n\t\t\treturn {\n\t\t\t\tclone: this.onClone,\n\t\t\t\tdelete: this.onDelete,\n\t\t\t\t'update:text': this.onTitleChange,\n\t\t\t\t'update:description': this.onDescriptionChange,\n\t\t\t\t'update:isRequired': this.onRequiredChange,\n\t\t\t\t'update:name': this.onNameChange,\n\t\t\t\tmoveDown: (...args) => this.$emit('moveDown', ...args),\n\t\t\t\tmoveUp: (...args) => this.$emit('moveUp', ...args),\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Override to allow custom validation\n\t\t */\n\t\tasync validate() {\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Forward the title change to the parent and store to db\n\t\t *\n\t\t * @param {string} text the title\n\t\t */\n\t\tonTitleChange: debounce(function (text) {\n\t\t\tthis.$emit('update:text', text)\n\t\t\tthis.saveQuestionProperty('text', text)\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\t/**\n\t\t * Forward the description change to the parent and store to db\n\t\t *\n\t\t * @param {string} description the description\n\t\t */\n\t\tonDescriptionChange: debounce(function (description) {\n\t\t\tthis.$emit('update:description', description)\n\t\t\tthis.saveQuestionProperty('description', description)\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\t/**\n\t\t * Forward the required change to the parent and store to db\n\t\t *\n\t\t * @param {boolean} isRequiredValue new isRequired Value\n\t\t */\n\t\tonRequiredChange: debounce(function (isRequiredValue) {\n\t\t\tthis.$emit('update:isRequired', isRequiredValue)\n\t\t\tthis.saveQuestionProperty('isRequired', isRequiredValue)\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\t/**\n\t\t * Create mapper to forward the required change to the parent and store to db\n\t\t *\n\t\t * Either an object containing the *changed* settings.\n\t\t *\n\t\t * @param {object} newSettings changed settings\n\t\t */\n\t\tonExtraSettingsChange: debounce(function (newSettings) {\n\t\t\tconst newExtraSettings = { ...this.extraSettings, ...newSettings }\n\t\t\tthis.$emit('update:extraSettings', newExtraSettings)\n\t\t\tthis.saveQuestionProperty('extraSettings', newExtraSettings)\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\t/**\n\t\t * Forward the technical-name change to the parent and store to db\n\t\t *\n\t\t * @param {string} name The new technical name of the input\n\t\t */\n\t\tonNameChange: debounce(function (name) {\n\t\t\tthis.$emit('update:name', name)\n\t\t\tthis.saveQuestionProperty('name', name)\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\t/**\n\t\t * Forward the required change to the parent and store to db\n\t\t *\n\t\t * @param {boolean} shuffle Should options be shuffled\n\t\t */\n\t\tonShuffleOptionsChange(shuffle) {\n\t\t\treturn this.onExtraSettingsChange({ shuffleOptions: shuffle })\n\t\t},\n\n\t\t/**\n\t\t * Forward the answer(s) change to the parent\n\t\t *\n\t\t * @param {Array} values the array of answers\n\t\t */\n\t\tonValuesChange(values) {\n\t\t\tthis.$emit('update:values', values)\n\t\t},\n\n\t\t/**\n\t\t * Delete this question\n\t\t */\n\t\tonDelete() {\n\t\t\tthis.$emit('delete')\n\t\t},\n\n\t\t/**\n\t\t * Clone this question.\n\t\t */\n\t\tonClone() {\n\t\t\tthis.$emit('clone')\n\t\t},\n\n\t\t/**\n\t\t * Don't automatically submit form on Enter, parent will handle that\n\t\t * To be called with prevent: @keydown.enter.prevent=\"onKeydownEnter\"\n\t\t *\n\t\t * @param {object} event The fired event\n\t\t */\n\t\tonKeydownEnter(event) {\n\t\t\tthis.$emit('keydown', event)\n\t\t},\n\n\t\t/**\n\t\t * Focus the first focusable element\n\t\t */\n\t\tfocus() {\n\t\t\tthis.$el.scrollIntoView({ behavior: 'smooth' })\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst title = this.$el.querySelector(\n\t\t\t\t\t'.question__header__title__text__input',\n\t\t\t\t)\n\t\t\t\tif (title) {\n\t\t\t\t\ttitle.focus()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Shuffle an array using Fisher-Yates\n\t\t *\n\t\t * @param {Array} input Input array to shuffle\n\t\t * @return {Array} Shuffled input array\n\t\t */\n\t\tshuffleArray(input) {\n\t\t\tconst shuffled = [...input]\n\t\t\tlet idx = shuffled.length\n\t\t\twhile (--idx > 0) {\n\t\t\t\tconst rndIdx = Math.floor(Math.random() * (idx + 1))\n\t\t\t\t;[shuffled[rndIdx], shuffled[idx]] = [\n\t\t\t\t\tshuffled[idx],\n\t\t\t\t\tshuffled[rndIdx],\n\t\t\t\t]\n\t\t\t}\n\t\t\treturn shuffled\n\t\t},\n\n\t\tasync saveQuestionProperty(key, value) {\n\t\t\ttry {\n\t\t\t\t// TODO: add loading status feedback ?\n\t\t\t\tawait axios.patch(\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.formId,\n\t\t\t\t\t\t\tquestionId: this.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tkeyValuePairs: {\n\t\t\t\t\t\t\t[key]: value,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\temit('forms:last-updated:set', this.formId)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while saving question', { error })\n\t\t\t\tshowError(t('forms', 'Error while saving question'))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handles multiple options for a question.\n\t\t *\n\t\t * @param {Array<string>} answers - The array of answers for the question.\n\t\t */\n\t\tasync handleMultipleOptions(answers) {\n\t\t\tthis.isLoading = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(\n\t\t\t\t\tgenerateOcsUrl(\n\t\t\t\t\t\t'apps/forms/api/v3/forms/{id}/questions/{questionId}/options',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: this.formId,\n\t\t\t\t\t\t\tquestionId: this.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\toptionTexts: answers,\n\t\t\t\t\t\toptionType: OptionType.Choice,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tconst newServerOptions = OcsResponse2Data(response) // Assuming this function can handle arrays\n\t\t\t\tconst options = this.options.slice()\n\t\t\t\tnewServerOptions.forEach((option) => {\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tid: option.id, // Use the ID from the server\n\t\t\t\t\t\tquestionId: this.id,\n\t\t\t\t\t\ttext: option.text,\n\t\t\t\t\t\toptionType: option.optionType,\n\t\t\t\t\t\tlocal: false,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tthis.updateOptions(options)\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.focusIndex(options.length - 1)\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while saving question options', { error })\n\t\t\t\tshowError(t('forms', 'Error while saving question options'))\n\t\t\t}\n\t\t\tthis.isLoading = false\n\t\t},\n\t},\n}\n","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<div class=\"question__content\">\n\t\t\t<textarea\n\t\t\t\tref=\"textarea\"\n\t\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t\t:aria-describedby=\"description ? descriptionId : undefined\"\n\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t:placeholder=\"submissionInputPlaceholder\"\n\t\t\t\t:disabled=\"!readOnly\"\n\t\t\t\t:required=\"isRequired\"\n\t\t\t\t:value=\"values[0]\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\tclass=\"question__text\"\n\t\t\t\t:maxlength=\"maxStringLengths.answerText\"\n\t\t\t\tminlength=\"1\"\n\t\t\t\t:name=\"name || undefined\"\n\t\t\t\t@invalid.prevent=\"validate\"\n\t\t\t\t@input=\"onInput\"\n\t\t\t\t@keypress=\"autoSizeText\"\n\t\t\t\t@keydown.ctrl.enter=\"onKeydownCtrlEnter\" />\n\t\t</div>\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\n\nexport default {\n\tname: 'QuestionLong',\n\n\tcomponents: {\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin],\n\temits: ['update:values', 'keydown'],\n\n\tdata() {\n\t\treturn {\n\t\t\theight: 1,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tsubmissionInputPlaceholder() {\n\t\t\tif (this.readOnly) {\n\t\t\t\treturn this.answerType.submitPlaceholder\n\t\t\t}\n\t\t\treturn this.answerType.createPlaceholder\n\t\t},\n\t},\n\n\twatch: {\n\t\tvalues: {\n\t\t\thandler() {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.autoSizeText()\n\t\t\t\t})\n\t\t\t},\n\n\t\t\timmediate: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tif (\n\t\t\t\tthis.isRequired\n\t\t\t\t&& (this.values.length === 0 || this.values[0] === '')\n\t\t\t) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\n\t\tonInput() {\n\t\t\tconst textarea = this.$refs.textarea\n\t\t\tthis.$emit('update:values', [textarea.value])\n\t\t},\n\n\t\tautoSizeText() {\n\t\t\tconst textarea = this.$refs.textarea\n\t\t\tif (!textarea) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttextarea.style.cssText = 'height:auto; padding:0'\n\t\t\ttextarea.style.cssText = `height: ${textarea.scrollHeight + 28}px`\n\t\t},\n\n\t\tonKeydownCtrlEnter(event) {\n\t\t\tthis.$emit('keydown', event)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__text {\n\twidth: 100%;\n\tresize: none;\n\n\t&:disabled {\n\t\t// Just overrides Server CSS-Styling for disabled inputs. -> Not Good??\n\t\tbackground-color: var(--color-main-background);\n\t\tcolor: var(--color-main-text);\n\t\twidth: calc(100% - var(--default-clickable-area)) !important;\n\t\tmargin-inline-start: -12px;\n\t}\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M180-120q-24 0-42-18t-18-42v-600q0-24 18-42t42-18h600q24 0 42 18t18 42v600q0 24-18 42t-42 18H180Zm0-60h600v-600H180v600Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M180-120q-26 0-43-17t-17-43v-600q0-26 17-43t43-17h202q7-35 34.5-57.5T480-920q36 0 63.5 22.5T578-840h202q26 0 43 17t17 43v600q0 26-17 43t-43 17H180Zm0-60h600v-600h-60v90H240v-90h-60v600Zm328.5-611.5Q520-803 520-820t-11.5-28.5Q497-860 480-860t-28.5 11.5Q440-837 440-820t11.5 28.5Q463-780 480-780t28.5-11.5Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M480-80q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-83 31.5-156t86-127Q252-817 325-848.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82-31.5 155T763-197.5q-54 54.5-127 86T480-80Zm0-60q142 0 241-99.5T820-480q0-142-99-241t-241-99q-141 0-240.5 99T140-480q0 141 99.5 240.5T480-140Z\\\"/></svg>\"","var an = Object.defineProperty;\nvar Pe = Object.getOwnPropertySymbols;\nvar yt = Object.prototype.hasOwnProperty, wt = Object.prototype.propertyIsEnumerable;\nvar bt = (t, e, n) => e in t ? an(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, fe = (t, e) => {\n  for (var n in e || (e = {}))\n    yt.call(e, n) && bt(t, n, e[n]);\n  if (Pe)\n    for (var n of Pe(e))\n      wt.call(e, n) && bt(t, n, e[n]);\n  return t;\n};\nvar $e = (t, e) => {\n  var n = {};\n  for (var o in t)\n    yt.call(t, o) && e.indexOf(o) < 0 && (n[o] = t[o]);\n  if (t != null && Pe)\n    for (var o of Pe(t))\n      e.indexOf(o) < 0 && wt.call(t, o) && (n[o] = t[o]);\n  return n;\n};\nimport { getCurrentInstance as dt, unref as U, watch as ln, onUnmounted as sn, onMounted as un, nextTick as kt, isRef as qe, defineComponent as cn, computed as Et, toRefs as fn, ref as dn, reactive as hn, h as pn, isProxy as gn } from \"vue\";\nconst Ht = \"[vue-draggable-plus]: \";\nfunction mn(t) {\n  console.warn(Ht + t);\n}\nfunction vn(t) {\n  console.error(Ht + t);\n}\nfunction St(t, e, n) {\n  return n >= 0 && n < t.length && t.splice(n, 0, t.splice(e, 1)[0]), t;\n}\nfunction bn(t) {\n  return t.replace(/-(\\w)/g, (e, n) => n ? n.toUpperCase() : \"\");\n}\nfunction yn(t) {\n  return Object.keys(t).reduce((e, n) => (typeof t[n] != \"undefined\" && (e[bn(n)] = t[n]), e), {});\n}\nfunction Dt(t, e) {\n  return Array.isArray(t) && t.splice(e, 1), t;\n}\nfunction _t(t, e, n) {\n  return Array.isArray(t) && t.splice(e, 0, n), t;\n}\nfunction wn(t) {\n  return typeof t == \"undefined\";\n}\nfunction En(t) {\n  return typeof t == \"string\";\n}\nfunction Tt(t, e, n) {\n  const o = t.children[n];\n  t.insertBefore(e, o);\n}\nfunction Ke(t) {\n  t.parentNode && t.parentNode.removeChild(t);\n}\nfunction Sn(t, e = document) {\n  var o;\n  let n = null;\n  return typeof (e == null ? void 0 : e.querySelector) == \"function\" ? n = (o = e == null ? void 0 : e.querySelector) == null ? void 0 : o.call(e, t) : n = document.querySelector(t), n || mn(`Element not found: ${t}`), n;\n}\nfunction Dn(t, e, n = null) {\n  return function(...o) {\n    return t.apply(n, o), e.apply(n, o);\n  };\n}\nfunction _n(t, e) {\n  const n = fe({}, t);\n  return Object.keys(e).forEach((o) => {\n    n[o] ? n[o] = Dn(t[o], e[o]) : n[o] = e[o];\n  }), n;\n}\nfunction Tn(t) {\n  return t instanceof HTMLElement;\n}\nfunction Ct(t, e) {\n  Object.keys(t).forEach((n) => {\n    e(n, t[n]);\n  });\n}\nfunction Cn(t) {\n  return t.charCodeAt(0) === 111 && t.charCodeAt(1) === 110 && (t.charCodeAt(2) > 122 || t.charCodeAt(2) < 97);\n}\nconst On = Object.assign;\n/**!\n * Sortable 1.15.2\n * @author\tRubaXa   <trash@rubaxa.org>\n * @author\towenm    <owen23355@gmail.com>\n * @license MIT\n */\nfunction Ot(t, e) {\n  var n = Object.keys(t);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(t);\n    e && (o = o.filter(function(r) {\n      return Object.getOwnPropertyDescriptor(t, r).enumerable;\n    })), n.push.apply(n, o);\n  }\n  return n;\n}\nfunction ne(t) {\n  for (var e = 1; e < arguments.length; e++) {\n    var n = arguments[e] != null ? arguments[e] : {};\n    e % 2 ? Ot(Object(n), !0).forEach(function(o) {\n      In(t, o, n[o]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Ot(Object(n)).forEach(function(o) {\n      Object.defineProperty(t, o, Object.getOwnPropertyDescriptor(n, o));\n    });\n  }\n  return t;\n}\nfunction Ye(t) {\n  \"@babel/helpers - typeof\";\n  return typeof Symbol == \"function\" && typeof Symbol.iterator == \"symbol\" ? Ye = function(e) {\n    return typeof e;\n  } : Ye = function(e) {\n    return e && typeof Symbol == \"function\" && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n  }, Ye(t);\n}\nfunction In(t, e, n) {\n  return e in t ? Object.defineProperty(t, e, {\n    value: n,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : t[e] = n, t;\n}\nfunction ie() {\n  return ie = Object.assign || function(t) {\n    for (var e = 1; e < arguments.length; e++) {\n      var n = arguments[e];\n      for (var o in n)\n        Object.prototype.hasOwnProperty.call(n, o) && (t[o] = n[o]);\n    }\n    return t;\n  }, ie.apply(this, arguments);\n}\nfunction An(t, e) {\n  if (t == null)\n    return {};\n  var n = {}, o = Object.keys(t), r, i;\n  for (i = 0; i < o.length; i++)\n    r = o[i], !(e.indexOf(r) >= 0) && (n[r] = t[r]);\n  return n;\n}\nfunction xn(t, e) {\n  if (t == null)\n    return {};\n  var n = An(t, e), o, r;\n  if (Object.getOwnPropertySymbols) {\n    var i = Object.getOwnPropertySymbols(t);\n    for (r = 0; r < i.length; r++)\n      o = i[r], !(e.indexOf(o) >= 0) && Object.prototype.propertyIsEnumerable.call(t, o) && (n[o] = t[o]);\n  }\n  return n;\n}\nvar Nn = \"1.15.2\";\nfunction re(t) {\n  if (typeof window != \"undefined\" && window.navigator)\n    return !!/* @__PURE__ */ navigator.userAgent.match(t);\n}\nvar ae = re(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i), xe = re(/Edge/i), It = re(/firefox/i), Te = re(/safari/i) && !re(/chrome/i) && !re(/android/i), Lt = re(/iP(ad|od|hone)/i), Wt = re(/chrome/i) && re(/android/i), Gt = {\n  capture: !1,\n  passive: !1\n};\nfunction S(t, e, n) {\n  t.addEventListener(e, n, !ae && Gt);\n}\nfunction E(t, e, n) {\n  t.removeEventListener(e, n, !ae && Gt);\n}\nfunction We(t, e) {\n  if (e) {\n    if (e[0] === \">\" && (e = e.substring(1)), t)\n      try {\n        if (t.matches)\n          return t.matches(e);\n        if (t.msMatchesSelector)\n          return t.msMatchesSelector(e);\n        if (t.webkitMatchesSelector)\n          return t.webkitMatchesSelector(e);\n      } catch (n) {\n        return !1;\n      }\n    return !1;\n  }\n}\nfunction Pn(t) {\n  return t.host && t !== document && t.host.nodeType ? t.host : t.parentNode;\n}\nfunction Q(t, e, n, o) {\n  if (t) {\n    n = n || document;\n    do {\n      if (e != null && (e[0] === \">\" ? t.parentNode === n && We(t, e) : We(t, e)) || o && t === n)\n        return t;\n      if (t === n)\n        break;\n    } while (t = Pn(t));\n  }\n  return null;\n}\nvar At = /\\s+/g;\nfunction V(t, e, n) {\n  if (t && e)\n    if (t.classList)\n      t.classList[n ? \"add\" : \"remove\"](e);\n    else {\n      var o = (\" \" + t.className + \" \").replace(At, \" \").replace(\" \" + e + \" \", \" \");\n      t.className = (o + (n ? \" \" + e : \"\")).replace(At, \" \");\n    }\n}\nfunction h(t, e, n) {\n  var o = t && t.style;\n  if (o) {\n    if (n === void 0)\n      return document.defaultView && document.defaultView.getComputedStyle ? n = document.defaultView.getComputedStyle(t, \"\") : t.currentStyle && (n = t.currentStyle), e === void 0 ? n : n[e];\n    !(e in o) && e.indexOf(\"webkit\") === -1 && (e = \"-webkit-\" + e), o[e] = n + (typeof n == \"string\" ? \"\" : \"px\");\n  }\n}\nfunction ye(t, e) {\n  var n = \"\";\n  if (typeof t == \"string\")\n    n = t;\n  else\n    do {\n      var o = h(t, \"transform\");\n      o && o !== \"none\" && (n = o + \" \" + n);\n    } while (!e && (t = t.parentNode));\n  var r = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n  return r && new r(n);\n}\nfunction jt(t, e, n) {\n  if (t) {\n    var o = t.getElementsByTagName(e), r = 0, i = o.length;\n    if (n)\n      for (; r < i; r++)\n        n(o[r], r);\n    return o;\n  }\n  return [];\n}\nfunction te() {\n  var t = document.scrollingElement;\n  return t || document.documentElement;\n}\nfunction P(t, e, n, o, r) {\n  if (!(!t.getBoundingClientRect && t !== window)) {\n    var i, a, l, s, u, d, f;\n    if (t !== window && t.parentNode && t !== te() ? (i = t.getBoundingClientRect(), a = i.top, l = i.left, s = i.bottom, u = i.right, d = i.height, f = i.width) : (a = 0, l = 0, s = window.innerHeight, u = window.innerWidth, d = window.innerHeight, f = window.innerWidth), (e || n) && t !== window && (r = r || t.parentNode, !ae))\n      do\n        if (r && r.getBoundingClientRect && (h(r, \"transform\") !== \"none\" || n && h(r, \"position\") !== \"static\")) {\n          var m = r.getBoundingClientRect();\n          a -= m.top + parseInt(h(r, \"border-top-width\")), l -= m.left + parseInt(h(r, \"border-left-width\")), s = a + i.height, u = l + i.width;\n          break;\n        }\n      while (r = r.parentNode);\n    if (o && t !== window) {\n      var y = ye(r || t), b = y && y.a, w = y && y.d;\n      y && (a /= w, l /= b, f /= b, d /= w, s = a + d, u = l + f);\n    }\n    return {\n      top: a,\n      left: l,\n      bottom: s,\n      right: u,\n      width: f,\n      height: d\n    };\n  }\n}\nfunction xt(t, e, n) {\n  for (var o = ce(t, !0), r = P(t)[e]; o; ) {\n    var i = P(o)[n], a = void 0;\n    if (a = r >= i, !a)\n      return o;\n    if (o === te())\n      break;\n    o = ce(o, !1);\n  }\n  return !1;\n}\nfunction we(t, e, n, o) {\n  for (var r = 0, i = 0, a = t.children; i < a.length; ) {\n    if (a[i].style.display !== \"none\" && a[i] !== p.ghost && (o || a[i] !== p.dragged) && Q(a[i], n.draggable, t, !1)) {\n      if (r === e)\n        return a[i];\n      r++;\n    }\n    i++;\n  }\n  return null;\n}\nfunction ht(t, e) {\n  for (var n = t.lastElementChild; n && (n === p.ghost || h(n, \"display\") === \"none\" || e && !We(n, e)); )\n    n = n.previousElementSibling;\n  return n || null;\n}\nfunction J(t, e) {\n  var n = 0;\n  if (!t || !t.parentNode)\n    return -1;\n  for (; t = t.previousElementSibling; )\n    t.nodeName.toUpperCase() !== \"TEMPLATE\" && t !== p.clone && (!e || We(t, e)) && n++;\n  return n;\n}\nfunction Nt(t) {\n  var e = 0, n = 0, o = te();\n  if (t)\n    do {\n      var r = ye(t), i = r.a, a = r.d;\n      e += t.scrollLeft * i, n += t.scrollTop * a;\n    } while (t !== o && (t = t.parentNode));\n  return [e, n];\n}\nfunction Mn(t, e) {\n  for (var n in t)\n    if (t.hasOwnProperty(n)) {\n      for (var o in e)\n        if (e.hasOwnProperty(o) && e[o] === t[n][o])\n          return Number(n);\n    }\n  return -1;\n}\nfunction ce(t, e) {\n  if (!t || !t.getBoundingClientRect)\n    return te();\n  var n = t, o = !1;\n  do\n    if (n.clientWidth < n.scrollWidth || n.clientHeight < n.scrollHeight) {\n      var r = h(n);\n      if (n.clientWidth < n.scrollWidth && (r.overflowX == \"auto\" || r.overflowX == \"scroll\") || n.clientHeight < n.scrollHeight && (r.overflowY == \"auto\" || r.overflowY == \"scroll\")) {\n        if (!n.getBoundingClientRect || n === document.body)\n          return te();\n        if (o || e)\n          return n;\n        o = !0;\n      }\n    }\n  while (n = n.parentNode);\n  return te();\n}\nfunction Fn(t, e) {\n  if (t && e)\n    for (var n in e)\n      e.hasOwnProperty(n) && (t[n] = e[n]);\n  return t;\n}\nfunction Je(t, e) {\n  return Math.round(t.top) === Math.round(e.top) && Math.round(t.left) === Math.round(e.left) && Math.round(t.height) === Math.round(e.height) && Math.round(t.width) === Math.round(e.width);\n}\nvar Ce;\nfunction zt(t, e) {\n  return function() {\n    if (!Ce) {\n      var n = arguments, o = this;\n      n.length === 1 ? t.call(o, n[0]) : t.apply(o, n), Ce = setTimeout(function() {\n        Ce = void 0;\n      }, e);\n    }\n  };\n}\nfunction Rn() {\n  clearTimeout(Ce), Ce = void 0;\n}\nfunction Ut(t, e, n) {\n  t.scrollLeft += e, t.scrollTop += n;\n}\nfunction Vt(t) {\n  var e = window.Polymer, n = window.jQuery || window.Zepto;\n  return e && e.dom ? e.dom(t).cloneNode(!0) : n ? n(t).clone(!0)[0] : t.cloneNode(!0);\n}\nfunction $t(t, e, n) {\n  var o = {};\n  return Array.from(t.children).forEach(function(r) {\n    var i, a, l, s;\n    if (!(!Q(r, e.draggable, t, !1) || r.animated || r === n)) {\n      var u = P(r);\n      o.left = Math.min((i = o.left) !== null && i !== void 0 ? i : 1 / 0, u.left), o.top = Math.min((a = o.top) !== null && a !== void 0 ? a : 1 / 0, u.top), o.right = Math.max((l = o.right) !== null && l !== void 0 ? l : -1 / 0, u.right), o.bottom = Math.max((s = o.bottom) !== null && s !== void 0 ? s : -1 / 0, u.bottom);\n    }\n  }), o.width = o.right - o.left, o.height = o.bottom - o.top, o.x = o.left, o.y = o.top, o;\n}\nvar q = \"Sortable\" + (/* @__PURE__ */ new Date()).getTime();\nfunction Xn() {\n  var t = [], e;\n  return {\n    captureAnimationState: function() {\n      if (t = [], !!this.options.animation) {\n        var o = [].slice.call(this.el.children);\n        o.forEach(function(r) {\n          if (!(h(r, \"display\") === \"none\" || r === p.ghost)) {\n            t.push({\n              target: r,\n              rect: P(r)\n            });\n            var i = ne({}, t[t.length - 1].rect);\n            if (r.thisAnimationDuration) {\n              var a = ye(r, !0);\n              a && (i.top -= a.f, i.left -= a.e);\n            }\n            r.fromRect = i;\n          }\n        });\n      }\n    },\n    addAnimationState: function(o) {\n      t.push(o);\n    },\n    removeAnimationState: function(o) {\n      t.splice(Mn(t, {\n        target: o\n      }), 1);\n    },\n    animateAll: function(o) {\n      var r = this;\n      if (!this.options.animation) {\n        clearTimeout(e), typeof o == \"function\" && o();\n        return;\n      }\n      var i = !1, a = 0;\n      t.forEach(function(l) {\n        var s = 0, u = l.target, d = u.fromRect, f = P(u), m = u.prevFromRect, y = u.prevToRect, b = l.rect, w = ye(u, !0);\n        w && (f.top -= w.f, f.left -= w.e), u.toRect = f, u.thisAnimationDuration && Je(m, f) && !Je(d, f) && // Make sure animatingRect is on line between toRect & fromRect\n        (b.top - f.top) / (b.left - f.left) === (d.top - f.top) / (d.left - f.left) && (s = Bn(b, m, y, r.options)), Je(f, d) || (u.prevFromRect = d, u.prevToRect = f, s || (s = r.options.animation), r.animate(u, b, f, s)), s && (i = !0, a = Math.max(a, s), clearTimeout(u.animationResetTimer), u.animationResetTimer = setTimeout(function() {\n          u.animationTime = 0, u.prevFromRect = null, u.fromRect = null, u.prevToRect = null, u.thisAnimationDuration = null;\n        }, s), u.thisAnimationDuration = s);\n      }), clearTimeout(e), i ? e = setTimeout(function() {\n        typeof o == \"function\" && o();\n      }, a) : typeof o == \"function\" && o(), t = [];\n    },\n    animate: function(o, r, i, a) {\n      if (a) {\n        h(o, \"transition\", \"\"), h(o, \"transform\", \"\");\n        var l = ye(this.el), s = l && l.a, u = l && l.d, d = (r.left - i.left) / (s || 1), f = (r.top - i.top) / (u || 1);\n        o.animatingX = !!d, o.animatingY = !!f, h(o, \"transform\", \"translate3d(\" + d + \"px,\" + f + \"px,0)\"), this.forRepaintDummy = Yn(o), h(o, \"transition\", \"transform \" + a + \"ms\" + (this.options.easing ? \" \" + this.options.easing : \"\")), h(o, \"transform\", \"translate3d(0,0,0)\"), typeof o.animated == \"number\" && clearTimeout(o.animated), o.animated = setTimeout(function() {\n          h(o, \"transition\", \"\"), h(o, \"transform\", \"\"), o.animated = !1, o.animatingX = !1, o.animatingY = !1;\n        }, a);\n      }\n    }\n  };\n}\nfunction Yn(t) {\n  return t.offsetWidth;\n}\nfunction Bn(t, e, n, o) {\n  return Math.sqrt(Math.pow(e.top - t.top, 2) + Math.pow(e.left - t.left, 2)) / Math.sqrt(Math.pow(e.top - n.top, 2) + Math.pow(e.left - n.left, 2)) * o.animation;\n}\nvar ge = [], Ze = {\n  initializeByDefault: !0\n}, Ne = {\n  mount: function(e) {\n    for (var n in Ze)\n      Ze.hasOwnProperty(n) && !(n in e) && (e[n] = Ze[n]);\n    ge.forEach(function(o) {\n      if (o.pluginName === e.pluginName)\n        throw \"Sortable: Cannot mount plugin \".concat(e.pluginName, \" more than once\");\n    }), ge.push(e);\n  },\n  pluginEvent: function(e, n, o) {\n    var r = this;\n    this.eventCanceled = !1, o.cancel = function() {\n      r.eventCanceled = !0;\n    };\n    var i = e + \"Global\";\n    ge.forEach(function(a) {\n      n[a.pluginName] && (n[a.pluginName][i] && n[a.pluginName][i](ne({\n        sortable: n\n      }, o)), n.options[a.pluginName] && n[a.pluginName][e] && n[a.pluginName][e](ne({\n        sortable: n\n      }, o)));\n    });\n  },\n  initializePlugins: function(e, n, o, r) {\n    ge.forEach(function(l) {\n      var s = l.pluginName;\n      if (!(!e.options[s] && !l.initializeByDefault)) {\n        var u = new l(e, n, e.options);\n        u.sortable = e, u.options = e.options, e[s] = u, ie(o, u.defaults);\n      }\n    });\n    for (var i in e.options)\n      if (e.options.hasOwnProperty(i)) {\n        var a = this.modifyOption(e, i, e.options[i]);\n        typeof a != \"undefined\" && (e.options[i] = a);\n      }\n  },\n  getEventProperties: function(e, n) {\n    var o = {};\n    return ge.forEach(function(r) {\n      typeof r.eventProperties == \"function\" && ie(o, r.eventProperties.call(n[r.pluginName], e));\n    }), o;\n  },\n  modifyOption: function(e, n, o) {\n    var r;\n    return ge.forEach(function(i) {\n      e[i.pluginName] && i.optionListeners && typeof i.optionListeners[n] == \"function\" && (r = i.optionListeners[n].call(e[i.pluginName], o));\n    }), r;\n  }\n};\nfunction kn(t) {\n  var e = t.sortable, n = t.rootEl, o = t.name, r = t.targetEl, i = t.cloneEl, a = t.toEl, l = t.fromEl, s = t.oldIndex, u = t.newIndex, d = t.oldDraggableIndex, f = t.newDraggableIndex, m = t.originalEvent, y = t.putSortable, b = t.extraEventProperties;\n  if (e = e || n && n[q], !!e) {\n    var w, L = e.options, G = \"on\" + o.charAt(0).toUpperCase() + o.substr(1);\n    window.CustomEvent && !ae && !xe ? w = new CustomEvent(o, {\n      bubbles: !0,\n      cancelable: !0\n    }) : (w = document.createEvent(\"Event\"), w.initEvent(o, !0, !0)), w.to = a || n, w.from = l || n, w.item = r || n, w.clone = i, w.oldIndex = s, w.newIndex = u, w.oldDraggableIndex = d, w.newDraggableIndex = f, w.originalEvent = m, w.pullMode = y ? y.lastPutMode : void 0;\n    var R = ne(ne({}, b), Ne.getEventProperties(o, e));\n    for (var j in R)\n      w[j] = R[j];\n    n && n.dispatchEvent(w), L[G] && L[G].call(e, w);\n  }\n}\nvar Hn = [\"evt\"], z = function(e, n) {\n  var o = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r = o.evt, i = xn(o, Hn);\n  Ne.pluginEvent.bind(p)(e, n, ne({\n    dragEl: c,\n    parentEl: O,\n    ghostEl: g,\n    rootEl: T,\n    nextEl: pe,\n    lastDownEl: Be,\n    cloneEl: C,\n    cloneHidden: ue,\n    dragStarted: Se,\n    putSortable: Y,\n    activeSortable: p.active,\n    originalEvent: r,\n    oldIndex: be,\n    oldDraggableIndex: Oe,\n    newIndex: $,\n    newDraggableIndex: se,\n    hideGhostForTarget: Zt,\n    unhideGhostForTarget: Qt,\n    cloneNowHidden: function() {\n      ue = !0;\n    },\n    cloneNowShown: function() {\n      ue = !1;\n    },\n    dispatchSortableEvent: function(l) {\n      W({\n        sortable: n,\n        name: l,\n        originalEvent: r\n      });\n    }\n  }, i));\n};\nfunction W(t) {\n  kn(ne({\n    putSortable: Y,\n    cloneEl: C,\n    targetEl: c,\n    rootEl: T,\n    oldIndex: be,\n    oldDraggableIndex: Oe,\n    newIndex: $,\n    newDraggableIndex: se\n  }, t));\n}\nvar c, O, g, T, pe, Be, C, ue, be, $, Oe, se, Me, Y, ve = !1, Ge = !1, je = [], de, Z, Qe, et, Pt, Mt, Se, me, Ie, Ae = !1, Fe = !1, ke, H, tt = [], lt = !1, ze = [], Ve = typeof document != \"undefined\", Re = Lt, Ft = xe || ae ? \"cssFloat\" : \"float\", Ln = Ve && !Wt && !Lt && \"draggable\" in document.createElement(\"div\"), qt = function() {\n  if (Ve) {\n    if (ae)\n      return !1;\n    var t = document.createElement(\"x\");\n    return t.style.cssText = \"pointer-events:auto\", t.style.pointerEvents === \"auto\";\n  }\n}(), Kt = function(e, n) {\n  var o = h(e), r = parseInt(o.width) - parseInt(o.paddingLeft) - parseInt(o.paddingRight) - parseInt(o.borderLeftWidth) - parseInt(o.borderRightWidth), i = we(e, 0, n), a = we(e, 1, n), l = i && h(i), s = a && h(a), u = l && parseInt(l.marginLeft) + parseInt(l.marginRight) + P(i).width, d = s && parseInt(s.marginLeft) + parseInt(s.marginRight) + P(a).width;\n  if (o.display === \"flex\")\n    return o.flexDirection === \"column\" || o.flexDirection === \"column-reverse\" ? \"vertical\" : \"horizontal\";\n  if (o.display === \"grid\")\n    return o.gridTemplateColumns.split(\" \").length <= 1 ? \"vertical\" : \"horizontal\";\n  if (i && l.float && l.float !== \"none\") {\n    var f = l.float === \"left\" ? \"left\" : \"right\";\n    return a && (s.clear === \"both\" || s.clear === f) ? \"vertical\" : \"horizontal\";\n  }\n  return i && (l.display === \"block\" || l.display === \"flex\" || l.display === \"table\" || l.display === \"grid\" || u >= r && o[Ft] === \"none\" || a && o[Ft] === \"none\" && u + d > r) ? \"vertical\" : \"horizontal\";\n}, Wn = function(e, n, o) {\n  var r = o ? e.left : e.top, i = o ? e.right : e.bottom, a = o ? e.width : e.height, l = o ? n.left : n.top, s = o ? n.right : n.bottom, u = o ? n.width : n.height;\n  return r === l || i === s || r + a / 2 === l + u / 2;\n}, Gn = function(e, n) {\n  var o;\n  return je.some(function(r) {\n    var i = r[q].options.emptyInsertThreshold;\n    if (!(!i || ht(r))) {\n      var a = P(r), l = e >= a.left - i && e <= a.right + i, s = n >= a.top - i && n <= a.bottom + i;\n      if (l && s)\n        return o = r;\n    }\n  }), o;\n}, Jt = function(e) {\n  function n(i, a) {\n    return function(l, s, u, d) {\n      var f = l.options.group.name && s.options.group.name && l.options.group.name === s.options.group.name;\n      if (i == null && (a || f))\n        return !0;\n      if (i == null || i === !1)\n        return !1;\n      if (a && i === \"clone\")\n        return i;\n      if (typeof i == \"function\")\n        return n(i(l, s, u, d), a)(l, s, u, d);\n      var m = (a ? l : s).options.group.name;\n      return i === !0 || typeof i == \"string\" && i === m || i.join && i.indexOf(m) > -1;\n    };\n  }\n  var o = {}, r = e.group;\n  (!r || Ye(r) != \"object\") && (r = {\n    name: r\n  }), o.name = r.name, o.checkPull = n(r.pull, !0), o.checkPut = n(r.put), o.revertClone = r.revertClone, e.group = o;\n}, Zt = function() {\n  !qt && g && h(g, \"display\", \"none\");\n}, Qt = function() {\n  !qt && g && h(g, \"display\", \"\");\n};\nVe && !Wt && document.addEventListener(\"click\", function(t) {\n  if (Ge)\n    return t.preventDefault(), t.stopPropagation && t.stopPropagation(), t.stopImmediatePropagation && t.stopImmediatePropagation(), Ge = !1, !1;\n}, !0);\nvar he = function(e) {\n  if (c) {\n    e = e.touches ? e.touches[0] : e;\n    var n = Gn(e.clientX, e.clientY);\n    if (n) {\n      var o = {};\n      for (var r in e)\n        e.hasOwnProperty(r) && (o[r] = e[r]);\n      o.target = o.rootEl = n, o.preventDefault = void 0, o.stopPropagation = void 0, n[q]._onDragOver(o);\n    }\n  }\n}, jn = function(e) {\n  c && c.parentNode[q]._isOutsideThisEl(e.target);\n};\nfunction p(t, e) {\n  if (!(t && t.nodeType && t.nodeType === 1))\n    throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(t));\n  this.el = t, this.options = e = ie({}, e), t[q] = this;\n  var n = {\n    group: null,\n    sort: !0,\n    disabled: !1,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(t.nodeName) ? \">li\" : \">*\",\n    swapThreshold: 1,\n    // percentage; 0 <= x <= 1\n    invertSwap: !1,\n    // invert always\n    invertedSwapThreshold: null,\n    // will be set to same as swapThreshold if default\n    removeCloneOnHide: !0,\n    direction: function() {\n      return Kt(t, this.options);\n    },\n    ghostClass: \"sortable-ghost\",\n    chosenClass: \"sortable-chosen\",\n    dragClass: \"sortable-drag\",\n    ignore: \"a, img\",\n    filter: null,\n    preventOnFilter: !0,\n    animation: 0,\n    easing: null,\n    setData: function(a, l) {\n      a.setData(\"Text\", l.textContent);\n    },\n    dropBubble: !1,\n    dragoverBubble: !1,\n    dataIdAttr: \"data-id\",\n    delay: 0,\n    delayOnTouchOnly: !1,\n    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n    forceFallback: !1,\n    fallbackClass: \"sortable-fallback\",\n    fallbackOnBody: !1,\n    fallbackTolerance: 0,\n    fallbackOffset: {\n      x: 0,\n      y: 0\n    },\n    supportPointer: p.supportPointer !== !1 && \"PointerEvent\" in window && !Te,\n    emptyInsertThreshold: 5\n  };\n  Ne.initializePlugins(this, t, n);\n  for (var o in n)\n    !(o in e) && (e[o] = n[o]);\n  Jt(e);\n  for (var r in this)\n    r.charAt(0) === \"_\" && typeof this[r] == \"function\" && (this[r] = this[r].bind(this));\n  this.nativeDraggable = e.forceFallback ? !1 : Ln, this.nativeDraggable && (this.options.touchStartThreshold = 1), e.supportPointer ? S(t, \"pointerdown\", this._onTapStart) : (S(t, \"mousedown\", this._onTapStart), S(t, \"touchstart\", this._onTapStart)), this.nativeDraggable && (S(t, \"dragover\", this), S(t, \"dragenter\", this)), je.push(this.el), e.store && e.store.get && this.sort(e.store.get(this) || []), ie(this, Xn());\n}\np.prototype = /** @lends Sortable.prototype */\n{\n  constructor: p,\n  _isOutsideThisEl: function(e) {\n    !this.el.contains(e) && e !== this.el && (me = null);\n  },\n  _getDirection: function(e, n) {\n    return typeof this.options.direction == \"function\" ? this.options.direction.call(this, e, n, c) : this.options.direction;\n  },\n  _onTapStart: function(e) {\n    if (e.cancelable) {\n      var n = this, o = this.el, r = this.options, i = r.preventOnFilter, a = e.type, l = e.touches && e.touches[0] || e.pointerType && e.pointerType === \"touch\" && e, s = (l || e).target, u = e.target.shadowRoot && (e.path && e.path[0] || e.composedPath && e.composedPath()[0]) || s, d = r.filter;\n      if (Zn(o), !c && !(/mousedown|pointerdown/.test(a) && e.button !== 0 || r.disabled) && !u.isContentEditable && !(!this.nativeDraggable && Te && s && s.tagName.toUpperCase() === \"SELECT\") && (s = Q(s, r.draggable, o, !1), !(s && s.animated) && Be !== s)) {\n        if (be = J(s), Oe = J(s, r.draggable), typeof d == \"function\") {\n          if (d.call(this, e, s, this)) {\n            W({\n              sortable: n,\n              rootEl: u,\n              name: \"filter\",\n              targetEl: s,\n              toEl: o,\n              fromEl: o\n            }), z(\"filter\", n, {\n              evt: e\n            }), i && e.cancelable && e.preventDefault();\n            return;\n          }\n        } else if (d && (d = d.split(\",\").some(function(f) {\n          if (f = Q(u, f.trim(), o, !1), f)\n            return W({\n              sortable: n,\n              rootEl: f,\n              name: \"filter\",\n              targetEl: s,\n              fromEl: o,\n              toEl: o\n            }), z(\"filter\", n, {\n              evt: e\n            }), !0;\n        }), d)) {\n          i && e.cancelable && e.preventDefault();\n          return;\n        }\n        r.handle && !Q(u, r.handle, o, !1) || this._prepareDragStart(e, l, s);\n      }\n    }\n  },\n  _prepareDragStart: function(e, n, o) {\n    var r = this, i = r.el, a = r.options, l = i.ownerDocument, s;\n    if (o && !c && o.parentNode === i) {\n      var u = P(o);\n      if (T = i, c = o, O = c.parentNode, pe = c.nextSibling, Be = o, Me = a.group, p.dragged = c, de = {\n        target: c,\n        clientX: (n || e).clientX,\n        clientY: (n || e).clientY\n      }, Pt = de.clientX - u.left, Mt = de.clientY - u.top, this._lastX = (n || e).clientX, this._lastY = (n || e).clientY, c.style[\"will-change\"] = \"all\", s = function() {\n        if (z(\"delayEnded\", r, {\n          evt: e\n        }), p.eventCanceled) {\n          r._onDrop();\n          return;\n        }\n        r._disableDelayedDragEvents(), !It && r.nativeDraggable && (c.draggable = !0), r._triggerDragStart(e, n), W({\n          sortable: r,\n          name: \"choose\",\n          originalEvent: e\n        }), V(c, a.chosenClass, !0);\n      }, a.ignore.split(\",\").forEach(function(d) {\n        jt(c, d.trim(), nt);\n      }), S(l, \"dragover\", he), S(l, \"mousemove\", he), S(l, \"touchmove\", he), S(l, \"mouseup\", r._onDrop), S(l, \"touchend\", r._onDrop), S(l, \"touchcancel\", r._onDrop), It && this.nativeDraggable && (this.options.touchStartThreshold = 4, c.draggable = !0), z(\"delayStart\", this, {\n        evt: e\n      }), a.delay && (!a.delayOnTouchOnly || n) && (!this.nativeDraggable || !(xe || ae))) {\n        if (p.eventCanceled) {\n          this._onDrop();\n          return;\n        }\n        S(l, \"mouseup\", r._disableDelayedDrag), S(l, \"touchend\", r._disableDelayedDrag), S(l, \"touchcancel\", r._disableDelayedDrag), S(l, \"mousemove\", r._delayedDragTouchMoveHandler), S(l, \"touchmove\", r._delayedDragTouchMoveHandler), a.supportPointer && S(l, \"pointermove\", r._delayedDragTouchMoveHandler), r._dragStartTimer = setTimeout(s, a.delay);\n      } else\n        s();\n    }\n  },\n  _delayedDragTouchMoveHandler: function(e) {\n    var n = e.touches ? e.touches[0] : e;\n    Math.max(Math.abs(n.clientX - this._lastX), Math.abs(n.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1)) && this._disableDelayedDrag();\n  },\n  _disableDelayedDrag: function() {\n    c && nt(c), clearTimeout(this._dragStartTimer), this._disableDelayedDragEvents();\n  },\n  _disableDelayedDragEvents: function() {\n    var e = this.el.ownerDocument;\n    E(e, \"mouseup\", this._disableDelayedDrag), E(e, \"touchend\", this._disableDelayedDrag), E(e, \"touchcancel\", this._disableDelayedDrag), E(e, \"mousemove\", this._delayedDragTouchMoveHandler), E(e, \"touchmove\", this._delayedDragTouchMoveHandler), E(e, \"pointermove\", this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function(e, n) {\n    n = n || e.pointerType == \"touch\" && e, !this.nativeDraggable || n ? this.options.supportPointer ? S(document, \"pointermove\", this._onTouchMove) : n ? S(document, \"touchmove\", this._onTouchMove) : S(document, \"mousemove\", this._onTouchMove) : (S(c, \"dragend\", this), S(T, \"dragstart\", this._onDragStart));\n    try {\n      document.selection ? He(function() {\n        document.selection.empty();\n      }) : window.getSelection().removeAllRanges();\n    } catch (o) {\n    }\n  },\n  _dragStarted: function(e, n) {\n    if (ve = !1, T && c) {\n      z(\"dragStarted\", this, {\n        evt: n\n      }), this.nativeDraggable && S(document, \"dragover\", jn);\n      var o = this.options;\n      !e && V(c, o.dragClass, !1), V(c, o.ghostClass, !0), p.active = this, e && this._appendGhost(), W({\n        sortable: this,\n        name: \"start\",\n        originalEvent: n\n      });\n    } else\n      this._nulling();\n  },\n  _emulateDragOver: function() {\n    if (Z) {\n      this._lastX = Z.clientX, this._lastY = Z.clientY, Zt();\n      for (var e = document.elementFromPoint(Z.clientX, Z.clientY), n = e; e && e.shadowRoot && (e = e.shadowRoot.elementFromPoint(Z.clientX, Z.clientY), e !== n); )\n        n = e;\n      if (c.parentNode[q]._isOutsideThisEl(e), n)\n        do {\n          if (n[q]) {\n            var o = void 0;\n            if (o = n[q]._onDragOver({\n              clientX: Z.clientX,\n              clientY: Z.clientY,\n              target: e,\n              rootEl: n\n            }), o && !this.options.dragoverBubble)\n              break;\n          }\n          e = n;\n        } while (n = n.parentNode);\n      Qt();\n    }\n  },\n  _onTouchMove: function(e) {\n    if (de) {\n      var n = this.options, o = n.fallbackTolerance, r = n.fallbackOffset, i = e.touches ? e.touches[0] : e, a = g && ye(g, !0), l = g && a && a.a, s = g && a && a.d, u = Re && H && Nt(H), d = (i.clientX - de.clientX + r.x) / (l || 1) + (u ? u[0] - tt[0] : 0) / (l || 1), f = (i.clientY - de.clientY + r.y) / (s || 1) + (u ? u[1] - tt[1] : 0) / (s || 1);\n      if (!p.active && !ve) {\n        if (o && Math.max(Math.abs(i.clientX - this._lastX), Math.abs(i.clientY - this._lastY)) < o)\n          return;\n        this._onDragStart(e, !0);\n      }\n      if (g) {\n        a ? (a.e += d - (Qe || 0), a.f += f - (et || 0)) : a = {\n          a: 1,\n          b: 0,\n          c: 0,\n          d: 1,\n          e: d,\n          f\n        };\n        var m = \"matrix(\".concat(a.a, \",\").concat(a.b, \",\").concat(a.c, \",\").concat(a.d, \",\").concat(a.e, \",\").concat(a.f, \")\");\n        h(g, \"webkitTransform\", m), h(g, \"mozTransform\", m), h(g, \"msTransform\", m), h(g, \"transform\", m), Qe = d, et = f, Z = i;\n      }\n      e.cancelable && e.preventDefault();\n    }\n  },\n  _appendGhost: function() {\n    if (!g) {\n      var e = this.options.fallbackOnBody ? document.body : T, n = P(c, !0, Re, !0, e), o = this.options;\n      if (Re) {\n        for (H = e; h(H, \"position\") === \"static\" && h(H, \"transform\") === \"none\" && H !== document; )\n          H = H.parentNode;\n        H !== document.body && H !== document.documentElement ? (H === document && (H = te()), n.top += H.scrollTop, n.left += H.scrollLeft) : H = te(), tt = Nt(H);\n      }\n      g = c.cloneNode(!0), V(g, o.ghostClass, !1), V(g, o.fallbackClass, !0), V(g, o.dragClass, !0), h(g, \"transition\", \"\"), h(g, \"transform\", \"\"), h(g, \"box-sizing\", \"border-box\"), h(g, \"margin\", 0), h(g, \"top\", n.top), h(g, \"left\", n.left), h(g, \"width\", n.width), h(g, \"height\", n.height), h(g, \"opacity\", \"0.8\"), h(g, \"position\", Re ? \"absolute\" : \"fixed\"), h(g, \"zIndex\", \"100000\"), h(g, \"pointerEvents\", \"none\"), p.ghost = g, e.appendChild(g), h(g, \"transform-origin\", Pt / parseInt(g.style.width) * 100 + \"% \" + Mt / parseInt(g.style.height) * 100 + \"%\");\n    }\n  },\n  _onDragStart: function(e, n) {\n    var o = this, r = e.dataTransfer, i = o.options;\n    if (z(\"dragStart\", this, {\n      evt: e\n    }), p.eventCanceled) {\n      this._onDrop();\n      return;\n    }\n    z(\"setupClone\", this), p.eventCanceled || (C = Vt(c), C.removeAttribute(\"id\"), C.draggable = !1, C.style[\"will-change\"] = \"\", this._hideClone(), V(C, this.options.chosenClass, !1), p.clone = C), o.cloneId = He(function() {\n      z(\"clone\", o), !p.eventCanceled && (o.options.removeCloneOnHide || T.insertBefore(C, c), o._hideClone(), W({\n        sortable: o,\n        name: \"clone\"\n      }));\n    }), !n && V(c, i.dragClass, !0), n ? (Ge = !0, o._loopId = setInterval(o._emulateDragOver, 50)) : (E(document, \"mouseup\", o._onDrop), E(document, \"touchend\", o._onDrop), E(document, \"touchcancel\", o._onDrop), r && (r.effectAllowed = \"move\", i.setData && i.setData.call(o, r, c)), S(document, \"drop\", o), h(c, \"transform\", \"translateZ(0)\")), ve = !0, o._dragStartId = He(o._dragStarted.bind(o, n, e)), S(document, \"selectstart\", o), Se = !0, Te && h(document.body, \"user-select\", \"none\");\n  },\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function(e) {\n    var n = this.el, o = e.target, r, i, a, l = this.options, s = l.group, u = p.active, d = Me === s, f = l.sort, m = Y || u, y, b = this, w = !1;\n    if (lt)\n      return;\n    function L(ee, Ee) {\n      z(ee, b, ne({\n        evt: e,\n        isOwner: d,\n        axis: y ? \"vertical\" : \"horizontal\",\n        revert: a,\n        dragRect: r,\n        targetRect: i,\n        canSort: f,\n        fromSortable: m,\n        target: o,\n        completed: R,\n        onMove: function(vt, rn) {\n          return Xe(T, n, c, r, vt, P(vt), e, rn);\n        },\n        changed: j\n      }, Ee));\n    }\n    function G() {\n      L(\"dragOverAnimationCapture\"), b.captureAnimationState(), b !== m && m.captureAnimationState();\n    }\n    function R(ee) {\n      return L(\"dragOverCompleted\", {\n        insertion: ee\n      }), ee && (d ? u._hideClone() : u._showClone(b), b !== m && (V(c, Y ? Y.options.ghostClass : u.options.ghostClass, !1), V(c, l.ghostClass, !0)), Y !== b && b !== p.active ? Y = b : b === p.active && Y && (Y = null), m === b && (b._ignoreWhileAnimating = o), b.animateAll(function() {\n        L(\"dragOverAnimationComplete\"), b._ignoreWhileAnimating = null;\n      }), b !== m && (m.animateAll(), m._ignoreWhileAnimating = null)), (o === c && !c.animated || o === n && !o.animated) && (me = null), !l.dragoverBubble && !e.rootEl && o !== document && (c.parentNode[q]._isOutsideThisEl(e.target), !ee && he(e)), !l.dragoverBubble && e.stopPropagation && e.stopPropagation(), w = !0;\n    }\n    function j() {\n      $ = J(c), se = J(c, l.draggable), W({\n        sortable: b,\n        name: \"change\",\n        toEl: n,\n        newIndex: $,\n        newDraggableIndex: se,\n        originalEvent: e\n      });\n    }\n    if (e.preventDefault !== void 0 && e.cancelable && e.preventDefault(), o = Q(o, l.draggable, n, !0), L(\"dragOver\"), p.eventCanceled)\n      return w;\n    if (c.contains(e.target) || o.animated && o.animatingX && o.animatingY || b._ignoreWhileAnimating === o)\n      return R(!1);\n    if (Ge = !1, u && !l.disabled && (d ? f || (a = O !== T) : Y === this || (this.lastPutMode = Me.checkPull(this, u, c, e)) && s.checkPut(this, u, c, e))) {\n      if (y = this._getDirection(e, o) === \"vertical\", r = P(c), L(\"dragOverValid\"), p.eventCanceled)\n        return w;\n      if (a)\n        return O = T, G(), this._hideClone(), L(\"revert\"), p.eventCanceled || (pe ? T.insertBefore(c, pe) : T.appendChild(c)), R(!0);\n      var B = ht(n, l.draggable);\n      if (!B || $n(e, y, this) && !B.animated) {\n        if (B === c)\n          return R(!1);\n        if (B && n === e.target && (o = B), o && (i = P(o)), Xe(T, n, c, r, o, i, e, !!o) !== !1)\n          return G(), B && B.nextSibling ? n.insertBefore(c, B.nextSibling) : n.appendChild(c), O = n, j(), R(!0);\n      } else if (B && Vn(e, y, this)) {\n        var X = we(n, 0, l, !0);\n        if (X === c)\n          return R(!1);\n        if (o = X, i = P(o), Xe(T, n, c, r, o, i, e, !1) !== !1)\n          return G(), n.insertBefore(c, X), O = n, j(), R(!0);\n      } else if (o.parentNode === n) {\n        i = P(o);\n        var K = 0, oe, le = c.parentNode !== n, k = !Wn(c.animated && c.toRect || r, o.animated && o.toRect || i, y), v = y ? \"top\" : \"left\", D = xt(o, \"top\", \"top\") || xt(c, \"top\", \"top\"), A = D ? D.scrollTop : void 0;\n        me !== o && (oe = i[v], Ae = !1, Fe = !k && l.invertSwap || le), K = qn(e, o, i, y, k ? 1 : l.swapThreshold, l.invertedSwapThreshold == null ? l.swapThreshold : l.invertedSwapThreshold, Fe, me === o);\n        var I;\n        if (K !== 0) {\n          var _ = J(c);\n          do\n            _ -= K, I = O.children[_];\n          while (I && (h(I, \"display\") === \"none\" || I === g));\n        }\n        if (K === 0 || I === o)\n          return R(!1);\n        me = o, Ie = K;\n        var x = o.nextElementSibling, M = !1;\n        M = K === 1;\n        var F = Xe(T, n, c, r, o, i, e, M);\n        if (F !== !1)\n          return (F === 1 || F === -1) && (M = F === 1), lt = !0, setTimeout(Un, 30), G(), M && !x ? n.appendChild(c) : o.parentNode.insertBefore(c, M ? x : o), D && Ut(D, 0, A - D.scrollTop), O = c.parentNode, oe !== void 0 && !Fe && (ke = Math.abs(oe - P(o)[v])), j(), R(!0);\n      }\n      if (n.contains(c))\n        return R(!1);\n    }\n    return !1;\n  },\n  _ignoreWhileAnimating: null,\n  _offMoveEvents: function() {\n    E(document, \"mousemove\", this._onTouchMove), E(document, \"touchmove\", this._onTouchMove), E(document, \"pointermove\", this._onTouchMove), E(document, \"dragover\", he), E(document, \"mousemove\", he), E(document, \"touchmove\", he);\n  },\n  _offUpEvents: function() {\n    var e = this.el.ownerDocument;\n    E(e, \"mouseup\", this._onDrop), E(e, \"touchend\", this._onDrop), E(e, \"pointerup\", this._onDrop), E(e, \"touchcancel\", this._onDrop), E(document, \"selectstart\", this);\n  },\n  _onDrop: function(e) {\n    var n = this.el, o = this.options;\n    if ($ = J(c), se = J(c, o.draggable), z(\"drop\", this, {\n      evt: e\n    }), O = c && c.parentNode, $ = J(c), se = J(c, o.draggable), p.eventCanceled) {\n      this._nulling();\n      return;\n    }\n    ve = !1, Fe = !1, Ae = !1, clearInterval(this._loopId), clearTimeout(this._dragStartTimer), st(this.cloneId), st(this._dragStartId), this.nativeDraggable && (E(document, \"drop\", this), E(n, \"dragstart\", this._onDragStart)), this._offMoveEvents(), this._offUpEvents(), Te && h(document.body, \"user-select\", \"\"), h(c, \"transform\", \"\"), e && (Se && (e.cancelable && e.preventDefault(), !o.dropBubble && e.stopPropagation()), g && g.parentNode && g.parentNode.removeChild(g), (T === O || Y && Y.lastPutMode !== \"clone\") && C && C.parentNode && C.parentNode.removeChild(C), c && (this.nativeDraggable && E(c, \"dragend\", this), nt(c), c.style[\"will-change\"] = \"\", Se && !ve && V(c, Y ? Y.options.ghostClass : this.options.ghostClass, !1), V(c, this.options.chosenClass, !1), W({\n      sortable: this,\n      name: \"unchoose\",\n      toEl: O,\n      newIndex: null,\n      newDraggableIndex: null,\n      originalEvent: e\n    }), T !== O ? ($ >= 0 && (W({\n      rootEl: O,\n      name: \"add\",\n      toEl: O,\n      fromEl: T,\n      originalEvent: e\n    }), W({\n      sortable: this,\n      name: \"remove\",\n      toEl: O,\n      originalEvent: e\n    }), W({\n      rootEl: O,\n      name: \"sort\",\n      toEl: O,\n      fromEl: T,\n      originalEvent: e\n    }), W({\n      sortable: this,\n      name: \"sort\",\n      toEl: O,\n      originalEvent: e\n    })), Y && Y.save()) : $ !== be && $ >= 0 && (W({\n      sortable: this,\n      name: \"update\",\n      toEl: O,\n      originalEvent: e\n    }), W({\n      sortable: this,\n      name: \"sort\",\n      toEl: O,\n      originalEvent: e\n    })), p.active && (($ == null || $ === -1) && ($ = be, se = Oe), W({\n      sortable: this,\n      name: \"end\",\n      toEl: O,\n      originalEvent: e\n    }), this.save()))), this._nulling();\n  },\n  _nulling: function() {\n    z(\"nulling\", this), T = c = O = g = pe = C = Be = ue = de = Z = Se = $ = se = be = Oe = me = Ie = Y = Me = p.dragged = p.ghost = p.clone = p.active = null, ze.forEach(function(e) {\n      e.checked = !0;\n    }), ze.length = Qe = et = 0;\n  },\n  handleEvent: function(e) {\n    switch (e.type) {\n      case \"drop\":\n      case \"dragend\":\n        this._onDrop(e);\n        break;\n      case \"dragenter\":\n      case \"dragover\":\n        c && (this._onDragOver(e), zn(e));\n        break;\n      case \"selectstart\":\n        e.preventDefault();\n        break;\n    }\n  },\n  /**\n   * Serializes the item into an array of string.\n   * @returns {String[]}\n   */\n  toArray: function() {\n    for (var e = [], n, o = this.el.children, r = 0, i = o.length, a = this.options; r < i; r++)\n      n = o[r], Q(n, a.draggable, this.el, !1) && e.push(n.getAttribute(a.dataIdAttr) || Jn(n));\n    return e;\n  },\n  /**\n   * Sorts the elements according to the array.\n   * @param  {String[]}  order  order of the items\n   */\n  sort: function(e, n) {\n    var o = {}, r = this.el;\n    this.toArray().forEach(function(i, a) {\n      var l = r.children[a];\n      Q(l, this.options.draggable, r, !1) && (o[i] = l);\n    }, this), n && this.captureAnimationState(), e.forEach(function(i) {\n      o[i] && (r.removeChild(o[i]), r.appendChild(o[i]));\n    }), n && this.animateAll();\n  },\n  /**\n   * Save the current sorting\n   */\n  save: function() {\n    var e = this.options.store;\n    e && e.set && e.set(this);\n  },\n  /**\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n   * @param   {HTMLElement}  el\n   * @param   {String}       [selector]  default: `options.draggable`\n   * @returns {HTMLElement|null}\n   */\n  closest: function(e, n) {\n    return Q(e, n || this.options.draggable, this.el, !1);\n  },\n  /**\n   * Set/get option\n   * @param   {string} name\n   * @param   {*}      [value]\n   * @returns {*}\n   */\n  option: function(e, n) {\n    var o = this.options;\n    if (n === void 0)\n      return o[e];\n    var r = Ne.modifyOption(this, e, n);\n    typeof r != \"undefined\" ? o[e] = r : o[e] = n, e === \"group\" && Jt(o);\n  },\n  /**\n   * Destroy\n   */\n  destroy: function() {\n    z(\"destroy\", this);\n    var e = this.el;\n    e[q] = null, E(e, \"mousedown\", this._onTapStart), E(e, \"touchstart\", this._onTapStart), E(e, \"pointerdown\", this._onTapStart), this.nativeDraggable && (E(e, \"dragover\", this), E(e, \"dragenter\", this)), Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"), function(n) {\n      n.removeAttribute(\"draggable\");\n    }), this._onDrop(), this._disableDelayedDragEvents(), je.splice(je.indexOf(this.el), 1), this.el = e = null;\n  },\n  _hideClone: function() {\n    if (!ue) {\n      if (z(\"hideClone\", this), p.eventCanceled)\n        return;\n      h(C, \"display\", \"none\"), this.options.removeCloneOnHide && C.parentNode && C.parentNode.removeChild(C), ue = !0;\n    }\n  },\n  _showClone: function(e) {\n    if (e.lastPutMode !== \"clone\") {\n      this._hideClone();\n      return;\n    }\n    if (ue) {\n      if (z(\"showClone\", this), p.eventCanceled)\n        return;\n      c.parentNode == T && !this.options.group.revertClone ? T.insertBefore(C, c) : pe ? T.insertBefore(C, pe) : T.appendChild(C), this.options.group.revertClone && this.animate(c, C), h(C, \"display\", \"\"), ue = !1;\n    }\n  }\n};\nfunction zn(t) {\n  t.dataTransfer && (t.dataTransfer.dropEffect = \"move\"), t.cancelable && t.preventDefault();\n}\nfunction Xe(t, e, n, o, r, i, a, l) {\n  var s, u = t[q], d = u.options.onMove, f;\n  return window.CustomEvent && !ae && !xe ? s = new CustomEvent(\"move\", {\n    bubbles: !0,\n    cancelable: !0\n  }) : (s = document.createEvent(\"Event\"), s.initEvent(\"move\", !0, !0)), s.to = e, s.from = t, s.dragged = n, s.draggedRect = o, s.related = r || e, s.relatedRect = i || P(e), s.willInsertAfter = l, s.originalEvent = a, t.dispatchEvent(s), d && (f = d.call(u, s, a)), f;\n}\nfunction nt(t) {\n  t.draggable = !1;\n}\nfunction Un() {\n  lt = !1;\n}\nfunction Vn(t, e, n) {\n  var o = P(we(n.el, 0, n.options, !0)), r = $t(n.el, n.options, g), i = 10;\n  return e ? t.clientX < r.left - i || t.clientY < o.top && t.clientX < o.right : t.clientY < r.top - i || t.clientY < o.bottom && t.clientX < o.left;\n}\nfunction $n(t, e, n) {\n  var o = P(ht(n.el, n.options.draggable)), r = $t(n.el, n.options, g), i = 10;\n  return e ? t.clientX > r.right + i || t.clientY > o.bottom && t.clientX > o.left : t.clientY > r.bottom + i || t.clientX > o.right && t.clientY > o.top;\n}\nfunction qn(t, e, n, o, r, i, a, l) {\n  var s = o ? t.clientY : t.clientX, u = o ? n.height : n.width, d = o ? n.top : n.left, f = o ? n.bottom : n.right, m = !1;\n  if (!a) {\n    if (l && ke < u * r) {\n      if (!Ae && (Ie === 1 ? s > d + u * i / 2 : s < f - u * i / 2) && (Ae = !0), Ae)\n        m = !0;\n      else if (Ie === 1 ? s < d + ke : s > f - ke)\n        return -Ie;\n    } else if (s > d + u * (1 - r) / 2 && s < f - u * (1 - r) / 2)\n      return Kn(e);\n  }\n  return m = m || a, m && (s < d + u * i / 2 || s > f - u * i / 2) ? s > d + u / 2 ? 1 : -1 : 0;\n}\nfunction Kn(t) {\n  return J(c) < J(t) ? 1 : -1;\n}\nfunction Jn(t) {\n  for (var e = t.tagName + t.className + t.src + t.href + t.textContent, n = e.length, o = 0; n--; )\n    o += e.charCodeAt(n);\n  return o.toString(36);\n}\nfunction Zn(t) {\n  ze.length = 0;\n  for (var e = t.getElementsByTagName(\"input\"), n = e.length; n--; ) {\n    var o = e[n];\n    o.checked && ze.push(o);\n  }\n}\nfunction He(t) {\n  return setTimeout(t, 0);\n}\nfunction st(t) {\n  return clearTimeout(t);\n}\nVe && S(document, \"touchmove\", function(t) {\n  (p.active || ve) && t.cancelable && t.preventDefault();\n});\np.utils = {\n  on: S,\n  off: E,\n  css: h,\n  find: jt,\n  is: function(e, n) {\n    return !!Q(e, n, e, !1);\n  },\n  extend: Fn,\n  throttle: zt,\n  closest: Q,\n  toggleClass: V,\n  clone: Vt,\n  index: J,\n  nextTick: He,\n  cancelNextTick: st,\n  detectDirection: Kt,\n  getChild: we\n};\np.get = function(t) {\n  return t[q];\n};\np.mount = function() {\n  for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++)\n    e[n] = arguments[n];\n  e[0].constructor === Array && (e = e[0]), e.forEach(function(o) {\n    if (!o.prototype || !o.prototype.constructor)\n      throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(o));\n    o.utils && (p.utils = ne(ne({}, p.utils), o.utils)), Ne.mount(o);\n  });\n};\np.create = function(t, e) {\n  return new p(t, e);\n};\np.version = Nn;\nvar N = [], De, ut, ct = !1, ot, rt, Ue, _e;\nfunction Qn() {\n  function t() {\n    this.defaults = {\n      scroll: !0,\n      forceAutoScrollFallback: !1,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: !0\n    };\n    for (var e in this)\n      e.charAt(0) === \"_\" && typeof this[e] == \"function\" && (this[e] = this[e].bind(this));\n  }\n  return t.prototype = {\n    dragStarted: function(n) {\n      var o = n.originalEvent;\n      this.sortable.nativeDraggable ? S(document, \"dragover\", this._handleAutoScroll) : this.options.supportPointer ? S(document, \"pointermove\", this._handleFallbackAutoScroll) : o.touches ? S(document, \"touchmove\", this._handleFallbackAutoScroll) : S(document, \"mousemove\", this._handleFallbackAutoScroll);\n    },\n    dragOverCompleted: function(n) {\n      var o = n.originalEvent;\n      !this.options.dragOverBubble && !o.rootEl && this._handleAutoScroll(o);\n    },\n    drop: function() {\n      this.sortable.nativeDraggable ? E(document, \"dragover\", this._handleAutoScroll) : (E(document, \"pointermove\", this._handleFallbackAutoScroll), E(document, \"touchmove\", this._handleFallbackAutoScroll), E(document, \"mousemove\", this._handleFallbackAutoScroll)), Rt(), Le(), Rn();\n    },\n    nulling: function() {\n      Ue = ut = De = ct = _e = ot = rt = null, N.length = 0;\n    },\n    _handleFallbackAutoScroll: function(n) {\n      this._handleAutoScroll(n, !0);\n    },\n    _handleAutoScroll: function(n, o) {\n      var r = this, i = (n.touches ? n.touches[0] : n).clientX, a = (n.touches ? n.touches[0] : n).clientY, l = document.elementFromPoint(i, a);\n      if (Ue = n, o || this.options.forceAutoScrollFallback || xe || ae || Te) {\n        it(n, this.options, l, o);\n        var s = ce(l, !0);\n        ct && (!_e || i !== ot || a !== rt) && (_e && Rt(), _e = setInterval(function() {\n          var u = ce(document.elementFromPoint(i, a), !0);\n          u !== s && (s = u, Le()), it(n, r.options, u, o);\n        }, 10), ot = i, rt = a);\n      } else {\n        if (!this.options.bubbleScroll || ce(l, !0) === te()) {\n          Le();\n          return;\n        }\n        it(n, this.options, ce(l, !1), !1);\n      }\n    }\n  }, ie(t, {\n    pluginName: \"scroll\",\n    initializeByDefault: !0\n  });\n}\nfunction Le() {\n  N.forEach(function(t) {\n    clearInterval(t.pid);\n  }), N = [];\n}\nfunction Rt() {\n  clearInterval(_e);\n}\nvar it = zt(function(t, e, n, o) {\n  if (e.scroll) {\n    var r = (t.touches ? t.touches[0] : t).clientX, i = (t.touches ? t.touches[0] : t).clientY, a = e.scrollSensitivity, l = e.scrollSpeed, s = te(), u = !1, d;\n    ut !== n && (ut = n, Le(), De = e.scroll, d = e.scrollFn, De === !0 && (De = ce(n, !0)));\n    var f = 0, m = De;\n    do {\n      var y = m, b = P(y), w = b.top, L = b.bottom, G = b.left, R = b.right, j = b.width, B = b.height, X = void 0, K = void 0, oe = y.scrollWidth, le = y.scrollHeight, k = h(y), v = y.scrollLeft, D = y.scrollTop;\n      y === s ? (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\" || k.overflowX === \"visible\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\" || k.overflowY === \"visible\")) : (X = j < oe && (k.overflowX === \"auto\" || k.overflowX === \"scroll\"), K = B < le && (k.overflowY === \"auto\" || k.overflowY === \"scroll\"));\n      var A = X && (Math.abs(R - r) <= a && v + j < oe) - (Math.abs(G - r) <= a && !!v), I = K && (Math.abs(L - i) <= a && D + B < le) - (Math.abs(w - i) <= a && !!D);\n      if (!N[f])\n        for (var _ = 0; _ <= f; _++)\n          N[_] || (N[_] = {});\n      (N[f].vx != A || N[f].vy != I || N[f].el !== y) && (N[f].el = y, N[f].vx = A, N[f].vy = I, clearInterval(N[f].pid), (A != 0 || I != 0) && (u = !0, N[f].pid = setInterval(function() {\n        o && this.layer === 0 && p.active._onTouchMove(Ue);\n        var x = N[this.layer].vy ? N[this.layer].vy * l : 0, M = N[this.layer].vx ? N[this.layer].vx * l : 0;\n        typeof d == \"function\" && d.call(p.dragged.parentNode[q], M, x, t, Ue, N[this.layer].el) !== \"continue\" || Ut(N[this.layer].el, M, x);\n      }.bind({\n        layer: f\n      }), 24))), f++;\n    } while (e.bubbleScroll && m !== s && (m = ce(m, !1)));\n    ct = u;\n  }\n}, 30), en = function(e) {\n  var n = e.originalEvent, o = e.putSortable, r = e.dragEl, i = e.activeSortable, a = e.dispatchSortableEvent, l = e.hideGhostForTarget, s = e.unhideGhostForTarget;\n  if (n) {\n    var u = o || i;\n    l();\n    var d = n.changedTouches && n.changedTouches.length ? n.changedTouches[0] : n, f = document.elementFromPoint(d.clientX, d.clientY);\n    s(), u && !u.el.contains(f) && (a(\"spill\"), this.onSpill({\n      dragEl: r,\n      putSortable: o\n    }));\n  }\n};\nfunction pt() {\n}\npt.prototype = {\n  startIndex: null,\n  dragStart: function(e) {\n    var n = e.oldDraggableIndex;\n    this.startIndex = n;\n  },\n  onSpill: function(e) {\n    var n = e.dragEl, o = e.putSortable;\n    this.sortable.captureAnimationState(), o && o.captureAnimationState();\n    var r = we(this.sortable.el, this.startIndex, this.options);\n    r ? this.sortable.el.insertBefore(n, r) : this.sortable.el.appendChild(n), this.sortable.animateAll(), o && o.animateAll();\n  },\n  drop: en\n};\nie(pt, {\n  pluginName: \"revertOnSpill\"\n});\nfunction gt() {\n}\ngt.prototype = {\n  onSpill: function(e) {\n    var n = e.dragEl, o = e.putSortable, r = o || this.sortable;\n    r.captureAnimationState(), n.parentNode && n.parentNode.removeChild(n), r.animateAll();\n  },\n  drop: en\n};\nie(gt, {\n  pluginName: \"removeOnSpill\"\n});\np.mount(new Qn());\np.mount(gt, pt);\nfunction eo(t) {\n  return t == null ? t : JSON.parse(JSON.stringify(t));\n}\nfunction to(t) {\n  dt() && sn(t);\n}\nfunction no(t) {\n  dt() ? un(t) : kt(t);\n}\nlet tn = null, nn = null;\nfunction Xt(t = null, e = null) {\n  tn = t, nn = e;\n}\nfunction oo() {\n  return {\n    data: tn,\n    clonedData: nn\n  };\n}\nconst Yt = Symbol(\"cloneElement\");\nfunction on(...t) {\n  var le, k;\n  const e = (le = dt()) == null ? void 0 : le.proxy;\n  let n = null;\n  const o = t[0];\n  let [, r, i] = t;\n  Array.isArray(U(r)) || (i = r, r = null);\n  let a = null;\n  const {\n    immediate: l = !0,\n    clone: s = eo,\n    forceFallback: u,\n    fallbackOnBody: d,\n    customUpdate: f\n  } = (k = U(i)) != null ? k : {};\n  function m(v) {\n    var F;\n    const { from: D, oldIndex: A, item: I } = v, _ = Array.from(D.childNodes);\n    n = u && !d ? _.slice(0, -1) : _;\n    const x = U((F = U(r)) == null ? void 0 : F[A]), M = s(x);\n    Xt(x, M), I[Yt] = M;\n  }\n  function y(v) {\n    const D = v.item[Yt];\n    if (!wn(D)) {\n      if (Ke(v.item), qe(r)) {\n        const A = [...U(r)];\n        r.value = _t(A, v.newDraggableIndex, D);\n        return;\n      }\n      _t(U(r), v.newDraggableIndex, D);\n    }\n  }\n  function b(v) {\n    const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, pullMode: x, clone: M } = v;\n    if (Tt(D, A, I), x === \"clone\") {\n      Ke(M);\n      return;\n    }\n    if (qe(r)) {\n      const F = [...U(r)];\n      r.value = Dt(F, _);\n      return;\n    }\n    Dt(U(r), _);\n  }\n  function w(v) {\n    if (f) {\n      f(v);\n      return;\n    }\n    const { from: D, item: A, oldIndex: I, oldDraggableIndex: _, newDraggableIndex: x } = v;\n    if (Ke(A), Tt(D, A, I), qe(r)) {\n      const M = [...U(r)];\n      r.value = St(\n        M,\n        _,\n        x\n      );\n      return;\n    }\n    St(U(r), _, x);\n  }\n  function L(v) {\n    const { newIndex: D, oldIndex: A, from: I, to: _ } = v;\n    let x = null;\n    const M = D === A && I === _;\n    try {\n      if (M) {\n        let F = null;\n        n == null || n.some((ee, Ee) => {\n          if (F && (n == null ? void 0 : n.length) !== _.childNodes.length)\n            return I.insertBefore(F, ee.nextSibling), !0;\n          const mt = _.childNodes[Ee];\n          F = _ == null ? void 0 : _.replaceChild(ee, mt);\n        });\n      }\n    } catch (F) {\n      x = F;\n    } finally {\n      n = null;\n    }\n    kt(() => {\n      if (Xt(), x)\n        throw x;\n    });\n  }\n  const G = {\n    onUpdate: w,\n    onStart: m,\n    onAdd: y,\n    onRemove: b,\n    onEnd: L\n  };\n  function R(v) {\n    const D = U(o);\n    return v || (v = En(D) ? Sn(D, e == null ? void 0 : e.$el) : D), v && !Tn(v) && (v = v.$el), v || vn(\"Root element not found\"), v;\n  }\n  function j() {\n    var I;\n    const _ = (I = U(i)) != null ? I : {}, { immediate: v, clone: D } = _, A = $e(_, [\"immediate\", \"clone\"]);\n    return Ct(A, (x, M) => {\n      Cn(x) && (A[x] = (F, ...ee) => {\n        const Ee = oo();\n        return On(F, Ee), M(F, ...ee);\n      });\n    }), _n(\n      r === null ? {} : G,\n      A\n    );\n  }\n  const B = (v) => {\n    v = R(v), a && X.destroy(), a = new p(v, j());\n  };\n  ln(\n    () => i,\n    () => {\n      a && Ct(j(), (v, D) => {\n        a == null || a.option(v, D);\n      });\n    },\n    { deep: !0 }\n  );\n  const X = {\n    option: (v, D) => a == null ? void 0 : a.option(v, D),\n    destroy: () => {\n      a == null || a.destroy(), a = null;\n    },\n    save: () => a == null ? void 0 : a.save(),\n    toArray: () => a == null ? void 0 : a.toArray(),\n    closest: (...v) => a == null ? void 0 : a.closest(...v)\n  }, K = () => X == null ? void 0 : X.option(\"disabled\", !0), oe = () => X == null ? void 0 : X.option(\"disabled\", !1);\n  return no(() => {\n    l && B();\n  }), to(X.destroy), fe({ start: B, pause: K, resume: oe }, X);\n}\nconst ft = [\n  \"update\",\n  \"start\",\n  \"add\",\n  \"remove\",\n  \"choose\",\n  \"unchoose\",\n  \"end\",\n  \"sort\",\n  \"filter\",\n  \"clone\",\n  \"move\",\n  \"change\"\n], ro = [\n  \"clone\",\n  \"animation\",\n  \"ghostClass\",\n  \"group\",\n  \"sort\",\n  \"disabled\",\n  \"store\",\n  \"handle\",\n  \"draggable\",\n  \"swapThreshold\",\n  \"invertSwap\",\n  \"invertedSwapThreshold\",\n  \"removeCloneOnHide\",\n  \"direction\",\n  \"chosenClass\",\n  \"dragClass\",\n  \"ignore\",\n  \"filter\",\n  \"preventOnFilter\",\n  \"easing\",\n  \"setData\",\n  \"dropBubble\",\n  \"dragoverBubble\",\n  \"dataIdAttr\",\n  \"delay\",\n  \"delayOnTouchOnly\",\n  \"touchStartThreshold\",\n  \"forceFallback\",\n  \"fallbackClass\",\n  \"fallbackOnBody\",\n  \"fallbackTolerance\",\n  \"fallbackOffset\",\n  \"supportPointer\",\n  \"emptyInsertThreshold\",\n  \"scroll\",\n  \"forceAutoScrollFallback\",\n  \"scrollSensitivity\",\n  \"scrollSpeed\",\n  \"bubbleScroll\",\n  \"modelValue\",\n  \"tag\",\n  \"target\",\n  \"customUpdate\",\n  ...ft.map((t) => `on${t.replace(/^\\S/, (e) => e.toUpperCase())}`)\n], lo = cn({\n  name: \"VueDraggable\",\n  model: {\n    prop: \"modelValue\",\n    event: \"update:modelValue\"\n  },\n  props: ro,\n  emits: [\"update:modelValue\", ...ft],\n  setup(t, { slots: e, emit: n, expose: o, attrs: r }) {\n    const i = ft.reduce((d, f) => {\n      const m = `on${f.replace(/^\\S/, (y) => y.toUpperCase())}`;\n      return d[m] = (...y) => n(f, ...y), d;\n    }, {}), a = Et(() => {\n      const y = fn(t), { modelValue: d } = y, f = $e(y, [\"modelValue\"]), m = Object.entries(f).reduce((b, [w, L]) => {\n        const G = U(L);\n        return G !== void 0 && (b[w] = G), b;\n      }, {});\n      return fe(fe({}, i), yn(fe(fe({}, r), m)));\n    }), l = Et({\n      get: () => t.modelValue,\n      set: (d) => n(\"update:modelValue\", d)\n    }), s = dn(), u = hn(\n      on(t.target || s, l, a)\n    );\n    return o(u), () => {\n      var d;\n      return pn(t.tag || \"div\", { ref: s }, (d = e == null ? void 0 : e.default) == null ? void 0 : d.call(e, u));\n    };\n  }\n}), Bt = {\n  mounted: \"mounted\",\n  unmounted: \"unmounted\"\n}, at = /* @__PURE__ */ new WeakMap(), so = {\n  [Bt.mounted](t, e) {\n    const n = gn(e.value) ? [e.value] : e.value, [o, r] = n, i = on(t, o, r);\n    at.set(t, i.destroy);\n  },\n  [Bt.unmounted](t) {\n    var e;\n    (e = at.get(t)) == null || e(), at.delete(t);\n  }\n};\nexport {\n  lo as VueDraggable,\n  on as useDraggable,\n  so as vDraggable\n};\n","<!--\n  - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcDialog\n\t\tcontentClasses=\"options-modal\"\n\t\t:name=\"t('forms', 'Add multiple options')\"\n\t\t:open=\"open\"\n\t\t:buttons=\"buttons\"\n\t\tsize=\"normal\"\n\t\t@update:open=\"$emit('update:open', $event)\">\n\t\t<div class=\"options-text-area\">\n\t\t\t<NcTextArea\n\t\t\t\tv-model=\"enteredOptions\"\n\t\t\t\t:label=\"t('forms', 'Add multiple options (one per line)')\"\n\t\t\t\t:placeholder=\"t('forms', 'Add multiple options (one per line)')\"\n\t\t\t\tresize=\"vertical\"\n\t\t\t\trows=\"10\" />\n\t\t</div>\n\t\t<NcSelect\n\t\t\t:inputLabel=\"t('forms', 'Options')\"\n\t\t\tmultiple\n\t\t\tdisabled\n\t\t\t:modelValue=\"multipleOptions\" />\n\t</NcDialog>\n</template>\n\n<script>\nimport IconCheck from '@material-symbols/svg-400/outlined/check.svg?raw'\nimport { showError } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport { defineComponent } from 'vue'\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\nimport NcSelect from '@nextcloud/vue/components/NcSelect'\nimport NcTextArea from '@nextcloud/vue/components/NcTextArea'\n\nexport default defineComponent({\n\tname: 'OptionInputDialog',\n\n\tcomponents: {\n\t\tNcDialog,\n\t\tNcSelect,\n\t\tNcTextArea,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\temits: ['update:open', 'multipleAnswers'],\n\n\tdata() {\n\t\treturn {\n\t\t\tenteredOptions: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tbuttons() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('forms', 'Cancel'),\n\t\t\t\t\tcallback: () => {\n\t\t\t\t\t\tthis.$emit('update:open', false)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('forms', 'Add options'),\n\t\t\t\t\ttype: 'primary',\n\t\t\t\t\ticon: IconCheck,\n\t\t\t\t\tcallback: () => {\n\t\t\t\t\t\tthis.onMultipleOptions()\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\n\t\tmultipleOptions() {\n\t\t\tconst allOptions = this.enteredOptions.split(/\\r?\\n/g)\n\t\t\treturn allOptions.filter((answer) => {\n\t\t\t\treturn answer.trim().length > 0\n\t\t\t})\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tonMultipleOptions() {\n\t\t\tthis.$emit('update:open', false)\n\t\t\tif (this.multipleOptions.length > 1) {\n\t\t\t\t// extract all options entries to parent\n\t\t\t\tthis.$emit('multipleAnswers', this.multipleOptions)\n\t\t\t\tthis.enteredOptions = ''\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// in case of only one option, just show an error message because it is probably missuse of the feature\n\t\t\tshowError(t('forms', 'Options should be separated by new line!'))\n\t\t},\n\t},\n})\n</script>\n\n<style scoped>\n:deep(.options-modal) {\n\tpadding-block: 0px 12px;\n\tpadding-inline: 8px 20px;\n}\n\n:deep(.v-select) {\n\twidth: 100%;\n\tmargin-top: 10px !important;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px 0;\n}\n\n.options-text-area {\n\theight: 210px;\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M120-260v-440q0-24.75 17.63-42.38Q155.25-760 180-760h600q24.75 0 42.38 17.62Q840-724.75 840-700v440q0 24.75-17.62 42.37Q804.75-200 780-200H180q-24.75 0-42.37-17.63Q120-235.25 120-260Zm60 0h160v-440H180v440Zm220 0h160v-440H400v440Zm220 0h160v-440H620v440Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M780-260v-190H180v190h600Zm0-250v-190H180v190h600ZM180-200q-24 0-42-18t-18-42v-440q0-24 18-42t42-18h600q24 0 42 18t18 42v440q0 24-18 42t-42 18H180Z\\\"/></svg>\"","<!--\n  - SPDX-FileCopyrightText: 2020 John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<li class=\"question__item\" @focusout=\"handleTabbing\">\n\t\t<NcIconSvgWrapper\n\t\t\tv-if=\"!isDropdown\"\n\t\t\t:svg=\"pseudoIcon\"\n\t\t\tinline\n\t\t\tclass=\"question__item__pseudoInput\" />\n\t\t<input\n\t\t\tref=\"input\"\n\t\t\tv-model=\"localText\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\tclass=\"question__input\"\n\t\t\t:class=\"{ 'question__input--shifted': !isDropdown }\"\n\t\t\t:maxlength=\"maxOptionLength\"\n\t\t\ttype=\"text\"\n\t\t\tdir=\"auto\"\n\t\t\t@input=\"debounceOnInput\"\n\t\t\t@keydown.delete=\"deleteEntry\"\n\t\t\t@keydown.enter.prevent=\"onEnter\"\n\t\t\t@compositionstart=\"onCompositionStart\"\n\t\t\t@compositionend=\"onCompositionEnd\" />\n\n\t\t<!-- Actions for reordering and deleting the option  -->\n\t\t<div v-if=\"!answer.local\" class=\"option__actions\">\n\t\t\t<NcActions\n\t\t\t\t:id=\"optionDragMenuId\"\n\t\t\t\t:container=\"`#${optionDragMenuId}`\"\n\t\t\t\t:aria-label=\"t('forms', 'Move option actions')\"\n\t\t\t\tclass=\"option__drag-handle\"\n\t\t\t\tvariant=\"tertiary-no-background\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconDragIndicator\" />\n\t\t\t\t</template>\n\t\t\t\t<NcActionButton\n\t\t\t\t\tref=\"buttonOptionUp\"\n\t\t\t\t\t:disabled=\"index === 0\"\n\t\t\t\t\t@click=\"onMoveUp\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconArrowUp\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('forms', 'Move option up') }}\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton\n\t\t\t\t\tref=\"buttonOptionDown\"\n\t\t\t\t\t:disabled=\"index === maxIndex\"\n\t\t\t\t\t@click=\"onMoveDown\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconArrowDown\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('forms', 'Move option down') }}\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActions>\n\t\t\t<NcButton\n\t\t\t\t:aria-label=\"t('forms', 'Delete answer')\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t@click=\"deleteEntry\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconDelete\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div v-else class=\"option__actions\">\n\t\t\t<NcButton\n\t\t\t\t:aria-label=\"t('forms', 'Add a new answer option')\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t:disabled=\"isIMEComposing || !canCreateLocalAnswer\"\n\t\t\t\t@click=\"createLocalAnswer\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconPlus\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t</li>\n</template>\n\n<script>\nimport IconPlus from '@material-symbols/svg-400/outlined/add.svg?raw'\nimport IconCheckboxBlankOutline from '@material-symbols/svg-400/outlined/check_box_outline_blank.svg?raw'\nimport IconDelete from '@material-symbols/svg-400/outlined/delete.svg?raw'\nimport IconDragIndicator from '@material-symbols/svg-400/outlined/drag_indicator.svg?raw'\nimport IconArrowDown from '@material-symbols/svg-400/outlined/keyboard_arrow_down.svg?raw'\nimport IconArrowUp from '@material-symbols/svg-400/outlined/keyboard_arrow_up.svg?raw'\nimport IconRadioboxBlank from '@material-symbols/svg-400/outlined/radio_button_unchecked.svg?raw'\nimport IconTableColumn from '@material-symbols/svg-400/outlined/view_column.svg?raw'\nimport IconTableRow from '@material-symbols/svg-400/outlined/view_stream.svg?raw'\nimport axios from '@nextcloud/axios'\nimport { showError } from '@nextcloud/dialogs'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport debounce from 'debounce'\nimport PQueue from 'p-queue'\nimport { markRaw } from 'vue'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport { INPUT_DEBOUNCE_MS, OptionType } from '../../models/Constants.ts'\nimport logger from '../../utils/Logger.js'\nimport OcsResponse2Data from '../../utils/OcsResponse2Data.js'\n\nexport default {\n\tname: 'AnswerInput',\n\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\tanswer: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\tformId: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\tisUnique: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\n\t\tisDropdown: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\tisRanking: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\tmaxIndex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\tmaxOptionLength: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\n\t\toptionType: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\temits: [\n\t\t'tabbedOut',\n\t\t'createAnswer',\n\t\t'update:answer',\n\t\t'focusNext',\n\t\t'delete',\n\t\t'moveDown',\n\t\t'moveUp',\n\t],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconArrowDown,\n\t\t\tIconArrowUp,\n\t\t\tIconDelete,\n\t\t\tIconDragIndicator,\n\t\t\tIconPlus,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tqueue: null,\n\t\t\tdebounceOnInput: null,\n\t\t\tisIMEComposing: false,\n\t\t\tlocalText: this.answer?.text ?? '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcanCreateLocalAnswer() {\n\t\t\tif (this.answer.local) {\n\t\t\t\treturn !!this.localText?.trim()\n\t\t\t}\n\t\t\treturn !!this.answer.text?.trim()\n\t\t},\n\n\t\tariaLabel() {\n\t\t\tif (this.answer.local) {\n\t\t\t\tif (this.optionType === OptionType.Column) {\n\t\t\t\t\treturn t('forms', 'Add a new column')\n\t\t\t\t}\n\t\t\t\tif (this.optionType === OptionType.Row) {\n\t\t\t\t\treturn t('forms', 'Add a new row')\n\t\t\t\t}\n\n\t\t\t\treturn t('forms', 'Add a new answer option')\n\t\t\t}\n\n\t\t\tif (this.optionType === OptionType.Column) {\n\t\t\t\treturn t('forms', 'The text of column {index}', {\n\t\t\t\t\tindex: this.index + 1,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (this.optionType === OptionType.Row) {\n\t\t\t\treturn t('forms', 'The text of row {index}', {})\n\t\t\t}\n\n\t\t\treturn t('forms', 'The text of option {index}', {\n\t\t\t\tindex: this.index + 1,\n\t\t\t})\n\t\t},\n\n\t\toptionDragMenuId() {\n\t\t\treturn `q${this.answer.questionId}o${this.answer.id}o${this.optionType}__drag_menu`\n\t\t},\n\n\t\tplaceholder() {\n\t\t\tif (this.answer.local) {\n\t\t\t\tif (this.optionType === OptionType.Column) {\n\t\t\t\t\treturn t('forms', 'Add a new column')\n\t\t\t\t}\n\n\t\t\t\tif (this.optionType === OptionType.Row) {\n\t\t\t\t\treturn t('forms', 'Add a new row')\n\t\t\t\t}\n\n\t\t\t\treturn t('forms', 'Add a new answer option')\n\t\t\t}\n\n\t\t\tif (this.optionType === OptionType.Column) {\n\t\t\t\treturn t('forms', 'Column number {index}', { index: this.index + 1 })\n\t\t\t}\n\n\t\t\tif (this.optionType === OptionType.Row) {\n\t\t\t\treturn t('forms', 'Row number {index}', { index: this.index + 1 })\n\t\t\t}\n\n\t\t\treturn t('forms', 'Answer number {index}', { index: this.index + 1 })\n\t\t},\n\n\t\tpseudoIcon() {\n\t\t\tif (this.answer.local) {\n\t\t\t\treturn IconPlus\n\t\t\t}\n\n\t\t\tif (this.optionType === OptionType.Column) {\n\t\t\t\treturn IconTableColumn\n\t\t\t}\n\n\t\t\tif (this.optionType === OptionType.Row) {\n\t\t\t\treturn IconTableRow\n\t\t\t}\n\n\t\t\tif (this.isRanking) {\n\t\t\t\treturn IconDragIndicator\n\t\t\t}\n\n\t\t\treturn this.isUnique ? IconRadioboxBlank : IconCheckboxBlankOutline\n\t\t},\n\t},\n\n\twatch: {\n\t\t// Keep localText in sync when the parent replaces/updates the answer prop\n\t\tanswer: {\n\t\t\thandler(newVal) {\n\t\t\t\tthis.localText = newVal?.text ?? ''\n\t\t\t},\n\n\t\t\tdeep: true,\n\t\t},\n\t},\n\n\tcreated() {\n\t\tthis.queue = markRaw(new PQueue({ concurrency: 1 }))\n\n\t\t// As data instead of method, to have a separate debounce per AnswerInput\n\t\tthis.debounceOnInput = debounce((event) => {\n\t\t\treturn this.queue.add(() => this.onInput(event))\n\t\t}, INPUT_DEBOUNCE_MS)\n\t},\n\n\tmethods: {\n\t\thandleTabbing() {\n\t\t\tthis.$emit('tabbedOut', this.optionType)\n\t\t},\n\n\t\t/**\n\t\t * Focus the input\n\t\t */\n\t\tfocus() {\n\t\t\tthis.$refs.input?.focus()\n\t\t},\n\n\t\t/**\n\t\t * Option changed, processing the data\n\t\t *\n\t\t * @param {InputEvent} event The input event that triggered adding a new entry\n\t\t */\n\t\tasync onInput({ target, isComposing }) {\n\t\t\tif (this.answer.local) {\n\t\t\t\tthis.localText = target.value\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!isComposing && !this.isIMEComposing && target.value !== '') {\n\t\t\t\t// clone answer\n\t\t\t\tconst answer = { ...this.answer }\n\t\t\t\tanswer.text = this.$refs.input.value\n\n\t\t\t\tawait this.updateAnswer(answer)\n\n\t\t\t\t// Forward changes, but use current answer.text to avoid erasing\n\t\t\t\t// any in-between changes while updating the answer\n\t\t\t\tanswer.text = this.$refs.input.value\n\t\t\t\tthis.$emit('update:answer', this.index, answer)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handle Enter key: create local answer or move focus\n\t\t *\n\t\t * @param {KeyboardEvent} e the keydown event\n\t\t */\n\t\tonEnter(e) {\n\t\t\tif (this.answer.local) {\n\t\t\t\tthis.createLocalAnswer(e)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.focusNextInput(e)\n\t\t},\n\n\t\t/**\n\t\t * Create a new local answer option from the current input\n\t\t *\n\t\t * @param {Event} e the triggering event\n\t\t */\n\t\tasync createLocalAnswer(e) {\n\t\t\tif (this.isIMEComposing || e?.isComposing) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst value = this.localText ?? ''\n\t\t\tif (!value.trim()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst answer = { ...this.answer, text: value, local: false }\n\n\t\t\t// Prevent any queued debounced PATCHes from running while creating\n\t\t\tthis.queue.pause()\n\t\t\ttry {\n\t\t\t\tconst newAnswer = await this.createAnswer(answer)\n\n\t\t\t\t// Forward changes, but use current answer.text to avoid erasing\n\t\t\t\t// any in-between changes while creating the answer\n\t\t\t\tnewAnswer.text = this.$refs.input.value\n\t\t\t\tthis.localText = ''\n\n\t\t\t\tthis.$emit('createAnswer', this.index, newAnswer)\n\t\t\t} finally {\n\t\t\t\t// Clear pending update tasks (stale PATCHes) before resuming processing\n\t\t\t\tthis.queue.clear()\n\t\t\t\tthis.queue.start()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Request a new answer\n\t\t *\n\t\t * @param {Event} e the triggering event\n\t\t */\n\t\tfocusNextInput(e) {\n\t\t\tif (this.isIMEComposing || e?.isComposing) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.index <= this.maxIndex) {\n\t\t\t\tthis.$emit('focusNext', this.index, this.optionType)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Emit a delete request for this answer\n\t\t * when pressing the delete key on an empty input\n\t\t *\n\t\t * @param {Event} e the event\n\t\t */\n\t\tasync deleteEntry(e) {\n\t\t\tif (this.isIMEComposing || e?.isComposing) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.answer.local) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (e.type !== 'click' && this.$refs.input.value.length !== 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Dismiss delete key action\n\t\t\te.preventDefault()\n\n\t\t\t// do this in queue to prevent race conditions between PATCH and DELETE\n\t\t\tthis.queue.add(() => {\n\t\t\t\tthis.$emit('delete', this.answer)\n\t\t\t\t// Prevent any patch requests\n\t\t\t\tthis.queue.pause()\n\t\t\t\tthis.queue.clear()\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Create an unsynced answer to the server\n\t\t *\n\t\t * @param {object} answer the answer to sync\n\t\t * @return {object} answer\n\t\t */\n\t\tasync createAnswer(answer) {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(\n\t\t\t\t\tgenerateOcsUrl(\n\t\t\t\t\t\t'apps/forms/api/v3/forms/{id}/questions/{questionId}/options',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: this.formId,\n\t\t\t\t\t\t\tquestionId: answer.questionId,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\toptionTexts: [answer.text],\n\t\t\t\t\t\toptionType: answer.optionType,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tlogger.debug('Created answer', { answer })\n\n\t\t\t\t// Was synced once, this is now up to date with the server\n\t\t\t\tdelete answer.local\n\t\t\t\treturn OcsResponse2Data(response)[0]\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while saving answer', { answer, error })\n\t\t\t\tshowError(t('forms', 'Error while saving the answer'))\n\t\t\t}\n\n\t\t\treturn answer\n\t\t},\n\n\t\t/**\n\t\t * Save to the server, only do it after 500ms\n\t\t * of no change\n\t\t *\n\t\t * @param {object} answer the answer to sync\n\t\t */\n\t\tasync updateAnswer(answer) {\n\t\t\ttry {\n\t\t\t\tawait axios.patch(\n\t\t\t\t\tgenerateOcsUrl(\n\t\t\t\t\t\t'apps/forms/api/v3/forms/{id}/questions/{questionId}/options/{optionId}',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: this.formId,\n\t\t\t\t\t\t\tquestionId: answer.questionId,\n\t\t\t\t\t\t\toptionId: answer.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tkeyValuePairs: {\n\t\t\t\t\t\t\ttext: answer.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tlogger.debug('Updated answer', { answer })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while saving answer', { answer, error })\n\t\t\t\tshowError(t('forms', 'Error while saving the answer'))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reorder option but keep focus on the button\n\t\t */\n\t\tonMoveDown() {\n\t\t\tthis.$emit('moveDown')\n\t\t\tthis.focusButton(\n\t\t\t\tthis.index < this.maxIndex - 1\n\t\t\t\t\t? 'buttonOptionDown'\n\t\t\t\t\t: 'buttonOptionUp',\n\t\t\t)\n\t\t},\n\n\t\tonMoveUp() {\n\t\t\tthis.$emit('moveUp')\n\t\t\tthis.focusButton(this.index > 1 ? 'buttonOptionUp' : 'buttonOptionDown')\n\t\t},\n\n\t\tfocusButton(refName) {\n\t\t\tthis.$nextTick(() => this.$refs[refName].$el.focus())\n\t\t},\n\n\t\t/**\n\t\t * Handle composition start event for IME inputs\n\t\t */\n\t\tonCompositionStart() {\n\t\t\tthis.isIMEComposing = true\n\t\t},\n\n\t\t/**\n\t\t * Handle composition end event for IME inputs\n\t\t *\n\t\t * @param {CompositionEvent} event The input event that triggered adding a new entry\n\t\t */\n\t\tonCompositionEnd({ target, isComposing }) {\n\t\t\tthis.isIMEComposing = false\n\t\t\tif (!isComposing) {\n\t\t\t\tthis.onInput({ target, isComposing })\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__item {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tmin-height: var(--default-clickable-area);\n\twidth: 100%;\n\n\t&__pseudoInput {\n\t\tcolor: var(--color-primary-element);\n\t\tmargin-inline-start: 2px;\n\t\tz-index: 1;\n\t}\n\n\t.option__actions {\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\tgap: var(--default-grid-baseline);\n\t\tinset-inline-end: 12px;\n\t\theight: 100%;\n\t}\n\n\t.option__drag-handle {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tcursor: grab;\n\t\tmargin-block: auto;\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:focus-within {\n\t\t\tcolor: var(--color-main-text);\n\t\t}\n\n\t\t&:active {\n\t\t\tcursor: grabbing;\n\t\t}\n\n\t\t> * {\n\t\t\tcursor: grab;\n\t\t}\n\t}\n\n\t.question__input {\n\t\twidth: calc(100% - var(--default-clickable-area));\n\t\tposition: relative;\n\t\tinset-inline-start: -12px;\n\t\tmargin-inline-end: -12px !important;\n\n\t\t&--shifted {\n\t\t\tinset-inline-start: calc(-1 * var(--default-clickable-area));\n\t\t\tpadding-inline-start: calc(\n\t\t\t\tvar(--default-clickable-area) + var(--default-grid-baseline)\n\t\t\t) !important;\n\t\t}\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { FormsOption } from '../models/Entities.d.ts'\n\nimport axios from '@nextcloud/axios'\nimport { showError } from '@nextcloud/dialogs'\nimport { emit } from '@nextcloud/event-bus'\nimport { translate as t } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport debounce from 'debounce'\nimport { defineComponent } from 'vue'\nimport { INPUT_DEBOUNCE_MS, OptionType } from '../models/Constants.ts'\nimport logger from '../utils/Logger.js'\n\nexport default defineComponent({\n\temits: ['update:options'],\n\n\tdata() {\n\t\treturn {\n\t\t\tdirtyOptionsType: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tareNoneChecked() {\n\t\t\treturn this.values.length === 0\n\t\t},\n\n\t\tcontentValid() {\n\t\t\treturn this.answerType.validate(this)\n\t\t},\n\n\t\tisLastEmpty() {\n\t\t\tconst value = this.options[this.options.length - 1]\n\t\t\treturn value?.text?.trim?.().length === 0\n\t\t},\n\n\t\texpectedOptionTypes() {\n\t\t\treturn [OptionType.Choice, OptionType.Row, OptionType.Column]\n\t\t},\n\n\t\tsortedOptionsPerType(): { [key: string]: FormsOption[] } {\n\t\t\tconst optionsPerType = Object.fromEntries(\n\t\t\t\tthis.expectedOptionTypes.map((optionType) => [optionType, []]),\n\t\t\t)\n\n\t\t\tthis.options.forEach((option) => {\n\t\t\t\toptionsPerType[option.optionType].push(option)\n\t\t\t})\n\n\t\t\tfor (const optionType of Object.keys(optionsPerType)) {\n\t\t\t\t// Only shuffle options if not in editing mode (and shuffling is enabled)\n\t\t\t\tif (this.readOnly && this.extraSettings?.shuffleOptions) {\n\t\t\t\t\toptionsPerType[optionType] = this.shuffleArray(\n\t\t\t\t\t\toptionsPerType[optionType],\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\t// Ensure order of options always is the same\n\t\t\t\t\toptionsPerType[optionType] = [\n\t\t\t\t\t\t...optionsPerType[optionType],\n\t\t\t\t\t].sort((a, b) => {\n\t\t\t\t\t\tif (a.order === b.order) {\n\t\t\t\t\t\t\treturn a.id - b.id\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn (a.order ?? 0) - (b.order ?? 0)\n\t\t\t\t\t})\n\n\t\t\t\t\tif (!this.readOnly) {\n\t\t\t\t\t\t// In edit mode append an empty option\n\t\t\t\t\t\toptionsPerType[optionType].push({\n\t\t\t\t\t\t\tlocal: true,\n\t\t\t\t\t\t\tquestionId: this.id,\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\toptionType,\n\t\t\t\t\t\t\torder: optionsPerType[optionType].length,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn optionsPerType\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Set focus on next AnswerInput\n\t\t *\n\t\t * @param index Index of current option\n\t\t * @param optionType Type of current option\n\t\t */\n\t\tfocusNextInput(index: number, optionType: string) {\n\t\t\tthis.focusIndex(index + 1, optionType)\n\t\t},\n\n\t\t/**\n\t\t * Focus the input matching the index\n\t\t *\n\t\t * @param index the value index\n\t\t * @param optionType the option type to focus\n\t\t */\n\t\tfocusIndex(index: number, optionType: string) {\n\t\t\t// refs are not guaranteed to be in correct order - we need to find the correct item\n\t\t\tconst item = this.$refs.input.find((instance) => {\n\t\t\t\treturn (\n\t\t\t\t\tinstance.$props.optionType === optionType\n\t\t\t\t\t&& instance.$props.index === index\n\t\t\t\t)\n\t\t\t})\n\t\t\tif (item) {\n\t\t\t\titem.focus()\n\t\t\t} else {\n\t\t\t\tlogger.warn('Could not find option to focus', {\n\t\t\t\t\tindex,\n\t\t\t\t\toptions: this.sortedOptionsPerType[optionType],\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tsortOptionsOfType(\n\t\t\toptions: FormsOption[],\n\t\t\toptionType: string,\n\t\t): FormsOption[] {\n\t\t\t// Only shuffle options if not in editing mode (and shuffling is enabled)\n\t\t\toptions = options.filter((option) => option.optionType === optionType)\n\t\t\tif (this.readOnly && this.extraSettings?.shuffleOptions) {\n\t\t\t\treturn this.shuffleArray(options)\n\t\t\t}\n\n\t\t\t// Ensure order of options always is the same\n\t\t\toptions = [...options].sort((a, b) => {\n\t\t\t\tif (a.order === b.order) {\n\t\t\t\t\treturn a.id - b.id\n\t\t\t\t}\n\t\t\t\treturn (a.order ?? 0) - (b.order ?? 0)\n\t\t\t})\n\n\t\t\tif (!this.readOnly) {\n\t\t\t\t// In edit mode append an empty option\n\t\t\t\treturn [\n\t\t\t\t\t...options,\n\t\t\t\t\t{\n\t\t\t\t\t\tlocal: true,\n\t\t\t\t\t\tquestionId: this.id,\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\toptionType,\n\t\t\t\t\t\torder: options.length,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}\n\t\t\treturn options\n\t\t},\n\n\t\tupdateOptionsOrder(newOptions: FormsOption[], optionType: string) {\n\t\t\tthis.replaceOptionsOfType(\n\t\t\t\tnewOptions\n\t\t\t\t\t.filter((option) => !option.local)\n\t\t\t\t\t.map((option, index) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...option,\n\t\t\t\t\t\t\torder: index,\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\toptionType,\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Handles the creation of a new answer option.\n\t\t *\n\t\t * @param index the index of the answer\n\t\t * @param answer - The new answer option to be added.\n\t\t */\n\t\tonCreateAnswer(index: number, answer: FormsOption): void {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\t// Move focus to the newly appended empty local option.\n\t\t\t\tthis.$nextTick(() => this.focusIndex(index + 1, answer.optionType))\n\t\t\t})\n\t\t\tthis.updateOptions([...this.options, answer])\n\t\t},\n\n\t\t/**\n\t\t * Replace all options of a certain type\n\t\t *\n\t\t * @param options options to change\n\t\t * @param optionType the type of options to update\n\t\t */\n\t\treplaceOptionsOfType(options: FormsOption[], optionType: string) {\n\t\t\tconst updatedOptions = [\n\t\t\t\t...this.options.filter((option) => option.optionType !== optionType),\n\t\t\t\t...options,\n\t\t\t]\n\n\t\t\tthis.updateOptions(updatedOptions)\n\t\t},\n\t\t/**\n\t\t * Update the options\n\t\t * This will handle updating the form (emitting the changes) and update last changed property\n\t\t *\n\t\t * @param options options to change\n\t\t */\n\t\tupdateOptions(options: FormsOption[]) {\n\t\t\tthis.$emit('update:options', options)\n\t\t\temit('forms:last-updated:set', this.formId)\n\t\t},\n\n\t\t/**\n\t\t * Update an existing answer locally\n\t\t *\n\t\t * @param index the current index to update\n\t\t * @param answer the new answer value\n\t\t */\n\t\tupdateAnswer(index: number, answer: FormsOption) {\n\t\t\tconst options = [...this.sortedOptionsPerType[answer.optionType]]\n\t\t\tconst [oldValue] = options.splice(index, 1, answer)\n\n\t\t\t// New value created - we need to set the correct focus\n\t\t\tif (oldValue.local && !answer.local) {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.$nextTick(() => this.focusIndex(index, answer.optionType))\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.replaceOptionsOfType(\n\t\t\t\toptions.filter(({ local }) => !local),\n\t\t\t\tanswer.optionType,\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Remove any empty options when leaving an option\n\t\t *\n\t\t * @param optionType The type of options to validate\n\t\t */\n\t\tcheckValidOption(optionType: string) {\n\t\t\t// When leaving edit mode, filter and delete empty options\n\t\t\tthis.sortedOptionsPerType[optionType].forEach((option) => {\n\t\t\t\tif (!option.text && !option.local) {\n\t\t\t\t\tthis.deleteOption(option)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Delete an option\n\t\t *\n\t\t * @param optionToDelete The option to delete\n\t\t */\n\t\tdeleteOption(optionToDelete: FormsOption) {\n\t\t\tconst optionType = optionToDelete.optionType\n\t\t\tconst sortedOptions = this.sortedOptionsPerType[optionType]\n\t\t\tconst index = sortedOptions.findIndex(\n\t\t\t\t(option) => option.id === optionToDelete.id,\n\t\t\t)\n\t\t\tconst options = [...sortedOptions]\n\t\t\tconst [option] = options.splice(index, 1)\n\n\t\t\t// delete from Db\n\t\t\tthis.deleteOptionFromDatabase(option)\n\n\t\t\t// Update question - remove option and reorder other\n\t\t\tthis.replaceOptionsOfType(\n\t\t\t\toptions\n\t\t\t\t\t.filter(({ local }) => !local)\n\t\t\t\t\t.map((option, order) => ({ ...option, order })),\n\t\t\t\toptionType,\n\t\t\t)\n\n\t\t\t// Focus the previous option\n\t\t\tthis.$nextTick(() => this.focusIndex(Math.max(index - 1, 0), optionType))\n\t\t},\n\n\t\t/**\n\t\t * Delete the option from Db in background.\n\t\t * Restore option if delete not possible\n\t\t *\n\t\t * @param option The option to delete\n\t\t */\n\t\tdeleteOptionFromDatabase(option: FormsOption & { local?: boolean }) {\n\t\t\tconst optionIndex = this.options.findIndex(\n\t\t\t\t(opt: FormsOption) => opt.id === option.id,\n\t\t\t)\n\n\t\t\tif (!option.local) {\n\t\t\t\t// let's not await, deleting in background\n\t\t\t\taxios\n\t\t\t\t\t.delete(\n\t\t\t\t\t\tgenerateOcsUrl(\n\t\t\t\t\t\t\t'apps/forms/api/v3/forms/{id}/questions/{questionId}/options/{optionId}',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: this.formId,\n\t\t\t\t\t\t\t\tquestionId: this.id,\n\t\t\t\t\t\t\t\toptionId: option.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tlogger.error('Error while deleting an option', {\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\toption,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tshowError(\n\t\t\t\t\t\t\tt('forms', 'There was an issue deleting this option'),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t// restore option\n\t\t\t\t\t\tthis.restoreOption(option, optionIndex)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Restore an option locally\n\t\t *\n\t\t * @param option the option\n\t\t * @param index the options index in this.options\n\t\t */\n\t\trestoreOption(option: FormsOption, index: number) {\n\t\t\tconst options = this.options.slice()\n\t\t\toptions.splice(index, 0, option)\n\n\t\t\tthis.updateOptions(options)\n\t\t\tthis.focusIndex(index, option.optionType)\n\t\t},\n\n\t\tasync saveOptionsOrder(optionType: string) {\n\t\t\ttry {\n\t\t\t\tconst newOrder = this.sortedOptionsPerType[optionType]\n\t\t\t\t\t.filter((option) => !option.local)\n\t\t\t\t\t.map((option) => option.id)\n\n\t\t\t\tawait axios.patch(\n\t\t\t\t\tgenerateOcsUrl(\n\t\t\t\t\t\t'apps/forms/api/v3/forms/{id}/questions/{questionId}/options',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: this.formId,\n\t\t\t\t\t\t\tquestionId: this.id,\n\t\t\t\t\t\t},\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\toptionType,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\temit('forms:last-updated:set', this.formId)\n\t\t\t\tthis.dirtyOptionsType = null\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not reorder options', { error })\n\t\t\t\tshowError(t('forms', 'Error while saving options order'))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reorder option by moving it upwards the list\n\t\t *\n\t\t * @param index Option that should move up\n\t\t * @param optionType Type of current option\n\t\t */\n\t\tonOptionMoveUp(index: number, optionType: string) {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.onOptionMoveDown(index - 1, optionType)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reorder option by moving it downwards the list\n\t\t *\n\t\t * @param index Option that should move down\n\t\t * @param optionType Type of current option\n\t\t */\n\t\tonOptionMoveDown(index: number, optionType: string) {\n\t\t\tif (index === this.sortedOptionsPerType[optionType].length - 1) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// swap positions\n\t\t\tconst first = this.sortedOptionsPerType[optionType][index]\n\t\t\tconst second = this.sortedOptionsPerType[optionType][index + 1]\n\t\t\tsecond.order = index\n\t\t\tfirst.order = index + 1\n\n\t\t\tthis.dirtyOptionsType = optionType\n\t\t},\n\t},\n\n\twatch: {\n\t\tdirtyOptionsType: debounce(function () {\n\t\t\tif (!this.dirtyOptionsType) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.saveOptionsOrder(this.dirtyOptionsType)\n\t\t}, INPUT_DEBOUNCE_MS),\n\t},\n})\n","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:contentValid=\"contentValid\"\n\t\t:shiftDragHandle=\"shiftDragHandle\"\n\t\t:errorMessage=\"errorMessage\"\n\t\t:infoMessage=\"infoMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<template #actions>\n\t\t\t<NcActionCheckbox\n\t\t\t\t:modelValue=\"extraSettings?.shuffleOptions\"\n\t\t\t\t@update:modelValue=\"onShuffleOptionsChange\">\n\t\t\t\t{{ t('forms', 'Shuffle options') }}\n\t\t\t</NcActionCheckbox>\n\t\t\t<NcActionCheckbox\n\t\t\t\t:modelValue=\"allowOtherAnswer\"\n\t\t\t\t@update:modelValue=\"onAllowOtherAnswerChange\">\n\t\t\t\t{{ t('forms', 'Add \"other\"') }}\n\t\t\t</NcActionCheckbox>\n\n\t\t\t<!-- For multiple (checkbox) options allow to limit the answers -->\n\t\t\t<template v-if=\"!isUnique\">\n\t\t\t\t<!-- Allow setting a minimum of options to be checked -->\n\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t:modelValue=\"!!extraSettings?.optionsLimitMin\"\n\t\t\t\t\t@update:modelValue=\"\n\t\t\t\t\t\t(checked) => onLimitOptionsMin(checked ? 1 : null)\n\t\t\t\t\t\">\n\t\t\t\t\t{{ t('forms', 'Require a minimum of options to be checked') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionInput\n\t\t\t\t\tv-if=\"extraSettings?.optionsLimitMin\"\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t:label=\"t('forms', 'Minimum options to be checked')\"\n\t\t\t\t\t:labelOutside=\"false\"\n\t\t\t\t\t:showTrailingButton=\"false\"\n\t\t\t\t\t:modelValue=\"extraSettings.optionsLimitMin\"\n\t\t\t\t\t@update:modelValue=\"onLimitOptionsMin\" />\n\n\t\t\t\t<!-- Allow setting a maximum -->\n\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t:modelValue=\"!!extraSettings?.optionsLimitMax\"\n\t\t\t\t\t@update:modelValue=\"\n\t\t\t\t\t\t(checked) =>\n\t\t\t\t\t\t\tonLimitOptionsMax(checked ? choices.length || 1 : null)\n\t\t\t\t\t\">\n\t\t\t\t\t{{ t('forms', 'Require a maximum of options to be checked') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionInput\n\t\t\t\t\tv-if=\"extraSettings?.optionsLimitMax\"\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t:label=\"t('forms', 'Maximum options to be checked')\"\n\t\t\t\t\t:labelOutside=\"false\"\n\t\t\t\t\t:showTrailingButton=\"false\"\n\t\t\t\t\t:modelValue=\"extraSettings.optionsLimitMax\"\n\t\t\t\t\t@update:modelValue=\"onLimitOptionsMax\" />\n\t\t\t</template>\n\t\t\t<NcActionButton closeAfterClick @click=\"isOptionDialogShown = true\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconContentPaste\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('forms', 'Add multiple options') }}\n\t\t\t</NcActionButton>\n\t\t</template>\n\t\t<template v-if=\"readOnly\">\n\t\t\t<fieldset\n\t\t\t\t:name=\"name || undefined\"\n\t\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t\t:aria-describedby=\"description ? descriptionId : undefined\">\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-for=\"answer in choices\"\n\t\t\t\t\t:key=\"answer.id\"\n\t\t\t\t\t:aria-describedby=\"hasInfo ? infoId : undefined\"\n\t\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t\t:modelValue=\"questionValues\"\n\t\t\t\t\t:value=\"answer.id.toString()\"\n\t\t\t\t\t:name=\"`${id}-answer`\"\n\t\t\t\t\t:type=\"isUnique ? 'radio' : 'checkbox'\"\n\t\t\t\t\t:required=\"checkRequired(answer.id)\"\n\t\t\t\t\t@invalid.prevent=\"validate\"\n\t\t\t\t\t@update:modelValue=\"onChange\"\n\t\t\t\t\t@keydown.enter.exact.prevent=\"onKeydownEnter\">\n\t\t\t\t\t{{ answer.text }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<div v-if=\"allowOtherAnswer\" class=\"question__other-answer\">\n\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t:modelValue=\"questionValues\"\n\t\t\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t\t\t:value=\"otherAnswer ?? QUESTION_EXTRASETTINGS_OTHER_PREFIX\"\n\t\t\t\t\t\t:name=\"`${id}-answer`\"\n\t\t\t\t\t\t:type=\"isUnique ? 'radio' : 'checkbox'\"\n\t\t\t\t\t\t:required=\"checkRequired('other-answer')\"\n\t\t\t\t\t\tclass=\"question__label\"\n\t\t\t\t\t\t@invalid.prevent=\"validate\"\n\t\t\t\t\t\t@update:modelValue=\"onChangeOther\"\n\t\t\t\t\t\t@keydown.enter.exact.prevent=\"onKeydownEnter\">\n\t\t\t\t\t\t{{ t('forms', 'Other:') }}\n\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t<NcInputField\n\t\t\t\t\t\tclass=\"question__input\"\n\t\t\t\t\t\t:label=\"placeholderOtherAnswer\"\n\t\t\t\t\t\t:required=\"otherAnswer !== undefined\"\n\t\t\t\t\t\t:modelValue=\"cachedOtherAnswerText\"\n\t\t\t\t\t\t@update:modelValue=\"onOtherAnswerTextChange\" />\n\t\t\t\t</div>\n\t\t\t</fieldset>\n\t\t</template>\n\n\t\t<template v-else>\n\t\t\t<div v-if=\"isLoading\">\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</div>\n\t\t\t<Draggable\n\t\t\t\tv-else\n\t\t\t\tv-model=\"choices\"\n\t\t\t\tclass=\"question__content\"\n\t\t\t\t:animation=\"300\"\n\t\t\t\tdirection=\"vertical\"\n\t\t\t\thandle=\".option__drag-handle\"\n\t\t\t\tinvertSwap\n\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t@update=\"dirtyOptionsType = 'choice'\"\n\t\t\t\t@start=\"onDragStart\"\n\t\t\t\t@end=\"onDragEnd\">\n\t\t\t\t<TransitionGroup\n\t\t\t\t\ttag=\"ul\"\n\t\t\t\t\t:name=\"isDragging ? undefined : 'options-list-transition'\"\n\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t<AnswerInput\n\t\t\t\t\t\tv-for=\"(answer, index) in choices\"\n\t\t\t\t\t\t:key=\"answer.local ? 'option-local' : answer.id\"\n\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\t:answer=\"answer\"\n\t\t\t\t\t\t:formId=\"formId\"\n\t\t\t\t\t\t:index=\"index\"\n\t\t\t\t\t\t:isUnique=\"isUnique\"\n\t\t\t\t\t\t:maxIndex=\"options.length - 1\"\n\t\t\t\t\t\t:maxOptionLength=\"maxStringLengths.optionText\"\n\t\t\t\t\t\toptionType=\"choice\"\n\t\t\t\t\t\t@createAnswer=\"onCreateAnswer\"\n\t\t\t\t\t\t@update:answer=\"updateAnswer\"\n\t\t\t\t\t\t@delete=\"deleteOption\"\n\t\t\t\t\t\t@focusNext=\"focusNextInput\"\n\t\t\t\t\t\t@moveUp=\"onOptionMoveUp(index, OptionType.Choice)\"\n\t\t\t\t\t\t@moveDown=\"onOptionMoveDown(index, OptionType.Choice)\"\n\t\t\t\t\t\t@tabbedOut=\"checkValidOption\" />\n\t\t\t\t</TransitionGroup>\n\t\t\t</Draggable>\n\t\t\t<li\n\t\t\t\tv-if=\"allowOtherAnswer\"\n\t\t\t\tkey=\"option-add-other\"\n\t\t\t\tclass=\"question__item\">\n\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t:svg=\"pseudoIcon\"\n\t\t\t\t\tinline\n\t\t\t\t\tclass=\"question__item__pseudoInput\" />\n\t\t\t\t<input\n\t\t\t\t\t:placeholder=\"t('forms', 'Other')\"\n\t\t\t\t\tclass=\"question__input\"\n\t\t\t\t\t:disabled=\"!readOnly\"\n\t\t\t\t\t:maxlength=\"maxStringLengths.optionText\"\n\t\t\t\t\tminlength=\"1\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t:readonly=\"!readOnly\" />\n\t\t\t</li>\n\t\t</template>\n\n\t\t<!-- Add multiple options modal -->\n\t\t<OptionInputDialog\n\t\t\tv-model:open=\"isOptionDialogShown\"\n\t\t\t@multipleAnswers=\"handleMultipleOptions\" />\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport IconCheckboxBlankOutline from '@material-symbols/svg-400/outlined/check_box_outline_blank.svg?raw'\nimport IconContentPaste from '@material-symbols/svg-400/outlined/content_paste.svg?raw'\nimport IconRadioboxBlank from '@material-symbols/svg-400/outlined/radio_button_unchecked.svg?raw'\nimport { showError } from '@nextcloud/dialogs'\nimport { translatePlural as n, translate as t } from '@nextcloud/l10n'\nimport { VueDraggable as Draggable } from 'vue-draggable-plus'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/components/NcActionInput'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcInputField from '@nextcloud/vue/components/NcInputField'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport OptionInputDialog from '../OptionInputDialog.vue'\nimport AnswerInput from './AnswerInput.vue'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\nimport QuestionMultipleMixin from '../../mixins/QuestionMultipleMixin.ts'\nimport {\n\tOptionType,\n\tQUESTION_EXTRASETTINGS_OTHER_PREFIX,\n} from '../../models/Constants.ts'\n\nexport default {\n\tname: 'QuestionMultiple',\n\n\tcomponents: {\n\t\tAnswerInput,\n\t\tDraggable,\n\t\tNcIconSvgWrapper,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tNcLoadingIcon,\n\t\tOptionInputDialog,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin, QuestionMultipleMixin],\n\temits: ['update:values', 'update:isRequired'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconCheckboxBlankOutline,\n\t\t\tIconContentPaste,\n\t\t\tIconRadioboxBlank,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * This is used to cache the \"other\" answer, meaning if the user:\n\t\t\t * checks \"other\" types text, unchecks \"other\" and then re-check \"other\" the typed text is preserved\n\t\t\t */\n\t\t\tcachedOtherAnswerText: '',\n\t\t\tQUESTION_EXTRASETTINGS_OTHER_PREFIX,\n\n\t\t\tisDragging: false,\n\t\t\tisOptionDialogShown: false,\n\t\t\tisLoading: false,\n\n\t\t\tOptionType,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisUnique() {\n\t\t\treturn this.answerType.unique === true\n\t\t},\n\n\t\tshiftDragHandle() {\n\t\t\treturn !this.readOnly && this.options.length !== 0 && !this.isLastEmpty\n\t\t},\n\n\t\tpseudoIcon() {\n\t\t\treturn this.isUnique ? IconRadioboxBlank : IconCheckboxBlankOutline\n\t\t},\n\n\t\tplaceholderOtherAnswer() {\n\t\t\tif (this.readOnly) {\n\t\t\t\treturn this.answerType.submitPlaceholder\n\t\t\t}\n\t\t\treturn this.answerType.createPlaceholder\n\t\t},\n\n\t\tquestionValues() {\n\t\t\treturn this.isUnique ? this.values?.[0] : this.values\n\t\t},\n\n\t\tallowOtherAnswer() {\n\t\t\treturn this.extraSettings?.allowOtherAnswer ?? false\n\t\t},\n\n\t\t/**\n\t\t * The full \"other\" answer including prefix, undefined if no \"other answer\"\n\t\t */\n\t\totherAnswer() {\n\t\t\treturn this.values.find((v) =>\n\t\t\t\tv.startsWith(QUESTION_EXTRASETTINGS_OTHER_PREFIX),\n\t\t\t)\n\t\t},\n\n\t\tchoices: {\n\t\t\tget() {\n\t\t\t\treturn this.sortOptionsOfType(this.options, OptionType.Choice)\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.updateOptionsOrder(value, OptionType.Choice)\n\t\t\t},\n\t\t},\n\n\t\tavailableOptions() {\n\t\t\treturn (\n\t\t\t\tthis.choices.filter(({ text }) => text.trim() !== '').length\n\t\t\t\t+ (this.allowOtherAnswer ? 1 : 0)\n\t\t\t)\n\t\t},\n\n\t\tinfoMessage() {\n\t\t\tconst min = this.extraSettings?.optionsLimitMin ?? 0\n\t\t\tconst max = this.extraSettings?.optionsLimitMax ?? 0\n\n\t\t\tif (!min && !max) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tif (min && max) {\n\t\t\t\tif (min === max) {\n\t\t\t\t\treturn n(\n\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t'Choose exactly one option',\n\t\t\t\t\t\t'Choose exactly %n options',\n\t\t\t\t\t\tmin,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\treturn t('forms', 'Choose between {min} and {max} options', {\n\t\t\t\t\tmin,\n\t\t\t\t\tmax,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (min) {\n\t\t\t\treturn n(\n\t\t\t\t\t'forms',\n\t\t\t\t\t'Choose at least one option',\n\t\t\t\t\t'Choose at least %n options',\n\t\t\t\t\tmin,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn n(\n\t\t\t\t'forms',\n\t\t\t\t'Choose at most one option',\n\t\t\t\t'Choose at most %n options',\n\t\t\t\tmax,\n\t\t\t)\n\t\t},\n\t},\n\n\twatch: {\n\t\t// Ensure that the \"other\" answer is reset after toggling the checkbox\n\t\totherAnswer() {\n\t\t\tthis.resetOtherAnswerText()\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Ensure the initial \"other\" answer is set\n\t\tthis.resetOtherAnswerText()\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tif (this.isRequired && this.areNoneChecked) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif (!this.isUnique) {\n\t\t\t\t// Validate limits\n\t\t\t\tconst max = this.extraSettings.optionsLimitMax ?? 0\n\t\t\t\tconst min = this.extraSettings.optionsLimitMin ?? 0\n\t\t\t\tif (max && this.values.length > max) {\n\t\t\t\t\tthis.errorMessage = n(\n\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t'You must choose at most one option',\n\t\t\t\t\t\t'You must choose at most %n options',\n\t\t\t\t\t\tmax,\n\t\t\t\t\t)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (min && this.values.length < min) {\n\t\t\t\t\tthis.errorMessage = n(\n\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t'You must choose at least one option',\n\t\t\t\t\t\t'You must choose at least %n options',\n\t\t\t\t\t\tmin,\n\t\t\t\t\t)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\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\t/**\n\t\t * Resets the local \"other\" answer text to the one from the options if available\n\t\t */\n\t\tresetOtherAnswerText() {\n\t\t\tif (this.otherAnswer) {\n\t\t\t\t// make sure to use cached value if empty value is passed\n\t\t\t\tthis.cachedOtherAnswerText =\n\t\t\t\t\tthis.otherAnswer.slice(\n\t\t\t\t\t\tQUESTION_EXTRASETTINGS_OTHER_PREFIX.length,\n\t\t\t\t\t) || this.cachedOtherAnswerText\n\t\t\t}\n\t\t},\n\n\t\tonChange(value) {\n\t\t\tthis.$emit('update:values', this.isUnique ? [value].flat() : value)\n\t\t},\n\n\t\t/**\n\t\t * Handle toggling the \"other\"-answer checkbox / radio switch\n\t\t *\n\t\t * @param {string|string[]} value The new value of the answer(s)\n\t\t */\n\t\tonChangeOther(value) {\n\t\t\tvalue = [value].flat()\n\t\t\tconst pureValue = value.filter(\n\t\t\t\t(v) => !v.startsWith(QUESTION_EXTRASETTINGS_OTHER_PREFIX),\n\t\t\t)\n\n\t\t\tif (value.length > pureValue.length) {\n\t\t\t\t// make sure to add the cached text on re-enable\n\t\t\t\tthis.onChange([\n\t\t\t\t\t...pureValue,\n\t\t\t\t\t`${QUESTION_EXTRASETTINGS_OTHER_PREFIX}${this.cachedOtherAnswerText}`,\n\t\t\t\t])\n\t\t\t} else {\n\t\t\t\tthis.onChange(value)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Updating the maximum number\n\t\t *\n\t\t * @param {number|null} max Maximum options\n\t\t */\n\t\tonLimitOptionsMax(max) {\n\t\t\tmax = max && Number.parseInt(max.toString(), 10)\n\t\t\tif (this.isUnique || max === null) {\n\t\t\t\t// For unique (radio) options we cannot set limits, also if null is passed then we need to remove the limit\n\t\t\t\tthis.onExtraSettingsChange({ optionsLimitMax: undefined })\n\t\t\t} else if (max) {\n\t\t\t\tif (max > this.availableOptions) {\n\t\t\t\t\tshowError(\n\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t\t'Upper options limit must not exceed the number of available options',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\tthis.onExtraSettingsChange({\n\t\t\t\t\t\toptionsLimitMax: this.availableOptions || undefined,\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif ((this.extraSettings.optionsLimitMin ?? 0) > max) {\n\t\t\t\t\tshowError(\n\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t\t'Upper options limit must be greater than the lower limit',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// If a valid number was passed, update the backend\n\t\t\t\tthis.onExtraSettingsChange({ optionsLimitMax: max })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update the minimum of checked options\n\t\t *\n\t\t * @param {number|null} min Minimum of checked options\n\t\t */\n\t\tonLimitOptionsMin(min) {\n\t\t\tmin = min && Number.parseInt(min.toString(), 10)\n\t\t\tif (this.isUnique || min === null) {\n\t\t\t\tthis.onExtraSettingsChange({ optionsLimitMin: undefined })\n\t\t\t} else if (min) {\n\t\t\t\tif (min > this.availableOptions - 1) {\n\t\t\t\t\tshowError(\n\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t\t'Lower options limit must be smaller than the number of available options',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\tthis.onExtraSettingsChange({\n\t\t\t\t\t\toptionsLimitMin: this.availableOptions - 1 || undefined,\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tthis.extraSettings.optionsLimitMax\n\t\t\t\t\t&& min > this.extraSettings.optionsLimitMax\n\t\t\t\t) {\n\t\t\t\t\tshowError(\n\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t\t'Lower options limit must be smaller than the upper limit',\n\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.onExtraSettingsChange({ optionsLimitMin: min })\n\t\t\t\tif (min > 0) {\n\t\t\t\t\tthis.$emit('update:isRequired', true)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Is the provided answer required ?\n\t\t * This is needed for checkboxes as html5\n\t\t * doesn't allow to require at least ONE checked.\n\t\t * So we require the one that are checked or all\n\t\t * if none are checked yet.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcheckRequired() {\n\t\t\t// false, if question not required\n\t\t\tif (!this.isRequired) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// true for Radiobuttons\n\t\t\tif (this.isUnique) {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\t// For checkboxes, only required if no other is checked\n\t\t\treturn this.areNoneChecked\n\t\t},\n\n\t\t/**\n\t\t * Update status extra setting allowOtherAnswer and save on DB\n\t\t *\n\t\t * @param {boolean} allowOtherAnswer show/hide field for other answer\n\t\t */\n\t\tonAllowOtherAnswerChange(allowOtherAnswer) {\n\t\t\treturn this.onExtraSettingsChange({ allowOtherAnswer })\n\t\t},\n\n\t\t/**\n\t\t * Handles the change event for the \"Other\" answer text input.\n\t\t *\n\t\t * @param {string} value - The new value entered for the \"Other\" answer.\n\t\t *\n\t\t * This method performs the following actions:\n\t\t * 1. Updates the cached value of the \"Other\" answer text (`cachedOtherAnswerText`).\n\t\t * 2. Prefixes the input value with a predefined constant (`QUESTION_EXTRASETTINGS_OTHER_PREFIX`).\n\t\t * 3. Emits an `update:values` event with the updated list of values:\n\t\t *    - If `isUnique` is true, the emitted values will only include the prefixed \"Other\" answer.\n\t\t *    - If `isUnique` is false, the emitted values will include all existing values\n\t\t *      (excluding any that start with the \"Other\" prefix) and the new prefixed \"Other\" answer.\n\t\t */\n\t\tonOtherAnswerTextChange(value) {\n\t\t\tthis.cachedOtherAnswerText = value\n\t\t\t// Prefix the value\n\t\t\tconst prefixedValue = `${QUESTION_EXTRASETTINGS_OTHER_PREFIX}${value}`\n\t\t\t// emit the values and add the \"other\" answer\n\t\t\tthis.$emit(\n\t\t\t\t'update:values',\n\t\t\t\tthis.isUnique\n\t\t\t\t\t? [prefixedValue]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t...this.values.filter(\n\t\t\t\t\t\t\t\t(v) =>\n\t\t\t\t\t\t\t\t\t!v.startsWith(\n\t\t\t\t\t\t\t\t\t\tQUESTION_EXTRASETTINGS_OTHER_PREFIX,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tprefixedValue,\n\t\t\t\t\t\t],\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__content {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline);\n}\n\n.question__item {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tmin-height: var(--default-clickable-area);\n\n\t&__pseudoInput {\n\t\tcolor: var(--color-primary-element);\n\t\tmargin-inline-start: 2px;\n\t\tz-index: 1;\n\t}\n\n\t.question__input {\n\t\twidth: calc(100% - var(--default-clickable-area));\n\t\tposition: relative;\n\t\tinset-inline-start: -34px;\n\t\tinset-block-start: 1px;\n\t\tmargin-inline-end: 10px !important;\n\t\tpadding-inline-start: 36px !important;\n\t}\n\n\t.question__label {\n\t\tflex: 1 1 100%;\n\t\t// Overwrite guest page core styles\n\t\ttext-align: start !important;\n\t\t// Some rounding issues lead to this strange number, so label and answerInput show up a the same position, working on different browsers.\n\t\tpadding-block: 6.5px 0;\n\t\tpadding-inline: 30px 0;\n\t\tline-height: 22px;\n\t\tmin-height: 34px;\n\t\theight: min-content;\n\t\tposition: relative;\n\n\t\t&::before {\n\t\t\tbox-sizing: border-box;\n\t\t\t// Adjust position manually for proper position to text\n\t\t\tposition: absolute;\n\t\t\tinset-block-start: 10px;\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-inline: -30px 14px !important;\n\t\t\tmargin-block-end: 0;\n\t\t}\n\t}\n}\n\n.question__other-answer {\n\tdisplay: flex;\n\tgap: 4px 16px;\n\tflex-wrap: wrap;\n\n\t.question__label {\n\t\tflex-basis: content;\n\t}\n\n\t.question__input {\n\t\tflex: 1;\n\t\tmin-width: 260px;\n\t}\n\n\t.input-field__input {\n\t\tmin-height: var(--default-clickable-area);\n\t}\n}\n\n.question__other-answer:deep() .input-field__input {\n\tmin-height: var(--default-clickable-area);\n}\n\n.options-list-transition-move,\n.options-list-transition-enter-active,\n.options-list-transition-leave-active {\n\ttransition: all var(--animation-slow) ease;\n}\n\n.options-list-transition-enter-from,\n.options-list-transition-leave-to {\n\topacity: 0;\n\ttransform: translateX(var(--default-clickable-area));\n}\n\n/* ensure leaving items are taken out of layout flow so that moving\n   animations can be calculated correctly. */\n.options-list-transition-leave-active {\n\tposition: absolute;\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M197-199q-54-58-85.5-130.5T80-481q0-80 30.5-152.5T197-763l43 42q-48 48-74 110t-26 130q0 67 27 128t73 111l-43 43Zm147.5-65.5Q330-279 330-300t14.5-35.5Q359-350 380-350t35.5 14.5Q430-321 430-300t-14.5 35.5Q401-250 380-250t-35.5-14.5ZM529-450v-79l-67 40-30-52 67-39-67-39 30-52 67 40v-79h60v79l67-40 30 52-67 39 67 39-30 52-67-40v79h-60Zm234 251-43-43q47-48 73.5-109.5T820-481q0-68-26.5-129.5T720-721l43-42q54 58 85.5 130.5T880-481q0 80-30.5 152.5T763-199Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M220-360v-192h-60v-48h108v240h-48Zm132 0v-110q0-15 9.5-24.5T386-504h98v-48H352v-48h146q15 0 24.5 9.5T532-566v76q0 15-9.5 24.5T498-456h-98v48h132v48H352Zm248 0v-48h132v-48h-92v-48h92v-48H600v-48h146q15 0 24.5 9.5T780-566v172q0 15-9.5 24.5T746-360H600Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M795-120q-116 0-236.5-56T335-335Q232-438 176-558.5T120-795q0-19.29 12.86-32.14Q145.71-840 165-840h140q14 0 24 10t14 25l26.93 125.64Q372-665 369.5-653.5t-10.73 19.73L259-533q26 44 55 82t64 72q37 38 78 69.5t86 55.5l95-98q10-11 23.15-15 13.15-4 25.85-2l119 26q15 4 25 16.04 10 12.05 10 26.96v135q0 19.29-12.86 32.14Q814.29-120 795-120ZM229-588l81-82-23-110H180q2 42 13.5 88.5T229-588Zm369 363q41 19 89 31t93 14v-107l-103-21-79 83ZM229-588Zm369 363Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M160-390v-60h389v60H160Zm0-120v-60h640v60H160Z\\\"/></svg>\"","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport IconNumeric from '@material-symbols/svg-400/outlined/123.svg?raw'\nimport IconPhone from '@material-symbols/svg-400/outlined/call.svg?raw'\nimport IconEMail from '@material-symbols/svg-400/outlined/mail.svg?raw'\nimport IconRegex from '@material-symbols/svg-400/outlined/regular_expression.svg?raw'\nimport IconTextShort from '@material-symbols/svg-400/outlined/short_text.svg?raw'\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * @callback ValidationFunction\n * @param {string} input User input text\n * @param {?Record<any>} options Optional setting for validation, like regex pattern.\n * @return {boolean} True if the input is valid, false otherwise\n */\n/**\n * @typedef {object} ValidationType\n * @property {string} label The validation-type label, that users will see.\n * @property {string} inputType The HTML <input> type used.\n * @property {string} errorMessage The error message shown if the validation fails.\n * @property {string|undefined} createPlaceholder *optional* A typed placeholder that is visible in edit-mode, to indicate a submission form-input field\n * @property {string|undefined} submitPlaceholder *optional* A typed placeholder that is visible in submit-mode, to indicate a form input-field\n * @property {import('vue').Component} icon The icon users will see on the input field.\n * @property {ValidationFunction} validate Function for validating user input to match the selected input type.\n */\n\n// !! Keep in SYNC with lib/Constants.php for supported types of input validation !!\nexport default {\n\t/**\n\t * Default, not validated, text input\n\t *\n\t * @type {ValidationType}\n\t */\n\ttext: {\n\t\ticon: IconTextShort,\n\t\tinputType: 'text',\n\t\tlabel: t('forms', 'Text'),\n\t\tvalidate: () => true,\n\t\terrorMessage: '',\n\t},\n\n\t/**\n\t * Phone number validation\n\t *\n\t * @type {ValidationType}\n\t */\n\tphone: {\n\t\ticon: IconPhone,\n\t\tinputType: 'tel',\n\t\tlabel: t('forms', 'Phone number'),\n\t\t// Remove common separator symbols, like space or braces, and validate rest are pure numbers\n\t\tvalidate: (input) =>\n\t\t\t/^\\+?[0-9]{3,}$/.test(input.replace(/[\\s()-/x.]/gi, '')),\n\t\terrorMessage: t('forms', 'The input is not a valid phone number'),\n\t\tcreatePlaceholder: t('forms', 'People can enter a telephone number'),\n\t\tsubmitPlaceholder: t('forms', 'Enter a telephone number'),\n\t},\n\n\t/**\n\t * Email address validation\n\t *\n\t * @type {ValidationType}\n\t */\n\temail: {\n\t\ticon: IconEMail,\n\t\tinputType: 'email',\n\t\tlabel: t('forms', 'Email address'),\n\t\t// Simplified email regex as a real one would be too complex, so we validate on backend\n\t\tvalidate: (input) => /^[^@]+@[^@]+\\.[^.]{2,}$/.test(input),\n\t\terrorMessage: t('forms', 'The input is not a valid email address'),\n\t\tcreatePlaceholder: t('forms', 'People can enter an email address'),\n\t\tsubmitPlaceholder: t('forms', 'Enter an email address'),\n\t},\n\n\t/**\n\t * Numeric input validation\n\t *\n\t * @type {ValidationType}\n\t */\n\tnumber: {\n\t\ticon: IconNumeric,\n\t\tinputType: 'number',\n\t\tlabel: t('forms', 'Number'),\n\t\tvalidate: (input) => !isNaN(input) || !isNaN(parseFloat(input)),\n\t\terrorMessage: t('forms', 'The input is not a valid number'),\n\t\tcreatePlaceholder: t('forms', 'People can enter a number'),\n\t\tsubmitPlaceholder: t('forms', 'Enter a number'),\n\t},\n\n\t/**\n\t * Custom regular expression validation\n\t *\n\t * @type {ValidationType}\n\t */\n\tregex: {\n\t\ticon: IconRegex,\n\t\tinputType: 'text',\n\t\tlabel: t('forms', 'Custom regular expression'),\n\t\tvalidate: (input, { pattern, modifiers }) =>\n\t\t\tnew RegExp(pattern, modifiers).test(input),\n\t\terrorMessage: t('forms', 'The input does not match the required pattern'),\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Validate a regex, ensures enclosed with delimiters and only supported modifiers by PHP *and* JS\n */\nconst REGEX_WITH_DELIMITERS = /^\\/(.+)\\/([smi]{0,3})$/\n/**\n * Find unescaped slashes within a string\n */\nconst REGEX_UNESCAPED_SLASH = /(?:^|[^\\\\])(?:\\\\\\\\)*\\//\n\n/**\n * Check if a regex is valid and enclosed with delimiters\n *\n * @param {string} input regular expression\n * @return {boolean}\n */\nexport function validateExpression(input) {\n\t// empty regex passes\n\tif (input.length === 0) {\n\t\treturn true\n\t}\n\n\t// Validate regex has delimters\n\tif (!REGEX_WITH_DELIMITERS.test(input)) {\n\t\treturn false\n\t}\n\n\t// Check pattern is escaped\n\tconst { pattern, modifiers } = splitRegex(input)\n\tif (REGEX_UNESCAPED_SLASH.test(pattern)) {\n\t\treturn false\n\t}\n\n\t// Check if regular expression can be compiled\n\ttry {\n\t\t;(() => new RegExp(pattern, modifiers))()\n\t\treturn true\n\t} catch {\n\t\treturn false\n\t}\n}\n\n/**\n * Split an enclosed regular expression into pattern and modifiers\n *\n * @param {string} regex regular expression with delimiters\n * @return {{pattern: string, modifiers: string}} pattern and modifiers\n */\nexport function splitRegex(regex) {\n\tconst [, pattern, modifiers] = regex.match(REGEX_WITH_DELIMITERS) || ['', '', '']\n\treturn { pattern, modifiers }\n}\n","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<div class=\"question__content\">\n\t\t\t<input\n\t\t\t\tref=\"input\"\n\t\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t\t:aria-describedby=\"description ? descriptionId : undefined\"\n\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t:placeholder=\"submissionInputPlaceholder\"\n\t\t\t\t:disabled=\"!readOnly\"\n\t\t\t\t:name=\"name || undefined\"\n\t\t\t\t:required=\"isRequired\"\n\t\t\t\t:value=\"values[0]\"\n\t\t\t\tclass=\"question__input\"\n\t\t\t\tdir=\"auto\"\n\t\t\t\t:maxlength=\"maxStringLengths.answerText\"\n\t\t\t\tminlength=\"1\"\n\t\t\t\t:type=\"validationObject.inputType\"\n\t\t\t\t:step=\"validationObject.inputType === 'number' ? 'any' : undefined\"\n\t\t\t\t@invalid.prevent=\"validate\"\n\t\t\t\t@input=\"onInput\"\n\t\t\t\t@keydown.enter.exact.prevent=\"onKeydownEnter\" />\n\t\t\t<NcActions\n\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\t:id=\"validationTypeMenuId\"\n\t\t\t\tv-model:open=\"isValidationTypeMenuOpen\"\n\t\t\t\t:aria-label=\"\n\t\t\t\t\tt('forms', 'Input types (currently: {type})', {\n\t\t\t\t\t\ttype: validationObject.label,\n\t\t\t\t\t})\n\t\t\t\t\"\n\t\t\t\t:container=\"`#${validationTypeMenuId}`\"\n\t\t\t\tclass=\"validation-type-menu__toggle\"\n\t\t\t\tvariant=\"tertiary-no-background\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"validationObject.icon\" />\n\t\t\t\t</template>\n\t\t\t\t<NcActionRadio\n\t\t\t\t\tv-for=\"(\n\t\t\t\t\t\tvalidationTypeObject, validationTypeName\n\t\t\t\t\t) in validationTypes\"\n\t\t\t\t\t:key=\"validationTypeName\"\n\t\t\t\t\t:modelValue=\"validationType\"\n\t\t\t\t\t:name=\"`${id}_validationMenu`\"\n\t\t\t\t\t:value=\"validationTypeName\"\n\t\t\t\t\t@update:modelValue=\"onChangeValidationType(validationTypeName)\">\n\t\t\t\t\t{{ validationTypeObject.label }}\n\t\t\t\t</NcActionRadio>\n\t\t\t\t<NcActionInput\n\t\t\t\t\tv-if=\"validationType === 'regex'\"\n\t\t\t\t\tref=\"regexInput\"\n\t\t\t\t\t:label=\"t('forms', 'Regular expression for input validation')\"\n\t\t\t\t\t:modelValue=\"validationRegex\"\n\t\t\t\t\t@input=\"onInputRegex\"\n\t\t\t\t\t@submit=\"onSubmitRegex\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconRegex\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t/^[a-z]{3}$/i\n\t\t\t\t\t<!-- ^ Some example RegExp for the placeholder text -->\n\t\t\t\t</NcActionInput>\n\t\t\t</NcActions>\n\t\t</div>\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport IconRegex from '@material-symbols/svg-400/outlined/regular_expression.svg?raw'\nimport debounce from 'debounce'\nimport NcActionInput from '@nextcloud/vue/components/NcActionInput'\nimport NcActionRadio from '@nextcloud/vue/components/NcActionRadio'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\nimport { INPUT_DEBOUNCE_MS } from '../../models/Constants.ts'\nimport validationTypes from '../../models/ValidationTypes.js'\nimport { splitRegex, validateExpression } from '../../utils/RegularExpression.js'\n\nexport default {\n\tname: 'QuestionShort',\n\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tNcActions,\n\t\tNcActionInput,\n\t\tNcActionRadio,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin],\n\temits: ['update:values'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconRegex,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tvalidationTypes,\n\t\t\tisValidationTypeMenuOpen: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tsubmissionInputPlaceholder() {\n\t\t\tif (!this.readOnly) {\n\t\t\t\treturn (\n\t\t\t\t\tthis.validationObject.createPlaceholder\n\t\t\t\t\t|| this.answerType.createPlaceholder\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn (\n\t\t\t\tthis.validationObject.submitPlaceholder\n\t\t\t\t|| this.answerType.submitPlaceholder\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Current user input validation type\n\t\t */\n\t\tvalidationObject() {\n\t\t\treturn validationTypes[this.validationType]\n\t\t},\n\n\t\t/**\n\t\t * Name of the current validation type, fallsback to 'text'\n\t\t */\n\t\tvalidationType() {\n\t\t\treturn this.extraSettings?.validationType || 'text'\n\t\t},\n\n\t\t/**\n\t\t * Id of the validation type menu\n\t\t */\n\t\tvalidationTypeMenuId() {\n\t\t\treturn 'q' + this.index + '__validation_menu'\n\t\t},\n\n\t\t/**\n\t\t * The regular expression\n\t\t */\n\t\tvalidationRegex() {\n\t\t\treturn this.extraSettings?.validationRegex || ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\t/** @type {HTMLInputElement} */\n\t\t\tconst input = this.$refs.input\n\t\t\tconst value = input.value\n\n\t\t\t// Clear the previous custom error before checking native validity.\n\t\t\tinput.setCustomValidity('')\n\n\t\t\tif (this.isRequired && input.validity.valueMissing) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst isCustomValid =\n\t\t\t\t!value\n\t\t\t\t|| this.validationObject.validate(\n\t\t\t\t\tvalue,\n\t\t\t\t\tsplitRegex(this.validationRegex),\n\t\t\t\t)\n\n\t\t\tif (!input.validity.valid || !isCustomValid) {\n\t\t\t\tinput.setCustomValidity(this.validationObject.errorMessage)\n\t\t\t\tthis.errorMessage = this.validationObject.errorMessage\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\n\t\tdebounceValidate: debounce(async function () {\n\t\t\tthis.validate()\n\t\t}, INPUT_DEBOUNCE_MS),\n\n\t\tonInput() {\n\t\t\t/** @type {HTMLInputElement} */\n\t\t\tconst input = this.$refs.input\n\t\t\tconst value = input.value\n\t\t\tthis.$emit('update:values', [value])\n\t\t\tthis.debounceValidate()\n\t\t},\n\n\t\t/**\n\t\t * Change input type\n\t\t *\n\t\t * @param {string} validationType new input type\n\t\t */\n\t\tonChangeValidationType(validationType) {\n\t\t\tif (validationType === 'regex') {\n\t\t\t\t// Make sure to also submit a regex (even if empty)\n\t\t\t\tthis.onExtraSettingsChange({\n\t\t\t\t\tvalidationType,\n\t\t\t\t\tvalidationRegex: this.validationRegex,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\t// For all other types except regex we close the menu (for regex we keep it open to allow entering a regex)\n\t\t\t\tthis.isValidationTypeMenuOpen = false\n\t\t\t\tthis.onExtraSettingsChange({\n\t\t\t\t\tvalidationType:\n\t\t\t\t\t\tvalidationType === 'text' ? undefined : validationType,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Validate and save regex if valid\n\t\t *\n\t\t * Ensures the regex is enclosed with delimters, as required for PCRE,\n\t\t * and regex is only using modifiers supported by JS *and* PHP\n\t\t *\n\t\t * @param {InputEvent|SubmitEvent} event input event\n\t\t * @return {boolean} true if the regex is valid\n\t\t */\n\t\tonInputRegex(event) {\n\t\t\tif (event?.isComposing) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst input = this.$refs.regexInput.$el.querySelector('input')\n\t\t\tconst validationRegex = input.value\n\n\t\t\t// remove potential previous validity\n\t\t\tinput.setCustomValidity('')\n\n\t\t\tif (!validateExpression(validationRegex)) {\n\t\t\t\tinput.setCustomValidity(t('forms', 'Invalid regular expression'))\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.onExtraSettingsChange({ validationRegex })\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Same as `onInputRegex` but for convinience also closes the menu\n\t\t *\n\t\t * @param {SubmitEvent} event regex submit event\n\t\t */\n\t\tonSubmitRegex(event) {\n\t\t\tif (this.onInputRegex(event)) {\n\t\t\t\tthis.isValidationTypeMenuOpen = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__input {\n\twidth: 100%;\n\tmin-height: var(--default-clickable-area);\n\n\t&:disabled {\n\t\twidth: calc(100% - var(--default-clickable-area)) !important;\n\t\tmargin-inline-start: -12px;\n\t}\n}\n\n.validation-type-menu__toggle {\n\tposition: relative;\n\tinset-inline-end: calc(4px + var(--default-clickable-area));\n\tinset-block-start: 4px;\n}\n\n:deep(input:invalid) {\n\t// nextcloud/server#36548\n\tborder-color: var(--color-error) !important;\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M600.5-379.5Q650-429 650-500t-49.5-120.5Q551-670 480-670t-120.5 49.5Q310-571 310-500t49.5 120.5Q409-330 480-330t120.5-49.5Zm-200-41Q368-453 368-500t32.5-79.5Q433-612 480-612t79.5 32.5Q592-547 592-500t-32.5 79.5Q527-388 480-388t-79.5-32.5ZM216-283Q98-366 40-500q58-134 176-217t264-83q146 0 264 83t176 217q-58 134-176 217t-264 83q-146 0-264-83Zm264-217Zm222.5 174.5Q804-391 857-500q-53-109-154.5-174.5T480-740q-121 0-222.5 65.5T102-500q54 109 155.5 174.5T480-260q121 0 222.5-65.5Z\\\"/></svg>\"","<!--\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 class=\"pill-menu\">\n\t\t<NcRadioGroup\n\t\t\t:label=\"groupLabel\"\n\t\t\t:modelValue=\"active.id\"\n\t\t\thideLabel\n\t\t\t@update:modelValue=\"onUpdateActive\">\n\t\t\t<NcRadioGroupButton\n\t\t\t\tv-for=\"option of options\"\n\t\t\t\t:key=\"option.id\"\n\t\t\t\t:value=\"option.id\"\n\t\t\t\t:aria-label=\"isMobile && option.icon ? option.ariaLabel : undefined\"\n\t\t\t\t:label=\"!isMobile || !option.icon ? option.title : undefined\"\n\t\t\t\t:disabled=\"disabled || option.disabled\">\n\t\t\t\t<template v-if=\"option.icon\" #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"option.icon\" />\n\t\t\t\t</template>\n\t\t\t</NcRadioGroupButton>\n\t\t</NcRadioGroup>\n\t</div>\n</template>\n\n<script>\nimport { useIsSmallMobile } from '@nextcloud/vue'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcRadioGroup from '@nextcloud/vue/components/NcRadioGroup'\nimport NcRadioGroupButton from '@nextcloud/vue/components/NcRadioGroupButton'\n\nexport default {\n\tname: 'PillMenu',\n\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tNcRadioGroup,\n\t\tNcRadioGroupButton,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The active option\n\t\t */\n\t\tactive: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * If the PillMenu is disabled\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Accessible label for the radio group\n\t\t */\n\t\tgroupLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * List of available options\n\t\t * `option: {id: string, title: string, ariaLabel: string, icon?: string}`\n\t\t */\n\t\toptions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\temits: ['update:active'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tisMobile: useIsSmallMobile(),\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Emit the full selected option to keep PillMenu API stable\n\t\t *\n\t\t * @param {string} optionId The selected option id\n\t\t */\n\t\tonUpdateActive(optionId) {\n\t\t\tconst option = this.options.find((entry) => entry.id === optionId)\n\t\t\tif (option) this.$emit('update:active', option)\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div\n\t\t:aria-label=\"t('forms', 'View mode')\"\n\t\tclass=\"top-bar\"\n\t\t:class=\"{\n\t\t\t'top-bar--has-sidebar': sidebarOpened,\n\t\t}\"\n\t\trole=\"toolbar\">\n\t\t<PillMenu\n\t\t\tv-if=\"!canOnlySubmit && currentView\"\n\t\t\t:active=\"currentView\"\n\t\t\t:options=\"availableViews\"\n\t\t\t:groupLabel=\"t('forms', 'View mode')\"\n\t\t\t@update:active=\"onChangeView\" />\n\t\t<NcButton\n\t\t\tv-if=\"canShare && !sidebarOpened\"\n\t\t\t:aria-label=\"isMobile ? t('forms', 'Share form') : null\"\n\t\t\tvariant=\"tertiary\"\n\t\t\t@click=\"onShareForm\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :svg=\"IconShareVariant\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"!isMobile\" #default>\n\t\t\t\t{{ t('forms', 'Share') }}\n\t\t\t</template>\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport IconBarChart from '@material-symbols/svg-400/outlined/bar_chart.svg?raw'\nimport IconEdit from '@material-symbols/svg-400/outlined/edit.svg?raw'\nimport IconShareVariant from '@material-symbols/svg-400/outlined/share.svg?raw'\nimport IconVisibility from '@material-symbols/svg-400/outlined/visibility.svg?raw'\nimport { t } from '@nextcloud/l10n'\nimport { useIsMobile } from '@nextcloud/vue'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport PillMenu from './PillMenu.vue'\nimport PermissionTypes from '../mixins/PermissionTypes.js'\nimport logger from '../utils/Logger.js'\n\nconst submitView = {\n\tariaLabel: t('forms', 'View form'),\n\ticon: IconVisibility,\n\ttitle: t('forms', 'View'),\n\tid: 'submit',\n}\nconst editView = {\n\tariaLabel: t('forms', 'Edit form'),\n\ticon: IconEdit,\n\ttitle: t('forms', 'Edit'),\n\tid: 'edit',\n\tdisabled: false,\n}\nconst resultsView = {\n\tariaLabel: t('forms', 'Show responses'),\n\ticon: IconBarChart,\n\ttitle: t('forms', 'Responses'),\n\tid: 'results',\n}\n\nexport default {\n\tname: 'TopBar',\n\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tNcButton,\n\t\tPillMenu,\n\t},\n\n\tmixins: [PermissionTypes],\n\n\tprops: {\n\t\tarchived: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\tlocked: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\n\t\tsidebarOpened: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\tpermissions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\tsubmissionCount: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\n\temits: ['shareForm'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tt,\n\n\t\t\tisMobile: useIsMobile(),\n\t\t\tIconShareVariant,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentView() {\n\t\t\treturn this.availableViews.filter((v) => v.id === this.$route.name)[0]\n\t\t},\n\n\t\tavailableViews() {\n\t\t\tconst views = []\n\t\t\tif (this.canSubmit) {\n\t\t\t\tviews.push(submitView)\n\t\t\t}\n\t\t\tif (this.canEdit) {\n\t\t\t\tviews.push({\n\t\t\t\t\t...editView,\n\t\t\t\t\tdisabled: this.locked,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.canSeeResults) {\n\t\t\t\tviews.push(resultsView)\n\t\t\t}\n\t\t\treturn views\n\t\t},\n\n\t\tcanSubmit() {\n\t\t\treturn this.permissions.includes(this.PERMISSION_TYPES.PERMISSION_SUBMIT)\n\t\t},\n\n\t\tcanEdit() {\n\t\t\treturn (\n\t\t\t\tthis.permissions.includes(this.PERMISSION_TYPES.PERMISSION_EDIT)\n\t\t\t\t&& !this.archived\n\t\t\t)\n\t\t},\n\n\t\tcanSeeResults() {\n\t\t\treturn (\n\t\t\t\tthis.permissions.includes(this.PERMISSION_TYPES.PERMISSION_RESULTS)\n\t\t\t\t|| this.submissionCount > 0\n\t\t\t)\n\t\t},\n\n\t\tcanShare() {\n\t\t\t// This probably can get a permission of itself\n\t\t\treturn this.canEdit\n\t\t},\n\n\t\tcanOnlySubmit() {\n\t\t\treturn (\n\t\t\t\tthis.permissions.length === 1\n\t\t\t\t&& this.permissions.includes(this.PERMISSION_TYPES.PERMISSION_SUBMIT)\n\t\t\t\t&& this.submissionCount === 0\n\t\t\t)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Router methods\n\t\t *\n\t\t * @param {object} option The selected pill menu option\n\t\t */\n\t\tasync onChangeView(option) {\n\t\t\tif (this.$route.name === option.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: option.id,\n\t\t\t\t\tparams: {\n\t\t\t\t\t\thash: this.$route.params.hash,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tlogger.debug('Navigation cancelled', { error })\n\t\t\t}\n\t\t},\n\n\t\tonShareForm() {\n\t\t\tthis.$emit('shareForm')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.top-bar {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: flex-end;\n\t// allow to wrap on small screens\n\tflex-wrap: wrap;\n\tjustify-content: flex-end;\n\n\t// align with navigation and sidebar toggle, but ensure it is not overlayed\n\tpadding: var(--app-navigation-padding);\n\tmargin-inline: var(--default-clickable-area);\n\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 100;\n\n\t&--has-sidebar {\n\t\t// Remove margin as the toggle button does not exist when open\n\t\tmargin-inline-end: 0;\n\t}\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"m480-366 146-147H333l147 147Zm0 286q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-83 31.5-156t86-127Q252-817 325-848.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82-31.5 155T763-197.5q-54 54.5-127 86T480-80Zm0-60q142 0 241-99.5T820-480q0-142-99-241t-241-99q-141 0-240.5 99T140-480q0 141 99.5 240.5T480-140Zm0-340Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M180-80q-24 0-42-18t-18-42v-620q0-24 18-42t42-18h65v-60h65v60h340v-60h65v60h65q24 0 42 18t18 42v620q0 24-18 42t-42 18H180Zm0-60h600v-430H180v430Zm0-490h600v-130H180v130Zm0 0v-130 130Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"m419-321 289-289-43-43-246 246-119-119-43 43 162 162ZM180-120q-24 0-42-18t-18-42v-600q0-24 18-42t42-18h600q24 0 42 18t18 42v600q0 24-18 42t-42 18H180Zm0-60h600v-600H180v600Zm0-600v600-600Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M220-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h361l219 219v521q0 24-18 42t-42 18H220Zm331-554v-186H220v680h520v-494H551ZM220-820v186-186 680-680Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M120-510v-330h330v330H120Zm0 390v-330h330v330H120Zm390-390v-330h330v330H510Zm0 390v-330h330v330H510ZM180-570h210v-210H180v210Zm390 0h210v-210H570v210Zm0 390h210v-210H570v210Zm-390 0h210v-210H180v210Zm390-390Zm0 180Zm-180 0Zm0-180Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M680-280q-74 0-129-47t-69-123H276q-10 29-36.5 49.5T179-380q-41 0-70.5-29.5T79-480q0-41 29.5-70.5T179-580q34 0 60.5 20.5T276-510h206q14-76 69-123t129-47q83 0 141.5 58.5T880-480q0 83-58.5 141.5T680-280Zm99.5-100.5Q820-421 820-480t-40.5-99.5Q739-620 680-620t-99.5 40.5Q540-539 540-480t40.5 99.5Q621-340 680-340t99.5-40.5Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M480-80q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-85 32-158t87.5-127q55.5-54 130-84.5T489-880q79 0 150 26.5T763.5-780q53.5 47 85 111.5T880-527q0 108-63 170.5T650-294h-75q-18 0-31 14t-13 31q0 27 14.5 46t14.5 44q0 38-21 58.5T480-80Zm0-400Zm-198 11q15-15 15-35t-15-35q-15-15-35-15t-35 15q-15 15-15 35t15 35q15 15 35 15t35-15Zm126-170q15-15 15-35t-15-35q-15-15-35-15t-35 15q-15 15-15 35t15 35q15 15 35 15t35-15Zm214 0q15-15 15-35t-15-35q-15-15-35-15t-35 15q-15 15-15 35t15 35q15 15 35 15t35-15Zm131 170q15-15 15-35t-15-35q-15-15-35-15t-35 15q-15 15-15 35t15 35q15 15 35 15t35-15ZM480-140q11 0 15.5-4.5T500-159q0-14-14.5-26T471-238q0-46 30-81t76-35h73q76 0 123-44.5T820-527q0-132-100-212.5T489-820q-146 0-247.5 98.5T140-480q0 141 99.5 240.5T480-140Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M612-348q54-54 54-132t-54-132q-54-54-132-54t-132 54q-54 54-54 132t54 132q54 54 132 54t132-54ZM480-80q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-83 31.5-156t86-127Q252-817 325-848.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82-31.5 155T763-197.5q-54 54.5-127 86T480-80Zm0-60q142 0 241-99.5T820-480q0-142-99-241t-241-99q-141 0-240.5 99T140-480q0 141 99.5 240.5T480-140Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"m627-287 45-45-159-160v-201h-60v225l174 181ZM480-80q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-82 31.5-155t86-127.5Q252-817 325-848.5T480-880q82 0 155 31.5t127.5 86Q817-708 848.5-635T880-480q0 82-31.5 155t-86 127.5Q708-143 635-111.5T480-80Zm0-400Zm0 340q140 0 240-100t100-240q0-140-100-240T480-820q-140 0-240 100T140-480q0 140 100 240t240 100Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M160-200v-60h386v60H160Zm0-167v-60h640v60H160Zm0-166v-60h640v60H160Zm0-167v-60h640v60H160Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M323-450v-316L202-645l-42-42 193-193 193 193-42 42-121-121v316h-60ZM607-80 414-273l42-42 121 121v-316h60v316l121-121 42 42L607-80Z\\\"/></svg>\"","<!--\n  - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<div\n\t\t\tclass=\"question__content\"\n\t\t\trole=\"group\"\n\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t:aria-describedby=\"description ? descriptionId : undefined\">\n\t\t\t<NcColorPicker\n\t\t\t\t:modelValue=\"pickedColor\"\n\t\t\t\tadvancedFields\n\t\t\t\t:aria-required=\"isRequired\"\n\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t@update:modelValue=\"onUpdatePickedColor\">\n\t\t\t\t<NcButton :disabled=\"!readOnly\">\n\t\t\t\t\t{{ colorPickerPlaceholder }}\n\t\t\t\t</NcButton>\n\t\t\t</NcColorPicker>\n\t\t\t<div :style=\"{ 'background-color': pickedColor }\" class=\"color__field\">\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"pickedColor !== '' && !isRequired\"\n\t\t\t\t\tclass=\"color__field__button\"\n\t\t\t\t\t:aria-label=\"t('forms', 'Clear selected color')\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t@click=\"onUpdatePickedColor('')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconClose\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport IconClose from '@material-symbols/svg-400/outlined/close.svg?raw'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcColorPicker from '@nextcloud/vue/components/NcColorPicker'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\n\nexport default {\n\tname: 'QuestionColor',\n\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tNcButton,\n\t\tNcColorPicker,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin],\n\temits: ['update:values'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconClose,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tisLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcolorPickerPlaceholder() {\n\t\t\treturn this.readOnly\n\t\t\t\t? this.answerType.submitPlaceholder\n\t\t\t\t: this.answerType.createPlaceholder\n\t\t},\n\n\t\tpickedColor() {\n\t\t\treturn this.values[0] ?? ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tif (this.isRequired && this.pickedColor === '') {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\n\t\tonUpdatePickedColor(color) {\n\t\t\tthis.$emit('update:values', [color])\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__content {\n\tdisplay: flex;\n\tgap: var(--clickable-area-small);\n}\n\n.color__field {\n\twidth: 100px;\n\theight: var(--default-clickable-area);\n\tborder-radius: var(--border-radius-element);\n\n\t&__button {\n\t\tposition: relative;\n\t\tmargin-inline-start: calc(100% - var(--default-clickable-area));\n\t}\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" height=\\\"20px\\\" viewBox=\\\"0 -960 960 960\\\" width=\\\"20px\\\" fill=\\\"#222222\\\"><path d=\\\"M480.28-96Q401-96 331-126t-122.5-82.5Q156-261 126-330.96t-30-149.5Q96-560 126-629.5q30-69.5 82.5-122T330.96-834q69.96-30 149.5-30t149.04 30q69.5 30 122 82.5T834-629.28q30 69.73 30 149Q864-401 834-331t-82.5 122.5Q699-156 629.28-126q-69.73 30-149 30Zm-.28-72q130 0 221-91t91-221.46H480V-792q-130 0-221 91t-91 221q0 130 91 221t221 91Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" height=\\\"20px\\\" viewBox=\\\"0 -960 960 960\\\" width=\\\"20px\\\" fill=\\\"#222222\\\"><path d=\\\"M480.28-96Q401-96 331-126t-122.5-82.5Q156-261 126-330.96t-30-149.5Q96-560 126-629.5q30-69.5 82.5-122T330.96-834q69.96-30 149.5-30t149.04 30q69.5 30 122 82.5T834-629.28q30 69.73 30 149Q864-401 834-331t-82.5 122.5Q699-156 629.28-126q-69.73 30-149 30ZM168-480h312v-312q-130 0-221 91t-91 221Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" height=\\\"20px\\\" viewBox=\\\"0 -960 960 960\\\" width=\\\"20px\\\" fill=\\\"#5f6368\\\"><path d=\\\"M576.23-240Q536-240 508-267.77q-28-27.78-28-68Q480-376 507.77-404q27.78-28 68-28Q616-432 644-404.23q28 27.78 28 68Q672-296 644.23-268q-27.78 28-68 28ZM216-96q-29.7 0-50.85-21.5Q144-139 144-168v-528q0-29 21.15-50.5T216-768h72v-96h72v96h240v-96h72v96h72q29.7 0 50.85 21.5Q816-725 816-696v528q0 29-21.15 50.5T744-96H216Zm0-72h528v-360H216v360Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" height=\\\"20px\\\" viewBox=\\\"0 -960 960 960\\\" width=\\\"20px\\\" fill=\\\"#5f6368\\\"><path d=\\\"M384.23-264Q344-264 316-291.77q-28-27.78-28-68Q288-400 315.77-428q27.78-28 68-28Q424-456 452-428.23q28 27.78 28 68Q480-320 452.23-292q-27.78 28-68 28ZM216-96q-29.7 0-50.85-21.5Q144-139 144-168v-528q0-29 21.15-50.5T216-768h72v-96h72v96h240v-96h72v96h72q29.7 0 50.85 21.5Q816-725 816-696v528q0 29-21.15 50.5T744-96H216Zm0-72h528v-360H216v360Z\\\"/></svg>\"","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<template v-if=\"answerType.pickerType === 'date'\" #actions>\n\t\t\t<NcActionCheckbox\n\t\t\t\t:modelValue=\"dateRange\"\n\t\t\t\t@update:modelValue=\"onDateRangeChange\">\n\t\t\t\t{{ t('forms', 'Use date range') }}\n\t\t\t</NcActionCheckbox>\n\t\t\t<NcActionInput\n\t\t\t\ttype=\"date\"\n\t\t\t\tisNativePicker\n\t\t\t\t:modelValue=\"dateMin\"\n\t\t\t\t:label=\"t('forms', 'Earliest date')\"\n\t\t\t\thideLabel\n\t\t\t\t:formatter=\"extraSettingsFormatter\"\n\t\t\t\t:max=\"dateMax\"\n\t\t\t\t@update:modelValue=\"onDateMinChange\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t:svg=\"svgTodayIcon\"\n\t\t\t\t\t\t:name=\"t('forms', 'Earliest date')\" />\n\t\t\t\t</template>\n\t\t\t</NcActionInput>\n\t\t\t<NcActionInput\n\t\t\t\ttype=\"date\"\n\t\t\t\tisNativePicker\n\t\t\t\t:modelValue=\"dateMax\"\n\t\t\t\t:label=\"t('forms', 'Latest date')\"\n\t\t\t\thideLabel\n\t\t\t\t:formatter=\"extraSettingsFormatter\"\n\t\t\t\t:min=\"dateMin\"\n\t\t\t\t@update:modelValue=\"onDateMaxChange\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t:svg=\"svgEventIcon\"\n\t\t\t\t\t\t:name=\"t('forms', 'Latest date')\" />\n\t\t\t\t</template>\n\t\t\t</NcActionInput>\n\t\t</template>\n\t\t<template v-else-if=\"answerType.pickerType === 'time'\" #actions>\n\t\t\t<NcActionCheckbox\n\t\t\t\t:modelValue=\"timeRange\"\n\t\t\t\t@update:modelValue=\"onTimeRangeChange\">\n\t\t\t\t{{ t('forms', 'Use time range') }}\n\t\t\t</NcActionCheckbox>\n\t\t\t<NcActionInput\n\t\t\t\ttype=\"time\"\n\t\t\t\tisNativePicker\n\t\t\t\t:modelValue=\"timeMin\"\n\t\t\t\t:label=\"t('forms', 'Earliest time')\"\n\t\t\t\thideLabel\n\t\t\t\t:max=\"timeMax\"\n\t\t\t\t@update:modelValue=\"onTimeMinChange\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t:svg=\"svgClockLoader20\"\n\t\t\t\t\t\t:name=\"t('forms', 'Earliest time')\" />\n\t\t\t\t</template>\n\t\t\t</NcActionInput>\n\t\t\t<NcActionInput\n\t\t\t\ttype=\"time\"\n\t\t\t\tisNativePicker\n\t\t\t\t:modelValue=\"timeMax\"\n\t\t\t\t:label=\"t('forms', 'Latest time')\"\n\t\t\t\thideLabel\n\t\t\t\t:min=\"timeMin\"\n\t\t\t\t@update:modelValue=\"onTimeMaxChange\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t:svg=\"svgClockLoader80\"\n\t\t\t\t\t\t:name=\"t('forms', 'Latest time')\" />\n\t\t\t\t</template>\n\t\t\t</NcActionInput>\n\t\t</template>\n\t\t<div\n\t\t\tclass=\"question__content\"\n\t\t\trole=\"group\"\n\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t:aria-describedby=\"description ? descriptionId : undefined\">\n\t\t\t<NcDateTimePicker\n\t\t\t\t:modelValue=\"time\"\n\t\t\t\t:disabled=\"!readOnly\"\n\t\t\t\t:format=\"stringify\"\n\t\t\t\t:placeholder=\"datetimePickerPlaceholder\"\n\t\t\t\t:showSecond=\"false\"\n\t\t\t\t:type=\"dateTimePickerType\"\n\t\t\t\t:disabledDate=\"disabledDates\"\n\t\t\t\t:disabledTime=\"disabledTimes\"\n\t\t\t\t:aria-required=\"isRequired\"\n\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\tclearable\n\t\t\t\t@update:modelValue=\"onValueChange\" />\n\t\t</div>\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/components/NcActionInput'\nimport NcDateTimePicker from '@nextcloud/vue/components/NcDateTimePicker'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport Question from './Question.vue'\nimport svgClockLoader20 from '../../../img/clock_loader_20.svg?raw'\nimport svgClockLoader80 from '../../../img/clock_loader_80.svg?raw'\nimport svgEventIcon from '../../../img/event.svg?raw'\nimport svgTodayIcon from '../../../img/today.svg?raw'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\n\nexport default {\n\tname: 'QuestionDate',\n\n\tcomponents: {\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcDateTimePicker,\n\t\tNcIconSvgWrapper,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin],\n\temits: ['update:values'],\n\n\tdata() {\n\t\treturn {\n\t\t\textraSettingsFormatter: {\n\t\t\t\tstringify: this.stringifyDate,\n\t\t\t\tparse: this.parseTimestampToDate,\n\t\t\t},\n\n\t\t\tsvgClockLoader80,\n\t\t\tsvgClockLoader20,\n\t\t\tsvgEventIcon,\n\t\t\tsvgTodayIcon,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisRangeQuestion() {\n\t\t\treturn this.extraSettings?.dateRange || this.extraSettings?.timeRange\n\t\t\t\t? true\n\t\t\t\t: false\n\t\t},\n\n\t\tdatetimePickerPlaceholder() {\n\t\t\tif (this.readOnly) {\n\t\t\t\treturn this.isRangeQuestion\n\t\t\t\t\t? this.answerType.submitPlaceholderRange\n\t\t\t\t\t: this.answerType.submitPlaceholder\n\t\t\t}\n\t\t\treturn this.isRangeQuestion\n\t\t\t\t? this.answerType.createPlaceholderRange\n\t\t\t\t: this.answerType.createPlaceholder\n\t\t},\n\n\t\tdateTimePickerType() {\n\t\t\treturn this.isRangeQuestion\n\t\t\t\t? this.answerType.pickerType + '-range'\n\t\t\t\t: this.answerType.pickerType\n\t\t},\n\n\t\ttime() {\n\t\t\tif (this.isRangeQuestion) {\n\t\t\t\treturn this.values?.[0]\n\t\t\t\t\t? [this.parse(this.values[0]), this.parse(this.values[1])]\n\t\t\t\t\t: null\n\t\t\t}\n\t\t\treturn this.values?.[0] ? this.parse(this.values[0]) : null\n\t\t},\n\n\t\t/**\n\t\t * The maximum allowable date for the date input field\n\t\t */\n\t\tdateMax() {\n\t\t\treturn this.extraSettings?.dateMax\n\t\t\t\t? moment(this.extraSettings.dateMax, 'X').toDate()\n\t\t\t\t: null\n\t\t},\n\n\t\t/**\n\t\t * The minimum allowable date for the date input field\n\t\t */\n\t\tdateMin() {\n\t\t\treturn this.extraSettings?.dateMin\n\t\t\t\t? moment(this.extraSettings.dateMin, 'X').toDate()\n\t\t\t\t: null\n\t\t},\n\n\t\tdateRange() {\n\t\t\treturn this.extraSettings?.dateRange ?? false\n\t\t},\n\n\t\t/**\n\t\t * The maximum allowable time for the time input field\n\t\t */\n\t\ttimeMax() {\n\t\t\treturn this.extraSettings?.timeMax\n\t\t\t\t? moment(\n\t\t\t\t\t\tthis.extraSettings.timeMax,\n\t\t\t\t\t\tthis.answerType.storageFormat,\n\t\t\t\t\t).toDate()\n\t\t\t\t: new Date(new Date().setHours(24, 0, 0, 0))\n\t\t},\n\n\t\t/**\n\t\t * The minimum allowable time for the time input field\n\t\t */\n\t\ttimeMin() {\n\t\t\treturn this.extraSettings?.timeMin\n\t\t\t\t? moment(\n\t\t\t\t\t\tthis.extraSettings.timeMin,\n\t\t\t\t\t\tthis.answerType.storageFormat,\n\t\t\t\t\t).toDate()\n\t\t\t\t: new Date(new Date().setHours(0, 0, 0, 0))\n\t\t},\n\n\t\ttimeRange() {\n\t\t\treturn this.extraSettings?.timeRange ?? false\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tif (this.isRequired && this.time === null) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * DateTimepicker show text in picker\n\t\t * Format depends on component-type date/datetime\n\t\t *\n\t\t * @param {Date|Date[]} date the selected datepicker Date\n\t\t * @return {string}\n\t\t */\n\t\tstringify(date) {\n\t\t\tif (this.isRangeQuestion && Array.isArray(date)) {\n\t\t\t\treturn `${moment(date[0]).format(this.answerType.momentFormat)} - ${moment(date[1]).format(this.answerType.momentFormat)}`\n\t\t\t}\n\t\t\treturn moment(date).format(this.answerType.momentFormat)\n\t\t},\n\n\t\t/**\n\t\t * Reinterpret a stored date\n\t\t *\n\t\t * @param {string} dateString Stringified date\n\t\t * @return {Date}\n\t\t */\n\t\tparse(dateString) {\n\t\t\treturn moment(dateString, [\n\t\t\t\tthis.answerType.momentFormat,\n\t\t\t\tthis.answerType.storageFormat,\n\t\t\t]).toDate()\n\t\t},\n\n\t\t/**\n\t\t * Handles the change event for the maximum date input.\n\t\t * Updates the maximum allowable date based on the provided value.\n\t\t *\n\t\t * @param {string | Date} value - The new maximum date value. Can be a string or a Date object.\n\t\t */\n\t\tonDateMaxChange(value) {\n\t\t\tthis.onExtraSettingsChange({\n\t\t\t\tdateMax: parseInt(moment(value).format('X')),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Handles the change event for the minimum date input.\n\t\t * Updates the minimum allowable date based on the provided value.\n\t\t *\n\t\t * @param {string | Date} value - The new minimum date value. Can be a string or a Date object.\n\t\t */\n\t\tonDateMinChange(value) {\n\t\t\tthis.onExtraSettingsChange({\n\t\t\t\tdateMin: parseInt(moment(value).format('X')),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Handles the change event for the date range selection.\n\t\t * Updates the extra settings with the new date range value.\n\t\t *\n\t\t * @param {boolean} value - The new value of the date range selection.\n\t\t *                          If true, the date range is enabled; otherwise, null.\n\t\t */\n\t\tonDateRangeChange(value) {\n\t\t\tthis.onExtraSettingsChange({ dateRange: value === true ? true : null })\n\t\t},\n\n\t\t/**\n\t\t * Handles the change event for the maximum time input.\n\t\t * Updates the maximum allowable date based on the provided value.\n\t\t *\n\t\t * @param {string | Date} value - The new maximum date value. Can be a string or a Date object.\n\t\t */\n\t\tonTimeMaxChange(value) {\n\t\t\tthis.onExtraSettingsChange({\n\t\t\t\ttimeMax:\n\t\t\t\t\tvalue === null\n\t\t\t\t\t|| (value\n\t\t\t\t\t\t&& value.getTime\n\t\t\t\t\t\t&& value.getTime()\n\t\t\t\t\t\t\t=== new Date(new Date().setHours(24, 0, 0, 0)).getTime())\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: moment(value).format(this.answerType.storageFormat),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Handles the change event for the minimum date input.\n\t\t * Updates the minimum allowable date based on the provided value.\n\t\t *\n\t\t * @param {string | Date} value - The new minimum date value. Can be a string or a Date object.\n\t\t */\n\t\tonTimeMinChange(value) {\n\t\t\tthis.onExtraSettingsChange({\n\t\t\t\ttimeMin:\n\t\t\t\t\tvalue === null\n\t\t\t\t\t|| (value\n\t\t\t\t\t\t&& value.getTime\n\t\t\t\t\t\t&& value.getTime()\n\t\t\t\t\t\t\t=== new Date(new Date().setHours(0, 0, 0, 0)).getTime())\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: moment(value).format(this.answerType.storageFormat),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Handles the change event for the date range selection.\n\t\t * Updates the extra settings with the new date range value.\n\t\t *\n\t\t * @param {boolean} value - The new value of the date range selection.\n\t\t *                          If true, the date range is enabled; otherwise, null.\n\t\t */\n\t\tonTimeRangeChange(value) {\n\t\t\tthis.onExtraSettingsChange({ timeRange: value === true ? true : null })\n\t\t},\n\n\t\t/**\n\t\t * Store Value\n\t\t *\n\t\t * @param {Date|Array<Date>|null} date The date or date range to store\n\t\t */\n\t\tonValueChange(date) {\n\t\t\tif (!date) {\n\t\t\t\tthis.$emit('update:values', [])\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.isRangeQuestion) {\n\t\t\t\tthis.$emit('update:values', [\n\t\t\t\t\tmoment(date[0]).format(this.answerType.storageFormat),\n\t\t\t\t\tmoment(date[1]).format(this.answerType.storageFormat),\n\t\t\t\t])\n\t\t\t} else {\n\t\t\t\tthis.$emit('update:values', [\n\t\t\t\t\tmoment(date).format(this.answerType.storageFormat),\n\t\t\t\t])\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Determines if a given date should be disabled.\n\t\t *\n\t\t * @param {Date} date - The date to check.\n\t\t * @return {boolean} - Returns true if the date should be disabled, otherwise false.\n\t\t */\n\t\tdisabledDates(date) {\n\t\t\treturn (\n\t\t\t\t(this.dateMin && date < this.dateMin)\n\t\t\t\t|| (this.dateMax && date > this.dateMax)\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Determines if a given time should be disabled.\n\t\t *\n\t\t * @param {Date} time - The time to check.\n\t\t * @return {boolean} - Returns true if the time should be disabled, otherwise false.\n\t\t */\n\t\tdisabledTimes(time) {\n\t\t\treturn (\n\t\t\t\t(this.timeMin && time < this.timeMin)\n\t\t\t\t|| (this.timeMax && time > this.timeMax)\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Datepicker timestamp to string\n\t\t *\n\t\t * @param {Date} datetime the datepicker Date\n\t\t * @return {string}\n\t\t */\n\t\tstringifyDate(datetime) {\n\t\t\treturn moment(datetime).format('L')\n\t\t},\n\n\t\t/**\n\t\t * Form expires timestamp to Date of the datepicker\n\t\t *\n\t\t * @param {number} value the expires timestamp\n\t\t * @return {Date}\n\t\t */\n\t\tparseTimestampToDate(value) {\n\t\t\treturn moment(value, 'X').toDate()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.mx-datepicker {\n\twidth: 100%;\n\tmax-width: 300px;\n\n\t&.disabled {\n\t\tinset-inline-start: -12px;\n\t}\n\n\t:deep(.mx-input) {\n\t\theight: var(--default-clickable-area) !important;\n\t}\n}\n</style>\n","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:contentValid=\"contentValid\"\n\t\t:shiftDragHandle=\"shiftDragHandle\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<template #actions>\n\t\t\t<NcActionCheckbox\n\t\t\t\t:modelValue=\"extraSettings?.shuffleOptions\"\n\t\t\t\t@update:modelValue=\"onShuffleOptionsChange\">\n\t\t\t\t{{ t('forms', 'Shuffle options') }}\n\t\t\t</NcActionCheckbox>\n\t\t\t<NcActionButton closeAfterClick @click=\"isOptionDialogShown = true\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconContentPaste\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('forms', 'Add multiple options') }}\n\t\t\t</NcActionButton>\n\t\t</template>\n\t\t<div\n\t\t\tv-if=\"readOnly\"\n\t\t\tclass=\"question__content\"\n\t\t\trole=\"group\"\n\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t:aria-describedby=\"description ? descriptionId : undefined\">\n\t\t\t<NcSelect\n\t\t\t\t:modelValue=\"selectedOption\"\n\t\t\t\t:name=\"name || undefined\"\n\t\t\t\t:placeholder=\"selectOptionPlaceholder\"\n\t\t\t\t:multiple=\"isMultiple\"\n\t\t\t\t:required=\"isRequired\"\n\t\t\t\t:options=\"choices\"\n\t\t\t\t:searchable=\"false\"\n\t\t\t\tlabel=\"text\"\n\t\t\t\t:aria-label-combobox=\"selectOptionPlaceholder\"\n\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t@invalid.prevent=\"validate\"\n\t\t\t\t@update:modelValue=\"onInput\" />\n\t\t</div>\n\t\t<template v-else>\n\t\t\t<div v-if=\"isLoading\">\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</div>\n\t\t\t<Draggable\n\t\t\t\tv-else\n\t\t\t\tv-model=\"choices\"\n\t\t\t\tclass=\"question__content\"\n\t\t\t\t:animation=\"300\"\n\t\t\t\tdirection=\"vertical\"\n\t\t\t\thandle=\".option__drag-handle\"\n\t\t\t\tinvertSwap\n\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t@update=\"dirtyOptionsType = 'choice'\"\n\t\t\t\t@start=\"onDragStart\"\n\t\t\t\t@end=\"onDragEnd\">\n\t\t\t\t<TransitionGroup\n\t\t\t\t\ttag=\"ul\"\n\t\t\t\t\t:name=\"isDragging ? undefined : 'options-list-transition'\"\n\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t<AnswerInput\n\t\t\t\t\t\tv-for=\"(answer, index) in choices\"\n\t\t\t\t\t\t:key=\"answer.local ? 'option-local' : answer.id\"\n\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\t:answer=\"answer\"\n\t\t\t\t\t\t:formId=\"formId\"\n\t\t\t\t\t\tisDropdown\n\t\t\t\t\t\t:index=\"index\"\n\t\t\t\t\t\t:isUnique=\"!isMultiple\"\n\t\t\t\t\t\t:maxIndex=\"options.length - 1\"\n\t\t\t\t\t\t:maxOptionLength=\"maxStringLengths.optionText\"\n\t\t\t\t\t\toptionType=\"choice\"\n\t\t\t\t\t\t@createAnswer=\"onCreateAnswer\"\n\t\t\t\t\t\t@update:answer=\"updateAnswer\"\n\t\t\t\t\t\t@delete=\"deleteOption\"\n\t\t\t\t\t\t@focusNext=\"focusNextInput\"\n\t\t\t\t\t\t@moveUp=\"onOptionMoveUp(index, OptionType.Choice)\"\n\t\t\t\t\t\t@moveDown=\"onOptionMoveDown(index, OptionType.Choice)\"\n\t\t\t\t\t\t@tabbedOut=\"checkValidOption\" />\n\t\t\t\t</TransitionGroup>\n\t\t\t</Draggable>\n\t\t</template>\n\n\t\t<!-- Add multiple options modal -->\n\t\t<OptionInputDialog\n\t\t\tv-model:open=\"isOptionDialogShown\"\n\t\t\t@multipleAnswers=\"handleMultipleOptions\" />\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport IconContentPaste from '@material-symbols/svg-400/outlined/content_paste.svg?raw'\nimport { VueDraggable as Draggable } from 'vue-draggable-plus'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport NcSelect from '@nextcloud/vue/components/NcSelect'\nimport OptionInputDialog from '../OptionInputDialog.vue'\nimport AnswerInput from './AnswerInput.vue'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\nimport QuestionMultipleMixin from '../../mixins/QuestionMultipleMixin.ts'\nimport { OptionType } from '../../models/Constants.ts'\n\nexport default {\n\tname: 'QuestionDropdown',\n\n\tcomponents: {\n\t\tAnswerInput,\n\t\tDraggable,\n\t\tNcIconSvgWrapper,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcLoadingIcon,\n\t\tNcSelect,\n\t\tOptionInputDialog,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin, QuestionMultipleMixin],\n\temits: ['update:values'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconContentPaste,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tisDragging: false,\n\t\t\tisLoading: false,\n\t\t\tisOptionDialogShown: false,\n\t\t\tOptionType,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tselectOptionPlaceholder() {\n\t\t\tif (this.readOnly) {\n\t\t\t\treturn this.answerType.submitPlaceholder\n\t\t\t}\n\t\t\treturn this.answerType.createPlaceholder\n\t\t},\n\n\t\tisMultiple() {\n\t\t\t// This can be extended if we want to include support for <select multiple>\n\t\t\treturn false\n\t\t},\n\n\t\tshiftDragHandle() {\n\t\t\treturn !this.readOnly && this.options.length !== 0 && !this.isLastEmpty\n\t\t},\n\n\t\tselectedOption() {\n\t\t\tif (!this.values) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst selected = this.values.map((id) =>\n\t\t\t\tthis.options.find((option) => option.id === parseInt(id)),\n\t\t\t)\n\n\t\t\treturn this.isMultiple ? selected : selected[0]\n\t\t},\n\n\t\tchoices: {\n\t\t\tget() {\n\t\t\t\treturn this.sortOptionsOfType(this.options, OptionType.Choice)\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.updateOptionsOrder(value, OptionType.Choice)\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tif (this.isRequired && this.areNoneChecked) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\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\tonInput(option) {\n\t\t\tif (Array.isArray(option)) {\n\t\t\t\tthis.$emit('update:values', [\n\t\t\t\t\t...new Set(option.map((opt) => opt.id)),\n\t\t\t\t])\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Simple select\n\t\t\tthis.$emit('update:values', option ? [option.id] : [])\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__content {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline);\n}\n\n.question__item {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tmin-height: var(--default-clickable-area);\n\n\t.question__input {\n\t\twidth: calc(100% - var(--default-clickable-area));\n\t\tposition: relative;\n\t\tinset-inline-start: -12px;\n\t\tmargin-inline-end: 32px !important;\n\t}\n}\n\n.options-list-transition-move,\n.options-list-transition-enter-active,\n.options-list-transition-leave-active {\n\ttransition: all var(--animation-slow) ease;\n}\n\n.options-list-transition-enter-from,\n.options-list-transition-leave-to {\n\topacity: 0;\n\ttransform: translateX(var(--default-clickable-area));\n}\n\n/* ensure leaving items are taken out of layout flow so that moving\n   animations can be calculated correctly. */\n.options-list-transition-leave-active {\n\tposition: absolute;\n}\n</style>\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M561-240 320-481l241-241 43 43-198 198 198 198-43 43Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M635-150h40v-150h-40v150Zm20-189q8 0 14-6.15t6-14.35q0-8.2-6-14.35T655-380q-9 0-14.5 6t-5.5 14.29q0 8.28 5.5 14.5Q646-339 655-339ZM180-820v295-4 389-680 186-186Zm99 400h166.54Q458-437 473-452t32-28H279v60Zm0 170h123q-2-14-1.5-29.5T403-310H279v60ZM180-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h361l219 219v155q-14-6-29-11t-31-8v-109H511v-186H180v680h259q11 17 23.96 32.09Q475.91-92.82 492-80H180Zm612.5-332.5Q849-356 849-275t-56.5 137.5Q736-81 655-81t-137.5-56.5Q461-194 461-275t56.5-137.5Q574-469 655-469t137.5 56.5Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M450-313v-371L330-564l-43-43 193-193 193 193-43 43-120-120v371h-60ZM220-160q-24 0-42-18t-18-42v-143h60v143h520v-143h60v143q0 24-18 42t-42 18H220Z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"48\\\" height=\\\"48\\\" viewBox=\\\"0 -960 960 960\\\"><path d=\\\"M452-202h60v-201l82 82 42-42-156-152-154 154 42 42 84-84v201ZM220-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h361l219 219v521q0 24-18 42t-42 18H220Zm331-554v-186H220v680h520v-494H551ZM220-820v186-186 680-680Z\\\"/></svg>\"","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n// !! Keep in SYNC with lib/Constants.php for supported file types \\OCA\\Forms\\Constants::EXTRA_SETTINGS_ALLOWED_FILE_TYPES !!\nexport default {\n\timage: {\n\t\tlabel: t('forms', 'Image'),\n\t},\n\t'x-office/document': {\n\t\tlabel: t('forms', 'Document'),\n\t},\n\t'x-office/presentation': {\n\t\tlabel: t('forms', 'Presentation'),\n\t},\n\t'x-office/spreadsheet': {\n\t\tlabel: t('forms', 'Spreadsheet'),\n\t},\n}\n","<!--\n  - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<template #actions>\n\t\t\t<template v-if=\"!allowedFileTypesDialogOpened\">\n\t\t\t\t<NcActionButton isMenu @click=\"allowedFileTypesDialogOpened = true\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconFileDocumentAlert\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ allowedFileTypesLabel }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<NcActionInput\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t:modelValue=\"maxAllowedFilesCount\"\n\t\t\t\t\tlabelOutside\n\t\t\t\t\t:label=\"t('forms', 'Maximum number of files')\"\n\t\t\t\t\t:showTrailingButton=\"false\"\n\t\t\t\t\t@update:modelValue=\"onMaxAllowedFilesCountInput\" />\n\n\t\t\t\t<NcActionInput\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t:modelValue=\"maxFileSizeValue\"\n\t\t\t\t\tlabelOutside\n\t\t\t\t\t:showTrailingButton=\"false\"\n\t\t\t\t\t:label=\"t('forms', 'Maximum file size')\"\n\t\t\t\t\t@update:modelValue=\"onMaxFileSizeValueInput\" />\n\n\t\t\t\t<NcActionInput\n\t\t\t\t\ttype=\"multiselect\"\n\t\t\t\t\t:modelValue=\"maxFileSizeUnit\"\n\t\t\t\t\t:options=\"availableUnits\"\n\t\t\t\t\trequired\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\t:searchable=\"false\"\n\t\t\t\t\t@update:modelValue=\"onMaxFileSizeUnitInput\" />\n\t\t\t</template>\n\n\t\t\t<template v-else>\n\t\t\t\t<NcActionSeparator />\n\n\t\t\t\t<NcActionButton @click=\"allowedFileTypesDialogOpened = false\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconChevronLeft\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('forms', 'Allow only specific file types') }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<NcActionCheckbox\n\t\t\t\t\tv-for=\"({ label: fileTypeLabel }, fileType) in fileTypes\"\n\t\t\t\t\t:key=\"fileType\"\n\t\t\t\t\t:modelValue=\"extraSettings?.allowedFileTypes?.includes(fileType)\"\n\t\t\t\t\t:value=\"fileType\"\n\t\t\t\t\tclass=\"file-type-checkbox\"\n\t\t\t\t\t@update:modelValue=\"onAllowedFileTypesChange(fileType, $event)\">\n\t\t\t\t\t{{ fileTypeLabel }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<NcActionInput\n\t\t\t\t\tkey=\"allowed-file-extensions-multiselect\"\n\t\t\t\t\t:label=\"t('forms', 'Custom file extensions')\"\n\t\t\t\t\ttype=\"multiselect\"\n\t\t\t\t\tmultiple\n\t\t\t\t\ttaggable\n\t\t\t\t\t:modelValue=\"allowedFileExtensions\"\n\t\t\t\t\t@option:created=\"onAllowedFileExtensionsAdded\"\n\t\t\t\t\t@option:deselected=\"onAllowedFileExtensionsDeleted\" />\n\n\t\t\t\t<NcActionSeparator />\n\t\t\t</template>\n\t\t</template>\n\n\t\t<div class=\"question__content\">\n\t\t\t<ul>\n\t\t\t\t<NcListItem\n\t\t\t\t\tv-for=\"uploadedFile of values\"\n\t\t\t\t\t:key=\"uploadedFile.uploadedFileId\"\n\t\t\t\t\t:name=\"uploadedFile.fileName\"\n\t\t\t\t\tcompact>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconFile\" />\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<template #actions>\n\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t@click=\"\n\t\t\t\t\t\t\t\tonDeleteUploadedFile(uploadedFile.uploadedFileId)\n\t\t\t\t\t\t\t\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconDelete\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('forms', 'Delete') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t</NcListItem>\n\t\t\t\t<li v-if=\"fileLoading\" class=\"question__loading\">\n\t\t\t\t\t<NcLoadingIcon v-show=\"fileLoading\" />\n\t\t\t\t\t{{ t('forms', 'Uploading …') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-else-if=\"values.length < maxAllowedFilesCount\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"question__input-wrapper\"\n\t\t\t\t\t\trole=\"group\"\n\t\t\t\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t\t\t\t:aria-describedby=\"description ? descriptionId : undefined\"\n\t\t\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\">\n\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t{{ t('forms', 'Add new file as answer') }}\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tref=\"fileInput\"\n\t\t\t\t\t\t\t\tclass=\"hidden-visually\"\n\t\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\t\t:required=\"isRequired && values.length === 0\"\n\t\t\t\t\t\t\t\t:disabled=\"!readOnly\"\n\t\t\t\t\t\t\t\t:multiple=\"maxAllowedFilesCount > 1\"\n\t\t\t\t\t\t\t\t:name=\"name || undefined\"\n\t\t\t\t\t\t\t\t:accept=\"accept.length ? accept.join(',') : null\"\n\t\t\t\t\t\t\t\t@invalid.prevent=\"validate\"\n\t\t\t\t\t\t\t\t@input=\"onFileInput\" />\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\t!readOnly || values.length >= maxAllowedFilesCount\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t\t\t\t\t@click=\"toggleFileInput\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t\t\t\tv-if=\"maxAllowedFilesCount > 1\"\n\t\t\t\t\t\t\t\t\t:svg=\"IconUploadMultiple\" />\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper v-else :svg=\"IconUpload\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport IconChevronLeft from '@material-symbols/svg-400/outlined/chevron_left.svg?raw'\nimport IconDelete from '@material-symbols/svg-400/outlined/delete.svg?raw'\nimport IconFile from '@material-symbols/svg-400/outlined/draft.svg?raw'\nimport IconFileDocumentAlert from '@material-symbols/svg-400/outlined/quick_reference.svg?raw'\nimport IconUpload from '@material-symbols/svg-400/outlined/upload.svg?raw'\nimport IconUploadMultiple from '@material-symbols/svg-400/outlined/upload_file.svg?raw'\nimport axios from '@nextcloud/axios'\nimport { showError } from '@nextcloud/dialogs'\nimport { formatFileSize } from '@nextcloud/files'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/components/NcActionInput'\nimport NcActionSeparator from '@nextcloud/vue/components/NcActionSeparator'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcListItem from '@nextcloud/vue/components/NcListItem'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\nimport fileTypes from '../../models/FileTypes.js'\nimport logger from '../../utils/Logger.js'\nimport OcsResponse2Data from '../../utils/OcsResponse2Data.js'\n\n/**\n * A constant object representing file size units in bytes.\n *\n * @example\n * ```typescript\n * const kilobytes = FILE_SIZE_UNITS.kb; // 1024\n * const megabytes = FILE_SIZE_UNITS.mb; // 1048576\n * const gigabytes = FILE_SIZE_UNITS.gb; // 1073741824\n * ```\n */\nconst FILE_SIZE_UNITS = {\n\tkb: 1024,\n\tmb: 1024 ** 2,\n\tgb: 1024 ** 3,\n}\n\nexport default {\n\tname: 'QuestionFile',\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcActionSeparator,\n\t\tNcButton,\n\t\tNcListItem,\n\t\tNcLoadingIcon,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin],\n\temits: ['update:values'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconChevronLeft,\n\t\t\tIconDelete,\n\t\t\tIconFile,\n\t\t\tIconFileDocumentAlert,\n\t\t\tIconUpload,\n\t\t\tIconUploadMultiple,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfileTypes,\n\t\t\tfileLoading: false,\n\t\t\tmaxFileSizeUnit: Object.keys(FILE_SIZE_UNITS)[0],\n\t\t\tmaxFileSizeValue: '',\n\t\t\tallowedFileTypesDialogOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tavailableUnits() {\n\t\t\treturn Object.keys(FILE_SIZE_UNITS)\n\t\t},\n\n\t\tmaxAllowedFilesCount() {\n\t\t\treturn this.extraSettings?.maxAllowedFilesCount || 1\n\t\t},\n\n\t\tallowedFileExtensions() {\n\t\t\treturn this.extraSettings?.allowedFileExtensions || []\n\t\t},\n\n\t\tallowedFileTypesLabel() {\n\t\t\tconst allowedFileTypes = []\n\t\t\tif (this.extraSettings?.allowedFileTypes?.length) {\n\t\t\t\tallowedFileTypes.push(\n\t\t\t\t\t...this.extraSettings.allowedFileTypes.map(\n\t\t\t\t\t\t(type) => fileTypes[type].label,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (this.extraSettings?.allowedFileExtensions?.length) {\n\t\t\t\tallowedFileTypes.push(...this.extraSettings.allowedFileExtensions)\n\t\t\t}\n\n\t\t\tif (allowedFileTypes.length) {\n\t\t\t\treturn t('forms', 'Allowed file types: {fileTypes}.', {\n\t\t\t\t\tfileTypes: allowedFileTypes.join(', '),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn t('forms', 'All file types are allowed.')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (this.extraSettings.maxFileSize) {\n\t\t\tObject.keys(FILE_SIZE_UNITS).forEach((unit) => {\n\t\t\t\tif (this.extraSettings.maxFileSize > FILE_SIZE_UNITS[unit]) {\n\t\t\t\t\tthis.maxFileSizeUnit = unit\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.maxFileSizeValue =\n\t\t\t\tthis.extraSettings.maxFileSize\n\t\t\t\t/ FILE_SIZE_UNITS[this.maxFileSizeUnit]\n\t\t}\n\t},\n\n\tmethods: {\n\t\ttoggleFileInput() {\n\t\t\tthis.$refs.fileInput.click()\n\t\t},\n\n\t\tasync onFileInput() {\n\t\t\tconst fileInput = this.$refs.fileInput\n\t\t\tconst formData = new FormData()\n\t\t\tlet fileInvalid = false\n\n\t\t\t;[...fileInput.files].forEach((file) => {\n\t\t\t\tformData.append('files[]', file)\n\n\t\t\t\tif (\n\t\t\t\t\tthis.extraSettings.maxFileSize > 0\n\t\t\t\t\t&& file.size > this.extraSettings.maxFileSize\n\t\t\t\t) {\n\t\t\t\t\tshowError(\n\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t\t'The file {fileName} is too large. The maximum file size is {maxFileSize}.',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfileName: file.name,\n\t\t\t\t\t\t\t\tmaxFileSize: formatFileSize(\n\t\t\t\t\t\t\t\t\tthis.extraSettings.maxFileSize,\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\t\t\t\t\t)\n\n\t\t\t\t\tfileInvalid = true\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (fileInvalid) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tformData.append('shareHash', loadState('forms', 'shareHash', null))\n\n\t\t\tconst url = generateOcsUrl(\n\t\t\t\t'apps/forms/api/v3/forms/{id}/submissions/files/{questionId}',\n\t\t\t\t{\n\t\t\t\t\tid: this.formId,\n\t\t\t\t\tquestionId: this.id,\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tlet response\n\t\t\ttry {\n\t\t\t\tthis.fileLoading = true\n\t\t\t\tresponse = await axios.post(url, formData, {\n\t\t\t\t\theaders: { 'Content-Type': 'multipart/form-data' },\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while submitting the form', { error })\n\t\t\t\tshowError(\n\t\t\t\t\tt(\n\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t'There was an error during submitting the file: {message}.',\n\t\t\t\t\t\t{ message: error.response.data.ocs.meta.message },\n\t\t\t\t\t),\n\t\t\t\t)\n\n\t\t\t\treturn\n\t\t\t} finally {\n\t\t\t\tthis.fileLoading = false\n\t\t\t\tfileInput.value = null\n\t\t\t}\n\n\t\t\tthis.$emit('update:values', [\n\t\t\t\t...this.values,\n\t\t\t\t...OcsResponse2Data(response),\n\t\t\t])\n\t\t},\n\n\t\tonMaxAllowedFilesCountInput(maxAllowedFilesCount) {\n\t\t\treturn this.onExtraSettingsChange({\n\t\t\t\tmaxAllowedFilesCount: parseInt(maxAllowedFilesCount),\n\t\t\t})\n\t\t},\n\n\t\tonMaxFileSizeValueInput(maxFileSizeValue) {\n\t\t\tthis.maxFileSizeValue = maxFileSizeValue\n\t\t\tconst maxFileSize = Math.round(\n\t\t\t\tmaxFileSizeValue * FILE_SIZE_UNITS[this.maxFileSizeUnit],\n\t\t\t)\n\n\t\t\treturn this.onExtraSettingsChange({ maxFileSize })\n\t\t},\n\n\t\tonMaxFileSizeUnitInput(maxFileSizeUnit) {\n\t\t\tthis.maxFileSizeUnit = maxFileSizeUnit\n\t\t\tconst maxFileSize = Math.round(\n\t\t\t\tthis.maxFileSizeValue * FILE_SIZE_UNITS[maxFileSizeUnit],\n\t\t\t)\n\n\t\t\treturn this.onExtraSettingsChange({ maxFileSize })\n\t\t},\n\n\t\tonAllowedFileTypesChange(fileType, allowed) {\n\t\t\tlet allowedFileTypes = this.extraSettings.allowedFileTypes || []\n\n\t\t\tif (allowed) {\n\t\t\t\tallowedFileTypes.push(fileType)\n\t\t\t} else {\n\t\t\t\tallowedFileTypes = allowedFileTypes.filter(\n\t\t\t\t\t(type) => type !== fileType,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn this.onExtraSettingsChange({ allowedFileTypes })\n\t\t},\n\n\t\tonAllowedFileExtensionsAdded(fileExtension) {\n\t\t\tconst allowedFileExtensions =\n\t\t\t\tthis.extraSettings.allowedFileExtensions || []\n\t\t\tallowedFileExtensions.push(fileExtension)\n\n\t\t\treturn this.onExtraSettingsChange({ allowedFileExtensions })\n\t\t},\n\n\t\tonAllowedFileExtensionsDeleted(fileExtension) {\n\t\t\tlet allowedFileExtensions =\n\t\t\t\tthis.extraSettings.allowedFileExtensions || []\n\t\t\tallowedFileExtensions = allowedFileExtensions.filter(\n\t\t\t\t(extension) => extension !== fileExtension,\n\t\t\t)\n\n\t\t\treturn this.onExtraSettingsChange({ allowedFileExtensions })\n\t\t},\n\n\t\tonDeleteUploadedFile(uploadedFileId) {\n\t\t\tconst values = this.values.filter(\n\t\t\t\t(value) => value.uploadedFileId !== uploadedFileId,\n\t\t\t)\n\n\t\t\tthis.$emit('update:values', values)\n\t\t},\n\n\t\tasync validate() {\n\t\t\tif (this.fileLoading) {\n\t\t\t\tthis.errorMessage = t(\n\t\t\t\t\t'forms',\n\t\t\t\t\t'Please wait until the file has been uploaded.',\n\t\t\t\t)\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif (this.isRequired && this.values.length === 0) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.file-type-checkbox {\n\tmargin-left: 30px;\n}\n.question {\n\t&--editable {\n\t\t.question__input-wrapper {\n\t\t\tmargin-inline-start: -13px;\n\t\t}\n\t}\n\n\t&__loading {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\twidth: 300px;\n\t}\n\n\t&__input-wrapper {\n\t\t--focus-offset: calc(\n\t\t\t(var(--border-width-input-focused, 2px) - var(--border-width-input, 2px))\n\t\t);\n\t\tbox-sizing: border-box;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tborder: var(--border-width-input, 2px) solid var(--color-border-dark);\n\t\tborder-radius: var(--border-radius-element, var(--border-radius-large));\n\t\tpadding-inline: calc(3 * var(--default-grid-baseline)) var(--focus-offset);\n\t\tpadding-block: var(--focus-offset);\n\t\theight: var(--default-clickable-area);\n\t\twidth: 100%;\n\t\tmax-width: 300px;\n\n\t\tlabel {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\n\t\t\t&:has(input:disabled) {\n\t\t\t\tcursor: default;\n\t\t\t}\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\tborder-color: var(--color-main-text);\n\t\t\tborder-width: var(--border-width-input-focused, 2px);\n\t\t\tpadding-block: 0;\n\t\t\tpadding-inline: calc(\n\t\t\t\t\t3 * var(--default-grid-baseline) - var(--focus-offset)\n\t\t\t\t)\n\t\t\t\t0;\n\t\t}\n\t}\n}\n</style>\n","<!--\n  - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:contentValid=\"contentValid\"\n\t\t:shiftDragHandle=\"shiftDragHandle\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<template v-if=\"readOnly\">\n\t\t\t<fieldset\n\t\t\t\t:name=\"name || undefined\"\n\t\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t\t:aria-describedby=\"description ? descriptionId : undefined\">\n\t\t\t\t<table class=\"answer-grid\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th class=\"first-column\"></th>\n\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tv-for=\"column in columns\"\n\t\t\t\t\t\t\t\t:key=\"column.local ? 'option-local' : column.id\">\n\t\t\t\t\t\t\t\t{{ column.text }}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t\t\t\t:key=\"row.local ? 'option-local' : row.id\">\n\t\t\t\t\t\t\t<td class=\"first-column\">{{ row.text }}</td>\n\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\tv-for=\"column in columns\"\n\t\t\t\t\t\t\t\t:key=\"column.local ? 'option-local' : column.id\">\n\t\t\t\t\t\t\t\t<template v-if=\"questionType === 'radio'\">\n\t\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\t\t:aria-errormessage=\"\n\t\t\t\t\t\t\t\t\t\t\thasError ? errorId : undefined\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t\t\t\t\t\t\t:modelValue=\"values[row.id]\"\n\t\t\t\t\t\t\t\t\t\t:value=\"column.id.toString()\"\n\t\t\t\t\t\t\t\t\t\t:name=\"`${row.id}-answer`\"\n\t\t\t\t\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t\t\t\t\t@update:modelValue=\"\n\t\t\t\t\t\t\t\t\t\t\tonChangeCheckboxRadio(row.id, $event)\n\t\t\t\t\t\t\t\t\t\t\" />\n\t\t\t\t\t\t\t\t</template>\n\n\t\t\t\t\t\t\t\t<template v-if=\"questionType === 'checkbox'\">\n\t\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\t\t:aria-errormessage=\"\n\t\t\t\t\t\t\t\t\t\t\thasError ? errorId : undefined\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t\t\t\t\t\t\t:modelValue=\"values[row.id] || []\"\n\t\t\t\t\t\t\t\t\t\t:value=\"column.id.toString()\"\n\t\t\t\t\t\t\t\t\t\t:name=\"`${row.id}-answer`\"\n\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t@update:modelValue=\"\n\t\t\t\t\t\t\t\t\t\t\tonChangeCheckboxRadio(row.id, $event)\n\t\t\t\t\t\t\t\t\t\t\" />\n\t\t\t\t\t\t\t\t</template>\n\n\t\t\t\t\t\t\t\t<template v-if=\"questionType === 'number'\">\n\t\t\t\t\t\t\t\t\t<NcInputField\n\t\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\t\t:modelValue=\"plainValues[row.id][column.id]\"\n\t\t\t\t\t\t\t\t\t\t@update:modelValue=\"\n\t\t\t\t\t\t\t\t\t\t\tonChangeTextNumber(\n\t\t\t\t\t\t\t\t\t\t\t\trow.id,\n\t\t\t\t\t\t\t\t\t\t\t\tcolumn.id,\n\t\t\t\t\t\t\t\t\t\t\t\t$event,\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</template>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</fieldset>\n\t\t</template>\n\n\t\t<template v-else>\n\t\t\t<div v-if=\"isLoading\">\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</div>\n\n\t\t\t<template v-else>\n\t\t\t\t<div>{{ t('forms', 'Columns') }}</div>\n\t\t\t\t<Draggable\n\t\t\t\t\tv-model=\"columns\"\n\t\t\t\t\tclass=\"question__content\"\n\t\t\t\t\t:animation=\"300\"\n\t\t\t\t\tdirection=\"vertical\"\n\t\t\t\t\thandle=\".option__drag-handle\"\n\t\t\t\t\tinvertSwap\n\t\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t\t@update=\"dirtyOptionsType = 'column'\"\n\t\t\t\t\t@start=\"onDragStart\"\n\t\t\t\t\t@end=\"onDragEnd\">\n\t\t\t\t\t<!-- Column input edit -->\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 : 'options-list-transition'\"\n\t\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t\t<AnswerInput\n\t\t\t\t\t\t\tv-for=\"(answer, index) in columns\"\n\t\t\t\t\t\t\t:key=\"answer.local ? 'option-local' : answer.id\"\n\t\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\t\t:answer=\"answer\"\n\t\t\t\t\t\t\t:formId=\"formId\"\n\t\t\t\t\t\t\t:index=\"index\"\n\t\t\t\t\t\t\t:isUnique=\"isUnique\"\n\t\t\t\t\t\t\t:maxIndex=\"columns.length - 2\"\n\t\t\t\t\t\t\t:maxOptionLength=\"maxStringLengths.optionText\"\n\t\t\t\t\t\t\toptionType=\"column\"\n\t\t\t\t\t\t\t@createAnswer=\"onCreateAnswer\"\n\t\t\t\t\t\t\t@update:answer=\"updateAnswer\"\n\t\t\t\t\t\t\t@delete=\"deleteOption\"\n\t\t\t\t\t\t\t@focusNext=\"focusNextInput\"\n\t\t\t\t\t\t\t@moveUp=\"onOptionMoveUp(index, 'column')\"\n\t\t\t\t\t\t\t@moveDown=\"onOptionMoveDown(index, 'column')\"\n\t\t\t\t\t\t\t@tabbedOut=\"checkValidOption('column')\" />\n\t\t\t\t\t</TransitionGroup>\n\t\t\t\t</Draggable>\n\n\t\t\t\t<div>{{ t('forms', 'Rows') }}</div>\n\t\t\t\t<Draggable\n\t\t\t\t\tv-model=\"rows\"\n\t\t\t\t\tclass=\"question__content\"\n\t\t\t\t\t:animation=\"300\"\n\t\t\t\t\tdirection=\"vertical\"\n\t\t\t\t\thandle=\".option__drag-handle\"\n\t\t\t\t\tinvertSwap\n\t\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t\t@update=\"dirtyOptionsType = 'row'\"\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 : 'options-list-transition'\"\n\t\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t\t<!-- Row input edit -->\n\t\t\t\t\t\t<AnswerInput\n\t\t\t\t\t\t\tv-for=\"(answer, index) in rows\"\n\t\t\t\t\t\t\t:key=\"answer.local ? 'option-local' : answer.id\"\n\t\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\t\t:answer=\"answer\"\n\t\t\t\t\t\t\t:formId=\"formId\"\n\t\t\t\t\t\t\t:index=\"index\"\n\t\t\t\t\t\t\t:isUnique=\"isUnique\"\n\t\t\t\t\t\t\t:maxIndex=\"rows.length - 2\"\n\t\t\t\t\t\t\t:maxOptionLength=\"maxStringLengths.optionText\"\n\t\t\t\t\t\t\toptionType=\"row\"\n\t\t\t\t\t\t\t@createAnswer=\"onCreateAnswer\"\n\t\t\t\t\t\t\t@update:answer=\"updateAnswer\"\n\t\t\t\t\t\t\t@delete=\"deleteOption\"\n\t\t\t\t\t\t\t@focusNext=\"focusNextInput\"\n\t\t\t\t\t\t\t@moveUp=\"onOptionMoveUp(index, 'row')\"\n\t\t\t\t\t\t\t@moveDown=\"onOptionMoveDown(index, 'row')\"\n\t\t\t\t\t\t\t@tabbedOut=\"checkValidOption('row')\" />\n\t\t\t\t\t</TransitionGroup>\n\t\t\t\t</Draggable>\n\t\t\t</template>\n\t\t</template>\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport { translatePlural as n, translate as t } from '@nextcloud/l10n'\nimport { VueDraggable as Draggable } from 'vue-draggable-plus'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport NcInputField from '@nextcloud/vue/components/NcInputField'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport AnswerInput from './AnswerInput.vue'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\nimport QuestionMultipleMixin from '../../mixins/QuestionMultipleMixin.ts'\nimport { GridCellType, OptionType } from '../../models/Constants.ts'\n\nexport default {\n\tname: 'QuestionGrid',\n\n\tcomponents: {\n\t\tAnswerInput,\n\t\tDraggable,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tNcLoadingIcon,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin, QuestionMultipleMixin],\n\temits: ['update:values'],\n\n\tdata() {\n\t\treturn {\n\t\t\tisDragging: false,\n\t\t\tisLoading: false,\n\t\t\tquestionTypes: [\n\t\t\t\t{ label: t('forms', 'Radio'), id: GridCellType.Radio },\n\t\t\t\t{ label: t('forms', 'Checkbox'), id: GridCellType.Checkbox },\n\t\t\t\t{ label: t('forms', 'Number'), id: GridCellType.Number },\n\t\t\t\t{ label: t('forms', 'Text'), id: GridCellType.Text },\n\t\t\t],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisUnique() {\n\t\t\treturn this.answerType.unique === true\n\t\t},\n\n\t\tshiftDragHandle() {\n\t\t\treturn !this.readOnly && this.options.length !== 0 && !this.isLastEmpty\n\t\t},\n\n\t\tquestionType() {\n\t\t\treturn this.extraSettings?.questionType ?? GridCellType.Radio\n\t\t},\n\n\t\tcolumns: {\n\t\t\tget() {\n\t\t\t\treturn this.sortOptionsOfType(this.options, OptionType.Column)\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.updateOptionsOrder(value, OptionType.Column)\n\t\t\t},\n\t\t},\n\n\t\trows: {\n\t\t\tget() {\n\t\t\t\treturn this.sortOptionsOfType(this.options, OptionType.Row)\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.updateOptionsOrder(value, OptionType.Row)\n\t\t\t},\n\t\t},\n\n\t\tplainValues() {\n\t\t\tconst values = {}\n\t\t\tfor (const row of this.rows) {\n\t\t\t\tfor (const column of this.columns) {\n\t\t\t\t\tvalues[row.id] = values[row.id] || {}\n\t\t\t\t\tvalues[row.id][column.id] =\n\t\t\t\t\t\tthis.values[row.id]?.[column.id] ?? ''\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn values\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tif (\n\t\t\t\tthis.isRequired\n\t\t\t\t&& (this.values.length === 0 || this.values === null)\n\t\t\t) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif (!this.isUnique) {\n\t\t\t\t// Validate limits\n\t\t\t\tconst max = this.extraSettings.optionsLimitMax ?? 0\n\t\t\t\tconst min = this.extraSettings.optionsLimitMin ?? 0\n\t\t\t\tif (max && this.values.length > max) {\n\t\t\t\t\tthis.errorMessage = n(\n\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t'You must choose at most one option',\n\t\t\t\t\t\t'You must choose a maximum of %n options',\n\t\t\t\t\t\tmax,\n\t\t\t\t\t)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (min && this.values.length < min) {\n\t\t\t\t\tthis.errorMessage = n(\n\t\t\t\t\t\t'forms',\n\t\t\t\t\t\t'You must choose at least one option',\n\t\t\t\t\t\t'You must choose at least %n options',\n\t\t\t\t\t\tmin,\n\t\t\t\t\t)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\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\tonChangeCheckboxRadio(rowId, value) {\n\t\t\tconst values = { ...this.values }\n\t\t\tvalues[rowId] = value\n\n\t\t\tthis.$emit('update:values', values)\n\t\t},\n\n\t\tonChangeTextNumber(rowId, columnId, value) {\n\t\t\tconst values = { ...this.plainValues }\n\t\t\tvalues[rowId][columnId] = value\n\n\t\t\tthis.$emit('update:values', values)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__content {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline);\n}\n\n.question__item {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tmin-height: var(--default-clickable-area);\n\n\t.question__input {\n\t\twidth: calc(100% - var(--default-clickable-area));\n\t\tposition: relative;\n\t\tinset-inline-start: -34px;\n\t\tinset-block-start: 1px;\n\t\tmargin-inline-end: 10px !important;\n\t\tpadding-inline-start: 36px !important;\n\t}\n\n\t.question__label {\n\t\tflex: 1 1 100%;\n\t\t// Overwrite guest page core styles\n\t\ttext-align: start !important;\n\t\t// Some rounding issues lead to this strange number, so label and answerInput show up a the same position, working on different browsers.\n\t\tpadding-block: 6.5px 0;\n\t\tpadding-inline: 30px 0;\n\t\tline-height: 22px;\n\t\tmin-height: 34px;\n\t\theight: min-content;\n\t\tposition: relative;\n\n\t\t&::before {\n\t\t\tbox-sizing: border-box;\n\t\t\t// Adjust position manually for proper position to text\n\t\t\tposition: absolute;\n\t\t\tinset-block-start: 10px;\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-inline: -30px 14px !important;\n\t\t\tmargin-block-end: 0;\n\t\t}\n\t}\n}\n\n.question__other-answer {\n\tdisplay: flex;\n\tgap: 4px 16px;\n\tflex-wrap: wrap;\n\n\t.question__label {\n\t\tflex-basis: content;\n\t}\n\n\t.question__input {\n\t\tflex: 1;\n\t\tmin-width: 260px;\n\t}\n\n\t.input-field__input {\n\t\tmin-height: var(--default-clickable-area);\n\t}\n}\n\n.question__other-answer:deep() .input-field__input {\n\tmin-height: var(--default-clickable-area);\n}\n\n.options-list-transition-move,\n.options-list-transition-enter-active,\n.options-list-transition-leave-active {\n\ttransition: all var(--animation-slow) ease;\n}\n\n.options-list-transition-enter-from,\n.options-list-transition-leave-to {\n\topacity: 0;\n\ttransform: translateX(var(--default-clickable-area));\n}\n\n/* ensure leaving items are taken out of layout flow so that moving\n   animations can be calculated correctly. */\n.options-list-transition-leave-active {\n\tposition: absolute;\n}\n\n.answer-grid {\n\tborder-collapse: collapse;\n\twidth: 100%;\n\n\tthead tr {\n\t\tborder-bottom: 2px solid var(--color-border);\n\t}\n\n\ttd {\n\t\tmin-height: 34px;\n\t\tmin-width: 64px;\n\t\ttext-align: center;\n\t\tpadding: 8px 4px;\n\n\t\t.checkbox-radio-switch {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t}\n\t}\n\n\tth {\n\t\tmin-height: 44px;\n\t\tpadding: 8px 4px;\n\t\ttext-align: center;\n\t}\n\n\t.first-column {\n\t\tmin-width: 200px;\n\t\ttext-align: left;\n\t\tposition: sticky;\n\t\tleft: 0;\n\t}\n}\n</style>\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<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<template #actions>\n\t\t\t<NcActionInput\n\t\t\t\t:modelValue=\"optionsLowest\"\n\t\t\t\ttype=\"multiselect\"\n\t\t\t\t:clearable=\"false\"\n\t\t\t\t:label=\"t('forms', 'Lowest value')\"\n\t\t\t\tlabelOutside\n\t\t\t\t:options=\"[0, 1]\"\n\t\t\t\trequired\n\t\t\t\t@update:modelValue=\"onOptionsLowestChange\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconPencil\" />\n\t\t\t\t</template>\n\t\t\t</NcActionInput>\n\t\t\t<NcActionInput\n\t\t\t\t:modelValue=\"optionsHighest\"\n\t\t\t\ttype=\"multiselect\"\n\t\t\t\t:clearable=\"false\"\n\t\t\t\t:label=\"t('forms', 'Highest value')\"\n\t\t\t\tlabelOutside\n\t\t\t\t:options=\"[2, 3, 4, 5, 6, 7, 8, 9, 10]\"\n\t\t\t\trequired\n\t\t\t\t@update:modelValue=\"onOptionsHighestChange\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconPencil\" />\n\t\t\t\t</template>\n\t\t\t</NcActionInput>\n\t\t</template>\n\n\t\t<div\n\t\t\tclass=\"question__content question-linear-scale\"\n\t\t\t:class=\"{\n\t\t\t\tquestion__content__edit: !readOnly,\n\t\t\t}\">\n\t\t\t<NcTextArea\n\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\tref=\"lowest\"\n\t\t\t\t:modelValue=\"optionsLabelLowest\"\n\t\t\t\tclass=\"question-linear-scale__label-input\"\n\t\t\t\t:label=\"t('forms', 'Label for lowest value')\"\n\t\t\t\t:placeholder=\"t('forms', 'Label (optional)')\"\n\t\t\t\tresize=\"none\"\n\t\t\t\t@input=\"resizeLabel('lowest')\"\n\t\t\t\t@blur=\"onBlur('lowest')\"\n\t\t\t\t@update:modelValue=\"onOptionsLabelLowestChange\" />\n\t\t\t<div\n\t\t\t\tv-else-if=\"optionsLabelLowest !== ''\"\n\t\t\t\t:id=\"labelId\"\n\t\t\t\tclass=\"question-linear-scale__label question-linear-scale__label-lowest\">\n\t\t\t\t{{ optionsLabelLowest }}\n\t\t\t</div>\n\t\t\t<fieldset\n\t\t\t\tclass=\"question-linear-scale__options\"\n\t\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t\t:aria-describedby=\"description ? descriptionId : undefined\">\n\t\t\t\t<legend class=\"hidden-visually\">\n\t\t\t\t\t{{\n\t\t\t\t\t\tt('forms', 'From {firstOption} to {lastOption}', {\n\t\t\t\t\t\t\tfirstOption: optionsLabelLowest,\n\t\t\t\t\t\t\tlastOption: optionsLabelHighest,\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</legend>\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"(option, index) in scaleOptions\"\n\t\t\t\t\t:key=\"option\"\n\t\t\t\t\tclass=\"question-linear-scale__option\">\n\t\t\t\t\t<label :for=\"`linear-scale-${id}-${option}`\">{{ option }}</label>\n\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t:id=\"`linear-scale-${id}-${option}`\"\n\t\t\t\t\t\t:aria-describedby=\"index === 0 ? labelId : undefined\"\n\t\t\t\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\"\n\t\t\t\t\t\t:disabled=\"!readOnly\"\n\t\t\t\t\t\t:modelValue=\"questionValues\"\n\t\t\t\t\t\t:value=\"option.toString()\"\n\t\t\t\t\t\t:name=\"`${id}-answer`\"\n\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t:required=\"isRequired\"\n\t\t\t\t\t\t@invalid.prevent=\"validate\"\n\t\t\t\t\t\t@update:modelValue=\"onChange\"\n\t\t\t\t\t\t@keydown.enter.exact.prevent=\"onKeydownEnter\" />\n\t\t\t\t</div>\n\t\t\t</fieldset>\n\t\t\t<NcTextArea\n\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\tref=\"highest\"\n\t\t\t\t:modelValue=\"optionsLabelHighest\"\n\t\t\t\tclass=\"question-linear-scale__label-input\"\n\t\t\t\t:label=\"t('forms', 'Label (optional)')\"\n\t\t\t\t:aria-label=\"t('forms', 'Label for highest value')\"\n\t\t\t\tresize=\"none\"\n\t\t\t\t@input=\"resizeLabel('highest')\"\n\t\t\t\t@blur=\"onBlur('highest')\"\n\t\t\t\t@update:modelValue=\"onOptionsLabelHighestChange\" />\n\t\t\t<div\n\t\t\t\tv-else-if=\"optionsLabelHighest !== ''\"\n\t\t\t\tclass=\"question-linear-scale__label question-linear-scale__label-highest\">\n\t\t\t\t{{ optionsLabelHighest }}\n\t\t\t</div>\n\t\t</div>\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport IconPencil from '@material-symbols/svg-400/outlined/edit.svg?raw'\nimport { t } from '@nextcloud/l10n'\nimport NcActionInput from '@nextcloud/vue/components/NcActionInput'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcTextArea from '@nextcloud/vue/components/NcTextArea'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\n\nexport default {\n\tname: 'QuestionLinearScale',\n\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t\tNcActionInput,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcTextArea,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin],\n\temits: ['update:values'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconPencil,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tisLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tscaleOptions() {\n\t\t\treturn Array.from(\n\t\t\t\t{ length: this.optionsHighest - this.optionsLowest + 1 },\n\t\t\t\t(_, i) => i + this.optionsLowest,\n\t\t\t)\n\t\t},\n\n\t\tisUnique() {\n\t\t\treturn this.answerType.unique === true\n\t\t},\n\n\t\tquestionValues() {\n\t\t\treturn this.values\n\t\t},\n\n\t\t/**\n\t\t * ID for the label for the lowest option\n\t\t */\n\t\tlabelId() {\n\t\t\treturn 'q' + this.index + '__label_lowest'\n\t\t},\n\n\t\toptionsLowest() {\n\t\t\treturn this.extraSettings?.optionsLowest ?? 1\n\t\t},\n\n\t\toptionsHighest() {\n\t\t\treturn this.extraSettings?.optionsHighest ?? 5\n\t\t},\n\n\t\toptionsLabelLowest() {\n\t\t\treturn (\n\t\t\t\tthis.extraSettings?.optionsLabelLowest\n\t\t\t\t?? t('forms', 'Strongly disagree')\n\t\t\t)\n\t\t},\n\n\t\toptionsLabelHighest() {\n\t\t\treturn (\n\t\t\t\tthis.extraSettings?.optionsLabelHighest\n\t\t\t\t?? t('forms', 'Strongly agree')\n\t\t\t)\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.readOnly) {\n\t\t\tthis.resizeLabel('lowest')\n\t\t\tthis.resizeLabel('highest')\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tif (this.isRequired && this.values.length === 0) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must answer this question')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\n\t\tonChange(option) {\n\t\t\tthis.$emit('update:values', [option])\n\t\t},\n\n\t\tonOptionsLowestChange(value) {\n\t\t\tthis.onExtraSettingsChange({ optionsLowest: value === 1 ? null : value })\n\t\t},\n\n\t\tonOptionsHighestChange(value) {\n\t\t\tthis.onExtraSettingsChange({\n\t\t\t\toptionsHighest: value === 5 ? null : value,\n\t\t\t})\n\t\t},\n\n\t\tonOptionsLabelLowestChange(value) {\n\t\t\tthis.onExtraSettingsChange({\n\t\t\t\toptionsLabelLowest:\n\t\t\t\t\tvalue === t('forms', 'Strongly disagree') ? null : value,\n\t\t\t})\n\t\t},\n\n\t\tonOptionsLabelHighestChange(value) {\n\t\t\tthis.onExtraSettingsChange({\n\t\t\t\toptionsLabelHighest:\n\t\t\t\t\tvalue === t('forms', 'Strongly agree') ? null : value,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Resizes the given label to fit within the specified constraints.\n\t\t *\n\t\t * @param {string} label - The label identifier, either 'lowest' or 'highest', indicating which label to resize.\n\t\t */\n\t\tresizeLabel(label) {\n\t\t\tlet textarea\n\t\t\tif (label === 'lowest') {\n\t\t\t\ttextarea = this.$refs.lowest.$refs.input\n\t\t\t} else if (label === 'highest') {\n\t\t\t\ttextarea = this.$refs.highest.$refs.input\n\t\t\t}\n\t\t\t// next tick ensures that the textarea is attached to DOM\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tif (textarea) {\n\t\t\t\t\ttextarea.style.cssText = 'height: 0'\n\t\t\t\t\t// include 2px border\n\t\t\t\t\ttextarea.style.cssText = `height: ${textarea.scrollHeight + 4}px; resize: none;`\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Handles the blur event for a label input.\n\t\t *\n\t\t * @param {string} label - The label that is being blurred.\n\t\t *                         It can be either 'lowest' or 'highest' indicating\n\t\t *                         which label input (lowest value or highest value) triggered the blur event.\n\t\t */\n\t\tonBlur(label) {\n\t\t\tif (label === 'lowest') {\n\t\t\t\tthis.optionsLabelLowest = this.optionsLabelLowest\n\t\t\t\t\t.replace(/[\\r\\n]+/gm, ' ')\n\t\t\t\t\t.trim()\n\t\t\t} else if (label === 'highest') {\n\t\t\t\tthis.optionsLabelHighest = this.optionsLabelHighest\n\t\t\t\t\t.replace(/[\\r\\n]+/gm, ' ')\n\t\t\t\t\t.trim()\n\t\t\t}\n\t\t\tthis.resizeLabel(label)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__content {\n\tdisplay: flex;\n\n\t@media (max-width: 768px) {\n\t\tflex-wrap: wrap; // Allow wrapping for smaller screens\n\t}\n\n\t&__edit {\n\t\tmargin-inline-start: -12px;\n\n\t\t@media (max-width: 768px) {\n\t\t\tmargin-inline-end: calc(var(--clickable-area-large) - 2px);\n\t\t}\n\t}\n\n\t.question-linear-scale {\n\t\t&__label {\n\t\t\twidth: 120px;\n\t\t\talign-self: center;\n\t\t\tflex-shrink: 0;\n\n\t\t\t&-lowest {\n\t\t\t\ttext-align: start;\n\t\t\t}\n\n\t\t\t&-highest {\n\t\t\t\ttext-align: end;\n\n\t\t\t\t@media (max-width: 768px) {\n\t\t\t\t\ttext-align: start;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\twidth: 100%; // Full width on smaller screens\n\t\t\t\tpadding-block: var(--default-grid-baseline);\n\t\t\t}\n\t\t}\n\n\t\t&__label-input {\n\t\t\twidth: 120px;\n\t\t\talign-self: center;\n\t\t\tmin-height: fit-content;\n\t\t\tflex-shrink: 0;\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\twidth: 100%; // Full width on smaller screens\n\t\t\t\tpadding-block: var(--default-grid-baseline);\n\t\t\t}\n\t\t}\n\n\t\t&__options {\n\t\t\twidth: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-evenly;\n\t\t\tflex-grow: 1;\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\tflex-direction: column; // Stack options vertically on smaller screens\n\t\t\t\talign-items: flex-start; // Align items to the left\n\t\t\t}\n\t\t}\n\n\t\t&__option {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\n\t\t\t@media (max-width: 768px) {\n\t\t\t\tflex-direction: row-reverse;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<!--\n  - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n  - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<Question\n\t\tv-bind=\"questionProps\"\n\t\t:titlePlaceholder=\"answerType.titlePlaceholder\"\n\t\t:warningInvalid=\"answerType.warningInvalid\"\n\t\t:contentValid=\"contentValid\"\n\t\t:shiftDragHandle=\"shiftDragHandle\"\n\t\t:errorMessage=\"errorMessage\"\n\t\tv-on=\"commonListeners\">\n\t\t<template #actions>\n\t\t\t<NcActionCheckbox\n\t\t\t\t:modelValue=\"extraSettings?.shuffleOptions\"\n\t\t\t\t@update:modelValue=\"onShuffleOptionsChange\">\n\t\t\t\t{{ t('forms', 'Shuffle options') }}\n\t\t\t</NcActionCheckbox>\n\t\t\t<NcActionButton closeAfterClick @click=\"isOptionDialogShown = true\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconContentPaste\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('forms', 'Add multiple options') }}\n\t\t\t</NcActionButton>\n\t\t</template>\n\n\t\t<!-- Submit mode -->\n\t\t<div\n\t\t\tv-if=\"readOnly\"\n\t\t\tclass=\"question__content\"\n\t\t\trole=\"list\"\n\t\t\t:aria-labelledby=\"titleId\"\n\t\t\t:aria-describedby=\"description ? descriptionId : undefined\"\n\t\t\t:aria-errormessage=\"hasError ? errorId : undefined\"\n\t\t\t:aria-invalid=\"hasError ? 'true' : undefined\">\n\t\t\t<!-- Unranked pool -->\n\t\t\t<div class=\"ranking-unranked\">\n\t\t\t\t<Draggable\n\t\t\t\t\tv-if=\"unrankedOptions.length > 0\"\n\t\t\t\t\tv-model=\"unrankedOptions\"\n\t\t\t\t\tclass=\"ranking-unranked__pool\"\n\t\t\t\t\t:animation=\"300\"\n\t\t\t\t\t:group=\"'ranking_' + id\"\n\t\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t@start=\"onRankingStart\"\n\t\t\t\t\t@end=\"onRankingEnd\">\n\t\t\t\t\t<TransitionGroup\n\t\t\t\t\t\ttag=\"ul\"\n\t\t\t\t\t\t:name=\"isRanking ? undefined : 'options-list-transition'\"\n\t\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t\t<li v-for=\"option in unrankedOptions\" :key=\"option.id\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclass=\"ranking-unranked__item\"\n\t\t\t\t\t\t\t\t@click=\"rankOption(option)\">\n\t\t\t\t\t\t\t\t{{ option.text }}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</TransitionGroup>\n\t\t\t\t</Draggable>\n\t\t\t\t<p v-else class=\"ranking-unranked__empty\">\n\t\t\t\t\t{{ t('forms', 'All options ranked') }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<!-- Ranked list -->\n\t\t\t<div class=\"ranking-ranked\">\n\t\t\t\t<p class=\"ranking-section__label\">\n\t\t\t\t\t{{ t('forms', 'Your ranking') }}\n\t\t\t\t</p>\n\t\t\t\t<Draggable\n\t\t\t\t\tv-model=\"rankedOptions\"\n\t\t\t\t\tclass=\"ranking-ranked__list\"\n\t\t\t\t\t:animation=\"300\"\n\t\t\t\t\t:group=\"'ranking_' + id\"\n\t\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t\tdirection=\"vertical\"\n\t\t\t\t\thandle=\".ranking-item__drag-handle\"\n\t\t\t\t\t@start=\"onRankingStart\"\n\t\t\t\t\t@end=\"onRankingEnd\">\n\t\t\t\t\t<TransitionGroup\n\t\t\t\t\t\ttag=\"ul\"\n\t\t\t\t\t\t:name=\"isRanking ? undefined : 'options-list-transition'\"\n\t\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tv-for=\"(option, index) in rankedOptions\"\n\t\t\t\t\t\t\t:key=\"option.id\"\n\t\t\t\t\t\t\tclass=\"ranking-item\"\n\t\t\t\t\t\t\trole=\"listitem\">\n\t\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\t\t:id=\"`ranking-${option.id}-drag`\"\n\t\t\t\t\t\t\t\t:container=\"`#ranking-${option.id}-drag`\"\n\t\t\t\t\t\t\t\t:aria-label=\"t('forms', 'Move option actions')\"\n\t\t\t\t\t\t\t\tclass=\"ranking-item__drag-handle\"\n\t\t\t\t\t\t\t\tvariant=\"tertiary-no-background\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconDragIndicator\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t\t\tref=\"buttonOptionUp\"\n\t\t\t\t\t\t\t\t\t:disabled=\"index === 0\"\n\t\t\t\t\t\t\t\t\t@click=\"onMoveUp(index)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconArrowUp\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t{{ t('forms', 'Move option up') }}\n\t\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t\t\tref=\"buttonOptionDown\"\n\t\t\t\t\t\t\t\t\t:disabled=\"index === rankedOptions.length - 1\"\n\t\t\t\t\t\t\t\t\t@click=\"onMoveDown(index)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconArrowDown\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t{{ t('forms', 'Move option down') }}\n\t\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t<span class=\"ranking-item__position\"\n\t\t\t\t\t\t\t\t>{{ index + 1 }}.</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"ranking-item__text\">{{ option.text }}</span>\n\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t:ariaLabel=\"t('forms', 'Remove from ranking')\"\n\t\t\t\t\t\t\t\t@click=\"unrankOption(option)\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"IconClose\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</TransitionGroup>\n\t\t\t\t</Draggable>\n\t\t\t\t<p v-if=\"rankedOptions.length === 0\" class=\"ranking-ranked__empty\">\n\t\t\t\t\t{{ t('forms', 'Tap options above to rank them') }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Edit mode: manage options -->\n\t\t<template v-else>\n\t\t\t<div v-if=\"isLoading\">\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</div>\n\t\t\t<Draggable\n\t\t\t\tv-else\n\t\t\t\tv-model=\"choices\"\n\t\t\t\tclass=\"question__content\"\n\t\t\t\t:animation=\"300\"\n\t\t\t\tdirection=\"vertical\"\n\t\t\t\thandle=\".option__drag-handle\"\n\t\t\t\tinvertSwap\n\t\t\t\ttarget=\".sort-target\"\n\t\t\t\t@update=\"dirtyOptionsType = 'choice'\"\n\t\t\t\t@start=\"onDragStart\"\n\t\t\t\t@end=\"onDragEnd\">\n\t\t\t\t<TransitionGroup\n\t\t\t\t\ttag=\"ul\"\n\t\t\t\t\t:name=\"isDragging ? undefined : 'options-list-transition'\"\n\t\t\t\t\tclass=\"sort-target\">\n\t\t\t\t\t<AnswerInput\n\t\t\t\t\t\tv-for=\"(answer, index) in choices\"\n\t\t\t\t\t\t:key=\"answer.local ? 'option-local' : answer.id\"\n\t\t\t\t\t\tref=\"input\"\n\t\t\t\t\t\t:answer=\"answer\"\n\t\t\t\t\t\t:formId=\"formId\"\n\t\t\t\t\t\t:index=\"index\"\n\t\t\t\t\t\t:isUnique=\"true\"\n\t\t\t\t\t\t:maxIndex=\"options.length - 1\"\n\t\t\t\t\t\t:maxOptionLength=\"maxStringLengths.optionText\"\n\t\t\t\t\t\t:isRanking=\"true\"\n\t\t\t\t\t\toptionType=\"choice\"\n\t\t\t\t\t\t@createAnswer=\"onCreateAnswer\"\n\t\t\t\t\t\t@update:answer=\"updateAnswer\"\n\t\t\t\t\t\t@delete=\"deleteOption\"\n\t\t\t\t\t\t@focusNext=\"focusNextInput\"\n\t\t\t\t\t\t@moveUp=\"onOptionMoveUp(index, OptionType.Choice)\"\n\t\t\t\t\t\t@moveDown=\"onOptionMoveDown(index, OptionType.Choice)\"\n\t\t\t\t\t\t@tabbedOut=\"checkValidOption\" />\n\t\t\t\t</TransitionGroup>\n\t\t\t</Draggable>\n\t\t</template>\n\n\t\t<!-- Add multiple options modal -->\n\t\t<OptionInputDialog\n\t\t\tv-model:open=\"isOptionDialogShown\"\n\t\t\t@multipleAnswers=\"handleMultipleOptions\" />\n\t\t<template #insert>\n\t\t\t<slot name=\"insert\" />\n\t\t</template>\n\t</Question>\n</template>\n\n<script>\nimport IconClose from '@material-symbols/svg-400/outlined/close.svg?raw'\nimport IconContentPaste from '@material-symbols/svg-400/outlined/content_paste.svg?raw'\nimport IconDragIndicator from '@material-symbols/svg-400/outlined/drag_indicator.svg?raw'\nimport IconArrowDown from '@material-symbols/svg-400/outlined/keyboard_arrow_down.svg?raw'\nimport IconArrowUp from '@material-symbols/svg-400/outlined/keyboard_arrow_up.svg?raw'\nimport { translate as t } from '@nextcloud/l10n'\nimport { VueDraggable as Draggable } from 'vue-draggable-plus'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport OptionInputDialog from '../OptionInputDialog.vue'\nimport AnswerInput from './AnswerInput.vue'\nimport Question from './Question.vue'\nimport QuestionMixin from '../../mixins/QuestionMixin.js'\nimport QuestionMultipleMixin from '../../mixins/QuestionMultipleMixin.ts'\nimport { OptionType } from '../../models/Constants.ts'\n\nexport default {\n\tname: 'QuestionRanking',\n\n\tcomponents: {\n\t\tAnswerInput,\n\t\tDraggable,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActions,\n\t\tNcButton,\n\t\tNcIconSvgWrapper,\n\t\tNcLoadingIcon,\n\t\tOptionInputDialog,\n\t\tQuestion,\n\t},\n\n\tmixins: [QuestionMixin, QuestionMultipleMixin],\n\temits: ['update:values'],\n\n\tsetup() {\n\t\treturn {\n\t\t\tIconArrowDown,\n\t\t\tIconArrowUp,\n\t\t\tIconClose,\n\t\t\tIconContentPaste,\n\t\t\tIconDragIndicator,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\terrorMessage: null,\n\t\t\tisDragging: false,\n\t\t\tisRanking: false,\n\t\t\tisLoading: false,\n\t\t\tisOptionDialogShown: false,\n\t\t\trankedOptions: [],\n\t\t\tunrankedOptions: [],\n\t\t\tOptionType,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshiftDragHandle() {\n\t\t\treturn !this.readOnly && this.options.length !== 0 && !this.isLastEmpty\n\t\t},\n\n\t\tchoices: {\n\t\t\tget() {\n\t\t\t\treturn this.sortOptionsOfType(this.options, OptionType.Choice)\n\t\t\t},\n\n\t\t\tset(value) {\n\t\t\t\tthis.updateOptionsOrder(value, OptionType.Choice)\n\t\t\t},\n\t\t},\n\t},\n\n\twatch: {\n\t\toptions: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.initRankedOptions()\n\t\t\t},\n\t\t},\n\n\t\tvalues: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.initRankedOptions()\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync validate() {\n\t\t\tconst optionsCount = this.sortOptionsOfType(\n\t\t\t\tthis.options,\n\t\t\t\tOptionType.Choice,\n\t\t\t).length\n\n\t\t\tif (\n\t\t\t\t(this.isRequired && this.rankedOptions.length === 0)\n\t\t\t\t|| (this.rankedOptions.length > 0\n\t\t\t\t\t&& this.rankedOptions.length !== optionsCount)\n\t\t\t) {\n\t\t\t\tthis.errorMessage = t('forms', 'You must rank all options')\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.errorMessage = null\n\t\t\treturn true\n\t\t},\n\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\t/**\n\t\t * Initialize ranked/unranked options from existing values or default order\n\t\t */\n\t\tinitRankedOptions() {\n\t\t\tconst sorted = this.sortOptionsOfType(this.options, OptionType.Choice)\n\n\t\t\tif (this.values && this.values.length > 0) {\n\t\t\t\t// Restore order from saved values (array of option IDs)\n\t\t\t\tconst byId = Object.fromEntries(sorted.map((o) => [o.id, o]))\n\t\t\t\tthis.rankedOptions = this.values\n\t\t\t\t\t.map((id) => byId[parseInt(id)])\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\tthis.unrankedOptions = sorted.filter(\n\t\t\t\t\t(o) => !this.rankedOptions.some((r) => r.id === o.id),\n\t\t\t\t)\n\t\t\t} else if (this.readOnly) {\n\t\t\t\t// Submit mode: start with all options unranked\n\t\t\t\tthis.rankedOptions = []\n\t\t\t\tthis.unrankedOptions = [...sorted]\n\t\t\t} else {\n\t\t\t\t// Edit mode: show all options in default order\n\t\t\t\tthis.rankedOptions = [...sorted]\n\t\t\t\tthis.unrankedOptions = []\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Move an option from the unranked pool to the ranked list\n\t\t *\n\t\t * @param {object} option The option to rank\n\t\t */\n\t\trankOption(option) {\n\t\t\tthis.unrankedOptions = this.unrankedOptions.filter(\n\t\t\t\t(o) => o.id !== option.id,\n\t\t\t)\n\t\t\tthis.rankedOptions.push(option)\n\t\t\tthis.emitValues()\n\t\t},\n\n\t\t/**\n\t\t * Move an option from the ranked list back to the unranked pool\n\t\t *\n\t\t * @param {object} option The option to unrank\n\t\t */\n\t\tunrankOption(option) {\n\t\t\tthis.rankedOptions = this.rankedOptions.filter((o) => o.id !== option.id)\n\t\t\tthis.unrankedOptions.push(option)\n\t\t\tthis.emitValues()\n\t\t},\n\n\t\t/**\n\t\t * Move the ranked option at index up by one position\n\t\t *\n\t\t * @param {number} index Current index\n\t\t */\n\t\tonMoveUp(index) {\n\t\t\tif (index <= 0) return\n\t\t\tconst items = [...this.rankedOptions]\n\t\t\t;[items[index - 1], items[index]] = [items[index], items[index - 1]]\n\t\t\tthis.rankedOptions = items\n\t\t\tthis.emitValues()\n\t\t\tconst newIndex = index - 1\n\t\t\tthis.focusButton(\n\t\t\t\tnewIndex > 0 ? 'buttonOptionUp' : 'buttonOptionDown',\n\t\t\t\tnewIndex,\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Move the ranked option at index down by one position\n\t\t *\n\t\t * @param {number} index Current index\n\t\t */\n\t\tonMoveDown(index) {\n\t\t\tif (index >= this.rankedOptions.length - 1) return\n\t\t\tconst items = [...this.rankedOptions]\n\t\t\t;[items[index], items[index + 1]] = [items[index + 1], items[index]]\n\t\t\tthis.rankedOptions = items\n\t\t\tthis.emitValues()\n\t\t\tconst newIndex = index + 1\n\t\t\tthis.focusButton(\n\t\t\t\tnewIndex < this.rankedOptions.length - 1\n\t\t\t\t\t? 'buttonOptionDown'\n\t\t\t\t\t: 'buttonOptionUp',\n\t\t\t\tnewIndex,\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Re-focus a button ref inside a v-for after reorder\n\t\t *\n\t\t * @param {string} refName The ref name ('buttonOptionUp' or 'buttonOptionDown')\n\t\t * @param {number} index The index of the item in the v-for\n\t\t */\n\t\tfocusButton(refName, index) {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst refs = this.$refs[refName]\n\t\t\t\tif (Array.isArray(refs) && refs[index]) {\n\t\t\t\t\trefs[index].$el?.focus()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tonRankingStart() {\n\t\t\tthis.isRanking = true\n\t\t},\n\n\t\t/**\n\t\t * Emit the current ranking after a drag reorder\n\t\t */\n\t\tonRankingEnd() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.isRanking = false\n\t\t\t})\n\t\t\tthis.emitValues()\n\t\t},\n\n\t\t/**\n\t\t * Emit the current values based on ranking state\n\t\t */\n\t\temitValues() {\n\t\t\tif (this.rankedOptions.length === 0) {\n\t\t\t\t// Nothing ranked — emit empty to signal unanswered\n\t\t\t\tthis.$emit('update:values', [])\n\t\t\t} else {\n\t\t\t\tthis.$emit(\n\t\t\t\t\t'update:values',\n\t\t\t\t\tthis.rankedOptions.map((o) => o.id),\n\t\t\t\t)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.question__content {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline);\n}\n\n.ranking-section__label {\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-block-end: var(--default-grid-baseline);\n\tfont-size: small;\n}\n\n.ranking-unranked {\n\tmargin-block-end: calc(2 * var(--default-grid-baseline));\n\n\t&__pool {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: var(--default-grid-baseline);\n\t}\n\n\t&__item {\n\t\tdisplay: inline-block;\n\t\tpadding: var(--default-grid-baseline) calc(2 * var(--default-grid-baseline));\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\t\tcursor: pointer;\n\t\tfont-size: inherit;\n\t\tcolor: var(--color-main-text);\n\t\ttransition: background-color var(--animation-quick);\n\n\t\t&:hover,\n\t\t&:focus-visible {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t\tborder-color: var(--color-primary-element);\n\t\t}\n\t}\n\n\t&__empty {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tfont-style: italic;\n\t\tpadding: var(--default-grid-baseline) 0;\n\t}\n\n\tli {\n\t\tdisplay: inline-block;\n\t}\n}\n\n.ranking-ranked {\n\t&__list {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--default-grid-baseline);\n\t}\n\n\t&__empty {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tfont-style: italic;\n\t\tpadding: var(--default-grid-baseline) 0;\n\t}\n}\n\n.ranking-item {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: var(--default-clickable-area);\n\tborder-radius: var(--border-radius-large);\n\tuser-select: none;\n\ttransition-property: background-color;\n\ttransition-duration: 0.1s;\n\ttransition-timing-function: linear;\n\n\t&:hover,\n\t&:focus-within {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__position {\n\t\tfont-weight: bold;\n\t\tmin-width: 1.5em;\n\t\ttext-align: end;\n\t\tmargin-inline-end: calc(3 * var(--default-grid-baseline));\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__text {\n\t\tflex: 1;\n\t}\n\n\t&__drag-handle {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tcursor: grab;\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:focus-within {\n\t\t\tcolor: var(--color-main-text);\n\t\t}\n\n\t\t&:active {\n\t\t\tcursor: grabbing;\n\t\t}\n\t}\n}\n\n.options-list-transition-move,\n.options-list-transition-enter-active,\n.options-list-transition-leave-active {\n\ttransition: all var(--animation-slow) ease;\n}\n\n.options-list-transition-enter-from,\n.options-list-transition-leave-to {\n\topacity: 0;\n\ttransform: translateX(var(--default-clickable-area));\n}\n\n.options-list-transition-leave-active {\n\tposition: absolute;\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport IconNumeric from '@material-symbols/svg-400/outlined/123.svg?raw'\nimport IconArrowDownDropCircleOutline from '@material-symbols/svg-400/outlined/arrow_drop_down_circle.svg?raw'\nimport IconCalendar from '@material-symbols/svg-400/outlined/calendar_today.svg?raw'\nimport IconCheckboxOutline from '@material-symbols/svg-400/outlined/check_box.svg?raw'\nimport IconFile from '@material-symbols/svg-400/outlined/draft.svg?raw'\nimport IconGrid from '@material-symbols/svg-400/outlined/grid_view.svg?raw'\nimport IconLinearScale from '@material-symbols/svg-400/outlined/linear_scale.svg?raw'\nimport IconPalette from '@material-symbols/svg-400/outlined/palette.svg?raw'\nimport IconRadioboxMarked from '@material-symbols/svg-400/outlined/radio_button_checked.svg?raw'\nimport IconClockOutline from '@material-symbols/svg-400/outlined/schedule.svg?raw'\nimport IconTextShort from '@material-symbols/svg-400/outlined/short_text.svg?raw'\nimport IconTextLong from '@material-symbols/svg-400/outlined/subject.svg?raw'\nimport IconSwapVertical from '@material-symbols/svg-400/outlined/swap_vert.svg?raw'\nimport { markRaw } from 'vue'\nimport QuestionColor from '../components/Questions/QuestionColor.vue'\nimport QuestionDate from '../components/Questions/QuestionDate.vue'\nimport QuestionDropdown from '../components/Questions/QuestionDropdown.vue'\nimport QuestionFile from '../components/Questions/QuestionFile.vue'\nimport QuestionGrid from '../components/Questions/QuestionGrid.vue'\nimport QuestionLinearScale from '../components/Questions/QuestionLinearScale.vue'\nimport QuestionLong from '../components/Questions/QuestionLong.vue'\nimport QuestionMultiple from '../components/Questions/QuestionMultiple.vue'\nimport QuestionRanking from '../components/Questions/QuestionRanking.vue'\nimport QuestionShort from '../components/Questions/QuestionShort.vue'\nimport { OptionType } from './Constants.ts'\n\n/**\n * @typedef {object} AnswerTypes\n * @property {string} multiple Checkbox Answer\n * @property {string} multiple_unique Radio buttons Answer\n * @property {string} dropdown Dropdown Answer\n * @property {string} short Short Text Answer\n * @property {string} long Long Text Answer\n * @property {string} date Date Answer\n * @property {string} datetime Date and Time Answer\n * @property {string} time Time Answer\n * @property {string} linearscale Linear Scale Answer\n * @property {string} color Color Answer\n */\nexport default {\n\t/**\n\t * !! Keep in SYNC with lib/Constants.php for props that are necessary on php !!\n\t * Specifying Question-Models in a common place\n\t * Further type-specific parameters are possible.\n\t *\n\t * @property {object} component The vue-component this answer-type relies on\n\t * @property {string} icon The icon corresponding to this answer-type\n\t * @property {string} label The answer-type label, that users will see as answer-type.\n\t * @property {boolean} predefined SYNC This AnswerType has/needs predefined Options.\n\t * @property {Function} validate *optional* Define conditions where this question is not ok\n\t * @property {string} titlePlaceholder The placeholder users see as empty question-title in edit-mode\n\t * @property {string} createPlaceholder *optional* The placeholder that is visible in edit-mode, to indicate a submission form-input field\n\t * @property {string} createPlaceholderRange *optional* The placeholder that is visible in edit-mode, to indicate a submission form-input field for date fields that use a date range\n\t * @property {string} submitPlaceholder *optional* The placeholder that is visible in submit-mode, to indicate a form input-field\n\t * @property {string} submitPlaceholderRange *optional* The placeholder that is visible in submit-mode, to indicate a form input-field for date fields that use a date range\n\t * @property {string} warningInvalid The warning users see in edit mode, if the question is invalid.\n\t */\n\n\tmultiple: {\n\t\tcomponent: markRaw(QuestionMultiple),\n\t\ticon: IconCheckboxOutline,\n\t\tlabel: t('forms', 'Checkboxes'),\n\t\tpredefined: true,\n\t\tvalidate: (question) => question.options.length > 0,\n\n\t\ttitlePlaceholder: t('forms', 'Checkbox question title'),\n\t\tcreatePlaceholder: t('forms', 'People can submit a different answer'),\n\t\tsubmitPlaceholder: t('forms', 'Enter your answer'),\n\t\twarningInvalid: t(\n\t\t\t'forms',\n\t\t\t'This question needs a title and at least one answer!',\n\t\t),\n\t},\n\n\tmultiple_unique: {\n\t\tcomponent: markRaw(QuestionMultiple),\n\t\ticon: IconRadioboxMarked,\n\t\tlabel: t('forms', 'Radio buttons'),\n\t\tpredefined: true,\n\t\tvalidate: (question) => question.options.length > 0,\n\n\t\ttitlePlaceholder: t('forms', 'Radio buttons question title'),\n\t\tcreatePlaceholder: t('forms', 'People can submit a different answer'),\n\t\tsubmitPlaceholder: t('forms', 'Enter your answer'),\n\t\twarningInvalid: t(\n\t\t\t'forms',\n\t\t\t'This question needs a title and at least one answer!',\n\t\t),\n\n\t\t// Using the same vue-component as multiple, this specifies that the component renders as multiple_unique.\n\t\tunique: true,\n\t},\n\n\tdropdown: {\n\t\tcomponent: markRaw(QuestionDropdown),\n\t\ticon: IconArrowDownDropCircleOutline,\n\t\tlabel: t('forms', 'Dropdown'),\n\t\tpredefined: true,\n\t\tvalidate: (question) => question.options.length > 0,\n\n\t\ttitlePlaceholder: t('forms', 'Dropdown question title'),\n\t\tcreatePlaceholder: t('forms', 'People can pick one option'),\n\t\tsubmitPlaceholder: t('forms', 'Pick an option'),\n\t\twarningInvalid: t(\n\t\t\t'forms',\n\t\t\t'This question needs a title and at least one answer!',\n\t\t),\n\t},\n\n\tfile: {\n\t\tcomponent: markRaw(QuestionFile),\n\t\ticon: IconFile,\n\t\tlabel: t('forms', 'File'),\n\t\tpredefined: false,\n\n\t\ttitlePlaceholder: t('forms', 'File question title'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\t},\n\n\tgrid: {\n\t\tcomponent: markRaw(QuestionGrid),\n\t\ticon: IconGrid,\n\t\tlabel: t('forms', 'Grid'),\n\t\tpredefined: false,\n\n\t\tsubtypes: {\n\t\t\tradio: {\n\t\t\t\ticon: IconRadioboxMarked,\n\t\t\t\tlabel: t('forms', 'Radio buttons'),\n\t\t\t\textraSettings: {\n\t\t\t\t\tquestionType: 'radio',\n\t\t\t\t},\n\t\t\t},\n\t\t\tcheckbox: {\n\t\t\t\ticon: IconCheckboxOutline,\n\t\t\t\tlabel: t('forms', 'Checkboxes'),\n\t\t\t\textraSettings: {\n\t\t\t\t\tquestionType: 'checkbox',\n\t\t\t\t},\n\t\t\t},\n\t\t\tnumber: {\n\t\t\t\ticon: IconNumeric,\n\t\t\t\tlabel: t('forms', 'Number'),\n\t\t\t\textraSettings: {\n\t\t\t\t\tquestionType: 'number',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\tvalidate: (question) => {\n\t\t\treturn (\n\t\t\t\tquestion.options.filter(\n\t\t\t\t\t(option) => option.optionType === OptionType.Column,\n\t\t\t\t).length > 0\n\t\t\t\t&& question.options.filter(\n\t\t\t\t\t(option) => option.optionType === OptionType.Row,\n\t\t\t\t).length > 0\n\t\t\t)\n\t\t},\n\n\t\ttitlePlaceholder: t('forms', 'Grid question title'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\t\tcreatePlaceholder: t('forms', 'People can submit a grid answer'),\n\t\tsubmitPlaceholder: t('forms', 'Enter your answer'),\n\t},\n\n\tshort: {\n\t\tcomponent: markRaw(QuestionShort),\n\t\ticon: IconTextShort,\n\t\tlabel: t('forms', 'Short answer'),\n\t\tpredefined: false,\n\n\t\ttitlePlaceholder: t('forms', 'Short answer question title'),\n\t\tcreatePlaceholder: t('forms', 'People can enter a short answer'),\n\t\tsubmitPlaceholder: t('forms', 'Enter your answer'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\t},\n\n\tlong: {\n\t\tcomponent: markRaw(QuestionLong),\n\t\ticon: IconTextLong,\n\t\tlabel: t('forms', 'Long text'),\n\t\tpredefined: false,\n\n\t\ttitlePlaceholder: t('forms', 'Long text question title'),\n\t\tcreatePlaceholder: t('forms', 'People can enter a long text'),\n\t\tsubmitPlaceholder: t('forms', 'Enter your answer'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\t},\n\n\tdate: {\n\t\tcomponent: markRaw(QuestionDate),\n\t\ticon: IconCalendar,\n\t\tlabel: t('forms', 'Date'),\n\t\tpredefined: false,\n\n\t\ttitlePlaceholder: t('forms', 'Date question title'),\n\t\tcreatePlaceholder: t('forms', 'People can pick a date'),\n\t\tcreatePlaceholderRange: t('forms', 'People can pick a date range'),\n\t\tsubmitPlaceholder: t('forms', 'Pick a date'),\n\t\tsubmitPlaceholderRange: t('forms', 'Pick a date range'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\n\t\tpickerType: 'date',\n\t\tstorageFormat: 'YYYY-MM-DD',\n\t\tmomentFormat: 'L',\n\t},\n\n\tdatetime: {\n\t\tcomponent: markRaw(QuestionDate),\n\t\ticon: IconClockOutline,\n\t\tlabel: t('forms', 'Datetime'),\n\t\tpredefined: false,\n\n\t\ttitlePlaceholder: t('forms', 'Datetime question title'),\n\t\tcreatePlaceholder: t('forms', 'People can pick a date and time'),\n\t\tsubmitPlaceholder: t('forms', 'Pick a date and time'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\n\t\tpickerType: 'datetime',\n\t\tstorageFormat: 'YYYY-MM-DD HH:mm',\n\t\tmomentFormat: 'LLL',\n\t},\n\n\ttime: {\n\t\tcomponent: markRaw(QuestionDate),\n\t\ticon: IconClockOutline,\n\t\tlabel: t('forms', 'Time'),\n\t\tpredefined: false,\n\n\t\ttitlePlaceholder: t('forms', 'Time question title'),\n\t\tcreatePlaceholder: t('forms', 'People can pick a time'),\n\t\tcreatePlaceholderRange: t('forms', 'People can pick a time range'),\n\t\tsubmitPlaceholder: t('forms', 'Pick a time'),\n\t\tsubmitPlaceholderRange: t('forms', 'Pick a time range'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\n\t\tpickerType: 'time',\n\t\tstorageFormat: 'HH:mm',\n\t\tmomentFormat: 'LT',\n\t},\n\n\tlinearscale: {\n\t\tcomponent: markRaw(QuestionLinearScale),\n\t\ticon: IconLinearScale,\n\t\tlabel: t('forms', 'Linear scale'),\n\t\tpredefined: true,\n\n\t\ttitlePlaceholder: t('forms', 'Linear scale question title'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\t},\n\n\tcolor: {\n\t\tcomponent: markRaw(QuestionColor),\n\t\ticon: IconPalette,\n\t\tlabel: t('forms', 'Color'),\n\t\tpredefined: false,\n\n\t\ttitlePlaceholder: t('forms', 'Color question title'),\n\t\tcreatePlaceholder: t('forms', 'People can pick a color'),\n\t\tsubmitPlaceholder: t('forms', 'Pick a color'),\n\t\twarningInvalid: t('forms', 'This question needs a title!'),\n\t},\n\n\tranking: {\n\t\tcomponent: markRaw(QuestionRanking),\n\t\ticon: IconSwapVertical,\n\t\tlabel: t('forms', 'Ranking'),\n\t\tpredefined: true,\n\t\tvalidate: (question) => question.options.length > 0,\n\n\t\ttitlePlaceholder: t('forms', 'Ranking question title'),\n\t\tcreatePlaceholder: t('forms', 'People can rank options'),\n\t\tsubmitPlaceholder: t('forms', 'Drag to rank'),\n\t\twarningInvalid: t(\n\t\t\t'forms',\n\t\t\t'This question needs a title and at least one answer!',\n\t\t),\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Set the Window-Title to current FormTitle including suffix.\n *\n * @param {string} formTitle Title of current form to set on window.\n */\nfunction SetWindowTitle(formTitle) {\n\tif (formTitle === '') {\n\t\twindow.document.title = t('forms', 'Forms') + ' - ' + OC.theme.title\n\t} else {\n\t\twindow.document.title =\n\t\t\tformTitle + ' - ' + t('forms', 'Forms') + ' - ' + OC.theme.title\n\t}\n}\n\nexport default SetWindowTitle\n"],"names":["_sfc_main","NcIconSvgWrapper","ActionGlobalMixin","NC_ACTIONS_IS_SEMANTIC_MENU","createElementId","id","props","useModel","mdiRadioboxBlank","mdiRadioboxMarked","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_component_NcIconSvgWrapper","resolveComponent","openBlock","createElementBlock","normalizeClass","createElementVNode","withDirectives","$event","vModelRadio","createVNode","toDisplayString","NcActionRadio","_export_sfc","defineComponent","__props","style","useCssModule","provide","NC_FORM_BOX_CONTEXT_KEY","renderSlot","ncFormBox","ncFormBox_row","ncFormBox__item","ncFormBox_col","style0","cssModules","NcFormBox","slots","useSlots","descriptionId","hasDescription","getDescriptionId","hasContentOnly","createTextVNode","createCommentVNode","formGroup","formGroup_noGap","formGroup__label","formGroup__description","formGroup__content","formGroup__content_only","NcFormGroup","mergeModels","modelValue","buttonVariant","ref","INSIDE_RADIO_GROUP_KEY","computed","register","onUpdate","isButton","value","createBlock","withCtx","radioGroup_checkboxRadioContainer","NcRadioGroup","labelId","radioGroup","useInsideRadioGroup","formBoxItemClass","useNcFormBox","onMounted","isChecked","unref","radioGroupButton","radioGroupButton__label","radioGroupButton__icon","radioGroupButton_disabled","radioGroupButton_active","NcRadioGroupButton","IconAsterisk","IconIdentifier","IconDragIndicator","IconAlertCircleOutline","IconArrowDown","IconArrowUp","IconDotsHorizontal","_createElementBlock","_renderSlot","_createElementVNode","IconOverlay","NcActions","NcActionButton","NcActionCheckbox","NcActionInput","NcButton","NcNoteCard","IconContentCopy","IconDelete","target","name","isRequired","textarea","_createVNode","_component_NcButton","args","_createBlock","_component_NcActions","_component_NcActionCheckbox","_component_NcActionInput","_createTextVNode","_component_NcActionButton","_component_IconOverlay","_openBlock","_hoisted_7","_component_NcNoteCard","QuestionMixin","Question","allowedKeys","key","debounce","text","INPUT_DEBOUNCE_MS","description","isRequiredValue","newSettings","newExtraSettings","shuffle","values","event","title","input","shuffled","idx","rndIdx","axios","generateOcsUrl","emit","error","logger","showError","answers","response","OptionType","newServerOptions","OcsResponse2Data","options","option","_component_Question","_mergeProps","_toHandlers","IconCheckboxBlankOutline","IconContentPaste","IconRadioboxBlank","an","Pe","yt","wt","bt","t","e","n","fe","$e","o","Ht","mn","vn","St","bn","yn","Dt","_t","wn","En","Tt","Ke","Sn","Dn","_n","Tn","Ct","Cn","On","Ot","ne","In","Ye","ie","An","xn","Nn","re","ae","xe","It","Te","Lt","Wt","Gt","S","E","We","Pn","Q","At","V","h","ye","jt","te","P","a","l","s","u","d","f","m","y","b","w","xt","ce","we","p","ht","J","Nt","Mn","Fn","Je","Ce","zt","Rn","Ut","Vt","$t","q","Xn","r","i","Bn","Yn","ge","Ze","Ne","kn","L","G","R","j","Hn","z","c","O","g","T","pe","Be","C","ue","Se","Y","be","Oe","$","se","Zt","Qt","W","Me","ve","Ge","je","de","Z","Qe","et","Pt","Mt","me","Ie","Ae","Fe","ke","H","tt","lt","ze","Ve","Re","Ft","Ln","qt","Kt","Wn","Gn","Jt","he","jn","Zn","nt","He","ee","Ee","vt","rn","Xe","B","$n","Vn","X","K","oe","le","k","v","D","A","qn","I","_","x","M","F","Un","st","zn","Jn","Kn","N","De","ut","ct","ot","rt","Ue","_e","Qn","Rt","Le","it","en","pt","gt","eo","to","dt","sn","no","un","kt","tn","nn","Xt","oo","Yt","on","U","qe","mt","ln","ft","ro","lo","cn","Et","fn","dn","hn","pn","NcDialog","NcSelect","NcTextArea","IconCheck","answer","_component_NcDialog","_component_NcTextArea","_component_NcSelect","IconTableColumn","IconTableRow","IconPlus","newVal","markRaw","PQueue","isComposing","newAnswer","refName","_normalizeClass","QuestionMultipleMixin","optionsPerType","optionType","index","item","instance","newOptions","updatedOptions","oldValue","local","optionToDelete","sortedOptions","order","optionIndex","opt","newOrder","first","second","AnswerInput","Draggable","NcCheckboxRadioSwitch","NcInputField","NcLoadingIcon","OptionInputDialog","QUESTION_EXTRASETTINGS_OTHER_PREFIX","min","max","pureValue","allowOtherAnswer","prefixedValue","_Fragment","checked","_renderList","_component_NcCheckboxRadioSwitch","_toDisplayString","_component_NcInputField","_component_NcLoadingIcon","_component_Draggable","_TransitionGroup","_component_AnswerInput","_component_OptionInputDialog","IconRegex","IconNumeric","IconPhone","IconTextShort","validationTypes","IconEMail","pattern","modifiers","REGEX_WITH_DELIMITERS","REGEX_UNESCAPED_SLASH","validateExpression","splitRegex","regex","isCustomValid","validationType","validationRegex","validationTypeObject","validationTypeName","_component_NcActionRadio","IconVisibility","useIsSmallMobile","optionId","entry","_component_NcRadioGroup","_component_NcRadioGroupButton","submitView","editView","IconEdit","resultsView","IconBarChart","PillMenu","PermissionTypes","useIsMobile","IconShareVariant","views","_component_PillMenu","IconArrowDownDropCircleOutline","IconCalendar","IconCheckboxOutline","IconFile","IconGrid","IconLinearScale","IconPalette","IconRadioboxMarked","IconClockOutline","IconTextLong","IconSwapVertical","NcColorPicker","IconClose","color","_component_NcColorPicker","svgClockLoader20","svgClockLoader80","svgEventIcon","svgTodayIcon","NcDateTimePicker","moment","date","dateString","time","datetime","_createSlots","_component_NcDateTimePicker","selected","IconChevronLeft","IconFileDocumentAlert","IconUpload","IconUploadMultiple","fileTypes","FILE_SIZE_UNITS","NcActionSeparator","NcListItem","allowedFileTypes","type","unit","fileInput","formData","fileInvalid","file","formatFileSize","loadState","url","maxAllowedFilesCount","maxFileSizeValue","maxFileSize","maxFileSizeUnit","fileType","allowed","fileExtension","allowedFileExtensions","extension","uploadedFileId","_component_NcActionSeparator","fileTypeLabel","uploadedFile","_component_NcListItem","GridCellType","row","column","rowId","columnId","IconPencil","label","optionsCount","sorted","byId","items","newIndex","refs","_hoisted_6","_hoisted_8","_hoisted_9","_hoisted_10","answerTypes","QuestionMultiple","question","QuestionDropdown","QuestionFile","QuestionGrid","QuestionShort","QuestionLong","QuestionDate","QuestionLinearScale","QuestionColor","QuestionRanking","SetWindowTitle","formTitle"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,16,17,18,19,21,22,26,27,28,29,33,36,37,38,39,40,41,42,43,44,45,46,54,55,56,57]}