{"version":3,"file":"index.js","sources":["../../vite/modulepreload-polyfill","../../plugin-vue:export-helper","../../src/components/Form/FormHeaderSteps.vue","../../src/components/Form/FormFooter.vue","../../src/components/Steps/StepOne.vue","../../../../../static/apps/grundrisse/assets/images/previews/2d/nordpfeil.png","../../../../../static/apps/grundrisse/assets/images/previews/2d/massketten.png","../../src/components/Steps/StepTwo.vue","../../src/utils/modelWrapper.js","../../src/components/Common/HelpToolTip.vue","../../src/components/FormFields/FTextField.vue","../../src/components/FormFields/FSelect.vue","../../src/components/FormFields/FCheckbox.vue","../../src/data/select__options.js","../../src/data/radio__options.js","../../src/data/tooltip__messages.js","../../src/components/Steps/StepThree.vue","../../src/components/Steps/StepFour.vue","../../src/App.vue","../../src/router/index.js","../../src/data/steps.js","../../src/store/modules/steps.js","../../src/store/index.js","../../src/main.js"],"sourcesContent":["const p = function polyfill() {\n    const relList = document.createElement('link').relList;\n    if (relList && relList.supports && relList.supports('modulepreload')) {\n        return;\n    }\n    for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n        processPreload(link);\n    }\n    new MutationObserver((mutations) => {\n        for (const mutation of mutations) {\n            if (mutation.type !== 'childList') {\n                continue;\n            }\n            for (const node of mutation.addedNodes) {\n                if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n                    processPreload(node);\n            }\n        }\n    }).observe(document, { childList: true, subtree: true });\n    function getFetchOpts(script) {\n        const fetchOpts = {};\n        if (script.integrity)\n            fetchOpts.integrity = script.integrity;\n        if (script.referrerpolicy)\n            fetchOpts.referrerPolicy = script.referrerpolicy;\n        if (script.crossorigin === 'use-credentials')\n            fetchOpts.credentials = 'include';\n        else if (script.crossorigin === 'anonymous')\n            fetchOpts.credentials = 'omit';\n        else\n            fetchOpts.credentials = 'same-origin';\n        return fetchOpts;\n    }\n    function processPreload(link) {\n        if (link.ep)\n            // ep marker = processed\n            return;\n        link.ep = true;\n        // prepopulate the load record\n        const fetchOpts = getFetchOpts(link);\n        fetch(link.href, fetchOpts);\n    }\n};__VITE_IS_MODERN__&&p();","\nexport default (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n}\n","<template>\n\t<nav aria-label=\"Progress\">\n\t\t<ol\n\t\t\tclass=\"border border-gray-200 rounded-md divide-y divide-gray-200 md:flex md:divide-y-0 progress-nav\"\n\t\t>\n\t\t\t<li\n\t\t\t\tv-for=\"(header, headerIdx) in steps\"\n\t\t\t\t:key=\"header.name\"\n\t\t\t\tclass=\"relative md:flex-1 md:flex justify-center transition-all duration-75 transform ease-in-out\"\n\t\t\t\t:class=\"{ current: header.status === 'current' }\"\n\t\t\t>\n\t\t\t\t<a\n\t\t\t\t\tv-if=\"header.status === 'complete'\"\n\t\t\t\t\t:href=\"header.href\"\n\t\t\t\t\tclass=\"group flex md:justify-center items-center w-full\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"px-6 py-4 flex items-center text-sm font-medium\">\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"flex-shrink-0 w-10 h-10 flex items-center justify-center bg-brand rounded-full group-hover:bg-secondary\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CheckIcon class=\"w-6 h-6 text-white\" aria-hidden=\"true\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"ml-4 text-sm font-medium text-brand group-hover:text-secondary\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ header.name }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t</a>\n\t\t\t\t<a\n\t\t\t\t\tv-else-if=\"header.status === 'current'\"\n\t\t\t\t\t:href=\"header.href\"\n\t\t\t\t\tclass=\"px-6 py-4 flex items-center text-sm font-medium group\"\n\t\t\t\t\taria-current=\"header\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"flex-shrink-0 w-10 h-10 flex items-center justify-center border-2 border-gray-100 group-hover:bg-white group-hover:border-0 rounded-full\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"text-gray-100 group-hover:text-secondary\">\n\t\t\t\t\t\t\t{{ header.id }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"ml-4 text-sm font-semibold text-white animate-pulse\">\n\t\t\t\t\t\t{{ header.name }}\n\t\t\t\t\t</span>\n\t\t\t\t</a>\n\t\t\t\t<a v-else :href=\"header.href\" class=\"group flex items-center\">\n\t\t\t\t\t<span class=\"px-6 py-4 flex items-center text-sm font-medium\">\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"flex-shrink-0 w-10 h-10 flex items-center justify-center border-2 border-gray-300 rounded-full group-hover:border-gray-400\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-gray-500 group-hover:text-gray-900\">\n\t\t\t\t\t\t\t\t{{ header.id }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"ml-4 text-sm font-medium text-gray-500 group-hover:text-gray-900\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ header.name }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t</a>\n\t\t\t\t<template v-if=\"headerIdx !== steps.length - 1\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hidden md:block absolute top-0 right-0 h-full w-5 -mr-3\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclass=\"h-full w-full text-gray-300\"\n\t\t\t\t\t\t\tviewBox=\"0 0 22 80\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M0 -2L20 40L0 82\"\n\t\t\t\t\t\t\t\tvector-effect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\tstroke=\"currentcolor\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</li>\n\t\t</ol>\n\t</nav>\n</template>\n\n<script>\nimport { CheckIcon } from '@heroicons/vue/solid'\n\nexport default {\n\tcomponents: {\n\t\tCheckIcon,\n\t},\n\tprops: {\n\t\tsteps: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\treturn {}\n\t},\n}\n</script>\n\n<style>\n.progress-nav {\n\toverflow: hidden;\n}\n.progress-nav li.current:first-child:before {\n\tpadding-left: 550px;\n\tright: 0;\n\tleft: auto !important;\n}\n.progress-nav li.current:first-child:after {\n\tpadding-left: 550px;\n\tright: 0;\n\tleft: auto !important;\n}\n\n.progress-nav li.current:last-child:after,\n.progress-nav li.current:last-child:before {\n\twidth: 110%;\n}\n.progress-nav li.current:before,\n.progress-nav li.current:after {\n\tcontent: '';\n\tposition: absolute;\n\ttransition: background 0.8s;\n\tz-index: -1;\n}\n.progress-nav li.current:before {\n\t@apply bg-brand;\n\theight: 50%;\n\twidth: 100%;\n\ttop: 0;\n\tleft: 0;\n\ttransform: none;\n}\n.progress-nav li.current:after {\n\t@apply bg-brand;\n\theight: 50%;\n\twidth: 100%;\n\ttop: 50%;\n\tleft: 0;\n\ttransform: none;\n}\n\n@media (min-width: 768px) {\n\t.progress-nav li.current:before {\n\t\ttransform: skew(25deg);\n\t}\n\t.progress-nav li.current:after {\n\t\ttransform: skew(-25deg);\n\t}\n}\n</style>\n","<template>\n\t<div\n\t\tv-if=\"currentStep.step !== 5\"\n\t\tclass=\"flex\"\n\t\t:class=\"!isFirstStep ? 'justify-between' : 'justify-end'\"\n\t>\n\t\t<button\n\t\t\tv-if=\"!isFirstStep\"\n\t\t\ttype=\"button\"\n\t\t\tclass=\"bg-white py-2 px-4 inline-flex justify-center align-center rounded-md shadow-sm text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none\"\n\t\t\t@click=\"$emit('previous')\"\n\t\t>\n\t\t\t<ArrowCircleLeftIcon class=\"h-5 w-5 mr-2\" aria-hidden=\"true\" />\n\t\t\tZurück\n\t\t</button>\n\t\t<button\n\t\t\ttype=\"submit\"\n\t\t\tclass=\"ml-3 inline-flex justify-center align-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-accent hover:bg-yellow-600 focus:outline-none\"\n\t\t\t@click=\"$emit('next')\"\n\t\t>\n\t\t\t{{\n\t\t\t\tcurrentStep.step === 4\n\t\t\t\t\t? 'Jetzt kostenpflichtig zu obigem Preis bestellen'\n\t\t\t\t\t: 'Weiter'\n\t\t\t}}\n\t\t\t<ArrowCircleRightIcon class=\"h-5 w-5 ml-2\" aria-hidden=\"true\" />\n\t\t</button>\n\t</div>\n</template>\n\n<script>\nimport { ArrowCircleLeftIcon, ArrowCircleRightIcon } from '@heroicons/vue/solid'\nexport default {\n\tcomponents: {\n\t\tArrowCircleLeftIcon,\n\t\tArrowCircleRightIcon,\n\t},\n\tprops: {\n\t\tisFirstStep: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tcurrentStep: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\temits: ['next', 'previous'],\n\tsetup() {\n\t\treturn {}\n\t},\n}\n</script>\n\n<style scoped></style>\n","<template>\n\t<RadioGroup v-model=\"floorplanType\">\n\t\t<RadioGroupLabel class=\"sr-only\">Floorplan Type</RadioGroupLabel>\n\t\t<div class=\"grid grid-cols-2 gap-6\">\n\t\t\t<RadioGroupOption\n\t\t\t\tas=\"template\"\n\t\t\t\tv-for=\"type in types\"\n\t\t\t\t:key=\"type.name\"\n\t\t\t\t:value=\"type.name\"\n\t\t\t\tv-slot=\"{ active, checked }\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\tclass=\"col-span-1 relative flex flex-col cursor-pointer focus:outline-none group\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\tactive\n\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t\tchecked ? 'scale-105 shadow-lg ring-2 ring-secondary' : '',\n\t\t\t\t\t\t]\"\n\t\t\t\t\t\tclass=\"flex items-center justify-between w-full rounded-lg shadow-md overflow-hidden py-4 h-[280px] lg:h-[360px] group-hover:shadow-lg transition ease-in-out\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<img :src=\"type.image\" :alt=\"type.name\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<RadioGroupLabel\n\t\t\t\t\tas=\"p\"\n\t\t\t\t\t:class=\"checked ? 'text-black' : 'text-gray-400'\"\n\t\t\t\t\tclass=\"font-medium text-center mt-3 transition\"\n\t\t\t\t\t>\n                        <span v-if=\"type.name === '3D'\">3D (39€)</span>\n                        <span v-if=\"type.name === '2D'\">2D (29€)</span>\n\t\t\t\t\t</RadioGroupLabel>\n\t\t\t\t</div>\n\t\t\t</RadioGroupOption>\n\t\t</div>\n\t</RadioGroup>\n</template>\n\n<script>\nimport {\n\tRadioGroup,\n\tRadioGroupDescription,\n\tRadioGroupLabel,\n\tRadioGroupOption\n} from '@headlessui/vue'\n\nimport {\n\tuseForm,\n\tuseField,\n\tuseIsFormValid,\n\tuseIsFormDirty,\n\tuseFormValues,\n\tuseValidateForm,\n} from 'vee-validate'\nimport * as yup from 'yup'\n\nimport { ref, computed, watch, onMounted } from 'vue'\nimport { useStore } from 'vuex'\n\nconst types = [\n  {\n    name: '2D',\n\timage: '/static/apps/grundrisse/assets/images/2d-preview.png',\n  },\n  {\n    name: '3D',\n\timage: '/static/apps/grundrisse/assets/images/3d-preview.png',\n  },\n]\n\nexport default {\n\tcomponents: {\n\t\tRadioGroup,\n\t\tRadioGroupDescription,\n\t\tRadioGroupLabel,\n\t\tRadioGroupOption\n\t},\n\temits: ['changed'],\n\tsetup(_, { emit }) {\n\t\tconst store = useStore()\n\n\t\tconst schema = computed(() => {\n\t\t\treturn yup.object({\n\t\t\t\tfloorplanType: yup.string().required()\n\t\t\t})\n\t\t})\n\n\n\n\t\tconst { errors, setValues } = useForm({\n\t\t\tvalidationSchema: schema,\n\t\t})\n\n\t\tconst isValid = useIsFormValid()\n\t\tconst isDirty = useIsFormDirty()\n\t\tconst formValues = useFormValues()\n\t\tconst validate = useValidateForm()\n\n\t\tconst { value: floorplanType } = useField('floorplanType')\n\n\t\tconst formDataValues = computed(() => {\n\t\t\treturn { ...store.state.steps.formData }\n\t\t})\n\n\t\tconst formData = computed(() => {\n\t\t\treturn {\n\t\t\t\tformValues: { ...formValues.value },\n\t\t\t\tisValid: isValid.value,\n\t\t\t\tisDirty: isDirty.value,\n\t\t\t\tvalidate: validate,\n\t\t\t}\n\t\t})\n\n\t\tonMounted(() => {\n\t\t\tsetValues(formDataValues.value)\n\n\t\t\tif (!floorplanType.value) {\n\t\t\t\tfloorplanType.value = ref(types[0].name)\n\t\t\t}\n\t\t})\n\n\t\twatch(\n\t\t\t() => formData,\n\t\t\t(data) => {\n\t\t\t\temit('changed', data)\n\t\t\t},\n\t\t\t{ deep: true }\n\t\t)\n\n\t\treturn {\n\t\t\tformData,\n\t\t\tfloorplanType,\n\t\t\ttypes,\n\t\t\terrors\n\t\t}\n\t},\n}\n</script>\n","export default \"/static/apps/grundrisse/assets/images/previews/2d/nordpfeil.png\"","export default \"/static/apps/grundrisse/assets/images/previews/2d/massketten.png\"","<template>\n  <div>\n    <div class=\"grid grid-cols-12 gap-6\">\n      <!-- Live Preview -->\n      <div\n        class=\"shadow rounded flex items-center relative justify-center col-span-12 lg:col-span-9 bg-white p-4\"\n        style=\"min-height: 300px\"\n      >\n        <img\n          v-if=\"floorplanType === '3D'\"\n          :src=\"`/static/apps/grundrisse/assets/images/previews/3d/layout0${EinrichtungOption ? EinrichtungOption.id : 'layout01'}_${BodenbelagOption ? BodenbelagOption.id : '1'}.jpg`\"\n          alt=\"\"\n          class=\"w-full\"\n        />\n        <img\n          v-show=\"floorplanType === '2D' && Nordpfeil\"\n          src=\"/static/apps/grundrisse/assets/images/previews/2d/nordpfeil.png\"\n          alt=\"Nordpfeil\"\n          class=\"absolute top-4 right-4\"\n        />\n        <img\n          v-show=\"floorplanType === '2D' && Massketten\"\n          src=\"/static/apps/grundrisse/assets/images/previews/2d/massketten.png\"\n          alt=\"Maßketten\"\n          class=\"absolute top-0\"\n        />\n        <img\n          v-if=\"floorplanType === '2D'\"\n          :src=\"`/static/apps/grundrisse/assets/images/previews/2d/preview${Farbe ? '-color' : ''}${\n            Einrichtung ? '-furniture' : ''\n          }.png`\"\n          alt=\"\"\n          class=\"w-full\"\n        />\n      </div>\n\n      <!-- Options -->\n      <div class=\"flex flex-col col-span-12 lg:col-span-3\">\n        <!-- Einrichtung -->\n        <div class=\"mb-4\">\n          <SwitchGroup>\n            <div\n              class=\"w-full flex flex-row justify-between items-center text-lg\"\n              v-show=\"floorplanType === '2D'\"\n            >\n              <SwitchLabel>Einrichtung</SwitchLabel>\n              <Switch\n                v-model=\"Einrichtung\"\n                class=\"focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75 flex items-center\"\n              >\n                <span class=\"sr-only\">Einrichtung</span>\n                <span\n                  v-if=\"floorplanType === '3D'\"\n                  class=\"text-sm mr-2\"\n                  :class=\"!Einrichtung ? 'text-secondary' : 'text-gray-400'\"\n                  >Ohne</span\n                >\n                <span\n                  class=\"w-[56px] border-2 border-transparent rounded-full transition colors relative inline-flex flex-shrink-0 h-[24px] ease-in-out duration-200\"\n                  :class=\"Einrichtung ? 'bg-secondary' : 'bg-gray-400'\"\n                >\n                  <span\n                    aria-hidden=\"true\"\n                    :class=\"Einrichtung ? 'translate-x-8' : 'translate-x-0'\"\n                    class=\"pointer-events-none inline-block h-[20px] w-[20px] rounded-full bg-white shadow-lg transform ring-0 transition ease-in-out duration-200\"\n                  />\n                </span>\n                <span\n                  v-if=\"floorplanType === '3D'\"\n                  class=\"text-sm ml-2\"\n                  :class=\"Einrichtung ? 'text-secondary' : 'text-gray-400'\"\n                  >Mit</span\n                >\n              </Switch>\n            </div>\n          </SwitchGroup>\n\n          <span class=\"block text-lg mb-2\">Einrichtungsstil</span>\n          <RadioGroup\n            v-model=\"EinrichtungOption\"\n            v-if=\"floorplanType === '3D'\"\n            :disabled=\"!Einrichtung\"\n          >\n            <RadioGroupLabel class=\"sr-only\">Wählen Sie Einrichtung</RadioGroupLabel>\n            <div\n              class=\"grid grid-cols-3 gap-6 mt-2\"\n              :class=\"Einrichtung ? '' : 'opacity-50 pointer-events-none'\"\n            >\n              <RadioGroupOption\n                as=\"template\"\n                v-for=\"fill in fills\"\n                :key=\"fill.name\"\n                :value=\"fill\"\n                v-slot=\"{ checked }\"\n              >\n                <div class=\"flex flex-col cursor-pointer focus:outline-none\">\n                  <div\n                    class=\"flex items-center justify-between w-full rounded-lg shadow-md h-[80px] overflow-hidden hover:scale-105 transition ease-in-out hover:shadow-lg\"\n                    :class=\"[checked ? 'scale-105 ring-2 ring-secondary' : '']\"\n                  >\n                    <img\n                      :src=\"'/static/apps/grundrisse/assets/images/furniture/' + fill.id + '.png'\"\n                      :alt=\"fill.name\"\n                      class=\"h-full object-contain\"\n                    />\n                  </div>\n                  <span\n                    class=\"text-center mt-1 text-gray-600\"\n                    :class=\"checked ? 'text-black' : 'text-gray-600'\"\n                  >\n                    {{ fill.name }}\n                  </span>\n                </div>\n              </RadioGroupOption>\n            </div>\n          </RadioGroup>\n        </div>\n\n        <!-- Bodenbelag -->\n        <div v-if=\"floorplanType === '3D'\" class=\"mt-6\">\n          <span class=\"block text-lg mb-2\">Bodenbelag</span>\n\n          <RadioGroup v-model=\"BodenbelagOption\">\n            <RadioGroupLabel class=\"sr-only\">Wählen Sie Bodenbelag</RadioGroupLabel>\n            <div class=\"grid grid-cols-3 gap-6\">\n              <RadioGroupOption\n                as=\"template\"\n                v-for=\"floor in floors\"\n                :key=\"floor.name\"\n                :value=\"floor\"\n                v-slot=\"{ checked }\"\n              >\n                <div class=\"flex flex-col cursor-pointer focus:outline-none\">\n                  <div\n                    class=\"flex items-center justify-between w-full rounded-lg shadow-md h-[80px] overflow-hidden hover:scale-105 transition ease-in-out hover:shadow-lg\"\n                    :class=\"[\n                      checked\n                        ? 'scale-105 ring-2 ring-secondary'\n                        : 'bg-white ',\n                    ]\"\n                  >\n                    <img\n                      :src=\"'/static/apps/grundrisse/assets/images/floorings/' + floor.id + '.png'\"\n                      :alt=\"floor.name\"\n                      class=\"object-cover w-full h-full\"\n                    />\n                  </div>\n                  <span\n                    class=\"text-center mt-1 text-gray-600\"\n                    :class=\"checked ? 'text-black' : 'text-gray-600'\"\n                  >\n                    {{ floor.name }}\n                  </span>\n                </div>\n              </RadioGroupOption>\n            </div>\n          </RadioGroup>\n        </div>\n\n        <!-- Auflösung -->\n        <div v-if=\"floorplanType === '3D'\" class=\"mt-6\">\n          <SwitchGroup>\n            <div\n              class=\"w-full flex flex-row justify-between items-center text-lg mb-4\"\n            >\n              <SwitchLabel>Auflösung</SwitchLabel>\n              <Switch\n                v-model=\"Auflosung\"\n                class=\"focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75 flex items-center\"\n              >\n                <span class=\"sr-only\">Auflösung</span>\n                <span\n                  class=\"text-sm mr-2\"\n                  :class=\"!Auflosung ? 'text-secondary' : 'text-gray-400'\"\n                  >1080p</span\n                >\n                <span\n                  class=\"w-[56px] border-2 border-transparent rounded-full transition colors relative inline-flex flex-shrink-0 h-[24px] ease-in-out duration-200\"\n                  :class=\"Auflosung ? 'bg-secondary' : 'bg-secondary'\"\n                >\n                  <span\n                    aria-hidden=\"true\"\n                    :class=\"Auflosung ? 'translate-x-8' : 'translate-x-0'\"\n                    class=\"pointer-events-none inline-block h-[20px] w-[20px] rounded-full bg-white shadow-lg transform ring-0 transition ease-in-out duration-200\"\n                  />\n                </span>\n                <span\n                  class=\"text-sm ml-2\"\n                  :class=\"Auflosung ? 'text-secondary' : 'text-gray-400'\"\n                  >2160p</span\n                >\n              </Switch>\n            </div>\n          </SwitchGroup>\n        </div>\n\n        <!-- Nordpfeil -->\n        <SwitchGroup v-if=\"floorplanType === '2D'\">\n          <div\n            class=\"w-full flex flex-row justify-between items-center text-lg mb-4\"\n          >\n            <SwitchLabel>Nordpfeil</SwitchLabel>\n            <Switch\n              v-model=\"Nordpfeil\"\n              :class=\"Nordpfeil ? 'bg-secondary' : 'bg-gray-400'\"\n              class=\"relative inline-flex flex-shrink-0 h-[24px] w-[56px] border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75\"\n            >\n              <span class=\"sr-only\">Nordpfeil</span>\n              <span\n                aria-hidden=\"true\"\n                :class=\"Nordpfeil ? 'translate-x-8' : 'translate-x-0'\"\n                class=\"pointer-events-none inline-block h-[20px] w-[20px] rounded-full bg-white shadow-lg transform ring-0 transition ease-in-out duration-200\"\n              />\n            </Switch>\n          </div>\n        </SwitchGroup>\n\n        <!-- Maßketten -->\n        <SwitchGroup v-if=\"floorplanType === '2D'\">\n          <div\n            class=\"w-full flex flex-row justify-between items-center text-lg mb-4\"\n          >\n            <SwitchLabel>Maßketten</SwitchLabel>\n            <Switch\n              v-model=\"Massketten\"\n              :class=\"Massketten ? 'bg-secondary' : 'bg-gray-400'\"\n              class=\"relative inline-flex flex-shrink-0 h-[24px] w-[56px] border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75\"\n            >\n              <span class=\"sr-only\">Maßketten</span>\n              <span\n                aria-hidden=\"true\"\n                :class=\"Massketten ? 'translate-x-8' : 'translate-x-0'\"\n                class=\"pointer-events-none inline-block h-[20px] w-[20px] rounded-full bg-white shadow-lg transform ring-0 transition ease-in-out duration-200\"\n              />\n            </Switch>\n          </div>\n        </SwitchGroup>\n\n        <!-- Farbe -->\n        <SwitchGroup v-if=\"floorplanType === '2D'\">\n          <div\n            class=\"w-full flex flex-row justify-between items-center text-lg mb-4\"\n          >\n            <SwitchLabel>Farbe</SwitchLabel>\n            <Switch\n              v-model=\"Farbe\"\n              :class=\"Farbe ? 'bg-secondary' : 'bg-gray-400'\"\n              class=\"relative inline-flex flex-shrink-0 h-[24px] w-[56px] border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-opacity-75\"\n            >\n              <span class=\"sr-only\">Farbe</span>\n              <span\n                aria-hidden=\"true\"\n                :class=\"Farbe ? 'translate-x-8' : 'translate-x-0'\"\n                class=\"pointer-events-none inline-block h-[20px] w-[20px] rounded-full bg-white shadow-lg transform ring-0 transition ease-in-out duration-200\"\n              />\n            </Switch>\n          </div>\n        </SwitchGroup>\n        <div class=\"w-full text-right mt-auto text-gray-600\">\n          Preis pro Grundriss\n          <span class=\"font-bold text-lg text-black\">{{\n            formatter.format(unitPrice)\n          }}</span>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"mt-12 flex items-center mb-4\">\n      <h2 class=\"text-xl font-medium\">Laden Sie Ihre Grundrisse hoch</h2>\n      <span class=\"text-sm text-gray-400 ml-2\">(PNG, PDF, JPEG)</span>\n    </div>\n\n    <!-- FILE UPLOAD -->\n    <div\n      @drop=\"handleFileDrop\"\n      @dragover=\"handleDragOver\"\n      @dragenter=\"handleDragEnter\"\n      @dragleave=\"handleDragEnd\"\n      class=\"relative\"\n    >\n      <div\n        v-if=\"dragOverlayShown\"\n        class=\"absolute top-0 flex flex-col text-center items-center py-16 w-full h-full bg-secondary-60 bg-opacity-90 rounded\"\n      >\n        <UploadIcon class=\"w-[40px] text-white mb-4 animate-bounce\" />\n        <span class=\"text-lg font-medium text-white\">Dateien per Drag & Drop hochladen</span>\n      </div>\n      <div\n        class=\"py-8 border-dashed border-2 border-gray-300 rounded mb-4 text-center flex flex-col items-center\"\n        :class=\"errors.uploads && 'border-red-500'\"\n      >\n        <PhotographIcon class=\"w-[40px] text-gray-400 mb-4\" />\n        <div>\n          <div class=\"text-lg font-medium mb-6 text-gray-600\">\n\t\t\t\t\t\tLegen Sie Ihre Dateien hier ab oder klicken Sie auf \"Grundriss hinzufügen\"\n          </div>\n          <button\n            @click=\"handleClickUpload\"\n            class=\"bg-accent px-6 py-2 rounded shadow text-white\"\n          >\n\t\t\t\t\t\tGrundriss hinzufügen\n          </button>\n          <input\n            type=\"file\"\n            @change=\"onFileChange\"\n            multiple\n            accept=\"image/png, image/jpeg, application/pdf\"\n            class=\"hidden\"\n            ref=\"fileInput\"\n          />\n        </div>\n      </div>\n      <canvas ref=\"renderCanvas\" class=\"hidden\" />\n      <div\n        v-for=\"(upload, uploadId) in uploads\"\n        :key=\"uploadId\"\n        class=\"px-2 py-2 shadow rounded items-center mb-2\"\n      >\n        <div class=\"flex items-center\">\n          <img\n            class=\"h-[128px] w-[128px] mr-4 object-cover rounded\"\n            :src=\"upload.image\"\n            :alt=\"upload.title + ' preview'\"\n          />\n          <span class=\"text-ellipsis overflow-hidden\">{{ upload.title }}</span>\n          <div class=\"ml-auto text-sm flex flex-row\">\n            <a\n              @click=\"addDescription(uploadId)\"\n              v-if=\"upload.description === null\"\n              class=\"cursor-pointer mr-4 hover:underline flex items-center text-secondary\"\n              ><AnnotationIcon class=\"w-[18px] mr-1\" />Änderungswünsche hinzufügen (zzgl. 8€)</a\n            >\n            <a\n              @click=\"removeDescription(uploadId)\"\n              v-if=\"upload.description !== null\"\n              class=\"cursor-pointer mr-4 hover:underline flex items-center text-secondary\"\n              ><AnnotationIcon class=\"w-[18px] mr-1\" />Änderungswünsche entfernen</a\n            >\n            <a\n              @click=\"removeFloorplan(uploadId)\"\n              class=\"cursor-pointer flex items-center text-gray-600 hover:text-red-700 hover:underline\"\n              ><XIcon class=\"w-[18px] mr-1\" />Datei entfernen</a\n            >\n          </div>\n        </div>\n        <div\n          v-if=\"upload.description !== null\"\n          class=\"mt-4 flex flex-col text-center\"\n        >\n          <textarea\n            v-model=\"upload.description\"\n            class=\"rounded border border-gray-400\"\n            placeholder='Beschreiben Sie hier (kostenpflichtige) Änderungswünsche, bspw. ̇\"Wohnzimmertür um 1m nach links verschieben\", \"Küchentür öffnet anders herum\". Alternativ können Sie Änderungen auch (kostenfrei) in den bestehenden Grundriss einzeichnen und diesen erneut hochladen.'\n          />\n        </div>\n      </div>\n\n      <!-- Uploading file skeleton -->\n      <div\n        v-for=\"(item, itemId) in filesUploading\"\n        :key=\"itemId\"\n        class=\"px-6 py-6 shadow rounded items-center mb-2 flex\"\n      >\n        <svg\n          class=\"animate-spin -ml-1 mr-3 h-5 w-5 text-brand\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          fill=\"none\"\n          viewBox=\"0 0 24 24\"\n        >\n          <circle\n            class=\"opacity-25\"\n            cx=\"12\"\n            cy=\"12\"\n            r=\"10\"\n            stroke=\"currentColor\"\n            stroke-width=\"4\"\n          ></circle>\n          <path\n            class=\"opacity-75\"\n            fill=\"currentColor\"\n            d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n          ></path>\n        </svg>\n        Uploading {{ item }}\n      </div>\n\n      <div v-show=\"errors.uploads\" class=\"text-center text-red-500\">\n        {{ errors.uploads }}\n      </div>\n    </div>\n\n    <div\n      class=\"flex flex-col pt-5 border-t mt-5 border-top-gray-600 text-right\"\n    >\n      <div class=\"text-right ml-auto flex\">\n        <label for=\"floorplan-count\" class=\"mr-3\">\n          <span class=\"font-semibold\" :class=\"{ 'text-red-500': errors.units }\"\n            >Anzahl Grundrisse</span\n          >\n          <p class=\"text-sm\">\n            1 Grundriss entspricht einer Etage, einer Wohneinheit und einer\n            Fläche von max. 200m²\n          </p>\n        </label>\n        <div class=\"relative\">\n          <input\n            type=\"number\"\n            class=\"w-[80px] bg-yellow-150 mt-1 block border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:ring-1 focus:outline-none focus:ring-indigo-500 focus:border-secondary sm:text-sm\"\n            min=\"0\"\n            v-model=\"units\"\n            name=\"floorplan-count\"\n            :class=\"{ 'border-red-400 pr-8': errors.units }\"\n          />\n          <div\n            v-if=\"errors.units\"\n            class=\"absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none\"\n          >\n            <ExclamationCircleIcon\n              class=\"h-5 w-5 text-red-400\"\n              aria-hidden=\"true\"\n            />\n          </div>\n        </div>\n      </div>\n      <span v-show=\"errors.units\" class=\"text-red-500 mt-1\">{{\n        errors.units\n      }}</span>\n      <span class=\"text-2xl font-semibold mt-3\">{{\n        formatter.format(overallPrice)\n      }}</span>\n    </div>\n  </div>\n</template>\n\n<script>\nimport {\n  useForm,\n  useField,\n  useIsFormValid,\n  useIsFormDirty,\n  useFormValues,\n  useValidateForm,\n} from \"vee-validate\";\nimport * as yup from \"yup\";\n\nimport * as PDFJS from \"pdfjs-dist\";\nPDFJS.GlobalWorkerOptions.workerSrc = \"/static/apps/grundrisse/pdf.worker.js\";\n\nimport {\n  Switch,\n  SwitchGroup,\n  SwitchLabel,\n  RadioGroup,\n  RadioGroupDescription,\n  RadioGroupLabel,\n  RadioGroupOption,\n} from \"@headlessui/vue\";\nimport {\n  XIcon,\n  PhotographIcon,\n  AnnotationIcon,\n  CheckCircleIcon,\n  UploadIcon,\n  ExclamationCircleIcon,\n} from \"@heroicons/vue/outline\";\n\nimport { ref, computed, watch, onMounted } from \"vue\";\nimport { useStore } from \"vuex\";\nimport axios from \"axios\";\n\nconst API_URL_UPLOAD = import.meta.env.VITE_API_URL_UPLOAD;\n\nconst fills = [\n  {\n    name: \"1\",\n    id: \"1\",\n  },\n  {\n    name: \"2\",\n    id: \"2\",\n  },\n  {\n    name: \"3\",\n    id: \"3\",\n  },\n  {\n    name: \"4\",\n    id: \"4\",\n  },\n  {\n    name: \"5\",\n    id: \"5\",\n  },\n];\n\nconst floors = [\n  {\n    name: \"Parkett Hell\",\n    id: \"1\",\n  },\n  {\n    name: \"Parkett Dunkel\",\n    id: \"2\",\n  },\n  {\n    name: \"Parkett Eiche\",\n    id: \"5\",\n  },\n  {\n    name: \"Fliese Weiß\",\n    id: \"3\",\n  },\n  {\n    name: \"Fliese Grau\",\n    id: \"4\",\n  },\n];\n\nvar formatter = new Intl.NumberFormat(\"de-DE\", {\n  style: \"currency\",\n  currency: \"EUR\",\n});\n\nconst hasFiles = ({ dataTransfer: { types = [] } }) =>\n  types.indexOf(\"Files\") > -1;\n\n// This is used to help with dragover overlay display and hide events\nlet counter = 0;\n\nexport default {\n  components: {\n    Switch,\n    SwitchGroup,\n    SwitchLabel,\n    RadioGroup,\n    RadioGroupDescription,\n    RadioGroupLabel,\n    RadioGroupOption,\n    XIcon,\n    PhotographIcon,\n    AnnotationIcon,\n    CheckCircleIcon,\n    UploadIcon,\n    ExclamationCircleIcon,\n  },\n  emits: [\"changed\"],\n  methods: {\n    onFileChange(event) {\n      var files = event.target.files || event.dataTransfer.files;\n      if (!files.length) return;\n\n      for (const file of files) {\n        this.addFile(file);\n      }\n    },\n    async addFile(file) {\n      const tempFormData = new FormData();\n      tempFormData.append(\"file\", file);\n\n      this.filesUploading.push(file.name);\n\n      try {\n        const response = await axios.post(`${API_URL_UPLOAD}`, tempFormData);\n\n        if (response.status === 200) {\n          if (file.type === \"application/pdf\") {\n            const loadingTask = PDFJS.getDocument(URL.createObjectURL(file));\n\n            const pdfFile = await loadingTask.promise;\n\n            const context = this.$refs.renderCanvas.getContext(\"2d\");\n            const totalPages = pdfFile.numPages;\n\n            for (let pageNumber = 1; pageNumber <= totalPages; pageNumber++) {\n              try {\n                const page = await pdfFile.getPage(pageNumber);\n\n                const viewport = page.getViewport({ scale: 1 });\n                this.$refs.renderCanvas.height = viewport.height;\n                this.$refs.renderCanvas.width = viewport.width;\n\n                const renderContext = {\n                  canvasContext: context,\n                  viewport: viewport,\n                };\n\n                const renderTask = page.render(renderContext);\n                await renderTask.promise;\n\n                this.uploads.push({\n                  filename: response.data.filename,\n                  title: `${file.name} (Seite ${pageNumber})`,\n                  localFilename: file.name,\n                  pageNumber: pageNumber,\n                  image: this.$refs.renderCanvas.toDataURL(\"image/png\"),\n                  description: null,\n                });\n              } catch (pdfErr) {\n                console.error(\"Error getting PDF page:\", pdfErr);\n              }\n            }\n          } else {\n            this.uploads.push({\n              filename: response.data.filename,\n              title: file.name,\n              localFilename: file.name,\n              image: URL.createObjectURL(file),\n              description: null,\n            });\n          }\n        }\n      } catch (err) {\n        console.error(\"Error uploading file\", err);\n      } finally {\n        const itemIndex = this.filesUploading.indexOf(file.name);\n        if (itemIndex > -1) this.filesUploading.splice(itemIndex, 1);\n      }\n    },\n    removeFloorplan(index) {\n      this.uploads.splice(index, 1);\n\n      if (this.uploads.length === 0) {\n        this.$refs.fileInput.value = null;\n      }\n    },\n    addDescription(index) {\n      this.uploads[index].description = \"\";\n    },\n    removeDescription(index) {\n      this.uploads[index].description = null;\n\t\t\tthis.descriptions--\n    },\n    handleFileDrop(event) {\n      event.preventDefault();\n      for (const file of event.dataTransfer.files) {\n        this.addFile(file);\n      }\n      this.dragOverlayShown = false;\n      counter = 0;\n    },\n    handleDragOver(event) {\n      if (hasFiles(event)) {\n        event.preventDefault();\n      }\n    },\n    handleDragEnter(event) {\n      event.preventDefault();\n      if (!hasFiles(event)) {\n        return;\n      }\n\n      ++counter;\n      this.dragOverlayShown = true;\n    },\n    handleDragEnd() {\n      --counter;\n      if (counter === 0) this.dragOverlayShown = false;\n    },\n    handleClickUpload() {\n      this.$refs.fileInput.click();\n    },\n    enableFurniture() {\n      this.Einrichtung.value = ref(true);\n    },\n  },\n  setup(_, { emit }) {\n    const dragOverlayShown = ref(false);\n\n    const store = useStore();\n\n    const schema = computed(() => {\n      return yup.object({\n        Einrichtung: yup.boolean(),\n        Nordpfeil: yup.string(),\n        Massketten: yup.string(),\n        Farbe: yup.string(),\n        uploads: yup.array().min(1, \"Bitte laden Sie einen Grundriss hoch\"),\n        units: yup\n          .number()\n          .min(1, \"Bitte geben Sie die Anzahl der zu zeichnenden Grundrisse an.\"),\n      });\n    });\n\n    const { errors, setValues } = useForm({\n      validationSchema: schema,\n      initialValues: {\n        units: 0,\n\t\t\t\tdescriptions: 0,\n        uploads: [],\n\t\t\t\tEinrichtung: true,\n\t\t\t\tBodenbelag: false,\n\t\t\t\tAuflosung: false,\n\t\t\t\tMassketten: false,\n\t\t\t\tNordpfeil: false,\n\t\t\t\tFarbe: false,\n        unitPrice: 0,\n        overallPrice: 0,\n      },\n    });\n\n    const isValid = useIsFormValid();\n    const isDirty = useIsFormDirty();\n    const formValues = useFormValues();\n    const validate = useValidateForm();\n\n    const { value: EinrichtungOption } = useField(\"EinrichtungOption\");\n    const { value: BodenbelagOption } = useField(\"BodenbelagOption\");\n    const { value: Einrichtung } = useField(\"Einrichtung\");\n    const { value: Nordpfeil } = useField(\"Nordpfeil\");\n    const { value: Massketten } = useField(\"Massketten\");\n    const { value: Farbe } = useField(\"Farbe\");\n    const { value: Bodenbelag } = useField(\"Bodenbelag\");\n    const { value: Auflosung } = useField(\"Auflosung\");\n    const { value: uploads } = useField(\"uploads\");\n    const { value: units } = useField(\"units\");\n    const { value: descriptions } = useField(\"descriptions\");\n    const { value: unitPrice } = useField(\"unitPrice\");\n    const { value: overallPrice } = useField(\"overallPrice\");\n\n    const formDataValues = computed(() => {\n      return { ...store.state.steps.formData };\n    });\n\n    const formData = computed(() => {\n      return {\n        formValues: { ...formValues.value },\n        isValid: isValid.value,\n        isDirty: isDirty.value,\n        validate: validate,\n      };\n    });\n\n    /* Selected = 2D or 3D, based on Step One selection */\n    const floorplanType = formDataValues.value.floorplanType;\n\n    /* Initialize array for UI when uploading files */\n    const filesUploading = ref([]);\n\n    /* On mount, set initial values */\n    onMounted(() => {\n      setValues(formDataValues.value);\n\n      if (!EinrichtungOption.value) {\n        EinrichtungOption.value = ref(fills[0]);\n      }\n\n      if (!BodenbelagOption.value) {\n        BodenbelagOption.value = ref(floors[0]);\n      }\n\n      if (unitPrice.value === 0) {\n        unitPrice.value = floorplanType === \"3D\" ? 39 : 29;\n      }\n    });\n\n    /* Form Changes */\n    watch(\n      () => formData,\n      (data) => {\n        emit(\"changed\", data);\n      },\n      { deep: true }\n    );\n\n    watch(\n      () => Auflosung.value,\n      (newValue) => {\n        /* If Auflosung is changed to 2160p, add additional price */\n        if (newValue === true) {\n          unitPrice.value = unitPrice.value + 10;\n        }\n\n        /* If Auflosung is changed to 1080p, remove additional price */\n        if (newValue === false) {\n          unitPrice.value = unitPrice.value - 10;\n        }\n      },\n      { deep: true }\n    );\n\n    const calculateNewPrice = () => {\n      overallPrice.value = units.value > 0 ? unitPrice.value * units.value + (descriptions.value * 8) : 0\n    };\n\n    watch(\n      () => Farbe.value,\n      (newValue) => {\n        /* If Farbe is changed to true, add additional price */\n        if (newValue === true) {\n          unitPrice.value = unitPrice.value + 0;\n        }\n\n        /* If Farbe is changed to false, remove additional price */\n        if (newValue === false) {\n          unitPrice.value = unitPrice.value - 0;\n        }\n      },\n      { deep: true }\n    );\n\n    watch(\n      () => uploads.value,\n      (newValue, oldValue) => {\n        /* If an upload object description property is not empty, increase the number of descriptions */\n        let descriptionCount = 0;\n        newValue.map((value, i) => {\n          if (value.description && value.description !== null && value.description !== \"\") {\n            descriptionCount++\n          }\n        })\n\n        descriptions.value = descriptionCount;\n      },\n      { deep: true }\n    )\n\n    watch(\n      () => [descriptions.value, units.value, unitPrice.value],\n      () => {\n        calculateNewPrice()\n      },\n      { deep: true }\n    );\n\n    return {\n      formDataValues,\n      errors,\n      formData,\n      Einrichtung,\n      Nordpfeil,\n      Massketten,\n      Farbe,\n      floorplanType,\n      EinrichtungOption,\n      fills,\n      floors,\n      Bodenbelag,\n      BodenbelagOption,\n      Auflosung,\n      uploads,\n      filesUploading,\n      unitPrice,\n      overallPrice,\n      units,\n      descriptions,\n      formatter,\n      dragOverlayShown,\n    };\n  },\n};\n</script>\n","import { computed } from 'vue'\n\nexport function useModelWrapper(props, emit, name = 'modelValue', type = null) {\n\treturn computed({\n\t\tget: () => props[name],\n\t\tset: (value) => {\n\t\t\tswitch (type) {\n\t\t\t\tcase null:\n\t\t\t\t\temit(`update:${name}`, value)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'object':\n\t\t\t\t\temit(`update:${name}`, value.value)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t},\n\t})\n}\n","<template>\n\t<button\n\t\tref=\"btnRef\"\n\t\tv-click-away=\"closeTooltip\"\n\t\ttype=\"button\"\n\t\tclass=\"inline-flex items-center rounded-full text-gray-300 focus:text-secondary hover:text-secondary focus:outline-none ease-linear transition-all duration-150\"\n\t>\n\t\t<QuestionMarkCircleIcon\n\t\t\tclass=\"h-5 w-5\"\n\t\t\taria-hidden=\"true\"\n\t\t\ttype=\"button\"\n\t\t\t@mouseenter=\"openTooltip()\"\n\t\t/>\n\t</button>\n\t<div\n\t\tref=\"tooltipRef\"\n\t\t:class=\"{ hidden: !tooltipShow, block: tooltipShow }\"\n\t\tclass=\"bg-white border border-gray-200 shadow-sm offset block z-10 font-normal leading-normal text-sm max-w-xs text-left no-underline break-words rounded-lg\"\n\t>\n\t\t<div>\n\t\t\t<div class=\"text-gray-500 p-3 text-xs\" v-html=\"tooltipMessage\"></div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { mixin as VueClickAway } from 'vue3-click-away'\nimport { ref } from 'vue'\nimport { createPopper } from '@popperjs/core'\nimport { QuestionMarkCircleIcon } from '@heroicons/vue/solid'\nexport default {\n\tcomponents: {\n\t\tQuestionMarkCircleIcon,\n\t},\n\tmixins: [VueClickAway],\n\tprops: {\n\t\ttooltipMessage: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tsetup() {\n\t\tlet tooltipShow = ref(false)\n\t\tconst btnRef = ref(null)\n\t\tconst tooltipRef = ref(null)\n\n\t\tfunction openTooltip() {\n\t\t\ttooltipShow.value = true\n\t\t\tcreatePopper(btnRef.value, tooltipRef.value, {\n\t\t\t\tplacement: 'bottom',\n\t\t\t})\n\t\t}\n\n\t\tfunction closeTooltip(event) {\n\t\t\ttooltipShow.value = false\n\t\t}\n\n\t\treturn {\n\t\t\ttooltipShow,\n\t\t\topenTooltip,\n\t\t\tcloseTooltip,\n\t\t\tbtnRef,\n\t\t\ttooltipRef,\n\t\t}\n\t},\n}\n</script>\n","<template>\n\t<label\n\t\t:for=\"name\"\n\t\tclass=\"flex align-center text-sm font-medium text-gray-700\"\n\t>\n\t\t{{ label }}\n\t\t<span v-if=\"tooltipMessage\" class=\"pl-3 inline-flex\">\n\t\t\t<help-tool-tip :tooltip-message=\"tooltipMessage\" />\n\t\t</span>\n\t</label>\n\t<div class=\"mt-1 relative rounded-md shadow-sm\">\n\t\t<span v-if=\"prefix\" class=\"absolute top-[9px] left-3 sm:text-sm text-gray-500 pointer-events-none\">{{prefix}}</span>\n\t\t<input\n\t\t\t:id=\"id\"\n\t\t\tv-model.number=\"inputValue\"\n\t\t\t:type=\"type\"\n\t\t\t:name=\"name\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:min=\"minimum\"\n\t\t\t:class=\"{ 'bg-yellow-150': required, 'border-red-400': errorMessage }\"\n\t\t\tclass=\"mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:ring-1 focus:outline-none focus:ring-indigo-500 focus:border-secondary sm:text-sm\"\n\t\t\t:style=\"prefixed\"\n\t\t\t:maxlength=\"maxlength\"\n\t\t/>\n\t\t<div\n\t\t\tv-if=\"errorMessage\"\n\t\t\tclass=\"absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none\"\n\t\t>\n\t\t\t<ExclamationCircleIcon class=\"h-5 w-5 text-red-400\" aria-hidden=\"true\" />\n\t\t</div>\n\t</div>\n\t<p v-show=\"errorMessage\" class=\"text-red-500 text-xs mt-1\">\n\t\t{{ errorMessage }}\n\t</p>\n</template>\n\n<script>\nimport { useModelWrapper } from '@/utils/modelWrapper'\nimport { ExclamationCircleIcon } from '@heroicons/vue/solid'\n\nimport HelpToolTip from '@/components/Common/HelpToolTip.vue'\n\nexport default {\n\tcomponents: {\n\t\tExclamationCircleIcon,\n\t\tHelpToolTip,\n\t},\n\tcomputed: {\n      prefixed () {\n        return this.prefix ? `padding-left: ${this.prefix.length + 2}ch` : '';\n      }\n    },\n\tprops: {\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: 'text',\n\t\t},\n\t\tminimum: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tmaxlength: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\tmodelValue: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\t\terrorMessage: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t\tdefault: false,\n\t\t},\n\t\ttooltipMessage: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tprefix: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: ''\n\t\t}\n\t},\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tinputValue: useModelWrapper(props, emit, 'modelValue'),\n\t\t}\n\t},\n}\n</script>\n","<template>\n\t<Listbox v-model=\"selected\" as=\"div\">\n\t\t<ListboxLabel class=\"text-sm font-medium text-gray-700 flex align-center\">\n\t\t\t{{ label }}\n\t\t\t<span v-if=\"tooltipMessage\" class=\"pl-3 inline-flex\">\n\t\t\t\t<help-tool-tip :tooltip-message=\"tooltipMessage\" />\n\t\t\t</span>\n\t\t</ListboxLabel>\n\t\t<div class=\"mt-1 relative flex\">\n\t\t\t<ListboxButton\n\t\t\t\t:disabled=\"isDisabled\"\n\t\t\t\tclass=\"bg-white relative w-full border border-gray-300 rounded-md shadow-sm pl-3 pr-10 py-2 text-left cursor-default focus:outline-none focus:ring-1 focus:ring-indigo-500 focus:border-secondary sm:text-sm\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'disabled:bg-gray-100': isDisabled,\n\t\t\t\t\t'bg-yellow-150': required,\n\t\t\t\t\t'border-red-400': errorMessage,\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<span v-if=\"selected\" class=\"block truncate\">{{ selected.name }}</span>\n\t\t\t\t<span\n\t\t\t\t\tv-else\n\t\t\t\t\tclass=\"text-gray-400 cursor-default font-normal block truncate select-none relative\"\n\t\t\t\t>\n\t\t\t\t\t{{ placeholder || `${label} auswählen` }}\n\t\t\t\t</span>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"errorMessage\"\n\t\t\t\t\tclass=\"absolute inset-y-0 right-4 pr-3 flex items-center pointer-events-none\"\n\t\t\t\t>\n\t\t\t\t\t<ExclamationCircleIcon\n\t\t\t\t\t\tclass=\"h-5 w-5 text-red-400\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"absolute inset-y-0 right-0 flex items-center pr-2 pointer-events-none\"\n\t\t\t\t>\n\t\t\t\t\t<SelectorIcon class=\"h-5 w-5 text-gray-400\" aria-hidden=\"true\" />\n\t\t\t\t</span>\n\t\t\t</ListboxButton>\n\n\t\t\t<transition\n\t\t\t\tleave-active-class=\"transition ease-in duration-100\"\n\t\t\t\tleave-from-class=\"opacity-100\"\n\t\t\t\tleave-to-class=\"opacity-0\"\n\t\t\t>\n\t\t\t\t<ListboxOptions\n\t\t\t\t\tclass=\"absolute mt-1 w-full bg-white shadow-lg max-h-60 rounded-md py-1 text-base ring-1 ring-black ring-opacity-5 overflow-auto focus:outline-none sm:text-sm z-20\"\n\t\t\t\t>\n\t\t\t\t\t<ListboxOption\n\t\t\t\t\t\tv-for=\"option in options\"\n\t\t\t\t\t\t:key=\"option.id\"\n\t\t\t\t\t\tv-slot=\"{ active, selected }\"\n\t\t\t\t\t\tas=\"template\"\n\t\t\t\t\t\t:value=\"option\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\tactive ? 'text-white bg-secondary' : 'text-gray-900',\n\t\t\t\t\t\t\t\t'cursor-default select-none relative py-2 pl-3 pr-9',\n\t\t\t\t\t\t\t]\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\t\tselected ? 'font-semibold' : 'font-normal',\n\t\t\t\t\t\t\t\t\t'block truncate',\n\t\t\t\t\t\t\t\t]\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ option.name }}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-if=\"selected\"\n\t\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\t\tactive ? 'text-white' : 'text-secondary',\n\t\t\t\t\t\t\t\t\t'absolute inset-y-0 right-0 flex items-center pr-4',\n\t\t\t\t\t\t\t\t]\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckIcon class=\"h-5 w-5\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ListboxOption>\n\t\t\t\t</ListboxOptions>\n\t\t\t</transition>\n\t\t</div>\n\t\t<p v-show=\"errorMessage\" class=\"text-red-500 text-xs mt-1\">\n\t\t\t{{ errorMessage }}\n\t\t</p>\n\t</Listbox>\n</template>\n\n<script>\nimport HelpToolTip from '@/components/Common/HelpToolTip.vue'\nimport { useModelWrapper } from '@/utils/modelWrapper'\nimport {\n\tListbox,\n\tListboxButton,\n\tListboxLabel,\n\tListboxOption,\n\tListboxOptions,\n} from '@headlessui/vue'\nimport {\n\tCheckIcon,\n\tSelectorIcon,\n\tExclamationCircleIcon,\n} from '@heroicons/vue/solid'\nimport { computed } from 'vue'\n\nexport default {\n\tcomponents: {\n\t\tListbox,\n\t\tListboxButton,\n\t\tListboxLabel,\n\t\tListboxOption,\n\t\tListboxOptions,\n\t\tCheckIcon,\n\t\tSelectorIcon,\n\t\tHelpToolTip,\n\t\tExclamationCircleIcon,\n\t},\n\tprops: {\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\toptions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\ttooltipMessage: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tmodelValue: {\n\t\t\ttype: [String, Number, Object],\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\terrorMessage: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tsetup(props, { emit }) {\n\t\tconst isDisabled = computed(() => {\n\t\t\tif (props.options && props.options.length > 0) return false\n\t\t\treturn true\n\t\t})\n\n\t\treturn {\n\t\t\tselected: useModelWrapper(props, emit, 'modelValue'),\n\t\t\tisDisabled,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n\t<div class=\"flex items-start\">\n\t\t<div class=\"h-5 flex items-center\">\n\t\t\t<input\n\t\t\t\t:id=\"id\"\n\t\t\t\tv-model=\"inputValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tclass=\"h-4 w-4 text-secondary border-gray-300 rounded focus:outline-none focus:ring-0\"\n\t\t\t/>\n\t\t</div>\n\t\t<div class=\"ml-3 text-sm\">\n\t\t\t<label v-if=\"label\" for=\"comments\" class=\"font-medium text-gray-700\">\n\t\t\t\t{{ label }}\n\t\t\t</label>\n\t\t\t<p v-if=\"html\" class=\"text-sm\" v-html=\"html\"></p>\n\t\t\t<p v-if=\"description\" class=\"text-gray-700 text-sm\">{{ description }}</p>\n\t\t\t<p v-if=\"errorMessage\" class=\"text-red-500 text-xs font-normal mt-3\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { useModelWrapper } from '@/utils/modelWrapper'\n\nexport default {\n\tprops: {\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\tmodelValue: {\n\t\t\ttype: [String, Number, Boolean],\n\t\t\tdefault: null,\n\t\t},\n\t\terrorMessage: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t\trequired: {\n\t\t\ttype: Boolean,\n\t\t\trequired: false,\n\t\t\tdefault: false,\n\t\t},\n\t\thtml: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tsetup(props, { emit }) {\n\t\treturn {\n\t\t\tinputValue: useModelWrapper(props, emit, 'modelValue'),\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped></style>\n","const OPTIONS = {}\n\nconst zimmeranzahlMinimum = 0\nconst zimmeranzahlMaximum = 30\nconst zimmeranzahlSteps = 0.5\n\nconst etageMinimum = 0\nconst etageMaximum = 20\nconst etageSteps = 1\n\nconst anzahlMinimum = 0\nconst anzahlMaximum = 5\nconst anzahlSteps = 1\n\n// Returns an array based on a starting value and a stop value with increments\n// -> Descending Order\nconst rangeDesc = (start, stop, step) =>\n\tArray.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step)\n\n// Returns an array based on a starting value and a stop value with increments\n// <- Ascending Order\nconst rangeAsc = (start, stop, step) =>\n\tArray.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step)\n\n/** STEP ONE */\n\n// Immobilientyp\nOPTIONS.immobilientyp = [\n\t{ id: 0, name: 'Haus', value: 'Haus' },\n\t{ id: 1, name: 'Wohnung', value: 'Wohnung' },\n]\n\n// Objektart\nOPTIONS.objektart = {\n\tHaus: [\n\t\t{ id: 0, name: 'Bungalow', value: 'Bungalow' },\n\t\t{ id: 1, name: 'Doppelhaushälfte', value: 'Doppelhaushälfte' },\n\t\t{\n\t\t\tid: 2,\n\t\t\tname: 'Einfamilienhaus (freistehend)',\n\t\t\tvalue: 'Einfamilienhaus (freistehend)',\n\t\t},\n\t\t{ id: 3, name: 'Mehrfamilienhaus', value: 'Mehrfamilienhaus' },\n\t\t{ id: 4, name: 'Reiheneckhaus', value: 'Reiheneckhaus' },\n\t\t{ id: 5, name: 'Reihenhaus', value: 'Reihenhaus' },\n\t\t{ id: 6, name: 'Reihenmittelhaus', value: 'Reihenmittelhaus' },\n\t\t{ id: 7, name: 'Doppelhaushälfte', value: 'Doppelhaushälfte' },\n\t\t{ id: 8, name: 'Villa', value: 'Villa' },\n\t\t{\n\t\t\tid: 9,\n\t\t\tname: 'Wohnimmobilie (sonstige)',\n\t\t\tvalue: 'Wohnimmobilie (sonstige)',\n\t\t},\n\t],\n\tWohnung: [\n\t\t{ id: 0, name: 'Dachgeschoss', value: 'Dachgeschoss' },\n\t\t{ id: 1, name: 'Erdgeschosswohnung', value: 'Erdgeschosswohnung' },\n\t\t{\n\t\t\tid: 2,\n\t\t\tname: 'Etagenwohnung',\n\t\t\tvalue: 'Etagenwohnung',\n\t\t},\n\t\t{ id: 3, name: 'Hochparterre', value: 'Hochparterre' },\n\t\t{ id: 4, name: 'Loft', value: 'Loft' },\n\t\t{ id: 5, name: 'Maisonette', value: 'Maisonette' },\n\t\t{ id: 6, name: 'Penthouse', value: 'Penthouse' },\n\t\t{ id: 7, name: 'Sonstige', value: 'Sonstige' },\n\t\t{ id: 8, name: 'Souterrain', value: 'Souterrain' },\n\t\t{\n\t\t\tid: 9,\n\t\t\tname: 'Terrassenwohnung',\n\t\t\tvalue: 'Terrassenwohnung',\n\t\t},\n\t],\n}\n\n// ausstattung\nOPTIONS.ausstattung = [\n\t{ id: 0, name: 'Einfache Ausstattung', value: 'Einfache Ausstattung' },\n\t{ id: 1, name: 'Normale Ausstattung', value: 'Normale Ausstattung' },\n\t{ id: 2, name: 'Gehobene Ausstattung', value: 'Gehobene Ausstattung' },\n\t{ id: 3, name: 'Luxusausstattung', value: 'Luxusausstattung' },\n]\n\n// Zustand\nOPTIONS.zustand = [\n\t{ id: 0, name: 'Abbruchreif', value: 'Abbruchreif' },\n\t{ id: 1, name: 'Renovierungsbedürftig', value: 'Renovierungsbedürftig' },\n\t{ id: 2, name: 'Gepflegt', value: 'Gepflegt' },\n\t{ id: 3, name: 'Modernisiert', value: 'Modernisiert' },\n\t{ id: 4, name: 'Vollständig renoviert', value: 'Vollständig renoviert' },\n\t{ id: 5, name: 'Saniert', value: 'Saniert' },\n\t{ id: 6, name: 'Erstbezug', value: 'Erstbezug' },\n]\n\n// Baujahr\nOPTIONS.baujahr = OPTIONS.letzteSanierung = () => {\n\tconst currentYear = new Date().getFullYear() + 1\n\n\tconst years = rangeDesc(currentYear, 1880, -1)\n\n\treturn years.map((year, index) => {\n\t\treturn {\n\t\t\tid: index,\n\t\t\tname: year.toString(),\n\t\t\tvalue: year,\n\t\t}\n\t})\n}\n\n/** STEP TWO */\n\n// Zimmeranzahl\nOPTIONS.zimmeranzahl = () => {\n\tconst values = rangeAsc(\n\t\tzimmeranzahlMinimum,\n\t\tzimmeranzahlMaximum,\n\t\tzimmeranzahlSteps\n\t)\n\n\treturn values.map((value, index) => {\n\t\treturn {\n\t\t\tid: index,\n\t\t\tname: value.toString().replace('.', ','),\n\t\t\tvalue: value,\n\t\t}\n\t})\n}\n\n// Primärer Bodenbelag\nOPTIONS.primärer = [\n\t{ id: 0, name: 'Laminat', value: 'Laminat' },\n\t{ id: 1, name: 'Fliesen', value: 'Fliesen' },\n\t{ id: 2, name: 'Teppich', value: 'Teppich' },\n\t{ id: 3, name: 'Dielen', value: 'Dielen' },\n\t{ id: 4, name: 'Parkett', value: 'Parkett' },\n]\n\n// Heizungstyp\nOPTIONS.heizungstyp = [\n\t{ id: 0, name: 'Nachtspeicherofen', value: 'Nachtspeicherofen' },\n\t{ id: 1, name: 'Ofen', value: 'Ofen' },\n\t{ id: 2, name: 'Elektro-Heizung', value: 'Elektro-Heizung' },\n\t{ id: 3, name: 'Öl-Heizung', value: 'Öl-Heizung' },\n\t{ id: 4, name: 'Etagen', value: 'Etagen' },\n\t{ id: 5, name: 'Zentral', value: 'Zentral' },\n\t{ id: 6, name: 'Gas', value: 'Gas' },\n\t{ id: 7, name: 'Fernwärme', value: 'Fernwärme' },\n\t{ id: 8, name: 'Holz-Pellet', value: 'Holz-Pellet' },\n\t{ id: 9, name: 'Solar-Heizung', value: 'Solar-Heizung' },\n\t{ id: 10, name: 'Fußboden', value: 'Fußboden' },\n\t{ id: 11, name: 'Blockheizkraft', value: 'Blockheizkraft' },\n\t{ id: 12, name: 'Wärmekraft', value: 'Wärmekraft' },\n]\n\n// Balkon/Terrasse\nOPTIONS.balkon = OPTIONS.garten = OPTIONS.fußbodenheizung = [\n\t{ id: 0, name: 'Ja', value: 'Ja' },\n\t{ id: 1, name: 'Nein', value: 'Nein' },\n]\n\n// Energieklasse\nOPTIONS.energieklasse = [\n\t{ id: 0, name: 'bis 75 kWh', value: 'bis 75 kWh' },\n\t{ id: 1, name: '75-130 kWh', value: '75-130 kWh' },\n\t{ id: 2, name: '130-200 kWh', value: '130-200 kWh' },\n\t{ id: 3, name: 'über 200 kWh', value: 'über 200 kWh' },\n]\n\n// Etage\nOPTIONS.etage = OPTIONS.etagenanzahl = () => {\n\tconst values = rangeAsc(etageMinimum, etageMaximum, etageSteps)\n\n\treturn values.map((value, index) => {\n\t\treturn {\n\t\t\tid: index,\n\t\t\tname: value.toString(),\n\t\t\tvalue: value,\n\t\t}\n\t})\n}\n\n// Anzahl Garagen, Carports, Stellplätze\nOPTIONS.anzahl = () => {\n\tconst values = rangeAsc(anzahlMinimum, anzahlMaximum, anzahlSteps)\n\n\treturn values.map((value, index) => {\n\t\treturn {\n\t\t\tid: index,\n\t\t\tname: value.toString(),\n\t\t\tvalue: value,\n\t\t}\n\t})\n}\n\n// Helligkeit\nOPTIONS.helligkeit = [\n\t{ id: 0, name: 'dunkel', value: 'dunkel' },\n\t{ id: 1, name: 'etwas dunkler', value: 'etwas dunkler' },\n\t{ id: 2, name: 'normal', value: 'normal' },\n\t{ id: 3, name: 'hell', value: 'hell' },\n\t{ id: 4, name: 'sehr hell', value: 'sehr hell' },\n]\n\n/** STEP THREE */\n\n// Lärmbelastung\nOPTIONS.lärmbelastung = [\n\t{ id: 0, name: 'absolut ruhig', value: 'absolut ruhig' },\n\t{ id: 1, name: 'ruhig', value: 'ruhig' },\n\t{ id: 2, name: 'normal', value: 'normal' },\n\t{ id: 3, name: 'etwas lauter', value: 'etwas lauter' },\n\t{ id: 4, name: 'laut', value: 'laut' },\n]\n\n// Verkehrsanbindung\nOPTIONS.verkehrsanbindung = [\n\t{ id: 0, name: 'sehr schlecht', value: 'sehr schlecht' },\n\t{ id: 1, name: 'schlecht', value: 'schlecht' },\n\t{ id: 2, name: 'normal', value: 'normal' },\n\t{ id: 3, name: 'gut', value: 'gut' },\n\t{ id: 4, name: 'sehr gut', value: 'sehr gut' },\n]\n\n// Kultur/Freizeit Angebot\nOPTIONS.kultur = [\n\t{ id: 0, name: 'sehr gering', value: 'sehr gering' },\n\t{ id: 1, name: 'gering', value: 'gering' },\n\t{ id: 2, name: 'gut', value: 'gut' },\n\t{ id: 3, name: 'sehr gut', value: 'sehr gut' },\n]\n\n/** STEP FOUR */\n\n// Kunde Typ\nOPTIONS.Kundenart = [\n\t{ id: 0, name: 'Privatperson', value: 'Privatperson' },\n\t{ id: 1, name: 'Unternehmen', value: 'Unternehmen' },\n]\n\n// Anrede\nOPTIONS.anrede = [\n\t{ id: 0, name: 'Herr', value: 'Herr' },\n\t{ id: 1, name: 'Frau', value: 'Frau' },\n\t{ id: 3, name: 'Divers', value: 'Divers' },\n]\n\n// Land\nOPTIONS.land = [\n\t{ id: 0, name: 'Deutschland', value: 'Deutschland' },\n\t{ id: 1, name: 'Österreich', value: 'Österreich' },\n\t{ id: 3, name: 'Schweiz', value: 'Schweiz' },\n]\n\nexport default OPTIONS\n","const OPTIONS = {}\n\n/** STEP FOUR */\n\n// Land\nOPTIONS.zahlungsart = [\n\t{\n\t\tid: 0,\n\t\tname: 'per Überweisung',\n\t\tdescription: 'Die Rechnung erhalten Sie in Kürze per Mail',\n\t\tvalue: 'per Überweisung',\n\t},\n\t// {\n\t// \tid: 1,\n\t// \tname: 'SEPA-Lastschriftverfahren',\n\t// \tdescription: '',\n\t// \tvalue: 'SEPA-Lastschriftverfahren',\n\t// },\n]\n\nexport default OPTIONS\n","const TOOLTIP_MESSAGES = {}\n\nTOOLTIP_MESSAGES.ausstattung = `<p class=\"mb-2\">Über die gehobene Ausstattung hinaus enthält die Luxusausstattung Parkett, Textil- oder Natursteinbelag der oberen Preisklasse, eine Klimaanlage sowie eine Schallschutzverglasung und elektrische Rollläden. Zudem sind Stuckdecken oder Wandvertäfelungen und mehrere Bäder und WCs in hochwertiger Ausführung (z.B. Whirlpool) ausschlaggebend für die Einordnung in diese Ausstattungskategorie.</p>\n\n<b>Checkliste:</b>\n<ul class=\"list-disc mt-1 ml-6\">\n    <li>Böden der oberen Preisklasse</li>\n    <li>Schallschutzverglasung</li>\n    <li>Mehrere Bäder in hochwertiger Ausführung</li>\n</ul>\n`\n\nTOOLTIP_MESSAGES.letzteSanierung = `<p>Das Jahr der <b>letzten Sanierung</b> ist das Jahr, in dem Ihre Immobilie das letzte Mal <b>vollständig</b> saniert wurde. Wurde die Immobilie nur teilweise bzw. etappenweise über mehrere Jahre hinweg modernisiert, sollten Sie stattdessen ein <a href=\"https://www.ohne-makler.net/ratgeber/verkauf/fiktives-baujahr/\" target=\"_blank\" class=\"text-secondary font-semibold\">Fiktives Baujahr</a> als mittleren Wert der Jahre bestimmen, in denen einzelne Gewerke saniert oder modernisiert wurden.</p>\n`\n\nTOOLTIP_MESSAGES.ustIdnr = `<p>Wird benötigt, falls sich Ihr Unternehmen nicht in Deutschland, aber in der EU, befindet</p>\n`\n\nexport default TOOLTIP_MESSAGES\n","<template>\n\t<div>\n\t\t<!-- Rechnungsempfänger -->\n\t\t<div class=\"grid grid-cols-6 gap-6 w-full mb-16\">\n\t\t\t<div class=\"col-span-6\">\n\t\t\t\t<h2 class=\"text-xl font-semibold text-brand\">\n\t\t\t\t\tRechnungsempfänger\n\t\t\t\t</h2>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-2\">\n\t\t\t\t<f-select\n\t\t\t\t\tv-model=\"Kundenart\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Ich bestelle als\"\n\t\t\t\t\t:options=\"kundenartOptions\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Kundenart']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-6 gap-6 mb-12\">\n\t\t\t<div class=\"col-span-6 sm:col-span-1\">\n\t\t\t\t<f-select\n\t\t\t\t\tv-model=\"Anrede\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Anrede\"\n\t\t\t\t\tplaceholder=\"Anrede\"\n\t\t\t\t\t:options=\"anredeOptions\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Anrede']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-3\">\n\t\t\t\t<f-text-field\n\t\t\t\t\tid=\"vorname\"\n\t\t\t\t\tv-model=\"Vorname\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Vorname\"\n\t\t\t\t\tname=\"vorname\"\n\t\t\t\t\tplaceholder=\"Vorname\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Vorname']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-2\">\n\t\t\t\t<f-text-field\n\t\t\t\t\tid=\"nachname\"\n\t\t\t\t\tv-model=\"Nachname\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Nachname\"\n\t\t\t\t\tname=\"nachname\"\n\t\t\t\t\tplaceholder=\"Nachname\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Nachname']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"Kundenart && Kundenart.value === 'Unternehmen'\"\n\t\t\t\tref=\"hiddenEl\"\n\t\t\t\tclass=\"grid grid-cols-6 gap-6 w-full col-span-6\"\n\t\t\t>\n\t\t\t\t<div class=\"col-span-6 sm:col-span-3\">\n\t\t\t\t\t<f-text-field\n\t\t\t\t\t\tid=\"firma\"\n\t\t\t\t\t\tv-model=\"Firma\"\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tlabel=\"Firma\"\n\t\t\t\t\t\tname=\"firma\"\n\t\t\t\t\t\tplaceholder=\"Firma\"\n\t\t\t\t\t\t:error-message=\"errors['Rechnung.Firma']\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-span-6 sm:col-span-3\">\n\t\t\t\t\t<f-text-field\n\t\t\t\t\t\tid=\"USt-IdNr.\"\n\t\t\t\t\t\tv-model=\"VAT\"\n\t\t\t\t\t\tlabel=\"USt-IdNr.\"\n\t\t\t\t\t\tname=\"USt-IdNr.\"\n\t\t\t\t\t\tplaceholder=\"USt-IdNr.\"\n\t\t\t\t\t\t:error-message=\"errors['Rechnung.VAT-ID']\"\n\t\t\t\t\t\t:tooltip-message=\"tooltipMessage\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-3\">\n\t\t\t\t<f-text-field\n\t\t\t\t\tid=\"straße\"\n\t\t\t\t\tv-model=\"Street\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Straße + Hausnr.\"\n\t\t\t\t\tname=\"straße\"\n\t\t\t\t\tplaceholder=\"Straße + Hausnr.\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Straße']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-1\">\n\t\t\t\t<f-text-field\n\t\t\t\t\tid=\"postleitzahl\"\n\t\t\t\t\tv-model=\"Postleitzahl\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Postleitzahl\"\n\t\t\t\t\tname=\"postleitzahl\"\n\t\t\t\t\tplaceholder=\"Postleitzahl\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Postleitzahl']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-2\">\n\t\t\t\t<f-text-field\n\t\t\t\t\tid=\"ort\"\n\t\t\t\t\tv-model=\"Ort\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Ort\"\n\t\t\t\t\tname=\"ort\"\n\t\t\t\t\tplaceholder=\"Ort\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Ort']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-2\">\n\t\t\t\t<f-select\n\t\t\t\t\tv-model=\"Land\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"Land\"\n\t\t\t\t\t:options=\"landOptions\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Land']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-2\">\n\t\t\t\t<f-text-field\n\t\t\t\t\tid=\"telefon\"\n\t\t\t\t\tv-model=\"Telefon\"\n\t\t\t\t\tlabel=\"Telefon\"\n\t\t\t\t\tname=\"telefon\"\n\t\t\t\t\tplaceholder=\"Telefon\"\n\t\t\t\t\t:error-message=\"errors['Rechnung.Telefon']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-2\">\n\t\t\t\t<f-text-field\n\t\t\t\t\tid=\"email\"\n\t\t\t\t\tv-model=\"Email\"\n\t\t\t\t\tlabel=\"Email\"\n\t\t\t\t\tname=\"email\"\n\t\t\t\t\tplaceholder=\"Email\"\n\t\t\t\t\ttype=\"email\"\n\t\t\t\t\trequired\n\t\t\t\t\t:error-message=\"errors['Rechnung.Email']\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"w-full border-t border-1 border-gray-200 mt-16 mb-8\" />\n\n\t\t<!-- Zahlungsart -->\n\t\t<div class=\"flex w-full justify-between mb-6\">\n\t\t\t<h2 class=\"text-xl font-semibold text-brand\">Zahlungsart</h2>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-6 gap-6\">\n\t\t\t<div\n\t\t\t\tclass=\"col-span-6 sm:col-span-2 pt-4 text-sm font-medium text-gray-700\"\n\t\t\t>\n\t\t\t\tZahlungsart\n\t\t\t</div>\n\t\t\t<div class=\"col-span-6 sm:col-span-4 mb-6\">\n\t\t\t\t<!-- <f-group-radio\n\t\t\t\t\tv-model=\"Zahlungsart\"\n\t\t\t\t\trequired\n\t\t\t\t\tlabel=\"\"\n\t\t\t\t\t:options=\"zahlungsartOptions\"\n\t\t\t\t\t:error-message=\"errors.Zahlungsart\"\n\t\t\t\t/> -->\n\t\t\t\t<RadioGroup v-model=\"Zahlungsart\">\n\t\t\t\t\t<div class=\"bg-white rounded-md -space-y-px mt-2\">\n\t\t\t\t\t\t<RadioGroupOption\n\t\t\t\t\t\t\tv-for=\"(option, index) in zahlungsartOptions\"\n\t\t\t\t\t\t\t:key=\"option.name\"\n\t\t\t\t\t\t\tv-slot=\"{ checked }\"\n\t\t\t\t\t\t\tas=\"div\"\n\t\t\t\t\t\t\t:value=\"option\"\n\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\t\tindex === 0 ? 'rounded-tl-md rounded-tr-md' : '',\n\t\t\t\t\t\t\t\t\tindex === zahlungsartOptions.length - 1\n\t\t\t\t\t\t\t\t\t\t? Zahlungsart &&\n\t\t\t\t\t\t\t\t\t\t  Zahlungsart.value === 'SEPA-Lastschriftverfahren'\n\t\t\t\t\t\t\t\t\t\t\t? 'border-1 border-b-0'\n\t\t\t\t\t\t\t\t\t\t\t: 'rounded-bl-md rounded-br-md'\n\t\t\t\t\t\t\t\t\t\t: '',\n\t\t\t\t\t\t\t\t\tchecked\n\t\t\t\t\t\t\t\t\t\t? 'bg-blue-50 border-secondary z-10'\n\t\t\t\t\t\t\t\t\t\t: 'border-gray-200',\n\t\t\t\t\t\t\t\t\t'relative border border-1 p-4 cursor-pointer focus:outline-none',\n\t\t\t\t\t\t\t\t]\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div class=\"flex\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\t\t\t\tchecked\n\t\t\t\t\t\t\t\t\t\t\t\t? 'bg-secondary border-transparent'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'bg-white border-gray-300',\n\t\t\t\t\t\t\t\t\t\t\t'h-4 w-4 mt-0.5 cursor-pointer rounded-full border flex items-center justify-center',\n\t\t\t\t\t\t\t\t\t\t]\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span class=\"rounded-full bg-white w-1.5 h-1.5\" />\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<div class=\"ml-3 flex flex-col\">\n\t\t\t\t\t\t\t\t\t\t<RadioGroupLabel\n\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\t\t\t\t\tchecked ? 'text-brand' : 'text-gray-800',\n\t\t\t\t\t\t\t\t\t\t\t\t'block text-sm font-medium',\n\t\t\t\t\t\t\t\t\t\t\t]\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{{ option.name }}\n\t\t\t\t\t\t\t\t\t\t</RadioGroupLabel>\n\t\t\t\t\t\t\t\t\t\t<RadioGroupDescription\n\t\t\t\t\t\t\t\t\t\t\tv-if=\"option.description\"\n\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t:class=\"[\n\t\t\t\t\t\t\t\t\t\t\t\tchecked ? 'text-secondary' : 'text-gray-400',\n\t\t\t\t\t\t\t\t\t\t\t\t'block text-sm',\n\t\t\t\t\t\t\t\t\t\t\t]\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{{ option.description }}\n\t\t\t\t\t\t\t\t\t\t</RadioGroupDescription>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</RadioGroupOption>\n\t\t\t\t\t</div>\n\t\t\t\t</RadioGroup>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"\n\t\t\t\t\t\tZahlungsart && Zahlungsart.value === 'SEPA-Lastschriftverfahren'\n\t\t\t\t\t\"\n\t\t\t\t\tclass=\"grid grid-cols-6 gap-x-6 px-6 py-6 bg-blue-50 rounded-b-md border border-t-0 border-secondary z-30\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"col-span-6 sm:col-span-2 pt-3 text-sm font-medium text-gray-700\"\n\t\t\t\t\t>\n\t\t\t\t\t\tIBAN\n\t\t\t\t\t</div>\n\t\t\t\t\t<div ref=\"hiddenEl2\" class=\"col-span-6 sm:col-span-4 mb-2\">\n\t\t\t\t\t\t<f-text-field\n\t\t\t\t\t\t\tid=\"IBAN\"\n\t\t\t\t\t\t\tv-model=\"IBAN\"\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\tlabel=\"\"\n\t\t\t\t\t\t\tname=\"IBAN\"\n\t\t\t\t\t\t\tplaceholder=\"IBAN\"\n\t\t\t\t\t\t\t:error-message=\"errors.IBAN\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"col-span-6 sm:col-span-2 pt-3 text-sm font-medium text-gray-700\"\n\t\t\t\t\t>\n\t\t\t\t\t\tBANK\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-span-6 sm:col-span-4 mb-2\">\n\t\t\t\t\t\t<f-text-field\n\t\t\t\t\t\t\tid=\"Bank\"\n\t\t\t\t\t\t\tv-model=\"Bank\"\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\tlabel=\"\"\n\t\t\t\t\t\t\tname=\"Bank\"\n\t\t\t\t\t\t\tplaceholder=\"Bank\"\n\t\t\t\t\t\t\t:error-message=\"errors.Bank\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"col-span-6 sm:col-span-2 pt-3 text-sm font-medium text-gray-700\"\n\t\t\t\t\t>\n\t\t\t\t\t\tKontoinhaber\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-span-6 sm:col-span-4 mb-2\">\n\t\t\t\t\t\t<f-text-field\n\t\t\t\t\t\t\tid=\"Kontoinhaber\"\n\t\t\t\t\t\t\tv-model=\"Kontoinhaber\"\n\t\t\t\t\t\t\tlabel=\"\"\n\t\t\t\t\t\t\tname=\"Kontoinhaber\"\n\t\t\t\t\t\t\tplaceholder=\"Kontoinhaber\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"col-span-6 sm:col-span-2 pt-3 text-sm font-medium text-gray-700\"\n\t\t\t\t\t>\n\t\t\t\t\t\tBIC\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-span-6 sm:col-span-4 mb-2\">\n\t\t\t\t\t\t<f-text-field\n\t\t\t\t\t\t\tid=\"BIC\"\n\t\t\t\t\t\t\tv-model=\"BIC\"\n\t\t\t\t\t\t\tlabel=\"\"\n\t\t\t\t\t\t\tname=\"BIC\"\n\t\t\t\t\t\t\tplaceholder=\"BIC\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<p class=\"text-xs text-gray-400 mt-2\">\n\t\t\t\t\t\t\t(nur bei nicht deutschem Bankkonto)\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"col-span-6 sm:col-span-2 text-sm font-medium text-gray-700\"\n\t\t\t\t\t>\n\t\t\t\t\t\tGläubiger ID\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-span-6 sm:col-span-4 mb-2\">\n\t\t\t\t\t\t<p class=\"font-medium text-gray-500 text-sm\">DE48ZZZ00001435190</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"col-span-6 sm:col-span-2 text-sm font-medium text-gray-700\"\n\t\t\t\t\t>\n\t\t\t\t\t\tMandatsreferenz\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"col-span-6 sm:col-span-4 mb-2\">\n\t\t\t\t\t\t<p class=\"font-medium text-gray-500 text-sm\">1</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"col-span-6 sm:col-span-2\" />\n\t\t\t<div class=\"col-span-6 sm:col-span-4\">\n\t\t\t\t<f-checkbox\n\t\t\t\t\tid=\"agb\"\n\t\t\t\t\tv-model=\"AGB\"\n\t\t\t\t\tlabel=\"\"\n\t\t\t\t\tname=\"agb\"\n\t\t\t\t\t:html=\"AGB_HTML\"\n\t\t\t\t\t:error-message=\"errors.AGB\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\"col-span-6 sm:col-span-2\" />\n\t\t\t<div class=\"col-span-6 sm:col-span-4\">\n\t\t\t\t<f-checkbox\n\t\t\t\t\tid=\"widerrufsrecht\"\n\t\t\t\t\tv-model=\"Widerrufsrecht\"\n\t\t\t\t\tlabel=\"\"\n\t\t\t\t\tname=\"widerrufsrecht\"\n\t\t\t\t\t:description=\"widerrufsrechtDescription\"\n\t\t\t\t\t:error-message=\"errors.Widerrufsrecht\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\"col-span-6 sm:col-span-2\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport FTextField from '@/components/FormFields/FTextField.vue'\nimport FSelect from '@/components/FormFields/FSelect.vue'\nimport FCheckbox from '@/components/FormFields/FCheckbox.vue'\n\nimport OPTIONS from '@/data/select__options.js'\nimport RADIO_OPTIONS from '@/data/radio__options.js'\nimport TOOLTIP_MESSAGES from '@/data/tooltip__messages.js'\n\nimport {\n\tRadioGroup,\n\tRadioGroupDescription,\n\tRadioGroupLabel,\n\tRadioGroupOption,\n} from '@headlessui/vue'\n\nimport {\n\tuseForm,\n\tuseField,\n\tuseIsFormValid,\n\tuseIsFormDirty,\n\tuseFormValues,\n\tuseValidateForm,\n} from 'vee-validate'\nimport * as yup from 'yup'\n\nimport { ref, computed, watchEffect, watch, onMounted } from 'vue'\nimport { useStore } from 'vuex'\n\nconst AGB_URL = 'https://www.ohne-makler.net/allgemeine-geschaeftsbedingungen/'\nconst AGB_HTML = `\n<p class=\"text-gray-700 text-sm\">\n  Ich akzeptiere die\n  <a href=\"${AGB_URL}\" target=\"_blank\" class=\"underline\">AGB</a>\n  von ohne-makler.net.\n</p>\n`\n\nconst widerrufsrechtDescription = `\n  Ich stimme ausdrücklich zu, dass Sie vor Ablauf der Widerrufsfrist mit\n  der Ausführung der Leistung beginnen. Mir ist bekannt, dass ich durch\n  diese Zustimmung mit Beginn der Ausführung der Leistung mein Widerrufsrecht\n  verliere.\n`\n\nexport default {\n\tcomponents: {\n\t\tFTextField,\n\t\tFSelect,\n\t\tFCheckbox,\n\n\t\tRadioGroup,\n\t\tRadioGroupDescription,\n\t\tRadioGroupLabel,\n\t\tRadioGroupOption,\n\t},\n\temits: ['changed'],\n\tsetup(_, { emit }) {\n\t\tconst store = useStore()\n\n\t\tconst tooltipMessage = TOOLTIP_MESSAGES.ustIdnr\n\n\t\tconst hiddenEl = ref(null)\n\t\tconst hiddenEl2 = ref(null)\n\n\t\tconst schema = computed(() => {\n\t\t\treturn yup.object({\n\t\t\t\tRechnung: yup.object({\n\t\t\t\t\tKundenart: yup\n\t\t\t\t\t\t.object()\n\t\t\t\t\t\t.test(\n\t\t\t\t\t\t\t'Kundenart',\n\t\t\t\t\t\t\t'Bitte füllen Sie das Feld \"Kundenart\" aus.',\n\t\t\t\t\t\t\t(val) => (!val || !val.value ? false : true)\n\t\t\t\t\t\t),\n\t\t\t\t\tAnrede: yup\n\t\t\t\t\t\t.object()\n\t\t\t\t\t\t.test('Anrede', 'Bitte füllen Sie das Feld \"Anrede\" aus.', (val) =>\n\t\t\t\t\t\t\t!val || !val.value ? false : true\n\t\t\t\t\t\t),\n\t\t\t\t\tVorname: yup\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.required('Bitte füllen Sie das Feld \"Vorname\" aus.'),\n\t\t\t\t\tNachname: yup\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.required('Bitte füllen Sie das Feld \"Nachname\" aus.'),\n\t\t\t\t\tStraße: yup\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.required('Bitte füllen Sie das Feld \"Straße\" aus.'),\n\t\t\t\t\tPostleitzahl: yup\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.required('Bitte füllen Sie das Feld \"Postleitzahl\" aus.'),\n\t\t\t\t\tOrt: yup.string().required('Bitte füllen Sie das Feld \"Ort\" aus.'),\n\t\t\t\t\tLand: yup\n\t\t\t\t\t\t.object()\n\t\t\t\t\t\t.test('Land', 'Bitte füllen Sie das Feld \"Land\" aus.', (val) =>\n\t\t\t\t\t\t\t!val || !val.value ? false : true\n\t\t\t\t\t\t),\n\t\t\t\t\tTelefon: yup.string(),\n\t\t\t\t\tEmail: yup\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.email('Ungültige E-Mail-Adresse')\n\t\t\t\t\t\t.required('Bitte füllen Sie das Feld \"Email\" aus.'),\n\t\t\t\t\tFirma: hiddenEl.value\n\t\t\t\t\t\t? yup.string().required('Bitte füllen Sie das Feld \"Firma\" aus.')\n\t\t\t\t\t\t: null,\n\t\t\t\t\t'VAT-ID': hiddenEl.value ? yup.string() : null,\n\t\t\t\t}),\n\t\t\t\tZahlungsart: yup\n\t\t\t\t\t.object()\n\t\t\t\t\t.test(\n\t\t\t\t\t\t'Zahlungsart',\n\t\t\t\t\t\t'Bitte füllen Sie das Feld \"Zahlungsart\" aus.',\n\t\t\t\t\t\t(val) => (!val || !val.value ? false : true)\n\t\t\t\t\t),\n\t\t\t\tAGB: yup.boolean().oneOf([true], 'Sie müssen den AGB zustimmen'),\n\t\t\t\tWiderrufsrecht: yup\n\t\t\t\t\t.boolean()\n\t\t\t\t\t.oneOf([true], 'Sie müssen dem zustimmen.'),\n\t\t\t\tAusgedruckt: yup.boolean(),\n\t\t\t\tIBAN: hiddenEl2.value\n\t\t\t\t\t? yup.string().required('Bitte füllen Sie das Feld \"IBAN\" aus.')\n\t\t\t\t\t: null,\n\t\t\t\tBank: hiddenEl2.value\n\t\t\t\t\t? yup.string().required('Bitte füllen Sie das Feld \"Bank\" aus.')\n\t\t\t\t\t: null,\n\t\t\t\tKontoinhaber: hiddenEl2.value ? yup.string() : null,\n\t\t\t\tBIC: hiddenEl2.value ? yup.string() : null,\n\t\t\t})\n\t\t})\n\n\t\tconst { errors, setValues } = useForm({\n\t\t\tvalidationSchema: schema,\n\t\t\tinitialValues: {\n\t\t\t\tRechnung: {},\n\t\t\t\tAGB: false,\n\t\t\t\tWiderrufsrecht: false,\n\t\t\t\tAusgedruckt: false,\n\t\t\t},\n\t\t\tvalidateOnMount: false,\n\t\t})\n\n\t\tconst isValid = useIsFormValid()\n\t\tconst isDirty = useIsFormDirty()\n\t\tconst formValues = useFormValues()\n\t\tconst validate = useValidateForm()\n\n\t\tconst { value: Rechnung } = useField('Rechnung')\n\n\t\tconst { value: Kundenart } = useField('Rechnung.Kundenart')\n\t\tconst { value: Anrede } = useField('Rechnung.Anrede')\n\t\tconst { value: Vorname } = useField('Rechnung.Vorname')\n\t\tconst { value: Nachname } = useField('Rechnung.Nachname')\n\t\tconst { value: Street } = useField('Rechnung.Straße')\n\t\tconst { value: Postleitzahl } = useField('Rechnung.Postleitzahl')\n\t\tconst { value: Ort } = useField('Rechnung.Ort')\n\t\tconst { value: Land } = useField('Rechnung.Land')\n\t\tconst { value: Telefon } = useField('Rechnung.Telefon')\n\t\tconst { value: Email } = useField('Rechnung.Email')\n\t\tlet { value: Firma } = useField('Rechnung.Firma')\n\t\tlet { value: VAT } = useField('Rechnung.VAT-ID')\n\n\t\tconst { value: Zahlungsart } = useField('Zahlungsart')\n\t\tconst { value: AGB } = useField('AGB')\n\t\tconst { value: Widerrufsrecht } = useField('Widerrufsrecht')\n\t\tconst { value: Ausgedruckt } = useField('Ausgedruckt')\n\t\tlet { value: IBAN } = useField('IBAN')\n\t\tlet { value: Bank } = useField('Bank')\n\t\tlet { value: Kontoinhaber } = useField('Kontoinhaber')\n\t\tlet { value: BIC } = useField('BIC')\n\n\t\tconst formDataValues = computed(() => {\n\t\t\treturn { ...store.state.steps.formData }\n\t\t})\n\n\t\tconst formData = computed(() => {\n\t\t\treturn {\n\t\t\t\tformValues: { ...formValues.value },\n\t\t\t\tisValid: isValid.value,\n\t\t\t\tisDirty: isDirty.value,\n\t\t\t\tvalidate: validate,\n\t\t\t}\n\t\t})\n\n\t\tonMounted(() => {\n\t\t\tsetValues(formDataValues.value)\n\t\t\tif (formDataValues.value.Rechnung) {\n\t\t\t\tRechnung.value = formDataValues.value.Rechnung\n\t\t\t}\n\n\t\t\tif (!Kundenart.value) {\n\t\t\t\tKundenart.value = OPTIONS.Kundenart[0]\n\t\t\t}\n\n\t\t\tif (!Zahlungsart.value) {\n\t\t\t\tZahlungsart.value = RADIO_OPTIONS.zahlungsart[0]\n\t\t\t}\n\t\t})\n\n\t\twatch(\n\t\t\t() => formData,\n\t\t\t(data) => {\n\t\t\t\temit('changed', data)\n\t\t\t},\n\t\t\t{ deep: true }\n\t\t)\n\n\t\twatch(\n\t\t\t() => Kundenart.value,\n\t\t\t(newValue, oldValue) => {\n\t\t\t\tif (\n\t\t\t\t\tnewValue &&\n\t\t\t\t\toldValue &&\n\t\t\t\t\tnewValue.value === 'Unternehmen' &&\n\t\t\t\t\toldValue.value === 'Privatperson'\n\t\t\t\t) {\n\t\t\t\t\tFirma.value = ''\n\t\t\t\t\tVAT.value = ''\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ deep: true }\n\t\t)\n\n\t\treturn {\n\t\t\tkundenartOptions: OPTIONS.Kundenart,\n\t\t\tanredeOptions: OPTIONS.anrede,\n\t\t\tlandOptions: OPTIONS.land,\n\n\t\t\tzahlungsartOptions: RADIO_OPTIONS.zahlungsart,\n\t\t\ttooltipMessage,\n\t\t\thiddenEl,\n\t\t\thiddenEl2,\n\n\t\t\terrors,\n\t\t\tformData,\n\t\t\tAGB_URL,\n\t\t\tAGB_HTML,\n\t\t\twiderrufsrechtDescription,\n\n\t\t\tRechnung,\n\t\t\tKundenart,\n\t\t\tAnrede,\n\t\t\tVorname,\n\t\t\tNachname,\n\t\t\tStreet,\n\t\t\tPostleitzahl,\n\t\t\tOrt,\n\t\t\tLand,\n\t\t\tTelefon,\n\t\t\tEmail,\n\t\t\tFirma,\n\t\t\tVAT,\n\t\t\tZahlungsart,\n\t\t\tAGB,\n\t\t\tWiderrufsrecht,\n\t\t\tAusgedruckt,\n\t\t\tIBAN,\n\t\t\tBank,\n\t\t\tKontoinhaber,\n\t\t\tBIC,\n\t\t}\n\t},\n}\n</script>\n\n<style scoped>\n:focus {\n\toutline: none;\n}\n</style>\n","<template>\n\t<div>\n\t\t<div class=\"py-4 px-4 sm:px-0\">\n\t\t\t<dl class=\"grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2\">\n\t\t\t\t<div class=\"sm:col-span-2\">\n\t\t\t\t\t<dd class=\"text-sm text-gray-900 pt-4\">\n\t\t\t\t\t\t<span class=\"font-medium text-gray-500 mr-4\">Hinweis:</span>\n\t\t\t\t\t\tSie erhalten Ihre Grundrisse i.d.R. innerhalb von 1-2 Werktagen\n\t\t\t\t\t\tper E-Mail zugesandt.\n\t\t\t\t\t</dd>\n\t\t\t\t</div>\n\t\t\t</dl>\n\t\t</div>\n\t\t<div class=\"px-4 py-5 sm:px-0\">\n\t\t\t<dl\n\t\t\t\tclass=\"grid grid-cols-1 gap-y-8 sm:grid-cols-2 rounded-lg border-gray-200 border\"\n\t\t\t>\n\t\t\t\t<div v-if=\"rechnungDetails\" class=\"sm:col-span-1 divide-y\">\n\t\t\t\t\t<div class=\"p-5 font-medium\">\n\t\t\t\t\t\t<dt\n\t\t\t\t\t\t\tclass=\"text-lg font-semibold uppercase text-black opacity-50 mb-5\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRechnungsadresse\n\t\t\t\t\t\t</dt>\n\t\t\t\t\t\t<dd class=\"text-sm text-gray-800\">\n\t\t\t\t\t\t\t{{ rechnungDetails.Vorname }} {{ rechnungDetails.Nachname }}\n\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t<dd class=\"text-sm text-gray-800\">{{ rechnungDetails.Straße }}</dd>\n\t\t\t\t\t\t<dd class=\"text-sm text-gray-800\">\n\t\t\t\t\t\t\t{{ rechnungDetails.Postleitzahl }} {{ rechnungDetails.Ort }}\n\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t<dd class=\"text-sm text-gray-800\">\n\t\t\t\t\t\t\t{{ rechnungDetails.Land.value }}\n\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t<dd class=\"text-sm text-gray-800\">{{ rechnungDetails.Telefon }}</dd>\n\t\t\t\t\t\t<dd class=\"text-sm text-gray-800\">{{ rechnungDetails.Email }}</dd>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"p-5\">\n\t\t\t\t\t\t<dt\n\t\t\t\t\t\t\tclass=\"text-lg font-semibold text-black opacity-50 py-4 flex justify-between uppercase\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tZahlungsart <CreditCardIcon class=\"w-6 h-6\" />\n\t\t\t\t\t\t</dt>\n\t\t\t\t\t\t<dl class=\"py-4\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-if=\"\n\t\t\t\t\t\t\t\t\tformDataValues &&\n\t\t\t\t\t\t\t\t\tformDataValues.Zahlungsart.value === 'per Überweisung'\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\tclass=\"block text-center text-gray-400 font-normal text-sm py-8\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tSie zahlen per Überweisung. Die Rechnung erhalten Sie am\n\t\t\t\t\t\t\t\tnächsten Werktag\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tv-if=\"\n\t\t\t\t\t\t\t\t\tformDataValues &&\n\t\t\t\t\t\t\t\t\tformDataValues.Zahlungsart.value ===\n\t\t\t\t\t\t\t\t\t\t'SEPA-Lastschriftverfahren'\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div class=\"mt-1 flex justify-between text-sm\">\n\t\t\t\t\t\t\t\t\t<dt class=\"text-gray-600 font-semibold\">IBAN</dt>\n\t\t\t\t\t\t\t\t\t<dd class=\"text-gray-800 font-medium\">\n\t\t\t\t\t\t\t\t\t\t{{ formDataValues.IBAN }}\n\t\t\t\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mt-1 flex justify-between text-sm\">\n\t\t\t\t\t\t\t\t\t<dt class=\"text-gray-600 font-semibold\">Bank</dt>\n\t\t\t\t\t\t\t\t\t<dd class=\"text-gray-800 font-medium\">\n\t\t\t\t\t\t\t\t\t\t{{ formDataValues.Bank }}\n\t\t\t\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mt-1 flex justify-between text-sm\">\n\t\t\t\t\t\t\t\t\t<dt class=\"text-gray-600 font-semibold\">Kontoinhaber</dt>\n\t\t\t\t\t\t\t\t\t<dd class=\"text-gray-800 font-medium\">\n\t\t\t\t\t\t\t\t\t\t{{ formDataValues.Kontoinhaber }}\n\t\t\t\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mt-1 flex justify-between text-sm\">\n\t\t\t\t\t\t\t\t\t<dt class=\"text-gray-600 font-semibold\">BIC</dt>\n\t\t\t\t\t\t\t\t\t<dd class=\"text-gray-800 font-medium\">\n\t\t\t\t\t\t\t\t\t\t{{ formDataValues.BIC }}\n\t\t\t\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mt-1 flex justify-between text-sm\">\n\t\t\t\t\t\t\t\t\t<dt class=\"text-gray-600 font-semibold\">Gläubiger ID</dt>\n\t\t\t\t\t\t\t\t\t<dd class=\"text-gray-800 font-medium\">DE48ZZZ00001435190</dd>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mt-1 flex justify-between text-sm\">\n\t\t\t\t\t\t\t\t\t<dt class=\"text-gray-600 font-semibold\">Mandatsreferenz</dt>\n\t\t\t\t\t\t\t\t\t<dd class=\"text-gray-800 font-medium\">1</dd>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</dl>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"sm:col-span-1 bg-brand p-5 rounded-b-lg sm:rounded-r-lg sm:rounded-bl-none\"\n\t\t\t\t>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<dt\n\t\t\t\t\t\t\tclass=\"text-lg font-semibold text-blue-300 uppercase flex justify-between\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tKosten\n\t\t\t\t\t\t</dt>\n\t\t\t\t\t\t<dd class=\"text-4xl font-semibold text-white\" >\n\t\t\t\t\t\t\t{{ formatter.format(cost) }}\n\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t<ul class=\"mt-6 bg-gray-900 rounded-md divide-y divide-gray-700\">\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tclass=\"pl-3 pr-4 py-5 flex items-center justify-between text-sm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div class=\"w-0 flex-1 flex items-center\">\n\t\t\t\t\t\t\t\t\t<span class=\"ml-2 flex-1 w-0 truncate text-white\">\n\t\t\t\t\t\t\t\t\t\tBetrag (netto):\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ml-4 flex-shrink-0\">\n\t\t\t\t\t\t\t\t\t<span class=\"font-medium text-white\">{{ formatter.format(costWithoutVAT) }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tclass=\"pl-3 pr-4 py-5 flex items-center justify-between text-sm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div class=\"w-0 flex-1 flex items-center\">\n\t\t\t\t\t\t\t\t\t<span class=\"ml-2 flex-1 w-0 truncate text-white opacity-60\">\n\t\t\t\t\t\t\t\t\t\tzzgl. 19% Mehrwertsteuer:\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ml-4 flex-shrink-0\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"font-medium text-white opacity-60\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ formatter.format(VATCost) }}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tclass=\"pl-3 pr-4 py-5 flex items-center justify-between text-sm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div class=\"w-0 flex-1 flex items-center\">\n\t\t\t\t\t\t\t\t\t<span class=\"ml-2 flex-1 w-0 truncate text-white font-medium\">\n\t\t\t\t\t\t\t\t\t\tGesamtbetrag (brutto):\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ml-4 flex-shrink-0\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"text-white font-medium\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ formatter.format(cost) }}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</dl>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { CreditCardIcon } from '@heroicons/vue/solid'\nimport { computed, onMounted, ref } from 'vue'\nimport { useStore } from 'vuex'\n\nvar formatter = new Intl.NumberFormat('de-DE', {\n  style: 'currency',\n  currency: 'EUR',\n});\n\nexport default {\n\tcomponents: {\n\t\tCreditCardIcon,\n\t},\n\temits: ['changed'],\n\tsetup() {\n\t\tconst store = useStore()\n\n\t\tconst formDataValues = computed(() => {\n\t\t\treturn { ...store.state.steps.formData }\n\t\t})\n\n\t\tconst rechnungDetails = computed(() => {\n\t\t\treturn { ...store.state.steps.formData.Rechnung }\n\t\t})\n\n\t\tconst formData = computed(() => {\n\t\t\treturn {\n\t\t\t\tformValues: { ...formDataValues.value },\n\t\t\t\tisValid: true,\n\t\t\t\tisDirty: true,\n\t\t\t}\n\t\t})\n\n\t\tlet VATCost = ref(0)\n\t\tlet costWithoutVAT = ref(0)\n\t\tlet cost = ref(0)\n\n\t\tonMounted(() => {\n\t\t\tcost.value = formDataValues.value.overallPrice\n\t\t\tcostWithoutVAT.value = cost.value / 1.19\n\t\t\tVATCost.value = cost.value - costWithoutVAT.value\n\t\t})\n\n\t\treturn {\n\t\t\tformData,\n\t\t\tformDataValues,\n\t\t\trechnungDetails,\n\t\t\tcost,\n\t\t\tformatter,\n\t\t\tcostWithoutVAT,\n\t\t\tVATCost,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n\t<div class=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4\">\n\t\t<div class=\"mx-auto\">\n\t\t\t<TransitionRoot as=\"template\" :show=\"open\">\n\t\t\t\t<Dialog\n\t\t\t\t\tas=\"div\"\n\t\t\t\t\tstatic\n\t\t\t\t\tclass=\"fixed z-10 inset-0 overflow-y-auto\"\n\t\t\t\t\t:open=\"open\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<TransitionChild\n\t\t\t\t\t\t\tas=\"template\"\n\t\t\t\t\t\t\tenter=\"ease-out duration-300\"\n\t\t\t\t\t\t\tenter-from=\"opacity-0\"\n\t\t\t\t\t\t\tenter-to=\"opacity-100\"\n\t\t\t\t\t\t\tleave=\"ease-in duration-200\"\n\t\t\t\t\t\t\tleave-from=\"opacity-100\"\n\t\t\t\t\t\t\tleave-to=\"opacity-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DialogOverlay\n\t\t\t\t\t\t\t\tclass=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TransitionChild>\n\n\t\t\t\t\t\t<!-- This element is to trick the browser into centering the modal contents. -->\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"hidden sm:inline-block sm:align-middle sm:h-screen\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>&#8203;</span\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<TransitionChild\n\t\t\t\t\t\t\tas=\"template\"\n\t\t\t\t\t\t\tenter=\"ease-out duration-300\"\n\t\t\t\t\t\t\tenter-from=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n\t\t\t\t\t\t\tenter-to=\"opacity-100 translate-y-0 sm:scale-100\"\n\t\t\t\t\t\t\tleave=\"ease-in duration-200\"\n\t\t\t\t\t\t\tleave-from=\"opacity-100 translate-y-0 sm:scale-100\"\n\t\t\t\t\t\t\tleave-to=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t\tclass=\"inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-sm sm:w-full sm:p-6\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"mx-auto flex items-center justify-center h-12 w-12 rounded-full bg-green-100\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RefreshIcon\n\t\t\t\t\t\t\t\t\t\t\tclass=\"animate-spin h-6 w-6 text-green-600\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"mt-3 text-center sm:mt-5\">\n\t\t\t\t\t\t\t\t\t\t<DialogTitle\n\t\t\t\t\t\t\t\t\t\t\tas=\"h3\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"text-lg leading-6 font-medium text-gray-900\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\tIhre Bestellung wird bearbeitet\n\t\t\t\t\t\t\t\t\t\t</DialogTitle>\n\t\t\t\t\t\t\t\t\t\t<div class=\"mt-2\">\n\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-sm text-gray-500\">\n\t\t\t\t\t\t\t\t\t\t\t\tBitte aktualisieren Sie diese Seite nicht.\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</TransitionChild>\n\t\t\t\t\t</div>\n\t\t\t\t</Dialog>\n\t\t\t</TransitionRoot>\n\t\t\t<div\n\t\t\t\tclass=\"shadow rounded-lg divide-gray-200\"\n\t\t\t\t:class=\"{ 'bg-brand': currentStep.step === 5 }\"\n\t\t\t>\n\t\t\t\t<div class=\"px-2 py-2 sm:px-6 sm:py-6\">\n\t\t\t\t\t<form-header-steps v-if=\"currentStep.step !== 5\" :steps=\"steps\" />\n\t\t\t\t\t<transition name=\"bounce\" mode=\"out-in\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t:key=\"currentStep.name\"\n\t\t\t\t\t\t\tclass=\"mt-6 text-center max-w-xl mx-auto\"\n\t\t\t\t\t\t\t:class=\"{'hidden': currentStep.step <= 2}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<h3\n\t\t\t\t\t\t\t\tclass=\"text-2xl leading-6 font-bold text-brand\"\n\t\t\t\t\t\t\t\t:class=\"{ 'text-white': currentStep.step === 5, 'hidden': currentStep.step <= 2 }\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ currentStep.name }}\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tv-if=\"currentStep.step === 3\"\n\t\t\t\t\t\t\t\tclass=\"mt-1 text-sm text-gray-500\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tBitte geben Sie Ihre Rechnungs- und Bezahldaten ein\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tv-if=\"currentStep.step === 4\"\n\t\t\t\t\t\t\t\tclass=\"mt-1 text-sm text-gray-500\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tBitte überprüfen Sie die unten aufgeführten Details und klicken\n\t\t\t\t\t\t\t\t\"Jetzt kostenpflichtig zu obigem Preis bestellen\", wenn alle\n\t\t\t\t\t\t\t\tInformationen korrekt sind.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"px-4 py-5 sm:px-6 sm:py-12 md:px-16\">\n\t\t\t\t\t<transition :name=\"transitionName\" mode=\"out-in\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"currentStep.component\"\n\t\t\t\t\t\t\t@changed=\"updateFormData\"\n\t\t\t\t\t\t></component>\n\t\t\t\t\t</transition>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"bg-brand rounded-b-lg px-4 py-4 sm:px-6\">\n\t\t\t\t\t<form-footer\n\t\t\t\t\t\t:is-first-step=\"isFirstStep\"\n\t\t\t\t\t\t:current-step=\"currentStep\"\n\t\t\t\t\t\t@next=\"goNext\"\n\t\t\t\t\t\t@previous=\"goPrevious\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport {\n\tDialog,\n\tDialogOverlay,\n\tDialogTitle,\n\tTransitionChild,\n\tTransitionRoot,\n} from '@headlessui/vue'\nimport { RefreshIcon } from '@heroicons/vue/outline'\nimport FormHeaderSteps from '@/components/Form/FormHeaderSteps.vue'\nimport FormFooter from '@/components/Form/FormFooter.vue'\nimport StepOne from '@/components/Steps/StepOne.vue'\nimport StepTwo from '@/components/Steps/StepTwo.vue'\nimport StepThree from '@/components/Steps/StepThree.vue'\nimport StepFour from '@/components/Steps/StepFour.vue'\nimport StepFive from '@/components/Steps/StepFive.vue'\nimport { ref, reactive, computed, watchEffect } from 'vue'\nimport { useStore } from 'vuex'\nimport axios from 'axios'\n\n// Change the API URL from the .env file\nconst api_url = import.meta.env.VITE_API_URL\n\nexport default {\n\tcomponents: {\n\t\tFormHeaderSteps,\n\t\tFormFooter,\n\n\t\tStepOne,\n\t\tStepTwo,\n\t\tStepThree,\n\t\tStepFour,\n\t\tStepFive,\n\n\t\tDialog,\n\t\tDialogOverlay,\n\t\tDialogTitle,\n\t\tTransitionChild,\n\t\tTransitionRoot,\n\t\tRefreshIcon,\n\t},\n\tsetup() {\n\t\tconst store = useStore()\n\t\tconst currentStep = computed(() => store.state.steps.currentStep)\n\n\t\tconst formDataValues = computed(() => {\n\t\t\treturn { ...store.state.steps.formData }\n\t\t})\n\n\t\tconst steps = computed(() => {\n\t\t\tif (currentStep.value.step <= 4) {\n\t\t\t\treturn store.state.steps.all.slice(0, 4)\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: '01',\n\t\t\t\t\tname: 'Objektdaten',\n\t\t\t\t\thref: '#',\n\t\t\t\t\tstatus: 'complete',\n\t\t\t\t\tstep: 1,\n\t\t\t\t},\n\t\t\t\t...store.state.steps.all.slice(4, 6),\n\t\t\t]\n\t\t})\n\t\tconst transitionName = computed(() => store.state.steps.transitionName)\n\t\tconst isFirstStep = computed(() => {\n\t\t\treturn currentStep.value.step === 1\n\t\t})\n\n\t\tconst mapFormValues = () => {\n\t\t\tlet output = {}\n\n\t\t\tObject.keys(formDataValues.value).map(function (item) {\n\t\t\t\tif (\n\t\t\t\t\tformDataValues.value[item] !== undefined &&\n\t\t\t\t\tformDataValues.value[item] !== null &&\n\t\t\t\t\tformDataValues.value[item]['value'] !== null &&\n\t\t\t\t\tformDataValues.value[item]['value'] !== undefined\n\t\t\t\t) {\n\t\t\t\t\toutput[item] = formDataValues.value[item]['value']\n\t\t\t\t} else if (\n\t\t\t\t\tformDataValues.value[item] === undefined ||\n\t\t\t\t\tformDataValues.value[item] === null\n\t\t\t\t) {\n\t\t\t\t\toutput[item] = null\n\t\t\t\t} else if (Array.isArray(formDataValues.value[item])) {\n\t\t\t\t\tconst arr = []\n\t\t\t\t\tObject.keys(formDataValues.value[item]).map((key) => {\n\t\t\t\t\t\tlet obj = {}\n\t\t\t\t\t\tObject.keys(formDataValues.value[item][key]).map((i) => {\n\t\t\t\t\t\t\tobj[i] = formDataValues.value[item][key][i]\n\t\t\t\t\t\t})\n\t\t\t\t\t\tarr.push(obj)\n\t\t\t\t\t})\n\t\t\t\t\toutput[item] = arr\n\t\t\t\t} else if (item === 'Rechnung') {\n\t\t\t\t\tlet result = {}\n\t\t\t\t\tObject.keys(formDataValues.value[item]).map((key) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tformDataValues.value[item][key] !== undefined &&\n\t\t\t\t\t\t\tformDataValues.value[item][key]['value'] !== null &&\n\t\t\t\t\t\t\tformDataValues.value[item][key]['value'] !== undefined\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tresult[key] = formDataValues.value[item][key]['value']\n\t\t\t\t\t\t} else if (formDataValues.value[item][key] === undefined) {\n\t\t\t\t\t\t\tresult[key] = null\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult[key] = formDataValues.value[item][key]\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\toutput[item] = result\n\t\t\t\t} else {\n\t\t\t\t\toutput[item] = formDataValues.value[item]\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn output\n\t\t}\n\n\t\tconst goNext = async () => {\n\t\t\tif (!formData.isValid) {\n\t\t\t\tawait formData.validate()\n\t\t\t}\n\n\t\t\tif (formData.isValid) {\n\t\t\t\tif (currentStep.value.step === 4) {\n\t\t\t\t\topen.value = true\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst data = mapFormValues()\n\n\t\t\t\t\t\t// remove image property from data.uploads\n\t\t\t\t\t\tconst uploads = data.uploads.map((item) => {\n\t\t\t\t\t\t\tconst obj = {}\n\t\t\t\t\t\t\tObject.keys(item).map((key) => {\n\t\t\t\t\t\t\t\tif (key !== 'image') {\n\t\t\t\t\t\t\t\t\tobj[key] = item[key]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\treturn obj\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tdata.uploads = uploads\n\n\t\t\t\t\t\tconst response = await axios.post(api_url, data)\n\n\t\t\t\t\t\tif (response.status === 200) {\n\t\t\t\t\t\t\t// track conversion\n\t\t\t\t\t\t\tif (typeof gtag === 'function') {\n\t\t\t\t\t\t\t\tconst nettoPrice = data.overallPrice / 1.19;\n\t\t\t\t\t\t\t\tconst roundedNettoPrice = parseFloat(nettoPrice.toFixed(2));\n\t\t\t\t\t\t\t\tgtag('event', 'conversion', {\n\t\t\t\t\t\t\t\t\t\t'send_to': 'AW-447218272/lt7qCP35g6AZEOCEoNUB',\n\t\t\t\t\t\t\t\t\t\t'value': roundedNettoPrice,\n\t\t\t\t\t\t\t\t\t\t'currency': 'EUR',\n\t\t\t\t\t\t\t\t\t\t'transaction_id': response.data.order_id || \"\",\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconsole.log('gtag not loaded')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstore.dispatch('steps/goNext', formData.formValues)\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (err.response) {\n\t\t\t\t\t\t\t// client received an error response (5xx, 4xx)\n\t\t\t\t\t\t\tconsole.log('Server Error:', err)\n\t\t\t\t\t\t} else if (err.request) {\n\t\t\t\t\t\t\t// client never received a response, or request never left\n\t\t\t\t\t\t\tconsole.log('Network Error:', err)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.log('Client Error:', err)\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\topen.value = false\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tstore.dispatch('steps/goNext', formData.formValues)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tconst goPrevious = () => {\n\t\t\tstore.dispatch('steps/goPrevious')\n\t\t}\n\n\t\tlet formData = reactive({})\n\n\t\tconst updateFormData = (event) => {\n\t\t\tformData = event.value\n\t\t}\n\n\t\tlet open = ref(false)\n\n\t\treturn {\n\t\t\tgoNext,\n\t\t\tgoPrevious,\n\t\t\ttransitionName,\n\t\t\tcurrentStep,\n\t\t\tsteps,\n\t\t\tisFirstStep,\n\t\t\tupdateFormData,\n\t\t\tformData,\n\t\t\topen,\n\t\t}\n\t},\n}\n</script>\n","import { createRouter, createWebHistory } from 'vue-router'\nimport Home from '/src/pages/Home.vue'\n\nconst routes = [\n\t// {\n\t// \tpath: '/',\n\t// \tname: 'Home',\n\t// \tcomponent: Home,\n\t// },\n]\n\nconst router = createRouter({\n\thistory: createWebHistory(),\n\troutes,\n})\n\nexport default router\n","const steps = [\n\t{\n\t\tid: '01',\n\t\tname: 'Stil auswählen',\n\t\thref: '#',\n\t\tstatus: 'current',\n\t\tstep: 1,\n\t\tcomponent: 'step-one',\n\t},\n\t{\n\t\tid: '02',\n\t\tname: 'Konfigurieren',\n\t\thref: '#',\n\t\tstatus: 'upcoming',\n\t\tstep: 2,\n\t\tcomponent: 'step-two',\n\t},\n\t{\n\t\tid: '03',\n\t\tname: 'Rechnungsdaten',\n\t\thref: '#',\n\t\tstatus: 'upcoming',\n\t\tstep: 3,\n\t\tcomponent: 'step-three',\n\t},\n\t{\n\t\tid: '04',\n\t\tname: 'Bestellung überprüfen',\n\t\thref: '#',\n\t\tstatus: 'upcoming',\n\t\tstep: 4,\n\t\tcomponent: 'step-four',\n\t},\n\t{\n\t\tid: '05',\n\t\tname: 'Bestellbestätigung',\n\t\thref: '#',\n\t\tstatus: 'upcoming',\n\t\tstep: 5,\n\t\tcomponent: 'step-five',\n\t},\n]\n\nexport default steps\n","import steps from '@/data/steps'\n\nconst state = {\n\tall: [...steps],\n\tcurrentStep: steps[0],\n\ttransitionName: 'slide-left',\n\tformData: {},\n}\n\nconst getters = {\n\tcurrentStep: (state) => {\n\t\treturn state.currentStep\n\t},\n}\n\nconst actions = {\n\tgoNext({ state, commit, getters }, formData = null) {\n\t\tif (formData) {\n\t\t\tcommit('SET_FORM_DATA', formData)\n\t\t}\n\t\tcommit('SET_CURRENT_TRANSITION_NAME', 'slide-left')\n\t\tcommit('SET_CURRENT_STEP', {\n\t\t\tpayload: state.all[getters.currentStep.step],\n\t\t\tactionType: 'next',\n\t\t})\n\t},\n\tgoPrevious({ state, commit, getters }) {\n\t\tcommit('SET_CURRENT_TRANSITION_NAME', 'slide-right')\n\t\tcommit('SET_CURRENT_STEP', {\n\t\t\tpayload: state.all[getters.currentStep.step - 2],\n\t\t\tactionType: 'previous',\n\t\t})\n\t},\n}\n\nconst mutations = {\n\tSET_CURRENT_STEP(state, { payload, actionType }) {\n\t\tif (actionType === 'next') state.all[payload.step - 2].status = 'complete'\n\t\tstate.all[payload.step - 1].status = 'current'\n\t\tif (actionType === 'previous') state.all[payload.step].status = 'upcoming'\n\t\tstate.currentStep = state.all[payload.step - 1]\n\t},\n\tSET_CURRENT_TRANSITION_NAME(state, name) {\n\t\tstate.transitionName = name\n\t},\n\tSET_FORM_DATA(state, payload) {\n\t\tstate.formData = { ...state.formData, ...payload }\n\t},\n}\nexport default {\n\tnamespaced: true,\n\tstate,\n\tgetters,\n\tmutations,\n\tactions,\n}\n","import { createStore } from 'vuex'\nimport steps from './modules/steps'\n\nconst store = createStore({\n\tmodules: {\n\t\tsteps,\n\t},\n})\n\nexport default store\n","import { createApp } from 'vue'\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\nimport './index.css'\n\ncreateApp(App).use(router).use(store).mount('#app')\n"],"names":["CheckIcon","_createElementBlock","ArrowCircleLeftIcon","ArrowCircleRightIcon","yup.object","yup.string","PDFJS.GlobalWorkerOptions","formatter","XIcon","PhotographIcon","AnnotationIcon","CheckCircleIcon","UploadIcon","ExclamationCircleIcon","PDFJS.getDocument","yup.boolean","yup.array","yup\n          .number","_createTextVNode","_createElementVNode","_normalizeClass","_hoisted_17","_hoisted_25","_hoisted_28","_hoisted_31","_hoisted_34","_hoisted_36","_hoisted_38","_createVNode","_hoisted_41","QuestionMarkCircleIcon","VueClickAway","_hoisted_2","_vModelDynamic","SelectorIcon","_hoisted_1","_hoisted_3","OPTIONS","yup\n\t\t\t\t\t\t.object","yup\n\t\t\t\t\t\t.string","yup\n\t\t\t\t\t.object","yup\n\t\t\t\t\t.boolean","RADIO_OPTIONS","_popScopeId","_hoisted_18","_hoisted_20","_hoisted_30","_hoisted_43","CreditCardIcon","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","RefreshIcon","steps"],"mappings":"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"}