{"version":3,"file":"s-forms.cjs","sources":["../src/util/Logger.js","../src/contexts/FormGenContext.js","../src/constants/Constants.js","../src/util/Utils.js","../src/util/JsonLdObjectMap.js","../src/util/JsonLdObjectUtils.js","../src/util/FormUtils.js","../src/contexts/FormQuestionsContext.js","../src/components/DefaultInput.jsx","../src/contexts/ConfigurationContext.js","../src/util/JsonLdFramingUtils.js","../src/contexts/IntlContextProvider.tsx","../src/model/DefaultFormGenerator.js","../src/model/FormGenerator.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/SelectAnswer.jsx","../src/components/answer/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/QuestionStatic.jsx","../src/components/comment/QuestionCommentIcon.jsx","../src/components/Answer.jsx","../src/model/ValidatorFactory.js","../src/components/PrefixIcon.jsx","../src/components/MediaContent.tsx","../src/components/Question.jsx","../src/components/wizard/WizardStep.jsx","../src/components/wizard/HorizontalWizardNav.jsx","../src/components/wizard/VerticalWizardNav.jsx","../src/components/wizard/Wizard.jsx","../src/components/FormWindow.jsx","../src/model/ValidationProcessor.js","../src/components/FormManager.jsx","../src/components/ErrorBoundary.jsx","../src/components/SForms.jsx"],"sourcesContent":["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 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 * 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/elements/1.1/description\";\n  static SOURCE = \"http://purl.org/dc/elements/1.1/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 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 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  };\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  };\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 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","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 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 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  /**\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","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 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    return (\n      <FormGroup size=\"small\" className=\"mb-3\">\n        {this._renderLabel()}\n        <FormControl\n          as=\"select\"\n          className={this.props.validation.classname}\n          ref={(c) => (this.input = c)}\n          {...this.props}\n        >\n          {this.props.children}\n        </FormControl>\n        {this.props.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  },\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 * 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_COMMENT,\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    return jsonObject[\"@id\"];\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 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 * 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 * 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 React 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 { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\n\nexport default class SelectAnswer extends React.Component {\n  _generateSelectOptions(options) {\n    const rendered = [];\n    options.sort(function (a, b) {\n      const aLabel = JsonLdUtils.getJsonAttValue(a, Constants.RDFS_LABEL),\n        bLabel = JsonLdUtils.getJsonAttValue(b, Constants.RDFS_LABEL);\n      if (aLabel < bLabel) {\n        return -1;\n      }\n      if (aLabel > bLabel) {\n        return 1;\n      }\n      return 0;\n    });\n\n    for (let i = 0; i < options.length; i++) {\n      rendered.push(\n        <option\n          value={JsonLdUtils.getJsonAttValue(options[i], Constants.RDFS_LABEL)}\n          key={\"opt-\" + i}\n        >\n          {JsonLdUtils.getJsonAttValue(options[i], Constants.RDFS_LABEL)}\n        </option>\n      );\n    }\n    return rendered;\n  }\n\n  render() {\n    const question = this.props.question;\n\n    return React.createElement(\n      this.context.inputComponent,\n      {\n        type: \"select\",\n        label: this.props.label,\n        value: this.props.value,\n        title: this.props.title,\n        validation: this.props.validation,\n        onChange: (e) => {\n          this.props.onChange(e.target.value);\n        },\n        disabled:\n          this.context.componentsOptions.readOnly ||\n          FormUtils.isDisabled(question),\n      },\n      this._generateSelectOptions(question[Constants.HAS_OPTION])\n    );\n  }\n}\n\nSelectAnswer.contextType = ConfigurationContext;\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};\n","import React, { useState, useEffect, 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 Utils from \"../../util/Utils\";\nimport JsonLdObjectUtils from \"../../util/JsonLdObjectUtils\";\nimport Logger from \"../../util/Logger\";\nimport { FormGroup, Form } from \"react-bootstrap\";\nimport { FormGenContext } from \"../../contexts/FormGenContext\";\nimport { ConfigurationContext } from \"../../contexts/ConfigurationContext\";\nimport { IntelligentTreeSelect } from \"intelligent-tree-select/lib/components/IntelligentTreeSelect.js\";\n\nimport \"intelligent-tree-select/lib/styles.css\";\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\nconst TypeaheadAnswer = (props) => {\n  const queryHash = Utils.getStringHash(\n    FormUtils.getPossibleValuesQuery(props.question)\n  );\n\n  const formGenContext = useContext(FormGenContext);\n  const configurationContext = useContext(ConfigurationContext);\n\n  const intl = configurationContext.options.intl;\n\n  const [isLoading, setLoading] = useState(true);\n  const [optionsList, setOptionsList] = useState(\n    processTypeaheadOptions(props.options, intl)\n  );\n\n  useEffect(() => {\n    let isCancelled = false;\n    const question = props.question;\n\n    async function loadFormOptions() {\n      try {\n        const options = await formGenContext.loadFormOptions(\n          queryHash,\n          FormUtils.getPossibleValuesQuery(question)\n        );\n        if (!isCancelled) {\n          setLoading(false);\n          generateTreeOptions(options);\n        }\n      } catch (error) {\n        Logger.error(\n          `An error has occurred during loadFormOptions for query hash: ${queryHash}`\n        );\n      }\n    }\n\n    if (\n      !question[Constants.HAS_OPTION] &&\n      FormUtils.getPossibleValuesQuery(question)\n    ) {\n      loadFormOptions();\n    } else {\n      setLoading(false);\n      generateTreeOptions(question[Constants.HAS_OPTION]);\n    }\n\n    return () => {\n      isCancelled = true;\n    };\n  }, [queryHash, formGenContext, props.question, intl]);\n\n  const generateTreeOptions = (possibleValues) => {\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    const optionsTree = Object.values(options);\n    setOptionsList(optionsTree);\n  };\n\n  const handleOptionSelectedChange = (option) => {\n    props.onChange(option ? option.id : null);\n  };\n\n  const noLinksValueRenderer = (children) => <>{children}</>;\n\n  const valueKey = Utils.findKeyInObjects(optionsList, [\"name\", \"value\"]);\n  const labelKey = Utils.findKeyInObjects(optionsList, [\"name\", \"label\"]);\n\n  const _getControlValidationStyle = () => {\n    let borderColor;\n    let boxShadow;\n    if (props.validation.classname === \"is-warning\") {\n      borderColor = \"#dc9135\";\n      boxShadow = \"0 0 0 0.2rem rgba(203, 127, 16, 0.25)\";\n    } else if (props.validation.classname === \"is-invalid\") {\n      borderColor = \"#dc3545\";\n      boxShadow = \"0 0 0 .2rem rgba(220,53,69,.25)\";\n    }\n    return {\n      control: (provided) => ({\n        ...provided,\n        border: borderColor ? `1px solid ${borderColor}` : provided.border,\n        boxShadow: provided.boxShadow,\n        \"&:hover\": {\n          border: `1px solid ${borderColor}`,\n          boxShadow: boxShadow ? boxShadow : provided.boxShadow,\n        },\n      }),\n    };\n  };\n\n  return (\n    <FormGroup size=\"small\" className=\"mb-3\">\n      <Form.Label>{props.label}</Form.Label>\n      <IntelligentTreeSelect\n        styles={_getControlValidationStyle()}\n        valueKey={valueKey}\n        labelKey={labelKey}\n        valueRenderer={\n          props.question[Constants.PROVIDES_DEREFERENCEABLE_ANSWER_VALUES] ===\n          false\n            ? noLinksValueRenderer\n            : null\n        }\n        value={optionsList.find((option) => option.id === props.value) || null}\n        multi={false}\n        options={optionsList}\n        isSearchable={true}\n        isLoading={isLoading}\n        isClearable={true}\n        renderAsTree={true}\n        optionLeftOffset={5}\n        isDisabled={\n          isLoading ||\n          configurationContext.componentsOptions.readOnly ||\n          FormUtils.isDisabled(props.question)\n        }\n        onChange={handleOptionSelectedChange}\n        titleKey=\"description\"\n      />\n      {props.validation.message}\n    </FormGroup>\n  );\n};\n\nTypeaheadAnswer.propTypes = {\n  question: PropTypes.object.isRequired,\n  answer: PropTypes.object.isRequired,\n  label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n  title: PropTypes.string,\n  value: PropTypes.string,\n  onChange: PropTypes.func.isRequired,\n  validation: PropTypes.object,\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\";\n\nconst UNKNOWN_AUTHOR = \"Unknown author\";\n\nconst CommentView = (props) => {\n  const { options } = useContext(ConfigurationContext);\n  const [showIRI, setShowIRI] = useState(false);\n  const [showRecycleBin, setShowRecycleBin] = useState(false);\n\n  TimeAgo.addLocale(cs);\n  TimeAgo.addLocale(en);\n  TimeAgo.setDefaultLocale(Constants.LANG.en.locale);\n\n  const time = new TimeAgo(options.intl.locale);\n\n  const getAuthorLabel = () => {\n    if (options && options.users) {\n      const users = options.users;\n      const currentUser = users.find((c) => c.id === options.currentUser);\n\n      if (props.author) {\n        if (currentUser.label) {\n          return currentUser.label;\n        } else {\n          return getAuthorIRIAbbreviation();\n        }\n      }\n    }\n\n    return UNKNOWN_AUTHOR;\n  };\n\n  const getAuthorIRIAbbreviation = () => {\n    const fullAuthor = props.author[\"@id\"];\n\n    return fullAuthor.replace(/.*[#\\/]/, \"... \");\n  };\n\n  const getAuthorIRI = () => {\n    if (props.author) {\n      return Object.values(props.author).toString();\n    }\n    return UNKNOWN_AUTHOR;\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 getTimeAgoFormat = () => {\n      return time.format(parseInt(props.timestamp));\n    };\n\n    const getUTCFormat = () => {\n      let dateOptions = {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\",\n        hour: \"numeric\",\n        minute: \"numeric\",\n        second: \"numeric\",\n      };\n      const date = new Date(parseInt(props.timestamp));\n      return new Intl.DateTimeFormat(options.intl.locale, dateOptions).format(\n        date\n      );\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\";\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={comment[Constants.HAS_COMMENT_VALUE]}\n                author={\n                  comment[Constants.HAS_AUTHOR]\n                    ? comment[Constants.HAS_AUTHOR]\n                    : null\n                }\n                timestamp={comment[Constants.HAS_TIMESTAMP]}\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 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\";\n\nexport default class QuestionStatic {\n  static renderIcons(question, options, onCommentChange, showIcon) {\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    );\n    const renderQuestionComments = this.renderQuestionComments(\n      question,\n      options,\n      onCommentChange,\n      showIcon\n    );\n\n    const renderQuestionLink = this.renderQuestionLink(\n      question,\n      options,\n      onCommentChange,\n      showIcon\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    }\n\n    return <ol className=\"icon-list-items\">{iconsArray}</ol>;\n  }\n\n  static renderQuestionHelp(question, options, onCommentChange, showIcon) {\n    return this.getIconComponentFromName(\n      Constants.ICONS.QUESTION_HELP,\n      question,\n      options,\n      onCommentChange,\n      showIcon\n    );\n  }\n\n  static renderQuestionComments = (\n    question,\n    options,\n    onCommentChange,\n    showIcon\n  ) => {\n    return this.getIconComponentFromName(\n      Constants.ICONS.QUESTION_COMMENTS,\n      question,\n      options,\n      onCommentChange,\n      showIcon\n    );\n  };\n\n  static renderQuestionLink(question, options, onCommentChange, showIcon) {\n    return this.getIconComponentFromName(\n      Constants.ICONS.QUESTION_LINK,\n      question,\n      options,\n      onCommentChange,\n      showIcon\n    );\n  }\n\n  static getIconComponentFromName(\n    iconName,\n    question,\n    options,\n    onCommentChange,\n    showIcon\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    );\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(icon, question, options, onCommentChange, showIcon) {\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                  options.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      return null;\n    }\n  }\n}\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, { 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/SelectAnswer\";\nimport FormUtils from \"../util/FormUtils\";\nimport Utils from \"../util/Utils\";\nimport TypeaheadAnswer from \"./answer/TypeaheadAnswer\";\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\";\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\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      />\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      />\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      options.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        )}\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    options.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};\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      // console.log(question);\n      // console.log(intl);\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","import React from \"react\";\nimport Constants from \"../constants/Constants\";\n\ninterface Props {\n  question: object;\n}\n\nconst MediaContent = ({ question }: Props) => {\n  const renderMedia = () => {\n    // @ts-ignore\n    const mediaContent = question[Constants.HAS_MEDIA_CONTENT];\n\n    if (mediaContent) {\n      if (Array.isArray(mediaContent)) {\n        return (\n          <div className=\"col-6\">\n            {mediaContent.map((src: string, index: number) => (\n              <div\n                key={index}\n                className=\"row embed-responsive-21by9 media-content-video-container mb-3\"\n              >\n                <iframe\n                  src={mediaContent[index]}\n                  className=\"embed-responsive-item\"\n                  allowFullScreen\n                />\n              </div>\n            ))}\n          </div>\n        );\n      }\n      return (\n        <div className=\"col-6\">\n          <iframe\n            src={mediaContent}\n            className=\"embed-responsive-item\"\n            allowFullScreen\n          />\n        </div>\n      );\n    }\n    return null;\n  };\n\n  return renderMedia();\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\";\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    };\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  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.context.options.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        />\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    );\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          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            />\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.context.options.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(\n                  step[JsonLdUtils.RDFS_LABEL],\n                  options.intl\n                )}\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                options.intl\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 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\";\n\nconst findStepByQuestionId = (stepData, id) => {\n  const findQuestionTraversal = (question, index) => {\n    if (!question) {\n      return -1;\n    }\n\n    if (question[\"@id\"] === id) {\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 = findStepByQuestionId(\n      formQuestionsContext.getFormQuestionsData(),\n      options.startingQuestionId\n    );\n\n    if (startingStep === -1) {\n      console.warn(`Question with id ${options.startingQuestionId} not found!`);\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  const [scrolledToStartingQuestionId, setScrolledToStartingQuestionId] =\n    React.useState(false);\n\n  useEffect(() => {\n    if (options.startingQuestionId && !scrolledToStartingQuestionId) {\n      const element = document.getElementById(options.startingQuestionId);\n      if (element) {\n        element.scrollIntoView();\n        element.classList.add(\"text-danger\");\n        setScrolledToStartingQuestionId(true);\n      }\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 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 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    if (question[Constants.HAS_ANSWER]) {\n      const validator = createValidator(question, intl);\n      const update = validator();\n\n      if (update) {\n        questions[index] = { ...question, ...update };\n      }\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, { 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 Question from \"./Question\";\nimport FormUtils from \"../util/FormUtils.js\";\nimport ValidationProcessor from \"../model/ValidationProcessor.js\";\nimport { useIntl } from \"react-intl\";\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 handleStepChange = (question, index, change) => {\n    updateFormQuestionsData(index, { ...question, ...change });\n  };\n\n  const renderWizardlessForm = () => {\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\n  const _mapQuestion = (question, index) => {\n    let component = props.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 { 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  if (modalView) {\n    return (\n      <FormWindow>\n        {isWizardless ? renderWizardlessForm() : <Wizard />}\n      </FormWindow>\n    );\n  }\n\n  return isWizardless ? renderWizardlessForm() : <Wizard />;\n});\n\nexport default FormManager;\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.Toggle as={Button} variant=\"link\" eventKey=\"0\">\n                  {lang[\"error.view_details\"] || \"View Error Details\"}\n                </Accordion.Toggle>\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, { forwardRef, useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { FormGenContextProvider } from \"../contexts/FormGenContext\";\nimport { FormQuestionsProvider } from \"../contexts/FormQuestionsContext\";\nimport { ConfigurationContextProvider } from \"../contexts/ConfigurationContext\";\nimport IntlContextProvider from \"../contexts/IntlContextProvider.tsx\";\nimport FormGenerator from \"../model/FormGenerator\";\nimport FormManager from \"./FormManager\";\nimport { Card } from \"react-bootstrap\";\nimport FormUtils from \"../util/FormUtils.js\";\nimport \"../styles/s-forms.css\";\nimport ErrorBoundaries from \"./ErrorBoundary.jsx\";\n\nconst SForms = forwardRef((props, ref) => {\n  const [loading, setLoading] = useState(true);\n  const [formProperties, setFormProperties] = useState(null);\n  const [form, setForm] = useState(null);\n\n  useEffect(() => {\n    const initialiseSForms = async () => {\n      const intl = props.options.intl;\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]);\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      <IntlContextProvider locale={props.options.intl.locale}>\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      </IntlContextProvider>\n    </ConfigurationContextProvider>\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};\n\nexport default SForms;\n"],"names":["Logger","log","msg","console","warn","error","_excluded","FormGenContext","React","createContext","FormGenContextProvider","_ref","children","props","_objectWithoutPropertiesLoose","options","loadFormOptions","id","query","option","length","Promise","resolve","fetchTypeAheadValues","then","data","jsonld","frame","framedData","_Object$assign","push","Object","assign","e","reject","getOptions","values","useMemo","createElement","Provider","_extends","value","propTypes","PropTypes","element","isRequired","func","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","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","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","ICON_BEHAVIOR","ENABLE","DISABLE","ON_HOVER","DEFAULT_OPTIONS","icons","behavior","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","Utils","getStringHash","str","hash","strlen","i","charCodeAt","asArray","object_or_array","constructor","Array","findQuestionById","question","reflexive","asserted","transitive","subQuestions","_iterator","_step","_createForOfIteratorHelperLoose","done","foundQ","_iterator2","_step2","findKeyInObjects","objectList","keysToCheck","j","hasOwnProperty","JsonLdObjectMap","putObject","objectMap","getObject","JsonLdObjectUtils","getFirstObject","subject","predicate","getValues","compareValues","jsonLdValue1","jsonLdValue2","JSON","stringify","toplogicalSort","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","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","_step3","_iterator3","_getMappedObjectsArray","acceptedValidationsValues","acceptedAnswerValues","accepts","testedQuestions","arr","_step4","_iterator4","hasAnswer","_iterator5","_step5","_step6","_iterator6","expValue","answers","qValue","jsonObjects","objectType","obj","filter","_step7","_iterator7","getAnswerValue","_step8","_iterator8","subQAnswer","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","INITIAL_DATA","INITIAL_FORM_QUESTIONS_DATA","FormQuestionsContext","FormQuestionsProvider","_useState","useState","setData","_useState2","formQuestions","formQuestionsData","setFormQuestionsData","useEffect","isFormValid","updateData","update","updateFormQuestionsData","index","newFormQuestionsData","concat","isArray","getData","getFormQuestionsData","object","array","DefaultInput","_React$Component","_this","call","state","cursorPosition","_inheritsLoose","_proto","prototype","focus","ReactDOM","findDOMNode","input","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","ref","validation","classname","message","_this3","FormGroup","_this4","_renderLabel","FormControl","as","Label","_this5","_this6","placeholder","Component","string","any","help","defaultProps","ConfigurationContext","components","inputComponent","componentsOptions","dateTimeAnswer","readOnly","modalView","modalProps","horizontalWizardNav","wizardStepButtons","enableWizardStepSkip","startingStep","ConfigurationContextProvider","mapComponent","_root","_JsonLdFramingUtils","IntlContext","IntlContextProvider","_ref$locale","navigator","language","lang","_jsx","IntlProvider","messages","DefaultFormGenerator","generateForm","parse","formTemplate","formShape","root","expandProperties","JsonLdFramingUtils","customFrame","shape","callback","arguments","nextTick","TypeError","flatten","f","expandStructure","id2objectMap","item","_expandGraph","parentNode","childArray","child","childId","prop","_getId","jsonObject","compressStructure","rootNode","object2IdMap","idIncluded","Set","_compressGraph","localeCompare","has","FormGenerator","constructDefaultForm","defaultFormData","_constructFormQuestions","constructForm","formProperties","form","flattenedStructure","_FormGenerator$_const","rootForm","_FormGenerator$constr","formElements","key","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","text","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","_this$props","patternLength","context","r","maxLength","onKeyDown","onPaste","contextType","MaskedInputAnswer","SelectAnswer","apply","_generateSelectOptions","rendered","processTypeaheadOptions","TypeaheadAnswer","queryHash","formGenContext","configurationContext","isLoading","setLoading","optionsList","setOptionsList","isCancelled","_temp","body","recover","generateTreeOptions","_catch","borderColor","boxShadow","possibleValues","relations","pValue","description","parent","_relations","_options$relation$par","relation","optionsTree","valueKey","labelKey","IntelligentTreeSelect","styles","control","provided","border","valueRenderer","Fragment","multi","isSearchable","isClearable","renderAsTree","optionLeftOffset","titleKey","CaretSquareUp","version","xmlns","width","height","viewBox","d","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","UNKNOWN_AUTHOR","CommentView","showIRI","setShowIRI","showRecycleBin","setShowRecycleBin","TimeAgo","addLocale","setDefaultLocale","time","getAuthorLabel","users","currentUser","getAuthorIRIAbbreviation","replace","handleCommentAuthorMouseEnter","onMouseEnter","onMouseLeave","toString","parseInt","Intl","DateTimeFormat","weekday","year","month","day","hour","minute","second","motion","div","whileHover","scale","whileTap","onClick","onDeleteQuestionComment","onDeleteViewComment","commentValue","CommentList","onDeleteCommentClick","commentEndRef","useRef","isDeleting","setIsDeleting","handleDeleteViewComment","current","scrollTop","scrollHeight","jsx","_jsxs","jsxs","Rings","color","ArrowRight","MAX_TEXT_AREA_HEIGHT","CommentForm","setCommentValue","formInputRef","useIntl","handleFormSubmit","handleTextAreaKeyPress","textArea","style","autoResizeTextArea","onSubmit","onKeyUp","trim","stopPropagation","Col","Row","Control","name","formatMessage","required","Button","variant","_QuestionStatic","Close","QuestionCommentIcon","dragRef","overlayTarget","showOverlay","setShowOverlay","handleHideOverlayClick","_getComments","handleCommentValueChange","change","_setComment","getCommentsLength","now","handleDeleteQuestionCommentClick","splice","handleStopPropagationClick","Badge","pill","drag","dragConstraints","top","left","right","bottom","Overlay","rootClose","onHide","container","overlayProps","handleEscapeKeyDown","transition","duration","QuestionStatic","renderIcons","onCommentChange","showIcon","iconsArray","renderQuestionHelp","renderQuestionComments","renderQuestionLink","getIconComponentFromName","iconName","icon","getIconFromIconList","getIconComponent","iconClassname","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","MediaContent","mediaContent","src","allowFullScreen","Question","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","Card","Body","Accordion","activeKey","Item","eventKey","Header","onBlur","_renderCollapseToggle","renderQuestionIcons","content","getShowIrrelevantClassname","answerableSectionStyles","Collapse","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","hidden","VerticalWizardNav","action","findStepByQuestionId","findQuestionTraversal","findIndex","Wizard","formQuestionsContext","_React$useContext","_React$useState","setCurrentStep","_React$useState2","scrolledToStartingQuestionId","setScrolledToStartingQuestionId","getElementById","scrollIntoView","classList","nav","stepIndex","visited","stepComponent","isHorizontal","prevCurrentStep","FormWindow","forwardRef","Modal","animation","closeButton","Title","ValidationProcessor","_ValidationProcessor","updateQuestionValidation","updateSubQuestionsValidation","FormManager","useImperativeHandle","validateForm","getFormData","renderWizardlessForm","_mapQuestion","handleStepChange","isWizardless","every","ErrorBoundary","hasError","errorLabel","errorDetails","getDerivedStateFromError","componentDidCatch","padding","Alert","Heading","Toggle","whiteSpace","componentStack","SForms","loading","setFormProperties","_useState3","setForm","some","initialiseSForms","loader","_mapComponent","defaultComponent","_step$value","mapRule","_getComponentMappingFunction","componentMapRules","ErrorBoundaries"],"mappings":"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"}