{"version":3,"file":"javascripts/chunks/ae0b5d9b42ccaa014801.survey.js","mappings":"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","sources":["webpack:///./components/icon/Icon.jsx","webpack:///./components/spinner/Spinner.jsx","webpack:///./components/survey/javascripts/hooks/useQuestionResult.ts","webpack:///./components/survey/javascripts/hooks/useLocalStorage.ts","webpack:///./components/survey/javascripts/hooks/useQuestionResults.ts","webpack:///./components/survey/javascripts/hooks/useSubmitterUid.ts","webpack:///./components/survey/javascripts/hooks/useSurvey.ts","webpack:///./components/survey/javascripts/components/SurveyColumns/SurveyColumns.tsx","webpack:///./components/survey/javascripts/components/SurveyContainer/SurveyContainer.tsx","webpack:///./components/survey/javascripts/components/SurveyCover/SurveyCover.tsx","webpack:///./components/survey/javascripts/components/SurveyNavButton/SurveyNavButton.tsx","webpack:///./components/survey/javascripts/config.ts","webpack:///./components/survey/javascripts/hooks/useMq.ts","webpack:///./components/survey/javascripts/components/SurveyResult/SurveyResult.tsx","webpack:///./components/survey/javascripts/components/SurveyResultContainer/SurveyResultContainer.tsx","webpack:///./components/survey/javascripts/components/SurveyStartContainer/SurveyStartContainer.tsx","webpack:///./components/survey/javascripts/hooks/useIsVisible.ts","webpack:///./components/survey/javascripts/components/SurveyStartSlidePlaceholder/SurveyStartSlidePlaceholder.tsx","webpack:///./components/survey/javascripts/components/SurveyStartTeaser/SurveyStartTeaser.tsx","webpack:///./components/survey/javascripts/components/SurveyStartTeaserSlide/SurveyStartTeaserSlide.tsx","webpack:///./components/survey/javascripts/containers/StartTeaser.tsx","webpack:///./components/survey/javascripts/components/FormikAutoSubmit/FormikAutoSubmit.ts","webpack:///./components/survey/javascripts/components/SurveyLoadingInline/SurveyLoadingInline.tsx","webpack:///./components/survey/javascripts/components/SurveyOption/SurveyOption.tsx","webpack:///./components/survey/javascripts/components/SurveyQuestion/SurveyQuestion.tsx","webpack:///./components/survey/javascripts/containers/Question.tsx","webpack:///./components/survey/javascripts/containers/App.tsx","webpack:///./components/survey/javascripts/containers/Root.tsx","webpack:///./components/survey/javascripts/survey.jsx","webpack:///./components/text/Text.jsx","webpack:///./javascripts/dom/select.js","webpack:///./javascripts/helpers/baseModule.js","webpack:///./twig-extensions/filter/withModifier.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst Icon = ({ className, size, id }) => (\n \n \n \n);\n\nIcon.propTypes = {\n className: PropTypes.string,\n size: PropTypes.string,\n id: PropTypes.string.isRequired\n};\n\nIcon.defaultProps = {\n className: '',\n size: 'small'\n};\n\nexport default Icon;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst Spinner = ({ className }) => (\n
\n \n \n \n \n \n \n
\n);\n\nSpinner.propTypes = {\n className: PropTypes.string\n};\n\nSpinner.defaultProps = {\n className: ''\n};\n\nexport default Spinner;\n","import * as React from 'react';\n\nimport { CraftUsersSessionInfoResponse, SurveyResultsResponse } from '../types';\n\nconst fetcher = async (\n url: string,\n submitterUid: string,\n answerUid: string\n) => {\n const csrfData: CraftUsersSessionInfoResponse = await fetch(\n '/actions/users/session-info',\n {\n headers: {\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n }\n }\n ).then((res) => res.json());\n\n return fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'BVMW-Survey-Submitter-UID': submitterUid,\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': csrfData.csrfTokenValue,\n 'X-Requested-With': 'XMLHttpRequest'\n },\n body: JSON.stringify({\n answerUid\n })\n }).then((res) => res.json());\n};\n\nconst useQuestionResult = (\n submitterUid: string,\n surveyUid: string,\n questionUid: string\n) => {\n /**\n * Response data to the submitted answer, i.e. survey results\n */\n const [data, setData] = React.useState(null);\n\n /**\n * Whether an answer request is currently running\n */\n const [isLoading, setIsLoading] = React.useState(false);\n\n /**\n * Submit an answer to a question\n *\n * @param answerUid UID of the selected answer\n * @returns A promise that resolves when the request has finished\n */\n const submitAnswer = React.useCallback(\n async (answerUid: string) => {\n setIsLoading(true);\n\n const url = `/api/surveys/${surveyUid}/questions/${questionUid}/submissions`;\n\n try {\n const resData: SurveyResultsResponse = await fetcher(\n url,\n submitterUid,\n answerUid\n );\n\n setData(resData);\n } catch (e) {\n // pass\n }\n\n setIsLoading(false);\n },\n [surveyUid, questionUid, submitterUid, setIsLoading, setData]\n );\n\n /**\n * Reset the response data\n *\n * @returns {void}\n */\n const reset = () => {\n setData(null);\n setIsLoading(false);\n };\n\n return {\n data,\n isLoading,\n submitAnswer,\n reset\n };\n};\n\nexport default useQuestionResult;\n","import * as React from 'react';\n\nconst useLocalStorage = (key: string): [S | null, (value: S) => void] => {\n const [data, setStateData] = React.useState(() => {\n const value = localStorage.getItem(key);\n return value ? JSON.parse(value) : null;\n });\n\n const setData = (value: S): void => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch (e) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem#exceptions\n // pass\n }\n\n setStateData(value);\n };\n\n return [data, setData];\n};\n\nexport default useLocalStorage;\n","import * as React from 'react';\n\nimport { SurveyResultQuestion, SurveyResultsResponse } from '../types';\nimport useLocalStorage from './useLocalStorage';\n\nconst QUESTION_RESULTS_LOCALSTORAGE_KEY = 'question-results';\n\nconst useQuestionResults = (\n currentQuestionUid: string,\n lastResult: SurveyResultsResponse | null\n) => {\n const [questions, setQuestions] = useLocalStorage<\n Record\n >(QUESTION_RESULTS_LOCALSTORAGE_KEY);\n\n const nonNullQuestions = questions || {};\n\n React.useEffect(() => {\n if (!lastResult) {\n return;\n }\n\n const q = lastResult.surveyResults.questions.find(\n (cur) => cur.uid === currentQuestionUid\n );\n\n if (q && !{}.hasOwnProperty.call(nonNullQuestions, q.uid)) {\n setQuestions({\n ...nonNullQuestions,\n [q.uid]: q\n });\n }\n }, [nonNullQuestions, lastResult, setQuestions]);\n\n return nonNullQuestions;\n};\n\nexport default useQuestionResults;\n","import useLocalStorage from './useLocalStorage';\n\nconst SUBMITTER_UID_LOCALSTORAGE_KEY = 'submitter-uid';\n\nconst useSubmitterUid = (): string => {\n const [uid, setUid] = useLocalStorage(SUBMITTER_UID_LOCALSTORAGE_KEY);\n\n if (uid === null) {\n const newUid = crypto.randomUUID(); // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID\n setUid(newUid);\n return newUid;\n }\n\n return uid;\n};\n\nexport default useSubmitterUid;\n","import * as React from 'react';\n\nimport { SurveyConfig } from '../types';\n\nconst useSurvey = (config: SurveyConfig) => {\n const questions = React.useMemo(\n () =>\n Object.fromEntries(\n config.questions.map((q, idx) => [q.uid, { ...q, idx }])\n ),\n [config]\n );\n\n const [currentQuestionUid, setCurrentQuestionUid] = React.useState(\n config.questions[0].uid\n );\n\n const currentQuestion = questions[currentQuestionUid];\n\n const currentQuestionIdx = questions[currentQuestionUid].idx;\n\n const totalQuestions = config.questions.length;\n\n const hasPrevQuestion = currentQuestionIdx > 0;\n\n const hasNextQuestion = currentQuestionIdx + 1 < totalQuestions;\n\n const goToPrevQuestion = React.useCallback(() => {\n if (hasPrevQuestion) {\n const prevQuestionUid = config.questions[currentQuestionIdx - 1].uid;\n setCurrentQuestionUid(prevQuestionUid);\n }\n }, [hasPrevQuestion, config, currentQuestionIdx, setCurrentQuestionUid]);\n\n const goToNextQuestion = React.useCallback(() => {\n if (hasNextQuestion) {\n const nextQuestionUid = config.questions[currentQuestionIdx + 1].uid;\n setCurrentQuestionUid(nextQuestionUid);\n }\n }, [hasNextQuestion, config, currentQuestionIdx, setCurrentQuestionUid]);\n\n return {\n currentQuestion,\n currentQuestionIdx,\n totalQuestions,\n hasPrevQuestion,\n hasNextQuestion,\n\n goToPrevQuestion,\n goToNextQuestion\n };\n};\n\nexport default useSurvey;\n","import * as React from 'react';\n\nexport type SurveyColumnsProps = {\n columnConfig: [string, string];\n col1: React.ReactNode;\n col2: React.ReactNode;\n};\n\nconst SurveyColumns = ({ columnConfig, col1, col2 }: SurveyColumnsProps) => (\n
\n \n {col1}\n
\n \n {col2}\n \n \n);\n\nexport default SurveyColumns;\n","import { motion } from 'framer-motion';\nimport * as React from 'react';\n\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyContainerProps = {\n headline: React.ReactNode;\n prevButton?: React.ReactNode;\n nextButton?: React.ReactNode;\n children?: React.ReactNode;\n};\n\nconst SurveyContainer = ({\n headline,\n prevButton,\n nextButton,\n children\n}: SurveyContainerProps) => (\n \n \n {prevButton}\n \n\n \n \n {headline}\n \n\n
{children}
\n
\n\n {nextButton && (\n \n {nextButton}\n \n )}\n
\n);\n\nexport default SurveyContainer;\n","import * as React from 'react';\n\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyCoverProps = {\n headline: React.ReactNode;\n topline: React.ReactNode;\n buttonLabel: React.ReactNode;\n onButtonClick?: () => void;\n duration?: React.ReactNode;\n};\n\nconst SurveyCover = ({\n headline,\n topline,\n buttonLabel,\n onButtonClick,\n duration\n}: SurveyCoverProps) => (\n
\n \n {topline}\n \n\n \n {headline}\n \n\n \n \n {buttonLabel}\n \n\n \n \n \n \n\n {duration && {duration}}\n
\n);\n\nexport default SurveyCover;\n","import * as React from 'react';\n\nimport Icon from '../../../../icon/Icon.jsx';\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyNavButtonProps = {\n iconId: string;\n label?: React.ReactNode;\n hideLabel?: boolean;\n} & Omit<\n React.ButtonHTMLAttributes,\n 'children' | 'type' | 'ref'\n>;\n\nconst SurveyNavButton = ({ iconId, label, ...props }: SurveyNavButtonProps) => (\n \n);\n\nexport default SurveyNavButton;\n","/**\n * Colors used for the pieces of the pie chart\n */\nexport const pieChartColors = [\n ['#fff', '#e30613'],\n ['#4a4a4a', '#e3061333'],\n ['#fff', '#878787'],\n ['#fff', '#4a4a4a'],\n ['#4a4a4a', '#e7e7e7']\n];\n\n/**\n * Answer submission delay, in milliseconds\n */\nexport const submitAnswerDelay = 1000;\n","import * as React from 'react';\n\nconst useMq = (query: string) => {\n const mq = window.matchMedia(query);\n\n const [matches, setMatches] = React.useState(mq.matches);\n\n mq.addEventListener('change', (ev) => {\n setMatches(ev.matches);\n });\n\n return matches;\n};\n\nexport default useMq;\n","import { VictoryContainer, VictoryPie } from 'victory';\nimport * as React from 'react';\n\nimport { pieChartColors } from '../../config';\nimport { SurveyResultQuestion } from '../../types';\nimport useMq from '../../hooks/useMq';\n\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyResultProps = {\n headline?: React.ReactNode;\n questionResults: SurveyResultQuestion;\n};\n\nconst NullPieSlice = () => null;\n\nconst SurveyResult = ({ headline, questionResults }: SurveyResultProps) => {\n const chartData = React.useMemo(\n () =>\n questionResults.results\n .filter((r) => r.count > 0) // remove zero response answers\n .map((r, i) => ({\n x: r.answer.label,\n y: r.count,\n percent: r.percent,\n fg: pieChartColors[i % pieChartColors.length][0]\n })),\n [questionResults]\n );\n\n const isDesktop = useMq('(min-width: 960px)');\n\n const typoCopySmall = {\n fontSize: isDesktop ? '14px' : '12px',\n fontWeight: 500,\n fontFamily: 'Roboto, sans-serif',\n fill: '#4a4a4a'\n };\n\n const width = isDesktop ? 450 : 375;\n\n const height = 300;\n\n return (\n
\n {headline && (\n \n {headline}\n \n )}\n\n \n {/* pie chart with percentage labels on the slices */}\n g)}\n innerRadius={50}\n padAngle={2}\n height={height}\n width={width}\n labelRadius={65}\n labels={({ datum }) => `${datum.percent}%`}\n style={{\n labels: {\n ...typoCopySmall,\n fill: ({ datum }: any) => datum.fg\n }\n }}\n />\n\n {/* outer labels only */}\n datum.x.split('\\u00AD')}\n dataComponent={}\n style={{\n labels: {\n ...typoCopySmall\n }\n }}\n />\n \n
\n );\n};\n\nexport default SurveyResult;\n","import * as React from 'react';\n\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyResultContainerProps = {\n topline: React.ReactNode;\n headline: React.ReactNode;\n children?: React.ReactNode;\n};\n\nconst SurveyResultContainer = ({\n topline,\n headline,\n children\n}: SurveyResultContainerProps) => (\n
\n \n {topline}\n \n \n {headline}\n \n {children}\n
\n);\n\nexport default SurveyResultContainer;\n","import * as React from 'react';\nimport clsx from 'clsx';\n\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyStartContainerProps = {\n headline: React.ReactNode;\n left?: React.ReactNode;\n right: React.ReactNode;\n};\n\nconst SurveyStartContainer = ({\n headline,\n left,\n right\n}: SurveyStartContainerProps) => (\n \n \n {headline}\n \n\n {left &&
{left}
}\n\n
{right}
\n \n);\n\nexport default SurveyStartContainer;\n","import * as React from 'react';\n\nconst useIsVisible = (ref?: React.RefObject) => {\n const [isIntersecting, setIsIntersecting] = React.useState(false);\n\n React.useEffect(() => {\n const myRef = ref?.current;\n if (!myRef) {\n return undefined;\n }\n\n const obs = new IntersectionObserver((entries) => {\n setIsIntersecting(entries[0].isIntersecting);\n });\n\n obs.observe(myRef);\n\n return () => {\n obs.unobserve(myRef);\n };\n }, []);\n\n return isIntersecting;\n};\n\nexport default useIsVisible;\n","import * as React from 'react';\n\nimport Spinner from '../../../../spinner/Spinner.jsx';\n\nconst SurveyStartSlidePlaceholder = () => (\n
\n \n
\n);\n\nexport default SurveyStartSlidePlaceholder;\n","import { useKeenSlider } from 'keen-slider/react';\nimport * as React from 'react';\n\nimport SurveyNavButton from '../SurveyNavButton';\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyStartTeaserProps = {\n topline: React.ReactNode;\n prevButtonTitle: string;\n nextButtonTitle: string;\n children: React.ReactNode;\n};\n\nconst SurveyStartTeaser = ({\n topline,\n prevButtonTitle,\n nextButtonTitle,\n children\n}: SurveyStartTeaserProps) => {\n const multipleSlides = React.Children.count(children) > 2;\n const [sliderRef, instanceRef] = useKeenSlider({\n loop: multipleSlides\n });\n\n React.useLayoutEffect(() => {\n instanceRef.current?.update();\n }, [children]);\n\n return (\n
\n \n {topline}\n \n\n
\n {children}\n
\n\n {multipleSlides && (\n <>\n
\n instanceRef.current?.prev()}\n />\n
\n\n
\n instanceRef.current?.next()}\n />\n
\n \n )}\n
\n );\n};\n\nexport default SurveyStartTeaser;\n","import * as React from 'react';\n\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyStartTeaserSlideProps = {\n headline: React.ReactNode;\n children?: React.ReactNode;\n};\n\nconst SurveyStartTeaserSlide = ({\n headline,\n children\n}: SurveyStartTeaserSlideProps) => (\n
\n \n {headline}\n \n\n {children}\n
\n);\n\nexport default SurveyStartTeaserSlide;\n","import * as React from 'react';\nimport useSWR from 'swr';\n\nimport { SurveyConfig, SurveyResultsResponse } from '../types';\nimport useIsVisible from '../hooks/useIsVisible';\n\nimport { SurveyStartTeaserProps } from '../components/SurveyStartTeaser/SurveyStartTeaser';\nimport SurveyResult from '../components/SurveyResult';\nimport SurveyStartSlidePlaceholder from '../components/SurveyStartSlidePlaceholder';\nimport SurveyStartTeaser from '../components/SurveyStartTeaser';\nimport SurveyStartTeaserSlide from '../components/SurveyStartTeaserSlide';\n\nconst fetcher = (url: string) =>\n fetch(url, {\n headers: {\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest'\n }\n }).then((res) => res.json());\n\nexport type StartTeaserProps = {\n formatSlideHeadline: (question: string) => React.ReactNode;\n startTeaser: SurveyConfig;\n surveyUid: string;\n} & Omit;\n\nconst StartTeaser = ({\n formatSlideHeadline,\n startTeaser,\n surveyUid,\n ...props\n}: StartTeaserProps) => {\n const spyRef = React.useRef(null);\n\n /**\n * Whether the start teaser is currently visible (not below the fold)\n */\n const isVisible = useIsVisible(spyRef);\n\n /**\n * Whether the start teaser was at least once visible (not below the fold)\n */\n const [enabled, setEnabled] = React.useState(false);\n\n React.useEffect(() => {\n if (isVisible && !enabled) {\n setEnabled(true);\n }\n }, [isVisible, enabled, setEnabled]);\n\n const { data } = useSWR(\n enabled\n ? `/api/surveys/${surveyUid}/teaser/${startTeaser.uid}/results`\n : null,\n fetcher\n );\n\n const questionConfigs = React.useMemo(\n () => Object.fromEntries(startTeaser.questions.map((q) => [q.uid, q])),\n [startTeaser]\n );\n\n return (\n \n
\n\n {data ? (\n data?.surveyResults.questions.map((q) => (\n \n \n \n ))\n ) : (\n \n )}\n \n );\n};\n\nexport default StartTeaser;\n","import { useFormikContext } from 'formik';\nimport * as React from 'react';\n\nexport type FormikAutoSubmitProps = {\n delay: number;\n};\n\nconst FormikAutoSubmit = ({ delay }: FormikAutoSubmitProps) => {\n const formik = useFormikContext();\n\n React.useEffect(() => {\n const tl = window.setTimeout(formik.submitForm, delay);\n return () => window.clearTimeout(tl);\n }, [delay, formik.values]);\n\n return null;\n};\n\nexport default FormikAutoSubmit;\n","import * as React from 'react';\n\nimport Spinner from '../../../../spinner/Spinner.jsx';\n\nexport type SurveyLoadingInlineProps = {\n children?: React.ReactNode;\n};\n\nconst SurveyLoadingInline = ({ children }: SurveyLoadingInlineProps) => (\n
\n \n {children}\n
\n);\n\nexport default SurveyLoadingInline;\n","import * as React from 'react';\nimport clsx from 'clsx';\n\nimport Text from '../../../../text/Text.jsx';\nimport Icon from '../../../../icon/Icon.jsx';\n\nexport type SurveyOptionProps = {\n id: string;\n children: React.ReactNode;\n} & Omit, 'ref'>;\n\nconst SurveyOption = ({ id, children, ...props }: SurveyOptionProps) => (\n \n \n {children}\n \n\n \n\n
\n \n
\n \n);\n\nexport default SurveyOption;\n","import * as React from 'react';\n\nimport Text from '../../../../text/Text.jsx';\n\nexport type SurveyQuestionProps = {\n subline: React.ReactNode;\n children: React.ReactNode;\n hint: React.ReactNode;\n};\n\nconst SurveyQuestion = ({ subline, children, hint }: SurveyQuestionProps) => (\n
\n \n {subline}\n \n\n
{children}
\n\n \n {hint}\n \n
\n);\n\nexport default SurveyQuestion;\n","import { Formik, Field, Form } from 'formik';\nimport * as React from 'react';\n\nimport { submitAnswerDelay } from '../config';\nimport { SurveyConfigQuestion } from '../types';\n\nimport FormikAutoSubmit from '../components/FormikAutoSubmit';\nimport SurveyLoadingInline from '../components/SurveyLoadingInline';\nimport SurveyOption from '../components/SurveyOption';\nimport SurveyQuestion from '../components/SurveyQuestion';\n\nexport type QuestionProps = {\n currentQuestion: SurveyConfigQuestion;\n formatHint: (isLoading: boolean, isValid: boolean) => React.ReactNode;\n onSubmit: (answerUid: string) => Promise;\n};\n\nconst Question = ({ currentQuestion, formatHint, onSubmit }: QuestionProps) => (\n {\n const errors: Partial> = {};\n\n if (values.answerUid === '') {\n errors.answerUid = 'Required';\n }\n\n return errors;\n }}\n validateOnMount\n onSubmit={async (values) => {\n await onSubmit(values.answerUid);\n }}\n >\n {({ isValid, isSubmitting }) => (\n
\n \n\n \n {formatHint(isSubmitting, isValid)}\n \n ) : (\n formatHint(isSubmitting, isValid)\n )\n }\n >\n {currentQuestion.answerOptions.map((answer) => (\n \n {answer.label}\n \n ))}\n \n \n )}\n \n);\n\nexport default Question;\n","/* eslint-disable no-nested-ternary */\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport { AnimatePresence, LayoutGroup, motion, Variants } from 'framer-motion';\nimport * as React from 'react';\n\nimport { SurveyConfig } from '../types';\n\nimport useQuestionResult from '../hooks/useQuestionResult';\nimport useQuestionResults from '../hooks/useQuestionResults';\nimport useSubmitterUid from '../hooks/useSubmitterUid';\nimport useSurvey from '../hooks/useSurvey';\n\nimport SurveyColumns from '../components/SurveyColumns';\nimport SurveyContainer from '../components/SurveyContainer';\nimport SurveyCover from '../components/SurveyCover';\nimport SurveyNavButton from '../components/SurveyNavButton';\nimport SurveyResult from '../components/SurveyResult';\nimport SurveyResultContainer from '../components/SurveyResultContainer';\nimport SurveyStartContainer from '../components/SurveyStartContainer';\nimport Text from '../../../text/Text.jsx';\n\nimport StartTeaser from './StartTeaser';\nimport Question from './Question';\n\nexport type AppProps = {\n config: SurveyConfig;\n};\n\ntype Screen = 'start' | 'question';\n\ntype Direction = 'prev' | 'next';\n\nconst questionVariant: Variants = {\n initial: (direction: Direction) => ({\n opacity: 0,\n x: direction === 'prev' ? '-100%' : '100%'\n }),\n visible: {\n opacity: 1,\n x: 0\n },\n exit: (direction: Direction) => ({\n opacity: 0,\n x: direction === 'prev' ? '100%' : '-100%'\n })\n};\n\nconst containerVariant: Variants = {\n initial: {\n opacity: 0\n },\n visible: {\n opacity: 1,\n transition: {\n duration: 0.5\n }\n },\n exit: {\n opacity: 0\n }\n};\n\nconst App = ({ config }: AppProps) => {\n const intl = useIntl();\n\n const [[screen, direction], setScreen] = React.useState<[Screen, Direction]>([\n 'start',\n 'next'\n ]);\n\n const submitterUid = useSubmitterUid();\n\n const {\n currentQuestion,\n currentQuestionIdx,\n hasNextQuestion,\n goToPrevQuestion,\n goToNextQuestion\n } = useSurvey(config);\n\n const {\n data: resultData,\n submitAnswer,\n reset: resetResult\n } = useQuestionResult(submitterUid, config.uid, currentQuestion.uid);\n\n const results = useQuestionResults(currentQuestion.uid, resultData);\n\n const onClickPrevQuestion = React.useCallback(() => {\n resetResult();\n setScreen(['question', 'prev']);\n goToPrevQuestion();\n }, [resetResult, setScreen, goToPrevQuestion]);\n\n const onClickNextQuestion = React.useCallback(() => {\n resetResult();\n setScreen(['question', 'next']);\n goToNextQuestion();\n }, [resetResult, setScreen, goToNextQuestion]);\n\n const onSubmitAnswer = React.useCallback(\n async (answerUid: string) => {\n await submitAnswer(answerUid);\n setScreen(['question', 'next']);\n },\n [submitAnswer, setScreen]\n );\n\n const questionResultData = React.useMemo(\n () => results[currentQuestion.uid],\n [results, currentQuestion]\n );\n\n if (screen === 'start') {\n return (\n \n }\n left={\n config.startTeaser && (\n (\n \n )}\n nextButtonTitle={intl.formatMessage({\n id: 'startSliderNextButtonLabel'\n })}\n prevButtonTitle={intl.formatMessage({\n id: 'startSliderPrevButtonLabel'\n })}\n startTeaser={config.startTeaser}\n surveyUid={config.uid}\n topline={config.startTeaser.topline}\n />\n )\n }\n right={\n }\n onButtonClick={() => setScreen(['question', 'next'])}\n duration={config.readingTime}\n />\n }\n />\n \n );\n }\n\n let prevButton = null;\n let nextButton = null;\n let content = null;\n\n if (screen === 'question') {\n prevButton =\n currentQuestionIdx === 0 ? (\n }\n onClick={() => setScreen(['start', 'prev'])}\n />\n ) : (\n }\n onClick={onClickPrevQuestion}\n />\n );\n\n nextButton = hasNextQuestion ? (\n }\n onClick={onClickNextQuestion}\n />\n ) : null;\n\n if (questionResultData) {\n content =\n !hasNextQuestion && config.endTeaser ? (\n \n }\n headline={}\n >\n \n \n }\n col2={\n {\n window.open(\n config.endTeaser?.action.href,\n config.endTeaser?.action.target || '_self'\n );\n }}\n />\n }\n />\n ) : (\n {currentQuestion.question}}\n col2={\n }\n questionResults={questionResultData}\n />\n }\n />\n );\n } else {\n content = (\n \n isLoading ? (\n \n ) : (\n \n )\n }\n onSubmit={onSubmitAnswer}\n />\n );\n }\n }\n\n return (\n \n \n }\n prevButton={prevButton}\n nextButton={nextButton}\n >\n \n \n {content}\n \n \n \n \n \n );\n};\n\nexport default App;\n","import { AnimatePresence, MotionConfig } from 'framer-motion';\nimport { IntlProvider } from 'react-intl';\nimport * as React from 'react';\n\nimport { SurveyConfig } from '../types';\n\nimport App from './App';\n\nexport type RootProps = {\n config: SurveyConfig;\n};\n\nconst Root = ({ config }: RootProps) => (\n \n \n \n \n \n \n \n);\n\nexport default Root;\n","import * as React from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport BaseModule from '../../../javascripts/helpers/baseModule';\n\nimport Root from './containers/Root.tsx';\n\nexport default class Survey extends BaseModule {\n constructor(element) {\n super(element, 'survey');\n\n this.getElements([\n { id: 'config', selector: 'config' },\n { id: 'app', selector: 'app' }\n ]);\n\n const config = JSON.parse(this.elements.config.textContent);\n\n const root = createRoot(this.elements.app);\n root.render();\n }\n}\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport withModifier from '../../twig-extensions/filter/withModifier';\n\nconst Text = React.forwardRef(\n ({ className, modifiers = [], children, html, tag, variant }, ref) => {\n const Tag = tag;\n\n if (html) {\n return (\n \n );\n }\n\n return (\n \n {children}\n \n );\n }\n);\n\nText.propTypes = {\n className: PropTypes.string,\n modifiers: PropTypes.arrayOf(PropTypes.string),\n children: PropTypes.node,\n html: PropTypes.string,\n variant: PropTypes.string,\n tag: PropTypes.oneOf([\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h5',\n 'h6',\n 'span',\n 'figcaption',\n 'cite',\n 'label',\n 'legend',\n 'small',\n 'div'\n ])\n};\n\nText.defaultProps = {\n className: '',\n modifiers: [],\n children: null,\n html: null,\n variant: 'copy',\n tag: 'p'\n};\n\nexport default Text;\n","/**\n * This methods selects Elements from a specific context by a selector\n * @param {string} selector Selector of the element to find\n * @param {Element|HTMLDocument} [element] Context of the selectable\n * @returns {Array} Am array with selected Elements\n */\nexport default (selector, element = window.document) =>\n [].slice.call(element.querySelectorAll(selector));\n","import select from '../dom/select';\n\nclass BaseModule {\n constructor(element, id) {\n this.id = id;\n this.elements = {\n self: element\n };\n\n this.setInitialized();\n }\n\n setInitialized() {\n if (this.elements.self) {\n this.elements.self.setAttribute('data-js-module-initialized', true);\n }\n }\n\n setUnInitialized() {\n if (this.elements.self) {\n this.elements.self.removeAttribute('data-js-module-initialized');\n }\n }\n\n /**\n * Selects DOMElements of a module with a specific data attribute (`data-js-element=\"${module}__${selector}\"`)\n * Receives an object where the id param is the key in the elements cache\n * The selector param of the config is the selector part in the query-selector described above\n * @param {Object} config Configuration object in a key value format\n * @returns {void}\n */\n getElements(config) {\n const elementsConfig = config.map((elementConfig) => ({\n ...elementConfig,\n selector: `${this.id}__${elementConfig.selector}`\n }));\n\n const domElements = select('[data-js-element]', this.elements.self);\n\n for (let i = 0; i < domElements.length; i += 1) {\n const domElement = domElements[i];\n const elementConfigCandidates = elementsConfig.filter(\n (singleConfig) =>\n domElement.getAttribute('data-js-element') === singleConfig.selector\n );\n\n const [elementConfig] = elementConfigCandidates;\n\n if (elementConfig) {\n if (typeof this.elements[elementConfig.id] === 'undefined') {\n this.elements[elementConfig.id] = domElement;\n } else {\n if (typeof this.elements[elementConfig.id].push === 'undefined') {\n this.elements[elementConfig.id] = [this.elements[elementConfig.id]];\n }\n this.elements[elementConfig.id].push(domElement);\n }\n }\n }\n\n /*\n * Append a attribute \"asList\" to each element/s in this.elements\n * which is always an array no matter if element/s is an array\n * or a single HTMLElement\n */\n\n const asList = (obj) => (typeof obj.push === 'undefined' ? [obj] : obj);\n Object.values(this.elements).forEach((obj) => {\n obj.asList = asList(obj); // eslint-disable-line no-param-reassign\n });\n }\n}\n\nexport default BaseModule;\n","/**\n * Creates a class-set with BEM modifiers for a component\n * @param {string} prefix Prefix classname for the component\n * @param {Array} modifier Array with modifiers\n * @return {string} Classnames in BEM format\n */\nexport default function myFunctionName(prefix, modifier) {\n const flattenArray = (arr) => {\n return arr.reduce(\n (acc, val) =>\n Array.isArray(val) ? acc.concat(flattenArray(val)) : acc.concat(val),\n []\n );\n };\n\n let classes = [prefix];\n const modifiers = flattenArray(modifier || []);\n\n const uniqueModifiers = modifiers.filter((m, i) => {\n return modifiers.indexOf(m) === i;\n });\n\n classes = [\n ...classes,\n ...uniqueModifiers\n .filter((suffix) => suffix)\n .map((suffix) => `${prefix}--${suffix}`)\n ];\n\n return classes.join(' ');\n}\n"],"names":["Icon","className","size","id","xlinkHref","propTypes","PropTypes","defaultProps","Spinner","width","height","xmlns","viewBox","fill","d","fetcher","url","submitterUid","answerUid","fetch","headers","Accept","then","res","json","csrfData","method","csrfTokenValue","body","JSON","stringify","key","React","value","localStorage","getItem","parse","data","setStateData","setItem","e","currentQuestionUid","lastResult","useLocalStorage","questions","setQuestions","nonNullQuestions","q","surveyResults","find","cur","uid","hasOwnProperty","call","setUid","newUid","crypto","randomUUID","config","Object","fromEntries","map","idx","setCurrentQuestionUid","currentQuestion","currentQuestionIdx","totalQuestions","length","hasPrevQuestion","hasNextQuestion","goToPrevQuestion","prevQuestionUid","goToNextQuestion","nextQuestionUid","columnConfig","col1","col2","style","headline","prevButton","nextButton","children","motion","layout","Text","variant","tag","topline","buttonLabel","onButtonClick","duration","type","onClick","iconId","label","props","pieChartColors","query","mq","window","matchMedia","matches","setMatches","addEventListener","ev","NullPieSlice","questionResults","chartData","results","filter","r","count","i","x","answer","y","percent","fg","isDesktop","useMq","typoCopySmall","fontSize","fontWeight","fontFamily","aspectRatio","maxWidth","margin","standalone","colorScale","innerRadius","padAngle","labelRadius","labels","datum","split","dataComponent","left","right","clsx","ref","isIntersecting","setIsIntersecting","myRef","current","obs","IntersectionObserver","entries","observe","unobserve","prevButtonTitle","nextButtonTitle","multipleSlides","useKeenSlider","loop","sliderRef","instanceRef","update","title","prev","next","formatSlideHeadline","startTeaser","surveyUid","spyRef","isVisible","useIsVisible","enabled","setEnabled","useSWR","questionConfigs","question","delay","formik","useFormikContext","tl","setTimeout","submitForm","clearTimeout","values","checked","htmlFor","subline","hint","modifiers","formatHint","onSubmit","initialValues","validate","errors","validateOnMount","isValid","isSubmitting","answerOptions","as","SurveyOption","name","required","questionVariant","initial","direction","opacity","visible","exit","containerVariant","transition","intl","useIntl","screen","setScreen","useSubmitterUid","useSurvey","questionUid","setData","isLoading","setIsLoading","submitAnswer","resData","reset","useQuestionResult","resultData","resetResult","useQuestionResults","onClickPrevQuestion","onClickNextQuestion","onSubmitAnswer","questionResultData","animate","variants","formatMessage","readingTime","content","endTeaser","action","open","href","target","LayoutGroup","AnimatePresence","mode","custom","join","locale","i18n","messages","MotionConfig","Survey","element","getElements","selector","elements","textContent","createRoot","app","render","BaseModule","html","Tag","withModifier","dangerouslySetInnerHTML","__html","document","slice","querySelectorAll","this","self","setInitialized","setAttribute","removeAttribute","elementsConfig","elementConfig","domElements","select","domElement","singleConfig","getAttribute","push","forEach","obj","asList","myFunctionName","prefix","modifier","flattenArray","arr","reduce","acc","val","Array","isArray","concat","classes","uniqueModifiers","m","indexOf","suffix"],"sourceRoot":""}