@kbss-cvut/s-forms 0.7.3-beta-cbbae1f.0 → 0.7.3-beta-dc4a2fe.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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 >\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\">\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\">\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\">\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\">\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\">\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 || !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 }, []);\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\">\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 valueIsControlled={true}\n value={optionsList.filter((option) => option.id === props.value)}\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 className=\"m-2\" controlId=\"formBasicComment\">\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 _onMouseEnterHandler = () => {\n this.setState({ showIcon: true });\n };\n\n _onMouseLeaveHandler = () => {\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 defaultActiveKey={!this.state.expanded ? label : undefined}\n >\n <Card className=\"mb-3\">\n <Accordion.Toggle\n as={Card.Header}\n onClick={this._toggleCollapse}\n className={this._getHeaderClassName()}\n onMouseEnter={this._onMouseEnterHandler}\n onMouseLeave={this._onMouseLeaveHandler}\n >\n <h6 className=\"d-inline\" id={question[\"@id\"]}>\n {collapsible &&\n !FormUtils.isWizardStep(question) &&\n this._renderCollapseToggle()}\n {label}\n </h6>\n {this.renderQuestionIcons()}\n {this.props.children}\n </Accordion.Toggle>\n {collapsible ? (\n <Accordion.Collapse>{cardBody}</Accordion.Collapse>\n ) : (\n <>{cardBody}</>\n )}\n </Card>\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\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={this._getHeaderClassName()}\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._onMouseEnterHandler}\n onMouseLeave={this._onMouseLeaveHandler}\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-right\">\n {!props.isFirstStep && (\n <Button\n className=\"mr-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","Check","ref","className","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","valueIsControlled","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","_onMouseEnterHandler","_onMouseLeaveHandler","_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","defaultActiveKey","Toggle","Header","_renderCollapseToggle","renderQuestionIcons","Collapse","content","getShowIrrelevantClassname","activeKey","eventKey","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","whiteSpace","componentStack","SForms","loading","setFormProperties","_useState3","setForm","some","initialiseSForms","loader","_mapComponent","defaultComponent","_step$value","mapRule","_getComponentMappingFunction","componentMapRules","ErrorBoundaries"],"mappings":"2yKAAqBA,mCAAMA,IAAAA,QAAAA,EAClBC,IAAP,SAAWC,GACTC,QAAQF,IAAIC,EACd,EAACF,EAEMI,KAAP,SAAYF,GACNC,QAAQC,KACVD,QAAQC,KAAKF,GAEbC,QAAQF,IAAI,YAAcC,EAE9B,EAACF,EAEMK,MAAP,SAAaH,GACPC,QAAQE,MACVF,QAAQE,MAAMH,GAEdC,QAAQF,IAAI,UAAYC,EAE5B,EAACF,CAAA,ICnBHM,EAAA,CAAA,YAKMC,eAAiBC,EAAAA,QAAMC,cAAc,CAAE,GAEvCC,EAAyB,SAAHC,GAA+B,IAAzBC,EAAQD,EAARC,SAAaC,EAAKC,EAAAH,EAAAL,GAC9CS,EAAU,GAERC,EAAA,SAAyBC,EAAIC,GAAU,IAC3C,IAAMC,EAASJ,EAAQE,GAEvB,OAAIE,GAAUA,EAAOC,OACnBC,QAAAC,QAAOH,GACRE,QAAAC,QAEkBT,EAAMU,qBAAqBL,IAAMM,KAAA,SAA9CC,GAEN,OAAIA,EAAKL,OACAM,EAAOC,MAAMF,EAAM,CAAA,EAAI,CAAA,GAAID,KAAK,SAACI,GAAe,IAAAC,EAC/CV,EAASS,EAAW,UAE1B,OADAb,EAAQe,KAAIC,OAAAC,OAAMb,CAAAA,EAAAA,IAAMU,MAAGZ,GAAKE,EAAMU,KAC/BV,CACT,IAGFnB,EAAOI,KAAuDa,kDAAAA,GAEvD,GAAG,EACZ,CAAC,MAAAgB,GAAAZ,OAAAA,QAAAa,OAAAD,EAED,CAAA,EAAME,EAAa,SAAClB,GAAO,OAAAF,EAAQE,IAAO,EAAE,EAEtCmB,EAASC,EAAAA,QACb,WAAA,MAAO,CACLrB,gBAAAA,EACAmB,WAAAA,EACD,EACD,CAACnB,EAAiBmB,iBAGpB,OACE3B,EAAA,QAAA8B,cAAC/B,EAAegC,SAAQC,EAACC,CAAAA,MAAOL,GAAYvB,GACzCD,EAGP,EAEAF,EAAuBgC,UAAY,CACjC9B,SAAU+B,EAAAA,QAAUC,QAAQC,WAC5BtB,qBAAsBoB,EAAS,QAACG,MCjDb,IAAAC,EAAS,WAAAC,EAAAA,EAATD,EAAAA,EAEZE,aAAe,GAFHF,EAGZG,uBAAyB,GAHbH,EAIZI,uBAAyB,IAJbJ,EAKZK,mBAAqB,qBALTL,EAUZM,KAAO,wDAVKN,EAWZO,gBACL,wEAZiBP,EAaZQ,WACL,8DAdiBR,EAeZS,WACL,6DAhBiBT,EAiBZU,kBACL,oEAlBiBV,EAmBZW,eACL,yDApBiBX,EAqBZY,YACL,mEAtBiBZ,EAuBZa,WAAa,yDAvBDb,EAwBZc,aACL,kEAzBiBd,EA0BZe,OAAS,CACdT,KAAM,OACNU,iBAAkB,UAClBC,YAAa,cACbC,KAAM,OACNC,KAAM,OACNC,SAAU,WACVC,KAAM,OACNC,SAAU,WACVC,SAAU,WACVC,mBAAoB,aACpBC,aAAc,eACdC,WAAY,aACZC,OAAQ,SACRC,OAAQ,MACRC,SAAU,WACVC,OAAQ,SACRC,UAAW,YACXC,WAAY,aACZC,sBAAuB,wBACvBC,SAAU,CACR,aACA,aACA,aACA,aACA,eAnDelC,EAsDZmC,yBACL,0EAvDiBnC,EAwDZoC,gBAAkB,OAxDNpC,EAyDZqC,gBAAkB,OAzDNrC,EA0DZsC,mBAAqB,EA1DTtC,EA2DZuC,oBACL,8DA5DiBvC,EA6DZwC,kBACL,4DA9DiBxC,EA+DZyC,eACL,kEAhEiBzC,EAiEZ0C,iBACL,oEAlEiB1C,EAmEZ2C,iBAAmB,8CAnEP3C,EAoEZ4C,OAAS,yCApEG5C,EAqEZ6C,IAAM,CACXC,cAAe,gDACfC,cAAe,gDACfC,cAAe,gDACfC,cAAe,gDAEfC,IAAK,uCACLC,QAAS,2CACTC,iBAAkB,mDAClBC,qBAAsB,sDACtBC,qBAAsB,sDACtBC,iBAAkB,mDAClBC,MAAO,yCACPC,eAAgB,iDAChBC,eAAgB,iDAEhBC,QAAS,4CArFQ3D,EAuFZ4D,KAAO,+CAvFK5D,EAwFZ6D,QAAU,kDAxFE7D,EAyFZ8D,qBACL,+DA1FiB9D,EA2FZ+D,QAAU,kDA3FE/D,EA4FZgE,aAAe,uDA5FHhE,EA6FZiE,iBACL,2DA9FiBjE,EA+FZkE,0BACL,oEAhGiBlE,EAiGZmE,mBACL,6DAlGiBnE,EAmGZoE,oBACL,8DApGiBpE,EAqGZqE,gBACL,0DAtGiBrE,EAuGZsE,SAAW,mDAvGCtE,EAwGZuE,iBACL,2DAzGiBvE,EA0GZwE,eACL,yDA3GiBxE,EA4GZyE,yBACL,mEA7GiBzE,EA8GZ0E,uBACL,iEA/GiB1E,EAgHZ2E,mBACL,6DAjHiB3E,EAkHZ4E,gBACL,0DAnHiB5E,EAoHZ6E,2BACL,qEArHiB7E,EAsHZ8E,+BACL,yEAvHiB9E,EAwHZ+E,mBACL,6DAzHiB/E,EA0HZgF,uBACL,iEA3HiBhF,EA4HZiF,oBACL,8DA7HiBjF,EA8HZkF,kBACL,4DA/HiBlF,EAgIZmF,UAAY,oDAhIAnF,EAiIZoF,aAAe,uDAjIHpF,EAkIZqF,kBACL,4DAnIiBrF,EAoIZsF,YAAc,yDApIFtF,EAqIZuF,oBACL,mEAtIiBvF,EAuIZwF,OAAS,oCAvIGxF,EAwIZyF,UAAY,uCAxIAzF,EAyIZ0F,YAAc,sDAzIF1F,EA0IZ2F,kBACL,4DA3IiB3F,EA4IZ4F,WAAa,qDA5ID5F,EA6IZ6F,cACL,wDA9IiB7F,EA+IZ8F,YAAc,sDA/IF9F,EAgJZ+F,YAAc,sDAhJF/F,EAiJZgG,gBACL,0DAlJiBhG,EAmJZiG,iBACL,2DApJiBjG,EAsJZkG,sBACL,gEAvJiBlG,EAwJZmG,kBACL,4DAzJiBnG,EA0JZoG,wBACL,kEA3JiBpG,EA6JZqG,WAAaC,EAAYD,WA7JbrG,EA8JZuG,aAAeD,EAAYC,aA9JfvG,EA+JZwG,kBAAoBF,EAAYE,kBA/JpBxG,EAgKZyG,QAAU,8CAhKEzG,EAiKZ0G,yBACL,mEAlKiB1G,EAmKZ2G,uCACL,iFApKiB3G,EAsKZ4G,MAAQ,CACbC,kBAAmB,mBACnBC,cAAe,eACfC,cAAe,gBAzKE/G,EA4KZgH,cAAgB,CACrBC,OAAQ,SACRC,QAAS,UACTC,SAAU,WA/KOnH,EAmLZoH,gBAAkB,CACvBC,MAAO,CACL,CACEnJ,GAAI8B,EAAU4G,MAAME,cACpBQ,SAAUtH,EAAUgH,cAAcC,QAEpC,CACE/I,GAAI8B,EAAU4G,MAAMC,kBACpBS,SAAUtH,EAAUgH,cAAcG,UAEpC,CACEjJ,GAAI8B,EAAU4G,MAAMG,cACpBO,SAAUtH,EAAUgH,cAAcG,YA/LrBnH,EAoMZuH,KAAO,CACZC,GAAI,CACFC,OAAQ,KACRC,MAAO,WAETC,GAAI,CACFF,OAAQ,KACRC,MAAO,YA3MQ1H,EA+MZ4H,WAAa,CAClBC,SAAU,CACRC,MAAO,QACPC,QAAS,WAEXC,gBAAiB,CACfC,SAAU,0BACVC,+BACE,+CACFC,QAAS,yBACTC,MAAO,8BACPC,eAAgB,mDAChBC,iBAAkB,2CAEpBC,UAAW,CACTT,MAAO,aACPC,QAAS,eCjOmC,IAE7BS,eAAK,WAAA,SAAAA,IAAAA,CA6EvB,OA7EuBA,EAMjBC,cAAP,SAAqBC,GACnB,IAAIC,EAAO,EACLC,EAASF,EAAMA,EAAIrK,OAAS,EAElC,GAAe,IAAXuK,EACF,OAAOD,EAET,IAAK,IAAIE,EAAI,EAAGA,EAAID,EAAQC,IAC1BF,GAAQA,GAAQ,GAAKA,EAAOD,EAAII,WAAWD,GAC3CF,GAAcA,EAGhB,OAAOA,CACT,EAACH,EAOMO,QAAP,SAAeC,GACb,OAAKA,EAGDA,EAAgBC,cAAgBC,MAC3BF,EAEF,CAACA,GALC,EAMX,EAACR,EAEMW,iBAAP,SAAwBjL,EAAIkL,EAAUC,EAAWC,EAAUC,GACzD,GAAIF,GACED,EAAS,SAAWlL,EACtB,OAAOkL,EAIX,IAAMI,EAAehB,EAAMO,QAAQK,EAASpJ,EAAUO,kBACtD,GAAI+I,EACF,IAAAG,IAA0BC,EAA1BD,EAAAE,EAAcH,KAAYE,EAAAD,KAAAG,MAAE,CAAA,IACtBC,EAASrB,EAAMW,iBAAiBjL,EAD5BwL,EAAAhK,OACmC,GAAM,GAAO,GACxD,GAAImK,EAAQ,OAAOA,CACrB,CAGF,GAAIN,EACF,IAAAO,IAA0BC,EAA1BD,EAAAH,EAAcH,KAAYO,EAAAD,KAAAF,MAAE,CAAnB,IACHC,EAASrB,EAAMW,iBAAiBjL,EAD5B6L,EAAArK,OACmC,GAAO,GAAM,GACxD,GAAImK,EAAQ,OAAOA,CACrB,CAGF,WACF,EAACrB,EASMwB,iBAAP,SAAwBC,EAAYC,GAClC,IAAK,IAAIrB,EAAI,EAAGA,EAAIoB,EAAW5L,OAAQwK,IACrC,IAAK,IAAIsB,EAAI,EAAGA,EAAID,EAAY7L,OAAQ8L,IACtC,GAAIF,EAAWpB,GAAGuB,eAAeF,EAAYC,IAC3C,OAAOD,EAAYC,GAIzB,WACF,EAAC3B,CAAA,CA7EuB,GCFL6B,eAAeA,WAAAA,SAAAA,IAAAA,CASjCA,OATiCA,EAG3BC,UAAP,SAAiBpM,EAAIkL,GACnBiB,EAAgBE,UAAUrM,GAAMkL,CAClC,EAACiB,EAEMG,UAAP,SAAiBtM,GACf,OAAOmM,EAAgBE,UAAUrM,EACnC,EAACmM,CAAA,CATiCA,GAAfA,EACZE,UAAY,CAAE,ECIF,IAAAE,mCAAiBA,IAAA,CA8InC,OA9ImCA,EAC7BC,eAAP,SAAsBC,EAASC,GAC7B,IAAMvL,EAASV,EAAOkM,UAAUF,EAASC,GAEzC,OAAsB,IAAlBvL,EAAOhB,OAEF,KAEFgB,EAAO,EAChB,EAACoL,EAEMK,cAAP,SAAqBC,EAAcC,GAWjC,OANAA,EAC0B,iBAAjBA,EACHA,EACA,CAAE,SAAUA,OAPlBD,EAC0B,iBAAjBA,EACHA,EACA,CAAE,SAAUA,KAShBA,EAAa,WACbC,GACAA,EAAa,YAGuB,iBAA3BD,EAAa,UAChBA,EAAa,UACbE,KAAKC,UAAUH,EAAa,eAEE,iBAA3BC,EAAa,UAChBA,EAAa,UACbC,KAAKC,UAAUF,EAAa,cAM7BrM,EAAOmM,cAAcC,EAAcC,EAC5C,EAACP,EAUMU,eAAP,SAAsBzM,EAAM0M,GAC1B,IAAIC,EACJ,EAAG,CACDA,GAAU,EACV,IAAK,IAAIxC,EAAI,EAAGA,EAAInK,EAAKL,OAAQwK,IAC/B,IAAK,IAAIsB,EAAItB,EAAGsB,EAAIzL,EAAKL,OAAQ8L,IAC/B,GAAIzL,EAAKmK,GAAGuC,KAEuB,iBAAxB1M,EAAKmK,GAAGuC,GACX1M,EAAKmK,GAAGuC,GAAY,OACpB1M,EAAKmK,GAAGuC,MACD1M,EAAKyL,GAAG,OAAQ,CAC3B,IAAMmB,EAAM5M,EAAKmK,GACjBnK,EAAKmK,GAAKnK,EAAKyL,GACfzL,EAAKyL,GAAKmB,EACVD,GAAU,EACV,KACF,CAIR,OAASA,GAET,OAAO3M,CACT,EAAC+L,EAWMc,8BAAP,SAAqC7M,EAAM0M,GAIzC,IAHA,IAAMI,EAAQC,EAAK,UACbC,EAAe,CAAA,EAAGC,EAAAA,WAGtB,IAAIC,EAAYlN,EAAKmK,GAAG,OACxB2C,EAAMK,IAAID,GACVF,EAAaE,GAAalN,EAAKmK,GAE/BL,EAAMO,QAAQrK,EAAKmK,GAAGuC,IACnBU,IAAI,SAACC,GAAG,MAAqB,iBAARA,EAAmBA,EAAI,OAASA,CAAG,GACxDD,IAAI,SAACC,SAAQ,CAACA,EAAKH,EAAU,GAC7BI,QAAQ,SAACC,GAAS,OAAAT,EAAMK,IAAII,EAAK,EACtC,EATSpD,EAAI,EAAGA,EAAInK,EAAKL,OAAQwK,IAAG8C,IAYpC,IADA,IAAIO,EAAYV,EAAMW,OACbtD,EAAI,EAAGA,EAAIqD,EAAU7N,OAAQwK,IACpCnK,EAAKmK,GAAK6C,EAAaQ,EAAUrD,IAEnC,OAAOnK,CACT,EAAC+L,EAEM2B,iCAAP,SAAwCC,GACtC,OAAO,SAACC,EAAGC,GACT,IAAMC,EAASlG,EAAYmG,aAAaH,EAAEhG,EAAYD,YAAagG,GAC7DK,EAASpG,EAAYmG,aAAaF,EAAEjG,EAAYD,YAAagG,GACnE,OAAIG,EAASE,GACH,EACCF,EAASE,EACX,EAEF,CACT,CACF,EAACjC,EAEMkC,uBAAP,SAA8BjO,EAAM2N,GAClC,OAAO3N,EAAKyN,KAAK1B,EAAkB2B,iCAAiCC,GACtE,EAAC5B,EAQMmC,QAAP,SAAeC,EAAc3O,GAC3B,QAAqB4O,IAAjBD,EAGJ,OAAIA,EAAa5D,cAAgBC,QACtB2D,EAAaE,KAAK,SAACC,UAAMA,EAAE,SAAW9O,CAAE,GAE/C2O,EAAa5D,cAAgBjK,OACxB6N,EAAa,SAAW3O,OADjC,CAGF,EAACuM,CAAA,IC3IkBwC,eAAS,WAAA,SAAAA,IAAAA,CA0lB3B,OA1lB2BA,EACrBC,OAAP,SAAcC,GACZ,OAAO7G,EAAY8G,SACjBD,EACAnN,EAAUc,aACVd,EAAUe,OAAOT,KAErB,EAAC2M,EAEMI,aAAP,SAAoBF,GAClB,OAAO7G,EAAY8G,SACjBD,EACAnN,EAAUc,aACVd,EAAUe,OAAOE,YAErB,EAACgM,EAEMK,UAAP,SAAiBlE,GACf,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOC,iBAErB,EAACiM,EAEMM,aAAP,SAAoBnE,GAClB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOW,WAErB,EAACuL,EAEMO,YAAP,SAAmBpE,GACjB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOS,mBAErB,EAACyL,EAEMQ,uBAAP,SAA8BrE,GAC5B,OAAO9C,EAAYoH,gBAAgBtE,EAAUpJ,EAAUU,kBACzD,EAACuM,EAEMU,WAAP,SAAkBvE,GAChB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOc,SAErB,EAACoL,EAEMW,SAAP,SAAgBxE,GACd,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOe,OAErB,EAACmL,EAEMY,WAAP,SAAkBzE,EAAU0E,GAC1B,OACGA,GACCA,EAAYzP,OAAS2B,EAAUG,yBAC9B8M,EAAUO,YAAYpE,IACzB9C,EAAY8G,SACVhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOO,SAGvB,EAAC2L,EAEMc,OAAP,SAAc3E,GACZ,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOM,KAErB,EAAC4L,EAEMe,WAAP,SAAkB5E,GAChB,OACE6D,EAAUgB,OAAO7E,IACjB6D,EAAUiB,OAAO9E,IACjB6D,EAAUkB,WAAW/E,EAEzB,EAAC6D,EAEMgB,OAAP,SAAc7E,GACZ,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOG,KAErB,EAAC+L,EAEMiB,OAAP,SAAc9E,GACZ,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOI,KAErB,EAAC8L,EAEMkB,WAAP,SAAkB/E,GAChB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOK,SAErB,EAAC6L,EAEMmB,YAAP,SAAmBhF,GACjB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUiG,iBACVjG,EAAUK,mBAEd,EAAC4M,EAEMoB,WAAP,SAAkBjF,GAChB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOQ,SAErB,EAAC0L,EAEMqB,cAAP,SAAqBlF,GACnB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOU,aAErB,EAACwL,EAEMsB,cAAP,SAAqBnF,GACnB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOY,OAErB,EAACsL,EAEMuB,cAAP,SAAqBpF,GACnB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOa,OAErB,EAACqL,EAEMwB,YAAP,SAAmBrF,GACjB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOgB,UAErB,EAACkL,EAEMyB,aAAP,SAAoBtF,GAClB,OAAO9C,EAAY8G,SACjBhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOiB,WAErB,EAACiL,EAEM0B,YAAP,SAAmBvF,GACjB,OAAOpJ,EAAUe,OAAOmB,SAAS6K,KAAK,SAAC6B,UACrCtI,EAAY8G,SAAShE,EAAUpJ,EAAUc,aAAc8N,EAAE,EAE7D,EAAC3B,EAEM4B,aAAP,SAAoBC,GAClB,OAAKA,EAGDA,EAAO9O,EAAU0C,kBACZoM,EAAO9O,EAAU0C,kBAAkB,OAEnC4D,EAAYoH,gBAAgBoB,EAAQ9O,EAAUyC,gBAL9C,IAOX,EAACwK,EAEM8B,mBAAP,SAA0BD,GACxB,OAAKA,EAGDA,EAAO9O,EAAU0C,kBACZ8F,EAAMO,QAAQ+F,EAAO9O,EAAU0C,mBAAmB,GAEvDoM,EAAO9O,EAAUyC,gBACZ+F,EAAMO,QAAQ+F,EAAO9O,EAAUyC,iBAAiB,GAG3D,KATW,IASX,EAACwK,EAEM+B,WAAP,SAAkB5F,GAChB,IAAKA,EAASpJ,EAAUwE,gBACtB,OACF,EAEA,QAAkEkF,EAAlED,EAAAE,EAAiBnB,EAAMO,QAAQK,EAASpJ,EAAUwE,oBAAgBkF,EAAAD,KAAAG,MAChE,IAAKqD,EAAUgC,cADJvF,EAAAhK,OAET,OAAO,EAIX,OACF,CAAA,EAACuN,EAEMiC,mBAAP,SAA0B9F,GACxB,SAAIA,EAASpJ,EAAU4E,kBAGnBwE,EAASpJ,EAAU+E,qBAGnBqE,EAASpJ,EAAU6D,UAGnBsL,KAAKC,oBAAoBhG,GAI/B,EAAC6D,EAEMoC,QAAP,SAAejG,GACb,IAA6C,IAAzCA,EAASpJ,EAAUuE,kBACrB,OAAO,EAET,IAAA,IAAqEwF,EAArED,EAAAH,EAAmBnB,EAAMO,QAAQK,EAASpJ,EAAUO,qBAAiBwJ,EAAAD,KAAAF,MACnE,IAA2B,IAAvBuF,KAAKE,QADItF,EAAArK,OAEX,SAIJ,OACF,CAAA,EAACuN,EAEMqC,gBAAP,SAAuBC,GACrB,IAAMC,EAAkBD,EAAUvP,EAAUqF,mBACvCmK,GACHpS,QAAQC,KAAK,kDAEf,QAA+DoS,EAA/DC,EAAA/F,EAAmBwF,KAAKQ,uBAAuBH,MAAgBC,EAAAC,KAAA9F,MAC7D,GAAIuF,KAAKF,cADIQ,EAAA/P,OAEX,OACF,EAEF,QACF,EAACuN,EAEMgC,cAAP,SAAqBM,GACnB,IAMInG,EALEwG,EACJL,EAAUvP,EAAUyE,0BAChBoL,EAAuBN,EAAUvP,EAAU8D,sBAC3CgM,EAAUP,EAAUvP,EAAU+D,SAC9BgM,EAAkBR,EAAUvP,EAAUoE,qBAG5C,GARsBmL,EAAUvP,EAAUqF,mBASxC,OAAO8J,KAAKG,gBAAgBC,GAU9B,GAPIK,GAA6BC,GAC/BzS,QAAQC,KACN,wFAKAyS,GAAWC,EAAiB,CAC9B,IAAMC,EAAMxH,EAAMO,QAAQ+G,GAM1B,GALmB,IAAfE,EAAI3R,QACNjB,QAAQC,KACN,4DAGA2S,EAAI,GAAG,SAAWhQ,EAAUmG,kBAAmB,EAC7C0J,GAAwBD,IAC1BxS,QAAQC,KACN,uEAGJ,IAAA,IAA4D4S,EAA5DC,EAAAvG,EAAgBwF,KAAKQ,uBAAuBI,MAAgBE,EAAAC,KAAAtG,MAC1D,IAAKuF,KAAKgB,UADAF,EAAAvQ,OAER,OAAO,EAGX,OACF,CAAA,CACAtC,QAAQC,KACN,yCAA2C2S,EAAI,GAAG,OAAS,KAE/D,CAGA,GAAIJ,GAA6BG,EAAiB,CAChD,IAAMC,EAAMxH,EAAMO,QAAQ6G,IACP,IAAfI,EAAI3R,SAA4B,IAAX2R,EAAI,IAA0B,SAAXA,EAAI,KAC9C5S,QAAQC,KACN,6DAGJ,IAAA+S,IAA8CC,EAA9CD,EAAAzG,EAAgBnB,EAAMO,QAAQgH,MAAgBM,EAAAD,KAAAxG,MAAE,CAE9C,QAAiBkD,KADjB1D,EAAWiB,EAAgBG,UADjB6F,EAAA3Q,MAC6B,SAGrC,OADAtC,QAAQC,KAAK,gDAGf,IAA+B,IAA3B8R,KAAKE,QAAQjG,GACf,OACF,CACF,CACA,QACF,CAGA,GAAIyG,GAAwBE,EAAiB,CAC3C3G,EAAWiB,EAAgBG,UAAUuF,EAAgB,QACrD,IAAA,IAA0DO,EAA1DC,EAAA5G,EAAuBnB,EAAMO,QAAQ8G,MAAqBS,EAAAC,KAAA3G,MAAE,CAAjD,IAAA4G,EAAQF,EAAA5Q,MACjB,IAAK0J,EAEH,OADAhM,QAAQC,KAAK,6BAEf,EACA,IAAK+L,EAASgB,eAAepK,EAAUQ,YAErC,OAAO,EAET,IAAMiQ,EAAU9R,EAAOkM,UAAUzB,EAAUpJ,EAAUQ,YAErD,GAAuB,IAAnBiQ,EAAQpS,OACV,OAAO,EAET,IAAMqS,EAASzD,EAAU8B,mBAAmB0B,EAAQ,IAEpD,GACEC,GACAF,GACAE,EAAOtG,eAAe,WACtBoG,EAASpG,eAAe,QACxBsG,EAAO,WAAaF,EAAS,OAI7B,OAAO,EAGT,GAAI/F,EAAkBK,cAAc4F,EAAQF,GAC1C,QAEJ,CACF,CACA,QACF,EAACvD,EAGM0C,uBAAP,SAA8BgB,EAAaC,GACzC,OAAOpI,EAAMO,QAAQ4H,GAClB7E,IAAI,SAACkB,GACJ,IAAM6D,EAAMxG,EAAgBG,UAAUwC,EAAE,QACxC,YAAYF,IAAR+D,GAEFzT,QAAQC,MACLuT,GAA0B,UACzB,KACA5D,EAAE,OAFJ,2CAQG6D,CACT,GACCC,OAAO,SAAU9D,GAChB,OAAa,OAANA,CACT,EACJ,EAACC,EAEMkD,UAAP,SAAiB/G,GACf,IAAKA,EACH,OACF,EAEA,GAAIA,EAASgB,eAAepK,EAAUQ,YAAa,CACjD,IAAMiQ,EAAU9R,EAAOkM,UAAUzB,EAAUpJ,EAAUQ,YACrD,GAAIiQ,EAAQpS,OAAQ,CAClB,IAAMqS,EAASzD,EAAU8B,mBAAmB0B,EAAQ,IACpD,GAAIC,IACEA,EAAO,WAAaA,EAAO,QAC7B,OACF,CAEJ,CACF,CAEA,QAAqEK,EAArEC,EAAArH,EAAmBnB,EAAMO,QAAQK,EAASpJ,EAAUO,qBAAiBwQ,EAAAC,KAAApH,MACnE,GAAIqD,EAAUkD,UADDY,EAAArR,OAEX,OACF,EAGF,OAAO,CACT,EAACuN,EAEMgE,eAAP,SAAsB7H,GACpB,IAAKA,EACH,OAAO,KAGT,GAAIA,EAASgB,eAAepK,EAAUQ,YAAa,CACjD,IAAMiQ,EAAU9R,EAAOkM,UAAUzB,EAAUpJ,EAAUQ,YACrD,GAAIiQ,EAAQpS,OAAQ,CAClB,IAAMqS,EAASzD,EAAU8B,mBAAmB0B,EAAQ,IACpD,GAAIC,IACEA,EAAO,WAAaA,EAAO,QAC7B,OAAOA,EAAO,WAAaA,EAAO,MAGxC,CACF,CAEA,QAAqEQ,EAArEC,EAAAxH,EAAmBnB,EAAMO,QAAQK,EAASpJ,EAAUO,qBAAiB2Q,EAAAC,KAAAvH,MAAE,CAA5D,IACHwH,EAAanE,EAAUgE,eADhBC,EAAAxR,OAEb,GAAI0R,EACF,OAAOA,CAEX,CAEA,OACF,IAAA,EAACnE,EASMoE,sBAAP,SAA6BjI,EAAUkI,EAAetT,GACpD,IAAMiQ,EAAShB,EAAUgB,OAAO7E,GAC1B8E,EAASjB,EAAUiB,OAAO9E,GAC1BmI,EAAatE,EAAUkB,WAAW/E,GAExC,QAAQ,GACN,KAAK6E,EACH,OAAO7E,EAASpJ,EAAU+F,cAAgB/H,EAAQwT,WAEpD,KAAKtD,EACH,OAAO9E,EAASpJ,EAAU8F,cAAgB9H,EAAQyT,WAEpD,KAAKF,EACH,OAAOnI,EAASpJ,EAAUgG,kBAAoBhI,EAAQ0T,eACxD,QACE,OAAO,KAEb,EAACzE,EASM0E,wBAAP,SACEC,EACAC,EACAC,GAEA,SAASC,EAAkB3I,GACzByI,EAAgBzI,GAChBZ,EAAMO,QAAQK,EAASpJ,EAAUO,kBAAkByL,QAAQ,SAACgG,GAC1DD,EAAkBC,EACpB,GACAF,EAAgB1I,EAClB,MARe,IAAf0I,IAAAA,EAAkB,WAAQ,GAU1BF,EAAU5F,QAAQ,SAACgG,GACjBD,EAAkBC,EACpB,EACF,EAAC/E,EAEMgF,qBAAP,SAA4BL,GAC1B,IAAIM,GAAS,EAEPC,EAAsB,KACxBC,EAAS,GAsFb,OANAnF,EAAU0E,wBACRC,EA/EF,SAAyBI,GAEvB,IAAMK,EANY,OAMMC,OADxBJ,GAAS,GAELK,EAAgB,GAElBP,EAAEhS,EAAU4E,mBACXoN,EAAEhS,EAAU6E,4BAEb0N,EACEF,EACAF,EACA,aACAH,EAAEhS,EAAU4E,iBACZ,KACOoN,EAAEhS,EAAU6E,8BACrB0N,EACEF,EACAF,EACA,mCACAH,EAAEhS,EAAU6E,4BACZ,MA2CJuN,GAAUC,EAAML,EAAE,8CAAgD,KAClEI,GAzCkBJ,EAAEhS,EAAU2C,kBAC1B0P,EACAF,EACA,gBACAH,EAAEhS,EAAU2C,kBACZ,KACA,GAoCJyP,GAAUG,EACVH,GAnCcJ,EAAEhS,EAAU6D,SACtBwO,EAAMF,EAAsB,YAAcH,EAAEhS,EAAU6D,SAAW,KACjE,GAkCJuO,GAhCWJ,EAAEhS,EAAUa,YACnBwR,EAAMF,EAAsB,SAAWH,EAAEhS,EAAUa,YAAc,KACjE,GA+BJuR,GAbmBJ,EAAEhS,EAAU6C,IAAIE,eAC/BsP,EACAF,EACA,mDACAH,EAAEhS,EAAU6C,IAAIE,eAChB,KACA,GAQJqP,GAtBmBJ,EAAEhS,EAAU6C,IAAII,eAC/BoP,EACAF,EACA,0CACAH,EAAEhS,EAAU6C,IAAII,eAChB,KACA,GAiBJmP,GA/BwBJ,EAAEhS,EAAU0E,wBAChC2N,EACAF,EACA,uBACAH,EAAEhS,EAAU0E,wBACZ,KACA,GA0BJ0N,GAAU,IACZ,EAEA,WACEF,GAAS,CACX,GAQOE,CACT,EAACnF,EAOMmC,oBAAP,SAA2BhG,GAIzB,IAHA,IAAMoJ,EAAUxT,OAAOyT,KAAKrJ,GAG5BsJ,EAAAC,EAAAA,EAFkB3T,OAAOK,OAAOW,EAAU6C,KAEb6P,EAAAC,EAAAtU,OAAAqU,IAC3B,GAAIF,EAAQI,SADED,EAAAD,IAEZ,OACF,EAEF,OAAO,CACT,EAACzF,EAEM4F,aAAP,SAAoBzJ,GAClB,GAAIA,EAASpJ,EAAUa,YACrB,OAAOuI,EAASpJ,EAAUa,WAE9B,EAACoM,CAAA,CA1lB2B,GCJxB6F,EAAe,CAAE,EACjBC,EAA8B,GAE9BC,eAAuBvV,EAAAA,QAAMC,cAAc,IAE3CuV,GAAwB,SAACnV,GAC7B,IAAAoV,EAAwBC,EAAQA,SAACrV,EAAMY,MAAQoU,GAAxCpU,EAAIwU,EAAEE,GAAAA,EAAOF,KACpBG,EAAkDF,EAAAA,SAChDrV,EAAMwV,eAAiBP,GADlBQ,EAAiBF,EAAEG,GAAAA,EAAoBH,KAI9CI,YAAU,WACR,GAAI3V,EAAM4V,YAAa,CACrB,IAAMrE,EAAUpC,EAAUoC,QAAQ3Q,GAClCZ,EAAM4V,YAAYrE,EACpB,CACF,EAAG,IAEHoE,EAASA,UAAC,WACRL,EAAQtV,EAAMY,MAAQoU,EACxB,EAAG,CAACS,IAEJ,IAAMI,EAAa,SAACC,GACbA,GAELR,EAAOpU,OAAAC,UAAMP,EAASkV,GACxB,EAEMC,EAA0B,SAACC,EAAOF,GACtC,MAAKA,GAAUE,EAAQ,GAAKA,GAASP,EAAkBlV,QAAvD,CAEA,GAAsB,iBAAXuV,EAAqB,CAC9B,IAAMG,KAAoBC,OAAOT,GACjCQ,EAAqBD,GAAM9U,OAAAC,OACtB8U,CAAAA,EAAAA,EAAqBD,GACrBF,GAELJ,EAAqBO,EACvB,CAMA,GAJI7K,MAAM+K,QAAQL,IAChBJ,EAAqBI,GAGnB9V,EAAM4V,YAAa,CACrB,IAAMrE,EAAUpC,EAAUoC,QAAQ3Q,GAClCZ,EAAM4V,YAAYrE,EACpB,CAlB+D,CAmBjE,EAEM6E,EAAU,WACd,OAAOxV,CACT,EAEMyV,EAAuB,SAACL,GAC5B,OAAOA,QACHP,EACAA,EAAkBO,EACxB,EAEMzU,EAASC,EAAOA,QACpB,WAAA,MAAO,CACLqU,WAAAA,EACAE,wBAAAA,EACAK,QAAAA,EACAC,qBAAAA,EACD,EACD,CAACA,EAAsBD,iBAGzB,OACEzW,EAAAA,QAAA8B,cAACyT,EAAqBxT,SAAQC,GAACC,MAAOL,GAAYvB,GAC/CA,EAAMD,SAGb,EAEAoV,GAAsBtT,UAAY,CAChC9B,SAAU+B,EAAS,QAACC,QAAQC,WAC5BpB,KAAMkB,EAAS,QAACwU,OAAOtU,WACvBwT,cAAe1T,UAAUyU,MAAMvU,WAC/B4T,YAAa9T,EAAAA,QAAUG,MClFsC,IAE1CuU,gBAAYC,SAAAA,GAC/B,SAAAD,EAAYxW,GAAO,IAAA0W,EAKf,OAJFA,EAAAD,EAAAE,KAAM3W,KAAAA,IAAMqR,MAEPuF,MAAQ,CACXC,eAAgB,GAChBH,CACJ,CAP+BI,EAAAN,EAAAC,GAO9B,IAAAM,EAAAP,EAAAQ,UA+IAR,OA/IAO,EAEDE,MAAA,WACEC,UAASC,YAAY9F,KAAK+F,OAAOH,OACnC,EAACF,EAEDM,gBAAA,WACE,OAAOH,UAASC,YAAY9F,KAAK+F,MACnC,EAACL,EAEDO,mBAAA,SAAmBC,EAAWC,EAAWC,IACnCpG,KAAKqG,eAAeH,IAAclG,KAAKsG,eAAeJ,KACxDlG,KAAKuG,2BAET,EAACb,EAEDY,eAAA,SAAeJ,GACb,MAA2B,aAAhBlG,KAACrR,MAAM6X,MAA0C,aAAnBN,EAAUM,IACrD,EAACd,EAEDW,eAAA,SAAeH,GACb,MAA2B,cAAfvX,MAAM6X,MAAsC,SAAnBN,EAAUM,IACjD,EAACd,EAEDa,0BAAA,WACEvG,KAAK4F,QACL5F,KAAKgG,kBAAkBS,kBACrBzG,KAAKuF,MAAMC,eACXxF,KAAKuF,MAAMC,eAEf,EAACE,EAEDgB,mBAAA,SAAmB3W,GACjBiQ,KAAKrR,MAAMgY,SAAS5W,GACpBiQ,KAAK4G,SAAS,CACZpB,eAAgBzV,EAAE8W,OAAOC,gBAE7B,EAACpB,EAEDqB,OAAA,WACE,OAAQ/G,KAAKrR,MAAM6X,MACjB,IAAK,QACH,OAAWxG,KAACgH,eACd,IAAK,WACH,OAAWhH,KAACiH,kBACd,IAAK,SACH,OAAOjH,KAAKkH,gBACd,IAAK,WACH,YAAYC,kBACd,QACE,OAAOnH,KAAKoH,eAElB,EAAC1B,EAEDuB,gBAAA,WAAkBI,IAAAA,EAEhBrH,kBAAA,OACE1R,EAAAA,QAAA8B,cAACkX,EAAAA,KAAKC,MACJC,CAAAA,KAAK,QACLC,UAAWC,KAAKC,MAAMD,KAAKE,SAAWC,OAAOC,gCAE7CxZ,EAAA,QAAA8B,cAACkX,EAAIA,KAACS,MAAKzX,EAAA,CACTkW,KAAK,WACLwB,IAAK,SAACvI,GAAO,OAAA4H,EAAKtB,MAAQtG,CAAC,GACvBO,KAAKrR,MACT4J,CAAAA,MAAOyH,KAAKrR,MAAM4J,MAClB0P,UAAWjI,KAAKrR,MAAMuZ,WAAWC,aAElCnI,KAAKrR,MAAMuZ,WAAWE,QAG7B,EAAC1C,EAEDsB,aAAA,WAAeqB,IAAAA,EACbrI,kBAAA,OACE1R,EAAA,QAAA8B,cAACkY,EAASA,UAACd,CAAAA,KAAK,sBACdlZ,UAAA8B,cAACkX,EAAAA,KAAKS,MAAKzX,EACTkW,CAAAA,KAAK,QACLwB,IAAK,SAACvI,GAAO,OAAA4I,EAAKtC,MAAQtG,CAAC,GACvBO,KAAKrR,MAAK,CACd4J,MAAOyH,KAAKrR,MAAM4J,MAClB0P,UAAWjI,KAAKrR,MAAMuZ,WAAWC,aAElCnI,KAAKrR,MAAMuZ,WAAWE,QAG7B,EAAC1C,EAEDwB,cAAA,WAAgB,IAAAqB,EAAAvI,kBACd,OACE1R,EAAAA,QAAA8B,cAACkY,EAAAA,UAAS,CAACd,KAAK,SACbxH,KAAKwI,4BACNla,EAAAA,QAAA8B,cAACqY,EAAWA,YAAAnY,EAAA,CACVoY,GAAG,SACHT,UAAWjI,KAAKrR,MAAMuZ,WAAWC,UACjCH,IAAK,SAACvI,GAAC,OAAM8I,EAAKxC,MAAQtG,CAAC,GACvBO,KAAKrR,OAERqR,KAAKrR,MAAMD,UAEbsR,KAAKrR,MAAMuZ,WAAWE,QAG7B,EAAC1C,EAED8C,aAAA,WACE,OAAWxI,KAACrR,MAAM4J,mBAChBjK,EAAA,QAAA8B,cAACkX,EAAIA,KAACqB,MAAK,KAAE3I,KAAKrR,MAAM4J,OACtB,IACN,EAACmN,EAEDyB,gBAAA,WAAkB,IAAAyB,EAEhB5I,kBAAA,OACE1R,EAAAA,QAAA8B,cAACkY,EAAAA,UAAUd,CAAAA,KAAK,SACbxH,KAAKwI,4BACNla,EAAAA,QAAA8B,cAACqY,EAAAA,YAAWnY,EAAA,CACV0X,IAAK,SAACvI,GAAO,OAAAmJ,EAAK7C,MAAQtG,CAAC,EAC3BiJ,GAAG,YACC1I,KAAKrR,MACTsZ,CAAAA,UAAWjI,KAAKrR,MAAMuZ,WAAWC,UACjCxB,SAAU,SAAC5W,UAAM6Y,EAAKlC,mBAAmB3W,EAAE,KAE5CiQ,KAAKrR,MAAMuZ,WAAWE,QAG7B,EAAC1C,EAED0B,aAAA,WAAeyB,IAAAA,EACb7I,kBAAA,OACE1R,EAAAA,QAAA8B,cAACkY,EAAAA,UAAUd,CAAAA,KAAK,SACbxH,KAAKwI,4BACNla,EAAAA,QAAA8B,cAACqY,EAAWA,YAAAnY,GACV2X,UAAWjI,KAAKrR,MAAMuZ,WAAWC,UACjCH,IAAK,SAACvI,GAAO,OAAAoJ,EAAK9C,MAAQtG,CAAC,EAC3BiJ,GAAG,QACHI,YAAa9I,KAAKrR,MAAMma,aACpB9I,KAAKrR,MAAK,CACdgY,SAAU,SAAC5W,GAAM,OAAA8Y,EAAKnC,mBAAmB3W,EAAE,KAE5CiQ,KAAKrR,MAAMuZ,WAAWE,QAG7B,EAACjD,CAAA,CAtJ8BC,CAAS9W,EAAK,QAACya,WAyJhD5D,GAAa3U,UAAY,CACvBgW,KAAM/V,EAAS,QAACuY,OAChBzQ,MAAO9H,UAAUwU,OACjB1U,MAAOE,EAAAA,QAAUwY,IACjBtC,SAAUlW,EAAAA,QAAUG,KACpBsY,KAAMzY,EAAS,QAACuY,OAChBd,WAAYzX,EAAS,QAACwU,OACtB6D,YAAarY,UAAUuY,QAGzB7D,GAAagE,aAAe,CAC1B3C,KAAM,QCzKR,IAAApY,GAAA,CAAA,YAIMgb,gBAAuB9a,EAAK,QAACC,cAAc,IAE3C4a,GAAe,CACnBE,WAAY,CACVC,eAAgBnE,IAElBoE,kBAAmB,CACjBC,eAAgB,CACdnH,WAAY,aACZC,WAAY,QACZC,eAAgB,uBAElBkH,UAAU,GAEZ5a,QAAS,CACPqO,KAAM,CAAE5E,OAAQ,MAChBoR,WAAW,EACXC,WAAY,CAAA,EACZC,qBAAqB,EACrBC,mBAAmB,EACnBC,sBAAsB,EACtBC,aAAc,IAIZC,GAA+B,SAAHvb,GAAM,IAAAC,EAAQD,EAARC,SAAaC,EAAKC,EAAAH,EAAAL,IAClD8B,EAASC,EAAOA,QACpB,WAAO,MAAA,CACLmZ,eACG3a,EAAM0a,YAAc1a,EAAM0a,WAAWC,gBACtCH,GAAaE,WAAWC,eAC1BC,kBAAiB1Z,OAAAC,OAAA,CAAA,EACZqZ,GAAaI,kBACb5a,EAAM4a,mBAEX1a,QAAOgB,OAAAC,OAAOqZ,GAAAA,GAAata,QAAYF,EAAME,SAC7Cob,aAActb,EAAMsb,aACrB,EACD,CAACtb,iBAGH,OACEL,EAAAA,QAAA8B,cAACgZ,GAAqB/Y,SAAQ,CAACE,MAAOL,GACnCxB,EAGP,EAEAsb,GAA6BxZ,UAAY,CACvC9B,SAAU+B,EAAS,QAACC,QAAQC,WAC5B0Y,WAAY5Y,EAAS,QAACwU,OACtBgF,aAAcxZ,EAAAA,QAAUG,KACxB/B,QAAS4B,EAAAA,QAAUwU,YCxDrBiF,GAAAC,8pDCMaC,gBAAc9b,EAAK,QAACC,cAAc,CAAA,GAOzC8b,GAAsB,SAAH5b,GACvB,IAAQ6b,EAAA7b,EACR6J,OAAAA,OAASiS,IAAHD,EAAGC,UAAUC,SAAQF,EAEvBG,EAAOjS,GAKX,OAJIF,IAAWzH,EAAUuH,KAAKC,GAAGC,SAC/BmS,EAAOpS,IAIPqS,MAACN,GAAY/Z,SAAQ,CAACE,MAAO,CAAE+H,OAAAA,EAAQmS,KAAAA,GAAM/b,SAC3Cgc,MAACC,EAAAA,aAAa,CAAArS,OAAQA,EAAQsS,SAAUH,EACrC/b,SAXCD,EAARC,YAeF,y+BC3BqBmc,gBAAoBA,WAAAA,SAAAA,IAAAA,CAStC,OATsCA,EAMhCC,aAAP,WAEE,OAAOhP,KAAKiP,MAAMjP,KAAKC,UAAUiP,IACnC,EAACH,CAAA,CATsCA,GFGnCI,GAAY,CAChBC,MAAIhB,MAAAA,GACDrZ,EAAUiE,kBAAmBjE,EAAUM,KAAI+Y,IAE9CiB,iBAAkB,CAChBta,EAAUO,gBACVP,EAAUwE,eACVxE,EAAUQ,WACVR,EAAUuF,oBACVvF,EAAUS,WACVT,EAAU0F,cAIO6U,oCAAkBA,IAAAA,CA2FpCA,OA3FoCA,EAW9BC,YAAP,SAAmBtF,EAAOuF,EAAOC,GAC/B,GAAIC,UAAUtc,OAAS,EACrB,OAAOM,EAAOic,SAAS,WACrBF,EAAS,IAAIG,UAAU,uCACzB,GAGY,OAAVJ,IAEFA,EAAQL,IAUVzb,EAAOmc,QAAQ5F,EAAO,KAAM,KALF,SAAChW,EAAG6b,GAG9B,EAGF,EAACR,EAEMS,gBAAP,SAAuB7N,GACrB,IAAIkN,EACEY,EAAe,GAErB9N,EAAU,UAAUnB,QAAQ,SAACkP,GAC3BD,EAAaC,EAAK,QAAUA,EAExBjO,EAAUC,OAAOgO,KACnBb,EAAOa,EAEX,GAEA,IACE/L,KAAKgM,aAAad,EAAMD,GAAWa,EACrC,CAAE,MAAO/b,GACP9B,QAAQE,MACN,UACE4B,EACA,gEAEN,CAEA,OAAO+b,CACT,EAACV,EAEMY,aAAP,SAAoBC,EAAYX,EAAO/O,OACjC2P,EACAC,EACAC,EAH+C/G,EAAArF,KAKnDsL,EAAMH,iBAAiBtO,QAAQ,SAACwP,GAC9B,GAAIJ,EAAWhR,eAAeoR,GAAO,CACnCJ,EAAWI,GAAQhT,EAAMO,QAAQqS,EAAWI,IAC5CH,EAAaD,EAAWI,GAExB,IAAK,IAAI3S,EAAI,EAAGA,EAAIwS,EAAWhd,OAAQwK,IACrC0S,EAAU/G,EAAKiH,OAAOJ,EAAWxS,SAGnBiE,KAFdwO,EAAQ5P,EAAa6P,KAGnBF,EAAWxS,GAAKyS,EAEhB9G,EAAK2G,aAAaG,EAAOb,EAAO/O,IAEhCtO,QAAQC,KACN,mBAAqBke,EAAU,kCAIvC,CACF,EACF,EAAChB,EAEMkB,OAAP,SAAcC,GACZ,MAA0B,iBAAfA,EACFA,EAEFA,EAAW,MACpB,EAACnB,CAAA,IAAAjB,GA3FkBiB,GAAAA,GA6FZoB,kBAAoB,SAACC,GAC1B,IAAIC,EAAe,GACfC,EAAa,IAAIC,IAWrB,OATAF,EAAevC,GAAK0C,eAAeJ,EAAUC,EAAcC,IAE/B3P,KAAK,SAACG,EAAGC,GACnC,OAAID,EAAE,QAAUC,EAAE,OACTD,EAAE,OAAO2P,cAAc1P,EAAE,QAE3B,CACT,EAGF,EA3GmBgO,GA6GZyB,eAAiB,SAACZ,EAAYS,EAAcC,GAwBjD,OAvBKA,EAAWI,IAAId,EAAW,UAC7BS,EAAa9c,KAAKqc,GAClBU,EAAWjQ,IAAIuP,EAAW,SAG5BhB,GAAUE,iBAAiBtO,QAAQ,SAACwP,GAClC,GAAIJ,EAAWhR,eAAeoR,GAG5B,IAFA,IAAMH,EAAaD,EAAWI,GAErB3S,EAAI,EAAGA,EAAIwS,EAAWhd,OAAQwK,IAAK,CAC1C,IAAMyS,EAAQD,EAAWxS,QAEXiE,IAAVwO,IACFD,EAAWxS,GAAKyS,EAEhBO,EAAevC,GAAK0C,eAAeV,EAAOO,EAAcC,GAExDV,EAAWI,GAAM3S,GAAK,CAAE,MAAOyS,EAAM,QAEzC,CAEJ,GAEOO,CACT,EGlJoD,IAEjCM,gBAAaA,WAAAA,SAAAA,IAAAA,CAoH/B,OApH+BA,EAQzBC,qBAAP,SAA4B/P,GAC1B,IAAMgQ,EAAkBrC,GAAqBC,eAE7C,OAAOkC,EAAcG,wBAAwBD,EAAiBhQ,EAChE,EAAC8P,EAUYI,cAAaA,SAACpP,EAAWd,GAAI,IACxC,IAAImQ,EACAC,EACJ,OAAAne,QAAAC,QAAOI,EACJmc,QAAQ3N,EAAW,CAAE,GACrB1O,KAAK,SAACie,GACL,IACE,IAAAC,EACER,EAAcG,wBAAwBI,EAAoBrQ,GAC5DoQ,EAF8BE,EAE9BF,GACAD,EAAiB,CACflJ,cAJkBqJ,EAAEC,GAMxB,CAAE,MAAO1d,GACP9B,QAAQE,MACN,uEACA4B,EAEJ,CAEA,IAAKud,EAAM,CACT,IAAAI,EACEV,EAAcC,qBAAqB/P,GACrCoQ,EAF8BI,EAAA,GAG9BL,EAAiB,CACflJ,cAJkBuJ,EAAA,GAMtB,CACA,MAAO,CAACL,EAAgBC,EAC1B,GACM,MAAC,SAACnf,GAKN,OAJAF,QAAQE,MACN,mIACAA,GAEK,CAACkf,EAAgBC,EAC1B,GACJ,CAAC,MAAAvd,GAAA,OAAAZ,QAAAa,OAAAD,EAAA,CAAA,EAAAid,EAEMG,wBAAP,SAA+BnP,EAAWd,GACxC,IAAIoQ,EACAK,EACApR,EACA4H,EAAgB,GAepB,QAbsCxG,IAAlCK,EAAU,UAAU,GAAG,QACzBzB,EAAe6O,GAAmBS,gBAAgB7N,GAElDnO,OAAOyT,KAAK/G,GAAcI,IAAI,SAACiR,GAC7B1S,EAAgBC,UAAUyS,EAAKrR,EAAaqR,GAC9C,IAEA3f,QAAQC,KAAK,kCAIfyf,GADAL,EAAOtP,EAAU,UAAUJ,KAAK,SAACmO,GAAS,OAAAjO,EAAUC,OAAOgO,EAAK,IAC5Clb,EAAUO,kBAI5B,MADAtD,EAAOK,MAAM,sDACP,2BAiCR,OA9BAgW,EAAgBwJ,EAAahM,OAAO,SAACoK,GACnC,SAAIjO,EAAUI,aAAa6N,IAAUjO,EAAUW,SAASsN,MAIxDje,EAAOI,KAAK,8BAAgC6d,IACrC,EACT,IAEmB7c,SACjBpB,EAAOC,IACL,qFAGFuf,EAAKzc,EAAUO,iBAAiByL,QAAQ,SAAC5C,GACvC,OAAAkK,EAAcvU,KAAKqK,EAAS,IAKhCkK,EAAcnH,KACZ1B,EAAkB2B,iCAAiCC,IAIrD5B,EAAkBc,8BAChB+H,EACAtT,EAAUgF,wBAGL,CAACsO,EAAe,CAAE+G,KAAMoC,GACjC,EAACN,CAAA,CApH+BA,GCNba,oCAAuBA,IAAAA,CA+IzC,OA/IyCA,EAMnCC,yBAAP,SAAgCC,EAAYC,GAC1C,IAGIC,EAHEhU,EAAW,CACfI,aAAc,IAWhB,GARI0T,IACF9T,EAASiU,IAAMH,EAAW7C,KAAK,OAC/BjR,EAASkU,OAAShX,EAAYoH,gBAC5BwP,EAAW7C,KACXra,EAAUuC,oBACV,QAGA4a,EACF,IAAK,IAAItU,EAAI,EAAGA,EAAIsU,EAAS9e,OAAQwK,KAEnCuU,EACEJ,EAAwBO,+BAA+BJ,EAAStU,MAEhEO,EAASI,aAAazK,KAAKqe,GAIjC,OAAOhU,CACT,EAAC4T,EAMMO,+BAAP,SAAsCC,GACpC,OAAKA,EAGER,EAAwBS,iBAAiBD,OAClD,EAACR,EAEMS,iBAAP,SAAwBrU,GACtB,IAAMsU,EAAS,CAAA,EAQf,GANAA,EAAOL,IAAMjU,EAAS,OACtBsU,EAAOJ,OAAShX,EAAYoH,gBAC1BtE,EACApJ,EAAUuC,oBACV,OAEE6G,EAASpJ,EAAUO,iBAAkB,CACvCmd,EAAOlU,aAAe,GACtB,IAAK,IAAIX,EAAI,EAAGA,EAAIO,EAASpJ,EAAUO,iBAAiBlC,OAAQwK,IAC9D6U,EAAOlU,aAAazK,KAClBie,EAAwBS,iBACtBrU,EAASpJ,EAAUO,iBAAiBsI,IAI5C,CACA,GAAIO,EAASpJ,EAAUQ,YAAa,CAClCkd,EAAOjN,QAAU,GACZvH,MAAM+K,QAAQ7K,EAASpJ,EAAUQ,eACpC4I,EAASpJ,EAAUQ,YAAc,CAAC4I,EAASpJ,EAAUQ,cAEvD,IAAK,IAAIqI,EAAI,EAAGA,EAAIO,EAASpJ,EAAUQ,YAAYnC,OAAQwK,IACzD6U,EAAOjN,QAAQ1R,KACbie,EAAwBW,cACtBvU,EAASpJ,EAAUQ,YAAYqI,IAIvC,CAEA,GAAIO,EAASpJ,EAAU0F,aAAc,CACnCgY,EAAOE,SAAW,GACb1U,MAAM+K,QAAQ7K,EAASpJ,EAAU0F,gBACpC0D,EAASpJ,EAAU0F,aAAe,CAAC0D,EAASpJ,EAAU0F,eAExD,IAAK,IAAImD,EAAI,EAAGA,EAAIO,EAASpJ,EAAU0F,aAAarH,OAAQwK,IAC1D6U,EAAOE,SAAS7e,KACdie,EAAwBa,eACtBzU,EAASpJ,EAAU0F,aAAamD,IAIxC,CAEA,OAAO6U,CACT,EAACV,EAEMa,eAAP,SAAsBC,GACpB,IAAMJ,EAAS,CAAA,EAef,OAdAA,EAAOK,OAASzX,EAAYoH,gBAC1BoQ,EACA9d,EAAU4F,WACV,OAEF8X,EAAOhe,MAAQ4G,EAAYoH,gBACzBoQ,EACA9d,EAAU2F,mBAEZ+X,EAAOM,UAAY1X,EAAYoH,gBAC7BoQ,EACA9d,EAAU6F,cACV,OAEK6X,CACT,EAACV,EAEMW,cAAP,SAAqB7O,GACnB,IAAM4O,EAAS,CAAE,EAmBjB,OAlBAA,EAAOL,IAAMvO,EAAO,OACpB4O,EAAOJ,OAAShX,EAAYoH,gBAC1BoB,EACA9O,EAAUwC,kBACV,OAEEsM,EAAO9O,EAAU0C,kBACnBgb,EAAOO,UAAY3X,EAAYoH,gBAC7BoB,EACA9O,EAAU0C,iBACV,OAGFgb,EAAOQ,UAAY5X,EAAYoH,gBAC7BoB,EACA9O,EAAUyC,gBAGPib,CACT,EAACV,EAMMmB,eAAP,SAAsB/U,GACpB,IAAM0F,EAAS,CAAE,EAEjB,OADAA,EAAO9O,EAAUyC,gBAAkB,GAC5BqM,CACT,EAACkO,CAAA,IC7IGoB,GAAiB,SAACtgB,GACtB,IAAAugB,EACEC,aAAW/F,iBAIb,OAAO9a,EAAAA,QAAM8B,cALS8e,EAAd5F,eAKmC,CACzC9C,KAAM,WACNjO,MAAO5J,EAAM4J,MACb6W,MAAOzgB,EAAMygB,MACbC,SAAyB,IAAhB1gB,EAAM4B,OAAkC,SAAhB5B,EAAM4B,MACvC2X,WAAYvZ,EAAMuZ,WAClBvB,SAAU,SAAC5W,GACTpB,EAAMgY,SAAS5W,EAAE8W,OAAOwI,QAC1B,EACAC,SAduCJ,EAAjB3F,kBAcME,UAAY3L,EAAUU,WAXnC7P,EAAMsL,WAazB,EAEAgV,GAAeze,UAAY,CACzByJ,SAAUxJ,UAAUwU,OAAOtU,WAC3B4H,MAAO9H,EAAAA,QAAUwU,OAAOtU,WACxBye,MAAO3e,EAAAA,QAAUuY,OACjBzY,MAAOE,EAAAA,QAAU8e,UAAU,CAAC9e,EAAS,QAACuY,OAAQvY,EAAAA,QAAU+e,OACxD7I,SAAUlW,EAAAA,QAAUG,KAAKD,WACzB8e,WAAYhf,EAAS,QAAC+e,KACtBtH,WAAYzX,EAAS,QAACwU,QCtBxB,IAAMyK,GAAiB,SAAC/gB,GACtB,IAAQ4a,EAAsB4F,EAAAA,WAAW/F,IAAjCG,kBACRxF,EAAwBC,EAAAA,SAAS,MAA1B2L,EAAI5L,EAAE6L,GAAAA,EAAO7L,EACpB,GAAAG,EAAwCF,EAAQA,SAAC,IAA1C6L,EAAY3L,EAAE4L,GAAAA,EAAe5L,EAEpC,GAAM7B,EAAavE,EAAUoE,sBAC3BvT,EAAMsL,SACNtL,EAAM4B,MACNgZ,EAAkBC,gBAGd1K,EAAShB,EAAUgB,OAAOnQ,EAAMsL,UAChC8E,EAASjB,EAAUiB,OAAOpQ,EAAMsL,UAChC8V,EAAoBjS,EAAUmB,YAAYtQ,EAAMsL,UAEtDqK,EAASA,UAAC,WACR,IAAM0L,EAAaC,EAAUthB,EAAM4B,OAC/Byf,EACFJ,EAAQI,IAERJ,EAAQ,MACRE,EAAe,sBACSnhB,EAAM4B,MAAK,gBAAgB5B,EAAMsL,SAAS,OAClE,KACAhM,QAAQE,MAAM0hB,GAElB,EAAG,CAAClhB,EAAM4B,MAAO8R,IAEjB,IAAM4N,EAAY,SAAC1f,GACjB,IAAKA,EAAO,OAAO,KAEnB,IAAM2f,EAASH,EACX,IAAII,KAAK5f,GACTwa,EAAKA,MAACxa,EAAO8R,EAAY,IAAI8N,MACjC,OAAOC,MAAMF,EAAOG,WAAa,KAAOH,CAC1C,eAaA,OACE5hB,EAAA,QAAA8B,cAACkY,EAASA,UAAA,CAACd,KAAK,sBACdlZ,EAAAA,QAAA8B,cAACkX,EAAIA,KAACqB,MAAK,CAACV,UAAW,SAAUtZ,EAAM4J,oBACvCjK,EAAA,QAAA8B,cAACkgB,UACCC,CAAAA,SAAUZ,EACVa,gBAAiBnO,EACjBsE,SAjBmB,SAAC8J,GACxBb,EAAQa,GACR,IAAMC,EAAYD,EACdV,EACEU,EAAaJ,UACbM,EAAMA,OAACF,EAAcpO,GACvB,GAEJ1T,EAAMgY,SAAS+J,EACjB,EASME,gBAAiB9R,EACjB+R,mBAAoB9R,EACpBuD,WAAW,QACXwO,cAAe,EACfC,YAAY,OACZ1O,WAAYA,EACZ4F,UAAW+I,EAAAA,QAAW,eAAgBriB,EAAMuZ,WAAWC,WACvDmH,SACE/F,EAAkBE,UAAY3L,EAAUU,WAAW7P,EAAMsL,YAG5DtL,EAAMuZ,WAAWE,QAGxB,EAEAsH,GAAelf,UAAY,CACzByJ,SAAUxJ,EAAAA,QAAUwU,OAAOtU,WAC3B4H,MAAO9H,UAAUwU,OAAOtU,WACxBye,MAAO3e,EAAAA,QAAUuY,OACjBzY,MAAOE,EAAAA,QAAU8e,UAAU,CAAC9e,EAAAA,QAAUuY,OAAQvY,EAAS,QAACwgB,SACxDtK,SAAUlW,EAAAA,QAAUG,KAAKD,WACzBuX,WAAYzX,EAAAA,QAAUwU,QCtFxB,IAUMiM,GAAoB,CACxBrgB,EAAU6C,IAAIK,IACdlD,EAAU6C,IAAIM,QACdnD,EAAU6C,IAAIQ,qBACdrD,EAAU6C,IAAIS,qBACdtD,EAAU6C,IAAIO,iBACdpD,EAAU6C,IAAIU,iBACdvD,EAAU6C,IAAIW,MACdxD,EAAU6C,IAAIY,eACdzD,EAAU6C,IAAIa,gBAMV4c,GAAe,GACrBA,GAAatgB,EAAU6C,IAAIQ,sBAAwB,CAAEkd,IAAK,GAC1DD,GAAatgB,EAAU6C,IAAIS,sBAAwB,CAAEkd,IAAK,GAC1DF,GAAatgB,EAAU6C,IAAIO,kBAAoB,CAAEod,KAAM,GACvDF,GAAatgB,EAAU6C,IAAIU,kBAAoB,CAAEgd,IAAK,GAEtD,IAAME,GAAa,CACjB,WAAY,WACZC,KAAM,OAGFC,oCAAuBA,IAAAA,CAuG1B,OAvG0BA,EACpBC,kBAAP,SAAyBxX,EAAU1J,GACjC,OACEuN,EAAUsB,cAAcnF,IACxB6D,EAAUuB,cAAcpF,IACxB6D,EAAUY,WAAWzE,EAAU1J,GAExB,WACEihB,EAAwBE,WAAWzX,GACrC,SAEF,MACT,EAACuX,EAEME,WAAP,SAAkBzX,GAChB,IAAK,IAAIP,EAAI,EAAGiY,EAAMT,GAAkBhiB,OAAQwK,EAAIiY,EAAKjY,IACvD,GACEvC,EAAY8G,SACVhE,EACApJ,EAAUgE,aACVqc,GAAkBxX,IAGpB,OAAO,EAGX,QACF,EAAC8X,EAEMI,uBAAP,SAA8B3X,EAAU1J,EAAOgZ,GAC7C,IAAI5a,EAAQ,GAEZ,OADAA,EAAM6X,KAAOgL,EAAwBC,kBAAkBxX,EAAU1J,GACzD5B,EAAY,MAClB,IAAK,WACHA,EAAMkjB,KAAO,EACb,MACF,IAAK,SACHljB,EAAKkB,OAAAC,OAAA,CAAA,EACAnB,EACA6iB,EAAwBM,2BAA2B7X,GACnD+F,KAAK+R,wBAAwB9X,IAStC,OAHAtL,EAAM2gB,SACJ/F,EAAkBE,UAAY3L,EAAUU,WAAWvE,GAE9CtL,CACT,EAAC6iB,EAEMO,wBAAP,SAA+B9X,GAC7B,IAAI+X,EAAc,GAOlB,YANiCrU,IAA7B1D,EAASpJ,EAAU4D,QACrBud,EAAkB,KAAI7a,EAAYoH,gBAChCtE,EACApJ,EAAU4D,OAGPud,CACT,EAACR,EAEMM,2BAAP,SAAkC7X,GAChC,IAAI+X,EAAc,CAAA,EAkBlB,OAjBAniB,OAAOoiB,oBAAoBd,IAActU,QAAQ,SAAC+Q,GAC5CzW,EAAY8G,SAAShE,EAAUpJ,EAAUgE,aAAc+Y,KACzDoE,EAAWniB,OAAAC,UAAQkiB,EAAgBb,GAAavD,IAEpD,QAC8CjQ,IAA1C1D,EAASpJ,EAAU6C,IAAII,iBACzBke,EAAiB,IAAI/X,EAASpJ,EAAU6C,IAAII,qBAEA6J,IAA1C1D,EAASpJ,EAAU6C,IAAIG,iBACzBme,EAAiB,IAAI/X,EAASpJ,EAAU6C,IAAIG,eAAiB,QAEjB8J,IAA1C1D,EAASpJ,EAAU6C,IAAIC,iBACzBqe,EAAiB,IAAI/X,EAASpJ,EAAU6C,IAAIC,eAAiB,QAEjBgK,IAA1C1D,EAASpJ,EAAU6C,IAAIE,iBACzBoe,EAAiB,IAAI/X,EAASpJ,EAAU6C,IAAIE,gBAEvCoe,CACT,EAACR,EAEMU,uBAAP,SAA8BniB,EAAGkK,GAE2B,WAAxDuX,EAAwBC,kBAAkBxX,IACxClK,EAAE6d,KAAO,KAAO7d,EAAE6d,KAAO,KAC1B,CACC,YACA,SACA,YACA,aACA,IACA,QACA,iBACA,IACA,UACAnK,SAAS1T,EAAE6d,MAEb7d,EAAEoiB,gBAEN,EAACX,CAAA,IAGGY,GAAc,SAACzjB,GACnB,IAAAugB,EACEC,aAAW/F,IADLE,EAAc4F,EAAd5F,eAAgBC,EAAiB2F,EAAjB3F,kBAGlBtP,EAAWtL,EAAMsL,SACjB0F,EAAShR,EAAMgR,OACjBpP,EAAQ5B,EAAM4B,MAYlB,OAREoP,EAAO9O,EAAU0C,mBACjBoM,EAAO9O,EAAU0C,kBAAkB4D,EAAYD,cAE/C3G,EAAQ4G,EAAYoH,gBAClBoB,EAAO9O,EAAU0C,kBACjB4D,EAAYD,0BAGT5I,UAAM8B,cAAckZ,EAAczZ,OAAAC,OAAA,CAAA,EACpC0hB,GAAwBI,uBACzB3X,EACA1J,EACAgZ,GACD,CACDrB,WAAYvZ,EAAMuZ,WAClB3P,MAAO5J,EAAM4J,MACb6W,MAAOzgB,EAAMygB,MACb7e,MAAgB,MAATA,EAAgB,GAAKA,EAC5BuY,YAAahL,EAAU4F,aAAazJ,GACpCoY,WAAY,SAACtiB,GACX,OAAAyhB,GAAwBU,uBAAuBniB,EAAGkK,EAAS,EAC7D0M,SAAU,SAAC5W,GACTpB,EAAMgY,SAAS5W,EAAE8W,OAAOtW,QACpB5B,EAAM2jB,QAAU3jB,EAAM4jB,eA/KhCvS,GA+K6CwS,MACzC,EACAC,QAAS,SAAC1iB,GACR,GAAIpB,EAAM2jB,OAAQ,CAChB,IAAMI,EAAQC,EAAAA,QAAMC,aAAa7iB,EAAE8W,QACnC6L,EAAMG,SAAStiB,GACfmiB,EAAMI,GAAG,SAAU,WACjBnkB,EAAMgY,SAAS+L,EAAMK,WACvB,GACAJ,EAAAA,QAAMK,eAAeC,SAASC,qBAAuB,SACnDR,EACAS,GAEA,GAAKT,EAAMU,eAAeC,QAAQF,IAE/BT,EAAM7jB,QAAQukB,iBAC0C,IAAzDV,EAAM7jB,QAAQukB,eAAeE,QAAQH,GAFvC,CAKA,IAAMI,EAAMb,EAAMc,YAEZC,EAAQf,EAAMgB,WAAWH,GAC/B,GAA+B,aAA3BjC,GAAWmC,EAAMjN,MAAsB,CACzC,IAAMmN,EAAaF,EAAMzK,OAAOsK,QAAQ,KACxC,IAAoB,IAAhBK,EAAmB,CAGrB,IAAMC,EAAuBlB,EAC1BmB,sBAAsBN,EAAIO,KAAML,GAChCzK,OAAO+K,cACJC,EAAgBtB,EAAMgB,WAAW,CACrCI,KAAMP,EAAIO,KACVG,GAAIR,EAAMS,QAEZ,GAC2B,WAAzBN,IACwB,OAAvBI,EAAcxN,MAAuC,MAAtBwN,EAAcxN,MAC9C,CAGA,IAAM2N,EAAgBV,EAAMzK,OAAOoL,UAAU,EAAGT,EAAa,GAE7D,GAAiD,MAD3BjB,EAAM2B,uBACVF,EAAcG,MAAM,GAAI,IAExC,GACE3lB,EAAMsL,SAASpJ,EAAUuF,sBACzBzH,EAAMsL,SAASpJ,EAAUuF,qBAAqBuL,OAC5C,SAAC4S,GAAC,OAAKA,EAAE1jB,EAAUwF,UAAY8d,EAAcG,MAAM,GAAI,EAAE,GACzDplB,OACF,CACA,IAAMslB,EAAS7lB,EAAMsL,SACnBpJ,EAAUuF,qBACVuL,OACA,SAAC4S,GAAC,OAAKA,EAAE1jB,EAAUwF,UAAY8d,EAAcG,MAAM,GAAI,EAAE,GAErDG,EAAK,GACXA,EAAGD,EAAO,GAAG3jB,EAAUwF,SACrBme,EAAO,GAAG3jB,EAAUyF,WACtBoc,EAAMgC,YAAYD,EACpB,KAAO,CACL,IAAME,EAAcjC,EAAMU,eACvBC,QAAQF,GACRyB,aAAaT,GACZQ,EAAYzlB,OAAS,GACvBwjB,EAAMgC,YAAYC,EAAY,GAElC,CAEJ,CACF,CACF,CAnDA,CAoDF,CACF,MAAO,GAAIhmB,EAAM4jB,OAAQ,CACvBtkB,QAAQF,IAAI,OACZ,IAAM8mB,EAAOC,UAAKlC,aAAa7iB,EAAE8W,QACjCgO,EAAKhC,SAAStiB,GACdskB,EAAK/B,GAAG,SAAU,WAChBnkB,EAAMgY,SAASkO,EAAK9B,WACtB,EACF,CACF,IAEJ,EAEAX,GAAY5hB,UAAY,CACtByJ,SAAUxJ,EAAAA,QAAUwU,OAAOtU,WAC3BgP,OAAQlP,EAAAA,QAAUwU,OAAOtU,WACzB4H,MAAO9H,EAAAA,QAAUwU,OAAOtU,WACxBye,MAAO3e,EAAS,QAACuY,OACjBzY,MAAOE,EAAAA,QAAU8e,UAAU,CAAC9e,EAAS,QAACuY,OAAQvY,UAAUwgB,SACxDtK,SAAUlW,EAAAA,QAAUG,KAAKD,WACzBuX,WAAYzX,EAAS,QAACwU,QC1QxB,IAAM8P,GAAe,CACnBC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KAGgBC,gBAAUA,WAAAA,SAAAA,IAAAA,CAqB5B,OArB4BA,EAUtBC,QAAP,SAAeC,GACb,IAAKA,EACH,OAAOA,EAIT,IAFA,IACEC,EADElH,EAAS,GAEJ7U,EAAI,EAAGiY,EAAM6D,EAAKtmB,OAAQwK,EAAIiY,EAAKjY,IAC1C+b,EAAYD,EAAKE,OAAOhc,GACxB6U,GAAUwG,GAAaU,GAAaV,GAAaU,GAAaA,EAEhE,OAAOlH,CACT,EAAC+G,CAAA,CArB4BA,GCT/BlnB,GAAA,CAAA,OAAA,eAoBA,SAASunB,GAAaC,GACpB,IAAI1B,EACA2B,EACAC,EACAC,EAEJ,QAA0BpY,IAAtBiY,EAAG9O,eACLoN,EAAQ0B,EAAG9O,eACX+O,EAAMD,EAAGI,kBAET,IACEJ,EAAGhQ,QAEHmQ,GADAD,EAAUF,EAAGK,mBACGC,YAEhBJ,EAAQK,eAAeC,SAASC,UAAUC,cAAcC,eACxDR,EAAMS,YAAY,aAAcV,GAGhCD,GADA3B,EAAQ6B,EAAMU,KAAKvnB,QACL4mB,EAAQW,KAAKvnB,MAC7B,CAAE,MAAOa,IAKX,MAAO,CAAEmkB,MAAAA,EAAO2B,IAAAA,EAClB,CAoBC,IAEoBa,gBAAWtR,SAAAA,GAC9B,SAAAsR,EAAY/nB,OAAO0W,EAQd,OAPHA,EAAAD,EAAAE,KAAAtF,KAAMrR,IAAMqR,MA6Cd2W,eAAiB,SAAChoB,GAChB0W,EAAKmQ,KAAKoB,WAAWtB,GAAWC,QAAQ5mB,EAAM6mB,MAAO,CACnDjlB,MAAO8U,EAAKmQ,KAAKqB,cACjBR,UAAWV,GAAatQ,EAAKU,QAEjC,EAACV,EAEDyR,qBAAuB,WACrBzR,EAAKmQ,KAAKa,UAAYV,GAAatQ,EAAKU,MAC1C,EAACV,EAED0R,sBAAwB,YA9E1B,SAAsBnB,EAAIS,GACxB,IAAIP,EAEJ,SAC4BnY,IAAtBiY,EAAG9O,gBACL8O,EAAGhQ,QACHgQ,EAAGnP,kBAAkB4P,EAAUnC,MAAOmC,EAAUR,OAEhDD,EAAGhQ,SACHkQ,EAAUF,EAAGK,mBACLe,UAAS,GACjBlB,EAAQmB,UAAU,YAAaZ,EAAUnC,OACzC4B,EAAQoB,QAAQ,YAAab,EAAUR,IAAMQ,EAAUnC,OACvD4B,EAAQqB,SAEZ,CAAE,MAAOpnB,GAAG,CAGd,CA6DIqnB,CAAa/R,EAAKU,MAAOV,EAAKmQ,KAAKa,UACrC,EAAChR,EAEDgS,UAAY,SAACtnB,GACX,IAAMunB,EAAYjS,EAAKmQ,KAAKzC,WAC5B,GAAIhjB,EAAE8W,OAAOtW,QAAU+mB,EAAW,CAEhC,GAAIvnB,EAAE8W,OAAOtW,MAAMrB,OAASooB,EAAUpoB,OAAQ,CAC5C,IAAMqoB,EAAWD,EAAUpoB,OAASa,EAAE8W,OAAOtW,MAAMrB,OACnDmW,EAAKyR,uBACLzR,EAAKmQ,KAAKa,UAAUR,IAAMxQ,EAAKmQ,KAAKa,UAAUnC,MAAQqD,EACtDlS,EAAKmQ,KAAKgC,WACZ,CACA,IAAMjnB,EAAQ8U,EAAKoS,mBACnB1nB,EAAE8W,OAAOtW,MAAQA,EACbA,GACF8U,EAAK0R,uBAET,CACI1R,EAAK1W,MAAMgY,UACbtB,EAAK1W,MAAMgY,SAAS5W,EAExB,EAACsV,EAEDqS,WAAa,SAAC3nB,GACZ,GA9IJ,SAAgBA,GACd,OAAOA,EAAE4nB,SAJO,KAII5nB,EAAE6nB,OACxB,CA4IQC,CAAO9nB,GACTA,EAAEoiB,iBACE9M,EAAKmQ,KAAKsC,SACZ/nB,EAAE8W,OAAOtW,MAAQ8U,EAAKoS,mBACtBpS,EAAK0R,wBAED1R,EAAK1W,MAAMgY,UACbtB,EAAK1W,MAAMgY,SAAS5W,SAGnB,GApJX,SAAgBA,GACd,OAAOA,EAAE4nB,SAPO,KAOI5nB,EAAE6nB,OACxB,CAkJeG,CAAOhoB,GAChBA,EAAEoiB,iBACE9M,EAAKmQ,KAAKwC,SACZjoB,EAAE8W,OAAOtW,MAAQ8U,EAAKoS,mBACtBpS,EAAK0R,wBACD1R,EAAK1W,MAAMgY,UACbtB,EAAK1W,MAAMgY,SAAS5W,SAGnB,GAAc,cAAVA,EAAE6d,MACX7d,EAAEoiB,iBACF9M,EAAKyR,uBACDzR,EAAKmQ,KAAKgC,aAAa,CACzB,IAAMjnB,EAAQ8U,EAAKoS,mBACnB1nB,EAAE8W,OAAOtW,MAAQA,EACbA,GACF8U,EAAK0R,wBAEH1R,EAAK1W,MAAMgY,UACbtB,EAAK1W,MAAMgY,SAAS5W,EAExB,CAEJ,EAACsV,EAED4S,YAAc,SAACloB,GAGTA,EAAEmoB,SAAWnoB,EAAEooB,QAAUpoB,EAAE4nB,SAAqB,UAAV5nB,EAAE6d,MAI5C7d,EAAEoiB,iBACF9M,EAAKyR,uBACDzR,EAAKmQ,KAAKzP,MAAMhW,EAAE6d,OACpB7d,EAAE8W,OAAOtW,MAAQ8U,EAAKmQ,KAAKzC,WAC3B1N,EAAK0R,wBACD1R,EAAK1W,MAAMgY,UACbtB,EAAK1W,MAAMgY,SAAS5W,IAG1B,EAACsV,EAED+S,SAAW,SAACroB,GACVA,EAAEoiB,iBACF9M,EAAKyR,uBAEDzR,EAAKmQ,KAAK6C,MAAMtoB,EAAEuoB,cAAcvT,QAAQ,WAC1ChV,EAAE8W,OAAOtW,MAAQ8U,EAAKmQ,KAAKzC,WAE3BwF,WAAWlT,EAAK0R,sBAAuB,GACnC1R,EAAK1W,MAAMgY,UACbtB,EAAK1W,MAAMgY,SAAS5W,GAG1B,EAjJEsV,EAAKmQ,KAAO,IAAIgD,EAAAA,QAAU,CACxBC,QAASnD,GAAWC,QAAQ5mB,EAAM6mB,MAClCjlB,MAAO5B,EAAM4B,MACbmoB,iBAAkB/pB,EAAM+pB,iBACxBC,gBAAiBhqB,EAAMgqB,iBAAmB,MACzCtT,CACL,CAV8BI,EAAAiR,EAAAtR,GAU7B,IAAAM,EAAAgR,EAAA/Q,UA+KA+Q,OA/KAhR,EAEDO,mBAAA,SAAmBC,GACbA,EAAUsP,OAASxV,KAAKrR,MAAM6mB,MAChCxV,KAAK2W,eAAe3W,KAAKrR,OAIzBuX,EAAUsP,OAASxV,KAAKrR,MAAM6mB,MAC9BtP,EAAU3V,QAAUyP,KAAKrR,MAAM6mB,KAM3BxV,KAAKwV,KAAKzC,aAAe/S,KAAKwV,KAAKoD,WACrC5Y,KAAKwV,KAAKoB,WAAWtB,GAAWC,QAAQvV,KAAKrR,MAAM6mB,MAAO,CACxDjlB,MAAOyP,KAAKrR,MAAM4B,QAGpByP,KAAKwV,KAAKoB,WAAWtB,GAAWC,QAAQvV,KAAKrR,MAAM6mB,MAAO,CACxDjlB,MAAOyP,KAAKwV,KAAKqB,gBAGZ3Q,EAAUsP,OAASxV,KAAKrR,MAAM6mB,KACvCxV,KAAKwV,KAAKoB,WAAWtB,GAAWC,QAAQvV,KAAKrR,MAAM6mB,MAAO,CACxDjlB,MAAOyP,KAAKwV,KAAKqB,gBAEV3Q,EAAU3V,QAAUyP,KAAKrR,MAAM4B,OACxCyP,KAAKwV,KAAK3C,SAAS7S,KAAKrR,MAAM4B,OAG5B2V,EAAUsP,OAASxV,KAAKrR,MAAM6mB,MAAQxV,KAAKwV,KAAKa,UAAUnC,OAC5DlU,KAAK+W,uBAET,EAACrR,EA0GD+R,iBAAA,WACE,IAAMlnB,EAAQyP,KAAKwV,KAAKzC,WACxB,OAAOxiB,IAAUyP,KAAKwV,KAAKoD,WAAa,GAAKroB,CAC/C,EAACmV,EAEDE,MAAA,WACE5F,KAAK+F,MAAMH,OACb,EAACF,EAEDmT,KAAA,WACE7Y,KAAK+F,MAAM8S,MACb,EAACnT,EAEDqB,OAAA,WAASM,IAAAA,OACPyR,EAAwC9Y,KAAKrR,MAArC6Y,EAAIsR,EAAJtR,KAAMsB,EAAWgQ,EAAXhQ,YAAgBna,EAAKC,EAAAkqB,EAAA1qB,IACjC2qB,EAAgB/Y,KAAKwV,KAAKiD,QAAQvpB,oBAEpC,OAAOZ,EAAAA,QAAM8B,cAAc4P,KAAKgZ,QAAQ1P,eAAczZ,OAAAC,OAAA,CAAA,EACjDnB,EACHqZ,CAAAA,IAAK,SAACiR,GACAA,IACF5R,EAAKtB,MAAQkT,EAAElT,MAAQF,UAASC,YAAYmT,EAAElT,OAASkT,EAE3D,EACAC,UAAWH,EACXpS,SAAU3G,KAAKqX,UACf8B,UAAWnZ,KAAK0X,WAChBrF,WAAYrS,KAAKiY,YACjBmB,QAASpZ,KAAKoY,SACdtP,YAAaA,GAAe9I,KAAKwV,KAAKoD,WACtCpR,KAAMA,GAAQuR,EACdxoB,MAAOyP,KAAKyX,mBACZjR,KAAM,SAEV,EAACkQ,CAAA,CAzL6BtR,CAAS9W,EAAAA,QAAMya,WA4L/C2N,GAAY2C,YAAcjQ,GAE1BsN,GAAYlmB,UAAY,CACtBglB,KAAM/kB,EAAS,QAACuY,OAAOrY,YAGzB+lB,GAAYvN,aAAe,CACzB5Y,MAAO,IC5PT,IAAM+oB,GAAoB,SAAC3qB,GACzB,IAAQ4a,EAAsB4F,aAAW/F,IAAjCG,kBAEFtP,EAAWtL,EAAMsL,SACjB1J,EAAQ5B,EAAM4B,MACdilB,EAAOre,EAAYoH,gBAAgBtE,EAAUpJ,EAAUa,YAE7D,OAAK8jB,eAMHlnB,EAAA,QAAA8B,cAACsmB,GACClB,CAAAA,KAAMA,EACNjlB,MAAOA,EACPgI,MAAO5J,EAAM4J,MACb6W,MAAOzgB,EAAMygB,MACbtG,YAAa0M,EACb7O,SAAU,SAAC5W,GAAM,OAAApB,EAAMgY,SAAS5W,EAAE8W,OAAOtW,MAAM,EAC/C+e,SAAU/F,EAAkBE,UAAY3L,EAAUU,WAAWvE,GAC7DiO,WAAYvZ,EAAMuZ,cAbpBpa,EAAOI,KAAK,wEACLI,EAAA,QAAA8B,cAACgiB,GAAgBzjB,GAe5B,EAEA2qB,GAAkB9oB,UAAY,CAC5ByJ,SAAUxJ,EAAS,QAACwU,OAAOtU,WAC3BgP,OAAQlP,EAAAA,QAAUwU,OAAOtU,WACzB4H,MAAO9H,EAAAA,QAAUwU,OAAOtU,WACxBye,MAAO3e,EAAS,QAACuY,OACjBzY,MAAOE,EAAAA,QAAU8e,UAAU,CAAC9e,EAAAA,QAAUuY,OAAQvY,UAAUwgB,SACxDtK,SAAUlW,EAAS,QAACG,KAAKD,WACzBuX,WAAYzX,EAAAA,QAAUwU,QCtCmD,IAEtDsU,gBAAYnU,SAAAA,GAAA,SAAAmU,IAAAnU,OAAAA,EAAAoU,MAAAxZ,KAAAwL,YAAA9F,IAAAA,CAAAD,EAAA8T,EAAAnU,GAAAM,IAAAA,EAAA6T,EAAA5T,UAgD9B4T,OAhD8B7T,EAC/B+T,uBAAA,SAAuB5qB,GACrB,IAAM6qB,EAAW,GACjB7qB,EAAQmO,KAAK,SAAUG,EAAGC,GACxB,IAAMC,EAASlG,EAAYoH,gBAAgBpB,EAAGtM,EAAUqG,YACtDqG,EAASpG,EAAYoH,gBAAgBnB,EAAGvM,EAAUqG,YACpD,OAAImG,EAASE,GACH,EAENF,EAASE,EACJ,EAEF,CACT,GAEA,IAAK,IAAI7D,EAAI,EAAGA,EAAI7K,EAAQK,OAAQwK,IAClCggB,EAAS9pB,kBACPtB,EAAAA,QAAA8B,cAAA,SAAA,CACEG,MAAO4G,EAAYoH,gBAAgB1P,EAAQ6K,GAAI7I,EAAUqG,YACzD0W,IAAK,OAASlU,GAEbvC,EAAYoH,gBAAgB1P,EAAQ6K,GAAI7I,EAAUqG,cAIzD,OAAOwiB,CACT,EAAChU,EAEDqB,OAAA,WAAS1B,IAAAA,OACDpL,EAAW+F,KAAKrR,MAAMsL,sBAE5B,OAAO3L,EAAAA,QAAM8B,cACX4P,KAAKgZ,QAAQ1P,eACb,CACE9C,KAAM,SACNjO,MAAOyH,KAAKrR,MAAM4J,MAClBhI,MAAOyP,KAAKrR,MAAM4B,MAClB6e,MAAOpP,KAAKrR,MAAMygB,MAClBlH,WAAYlI,KAAKrR,MAAMuZ,WACvBvB,SAAU,SAAC5W,GACTsV,EAAK1W,MAAMgY,SAAS5W,EAAE8W,OAAOtW,MAC/B,EACA+e,SACEtP,KAAKgZ,QAAQzP,kBAAkBE,UAC/B3L,EAAUU,WAAWvE,IAEzB+F,KAAKyZ,uBAAuBxf,EAASpJ,EAAUS,aAEnD,EAACioB,CAAA,CAhD8BnU,CAAS9W,UAAMya,WAmDhDwQ,GAAaF,YAAcjQ,GAE3BmQ,GAAa/oB,UAAY,CACvByJ,SAAUxJ,EAAS,QAACwU,OAAOtU,WAC3B4H,MAAO9H,UAAUwU,OAAOtU,WACxBye,MAAO3e,EAAAA,QAAUuY,OACjBzY,MAAOE,EAAAA,QAAUuY,OACjBrC,SAAUlW,EAAAA,QAAUG,KAAKD,WACzBuX,WAAYzX,EAAS,QAACwU,QCpDxB,IAAM0U,GAA0B,SAAC9qB,EAASqO,GACxC,OAAKrO,GAAYA,EAAQK,QAKzBL,EAAQmO,KAAK1B,EAAkB2B,iCAAiCC,IAGhE5B,EAAkBc,8BAChBvN,EACAgC,EAAUiF,qBAGLjH,GAZE,EAaX,EAEM+qB,GAAkB,SAACjrB,GACvB,IAAMkrB,EAAYxgB,EAAMC,cACtBwE,EAAUQ,uBAAuB3P,EAAMsL,WAGnC6f,EAAiB3K,EAAAA,WAAW9gB,GAC5B0rB,EAAuB5K,EAAUA,WAAC/F,IAElClM,EAAO6c,EAAqBlrB,QAAQqO,KAE1C6G,EAAgCC,EAAAA,UAAS,GAAlCgW,EAASjW,KAAEkW,EAAUlW,EAAA,GAC5BG,EAAsCF,EAAQA,SAAC,CAC7C2V,GAAwBhrB,EAAME,QAASqO,KADlCgd,EAAWhW,EAAEiW,GAAAA,EAAcjW,EAIlCI,GAAAA,EAASA,UAAC,WAIO,IAHX8V,GAAc,EACZngB,EAAWtL,EAAMsL,SA6BvB,OATGA,EAASpJ,EAAUS,aACpBwM,EAAUQ,uBAAuBrE,GAnBpB,WAAkB,IAAA,IAAAogB,EA+f9B,SAAgBC,EAAMC,GAC5B,IACC,IAAIhM,EAhgBIpf,QAAAC,QACoB0qB,EAAehrB,gBACnC+qB,EACA/b,EAAUQ,uBAAuBrE,KAClC3K,KAAA,SAHKT,GAIDurB,IACHH,GAAW,GACXO,EAAoB3rB,GAExB,EAwfL,CAAE,MAAMkB,GACP,OAAOwqB,GACR,CACA,OAAIhM,GAAUA,EAAOjf,KACbif,EAAOjf,UAAK,EAAQirB,GAErBhM,CACR,CAzgBqCkM,CAAA,EAUf,WACd3sB,EAAOK,MAC2D0rB,gEAAAA,EAEpE,GAAC1qB,OAAAA,QAAAC,QAAAirB,GAAAA,EAAA/qB,KAAA+qB,EAAA/qB,KAAA,WAAA,QAAA,EACH,CAAC,MAAAS,GAAA,OAAAZ,QAAAa,OAAAD,EAlBD,CAAA,CAwBEjB,IAEAmrB,GAAW,GACXO,EAAoBvgB,EAASpJ,EAAUS,cAG5B,WACX8oB,GAAc,CAChB,CACF,EAAG,IAEH,IAqDMM,EACAC,EAtDAH,EAAsB,SAACI,GAC3B,IAAKA,EACH,MAAO,GAQT,IAHA,IAGiCrgB,EAH3B1L,EAAU,CAAE,EACZgsB,EAAY,GAElBvgB,EAAAE,EAJAogB,EAAiBjB,GAAwBiB,EAAgB1d,MAIxB3C,EAAAD,KAAAG,MAAE,CAA1B,IAAAqgB,EAAMvgB,EAAAhK,MACTgI,EAAQpB,EAAYmG,aAAawd,EAAOjqB,EAAUqG,YAAagG,GAC/D6d,EAAc5jB,EAAYmG,aAC5Bwd,EAAOjqB,EAAUuG,cACjB8F,GAGFrO,EAAQisB,EAAO,QAAU,CACvB/rB,GAAI+rB,EAAO,OACXvqB,MAAOuqB,EAAO,OACdviB,MAAOA,EACPwiB,YAAaA,EACbrsB,SAAU,IAEZ,IAAA,IAA2DkM,EAA3DD,EAAAH,EAAmBnB,EAAMO,QAAQkhB,EAAOjqB,EAAUyG,aAASsD,EAAAD,KAAAF,MACzDogB,EAAUjrB,KAAK,CACb4W,KAAM,eACNwU,OAHWpgB,EAAArK,MAGI,OACf4b,MAAO2O,EAAO,QAGpB,CAEA,IAAAvX,IAAAA,EAAA0X,EAAAA,EAAqBJ,EAAStX,EAAA0X,EAAA/rB,OAAAqU,IAAE,CAA3B,IACmC2X,EAD/BC,EAAQF,EAAA1X,GACO,iBAAlB4X,EAAS3U,OACa,OAAxB0U,EAAArsB,EAAQssB,EAASH,UAAjBE,EAA0BxsB,SAASkB,KAAKurB,EAAShP,OAErD,CAEA,IAAMiP,EAAcvrB,OAAOK,OAAOrB,GAClCsrB,EAAeiB,EACjB,EAQMC,EAAWhiB,EAAMwB,iBAAiBqf,EAAa,CAAC,OAAQ,UACxDoB,EAAWjiB,EAAMwB,iBAAiBqf,EAAa,CAAC,OAAQ,uBAyB9D,OACE5rB,UAAA8B,cAACkY,EAAAA,UAAUd,CAAAA,KAAK,sBACdlZ,EAAAA,QAAA8B,cAACkX,EAAAA,KAAKqB,MAAK,KAAEha,EAAM4J,oBACnBjK,EAAAA,QAAA8B,cAACmrB,EAAAA,sBAAqB,CACpBC,QAxB+B,eAA/B7sB,EAAMuZ,WAAWC,WACnBuS,EAAc,UACdC,EAAY,yCAC4B,eAA/BhsB,EAAMuZ,WAAWC,YAC1BuS,EAAc,UACdC,EAAY,mCAEP,CACLc,QAAS,SAACC,UAAQ7rB,OAAAC,OAAA,CAAA,EACb4rB,EAAQ,CACXC,OAAQjB,EAAW,aAAgBA,EAAgBgB,EAASC,OAC5DhB,UAAWe,EAASf,UACpB,UAAW,CACTgB,OAAM,aAAejB,EACrBC,UAAWA,GAAwBe,EAASf,YAC7C,IAUDU,SAAUA,EACVC,SAAUA,EACVM,eAEE,IADAjtB,EAAMsL,SAASpJ,EAAU2G,wCApCJ,SAAC9I,gBAAQ,OAAKJ,EAAAA,QAAA8B,cAAA9B,EAAAA,QAAAutB,SAAGntB,KAAAA,EAAY,EAuC9C,KAENotB,mBAAmB,EACnBvrB,MAAO2pB,EAAYvY,OAAO,SAAC1S,GAAM,OAAKA,EAAOF,KAAOJ,EAAM4B,KAAK,GAC/DwrB,OAAO,EACPltB,QAASqrB,EACT8B,cAAc,EACdhC,UAAWA,EACXiC,aAAa,EACbC,cAAc,EACdC,iBAAkB,EAClB3d,WACEwb,GACAD,EAAqBxQ,kBAAkBE,UACvC3L,EAAUU,WAAW7P,EAAMsL,UAE7B0M,SA3D6B,SAAC1X,GAClCN,EAAMgY,SAAS1X,EAASA,EAAOF,GAAK,KACtC,EA0DMqtB,SAAS,gBAEVztB,EAAMuZ,WAAWE,QAGxB,EAEAwR,GAAgBppB,UAAY,CAC1ByJ,SAAUxJ,EAAAA,QAAUwU,OAAOtU,WAC3BgP,OAAQlP,EAAAA,QAAUwU,OAAOtU,WACzB4H,MAAO9H,EAAAA,QAAU8e,UAAU,CAAC9e,EAAS,QAACuY,OAAQvY,EAAAA,QAAUwU,SAAStU,WACjEye,MAAO3e,EAAAA,QAAUuY,OACjBzY,MAAOE,EAAS,QAACuY,OACjBrC,SAAUlW,EAAS,QAACG,KAAKD,WACzBuX,WAAYzX,EAAS,QAACwU,QCtMxB,IAAMoX,GAAgB,SAAH5tB,gBACjBH,OAAAA,EAAAA,QAAA8B,cAAA,MAAA,CACE6X,UAAU,kBACVqU,QAAQ,MACRC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,0BAERpuB,UAAA8B,cAAQgf,QAAAA,KATkB3gB,EAAL2gB,OASJ,iBACjB9gB,EAAA,QAAA8B,sBAAMusB,EAAE,weACJ,ECXFC,GAAkB,SAAHnuB,gBACnBH,OAAAA,EAAAA,QAAA8B,cAAA,MAAA,CACE6X,UAAU,oBACVqU,QAAQ,MACRC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,0BAERpuB,UAAA8B,cAAQgf,QAAAA,KAToB3gB,EAAL2gB,OASN,iBACjB9gB,EAAA,QAAA8B,sBAAMusB,EAAE,0eACJ,ECXFE,GAAa,wBAAH,OACdvuB,EAAAA,QAAA8B,cAAA,MAAA,CACE6X,UAAU,cACVqU,QAAQ,MACRC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,0BAERpuB,EAAA,QAAA8B,2BAAO,4BACP9B,EAAA,QAAA8B,cAAMusB,OAAAA,CAAAA,EAAE,sbACJ,ECXFG,GAAiB,+BACrBxuB,EAAAA,QAAA8B,cAAA,MAAA,CACE6X,UAAU,kBACVqU,QAAQ,MACRC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,0BAERpuB,EAAAA,QAAA8B,cAAA,OAAA,CAAMusB,EAAE,kqBACJ,ECRFI,GAAc,SAACpuB,GACnB,IAAAoV,EAAgDC,EAAQA,SAAC,SAAlDgZ,EAAgBjZ,EAAEkZ,GAAAA,EAAmBlZ,EAE5C,gBAgBA,OACEzV,EAAA,QAAA8B,cAAA,OAAA,CAAM4X,IAAK,SAAC4N,GAAE,OAjBY,SAACA,GACtBA,IAEDA,EAAGsH,wBAAwBC,EAAIC,OAAOC,WAAa,EACrDJ,EAAoB,QACfA,EAAoB,SAC7B,CAWqBK,CAAoB1H,EAAG,gBACxCtnB,EAAA,QAAA8B,cAACmtB,EAAcA,eACbC,CAAAA,QAXU7uB,EAAM8uB,kBACpBnvB,EAAA,QAAA8B,cAACstB,EAAOA,QAAA,CAACzV,UAAU,kBAAkBlZ,GAAIJ,EAAMI,IAC5CJ,EAAMgvB,6BAGTrvB,EAAA,QAAA8B,cAAO,OAAA,MAOHwtB,UAAWjvB,EAAMquB,kBAAoBA,gBAErC1uB,EAAAA,QAAA8B,cAAOzB,OAAAA,KAAAA,EAAMD,WAIrB,EAEAquB,GAAYvsB,UAAY,CACtBmtB,eAAgBltB,EAAS,QAAC8e,UAAU,CAClC9e,EAAAA,QAAUwU,OAAOtU,WACjBF,EAAS,QAACuY,OAAOrY,aAEnB5B,GAAI0B,EAAS,QAACuY,OAAOrY,WACrBqsB,iBAAkBvsB,EAAS,QAACuY,OAC5B6U,iBAAkBptB,EAAS,QAAC+e,KAC5BiO,KAAMhtB,EAAAA,QAAU+e,MAGlBuN,GAAY5T,aAAe,CACzB2U,mBAAoB,GACpBC,UAAW,GACXF,kBAAkB,EAClBJ,MAAM,GC7CF,IAAAO,GAAW,SAACrvB,GAChB,IAAAoV,EAAgDC,EAAQA,SAAC,SAAhCiZ,EAAmBlZ,EAAA,gBAU5C,OACEzV,EAAAA,QAAA8B,cAAK4X,MAAAA,CAAAA,IAAK,SAAC4N,GAAE,OATa,SAACA,GACtBA,IAEDA,EAAGsH,wBAAwBC,EAAIC,OAAOC,WAAa,EACrDJ,EAAoB,QACfA,EAAoB,SAC7B,CAGoBK,CAAoB1H,EAAG,gBACvCtnB,EAAA,QAAA8B,cAAC2sB,GACChuB,CAAAA,GAAG,qBACHiuB,iBAAkBruB,EAAMquB,kBAdPjZ,KAejB8Z,iBAAkBlvB,EAAMkvB,iBACxBF,eAAgBhvB,EAAM8nB,mBAEtBnoB,UAAA8B,cAAC0sB,GAAe7U,CAAAA,UAAWtZ,EAAMovB,aAIzC,EAEAC,GAASxtB,UAAY,CACnBimB,KAAMhmB,EAAAA,QAAUuY,OAAOrY,WACvBmtB,mBAAoBrtB,EAAS,QAACuY,OAC9B+U,UAAWttB,EAAS,QAACuY,OACrBgU,iBAAkBvsB,EAAAA,QAAUuY,OAC5B6U,iBAAkBptB,UAAU+e,MAG9BwO,GAAS7U,aAAe,CACtB2U,mBAAoB,GACpBC,UAAW,GACXF,kBAAkB,GCvCpB,IAAMI,GAAe,wBACnB3vB,OAAAA,EAAA,QAAA8B,cACE6X,MAAAA,CAAAA,UAAU,qBACVuU,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRH,MAAM,2CAENjuB,EAAA,QAAA8B,cAAMusB,OAAAA,CAAAA,EAAE,umBACJ,ECNFuB,GAAW,SAACvvB,gBAChB,OACEL,EAAAA,QAAA8B,cAAC2sB,IACCY,eAAgBhvB,EAAMwvB,IAAI,QAAUxvB,EAAMwvB,IAC1CpvB,GAAG,cACHiuB,iBAAkBruB,EAAMquB,+BAExB1uB,UAAA8B,cAAA,IAAA,CACEguB,KAAMzvB,EAAMwvB,IAAI,QAAUxvB,EAAMwvB,IAChCtX,OAAO,SACPoB,UAAWtZ,EAAMmvB,iCAEjBxvB,EAAA,QAAA8B,cAAC6tB,GAAY,CAAChW,UAAWtZ,EAAMovB,aAIvC,EAEAG,GAAS1tB,UAAY,CACnB2tB,IAAK1tB,EAAS,QAAC8e,UAAU,CACvB9e,EAAS,QAACuY,OAAOrY,WACjBF,EAAAA,QAAUwU,OAAOtU,aAEnBmtB,mBAAoBrtB,EAAAA,QAAUuY,OAC9B+U,UAAWttB,EAAS,QAACuY,OACrBgU,iBAAkBvsB,EAAAA,QAAUuY,OAC5B6U,iBAAkBptB,UAAU+e,MAG9B0O,GAAS/U,aAAe,CACtB2U,mBAAoB,GACpBC,UAAW,GACXF,kBAAkB,GCnCpB,IAAMQ,GAAgB,wBACpB,OACE/vB,EAAA,QAAA8B,cAAA,MAAA,CACE6X,UAAU,mBACVqU,QAAQ,MACRvtB,GAAG,SACHwtB,MAAM,6BACNG,QAAQ,YACRF,MAAM,KACNC,OAAO,mBAEPnuB,UAAA8B,cACEusB,OAAAA,CAAAA,EAAE,uiBAQV,ECpBM2B,GAAa,wBACjBhwB,OAAAA,UAAA8B,cAAA,MAAA,CACE6X,UAAU,mBACVqU,QAAQ,MACRC,MAAM,6BACNE,OAAO,OACPD,MAAM,OACNE,QAAQ,4BAERpuB,EAAA,QAAA8B,cAAA,IAAA,kBACE9B,EAAAA,QAAA8B,cACE9B,IAAAA,kBAAAA,EAAA,QAAA8B,cAAA,OAAA,CACEusB,EAAE,gQAKRruB,EAAAA,QAAA8B,cACE9B,IAAAA,kBAAAA,EAAAA,QAAA8B,cAAA,IAAA,kBACE9B,UAAA8B,cAAM+sB,OAAAA,CAAAA,EAAE,UAAUoB,EAAE,MAAM/B,MAAM,SAASC,OAAO,2BAGpDnuB,EAAAA,QAAA8B,cAAA,IAAA,kBACE9B,EAAAA,QAAA8B,cACE9B,IAAAA,kBAAAA,EAAAA,QAAA8B,cAAA,OAAA,CAAM+sB,EAAE,UAAUoB,EAAE,MAAM/B,MAAM,SAASC,OAAO,2BAGpDnuB,UAAA8B,oCACE9B,EAAAA,QAAA8B,cAAA,IAAA,kBACE9B,EAAAA,QAAA8B,sBAAM+sB,EAAE,UAAUoB,EAAE,MAAM/B,MAAM,SAASC,OAAO,cAGhD,ECtBF+B,GAAiB,iBAEjBC,GAAc,SAAC9vB,GACnB,IAAQE,EAAYsgB,aAAW/F,IAAvBva,QACRkV,EAA8BC,EAAQA,UAAC,GAAhC0a,EAAO3a,EAAA,GAAE4a,EAAU5a,KAC1BG,EAA4CF,EAAAA,UAAS,GAA9C4a,EAAc1a,KAAE2a,EAAiB3a,EAExC4a,GAAAA,EAAO,QAACC,UAAU1mB,WAClBymB,UAAQC,UAAUvmB,EAAE,SACpBsmB,EAAAA,QAAQE,iBAAiBnuB,EAAUuH,KAAKI,GAAGF,QAE3C,IAiEUqX,EAjEJsP,EAAO,IAAIH,UAAQjwB,EAAQqO,KAAK5E,QAEhC4mB,EAAiB,WACrB,GAAIrwB,GAAWA,EAAQswB,MAAO,CAC5B,IACMC,EADQvwB,EAAQswB,MACIvhB,KAAK,SAAC6B,GAAM,OAAAA,EAAE1Q,KAAOF,EAAQuwB,WAAW,GAElE,GAAIzwB,EAAMigB,OACR,OAAIwQ,EAAY7mB,MACP6mB,EAAY7mB,MAEZ8mB,GAGb,CAEA,OAAOb,EACT,EAEMa,EAA2B,WAG/B,OAFmB1wB,EAAMigB,OAAO,OAEd0Q,QAAQ,UAAW,OACvC,EAuDMC,EAAgC,WACpCZ,GAAYD,EACd,eAeA,OACEpwB,EAAAA,QAAA8B,cACE6X,MAAAA,CAAAA,UAAU,kBACVuX,aAhB+B,WACjCX,GAAkB,EACpB,EAeIY,aAb+B,WACjCZ,GAAkB,EACpB,gBAaIvwB,UAAA8B,cAAA,MAAA,CAAK6X,UAAU,oBACb3Z,EAAA,QAAA8B,cACE6X,MAAAA,CAAAA,UAAU,0BACVuX,aAAcD,EACdE,aAAcF,gBAvElBjxB,EAAAA,QAAA8B,cAAC9B,UAAMutB,SACJ6C,KAAAA,eACCpwB,EAAA,QAAA8B,cAAC9B,EAAAA,QAAMutB,SAAQ,KACZqD,iBACD5wB,UAAA8B,cAAC8tB,IACCJ,mBAAmB,6BACnBK,IAdNxvB,EAAMigB,OACD/e,OAAOK,OAAOvB,EAAMigB,QAAQ8Q,WAE9BlB,MAeDU,mBAiEF5wB,EAAA,QAAA8B,cAAK6X,MAAAA,CAAAA,UAAU,sDArCjB3Z,EAAA,QAAA8B,cAAC2sB,IAAYhuB,GAAG,qBAAqB4uB,gBAP/BhO,EAAO,IAAIQ,KAAKwP,SAAShxB,EAAMkgB,YAC1B,IAAA+Q,KAAKC,eAAehxB,EAAQqO,KAAK5E,OAV1B,CAChBwnB,QAAS,OACTC,KAAM,UACNC,MAAO,OACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,YAGuDzP,OAC/DhB,KAfKsP,EAAKtO,OAAOgP,SAAShxB,EAAMkgB,cA4D/B+P,eACCtwB,UAAA8B,cAACiwB,EAAMA,OAACC,IAAG,CACTrY,UAAU,4CACVsY,WAAY,CAAEC,MAAO,KACrBC,SAAU,CAAED,MAAO,IACnBE,QA3BuB,WAC/B/xB,EAAMgyB,wBAAwBhyB,EAAMgW,OACpChW,EAAMiyB,qBACR,gBA0BUtyB,EAAA,QAAA8B,cAACkuB,GAAY,OAEb,mBAENhwB,EAAA,QAAA8B,cAAA,MAAA,CAAK6X,UAAU,oBACb3Z,EAAAA,QAAA8B,cAAK6X,MAAAA,CAAAA,UAAU,qBAAqBtZ,EAAMkyB,eAIlD,EAEApC,GAAYjuB,UAAY,CACtBoe,OAAQne,EAAAA,QAAUwU,OAClB4J,UAAWpe,EAAAA,QAAUuY,OAAOrY,WAC5BkwB,aAAcpwB,EAAAA,QAAUuY,OAAOrY,WAC/BgwB,wBAAyBlwB,EAAAA,QAAUG,KAAKD,WACxCiwB,oBAAqBnwB,EAAS,QAACG,KAC/B+T,MAAOlU,EAAAA,QAAUwgB,OAAOtgB,YCrJ1B,IAAMmwB,GAAc,SAAHryB,GAAiD,IAA3CggB,EAAQhgB,EAARggB,SAAUsS,EAAoBtyB,EAApBsyB,qBACzBC,EAAgBC,EAAAA,OAA8B,MACpDld,EAAoCC,EAAQA,UAAU,GAA/Ckd,EAAUnd,EAAA,GAAEod,EAAapd,EAEhC,GAAMqd,EAA0B,WAC9BD,GAAc,GACd5I,WAAW,WACT4I,GAAc,EAChB,EAAG,IACL,EASA,OAPA7c,EAAAA,UAAU,WACsB,OAA1B0c,EAAcK,UAGlBL,EAAcK,QAAQC,UAAYN,EAAcK,QAAQE,aAC1D,EAAG,CAACzlB,KAAKC,UAAU0S,KAGjB/D,EACG8W,IAAA,OAAA,CAAA9yB,SAAAwyB,EACCO,EAAAC,KAAA,MAAA,CAAKzZ,UAAU,iBACbvZ,SAAA,CAAAgc,EAAAA,IAACiX,EAAAA,MAAM,CAAAC,MAAM,UAAUnF,OAAQ,GAAID,MAAO,KAC1C9R,EAAAA,IAAA,IAAA,CAAAhc,SAAA,2BAGFgc,EAAK8W,IAAA,MAAA,CAAAvZ,UAAU,qBAAqBD,IAAKgZ,EACtCtyB,SAAA+f,EAAS9R,IAAI,SAACgS,EAAShK,UACtB+F,EAAAA,IAAiB,MAAA,CAAAzC,UAAU,oBAAmBvZ,SAC5Cgc,EAAAA,IAAC+T,IACCoC,aAAclS,EAAQ9d,EAAU2F,mBAChCoY,OACED,EAAQ9d,EAAU4F,YACdkY,EAAQ9d,EAAU4F,YAClB,KAENoY,UAAWF,EAAQ9d,EAAU6F,eAC7BiqB,wBAAyBI,EACzBH,oBAAqBQ,EACrBzc,MAAOA,KAXDA,EAaJ,MAMlB,ECvDMkd,GAAa,wBAAH,OACdvzB,UAAA8B,qBACEmsB,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,0BAERpuB,UAAA8B,sBAAMusB,EAAE,wGACJ,ECJFmF,GAAuB,QAEvBC,GAAc,SAACpzB,GACnB,IAAAoV,EAAwCC,EAAAA,SAAS,IAA1C6c,EAAY9c,EAAA,GAAEie,EAAeje,EACpC,GAAMke,EAAehB,EAAMA,OAAC,MACtB/jB,EAAOglB,EAAOA,UAEpB5d,EAAAA,UAAU,WACR2d,EAAaZ,QAAQzb,OACvB,EAAG,IAEH,IAIMuc,EAAmB,SAACpyB,GACxBA,EAAEoiB,iBACFxjB,EAAMgY,SAASka,GACfmB,EAAgB,GAClB,EAWMI,EAAyB,WAC7B,IAAMC,EAAWJ,EAAaZ,QAC9BgB,EAASC,MAAM7F,OAAS,OACxB8F,EAAmBF,EACrB,EAEME,EAAqB,SAACF,GAE1BA,EAASC,MAAM7F,OADI4F,EAASd,aACW,KACnC5B,SAAS0C,EAASC,MAAM7F,QAAUkD,SAASmC,MAC7CO,EAASC,MAAM7F,OAASqF,GAE5B,eAEA,OACExzB,EAAAA,QAAA8B,cAACkX,OAAI,CACHkb,SAAUL,EACVM,QA1BoB,SAAC1yB,GACT,UAAVA,EAAE6d,KAAmB7d,EAAE4nB,SAAWkJ,EAAa6B,QACjDP,EAAiBpyB,EACrB,EAwBI2wB,QAtBoB,SAAC3wB,GACvBA,EAAE4yB,iBACJ,gBAsBIr0B,EAAAA,QAAA8B,cAACkX,EAAAA,KAAKC,MAAK,CAACU,UAAU,MAAMR,UAAU,iCACpCnZ,UAAA8B,cAACwyB,EAAGA,IAAC3a,CAAAA,UAAU,8BACb3Z,EAAAA,QAAA8B,cAACyyB,MAAI5a,CAAAA,UAAU,wCACb3Z,EAAA,QAAA8B,cAAA,MAAA,CAAKrB,GAAG,6BACNT,EAAA,QAAA8B,cAACkX,OAAKwb,QAAO,CACX7a,UAAU,uBACV8a,KAAK,UACLra,GAAG,WACHI,YAAa5L,EAAK8lB,cAAc,CAC9Bj0B,GAAI,6BAENk0B,YACA1yB,MAAOswB,EACPla,SApDY,SAAC5W,GACzBiyB,EAAgBjyB,EAAE8W,OAAOtW,MAC3B,EAmDcyX,IAAKia,EACL5P,WAAY+P,EACZjJ,UAAWiJ,iBAEb9zB,UAAA8B,cAAC8yB,EAAMA,OAAA,CACLjb,UAAU,sBACVkb,QAAQ,UACR3c,KAAK,uBAELlY,EAAAA,QAAA8B,cAACyxB,GAAU,WAQ3B,EAEAE,GAAYvxB,UAAY,CACtBmW,SAAUlW,UAAUG,KAAKD,YCxF3B,ICFAyyB,GDEMC,GAAQ,wBACZ/0B,OAAAA,EAAA,QAAA8B,cACE6X,MAAAA,CAAAA,UAAU,aACVuU,MAAM,OACNC,OAAO,OACPC,QAAQ,YACRH,MAAM,2CAENjuB,EAAA,QAAA8B,cAAMusB,OAAAA,CAAAA,EAAE,2LACJ,EEAF2G,GAAsB,SAAC30B,GAC3B,IAAMqqB,EAAU7J,aAAW/F,IACrBvC,EAASoa,EAAAA,OAAO,MAChBsC,EAAUtC,EAAAA,OAAO,MACjBuC,EAAgBvC,EAAMA,OAAC,MAC7Bld,EAAsCC,EAAQA,UAAC,GAAxCyf,EAAW1f,KAAE2f,EAAc3f,EAClC,GAAAG,EAAgDF,EAAQA,SAAC,SAAlDgZ,EAAgB9Y,EAAE+Y,GAAAA,EAAmB/Y,EAE5CI,GAAAA,EAAAA,UAAU,WACRgZ,EAAoBkG,EAAcnC,QACpC,GAEA,IAAMsC,EAAyB,WAC7BD,GAAe,EACjB,EAGME,EAAe,WACnB,IAAM3pB,EAAWtL,EAAMsL,SASvB,OAPKA,EAASpJ,EAAU0F,eACtB0D,EAASpJ,EAAU0F,aAAe,IAE/BwD,MAAM+K,QAAQ7K,EAASpJ,EAAU0F,gBACpC0D,EAASpJ,EAAU0F,aAAe,CAAC0D,EAASpJ,EAAU0F,eAGjD0D,EAASpJ,EAAU0F,YAC5B,EAEMstB,EAA2B,SAACtzB,GAChC,IAAMuzB,EAAS,GACfC,EAAYD,EAAQvzB,GACpB5B,EAAMgY,SAASqd,IAAqBF,EACtC,EAEMC,EAAc,SAACD,EAAQvzB,GACvByoB,EAAQnqB,QAAQuwB,cAClB0E,EAAOjzB,EAAU4F,YAAc,CAAE,MAAOuiB,EAAQnqB,QAAQuwB,cAE1D0E,EAAOjzB,EAAU2F,mBAAqBjG,EACtCuzB,EAAOjzB,EAAU6F,eAAiByZ,KAAK8T,MAAMvE,UAC/C,EAEMwE,EAAmC,SAACvf,GACxBif,IACRO,OAAOxf,EAAO,EACxB,EAEMyf,EAA6B,SAACr0B,GAClCA,EAAEoiB,iBACFpiB,EAAE4yB,iBACJ,EAOMqB,EAAoB,WACxB,OAAOJ,IAAe10B,MACxB,EAEMouB,EAAsB,SAACkG,GACtBA,IAEDA,EAActG,wBAAwBC,EAAIC,OAAOC,WAAa,EAChEJ,EAAoB,QACfA,EAAoB,SAC7B,eAQA,OACE3uB,EAAAA,QAAA8B,cAAA,MAAA,CAAK4X,IAAKwb,EAAe9C,QAAS0D,gBAChC91B,EAAA,QAAA8B,cAAA,OAAA,CACE6X,UAAU,iBACVD,IAAKnB,EACL6Z,QA5BqB,SAAC3wB,GAC1Bq0B,EAA2Br0B,GAC3B2zB,GAAgBD,EAClB,gBA2BMn1B,EAAA,QAAA8B,cAACiuB,GAAe,MACf2F,IAAsB,eACrB11B,EAAA,QAAA8B,cAACi0B,QAAMpc,CAAAA,UAAU,gBAAgBqc,MAAI,EAACnB,QAAQ,WAC3Ca,KAED,mBAGN11B,UAAA8B,cAACiwB,EAAMA,OAACC,IAAG,CACTrY,UAAU,kBACVD,IAAKub,EACLgB,MACAC,EAAAA,gBAAiB,CACfC,KAAM,GACNC,MAAO,GACPC,MAAO,GACPC,OAAQ,kBAGVt2B,EAAA,QAAA8B,cAACy0B,EAAAA,QACChe,CAAAA,OAAQA,EAAOwa,QACf5D,KAAMgG,EACN7F,UAAWZ,EACX8H,WAAW,EACXC,OAAQpB,EACRqB,UAAWzB,GAEV,SAAC0B,gBAAY,OACZ32B,UAAA8B,cAACstB,EAAOA,QAAAptB,EAAA,CAAC2X,UAAU,mBAAsBgd,gBACvC32B,UAAA8B,cACE+oB,OAAAA,CAAAA,UAAW,SAACppB,IA3CE,SAACA,GACb,WAAVA,EAAE6d,KACJ+V,GAEJ,CAwCgBuB,CAAoBn1B,EACtB,gBAEAzB,EAAAA,QAAA8B,cAACiwB,SAAOC,KACNrY,UAAU,qBACVyY,QAASiD,EACTpD,WAAY,CAAEC,MAAO,IAAK2E,WAAY,CAAEC,SAAU,mBAElD92B,EAAAA,QAAA8B,cAACizB,GAAK,oBAER/0B,EAAA,QAAA8B,cAAC0wB,GAAW,CACVrS,SAAUmV,IACV7C,qBAAsBmD,iBAExB51B,EAAAA,QAAA8B,cAAC2xB,GAAYpb,CAAAA,SAAUkd,KAEjB,IAMtB,EAEAP,GAAoB9yB,UAAY,CAC9ByJ,SAAUxJ,UAAUwU,OAAOtU,WAC3BgW,SAAUlW,EAAAA,QAAUG,KAAKD,YDjJN,IAAA00B,gBAAc,WAAA,SAAAA,IAAAA,QAAAA,EAC1BC,YAAP,SAAmBrrB,EAAUpL,EAAS02B,EAAiBC,GACrD,IAAIttB,EACeA,EAAfrJ,EAAQqJ,MAAerJ,EAAQqJ,MACtBrH,EAAUoH,gBAAgBC,MAsBvC,IArBA,IAAIutB,EAAa,GACXC,EAAqB1lB,KAAK0lB,mBAC9BzrB,EACApL,EACA02B,EACAC,GAEIG,EAAyB3lB,KAAK2lB,uBAClC1rB,EACApL,EACA02B,EACAC,GAGII,EAAqB5lB,KAAK4lB,mBAC9B3rB,EACApL,EACA02B,EACAC,GAGO9rB,EAAI,EAAGA,EAAIxB,EAAMhJ,OAAQwK,IAC5BxB,EAAMwB,GAAG3K,KAAO8B,EAAU4G,MAAMC,mBAClC+tB,EAAW71B,kBACTtB,UAAA8B,oBAAIwd,IAAKlU,EAAGuO,UAAU,kBACnB0d,IAIHztB,EAAMwB,GAAG3K,KAAO8B,EAAU4G,MAAME,eAClC8tB,EAAW71B,kBACTtB,EAAA,QAAA8B,cAAIwd,KAAAA,CAAAA,IAAKlU,EAAGuO,UAAU,kBACnByd,IAIHxtB,EAAMwB,GAAG3K,KAAO8B,EAAU4G,MAAMG,eAClC6tB,EAAW71B,kBACTtB,EAAA,QAAA8B,cAAIwd,KAAAA,CAAAA,IAAKlU,EAAGuO,UAAU,kBACnB2d,iBAMT,OAAOt3B,UAAA8B,cAAA,KAAA,CAAI6X,UAAU,mBAAmBwd,EAC1C,EAACJ,EAEMK,mBAAP,SAA0BzrB,EAAUpL,EAAS02B,EAAiBC,GAC5D,OAAWxlB,KAAC6lB,yBACVh1B,EAAU4G,MAAME,cAChBsC,EACApL,EACA02B,EACAC,EAEJ,EAACH,EAiBMO,mBAAP,SAA0B3rB,EAAUpL,EAAS02B,EAAiBC,GAC5D,YAAYK,yBACVh1B,EAAU4G,MAAMG,cAChBqC,EACApL,EACA02B,EACAC,EAEJ,EAACH,EAEMQ,yBAAP,SACEC,EACA7rB,EACApL,EACA02B,EACAC,GAEA,IAGMO,EAAO/lB,KAAKgmB,oBAHDn3B,EAAQqJ,MACrBrJ,EAAQqJ,MACRrH,EAAUoH,gBAAgBC,MACkB4tB,GAChD,YAAYG,iBACVF,EACA9rB,EACApL,EACA02B,EACAC,EAEJ,EAACH,EAOMY,iBAAP,SAAwBF,EAAM9rB,EAAUpL,EAAS02B,EAAiBC,GAChE,IAAIU,EAEJ,GACEH,IACCA,EAAK5tB,WAAatH,EAAUgH,cAAcG,UACzC+tB,EAAK5tB,WAAatH,EAAUgH,cAAcC,QAO5C,OALIiuB,EAAK5tB,WAAatH,EAAUgH,cAAcC,QAC5C0tB,GAAW,EACXU,EAAgB,IACXA,EAAgB,6BAGrBH,EAAKh3B,KAAO8B,EAAU4G,MAAME,eAC5BsC,EAASpJ,EAAU2C,kBAEfgyB,eAEAl3B,EAAAA,QAAA8B,qBAAK6X,UAAWie,gBACd53B,UAAA8B,cAAC4tB,GACCvH,CAAAA,KAAMtf,EAAYmG,aAChBrD,EAASpJ,EAAU2C,kBACnB3E,EAAQqO,MAEV2gB,kBAAkB,KAKnB,KAIPkI,EAAKh3B,KAAO8B,EAAU4G,MAAMG,eAC5BqC,EAASpJ,EAAU4C,QAEf+xB,eAEAl3B,EAAAA,QAAA8B,qBAAK6X,UAAWie,gBACd53B,UAAA8B,cAAC8tB,GAASC,CAAAA,IAAKlkB,EAASpJ,EAAU4C,WAK1C,KAEIsyB,EAAKh3B,KAAO8B,EAAU4G,MAAMC,mBAC1B8tB,eAEAl3B,EAAA,QAAA8B,qBAAK6X,UAAWie,gBACd53B,EAAAA,QAAA8B,cAACkzB,GACCrpB,CAAAA,SAAUA,EACV0M,SAAU4e,SASxB,EAACF,CAAA,CA/KgC,GA+KhCjC,GA/KkBiC,GAAAA,GA+DZM,uBAAyB,SAC9B1rB,EACApL,EACA02B,EACAC,GAEA,OAAOpC,GAAKyC,yBACVh1B,EAAU4G,MAAMC,kBAChBuC,EACApL,EACA02B,EACAC,EAEJ,EA5EmBH,GA4GZW,oBAAsB,SAACG,EAAUL,GACtC,OAAIK,EAAiBA,EAASvoB,KAAK,SAACmoB,GAAS,OAAAA,EAAKh3B,KAAO+2B,CAAQ,GAC1D,IACT,EErGI,IAAAM,GAAS,SAACz3B,GACd,IAAMmrB,EAAiBxrB,EAAK,QAAC6gB,WAAW9gB,GAChCQ,EAAYP,EAAAA,QAAM6gB,WAAW/F,IAA7Bva,QACRkV,EAAoCC,EAAQA,SAAC,CAC3CqiB,SAAU,GACVle,UAAW,GACXC,QAAS,OAHJF,EAAUnE,EAAA,GAAEuiB,EAAaviB,KAMhCO,EAAAA,UAAU,WACRiiB,GACF,EAAG,CAAC53B,EAAMsL,WAEV,IAgNIusB,EAxLiBza,EAxBf0a,EAAoB,SAACl2B,GACzB,IAAMuzB,EAAMj0B,OAAAC,UAAQnB,EAAMgR,QAC1B+mB,EAAU5C,EAAQvzB,GAClB5B,EAAMgY,SAAShY,EAAMgW,MAAOmf,EAC9B,EAEM4C,EAAY,SAAC5C,EAAQvzB,GACX,OAAVA,GACFuzB,EAAOjzB,EAAU0C,kBAAoB,KACrCuwB,EAAOjzB,EAAUyC,gBAAkB,MAEnC3E,EAAMgR,OAAO9O,EAAU0C,mBACvBuK,EAAUO,YAAY1P,EAAMsL,UAE5B6pB,EAAOjzB,EAAU0C,kBAAoB,CACnC,MAAOhD,GAGTuzB,EAAOjzB,EAAUyC,gBAAkB,CACjC,SAAU/C,EAGhB,EAgJMg2B,EAA0B,WAC9BD,EAAc,CACZD,SAAU,GACVle,UAAW,GACXC,QAAS,QAEkC,IAAzCnO,EAASpJ,EAAUuE,mBAKnBkxB,EAHArsB,EAASpJ,EAAUoG,2BACnBpG,EAAU4H,WAAWC,SAASE,QAEhB,CACZytB,SAAUx1B,EAAU4H,WAAWC,SAASE,QACxCuP,UAAWtX,EAAU4H,WAAWW,UAAUR,QAC1CwP,qBACE9Z,EAAA,QAAA8B,cAACu2B,WAAS1e,CAAAA,UAAWpX,EAAU4H,WAAWW,UAAUR,SACjDqB,EAASpJ,EAAU0E,0BAKZ,CACZ8wB,SAAUx1B,EAAU4H,WAAWC,SAASC,MACxCwP,UAAWtX,EAAU4H,WAAWW,UAAUT,MAC1CyP,qBACE9Z,EAAAA,QAAA8B,cAACu2B,EAAAA,SAAQ,CAAC1e,UAAWpX,EAAU4H,WAAWW,UAAUT,OACjDsB,EAASpJ,EAAU0E,0BAMhC,EAEM0E,EAAWtL,EAAMsL,SACjB1J,EAAQuN,EAAU4B,aAAa/Q,EAAMgR,QAErCpH,EAxDY,SAAC0B,GACjB,IAAM1B,EAAQquB,EAAYtpB,aACxBrD,EAASpJ,EAAUqG,YACnBrI,EAAQqO,mBAGV,OACE5O,EAAA,QAAA8B,cAAK6X,MAAAA,CAAAA,UAAU,mBACZ1P,EACA8sB,GAAeC,YACd32B,EAAMsL,SACNpL,EACAF,EAAM42B,gBACN52B,EAAM62B,UAId,CAuCcqB,CAAU5sB,GAClBmV,EAAQwX,EAAYtpB,aACxBrD,EAASpJ,EAAUuG,cACnBvI,EAAQqO,MAsBV,OAjBEspB,EADE1oB,EAAUO,YAAYpE,GApLD,SAAC1J,EAAOgI,EAAO6W,GACtC,IAAMyK,EAAYxgB,EAAMC,cACtBwE,EAAUQ,uBAAuB3P,EAAMsL,WAEnCpL,EAAUirB,EAAe7pB,WAAW4pB,IAAc,gBAExD,OACEvrB,EAAAA,QAAA8B,cAACwpB,GACC3f,CAAAA,SAAUtL,EAAMsL,SAChB0F,OAAQhR,EAAMgR,OACdpH,MAAOA,EACP6W,MAAOA,EACP7e,MAAOA,EACPoW,SAAU8f,EACV53B,QAASA,EACTqZ,WAAYA,GAGlB,CAmKc4e,CAAiBv2B,EAAOgI,EAAO6W,IA3LxBrD,EA4LE9R,GA1LdpJ,EAAUS,aAAqD,IAAtCya,EAAKlb,EAAUS,YAAYpC,OAwBvC,SAACqB,EAAOgI,EAAO6W,gBACnC,OACE9gB,EAAA,QAAA8B,cAACmpB,GACCtf,CAAAA,SAAUtL,EAAMsL,SAChB1B,MAAOA,EACP6W,MAAOA,EACP7e,MAAOA,EACPoW,SAAU8f,EACVve,WAAYA,GAGlB,CAwJchB,CAAc3W,EAAOgI,EAAO6W,GAC/BtR,EAAUe,WAAW5E,GAvJF,SAAC1J,EAAOgI,EAAO6W,gBAC3C,OACE9gB,EAAAA,QAAA8B,cAACsf,IACCzV,SAAUtL,EAAMsL,SAChB1J,MAAOA,EACP6e,MAAOA,EACP7W,MAAOA,EACPoO,SAAU8f,EACVve,WAAYA,GAGlB,CA6Ic6e,CAAsBx2B,EAAOgI,EAAO6W,GACvCtR,EAAUoB,WAAWjF,GA5IR,SAAC1J,EAAOgI,EAAO6W,gBACrC,OACE9gB,EAAAA,QAAA8B,cAAC6e,GAAc,CACb1W,MAAOA,EACP6W,MAAOA,EACP7e,MAAOA,EACPoW,SAAU8f,EACVxsB,SAAUtL,EAAMsL,SAChBiO,WAAYA,GAGlB,CAkIcjB,CAAgB1W,EAAOgI,EAAO6W,GACjCtR,EAAUqB,cAAclF,GAjIR,SAAC1J,EAAOgI,EAAO6W,gBACxC,OACE9gB,EAAA,QAAA8B,cAACkpB,GACC/gB,CAAAA,MAAOA,EACP6W,MAAOA,EACP7e,MAAOA,EACPoW,SAAU8f,EACVxsB,SAAUtL,EAAMsL,SAChB0F,OAAQhR,EAAMgR,OACduI,WAAYA,GAGlB,CAsHc8e,CAAmBz2B,EAAOgI,EAAO6W,GACpCtR,EAAUsB,cAAcnF,GAvGR,SAAC1J,EAAOgI,EAAO6W,gBACxC,OACE9gB,EAAAA,QAAA8B,cAACgiB,IACCnY,SAAUtL,EAAMsL,SAChB0F,OAAQhR,EAAMgR,OACdpH,MAAOA,EACP6W,MAAOA,EACP7e,MAAOA,EACPoW,SAAU8f,EACVnU,QAAQ,EACRpK,WAAYA,GAGlB,CA2Fc+e,CAAmB12B,EAAOgI,EAAO6W,GACpCtR,EAAUuB,cAAcpF,GA1FR,SAAC1J,EAAOgI,EAAO6W,gBACxC,OACE9gB,EAAA,QAAA8B,cAACgiB,GACCnY,CAAAA,SAAUtL,EAAMsL,SAChB0F,OAAQhR,EAAMgR,OACdpH,MAAOA,EACP6W,MAAOA,EACP7e,MAAOA,EACPoW,SAAU8f,EACVlU,QAAQ,EACRrK,WAAYA,GAGlB,CA8Ecgf,CAAmB32B,EAAOgI,EAAO6W,GAxHnB,SAAC7e,EAAOgI,EAAO6W,gBACzC,OACE9gB,EAAA,QAAA8B,cAACgiB,GAAW,CACVnY,SAAUtL,EAAMsL,SAChB0F,OAAQhR,EAAMgR,OACdpH,MAAOA,EACP6W,MAAOA,EACP7e,MAAOA,EACPoW,SAAU8f,EACVve,WAAYA,GAGlB,CA8Gcif,CAAoB52B,EAAOgI,EAAO6W,GAGzCoX,CACT,EAEAJ,GAAO51B,UAAY,CACjBmP,OAAQlP,EAAS,QAACwU,OAAOtU,WACzBsJ,SAAUxJ,EAAAA,QAAUwU,OAAOtU,WAC3BgW,SAAUlW,UAAUG,KAAKD,WACzB40B,gBAAiB90B,EAAS,QAACG,KAAKD,WAChCgU,MAAOlU,EAAAA,QAAUwgB,OACjB/Y,MAAOzH,EAAS,QAACwU,QCrQnB,IAAMmiB,GAAkB,SAACntB,EAAUiD,GACjC,IAAMmqB,EAAa,CACjBC,GACAC,GACAC,GACAC,GACAC,GACAC,IAGF,OAAa,WACX,GAAI7pB,EAAUiC,mBAAmB9F,EAAUiD,GAAO,CAChD,IAAMyB,EAAcb,EAAUgE,eAAe7H,GAG7C,OAAO2tB,GAAgB3tB,EAAUiD,EAAMyB,EAAa0oB,EACtD,CACF,CACF,EAEMO,GAAkB,SAAC3tB,EAAUiD,EAAMyB,EAAa0oB,GAEpD,IADA,IACkC9sB,EAD5BgU,EAAS,CAAA,EACfjU,EAAAE,EAAwB6sB,KAAU9sB,EAAAD,KAAAG,MAAE,CAAzB,IACHotB,GAAmBC,EADPvtB,EAAAhK,OACiB0J,EAAUiD,GAC7C,IAAK2qB,EAAiB3nB,QAKpB,OAJAqO,EAAO1d,EAAUuE,mBAAoB,EACrCmZ,EAAO1d,EAAU0E,wBAA0BsyB,EAAiBzf,QAC5DmG,EAAO1d,EAAUoG,yBACf4wB,EAAiBE,mBACZxZ,EAET,IAA2C,IAAvCA,EAAO1d,EAAUuE,kBACnB,KAEJ,CAIA,OAHAmZ,EAAO1d,EAAUuE,mBAAoB,EACrCmZ,EAAO1d,EAAU0E,wBAA0B,GAC3CgZ,EAAO1d,EAAUoG,yBAA2B,GACrCsX,CACT,EAEMiZ,GAAoB,SAACvtB,EAAUiD,GACnC,IAAMyB,EAAcb,EAAUgE,eAAe7H,GAC7C,OAAI0E,GAAeA,EAAYzP,OAAS,GAClC+K,EAASpJ,EAAU6D,WAEN,IAAIszB,OADL/tB,EAASpJ,EAAU6D,UAGxBuzB,KAAKtpB,IAAiBb,EAAUkD,UAAU/G,GAE1C,CACLiG,SAAS,EACT6nB,mBAAoBl3B,EAAU4H,WAAWC,SAASC,MAClDyP,QAASnO,EAASpJ,EAAU0E,wBACxB0E,EAASpJ,EAAU0E,wBACnB2H,EAAK8lB,cAAc,CAAEj0B,GAAI,wBAK9B,CAAEmR,SAAS,EACpB,EAEMwnB,GAAqB,SAACztB,EAAUiD,GACpC,OACEjD,EAASpJ,EAAU4E,kBAClBwE,EAASpJ,EAAU6E,6BAEJoI,EAAUkD,UAAU/G,GAW/B,CAAEiG,SAAS,GATP,CACLA,SAAS,EACT6nB,mBAAoBl3B,EAAU4H,WAAWC,SAASC,MAClDyP,QAASnO,EAASpJ,EAAU0E,wBACxB0E,EAASpJ,EAAU0E,wBACnB2H,EAAK8lB,cAAc,CAAEj0B,GAAI,wBAKrC,EAEM04B,GAAqB,SAACxtB,EAAUiD,GACpC,OAAIY,EAAUoB,WAAWjF,IACnBA,EAASpJ,EAAU4E,mBACLqI,EAAUkD,UAAU/G,GAE3B,CACLiG,SAAS,EACT6nB,mBAAoBl3B,EAAU4H,WAAWC,SAASC,MAClDyP,QAASnO,EAASpJ,EAAU0E,wBACxB0E,EAASpJ,EAAU0E,wBACnB2H,EAAK8lB,cAAc,CAAEj0B,GAAI,sBAK9B,CAAEmR,SAAS,EACpB,EAEMynB,GAAyB,SAAC1tB,EAAUiD,GAExC,OACEjD,EAASpJ,EAAU4E,kBACnBwE,EAASpJ,EAAU6E,8BAEHoI,EAAUkD,UAAU/G,GAE3B,CACLiG,SAAS,EACT6nB,mBAAoBl3B,EAAU4H,WAAWC,SAASE,QAClDwP,QAASnO,EAASpJ,EAAU0E,wBACxB0E,EAASpJ,EAAU0E,wBACnB2H,EAAK8lB,cAAc,CACjBj0B,GAAI,+CAKT,CAAEmR,SAAS,EACpB,EAEMqnB,GAA4B,SAACttB,EAAUiD,GAC3C,GAAIjD,EAASpJ,EAAU6C,IAAII,eAAgB,CACzC,IAAM6K,EAAcb,EAAUgE,eAAe7H,GAC7C,GAAI0E,GAAeA,EAAYzP,OAAS,EAAG,CACzC,IAAMg5B,EAAejuB,EAASpJ,EAAU6C,IAAII,eAK5C,KAFE+T,OAAOsgB,UAAUxI,SAAShhB,KAAiBA,GAAeupB,GAG1D,MAAO,CACLhoB,SAAS,EACT6nB,mBAAoBl3B,EAAU4H,WAAWC,SAASC,MAClDyP,QAASnO,EAASpJ,EAAU0E,wBACxB0E,EAASpJ,EAAU0E,wBACnB2H,EAAK8lB,cAAc,CAAEj0B,GAAI,gCACzBm5B,EACA,IAGV,CACF,CACA,MAAO,CAAEhoB,SAAS,EACpB,EAEMonB,GAA4B,SAACrtB,EAAUiD,GAC3C,IAAMyB,EAAcb,EAAUgE,eAAe7H,GAC7C,GAAIA,EAASpJ,EAAU6C,IAAIE,gBACrB+K,GAAeA,EAAYzP,OAAS,EAAG,CACzC,IAAMk5B,EAAenuB,EAASpJ,EAAU6C,IAAIE,eAK5C,KAFEiU,OAAOsgB,UAAUxI,SAAShhB,KAAiBA,GAAeypB,GAG1D,MAAO,CACLloB,SAAS,EACT6nB,mBAAoBl3B,EAAU4H,WAAWC,SAASC,MAClDyP,QAASnO,EAASpJ,EAAU0E,wBACxB0E,EAASpJ,EAAU0E,wBACnB2H,EAAK8lB,cAAc,CAAEj0B,GAAI,8BACzBq5B,EACA,IAGV,CAEF,MAAO,CAAEloB,SAAS,EACpB,ECtKMmoB,yBAAUjjB,GACd,SAAAijB,EAAY15B,GAAO,IAAA0W,EAIf,OAHFA,EAAAD,EAAAE,KAAM3W,KAAAA,IAAMqR,MACPuF,MAAQ,CACX0N,SAAUtkB,EAAMskB,UAChB5N,CACJ,QANcI,EAAA4iB,EAAAjjB,GAMbijB,EAAA1iB,UAEDoB,OAAA,WACE,IAAMwN,eACJjmB,EAAAA,QAAA8B,cAACk4B,EAAAA,QAAQv5B,CAAAA,GAAG,WAAWqgB,MAAM,yBAC3B9gB,EAAA,QAAA8B,cAACm4B,EAASA,UAAA,KACPvoB,KAAKuF,MAAM0N,SACTjW,KAAK,SAACwrB,EAAGvP,GAER,OADYuP,EAAE33B,EAAUwF,QAAU4iB,EAAEpoB,EAAUwF,SAC7B,EACV,CACT,GACCsG,IAAI,SAAC4X,gBACJjmB,OAAAA,EAAA,QAAA8B,cAACq4B,EAAaA,cAAC7a,CAAAA,IAAK2G,EAAE1jB,EAAUwF,sBAC9B/H,EAAA,QAAA8B,cAAA,SAAA,KAASmkB,EAAE1jB,EAAUwF,SAAmB,KAACke,EAAE1jB,EAAUyF,WACvC,kBAM1B,OACEhI,UAAA8B,cAACmtB,EAAAA,eAAemL,CAAAA,QAAQ,QAAQ9K,UAAU,QAAQJ,QAASjJ,gBACzDjmB,EAAAA,QAAA8B,cAAM6X,OAAAA,CAAAA,UAAWjI,KAAKrR,MAAMovB,WAAY/d,KAAKrR,MAAMD,UAGzD,EAAC25B,CAAA,EAhCsB/5B,EAAK,QAACya,WAmC/Bsf,GAAW73B,UAAY,CACrByiB,SAAUxiB,EAAAA,QAAUyU,MAAMvU,WAC1BjC,SAAU+B,EAAS,QAACC,QAAQC,WAC5BotB,UAAWttB,EAAAA,QAAUuY,QAGvBqf,GAAWlf,aAAe,CACxB4U,UAAW,IC7Cb,IAAM4K,GAAe,SAAHl6B,GAAM,IAGdm6B,EAkCR,OAlCQA,EAHsBn6B,EAARwL,SAGUpJ,EAAUkF,oBAGlCgE,MAAM+K,QAAQ8jB,GAEdle,EAAAA,WAAKzC,UAAU,QACZvZ,SAAAk6B,EAAajsB,IAAI,SAACksB,EAAalkB,GAC9B,OAAA+F,EAAAA,IAAA,MAAA,CAEEzC,UAAU,yEAEVyC,EAAAA,IACE,SAAA,CAAAme,IAAKD,EAAajkB,GAClBsD,UAAU,wBACV6gB,iBAAe,KANZnkB,EAQD,KAMZ+F,EAAK8W,IAAA,MAAA,CAAAvZ,UAAU,QAAOvZ,SACpBgc,gBACEme,IAAKD,EACL3gB,UAAU,wBACV6gB,iBACA,MAKV,IAGF,ECvBqBC,gBAAQ,SAAA3jB,GAC3B,SAAA2jB,EAAYp6B,GAAO,IAAA0W,EAOf,OANFA,EAAAD,EAAAE,KAAM3W,KAAAA,IAAMqR,MAwCdgpB,mBAAqB,SAACC,EAAanF,GACjC,GAAIhmB,EAAUK,UAAUkH,EAAK1W,MAAMsL,UAAW,CAC5C,IAAIivB,IAAaprB,EAAU4B,aAAaokB,GACxCze,EAAKuB,SAAS,CAAEsiB,SAAUA,GAC5B,CAEA7jB,EAAK8jB,cAAct4B,EAAUQ,WAAY43B,EAAanF,EACxD,EAACze,EAED+jB,wBAA0B,SAACC,EAAkBvF,GAC3Cze,EAAK8jB,cAAct4B,EAAUO,gBAAiBi4B,EAAkBvF,EAClE,EAACze,EAEDikB,oBAAsB,SAACC,EAAczF,GACnCze,EAAK8jB,cAAct4B,EAAU0F,YAAagzB,EAAczF,EAC1D,EAACze,EAsCDmkB,gBAAkB,WACZnkB,EAAK1W,MAAM86B,aACbpkB,EAAKuB,SAAS,CAAEsiB,UAAW7jB,EAAKE,MAAM2jB,UAE1C,EAAC7jB,EAEDqkB,qBAAuB,WACrBrkB,EAAKuB,SAAS,CAAE4e,UAAU,GAC5B,EAACngB,EAEDskB,qBAAuB,WACrBtkB,EAAKuB,SAAS,CAAE4e,UAAU,GAC5B,EAACngB,EAEDukB,oBAAsB,WACpB,IAAM3vB,EAAWoL,EAAK1W,MAAMsL,SACtBwvB,EAAcpkB,EAAK1W,MAAM86B,YAE3BI,EAAkB,GAiBtB,OAfAA,EAAgBj6B,KACdm5B,EAASe,6BAA6B7vB,GACtC,mBAGE6D,EAAUI,aAAajE,IACzB4vB,EAAgBj6B,KAAK,qCACnBkO,EAAUyB,aAAatF,IACzB4vB,EAAgBj6B,KAAKm5B,EAASgB,mBAAmB9vB,IAC/C6D,EAAUK,UAAUlE,IACtB4vB,EAAgBj6B,KAAK,sBACnB65B,GAAaI,EAAgBj6B,KAAK,kBAClCyV,EAAK2kB,WAAW/vB,IAClB4vB,EAAgBj6B,KAAK,mBAEhBi6B,CACT,EAhIE3uB,EAAgBC,UAAUxM,EAAMsL,SAAS,OAAQtL,EAAMsL,UACvDoL,EAAKE,MAAQ,CACXuiB,UAAW,CAAA,EACXoB,UAAWprB,EAAUwB,YAAY3Q,EAAMsL,UACvCurB,UAAU,GACVngB,CACJ,CAT2BI,EAAAsjB,EAAA3jB,GAS1B,IAAAM,EAAAqjB,EAAApjB,iBAAAD,EAEDukB,kBAAA,WACEjqB,KAAK4G,SAAS,CACZkhB,UAAWV,GAAgBpnB,KAAKrR,MAAMsL,SAAU+F,KAAKrR,MAAMuO,OAE/D,EAACwI,EAEDO,mBAAA,WACE,IAAMhM,EAAW+F,KAAKrR,MAAMsL,SACtBiwB,EAAqBlqB,KAAKgZ,QAAQnqB,QAAQq7B,mBAE1CC,EADelwB,EAASpJ,EAAUO,iBACawM,KACnD,SAACC,GAAM,OAAAA,EAAE,SAAWqsB,CAAkB,GAGxC,GAAIpsB,EAAUK,UAAUlE,IAAa6D,EAAUM,aAAanE,GAAW,CACrE,IAAM0E,EAAcqB,KAAKoqB,uBAGzB,GAAIpqB,KAAKgZ,QAAQnqB,QAAQw7B,UACvB,OAAO,KAGT,GAAIF,EACF,YACSnqB,KAAKuF,MAAM2jB,WAAavqB,GAEjCqB,KAAK4G,SAAS,CAAEsiB,UAAU,GAE9B,CACF,EAACxjB,EAmBDyjB,cAAA,SAAcmB,EAAKC,EAAYC,GAC7B,IAAIC,EAAQ56B,OAAAC,OAAQ,CAAA,EAAAkQ,KAAKrR,MAAMsL,UAE/B,GADAwwB,EAASH,GAAKC,GAAcC,EACxBF,IAAQz5B,EAAUQ,WAAY,CAChC,IAAMkd,EAASvO,KAAKuF,MAAMuiB,UAAU0C,GACpCC,EAAQ56B,OAAAC,OAAA,CAAA,EAAQ26B,EAAalc,EAC/B,CAEArT,EAAgBC,UAAUsvB,EAAS,OAAQA,GAC3CzqB,KAAKrR,MAAMgY,SAAS3G,KAAKrR,MAAMgW,MAAO8lB,EACxC,EAAC/kB,EAEDskB,WAAA,SAAW/vB,GACT,IAAMiwB,EAAqBlqB,KAAKgZ,QAAQnqB,QAAQq7B,mBAEhD,OAAIpsB,EAAU+B,WAAW5F,OAGrB+F,KAAKgZ,QAAQnqB,QAAQw7B,WAIC,MAAtBH,KAIe7wB,EAAMW,iBACvBkwB,EACAjwB,GACA,GACA,GACA,GAGJ,EAACyL,EAwCDqB,OAAA,WACE,IAAM9M,EAAW+F,KAAKrR,MAAMsL,SACtBywB,EAAoB1qB,KAAK2qB,eAAe1wB,GAE9C,OAAI+F,KAAKgqB,WAAW/vB,gBACX3L,EAAAA,QAAA8B,cAAA,MAAA,CAAK6X,UAAU,mBAAmByiB,GAEvC5sB,EAAUW,SAASxE,GAEvB,KACK6D,EAAU+B,WAAW5F,GAGnBywB,MACT,EAAChlB,EAEDilB,eAAA,SAAe1wB,GACb,GAAI6D,EAAUM,aAAanE,KAAc6D,EAAUK,UAAUlE,gBAEzD,OACE3L,EAAA,QAAA8B,qBAAKrB,GAAIkL,EAAS,qBAChB3L,EAAA,QAAA8B,cAAA,MAAA,CAAK6X,UAAU,mCACZjI,KAAK4qB,8BAERt8B,EAAA,QAAA8B,qBAAK6X,UAAU,2BACZjI,KAAK6qB,uBAahB,GAAI/sB,EAAUM,aAAanE,GACzB,OAAO+F,KAAK8qB,0BAEd,GAAIhtB,EAAUK,UAAUlE,GAAW,CACjC,IAAA6e,EAAqC9Y,KAAKrR,MAAlC86B,EAAW3Q,EAAX2Q,YAAasB,EAAWjS,EAAXiS,YACfC,EAAgBjC,EAASkC,0BAA0BhxB,GAEzD,GAAI8wB,eACF,OAAOz8B,EAAAA,QAAA8B,cAAM,MAAA,KAAA4P,KAAKkrB,0BAEpB,IAAM3yB,EAAQpB,EAAYmG,aACxBrD,EAAS9C,EAAYD,YACrB8I,KAAKgZ,QAAQnqB,QAAQqO,MAGjBiuB,eACJ78B,UAAA8B,cAACg7B,EAAIA,KAACC,MAAKpjB,UAAW+I,UAAW,MAAOga,IACrChrB,KAAKkrB,uCAIV,OACE58B,EAAAA,QAAA8B,cAAA9B,EAAA,QAAAutB,SAAA,kBACEvtB,EAAA,QAAA8B,cAACk7B,EAAAA,WACCC,iBAAmBvrB,KAAKuF,MAAM2jB,cAAmBvrB,EAARpF,gBAEzCjK,EAAA,QAAA8B,cAACg7B,EAAAA,MAAKnjB,UAAU,qBACd3Z,UAAA8B,cAACk7B,EAAAA,UAAUE,OACT9iB,CAAAA,GAAI0iB,OAAKK,OACT/K,QAAS1gB,KAAKwpB,gBACdvhB,UAAWjI,KAAK4pB,sBAChBpK,aAAcxf,KAAK0pB,qBACnBjK,aAAczf,KAAK2pB,mCAEnBr7B,EAAAA,QAAA8B,oBAAI6X,UAAU,WAAWlZ,GAAIkL,EAAS,QACnCwvB,IACE3rB,EAAUI,aAAajE,IACxB+F,KAAK0rB,wBACNnzB,GAEFyH,KAAK2rB,sBACL3rB,KAAKrR,MAAMD,uBAGZJ,UAAA8B,cADDq5B,EACE6B,EAASA,UAACM,SAEXt9B,EAAA,QAAAutB,SAFqBsP,KAAAA,KAQjC,cACE,OAAO78B,EAAAA,QAAA8B,yBAAM4P,KAAKkrB,yBAEtB,EAACxlB,EAEDwlB,uBAAA,WACE,IAAIW,EAAU,GAWd,OAVI7rB,KAAKuF,MAAM2jB,UACb2C,EAAQj8B,kBACNtB,EAAA,QAAA8B,cAACu4B,GAAY,CACX/a,IAAK5N,KAAKrR,MAAMsL,SAAS,OAAS,SAClCA,SAAU+F,KAAKrR,MAAMsL,YAI3B4xB,EAAQj8B,KAAKoQ,KAAK4qB,iBAClBiB,EAAQj8B,KAAKoQ,KAAK6qB,sBACXgB,CACT,EAACnmB,EAEDimB,oBAAA,WAGE,OAAOtG,GAAeC,YAFLtlB,KAAKrR,MAAMsL,SACZ+F,KAAKgZ,QAAQnqB,QAI3BmR,KAAKspB,oBACLtpB,KAAKuF,MAAMigB,SAEf,EAAC9f,EAEDolB,wBAAA,WACE,IAAM7wB,EAAW+F,KAAKrR,MAAMsL,SACtBwvB,EAAczpB,KAAKrR,MAAM86B,YACzBuB,EAAgBjC,EAASkC,0BAA0BhxB,GAErDkO,EAAYnI,KAAK8rB,2BAA2B7xB,GAE1CkxB,eACJ78B,EAAAA,QAAA8B,cAACg7B,EAAIA,KAACC,KAAI,CAACpjB,UAAW+I,EAAAA,QAAW,MAAOga,IACrChrB,KAAK6qB,mBAAmB1iB,iBAI7B,OACE7Z,EAAA,QAAA8B,cAACk7B,EAAAA,UACCS,CAAAA,UAAW/rB,KAAKuF,MAAM2jB,SAAWjvB,EAAS,YAAS0D,EACnDsK,UAAU,mCAEV3Z,EAAA,QAAA8B,cAACg7B,OAAI,CAACnjB,UAAU,qBACd3Z,EAAA,QAAA8B,cAACg7B,EAAAA,KAAKK,QACJ/K,QAAS1gB,KAAKwpB,gBACdvhB,UAAWjI,KAAK4pB,uBAEf5pB,KAAK4qB,iBAEPnB,eACCn7B,EAAAA,QAAA8B,cAACk7B,EAASA,UAACM,SAAQ,CACjB3jB,UAAWE,EACX6jB,SAAU/xB,EAAS,QAElBkxB,GAGH,CAAEA,SAAAA,IAKZ,EAACzlB,EAEDomB,2BAAA,SAA2B7xB,GAKzB,OAJkB+F,KAAKgZ,QAAQnqB,QAAQw7B,YAMnC/uB,EAAkBmC,QAJFxD,EAASpJ,EAAUO,iBADZ4O,KAAKgZ,QAAQnqB,QAAQq7B,qBAM7CpsB,EAAUkD,UAAU/G,GAIhB,GAFE,iBAGX,EAACyL,EAEDklB,cAAA,WAQE,IAPM,IAIFqB,EAJEhyB,EAAW+F,KAAKrR,MAAMsL,SAC1BvL,EAAW,GACX4S,EAAUtB,KAAKksB,cAKRxyB,EAAI,EAAGiY,EAAMrQ,EAAQpS,OAAQwK,EAAIiY,EAAKjY,IAE3CoE,EAAUY,WAAWzE,EAAU6D,EAAU4B,aAAa4B,EAAQ5H,MAC9DoE,EAAUsB,cAAcnF,IACxB6D,EAAUuB,cAAcpF,GAC1BgyB,EAAMjb,EAAU,QACd,SACA+X,EAASkC,0BAA0BhxB,GACnC8uB,EAASe,6BAA6B7vB,IAExCvL,EAASkB,kBACPtB,EAAAA,QAAA8B,cAAA,MAAA,CACEwd,IAAK,YAAclU,EACnBuO,UAAWgkB,EACXl9B,GAAIkL,EAAS,OACbulB,aAAcxf,KAAK0pB,qBACnBjK,aAAczf,KAAK2pB,mCAEnBr7B,UAAA8B,cAAK6X,MAAAA,CAAAA,UAAU,iBAAiBqa,MAAOtiB,KAAKmsB,qCAC1C79B,EAAA,QAAA8B,cAACg2B,GAAM,CACLzhB,MAAOjL,EACPiG,OAAQ2B,EAAQ5H,GAChBO,SAAUA,EACV0M,SAAU3G,KAAKgpB,mBACfzD,gBAAiBvlB,KAAKspB,oBACtB9D,SAAUxlB,KAAKuF,MAAMigB,YAGxBxlB,KAAKosB,eACLpsB,KAAKqsB,oBAIZ,OAAO39B,CACT,EAACgX,EAEDwmB,YAAA,WACE,IAAMjyB,EAAW+F,KAAKrR,MAAMsL,SAgB5B,OAfKA,EAASpJ,EAAUQ,cACtB4I,EAASpJ,EAAUQ,YAAc,IAE9B0I,MAAM+K,QAAQ7K,EAASpJ,EAAUQ,eACpC4I,EAASpJ,EAAUQ,YAAc,CAAC4I,EAASpJ,EAAUQ,cAET,IAA1C4I,EAASpJ,EAAUQ,YAAYnC,SAE/B+K,EAASpJ,EAAUQ,YADjByM,EAAUK,UAAUlE,KAAc6D,EAAUM,aAAanE,GAC1B,GAEA,CAC/B4T,GAAwBmB,eAAe/U,KAItCA,EAASpJ,EAAUQ,WAC5B,EAACqU,EAEDymB,qBAAA,WACE,IAAMj9B,EAAS2Y,OACb7H,KAAKrR,MAAMsL,SAASpJ,EAAUmC,2BAEhC,OAAK9D,EAIE,CACLo9B,SAAU,EACVC,SAAU,OACV/P,MAAK,QAAUttB,EACjB,sBAPS,EAQX,EAAC65B,EAEMyD,gBAAP,SAAuBvyB,EAAUyE,GAO/B,OANcA,EACV,SACiC,IAAjC7N,EAAUsC,mBACV,QACA,OAAStC,EAAUE,aAAeF,EAAUsC,kBAGlD,EAAC41B,EAEMkC,0BAAP,SAAiChxB,GAC/B,IAAMwyB,EAAiB3uB,EAAU0B,YAAYvF,GAC7C,OAAOwyB,EAAiB,YAAcA,EAAiB,EACzD,EAAC1D,EAEMgB,mBAAP,SAA0B9vB,GACxB,OAAO6D,EAAUyB,aAAatF,GAAY,aAAe,EAC3D,EAAC8uB,EAEMe,6BAAP,SAAoC7vB,GAClC,OACE9C,EAAY8G,SACVhE,EACApJ,EAAUc,aACVd,EAAUe,OAAOkB,uBAGZ,wBAGF,EACT,EAAC4S,EAEDgmB,sBAAA,WACE,IAAMtc,EACFpP,KAAKrR,MAAMuO,KAAK8lB,cADNhjB,KAAKuF,MAAM2jB,SACS,CAAEn6B,GAAI,oBACN,CAAEA,GAAI,gCAExC,OACET,EAAAA,QAAA8B,cAAA,OAAA,CAAMswB,QAAS1gB,KAAKwpB,gBAAiBpa,MAAOA,gBAExC9gB,EAAAA,QAAA8B,cADD4P,KAAKuF,MAAM2jB,SACT7M,GAEAO,GAFa,CAACxN,MAAOA,IAM9B,EAAC1J,EAED2mB,gBAAA,WACE,IAAMpyB,EAAW+F,KAAKrR,MAAMsL,SAC5B,OAAOA,EAASpJ,EAAUuF,sBACxB6D,EAASpJ,EAAUuF,qBAAqBlH,oBACxCZ,EAAA,QAAA8B,cAACi4B,GAAU,CACTpV,SAAUhZ,EAASpJ,EAAUuF,qBAC7B2nB,UAAW,mCAEXzvB,EAAA,QAAA8B,cAACysB,GAAU,OAEX,IACN,EAACnX,EAED0mB,aAAA,WACE,IAAMnyB,EAAW+F,KAAKrR,MAAMsL,SAC5B,OAAOA,EAASpJ,EAAUsE,uBACxB7G,UAAA8B,cAAA,MAAA,CAAK6X,UAAU,kBAAkBhO,EAASpJ,EAAUsE,WAClD,IACN,EAACuQ,EAEDmlB,mBAAA,SAAmB1iB,GAMjB,IALA,IAAMzZ,EAAW,GACX2L,EAAe2F,KAAK0sB,mBACpBrC,EAAYrqB,KAAKgZ,QAAQnqB,QAAQw7B,UACjCH,EAAqBlqB,KAAKgZ,QAAQnqB,QAAQq7B,mBAEvCxwB,EAAI,EAAGA,EAAIW,EAAanL,OAAQwK,IAAK,CAC5C,IAAIO,EAAWI,EAAaX,GACxB8sB,EAAYxmB,KAAKgZ,QAAQ/O,aAAahQ,EAAU8uB,GAChDr4B,EAAU,MAGZ25B,GACc,oBAAdliB,GACA9O,EAAMW,iBAAiBkwB,EAAoBjwB,GAAU,GAAM,GAAO,MAElEvJ,eAAUpC,EAAK,QAAC8B,cAAco2B,EAAW,CACvC5Y,IAAK,gBAAkBlU,EACvBO,SAAUA,EACV0M,SAAU3G,KAAKopB,wBACfzkB,MAAOjL,EACPwD,KAAM8C,KAAKrR,MAAMuO,QAGrBxO,EAASkB,KAAKc,EAChB,CACA,OAAOhC,CACT,EAACgX,EAEDgnB,iBAAA,WACE,IAAMzyB,EAAW+F,KAAKrR,MAAMsL,SAsB5B,OArBKA,EAASpJ,EAAUO,mBACtB6I,EAASpJ,EAAUO,iBAAmB,IAEnC2I,MAAM+K,QAAQ7K,EAASpJ,EAAUO,oBACpC6I,EAASpJ,EAAUO,iBAAmB,CACpC6I,EAASpJ,EAAUO,mBAKvBkK,EAAkBkC,uBAChBvD,EAASpJ,EAAUO,iBACnB4O,KAAKgZ,QAAQnqB,QAAQqO,MAIvB5B,EAAkBc,8BAChBnC,EAASpJ,EAAUO,iBACnBP,EAAUgF,wBAGLoE,EAASpJ,EAAUO,gBAC5B,EAACsU,EAED0kB,qBAAA,WACE,OAAOtsB,EAAU4B,aAAaM,KAAKksB,cAAc,GACnD,EAACnD,CAAA,CAlgB0B,CAASz6B,EAAK,QAACya,WAqgB5CggB,GAAS1P,YAAcjQ,GAEvB2f,GAASv4B,UAAY,CACnByJ,SAAUxJ,EAAAA,QAAUwU,OAAOtU,WAC3BgW,SAAUlW,EAAAA,QAAUG,KAAKD,WACzBgU,MAAOlU,UAAUwgB,OACjB8Z,YAAat6B,UAAU+e,KACvBia,YAAah5B,EAAS,QAAC+e,MAGzBuZ,GAAS5f,aAAe,CACtB4hB,aAAa,EACbtB,aAAa,GC/hBT,IAAAkD,GAAa,SAACh+B,GAClB,IAAAugB,EACEC,EAAUA,WAACtL,GADLa,EAAuBwK,EAAvBxK,wBAAyBM,EAAoBkK,EAApBlK,qBAE3B9H,EAAOglB,EAAOA,UAwCdjoB,EAAW+K,EAAqB,CAACrW,EAAMgW,qBAE7C,OACErW,EAAAA,QAAA8B,cAAC9B,EAAK,QAACutB,2BACLvtB,EAAAA,QAAA8B,cAAC24B,IACC9uB,SAAUA,EACV0M,SAbW,SAAChC,EAAOmf,GACvBpf,EAAwB/V,EAAMgW,OAASA,EAAK9U,OAAAC,OAAA,CAAA,EACvCnB,EAAMsL,SACN6pB,GAEP,EASM2F,YAAa3rB,EAAUM,aAAanE,GACpCiD,KAAMA,IAEPvO,EAAME,QAAQgb,gCArCfvb,EAAA,QAAA8B,cAACw8B,iBAAc3kB,UAAU,oBACrBtZ,EAAMk+B,0BACNv+B,EAAA,QAAA8B,cAAC8yB,EAAAA,QACCjb,UAAU,OACVyY,QAVa,WACrB/xB,EAAMm+B,gBACR,EASU3J,QAAQ,UACR3b,KAAK,MAEJtK,EAAK8lB,cAAc,CAAEj0B,GAAI,sBAG5BJ,EAAMo+B,yBACNz+B,EAAA,QAAA8B,cAAC8yB,EAAAA,OAAM,CAACxC,QAvBG,WACjBhc,EAAwB/V,EAAMgW,MAAOK,KACrCrW,EAAMq+B,YACR,EAoBqC7J,QAAQ,UAAU3b,KAAK,MACjDtK,EAAK8lB,cAAc,CAAEj0B,GAAI,kBA2BtC,EAEA49B,GAAWn8B,UAAY,CACrB3B,QAAS4B,EAAS,QAACwU,OAAOtU,WAC1BsJ,SAAUxJ,UAAUwU,OAAOtU,WAC3BgU,MAAOlU,EAAS,QAACwgB,OAAOtgB,WACxBq8B,WAAYv8B,EAAS,QAACG,KACtBk8B,eAAgBr8B,EAAS,QAACG,KAC1BqZ,aAAcxZ,EAAAA,QAAUG,KACxBi8B,YAAap8B,EAAS,QAAC+e,KACvBud,WAAYt8B,EAAS,QAAC+e,MC/DxB,IAAMyd,GAAsB,SAAHx+B,OAAMy+B,EAAKz+B,EAALy+B,MAAOC,EAAU1+B,EAAV0+B,WAAYC,EAAW3+B,EAAX2+B,YACxCv+B,EAAYsgB,aAAW/F,IAAvBva,QACFqO,EAAOglB,EAAOA,uBAEpB,OACE5zB,UAAA8B,cAACg7B,EAAAA,KAAKK,OACJn9B,kBAAAA,EAAA,QAAA8B,cAACi9B,EAAGA,IAAA,CACFlK,QAAQ,OACR4I,UAAWqB,EACXE,SAAU,SAAC1f,GAAG,OAAKuf,EAAWxN,SAAS/R,GAAK,GAE3Csf,EAAMvwB,IAAI,SAAC4wB,EAAM5oB,gBAAK,OACrBrW,EAAA,QAAA8B,cAAC2sB,GAAW,CACVhuB,GAAG,gBACH4uB,eAAgBzgB,EAAK8lB,cAAc,CAAEj0B,GAAI,uBACzC0uB,MAAO5uB,EAAQib,mCAEfxb,EAAAA,QAAA8B,cAACo9B,EAAOA,SAAC5f,IAAK,MAAQjJ,EAAO5V,GAAI,cAAgB4V,gBAC/CrW,UAAA8B,cAACq9B,EAAAA,QAAO,CACNzB,SAAUrnB,EACV+oB,OAAQ/oB,IAAUyoB,EAAc,SAAW,GAC3CO,QAAQ9+B,EAAQw7B,YAAqBvsB,EAAU+B,WAAW0tB,GAC1Dje,UAAWzgB,EAAQib,qBACnB7B,UAAW+I,EAAU,QAAC,CACpBniB,EAAQw7B,YAAcvsB,EAAU+B,WAAW0tB,GACvC,kBACAxE,GAASgB,mBAAmBwD,GAChC,gBAGDp2B,EAAYmG,aACXiwB,EAAKp2B,EAAYD,YACjBrI,EAAQqO,QAIF,IAKxB,EAEA+vB,GAAoBz8B,UAAY,CAC9B48B,YAAa38B,EAAS,QAACwgB,OAAOtgB,WAC9Bu8B,MAAOz8B,EAAAA,QAAUyU,MAAMvU,WACvBw8B,WAAY18B,EAAS,QAACG,KAAKD,YC9C7B,IAAMi9B,GAAoB,SAAHn/B,GAAM,IAAAy+B,EAAKz+B,EAALy+B,MAAOC,EAAU1+B,EAAV0+B,WAAYC,EAAW3+B,EAAX2+B,YACtCv+B,EAAYsgB,EAAAA,WAAW/F,IAAvBva,QACFqO,EAAOglB,EAAAA,uBAEb,OACE5zB,EAAA,QAAA8B,qBAAK6X,UAAU,qCACb3Z,EAAA,QAAA8B,cAACm4B,EAAAA,eACE2E,EAAMvwB,IAAI,SAAC4wB,EAAM5oB,gBAAK,OACrBrW,UAAA8B,cAAC2sB,IACChuB,GAAG,gBACH4uB,eAAgBzgB,EAAK8lB,cAAc,CAAEj0B,GAAI,uBACzC0uB,MAAO5uB,EAAQib,mCAEfxb,EAAA,QAAA8B,cAACq4B,EAAAA,cAAa,CACZkF,QAAQ9+B,EAAQw7B,YAAqBvsB,EAAU+B,WAAW0tB,GAC1D3f,IAAK,MAAQjJ,EACb+b,QAAS,kBAAMyM,EAAWxoB,EAAM,EAChC5V,GAAI,cAAgB4V,EACpBkpB,QAAQ,EACRH,OAAQ/oB,IAAUyoB,EAAc,SAAW,GAC3C9d,UAAWzgB,EAAQib,qBACnBqZ,QAAS,UACTlb,UAAW+I,EAAAA,QAAW,CACpBniB,EAAQw7B,YAAcvsB,EAAU+B,WAAW0tB,GACvC,kBACAxE,GAASgB,mBAAmBwD,GAChC,gBAGDp2B,EAAYmG,aACXiwB,EAAKp2B,EAAYD,YACjBrI,EAAQqO,OAGA,IAKxB,EAEA0wB,GAAkBp9B,UAAY,CAC5B48B,YAAa38B,EAAAA,QAAUwgB,OAAOtgB,WAC9Bu8B,MAAOz8B,EAAS,QAACyU,MAAMvU,WACvBw8B,WAAY18B,EAAS,QAACG,KAAKD,YC7C7B,OAAMm9B,GAAuB,SAAC9f,EAAUjf,GACtC,IAAMg/B,EAAwB,SAAxBA,EAAyB9zB,EAAU0K,GACvC,OAAK1K,EAIDA,EAAS,SAAWlL,EACf4V,EAGYtL,EAAMO,QAAQK,EAASpJ,EAAUO,kBAElC48B,UAClB,SAACnrB,EAAG8B,GAAU,OAAqC,IAArCopB,EAAsBlrB,EAAG8B,EAAa,IAV5C,CAYZ,EAEA,OAAOqJ,EAASggB,UACd,SAACT,EAAM5oB,GAAK,OAA6C,IAAxCopB,EAAsBR,EAAM5oB,EAAa,EAE9D,EAEMspB,GAAS,WACb,IAAMC,EAAuB5/B,EAAAA,QAAM6gB,WAAWtL,GAC9CsqB,EAAkC7/B,EAAK,QAAC6gB,WAAW/F,IAA3Cva,EAAOs/B,EAAPt/B,QAASob,EAAYkkB,EAAZlkB,aAEbF,EAAe,EACflb,EAAQq7B,oBAMY,KALtBngB,EAAe+jB,GACbI,EAAqBlpB,uBACrBnW,EAAQq7B,uBAIRj8B,QAAQC,yBAAyBW,EAAQq7B,mBAA+B,eACxEngB,EAAe,GAERlb,EAAQkb,eACjBA,EACElb,EAAQkb,aAAemkB,EAAqBlpB,uBAAuB9V,OAC/DL,EAAQkb,aACR,GAGR,IAAAqkB,EAAsC9/B,EAAK,QAAC0V,SAAS+F,GAA9CqjB,EAAWgB,KAAEC,EAAcD,EAElC,GAAAE,EACEhgC,EAAK,QAAC0V,UAAS,GADVuqB,EAA4BD,KAAEE,EAA+BF,EAGpEhqB,GAAAA,EAAAA,UAAU,WACR,GAAIzV,EAAQq7B,qBAAuBqE,EAA8B,CAC/D,IAAM79B,EAAU0lB,SAASqY,eAAe5/B,EAAQq7B,oBAC5Cx5B,IACFA,EAAQg+B,iBACRh+B,EAAQi+B,UAAUjyB,IAAI,eACtB8xB,GAAgC,GAEpC,CACF,GAEA,IAiCQpqB,EAqCJwqB,EAAM,KACNV,EAAqBlpB,uBAAuB9V,OAAS,IAtCjDkV,EAAoB8pB,EAAqBlpB,uBAuC/C4pB,eApCEtgC,EAAAA,QAAA8B,cADKvB,EAAQ+a,oBACZqjB,GAMAW,GALCR,CAAAA,YAAaA,EACbF,MAAO9oB,EACP+oB,WAxBW,SAAC0B,GAChB,IAAM7gB,EAAWkgB,EAAqBlpB,uBAElC6pB,IAAczB,GAAeyB,GAAa7gB,EAAS9e,QAKrD2/B,EAAYzB,IACXpf,EAAS6gB,GAAWC,UACpBjgC,EAAQib,sBAIXukB,EAAeQ,EACjB,KA6CA,IAtBQtB,EAEFwB,EAoBAC,EAAengC,EAAQ+a,iCAQ7B,OACEtb,EAAAA,QAAA8B,cAACg7B,OAAI,CAACnjB,UARc+mB,EAAe,GAAK,gBASrCJ,eACDtgC,EAAAA,QAAA8B,qBAAK6X,UATkB+mB,EACvB,gBACAJ,EACA,kBACA,eA1BEG,EAAgB9kB,EAFdsjB,EAFWW,EAAqBlpB,uBAEhBooB,GAEiBT,iBAChCr+B,EAAAA,QAAM8B,cAAc2+B,EAAe,CACxClgC,QAASA,EACT+e,IAAK,OAASwf,EACdnzB,SAAUszB,EACVP,WA5De,WACjB,IAAMhf,EAAWkgB,EAAqBlpB,uBAClCooB,IAAgBpf,EAAS9e,OAAS,IACpC8e,EAASof,EAAc,GAAG0B,SAAU,EACpCT,EAAe,SAACY,UAAoBA,EAAkB,CAAC,GAE3D,EAuDInC,eArDmB,WACD,IAAhBM,GAGJiB,EAAe,SAACY,GAAoB,OAAAA,EAAkB,CAAC,EACzD,EAiDIhlB,aAAcA,EACdtF,MAAOyoB,EACPP,YAA6B,IAAhBO,EACbL,WACEK,IAAgBc,EAAqBlpB,uBAAuB9V,OAAS,MAuB7E,EC1JMggC,gBAAa5gC,EAAAA,QAAM6gC,WAAW,SAACxgC,EAAOqZ,GAC1C,IAAQnZ,EAAYP,EAAAA,QAAM6gB,WAAW/F,IAA7Bva,qBAER,OACEP,EAAA,QAAA8B,cAACg/B,EAAKA,MAAA9+B,EAAA,CAACkX,KAAK,KAAK6nB,WAAW,GAAUxgC,EAAQ8a,yBAC5Crb,EAAAA,QAAA8B,cAACg/B,EAAAA,MAAM3D,OAAO6D,CAAAA,6BACZhhC,EAAA,QAAA8B,cAACg/B,EAAKA,MAACG,MAAK,KAAE1gC,EAAQ8a,WAAWyF,qBAGnC9gB,EAAAA,QAAA8B,cAACg/B,EAAAA,MAAM/D,KAAKpjB,CAAAA,UAAU,uBAAuBtZ,EAAMD,UAGzD,GAEAwgC,GAAW1+B,UAAY,CACrB9B,SAAU+B,EAAAA,QAAUC,QAAQC,YClBO,IAEhB6+B,cAAmB,EAAAC,GAAnBD,GAAAA,GAQZE,yBAA2B,SAACjtB,EAAWxI,EAAU0K,EAAOzH,GAC7D,GAAIjD,EAASpJ,EAAUQ,YAAa,CAClC,IACMoT,EADY2iB,GAAgBntB,EAAUiD,EAC7B4qB,GAEXrjB,IACFhC,EAAUkC,GAAM9U,OAAAC,OAAQmK,GAAAA,EAAawK,GAEzC,CACA,IAAA,IAAgClK,EAAhCD,EAAAE,EAAuBiI,KAASlI,EAAAD,KAAAG,MAC9Bg1B,GAAKE,6BADYp1B,EAAAhK,MAC2B2M,EAEhD,EApBmBsyB,GA2BZG,6BAA+B,SAAC11B,EAAUiD,GAE/C,IADA,IAAM7C,EAAehB,EAAMO,QAAQK,EAASpJ,EAAUO,kBAC7CuT,EAAQ,EAAGA,EAAQtK,EAAanL,OAAQyV,IAE/C8qB,GAAKC,yBAAyBr1B,EADVA,EAAasK,GACwBA,EAAOzH,EAEpE,EC1BF,IAAM0yB,gBAAcT,EAAUA,WAAC,SAACxgC,EAAOqZ,GACrC,IAAAkH,EACEC,EAAAA,WAAWtL,GADLmB,EAAoBkK,EAApBlK,qBAAsBN,EAAuBwK,EAAvBxK,wBAAyBK,EAAOmK,EAAPnK,QAEjD7H,EAAOglB,EAAOA,UAIpB2N,EAAAA,oBACE7nB,EACA,WACE,MAAO,CACL8nB,aAAAA,EACAhtB,qBAAAA,EACAkC,qBAAAA,EACA+qB,YAAAA,EAEJ,EACA,IAGF,IAAMA,EAAc,WAClB,IAAMxgC,EAAOwV,IACPX,EAAoBY,IAE1B,OAAO6I,GAAwBC,yBAC7Bve,EACA6U,EAEJ,EAGM0rB,EAAe,WAGnB,IAFA,IAAMrtB,EAAYuC,IAETtL,EAAI,EAAGA,EAAI+I,EAAUvT,OAAQwK,IAEpC81B,GAAoBE,yBAClBjtB,EAFeA,EAAU/I,GAIzBA,EACAwD,GAIJwH,EAAwB,KAAMjC,EAChC,EAEMK,EAAuB,WAC3B,IAAML,EAAYuC,IAClB,OAAOlH,EAAUgF,qBAAqBL,EACxC,EAMMutB,EAAuB,WAC3B,IAAM5rB,EAAoBY,iBAE1B,OACE1W,EAAAA,QAAA8B,cAACg7B,EAAAA,KAAI,CAACnjB,UAAU,OACb7D,EAAkBzH,IAAI,SAACkG,EAAGnJ,GAAC,OAAKu2B,EAAaptB,EAAGnJ,EAAE,GAGzD,EAEMu2B,EAAe,SAACh2B,EAAU0K,GAC9B,IAAI6hB,EAAY73B,EAAMsb,aAAahQ,EAAU8uB,iBAC7C,OAAOz6B,EAAAA,QAAM8B,cAAco2B,EAAW,CACpC5Y,IAAK3T,EAAS,OACdA,SAAUA,EACV0M,SAAU,SAAChC,EAAOmf,GAAM,OAnBH,SAAC7pB,EAAU0K,EAAOmf,GACzCpf,EAAwBC,EAAK9U,OAAAC,OAAOmK,CAAAA,EAAAA,EAAa6pB,GACnD,CAiBiCoM,CAAiBj2B,EAAU0K,EAAOmf,EAAO,EACtEnf,MAAOA,EACPzH,KAAMA,GAEV,EAEQwM,EAAc/a,EAAd+a,UAEFtF,EAAoBY,IAE1B,IAAKZ,EAAkBlV,oBACrB,OACEZ,EAAA,QAAA8B,cAACg7B,EAAIA,KAAA,CAACnjB,UAAU,mBAAkB,uCAMtC,IAAMkoB,EAAe/rB,EAAkBgsB,MACrC,SAACn2B,GAAa,OAAC6D,EAAUI,aAAajE,EAAS,GAGjD,OAAIyP,eAEApb,EAAAA,QAAA8B,cAAC8+B,GAAU,KACRiB,EAAeH,iBAAyB1hC,EAAA,QAAA8B,cAAC69B,GAAQ,OAKjDkC,EAAeH,iBAAyB1hC,EAAA,QAAA8B,cAAC69B,GAAQ,KAC1D,GC7GMoC,gBAAajrB,SAAAA,GACjB,SAAAirB,EAAY1hC,OAAO0W,EAMf,OALFA,EAAAD,EAAAE,KAAM3W,KAAAA,IACN0W,MAAKE,MAAQ,CACX+qB,UAAU,EACVC,WAAY,KACZC,aAAc,MACdnrB,CACJ,CARiBI,EAAA4qB,EAAAjrB,GAQhBirB,EAEMI,yBAAP,SAAgCtiC,GAC9B,MAAO,CAAEmiC,UAAU,EAAMniC,MAAOA,EAClC,EAACuX,IAAAA,EAAA2qB,EAAA1qB,iBAAAD,EAEDgrB,kBAAA,SAAkBH,EAAYC,GAC5BxwB,KAAK4G,SAAS,CACZ2pB,WAAYA,EACZC,aAAcA,GAElB,EAAC9qB,EAEDqB,OAAA,WACE,GAAI/G,KAAKuF,MAAM+qB,SAAU,CACvB,IAAQ7lB,EAASzK,KAAKgZ,QAAdvO,kBACR,OACEnc,EAAA,QAAA8B,cAAKkyB,MAAAA,CAAAA,MAAO,CAAEqO,QAAS,sBACrBriC,EAAA,QAAA8B,cAACwgC,EAAAA,MAAK,CAACzN,QAAQ,uBACb70B,EAAAA,QAAA8B,cAACwgC,QAAMC,QACJpmB,KAAAA,EAAK,0BAA4B,sCAEpCnc,EAAA,QAAA8B,cAAA,IAAA,KAAI4P,KAAKuF,MAAMgrB,YAAcvwB,KAAKuF,MAAMgrB,WAAW7Q,0BAErDpxB,EAAA,QAAA8B,cAACk7B,EAAAA,4BACCh9B,EAAA,QAAA8B,cAACg7B,EAAAA,KACC98B,kBAAAA,UAAA8B,cAACg7B,EAAAA,KAAKK,OACJn9B,kBAAAA,EAAAA,QAAA8B,cAACk7B,EAASA,UAACE,OAAO9iB,CAAAA,GAAIwa,EAAAA,OAAQC,QAAQ,OAAO6I,SAAS,KACnDvhB,EAAK,uBAAyB,oCAGnCnc,UAAA8B,cAACk7B,EAASA,UAACM,SAASI,CAAAA,SAAS,kBAC3B19B,UAAA8B,cAACg7B,EAAAA,KAAKC,uBACJ/8B,EAAAA,QAAA8B,cAAA,MAAA,CAAKkyB,MAAO,CAAEwO,WAAY,aACvB9wB,KAAKuF,MAAMirB,cACVxwB,KAAKuF,MAAMirB,aAAaO,oBAQ1C,CAEA,OAAO/wB,KAAKrR,MAAMD,QACpB,EAAC2hC,CAAA,CAtDgBjrB,CAAS9W,EAAK,QAACya,WAyDlCsnB,GAAchX,YAAcjP,GChDtB,IAAA4mB,gBAAS7B,EAAUA,WAAC,SAACxgC,EAAOqZ,GAChC,IAAAjE,EAA8BC,EAAAA,UAAS,GAAhCitB,EAAOltB,EAAA,GAAEkW,EAAUlW,EAAA,GAC1BG,EAA4CF,EAAAA,SAAS,MAA9CqJ,EAAcnJ,EAAEgtB,GAAAA,EAAiBhtB,EACxC,GAAAitB,EAAwBntB,EAAAA,SAAS,MAA1BsJ,EAAI6jB,EAAEC,GAAAA,EAAOD,EAEpB7sB,GAwBA,GAxBAA,EAAAA,UAAU,YACc,WAAA,IACY,OAAAnV,QAAAC,QACU4d,GAAcI,cACtDze,EAAM2e,KAFK3e,EAAME,QAAQqO,OAI1B5N,KAAAb,SAAAA,GAHM,IAAA4e,EAAc5e,EAAA,GAAEuP,EAASvP,EAAA,GAM9B4e,EAAelJ,cAAcktB,KAAK,SAAC9D,GACjC,OAAAzvB,EAAUI,aAAaqvB,EAAK,KAG9BlgB,EAAelJ,cAAc,GAAG2qB,SAAU,GAG5CoC,EAAkB7jB,GAClB+jB,EAAQpzB,GACRic,GAAW,EAAO,EACpB,CAAC,MAAAlqB,GAAA,OAAAZ,QAAAa,OAAAD,EAEDuhC,CAAAA,CAAAA,EACF,EAAG,CAAC3iC,EAAM2e,OAEN2jB,EACF,OACEtiC,EAAM4iC,qBAAUjjC,EAAAA,QAAA8B,cAACg7B,EAAAA,KAAKnjB,CAAAA,UAAU,mBAAkB,qBAItD,IAgBMupB,EAhB+B,SAACnoB,EAAYiE,GAChD,OAAO,SAACrT,EAAUw3B,GAChB,IAAKpoB,EACH,OAAOooB,EAGT,IAAA,IAA6Cl3B,EAA7CD,EAAAE,EAAmC6O,KAAU9O,EAAAD,KAAAG,MAAE,CAAA,IAAAi3B,EAAAn3B,EAAAhK,MAApCi2B,EAASkL,EAATlL,UACT,IAAImL,EADuBD,EAAPC,SACR13B,EAAUqT,GACpB,OAAOkZ,CAEX,CAEA,OAAOiL,CACT,CACF,CAEsBG,CACpBjjC,EAAMkjC,kBACNvkB,gBAGF,OACEhf,EAAAA,QAAA8B,cAAC4Z,GACCX,CAAAA,WAAY1a,EAAM0a,WAClBE,kBAAmB5a,EAAM4a,kBACzBU,aAAcunB,EACd3iC,QAASF,EAAME,sBAEfP,EAAAA,QAAA8B,cAACia,GAAoB/R,CAAAA,OAAQ3J,EAAME,QAAQqO,KAAK5E,qBAC9ChK,EAAAA,QAAA8B,cAAC0hC,GAAe,kBACdxjC,EAAA,QAAA8B,cAAC5B,EAAsB,CACrBa,qBAAsBV,EAAMU,mCAE5Bf,EAAA,QAAA8B,cAAC0T,GACCvU,CAAAA,KAAM+d,EACNnJ,cAAekJ,EAAelJ,cAC9BI,YAAa5V,EAAM4V,0BAEnBjW,EAAA,QAAA8B,cAACw/B,GAAW,CACV5nB,IAAKA,EACL0B,UAAW/a,EAAME,SAAWF,EAAME,QAAQ6a,UAC1CO,aAAcunB,QAQ9B,GAEAR,GAAOxgC,UAAY,CACjB8c,KAAM7c,EAAAA,QAAUwU,OAAOtU,WACvB9B,QAAS4B,EAAAA,QAAUwU,OAAOtU,WAC1BkhC,kBAAmBphC,EAAS,QAACyU,MAC7BmE,WAAY5Y,EAAS,QAACwU,OACtBsE,kBAAmB9Y,EAAS,QAACwU,OAC7B5V,qBAAsBoB,EAAS,QAACG,KAChC2T,YAAa9T,EAAS,QAACG,KACvB2gC,OAAQ9gC,EAAS,QAACC"}
1
+ {"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 >\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\">\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\">\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\">\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\">\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\">\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\">\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 className=\"m-2\" controlId=\"formBasicComment\">\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 _onMouseEnterHandler = () => {\n this.setState({ showIcon: true });\n };\n\n _onMouseLeaveHandler = () => {\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 defaultActiveKey={!this.state.expanded ? label : undefined}\n >\n <Card className=\"mb-3\">\n <Accordion.Toggle\n as={Card.Header}\n onClick={this._toggleCollapse}\n className={this._getHeaderClassName()}\n onMouseEnter={this._onMouseEnterHandler}\n onMouseLeave={this._onMouseLeaveHandler}\n >\n <h6 className=\"d-inline\" id={question[\"@id\"]}>\n {collapsible &&\n !FormUtils.isWizardStep(question) &&\n this._renderCollapseToggle()}\n {label}\n </h6>\n {this.renderQuestionIcons()}\n {this.props.children}\n </Accordion.Toggle>\n {collapsible ? (\n <Accordion.Collapse>{cardBody}</Accordion.Collapse>\n ) : (\n <>{cardBody}</>\n )}\n </Card>\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\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={this._getHeaderClassName()}\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._onMouseEnterHandler}\n onMouseLeave={this._onMouseLeaveHandler}\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-right\">\n {!props.isFirstStep && (\n <Button\n className=\"mr-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","Check","ref","className","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","_onMouseEnterHandler","_onMouseLeaveHandler","_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","defaultActiveKey","Toggle","Header","_renderCollapseToggle","renderQuestionIcons","Collapse","content","getShowIrrelevantClassname","activeKey","eventKey","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","whiteSpace","componentStack","SForms","loading","setFormProperties","_useState3","setForm","some","initialiseSForms","loader","_mapComponent","defaultComponent","_step$value","mapRule","_getComponentMappingFunction","componentMapRules","ErrorBoundaries"],"mappings":"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"}