{"version":3,"file":"s-forms.cjs","sources":["../src/constants/Constants.js","../src/contexts/IntlContextProvider.tsx","../src/model/DefaultFormGenerator.js","../src/util/Utils.js","../src/util/JsonLdObjectMap.js","../src/util/JsonLdObjectUtils.js","../src/util/JsonLdFramingUtils.js","../src/util/FormUtils.js","../src/util/Logger.js","../src/model/FormGenerator.js","../src/components/DefaultInput.jsx","../src/contexts/ConfigurationContext.js","../src/components/ErrorBoundary.jsx","../src/contexts/FormGenContext.js","../src/contexts/FormQuestionsContext.js","../src/model/QuestionAnswerProcessor.js","../src/components/answer/CheckboxAnswer.jsx","../src/components/answer/DateTimeAnswer.jsx","../src/components/answer/InputAnswer.jsx","../src/util/MaskMapper.js","../src/components/MaskedInput.jsx","../src/components/answer/MaskedInputAnswer.jsx","../src/components/answer/select/select.utils.js","../src/components/answer/select/SelectDefault.jsx","../src/styles/icons/CrossIcon.jsx","../src/styles/icons/CheckIcon.jsx","../src/components/answer/select/SelectFeedbackBadge.jsx","../src/components/answer/select/select.feedback.js","../src/components/answer/select/SelectWithFeedback.jsx","../src/components/answer/select/SelectAnswer.jsx","../src/components/answer/typehead/typeahead.utils.js","../src/components/answer/typehead/typeahead.renderers.jsx","../src/components/answer/typehead/TypeaheadWithFeedback.jsx","../src/components/answer/typehead/TypeheadDefault.jsx","../src/components/answer/typehead/TypeaheadAnswer.jsx","../src/styles/icons/CaretSquareUp.jsx","../src/styles/icons/CaretSquareDown.jsx","../src/styles/icons/InfoCircle.jsx","../src/styles/icons/QuestionCircle.jsx","../src/components/IconOverlay.jsx","../src/components/HelpIcon.jsx","../src/styles/icons/ExternalLink.jsx","../src/components/LinkIcon.jsx","../src/styles/icons/CommentBubble.jsx","../src/styles/icons/RecycleBin.jsx","../src/components/comment/CommentView.jsx","../src/components/comment/CommentList.tsx","../src/styles/icons/ArrowRight.jsx","../src/components/comment/CommentForm.jsx","../src/styles/icons/Close.jsx","../src/components/comment/QuestionCommentIcon.jsx","../src/styles/icons/HintBulb.jsx","../src/components/HintIcon.jsx","../src/components/QuestionStatic.jsx","../src/components/Answer.jsx","../src/model/ValidatorFactory.js","../src/components/PrefixIcon.jsx","../src/util/MediaAssetViewerUtils.js","../src/components/media/annotation/engine/buildRenderModel.js","../src/components/media/hooks/useMediaSurface.js","../src/components/media/annotation/AnnotationOverlay.jsx","../src/components/media/annotation/PolylineAnnotation.jsx","../src/components/media/annotation/TextAnnotation.jsx","../src/components/media/annotation/engine/useAnnotationsEngine.js","../src/components/media/annotation/engine/annotationVisibility.js","../src/components/media/MediaFullScreenContainer.jsx","../src/components/media/MediaAssetViewer.jsx","../src/components/media/video/VideoViewer.jsx","../src/components/media/video/hooks/useVideoPlayer.js","../src/components/media/video/hooks/enhancePlayer.js","../src/components/media/image/ImageViewer.jsx","../src/components/media/hooks/useFullscreen.js","../src/components/MediaContent.tsx","../src/components/Question.jsx","../src/components/wizard/WizardStep.jsx","../src/components/wizard/HorizontalWizardNav.jsx","../src/components/wizard/VerticalWizardNav.jsx","../src/hooks/useScrollToElement.jsx","../src/components/wizard/Wizard.jsx","../src/model/ValidationProcessor.js","../src/components/FormWindow.jsx","../src/components/wizard/Wizardless.jsx","../src/components/FormManager.jsx","../src/components/SFormsInner.jsx","../src/components/SForms.jsx"],"sourcesContent":["import * as JsonLdUtils from \"jsonld-utils\";\n\nexport default class Constants {\n  // Default bootstrap column count\n  static COLUMN_COUNT = 12;\n  static INPUT_LENGTH_THRESHOLD = 50;\n  static DATETIME_NUMBER_FORMAT = \"x\";\n  static EPOCH_MILLISECONDS = \"epoch-milliseconds\";\n\n  /**\n   * Contains mainly definition of constants used to parse the form declaration.\n   */\n  static FORM = \"http://onto.fel.cvut.cz/ontologies/documentation/form\";\n  static HAS_SUBQUESTION =\n    \"http://onto.fel.cvut.cz/ontologies/documentation/has_related_question\";\n  static HAS_ANSWER =\n    \"http://onto.fel.cvut.cz/ontologies/documentation/has_answer\";\n  static HAS_OPTION =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-possible-value\";\n  static HAS_OPTIONS_QUERY =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-possible-values-query\";\n  static HAS_VALUE_TYPE =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-value-type\";\n  static IS_DISABLED =\n    \"http://onto.fel.cvut.cz/ontologies/aviation/form-376/is-disabled\";\n  static INPUT_MASK = \"http://onto.fel.cvut.cz/ontologies/form/has-input-mask\";\n  static LAYOUT_CLASS =\n    \"http://onto.fel.cvut.cz/ontologies/form-layout/has-layout-class\";\n  static LAYOUT = {\n    FORM: \"form\",\n    QUESTION_SECTION: \"section\",\n    WIZARD_STEP: \"wizard-step\",\n    DATE: \"date\",\n    TIME: \"time\",\n    DATETIME: \"datetime\",\n    TEXT: \"text\",\n    TEXTAREA: \"textarea\",\n    CHECKBOX: \"checkbox\",\n    QUESTION_TYPEAHEAD: \"type-ahead\",\n    MASKED_INPUT: \"masked-input\",\n    ANSWERABLE: \"answerable\",\n    SPARQL: \"sparql\",\n    TURTLE: \"ttl\",\n    DISABLED: \"disabled\",\n    HIDDEN: \"hidden\",\n    COLLAPSED: \"collapsed\",\n    EMPHASISED: \"emphasised\",\n    EMPHASISE_ON_RELEVANT: \"emphasise-on-relevant\",\n    CATEGORY: [\n      \"category-1\",\n      \"category-2\",\n      \"category-3\",\n      \"category-4\",\n      \"category-5\",\n    ],\n  };\n  static HAS_INITIAL_INPUT_LENGTH =\n    \"http://onto.fel.cvut.cz/ontologies/form-layout/has-initial-input-length\";\n  static VALUE_TYPE_CODE = \"code\";\n  static VALUE_TYPE_TEXT = \"text\";\n  static GENERATED_ROW_SIZE = 1;\n  static HAS_QUESTION_ORIGIN =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-question-origin\";\n  static HAS_ANSWER_ORIGIN =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-answer-origin\";\n  static HAS_DATA_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/documentation/has_data_value\";\n  static HAS_OBJECT_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/documentation/has_object_value\";\n  static HELP_DESCRIPTION = \"http://purl.org/dc/terms/description\";\n  static SOURCE = \"http://purl.org/dc/terms/source\";\n  static XSD = {\n    MAX_EXCLUSIVE: \"http://www.w3.org/2001/XMLSchema#maxExclusive\",\n    MAX_INCLUSIVE: \"http://www.w3.org/2001/XMLSchema#maxInclusive\",\n    MIN_EXCLUSIVE: \"http://www.w3.org/2001/XMLSchema#minExclusive\",\n    MIN_INCLUSIVE: \"http://www.w3.org/2001/XMLSchema#minInclusive\",\n\n    INT: \"http://www.w3.org/2001/XMLSchema#int\",\n    INTEGER: \"http://www.w3.org/2001/XMLSchema#integer\",\n    NEGATIVE_INTEGER: \"http://www.w3.org/2001/XMLSchema#negativeInteger\",\n    NON_NEGATIVE_INTEGER: \"http://www.w3.org/2001/XMLSchema#nonNegativeInteger\",\n    NON_POSITIVE_INTEGER: \"http://www.w3.org/2001/XMLSchema#nonPositiveInteger\",\n    POSITIVE_INTEGER: \"http://www.w3.org/2001/XMLSchema#positiveInteger\",\n    FLOAT: \"http://www.w3.org/2001/XMLSchema#float\",\n    POSITIVE_FLOAT: \"http://www.w3.org/2001/XMLSchema#positiveFloat\",\n    NEGATIVE_FLOAT: \"http://www.w3.org/2001/XMLSchema#negativeFloat\",\n\n    BOOLEAN: \"http://www.w3.org/2001/XMLSchema#boolean\",\n  };\n  static STEP = \"http://onto.fel.cvut.cz/ontologies/form/step\";\n  static PATTERN = \"http://onto.fel.cvut.cz/ontologies/form/pattern\";\n  static ACCEPTS_ANSWER_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/form/accepts-answer-value\";\n  static ACCEPTS = \"http://onto.fel.cvut.cz/ontologies/form/accepts\";\n  static HAS_DATATYPE = \"http://onto.fel.cvut.cz/ontologies/form/has-datatype\";\n  static HAS_LAYOUT_CLASS =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-layout-class\";\n  static HAS_POSSIBLE_VALUES_QUERY =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-possible-values-query\";\n  static HAS_REQUIRED_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-required-value\";\n  static HAS_TESTED_QUESTION =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-tested-question\";\n  static HAS_TESTED_FORM =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-tested-form\";\n  static HAS_UNIT = \"http://onto.fel.cvut.cz/ontologies/form/has-unit\";\n  static HAS_VALID_ANSWER =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-valid-answer\";\n  static HAS_CORRECT_ANSWER =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-correct-answer-value\";\n  static IS_RELEVANT_IF =\n    \"http://onto.fel.cvut.cz/ontologies/form/is-relevant-if\";\n  static ACCEPTS_VALIDATION_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/form/accepts-validation-value\";\n  static HAS_VALIDATION_MESSAGE =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-validation-message\";\n  static NEGATIVE_CONDITION =\n    \"http://onto.fel.cvut.cz/ontologies/form/negative-condition\";\n  static REQUIRES_ANSWER =\n    \"http://onto.fel.cvut.cz/ontologies/form/requires-answer\";\n  static USED_ONLY_FOR_COMPLETENESS =\n    \"http://onto.fel.cvut.cz/ontologies/form/used-only-for-completeness\";\n  static REQUIRES_ANSWER_DESCRIPTION_IF =\n    \"http://onto.fel.cvut.cz/ontologies/form/requires-answer-description-if\";\n  static REQUIRES_ANSWER_IF =\n    \"http://onto.fel.cvut.cz/ontologies/form/requires-answer-if\";\n  static HAS_PRECEDING_QUESTION =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-preceding-question\";\n  static HAS_PRECEDING_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-preceding-value\";\n  static HAS_MEDIA_CONTENT =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-media-content\";\n  static ASSET = \"http://onto.fel.cvut.cz/ontologies/form/media/asset\";\n  static HAS_SOURCE =\n    \"http://onto.fel.cvut.cz/ontologies/form/media/has-source\";\n  static HAS_ANNOTATION =\n    \"http://onto.fel.cvut.cz/ontologies/form/media/has-annotation\";\n  static CONDITION = \"http://onto.fel.cvut.cz/ontologies/form/condition\";\n  static OR_CONDITION = \"http://onto.fel.cvut.cz/ontologies/form/or-condition\";\n  static HAS_SUB_CONDITION =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-sub-condition\";\n  static HAS_PATTERN = \"http://onto.fel.cvut.cz/ontologies/form-lt/has-pattern\";\n  static HAS_DECLARED_PREFIX =\n    \"http://onto.fel.cvut.cz/ontologies/form-spin/has-declared-prefix\";\n  static PREFIX = \"http://www.w3.org/ns/shacl#prefix\";\n  static NAMESPACE = \"http://www.w3.org/ns/shacl#namespace\";\n  static HAS_COMMENT = \"http://onto.fel.cvut.cz/ontologies/form/has-comment\";\n  static HAS_COMMENT_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-comment-value\";\n  static HAS_AUTHOR = \"http://onto.fel.cvut.cz/ontologies/form/has-author\";\n  static HAS_TIMESTAMP =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-timestamp\";\n  static TIME_FORMAT = \"http://onto.fel.cvut.cz/ontologies/form/time-format\";\n  static DATE_FORMAT = \"http://onto.fel.cvut.cz/ontologies/form/date-format\";\n  static DATETIME_FORMAT =\n    \"http://onto.fel.cvut.cz/ontologies/form/datetime-format\";\n  static TIMESTAMP_FORMAT =\n    \"http://onto.fel.cvut.cz/ontologies/form/timestamp-format\";\n\n  static NOT_ANSWERED_QUESTION =\n    \"http://onto.fel.cvut.cz/ontologies/form/not-answered-question\";\n  static ANSWERED_QUESTION =\n    \"http://onto.fel.cvut.cz/ontologies/form/answered-question\";\n  static HAS_VALIDATION_SEVERITY =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-validation-severity\";\n\n  static RDFS_LABEL = JsonLdUtils.RDFS_LABEL;\n  static RDFS_COMMENT = JsonLdUtils.RDFS_COMMENT;\n  static DEFAULT_HAS_CHILD = JsonLdUtils.DEFAULT_HAS_CHILD;\n  static BROADER = \"http://www.w3.org/2004/02/skos/core#broader\";\n  static HAS_NON_SELECTABLE_VALUE =\n    \"http://onto.fel.cvut.cz/ontologies/form/has-non-selectable-value\";\n  static PROVIDES_DEREFERENCEABLE_ANSWER_VALUES =\n    \"http://onto.fel.cvut.cz/ontologies/form/provides-dereferenceable-answer-values\";\n\n  static ICONS = {\n    QUESTION_COMMENTS: \"questionComments\",\n    QUESTION_HELP: \"questionHelp\",\n    QUESTION_LINK: \"questionLink\",\n    QUESTION_HINT: \"questionHint\",\n  };\n\n  static ICON_BEHAVIOR = {\n    ENABLE: \"enable\",\n    DISABLE: \"disable\",\n    ON_HOVER: \"onHover\",\n  };\n\n  // Default form options\n  static DEFAULT_OPTIONS = {\n    icons: [\n      {\n        id: Constants.ICONS.QUESTION_HELP,\n        behavior: Constants.ICON_BEHAVIOR.ENABLE,\n      },\n      {\n        id: Constants.ICONS.QUESTION_COMMENTS,\n        behavior: Constants.ICON_BEHAVIOR.ON_HOVER,\n      },\n      {\n        id: Constants.ICONS.QUESTION_LINK,\n        behavior: Constants.ICON_BEHAVIOR.ON_HOVER,\n      },\n      {\n        id: Constants.ICONS.QUESTION_HINT,\n        behavior: Constants.ICON_BEHAVIOR.DISABLE,\n      },\n    ],\n    enableOptionQuestionFeedback: false,\n  };\n\n  static ANNOTATION = {\n    HAS_ANNOTATION_TYPE:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-annotation-type\",\n    HAS_START_TIME:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-start-time\",\n    HAS_END_TIME:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-end-time\",\n    HAS_GEOMETRY_POINTS:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-geometry-points\",\n    HAS_OPACITY:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-opacity\",\n    HAS_COLOR:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-color\",\n  };\n\n  static POLYLINE_ANNOTATION = {\n    IMPLICIT_TYPE_LABEL: \"polyline\",\n    HAS_STROKE_WIDTH:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-stroke-width\",\n    HAS_FILL_COLOR:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-fill-color\",\n    DEFAULT_POLYLINE_ANNOTATION_STYLE: {\n      color: \"red\",\n      strokeWidth: 0.000002,\n      fillColor: \"transparent\",\n      opacity: 1.0,\n    },\n  };\n  static TEXT_ANNOTATION = {\n    IMPLICIT_TYPE_LABEL: \"text\",\n    HAS_FONT_SIZE:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-font-size\",\n    HAS_FONT_WEIGHT:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-font-weight\",\n    HAS_TEXT:\n      \"http://onto.fel.cvut.cz/ontologies/form/media/annotation/has-text\",\n    DEFAULT_TEXT_ANNOTATION_STYLE: {\n      text: \"Hello world\",\n      color: \"red\",\n      fontSizeInNormalizedPx: 0.05,\n      fontWeight: \"300\",\n      fontFamily: \"sans-serif\",\n      fontColor: \"red\",\n      opacity: 1.0,\n    },\n  };\n\n  static LANG = {\n    cs: {\n      locale: \"cs\",\n      label: \"Čestina\",\n    },\n    en: {\n      locale: \"en\",\n      label: \"English\",\n    },\n  };\n\n  static VALIDATION = {\n    SEVERITY: {\n      ERROR: \"error\",\n      WARNING: \"warning\",\n    },\n    DEFAULT_MESSAGE: {\n      REQUIRED: \"This field is required.\",\n      REQUIRED_ONLY_FOR_COMPLETENESS:\n        \"This field is required to complete the form.\",\n      INVALID: \"This field is invalid.\",\n      CHECK: \"This field must be checked.\",\n      LOWER_OR_EQUAL: \"This field should be a number equal or lower to \",\n      GREATER_OR_EQUAL: \"This field must be greater or equal to \",\n    },\n    CLASSNAME: {\n      ERROR: \"is-invalid\",\n      WARNING: \"is-warning\",\n    },\n  };\n}\n","import React, { ReactNode } from \"react\";\nimport Constants from \"../constants/Constants\";\nimport cs from \"../i18n/cs.json\";\nimport en from \"../i18n/en.json\";\nimport { IntlProvider } from \"react-intl\";\n\nexport const IntlContext = React.createContext({});\n\ninterface Props {\n  children: ReactNode;\n  locale?: string;\n}\n\nconst IntlContextProvider = ({\n  children,\n  locale = navigator.language,\n}: Props) => {\n  let lang = en;\n  if (locale === Constants.LANG.cs.locale) {\n    lang = cs;\n  }\n\n  return (\n    <IntlContext.Provider value={{ locale, lang }}>\n      <IntlProvider locale={locale} messages={lang}>\n        {children}\n      </IntlProvider>\n    </IntlContext.Provider>\n  );\n};\n\nexport default IntlContextProvider;\n","import formTemplate from \"./defaultForm.json\";\n\nexport default class DefaultFormGenerator {\n  /**\n   * Generates default form for the wizard framework.\n   *\n   * The form consists of a single step, which contains one text area for the description.\n   */\n  static generateForm() {\n    // Deep copy of the form template to prevent modifications\n    return JSON.parse(JSON.stringify(formTemplate));\n  }\n}\n","import Constants from \"../constants/Constants.js\";\n\nexport default class Utils {\n  /**\n   * Calculates a simple hash of the specified string, much like usual Java implementations.\n   * @param str The string to compute has for\n   * @return {number}\n   */\n  static getStringHash(str) {\n    let hash = 0;\n    const strlen = str ? str.length : 0;\n\n    if (strlen === 0) {\n      return hash;\n    }\n    for (let i = 0; i < strlen; i++) {\n      hash = (hash << 5) - hash + str.charCodeAt(i);\n      hash = hash & hash; // Convert to 32bit integer\n    }\n\n    return hash;\n  }\n\n  /**\n   * Wraps passed object into new array if it is not array already.\n   * @param object_or_array An object or array.\n   * @returns {*} New array containing passed object or passed array.\n   */\n  static asArray(object_or_array) {\n    if (!object_or_array) {\n      return [];\n    }\n    if (object_or_array.constructor === Array) {\n      return object_or_array;\n    }\n    return [object_or_array];\n  }\n\n  static findQuestionById(id, question, reflexive, asserted, transitive) {\n    if (reflexive) {\n      if (question[\"@id\"] === id) {\n        return question;\n      }\n    }\n\n    const subQuestions = Utils.asArray(question[Constants.HAS_SUBQUESTION]); // we have such method in some kind of json-ld utils\n    if (asserted) {\n      for (let q of subQuestions) {\n        let foundQ = Utils.findQuestionById(id, q, true, false, false);\n        if (foundQ) return foundQ;\n      }\n    }\n\n    if (transitive) {\n      for (let q of subQuestions) {\n        let foundQ = Utils.findQuestionById(id, q, false, true, true);\n        if (foundQ) return foundQ;\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Finds the first key in an array of objects that matches any of the specified keys.\n   *\n   * @param {Object[]} objectList - The array of objects to search through.\n   * @param {string[]} keysToCheck - An array of keys to check in each object.\n   * @returns {?string} - The first key that exists in any of the objects, or null if none are found.\n   */\n  static findKeyInObjects(objectList, keysToCheck) {\n    for (let i = 0; i < objectList.length; i++) {\n      for (let j = 0; j < keysToCheck.length; j++) {\n        if (objectList[i].hasOwnProperty(keysToCheck[j])) {\n          return keysToCheck[j];\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Checks whether the feedback for option questions is enabled in the options.\n   * @param options\n   * @returns {*|boolean}\n   */\n  static isOptionQuestionFeedbackEnabled(options) {\n    return options?.enableOptionQuestionFeedback ?? false;\n  }\n}\n","export default class JsonLdObjectMap {\n  static objectMap = {};\n\n  static putObject(id, question) {\n    JsonLdObjectMap.objectMap[id] = question;\n  }\n\n  static getObject(id) {\n    return JsonLdObjectMap.objectMap[id];\n  }\n}\n","import * as jsonld from \"jsonld\";\nimport * as JsonLdUtils from \"jsonld-utils\";\nimport Utils from \"./Utils\";\nimport tsort from \"@kbss-cvut/tsort\";\n\nexport default class JsonLdObjectUtils {\n  static getFirstObject(subject, predicate) {\n    const values = jsonld.getValues(subject, predicate);\n\n    if (values.length === 0) {\n      //throw \"Subject \"  + subject[@id] + \" does not have any value of property \" + predicate;\n      return null;\n    }\n    return values[0];\n  }\n\n  static compareValues(jsonLdValue1, jsonLdValue2) {\n    jsonLdValue1 =\n      typeof jsonLdValue1 === \"object\"\n        ? jsonLdValue1\n        : { \"@value\": jsonLdValue1 };\n    jsonLdValue2 =\n      typeof jsonLdValue2 === \"object\"\n        ? jsonLdValue2\n        : { \"@value\": jsonLdValue2 };\n\n    // TODO remove: workaround for bad persistance of boolean values -- { @value: \"true\" } instead of { @value: true }\n    if (\n      jsonLdValue1 &&\n      jsonLdValue1[\"@value\"] &&\n      jsonLdValue2 &&\n      jsonLdValue2[\"@value\"]\n    ) {\n      const strValue1 =\n        typeof jsonLdValue1[\"@value\"] === \"string\"\n          ? jsonLdValue1[\"@value\"]\n          : JSON.stringify(jsonLdValue1[\"@value\"]);\n      const strValue2 =\n        typeof jsonLdValue2[\"@value\"] === \"string\"\n          ? jsonLdValue2[\"@value\"]\n          : JSON.stringify(jsonLdValue2[\"@value\"]);\n\n      if (strValue1 === strValue2) {\n        return true;\n      }\n    }\n    return jsonld.compareValues(jsonLdValue1, jsonLdValue2);\n  }\n\n  /**\n   * Sorts the specified JSON-LD data using a topological sort over partially ordered set defined by gtProperty.\n   *\n   * This is useful for situations where each item only knows its immediate neighbour in the list.\n   * @param data The data to sort, should be an array\n   * @param gtProperty Property specifying that an item is greater than another item. It is used for comparison.\n   *\n   */\n  static toplogicalSort(data, gtProperty) {\n    let swapped;\n    do {\n      swapped = false;\n      for (let i = 0; i < data.length; i++) {\n        for (let j = i; j < data.length; j++) {\n          if (data[i][gtProperty]) {\n            let gtId =\n              typeof data[i][gtProperty] === \"object\"\n                ? data[i][gtProperty][\"@id\"]\n                : data[i][gtProperty];\n            if (gtId === data[j][\"@id\"]) {\n              const tmp = data[i];\n              data[i] = data[j];\n              data[j] = tmp;\n              swapped = true;\n              break;\n            }\n          }\n        }\n      }\n    } while (swapped);\n\n    return data;\n  }\n\n  /**\n   * Sorts the specified JSON-LD data using a topological sort over partially ordered set defined by gtProperty,\n   * while preserving original order.\n   *\n   * This is useful for situations where each item only knows its immediate neighbour in the list.\n   * @param data The data to sort, should be an array\n   * @param gtProperty Property specifying that an item is greater than another item. It is used for comparison.\n   *\n   */\n  static orderPreservingToplogicalSort(data, gtProperty) {\n    const graph = tsort();\n    const id2ObjectMap = {};\n\n    for (let i = 0; i < data.length; i++) {\n      let currentId = data[i][\"@id\"];\n      graph.add(currentId);\n      id2ObjectMap[currentId] = data[i];\n\n      Utils.asArray(data[i][gtProperty])\n        .map((val) => (typeof val === \"object\" ? val[\"@id\"] : val))\n        .map((val) => [val, currentId])\n        .forEach((edge) => graph.add(edge));\n    }\n\n    let sortedIds = graph.sort();\n    for (let i = 0; i < sortedIds.length; i++) {\n      data[i] = id2ObjectMap[sortedIds[i]];\n    }\n    return data;\n  }\n\n  static getCompareLocalizedLabelFunction(intl) {\n    return (a, b) => {\n      const aLabel = JsonLdUtils.getLocalized(a[JsonLdUtils.RDFS_LABEL], intl);\n      const bLabel = JsonLdUtils.getLocalized(b[JsonLdUtils.RDFS_LABEL], intl);\n      if (aLabel < bLabel) {\n        return -1;\n      } else if (aLabel > bLabel) {\n        return 1;\n      }\n      return 0;\n    };\n  }\n\n  static orderByLocalizedLabels(data, intl) {\n    return data.sort(JsonLdObjectUtils.getCompareLocalizedLabelFunction(intl));\n  }\n\n  /**\n   * Evaluates if jsonLdObject has provided id.\n   * @param jsonLdObject\n   * @param id\n   * @returns {boolean}\n   */\n  static checkId(jsonLdObject, id) {\n    if (jsonLdObject === undefined) {\n      return;\n    }\n    if (jsonLdObject.constructor === Array) {\n      return !!jsonLdObject.find((o) => o[\"@id\"] === id);\n    }\n    if (jsonLdObject.constructor === Object) {\n      return jsonLdObject[\"@id\"] === id;\n    }\n  }\n}\n","import * as jsonld from \"jsonld\";\nimport Constants from \"../constants/Constants\";\nimport FormUtils from \"../util/FormUtils\";\nimport Utils from \"./Utils\";\n\nconst formShape = {\n  root: {\n    [Constants.HAS_LAYOUT_CLASS]: Constants.FORM,\n  },\n  expandProperties: [\n    Constants.HAS_SUBQUESTION,\n    Constants.IS_RELEVANT_IF,\n    Constants.HAS_ANSWER,\n    Constants.HAS_DECLARED_PREFIX,\n    Constants.HAS_OPTION,\n    Constants.HAS_CORRECT_ANSWER,\n    Constants.HAS_COMMENT,\n    Constants.HAS_MEDIA_CONTENT,\n    Constants.HAS_ANNOTATION,\n  ],\n};\n\nexport default class JsonLdFramingUtils {\n  //TODO revise\n\n  /**\n   * Performs JSON-LD custom framing using shapes. Shape is declaration of the JSON-LD framing\n   * in a language that is incompatible with JSON-LD specification.\n   *\n   * @param input the JSON-LD input to framing by a shape.\n   * @param shape the JSON-LD custom frame configuration using shapes.\n   * @param callback(err, framed) called once the operation completes.\n   */\n  static customFrame(input, shape, callback) {\n    if (arguments.length < 2) {\n      return jsonld.nextTick(function () {\n        callback(new TypeError(\"Could not frame, too few arguments.\"));\n      });\n    }\n\n    if (shape === null) {\n      //TODO remove\n      shape = formShape;\n    }\n\n    let flattened = null;\n    let err = null;\n    const flattenedCallback = (e, f) => {\n      flattened = f;\n      err = e;\n    };\n\n    jsonld.flatten(input, null, null, flattenedCallback);\n  }\n\n  static expandStructure(structure) {\n    let root;\n    const id2objectMap = {}; // mapping @id -> object\n\n    structure[\"@graph\"].forEach((item) => {\n      id2objectMap[item[\"@id\"]] = item;\n\n      if (FormUtils.isForm(item)) {\n        root = item;\n      }\n    });\n\n    try {\n      this._expandGraph(root, formShape, id2objectMap);\n    } catch (e) {\n      console.error(\n        \"Error '\" +\n          e +\n          \"' occured, while trying to apply frame-ing with custom shape.\"\n      );\n    }\n\n    return id2objectMap;\n  }\n\n  static _expandGraph(parentNode, shape, id2ObjectMap) {\n    let childArray;\n    let child;\n    let childId;\n\n    shape.expandProperties.forEach((prop) => {\n      if (parentNode.hasOwnProperty(prop)) {\n        parentNode[prop] = Utils.asArray(parentNode[prop]);\n        childArray = parentNode[prop];\n\n        for (let i = 0; i < childArray.length; i++) {\n          childId = this._getId(childArray[i]);\n          child = id2ObjectMap[childId];\n\n          if (child !== undefined) {\n            childArray[i] = child;\n            //console.log(childId + \" expanded.\");\n            this._expandGraph(child, shape, id2ObjectMap);\n          } else {\n            console.warn(\n              \"object with @id \" + childId + \" was not defined in input data.\"\n            );\n          }\n        }\n      }\n    });\n  }\n\n  static _getId(jsonObject) {\n    if (typeof jsonObject === \"string\") {\n      return jsonObject;\n    }\n    if (jsonObject && typeof jsonObject === \"object\") {\n      return jsonObject[\"@id\"];\n    }\n    return undefined;\n  }\n\n  static compressStructure = (rootNode) => {\n    let object2IdMap = []; // mapping object -> id\n    let idIncluded = new Set();\n\n    object2IdMap = this._compressGraph(rootNode, object2IdMap, idIncluded);\n\n    object2IdMap = object2IdMap.sort((a, b) => {\n      if (a[\"@id\"] && b[\"@id\"]) {\n        return a[\"@id\"].localeCompare(b[\"@id\"]);\n      }\n      return 0;\n    });\n\n    return object2IdMap;\n  };\n\n  static _compressGraph = (parentNode, object2IdMap, idIncluded) => {\n    if (!idIncluded.has(parentNode[\"@id\"])) {\n      object2IdMap.push(parentNode);\n      idIncluded.add(parentNode[\"@id\"]);\n    }\n\n    formShape.expandProperties.forEach((prop) => {\n      if (parentNode.hasOwnProperty(prop)) {\n        const childArray = parentNode[prop];\n\n        for (let i = 0; i < childArray.length; i++) {\n          const child = childArray[i];\n\n          if (child !== undefined) {\n            childArray[i] = child;\n\n            object2IdMap = this._compressGraph(child, object2IdMap, idIncluded);\n\n            parentNode[prop][i] = { \"@id\": child[\"@id\"] };\n          }\n        }\n      }\n    });\n\n    return object2IdMap;\n  };\n}\n","import * as JsonLdUtils from \"jsonld-utils\";\nimport * as jsonld from \"jsonld\";\n\nimport Constants from \"../constants/Constants\";\nimport Utils from \"./Utils\";\nimport JsonLdObjectMap from \"./JsonLdObjectMap\";\nimport JsonLdObjectUtils from \"./JsonLdObjectUtils\";\n\nexport default class FormUtils {\n  static isForm(structure) {\n    return JsonLdUtils.hasValue(\n      structure,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.FORM\n    );\n  }\n\n  static isWizardStep(structure) {\n    return JsonLdUtils.hasValue(\n      structure,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.WIZARD_STEP\n    );\n  }\n\n  static isSection(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.QUESTION_SECTION\n    );\n  }\n\n  static isAnswerable(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.ANSWERABLE\n    );\n  }\n\n  static isTypeahead(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.QUESTION_TYPEAHEAD\n    );\n  }\n\n  static getPossibleValuesQuery(question) {\n    return JsonLdUtils.getJsonAttValue(question, Constants.HAS_OPTIONS_QUERY);\n  }\n\n  static isDisabled(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.DISABLED\n    );\n  }\n\n  static isHidden(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.HIDDEN\n    );\n  }\n\n  static isTextarea(question, answerValue) {\n    return (\n      (answerValue &&\n        answerValue.length > Constants.INPUT_LENGTH_THRESHOLD &&\n        !FormUtils.isTypeahead(question)) ||\n      JsonLdUtils.hasValue(\n        question,\n        Constants.LAYOUT_CLASS,\n        Constants.LAYOUT.TEXTAREA\n      )\n    );\n  }\n\n  static isText(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.TEXT\n    );\n  }\n\n  static isCalendar(question) {\n    return (\n      FormUtils.isDate(question) ||\n      FormUtils.isTime(question) ||\n      FormUtils.isDateTime(question)\n    );\n  }\n\n  static isDate(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.DATE\n    );\n  }\n\n  static isTime(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.TIME\n    );\n  }\n\n  static isDateTime(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.DATETIME\n    );\n  }\n\n  static isTimestamp(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.TIMESTAMP_FORMAT,\n      Constants.EPOCH_MILLISECONDS\n    );\n  }\n\n  static isCheckbox(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.CHECKBOX\n    );\n  }\n\n  static isMaskedInput(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.MASKED_INPUT\n    );\n  }\n\n  static isSparqlInput(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.SPARQL\n    );\n  }\n\n  static isTurtleInput(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.TURTLE\n    );\n  }\n\n  static isCollapsed(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.COLLAPSED\n    );\n  }\n\n  static isEmphasised(question) {\n    return JsonLdUtils.hasValue(\n      question,\n      Constants.LAYOUT_CLASS,\n      Constants.LAYOUT.EMPHASISED\n    );\n  }\n\n  static getCategory(question) {\n    return Constants.LAYOUT.CATEGORY.find((c) =>\n      JsonLdUtils.hasValue(question, Constants.LAYOUT_CLASS, c)\n    );\n  }\n\n  static resolveValue(answer) {\n    if (!answer) {\n      return null;\n    }\n    if (answer[Constants.HAS_OBJECT_VALUE]) {\n      return answer[Constants.HAS_OBJECT_VALUE][\"@id\"];\n    } else {\n      return JsonLdUtils.getJsonAttValue(answer, Constants.HAS_DATA_VALUE);\n    }\n  }\n\n  static resolveValueObject(answer) {\n    if (!answer) {\n      return null;\n    }\n    if (answer[Constants.HAS_OBJECT_VALUE]) {\n      return Utils.asArray(answer[Constants.HAS_OBJECT_VALUE])[0];\n    }\n    if (answer[Constants.HAS_DATA_VALUE]) {\n      return Utils.asArray(answer[Constants.HAS_DATA_VALUE])[0];\n    }\n    return null;\n  }\n\n  static isRelevant(question) {\n    if (!question[Constants.IS_RELEVANT_IF]) {\n      return true;\n    }\n\n    for (let cond of Utils.asArray(question[Constants.IS_RELEVANT_IF])) {\n      if (!FormUtils.testCondition(cond)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  static hasValidationLogic(question) {\n    if (question[Constants.REQUIRES_ANSWER]) {\n      return true;\n    }\n    if (question[Constants.REQUIRES_ANSWER_IF]) {\n      return true;\n    }\n    if (question[Constants.PATTERN]) {\n      return true;\n    }\n    if (this.containsXSDProperty(question)) {\n      return true;\n    }\n    return false;\n  }\n\n  static isValid(question) {\n    if (question[Constants.HAS_VALID_ANSWER] === false) {\n      return false;\n    }\n    for (const subQ of Utils.asArray(question[Constants.HAS_SUBQUESTION])) {\n      if (this.isValid(subQ) === false) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  static testOrCondition(condition) {\n    const hasSubCondition = condition[Constants.HAS_SUB_CONDITION];\n    if (!hasSubCondition) {\n      console.warn(\"Or condition does not have any sub-condition !\");\n    }\n    for (const subC of this._getMappedObjectsArray(hasSubCondition)) {\n      if (this.testCondition(subC)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  static testCondition(condition) {\n    const isOrCondition = condition[Constants.HAS_SUB_CONDITION];\n    const acceptedValidationsValues =\n      condition[Constants.ACCEPTS_VALIDATION_VALUE];\n    const acceptedAnswerValues = condition[Constants.ACCEPTS_ANSWER_VALUE];\n    const accepts = condition[Constants.ACCEPTS];\n    const testedQuestions = condition[Constants.HAS_TESTED_QUESTION];\n    let question;\n\n    if (isOrCondition) {\n      return this.testOrCondition(condition);\n    }\n\n    if (acceptedValidationsValues && acceptedAnswerValues) {\n      console.warn(\n        \"Support for validation and requirement constraints at same time is not implemented !\"\n      );\n    }\n\n    // any answer within all subquestions\n    if (accepts && testedQuestions) {\n      const arr = Utils.asArray(accepts);\n      if (arr.length !== 1) {\n        console.warn(\n          \"Support for multiple accepts values is not implemented !\"\n        );\n      }\n      if (arr[0][\"@id\"] === Constants.ANSWERED_QUESTION) {\n        if (acceptedAnswerValues || acceptedValidationsValues) {\n          console.warn(\n            \"Support for accepted answer/validations values is not implemented !\"\n          );\n        }\n        for (const q of this._getMappedObjectsArray(testedQuestions)) {\n          if (!this.hasAnswer(q)) {\n            return false;\n          }\n        }\n        return true;\n      }\n      console.warn(\n        \"No support to accept question of type \" + arr[0][\"@id\"] + \" !\"\n      );\n    }\n\n    // valid answers\n    if (acceptedValidationsValues && testedQuestions) {\n      const arr = Utils.asArray(acceptedValidationsValues);\n      if (arr.length !== 1 || (arr[0] !== true && arr[0] !== \"true\")) {\n        console.warn(\n          'Validation values other than \"true\" are not implemented !'\n        );\n      }\n      for (const q of Utils.asArray(testedQuestions)) {\n        question = JsonLdObjectMap.getObject(q[\"@id\"]);\n        if (question === undefined) {\n          console.warn(\"Questions is not loaded in an object map.\");\n          return true;\n        }\n        if (this.isValid(question) === false) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    // concrete values\n    if (acceptedAnswerValues && testedQuestions) {\n      question = JsonLdObjectMap.getObject(testedQuestions[\"@id\"]);\n      for (const expValue of Utils.asArray(acceptedAnswerValues)) {\n        if (!question) {\n          console.warn(\"Question is not defined.\");\n          return true;\n        }\n        if (!question.hasOwnProperty(Constants.HAS_ANSWER)) {\n          //console.warn('Question does not have answer value defined.');\n          return false;\n        }\n        const answers = jsonld.getValues(question, Constants.HAS_ANSWER);\n\n        if (answers.length === 0) {\n          return false;\n        }\n        const qValue = FormUtils.resolveValueObject(answers[0]);\n\n        if (\n          qValue &&\n          expValue &&\n          qValue.hasOwnProperty(\"@value\") &&\n          expValue.hasOwnProperty(\"@id\") &&\n          qValue[\"@value\"] == expValue[\"@id\"]\n        ) {\n          // TODO remove !, this is temporary fix as type-ahead component returns data-value instead of\n          // code-value\n          return true;\n        }\n\n        if (JsonLdObjectUtils.compareValues(qValue, expValue)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  //returns array of valid object while ignoring\n  static _getMappedObjectsArray(jsonObjects, objectType) {\n    return Utils.asArray(jsonObjects)\n      .map((o) => {\n        const obj = JsonLdObjectMap.getObject(o[\"@id\"]);\n        if (obj === undefined) {\n          const ot = objectType ? objectType : \"Object\";\n          console.warn(\n            (objectType ? objectType : \"Object\") +\n              ' \"' +\n              o[\"@id\"] +\n              '\"' +\n              \" is not loaded in an object map.\"\n          );\n          return null;\n        }\n        return obj;\n      })\n      .filter(function (o) {\n        return o !== null;\n      });\n  }\n\n  static hasAnswer(question) {\n    if (!question) {\n      return false;\n    }\n\n    if (question.hasOwnProperty(Constants.HAS_ANSWER)) {\n      const answers = jsonld.getValues(question, Constants.HAS_ANSWER);\n      if (answers.length) {\n        const qValue = FormUtils.resolveValueObject(answers[0]);\n        if (qValue) {\n          if (qValue[\"@value\"] || qValue[\"@id\"]) {\n            return true;\n          }\n        }\n      }\n    }\n\n    for (const subQ of Utils.asArray(question[Constants.HAS_SUBQUESTION])) {\n      if (FormUtils.hasAnswer(subQ)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  static hasCorrectAnswer(question) {\n    if (!question) {\n      return false;\n    }\n\n    if (question.hasOwnProperty(Constants.HAS_CORRECT_ANSWER)) {\n      let answer = jsonld.getValues(question, Constants.HAS_CORRECT_ANSWER);\n      if (Array.isArray(answer) && answer.length !== 0) {\n        answer = answer[0];\n        const qValue = FormUtils.resolveValueObject(answer);\n        if (qValue) {\n          if (qValue[\"@value\"] || qValue[\"@id\"]) {\n            return true;\n          }\n        }\n      }\n      if (answer[\"@value\"] || answer[\"@id\"]) {\n        return true;\n      }\n      return false;\n    }\n\n    for (const subQ of Utils.asArray(question[Constants.HAS_SUBQUESTION])) {\n      if (FormUtils.hasCorrectAnswer(subQ)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  static getAnswerValue(question) {\n    if (!question) {\n      return null;\n    }\n\n    if (question.hasOwnProperty(Constants.HAS_ANSWER)) {\n      const answers = jsonld.getValues(question, Constants.HAS_ANSWER);\n      if (answers.length) {\n        const qValue = FormUtils.resolveValueObject(answers[0]);\n        if (qValue) {\n          if (qValue[\"@value\"] || qValue[\"@id\"]) {\n            return qValue[\"@value\"] || qValue[\"@id\"];\n          }\n        }\n      }\n    }\n\n    for (const subQ of Utils.asArray(question[Constants.HAS_SUBQUESTION])) {\n      const subQAnswer = FormUtils.getAnswerValue(subQ);\n      if (subQAnswer) {\n        return subQAnswer;\n      }\n    }\n\n    return null;\n  }\n\n  static getCorrectAnswerValue(question) {\n    if (!question) {\n      return null;\n    }\n\n    if (question.hasOwnProperty(Constants.HAS_CORRECT_ANSWER)) {\n      let answer = jsonld.getValues(question, Constants.HAS_CORRECT_ANSWER);\n      if (!answer) return null;\n\n      if (Array.isArray(answer)) {\n        answer = answer[0];\n      }\n\n      let qValue =\n        jsonld.getValues(answer, Constants.HAS_DATA_VALUE) ||\n        jsonld.getValues(answer, Constants.HAS_OBJECT_VALUE);\n\n      // Skip parsing if qValue is an empty array\n      if (qValue && (!Array.isArray(qValue) || qValue.length > 0)) {\n        if (Array.isArray(qValue)) {\n          qValue = qValue[0];\n        }\n\n        const label = qValue[Constants.RDFS_LABEL];\n        if (label) {\n          return label[\"@value\"] ?? label;\n        }\n        return qValue[\"@value\"] ?? null;\n      }\n\n      // No data/object value — fall back to the answer node itself\n      return answer[\"@value\"] ?? answer[Constants.RDFS_LABEL] ?? null;\n    }\n\n    for (const subQ of Utils.asArray(question[Constants.HAS_SUBQUESTION])) {\n      const subQAnswer = FormUtils.getCorrectAnswerValue(subQ);\n      if (subQAnswer) {\n        return subQAnswer;\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Resolves which format of date/time/datetime value should be used in the datetime picker.\n   * @param question Question with format info\n   * @param originalValue Value read from answer, not processed by the rendered component\n   * @param options Object with datetime formats\n   * @return {*} Format from Configuration\n   */\n  static resolveDateTimeFormat(question, originalValue, options) {\n    const isDate = FormUtils.isDate(question);\n    const isTime = FormUtils.isTime(question);\n    const isDatetime = FormUtils.isDateTime(question);\n\n    switch (true) {\n      case isDate:\n        return question[Constants.DATE_FORMAT] || options.dateFormat;\n\n      case isTime:\n        return question[Constants.TIME_FORMAT] || options.timeFormat;\n\n      case isDatetime:\n        return question[Constants.DATETIME_FORMAT] || options.dateTimeFormat;\n      default:\n        return null;\n    }\n  }\n\n  /**\n   * Traverse provided array of questions recursively by DFS algorithm\n   * and execute on each traversed question provided function.\n   * @param {Array<Object>} questions - The array of questions to be traversed.\n   * @param {Function} onEnterQuestion - The callback function to execute when entering a question.\n   * @param {Function} [onLeaveQuestion = () => {}] - The callback function to execute when leaving a question.\n   */\n  static dfsTraverseQuestionTree(\n    questions,\n    onEnterQuestion,\n    onLeaveQuestion = () => {}\n  ) {\n    function recursiveTraverse(question) {\n      onEnterQuestion(question);\n      Utils.asArray(question[Constants.HAS_SUBQUESTION]).forEach((q) => {\n        recursiveTraverse(q);\n      });\n      onLeaveQuestion(question);\n    }\n\n    questions.forEach((q) => {\n      recursiveTraverse(q);\n    });\n  }\n\n  static getFormSpecification(questions) {\n    let level = -1;\n    const indentation = \"    \";\n    const propertyIndentation = \"..\";\n    let output = \"\";\n\n    function onEnterQuestion(q) {\n      level += 1;\n      const ind = indentation.repeat(level);\n      let requiredValue = \"\";\n      if (\n        q[Constants.REQUIRES_ANSWER] &&\n        !q[Constants.USED_ONLY_FOR_COMPLETENESS]\n      ) {\n        requiredValue =\n          ind +\n          propertyIndentation +\n          \"required: \" +\n          q[Constants.REQUIRES_ANSWER] +\n          \"\\n\";\n      } else if (q[Constants.USED_ONLY_FOR_COMPLETENESS]) {\n        requiredValue =\n          ind +\n          propertyIndentation +\n          \"required only for completeness: \" +\n          q[Constants.USED_ONLY_FOR_COMPLETENESS] +\n          \"\\n\";\n      }\n\n      let description = q[Constants.HELP_DESCRIPTION]\n        ? ind +\n          propertyIndentation +\n          \"description: \" +\n          q[Constants.HELP_DESCRIPTION] +\n          \"\\n\"\n        : \"\";\n\n      let pattern = q[Constants.PATTERN]\n        ? ind + propertyIndentation + \"pattern: \" + q[Constants.PATTERN] + \"\\n\"\n        : \"\";\n\n      let mask = q[Constants.INPUT_MASK]\n        ? ind + propertyIndentation + \"mask: \" + q[Constants.INPUT_MASK] + \"\\n\"\n        : \"\";\n\n      let validationMessage = q[Constants.HAS_VALIDATION_MESSAGE]\n        ? ind +\n          propertyIndentation +\n          \"validation-message: \" +\n          q[Constants.HAS_VALIDATION_MESSAGE] +\n          \"\\n\"\n        : \"\";\n\n      let minInclusive = q[Constants.XSD.MIN_INCLUSIVE]\n        ? ind +\n          propertyIndentation +\n          \"This field must be greater or equal to \" +\n          q[Constants.XSD.MIN_INCLUSIVE] +\n          \"\\n\"\n        : \"\";\n\n      let maxInclusive = q[Constants.XSD.MAX_INCLUSIVE]\n        ? ind +\n          propertyIndentation +\n          \"This field should be a number equal or lower to \" +\n          q[Constants.XSD.MAX_INCLUSIVE] +\n          \"\\n\"\n        : \"\";\n\n      output += ind + q[\"http://www.w3.org/2000/01/rdf-schema#label\"] + \"\\n\";\n      output += description;\n      output += requiredValue;\n      output += pattern;\n      output += mask;\n      output += maxInclusive;\n      output += minInclusive;\n      output += validationMessage;\n      output += \"\\n\";\n    }\n\n    function onLeaveQuestion() {\n      level -= 1;\n    }\n\n    FormUtils.dfsTraverseQuestionTree(\n      questions,\n      onEnterQuestion,\n      onLeaveQuestion\n    );\n\n    return output;\n  }\n\n  /**\n   * Checks if the keys of a question contain any of the values from the XSD object.\n   * @param {Object} question - The question to check.\n   * @returns {boolean} - True if any XSD value is found among the keys, otherwise false.\n   */\n  static containsXSDProperty(question) {\n    const objKeys = Object.keys(question);\n    const xsdValues = Object.values(Constants.XSD);\n\n    for (const value of xsdValues) {\n      if (objKeys.includes(value)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  static getInputMask(question) {\n    if (question[Constants.INPUT_MASK]) {\n      return question[Constants.INPUT_MASK];\n    }\n  }\n\n  static hasMediaContentWithAnnotations(question) {\n    if (question[Constants.HAS_MEDIA_CONTENT]) {\n      for (const media of Utils.asArray(\n        question[Constants.HAS_MEDIA_CONTENT]\n      )) {\n        if (\n          media[Constants.HAS_ANNOTATION] &&\n          Utils.asArray(media[Constants.HAS_ANNOTATION]).length > 0\n        ) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  static containsHints(question) {\n    if (question[Constants.HAS_SUBQUESTION]) {\n      for (const subQ of Utils.asArray(question[Constants.HAS_SUBQUESTION])) {\n        if (FormUtils.containsHints(subQ)) {\n          return true;\n        }\n      }\n    }\n    return (\n      this.hasCorrectAnswer(question) ||\n      this.hasMediaContentWithAnnotations(question)\n    );\n  }\n}\n","export default class Logger {\n  static log(msg) {\n    console.log(msg);\n  }\n\n  static warn(msg) {\n    if (console.warn) {\n      console.warn(msg);\n    } else {\n      console.log(\"WARNING: \" + msg);\n    }\n  }\n\n  static error(msg) {\n    if (console.error) {\n      console.error(msg);\n    } else {\n      console.log(\"ERROR: \" + msg);\n    }\n  }\n}\n","import * as jsonld from \"jsonld\";\nimport Constants from \"../constants/Constants\";\nimport DefaultFormGenerator from \"./DefaultFormGenerator\";\nimport FormUtils from \"../util/FormUtils\";\nimport Logger from \"../util/Logger\";\nimport JsonLdFramingUtils from \"../util/JsonLdFramingUtils\";\nimport JsonLdObjectUtils from \"../util/JsonLdObjectUtils\";\nimport JsonLdObjectMap from \"../util/JsonLdObjectMap\";\n\nexport default class FormGenerator {\n  /**\n   * Generates a default form with one-step wizard.\n   *\n   * @param intl Preferred language of questions\n   *\n   * @return Form definition (a one-step wizard with one question) and form data\n   */\n  static constructDefaultForm(intl) {\n    const defaultFormData = DefaultFormGenerator.generateForm();\n\n    return FormGenerator._constructFormQuestions(defaultFormData, intl);\n  }\n\n  /**\n   * Asynchronously generates form definition from the specified data-enriched template.\n   *\n   * @param {Object} structure The form structure in JSON-LD\n   * @param {string} intl Preferred language of questions\n   *\n   * @return {Promise<Object>} Promise with generated form definition and form data\n   */\n  static async constructForm(structure, intl) {\n    let formProperties;\n    let form;\n    return jsonld\n      .flatten(structure, {})\n      .then((flattenedStructure) => {\n        try {\n          const [formQuestions, rootForm] =\n            FormGenerator._constructFormQuestions(flattenedStructure, intl);\n          form = rootForm;\n          formProperties = {\n            formQuestions,\n          };\n        } catch (e) {\n          console.error(\n            \"Error while constructing form questions from the provided structure:\",\n            e\n          );\n        }\n\n        if (!form) {\n          const [formQuestions, rootForm] =\n            FormGenerator.constructDefaultForm(intl);\n          form = rootForm;\n          formProperties = {\n            formQuestions,\n          };\n        }\n        return [formProperties, form];\n      })\n      .catch((error) => {\n        console.error(\n          \"Failed to flatten the JSON-LD structure. Expected to transform a nested JSON-LD document into a flattened array of node objects:\",\n          error\n        );\n        return [formProperties, form];\n      });\n  }\n\n  static _constructFormQuestions(structure, intl) {\n    let form;\n    let formElements;\n    let id2ObjectMap;\n    let formQuestions = [];\n\n    if (structure[\"@graph\"][0][\"@id\"] !== undefined) {\n      id2ObjectMap = JsonLdFramingUtils.expandStructure(structure); //TODO make as callback\n\n      Object.keys(id2ObjectMap).map((key) => {\n        JsonLdObjectMap.putObject(key, id2ObjectMap[key]);\n      });\n    } else {\n      console.warn(\"default form is constructed.\");\n    }\n\n    form = structure[\"@graph\"].find((item) => FormUtils.isForm(item));\n    formElements = form[Constants.HAS_SUBQUESTION];\n\n    if (!formElements) {\n      Logger.error(\"Could not find any questions in the received data.\");\n      throw \"No questions in the form\";\n    }\n\n    formQuestions = formElements.filter((item) => {\n      if (FormUtils.isWizardStep(item) && !FormUtils.isHidden(item)) {\n        return true;\n      }\n\n      Logger.warn(\"Item is not a wizard step: \" + item);\n      return false;\n    });\n\n    if (!formQuestions.length) {\n      Logger.log(\n        \"Could not find any wizard steps in the received data. Building form without steps\"\n      );\n\n      form[Constants.HAS_SUBQUESTION].forEach((question) =>\n        formQuestions.push(question)\n      );\n    }\n\n    // sort by label\n    formQuestions.sort(\n      JsonLdObjectUtils.getCompareLocalizedLabelFunction(intl)\n    );\n\n    // sort by property\n    JsonLdObjectUtils.orderPreservingToplogicalSort(\n      formQuestions,\n      Constants.HAS_PRECEDING_QUESTION\n    );\n\n    return [formQuestions, { root: form }];\n  }\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport PropTypes from \"prop-types\";\nimport { FormControl, FormGroup, Form } from \"react-bootstrap\";\n\nexport default class DefaultInput extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      cursorPosition: 0,\n    };\n  }\n\n  focus() {\n    ReactDOM.findDOMNode(this.input).focus();\n  }\n\n  getInputDOMNode() {\n    return ReactDOM.findDOMNode(this.input);\n  }\n\n  componentDidUpdate(prevProps, prevState, snapshot) {\n    if (this.fieldDidShrink(prevProps) || this.fieldDidExpand(prevProps)) {\n      this.updateFieldCursorPosition();\n    }\n  }\n\n  fieldDidExpand(prevProps) {\n    return this.props.type === \"textarea\" && prevProps.type !== \"textarea\";\n  }\n\n  fieldDidShrink(prevProps) {\n    return this.props.type === \"text\" && prevProps.type !== \"text\";\n  }\n\n  updateFieldCursorPosition() {\n    this.focus();\n    this.getInputDOMNode().setSelectionRange(\n      this.state.cursorPosition,\n      this.state.cursorPosition\n    );\n  }\n\n  saveCursorPosition(e) {\n    this.props.onChange(e);\n    this.setState({\n      cursorPosition: e.target.selectionStart,\n    });\n  }\n\n  render() {\n    switch (this.props.type) {\n      case \"radio\":\n        return this._renderRadio();\n      case \"checkbox\":\n        return this._renderCheckbox();\n      case \"select\":\n        return this._renderSelect();\n      case \"textarea\":\n        return this._renderTextArea();\n      default:\n        return this._renderInput();\n    }\n  }\n\n  _renderCheckbox() {\n    // TODO change control id to hash of label\n    return (\n      <Form.Group\n        size=\"small\"\n        controlId={Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)}\n        className=\"mb-3\"\n      >\n        <Form.Check\n          type=\"checkbox\"\n          ref={(c) => (this.input = c)}\n          {...this.props}\n          label={this.props.label}\n          className={this.props.validation.classname}\n        />\n        {this.props.validation.message}\n      </Form.Group>\n    );\n  }\n\n  _renderRadio() {\n    return (\n      <FormGroup size=\"small\" className=\"mb-3\">\n        <Form.Check\n          type=\"radio\"\n          ref={(c) => (this.input = c)}\n          {...this.props}\n          label={this.props.label}\n          className={this.props.validation.classname}\n        />\n        {this.props.validation.message}\n      </FormGroup>\n    );\n  }\n\n  _renderSelect() {\n    const { validation, children, value, ...rest } = this.props;\n    return (\n      <FormGroup size=\"small\" className=\"mb-3\">\n        {this._renderLabel()}\n        <FormControl\n          as=\"select\"\n          value={value}\n          className={validation.classname}\n          ref={(c) => (this.input = c)}\n          {...rest}\n        >\n          {children}\n        </FormControl>\n        {validation.message}\n      </FormGroup>\n    );\n  }\n\n  _renderLabel() {\n    return this.props.label ? (\n      <Form.Label>{this.props.label}</Form.Label>\n    ) : null;\n  }\n\n  _renderTextArea() {\n    // TODO validation\n    return (\n      <FormGroup size=\"small\" className=\"mb-3\">\n        {this._renderLabel()}\n        <FormControl\n          ref={(c) => (this.input = c)}\n          as=\"textarea\"\n          {...this.props}\n          className={this.props.validation.classname}\n          onChange={(e) => this.saveCursorPosition(e)}\n        />\n        {this.props.validation.message}\n      </FormGroup>\n    );\n  }\n\n  _renderInput() {\n    return (\n      <FormGroup size=\"small\" className=\"mb-3\">\n        {this._renderLabel()}\n        <FormControl\n          className={this.props.validation.classname}\n          ref={(c) => (this.input = c)}\n          as=\"input\"\n          placeholder={this.props.placeholder}\n          {...this.props}\n          onChange={(e) => this.saveCursorPosition(e)}\n        />\n        {this.props.validation.message}\n      </FormGroup>\n    );\n  }\n}\n\nDefaultInput.propTypes = {\n  type: PropTypes.string,\n  label: PropTypes.object,\n  value: PropTypes.any,\n  onChange: PropTypes.func,\n  help: PropTypes.string,\n  validation: PropTypes.object,\n  placeholder: PropTypes.string,\n};\n\nDefaultInput.defaultProps = {\n  type: \"text\",\n};\n","import React, { useMemo } from \"react\";\nimport PropTypes from \"prop-types\";\nimport DefaultInput from \"../components/DefaultInput\";\n\nconst ConfigurationContext = React.createContext({});\n\nconst defaultProps = {\n  components: {\n    inputComponent: DefaultInput,\n  },\n  componentsOptions: {\n    dateTimeAnswer: {\n      dateFormat: \"yyyy-MM-dd\",\n      timeFormat: \"HH:mm\",\n      dateTimeFormat: \"yyyy-MM-dd HH:mm:ss\",\n    },\n    readOnly: false,\n  },\n  options: {\n    intl: { locale: \"en\" },\n    modalView: false,\n    modalProps: {},\n    horizontalWizardNav: true,\n    wizardStepButtons: true,\n    enableWizardStepSkip: true,\n    startingStep: 0,\n    enableOptionQuestionFeedback: false,\n  },\n};\n\nconst ConfigurationContextProvider = ({ children, ...props }) => {\n  const values = useMemo(\n    () => ({\n      inputComponent:\n        (props.components && props.components.inputComponent) ||\n        defaultProps.components.inputComponent,\n      componentsOptions: {\n        ...defaultProps.componentsOptions,\n        ...props.componentsOptions,\n      },\n      options: { ...defaultProps.options, ...props.options },\n      mapComponent: props.mapComponent,\n    }),\n    [props]\n  );\n\n  return (\n    <ConfigurationContext.Provider value={values}>\n      {children}\n    </ConfigurationContext.Provider>\n  );\n};\n\nConfigurationContextProvider.propTypes = {\n  children: PropTypes.element.isRequired,\n  components: PropTypes.object,\n  mapComponent: PropTypes.func,\n  options: PropTypes.object,\n};\n\nexport { ConfigurationContext, ConfigurationContextProvider };\n","import React from \"react\";\nimport { Alert, Accordion, Card, Button } from \"react-bootstrap\";\nimport { IntlContext } from \"../contexts/IntlContextProvider\";\n\nclass ErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      hasError: false,\n      errorLabel: null,\n      errorDetails: null,\n    };\n  }\n\n  static getDerivedStateFromError(error) {\n    return { hasError: true, error: error };\n  }\n\n  componentDidCatch(errorLabel, errorDetails) {\n    this.setState({\n      errorLabel: errorLabel,\n      errorDetails: errorDetails,\n    });\n  }\n\n  render() {\n    if (this.state.hasError) {\n      const { lang } = this.context;\n      return (\n        <div style={{ padding: \"20px\" }}>\n          <Alert variant=\"danger\">\n            <Alert.Heading>\n              {lang[\"error.default_message\"] || \"Something went wrong.\"}\n            </Alert.Heading>\n            <p>{this.state.errorLabel && this.state.errorLabel.toString()}</p>\n          </Alert>\n          <Accordion>\n            <Card>\n              <Card.Header>\n                <Accordion as={Button} variant=\"link\" eventKey=\"0\">\n                  {lang[\"error.view_details\"] || \"View Error Details\"}\n                </Accordion>\n              </Card.Header>\n              <Accordion.Collapse eventKey=\"0\">\n                <Card.Body>\n                  <pre style={{ whiteSpace: \"pre-wrap\" }}>\n                    {this.state.errorDetails &&\n                      this.state.errorDetails.componentStack}\n                  </pre>\n                </Card.Body>\n              </Accordion.Collapse>\n            </Card>\n          </Accordion>\n        </div>\n      );\n    }\n\n    return this.props.children;\n  }\n}\n\nErrorBoundary.contextType = IntlContext;\n\nexport default ErrorBoundary;\n","import React, { useMemo } from \"react\";\nimport PropTypes from \"prop-types\";\nimport * as jsonld from \"jsonld\";\nimport Logger from \"../util/Logger\";\n\nconst FormGenContext = React.createContext({});\n\nconst FormGenContextProvider = ({ children, ...props }) => {\n  let options = [];\n\n  const loadFormOptions = async (id, query) => {\n    const option = options[id];\n\n    if (option && option.length) {\n      return option;\n    }\n\n    const data = await props.fetchTypeAheadValues(query);\n\n    if (data.length) {\n      return jsonld.frame(data, {}, {}).then((framedData) => {\n        const option = framedData[\"@graph\"];\n        options.push({ ...option, [id]: option });\n        return option;\n      });\n    }\n\n    Logger.warn(`No data received when loading options using id ${id}`);\n\n    return [];\n  };\n\n  const getOptions = (id) => options[id] || [];\n\n  const values = useMemo(\n    () => ({\n      loadFormOptions,\n      getOptions,\n    }),\n    [loadFormOptions, getOptions]\n  );\n\n  return (\n    <FormGenContext.Provider value={values} {...props}>\n      {children}\n    </FormGenContext.Provider>\n  );\n};\n\nFormGenContextProvider.propTypes = {\n  children: PropTypes.element.isRequired,\n  fetchTypeAheadValues: PropTypes.func,\n};\n\nexport { FormGenContext, FormGenContextProvider };\n","import React, { useMemo, useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport FormUtils from \"../util/FormUtils\";\n\nconst INITIAL_DATA = {};\nconst INITIAL_FORM_QUESTIONS_DATA = [];\n\nconst FormQuestionsContext = React.createContext({});\n\nconst FormQuestionsProvider = (props) => {\n  const [data, setData] = useState(props.data || INITIAL_DATA);\n  const [formQuestionsData, setFormQuestionsData] = useState(\n    props.formQuestions || INITIAL_FORM_QUESTIONS_DATA\n  );\n\n  useEffect(() => {\n    if (props.isFormValid) {\n      const isValid = FormUtils.isValid(data);\n      props.isFormValid(isValid);\n    }\n  }, []);\n\n  useEffect(() => {\n    setData(props.data || INITIAL_DATA);\n  }, [formQuestionsData]);\n\n  const updateData = (update) => {\n    if (!update) return;\n\n    setData({ ...data, ...update });\n  };\n\n  const updateFormQuestionsData = (index, update) => {\n    if (!update || index < 0 || index >= formQuestionsData.length) return;\n\n    if (typeof update === \"object\") {\n      const newFormQuestionsData = [...formQuestionsData];\n      newFormQuestionsData[index] = {\n        ...newFormQuestionsData[index],\n        ...update,\n      };\n      setFormQuestionsData(newFormQuestionsData);\n    }\n\n    if (Array.isArray(update)) {\n      setFormQuestionsData(update);\n    }\n\n    if (props.isFormValid) {\n      const isValid = FormUtils.isValid(data);\n      props.isFormValid(isValid);\n    }\n  };\n\n  const getData = () => {\n    return data;\n  };\n\n  const getFormQuestionsData = (index) => {\n    return index === null || index === undefined\n      ? formQuestionsData\n      : formQuestionsData[index];\n  };\n\n  const values = useMemo(\n    () => ({\n      updateData,\n      updateFormQuestionsData,\n      getData,\n      getFormQuestionsData,\n    }),\n    [getFormQuestionsData, getData]\n  );\n\n  return (\n    <FormQuestionsContext.Provider value={values} {...props}>\n      {props.children}\n    </FormQuestionsContext.Provider>\n  );\n};\n\nFormQuestionsProvider.propTypes = {\n  children: PropTypes.element.isRequired,\n  data: PropTypes.object.isRequired,\n  formQuestions: PropTypes.array.isRequired,\n  isFormValid: PropTypes.func,\n};\n\nexport { FormQuestionsContext, FormQuestionsProvider };\n","import * as JsonLdUtils from \"jsonld-utils\";\nimport Constants from \"../constants/Constants\";\n\nexport default class QuestionAnswerProcessor {\n  /**\n   * Builds question answer model from the specified wizard data.\n   * @param wizardData Global wizard data\n   * @param stepData Data from individual wizard steps\n   */\n  static buildQuestionAnswerModel(wizardData, stepData) {\n    const question = {\n      subQuestions: [],\n    };\n    let processedQuestion;\n    if (wizardData) {\n      question.uri = wizardData.root[\"@id\"];\n      question.origin = JsonLdUtils.getJsonAttValue(\n        wizardData.root,\n        Constants.HAS_QUESTION_ORIGIN,\n        \"@id\"\n      );\n    }\n    if (stepData) {\n      for (let i = 0; i < stepData.length; i++) {\n        // This will skip questions corresponding to empty steps in the wizard\n        processedQuestion =\n          QuestionAnswerProcessor.processQuestionAnswerHierarchy(stepData[i]);\n        if (processedQuestion) {\n          question.subQuestions.push(processedQuestion);\n        }\n      }\n    }\n    return question;\n  }\n\n  /**\n   * Transforms the QA hierarchy from JSON-LD-based structure to the object model-based one.\n   * @param rootQuestion\n   */\n  static processQuestionAnswerHierarchy(rootQuestion) {\n    if (!rootQuestion) {\n      return null;\n    }\n    return QuestionAnswerProcessor._processQuestion(rootQuestion);\n  }\n\n  static _processQuestion(question) {\n    const result = {};\n\n    result.uri = question[\"@id\"];\n    result.origin = JsonLdUtils.getJsonAttValue(\n      question,\n      Constants.HAS_QUESTION_ORIGIN,\n      \"@id\"\n    );\n    if (question[Constants.HAS_SUBQUESTION]) {\n      result.subQuestions = [];\n      for (let i = 0; i < question[Constants.HAS_SUBQUESTION].length; i++) {\n        result.subQuestions.push(\n          QuestionAnswerProcessor._processQuestion(\n            question[Constants.HAS_SUBQUESTION][i]\n          )\n        );\n      }\n    }\n    if (question[Constants.HAS_ANSWER]) {\n      result.answers = [];\n      if (!Array.isArray(question[Constants.HAS_ANSWER])) {\n        question[Constants.HAS_ANSWER] = [question[Constants.HAS_ANSWER]];\n      }\n      for (let i = 0; i < question[Constants.HAS_ANSWER].length; i++) {\n        result.answers.push(\n          QuestionAnswerProcessor.processAnswer(\n            question[Constants.HAS_ANSWER][i]\n          )\n        );\n      }\n    }\n\n    if (question[Constants.HAS_COMMENT]) {\n      result.comments = [];\n      if (!Array.isArray(question[Constants.HAS_COMMENT])) {\n        question[Constants.HAS_COMMENT] = [question[Constants.HAS_COMMENT]];\n      }\n      for (let i = 0; i < question[Constants.HAS_COMMENT].length; i++) {\n        result.comments.push(\n          QuestionAnswerProcessor.processComment(\n            question[Constants.HAS_COMMENT][i]\n          )\n        );\n      }\n    }\n\n    return result;\n  }\n\n  static processComment(comment) {\n    const result = {};\n    result.author = JsonLdUtils.getJsonAttValue(\n      comment,\n      Constants.HAS_AUTHOR,\n      \"@id\"\n    );\n    result.value = JsonLdUtils.getJsonAttValue(\n      comment,\n      Constants.HAS_COMMENT_VALUE\n    );\n    result.timestamp = JsonLdUtils.getJsonAttValue(\n      comment,\n      Constants.HAS_TIMESTAMP,\n      \"@id\"\n    );\n    return result;\n  }\n\n  static processAnswer(answer) {\n    const result = {};\n    result.uri = answer[\"@id\"];\n    result.origin = JsonLdUtils.getJsonAttValue(\n      answer,\n      Constants.HAS_ANSWER_ORIGIN,\n      \"@id\"\n    );\n    if (answer[Constants.HAS_OBJECT_VALUE]) {\n      result.codeValue = JsonLdUtils.getJsonAttValue(\n        answer,\n        Constants.HAS_OBJECT_VALUE,\n        \"@id\"\n      );\n    } else {\n      result.textValue = JsonLdUtils.getJsonAttValue(\n        answer,\n        Constants.HAS_DATA_VALUE\n      );\n    }\n    return result;\n  }\n\n  /**\n   * Generates an empty answer for the specified question\n   * @param question\n   */\n  static generateAnswer(question) {\n    const answer = {};\n    answer[Constants.HAS_DATA_VALUE] = \"\";\n    return answer;\n  }\n}\n","import React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\nimport FormUtils from \"../../util/FormUtils\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\n\nconst CheckboxAnswer = (props) => {\n  const { inputComponent, componentsOptions } =\n    useContext(ConfigurationContext);\n\n  const question = props.question;\n\n  return React.createElement(inputComponent, {\n    type: \"checkbox\",\n    label: props.label,\n    title: props.title,\n    checked: props.value === true || props.value === \"true\",\n    validation: props.validation,\n    onChange: (e) => {\n      props.onChange(e.target.checked);\n    },\n    disabled: componentsOptions.readOnly || FormUtils.isDisabled(question),\n  });\n};\n\nCheckboxAnswer.propTypes = {\n  question: PropTypes.object.isRequired,\n  label: PropTypes.object.isRequired,\n  title: PropTypes.string,\n  value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  onChange: PropTypes.func.isRequired,\n  mouseHover: PropTypes.bool,\n  validation: PropTypes.object,\n};\n\nexport default CheckboxAnswer;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport { FormGroup, Form } from \"react-bootstrap\";\nimport PropTypes from \"prop-types\";\nimport { format, parse } from \"date-fns\";\nimport FormUtils from \"../../util/FormUtils\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport classNames from \"classnames\";\n\nconst DateTimeAnswer = (props) => {\n  const { componentsOptions } = useContext(ConfigurationContext);\n  const [date, setDate] = useState(null);\n  const [errorMessage, setErrorMessage] = useState(\"\");\n\n  const dateFormat = FormUtils.resolveDateTimeFormat(\n    props.question,\n    props.value,\n    componentsOptions.dateTimeAnswer\n  );\n\n  const isDate = FormUtils.isDate(props.question);\n  const isTime = FormUtils.isTime(props.question);\n  const isTimestampFormat = FormUtils.isTimestamp(props.question);\n\n  useEffect(() => {\n    const parsedDate = parseDate(props.value);\n    if (parsedDate) {\n      setDate(parsedDate);\n    } else {\n      setDate(null);\n      setErrorMessage(\n        `Invalid date value ${props.value} of question ${props.question[\"@id\"]}.`\n      );\n      console.error(errorMessage);\n    }\n  }, [props.value, dateFormat]);\n\n  const parseDate = (value) => {\n    if (!value) return null;\n\n    const parsed = isTimestampFormat\n      ? new Date(value)\n      : parse(value, dateFormat, new Date());\n    return isNaN(parsed.getTime()) ? null : parsed;\n  };\n\n  const handleDateChange = (selectedDate) => {\n    setDate(selectedDate);\n    const timeValue = selectedDate\n      ? isTimestampFormat\n        ? selectedDate.getTime()\n        : format(selectedDate, dateFormat)\n      : \"\";\n\n    props.onChange(timeValue);\n  };\n\n  return (\n    <FormGroup size=\"small\" className=\"mb-3\">\n      <Form.Label className={\"w-100\"}>{props.label}</Form.Label>\n      <DatePicker\n        selected={date}\n        placeholderText={dateFormat}\n        onChange={handleDateChange}\n        showTimeSelect={!isDate}\n        showTimeSelectOnly={isTime}\n        timeFormat=\"HH:mm\"\n        timeIntervals={1}\n        timeCaption=\"Time\"\n        dateFormat={dateFormat}\n        className={classNames(\"form-control\", props.validation.classname)}\n        disabled={\n          componentsOptions.readOnly || FormUtils.isDisabled(props.question)\n        }\n      />\n      {props.validation.message}\n    </FormGroup>\n  );\n};\n\nDateTimeAnswer.propTypes = {\n  question: PropTypes.object.isRequired,\n  label: PropTypes.object.isRequired,\n  title: PropTypes.string,\n  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n};\n\nexport default DateTimeAnswer;\n","import React, { useContext } from \"react\";\nimport * as JsonLdUtils from \"jsonld-utils\";\nimport PropTypes from \"prop-types\";\nimport Constants from \"../../constants/Constants\";\nimport FormUtils from \"../../util/FormUtils\";\nimport YASQE from \"yasgui-yasqe\";\nimport YATE from \"yasgui-yasqe\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport \"@triply/yasgui/build/yasgui.min.css\";\n\nconst NUMERIC_DATATYPES = [\n  Constants.XSD.INT,\n  Constants.XSD.INTEGER,\n  Constants.XSD.NON_NEGATIVE_INTEGER,\n  Constants.XSD.NON_POSITIVE_INTEGER,\n  Constants.XSD.NEGATIVE_INTEGER,\n  Constants.XSD.POSITIVE_INTEGER,\n  Constants.XSD.FLOAT,\n  Constants.XSD.POSITIVE_FLOAT,\n  Constants.XSD.NEGATIVE_FLOAT,\n];\n\nconst DECLARED_PREFIXES =\n  \"http://onto.fel.cvut.cz/ontologies/form-spin/has-declared-prefix\";\n\nconst NUMBER_RULES = {};\nNUMBER_RULES[Constants.XSD.NON_NEGATIVE_INTEGER] = { min: 0 };\nNUMBER_RULES[Constants.XSD.NON_POSITIVE_INTEGER] = { max: 0 };\nNUMBER_RULES[Constants.XSD.NEGATIVE_INTEGER] = { max: -1 };\nNUMBER_RULES[Constants.XSD.POSITIVE_INTEGER] = { min: 1 };\n\nconst tokenTypes = {\n  \"string-2\": \"prefixed\",\n  atom: \"var\",\n};\n\nclass InputPropertiesResolver {\n  static _resolveInputType(question, value) {\n    if (\n      FormUtils.isSparqlInput(question) ||\n      FormUtils.isTurtleInput(question) ||\n      FormUtils.isTextarea(question, value)\n    ) {\n      return \"textarea\";\n    } else if (InputPropertiesResolver._isNumeric(question)) {\n      return \"number\";\n    }\n    return \"text\";\n  }\n\n  static _isNumeric(question) {\n    for (let i = 0, len = NUMERIC_DATATYPES.length; i < len; i++) {\n      if (\n        JsonLdUtils.hasValue(\n          question,\n          Constants.HAS_DATATYPE,\n          NUMERIC_DATATYPES[i]\n        )\n      ) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  static resolveInputProperties(question, value, componentsOptions) {\n    let props = {};\n    props.type = InputPropertiesResolver._resolveInputType(question, value);\n    switch (props[\"type\"]) {\n      case \"textarea\":\n        props.rows = 5;\n        break;\n      case \"number\":\n        props = {\n          ...props,\n          ...InputPropertiesResolver._resolveNumberRestrictions(question),\n          ...this._resolveStepRestriction(question),\n        };\n        break;\n      default:\n        break;\n    }\n    props.disabled =\n      componentsOptions.readOnly || FormUtils.isDisabled(question);\n\n    return props;\n  }\n\n  static _resolveStepRestriction(question) {\n    let restriction = {};\n    if (question[Constants.STEP] !== undefined) {\n      restriction[\"step\"] = JsonLdUtils.getJsonAttValue(\n        question,\n        Constants.STEP\n      );\n    }\n    return restriction;\n  }\n\n  static _resolveNumberRestrictions(question) {\n    let restriction = {};\n    Object.getOwnPropertyNames(NUMBER_RULES).forEach((key) => {\n      if (JsonLdUtils.hasValue(question, Constants.HAS_DATATYPE, key)) {\n        restriction = { ...restriction, ...NUMBER_RULES[key] };\n      }\n    });\n    if (question[Constants.XSD.MIN_INCLUSIVE] !== undefined) {\n      restriction[\"min\"] = question[Constants.XSD.MIN_INCLUSIVE];\n    }\n    if (question[Constants.XSD.MIN_EXCLUSIVE] !== undefined) {\n      restriction[\"min\"] = question[Constants.XSD.MIN_EXCLUSIVE] + 1;\n    }\n    if (question[Constants.XSD.MAX_EXCLUSIVE] !== undefined) {\n      restriction[\"max\"] = question[Constants.XSD.MAX_EXCLUSIVE] - 1;\n    }\n    if (question[Constants.XSD.MAX_INCLUSIVE] !== undefined) {\n      restriction[\"max\"] = question[Constants.XSD.MAX_INCLUSIVE];\n    }\n    return restriction;\n  }\n\n  static _preventCharacterInput(e, question) {\n    if (\n      InputPropertiesResolver._resolveInputType(question) === \"number\" &&\n      !(e.key >= \"0\" && e.key <= \"9\") &&\n      ![\n        \"Backspace\",\n        \"Delete\",\n        \"ArrowLeft\",\n        \"ArrowRight\",\n        \"-\",\n        \"Minus\",\n        \"NumpadSubtract\",\n        \".\",\n        \"Period\",\n      ].includes(e.key)\n    ) {\n      e.preventDefault();\n    }\n  }\n}\n\nconst InputAnswer = (props) => {\n  const { inputComponent, componentsOptions } =\n    useContext(ConfigurationContext);\n\n  const question = props.question;\n  const answer = props.answer;\n  let value = props.value;\n  // When the value is an object_value, but the layout does not specify neither typeahead nor select,\n  // show at least the value's label\n  if (\n    answer[Constants.HAS_OBJECT_VALUE] &&\n    answer[Constants.HAS_OBJECT_VALUE][JsonLdUtils.RDFS_LABEL]\n  ) {\n    value = JsonLdUtils.getJsonAttValue(\n      answer[Constants.HAS_OBJECT_VALUE],\n      JsonLdUtils.RDFS_LABEL\n    );\n  }\n  return React.createElement(inputComponent, {\n    ...InputPropertiesResolver.resolveInputProperties(\n      question,\n      value,\n      componentsOptions\n    ),\n    validation: props.validation,\n    label: props.label,\n    title: props.title,\n    value: value == null ? \"\" : value,\n    placeholder: FormUtils.getInputMask(question),\n    onKeyPress: (e) =>\n      InputPropertiesResolver._preventCharacterInput(e, question),\n    onChange: (e) => {\n      props.onChange(e.target.value);\n      if (props.sparql || props.turtle) this.hide();\n    },\n    onFocus: (e) => {\n      if (props.sparql) {\n        const yasqe = YASQE.fromTextArea(e.target);\n        yasqe.setValue(value);\n        yasqe.on(\"change\", () => {\n          props.onChange(yasqe.getValue());\n        });\n        YASQE.Autocompleters.prefixes.appendPrefixIfNeeded = function (\n          yasqe,\n          completerName\n        ) {\n          if (!yasqe.autocompleters.getTrie(completerName)) return; // no prefixed defined. just stop\n          if (\n            !yasqe.options.autocompleters ||\n            yasqe.options.autocompleters.indexOf(completerName) === -1\n          )\n            return; //this autocompleter is disabled\n          const cur = yasqe.getCursor();\n\n          const token = yasqe.getTokenAt(cur);\n          if (tokenTypes[token.type] === \"prefixed\") {\n            const colonIndex = token.string.indexOf(\":\");\n            if (colonIndex !== -1) {\n              // check previous token isnt PREFIX, or a '<'(which would mean we are in a uri)\n              //\t\t\tconst firstTokenString = yasqe.getNextNonWsToken(cur.line).string.toUpperCase();\n              const lastNonWsTokenString = yasqe\n                .getPreviousNonWsToken(cur.line, token)\n                .string.toUpperCase();\n              const previousToken = yasqe.getTokenAt({\n                line: cur.line,\n                ch: token.start,\n              }); // needs to be null (beginning of line), or whitespace\n              if (\n                lastNonWsTokenString !== \"PREFIX\" &&\n                (previousToken.type === \"ws\" || previousToken.type == null)\n              ) {\n                // check whether it isnt defined already (saves us from looping\n                // through the array)\n                const currentPrefix = token.string.substring(0, colonIndex + 1);\n                const queryPrefixes = yasqe.getPrefixesFromQuery();\n                if (queryPrefixes[currentPrefix.slice(0, -1)] == null) {\n                  // ok, so it isnt added yet!\n                  if (\n                    props.question[Constants.HAS_DECLARED_PREFIX] &&\n                    props.question[Constants.HAS_DECLARED_PREFIX].filter(\n                      (p) => p[Constants.PREFIX] === currentPrefix.slice(0, -1)\n                    ).length\n                  ) {\n                    const prefix = props.question[\n                      Constants.HAS_DECLARED_PREFIX\n                    ].filter(\n                      (p) => p[Constants.PREFIX] === currentPrefix.slice(0, -1)\n                    );\n                    const px = {};\n                    px[prefix[0][Constants.PREFIX]] =\n                      prefix[0][Constants.NAMESPACE];\n                    yasqe.addPrefixes(px);\n                  } else {\n                    const completions = yasqe.autocompleters\n                      .getTrie(completerName)\n                      .autoComplete(currentPrefix);\n                    if (completions.length > 0) {\n                      yasqe.addPrefixes(completions[0]);\n                    }\n                  }\n                }\n              }\n            }\n          }\n        };\n      } else if (props.turtle) {\n        console.log(\"TTL\");\n        const yate = YATE.fromTextArea(e.target);\n        yate.setValue(value);\n        yate.on(\"change\", () => {\n          props.onChange(yate.getValue());\n        });\n      }\n    },\n  });\n};\n\nInputAnswer.propTypes = {\n  question: PropTypes.object.isRequired,\n  answer: PropTypes.object.isRequired,\n  label: PropTypes.object.isRequired,\n  title: PropTypes.string,\n  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n};\n\nexport default InputAnswer;\n","const REPLACEMENTS = {\n  D: \"1\",\n  M: \"1\",\n  Y: \"1\",\n  h: \"1\",\n  m: \"1\",\n  s: \"1\",\n};\n\nexport default class MaskMapper {\n  /**\n   * Attempts to map regular mask (e.g. date) to the format supported by inputmask-core.\n   *\n   * E.g. it maps (DD-MM-YYYY) to 11-11-1111.\n   *\n   * If an unsupported mask character is encountered, it is simply skipped. Datetime masks are processed according to\n   * ISO 8601 acronyms (e.g. M for month and m for minute).\n   * @param mask The mask to map\n   */\n  static mapMask(mask) {\n    if (!mask) {\n      return mask;\n    }\n    let result = \"\",\n      character;\n    for (let i = 0, len = mask.length; i < len; i++) {\n      character = mask.charAt(i);\n      result += REPLACEMENTS[character] ? REPLACEMENTS[character] : character;\n    }\n    return result;\n  }\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport ReactDOM from \"react-dom\";\nimport InputMask from \"inputmask-core\";\nimport MaskMapper from \"../util/MaskMapper\";\nimport { ConfigurationContext } from \"../contexts/ConfigurationContext\";\n\nconst KEYCODE_Z = 90;\nconst KEYCODE_Y = 89;\n\nfunction isUndo(e) {\n  return e.ctrlKey && e.keyCode === KEYCODE_Z;\n}\n\nfunction isRedo(e) {\n  return e.ctrlKey && e.keyCode === KEYCODE_Y;\n}\n\n// Copied from https://github.com/insin/react-maskedinput\n\nfunction getSelection(el) {\n  let start;\n  let end;\n  let rangeEl;\n  let clone;\n\n  if (el.selectionStart !== undefined) {\n    start = el.selectionStart;\n    end = el.selectionEnd;\n  } else {\n    try {\n      el.focus();\n      rangeEl = el.createTextRange();\n      clone = rangeEl.duplicate();\n\n      rangeEl.moveToBookmark(document.selection.createRange().getBookmark());\n      clone.setEndPoint(\"EndToStart\", rangeEl);\n\n      start = clone.text.length;\n      end = start + rangeEl.text.length;\n    } catch (e) {\n      /* not focused or not visible */\n    }\n  }\n\n  return { start, end };\n}\n\nfunction setSelection(el, selection) {\n  let rangeEl;\n\n  try {\n    if (el.selectionStart !== undefined) {\n      el.focus();\n      el.setSelectionRange(selection.start, selection.end);\n    } else {\n      el.focus();\n      rangeEl = el.createTextRange();\n      rangeEl.collapse(true);\n      rangeEl.moveStart(\"character\", selection.start);\n      rangeEl.moveEnd(\"character\", selection.end - selection.start);\n      rangeEl.select();\n    }\n  } catch (e) {\n    /* not focused or not visible */\n  }\n}\n\nexport default class MaskedInput extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.mask = new InputMask({\n      pattern: MaskMapper.mapMask(props.mask),\n      value: props.value,\n      formatCharacters: props.formatCharacters,\n      placeholderChar: props.placeholderChar || \"_\",\n    });\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.mask !== this.props.mask) {\n      this._updatePattern(this.props);\n    }\n\n    if (\n      prevProps.mask !== this.props.mask &&\n      prevProps.value !== this.props.mask\n    ) {\n      // if we get a new value and a new mask at the same time\n      // check if the mask.value is still the initial value\n      // - if so use the nextProps value\n      // - otherwise the `this.mask` has a value for us (most likely from paste action)\n      if (this.mask.getValue() === this.mask.emptyValue) {\n        this.mask.setPattern(MaskMapper.mapMask(this.props.mask), {\n          value: this.props.value,\n        });\n      } else {\n        this.mask.setPattern(MaskMapper.mapMask(this.props.mask), {\n          value: this.mask.getRawValue(),\n        });\n      }\n    } else if (prevProps.mask !== this.props.mask) {\n      this.mask.setPattern(MaskMapper.mapMask(this.props.mask), {\n        value: this.mask.getRawValue(),\n      });\n    } else if (prevProps.value !== this.props.value) {\n      this.mask.setValue(this.props.value);\n    }\n\n    if (prevProps.mask !== this.props.mask && this.mask.selection.start) {\n      this._updateInputSelection();\n    }\n  }\n\n  _updatePattern = (props) => {\n    this.mask.setPattern(MaskMapper.mapMask(props.mask), {\n      value: this.mask.getRawValue(),\n      selection: getSelection(this.input),\n    });\n  };\n\n  _updateMaskSelection = () => {\n    this.mask.selection = getSelection(this.input);\n  };\n\n  _updateInputSelection = () => {\n    setSelection(this.input, this.mask.selection);\n  };\n\n  _onChange = (e) => {\n    const maskValue = this.mask.getValue();\n    if (e.target.value !== maskValue) {\n      // Cut or delete operations will have shortened the value\n      if (e.target.value.length < maskValue.length) {\n        const sizeDiff = maskValue.length - e.target.value.length;\n        this._updateMaskSelection();\n        this.mask.selection.end = this.mask.selection.start + sizeDiff;\n        this.mask.backspace();\n      }\n      const value = this._getDisplayValue();\n      e.target.value = value;\n      if (value) {\n        this._updateInputSelection();\n      }\n    }\n    if (this.props.onChange) {\n      this.props.onChange(e);\n    }\n  };\n\n  _onKeyDown = (e) => {\n    if (isUndo(e)) {\n      e.preventDefault();\n      if (this.mask.undo()) {\n        e.target.value = this._getDisplayValue();\n        this._updateInputSelection();\n\n        if (this.props.onChange) {\n          this.props.onChange(e);\n        }\n      }\n    } else if (isRedo(e)) {\n      e.preventDefault();\n      if (this.mask.redo()) {\n        e.target.value = this._getDisplayValue();\n        this._updateInputSelection();\n        if (this.props.onChange) {\n          this.props.onChange(e);\n        }\n      }\n    } else if (e.key === \"Backspace\") {\n      e.preventDefault();\n      this._updateMaskSelection();\n      if (this.mask.backspace()) {\n        const value = this._getDisplayValue();\n        e.target.value = value;\n        if (value) {\n          this._updateInputSelection();\n        }\n        if (this.props.onChange) {\n          this.props.onChange(e);\n        }\n      }\n    }\n  };\n\n  _onKeyPress = (e) => {\n    // Ignore modified key presses\n    // Ignore enter key to allow form submission\n    if (e.metaKey || e.altKey || e.ctrlKey || e.key === \"Enter\") {\n      return;\n    }\n\n    e.preventDefault();\n    this._updateMaskSelection();\n    if (this.mask.input(e.key)) {\n      e.target.value = this.mask.getValue();\n      this._updateInputSelection();\n      if (this.props.onChange) {\n        this.props.onChange(e);\n      }\n    }\n  };\n\n  _onPaste = (e) => {\n    e.preventDefault();\n    this._updateMaskSelection();\n    // getData value needed for IE also works in FF & Chrome\n    if (this.mask.paste(e.clipboardData.getData(\"Text\"))) {\n      e.target.value = this.mask.getValue();\n      // Timeout needed for IE\n      setTimeout(this._updateInputSelection, 0);\n      if (this.props.onChange) {\n        this.props.onChange(e);\n      }\n    }\n  };\n\n  _getDisplayValue() {\n    const value = this.mask.getValue();\n    return value === this.mask.emptyValue ? \"\" : value;\n  }\n\n  focus() {\n    this.input.focus();\n  }\n\n  blur() {\n    this.input.blur();\n  }\n\n  render() {\n    const { size, placeholder, ...props } = this.props,\n      patternLength = this.mask.pattern.length;\n\n    return React.createElement(this.context.inputComponent, {\n      ...props,\n      ref: (r) => {\n        if (r) {\n          this.input = r.input ? ReactDOM.findDOMNode(r.input) : r;\n        }\n      },\n      maxLength: patternLength,\n      onChange: this._onChange,\n      onKeyDown: this._onKeyDown,\n      onKeyPress: this._onKeyPress,\n      onPaste: this._onPaste,\n      placeholder: placeholder || this.mask.emptyValue,\n      size: size || patternLength,\n      value: this._getDisplayValue(),\n      type: \"text\",\n    });\n  }\n}\n\nMaskedInput.contextType = ConfigurationContext;\n\nMaskedInput.propTypes = {\n  mask: PropTypes.string.isRequired,\n};\n\nMaskedInput.defaultProps = {\n  value: \"\",\n};\n","import React, { useContext } from \"react\";\nimport * as JsonLdUtils from \"jsonld-utils\";\nimport PropTypes from \"prop-types\";\n\nimport Constants from \"../../constants/Constants\";\nimport FormUtils from \"../../util/FormUtils\";\nimport InputAnswer from \"./InputAnswer\";\nimport Logger from \"../../util/Logger\";\nimport MaskedInput from \"../MaskedInput\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\n\nconst MaskedInputAnswer = (props) => {\n  const { componentsOptions } = useContext(ConfigurationContext);\n\n  const question = props.question;\n  const value = props.value;\n  const mask = JsonLdUtils.getJsonAttValue(question, Constants.INPUT_MASK);\n\n  if (!mask) {\n    Logger.warn(\"Input mask not provided. Falling back to regular input.\");\n    return <InputAnswer {...props} />;\n  }\n\n  return (\n    <MaskedInput\n      mask={mask}\n      value={value}\n      label={props.label}\n      title={props.title}\n      placeholder={mask}\n      onChange={(e) => props.onChange(e.target.value)}\n      disabled={componentsOptions.readOnly || FormUtils.isDisabled(question)}\n      validation={props.validation}\n    />\n  );\n};\n\nMaskedInputAnswer.propTypes = {\n  question: PropTypes.object.isRequired,\n  answer: PropTypes.object.isRequired,\n  label: PropTypes.object.isRequired,\n  title: PropTypes.string,\n  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n};\n\nexport default MaskedInputAnswer;\n","import * as JsonLdUtils from \"jsonld-utils\";\nimport Constants from \"../../../constants/Constants\";\nimport React from \"react\";\n\nexport const findOptionById = (options = [], id) =>\n  options.find((o) => o[\"@id\"] === id) ?? null;\n\nexport const resolveOptionLabel = (options = [], id) => {\n  const option = findOptionById(options, id);\n  return option\n    ? JsonLdUtils.getJsonAttValue(option, Constants.RDFS_LABEL)\n    : id;\n};\n\nexport const generateSelectOptions = (\n  options,\n  placeholder = \"-- Select --\"\n) => {\n  const sorted = [...options].sort((a, b) => {\n    const aLabel = JsonLdUtils.getJsonAttValue(a, Constants.RDFS_LABEL);\n    const bLabel = JsonLdUtils.getJsonAttValue(b, Constants.RDFS_LABEL);\n    return aLabel < bLabel ? -1 : aLabel > bLabel ? 1 : 0;\n  });\n\n  const optionEls = sorted.map((option, i) => {\n    const label = JsonLdUtils.getJsonAttValue(option, Constants.RDFS_LABEL);\n    return (\n      <option value={label} key={`opt-${i}`}>\n        {label}\n      </option>\n    );\n  });\n\n  return [\n    <option value=\"\" key=\"opt-placeholder\" disabled hidden>\n      {placeholder}\n    </option>,\n    ...optionEls,\n  ];\n};\n","import React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Constants from \"../../../constants/Constants\";\nimport FormUtils from \"../../../util/FormUtils\";\nimport { ConfigurationContext } from \"../../../contexts/ConfigurationContext\";\nimport { generateSelectOptions } from \"./select.utils.js\";\n\nconst SelectDefault = ({\n  question,\n  label,\n  title,\n  value,\n  validation,\n  onChange,\n}) => {\n  const { inputComponent, componentsOptions } =\n    useContext(ConfigurationContext);\n\n  const handleChange = (e) => onChange(e.target.value);\n\n  return React.createElement(\n    inputComponent,\n    {\n      type: \"select\",\n      label,\n      value,\n      title,\n      validation,\n      onChange: handleChange,\n      disabled: componentsOptions.readOnly || FormUtils.isDisabled(question),\n    },\n    generateSelectOptions(question[Constants.HAS_OPTION])\n  );\n};\n\nSelectDefault.propTypes = {\n  question: PropTypes.object.isRequired,\n  label: PropTypes.object.isRequired,\n  title: PropTypes.string,\n  value: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n};\n\nexport default SelectDefault;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport default function CrossIcon({ size = 17, className = \"\" }) {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      aria-hidden=\"true\"\n    >\n      <path\n        d=\"M18 6L6 18M6 6L18 18\"\n        stroke=\"currentColor\"\n        strokeWidth=\"3\"\n        strokeLinecap=\"round\"\n      />\n    </svg>\n  );\n}\n\nCrossIcon.propTypes = {\n  size: PropTypes.number,\n  className: PropTypes.string,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport default function CheckIcon({ size = 17, className = \"\" }) {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 50 50\"\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      aria-hidden=\"true\"\n    >\n      <path\n        strokeWidth={3}\n        stroke=\"currentColor\"\n        d=\"M 41.9375 8.625 C 41.273438 8.648438 40.664063 9 40.3125 9.5625 L 21.5 38.34375 L 9.3125 27.8125 C 8.789063 27.269531 8.003906 27.066406 7.28125 27.292969 C 6.5625 27.515625 6.027344 28.125 5.902344 28.867188 C 5.777344 29.613281 6.078125 30.363281 6.6875 30.8125 L 20.625 42.875 C 21.0625 43.246094 21.640625 43.410156 22.207031 43.328125 C 22.777344 43.242188 23.28125 42.917969 23.59375 42.4375 L 43.6875 11.75 C 44.117188 11.121094 44.152344 10.308594 43.78125 9.644531 C 43.410156 8.984375 42.695313 8.589844 41.9375 8.625 Z\"\n      ></path>\n    </svg>\n  );\n}\n\nCheckIcon.propTypes = {\n  size: PropTypes.number,\n  className: PropTypes.string,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport CrossIcon from \"../../../styles/icons/CrossIcon.jsx\";\nimport CheckIcon from \"../../../styles/icons/CheckIcon.jsx\";\n\nconst SelectFeedbackBadge = ({ status }) => {\n  if (status === \"correct\")\n    return <CheckIcon className=\"select-feedback-badge correct visible\" />;\n  if (status === \"incorrect\")\n    return <CrossIcon className=\"select-feedback-badge incorrect visible\" />;\n  return null;\n};\n\nSelectFeedbackBadge.displayName = \"SelectFeedbackBadge\";\n\nSelectFeedbackBadge.propTypes = {\n  status: PropTypes.oneOf([\"correct\", \"incorrect\", null]),\n};\n\nexport default SelectFeedbackBadge;\n","const CORRECT_CLASS = \"select-correct\";\nconst INCORRECT_CLASS = \"select-incorrect\";\n\nexport const applySelectFeedback = (selectEl, isCorrect) => {\n  if (!selectEl) return;\n  selectEl.classList.remove(CORRECT_CLASS, INCORRECT_CLASS);\n  selectEl.classList.add(isCorrect ? CORRECT_CLASS : INCORRECT_CLASS);\n};\n\nexport const evaluateSelectAnswer = (answerValue, correctValue) => {\n  if (!correctValue) return null;\n  return answerValue.trim() === correctValue.trim() ? \"correct\" : \"incorrect\";\n};\n","import React, { useState, useEffect, useRef, useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Constants from \"../../../constants/Constants\";\nimport FormUtils from \"../../../util/FormUtils\";\nimport { ConfigurationContext } from \"../../../contexts/ConfigurationContext\";\nimport { generateSelectOptions } from \"./select.utils.js\";\nimport SelectFeedbackBadge from \"./SelectFeedbackBadge.jsx\";\nimport {\n  applySelectFeedback,\n  evaluateSelectAnswer,\n} from \"./select.feedback.js\";\nimport { resolveOptionLabel } from \"./select.utils.js\";\n\nconst SelectWithFeedback = ({\n  question,\n  label,\n  title,\n  value,\n  validation,\n  onChange,\n  hintRevealed,\n}) => {\n  const { inputComponent, componentsOptions } =\n    useContext(ConfigurationContext);\n\n  const wrapperRef = useRef(null);\n  const [feedback, setFeedback] = useState(null);\n  const [selectedValue, setSelectedValue] = useState(value ?? \"\");\n\n  const getSelectEl = () => wrapperRef.current?.querySelector(\"select\") ?? null;\n\n  const checkCorrectness = (answerValue) => {\n    const correctValue = FormUtils.getCorrectAnswerValue(question);\n    const result = evaluateSelectAnswer(answerValue, correctValue);\n    if (!result) return;\n    applySelectFeedback(getSelectEl(), result === \"correct\");\n    setFeedback(result);\n  };\n\n  useEffect(() => {\n    if (!FormUtils.hasAnswer(question) || !value) return;\n    const labelValue = resolveOptionLabel(\n      question[Constants.HAS_OPTION] ?? [],\n      value\n    );\n    setSelectedValue(labelValue);\n    checkCorrectness(labelValue);\n  }, []);\n\n  const revealCorrectAnswer = () => {\n    const correctValue = FormUtils.getCorrectAnswerValue(question);\n    if (!correctValue) return;\n    setSelectedValue(correctValue);\n    onChange(correctValue);\n    checkCorrectness(correctValue);\n  };\n\n  useEffect(() => {\n    if (hintRevealed) revealCorrectAnswer();\n  }, [hintRevealed]);\n\n  const handleChange = (e) => {\n    if (hintRevealed) {\n      revealCorrectAnswer();\n      return;\n    }\n    const labelValue = e.target.value;\n    setSelectedValue(labelValue);\n    onChange(labelValue);\n    checkCorrectness(labelValue);\n  };\n\n  return (\n    <div ref={wrapperRef} style={{ position: \"relative\" }}>\n      {React.createElement(\n        inputComponent,\n        {\n          type: \"select\",\n          label,\n          value: selectedValue,\n          title,\n          validation,\n          onChange: handleChange,\n          disabled:\n            componentsOptions.readOnly || FormUtils.isDisabled(question),\n        },\n        generateSelectOptions(question[Constants.HAS_OPTION])\n      )}\n      <SelectFeedbackBadge status={feedback} />\n    </div>\n  );\n};\n\nSelectWithFeedback.propTypes = {\n  question: PropTypes.object.isRequired,\n  label: PropTypes.object.isRequired,\n  title: PropTypes.string,\n  value: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n  hintRevealed: PropTypes.bool,\n};\n\nexport default SelectWithFeedback;\n","import React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Utils from \"../../../util/Utils\";\nimport { ConfigurationContext } from \"../../../contexts/ConfigurationContext\";\n\nimport SelectDefault from \"./SelectDefault\";\nimport SelectWithFeedback from \"./SelectWithFeedback\";\n\nconst SelectAnswer = (props) => {\n  const configurationContext = useContext(ConfigurationContext);\n  const feedbackEnabled = Utils.isOptionQuestionFeedbackEnabled(\n    configurationContext?.options\n  );\n\n  if (feedbackEnabled) {\n    return <SelectWithFeedback {...props} />;\n  }\n\n  return <SelectDefault {...props} />;\n};\n\nSelectAnswer.propTypes = {\n  question: PropTypes.object.isRequired,\n  label: PropTypes.object.isRequired,\n  title: PropTypes.string,\n  value: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n  hintRevealed: PropTypes.bool,\n  onRevealHint: PropTypes.func,\n};\n\nexport default SelectAnswer;\n","import * as JsonLdUtils from \"jsonld-utils\";\nimport Constants from \"../../../constants/Constants.js\";\nimport Utils from \"../../../util/Utils.js\";\nimport JsonLdObjectUtils from \"../../../util/JsonLdObjectUtils.js\";\nimport FormUtils from \"../../../util/FormUtils.js\";\n\nconst processTypeaheadOptions = (options, intl) => {\n  if (options === undefined || !options.length) {\n    return [];\n  }\n\n  // sort by label\n  options.sort(JsonLdObjectUtils.getCompareLocalizedLabelFunction(intl));\n\n  // sort by property\n  JsonLdObjectUtils.orderPreservingToplogicalSort(\n    options,\n    Constants.HAS_PRECEDING_VALUE\n  );\n\n  return options;\n};\n\nexport const buildOptionsTree = (possibleValues, intl) => {\n  if (!possibleValues) {\n    return [];\n  }\n\n  //Sort values\n  possibleValues = processTypeaheadOptions(possibleValues, intl);\n  const options = {};\n  const relations = [];\n\n  for (let pValue of possibleValues) {\n    let label = JsonLdUtils.getLocalized(pValue[Constants.RDFS_LABEL], intl);\n    let description = JsonLdUtils.getLocalized(\n      pValue[Constants.RDFS_COMMENT],\n      intl\n    );\n\n    options[pValue[\"@id\"]] = {\n      id: pValue[\"@id\"],\n      value: pValue[\"@id\"],\n      label: label,\n      description: description,\n      children: [],\n    };\n    for (let parent of Utils.asArray(pValue[Constants.BROADER])) {\n      relations.push({\n        type: \"parent-child\",\n        parent: parent[\"@id\"],\n        child: pValue[\"@id\"],\n      });\n    }\n  }\n\n  for (let relation of relations) {\n    if (relation.type === \"parent-child\") {\n      options[relation.parent]?.children.push(relation.child);\n    }\n  }\n\n  return Object.values(options);\n};\n\nexport const evaluateAnswer = (answerLabel, question) => {\n  if (!answerLabel) return null;\n\n  const correctValue = FormUtils.getCorrectAnswerValue(question);\n  if (!correctValue) return null;\n\n  return answerLabel.trim() === correctValue.trim() ? \"correct\" : \"incorrect\";\n};\n","import React from \"react\";\nimport Option from \"intelligent-tree-select/lib/components/Option\";\nimport FormUtils from \"../../../util/FormUtils.js\";\n\nconst FEEDBACK_COLORS = {\n  correct: \"#d4edda\",\n  incorrect: \"#f8d7da\",\n};\n\nconst VALIDATION_STYLES = {\n  \"is-warning\": {\n    borderColor: \"#dc9135\",\n    boxShadow: \"0 0 0 0.2rem rgba(203,127,16,.25)\",\n  },\n  \"is-invalid\": {\n    borderColor: \"#dc3545\",\n    boxShadow: \"0 0 0 0.2rem rgba(220,53,69,.25)\",\n  },\n};\n\nconst FEEDBACK_STYLES = {\n  correct: {\n    borderColor: \"#28a745\",\n    boxShadow: \"0 0 0 0.2rem rgba(40,167,69,.25)\",\n  },\n  incorrect: {\n    borderColor: \"#dc3545\",\n    boxShadow: \"0 0 0 0.2rem rgba(220,53,69,.25)\",\n  },\n};\n\nconst buildControlOverride = ({ borderColor, boxShadow } = {}) => ({\n  control: (provided) => ({\n    ...provided,\n    border: borderColor ? `1px solid ${borderColor}` : provided.border,\n    boxShadow: boxShadow ?? provided.boxShadow,\n    \"&:hover\": {\n      border: borderColor ? `1px solid ${borderColor}` : provided.border,\n      boxShadow: boxShadow ?? provided.boxShadow,\n    },\n  }),\n});\n\nexport const buildControlStyle = (validation, feedback) => {\n  const styles =\n    VALIDATION_STYLES[validation?.classname] ?? FEEDBACK_STYLES[feedback] ?? {};\n  return buildControlOverride(styles);\n};\n\nexport const createOptionRenderer =\n  ({ hintRevealed, correctValue, currentValue }) =>\n  (optionProps) => {\n    const isCorrect = optionProps.label?.trim() === correctValue?.trim();\n    const isCurrent = optionProps.label?.trim() === currentValue?.label?.trim();\n\n    let background = \"transparent\";\n    if (hintRevealed && isCorrect) background = FEEDBACK_COLORS.correct;\n    if (isCurrent)\n      background = isCorrect\n        ? FEEDBACK_COLORS.correct\n        : FEEDBACK_COLORS.incorrect;\n\n    return (\n      <div style={{ backgroundColor: background }}>\n        <Option {...optionProps} />\n      </div>\n    );\n  };\n\nexport const valueRendererWithFeedback = (feedback, children) => (\n  <div\n    style={{\n      backgroundColor: FEEDBACK_COLORS[feedback] ?? \"transparent\",\n      padding: \"2px 6px\",\n      borderRadius: \"4px\",\n      display: \"inline-block\",\n    }}\n  >\n    {children}\n  </div>\n);\n","import React, { useState, useEffect } from \"react\";\n\nimport { FormGroup, Form } from \"react-bootstrap\";\nimport { IntelligentTreeSelect } from \"intelligent-tree-select/lib/components/IntelligentTreeSelect\";\n\nimport {\n  buildControlStyle,\n  createOptionRenderer,\n  valueRendererWithFeedback,\n} from \"./typeahead.renderers\";\nimport { evaluateAnswer } from \"./typeahead.utils.js\";\nimport PropTypes from \"prop-types\";\nimport FormUtils from \"../../../util/FormUtils.js\";\n\nconst TypeaheadWithFeedback = (props) => {\n  const [selectedValue, setSelectedValue] = useState(null);\n  const [feedback, setFeedback] = useState(null);\n  const [menuOpen, setMenuOpen] = useState(false);\n  const correctValue = FormUtils.getCorrectAnswerValue(props.question);\n\n  const handleChange = (option) => {\n    const id = option?.id ?? null;\n    setSelectedValue(option ?? null);\n    props.onChange(id);\n    setMenuOpen(false);\n    setFeedback(evaluateAnswer(option?.label, props.question));\n  };\n\n  useEffect(() => {\n    if (!props.optionsList.length) return;\n\n    const matched = props.optionsList.find((o) => o.id === props.value);\n    if (!matched) return;\n\n    setSelectedValue(matched);\n    setFeedback(evaluateAnswer(matched.label, props.question));\n  }, [props.optionsList]);\n\n  return (\n    <FormGroup size=\"small\" className=\"mb-3\">\n      <Form.Label>{props.label}</Form.Label>\n      <IntelligentTreeSelect\n        styles={buildControlStyle(props.validation, feedback)}\n        valueKey={props.valueKey}\n        labelKey={props.labelKey}\n        valueRenderer={(children) =>\n          valueRendererWithFeedback(feedback, children)\n        }\n        optionRenderer={createOptionRenderer({\n          hintRevealed: props.hintRevealed,\n          currentValue: selectedValue,\n          correctValue: correctValue,\n        })}\n        value={selectedValue}\n        options={props.optionsList}\n        multi={false}\n        isSearchable\n        isLoading={props.isLoading}\n        isClearable\n        renderAsTree\n        optionLeftOffset={5}\n        isMenuOpen={menuOpen}\n        onChange={handleChange}\n        titleKey=\"description\"\n      />\n\n      {props.validation?.message}\n    </FormGroup>\n  );\n};\n\nexport default TypeaheadWithFeedback;\n\nTypeaheadWithFeedback.propTypes = {\n  question: PropTypes.object.isRequired,\n  answer: PropTypes.object.isRequired,\n  label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n  value: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n  hintRevealed: PropTypes.bool.isRequired,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { FormGroup, Form } from \"react-bootstrap\";\nimport { IntelligentTreeSelect } from \"intelligent-tree-select/lib/components/IntelligentTreeSelect\";\n\nimport Constants from \"../../../constants/Constants\";\nimport FormUtils from \"../../../util/FormUtils\";\nimport TypeaheadWithFeedback from \"./TypeaheadWithFeedback.jsx\";\nimport { buildControlStyle } from \"./typeahead.renderers.jsx\";\n\nconst noLinksValueRenderer = (children) => <>{children}</>;\n\nconst TypeaheadDefault = (props) => {\n  const handleChange = (option) => {\n    props.onChange(option ? option.id : null);\n  };\n\n  return (\n    <FormGroup size=\"small\" className=\"mb-3\">\n      <Form.Label>{props.label}</Form.Label>\n      <IntelligentTreeSelect\n        valueKey={props.valueKey}\n        labelKey={props.labelKey}\n        styles={buildControlStyle()}\n        value={props.optionsList.find((o) => o.id === props.value) || null}\n        options={props.optionsList}\n        multi={false}\n        isSearchable={true}\n        isLoading={props.isLoading}\n        isClearable={true}\n        renderAsTree={true}\n        optionLeftOffset={5}\n        valueRenderer={\n          props.question[Constants.PROVIDES_DEREFERENCEABLE_ANSWER_VALUES] ===\n          false\n            ? noLinksValueRenderer\n            : null\n        }\n        isDisabled={\n          props.isLoading ||\n          props.configurationContext.componentsOptions.readOnly ||\n          FormUtils.isDisabled(props.question)\n        }\n        onChange={handleChange}\n        titleKey=\"description\"\n      />\n\n      {props.validation?.message}\n    </FormGroup>\n  );\n};\n\nTypeaheadWithFeedback.propTypes = {\n  question: PropTypes.object.isRequired,\n  answer: PropTypes.object.isRequired,\n  label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n  value: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n};\n\nexport default TypeaheadDefault;\n","import React, { useState, useEffect, useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Constants from \"../../../constants/Constants\";\nimport FormUtils from \"../../../util/FormUtils\";\nimport Utils from \"../../../util/Utils\";\nimport Logger from \"../../../util/Logger\";\n\nimport { FormGenContext } from \"../../../contexts/FormGenContext\";\nimport { ConfigurationContext } from \"../../../contexts/ConfigurationContext\";\n\nimport { useIntl } from \"react-intl\";\n\nimport { buildOptionsTree } from \"./typeahead.utils\";\n\nimport TypeaheadDefault from \"./TypeheadDefault\";\nimport TypeaheadWithFeedback from \"./TypeaheadWithFeedback\";\nimport \"intelligent-tree-select/lib/styles.css\";\n\nconst TypeaheadAnswer = (props) => {\n  const intl = useIntl();\n\n  const formGenContext = useContext(FormGenContext);\n  const configurationContext = useContext(ConfigurationContext);\n\n  const queryHash = Utils.getStringHash(\n    FormUtils.getPossibleValuesQuery(props.question)\n  );\n\n  const [isLoading, setLoading] = useState(true);\n  const [optionsList, setOptionsList] = useState(() =>\n    buildOptionsTree(props.options, intl)\n  );\n\n  const learningEnabled = Utils.isOptionQuestionFeedbackEnabled(\n    configurationContext?.options\n  );\n\n  useEffect(() => {\n    let isCancelled = false;\n\n    async function loadOptions() {\n      try {\n        const options = await formGenContext.loadFormOptions(\n          queryHash,\n          FormUtils.getPossibleValuesQuery(props.question)\n        );\n\n        if (!isCancelled) {\n          setOptionsList(buildOptionsTree(options, intl));\n          setLoading(false);\n        }\n      } catch (error) {\n        Logger.error(\n          `Typeahead: options loading failed for query hash ${queryHash}`\n        );\n      }\n    }\n\n    if (\n      !props.question[Constants.HAS_OPTION] &&\n      FormUtils.getPossibleValuesQuery(props.question)\n    ) {\n      loadOptions();\n    } else {\n      setOptionsList(\n        buildOptionsTree(props.question[Constants.HAS_OPTION], intl)\n      );\n      setLoading(false);\n    }\n\n    return () => {\n      isCancelled = true;\n    };\n  }, [queryHash, formGenContext, props.question, intl]);\n\n  const valueKey = Utils.findKeyInObjects(optionsList, [\"name\", \"value\"]);\n  const labelKey = Utils.findKeyInObjects(optionsList, [\"name\", \"label\"]);\n\n  const sharedProps = {\n    ...props,\n    optionsList,\n    valueKey,\n    labelKey,\n    isLoading,\n    configurationContext,\n  };\n\n  if (learningEnabled) {\n    return <TypeaheadWithFeedback {...sharedProps} />;\n  }\n\n  return <TypeaheadDefault {...sharedProps} />;\n};\n\nTypeaheadAnswer.propTypes = {\n  question: PropTypes.object.isRequired,\n  answer: PropTypes.object.isRequired,\n  label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n  value: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\n  hintRevealed: PropTypes.bool,\n};\n\nexport default TypeaheadAnswer;\n","import React from \"react\";\n\nconst CaretSquareUp = ({ title }) => (\n  <svg\n    className=\"caret-square-up\"\n    version=\"1.1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"24\"\n    height=\"28\"\n    viewBox=\"0 0 24 28\"\n  >\n    <title>{title || \"\"}</title>\n    <path d=\"M17.891 17.453c-0.172 0.344-0.516 0.547-0.891 0.547h-10c-0.375 0-0.719-0.203-0.891-0.547-0.172-0.328-0.141-0.734 0.078-1.031l5-7c0.187-0.266 0.484-0.422 0.812-0.422s0.625 0.156 0.812 0.422l5 7c0.219 0.297 0.25 0.703 0.078 1.031zM20 21.5v-15c0-0.266-0.234-0.5-0.5-0.5h-15c-0.266 0-0.5 0.234-0.5 0.5v15c0 0.266 0.234 0.5 0.5 0.5h15c0.266 0 0.5-0.234 0.5-0.5zM24 6.5v15c0 2.484-2.016 4.5-4.5 4.5h-15c-2.484 0-4.5-2.016-4.5-4.5v-15c0-2.484 2.016-4.5 4.5-4.5h15c2.484 0 4.5 2.016 4.5 4.5z\"></path>\n  </svg>\n);\n\nexport default CaretSquareUp;\n","import React from \"react\";\n\nconst CaretSquareDown = ({ title }) => (\n  <svg\n    className=\"caret-square-down\"\n    version=\"1.1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"24\"\n    height=\"28\"\n    viewBox=\"0 0 24 28\"\n  >\n    <title>{title || \"\"}</title>\n    <path d=\"M17.891 10.547c0.172 0.328 0.141 0.734-0.078 1.031l-5 7c-0.187 0.266-0.484 0.422-0.812 0.422s-0.625-0.156-0.812-0.422l-5-7c-0.219-0.297-0.25-0.703-0.078-1.031 0.172-0.344 0.516-0.547 0.891-0.547h10c0.375 0 0.719 0.203 0.891 0.547zM20 21.5v-15c0-0.266-0.234-0.5-0.5-0.5h-15c-0.266 0-0.5 0.234-0.5 0.5v15c0 0.266 0.234 0.5 0.5 0.5h15c0.266 0 0.5-0.234 0.5-0.5zM24 6.5v15c0 2.484-2.016 4.5-4.5 4.5h-15c-2.484 0-4.5-2.016-4.5-4.5v-15c0-2.484 2.016-4.5 4.5-4.5h15c2.484 0 4.5 2.016 4.5 4.5z\"></path>\n  </svg>\n);\n\nexport default CaretSquareDown;\n","import React from \"react\";\n\nconst InfoCircle = () => (\n  <svg\n    className=\"info-circle\"\n    version=\"1.1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"24\"\n    height=\"28\"\n    viewBox=\"0 0 24 28\"\n  >\n    <title>info-circle</title>\n    <path d=\"M16 21.5v-2.5c0-0.281-0.219-0.5-0.5-0.5h-1.5v-8c0-0.281-0.219-0.5-0.5-0.5h-5c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h1.5v5h-1.5c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h7c0.281 0 0.5-0.219 0.5-0.5zM14 7.5v-2.5c0-0.281-0.219-0.5-0.5-0.5h-3c-0.281 0-0.5 0.219-0.5 0.5v2.5c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n  </svg>\n);\n\nexport default InfoCircle;\n","import React from \"react\";\n\nconst QuestionCircle = () => (\n  <svg\n    className=\"question-circle\"\n    version=\"1.1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"24\"\n    height=\"28\"\n    viewBox=\"0 0 24 28\"\n  >\n    <path d=\"M14 21.5v-3c0-0.281-0.219-0.5-0.5-0.5h-3c-0.281 0-0.5 0.219-0.5 0.5v3c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5zM18 11c0-2.859-3-5-5.688-5-2.547 0-4.453 1.094-5.797 3.328-0.141 0.219-0.078 0.5 0.125 0.656l2.063 1.563c0.078 0.063 0.187 0.094 0.297 0.094 0.141 0 0.297-0.063 0.391-0.187 0.734-0.938 1.047-1.219 1.344-1.437 0.266-0.187 0.781-0.375 1.344-0.375 1 0 1.922 0.641 1.922 1.328 0 0.812-0.422 1.219-1.375 1.656-1.109 0.5-2.625 1.797-2.625 3.313v0.562c0 0.281 0.219 0.5 0.5 0.5h3c0.281 0 0.5-0.219 0.5-0.5v0c0-0.359 0.453-1.125 1.188-1.547 1.188-0.672 2.812-1.578 2.812-3.953zM24 14c0 6.625-5.375 12-12 12s-12-5.375-12-12 5.375-12 12-12 12 5.375 12 12z\"></path>\n  </svg>\n);\n\nexport default QuestionCircle;\n","import React, { useState } from \"react\";\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\nimport PropTypes from \"prop-types\";\n\nconst IconOverlay = (props) => {\n  const [overlayPlacement, setOverlayPlacement] = useState(\"right\");\n\n  const getOverlayPlacement = (el) => {\n    if (!el) return;\n\n    if (el.getBoundingClientRect().x > window.innerWidth / 2) {\n      setOverlayPlacement(\"left\");\n    } else setOverlayPlacement(\"right\");\n  };\n\n  const tooltip = props.show ? (\n    <Tooltip className=\"tooltip-content\" id={props.id}>\n      {props.tooltipContent}\n    </Tooltip>\n  ) : (\n    <span />\n  );\n\n  return (\n    <span ref={(el) => getOverlayPlacement(el)}>\n      <OverlayTrigger\n        overlay={tooltip}\n        placement={props.overlayPlacement || overlayPlacement}\n      >\n        <span>{props.children}</span>\n      </OverlayTrigger>\n    </span>\n  );\n};\n\nIconOverlay.propTypes = {\n  tooltipContent: PropTypes.oneOfType([\n    PropTypes.object.isRequired,\n    PropTypes.string.isRequired,\n  ]),\n  id: PropTypes.string.isRequired,\n  overlayPlacement: PropTypes.string,\n  absolutePosition: PropTypes.bool,\n  show: PropTypes.bool,\n};\n\nIconOverlay.defaultProps = {\n  iconClassContainer: \"\",\n  iconClass: \"\",\n  absolutePosition: true,\n  show: true,\n};\n\nexport default IconOverlay;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { QuestionCircle } from \"../styles/icons\";\nimport IconOverlay from \"./IconOverlay.jsx\";\n\nconst HelpIcon = (props) => {\n  const [overlayPlacement, setOverlayPlacement] = useState(\"right\");\n\n  const getOverlayPlacement = (el) => {\n    if (!el) return;\n\n    if (el.getBoundingClientRect().x > window.innerWidth / 2) {\n      setOverlayPlacement(\"left\");\n    } else setOverlayPlacement(\"right\");\n  };\n\n  return (\n    <div ref={(el) => getOverlayPlacement(el)}>\n      <IconOverlay\n        id=\"help-icon-tooltip-\"\n        overlayPlacement={props.overlayPlacement || overlayPlacement}\n        absolutePosition={props.absolutePosition}\n        tooltipContent={props.text}\n      >\n        <QuestionCircle className={props.iconClass} />\n      </IconOverlay>\n    </div>\n  );\n};\n\nHelpIcon.propTypes = {\n  text: PropTypes.string.isRequired,\n  iconClassContainer: PropTypes.string,\n  iconClass: PropTypes.string,\n  overlayPlacement: PropTypes.string,\n  absolutePosition: PropTypes.bool,\n};\n\nHelpIcon.defaultProps = {\n  iconClassContainer: \"\",\n  iconClass: \"\",\n  absolutePosition: true,\n};\n\nexport default HelpIcon;\n","import React from \"react\";\n\nconst ExternalLink = () => (\n  <svg\n    className=\"external-link-icon\"\n    width=\"24\"\n    height=\"16\"\n    viewBox=\"0 0 16 16\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M5,2 C5.55228,2 6,2.44772 6,3 C6,3.55228 5.55228,4 5,4 L4,4 L4,12 L12,12 L12,11 C12,10.4477 12.4477,10 13,10 C13.5523,10 14,10.4477 14,11 L14,12 C14,13.1046 13.1046,14 12,14 L4,14 C2.89543,14 2,13.1046 2,12 L2,4 C2,2.89543 2.89543,2 4,2 L5,2 Z M15,1 L15,5.99814453 C15,6.55043453 14.5523,6.99814453 14,6.99814453 C13.4477,6.99814453 13,6.55043453 13,5.99814453 L13,4.41419 L8.71571,8.69846 C8.32519,9.08899 7.69202,9.08899 7.3015,8.69846 C6.91097,8.30794 6.91097,7.67477 7.3015,7.28425 L11.5858,3 L9.99619141,3 C9.44391141,3 8.99619141,2.55228 8.99619141,2 C8.99619141,1.44772 9.44391141,1 9.99619141,1 L15,1 Z\" />\n  </svg>\n);\n\nexport default ExternalLink;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport ExternalLink from \"../styles/icons/ExternalLink\";\nimport IconOverlay from \"./IconOverlay\";\n\nconst LinkIcon = (props) => {\n  return (\n    <IconOverlay\n      tooltipContent={props.url[\"@id\"] || props.url}\n      id=\"url-tooltip\"\n      overlayPlacement={props.overlayPlacement}\n    >\n      <a\n        href={props.url[\"@id\"] || props.url}\n        target=\"_blank\"\n        className={props.iconClassContainer}\n      >\n        <ExternalLink className={props.iconClass} />\n      </a>\n    </IconOverlay>\n  );\n};\n\nLinkIcon.propTypes = {\n  url: PropTypes.oneOfType([\n    PropTypes.string.isRequired,\n    PropTypes.object.isRequired,\n  ]),\n  iconClassContainer: PropTypes.string,\n  iconClass: PropTypes.string,\n  overlayPlacement: PropTypes.string,\n  absolutePosition: PropTypes.bool,\n};\n\nLinkIcon.defaultProps = {\n  iconClassContainer: \"\",\n  iconClass: \"\",\n  absolutePosition: true,\n};\n\nexport default LinkIcon;\n","import React from \"react\";\n\nconst CommentBubble = () => {\n  return (\n    <svg\n      className=\"question-comment\"\n      version=\"1.1\"\n      id=\"Capa_1\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 60 60\"\n      width=\"24\"\n      height=\"28\"\n    >\n      <path\n        d=\"M30,1.5c-16.542,0-30,12.112-30,27c0,5.204,1.646,10.245,4.768,14.604c-0.591,6.537-2.175,11.39-4.475,13.689\n\tc-0.304,0.304-0.38,0.769-0.188,1.153C0.275,58.289,0.625,58.5,1,58.5c0.046,0,0.092-0.003,0.139-0.01\n\tc0.405-0.057,9.813-1.411,16.618-5.339C21.621,54.71,25.737,55.5,30,55.5c16.542,0,30-12.112,30-27S46.542,1.5,30,1.5z M16,32.5\n\tc-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S18.206,32.5,16,32.5z M30,32.5c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4\n\tS32.206,32.5,30,32.5z M44,32.5c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S46.206,32.5,44,32.5z\"\n      />\n    </svg>\n  );\n};\n\nexport default CommentBubble;\n","import React from \"react\";\n\nconst RecycleBin = () => (\n  <svg\n    className=\"recycle-bin-icon\"\n    version=\"1.1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    height=\"15px\"\n    width=\"15px\"\n    viewBox=\"0 0 512 512\"\n  >\n    <g>\n      <g>\n        <path\n          d=\"M331.636,69.818V0H180.364v69.818h-128v128h34.909V512h337.455V197.818h34.909v-128H331.636z M215.273,34.909h81.455\nv34.909h-81.455V34.909z M389.818,477.091H122.182V197.818h267.636V477.091z M424.727,162.909H87.273v-58.182h337.455V162.909z\"\n        />\n      </g>\n    </g>\n    <g>\n      <g>\n        <rect x=\"168.727\" y=\"256\" width=\"34.909\" height=\"162.909\" />\n      </g>\n    </g>\n    <g>\n      <g>\n        <rect x=\"308.364\" y=\"256\" width=\"34.909\" height=\"162.909\" />\n      </g>\n    </g>\n    <g>\n      <g>\n        <rect x=\"238.545\" y=\"256\" width=\"34.909\" height=\"162.909\" />\n      </g>\n    </g>\n  </svg>\n);\n\nexport default RecycleBin;\n","import React, { useContext, useState } from \"react\";\nimport TimeAgo from \"javascript-time-ago\";\nimport en from \"javascript-time-ago/locale/en\";\nimport cs from \"javascript-time-ago/locale/cs\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport LinkIcon from \"../LinkIcon\";\nimport IconOverlay from \"../IconOverlay\";\nimport PropTypes from \"prop-types\";\nimport RecycleBin from \"../../styles/icons/RecycleBin\";\nimport { motion } from \"framer-motion\";\nimport Constants from \"../../constants/Constants\";\nimport { useIntl } from \"react-intl\";\n\nconst CommentView = (props) => {\n  const { options } = useContext(ConfigurationContext);\n  const [showIRI, setShowIRI] = useState(false);\n  const [showRecycleBin, setShowRecycleBin] = useState(false);\n  const intl = useIntl();\n\n  TimeAgo.addLocale(cs);\n  TimeAgo.addLocale(en);\n  TimeAgo.setDefaultLocale(Constants.LANG.en.locale);\n\n  const time = new TimeAgo(intl.locale);\n\n  const getAuthorLabel = () => {\n    if (options && options.users && props.author) {\n      const users = options.users;\n      const author = users.find((u) => u.id === props.author[\"@id\"]);\n\n      if (author && author.label) {\n        return author.label;\n      }\n    }\n    return intl.formatMessage({\n      id: \"comment.unknownAuthor\",\n    });\n  };\n\n  const getAuthorIRIAbbreviation = () => {\n    const fullAuthor = props.author[\"@id\"];\n    return fullAuthor.replace(/.*[#\\/]/, \"... \");\n  };\n\n  const getAuthorIRI = () => {\n    if (props.author) {\n      return Object.values(props.author).toString();\n    }\n    return intl.formatMessage({\n      id: \"comment.unknownAuthor\",\n    });\n  };\n\n  const renderAuthor = () => {\n    return (\n      <React.Fragment>\n        {showIRI ? (\n          <React.Fragment>\n            {getAuthorLabel()}\n            <LinkIcon\n              iconClassContainer=\"emphasise-on-relevant-icon\"\n              url={getAuthorIRI()}\n            />\n          </React.Fragment>\n        ) : (\n          getAuthorLabel()\n        )}\n      </React.Fragment>\n    );\n  };\n\n  const renderTimeAgo = () => {\n    const numericTimestamp = Number(props.timestamp);\n    const parsedDate = isNaN(numericTimestamp)\n      ? new Date(props.timestamp)\n      : new Date(numericTimestamp);\n\n    const getTimeAgoFormat = () => {\n      return time.format(parsedDate);\n    };\n\n    const getUTCFormat = () => {\n      return new Intl.DateTimeFormat(intl.locale, {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\",\n        second: \"numeric\",\n      }).format(new Date(parsedDate));\n    };\n\n    return (\n      <IconOverlay id=\"exact-time-overlay\" tooltipContent={getUTCFormat()}>\n        {getTimeAgoFormat()}\n      </IconOverlay>\n    );\n  };\n\n  const handleCommentAuthorMouseEnter = () => {\n    setShowIRI(!showIRI);\n  };\n\n  const handleCommentBinMouseEnter = () => {\n    setShowRecycleBin(true);\n  };\n\n  const handleCommentBinMouseLeave = () => {\n    setShowRecycleBin(false);\n  };\n\n  const handleDeleteCommentClick = () => {\n    props.onDeleteQuestionComment(props.index);\n    props.onDeleteViewComment();\n  };\n\n  return (\n    <div\n      className=\"comment-content\"\n      onMouseEnter={handleCommentBinMouseEnter}\n      onMouseLeave={handleCommentBinMouseLeave}\n    >\n      <div className=\"row\">\n        <div\n          className=\"col-auto comment-author\"\n          onMouseEnter={handleCommentAuthorMouseEnter}\n          onMouseLeave={handleCommentAuthorMouseEnter}\n        >\n          {renderAuthor()}\n        </div>\n        <div className=\"col-auto text-muted comment-timestamp\">\n          {renderTimeAgo()}\n        </div>\n        {showRecycleBin ? (\n          <motion.div\n            className=\"comment-delete emphasise-on-relevant-icon\"\n            whileHover={{ scale: 1.2 }}\n            whileTap={{ scale: 0.9 }}\n            onClick={handleDeleteCommentClick}\n          >\n            <RecycleBin />\n          </motion.div>\n        ) : null}\n      </div>\n      <div className=\"row\">\n        <div className=\"col comment-value\">{props.commentValue}</div>\n      </div>\n    </div>\n  );\n};\n\nCommentView.propTypes = {\n  author: PropTypes.object,\n  timestamp: PropTypes.string.isRequired,\n  commentValue: PropTypes.string.isRequired,\n  onDeleteQuestionComment: PropTypes.func.isRequired,\n  onDeleteViewComment: PropTypes.func,\n  index: PropTypes.number.isRequired,\n};\n\nexport default CommentView;\n","import React, { useState, useRef, useEffect } from \"react\";\nimport CommentView from \"./CommentView\";\nimport Constants from \"../../constants/Constants\";\nimport { Rings } from \"react-loader-spinner\";\nimport * as JsonLdUtils from \"jsonld-utils\";\n\ninterface Props {\n  comments: Array<any>;\n  onDeleteCommentClick: (index: number) => void;\n}\n\nconst CommentList = ({ comments, onDeleteCommentClick }: Props) => {\n  const commentEndRef = useRef<null | HTMLDivElement>(null);\n  const [isDeleting, setIsDeleting] = useState<boolean>(false);\n\n  const handleDeleteViewComment = () => {\n    setIsDeleting(true);\n    setTimeout(() => {\n      setIsDeleting(false);\n    }, 2000);\n  };\n\n  useEffect(() => {\n    if (commentEndRef.current === null) {\n      return;\n    }\n    commentEndRef.current.scrollTop = commentEndRef.current.scrollHeight;\n  }, [JSON.stringify(comments)]);\n\n  return (\n    <span>\n      {isDeleting ? (\n        <div className=\"comment-delete\">\n          <Rings color=\"#00BFFF\" height={80} width={80} />\n          <p>Deleting comment...</p>\n        </div>\n      ) : (\n        <div className=\"comment-list-items\" ref={commentEndRef}>\n          {comments.map((comment, index) => (\n            <div key={index} className=\"comment-list-item\">\n              <CommentView\n                commentValue={JsonLdUtils.getJsonAttValue(\n                  comment,\n                  Constants.HAS_COMMENT_VALUE\n                )}\n                author={\n                  comment[Constants.HAS_AUTHOR]\n                    ? comment[Constants.HAS_AUTHOR]\n                    : null\n                }\n                timestamp={JsonLdUtils.getJsonAttValue(\n                  comment,\n                  Constants.HAS_TIMESTAMP\n                )}\n                onDeleteQuestionComment={onDeleteCommentClick}\n                onDeleteViewComment={handleDeleteViewComment}\n                index={index}\n              />\n            </div>\n          ))}\n        </div>\n      )}\n    </span>\n  );\n};\n\nexport default CommentList;\n","import React from \"react\";\n\nconst ArrowRight = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"15\"\n    height=\"15\"\n    viewBox=\"0 0 24 24\"\n  >\n    <path d=\"M6.185 4.843l11.927 7.157-11.927 7.157 2.982-7.157-2.982-7.157zm-4.185-4.843l5 12-5 12 20-12-20-12z\" />\n  </svg>\n);\n\nexport default ArrowRight;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button, Form, Col, Row } from \"react-bootstrap\";\nimport PropTypes from \"prop-types\";\nimport ArrowRight from \"../../styles/icons/ArrowRight\";\nimport { useIntl } from \"react-intl\";\n\nconst MAX_TEXT_AREA_HEIGHT = \"300px\";\n\nconst CommentForm = (props) => {\n  const [commentValue, setCommentValue] = useState(\"\");\n  const formInputRef = useRef(null);\n  const intl = useIntl();\n\n  useEffect(() => {\n    formInputRef.current.focus();\n  }, []);\n\n  const handleValueChange = (e) => {\n    setCommentValue(e.target.value);\n  };\n\n  const handleFormSubmit = (e) => {\n    e.preventDefault();\n    props.onChange(commentValue);\n    setCommentValue(\"\");\n  };\n\n  const handleFormKeyUp = (e) => {\n    if (e.key === \"Enter\" && e.ctrlKey && commentValue.trim())\n      handleFormSubmit(e);\n  };\n\n  const handleFormClick = (e) => {\n    e.stopPropagation();\n  };\n\n  const handleTextAreaKeyPress = () => {\n    const textArea = formInputRef.current;\n    textArea.style.height = \"auto\";\n    autoResizeTextArea(textArea);\n  };\n\n  const autoResizeTextArea = (textArea) => {\n    let scrollHeight = textArea.scrollHeight;\n    textArea.style.height = `${scrollHeight}px`;\n    if (parseInt(textArea.style.height) > parseInt(MAX_TEXT_AREA_HEIGHT)) {\n      textArea.style.height = MAX_TEXT_AREA_HEIGHT;\n    }\n  };\n\n  return (\n    <Form\n      onSubmit={handleFormSubmit}\n      onKeyUp={handleFormKeyUp}\n      onClick={handleFormClick}\n    >\n      <Form.Group\n        className=\"m-2 position-relative\"\n        controlId=\"formBasicComment\"\n      >\n        <Col className=\"col-lg-12 p-0\">\n          <Row className=\"container-fluid p-0 m-0\">\n            <div id=\"comment-form\">\n              <Form.Control\n                className=\"comment-form-control\"\n                name=\"comment\"\n                as=\"textarea\"\n                placeholder={intl.formatMessage({\n                  id: \"comment.form.placeholder\",\n                })}\n                required\n                value={commentValue}\n                onChange={handleValueChange}\n                ref={formInputRef}\n                onKeyPress={handleTextAreaKeyPress}\n                onKeyDown={handleTextAreaKeyPress}\n              />\n              <Button\n                className=\"comment-form-button\"\n                variant=\"primary\"\n                type=\"submit\"\n              >\n                <ArrowRight />\n              </Button>\n            </div>\n          </Row>\n        </Col>\n      </Form.Group>\n    </Form>\n  );\n};\n\nCommentForm.propTypes = {\n  onChange: PropTypes.func.isRequired,\n};\n\nexport default CommentForm;\n","import React from \"react\";\n\nconst Close = () => (\n  <svg\n    className=\"close-icon\"\n    width=\"24px\"\n    height=\"24px\"\n    viewBox=\"0 0 24 24\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29-4.3 4.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4.29-4.3 4.29 4.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z\" />\n  </svg>\n);\n\nexport default Close;\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport CommentBubble from \"../../styles/icons/CommentBubble\";\nimport { Badge, Overlay, Tooltip } from \"react-bootstrap\";\nimport CommentList from \"./CommentList\";\nimport PropTypes from \"prop-types\";\nimport Constants from \"../../constants/Constants\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport CommentForm from \"./CommentForm\";\nimport { motion } from \"framer-motion\";\nimport Close from \"../../styles/icons/Close\";\n\nconst QuestionCommentIcon = (props) => {\n  const context = useContext(ConfigurationContext);\n  const target = useRef(null);\n  const dragRef = useRef(null);\n  const overlayTarget = useRef(null);\n  const [showOverlay, setShowOverlay] = useState(false);\n  const [overlayPlacement, setOverlayPlacement] = useState(\"right\");\n\n  useEffect(() => {\n    getOverlayPlacement(overlayTarget.current);\n  });\n\n  const handleHideOverlayClick = () => {\n    setShowOverlay(false);\n  };\n\n  // TODO make util function\n  const _getComments = () => {\n    const question = props.question;\n\n    if (!question[Constants.HAS_COMMENT]) {\n      question[Constants.HAS_COMMENT] = [];\n    }\n    if (!Array.isArray(question[Constants.HAS_COMMENT])) {\n      question[Constants.HAS_COMMENT] = [question[Constants.HAS_COMMENT]];\n    }\n\n    return question[Constants.HAS_COMMENT];\n  };\n\n  const handleCommentValueChange = (value) => {\n    const change = {};\n    _setComment(change, value);\n    props.onChange(getCommentsLength(), change);\n  };\n\n  const _setComment = (change, value) => {\n    if (context.options.currentUser) {\n      change[Constants.HAS_AUTHOR] = { \"@id\": context.options.currentUser };\n    }\n    change[Constants.HAS_COMMENT_VALUE] = value;\n    change[Constants.HAS_TIMESTAMP] = Date.now().toString();\n  };\n\n  const handleDeleteQuestionCommentClick = (index) => {\n    const comment = _getComments();\n    comment.splice(index, 1);\n  };\n\n  const handleStopPropagationClick = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n  };\n\n  const handleOverlayClick = (e) => {\n    handleStopPropagationClick(e);\n    setShowOverlay(!showOverlay);\n  };\n\n  const getCommentsLength = () => {\n    return _getComments().length;\n  };\n\n  const getOverlayPlacement = (overlayTarget) => {\n    if (!overlayTarget) return;\n\n    if (overlayTarget.getBoundingClientRect().x > window.innerWidth / 2) {\n      setOverlayPlacement(\"left\");\n    } else setOverlayPlacement(\"right\");\n  };\n\n  const handleEscapeKeyDown = (e) => {\n    if (e.key === \"Escape\") {\n      handleHideOverlayClick();\n    }\n  };\n\n  return (\n    <div ref={overlayTarget} onClick={handleStopPropagationClick}>\n      <span\n        className=\"comment-bubble\"\n        ref={target}\n        onClick={handleOverlayClick}\n      >\n        <CommentBubble />\n        {getCommentsLength() > 0 ? (\n          <Badge className=\"comment-badge\" pill variant=\"primary\">\n            {getCommentsLength()}\n          </Badge>\n        ) : null}\n      </span>\n\n      <motion.div\n        className=\"overlay-comment\"\n        ref={dragRef}\n        drag\n        dragConstraints={{\n          top: -50,\n          left: -50,\n          right: 50,\n          bottom: 50,\n        }}\n      >\n        <Overlay\n          target={target.current}\n          show={showOverlay}\n          placement={overlayPlacement}\n          rootClose={false}\n          onHide={handleHideOverlayClick}\n          container={dragRef}\n        >\n          {(overlayProps) => (\n            <Tooltip className=\"comment-tooltip\" {...overlayProps}>\n              <span\n                onKeyDown={(e) => {\n                  handleEscapeKeyDown(e);\n                }}\n              >\n                <motion.div\n                  className=\"close-comment-icon\"\n                  onClick={handleHideOverlayClick}\n                  whileHover={{ scale: 1.1, transition: { duration: 0.1 } }}\n                >\n                  <Close />\n                </motion.div>\n                <CommentList\n                  comments={_getComments()}\n                  onDeleteCommentClick={handleDeleteQuestionCommentClick}\n                />\n                <CommentForm onChange={handleCommentValueChange} />\n              </span>\n            </Tooltip>\n          )}\n        </Overlay>\n      </motion.div>\n    </div>\n  );\n};\n\nQuestionCommentIcon.propTypes = {\n  question: PropTypes.object.isRequired,\n  onChange: PropTypes.func.isRequired,\n};\n\nexport default QuestionCommentIcon;\n","import React from \"react\";\n\nconst BULB_PATH =\n  \"M9 21h6v2H9zm3-21C7.03 0 3 4.03 3 9c0 3.04 1.53 5.73 3.86 7.36.74.52 1.14 1.35 1.14 2.24V19h8v-.4c0-.9.39-1.73 1.14-2.24C19.47 14.73 21 12.04 21 9c0-4.97-4.03-9-9-9z\";\n\nconst SVG_SIZE = {\n  width: 24,\n  height: 28,\n  viewBox: \"0 0 24 28\",\n};\n\nconst DISABLED_LINE = {\n  x1: 2,\n  y1: 2,\n  x2: 21,\n  y2: 19,\n  stroke: \"#f15050\",\n  strokeWidth: 3,\n  strokeLinecap: \"round\",\n};\n\nconst DISABLED_BULB_OPACITY = 0.35;\n\nconst HintEnabled = () => <path d={BULB_PATH} />;\n\nconst HintDisabled = () => (\n  <>\n    <path d={BULB_PATH} opacity={DISABLED_BULB_OPACITY} />\n    <line {...DISABLED_LINE} />\n  </>\n);\n\nconst HintBulb = ({ title, enabled, className }) => (\n  <svg\n    className={`hint-icon${className ? ` ${className}` : \"\"}`}\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width={SVG_SIZE.width}\n    height={SVG_SIZE.height}\n    viewBox={SVG_SIZE.viewBox}\n    aria-label={title}\n  >\n    <title>{title}</title>\n    {enabled ? <HintEnabled /> : <HintDisabled />}\n  </svg>\n);\n\nexport default HintBulb;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport HintBulb from \"../styles/icons/HintBulb.jsx\";\nimport IconOverlay from \"./IconOverlay\";\n\nconst HintIcon = (props) => {\n  const [overlayPlacement, setOverlayPlacement] = useState(\"right\");\n\n  const getOverlayPlacement = (el) => {\n    if (!el) return;\n    if (el.getBoundingClientRect().x > window.innerWidth / 2) {\n      setOverlayPlacement(\"left\");\n    } else {\n      setOverlayPlacement(\"right\");\n    }\n  };\n\n  return (\n    <div ref={(el) => getOverlayPlacement(el)}>\n      <span onClick={() => props.onHintClick()}>\n        <IconOverlay\n          id=\"hint-icon-tooltip\"\n          overlayPlacement={props.overlayPlacement || overlayPlacement}\n          absolutePosition={props.absolutePosition}\n          tooltipContent={\n            props.text || props.revealed ? \"Hide a hint.\" : \"Reveal a hint.\"\n          }\n        >\n          <HintBulb className={props.iconClass} enabled={!props.revealed} />\n        </IconOverlay>\n      </span>\n    </div>\n  );\n};\n\nHintIcon.propTypes = {\n  text: PropTypes.string,\n  iconClassContainer: PropTypes.string,\n  iconClass: PropTypes.string,\n  overlayPlacement: PropTypes.string,\n  absolutePosition: PropTypes.bool,\n  onHintClick: PropTypes.func,\n  revealed: PropTypes.bool,\n};\n\nHintIcon.defaultProps = {\n  iconClassContainer: \"\",\n  iconClass: \"\",\n  absolutePosition: true,\n  revealed: false,\n};\n\nexport default HintIcon;\n","import React from \"react\";\nimport Constants from \"../constants/Constants.js\";\nimport HelpIcon from \"./HelpIcon.jsx\";\nimport LinkIcon from \"./LinkIcon.jsx\";\nimport QuestionCommentIcon from \"./comment/QuestionCommentIcon.jsx\";\nimport * as JsonLdUtils from \"jsonld-utils\";\nimport HintIcon from \"./HintIcon.jsx\";\nimport FormUtils from \"../util/FormUtils.js\";\n\nexport default class QuestionStatic {\n  static renderIcons(\n    question,\n    options,\n    onCommentChange,\n    showIcon,\n    intl,\n    hintRevealed,\n    onHintReveal\n  ) {\n    let icons;\n    if (options.icons) icons = options.icons;\n    else icons = Constants.DEFAULT_OPTIONS.icons;\n    let iconsArray = [];\n    const renderQuestionHelp = this.renderQuestionHelp(\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl\n    );\n\n    const renderQuestionComments = this.renderQuestionComments(\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl\n    );\n\n    const renderQuestionLink = this.renderQuestionLink(\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl\n    );\n\n    const renderQuestionHint = this.renderQuestionHint(\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl,\n      hintRevealed,\n      onHintReveal\n    );\n\n    for (let i = 0; i < icons.length; i++) {\n      if (icons[i].id === Constants.ICONS.QUESTION_COMMENTS) {\n        iconsArray.push(\n          <li key={i} className=\"icon-list-item\">\n            {renderQuestionComments}\n          </li>\n        );\n      }\n      if (icons[i].id === Constants.ICONS.QUESTION_HELP) {\n        iconsArray.push(\n          <li key={i} className=\"icon-list-item\">\n            {renderQuestionHelp}\n          </li>\n        );\n      }\n      if (icons[i].id === Constants.ICONS.QUESTION_LINK) {\n        iconsArray.push(\n          <li key={i} className=\"icon-list-item\">\n            {renderQuestionLink}\n          </li>\n        );\n      }\n      if (icons[i].id === Constants.ICONS.QUESTION_HINT) {\n        iconsArray.push(\n          <li key={i} className=\"icon-list-item\">\n            {renderQuestionHint}\n          </li>\n        );\n      }\n    }\n\n    return <ol className=\"icon-list-items\">{iconsArray}</ol>;\n  }\n\n  static renderQuestionHelp(\n    question,\n    options,\n    onCommentChange,\n    showIcon,\n    intl\n  ) {\n    return this.getIconComponentFromName(\n      Constants.ICONS.QUESTION_HELP,\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl\n    );\n  }\n\n  static renderQuestionComments = (\n    question,\n    options,\n    onCommentChange,\n    showIcon,\n    intl\n  ) => {\n    return this.getIconComponentFromName(\n      Constants.ICONS.QUESTION_COMMENTS,\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl\n    );\n  };\n\n  static renderQuestionLink(\n    question,\n    options,\n    onCommentChange,\n    showIcon,\n    intl\n  ) {\n    return this.getIconComponentFromName(\n      Constants.ICONS.QUESTION_LINK,\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl\n    );\n  }\n\n  static renderQuestionHint(\n    question,\n    options,\n    onCommentChange,\n    showIcon,\n    intl,\n    hintRevealed,\n    onHintReveal\n  ) {\n    return this.getIconComponentFromName(\n      Constants.ICONS.QUESTION_HINT,\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl,\n      hintRevealed,\n      onHintReveal\n    );\n  }\n\n  static getIconComponentFromName(\n    iconName,\n    question,\n    options,\n    onCommentChange,\n    showIcon,\n    intl,\n    hintRevealed,\n    onHintReveal\n  ) {\n    const iconList = options.icons\n      ? options.icons\n      : Constants.DEFAULT_OPTIONS.icons;\n    const icon = this.getIconFromIconList(iconList, iconName);\n    return this.getIconComponent(\n      icon,\n      question,\n      options,\n      onCommentChange,\n      showIcon,\n      intl,\n      hintRevealed,\n      onHintReveal\n    );\n  }\n\n  static getIconFromIconList = (iconList, iconName) => {\n    if (iconList) return iconList.find((icon) => icon.id === iconName);\n    return null;\n  };\n\n  static getIconComponent(\n    icon,\n    question,\n    options,\n    onCommentChange,\n    showIcon,\n    intl,\n    hintRevealed,\n    onHintReveal\n  ) {\n    let iconClassname;\n\n    if (\n      icon &&\n      (icon.behavior === Constants.ICON_BEHAVIOR.ON_HOVER ||\n        icon.behavior === Constants.ICON_BEHAVIOR.ENABLE)\n    ) {\n      if (icon.behavior === Constants.ICON_BEHAVIOR.ENABLE) {\n        showIcon = true;\n        iconClassname = \"\";\n      } else iconClassname = \"emphasise-on-relevant-icon\";\n\n      if (\n        icon.id === Constants.ICONS.QUESTION_HELP &&\n        question[Constants.HELP_DESCRIPTION]\n      ) {\n        if (showIcon) {\n          return (\n            <div className={iconClassname}>\n              <HelpIcon\n                text={JsonLdUtils.getLocalized(\n                  question[Constants.HELP_DESCRIPTION],\n                  intl\n                )}\n                absolutePosition={false}\n              />\n            </div>\n          );\n        }\n        return null;\n      }\n\n      if (\n        icon.id === Constants.ICONS.QUESTION_LINK &&\n        question[Constants.SOURCE]\n      ) {\n        if (showIcon) {\n          return (\n            <div className={iconClassname}>\n              <LinkIcon url={question[Constants.SOURCE]} />\n            </div>\n          );\n        }\n        return null;\n      }\n\n      if (icon.id === Constants.ICONS.QUESTION_COMMENTS) {\n        if (showIcon) {\n          return (\n            <div className={iconClassname}>\n              <QuestionCommentIcon\n                question={question}\n                onChange={onCommentChange}\n              />\n            </div>\n          );\n        }\n        return null;\n      }\n\n      if (icon.id === Constants.ICONS.QUESTION_HINT) {\n        if (!options.enableOptionQuestionFeedback) return null;\n        if (\n          FormUtils.isSection(question) ||\n          !FormUtils.containsHints(question)\n        ) {\n          return null;\n        }\n        if (showIcon) {\n          return (\n            <div className={iconClassname}>\n              <HintIcon\n                absolutePosition={false}\n                onHintClick={onHintReveal}\n                revealed={hintRevealed}\n              />\n            </div>\n          );\n        }\n        return null;\n      }\n\n      return null;\n    }\n  }\n}\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport CheckboxAnswer from \"./answer/CheckboxAnswer\";\nimport DateTimeAnswer from \"./answer/DateTimeAnswer\";\nimport InputAnswer from \"./answer/InputAnswer\";\nimport * as JsonldUtils from \"jsonld-utils\";\nimport MaskedInputAnswer from \"./answer/MaskedInputAnswer\";\nimport SelectAnswer from \"./answer/select/SelectAnswer.jsx\";\nimport FormUtils from \"../util/FormUtils\";\nimport Utils from \"../util/Utils\";\nimport TypeaheadAnswer from \"./answer/typehead/TypeaheadAnswer.jsx\";\nimport Constants from \"../constants/Constants\";\nimport { FormGenContext } from \"../contexts/FormGenContext\";\nimport { ConfigurationContext } from \"../contexts/ConfigurationContext\";\nimport QuestionStatic from \"./QuestionStatic.jsx\";\nimport { FormText } from \"react-bootstrap\";\nimport { useIntl } from \"react-intl\";\n\nconst Answer = (props) => {\n  const formGenContext = React.useContext(FormGenContext);\n  const { options } = React.useContext(ConfigurationContext);\n  const [validation, setValidation] = useState({\n    severity: \"\",\n    classname: \"\",\n    message: null,\n  });\n  const intl = useIntl();\n\n  useEffect(() => {\n    _resolveValidationProps();\n  }, [props.question]);\n\n  const handleValueChange = (value) => {\n    const change = { ...props.answer };\n    _setValue(change, value);\n    props.onChange(props.index, change);\n  };\n\n  const _setValue = (change, value) => {\n    if (value === null) {\n      change[Constants.HAS_OBJECT_VALUE] = null;\n      change[Constants.HAS_DATA_VALUE] = null;\n    } else if (\n      props.answer[Constants.HAS_OBJECT_VALUE] ||\n      FormUtils.isTypeahead(props.question)\n    ) {\n      change[Constants.HAS_OBJECT_VALUE] = {\n        \"@id\": value,\n      };\n    } else {\n      change[Constants.HAS_DATA_VALUE] = {\n        \"@value\": value,\n      };\n    }\n  };\n\n  const _hasOptions = (item) => {\n    return (\n      item[Constants.HAS_OPTION] && item[Constants.HAS_OPTION].length !== 0\n    );\n  };\n\n  const _renderTypeahead = (value, label, title) => {\n    const queryHash = Utils.getStringHash(\n      FormUtils.getPossibleValuesQuery(props.question)\n    );\n    const options = formGenContext.getOptions(queryHash) || [];\n\n    return (\n      <TypeaheadAnswer\n        question={props.question}\n        answer={props.answer}\n        label={label}\n        title={title}\n        value={value}\n        onChange={handleValueChange}\n        options={options}\n        validation={validation}\n        hintRevealed={props.hintRevealed}\n        onHintReveal={props.onHintReveal}\n      />\n    );\n  };\n\n  const _renderSelect = (value, label, title) => {\n    return (\n      <SelectAnswer\n        question={props.question}\n        label={label}\n        title={title}\n        value={value}\n        onChange={handleValueChange}\n        validation={validation}\n        hintRevealed={props.hintRevealed}\n        onHintReveal={props.onHintReveal}\n      />\n    );\n  };\n\n  const _renderDateTimePicker = (value, label, title) => {\n    return (\n      <DateTimeAnswer\n        question={props.question}\n        value={value}\n        title={title}\n        label={label}\n        onChange={handleValueChange}\n        validation={validation}\n      />\n    );\n  };\n\n  const _renderCheckbox = (value, label, title) => {\n    return (\n      <CheckboxAnswer\n        label={label}\n        title={title}\n        value={value}\n        onChange={handleValueChange}\n        question={props.question}\n        validation={validation}\n      />\n    );\n  };\n\n  const _renderMaskedInput = (value, label, title) => {\n    return (\n      <MaskedInputAnswer\n        label={label}\n        title={title}\n        value={value}\n        onChange={handleValueChange}\n        question={props.question}\n        answer={props.answer}\n        validation={validation}\n      />\n    );\n  };\n\n  const _renderRegularInput = (value, label, title) => {\n    return (\n      <InputAnswer\n        question={props.question}\n        answer={props.answer}\n        label={label}\n        title={title}\n        value={value}\n        onChange={handleValueChange}\n        validation={validation}\n      />\n    );\n  };\n\n  const _renderSparqlInput = (value, label, title) => {\n    return (\n      <InputAnswer\n        question={props.question}\n        answer={props.answer}\n        label={label}\n        title={title}\n        value={value}\n        onChange={handleValueChange}\n        sparql={true}\n        validation={validation}\n      />\n    );\n  };\n\n  const _renderTurtleInput = (value, label, title) => {\n    return (\n      <InputAnswer\n        question={props.question}\n        answer={props.answer}\n        label={label}\n        title={title}\n        value={value}\n        onChange={handleValueChange}\n        turtle={true}\n        validation={validation}\n      />\n    );\n  };\n\n  const _getLabel = (question) => {\n    const label = JsonldUtils.getLocalized(\n      question[Constants.RDFS_LABEL],\n      intl\n    );\n\n    return (\n      <div className=\"question-header\">\n        {label}\n        {QuestionStatic.renderIcons(\n          props.question,\n          options,\n          props.onCommentChange,\n          props.showIcon,\n          intl,\n          props.hintRevealed,\n          props.onHintReveal\n        )}\n      </div>\n    );\n  };\n\n  const _resolveValidationProps = () => {\n    setValidation({\n      severity: \"\",\n      classname: \"\",\n      message: null,\n    });\n    if (question[Constants.HAS_VALID_ANSWER] === false) {\n      if (\n        question[Constants.HAS_VALIDATION_SEVERITY] ===\n        Constants.VALIDATION.SEVERITY.WARNING\n      ) {\n        setValidation({\n          severity: Constants.VALIDATION.SEVERITY.WARNING,\n          classname: Constants.VALIDATION.CLASSNAME.WARNING,\n          message: (\n            <FormText className={Constants.VALIDATION.CLASSNAME.WARNING}>\n              {question[Constants.HAS_VALIDATION_MESSAGE]}\n            </FormText>\n          ),\n        });\n      } else {\n        setValidation({\n          severity: Constants.VALIDATION.SEVERITY.ERROR,\n          classname: Constants.VALIDATION.CLASSNAME.ERROR,\n          message: (\n            <FormText className={Constants.VALIDATION.CLASSNAME.ERROR}>\n              {question[Constants.HAS_VALIDATION_MESSAGE]}\n            </FormText>\n          ),\n        });\n      }\n    }\n  };\n\n  const question = props.question;\n  const value = FormUtils.resolveValue(props.answer);\n\n  const label = _getLabel(question);\n  const title = JsonldUtils.getLocalized(\n    question[Constants.RDFS_COMMENT],\n    intl\n  );\n  let component;\n\n  if (FormUtils.isTypeahead(question)) {\n    component = _renderTypeahead(value, label, title, validation);\n  } else if (_hasOptions(question)) {\n    component = _renderSelect(value, label, title, validation);\n  } else if (FormUtils.isCalendar(question)) {\n    component = _renderDateTimePicker(value, label, title, validation);\n  } else if (FormUtils.isCheckbox(question)) {\n    component = _renderCheckbox(value, label, title, validation);\n  } else if (FormUtils.isMaskedInput(question)) {\n    component = _renderMaskedInput(value, label, title, validation);\n  } else if (FormUtils.isSparqlInput(question)) {\n    component = _renderSparqlInput(value, label, title, validation);\n  } else if (FormUtils.isTurtleInput(question)) {\n    component = _renderTurtleInput(value, label, title, validation);\n  } else {\n    component = _renderRegularInput(value, label, title, validation);\n  }\n\n  return component;\n};\n\nAnswer.propTypes = {\n  answer: PropTypes.object.isRequired,\n  question: PropTypes.object.isRequired,\n  onChange: PropTypes.func.isRequired,\n  onCommentChange: PropTypes.func.isRequired,\n  index: PropTypes.number,\n  icons: PropTypes.object,\n  hintRevealed: PropTypes.bool,\n  onHintReveal: PropTypes.func,\n};\n\nexport default Answer;\n","/**\n * Created by blcha on 4.11.16.\n */\nimport Constants from \"../constants/Constants\";\nimport FormUtils from \"../util/FormUtils\";\n\nconst createValidator = (question, intl) => {\n  const validators = [\n    _intMaxInclusiveValidator,\n    _intMinInclusiveValidator,\n    _patternValidator,\n    _checkboxValidator,\n    _requiredValidator,\n    _completenessValidator,\n  ];\n\n  return () => {\n    if (FormUtils.hasValidationLogic(question, intl)) {\n      const answerValue = FormUtils.getAnswerValue(question);\n      return _validateAnswer(question, intl, answerValue, validators);\n    }\n  };\n};\n\nconst _validateAnswer = (question, intl, answerValue, validators) => {\n  const result = {};\n  for (const validator of validators) {\n    const validationResult = validator(question, intl);\n    if (!validationResult.isValid) {\n      result[Constants.HAS_VALID_ANSWER] = false;\n      result[Constants.HAS_VALIDATION_MESSAGE] = validationResult.message;\n      result[Constants.HAS_VALIDATION_SEVERITY] =\n        validationResult.validationSeverity;\n      return result;\n    }\n    if (result[Constants.HAS_VALID_ANSWER] === false) {\n      break;\n    }\n  }\n  result[Constants.HAS_VALID_ANSWER] = true;\n  result[Constants.HAS_VALIDATION_MESSAGE] = \"\";\n  result[Constants.HAS_VALIDATION_SEVERITY] = \"\";\n  return result;\n};\n\nconst _patternValidator = (question, intl) => {\n  const answerValue = FormUtils.getAnswerValue(question);\n  if (answerValue && answerValue.length > 0) {\n    if (question[Constants.PATTERN]) {\n      let pattern = question[Constants.PATTERN];\n      const regExp = new RegExp(pattern);\n      const isValid =\n        regExp.test(answerValue) || !FormUtils.hasAnswer(question);\n      if (!isValid) {\n        return {\n          isValid: false,\n          validationSeverity: Constants.VALIDATION.SEVERITY.ERROR,\n          message: question[Constants.HAS_VALIDATION_MESSAGE]\n            ? question[Constants.HAS_VALIDATION_MESSAGE]\n            : intl.formatMessage({ id: \"validation.invalid\" }),\n        };\n      }\n    }\n  }\n  return { isValid: true };\n};\n\nconst _requiredValidator = (question, intl) => {\n  if (\n    question[Constants.REQUIRES_ANSWER] &&\n    !question[Constants.USED_ONLY_FOR_COMPLETENESS]\n  ) {\n    const isValid = FormUtils.hasAnswer(question);\n    if (!isValid) {\n      return {\n        isValid: false,\n        validationSeverity: Constants.VALIDATION.SEVERITY.ERROR,\n        message: question[Constants.HAS_VALIDATION_MESSAGE]\n          ? question[Constants.HAS_VALIDATION_MESSAGE]\n          : intl.formatMessage({ id: \"validation.required\" }),\n      };\n    }\n  }\n  return { isValid: true };\n};\n\nconst _checkboxValidator = (question, intl) => {\n  if (FormUtils.isCheckbox(question)) {\n    if (question[Constants.REQUIRES_ANSWER]) {\n      const isValid = FormUtils.hasAnswer(question);\n      if (!isValid) {\n        return {\n          isValid: false,\n          validationSeverity: Constants.VALIDATION.SEVERITY.ERROR,\n          message: question[Constants.HAS_VALIDATION_MESSAGE]\n            ? question[Constants.HAS_VALIDATION_MESSAGE]\n            : intl.formatMessage({ id: \"validation.check\" }),\n        };\n      }\n    }\n  }\n  return { isValid: true };\n};\n\nconst _completenessValidator = (question, intl) => {\n  // console.log(intl);\n  if (\n    question[Constants.REQUIRES_ANSWER] &&\n    question[Constants.USED_ONLY_FOR_COMPLETENESS]\n  ) {\n    const isValid = FormUtils.hasAnswer(question);\n    if (!isValid) {\n      return {\n        isValid: false,\n        validationSeverity: Constants.VALIDATION.SEVERITY.WARNING,\n        message: question[Constants.HAS_VALIDATION_MESSAGE]\n          ? question[Constants.HAS_VALIDATION_MESSAGE]\n          : intl.formatMessage({\n              id: \"validation.required_only_for_completeness\",\n            }),\n      };\n    }\n  }\n  return { isValid: true };\n};\n\nconst _intMinInclusiveValidator = (question, intl) => {\n  if (question[Constants.XSD.MIN_INCLUSIVE]) {\n    const answerValue = FormUtils.getAnswerValue(question);\n    if (answerValue && answerValue.length > 0) {\n      const minInclusive = question[Constants.XSD.MIN_INCLUSIVE];\n\n      const isValid =\n        Number.isInteger(parseInt(answerValue)) && answerValue >= minInclusive;\n\n      if (!isValid) {\n        return {\n          isValid: false,\n          validationSeverity: Constants.VALIDATION.SEVERITY.ERROR,\n          message: question[Constants.HAS_VALIDATION_MESSAGE]\n            ? question[Constants.HAS_VALIDATION_MESSAGE]\n            : intl.formatMessage({ id: \"validation.greater_or_equal\" }) +\n              minInclusive +\n              \".\",\n        };\n      }\n    }\n  }\n  return { isValid: true };\n};\n\nconst _intMaxInclusiveValidator = (question, intl) => {\n  const answerValue = FormUtils.getAnswerValue(question);\n  if (question[Constants.XSD.MAX_INCLUSIVE]) {\n    if (answerValue && answerValue.length > 0) {\n      const maxInclusive = question[Constants.XSD.MAX_INCLUSIVE];\n\n      const isValid =\n        Number.isInteger(parseInt(answerValue)) && answerValue <= maxInclusive;\n\n      if (!isValid) {\n        return {\n          isValid: false,\n          validationSeverity: Constants.VALIDATION.SEVERITY.ERROR,\n          message: question[Constants.HAS_VALIDATION_MESSAGE]\n            ? question[Constants.HAS_VALIDATION_MESSAGE]\n            : intl.formatMessage({ id: \"validation.lower_or_equal\" }) +\n              maxInclusive +\n              \".\",\n        };\n      }\n    }\n  }\n  return { isValid: true };\n};\n\nexport { createValidator };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n  ListGroup,\n  ListGroupItem,\n  OverlayTrigger,\n  Popover,\n} from \"react-bootstrap\";\nimport Constants from \"../constants/Constants\";\n\nclass PrefixIcon extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      prefixes: props.prefixes,\n    };\n  }\n\n  render() {\n    const p = (\n      <Popover id=\"prefixes\" title=\"Prefixes\">\n        <ListGroup>\n          {this.state.prefixes\n            .sort((l, r) => {\n              const res = l[Constants.PREFIX] < r[Constants.PREFIX];\n              if (res) return -1;\n              return 1;\n            })\n            .map((p) => (\n              <ListGroupItem key={p[Constants.PREFIX]}>\n                <strong>{p[Constants.PREFIX]}</strong>: {p[Constants.NAMESPACE]}\n              </ListGroupItem>\n            ))}\n        </ListGroup>\n      </Popover>\n    );\n\n    return (\n      <OverlayTrigger trigger=\"click\" placement=\"right\" overlay={p}>\n        <span className={this.props.iconClass}>{this.props.children}</span>\n      </OverlayTrigger>\n    );\n  }\n}\n\nPrefixIcon.propTypes = {\n  prefixes: PropTypes.array.isRequired,\n  children: PropTypes.element.isRequired,\n  iconClass: PropTypes.string,\n};\n\nPrefixIcon.defaultProps = {\n  iconClass: \"\",\n};\n\nexport default PrefixIcon;\n","/**\n *\n * Utility class providing helper functions for media asset.\n */\nexport default class MediaAssetViewerUtils {\n  /**\n   * Determines the media kind and MIME type based on the source URL.\n   *\n   * @param {string} source - Media source URL.\n   * @returns {{ kind: \"video\" | \"image\" | \"iframe\", type: string | null }}\n   * Object describing the media kind and optional MIME type.\n   *\n   * @remarks\n   * - Video formats are mapped to Video.js-compatible MIME types\n   * - Unsupported or unknown formats fall back to iframe rendering\n   */\n  static getMediaKindFromSource(source) {\n    if (!source) return;\n    const lower = source.toLowerCase();\n\n    // ---- VIDEO (video.js) ----\n    if (lower.includes(\"m3u8\")) {\n      return { kind: \"video\", type: \"application/x-mpegURL\" };\n    }\n\n    if (lower.includes(\"mp4\")) {\n      return { kind: \"video\", type: \"video/mp4\" };\n    }\n\n    if (lower.includes(\"webm\")) {\n      return { kind: \"video\", type: \"video/webm\" };\n    }\n\n    if (lower.includes(\"mov\")) {\n      return { kind: \"video\", type: \"video/quicktime\" };\n    }\n\n    // ---- IMAGE ----\n    if (/\\b(png|jpg|jpeg|webp|gif|bmp)\\b/.test(lower)) {\n      return { kind: \"image\", type: null };\n    }\n\n    // ---- FALLBACK ----\n    return { kind: \"iframe\", type: null };\n  }\n\n  /**\n   * Converts normalized annotation points into viewport pixel coordinates.\n   *\n   * Input points are expected to be normalized (range 0–1) and encoded as\n   * an SVG-compatible string (e.g. \"0.1,0.2 0.3,0.4\").\n   *\n   * @param {string} pointsString - Normalized SVG point string.\n   * @param {number} mediaWidth - Media viewport width in pixels.\n   * @param {number} mediaHeight - Media viewport height in pixels.\n   * @returns {string} Denormalized SVG point string in pixel space.\n   */\n  static denormalizePointsFromStringToString(\n    pointsString,\n    mediaWidth,\n    mediaHeight\n  ) {\n    return pointsString\n      .trim()\n      .split(/\\s+/)\n      .map((pair) => {\n        const [nx, ny] = pair.split(\",\").map(Number);\n        return `${nx * mediaWidth},${ny * mediaHeight}`;\n      })\n      .join(\" \");\n  }\n\n  /**\n   * Parses an SVG-compatible points string into a numeric coordinate array.\n   *\n   * @param {string} pointsString - SVG point string (e.g. \"100,200 300,400\").\n   * @returns {number[][]} Array of coordinate pairs [[x, y], ...].\n   *\n   * @remarks\n   * - Assumes input is already denormalized into pixel space\n   */\n  static getArrayPointsFromString(pointsString) {\n    return pointsString\n      .trim()\n      .split(/\\s+/)\n      .map((pair) => {\n        return pair.split(\",\").map(Number);\n      });\n  }\n\n  static stripExpandedLiterals(input) {\n    if (Array.isArray(input)) {\n      return input.map(MediaAssetViewerUtils.stripExpandedLiterals);\n    }\n\n    if (input && typeof input === \"object\") {\n      // Case 1: Typed literal object\n      if (\n        Object.prototype.hasOwnProperty.call(input, \"@value\") &&\n        Object.keys(input).length <= 2 // usually @value + @type\n      ) {\n        return MediaAssetViewerUtils.castLiteral(\n          input[\"@value\"],\n          input[\"@type\"]\n        );\n      }\n\n      // Case 2: Normal object → recurse\n      const result = {};\n      for (const key in input) {\n        result[key] = MediaAssetViewerUtils.stripExpandedLiterals(input[key]);\n      }\n      return result;\n    }\n\n    return input;\n  }\n\n  static castLiteral(value, type) {\n    if (!type) return value;\n\n    if (type.includes(\"#decimal\")) {\n      return parseFloat(value);\n    }\n\n    if (type.includes(\"#integer\")) {\n      return parseInt(value, 10);\n    }\n\n    if (type.includes(\"#boolean\")) {\n      return value === true || value === \"true\";\n    }\n\n    return value;\n  }\n\n  /**\n   * Normalizes the HAS_MEDIA_CONTENT value into a uniform array of media objects.\n   * Accepts:\n   * - A plain URL string wrapped into a single-element array with HAS_SOURCE set\n   * - An array of strings/objects: strings are wrapped, objects are passed through\n   * - A single object is wrapped into a single-element array\n   */\n  static normalizeMediaContents(mediaContents, hasSourceKey) {\n    if (!mediaContents) return [];\n\n    const asArray = Array.isArray(mediaContents)\n      ? mediaContents\n      : [mediaContents];\n\n    return asArray.map((item) =>\n      typeof item === \"string\" ? { [hasSourceKey]: item } : item\n    );\n  }\n}\n","import Constants from \"../../../../constants/Constants.js\";\nimport MediaAssetViewerUtils from \"../../../../util/MediaAssetViewerUtils.js\";\n\nconst getRandomUUID = () => {\n  return `uuid-${Date.now()}-${Math.random().toString(16).slice(2)}`;\n};\n\nconst buildBaseModel = (annotation) => {\n  const type = annotation[Constants.ANNOTATION.HAS_ANNOTATION_TYPE];\n\n  const opacity = annotation[Constants.ANNOTATION.HAS_OPACITY];\n\n  return {\n    id: annotation.id ?? getRandomUUID(),\n    type,\n    opacity: opacity ?? 1.0,\n  };\n};\n\nconst buildPolylineModel = (annotation, width, height, base) => {\n  const points = annotation[Constants.ANNOTATION.HAS_GEOMETRY_POINTS];\n\n  const defaultStyle =\n    Constants.POLYLINE_ANNOTATION.DEFAULT_POLYLINE_ANNOTATION_STYLE;\n\n  return {\n    ...base,\n    geometry: {\n      points: MediaAssetViewerUtils.denormalizePointsFromStringToString(\n        points,\n        width,\n        height\n      ),\n    },\n    style: {\n      stroke: annotation[Constants.ANNOTATION.HAS_COLOR] ?? defaultStyle.color,\n      strokeWidth:\n        (annotation[Constants.POLYLINE_ANNOTATION.HAS_STROKE_WIDTH] ??\n          defaultStyle.strokeWidth) * width,\n      fill:\n        annotation[Constants.POLYLINE_ANNOTATION.HAS_FILL_COLOR] ??\n        defaultStyle.fillColor,\n    },\n  };\n};\n\nconst buildTextModel = (annotation, width, height, base) => {\n  const points = annotation[Constants.ANNOTATION.HAS_GEOMETRY_POINTS];\n\n  const defaultStyle = Constants.TEXT_ANNOTATION.DEFAULT_TEXT_ANNOTATION_STYLE;\n\n  const [[nx, ny]] = MediaAssetViewerUtils.getArrayPointsFromString(points);\n\n  return {\n    ...base,\n    geometry: {\n      x: nx * width,\n      y: ny * height,\n    },\n    style: {\n      fontSize:\n        (annotation[Constants.TEXT_ANNOTATION.HAS_FONT_SIZE] ??\n          defaultStyle.fontSizeInNormalizedPx) * height,\n      fontWeight:\n        annotation[Constants.TEXT_ANNOTATION.HAS_FONT_WEIGHT] ??\n        defaultStyle.fontWeight,\n      fontFamily: defaultStyle.fontFamily,\n      color: annotation[Constants.ANNOTATION.HAS_COLOR] ?? defaultStyle.color,\n    },\n    payload: {\n      text: annotation[Constants.TEXT_ANNOTATION.HAS_TEXT] ?? defaultStyle.text,\n    },\n  };\n};\n\nconst annotationBuildersRegistry = {\n  [Constants.POLYLINE_ANNOTATION.IMPLICIT_TYPE_LABEL]: buildPolylineModel,\n\n  [Constants.TEXT_ANNOTATION.IMPLICIT_TYPE_LABEL]: buildTextModel,\n};\n\n// Converts a raw annotation into a renderer-ready model.\n// Returns null for unknown types.\nexport const buildRenderModel = (annotation, width, height) => {\n  const type = annotation[Constants.ANNOTATION.HAS_ANNOTATION_TYPE];\n\n  const builder = annotationBuildersRegistry[type];\n\n  if (!builder) return null;\n\n  const base = buildBaseModel(annotation);\n\n  return builder(annotation, width, height, base);\n};\n","import { useEffect, useState } from \"react\";\n\nconst computeVideoSurface = (player) => {\n  const videoWidth = player.videoWidth();\n  const videoHeight = player.videoHeight();\n  if (!videoWidth || !videoHeight) return null;\n\n  const container = player.el();\n  const containerWidth = container.clientWidth;\n  const containerHeight = container.clientHeight;\n\n  const videoRatio = videoWidth / videoHeight;\n  const containerRatio = containerWidth / containerHeight;\n\n  let width, height, top, left;\n\n  if (containerRatio > videoRatio) {\n    height = containerHeight;\n    width = height * videoRatio;\n    left = (containerWidth - width) / 2;\n    top = 0;\n  } else {\n    width = containerWidth;\n    height = width / videoRatio;\n    top = (containerHeight - height) / 2;\n    left = 0;\n  }\n\n  return {\n    width,\n    height,\n    intrinsicWidth: videoWidth,\n    intrinsicHeight: videoHeight,\n    top,\n    left,\n  };\n};\n\nconst useVideoSurface = (containerRef) => {\n  const [surface, setSurface] = useState(null);\n\n  useEffect(() => {\n    const player = containerRef?.current;\n    if (!player) return;\n\n    const update = () => setSurface(computeVideoSurface(player));\n\n    player.on(\"loadedmetadata\", update);\n    player.on(\"resize\", update);\n    player.on(\"fullscreenchange\", update);\n    window.addEventListener(\"resize\", update);\n\n    return () => {\n      player.off(\"loadedmetadata\", update);\n      player.off(\"resize\", update);\n      player.off(\"fullscreenchange\", update);\n      window.removeEventListener(\"resize\", update);\n    };\n  }, [containerRef]);\n\n  return surface;\n};\n\nconst computeImageSurface = (containerRef) => {\n  const container = containerRef?.current;\n  if (!container) return null;\n\n  const img = container.querySelector(\"img\");\n  if (!img) return null;\n\n  const rect = container.getBoundingClientRect();\n\n  return {\n    width: rect.width,\n    height: rect.height,\n    intrinsicWidth: img.naturalWidth || rect.width,\n    intrinsicHeight: img.naturalHeight || rect.height,\n    top: 0,\n    left: 0,\n  };\n};\n\nconst useImageSurface = (containerRef) => {\n  const [surface, setSurface] = useState(null);\n\n  useEffect(() => {\n    const container = containerRef?.current;\n    if (!container) return;\n\n    const img = container.querySelector(\"img\");\n    if (!img) return;\n\n    const update = () => setSurface(computeImageSurface(containerRef));\n\n    if (img.complete) update();\n    else img.addEventListener(\"load\", update);\n\n    window.addEventListener(\"resize\", update);\n\n    return () => {\n      img.removeEventListener(\"load\", update);\n      window.removeEventListener(\"resize\", update);\n    };\n  }, [containerRef]);\n\n  return surface;\n};\n\n// Calculates the rendered intrinsic dimensions\n// for the current media type and container ref.\nexport const useMediaSurface = ({ type, containerRef }) => {\n  const imageSurface = useImageSurface(type === \"image\" ? containerRef : null);\n  const videoSurface = useVideoSurface(type === \"video\" ? containerRef : null);\n\n  return type === \"image\"\n    ? imageSurface\n    : type === \"video\"\n    ? videoSurface\n    : null;\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport PolylineAnnotation from \"./PolylineAnnotation\";\nimport TextAnnotation from \"./TextAnnotation\";\nimport { useAnnotationsEngine } from \"./engine/useAnnotationsEngine\";\n\nconst ANNOTATION_COMPONENTS = {\n  polyline: PolylineAnnotation,\n  text: TextAnnotation,\n};\n\n// Maps annotation type to its SVG component\nconst AnnotationOverlay = ({\n  annotations = [],\n  surface,\n  currentTime,\n  showAnnotations,\n}) => {\n  const intrinsicWidth = surface?.intrinsicWidth;\n  const intrinsicHeight = surface?.intrinsicHeight;\n  const [pulseClass, setPulseClass] = useState(\"\");\n\n  useEffect(() => {\n    if (!showAnnotations) return;\n    setPulseClass(\"annotation-overlay-revealed\");\n    const timer = setTimeout(() => setPulseClass(\"\"), 700);\n    return () => clearTimeout(timer);\n  }, [showAnnotations]);\n\n  const renderModels = useAnnotationsEngine({\n    annotations,\n    width: intrinsicWidth,\n    height: intrinsicHeight,\n    currentTime,\n  });\n\n  const viewBox = useMemo(\n    () => `0 0 ${intrinsicWidth} ${intrinsicHeight}`,\n    [intrinsicWidth, intrinsicHeight]\n  );\n\n  if (!intrinsicWidth || !intrinsicHeight) return null;\n  if (!renderModels.length) return null;\n\n  if (!showAnnotations) {\n    return <></>;\n  }\n\n  return (\n    <svg viewBox={viewBox} className={`annotation-overlay ${pulseClass}`}>\n      {renderModels.map((model) => {\n        const Component = ANNOTATION_COMPONENTS[model.type];\n        if (!Component) return null;\n        return (\n          <Component\n            key={model.id}\n            {...model.geometry}\n            {...model.style}\n            {...model.payload}\n            opacity={model.opacity}\n          />\n        );\n      })}\n    </svg>\n  );\n};\n\nexport default AnnotationOverlay;\n","import React from \"react\";\n/**\n * Stateless SVG component responsible for rendering a single polyline annotation.\n * Receives fully resolved geometry and styling from the parent renderer and\n * performs no normalization, transformation, or time-based logic.\n */\nconst PolylineAnnotation = ({ points, stroke, strokeWidth, fill, opacity }) => {\n  return (\n    <polyline\n      points={points}\n      stroke={stroke}\n      strokeWidth={strokeWidth}\n      fill={fill}\n      opacity={opacity}\n    />\n  );\n};\n\nexport default PolylineAnnotation;\n","import React from \"react\";\n/**\n * Stateless SVG component responsible for rendering a single text annotation.\n * Receives fully resolved position, styling, and content from the parent renderer.\n * This component performs no normalization, scaling, or time-based logic.\n */\nconst TextAnnotation = ({\n  text,\n  fontFamily = \"Arial\",\n  fontWeight = 400,\n  opacity = 1,\n  fontSize,\n  x,\n  y,\n  color = \"#00ff00\",\n  lineHeight = 1.15,\n}) => {\n  const lines = (text ?? \"\").split(/\\r?\\n/);\n  const lineHeightPx = fontSize * lineHeight;\n  const correctedY = y - fontSize * 0.2;\n\n  return (\n    <text\n      fill={color}\n      fontSize={`${fontSize}px`}\n      fontFamily={fontFamily}\n      fontWeight={fontWeight}\n      textAnchor=\"start\"\n      opacity={opacity}\n    >\n      {lines.map((line, index) => (\n        <tspan\n          key={index}\n          x={x}\n          y={correctedY + index * lineHeightPx}\n          dominantBaseline=\"hanging\"\n        >\n          {line || \"\\u00A0\"}\n        </tspan>\n      ))}\n    </text>\n  );\n};\n\nexport default TextAnnotation;\n","import { useMemo } from \"react\";\nimport { isAnnotationVisible } from \"./annotationVisibility.js\";\nimport { buildRenderModel } from \"./buildRenderModel.js\";\n\n// Transforms raw annotations into renderer-ready models for the current frame.\nexport const useAnnotationsEngine = ({\n  annotations = [],\n  width,\n  height,\n  currentTime,\n}) => {\n  return useMemo(() => {\n    if (!width || !height) return [];\n    if (!annotations.length) return [];\n\n    return annotations\n      .filter((a) => isAnnotationVisible(a, currentTime))\n      .map((a) => buildRenderModel(a, width, height))\n      .filter(Boolean);\n  }, [annotations, width, height, currentTime]);\n};\n","import Constants from \"../../../../constants/Constants.js\";\n\n// Returns true if the annotation should be visible at the given playback time.\n// If no currentTime is provided (e.g. for images), the annotation is always shown.\nexport const isAnnotationVisible = (annotation, currentTime) => {\n  if (currentTime == null) return true;\n\n  const start = annotation[Constants.ANNOTATION.HAS_START_TIME];\n  const end = annotation[Constants.ANNOTATION.HAS_END_TIME];\n\n  if (start != null && currentTime < start) return false;\n\n  if (end != null && currentTime > end) return false;\n\n  return true;\n};\n","import React, { forwardRef } from \"react\";\n\n/**\n * Fullscreen-capable container for media elements.\n */\nconst MediaFullScreenContainer = forwardRef(\n  ({ children, fullscreen = false }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={`media-container ${fullscreen ? \"fullscreen\" : \"\"}`}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nexport default MediaFullScreenContainer;\n","import React, { useRef } from \"react\";\nimport ViewerUtils from \"../../util/MediaAssetViewerUtils.js\";\nimport \"../../styles/media.css\";\nimport VideoViewer from \"./video/VideoViewer.jsx\";\nimport { useFullscreen } from \"./hooks/useFullscreen.js\";\nimport ImageViewer from \"./image/ImageViewer.jsx\";\nimport MediaFullScreenContainer from \"./MediaFullScreenContainer.jsx\";\n\nconst mediaRegistry = {\n  video: VideoViewer,\n  image: ImageViewer,\n};\n\nconst IframeViewer = ({ src, allowFullScreen }) => (\n  <div className=\"media-iframe-container\">\n    <div className=\"media-iframe-wrapper\">\n      <iframe\n        src={src}\n        title=\"Embedded content\"\n        allowFullScreen={allowFullScreen}\n      />\n    </div>\n  </div>\n);\n/**\n * Orchestrates the rendering of media assets based on their type and manages fullscreen state.\n * Defaults to an iframe viewer for unsupported types.\n */\nconst MediaAssetViewer = ({\n  src,\n  annotations = [],\n  allowFullScreen,\n  showAnnotations = true,\n}) => {\n  const containerRef = useRef(null);\n  const { isFullscreen, toggle } = useFullscreen(containerRef);\n\n  if (!src) return null;\n\n  const { kind } = ViewerUtils.getMediaKindFromSource(src);\n  const MediaComponent = mediaRegistry[kind] || IframeViewer;\n\n  return (\n    <MediaFullScreenContainer ref={containerRef} fullscreen={isFullscreen}>\n      <MediaComponent\n        src={src}\n        annotations={annotations}\n        allowFullScreen={allowFullScreen}\n        onFullScreen={toggle}\n        showAnnotations={showAnnotations}\n      />\n    </MediaFullScreenContainer>\n  );\n};\n\nexport default MediaAssetViewer;\n","import React, { useMemo, useRef, useState } from \"react\";\nimport \"video.js/dist/video-js.css\";\n\nimport { useVideoPlayer } from \"./hooks/useVideoPlayer\";\nimport { useMediaSurface } from \"../hooks/useMediaSurface.js\";\nimport AnnotationOverlay from \"../annotation/AnnotationOverlay\";\n\n/**\n * Viewer for displaying video with annotations.\n */\nconst VideoViewer = ({\n  type,\n  src,\n  autoplay = false,\n  muted = true,\n  controls = true,\n  responsive = true,\n  aspectRatio = \"16:9\",\n  annotations = [],\n  showAnnotations,\n  onFullScreen,\n}) => {\n  const videoRef = useRef(null);\n  const [currentTime, setCurrentTime] = useState(0);\n\n  const options = useMemo(\n    () => ({\n      autoplay,\n      muted,\n      controls,\n      responsive,\n      aspectRatio,\n      controlBar: {\n        fullscreenToggle: false,\n        pictureInPictureToggle: false,\n      },\n      userActions: {\n        doubleClick: false,\n      },\n      sources: [{ src, type }],\n    }),\n    [autoplay, muted, controls, responsive, aspectRatio, src, type]\n  );\n\n  const playerRef = useVideoPlayer({\n    videoRef,\n    options,\n    onFullScreen,\n    onTimeUpdate: setCurrentTime,\n    annotations,\n    showAnnotations,\n  });\n\n  const surface = useMediaSurface({\n    type: \"video\",\n    containerRef: playerRef,\n  });\n\n  return (\n    <div className=\"video-wrapper\" style={{ position: \"relative\" }}>\n      <video ref={videoRef} className=\"video-js vjs-big-play-centered\" />\n      {surface && (\n        <AnnotationOverlay\n          annotations={annotations}\n          showAnnotations={showAnnotations}\n          surface={surface}\n          currentTime={currentTime}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default VideoViewer;\n","import { useEffect, useRef } from \"react\";\nimport videojs from \"video.js\";\nimport enhancePlayer from \"./enhancePlayer\";\nimport Constants from \"../../../../constants/Constants.js\";\n\n//Handles Video.js lifecycle.\nexport const useVideoPlayer = ({\n  videoRef,\n  options,\n  onReady,\n  onFullScreen,\n  onTimeUpdate,\n  showAnnotations,\n  annotations = [],\n}) => {\n  const playerRef = useRef(null);\n\n  useEffect(() => {\n    const player = playerRef.current;\n    if (!player || !showAnnotations) return;\n\n    const firstAnnotation = annotations.reduce((earliest, current) => {\n      const currentStartTime = current[Constants.ANNOTATION.HAS_START_TIME];\n      if (\n        currentStartTime != null &&\n        (earliest == null || currentStartTime < earliest.startTime)\n      ) {\n        return { annotation: current, startTime: currentStartTime };\n      }\n      return earliest;\n    }, null);\n\n    if (firstAnnotation) {\n      player.currentTime(firstAnnotation.startTime);\n      player.pause();\n    }\n  }, [showAnnotations]);\n\n  useEffect(() => {\n    if (!videoRef.current) return;\n\n    const player = videojs(videoRef.current, options, function () {\n      enhancePlayer(player, { onFullScreen });\n      onReady?.(player);\n    });\n\n    playerRef.current = player;\n\n    if (onTimeUpdate) {\n      player.on(\"timeupdate\", () => onTimeUpdate(player.currentTime()));\n    }\n\n    return () => {\n      if (player && !player.isDisposed()) {\n        player.dispose();\n      }\n    };\n  }, [videoRef, options, onReady, onFullScreen, onTimeUpdate]);\n\n  return playerRef;\n};\n","/**\n * Adds a custom fullscreen button to a Video.js player's control bar.\n * The button is inserted next to an existing control (remaining time display\n * or fullscreen toggle if present) to preserve the default control layout.\n */\nconst addCustomFullScreenButton = (player, onFullScreen) => {\n  const controlBar = player.controlBar;\n  const anchor =\n    controlBar.getChild(\"remainingTimeDisplay\") ??\n    controlBar.getChild(\"fullscreenToggle\");\n  const index = anchor\n    ? controlBar.children().indexOf(anchor)\n    : controlBar.children().length;\n  const button = controlBar.addChild(\"button\", {}, index + 1);\n  const buttonEl = button.el();\n  buttonEl.innerHTML = \"⛶\";\n  buttonEl.style.fontSize = \"20px\";\n  buttonEl.onclick = () => onFullScreen(player);\n};\n\nconst enhancePlayer = (player, options) => {\n  const { onFullScreen } = options;\n\n  if (onFullScreen) {\n    addCustomFullScreenButton(player, onFullScreen);\n  }\n};\n\nexport default enhancePlayer;\n","import React, { useRef } from \"react\";\nimport { useMediaSurface } from \"../hooks/useMediaSurface.js\";\nimport AnnotationOverlay from \"../annotation/AnnotationOverlay.jsx\";\n\n/**\n * Viewer for displaying images with annotations.\n */\nconst ImageViewer = ({ src, annotations, onFullScreen, showAnnotations }) => {\n  const wrapperRef = useRef(null);\n\n  const surface = useMediaSurface({\n    type: \"image\",\n    containerRef: wrapperRef,\n  });\n\n  return (\n    <div className=\"media-image-container\">\n      <div ref={wrapperRef} className=\"media-image-wrapper\">\n        <img src={src} alt=\"Beautiful Image\" />\n        <AnnotationOverlay\n          annotations={annotations}\n          showAnnotations={showAnnotations}\n          surface={surface}\n          currentTime={null}\n        />\n      </div>\n      <button className=\"media-fullscreen-button\" onClick={onFullScreen}>\n        ⛶\n      </button>\n    </div>\n  );\n};\n\nexport default ImageViewer;\n","import { useEffect, useState, useCallback } from \"react\";\n\n// Tracks and controls fullscreen state for a given element ref.\nexport const useFullscreen = (ref) => {\n  const [isFullscreen, setIsFullscreen] = useState(false);\n\n  useEffect(() => {\n    const handler = () => setIsFullscreen(Boolean(document.fullscreenElement));\n\n    document.addEventListener(\"fullscreenchange\", handler);\n    return () => document.removeEventListener(\"fullscreenchange\", handler);\n  }, []);\n\n  const toggle = useCallback(() => {\n    if (!ref.current) return;\n\n    if (!document.fullscreenElement) {\n      ref.current.requestFullscreen();\n    } else {\n      document.exitFullscreen();\n    }\n  }, [ref]);\n\n  return { isFullscreen, toggle };\n};\n","import React from \"react\";\nimport Constants from \"../constants/Constants\";\nimport MediaAssetViewer from \"./media/MediaAssetViewer\";\nimport MediaAssetViewerUtils from \"../util/MediaAssetViewerUtils\";\n\ninterface Props {\n  question: object;\n  displayAnnotations?: boolean;\n}\n\nconst MediaContent = ({ question, displayAnnotations }: Props) => {\n  const normalizedQuestion =\n    MediaAssetViewerUtils.stripExpandedLiterals(question);\n  const mediaContents = MediaAssetViewerUtils.normalizeMediaContents(\n    normalizedQuestion[Constants.HAS_MEDIA_CONTENT],\n    Constants.HAS_SOURCE\n  );\n  if (mediaContents.length > 0) {\n    return (\n      <div className=\"col-6 \">\n        {mediaContents.map((media, index) => (\n          <div\n            key={index}\n            className=\"embed-responsive-21by9 media-content-video-container mb-3\"\n          >\n            <MediaAssetViewer\n              src={media[Constants.HAS_SOURCE]}\n              allowFullScreen\n              annotations={media[Constants.HAS_ANNOTATION] ?? []}\n              showAnnotations={displayAnnotations}\n            />\n          </div>\n        ))}\n      </div>\n    );\n  }\n  return <></>;\n};\n\nexport default MediaContent;\n","import React from \"react\";\nimport { Card, Accordion } from \"react-bootstrap\";\nimport * as JsonLdUtils from \"jsonld-utils\";\nimport PropTypes from \"prop-types\";\nimport Answer from \"./Answer\";\nimport Constants from \"../constants/Constants\";\nimport FormUtils from \"../util/FormUtils\";\nimport JsonLdObjectMap from \"../util/JsonLdObjectMap\";\nimport QuestionAnswerProcessor from \"../model/QuestionAnswerProcessor\";\nimport { createValidator } from \"../model/ValidatorFactory\";\nimport JsonLdObjectUtils from \"../util/JsonLdObjectUtils\";\nimport PrefixIcon from \"./PrefixIcon\";\nimport MediaContent from \"./MediaContent\";\nimport { CaretSquareDown, CaretSquareUp, InfoCircle } from \"../styles/icons\";\nimport { ConfigurationContext } from \"../contexts/ConfigurationContext\";\nimport classNames from \"classnames\";\nimport QuestionStatic from \"./QuestionStatic.jsx\";\nimport Utils from \"../util/Utils.js\";\nimport JsonLdFramingUtils from \"../util/JsonLdFramingUtils.js\";\n\n// TODO Remove once the pretty layout is tested\nconst PRETTY_ANSWERABLE_LAYOUT = true;\n\nexport default class Question extends React.Component {\n  constructor(props) {\n    super(props);\n    JsonLdObjectMap.putObject(props.question[\"@id\"], props.question);\n    this.state = {\n      validator: {},\n      expanded: !FormUtils.isCollapsed(props.question),\n      showIcon: false,\n      hintRevealed: false,\n    };\n  }\n\n  componentDidMount() {\n    this.setState({\n      validator: createValidator(this.props.question, this.props.intl),\n    });\n  }\n\n  componentDidUpdate() {\n    const question = this.props.question;\n    const startingQuestionId = this.context.options.startingQuestionId;\n    const subQuestions = question[Constants.HAS_SUBQUESTION];\n    const isSubQuestionStartingQuestionId = subQuestions.find(\n      (o) => o[\"@id\"] === startingQuestionId\n    );\n\n    if (FormUtils.isSection(question) && FormUtils.isAnswerable(question)) {\n      const answerValue = this._getFirstAnswerValue();\n\n      // Irrelevant questions are expanded if debugMode is on\n      if (this.context.options.debugMode) {\n        return null;\n      }\n\n      if (isSubQuestionStartingQuestionId) {\n        return null;\n      } else if (this.state.expanded && !answerValue) {\n        // close expanded answerable section that does not have positive answer\n        this.setState({ expanded: false });\n      }\n    }\n  }\n\n  handleHintReveal = (state) => {\n    if (state && typeof state === \"boolean\") {\n      this.setState({ hintRevealed: state });\n      return;\n    }\n    this.setState({ hintRevealed: !this.state.hintRevealed });\n  };\n\n  handleAnswerChange = (answerIndex, change) => {\n    if (FormUtils.isSection(this.props.question)) {\n      let expanded = !!FormUtils.resolveValue(change);\n      this.setState({ expanded: expanded });\n    }\n\n    this._handleChange(Constants.HAS_ANSWER, answerIndex, change);\n  };\n\n  handleSubQuestionChange = (subQuestionIndex, change) => {\n    this._handleChange(Constants.HAS_SUBQUESTION, subQuestionIndex, change);\n  };\n\n  handleCommentChange = (commentIndex, change) => {\n    this._handleChange(Constants.HAS_COMMENT, commentIndex, change);\n  };\n\n  _handleChange(att, valueIndex, newValue) {\n    let newState = { ...this.props.question };\n    newState[att][valueIndex] = newValue;\n    if (att === Constants.HAS_ANSWER) {\n      const result = this.state.validator(newValue);\n      newState = { ...newState, ...result };\n    }\n\n    JsonLdObjectMap.putObject(newState[\"@id\"], newState);\n    this.props.onChange(this.props.index, newState);\n  }\n\n  isDebugged(question) {\n    const startingQuestionId = this.context.options.startingQuestionId;\n\n    if (FormUtils.isRelevant(question)) {\n      return false;\n    }\n    if (this.context.options.debugMode) {\n      return true;\n    }\n\n    if (startingQuestionId == null) {\n      return false;\n    }\n\n    let questionById = Utils.findQuestionById(\n      startingQuestionId,\n      question,\n      true,\n      false,\n      false\n    );\n    return !!questionById;\n  }\n\n  _toggleCollapse = () => {\n    if (this.props.collapsible) {\n      this.setState({ expanded: !this.state.expanded });\n    }\n  };\n\n  _onEnterHandler = () => {\n    this.setState({ showIcon: true });\n  };\n\n  _onLeaveHandler = () => {\n    this.setState({ showIcon: false });\n  };\n\n  _getHeaderClassName = () => {\n    const question = this.props.question;\n    const collapsible = this.props.collapsible;\n\n    let headerClassName = [];\n\n    headerClassName.push(\n      Question.getEmphasizedOnRelevantClass(question),\n      \"question-header\"\n    );\n\n    if (FormUtils.isWizardStep(question))\n      headerClassName.push(\"wizard-step bg-primary text-white\");\n    if (FormUtils.isEmphasised(question))\n      headerClassName.push(Question.getEmphasizedClass(question));\n    if (FormUtils.isSection(question))\n      headerClassName.push(\"section-background\");\n    if (collapsible) headerClassName.push(\"cursor-pointer\");\n    if (this.isDebugged(question)) {\n      headerClassName.push(\"show-irrelevant\");\n    }\n    return headerClassName;\n  };\n\n  render() {\n    const question = this.props.question;\n    const questionComponent = this.renderQuestion(question);\n\n    if (this.isDebugged(question)) {\n      return <div className=\"show-irrelevant\">{questionComponent}</div>;\n    }\n    if (FormUtils.isHidden(question)) {\n      return null;\n    }\n    if (!FormUtils.isRelevant(question)) {\n      return null;\n    }\n    return questionComponent;\n  }\n\n  renderQuestion(question) {\n    if (FormUtils.isAnswerable(question) && !FormUtils.isSection(question)) {\n      if (PRETTY_ANSWERABLE_LAYOUT) {\n        return (\n          <div id={question[\"@id\"]}>\n            <div className=\"panel-title answerable-question\">\n              {this.renderAnswers()}\n            </div>\n            <div className=\"answerable-subquestions\">\n              {this.renderSubQuestions()}\n            </div>\n          </div>\n        );\n      } else {\n        return (\n          <div id={question[\"@id\"]}>\n            {this.renderAnswers()}\n            <div className=\"ml-4 mt-n2\">{this.renderSubQuestions()}</div>\n          </div>\n        );\n      }\n    }\n    if (FormUtils.isAnswerable(question)) {\n      return this.renderAnswerableSection();\n    }\n    if (FormUtils.isSection(question)) {\n      const { collapsible, withoutCard } = this.props;\n      const categoryClass = Question._getQuestionCategoryClass(question);\n\n      if (withoutCard) {\n        return <div>{this._renderQuestionContent()}</div>;\n      }\n      const label = JsonLdUtils.getLocalized(\n        question[JsonLdUtils.RDFS_LABEL],\n        this.props.intl\n      );\n\n      const cardBody = (\n        <Card.Body className={classNames(\"p-3\", categoryClass)}>\n          {this._renderQuestionContent()}\n        </Card.Body>\n      );\n\n      return (\n        <>\n          <Accordion\n            activeKey={this.state.expanded ? label : undefined}\n            className=\"mb-3\"\n          >\n            <Accordion.Item eventKey={label}>\n              <Card className=\"\">\n                <Accordion.Button\n                  as={Card.Header}\n                  onClick={this._toggleCollapse}\n                  className={this._getHeaderClassName()}\n                  onMouseEnter={this._onEnterHandler}\n                  onMouseLeave={this._onLeaveHandler}\n                  onFocus={this._onEnterHandler}\n                  onBlur={this._onLeaveHandler}\n                >\n                  <div className=\"d-inline\" id={question[\"@id\"]}>\n                    {collapsible &&\n                      !FormUtils.isWizardStep(question) &&\n                      this._renderCollapseToggle()}\n                    {label}\n                  </div>\n                  {this.renderQuestionIcons()}\n                  {this.props.children}\n                </Accordion.Button>\n                <Accordion.Body className=\"p-0\">\n                  {collapsible ? cardBody : <>{cardBody}</>}\n                </Accordion.Body>\n              </Card>\n            </Accordion.Item>\n          </Accordion>\n        </>\n      );\n    } else {\n      return <div>{this._renderQuestionContent()}</div>;\n    }\n  }\n\n  _renderQuestionContent() {\n    let content = [];\n    if (this.state.expanded) {\n      content.push(\n        <MediaContent\n          key={this.props.question[\"@id\"] + \"-media\"}\n          question={this.props.question}\n          displayAnnotations={this.state.hintRevealed}\n        />\n      );\n    }\n    content.push(this.renderAnswers());\n    content.push(this.renderSubQuestions());\n    return content;\n  }\n\n  renderQuestionIcons() {\n    const question = this.props.question;\n    const options = this.context.options;\n    return QuestionStatic.renderIcons(\n      question,\n      options,\n      this.handleCommentChange,\n      this.state.showIcon,\n      this.props.intl,\n      this.state.hintRevealed,\n      this.handleHintReveal\n    );\n  }\n\n  renderAnswerableSection() {\n    const question = this.props.question;\n    const collapsible = this.props.collapsible;\n    const categoryClass = Question._getQuestionCategoryClass(question);\n\n    let classname = this.getShowIrrelevantClassname(question);\n\n    const cardBody = (\n      <Card.Body className={classNames(\"p-3\", categoryClass)}>\n        {this.renderSubQuestions(classname)}\n      </Card.Body>\n    );\n    const answerableSectionStyles = this._getHeaderClassName();\n\n    if (this.state.expanded) answerableSectionStyles.push(\"text-primary\");\n\n    return (\n      <Accordion\n        activeKey={this.state.expanded ? question[\"@id\"] : undefined}\n        className=\"answerable-section\"\n      >\n        <Card className=\"mb-3\">\n          <Card.Header\n            onClick={this._toggleCollapse}\n            className={answerableSectionStyles}\n          >\n            {this.renderAnswers()}\n          </Card.Header>\n          {collapsible ? (\n            <Accordion.Collapse\n              className={classname}\n              eventKey={question[\"@id\"]}\n            >\n              {cardBody}\n            </Accordion.Collapse>\n          ) : (\n            { cardBody }\n          )}\n        </Card>\n      </Accordion>\n    );\n  }\n\n  getShowIrrelevantClassname(question) {\n    const debugMode = this.context.options.debugMode;\n    const startingQuestionId = this.context.options.startingQuestionId;\n    const subQuestion = question[Constants.HAS_SUBQUESTION];\n\n    if (\n      (debugMode ||\n        JsonLdObjectUtils.checkId(subQuestion, startingQuestionId)) &&\n      !FormUtils.hasAnswer(question)\n    ) {\n      return \"show-irrelevant\";\n    }\n    return \"\";\n  }\n\n  renderAnswers() {\n    const question = this.props.question,\n      children = [],\n      answers = this._getAnswers(),\n      options = this.context.options;\n    let cls;\n    let isTextarea;\n\n    for (let i = 0, len = answers.length; i < len; i++) {\n      isTextarea =\n        FormUtils.isTextarea(question, FormUtils.resolveValue(answers[i])) ||\n        FormUtils.isSparqlInput(question) ||\n        FormUtils.isTurtleInput(question);\n      cls = classNames(\n        \"answer\",\n        Question._getQuestionCategoryClass(question),\n        Question.getEmphasizedOnRelevantClass(question)\n      );\n      children.push(\n        <div\n          key={\"row-item-\" + i}\n          className={cls}\n          id={question[\"@id\"]}\n          onMouseEnter={this._onEnterHandler}\n          onMouseLeave={this._onLeaveHandler}\n          data-question-origin={JsonLdFramingUtils._getId(\n            question[Constants.HAS_QUESTION_ORIGIN]\n          )}\n          onFocus={this._onEnterHandler}\n          onBlur={this._onLeaveHandler}\n        >\n          <div className=\"answer-content\" style={this._getAnswerWidthStyle()}>\n            <Answer\n              index={i}\n              answer={answers[i]}\n              question={question}\n              onChange={this.handleAnswerChange}\n              onCommentChange={this.handleCommentChange}\n              showIcon={this.state.showIcon}\n              hintRevealed={this.state.hintRevealed}\n              onHintReveal={this.handleHintReveal}\n            />\n          </div>\n          {this._renderUnits()}\n          {this._renderPrefixes()}\n        </div>\n      );\n    }\n    return children;\n  }\n\n  _getAnswers() {\n    const question = this.props.question;\n    if (!question[Constants.HAS_ANSWER]) {\n      question[Constants.HAS_ANSWER] = [];\n    }\n    if (!Array.isArray(question[Constants.HAS_ANSWER])) {\n      question[Constants.HAS_ANSWER] = [question[Constants.HAS_ANSWER]];\n    }\n    if (question[Constants.HAS_ANSWER].length === 0) {\n      if (FormUtils.isSection(question) && !FormUtils.isAnswerable(question)) {\n        question[Constants.HAS_ANSWER] = [];\n      } else {\n        question[Constants.HAS_ANSWER] = [\n          QuestionAnswerProcessor.generateAnswer(question),\n        ];\n      }\n    }\n    return question[Constants.HAS_ANSWER];\n  }\n\n  _getAnswerWidthStyle() {\n    const length = Number(\n      this.props.question[Constants.HAS_INITIAL_INPUT_LENGTH]\n    );\n    if (!length) {\n      return {};\n    }\n\n    return {\n      flexGrow: 0,\n      maxWidth: \"none\",\n      width: `calc(${length}ch + 1.5rem + 2px)`,\n    };\n  }\n\n  static _getAnswerClass(question, isTextarea) {\n    let columns = isTextarea\n      ? \"col-12\"\n      : Constants.GENERATED_ROW_SIZE === 1\n      ? \"col-6\"\n      : \"col-\" + Constants.COLUMN_COUNT / Constants.GENERATED_ROW_SIZE;\n\n    return columns;\n  }\n\n  static _getQuestionCategoryClass(question) {\n    const layoutCategory = FormUtils.getCategory(question);\n    return layoutCategory ? \"question-\" + layoutCategory : \"\";\n  }\n\n  static getEmphasizedClass(question) {\n    return FormUtils.isEmphasised(question) ? \"bg-warning\" : \"\";\n  }\n\n  static getEmphasizedOnRelevantClass(question) {\n    if (\n      JsonLdUtils.hasValue(\n        question,\n        Constants.LAYOUT_CLASS,\n        Constants.LAYOUT.EMPHASISE_ON_RELEVANT\n      )\n    ) {\n      return \"emphasise-on-relevant\";\n    }\n\n    return \"\";\n  }\n\n  _renderCollapseToggle() {\n    const title = this.state.expanded\n      ? this.props.intl.formatMessage({ id: \"section.collapse\" })\n      : this.props.intl.formatMessage({ id: \"section.expand\" });\n\n    return (\n      <span onClick={this._toggleCollapse} title={title}>\n        {this.state.expanded ? (\n          <CaretSquareUp title={title} />\n        ) : (\n          <CaretSquareDown title={title} />\n        )}\n      </span>\n    );\n  }\n\n  _renderPrefixes() {\n    const question = this.props.question;\n    return question[Constants.HAS_DECLARED_PREFIX] &&\n      question[Constants.HAS_DECLARED_PREFIX].length ? (\n      <PrefixIcon\n        prefixes={question[Constants.HAS_DECLARED_PREFIX]}\n        iconClass={\"help-icon-checkbox\"}\n      >\n        <InfoCircle />\n      </PrefixIcon>\n    ) : null;\n  }\n\n  _renderUnits() {\n    const question = this.props.question;\n    return question[Constants.HAS_UNIT] ? (\n      <div className=\"has-unit-label\">{question[Constants.HAS_UNIT]}</div>\n    ) : null;\n  }\n\n  renderSubQuestions(classname) {\n    const children = [];\n    const subQuestions = this._getSubQuestions();\n    const debugMode = this.context.options.debugMode;\n    const startingQuestionId = this.context.options.startingQuestionId;\n\n    for (let i = 0; i < subQuestions.length; i++) {\n      let question = subQuestions[i];\n      let component = this.context.mapComponent(question, Question);\n      let element = null;\n\n      if (\n        debugMode ||\n        classname !== \"show-irrelevant\" ||\n        Utils.findQuestionById(startingQuestionId, question, true, false, false)\n      ) {\n        element = React.createElement(component, {\n          key: \"sub-question-\" + i,\n          question: question,\n          onChange: this.handleSubQuestionChange,\n          index: i,\n          intl: this.props.intl,\n        });\n      }\n      children.push(element);\n    }\n    return children;\n  }\n\n  _getSubQuestions() {\n    const question = this.props.question;\n    if (!question[Constants.HAS_SUBQUESTION]) {\n      question[Constants.HAS_SUBQUESTION] = [];\n    }\n    if (!Array.isArray(question[Constants.HAS_SUBQUESTION])) {\n      question[Constants.HAS_SUBQUESTION] = [\n        question[Constants.HAS_SUBQUESTION],\n      ];\n    }\n\n    // sort by label\n    JsonLdObjectUtils.orderByLocalizedLabels(\n      question[Constants.HAS_SUBQUESTION],\n      this.props.intl\n    );\n\n    // sort by property\n    JsonLdObjectUtils.orderPreservingToplogicalSort(\n      question[Constants.HAS_SUBQUESTION],\n      Constants.HAS_PRECEDING_QUESTION\n    );\n\n    return question[Constants.HAS_SUBQUESTION];\n  }\n\n  _getFirstAnswerValue() {\n    return FormUtils.resolveValue(this._getAnswers()[0]);\n  }\n}\n\nQuestion.contextType = ConfigurationContext;\n\nQuestion.propTypes = {\n  question: PropTypes.object.isRequired,\n  onChange: PropTypes.func.isRequired,\n  index: PropTypes.number,\n  withoutCard: PropTypes.bool,\n  collapsible: PropTypes.bool, // Whether the section is collapsible (if the question is a section)\n};\n\nQuestion.defaultProps = {\n  withoutCard: false,\n  collapsible: true,\n};\n","import React, { useContext } from \"react\";\nimport { Button, ButtonToolbar } from \"react-bootstrap\";\nimport { FormQuestionsContext } from \"../../contexts/FormQuestionsContext\";\nimport Question from \"../Question\";\nimport PropTypes from \"prop-types\";\nimport FormUtils from \"../../util/FormUtils.js\";\nimport { useIntl } from \"react-intl\";\n\nconst WizardStep = (props) => {\n  const { updateFormQuestionsData, getFormQuestionsData } =\n    useContext(FormQuestionsContext);\n  const intl = useIntl();\n\n  const onNextStep = () => {\n    updateFormQuestionsData(props.index, getFormQuestionsData());\n    props.onNextStep();\n  };\n\n  const onPreviousStep = () => {\n    props.onPreviousStep();\n  };\n\n  const _renderWizardStepButtons = () => {\n    return (\n      <ButtonToolbar className=\"m-3 float-end\">\n        {!props.isFirstStep && (\n          <Button\n            className=\"me-2\"\n            onClick={onPreviousStep}\n            variant=\"primary\"\n            size=\"sm\"\n          >\n            {intl.formatMessage({ id: \"wizard.previous\" })}\n          </Button>\n        )}\n        {!props.isLastStep && (\n          <Button onClick={onNextStep} variant=\"primary\" size=\"sm\">\n            {intl.formatMessage({ id: \"wizard.next\" })}\n          </Button>\n        )}\n      </ButtonToolbar>\n    );\n  };\n\n  const onChange = (index, change) => {\n    updateFormQuestionsData(props.index || index, {\n      ...props.question,\n      ...change,\n    });\n  };\n\n  const question = getFormQuestionsData([props.index]);\n\n  return (\n    <React.Fragment>\n      <Question\n        question={question}\n        onChange={onChange}\n        collapsible={FormUtils.isAnswerable(question)}\n        intl={intl}\n      />\n      {props.options.wizardStepButtons && _renderWizardStepButtons()}\n    </React.Fragment>\n  );\n};\n\nWizardStep.propTypes = {\n  options: PropTypes.object.isRequired,\n  question: PropTypes.object.isRequired,\n  index: PropTypes.number.isRequired,\n  onNextStep: PropTypes.func,\n  onPreviousStep: PropTypes.func,\n  mapComponent: PropTypes.func,\n  isFirstStep: PropTypes.bool,\n  isLastStep: PropTypes.bool,\n};\n\nexport default WizardStep;\n","import React, { useContext } from \"react\";\nimport { Nav, NavItem, NavLink, Card } from \"react-bootstrap\";\nimport PropTypes from \"prop-types\";\nimport * as JsonLdUtils from \"jsonld-utils\";\nimport FormUtils from \"../../util/FormUtils\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport Question from \"../Question\";\nimport classNames from \"classnames\";\nimport IconOverlay from \"../IconOverlay.jsx\";\nimport { useIntl } from \"react-intl\";\n\nconst HorizontalWizardNav = ({ steps, onNavigate, currentStep }) => {\n  const { options } = useContext(ConfigurationContext);\n  const intl = useIntl();\n\n  return (\n    <Card.Header>\n      <Nav\n        variant=\"tabs\"\n        activeKey={currentStep}\n        onSelect={(key) => onNavigate(parseInt(key))}\n      >\n        {steps.map((step, index) => (\n          <IconOverlay\n            id=\"step-disabled\"\n            tooltipContent={intl.formatMessage({ id: \"wizard.nav.tooltip\" })}\n            show={!options.enableWizardStepSkip}\n          >\n            <NavItem key={\"nav\" + index} id={\"wizard-nav-\" + index}>\n              <NavLink\n                eventKey={index}\n                active={index === currentStep ? \"active\" : \"\"}\n                hidden={options.debugMode ? false : !FormUtils.isRelevant(step)}\n                disabled={!options.enableWizardStepSkip}\n                className={classNames([\n                  options.debugMode && !FormUtils.isRelevant(step)\n                    ? \"show-irrelevant\"\n                    : Question.getEmphasizedClass(step),\n                  \"wizard-nav\",\n                ])}\n              >\n                {JsonLdUtils.getLocalized(step[JsonLdUtils.RDFS_LABEL], intl)}\n              </NavLink>\n            </NavItem>\n          </IconOverlay>\n        ))}\n      </Nav>\n    </Card.Header>\n  );\n};\n\nHorizontalWizardNav.propTypes = {\n  currentStep: PropTypes.number.isRequired,\n  steps: PropTypes.array.isRequired,\n  onNavigate: PropTypes.func.isRequired,\n};\n\nexport default HorizontalWizardNav;\n","import React, { useContext } from \"react\";\nimport { ListGroup, ListGroupItem } from \"react-bootstrap\";\nimport PropTypes from \"prop-types\";\nimport * as JsonLdUtils from \"jsonld-utils\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport FormUtils from \"../../util/FormUtils\";\nimport Question from \"../Question\";\nimport classNames from \"classnames\";\nimport IconOverlay from \"../IconOverlay.jsx\";\nimport { useIntl } from \"react-intl\";\n\nconst VerticalWizardNav = ({ steps, onNavigate, currentStep }) => {\n  const { options } = useContext(ConfigurationContext);\n  const intl = useIntl();\n\n  return (\n    <div className=\"wizard-nav col-2 p-0\">\n      <ListGroup>\n        {steps.map((step, index) => (\n          <IconOverlay\n            id=\"step-disabled\"\n            tooltipContent={intl.formatMessage({ id: \"wizard.nav.tooltip\" })}\n            show={!options.enableWizardStepSkip}\n          >\n            <ListGroupItem\n              hidden={options.debugMode ? false : !FormUtils.isRelevant(step)}\n              key={\"nav\" + index}\n              onClick={() => onNavigate(index)}\n              id={\"wizard-nav-\" + index}\n              action={true}\n              active={index === currentStep ? \"active\" : \"\"}\n              disabled={!options.enableWizardStepSkip}\n              variant={\"default\"}\n              className={classNames([\n                options.debugMode && !FormUtils.isRelevant(step)\n                  ? \"show-irrelevant\"\n                  : Question.getEmphasizedClass(step),\n                \"wizard-nav\",\n              ])}\n            >\n              {JsonLdUtils.getLocalized(\n                step[JsonLdUtils.RDFS_LABEL],\n                useIntl()\n              )}\n            </ListGroupItem>\n          </IconOverlay>\n        ))}\n      </ListGroup>\n    </div>\n  );\n};\n\nVerticalWizardNav.propTypes = {\n  currentStep: PropTypes.number.isRequired,\n  steps: PropTypes.array.isRequired,\n  onNavigate: PropTypes.func.isRequired,\n};\n\nexport default VerticalWizardNav;\n","import { useEffect } from \"react\";\n\nfunction useScrollToElement({\n  id,\n  dataAttributes = [],\n  scrollOptions = { behavior: \"smooth\" },\n  highlightClass = \"text-danger\",\n}) {\n  useEffect(() => {\n    let element = null;\n\n    if (id) {\n      element = document.getElementById(id);\n    }\n\n    if (!element && Object.keys(dataAttributes).length > 0) {\n      const selector = Object.entries(dataAttributes)\n        .map(([key, value]) => `[data-${key}=\"${value}\"]`)\n        .join(\"\");\n      element = document.querySelector(selector);\n    }\n\n    if (element) {\n      element.scrollIntoView(scrollOptions);\n      if (highlightClass) {\n        element.classList.add(highlightClass);\n      }\n    }\n  }, [id, dataAttributes, scrollOptions, highlightClass]);\n}\n\nexport default useScrollToElement;\n","import React, { useEffect } from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport WizardStep from \"./WizardStep\";\nimport HorizontalWizardNav from \"./HorizontalWizardNav\";\nimport VerticalWizardNav from \"./VerticalWizardNav\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport { FormQuestionsContext } from \"../../contexts/FormQuestionsContext\";\nimport Utils from \"../../util/Utils\";\nimport Constants from \"../../constants/Constants\";\nimport useScrollToElement from \"../../hooks/useScrollToElement.jsx\";\nimport JsonLdFramingUtils from \"../../util/JsonLdFramingUtils.js\";\n\nconst findStepBy = (key, value, stepData) => {\n  console.log(stepData, key, value);\n  const findQuestionTraversal = (question, index) => {\n    if (!question) {\n      return -1;\n    }\n\n    if (JsonLdFramingUtils._getId(question[key]) === value) {\n      return index;\n    }\n\n    const subQuestions = Utils.asArray(question[Constants.HAS_SUBQUESTION]);\n\n    return subQuestions.findIndex(\n      (q, index) => findQuestionTraversal(q, index) !== -1\n    );\n  };\n\n  return stepData.findIndex(\n    (step, index) => findQuestionTraversal(step, index) !== -1\n  );\n};\n\nconst Wizard = () => {\n  const formQuestionsContext = React.useContext(FormQuestionsContext);\n  const { options, mapComponent } = React.useContext(ConfigurationContext);\n\n  let startingStep = 0;\n  if (options.startingQuestionId) {\n    startingStep = findStepBy(\n      \"@id\",\n      options.startingQuestionId,\n      formQuestionsContext.getFormQuestionsData()\n    );\n    if (startingStep === -1) {\n      console.warn(`Question with id ${options.startingQuestionId} not found!`);\n      startingStep = 0;\n    }\n  } else if (options.startingQuestionOrigin) {\n    startingStep = findStepBy(\n      Constants.HAS_QUESTION_ORIGIN,\n      options.startingQuestionOrigin,\n      formQuestionsContext.getFormQuestionsData()\n    );\n    if (startingStep === -1) {\n      console.warn(\n        `Question with question origin ${options.startingQuestionOrigin} not found!`\n      );\n      startingStep = 0;\n    }\n  } else if (options.startingStep) {\n    startingStep =\n      options.startingStep < formQuestionsContext.getFormQuestionsData().length\n        ? options.startingStep\n        : 0;\n  }\n\n  const [currentStep, setCurrentStep] = React.useState(startingStep);\n\n  useScrollToElement({\n    id: options.startingQuestionId,\n    dataAttributes: {\n      \"question-origin\": [options.startingQuestionOrigin],\n    },\n  });\n\n  const onNextStep = () => {\n    const stepData = formQuestionsContext.getFormQuestionsData();\n    if (currentStep !== stepData.length - 1) {\n      stepData[currentStep + 1].visited = true;\n      setCurrentStep((prevCurrentStep) => prevCurrentStep + 1);\n    }\n  };\n\n  const onPreviousStep = () => {\n    if (currentStep === 0) {\n      return;\n    }\n    setCurrentStep((prevCurrentStep) => prevCurrentStep - 1);\n  };\n\n  const navigate = (stepIndex) => {\n    const stepData = formQuestionsContext.getFormQuestionsData();\n\n    if (stepIndex === currentStep || stepIndex >= stepData.length) {\n      return;\n    }\n    // Can we jump forward?\n    if (\n      stepIndex > currentStep &&\n      !stepData[stepIndex].visited &&\n      !options.enableWizardStepSkip\n    ) {\n      return;\n    }\n    setCurrentStep(stepIndex);\n  };\n\n  const renderNav = () => {\n    const formQuestionsData = formQuestionsContext.getFormQuestionsData();\n\n    return options.horizontalWizardNav ? (\n      <HorizontalWizardNav\n        currentStep={currentStep}\n        steps={formQuestionsData}\n        onNavigate={navigate}\n      />\n    ) : (\n      <VerticalWizardNav\n        currentStep={currentStep}\n        steps={formQuestionsData}\n        onNavigate={navigate}\n      />\n    );\n  };\n\n  const initComponent = () => {\n    const stepData = formQuestionsContext.getFormQuestionsData();\n\n    const step = stepData[currentStep];\n\n    let stepComponent = mapComponent(step, WizardStep);\n    return React.createElement(stepComponent, {\n      options: options,\n      key: \"step\" + currentStep,\n      question: step,\n      onNextStep: onNextStep,\n      onPreviousStep: onPreviousStep,\n      mapComponent: mapComponent,\n      index: currentStep,\n      isFirstStep: currentStep === 0,\n      isLastStep:\n        currentStep === formQuestionsContext.getFormQuestionsData().length - 1,\n    });\n  };\n\n  let nav = null;\n  if (formQuestionsContext.getFormQuestionsData().length > 1) {\n    nav = renderNav();\n  }\n\n  const isHorizontal = options.horizontalWizardNav;\n  const cardClassname = isHorizontal ? \"\" : \"flex-row p-3\";\n  const containerClassname = isHorizontal\n    ? \"card-body p-3\"\n    : nav\n    ? \"col-10 p-0 pl-3\"\n    : \"col-12 p-0\";\n\n  return (\n    <Card className={cardClassname}>\n      {nav}\n      <div className={containerClassname}>{initComponent()}</div>\n    </Card>\n  );\n};\n\nexport default Wizard;\n","import Constants from \"../constants/Constants\";\nimport { createValidator } from \"./ValidatorFactory.js\";\nimport Utils from \"../util/Utils.js\";\n\nexport default class ValidationProcessor {\n  /**\n   * Updates the validation status of a question within an array of questions.\n   * @param {Array} questions - The array of questions to update.\n   * @param {Object} question - The question object to validate and update.\n   * @param {number} index - The index of the question in the array.\n   * @param {Object} intl - The object used for internationalization.\n   */\n  static updateQuestionValidation = (questions, question, index, intl) => {\n    const validator = createValidator(question, intl);\n    const update = validator();\n\n    if (update) {\n      questions[index] = { ...question, ...update };\n    }\n    for (const question of questions) {\n      this.updateSubQuestionsValidation(question, intl);\n    }\n  };\n\n  /**\n   * Updates the validation status of sub-questions within a parent question.\n   * @param {Object} question - The parent question object containing sub-questions.\n   * @param {Object} intl - The object used for internationalization.\n   */\n  static updateSubQuestionsValidation = (question, intl) => {\n    const subQuestions = Utils.asArray(question[Constants.HAS_SUBQUESTION]);\n    for (let index = 0; index < subQuestions.length; index++) {\n      const subQuestion = subQuestions[index];\n      this.updateQuestionValidation(subQuestions, subQuestion, index, intl);\n    }\n  };\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Modal } from \"react-bootstrap\";\nimport { ConfigurationContext } from \"../contexts/ConfigurationContext\";\n\nconst FormWindow = React.forwardRef((props, ref) => {\n  const { options } = React.useContext(ConfigurationContext);\n\n  return (\n    <Modal size=\"xl\" animation={true} {...options.modalProps}>\n      <Modal.Header closeButton>\n        <Modal.Title>{options.modalProps.title}</Modal.Title>\n      </Modal.Header>\n\n      <Modal.Body className=\"overflow-hidden p-0\">{props.children}</Modal.Body>\n    </Modal>\n  );\n});\n\nFormWindow.propTypes = {\n  children: PropTypes.element.isRequired,\n};\n\nexport default FormWindow;\n","import { Card } from \"react-bootstrap\";\nimport React, { useContext, useEffect } from \"react\";\nimport { FormQuestionsContext } from \"../../contexts/FormQuestionsContext.js\";\nimport Question from \"../Question.jsx\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext.js\";\nimport { useIntl } from \"react-intl\";\nimport useScrollToElement from \"../../hooks/useScrollToElement.jsx\";\n\nconst Wizardless = () => {\n  const intl = useIntl();\n\n  const { updateFormQuestionsData, getFormQuestionsData } =\n    useContext(FormQuestionsContext);\n\n  const { options, mapComponent } = React.useContext(ConfigurationContext);\n\n  useScrollToElement({\n    id: options.startingQuestionId,\n    dataAttributes: {\n      \"question-origin\": [options.startingQuestionOrigin],\n    },\n  });\n\n  const handleStepChange = (question, index, change) => {\n    updateFormQuestionsData(index, { ...question, ...change });\n  };\n\n  const _mapQuestion = (question, index) => {\n    let component = mapComponent(question, Question);\n    return React.createElement(component, {\n      key: question[\"@id\"],\n      question: question,\n      onChange: (index, change) => handleStepChange(question, index, change),\n      index: index,\n      intl: intl,\n    });\n  };\n\n  const formQuestionsData = getFormQuestionsData();\n\n  return (\n    <Card className=\"p-3\">\n      {formQuestionsData.map((q, i) => _mapQuestion(q, i))}\n    </Card>\n  );\n};\n\nexport default Wizardless;\n","import React, { forwardRef, useContext, useImperativeHandle } from \"react\";\nimport QuestionAnswerProcessor from \"../model/QuestionAnswerProcessor\";\nimport { FormQuestionsContext } from \"../contexts/FormQuestionsContext\";\nimport Wizard from \"./wizard/Wizard\";\nimport FormWindow from \"./FormWindow\";\nimport { Card } from \"react-bootstrap\";\nimport FormUtils from \"../util/FormUtils.js\";\nimport ValidationProcessor from \"../model/ValidationProcessor.js\";\nimport { useIntl } from \"react-intl\";\nimport Wizardless from \"./wizard/Wizardless.jsx\";\n\nconst FormManager = forwardRef((props, ref) => {\n  const { getFormQuestionsData, updateFormQuestionsData, getData } =\n    useContext(FormQuestionsContext);\n  const intl = useIntl();\n\n  // Used to expose function as a ref.\n  // See https://react.dev/reference/react/useImperativeHandle\n  useImperativeHandle(\n    ref,\n    () => {\n      return {\n        validateForm,\n        getFormSpecification,\n        getFormQuestionsData,\n        getFormData,\n      };\n    },\n    []\n  );\n\n  const getFormData = () => {\n    const data = getData();\n    const formQuestionsData = getFormQuestionsData();\n\n    return QuestionAnswerProcessor.buildQuestionAnswerModel(\n      data,\n      formQuestionsData\n    );\n  };\n\n  //TODO: Add optional argument \"isRequiredForCompleteness\"\n  const validateForm = () => {\n    const questions = getFormQuestionsData();\n\n    for (let i = 0; i < questions.length; i++) {\n      const question = questions[i];\n      ValidationProcessor.updateQuestionValidation(\n        questions,\n        question,\n        i,\n        intl\n      );\n    }\n\n    updateFormQuestionsData(null, questions);\n  };\n\n  const getFormSpecification = () => {\n    const questions = getFormQuestionsData();\n    return FormUtils.getFormSpecification(questions);\n  };\n\n  const { modalView } = props;\n\n  const formQuestionsData = getFormQuestionsData();\n\n  if (!formQuestionsData.length) {\n    return (\n      <Card className=\"p-3 font-italic\">\n        There are no questions available...\n      </Card>\n    );\n  }\n\n  const isWizardless = formQuestionsData.every(\n    (question) => !FormUtils.isWizardStep(question)\n  );\n\n  const content = isWizardless ? <Wizardless /> : <Wizard />;\n\n  return modalView ? <FormWindow>{content}</FormWindow> : content;\n});\n\nexport default FormManager;\n","import React, { forwardRef, useEffect, useState } from \"react\";\nimport { useIntl } from \"react-intl\";\nimport FormGenerator from \"../model/FormGenerator.js\";\nimport FormUtils from \"../util/FormUtils.js\";\nimport { Card } from \"react-bootstrap\";\nimport { ConfigurationContextProvider } from \"../contexts/ConfigurationContext.js\";\nimport ErrorBoundaries from \"./ErrorBoundary.jsx\";\nimport { FormGenContextProvider } from \"../contexts/FormGenContext.js\";\nimport { FormQuestionsProvider } from \"../contexts/FormQuestionsContext.js\";\nimport FormManager from \"./FormManager.jsx\";\nimport PropTypes from \"prop-types\";\n\nconst SFormsInner = forwardRef((props, ref) => {\n  const [loading, setLoading] = useState(true);\n  const [formProperties, setFormProperties] = useState(null);\n  const [form, setForm] = useState(null);\n  const intl = useIntl();\n\n  useEffect(() => {\n    const initialiseSForms = async () => {\n      const [formProperties, structure] = await FormGenerator.constructForm(\n        props.form,\n        intl\n      );\n\n      if (\n        formProperties.formQuestions.some((step) =>\n          FormUtils.isWizardStep(step)\n        )\n      ) {\n        formProperties.formQuestions[0].visited = true;\n      }\n\n      setFormProperties(formProperties);\n      setForm(structure);\n      setLoading(false);\n    };\n\n    initialiseSForms();\n  }, [props.form, intl]);\n\n  if (loading) {\n    return (\n      props.loader || <Card className=\"p-3 font-italic\">Loading SForms...</Card>\n    );\n  }\n\n  const _getComponentMappingFunction = (components, form) => {\n    return (question, defaultComponent) => {\n      if (!components) {\n        return defaultComponent;\n      }\n\n      for (let { component, mapRule } of components) {\n        if (mapRule(question, form)) {\n          return component;\n        }\n      }\n\n      return defaultComponent;\n    };\n  };\n\n  const _mapComponent = _getComponentMappingFunction(\n    props.componentMapRules,\n    form\n  );\n\n  return (\n    <ConfigurationContextProvider\n      components={props.components}\n      componentsOptions={props.componentsOptions}\n      mapComponent={_mapComponent}\n      options={props.options}\n    >\n      <ErrorBoundaries>\n        <FormGenContextProvider\n          fetchTypeAheadValues={props.fetchTypeAheadValues}\n        >\n          <FormQuestionsProvider\n            data={form}\n            formQuestions={formProperties.formQuestions}\n            isFormValid={props.isFormValid}\n          >\n            <FormManager\n              ref={ref}\n              modalView={props.options && props.options.modalView}\n              mapComponent={_mapComponent}\n            />\n          </FormQuestionsProvider>\n        </FormGenContextProvider>\n      </ErrorBoundaries>\n    </ConfigurationContextProvider>\n  );\n});\n\nSFormsInner.propTypes = {\n  form: PropTypes.object.isRequired,\n  options: PropTypes.object.isRequired,\n  componentMapRules: PropTypes.array,\n  components: PropTypes.object,\n  componentsOptions: PropTypes.object,\n  fetchTypeAheadValues: PropTypes.func,\n  isFormValid: PropTypes.func,\n  loader: PropTypes.element,\n};\n\nexport default SFormsInner;\n","import React, { forwardRef } from \"react\";\nimport IntlContextProvider from \"../contexts/IntlContextProvider.tsx\";\nimport \"../styles/s-forms.css\";\nimport SFormsInner from \"./SFormsInner.jsx\";\nimport PropTypes from \"prop-types\";\n\nconst SForms = forwardRef((props, ref) => {\n  return (\n    <IntlContextProvider locale={props.options?.intl?.locale}>\n      <SFormsInner ref={ref} {...props} />\n    </IntlContextProvider>\n  );\n});\n\nSForms.propTypes = {\n  form: PropTypes.object.isRequired,\n  options: PropTypes.object.isRequired,\n  componentMapRules: PropTypes.array,\n  components: PropTypes.object,\n  componentsOptions: PropTypes.object,\n  fetchTypeAheadValues: PropTypes.func,\n  isFormValid: PropTypes.func,\n  loader: PropTypes.element,\n  enableOptionQuestionFeedback: PropTypes.bool,\n};\n\nexport default SForms;\n"],"names":["Constants","_Constants","COLUMN_COUNT","INPUT_LENGTH_THRESHOLD","DATETIME_NUMBER_FORMAT","EPOCH_MILLISECONDS","FORM","HAS_SUBQUESTION","HAS_ANSWER","HAS_OPTION","HAS_OPTIONS_QUERY","HAS_VALUE_TYPE","IS_DISABLED","INPUT_MASK","LAYOUT_CLASS","LAYOUT","QUESTION_SECTION","WIZARD_STEP","DATE","TIME","DATETIME","TEXT","TEXTAREA","CHECKBOX","QUESTION_TYPEAHEAD","MASKED_INPUT","ANSWERABLE","SPARQL","TURTLE","DISABLED","HIDDEN","COLLAPSED","EMPHASISED","EMPHASISE_ON_RELEVANT","CATEGORY","HAS_INITIAL_INPUT_LENGTH","VALUE_TYPE_CODE","VALUE_TYPE_TEXT","GENERATED_ROW_SIZE","HAS_QUESTION_ORIGIN","HAS_ANSWER_ORIGIN","HAS_DATA_VALUE","HAS_OBJECT_VALUE","HELP_DESCRIPTION","SOURCE","XSD","MAX_EXCLUSIVE","MAX_INCLUSIVE","MIN_EXCLUSIVE","MIN_INCLUSIVE","INT","INTEGER","NEGATIVE_INTEGER","NON_NEGATIVE_INTEGER","NON_POSITIVE_INTEGER","POSITIVE_INTEGER","FLOAT","POSITIVE_FLOAT","NEGATIVE_FLOAT","BOOLEAN","STEP","PATTERN","ACCEPTS_ANSWER_VALUE","ACCEPTS","HAS_DATATYPE","HAS_LAYOUT_CLASS","HAS_POSSIBLE_VALUES_QUERY","HAS_REQUIRED_VALUE","HAS_TESTED_QUESTION","HAS_TESTED_FORM","HAS_UNIT","HAS_VALID_ANSWER","HAS_CORRECT_ANSWER","IS_RELEVANT_IF","ACCEPTS_VALIDATION_VALUE","HAS_VALIDATION_MESSAGE","NEGATIVE_CONDITION","REQUIRES_ANSWER","USED_ONLY_FOR_COMPLETENESS","REQUIRES_ANSWER_DESCRIPTION_IF","REQUIRES_ANSWER_IF","HAS_PRECEDING_QUESTION","HAS_PRECEDING_VALUE","HAS_MEDIA_CONTENT","ASSET","HAS_SOURCE","HAS_ANNOTATION","CONDITION","OR_CONDITION","HAS_SUB_CONDITION","HAS_PATTERN","HAS_DECLARED_PREFIX","PREFIX","NAMESPACE","HAS_COMMENT","HAS_COMMENT_VALUE","HAS_AUTHOR","HAS_TIMESTAMP","TIME_FORMAT","DATE_FORMAT","DATETIME_FORMAT","TIMESTAMP_FORMAT","NOT_ANSWERED_QUESTION","ANSWERED_QUESTION","HAS_VALIDATION_SEVERITY","RDFS_LABEL","JsonLdUtils","RDFS_COMMENT","DEFAULT_HAS_CHILD","BROADER","HAS_NON_SELECTABLE_VALUE","PROVIDES_DEREFERENCEABLE_ANSWER_VALUES","ICONS","QUESTION_COMMENTS","QUESTION_HELP","QUESTION_LINK","QUESTION_HINT","ICON_BEHAVIOR","ENABLE","DISABLE","ON_HOVER","DEFAULT_OPTIONS","icons","id","behavior","enableOptionQuestionFeedback","ANNOTATION","HAS_ANNOTATION_TYPE","HAS_START_TIME","HAS_END_TIME","HAS_GEOMETRY_POINTS","HAS_OPACITY","HAS_COLOR","POLYLINE_ANNOTATION","IMPLICIT_TYPE_LABEL","HAS_STROKE_WIDTH","HAS_FILL_COLOR","DEFAULT_POLYLINE_ANNOTATION_STYLE","color","strokeWidth","fillColor","opacity","TEXT_ANNOTATION","HAS_FONT_SIZE","HAS_FONT_WEIGHT","HAS_TEXT","DEFAULT_TEXT_ANNOTATION_STYLE","text","fontSizeInNormalizedPx","fontWeight","fontFamily","fontColor","LANG","cs","locale","label","en","VALIDATION","SEVERITY","ERROR","WARNING","DEFAULT_MESSAGE","REQUIRED","REQUIRED_ONLY_FOR_COMPLETENESS","INVALID","CHECK","LOWER_OR_EQUAL","GREATER_OR_EQUAL","CLASSNAME","IntlContext","React","createContext","IntlContextProvider","_ref","_ref$locale","navigator","language","lang","createElement","Provider","value","IntlProvider","messages","children","DefaultFormGenerator","generateForm","JSON","parse","stringify","formTemplate","Utils","getStringHash","str","hash","strlen","length","i","charCodeAt","asArray","object_or_array","constructor","Array","findQuestionById","question","reflexive","asserted","transitive","subQuestions","_iterator","_step","_createForOfIteratorHelperLoose","done","foundQ","_step2","_iterator2","findKeyInObjects","objectList","keysToCheck","j","hasOwnProperty","isOptionQuestionFeedbackEnabled","options","_options$enableOption","JsonLdObjectMap","putObject","objectMap","getObject","_root","_JsonLdFramingUtils","JsonLdObjectUtils","getFirstObject","subject","predicate","values","jsonld","getValues","compareValues","jsonLdValue1","jsonLdValue2","toplogicalSort","data","gtProperty","swapped","tmp","orderPreservingToplogicalSort","graph","tsort","id2ObjectMap","_loop","currentId","add","map","val","forEach","edge","sortedIds","sort","getCompareLocalizedLabelFunction","intl","a","b","aLabel","getLocalized","bLabel","orderByLocalizedLabels","checkId","jsonLdObject","undefined","find","o","Object","FormUtils","isForm","structure","hasValue","isWizardStep","isSection","isAnswerable","isTypeahead","getPossibleValuesQuery","getJsonAttValue","isDisabled","isHidden","isTextarea","answerValue","isText","isCalendar","isDate","isTime","isDateTime","isTimestamp","isCheckbox","isMaskedInput","isSparqlInput","isTurtleInput","isCollapsed","isEmphasised","getCategory","c","resolveValue","answer","resolveValueObject","isRelevant","testCondition","hasValidationLogic","this","containsXSDProperty","isValid","testOrCondition","condition","hasSubCondition","console","warn","_iterator3","_step3","_getMappedObjectsArray","acceptedValidationsValues","acceptedAnswerValues","accepts","testedQuestions","arr","_step4","_iterator4","hasAnswer","_step5","_iterator5","_iterator6","_step6","expValue","answers","qValue","jsonObjects","objectType","obj","filter","_iterator7","_step7","hasCorrectAnswer","isArray","_step8","_iterator8","getAnswerValue","_iterator9","_step9","subQAnswer","getCorrectAnswerValue","_answer$Value","_qValue$Value","_label$Value","_step10","_iterator10","resolveDateTimeFormat","originalValue","isDatetime","dateFormat","timeFormat","dateTimeFormat","dfsTraverseQuestionTree","questions","onEnterQuestion","onLeaveQuestion","recursiveTraverse","q","getFormSpecification","level","propertyIndentation","output","ind","repeat","requiredValue","objKeys","keys","_i","_xsdValues","includes","getInputMask","hasMediaContentWithAnnotations","_step11","_iterator11","media","containsHints","_step12","_iterator12","Logger","log","msg","error","formShape","root","expandProperties","JsonLdFramingUtils","customFrame","input","shape","callback","arguments","nextTick","TypeError","flatten","e","f","expandStructure","id2objectMap","item","_expandGraph","parentNode","_this","childArray","child","childId","prop","_getId","jsonObject","compressStructure","rootNode","object2IdMap","idIncluded","Set","_compressGraph","localeCompare","has","push","FormGenerator","constructDefaultForm","defaultFormData","_constructFormQuestions","constructForm","formProperties","form","Promise","resolve","then","flattenedStructure","_FormGenerator$_const","formQuestions","rootForm","_FormGenerator$constr","reject","formElements","key","DefaultInput","_React$Component","props","call","state","cursorPosition","_inheritsLoose","_proto","prototype","focus","ReactDOM","findDOMNode","getInputDOMNode","componentDidUpdate","prevProps","prevState","snapshot","fieldDidShrink","fieldDidExpand","updateFieldCursorPosition","type","setSelectionRange","saveCursorPosition","onChange","setState","target","selectionStart","render","_renderRadio","_renderCheckbox","_renderSelect","_renderTextArea","_renderInput","_this2","Form","Group","size","controlId","Math","floor","random","Number","MAX_SAFE_INTEGER","className","Check","_extends","ref","validation","classname","message","_this3","FormGroup","_this4","_this$props","rest","_objectWithoutPropertiesLoose","_excluded","_renderLabel","FormControl","as","Label","_this5","_this6","placeholder","Component","propTypes","PropTypes","string","object","any","func","help","defaultProps","ConfigurationContext","components","inputComponent","componentsOptions","dateTimeAnswer","readOnly","modalView","modalProps","horizontalWizardNav","wizardStepButtons","enableWizardStepSkip","startingStep","ConfigurationContextProvider","useMemo","assign","mapComponent","element","isRequired","ErrorBoundary","hasError","errorLabel","errorDetails","getDerivedStateFromError","componentDidCatch","context","style","padding","Alert","variant","Heading","toString","Accordion","Card","Header","Button","eventKey","Collapse","Body","whiteSpace","componentStack","contextType","FormGenContext","FormGenContextProvider","loadFormOptions","query","option","fetchTypeAheadValues","frame","framedData","_Object$assign","getOptions","INITIAL_DATA","INITIAL_FORM_QUESTIONS_DATA","FormQuestionsContext","FormQuestionsProvider","_useState","useState","setData","_useState2","formQuestionsData","setFormQuestionsData","useEffect","isFormValid","updateData","update","updateFormQuestionsData","index","newFormQuestionsData","concat","getData","getFormQuestionsData","array","QuestionAnswerProcessor","buildQuestionAnswerModel","wizardData","stepData","processedQuestion","uri","origin","processQuestionAnswerHierarchy","rootQuestion","_processQuestion","result","processAnswer","comments","processComment","comment","author","timestamp","codeValue","textValue","generateAnswer","CheckboxAnswer","_useContext","useContext","title","checked","disabled","oneOfType","bool","mouseHover","DateTimeAnswer","date","setDate","errorMessage","setErrorMessage","isTimestampFormat","parsedDate","parseDate","parsed","Date","isNaN","getTime","DatePicker","selected","placeholderText","selectedDate","timeValue","format","showTimeSelect","showTimeSelectOnly","timeIntervals","timeCaption","classNames","number","NUMERIC_DATATYPES","NUMBER_RULES","min","max","tokenTypes","atom","InputPropertiesResolver","_resolveInputType","_isNumeric","len","resolveInputProperties","rows","_resolveNumberRestrictions","_resolveStepRestriction","restriction","getOwnPropertyNames","_preventCharacterInput","preventDefault","InputAnswer","onKeyPress","sparql","turtle","hide","onFocus","yasqe","YASQE","fromTextArea","setValue","on","getValue","Autocompleters","prefixes","appendPrefixIfNeeded","completerName","autocompleters","getTrie","indexOf","cur","getCursor","token","getTokenAt","colonIndex","lastNonWsTokenString","getPreviousNonWsToken","line","toUpperCase","previousToken","ch","start","currentPrefix","substring","getPrefixesFromQuery","slice","p","prefix","px","addPrefixes","completions","autoComplete","yate","YATE","REPLACEMENTS","D","M","Y","h","m","s","MaskMapper","mapMask","mask","character","charAt","getSelection","el","end","rangeEl","clone","selectionEnd","createTextRange","duplicate","moveToBookmark","document","selection","createRange","getBookmark","setEndPoint","MaskedInput","_updatePattern","setPattern","getRawValue","_updateMaskSelection","_updateInputSelection","collapse","moveStart","moveEnd","select","setSelection","_onChange","maskValue","sizeDiff","backspace","_getDisplayValue","_onKeyDown","ctrlKey","keyCode","isUndo","undo","isRedo","redo","_onKeyPress","metaKey","altKey","_onPaste","paste","clipboardData","setTimeout","InputMask","pattern","formatCharacters","placeholderChar","emptyValue","blur","patternLength","r","maxLength","onKeyDown","onPaste","MaskedInputAnswer","generateSelectOptions","optionEls","hidden","SelectDefault","CrossIcon","_ref$size","_ref$className","width","height","viewBox","fill","xmlns","d","stroke","strokeLinecap","CheckIcon","SelectFeedbackBadge","status","displayName","oneOf","CORRECT_CLASS","INCORRECT_CLASS","SelectWithFeedback","hintRevealed","wrapperRef","useRef","feedback","setFeedback","selectedValue","setSelectedValue","checkCorrectness","selectEl","isCorrect","_wrapperRef$current$q","_wrapperRef$current","correctValue","trim","evaluateSelectAnswer","current","querySelector","classList","remove","_question$Constants$H","labelValue","_options$find","findOptionById","resolveOptionLabel","revealCorrectAnswer","position","SelectAnswer","configurationContext","feedbackEnabled","onRevealHint","buildOptionsTree","possibleValues","processTypeaheadOptions","relations","pValue","description","parent","_relations","_options$relation$par","relation","evaluateAnswer","answerLabel","FEEDBACK_COLORS","correct","incorrect","VALIDATION_STYLES","borderColor","boxShadow","FEEDBACK_STYLES","buildControlStyle","_ref2","_VALIDATION_STYLES$va","_temp","styles","control","provided","border","createOptionRenderer","_ref3","currentValue","optionProps","_optionProps$label","_optionProps$label2","_currentValue$label","isCurrent","background","backgroundColor","Option","TypeaheadWithFeedback","_props$validation","_useState3","menuOpen","setMenuOpen","optionsList","matched","IntelligentTreeSelect","valueKey","labelKey","valueRenderer","_FEEDBACK_COLORS$feed","borderRadius","display","valueRendererWithFeedback","optionRenderer","multi","isSearchable","isLoading","isClearable","renderAsTree","optionLeftOffset","isMenuOpen","_option$id","titleKey","noLinksValueRenderer","Fragment","TypeaheadDefault","TypeaheadAnswer","useIntl","formGenContext","queryHash","setLoading","setOptionsList","learningEnabled","isCancelled","body","recover","_catch","loadOptions","sharedProps","CaretSquareUp","version","CaretSquareDown","InfoCircle","QuestionCircle","IconOverlay","overlayPlacement","setOverlayPlacement","getBoundingClientRect","x","window","innerWidth","getOverlayPlacement","OverlayTrigger","overlay","show","Tooltip","tooltipContent","placement","absolutePosition","iconClassContainer","iconClass","HelpIcon","ExternalLink","LinkIcon","url","href","CommentBubble","RecycleBin","y","CommentView","showIRI","setShowIRI","showRecycleBin","setShowRecycleBin","TimeAgo","addLocale","setDefaultLocale","numericTimestamp","time","getAuthorLabel","users","u","formatMessage","handleCommentAuthorMouseEnter","onMouseEnter","onMouseLeave","Intl","DateTimeFormat","weekday","year","month","day","hour","minute","second","motion","div","whileHover","scale","whileTap","onClick","onDeleteQuestionComment","onDeleteViewComment","commentValue","CommentList","onDeleteCommentClick","commentEndRef","isDeleting","setIsDeleting","handleDeleteViewComment","scrollTop","scrollHeight","Rings","ArrowRight","MAX_TEXT_AREA_HEIGHT","CommentForm","setCommentValue","formInputRef","handleFormSubmit","handleTextAreaKeyPress","textArea","autoResizeTextArea","parseInt","onSubmit","onKeyUp","stopPropagation","Col","Row","Control","name","required","Close","QuestionCommentIcon","dragRef","overlayTarget","showOverlay","setShowOverlay","handleHideOverlayClick","_getComments","handleCommentValueChange","change","_setComment","getCommentsLength","currentUser","now","handleDeleteQuestionCommentClick","splice","handleStopPropagationClick","Badge","pill","drag","dragConstraints","top","left","right","bottom","Overlay","rootClose","onHide","container","overlayProps","handleEscapeKeyDown","transition","duration","BULB_PATH","DISABLED_LINE","x1","y1","x2","y2","HintEnabled","HintDisabled","HintBulb","enabled","HintIcon","onHintClick","revealed","QuestionStatic","renderIcons","onCommentChange","showIcon","onHintReveal","iconsArray","renderQuestionHelp","renderQuestionComments","renderQuestionLink","renderQuestionHint","getIconComponentFromName","iconName","icon","getIconFromIconList","getIconComponent","iconClassname","_QuestionStatic","iconList","Answer","severity","setValidation","_resolveValidationProps","component","handleValueChange","_setValue","FormText","JsonldUtils","_getLabel","_renderTypeahead","_renderDateTimePicker","_renderMaskedInput","_renderSparqlInput","_renderTurtleInput","_renderRegularInput","createValidator","validators","_intMaxInclusiveValidator","_intMinInclusiveValidator","_patternValidator","_checkboxValidator","_requiredValidator","_completenessValidator","_validateAnswer","validationResult","validator","validationSeverity","RegExp","test","minInclusive","isInteger","maxInclusive","PrefixIcon","Popover","ListGroup","l","ListGroupItem","trigger","_annotationBuildersRe","MediaAssetViewerUtils","getMediaKindFromSource","source","lower","toLowerCase","kind","denormalizePointsFromStringToString","pointsString","mediaWidth","mediaHeight","split","pair","_pair$split$map","ny","join","getArrayPointsFromString","stripExpandedLiterals","castLiteral","parseFloat","normalizeMediaContents","mediaContents","hasSourceKey","useMediaSurface","containerRef","imageSurface","surface","setSurface","img","rect","intrinsicWidth","naturalWidth","intrinsicHeight","naturalHeight","computeImageSurface","complete","addEventListener","removeEventListener","useImageSurface","videoSurface","player","videoWidth","videoHeight","containerWidth","clientWidth","containerHeight","clientHeight","videoRatio","computeVideoSurface","off","useVideoSurface","annotationBuildersRegistry","annotation","base","_annotation$Constants","_annotation$Constants2","_annotation$Constants3","defaultStyle","geometry","points","_annotation$Constants4","_annotation$Constants5","_annotation$Constants6","_annotation$Constants7","_MediaAssetViewerUtil2","nx","fontSize","payload","ANNOTATION_COMPONENTS","polyline","_ref$fontFamily","_ref$fontWeight","_ref$opacity","_ref$color","_ref$lineHeight","lineHeight","lines","lineHeightPx","correctedY","textAnchor","dominantBaseline","AnnotationOverlay","_ref$annotations","annotations","currentTime","showAnnotations","pulseClass","setPulseClass","timer","clearTimeout","renderModels","isAnnotationVisible","builder","_annotation$id","buildBaseModel","buildRenderModel","Boolean","useAnnotationsEngine","model","MediaFullScreenContainer","forwardRef","_ref$fullscreen","fullscreen","mediaRegistry","video","src","_ref$autoplay","autoplay","_ref$muted","muted","_ref$controls","controls","_ref$responsive","responsive","_ref$aspectRatio","aspectRatio","onFullScreen","videoRef","setCurrentTime","playerRef","onReady","onTimeUpdate","firstAnnotation","reduce","earliest","currentStartTime","startTime","pause","videojs","_controlBar$getChild","controlBar","anchor","getChild","buttonEl","addChild","innerHTML","onclick","addCustomFullScreenButton","enhancePlayer","isDisposed","dispose","useVideoPlayer","fullscreenToggle","pictureInPictureToggle","userActions","doubleClick","sources","image","alt","IframeViewer","allowFullScreen","MediaAssetViewer","_ref2$annotations","_ref2$showAnnotations","_useFullscreen","isFullscreen","setIsFullscreen","handler","fullscreenElement","toggle","useCallback","exitFullscreen","requestFullscreen","useFullscreen","_ViewerUtils$getMedia","ViewerUtils","MediaContent","displayAnnotations","normalizedQuestion","_media$Constants$HAS_","Question","handleHintReveal","handleAnswerChange","answerIndex","expanded","_handleChange","handleSubQuestionChange","subQuestionIndex","handleCommentChange","commentIndex","_toggleCollapse","collapsible","_onEnterHandler","_onLeaveHandler","_getHeaderClassName","headerClassName","getEmphasizedOnRelevantClass","getEmphasizedClass","isDebugged","componentDidMount","startingQuestionId","isSubQuestionStartingQuestionId","_getFirstAnswerValue","debugMode","att","valueIndex","newValue","newState","questionComponent","renderQuestion","renderAnswers","renderSubQuestions","renderAnswerableSection","withoutCard","categoryClass","_getQuestionCategoryClass","_renderQuestionContent","cardBody","activeKey","Item","onBlur","_renderCollapseToggle","renderQuestionIcons","content","getShowIrrelevantClassname","answerableSectionStyles","cls","_getAnswers","_getAnswerWidthStyle","_renderUnits","_renderPrefixes","flexGrow","maxWidth","_getAnswerClass","layoutCategory","_getSubQuestions","WizardStep","ButtonToolbar","isFirstStep","onPreviousStep","isLastStep","onNextStep","HorizontalWizardNav","steps","onNavigate","currentStep","Nav","onSelect","step","NavItem","NavLink","active","VerticalWizardNav","action","useScrollToElement","_ref$dataAttributes","dataAttributes","_ref$scrollOptions","scrollOptions","_ref$highlightClass","highlightClass","getElementById","selector","entries","scrollIntoView","_ValidationProcessor","findStepBy","findQuestionTraversal","findIndex","Wizard","formQuestionsContext","_React$useContext","startingQuestionOrigin","_React$useState","setCurrentStep","nav","stepIndex","visited","stepComponent","isHorizontal","prevCurrentStep","FormWindow","Modal","animation","closeButton","Title","ValidationProcessor","updateQuestionValidation","updateSubQuestionsValidation","Wizardless","handleStepChange","FormManager","useImperativeHandle","validateForm","getFormData","isWizardless","every","SFormsInner","loading","setFormProperties","setForm","some","initialiseSForms","loader","_mapComponent","defaultComponent","_step$value","mapRule","_getComponentMappingFunction","componentMapRules","ErrorBoundaries","SForms","_props$options"],"mappings":"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"}