From 44f548c388ba609e680f372e60b8ec793d157588 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Thu, 13 Jul 2023 13:16:00 +0530 Subject: [PATCH 01/45] Issue #42 feat: Added an interface for match the following type question --- .../src/lib/interfaces/MtfForm.ts | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts diff --git a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts new file mode 100644 index 00000000..489d3f99 --- /dev/null +++ b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts @@ -0,0 +1,56 @@ +import * as _ from "lodash-es"; + +export class MtfOption { + constructor(public leftOption: string, public rightOption: string) {} +} + +export interface MtfData { + question: string; + options: Array; + answer?: object; + learningOutcome?: string; + complexityLevel?: string; + maxScore?: number; +} + +export interface MtfConfig { + templateId?: string; + numberOfOptions?: number; + maximumOptions?: number; + +} + +export class MtfForm { + public question: string; + public options: Array; + public templateId: string; + public answer: object; + public learningOutcome?: string; + public complexityLevel?: string; + public maxScore?: number; + public maximumOptions; + public numberOfOptions; + + constructor({question, options, answer, learningOutcome, complexityLevel, maxScore,}: MtfData,{ templateId, numberOfOptions, maximumOptions }: MtfConfig) { + this.question = question; + this.options = options || []; + this.templateId = templateId; + this.answer = answer || {}; + this.learningOutcome = learningOutcome; + this.complexityLevel = complexityLevel; + this.numberOfOptions = numberOfOptions || 2; + this.maximumOptions = maximumOptions || 4; + this.maxScore = maxScore; + if (!this.options || !this.options.length) { + _.times(this.numberOfOptions, index => this.options.push(new MtfOption("",""))); + } + } + + addOptions() { + this.options.push(new MtfOption("", "")); + } + + deleteOptions(position: number) { + this.options.splice(position, 1); + } +} From cefe2a612bf9589b72fc40514ce1413e6412240f Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Fri, 14 Jul 2023 11:21:13 +0530 Subject: [PATCH 02/45] Used optional chaining --- .../questionset-editor-library/src/lib/interfaces/MtfForm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts index 489d3f99..5b2aab54 100644 --- a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts +++ b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts @@ -41,7 +41,7 @@ export class MtfForm { this.numberOfOptions = numberOfOptions || 2; this.maximumOptions = maximumOptions || 4; this.maxScore = maxScore; - if (!this.options || !this.options.length) { + if (!this.options?.length) { _.times(this.numberOfOptions, index => this.options.push(new MtfOption("",""))); } } From 0cc5c5038f894afff83e73a644da2b7db806688a Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Sat, 15 Jul 2023 12:24:41 +0530 Subject: [PATCH 03/45] updated answer type to string as per schema --- .../src/lib/interfaces/MtfForm.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts index 5b2aab54..9634569b 100644 --- a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts +++ b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts @@ -7,7 +7,7 @@ export class MtfOption { export interface MtfData { question: string; options: Array; - answer?: object; + answer?: string; learningOutcome?: string; complexityLevel?: string; maxScore?: number; @@ -24,7 +24,7 @@ export class MtfForm { public question: string; public options: Array; public templateId: string; - public answer: object; + public answer: string; public learningOutcome?: string; public complexityLevel?: string; public maxScore?: number; @@ -35,19 +35,19 @@ export class MtfForm { this.question = question; this.options = options || []; this.templateId = templateId; - this.answer = answer || {}; + this.answer = answer; this.learningOutcome = learningOutcome; this.complexityLevel = complexityLevel; this.numberOfOptions = numberOfOptions || 2; this.maximumOptions = maximumOptions || 4; this.maxScore = maxScore; if (!this.options?.length) { - _.times(this.numberOfOptions, index => this.options.push(new MtfOption("",""))); + _.times(this.numberOfOptions, index => this.options.push(new MtfOption('', ''))); } } addOptions() { - this.options.push(new MtfOption("", "")); + this.options.push(new MtfOption('', '')); } deleteOptions(position: number) { From 803e8769f977ab27fd6dbb251b49f0e09b4dbc99 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Fri, 21 Jul 2023 09:38:22 +0530 Subject: [PATCH 04/45] Add Match The Following Question in question primary categories --- .../src/lib/services/config/editor.config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/questionset-editor-library/src/lib/services/config/editor.config.json b/projects/questionset-editor-library/src/lib/services/config/editor.config.json index 195ea0ad..20990e72 100644 --- a/projects/questionset-editor-library/src/lib/services/config/editor.config.json +++ b/projects/questionset-editor-library/src/lib/services/config/editor.config.json @@ -17,7 +17,7 @@ "accepted": "mp4, webm" } }, - "questionPrimaryCategories": ["Multiple Choice Question", "Subjective Question"], + "questionPrimaryCategories": ["Multiple Choice Question", "Subjective Question", "Match The Following Question"], "contentPrimaryCategories": ["Course Assessment", "eTextbook", "Explanation Content", "Learning Resource", "Practice Question Set"], "readQuestionFields": "body,primaryCategory,mimeType,qType,answer,templateId,responseDeclaration,interactionTypes,interactions,name,solutions,editorState,media,remarks,evidence,hints,instructions,outcomeDeclaration,", "omitFalseyProperties":["topic", "topicsIds", "targetTopicIds", "keywords"], From fff10952ce0566291e433db3b6d8121c2376392c Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Fri, 21 Jul 2023 11:21:08 +0530 Subject: [PATCH 05/45] Added Match The Following Question --- src/app/data.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/data.ts b/src/app/data.ts index e57fe105..ecf3a4da 100644 --- a/src/app/data.ts +++ b/src/app/data.ts @@ -135,7 +135,8 @@ export const questionSetEditorConfig = { children: { Question: [ 'Multiple Choice Question', - 'Subjective Question' + 'Subjective Question', + 'Match The Following Question', ] }, addFromLibrary: false, From f93a37331c43f2b4589234b1a428cd0fe686c3b4 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Fri, 21 Jul 2023 21:08:31 +0530 Subject: [PATCH 06/45] Issue #42 feat: Function for preparing Match the following body --- .../components/options/options.component.ts | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.ts index daf368fc..c2a05812 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.ts @@ -15,6 +15,7 @@ export class OptionsComponent implements OnInit, OnChanges { @Input() showFormError; @Input() sourcingSettings; @Input() questionPrimaryCategory; + @Input() questionInteractionType; @Input() mapping = []; @Input() isReadOnlyMode; @Input() maxScore; @@ -75,8 +76,16 @@ export class OptionsComponent implements OnInit, OnChanges { } editorDataHandler(event?) { - const body = this.prepareMcqBody(this.editorState); - this.editorDataOutput.emit({ body, mediaobj: event ? event.mediaobj : undefined }); + let body: any; + if (this.questionInteractionType === 'choice') { + body = this.prepareMcqBody(this.editorState); + } else if (this.questionInteractionType === 'match') { + body = this.prepareMtfBody(this.editorState); + } + this.editorDataOutput.emit({ + body, + mediaobj: event ? event.mediaobj : undefined, + }); } prepareMcqBody(editorState) { @@ -119,11 +128,40 @@ export class OptionsComponent implements OnInit, OnChanges { return metadata; } + prepareMtfBody(editorState) { + let metadata: any; + const correctAnswer = editorState.answer; + let options: any; + if (!_.isEmpty(correctAnswer)) { + options = _.reduce(this.editorState.options,function (acc, obj) { + acc.leftOption.push(obj.leftOption); + acc.rightOption.push(obj.rightOption); + return acc; + },{ leftOption: [], rightOption: [] } + ); + } + console.log(options); + console.log(editorState.answer); + metadata = { + templateId: this.templateType, + name: this.questionPrimaryCategory || 'Match The Following Question', + responseDeclaration: this.getResponseDeclaration(editorState), + outcomeDeclaration: this.getOutcomeDeclaration(), + interactionTypes: ['match'], + interactions: this.getInteractions(editorState.options), + editorState: { + options, + }, + qType: 'MTF', + primaryCategory: this.questionPrimaryCategory || "Match The Following Question", + }; + return metadata; + } getResponseDeclaration(editorState) { const responseDeclaration = { response1: { cardinality: this.getCardinality(), - type: 'integer', + type: this.questionInteractionType === 'choice' ? 'integer' : 'map', correctResponse: { value: editorState.answer, }, From fd99b99bf434ce8253cea0c4bd406d4714810b54 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Fri, 21 Jul 2023 21:22:43 +0530 Subject: [PATCH 07/45] Added some button labels --- .../src/lib/services/config/label.config.json | 376 +++++++++--------- 1 file changed, 190 insertions(+), 186 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/services/config/label.config.json b/projects/questionset-editor-library/src/lib/services/config/label.config.json index 29e13cd2..6ecd4658 100644 --- a/projects/questionset-editor-library/src/lib/services/config/label.config.json +++ b/projects/questionset-editor-library/src/lib/services/config/label.config.json @@ -50,192 +50,196 @@ "add_page_numbers_to_questions_btn_label": "Pagination" }, "lbl":{ - "search":"Search", - "subject":"Subject", - "medium":"Medium", - "gradeLevel":"Class", - "contentType":"Content Type", - "reset":"Reset", - "apply":"apply", - "filterText":"Change Filters", - "Questiondetails":"Question details", - "selectContent":"Select content", - "noMatchingContent":"Sorry there is no matching content", - "changeFilterMessage":"Changing filter helps you find more content", - "changeFilter":"Change filters", - "whereDoYouWantToAddThisContent":"Where do you want to add this content?", - "selectContentToAdd":"Use search and filters above to find more content", - "addedToCollection":"Added to collection", - "changingFilters":"Changing filters make you find more content", - "ChangeFilters":"Change filters", - "addFromLibrary":"Add from Library", - "showContentAddedToCollection":"Show content added to collection", - "addContent":"Add content", - "sortBy":"Sort By", - "sortlabel":"A - Z", - "viewOnOrigin":"View Content on consumption", - "answers":"Answers", - "answersRequired":"Answer is required", - "answersPopupText":"Please provide an answer for the question. Check preview to understand how it would look.", - "selectImage":"Select Image", - "myImages":"My Images", - "allImage":"All Image", - "uploadAndUse":"Upload and Use", - "chooseOrDragImage":"Choose or drag and drop your image here", - "chooseOrDragVideo":"Choose or drag and drop your video here", - "uploadFromComputer":"Upload from Computer", - "upload":"Upload", - "maxFileSize":"Max File size:", - "allowedFileTypes":"Allowed file types are:", - "maximumAllowedFileSize":"Maximum allowed file size:", - "copyRightsAndLicense":"Copyright & License", - "dropChooseFile":"Drop or choose file to upload before entering the details", - "charactersLeft":"Characters left:", - "myVideos":"My Video(s)", - "allVideos":"All Video(s)", - "selectVideo":"Select Video", - "searchPlaceholder":"Search...", - "addAnImage":"Add an image", - "name":"Name", - "copyRightsAndYear":"Copyright & Yrar", - "license":"License", - "author":"Author", - "grade":"Grade", - "board":"Board", - "audience":"Audience", - "copyRight":"Copyright", - "licensedBy":"Licensed by", - "attributions":"Attributions", - "requestForQrCode":"Request for QR Codes", - "confirmDeleteContent":"Confirm Delete Content", - "confirmDeleteNode":"Are you sure want to delete the selected Node?", - "comments":"Comments", - "reviewComments":"Review Comments", - "questionSetPreview":"Question Set Preview", - "numberToolarge": "This number is too large for the request", - "acceptTerms":"Accepting Terms & Conditions", - "iAgreeSubmit":"I agree that by submitting / publishing this Content,", - "iconfirmContent":"I confirm that this Content complies with prescribed guidelines, including the Terms of Use and Content Policy and that I consent to publish it under the", - "createCommonFramework":"Creative Commons Framework in", - "accordance":"accordance with the", - "contentPolicy":"Content Policy.", - "privacyRights":"I have made sure that I do not violate others’ copyright or privacy rights." , - "viewComments":"View Comments", - "addReviewComments":"Add Review Comments", - "enterYourComments":"Enter your comments", - "publishCollection":"Publish ${objectType}", - "confirmPublishCollection":"Are you sure you want to publish this ${objectType}?", - "fillComments":"Fill comments", - "searchLibrary":"Search Library", - "options":"Options", - "optionsPopupText":"Please Preview to check how layout looks. Layout is responsive to the resolution of your device", - "selectOneAns":"Select one correct answer", - "fillThisOption":"Fill this option", - "reduceSize":"Please reduce the size", - "correctAns":"Correct answer", - "addOption":"Add option", - "question":"Question", - "pageNumber":"Page No", - "confirmQuestionNotSaved":"This question will not be saved, are you sure you want to go back to questionset?", - "video":"Video", - "textImage":"Text+Image", - "chooseType":"Choose type", - "solution":"Solution", - "optional":"(Optional)", - "questionRequired":"Question is required", - "addingTo":"Adding To", - "selectTemplate":"Select a template to get started", - "createNew":"Create new", - "selectLayout":"Select Layout", - "vertical":"Vertical", - "grid":"Grid", - "horizontal":"Horizontal", - "folders":"Folders", - "createHierarchyCsv":"Create folders using csv file", - "downloadFoldersInCSV":"Download folders as csv file", - "uploadUpdateCSV":"Update folder metadata using csv file", - "downloadSampleHierarchyCSv":"Upload csv file as per the given sample to create folders", - "makeSureFile":"Make sure that:", - "allColumnsAreAvailable":"The file has all the required columns", - "hasAllMandatoryColumn":"The file has all the required values filled in as per the format", - "noDuplicateRow":"There are no duplicate rows (with exactly same folder levels) in the file", - "downloadSampleCSV":"Download sample csv file", - "dragAndDropCSV":"Drag and Drop files to upload", - "selectFileToUpload":"Select file to upload", - "uploadEntries":"File accepted - csv", - "Or":"Or", - "pleaseWait":"Please wait", - "validateCsvFile":"Validating CSV file", - "hierarchyValidationError":"Error in processing the file", - "followingErrors":"Following errors are found in the file. Please correct and upload again", - "reUploadCSV":"Upload file again", - "hierarchyValidation":"Hierarchy Validation", - "hierarchyAdded":"Folders have been successfully created. Please close the dialog", - "hierarchyUpdated":"Folder metadata has been successfully updated. Please close the dialog", - "successful":"Successful !", - "csvDownloadInstruction":"Please make sure that this is the file downloaded using the “Download folders as csv file” option and changes are made to it", - "collaborators": "Collaborators", - "addCollaborators": "Add Collaborators", - "manageCollaborators": "Manage Collaborators", - "sliderValue":"Slider Value", - "left":"Left", - "stepSize":"Step size", - "right":"Right", - "translation":"Translation", - "publishchecklistTitle": "Please confirm that ALL the following items are verified (by ticking the check-boxes) before you can publish:", - "bulkUploadErrorMessage" : "The metadata file has following errors. Please check and upload again", - "bulkUploadQuestion": "Bulk Upload Question", - "lastUploaded": "Last uploaded", - "bulkInProgress": "Bulk upload in progress", - "viewDetails": "View Details", - "downloadSampleMetadataCsvFileAndCreate": "Download sample metadata CSV file and create your own metadata file using the format", - "makeSureYourFile": "Make sure your file", - "allColumnsAreAvailableShownFormat": "All columns are available as shown in format.", - "hasAllMandatoryColumnsFilledAsMarkedInFormat": "Has all mandatory columns filled, as marked in the format", - "hasNoDuplicateUrlsFilepathColumn": "Has no duplicate URLs in the filepath column", - "downloadSampleMetadataCsv": "Download sample metadata CSV", - "processingDroppedFiles" : "Processing dropped files...", - "retry": "retry", - "dragAndDrop": "Drag and Drop file", - "or" : "or", - "selectFile": "Select file", - "uploadCSVXlEntries": "Upload csv upto 300 entries", - "no": "No", - "yes": "Yes", - "cancel": "Cancel", - "ok": "OK", - "validatingCSVFile": "Validating CSV file", - "metadataFileValidationFailed": "Metadata file validation failed.", - "metadataFollowingError": "The metadata file has following errors. Please check and upload again", - "uploadingYourContentFromCSV": "Uploading your question from CSV", - "uploadFail" : "Upload failed", - "uploadSuccessful" : "Upload successful", - "uploadRemaining" : "Upload remaining", - "bulkUploadComplete" : "Bulk upload complete!", - "contentUploaded" : "Question uploaded", - "downloadReport": "Download report", - "next": "Next", - "back": "Back", - "close": "Close", - "bulkUploadNoticeLine1": "Uploading in bulk may take some time, click on", - "bulkUploadNoticeLine2": "to continue using Vidyadaan.", - "bulkUploadNoticeLine3": "Your upload will keep running in the background.", - "alreadyContentPresent": "Already present in this folder", - "loaderHeading": "Please wait", - "loaderMessage": "We are fetching details.", - "slidervalue": "Set the minimum and maximum values with which the slider would start and end respectively.", - "stepSizeInfo": "The step size would define the gap/jump between two values on the slider.", - "minSizeInfo": "The minimum slider value", - "maxSizeInfo": "The maximum slider value", - "questionsetAddFromLibraryItemLabel": "question", - "questionsetAddFromLibraryCollectionLabel": "question set", - "marks": "Marks", - "shuffleOnMessage": "Each question will carry equal weightage of 1 mark when using Shuffle. To provide different weightage to individual questions please turn off Shuffle.", - "editingConsentNote": "I confirm that I am allowing my reviewer to make edits to the content and metadata of the content. I consent my reviewer make changes, if any and publish the contain thereafter.", - "acceptBothConsentNote": "Agree to both conditions", - "totalScore": "Total Score", - "qualityReview": "If the score is less than or equal to 15 please re-evaluate the question and send back for corrections." - }, + "search": "Search", + "subject": "Subject", + "medium": "Medium", + "gradeLevel": "Class", + "contentType": "Content Type", + "reset": "Reset", + "apply": "apply", + "filterText": "Change Filters", + "Questiondetails": "Question details", + "selectContent": "Select content", + "noMatchingContent": "Sorry there is no matching content", + "changeFilterMessage": "Changing filter helps you find more content", + "changeFilter": "Change filters", + "whereDoYouWantToAddThisContent": "Where do you want to add this content?", + "selectContentToAdd": "Use search and filters above to find more content", + "addedToCollection": "Added to collection", + "changingFilters": "Changing filters make you find more content", + "ChangeFilters": "Change filters", + "addFromLibrary": "Add from Library", + "showContentAddedToCollection": "Show content added to collection", + "addContent": "Add content", + "sortBy": "Sort By", + "sortlabel": "A - Z", + "viewOnOrigin": "View Content on consumption", + "answers": "Answers", + "answersRequired": "Answer is required", + "answersPopupText": "Please provide an answer for the question. Check preview to understand how it would look.", + "selectImage": "Select Image", + "myImages": "My Images", + "allImage": "All Image", + "uploadAndUse": "Upload and Use", + "chooseOrDragImage": "Choose or drag and drop your image here", + "chooseOrDragVideo": "Choose or drag and drop your video here", + "uploadFromComputer": "Upload from Computer", + "upload": "Upload", + "maxFileSize": "Max File size:", + "allowedFileTypes": "Allowed file types are:", + "maximumAllowedFileSize": "Maximum allowed file size:", + "copyRightsAndLicense": "Copyright & License", + "dropChooseFile": "Drop or choose file to upload before entering the details", + "charactersLeft": "Characters left:", + "myVideos": "My Video(s)", + "allVideos": "All Video(s)", + "selectVideo": "Select Video", + "searchPlaceholder": "Search...", + "addAnImage": "Add an image", + "name": "Name", + "copyRightsAndYear": "Copyright & Yrar", + "license": "License", + "author": "Author", + "grade": "Grade", + "board": "Board", + "audience": "Audience", + "copyRight": "Copyright", + "licensedBy": "Licensed by", + "attributions": "Attributions", + "requestForQrCode": "Request for QR Codes", + "confirmDeleteContent": "Confirm Delete Content", + "confirmDeleteNode": "Are you sure want to delete the selected Node?", + "comments": "Comments", + "reviewComments": "Review Comments", + "questionSetPreview": "Question Set Preview", + "numberToolarge": "This number is too large for the request", + "acceptTerms": "Accepting Terms & Conditions", + "iAgreeSubmit": "I agree that by submitting / publishing this Content,", + "iconfirmContent": "I confirm that this Content complies with prescribed guidelines, including the Terms of Use and Content Policy and that I consent to publish it under the", + "createCommonFramework": "Creative Commons Framework in", + "accordance": "accordance with the", + "contentPolicy": "Content Policy.", + "privacyRights": "I have made sure that I do not violate others’ copyright or privacy rights.", + "viewComments": "View Comments", + "addReviewComments": "Add Review Comments", + "enterYourComments": "Enter your comments", + "publishCollection": "Publish ${objectType}", + "confirmPublishCollection": "Are you sure you want to publish this ${objectType}?", + "fillComments": "Fill comments", + "searchLibrary": "Search Library", + "options": "Options", + "optionsPopupText": "Please Preview to check how layout looks. Layout is responsive to the resolution of your device", + "selectOneAns": "Select one correct answer", + "fillThisOption": "Fill this option", + "reduceSize": "Please reduce the size", + "correctAns": "Correct answer", + "correctMatch": "Check if all match pairs are correct", + "addOption": "Add option", + "addPair": "Add pair", + "question": "Question", + "pageNumber": "Page No", + "setAnswers": "Set your answers", + "addQuestionAnswerPairText": "Add question-answer pairs to your question. Answers will be shuffled automatically", + "confirmQuestionNotSaved": "This question will not be saved, are you sure you want to go back to questionset?", + "video": "Video", + "textImage": "Text+Image", + "chooseType": "Choose type", + "solution": "Solution", + "optional": "(Optional)", + "questionRequired": "Question is required", + "addingTo": "Adding To", + "selectTemplate": "Select a template to get started", + "createNew": "Create new", + "selectLayout": "Select Layout", + "vertical": "Vertical", + "grid": "Grid", + "horizontal": "Horizontal", + "folders": "Folders", + "createHierarchyCsv": "Create folders using csv file", + "downloadFoldersInCSV": "Download folders as csv file", + "uploadUpdateCSV": "Update folder metadata using csv file", + "downloadSampleHierarchyCSv": "Upload csv file as per the given sample to create folders", + "makeSureFile": "Make sure that:", + "allColumnsAreAvailable": "The file has all the required columns", + "hasAllMandatoryColumn": "The file has all the required values filled in as per the format", + "noDuplicateRow": "There are no duplicate rows (with exactly same folder levels) in the file", + "downloadSampleCSV": "Download sample csv file", + "dragAndDropCSV": "Drag and Drop files to upload", + "selectFileToUpload": "Select file to upload", + "uploadEntries": "File accepted - csv", + "Or": "Or", + "pleaseWait": "Please wait", + "validateCsvFile": "Validating CSV file", + "hierarchyValidationError": "Error in processing the file", + "followingErrors": "Following errors are found in the file. Please correct and upload again", + "reUploadCSV": "Upload file again", + "hierarchyValidation": "Hierarchy Validation", + "hierarchyAdded": "Folders have been successfully created. Please close the dialog", + "hierarchyUpdated": "Folder metadata has been successfully updated. Please close the dialog", + "successful": "Successful !", + "csvDownloadInstruction": "Please make sure that this is the file downloaded using the “Download folders as csv file” option and changes are made to it", + "collaborators": "Collaborators", + "addCollaborators": "Add Collaborators", + "manageCollaborators": "Manage Collaborators", + "sliderValue": "Slider Value", + "left": "Left", + "stepSize": "Step size", + "right": "Right", + "translation": "Translation", + "publishchecklistTitle": "Please confirm that ALL the following items are verified (by ticking the check-boxes) before you can publish:", + "bulkUploadErrorMessage": "The metadata file has following errors. Please check and upload again", + "bulkUploadQuestion": "Bulk Upload Question", + "lastUploaded": "Last uploaded", + "bulkInProgress": "Bulk upload in progress", + "viewDetails": "View Details", + "downloadSampleMetadataCsvFileAndCreate": "Download sample metadata CSV file and create your own metadata file using the format", + "makeSureYourFile": "Make sure your file", + "allColumnsAreAvailableShownFormat": "All columns are available as shown in format.", + "hasAllMandatoryColumnsFilledAsMarkedInFormat": "Has all mandatory columns filled, as marked in the format", + "hasNoDuplicateUrlsFilepathColumn": "Has no duplicate URLs in the filepath column", + "downloadSampleMetadataCsv": "Download sample metadata CSV", + "processingDroppedFiles": "Processing dropped files...", + "retry": "retry", + "dragAndDrop": "Drag and Drop file", + "or": "or", + "selectFile": "Select file", + "uploadCSVXlEntries": "Upload csv upto 300 entries", + "no": "No", + "yes": "Yes", + "cancel": "Cancel", + "ok": "OK", + "validatingCSVFile": "Validating CSV file", + "metadataFileValidationFailed": "Metadata file validation failed.", + "metadataFollowingError": "The metadata file has following errors. Please check and upload again", + "uploadingYourContentFromCSV": "Uploading your question from CSV", + "uploadFail": "Upload failed", + "uploadSuccessful": "Upload successful", + "uploadRemaining": "Upload remaining", + "bulkUploadComplete": "Bulk upload complete!", + "contentUploaded": "Question uploaded", + "downloadReport": "Download report", + "next": "Next", + "back": "Back", + "close": "Close", + "bulkUploadNoticeLine1": "Uploading in bulk may take some time, click on", + "bulkUploadNoticeLine2": "to continue using Vidyadaan.", + "bulkUploadNoticeLine3": "Your upload will keep running in the background.", + "alreadyContentPresent": "Already present in this folder", + "loaderHeading": "Please wait", + "loaderMessage": "We are fetching details.", + "slidervalue": "Set the minimum and maximum values with which the slider would start and end respectively.", + "stepSizeInfo": "The step size would define the gap/jump between two values on the slider.", + "minSizeInfo": "The minimum slider value", + "maxSizeInfo": "The maximum slider value", + "questionsetAddFromLibraryItemLabel": "question", + "questionsetAddFromLibraryCollectionLabel": "question set", + "marks": "Marks", + "shuffleOnMessage": "Each question will carry equal weightage of 1 mark when using Shuffle. To provide different weightage to individual questions please turn off Shuffle.", + "editingConsentNote": "I confirm that I am allowing my reviewer to make edits to the content and metadata of the content. I consent my reviewer make changes, if any and publish the contain thereafter.", + "acceptBothConsentNote": "Agree to both conditions", + "totalScore": "Total Score", + "qualityReview": "If the score is less than or equal to 15 please re-evaluate the question and send back for corrections." + }, "err":{ "somethingWentWrong":"Something went wrong", "contentNotFoundonOrigin": "The content not found in consumption", From c0e88fd401f4e1b0ce118435175ed78bec4d3d10 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Sat, 22 Jul 2023 20:45:46 +0530 Subject: [PATCH 08/45] Issue #42 feat: Added support if questionInteraction type is match --- .../components/question/question.component.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index cb1e50d5..56103a3c 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, OnInit, Output, AfterViewInit, ViewEnca import * as _ from 'lodash-es'; import { v4 as uuidv4 } from 'uuid'; import { McqForm } from '../../interfaces/McqForm'; +import { MtfForm } from '../../interfaces/MtfForm'; import { ServerResponse } from '../../interfaces/serverResponse'; import { QuestionService } from '../../services/question/question.service'; import { PlayerService } from '../../services/player/player.service'; @@ -243,6 +244,31 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { this.editorState.responseDeclaration = _.get(this.questionMetaData, 'responseDeclaration'); } } + + if (this.questionInteractionType === 'match') { + const responseDeclaration = this.questionMetaData.responseDeclaration; + this.scoreMapping = _.get(responseDeclaration, 'response1.mapping'); + const templateId = this.questionMetaData.templateId; + const numberOfOptions = this.questionMetaData?.editorState?.options?.length || 0; + const maximumOptions = _.get(this.questionInput, 'config.maximumOptions'); + this.editorService.optionsLength = numberOfOptions; + // converting the options to the format required by the editor + const options = _.map(this.questionMetaData?.editorState?.options?.leftOption, (leftOption, index) => ({ + leftOption, + rightOption:this.questionMetaData?.editorState?.options?.rightOption?.[index] + })); + const question = this.questionMetaData?.editorState?.question; + const interactions = this.questionMetaData?.interactions; + this.editorState = new MtfForm({ + question, options, answer: _.get(responseDeclaration, 'response1.correctResponse.value') + }, { templateId, numberOfOptions, maximumOptions }); + this.editorState.solutions = this.questionMetaData?.editorState?.solutions; + this.editorState.interactions = interactions; + if (_.has(this.questionMetaData, 'responseDeclaration')) { + this.editorState.responseDeclaration = _.get(this.questionMetaData, 'responseDeclaration'); + } + } + if (_.has(this.questionMetaData, 'primaryCategory')) { this.editorState.primaryCategory = _.get(this.questionMetaData, 'primaryCategory'); } @@ -299,6 +325,9 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { else if (this.questionInteractionType === 'choice') { this.editorState = new McqForm({ question: '', options: [] }, { numberOfOptions: _.get(this.questionInput, 'config.numberOfOptions'), maximumOptions: _.get(this.questionInput, 'config.maximumOptions') }); } + else if (this.questionInteractionType === 'match') { + this.editorState = new MtfForm({ question: '', options: [] }, { numberOfOptions: _.get(this.questionInput, 'config.numberOfOptions'), maximumOptions: _.get(this.questionInput, 'config.maximumOptions') }); + } /** for observation and survey to show hint,tip,dependent question option. */ if(!_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy)){ this.subMenuConfig(); From ea38850c4a78abb752c2bb1519846157ec4ee73c Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Mon, 24 Jul 2023 14:51:54 +0530 Subject: [PATCH 09/45] Issue #42 feat: Modifications in metadata of Match The Following Type Questions --- .../components/options/options.component.ts | 103 +++++++++++++----- 1 file changed, 78 insertions(+), 25 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.ts index c2a05812..60dd1b29 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.ts @@ -191,36 +191,74 @@ export class OptionsComponent implements OnInit, OnChanges { } setMapping() { - if(!_.isEmpty(this.selectedOptions)) { - this.mapping = []; - const scoreForEachOption = _.round((this.maxScore/this.selectedOptions.length), 2); - _.forEach(this.selectedOptions, (value) => { - const optionMapping = { - value: value, - score: scoreForEachOption, - } - this.mapping.push(optionMapping) - }) + if (this.questionInteractionType === 'choice') { + if (!_.isEmpty(this.selectedOptions)) { + this.mapping = []; + const scoreForEachOption = _.round((this.maxScore/this.selectedOptions.length), 2); + _.forEach(this.selectedOptions, (value) => { + const optionMapping = { + value: value, + score: scoreForEachOption, + }; + this.mapping.push(optionMapping); + }); + } + } else if(this.questionInteractionType === 'match') { + if (!_.isEmpty(this.editorState.answer)) { + this.mapping = []; + const scoreForEachMatch = _.round( + this.maxScore / this.editorState.answer.length, + 2 + ); + _.forEach(this.editorState.answer, (value) => { + const optionMapping = { + value: value, + score: scoreForEachMatch, + }; + this.mapping.push(optionMapping); + }) + } } else { this.mapping = []; } } getInteractions(options) { - let index; - const interactOptions = _.map(options, (opt, key) => { - index = Number(key); - const hints = _.get(this.editorState, `interactions.response1.options[${index}].hints`) - return { label: opt.body, value: index, hints }; - }); - this.subMenuConfig(options); - const interactions = { - response1: { - type: 'choice', - options: interactOptions, - }, - }; - return interactions; + if (this.questionInteractionType === 'choice') { + let index; + const interactOptions = _.map(options, (opt, key) => { + index = Number(key); + const hints = _.get(this.editorState, `interactions.response1.options[${index}].hints`) + return { label: opt.body, value: index, hints }; + }); + this.subMenuConfig(options); + const interactions = { + response1: { + type: 'choice', + options: interactOptions, + }, + }; + return interactions; + } + else if (this.questionInteractionType === 'match') { + const optionSet = { + left: options.map((option) => ({ + label: option.leftOption, + value: option.leftOption.replace(/<\/?[^>]+(>|$)/g, ""), + })), + right: options.map((option) => ({ + label: option.rightOption, + value: option.rightOption.replace(/<\/?[^>]+(>|$)/g, ""), + })), + } + const interactions = { + response1: { + type: 'match', + optionSet: optionSet, + } + }; + return interactions; + } } setTemplete(template) { @@ -269,7 +307,22 @@ export class OptionsComponent implements OnInit, OnChanges { this.setMapping(); this.editorDataHandler(); } - + + onMatchCheck(event) { + if (event.target.checked) { + this.editorState.answer = this.editorState.options.map((option) => { + const obj = {}; + let leftOption = option.leftOption.replace(/<\/?[^>]+(>|$)/g, ""); + let rightOption = option.rightOption.replace(/<\/?[^>]+(>|$)/g, ""); + obj[leftOption] = rightOption; + return obj; + }); + } else { + this.editorState.answer = undefined; + } + this.setMapping(); + this.editorDataHandler(); + } setScore(value, scoreIndex) { const obj = { response: scoreIndex, From 35aa70ed66b30d14c668c5471b605d24d9224a7a Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Mon, 24 Jul 2023 17:27:20 +0530 Subject: [PATCH 10/45] Issue #42 feat: body and answer body in the form of HTML --- .../components/question/question.component.ts | 70 ++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index 56103a3c..145d80e8 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -615,6 +615,29 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } } + //to handle when question type is match + if (this.questionInteractionType === 'match') { + const data = _.get(this.treeNodeData, 'data.metadata'); + if (_.get(this.editorState, 'interactionTypes[0]') === 'match' && + _.isEmpty(this.editorState?.responseDeclaration?.response1?.mapping) && + !_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy) && + _.get(data,'allowScoring') === 'Yes') { + this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.005')); + this.showFormError = true; + return; + } else { + this.showFormError = false; + } + const rightOptionValid = _.find(this.editorState.options, option => (option.rightOption === undefined || option.rightOption === '' || option.rightOption.length > this.setCharacterLimit)); + const leftOptionValid = _.find(this.editorState.options, option => (option.leftOption === undefined || option.leftOption === '' || option.leftOption.length > this.setCharacterLimit)); + if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.answer) && this.sourcingSettings?.enforceCorrectAnswer)) { + this.showFormError = true; + return; + } else { + this.showFormError = false; + } + } + if (this.questionInteractionType === 'slider') { const min = _.get(this.sliderDatas, 'validation.range.min'); const max = _.get(this.sliderDatas, 'validation.range.max'); @@ -800,7 +823,7 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { _.get(treeNodeData,'allowScoring') === 'Yes' ? '' : _.set(metadata,'responseDeclaration.response1.mapping',[]); } - if (this.questionInteractionType != 'choice') { + if (this.questionInteractionType != 'choice' && this.questionInteractionType != 'match') { if (!_.isUndefined(metadata.answer)) { const answerHtml = this.getAnswerHtml(metadata.answer); const finalAnswer = this.getAnswerWrapperHtml(answerHtml); @@ -823,10 +846,17 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { }) const finalAnswer = this.getAnswerWrapperHtml(concatenatedAnswers); metadata.answer = finalAnswer; - } else if (this.questionInteractionType != 'default' && this.questionInteractionType != 'choice') { + } else if (this.questionInteractionType != 'default' && this.questionInteractionType != 'choice' && this.questionInteractionType != 'match') { metadata.responseDeclaration = this.getResponseDeclaration(this.questionInteractionType); } + if (this.questionInteractionType === 'match') { + metadata.body = this.getMatchQuestionHtmlBody(this.editorState.question); + const leftOptions = metadata.interactions.response1.optionSet.left; + const rightOptions = metadata.interactions.response1.optionSet.right; + metadata.answer = this.getMatchAnswerContainerHtml(leftOptions, rightOptions); + } + if (!_.isUndefined(this.selectedSolutionType) && !_.isEmpty(this.selectedSolutionType)) { const solutionObj = this.getSolutionObj(this.solutionUUID, this.selectedSolutionType, this.editorState.solutions); metadata.editorState.solutions = [solutionObj]; @@ -856,6 +886,33 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { return optionHtml; } + + getMatchAnswerContainerHtml(leftOptions, rightOptions) { + const matchContainerTemplate = '
{leftOptions}{rightOptions}
'; + const leftOptionsHtml = this.getOptionWrapperHtml(leftOptions, 'left'); + const rightOptionsHtml = this.getOptionWrapperHtml(rightOptions, 'right'); + const matchContainer = matchContainerTemplate + .replace('{leftOptions}', leftOptionsHtml) + .replace('{rightOptions}', rightOptionsHtml); + return matchContainer; + } + + getOptionWrapperHtml(options, type) { + const wrapperTemplate = `
{options}
`; + let optionsHtml = ''; + options.forEach((option) => { + const optionHtml = this.getMatchAnswerHtml(option.label, option.value); + optionsHtml = optionsHtml.concat(optionHtml); + }); + const wrapper = wrapperTemplate.replace('{options}', optionsHtml); + return wrapper; + } + getMatchAnswerHtml(label, value) { + const answerHtml = '
{label}
'; + const optionHtml = answerHtml.replace('{label}', label).replace('{value}', value); + return optionHtml; + } + getAnswerWrapperHtml(concatenatedAnswers) { const answerTemplate = '
{answers}
'; const answer = answerTemplate.replace('{answers}', concatenatedAnswers); @@ -899,6 +956,15 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { return videoSolutionValue; } + getMatchQuestionHtmlBody(question) { + const matchTemplateConfig = { + // tslint:disable-next-line:max-line-length + matchBody: '
{question}
' + }; + const { matchBody } = matchTemplateConfig; + const questionBody = matchBody.replace('{question}', question); + return questionBody; + } getMcqQuestionHtmlBody(question, templateId) { const mcqTemplateConfig = { From 862b86d692c7770afc08474d2d99328c4b0991d6 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 25 Jul 2023 15:22:32 +0530 Subject: [PATCH 11/45] test foreditorDataHandler() --- .../components/options/options.component.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts index 83113a3b..8527b418 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts @@ -139,6 +139,7 @@ describe('OptionsComponent', () => { it('#editorDataHandler() should emit option data when answer is single value', () => { spyOn(component, 'prepareMcqBody').and.callThrough(); spyOn(component.editorDataOutput, 'emit').and.callThrough(); + component.questionInteractionType = 'choice'; component.editorState = mockOptionData.editorOptionData; component.editorDataHandler(); component.questionPrimaryCategory='Multiselect Multiple Choice Question'; @@ -149,6 +150,7 @@ describe('OptionsComponent', () => { it('#editorDataHandler() should emit option data when answer is multiple value', () => { spyOn(component, 'prepareMcqBody').and.callThrough(); spyOn(component.editorDataOutput, 'emit').and.callThrough(); + component.questionInteractionType = 'choice'; component.editorState = mockOptionData.editorOptionData; component.editorState.answer = [0,1]; component.editorDataHandler(); @@ -157,6 +159,18 @@ describe('OptionsComponent', () => { expect(component.editorDataOutput.emit).toHaveBeenCalled(); }); + it('when questionInteractionType is match prepareMtfBody will be called', () => { + spyOn(component, 'prepareMtfBody').and.callFake(()=>{}); + spyOn(component.editorDataOutput, 'emit').and.callFake(()=>{}); + component.questionInteractionType = 'match'; + component.editorDataHandler(); + component.questionPrimaryCategory='Match The Following Question'; + expect(component.prepareMtfBody).toHaveBeenCalled(); + expect(component.editorDataOutput.emit).toHaveBeenCalled(); + }); + + + it('#prepareMcqBody() should return expected mcq option data for single select MCQ', () => { component.maxScore = 1; component.selectedOptions = [0]; From 296a02529a28f5babbcebbaf4cc3e5e4a9bb45f8 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 25 Jul 2023 15:51:15 +0530 Subject: [PATCH 12/45] modifiedtest for setMapping when interaction type is choice --- .../src/lib/components/options/options.component.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts index 8527b418..2927fc75 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts @@ -169,8 +169,6 @@ describe('OptionsComponent', () => { expect(component.editorDataOutput.emit).toHaveBeenCalled(); }); - - it('#prepareMcqBody() should return expected mcq option data for single select MCQ', () => { component.maxScore = 1; component.selectedOptions = [0]; @@ -192,6 +190,7 @@ describe('OptionsComponent', () => { }); it('#getResponseDeclaration() should return expected response declaration', () => { + component.questionInteractionType = 'choice'; component.mapping = [{ "value": 0, "score": 1 @@ -228,6 +227,7 @@ describe('OptionsComponent', () => { }); it('setMapping should set the mapping for single select MCQ', () => { + component.questionInteractionType = 'choice'; component.mapping = []; component.selectedOptions = [0]; component.maxScore = 1; @@ -237,6 +237,7 @@ describe('OptionsComponent', () => { }); it('setMapping should set the mapping for single select MCQ', () => { + component.questionInteractionType = 'choice'; component.mapping = []; component.selectedOptions = [0,1]; component.maxScore = 1; @@ -248,6 +249,7 @@ describe('OptionsComponent', () => { it('#getInteractions() should return expected response declaration', () => { spyOn(component,"getInteractions").and.callThrough(); + component.questionInteractionType = 'choice'; component.getInteractions(mockOptionData.editorOptionData.options); expect(component.getInteractions).toHaveBeenCalled(); // expect(mockOptionData.prepareMcqBody.interactions).toEqual(result); From 8b8deadae02446be3d457348c19677be44277ae1 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 1 Aug 2023 13:34:27 +0530 Subject: [PATCH 13/45] Issue #42 feat: new match component added --- .../lib/components/match/match.component.ts | 200 ++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 projects/questionset-editor-library/src/lib/components/match/match.component.ts diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.ts new file mode 100644 index 00000000..920e556d --- /dev/null +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.ts @@ -0,0 +1,200 @@ +import { Component, Input, OnInit, OnChanges, Output, EventEmitter, SimpleChanges } from '@angular/core'; +import * as _ from 'lodash-es'; +import { EditorTelemetryService } from '../../services/telemetry/telemetry.service'; +import { ConfigService } from '../../services/config/config.service'; +import { SubMenu } from '../question-option-sub-menu/question-option-sub-menu.component'; +import { TreeService } from '../../services/tree/tree.service'; +import { EditorService } from '../../services/editor/editor.service'; + +@Component({ + selector: 'lib-match', + templateUrl: './match.component.html', + styleUrls: ['./match.component.scss'] +}) +export class MatchComponent implements OnInit, OnChanges { + @Input() editorState: any; + @Input() showFormError; + @Input() sourcingSettings; + @Input() questionPrimaryCategory; + @Input() mapping = []; + @Input() isReadOnlyMode; + @Input() maxScore; + @Output() editorDataOutput: EventEmitter = new EventEmitter(); + public setCharacterLimit = 160; + public setImageLimit = 1; + public templateType = 'default'; + subMenus: SubMenu[][]; + hints = []; + showSubMenu: boolean = false; + parentMeta: any; + selectedOptions = []; + constructor( + public telemetryService: EditorTelemetryService, + public configService: ConfigService, + public treeService: TreeService, + private editorService: EditorService + ) {} + + ngOnInit() { + if (!_.isUndefined(this.editorState.answer)) { + this.addSelectedOptions(); + } + if (!_.isUndefined(this.editorState.templateId)) { + this.templateType = this.editorState.templateId; + } + this.mapping = _.get(this.editorState, 'responseDeclaration.response1.mapping') || []; + this.editorDataHandler(); + if (!_.isUndefined(this.editorService.editorConfig.config.renderTaxonomy)) { + this.parentMeta = this.treeService.getFirstChild().data.metadata; + this.showSubMenu = true; + } + } + ngOnChanges(changes: SimpleChanges){ + if (!_.isUndefined(changes.maxScore.previousValue) && !_.isNaN(changes.maxScore.currentValue)) { + this.setMapping(); + this.editorDataHandler(); + } + } + addSelectedOptions() { + this.selectedOptions = this.editorState.answer; + } + + editorDataHandler(event?) { + const body = this.prepareMtfBody(this.editorState); + this.editorDataOutput.emit({ + body, + mediaobj: event ? event.mediaobj : undefined, + }); + } + prepareMtfBody(editorState) { + let metadata: any; + const correctAnswer = editorState.answer; + let options: any; + if (!_.isEmpty(correctAnswer)) { + options = { + leftOptions: editorState.options.map((option, index) => { + return { + value: { + body: option.leftOption, + value: index, + } + } + }), + rightOptions: editorState.options.map((option, index) => { + return { + value: { + body: option.rightOption, + value: index, + } + } + }) + } + } + metadata = { + templateId: this.templateType, + name: this.questionPrimaryCategory || "Match The Following Question", + responseDeclaration: this.getResponseDeclaration(editorState), + outcomeDeclaration: this.getOutcomeDeclaration(), + interactionTypes: ["match"], + interactions: this.getInteractions(editorState.options), + editorState: { + options, + }, + qType: "MTF", + primaryCategory: + this.questionPrimaryCategory || "Match The Following Question", + }; + return metadata; + } + getResponseDeclaration(editorState) { + const responseDeclaration = { + response1: { + cardinality: 'multiple', + type: 'map', + correctResponse: { + value: editorState.answer, + }, + mapping: this.mapping, + }, + }; + return responseDeclaration; + } + + getOutcomeDeclaration() { + const outcomeDeclaration = { + maxScore: { + cardinality: 'multiple', + type: 'integer', + defaultValue: this.maxScore + } + }; + return outcomeDeclaration; + } + + setMapping() { + if (!_.isEmpty(this.editorState.answer)) { + this.mapping = []; + const scoreForEachMatch = _.round( + this.maxScore / this.editorState.answer.length, + 2 + ); + _.forEach(this.editorState.answer, (value) => { + const optionMapping = { + value: value, + score: scoreForEachMatch, + }; + this.mapping.push(optionMapping); + }) + } else { + this.mapping = []; + } + } + + getInteractions(options) { + const optionSet = { + leftOptions: options.map((option,index) => ({ + label: option.leftOption, + value: index, + })), + rightOptions: options.map((option,index) => ({ + label: option.rightOption, + value: index, + })), + } + const interactions = { + response1: { + type: 'match', + options: optionSet, + } + }; + return interactions; + } + + onOptionChange(event,index) { + if(event.body!=='' && !_.includes(this.selectedOptions, index)) { + this.selectedOptions.push(index); + } else if(event.body === '') { + _.remove(this.selectedOptions, (n) => { + return n === index; + }); + } + if(this.selectedOptions === undefined){ + this.editorState.answer = undefined; + } + else { + this.editorState.answer = this.selectedOptions.map((value) => ({ [value]: value })); + } + this.setMapping(); + this.editorDataHandler(); + } + setScore(value, scoreIndex) { + const obj = { + response: scoreIndex, + outcomes: { + score: value, + }, + }; + this.mapping[scoreIndex] = obj; + this.editorDataHandler(); + } +} From b14cda94cca4123405d55a92c3545bc7718324ae Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 1 Aug 2023 13:37:52 +0530 Subject: [PATCH 14/45] Adding match component in question template --- .../src/lib/components/question/question.component.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.html b/projects/questionset-editor-library/src/lib/components/question/question.component.html index 5a26f232..6bd2590d 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.html +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.html @@ -64,6 +64,13 @@ (editorDataOutput)="editorDataHandler($event)" [sourcingSettings]="sourcingSettings" [mapping]="scoreMapping" [maxScore]="maxScore" [isReadOnlyMode]="isReadOnlyMode"> + + From 2c982fd390eab8a69c03f005fba673390efd47b3 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 1 Aug 2023 13:50:31 +0530 Subject: [PATCH 15/45] Adding match component in module --- .../src/lib/questionset-editor-library.module.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/questionset-editor-library/src/lib/questionset-editor-library.module.ts b/projects/questionset-editor-library/src/lib/questionset-editor-library.module.ts index e2f5303e..ccf245b1 100644 --- a/projects/questionset-editor-library/src/lib/questionset-editor-library.module.ts +++ b/projects/questionset-editor-library/src/lib/questionset-editor-library.module.ts @@ -36,6 +36,7 @@ import { PlainTreeComponent } from './components/plain-tree/plain-tree.component import { A11yModule } from '@angular/cdk/a11y'; import { ProgressStatusComponent } from './components/progress-status/progress-status.component'; import {TermAndConditionComponent} from './components/term-and-condition/term-and-condition.component'; +import { MatchComponent } from './components/match/match.component'; import { QualityParamsModalComponent } from './components/quality-params-modal/quality-params-modal.component'; @NgModule({ @@ -68,7 +69,8 @@ import { QualityParamsModalComponent } from './components/quality-params-modal/q PlainTreeComponent, ProgressStatusComponent, TermAndConditionComponent, - QualityParamsModalComponent + QualityParamsModalComponent, + MatchComponent ], imports: [CommonModule, FormsModule, ReactiveFormsModule.withConfig({callSetDisabledState: 'whenDisabledForLegacyCode'}), RouterModule.forChild([]), SuiModule, CommonFormElementsModule, InfiniteScrollModule, HttpClientModule, ResourceLibraryModule, A11yModule], From 1ea5d7ccaf68cc977789ed69c9f294eb62304f6e Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 1 Aug 2023 16:18:17 +0530 Subject: [PATCH 16/45] Revert "test foreditorDataHandler()" This reverts commit 862b86d692c7770afc08474d2d99328c4b0991d6. --- .../lib/components/options/options.component.spec.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts index 2927fc75..7ba3e751 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts @@ -139,7 +139,6 @@ describe('OptionsComponent', () => { it('#editorDataHandler() should emit option data when answer is single value', () => { spyOn(component, 'prepareMcqBody').and.callThrough(); spyOn(component.editorDataOutput, 'emit').and.callThrough(); - component.questionInteractionType = 'choice'; component.editorState = mockOptionData.editorOptionData; component.editorDataHandler(); component.questionPrimaryCategory='Multiselect Multiple Choice Question'; @@ -150,7 +149,6 @@ describe('OptionsComponent', () => { it('#editorDataHandler() should emit option data when answer is multiple value', () => { spyOn(component, 'prepareMcqBody').and.callThrough(); spyOn(component.editorDataOutput, 'emit').and.callThrough(); - component.questionInteractionType = 'choice'; component.editorState = mockOptionData.editorOptionData; component.editorState.answer = [0,1]; component.editorDataHandler(); @@ -159,16 +157,6 @@ describe('OptionsComponent', () => { expect(component.editorDataOutput.emit).toHaveBeenCalled(); }); - it('when questionInteractionType is match prepareMtfBody will be called', () => { - spyOn(component, 'prepareMtfBody').and.callFake(()=>{}); - spyOn(component.editorDataOutput, 'emit').and.callFake(()=>{}); - component.questionInteractionType = 'match'; - component.editorDataHandler(); - component.questionPrimaryCategory='Match The Following Question'; - expect(component.prepareMtfBody).toHaveBeenCalled(); - expect(component.editorDataOutput.emit).toHaveBeenCalled(); - }); - it('#prepareMcqBody() should return expected mcq option data for single select MCQ', () => { component.maxScore = 1; component.selectedOptions = [0]; From c233eae4b16dc0ce1179b8fc9d10f869c8c03b37 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 1 Aug 2023 16:32:12 +0530 Subject: [PATCH 17/45] Revert "modifiedtest for setMapping when interaction type is choice" This reverts commit 296a02529a28f5babbcebbaf4cc3e5e4a9bb45f8. --- .../src/lib/components/options/options.component.spec.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts index 7ba3e751..83113a3b 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.spec.ts @@ -178,7 +178,6 @@ describe('OptionsComponent', () => { }); it('#getResponseDeclaration() should return expected response declaration', () => { - component.questionInteractionType = 'choice'; component.mapping = [{ "value": 0, "score": 1 @@ -215,7 +214,6 @@ describe('OptionsComponent', () => { }); it('setMapping should set the mapping for single select MCQ', () => { - component.questionInteractionType = 'choice'; component.mapping = []; component.selectedOptions = [0]; component.maxScore = 1; @@ -225,7 +223,6 @@ describe('OptionsComponent', () => { }); it('setMapping should set the mapping for single select MCQ', () => { - component.questionInteractionType = 'choice'; component.mapping = []; component.selectedOptions = [0,1]; component.maxScore = 1; @@ -237,7 +234,6 @@ describe('OptionsComponent', () => { it('#getInteractions() should return expected response declaration', () => { spyOn(component,"getInteractions").and.callThrough(); - component.questionInteractionType = 'choice'; component.getInteractions(mockOptionData.editorOptionData.options); expect(component.getInteractions).toHaveBeenCalled(); // expect(mockOptionData.prepareMcqBody.interactions).toEqual(result); From 23ddf3a0c24efce5403f66b7306fdfe1fb08c905 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 1 Aug 2023 16:35:18 +0530 Subject: [PATCH 18/45] Reverting option component file --- .../components/options/options.component.ts | 147 ++++-------------- 1 file changed, 28 insertions(+), 119 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.ts index 60dd1b29..d317eccf 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.ts @@ -15,7 +15,6 @@ export class OptionsComponent implements OnInit, OnChanges { @Input() showFormError; @Input() sourcingSettings; @Input() questionPrimaryCategory; - @Input() questionInteractionType; @Input() mapping = []; @Input() isReadOnlyMode; @Input() maxScore; @@ -76,16 +75,8 @@ export class OptionsComponent implements OnInit, OnChanges { } editorDataHandler(event?) { - let body: any; - if (this.questionInteractionType === 'choice') { - body = this.prepareMcqBody(this.editorState); - } else if (this.questionInteractionType === 'match') { - body = this.prepareMtfBody(this.editorState); - } - this.editorDataOutput.emit({ - body, - mediaobj: event ? event.mediaobj : undefined, - }); + const body = this.prepareMcqBody(this.editorState); + this.editorDataOutput.emit({ body, mediaobj: event ? event.mediaobj : undefined }); } prepareMcqBody(editorState) { @@ -128,40 +119,11 @@ export class OptionsComponent implements OnInit, OnChanges { return metadata; } - prepareMtfBody(editorState) { - let metadata: any; - const correctAnswer = editorState.answer; - let options: any; - if (!_.isEmpty(correctAnswer)) { - options = _.reduce(this.editorState.options,function (acc, obj) { - acc.leftOption.push(obj.leftOption); - acc.rightOption.push(obj.rightOption); - return acc; - },{ leftOption: [], rightOption: [] } - ); - } - console.log(options); - console.log(editorState.answer); - metadata = { - templateId: this.templateType, - name: this.questionPrimaryCategory || 'Match The Following Question', - responseDeclaration: this.getResponseDeclaration(editorState), - outcomeDeclaration: this.getOutcomeDeclaration(), - interactionTypes: ['match'], - interactions: this.getInteractions(editorState.options), - editorState: { - options, - }, - qType: 'MTF', - primaryCategory: this.questionPrimaryCategory || "Match The Following Question", - }; - return metadata; - } getResponseDeclaration(editorState) { const responseDeclaration = { response1: { cardinality: this.getCardinality(), - type: this.questionInteractionType === 'choice' ? 'integer' : 'map', + type: 'integer', correctResponse: { value: editorState.answer, }, @@ -191,74 +153,36 @@ export class OptionsComponent implements OnInit, OnChanges { } setMapping() { - if (this.questionInteractionType === 'choice') { - if (!_.isEmpty(this.selectedOptions)) { - this.mapping = []; - const scoreForEachOption = _.round((this.maxScore/this.selectedOptions.length), 2); - _.forEach(this.selectedOptions, (value) => { - const optionMapping = { - value: value, - score: scoreForEachOption, - }; - this.mapping.push(optionMapping); - }); - } - } else if(this.questionInteractionType === 'match') { - if (!_.isEmpty(this.editorState.answer)) { - this.mapping = []; - const scoreForEachMatch = _.round( - this.maxScore / this.editorState.answer.length, - 2 - ); - _.forEach(this.editorState.answer, (value) => { - const optionMapping = { - value: value, - score: scoreForEachMatch, - }; - this.mapping.push(optionMapping); - }) - } + if(!_.isEmpty(this.selectedOptions)) { + this.mapping = []; + const scoreForEachOption = _.round((this.maxScore/this.selectedOptions.length), 2); + _.forEach(this.selectedOptions, (value) => { + const optionMapping = { + value: value, + score: scoreForEachOption, + } + this.mapping.push(optionMapping) + }) } else { this.mapping = []; } } getInteractions(options) { - if (this.questionInteractionType === 'choice') { - let index; - const interactOptions = _.map(options, (opt, key) => { - index = Number(key); - const hints = _.get(this.editorState, `interactions.response1.options[${index}].hints`) - return { label: opt.body, value: index, hints }; - }); - this.subMenuConfig(options); - const interactions = { - response1: { - type: 'choice', - options: interactOptions, - }, - }; - return interactions; - } - else if (this.questionInteractionType === 'match') { - const optionSet = { - left: options.map((option) => ({ - label: option.leftOption, - value: option.leftOption.replace(/<\/?[^>]+(>|$)/g, ""), - })), - right: options.map((option) => ({ - label: option.rightOption, - value: option.rightOption.replace(/<\/?[^>]+(>|$)/g, ""), - })), - } - const interactions = { - response1: { - type: 'match', - optionSet: optionSet, - } - }; - return interactions; - } + let index; + const interactOptions = _.map(options, (opt, key) => { + index = Number(key); + const hints = _.get(this.editorState, `interactions.response1.options[${index}].hints`) + return { label: opt.body, value: index, hints }; + }); + this.subMenuConfig(options); + const interactions = { + response1: { + type: 'choice', + options: interactOptions, + }, + }; + return interactions; } setTemplete(template) { @@ -307,22 +231,7 @@ export class OptionsComponent implements OnInit, OnChanges { this.setMapping(); this.editorDataHandler(); } - - onMatchCheck(event) { - if (event.target.checked) { - this.editorState.answer = this.editorState.options.map((option) => { - const obj = {}; - let leftOption = option.leftOption.replace(/<\/?[^>]+(>|$)/g, ""); - let rightOption = option.rightOption.replace(/<\/?[^>]+(>|$)/g, ""); - obj[leftOption] = rightOption; - return obj; - }); - } else { - this.editorState.answer = undefined; - } - this.setMapping(); - this.editorDataHandler(); - } + setScore(value, scoreIndex) { const obj = { response: scoreIndex, From 000c5c3bf83927dd7697244e6202baa00f38df06 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 1 Aug 2023 20:26:14 +0530 Subject: [PATCH 19/45] Refactoring of code in match component and question component --- .../src/styles.scss | 1 + .../lib/components/match/match.component.html | 52 ++++++++++++++++++ .../lib/components/match/match.component.scss | 0 .../components/match/match.component.spec.ts | 23 ++++++++ .../lib/components/match/match.component.ts | 55 +++++-------------- .../components/question/question.component.ts | 13 ++--- .../src/lib/interfaces/MtfForm.ts | 9 ++- 7 files changed, 101 insertions(+), 52 deletions(-) create mode 100644 projects/questionset-editor-library/src/lib/components/match/match.component.html create mode 100644 projects/questionset-editor-library/src/lib/components/match/match.component.scss create mode 100644 projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts diff --git a/projects/questionset-editor-library-wc/src/styles.scss b/projects/questionset-editor-library-wc/src/styles.scss index 73bf969d..13239b7e 100644 --- a/projects/questionset-editor-library-wc/src/styles.scss +++ b/projects/questionset-editor-library-wc/src/styles.scss @@ -22,4 +22,5 @@ @import "./../../questionset-editor-library/src/lib/components/template/template.component.scss"; @import "./../../questionset-editor-library/src/lib/components/term-and-condition/term-and-condition.component.scss"; @import "./../../questionset-editor-library/src/lib/components/translations/translations.component.scss"; +@import "./../../questionset-editor-library/src/lib/components/match/match.component.scss"; diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html new file mode 100644 index 00000000..a59dafdd --- /dev/null +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -0,0 +1,52 @@ + +
+ + + +
+
+
+
+
+ + + + +
+
+ + + + +
+
+
+ +
+
+
+
+ +
+
diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.scss b/projects/questionset-editor-library/src/lib/components/match/match.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts new file mode 100644 index 00000000..932baeae --- /dev/null +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MatchComponent } from './match.component'; + +describe('MatchComponent', () => { + let component: MatchComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MatchComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(MatchComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.ts index 920e556d..2c479610 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.ts @@ -2,7 +2,6 @@ import { Component, Input, OnInit, OnChanges, Output, EventEmitter, SimpleChange import * as _ from 'lodash-es'; import { EditorTelemetryService } from '../../services/telemetry/telemetry.service'; import { ConfigService } from '../../services/config/config.service'; -import { SubMenu } from '../question-option-sub-menu/question-option-sub-menu.component'; import { TreeService } from '../../services/tree/tree.service'; import { EditorService } from '../../services/editor/editor.service'; @@ -23,11 +22,7 @@ export class MatchComponent implements OnInit, OnChanges { public setCharacterLimit = 160; public setImageLimit = 1; public templateType = 'default'; - subMenus: SubMenu[][]; - hints = []; - showSubMenu: boolean = false; parentMeta: any; - selectedOptions = []; constructor( public telemetryService: EditorTelemetryService, public configService: ConfigService, @@ -36,18 +31,11 @@ export class MatchComponent implements OnInit, OnChanges { ) {} ngOnInit() { - if (!_.isUndefined(this.editorState.answer)) { - this.addSelectedOptions(); - } if (!_.isUndefined(this.editorState.templateId)) { this.templateType = this.editorState.templateId; } this.mapping = _.get(this.editorState, 'responseDeclaration.response1.mapping') || []; this.editorDataHandler(); - if (!_.isUndefined(this.editorService.editorConfig.config.renderTaxonomy)) { - this.parentMeta = this.treeService.getFirstChild().data.metadata; - this.showSubMenu = true; - } } ngOnChanges(changes: SimpleChanges){ if (!_.isUndefined(changes.maxScore.previousValue) && !_.isNaN(changes.maxScore.currentValue)) { @@ -55,9 +43,6 @@ export class MatchComponent implements OnInit, OnChanges { this.editorDataHandler(); } } - addSelectedOptions() { - this.selectedOptions = this.editorState.answer; - } editorDataHandler(event?) { const body = this.prepareMtfBody(this.editorState); @@ -68,9 +53,16 @@ export class MatchComponent implements OnInit, OnChanges { } prepareMtfBody(editorState) { let metadata: any; - const correctAnswer = editorState.answer; + if (_.isEmpty(editorState.correctMatchPair) && !_.isEmpty(editorState.options)) { + editorState.correctMatchPair = editorState.options.map((option, index) => { + const correctMatchPair = {}; + correctMatchPair[index.toString()] = index; + return correctMatchPair; + }); + } + this.setMapping(); let options: any; - if (!_.isEmpty(correctAnswer)) { + if (!_.isEmpty(editorState.correctMatchPair)) { options = { leftOptions: editorState.options.map((option, index) => { return { @@ -112,7 +104,7 @@ export class MatchComponent implements OnInit, OnChanges { cardinality: 'multiple', type: 'map', correctResponse: { - value: editorState.answer, + value: editorState.correctMatchPair, }, mapping: this.mapping, }, @@ -130,15 +122,15 @@ export class MatchComponent implements OnInit, OnChanges { }; return outcomeDeclaration; } - + setMapping() { - if (!_.isEmpty(this.editorState.answer)) { + if (!_.isEmpty(this.editorState.correctMatchPair)) { this.mapping = []; const scoreForEachMatch = _.round( - this.maxScore / this.editorState.answer.length, + this.maxScore / this.editorState.correctMatchPair.length, 2 ); - _.forEach(this.editorState.answer, (value) => { + _.forEach(this.editorState.correctMatchPair, (value) => { const optionMapping = { value: value, score: scoreForEachMatch, @@ -168,25 +160,8 @@ export class MatchComponent implements OnInit, OnChanges { } }; return interactions; - } - - onOptionChange(event,index) { - if(event.body!=='' && !_.includes(this.selectedOptions, index)) { - this.selectedOptions.push(index); - } else if(event.body === '') { - _.remove(this.selectedOptions, (n) => { - return n === index; - }); - } - if(this.selectedOptions === undefined){ - this.editorState.answer = undefined; - } - else { - this.editorState.answer = this.selectedOptions.map((value) => ({ [value]: value })); - } - this.setMapping(); - this.editorDataHandler(); } + setScore(value, scoreIndex) { const obj = { response: scoreIndex, diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index 145d80e8..6ab00be7 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -260,7 +260,7 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { const question = this.questionMetaData?.editorState?.question; const interactions = this.questionMetaData?.interactions; this.editorState = new MtfForm({ - question, options, answer: _.get(responseDeclaration, 'response1.correctResponse.value') + question, options, correctMatchPair: _.get(responseDeclaration, 'response1.correctResponse.value') }, { templateId, numberOfOptions, maximumOptions }); this.editorState.solutions = this.questionMetaData?.editorState?.solutions; this.editorState.interactions = interactions; @@ -630,7 +630,7 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } const rightOptionValid = _.find(this.editorState.options, option => (option.rightOption === undefined || option.rightOption === '' || option.rightOption.length > this.setCharacterLimit)); const leftOptionValid = _.find(this.editorState.options, option => (option.leftOption === undefined || option.leftOption === '' || option.leftOption.length > this.setCharacterLimit)); - if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.answer) && this.sourcingSettings?.enforceCorrectAnswer)) { + if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.correctMatchPair) && this.sourcingSettings?.enforceCorrectAnswer)) { this.showFormError = true; return; } else { @@ -852,9 +852,9 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { if (this.questionInteractionType === 'match') { metadata.body = this.getMatchQuestionHtmlBody(this.editorState.question); - const leftOptions = metadata.interactions.response1.optionSet.left; - const rightOptions = metadata.interactions.response1.optionSet.right; - metadata.answer = this.getMatchAnswerContainerHtml(leftOptions, rightOptions); + const leftOptions = metadata.interactions.response1.options.leftOptions; + const rightOptions = metadata.interactions.response1.options.rightOptions; + metadata.correctMatchPair = this.getMatchAnswerContainerHtml(leftOptions, rightOptions); } if (!_.isUndefined(this.selectedSolutionType) && !_.isEmpty(this.selectedSolutionType)) { @@ -885,7 +885,6 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { const optionHtml = answerHtml.replace('{answer}', optionLabel); return optionHtml; } - getMatchAnswerContainerHtml(leftOptions, rightOptions) { const matchContainerTemplate = '
{leftOptions}{rightOptions}
'; @@ -895,7 +894,7 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { .replace('{leftOptions}', leftOptionsHtml) .replace('{rightOptions}', rightOptionsHtml); return matchContainer; - } + } getOptionWrapperHtml(options, type) { const wrapperTemplate = `
{options}
`; diff --git a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts index 9634569b..26077c4e 100644 --- a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts +++ b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts @@ -7,7 +7,7 @@ export class MtfOption { export interface MtfData { question: string; options: Array; - answer?: string; + correctMatchPair?: string; learningOutcome?: string; complexityLevel?: string; maxScore?: number; @@ -17,25 +17,24 @@ export interface MtfConfig { templateId?: string; numberOfOptions?: number; maximumOptions?: number; - } export class MtfForm { public question: string; public options: Array; public templateId: string; - public answer: string; + public correctMatchPair: string; public learningOutcome?: string; public complexityLevel?: string; public maxScore?: number; public maximumOptions; public numberOfOptions; - constructor({question, options, answer, learningOutcome, complexityLevel, maxScore,}: MtfData,{ templateId, numberOfOptions, maximumOptions }: MtfConfig) { + constructor({question, options, correctMatchPair, learningOutcome, complexityLevel, maxScore,}: MtfData,{ templateId, numberOfOptions, maximumOptions }: MtfConfig) { this.question = question; this.options = options || []; this.templateId = templateId; - this.answer = answer; + this.correctMatchPair = correctMatchPair; this.learningOutcome = learningOutcome; this.complexityLevel = complexityLevel; this.numberOfOptions = numberOfOptions || 2; From c19a96e59b7806000432ff2bf71910d429ef8020 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Wed, 2 Aug 2023 00:47:00 +0530 Subject: [PATCH 20/45] Tests for match component --- .../components/match/match.component.spec.ts | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts index 932baeae..294e61b1 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts @@ -1,23 +1,35 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - +import { TelemetryInteractDirective } from '../../directives/telemetry-interact/telemetry-interact.directive'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { FormsModule } from '@angular/forms'; import { MatchComponent } from './match.component'; +import { CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import { ConfigService } from '../../services/config/config.service'; +import { SuiModule } from 'ng2-semantic-ui-v9'; +import { TreeService } from '../../services/tree/tree.service'; +import { EditorTelemetryService } from '../../services/telemetry/telemetry.service'; + -describe('MatchComponent', () => { +describe('OptionsComponent', () => { let component: MatchComponent; let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ MatchComponent ] + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule, FormsModule, SuiModule], + declarations: [MatchComponent, TelemetryInteractDirective], + providers: [ConfigService, TreeService, EditorTelemetryService,], + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) - .compileComponents(); + .compileComponents(); + })); + beforeEach(() => { fixture = TestBed.createComponent(MatchComponent); component = fixture.componentInstance; - fixture.detectChanges(); + // fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); -}); +}); \ No newline at end of file From f82c88418e08b43e5381f91560183c8ba820b8a6 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Mon, 7 Aug 2023 15:03:03 +0530 Subject: [PATCH 21/45] Issue #42 feat: New Match Type Question Implementation --- .../lib/components/match/match.component.html | 34 +- .../lib/components/match/match.component.scss | 25 ++ .../match/match.component.spec.data.ts | 114 ++++++ .../components/match/match.component.spec.ts | 119 +++++- .../lib/components/match/match.component.ts | 37 +- .../components/options/options.component.ts | 10 +- .../components/question/question.component.ts | 36 +- .../src/lib/interfaces/MtfForm.ts | 2 +- .../src/lib/services/config/label.config.json | 382 +++++++++--------- 9 files changed, 495 insertions(+), 264 deletions(-) create mode 100644 projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html index a59dafdd..ea938a44 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.html +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -5,37 +5,39 @@
-
-
-
+
+
+
+ [setCharacterLimit]="setCharacterLimit" (editorDataOutput)="option.left= $event.body; editorDataHandler($event);" + [editorDataInput]="option.left" class="ckeditor-tool__option mb-10" + [class.mb-5]="showFormError && option.left.length > setCharacterLimit"> -
-
+
-
-
-
diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.scss b/projects/questionset-editor-library/src/lib/components/match/match.component.scss index e69de29b..b6b99bbb 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.scss +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.scss @@ -0,0 +1,25 @@ +.b-0{ + border: 0 !important; +} + +.bg-none{ + background-color: transparent !important; + + &:hover, + &:focus { + background-color: transparent !important; + } +} + +.w-49{ + width: 49%; + max-width: 49%; +} + +.sb-line-height-24 { + line-height: 24px; +} + +.right{ + float: right; +} \ No newline at end of file diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts new file mode 100644 index 00000000..2552ed8f --- /dev/null +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts @@ -0,0 +1,114 @@ +export const mockOptionData = { + editorOptionData: { + question: "

Match the following with appropriate answer?

", + options: [ + { + left: "

Lotus

", + right: "

Flower

", + }, + { + left: "

Mango

", + right: "

Fruit

", + }, + ], + templateId: "mtf-vertical", + correctMatchPair: [{ "0": 0 }, { "1": 1 }], + numberOfOptions: 4, + }, + prepareMtfBody: { + templateId: "default", + name: "Match The Following Question", + responseDeclaration: { + response1: { + cardinality: "multiple", + type: "map", + correctResponse: { + value: [ + { + "0": 0, + }, + { + "1": 1, + }, + ], + }, + mapping: [ + { + value: { + "0": 0, + }, + score: 2, + }, + { + value: { + "1": 1, + }, + score: 2, + }, + ], + }, + }, + interactionTypes: ["match"], + interactions: { + response1: { + type: "match", + options: { + left: [ + { + label: "

Lotus

", + value: 0, + }, + { + label: "

Mango

", + value: 1, + }, + ], + right: [ + { + label: "

Flower

", + value: 0, + }, + { + label: "

Fruit

", + value: 1, + }, + ], + }, + }, + }, + editorState: { + options: { + left: [ + { + value: { + body: "

Lotus

", + value: 0, + }, + }, + { + value: { + body: "

Mango

", + value: 1, + }, + }, + ], + right: [ + { + value: { + body: "

Flower

", + value: 0, + }, + }, + { + value: { + body: "

Fruit

", + value: 1, + }, + }, + ], + }, + }, + qType: "MTF", + primaryCategory: "Match The Following Question", + }, +}; diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts index 294e61b1..79e1a79b 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts @@ -1,23 +1,21 @@ import { TelemetryInteractDirective } from '../../directives/telemetry-interact/telemetry-interact.directive'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { FormsModule } from '@angular/forms'; import { MatchComponent } from './match.component'; -import { CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import { mockOptionData } from './match.component.spec.data'; +import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange} from '@angular/core'; import { ConfigService } from '../../services/config/config.service'; -import { SuiModule } from 'ng2-semantic-ui-v9'; -import { TreeService } from '../../services/tree/tree.service'; import { EditorTelemetryService } from '../../services/telemetry/telemetry.service'; -describe('OptionsComponent', () => { +describe('MatchComponent', () => { let component: MatchComponent; let fixture: ComponentFixture; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [HttpClientTestingModule, FormsModule, SuiModule], + imports: [HttpClientTestingModule], declarations: [MatchComponent, TelemetryInteractDirective], - providers: [ConfigService, TreeService, EditorTelemetryService,], + providers: [ConfigService, EditorTelemetryService,], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) .compileComponents(); @@ -26,10 +24,117 @@ describe('OptionsComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(MatchComponent); component = fixture.componentInstance; + component.editorState = mockOptionData.editorOptionData; // fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it("#ngOnInit() should call editorDataHandler on ngOnInit", () => { + component.editorState = mockOptionData.editorOptionData; + spyOn(component, "editorDataHandler"); + component.ngOnInit(); + expect(component.editorDataHandler).toHaveBeenCalled(); + }); + + it("should not set #templateType when creating new question", () => { + component.editorState = {}; + spyOn(component, "editorDataHandler"); + component.ngOnInit(); + expect(component.templateType).toEqual("mtf-horizontal"); + }); + + it("should set #templateType when updating an existing question", () => { + component.editorState = mockOptionData.editorOptionData; + spyOn(component, "editorDataHandler"); + component.ngOnInit(); + expect(component.templateType).toEqual("mtf-vertical"); + }); + + it("ngOnChanges should not call editorDataHandler", () => { + spyOn(component, "editorDataHandler").and.callFake(() => {}); + spyOn(component, "ngOnChanges").and.callThrough(); + component.ngOnChanges({ + maxScore: new SimpleChange(undefined, 4, true), + }); + expect(component.editorDataHandler).not.toHaveBeenCalled(); + }); + + it("ngOnChanges should call editorDataHandler", () => { + spyOn(component, "editorDataHandler").and.callFake(() => {}); + spyOn(component, "ngOnChanges").and.callThrough(); + component.ngOnChanges({ + maxScore: new SimpleChange(1, 2, false), + }); + expect(component.editorDataHandler).toHaveBeenCalled(); + }); + + it('#editorDataHandler() should emit option data', () => { + spyOn(component, 'prepareMtfBody').and.callThrough(); + spyOn(component.editorDataOutput, 'emit').and.callThrough(); + component.editorState = mockOptionData.editorOptionData; + component.editorState.correctMatchPair = [{ "0": 0 }, { "1": 1 }]; + component.editorDataHandler(); + expect(component.prepareMtfBody).toHaveBeenCalledWith(mockOptionData.editorOptionData); + expect(component.editorDataOutput.emit).toHaveBeenCalled(); + }); + + it("#prepareMtfBody() should return expected mtf option data for MTF", () => { + component.maxScore = 4; + spyOn(component, 'setMapping').and.callThrough(); + spyOn(component, "getResponseDeclaration").and.callThrough(); + spyOn(component, "getInteractions").and.callThrough(); + const result = component.prepareMtfBody(mockOptionData.editorOptionData); + expect(component.getResponseDeclaration).toHaveBeenCalledWith( + mockOptionData.editorOptionData + ); + expect(component.getInteractions).toHaveBeenCalledWith( + mockOptionData.editorOptionData.options + ); + }); + + it('#getInteractions should return expected interactions', () => { + spyOn(component, 'getInteractions').and.callThrough(); + const result = component.getInteractions(mockOptionData.editorOptionData.options); + expect(result).toEqual(mockOptionData.prepareMtfBody.interactions); + }) + + it('#setMapping should set mapping', () => { + spyOn(component, 'setMapping').and.callThrough(); + component.editorState = mockOptionData.editorOptionData; + component.editorState.correctMatchPair = mockOptionData.editorOptionData.correctMatchPair; + component.maxScore = 4; + component.setMapping(); + expect(component.mapping).toEqual(mockOptionData.prepareMtfBody.responseDeclaration.response1.mapping); + }) + + it('#getOutcomeDeclaration should return expected outcomeDeclaration', () => { + component.maxScore = 4; + spyOn(component, 'getOutcomeDeclaration').and.callThrough(); + const outcomeDeclaration = component.getOutcomeDeclaration(); + expect(outcomeDeclaration.maxScore.cardinality).toEqual('multiple'); + expect(outcomeDeclaration.maxScore.defaultValue).toEqual(4); + }) + + it('#getResponseDeclaration should return expected responseDeclaration', () => { + component.mapping = [ + { + value: { + "0": 0, + }, + score: 2, + }, + { + value: { + "1": 1, + }, + score: 2, + }, + ]; + spyOn(component, "getResponseDeclaration").and.callThrough(); + const responseDeclaration = component.getResponseDeclaration(mockOptionData.editorOptionData); + expect(responseDeclaration.response1.cardinality).toEqual('multiple'); + }) }); \ No newline at end of file diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.ts index 2c479610..1336531b 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.ts @@ -2,8 +2,6 @@ import { Component, Input, OnInit, OnChanges, Output, EventEmitter, SimpleChange import * as _ from 'lodash-es'; import { EditorTelemetryService } from '../../services/telemetry/telemetry.service'; import { ConfigService } from '../../services/config/config.service'; -import { TreeService } from '../../services/tree/tree.service'; -import { EditorService } from '../../services/editor/editor.service'; @Component({ selector: 'lib-match', @@ -21,13 +19,11 @@ export class MatchComponent implements OnInit, OnChanges { @Output() editorDataOutput: EventEmitter = new EventEmitter(); public setCharacterLimit = 160; public setImageLimit = 1; - public templateType = 'default'; - parentMeta: any; + public templateType = 'mtf-horizontal'; + constructor( public telemetryService: EditorTelemetryService, public configService: ConfigService, - public treeService: TreeService, - private editorService: EditorService ) {} ngOnInit() { @@ -53,7 +49,7 @@ export class MatchComponent implements OnInit, OnChanges { } prepareMtfBody(editorState) { let metadata: any; - if (_.isEmpty(editorState.correctMatchPair) && !_.isEmpty(editorState.options)) { + if (!_.isEmpty(editorState.options)) { editorState.correctMatchPair = editorState.options.map((option, index) => { const correctMatchPair = {}; correctMatchPair[index.toString()] = index; @@ -64,18 +60,18 @@ export class MatchComponent implements OnInit, OnChanges { let options: any; if (!_.isEmpty(editorState.correctMatchPair)) { options = { - leftOptions: editorState.options.map((option, index) => { + left: editorState.options.map((option, index) => { return { value: { - body: option.leftOption, + body: option.left, value: index, } } }), - rightOptions: editorState.options.map((option, index) => { + right: editorState.options.map((option, index) => { return { value: { - body: option.rightOption, + body: option.right, value: index, } } @@ -144,12 +140,12 @@ export class MatchComponent implements OnInit, OnChanges { getInteractions(options) { const optionSet = { - leftOptions: options.map((option,index) => ({ - label: option.leftOption, + left: options.map((option,index) => ({ + label: option.left, value: index, })), - rightOptions: options.map((option,index) => ({ - label: option.rightOption, + right: options.map((option,index) => ({ + label: option.right, value: index, })), } @@ -161,15 +157,4 @@ export class MatchComponent implements OnInit, OnChanges { }; return interactions; } - - setScore(value, scoreIndex) { - const obj = { - response: scoreIndex, - outcomes: { - score: value, - }, - }; - this.mapping[scoreIndex] = obj; - this.editorDataHandler(); - } } diff --git a/projects/questionset-editor-library/src/lib/components/options/options.component.ts b/projects/questionset-editor-library/src/lib/components/options/options.component.ts index d317eccf..daf368fc 100644 --- a/projects/questionset-editor-library/src/lib/components/options/options.component.ts +++ b/projects/questionset-editor-library/src/lib/components/options/options.component.ts @@ -162,7 +162,7 @@ export class OptionsComponent implements OnInit, OnChanges { score: scoreForEachOption, } this.mapping.push(optionMapping) - }) + }) } else { this.mapping = []; } @@ -171,9 +171,9 @@ export class OptionsComponent implements OnInit, OnChanges { getInteractions(options) { let index; const interactOptions = _.map(options, (opt, key) => { - index = Number(key); - const hints = _.get(this.editorState, `interactions.response1.options[${index}].hints`) - return { label: opt.body, value: index, hints }; + index = Number(key); + const hints = _.get(this.editorState, `interactions.response1.options[${index}].hints`) + return { label: opt.body, value: index, hints }; }); this.subMenuConfig(options); const interactions = { @@ -181,7 +181,7 @@ export class OptionsComponent implements OnInit, OnChanges { type: 'choice', options: interactOptions, }, - }; + }; return interactions; } diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index 6ab00be7..07ab2b23 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -253,9 +253,9 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { const maximumOptions = _.get(this.questionInput, 'config.maximumOptions'); this.editorService.optionsLength = numberOfOptions; // converting the options to the format required by the editor - const options = _.map(this.questionMetaData?.editorState?.options?.leftOption, (leftOption, index) => ({ - leftOption, - rightOption:this.questionMetaData?.editorState?.options?.rightOption?.[index] + const options = _.map(this.questionMetaData?.editorState?.options?.left, (left, index) => ({ + left, + right:this.questionMetaData?.editorState?.options?.right?.[index] })); const question = this.questionMetaData?.editorState?.question; const interactions = this.questionMetaData?.interactions; @@ -628,8 +628,8 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } else { this.showFormError = false; } - const rightOptionValid = _.find(this.editorState.options, option => (option.rightOption === undefined || option.rightOption === '' || option.rightOption.length > this.setCharacterLimit)); - const leftOptionValid = _.find(this.editorState.options, option => (option.leftOption === undefined || option.leftOption === '' || option.leftOption.length > this.setCharacterLimit)); + const rightOptionValid = _.find(this.editorState.options, option => (option.right === undefined || option.right === '' || option.right.length > this.setCharacterLimit)); + const leftOptionValid = _.find(this.editorState.options, option => (option.left === undefined || option.left === '' || option.left.length > this.setCharacterLimit)); if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.correctMatchPair) && this.sourcingSettings?.enforceCorrectAnswer)) { this.showFormError = true; return; @@ -851,10 +851,10 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } if (this.questionInteractionType === 'match') { - metadata.body = this.getMatchQuestionHtmlBody(this.editorState.question); - const leftOptions = metadata.interactions.response1.options.leftOptions; - const rightOptions = metadata.interactions.response1.options.rightOptions; - metadata.correctMatchPair = this.getMatchAnswerContainerHtml(leftOptions, rightOptions); + metadata.body = this.getMtfQuestionHtmlBody(this.editorState.question, this.editorState.templateId); + const leftOptions = metadata.interactions.response1.options.left; + const rightOptions = metadata.interactions.response1.options.right; + metadata.correctMatchPair = this.getMtfAnswerContainerHtml(leftOptions, rightOptions); } if (!_.isUndefined(this.selectedSolutionType) && !_.isEmpty(this.selectedSolutionType)) { @@ -886,7 +886,7 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { return optionHtml; } - getMatchAnswerContainerHtml(leftOptions, rightOptions) { + getMtfAnswerContainerHtml(leftOptions, rightOptions) { const matchContainerTemplate = '
{leftOptions}{rightOptions}
'; const leftOptionsHtml = this.getOptionWrapperHtml(leftOptions, 'left'); const rightOptionsHtml = this.getOptionWrapperHtml(rightOptions, 'right'); @@ -897,18 +897,18 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } getOptionWrapperHtml(options, type) { - const wrapperTemplate = `
{options}
`; + const wrapperTemplate = `
{options}
`; let optionsHtml = ''; options.forEach((option) => { - const optionHtml = this.getMatchAnswerHtml(option.label, option.value); + const optionHtml = this.getMtfAnswerHtml(option.label, type); optionsHtml = optionsHtml.concat(optionHtml); }); const wrapper = wrapperTemplate.replace('{options}', optionsHtml); return wrapper; } - getMatchAnswerHtml(label, value) { - const answerHtml = '
{label}
'; - const optionHtml = answerHtml.replace('{label}', label).replace('{value}', value); + getMtfAnswerHtml(label, type) { + const answerHtml = `
{label}
`; + const optionHtml = answerHtml.replace('{label}', label); return optionHtml; } @@ -955,13 +955,13 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { return videoSolutionValue; } - getMatchQuestionHtmlBody(question) { + getMtfQuestionHtmlBody(question, templateId) { const matchTemplateConfig = { // tslint:disable-next-line:max-line-length - matchBody: '
{question}
' + matchBody: '
{question}
' }; const { matchBody } = matchTemplateConfig; - const questionBody = matchBody.replace('{question}', question); + const questionBody = matchBody.replace('{templateClass}', templateId).replace('{question}', question); return questionBody; } diff --git a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts index 26077c4e..67713877 100644 --- a/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts +++ b/projects/questionset-editor-library/src/lib/interfaces/MtfForm.ts @@ -1,7 +1,7 @@ import * as _ from "lodash-es"; export class MtfOption { - constructor(public leftOption: string, public rightOption: string) {} + constructor(public left: string, public right: string) {} } export interface MtfData { diff --git a/projects/questionset-editor-library/src/lib/services/config/label.config.json b/projects/questionset-editor-library/src/lib/services/config/label.config.json index 6ecd4658..ef7a67d2 100644 --- a/projects/questionset-editor-library/src/lib/services/config/label.config.json +++ b/projects/questionset-editor-library/src/lib/services/config/label.config.json @@ -47,199 +47,199 @@ "remove_btn_label":"Remove", "done_btn_label":"Done", "add_translation_label":"Add Translation", - "add_page_numbers_to_questions_btn_label": "Pagination" + "add_page_numbers_to_questions_btn_label": "Pagination", + "delete_pair_btn_label":"Delete Pair" }, "lbl":{ - "search": "Search", - "subject": "Subject", - "medium": "Medium", - "gradeLevel": "Class", - "contentType": "Content Type", - "reset": "Reset", - "apply": "apply", - "filterText": "Change Filters", - "Questiondetails": "Question details", - "selectContent": "Select content", - "noMatchingContent": "Sorry there is no matching content", - "changeFilterMessage": "Changing filter helps you find more content", - "changeFilter": "Change filters", - "whereDoYouWantToAddThisContent": "Where do you want to add this content?", - "selectContentToAdd": "Use search and filters above to find more content", - "addedToCollection": "Added to collection", - "changingFilters": "Changing filters make you find more content", - "ChangeFilters": "Change filters", - "addFromLibrary": "Add from Library", - "showContentAddedToCollection": "Show content added to collection", - "addContent": "Add content", - "sortBy": "Sort By", - "sortlabel": "A - Z", - "viewOnOrigin": "View Content on consumption", - "answers": "Answers", - "answersRequired": "Answer is required", - "answersPopupText": "Please provide an answer for the question. Check preview to understand how it would look.", - "selectImage": "Select Image", - "myImages": "My Images", - "allImage": "All Image", - "uploadAndUse": "Upload and Use", - "chooseOrDragImage": "Choose or drag and drop your image here", - "chooseOrDragVideo": "Choose or drag and drop your video here", - "uploadFromComputer": "Upload from Computer", - "upload": "Upload", - "maxFileSize": "Max File size:", - "allowedFileTypes": "Allowed file types are:", - "maximumAllowedFileSize": "Maximum allowed file size:", - "copyRightsAndLicense": "Copyright & License", - "dropChooseFile": "Drop or choose file to upload before entering the details", - "charactersLeft": "Characters left:", - "myVideos": "My Video(s)", - "allVideos": "All Video(s)", - "selectVideo": "Select Video", - "searchPlaceholder": "Search...", - "addAnImage": "Add an image", - "name": "Name", - "copyRightsAndYear": "Copyright & Yrar", - "license": "License", - "author": "Author", - "grade": "Grade", - "board": "Board", - "audience": "Audience", - "copyRight": "Copyright", - "licensedBy": "Licensed by", - "attributions": "Attributions", - "requestForQrCode": "Request for QR Codes", - "confirmDeleteContent": "Confirm Delete Content", - "confirmDeleteNode": "Are you sure want to delete the selected Node?", - "comments": "Comments", - "reviewComments": "Review Comments", - "questionSetPreview": "Question Set Preview", - "numberToolarge": "This number is too large for the request", - "acceptTerms": "Accepting Terms & Conditions", - "iAgreeSubmit": "I agree that by submitting / publishing this Content,", - "iconfirmContent": "I confirm that this Content complies with prescribed guidelines, including the Terms of Use and Content Policy and that I consent to publish it under the", - "createCommonFramework": "Creative Commons Framework in", - "accordance": "accordance with the", - "contentPolicy": "Content Policy.", - "privacyRights": "I have made sure that I do not violate others’ copyright or privacy rights.", - "viewComments": "View Comments", - "addReviewComments": "Add Review Comments", - "enterYourComments": "Enter your comments", - "publishCollection": "Publish ${objectType}", - "confirmPublishCollection": "Are you sure you want to publish this ${objectType}?", - "fillComments": "Fill comments", - "searchLibrary": "Search Library", - "options": "Options", - "optionsPopupText": "Please Preview to check how layout looks. Layout is responsive to the resolution of your device", - "selectOneAns": "Select one correct answer", - "fillThisOption": "Fill this option", - "reduceSize": "Please reduce the size", - "correctAns": "Correct answer", - "correctMatch": "Check if all match pairs are correct", - "addOption": "Add option", - "addPair": "Add pair", - "question": "Question", - "pageNumber": "Page No", - "setAnswers": "Set your answers", - "addQuestionAnswerPairText": "Add question-answer pairs to your question. Answers will be shuffled automatically", - "confirmQuestionNotSaved": "This question will not be saved, are you sure you want to go back to questionset?", - "video": "Video", - "textImage": "Text+Image", - "chooseType": "Choose type", - "solution": "Solution", - "optional": "(Optional)", - "questionRequired": "Question is required", - "addingTo": "Adding To", - "selectTemplate": "Select a template to get started", - "createNew": "Create new", - "selectLayout": "Select Layout", - "vertical": "Vertical", - "grid": "Grid", - "horizontal": "Horizontal", - "folders": "Folders", - "createHierarchyCsv": "Create folders using csv file", - "downloadFoldersInCSV": "Download folders as csv file", - "uploadUpdateCSV": "Update folder metadata using csv file", - "downloadSampleHierarchyCSv": "Upload csv file as per the given sample to create folders", - "makeSureFile": "Make sure that:", - "allColumnsAreAvailable": "The file has all the required columns", - "hasAllMandatoryColumn": "The file has all the required values filled in as per the format", - "noDuplicateRow": "There are no duplicate rows (with exactly same folder levels) in the file", - "downloadSampleCSV": "Download sample csv file", - "dragAndDropCSV": "Drag and Drop files to upload", - "selectFileToUpload": "Select file to upload", - "uploadEntries": "File accepted - csv", - "Or": "Or", - "pleaseWait": "Please wait", - "validateCsvFile": "Validating CSV file", - "hierarchyValidationError": "Error in processing the file", - "followingErrors": "Following errors are found in the file. Please correct and upload again", - "reUploadCSV": "Upload file again", - "hierarchyValidation": "Hierarchy Validation", - "hierarchyAdded": "Folders have been successfully created. Please close the dialog", - "hierarchyUpdated": "Folder metadata has been successfully updated. Please close the dialog", - "successful": "Successful !", - "csvDownloadInstruction": "Please make sure that this is the file downloaded using the “Download folders as csv file” option and changes are made to it", - "collaborators": "Collaborators", - "addCollaborators": "Add Collaborators", - "manageCollaborators": "Manage Collaborators", - "sliderValue": "Slider Value", - "left": "Left", - "stepSize": "Step size", - "right": "Right", - "translation": "Translation", - "publishchecklistTitle": "Please confirm that ALL the following items are verified (by ticking the check-boxes) before you can publish:", - "bulkUploadErrorMessage": "The metadata file has following errors. Please check and upload again", - "bulkUploadQuestion": "Bulk Upload Question", - "lastUploaded": "Last uploaded", - "bulkInProgress": "Bulk upload in progress", - "viewDetails": "View Details", - "downloadSampleMetadataCsvFileAndCreate": "Download sample metadata CSV file and create your own metadata file using the format", - "makeSureYourFile": "Make sure your file", - "allColumnsAreAvailableShownFormat": "All columns are available as shown in format.", - "hasAllMandatoryColumnsFilledAsMarkedInFormat": "Has all mandatory columns filled, as marked in the format", - "hasNoDuplicateUrlsFilepathColumn": "Has no duplicate URLs in the filepath column", - "downloadSampleMetadataCsv": "Download sample metadata CSV", - "processingDroppedFiles": "Processing dropped files...", - "retry": "retry", - "dragAndDrop": "Drag and Drop file", - "or": "or", - "selectFile": "Select file", - "uploadCSVXlEntries": "Upload csv upto 300 entries", - "no": "No", - "yes": "Yes", - "cancel": "Cancel", - "ok": "OK", - "validatingCSVFile": "Validating CSV file", - "metadataFileValidationFailed": "Metadata file validation failed.", - "metadataFollowingError": "The metadata file has following errors. Please check and upload again", - "uploadingYourContentFromCSV": "Uploading your question from CSV", - "uploadFail": "Upload failed", - "uploadSuccessful": "Upload successful", - "uploadRemaining": "Upload remaining", - "bulkUploadComplete": "Bulk upload complete!", - "contentUploaded": "Question uploaded", - "downloadReport": "Download report", - "next": "Next", - "back": "Back", - "close": "Close", - "bulkUploadNoticeLine1": "Uploading in bulk may take some time, click on", - "bulkUploadNoticeLine2": "to continue using Vidyadaan.", - "bulkUploadNoticeLine3": "Your upload will keep running in the background.", - "alreadyContentPresent": "Already present in this folder", - "loaderHeading": "Please wait", - "loaderMessage": "We are fetching details.", - "slidervalue": "Set the minimum and maximum values with which the slider would start and end respectively.", - "stepSizeInfo": "The step size would define the gap/jump between two values on the slider.", - "minSizeInfo": "The minimum slider value", - "maxSizeInfo": "The maximum slider value", - "questionsetAddFromLibraryItemLabel": "question", - "questionsetAddFromLibraryCollectionLabel": "question set", - "marks": "Marks", - "shuffleOnMessage": "Each question will carry equal weightage of 1 mark when using Shuffle. To provide different weightage to individual questions please turn off Shuffle.", - "editingConsentNote": "I confirm that I am allowing my reviewer to make edits to the content and metadata of the content. I consent my reviewer make changes, if any and publish the contain thereafter.", - "acceptBothConsentNote": "Agree to both conditions", - "totalScore": "Total Score", - "qualityReview": "If the score is less than or equal to 15 please re-evaluate the question and send back for corrections." - }, + "search":"Search", + "subject":"Subject", + "medium":"Medium", + "gradeLevel":"Class", + "contentType":"Content Type", + "reset":"Reset", + "apply":"apply", + "filterText":"Change Filters", + "Questiondetails":"Question details", + "selectContent":"Select content", + "noMatchingContent":"Sorry there is no matching content", + "changeFilterMessage":"Changing filter helps you find more content", + "changeFilter":"Change filters", + "whereDoYouWantToAddThisContent":"Where do you want to add this content?", + "selectContentToAdd":"Use search and filters above to find more content", + "addedToCollection":"Added to collection", + "changingFilters":"Changing filters make you find more content", + "ChangeFilters":"Change filters", + "addFromLibrary":"Add from Library", + "showContentAddedToCollection":"Show content added to collection", + "addContent":"Add content", + "sortBy":"Sort By", + "sortlabel":"A - Z", + "viewOnOrigin":"View Content on consumption", + "answers":"Answers", + "answersRequired":"Answer is required", + "answersPopupText":"Please provide an answer for the question. Check preview to understand how it would look.", + "selectImage":"Select Image", + "myImages":"My Images", + "allImage":"All Image", + "uploadAndUse":"Upload and Use", + "chooseOrDragImage":"Choose or drag and drop your image here", + "chooseOrDragVideo":"Choose or drag and drop your video here", + "uploadFromComputer":"Upload from Computer", + "upload":"Upload", + "maxFileSize":"Max File size:", + "allowedFileTypes":"Allowed file types are:", + "maximumAllowedFileSize":"Maximum allowed file size:", + "copyRightsAndLicense":"Copyright & License", + "dropChooseFile":"Drop or choose file to upload before entering the details", + "charactersLeft":"Characters left:", + "myVideos":"My Video(s)", + "allVideos":"All Video(s)", + "selectVideo":"Select Video", + "searchPlaceholder":"Search...", + "addAnImage":"Add an image", + "name":"Name", + "copyRightsAndYear":"Copyright & Yrar", + "license":"License", + "author":"Author", + "grade":"Grade", + "board":"Board", + "audience":"Audience", + "copyRight":"Copyright", + "licensedBy":"Licensed by", + "attributions":"Attributions", + "requestForQrCode":"Request for QR Codes", + "confirmDeleteContent":"Confirm Delete Content", + "confirmDeleteNode":"Are you sure want to delete the selected Node?", + "comments":"Comments", + "reviewComments":"Review Comments", + "questionSetPreview":"Question Set Preview", + "numberToolarge": "This number is too large for the request", + "acceptTerms":"Accepting Terms & Conditions", + "iAgreeSubmit":"I agree that by submitting / publishing this Content,", + "iconfirmContent":"I confirm that this Content complies with prescribed guidelines, including the Terms of Use and Content Policy and that I consent to publish it under the", + "createCommonFramework":"Creative Commons Framework in", + "accordance":"accordance with the", + "contentPolicy":"Content Policy.", + "privacyRights":"I have made sure that I do not violate others’ copyright or privacy rights." , + "viewComments":"View Comments", + "addReviewComments":"Add Review Comments", + "enterYourComments":"Enter your comments", + "publishCollection":"Publish ${objectType}", + "confirmPublishCollection":"Are you sure you want to publish this ${objectType}?", + "fillComments":"Fill comments", + "searchLibrary":"Search Library", + "options":"Options", + "optionsPopupText":"Please Preview to check how layout looks. Layout is responsive to the resolution of your device", + "selectOneAns":"Select one correct answer", + "fillThisOption":"Fill this option", + "reduceSize":"Please reduce the size", + "correctAns":"Correct answer", + "addOption":"Add option", + "question":"Question", + "pageNumber":"Page No", + "confirmQuestionNotSaved":"This question will not be saved, are you sure you want to go back to questionset?", + "video":"Video", + "textImage":"Text+Image", + "chooseType":"Choose type", + "solution":"Solution", + "optional":"(Optional)", + "questionRequired":"Question is required", + "addingTo":"Adding To", + "selectTemplate":"Select a template to get started", + "createNew":"Create new", + "selectLayout":"Select Layout", + "vertical":"Vertical", + "grid":"Grid", + "horizontal":"Horizontal", + "folders":"Folders", + "createHierarchyCsv":"Create folders using csv file", + "downloadFoldersInCSV":"Download folders as csv file", + "uploadUpdateCSV":"Update folder metadata using csv file", + "downloadSampleHierarchyCSv":"Upload csv file as per the given sample to create folders", + "makeSureFile":"Make sure that:", + "allColumnsAreAvailable":"The file has all the required columns", + "hasAllMandatoryColumn":"The file has all the required values filled in as per the format", + "noDuplicateRow":"There are no duplicate rows (with exactly same folder levels) in the file", + "downloadSampleCSV":"Download sample csv file", + "dragAndDropCSV":"Drag and Drop files to upload", + "selectFileToUpload":"Select file to upload", + "uploadEntries":"File accepted - csv", + "Or":"Or", + "pleaseWait":"Please wait", + "validateCsvFile":"Validating CSV file", + "hierarchyValidationError":"Error in processing the file", + "followingErrors":"Following errors are found in the file. Please correct and upload again", + "reUploadCSV":"Upload file again", + "hierarchyValidation":"Hierarchy Validation", + "hierarchyAdded":"Folders have been successfully created. Please close the dialog", + "hierarchyUpdated":"Folder metadata has been successfully updated. Please close the dialog", + "successful":"Successful !", + "csvDownloadInstruction":"Please make sure that this is the file downloaded using the “Download folders as csv file” option and changes are made to it", + "collaborators": "Collaborators", + "addCollaborators": "Add Collaborators", + "manageCollaborators": "Manage Collaborators", + "sliderValue":"Slider Value", + "left":"Left", + "stepSize":"Step size", + "right":"Right", + "translation":"Translation", + "publishchecklistTitle": "Please confirm that ALL the following items are verified (by ticking the check-boxes) before you can publish:", + "bulkUploadErrorMessage" : "The metadata file has following errors. Please check and upload again", + "bulkUploadQuestion": "Bulk Upload Question", + "lastUploaded": "Last uploaded", + "bulkInProgress": "Bulk upload in progress", + "viewDetails": "View Details", + "downloadSampleMetadataCsvFileAndCreate": "Download sample metadata CSV file and create your own metadata file using the format", + "makeSureYourFile": "Make sure your file", + "allColumnsAreAvailableShownFormat": "All columns are available as shown in format.", + "hasAllMandatoryColumnsFilledAsMarkedInFormat": "Has all mandatory columns filled, as marked in the format", + "hasNoDuplicateUrlsFilepathColumn": "Has no duplicate URLs in the filepath column", + "downloadSampleMetadataCsv": "Download sample metadata CSV", + "processingDroppedFiles" : "Processing dropped files...", + "retry": "retry", + "dragAndDrop": "Drag and Drop file", + "or" : "or", + "selectFile": "Select file", + "uploadCSVXlEntries": "Upload csv upto 300 entries", + "no": "No", + "yes": "Yes", + "cancel": "Cancel", + "ok": "OK", + "validatingCSVFile": "Validating CSV file", + "metadataFileValidationFailed": "Metadata file validation failed.", + "metadataFollowingError": "The metadata file has following errors. Please check and upload again", + "uploadingYourContentFromCSV": "Uploading your question from CSV", + "uploadFail" : "Upload failed", + "uploadSuccessful" : "Upload successful", + "uploadRemaining" : "Upload remaining", + "bulkUploadComplete" : "Bulk upload complete!", + "contentUploaded" : "Question uploaded", + "downloadReport": "Download report", + "next": "Next", + "back": "Back", + "close": "Close", + "bulkUploadNoticeLine1": "Uploading in bulk may take some time, click on", + "bulkUploadNoticeLine2": "to continue using Vidyadaan.", + "bulkUploadNoticeLine3": "Your upload will keep running in the background.", + "alreadyContentPresent": "Already present in this folder", + "loaderHeading": "Please wait", + "loaderMessage": "We are fetching details.", + "slidervalue": "Set the minimum and maximum values with which the slider would start and end respectively.", + "stepSizeInfo": "The step size would define the gap/jump between two values on the slider.", + "minSizeInfo": "The minimum slider value", + "maxSizeInfo": "The maximum slider value", + "questionsetAddFromLibraryItemLabel": "question", + "questionsetAddFromLibraryCollectionLabel": "question set", + "marks": "Marks", + "shuffleOnMessage": "Each question will carry equal weightage of 1 mark when using Shuffle. To provide different weightage to individual questions please turn off Shuffle.", + "editingConsentNote": "I confirm that I am allowing my reviewer to make edits to the content and metadata of the content. I consent my reviewer make changes, if any and publish the contain thereafter.", + "acceptBothConsentNote": "Agree to both conditions", + "totalScore": "Total Score", + "qualityReview": "If the score is less than or equal to 15 please re-evaluate the question and send back for corrections.", + "addPair": "Add pair", + "setAnswers": "Set your answers", + "addQuestionAnswerPairText": "Add question-answer pairs to your question. Answers will be shuffled automatically" + }, "err":{ "somethingWentWrong":"Something went wrong", "contentNotFoundonOrigin": "The content not found in consumption", From 1cda982b9ca5a1c31a37b13dd616cdd1a707bf4a Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Tue, 8 Aug 2023 17:21:25 +0530 Subject: [PATCH 22/45] Added interfaces in sonar exclusion --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index 9f8441c8..0c80de60 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,7 +1,7 @@ sonar.projectName=sunbird-questionset-editor sonar.language=ts sonar.sources=projects/questionset-editor-library/src -sonar.exclusions=projects/questionset-editor-library/src/lib/assets/**,projects/questionset-editor-library/src/lib/**/*.spec.ts,projects/questionset-editor-library/src/lib/**/*.spec.data.ts,projects/questionset-editor-library/src/lib/**/*.module.ts +sonar.exclusions=projects/questionset-editor-library/src/lib/assets/**,projects/questionset-editor-library/src/lib/**/*.spec.ts,projects/questionset-editor-library/src/lib/**/*.spec.data.ts,projects/questionset-editor-library/src/lib/**/*.module.ts,projects/questionset-editor-library/src/lib/interfaces/* sonar.javascript.lcov.reportPaths=projects/questionset-editor-library/coverage/lcov.info sonar.projectKey=Sunbird-inQuiry_editor sonar.host.url=https://sonarcloud.io From d068f4f277bc2b86a39ff113718f22f018bb3757 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Wed, 9 Aug 2023 16:00:00 +0530 Subject: [PATCH 23/45] Added tests for new functions in question component --- .../question/question.component.spec.ts | 182 +++++++++++++++++- 1 file changed, 180 insertions(+), 2 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts index 84b47794..592f7855 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts @@ -25,6 +25,7 @@ import { BranchingLogic, mockEditorCursor, interactionChoiceEditorState, + interactionMatchEditorState, RubricData, videoSolutionObject, mediaVideoArray @@ -292,7 +293,7 @@ describe("QuestionComponent", () => { component.previewFormData(true); expect(component.initialize).toHaveBeenCalled(); }); - + it("#initialize should call when question page for question mcq api fail", () => { spyOn(component, "initialize").and.callThrough(); component.questionId = "do_11330103476396851218"; @@ -313,7 +314,44 @@ describe("QuestionComponent", () => { component.initialize(); expect(component.initialize).toHaveBeenCalled(); }); - + + it("#initialize should call when question page for question mtf", () => { + component.initialLeafFormConfig = leafFormConfigMock; + component.leafFormConfig = leafFormConfigMock; + component.questionFormConfig=leafFormConfigMock; + spyOn(component, "initialize").and.callThrough(); + component.questionId = "do_11330103476396851218"; + editorService.parentIdentifier = undefined; + component.questionPrimaryCategory = undefined; + spyOn(editorService, "getToolbarConfig").and.returnValue({ + title: "abcd", + showDialcode: "No", + showPreview: "false", + }); + component.toolbarConfig.showPreview = false; + spyOn(editorService, "fetchCollectionHierarchy").and.callFake(() => { + return of(collectionHierarchyMock); + }); + component.questionId = "do_127"; + component.questionSetHierarchy = collectionHierarchyMock.result.questionset; + spyOn(questionService, "readQuestion").and.returnValue( + of(mockData.mtfQuestionMetaData) + ); + component.questionMetaData = mockData.mtfQuestionMetaData.result.question; + component.questionInteractionType = "match"; + component.scoreMapping = + mockData.mcqQuestionMetaData.result.question.responseDeclaration.response1.mapping; + component.sourcingSettings = sourcingSettingsMock; + component.questionInput.setChildQuestion = false; + component.editorState.solutions = [{ + id: '1', + type: 'vedio' + }] + component.initialize(); + component.previewFormData(true); + expect(component.initialize).toHaveBeenCalled(); + }); + it("#initialize should call when question page for question slider", () => { spyOn(component, "initialize").and.callThrough(); component.questionId = "do_11330103476396851218"; @@ -479,6 +517,54 @@ describe("QuestionComponent", () => { expect(component.setQuestionTitle).toHaveBeenCalled(); }); + it("#initialize should call when question page for question mtf with interactionTypes", () => { + component.questionSetId = "do_1278"; + spyOn(editorService, "fetchCollectionHierarchy").and.callFake(() => { + return of(collectionHierarchyMock); + }); + editorService.parentIdentifier = undefined; + component.questionId = "do_11330103476396851218"; + component.leafFormConfig = leafFormConfigMock; + spyOn(questionService, "readQuestion").and.returnValue( + of(mockData.mtfQuestionMetaData) + ); + spyOn(component, 'setQuestionTitle').and.callFake(() => {}); + spyOn(component, 'populateFormData').and.callFake(() => {}); + component.leafFormConfig = leafFormConfigMock; + spyOn(component, "initialize").and.callThrough(); + component.initialize(); + expect(component.initialize).toHaveBeenCalled(); + expect(component.questionPrimaryCategory).toBeDefined(); + expect(component.questionInteractionType).toBeDefined(); + expect(component.populateFormData).toHaveBeenCalled(); + expect(component.setQuestionTitle).toHaveBeenCalled(); + }); + + it("#initialize should call when question page for question mtf without interactionTypes", () => { + let questionMetadata = mockData.mtfQuestionMetaData.result.question; + questionMetadata = _.omit(questionMetadata, ['interactionTypes', 'primaryCategory']) + component.questionSetId = "do_1278"; + spyOn(editorService, "fetchCollectionHierarchy").and.callFake(() => { + return of(collectionHierarchyMock); + }); + editorService.parentIdentifier = undefined; + component.questionId = "do_11330103476396851218"; + component.leafFormConfig = leafFormConfigMock; + spyOn(questionService, "readQuestion").and.returnValue( + of({result: {question: {questionMetadata}}}) + ); + spyOn(component, 'setQuestionTitle').and.callFake(() => {}); + spyOn(component, 'populateFormData').and.callFake(() => {}); + component.leafFormConfig = leafFormConfigMock; + spyOn(component, "initialize").and.callThrough(); + component.initialize(); + expect(component.initialize).toHaveBeenCalled(); + expect(component.questionPrimaryCategory).toBeUndefined(); + expect(component.questionInteractionType).toEqual("default"); + expect(component.populateFormData).toHaveBeenCalled(); + expect(component.setQuestionTitle).toHaveBeenCalled(); + }); + it("#initialize should call when question page for question slider", () => { spyOn(component, "initialize").and.callThrough(); component.initialLeafFormConfig = leafFormConfigMock; @@ -781,6 +867,12 @@ describe("QuestionComponent", () => { const templateId = "mcq-vertical"; component.getMcqQuestionHtmlBody(question, templateId); }); + + it("call #getMtfQuestionHtmlBody() to verify questionBody", () => { + const question = '
{question}
'; + const templateId = "mtf-horizontal"; + component.getMtfQuestionHtmlBody(question, templateId); + }); it("Unit test for #sendForReview", () => { spyOn(component, "upsertQuestion"); @@ -1169,6 +1261,30 @@ describe("QuestionComponent", () => { expect(metadata['outcomeDeclaration'].maxScore.defaultValue).toEqual(1); }); + it('#getQuestionMetadata() should return question metata when interactionType is match', () => { + component.mediaArr = []; + component.editorState = interactionMatchEditorState; + component.selectedSolutionType = 'video'; + component.creationContext = undefined; + component.questionInteractionType = 'match'; + component.childFormData = { + name: 'MTF', + bloomsLevel: null, + board: 'CBSE', + maxScore: 1 + }; + component.maxScore = 4; + spyOn(component, 'getDefaultSessionContext').and.returnValue({ + creator: 'Vaibahv Bhuva', + createdBy: '5a587cc1-e018-4859-a0a8-e842650b9d64' + } + ); + spyOn(component, 'getQuestionSolution').and.returnValue({}); + spyOn(component, 'getQuestionMetadata').and.callThrough(); + const metadata = component.getQuestionMetadata(); + expect(metadata['outcomeDeclaration'].maxScore.defaultValue).toEqual(4); + }); + it('#getAnswerHtml() should return answer html', () => { spyOn(component, 'getAnswerHtml').and.callThrough(); const answerHtml = component.getAnswerHtml('

Sample Answer

'); @@ -1181,6 +1297,54 @@ describe("QuestionComponent", () => { expect(answerWrappedHtml).toBe('

Sample Answer

'); }); + it('#getMtfAnswerContainerHtml() should return answer html', () => { + spyOn(component, 'getMtfAnswerContainerHtml').and.callThrough(); + const leftOptions = [ + { + label: "

a

", + value: "0", + }, + { + label: "

b

", + value: "1", + }, + ]; + const rightOptions = [ + { + label: "

c

", + value: "0", + }, + { + label: "

d

", + value: "1", + }, + ]; + const matchContainer = component.getMtfAnswerContainerHtml(leftOptions, rightOptions); + expect(matchContainer).toBe('

a

b

c

d

') + }) + + it('#getOptionWrapperHtml() should return wrapper html', () => { + spyOn(component, 'getOptionWrapperHtml').and.callThrough(); + const leftOptions = [ + { + label: "

a

", + value: "0", + }, + { + label: "

b

", + value: "1", + }, + ]; + const wrapperHtml = component.getOptionWrapperHtml(leftOptions, 'left'); + expect(wrapperHtml).toBe('

a

b

'); + }) + + it('#getMtfAnswerHtml() should return answer html', () => { + spyOn(component, 'getMtfAnswerHtml').and.callThrough(); + const answerHtml = component.getMtfAnswerHtml('

Sample Answer

', 'left'); + expect(answerHtml).toBe('

Sample Answer

'); + }) + it('#getInteractionValues() should return correct answer object', () => { spyOn(component, 'getInteractionValues').and.callThrough(); const correctAnswersData = component.getInteractionValues([0], interactionChoiceEditorState.interactions); @@ -1400,6 +1564,20 @@ describe("QuestionComponent", () => { expect(component.showFormError).toBeFalsy(); }); + it("#validateQuestionData() should call validateQuestionData and questionInteractionType is mtf", () => { + component.sourcingSettings = sourcingSettingsMock; + spyOn(treeService, "getFirstChild").and.callFake(() => { + return { data: { metadata: { identifier: "0123",allowScoring:'Yes' } } }; + }); + component.editorState = mockData.mtfQuestionMetaData.result.question; + editorService = TestBed.inject(EditorService); + editorService.editorConfig.renderTaxonomy=false; + component.editorState.question = "

Hi how are you

"; + component.editorState.correctMatchPair = ""; + component.questionInteractionType = "match"; + component.validateQuestionData(); + }); + it("#validateQuestionData() should call validateQuestionData and questionInteractionType is text", () => { component.sourcingSettings = sourcingSettingsMock; component.editorState = mockData.textQuestionNetaData.result.question; From 01707b2b7c90cdc966638d51aca70bc47aa1de49 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Wed, 9 Aug 2023 16:01:29 +0530 Subject: [PATCH 24/45] Mock data for tests --- .../question/question.component.spec.data.ts | 307 ++++++++++++++++++ 1 file changed, 307 insertions(+) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.data.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.data.ts index bddc88ae..7faf96b9 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.data.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.data.ts @@ -233,6 +233,206 @@ export const mockData = { }, }, }, + mtfQuestionMetaData: { + id: "api.question.read", + ver: "3.0", + ts: "2022-01-31T04:38:30ZZ", + params: { + resmsgid: "597b1b63-7007-435a-8b9d-68127f3c6fa8", + msgid: null, + err: null, + status: "successful", + errmsg: null, + }, + responseCode: "OK", + result: { + question: { + mimeType: "application/vnd.sunbird.question", + media: [], + editorState: { + options: { + left: [ + { + value: { + body: "

LeftOption1

", + value: 0, + }, + }, + { + value: { + body: "

LeftOption2

", + value: 1, + }, + }, + { + value: { + body: "

LeftOption3

", + value: 2, + }, + }, + { + value: { + body: "

LeftOption4

", + value: 3, + }, + }, + ], + right: [ + { + value: { + body: "

RightOption1

", + value: 0, + }, + }, + { + value: { + body: "

RightOption2

", + value: 1, + }, + }, + { + value: { + body: "

RightOption3

", + value: 2, + }, + }, + { + value: { + body: "

RightOption4

", + value: 3, + }, + }, + ], + }, + question: "

MTF Question

", + }, + templateId: "mtf-horizontal", + solutions: {}, + interactions: { + response1: { + type: "match", + options: { + left: [ + { + label: "

LeftOption1

", + value: 0, + }, + { + label: "

LeftOption2

", + value: 1, + }, + { + label: "

LeftOption3

", + value: 2, + }, + { + label: "

LeftOption4

", + value: 3, + }, + ], + right: [ + { + label: "

RightOption1

", + value: 0, + }, + { + label: "

RightOption2

", + value: 1, + }, + { + label: "

RightOption3

", + value: 2, + }, + { + label: "

RightOption4

", + value: 3, + }, + ], + }, + validation: { + required: "Yes", + }, + }, + }, + name: "MTF Question", + responseDeclaration: { + response1: { + cardinality: "multiple", + type: "map", + correctResponse: { + value: [ + { + "0": 0, + }, + { + "1": 1, + }, + { + "2": 2, + }, + { + "3": 3, + }, + ], + }, + mapping: [ + { + value: { + "0": 0, + }, + score: 1, + }, + { + value: { + "1": 1, + }, + score: 1, + }, + { + value: { + "2": 2, + }, + score: 1, + }, + { + value: { + "3": 3, + }, + score: 1, + }, + ], + }, + }, + outcomeDeclaration: { + maxScore: { + cardinality: "multiple", + type: "integer", + defaultValue: 4, + }, + }, + remarks: { + maxLength: 100, + }, + interactionTypes: ["match"], + qType: "MTF", + primaryCategory: "Match The Following Question", + body: "

MTF Question

", + creator: "Arpan Gupta", + createdBy: "5a587cc1-e018-4859-a0a8-e842650b9d64", + board: "CBSE", + medium: ["English"], + gradeLevel: ["Grade 1"], + subject: ["English"], + topic: ["Forest"], + author: "check1@yopmail.com", + channel: "01309282781705830427", + framework: "nit_k-12", + license: "CC BY 4.0", + maxScore: "4", + identifier: "", + }, + }, + }, sliderQuestionMetaData: { id: "api.question.read", ver: "3.0", @@ -3124,6 +3324,113 @@ export const interactionChoiceEditorState = { primaryCategory: 'Multiple Choice Question' }; +export const interactionMatchEditorState = { + question: "

q

", + options: [ + { + left: "

a

", + right: "

b

", + }, + { + left: "

c

", + right: "

d

", + }, + ], + templateId: "mtf-horizontal", + corectMatchPair: [{ "0": 0 }, { "1": 1 }], + numberOfOptions: 2, + interactions: { + response1: { + type: "match", + options: { + left: [ + { + label: "

a

", + value: 0, + }, + { + label: "

b

", + value: 1, + }, + ], + right: [ + { + label: "

c

", + value: 0, + }, + { + label: "

d

", + value: 1, + }, + ], + }, + }, + validation: { + required: "Yes", + }, + }, + name: "Match The Following Question", + responseDeclaration: { + response1: { + cardinality: "multiple", + type: "integer", + correctResponse: { + value: [{ "0": 0 }, { "1": 1 }], + }, + mapping: [ + { + value: { + "0": 0, + }, + score: 2, + }, + { + value: { + "1": 1, + }, + score: 2, + }, + ], + }, + }, + interactionTypes: ["match"], + editorState: { + options: { + left: [ + { + value: { + body: "

a

", + value: 0, + }, + }, + { + value: { + body: "

b

", + value: 1, + }, + }, + ], + right: [ + { + value: { + body: "

c

", + value: 0, + }, + }, + { + value: { + body: "

d

", + value: 1, + }, + }, + ], + }, + question: "

q

", + }, + qType: "MTF", + primaryCategory: "Match The Following Question", +}; + export const RubricData = [ { parent: "do_1134357224765685761203", From 52f53ec4baa1a0ccfccb4dc1b56542214564a7b9 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Wed, 9 Aug 2023 16:03:39 +0530 Subject: [PATCH 25/45] Refactored getQuestionMetadata function --- .../components/question/question.component.ts | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index 07ab2b23..e408a32a 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -820,7 +820,10 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { metadata.body = metadata.question; if (!_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy)) { const treeNodeData = _.get(this.treeNodeData, 'data.metadata'); - _.get(treeNodeData,'allowScoring') === 'Yes' ? '' : _.set(metadata,'responseDeclaration.response1.mapping',[]); + const allowScoring = _.get(treeNodeData, 'allowScoring'); + if (allowScoring !== 'Yes') { + _.set(metadata, "responseDeclaration.response1.mapping", []); + } } if (this.questionInteractionType != 'choice' && this.questionInteractionType != 'match') { @@ -846,17 +849,15 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { }) const finalAnswer = this.getAnswerWrapperHtml(concatenatedAnswers); metadata.answer = finalAnswer; - } else if (this.questionInteractionType != 'default' && this.questionInteractionType != 'choice' && this.questionInteractionType != 'match') { + } else if (this.questionInteractionType === 'match') { + const { question, templateId } = this.editorState; + const { left, right } = this.editorState.interactions.response1.options; + metadata.body = this.getMtfQuestionHtmlBody(question, templateId); + metadata.correctMatchPair = this.getMtfAnswerContainerHtml(left, right); + } else if (this.questionInteractionType !== 'default') { metadata.responseDeclaration = this.getResponseDeclaration(this.questionInteractionType); } - - if (this.questionInteractionType === 'match') { - metadata.body = this.getMtfQuestionHtmlBody(this.editorState.question, this.editorState.templateId); - const leftOptions = metadata.interactions.response1.options.left; - const rightOptions = metadata.interactions.response1.options.right; - metadata.correctMatchPair = this.getMtfAnswerContainerHtml(leftOptions, rightOptions); - } - + if (!_.isUndefined(this.selectedSolutionType) && !_.isEmpty(this.selectedSolutionType)) { const solutionObj = this.getSolutionObj(this.solutionUUID, this.selectedSolutionType, this.editorState.solutions); metadata.editorState.solutions = [solutionObj]; @@ -870,12 +871,10 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { metadata.programId = _.get(this.editorService, 'editorConfig.context.programId'); metadata.collectionId = _.get(this.editorService, 'editorConfig.context.collectionIdentifier'); metadata.organisationId = _.get(this.editorService, 'editorConfig.context.contributionOrgId'); + metadata.isReviewModificationAllowed = !!_.get(this.questionMetaData, 'isReviewModificationAllowed'); } metadata['outcomeDeclaration'] = this.getOutcomeDeclaration(metadata); metadata = _.merge(metadata, _.pickBy(this.childFormData, _.identity)); - if (_.get(this.creationContext, 'objectType') === 'question') { - metadata.isReviewModificationAllowed = !!_.get(this.questionMetaData, 'isReviewModificationAllowed'); - } // tslint:disable-next-line:max-line-length return _.omit(metadata, ['question', 'numberOfOptions', 'options', 'allowMultiSelect', 'showEvidence', 'evidenceMimeType', 'showRemarks', 'markAsNotMandatory', 'leftAnchor', 'rightAnchor', 'step', 'numberOnly', 'characterLimit', 'dateFormat', 'autoCapture', 'remarksLimit', 'maximumOptions']); } From dba6334d912c8774ea88f70ea680a42a73205628 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Thu, 10 Aug 2023 20:39:53 +0530 Subject: [PATCH 26/45] UI refactored and tests added --- .../lib/components/match/match.component.html | 9 ++++-- .../lib/components/match/match.component.scss | 31 +++++++++++++++++++ .../components/match/match.component.spec.ts | 19 ++++++++++-- .../lib/components/match/match.component.ts | 5 +++ 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html index ea938a44..6530a556 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.html +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -1,9 +1,13 @@
- + + + +
+
@@ -49,6 +53,7 @@ libTelemetryInteract [telemetryInteractEdata]="telemetryService.getTelemetryInteractEdata('add_option','click','submit',telemetryService.telemetryPageId)" > {{configService.labelConfig?.lbl?.addPair}} - + +
diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.scss b/projects/questionset-editor-library/src/lib/components/match/match.component.scss index b6b99bbb..f4233a52 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.scss +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.scss @@ -1,3 +1,34 @@ +.q-sb-layout-single{ + &:before{ + content: url("/assets/images/layoutoneicon.svg"); + } + &.active, + &:hover + { + border-color: var(--primary-400); + background-color: #ffffff; + color: var(--primary-400); + &:before{ + content: url("/assets/images/layoutoneicon_blue.svg"); + } + } +} +.q-sb-layout-two{ + &:before{ + content: url("/assets/images/layouttwoicon.svg"); + } + &.active, + &:hover + { + border-color: var(--primary-400); + background-color: #ffffff; + color: var(--primary-400); + &:before{ + content: url("/assets/images/layouttwoicon_blue.svg"); + } + } +} + .b-0{ border: 0 !important; } diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts index 79e1a79b..39a32168 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts @@ -25,7 +25,6 @@ describe('MatchComponent', () => { fixture = TestBed.createComponent(MatchComponent); component = fixture.componentInstance; component.editorState = mockOptionData.editorOptionData; - // fixture.detectChanges(); }); it('should create', () => { @@ -86,7 +85,7 @@ describe('MatchComponent', () => { spyOn(component, 'setMapping').and.callThrough(); spyOn(component, "getResponseDeclaration").and.callThrough(); spyOn(component, "getInteractions").and.callThrough(); - const result = component.prepareMtfBody(mockOptionData.editorOptionData); + component.prepareMtfBody(mockOptionData.editorOptionData); expect(component.getResponseDeclaration).toHaveBeenCalledWith( mockOptionData.editorOptionData ); @@ -110,6 +109,13 @@ describe('MatchComponent', () => { expect(component.mapping).toEqual(mockOptionData.prepareMtfBody.responseDeclaration.response1.mapping); }) + it('#setMapping should set mapping with empty array when correctMatchPair is empty', () => { + spyOn(component, 'setMapping').and.callThrough(); + component.editorState.correctMatchPair = []; + component.setMapping(); + expect(component.mapping).toEqual([]); + }); + it('#getOutcomeDeclaration should return expected outcomeDeclaration', () => { component.maxScore = 4; spyOn(component, 'getOutcomeDeclaration').and.callThrough(); @@ -137,4 +143,13 @@ describe('MatchComponent', () => { const responseDeclaration = component.getResponseDeclaration(mockOptionData.editorOptionData); expect(responseDeclaration.response1.cardinality).toEqual('multiple'); }) + + it('#setTemplate() should set #templateType to "mtf-vertical"', () => { + spyOn(component, "editorDataHandler").and.callThrough(); + const templateType = "mtf-vertical"; + component.editorState = mockOptionData.editorOptionData; + component.setTemplate(templateType); + expect(component.templateType).toEqual(templateType); + expect(component.editorDataHandler).toHaveBeenCalled(); + }); }); \ No newline at end of file diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.ts index 1336531b..a8d043e3 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.ts @@ -157,4 +157,9 @@ export class MatchComponent implements OnInit, OnChanges { }; return interactions; } + + setTemplate(template) { + this.templateType = template; + this.editorDataHandler(); + } } From 957cb3dd873f2e819bea4667f5efd49d71b83f2a Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Thu, 10 Aug 2023 20:47:25 +0530 Subject: [PATCH 27/45] Bug resolved --- .../src/lib/components/match/match.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html index 6530a556..b12923f0 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.html +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -4,8 +4,8 @@ - - + +
From 73eb19d410a7964f0bc85cd6bb7bd0b069051998 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Fri, 11 Aug 2023 21:58:32 +0530 Subject: [PATCH 28/45] Refactored question component code and tests added --- .../question/question.component.spec.ts | 35 +++++++++++++- .../components/question/question.component.ts | 46 ++++++++++--------- 2 files changed, 59 insertions(+), 22 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts index 4098e6ad..9ddb4bd9 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts @@ -1244,7 +1244,7 @@ describe("QuestionComponent", () => { expect(metadata['outcomeDeclaration'].maxScore.defaultValue).toEqual(1); }); - it('#getQuestionMetadata() should return question metata when interactionType is match', () => { + it('#getQuestionMetadata() should return question metadata when interactionType is match', () => { component.mediaArr = []; component.editorState = interactionMatchEditorState; component.selectedSolutionType = 'video'; @@ -1567,6 +1567,39 @@ describe("QuestionComponent", () => { expect(component.showFormError).toBeFalsy(); }); + it("#validateMatchQuestionData() should validate and set showFormError to true", () => { + component.sourcingSettings = sourcingSettingsMock; + component.treeNodeData = { data: { metadata: { allowScoring: "Yes" } } }; + component.editorState = mockData.mtfQuestionMetaData.result.question; + component.editorState.responseDeclaration.response1.mapping = []; + editorService = TestBed.inject(EditorService); + editorService.editorConfig.renderTaxonomy = false; + component.editorState.question = "

Match each object with its correct type

"; + component.editorState.correctMatchPair = ""; + component.questionInteractionType = "match"; + const toasterService = TestBed.inject(ToasterService); + spyOn(toasterService, "error").and.callFake(() => {}); + spyOn(component, "validateMatchQuestionData").and.callThrough(); + component.validateMatchQuestionData(); + expect(component.showFormError).toBeTruthy(); + }); + + it("#validateMatchQuestionData() should validate and set showFormError to false when allowScoring is No", () => { + component.sourcingSettings = sourcingSettingsMock; + component.treeNodeData = { data: { metadata: { allowScoring: "No" } } }; + component.editorState = mockData.mtfQuestionMetaData.result.question; + editorService = TestBed.inject(EditorService); + editorService.editorConfig.renderTaxonomy = false; + component.editorState.question = "

Match each object with its correct type

"; + component.editorState.correctMatchPair = ""; + component.questionInteractionType = "match"; + const toasterService = TestBed.inject(ToasterService); + spyOn(toasterService, "error").and.callFake(() => {}); + spyOn(component, "validateMatchQuestionData").and.callThrough(); + component.validateMatchQuestionData(); + expect(component.showFormError).toBeFalsy(); + }); + it("#validateQuestionData() should call validateQuestionData when questionInteractionType is text", () => { component.sourcingSettings = sourcingSettingsMock; component.editorState = mockData.textQuestionNetaData.result.question; diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index f3e1e3ae..c6f48bcf 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -589,27 +589,9 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { this.validateChoiceQuestionData(); } - //to handle when question type is match + //to handle when question type is mtf if (this.questionInteractionType === 'match') { - const data = _.get(this.treeNodeData, 'data.metadata'); - if (_.get(this.editorState, 'interactionTypes[0]') === 'match' && - _.isEmpty(this.editorState?.responseDeclaration?.response1?.mapping) && - !_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy) && - _.get(data,'allowScoring') === 'Yes') { - this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.005')); - this.showFormError = true; - return; - } else { - this.showFormError = false; - } - const rightOptionValid = _.find(this.editorState.options, option => (option.right === undefined || option.right === '' || option.right.length > this.setCharacterLimit)); - const leftOptionValid = _.find(this.editorState.options, option => (option.left === undefined || option.left === '' || option.left.length > this.setCharacterLimit)); - if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.correctMatchPair) && this.sourcingSettings?.enforceCorrectAnswer)) { - this.showFormError = true; - return; - } else { - this.showFormError = false; - } + this.validateMatchQuestionData(); } if (this.questionInteractionType === 'slider') { @@ -649,6 +631,28 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } } + validateMatchQuestionData() { + const data = _.get(this.treeNodeData, 'data.metadata'); + if (_.get(this.editorState, 'interactionTypes[0]') === 'match' && + _.isEmpty(this.editorState?.responseDeclaration?.response1?.mapping) && + !_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy) && + _.get(data,'allowScoring') === 'Yes') { + this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.005')); + this.showFormError = true; + return; + } else { + this.showFormError = false; + } + const rightOptionValid = _.find(this.editorState.options, option => (option.right === undefined || option.right === '' || option.right.length > this.setCharacterLimit)); + const leftOptionValid = _.find(this.editorState.options, option => (option.left === undefined || option.left === '' || option.left.length > this.setCharacterLimit)); + if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.correctMatchPair) && this.sourcingSettings?.enforceCorrectAnswer)) { + this.showFormError = true; + return; //NOSONAR + } else { + this.showFormError = false; + } + } + validateSliderQuestionData() { const min = _.get(this.sliderDatas, 'validation.range.min'); const max = _.get(this.sliderDatas, 'validation.range.max'); @@ -817,7 +821,7 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } setQuestionProperties(metadata) { - if (this.questionInteractionType != 'choice') { + if (this.questionInteractionType != 'choice' && this.questionInteractionType != 'match') { if (!_.isUndefined(metadata.answer)) { const answerHtml = this.getAnswerHtml(metadata.answer); const finalAnswer = this.getAnswerWrapperHtml(answerHtml); From 4ff8fcafb15af30584184bbb1fe178e61c591e57 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Wed, 16 Aug 2023 23:19:21 +0530 Subject: [PATCH 29/45] Code refactored --- .../src/lib/components/match/match.component.spec.data.ts | 2 +- .../src/lib/components/match/match.component.ts | 2 -- .../src/lib/components/question/question.component.html | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts index 2552ed8f..7d1a30bf 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts @@ -16,7 +16,7 @@ export const mockOptionData = { numberOfOptions: 4, }, prepareMtfBody: { - templateId: "default", + templateId: "mtf-horizontal", name: "Match The Following Question", responseDeclaration: { response1: { diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.ts index a8d043e3..0695010b 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.ts @@ -11,14 +11,12 @@ import { ConfigService } from '../../services/config/config.service'; export class MatchComponent implements OnInit, OnChanges { @Input() editorState: any; @Input() showFormError; - @Input() sourcingSettings; @Input() questionPrimaryCategory; @Input() mapping = []; @Input() isReadOnlyMode; @Input() maxScore; @Output() editorDataOutput: EventEmitter = new EventEmitter(); public setCharacterLimit = 160; - public setImageLimit = 1; public templateType = 'mtf-horizontal'; constructor( diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.html b/projects/questionset-editor-library/src/lib/components/question/question.component.html index 62063550..e1806aef 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.html +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.html @@ -69,7 +69,7 @@ [questionPrimaryCategory]="questionPrimaryCategory" [editorState]="editorState" [showFormError]="showFormError" (editorDataOutput)="editorDataHandler($event)" - [sourcingSettings]="sourcingSettings" [mapping]="scoreMapping" [maxScore]="maxScore" + [mapping]="scoreMapping" [maxScore]="maxScore" [isReadOnlyMode]="isReadOnlyMode"> Date: Thu, 17 Aug 2023 15:06:29 +0530 Subject: [PATCH 30/45] Match template refactored --- .../lib/components/match/match.component.html | 70 ++++++++++++------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html index b12923f0..149b9888 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.html +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -1,11 +1,26 @@
- - + + - - + + + + + +
@@ -17,42 +32,49 @@ [editorDataInput]="option.left" class="ckeditor-tool__option mb-10" [class.mb-5]="showFormError && option.left.length > setCharacterLimit"> - - + +
- - + +
From cd046e4e952bbe2ec30d56f605481ef0bcb1c8f5 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Thu, 17 Aug 2023 15:24:49 +0530 Subject: [PATCH 31/45] Question component refactored --- .../components/question/question.component.ts | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index c6f48bcf..d4e6d5a8 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -225,45 +225,32 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } } - if (this.questionInteractionType === 'choice') { + if (this.questionInteractionType === 'choice' || this.questionInteractionType === 'match') { const responseDeclaration = this.questionMetaData.responseDeclaration; this.scoreMapping = _.get(responseDeclaration, 'response1.mapping'); const templateId = this.questionMetaData.templateId; const numberOfOptions = this.questionMetaData?.editorState?.options?.length || 0; const maximumOptions = _.get(this.questionInput, 'config.maximumOptions'); - this.editorService.optionsLength = numberOfOptions; - const options = _.map(this.questionMetaData?.editorState?.options, option => ({ body: option.value.body })); + this.editorService.optionsLength = numberOfOptions; const question = this.questionMetaData?.editorState?.question; const interactions = this.questionMetaData?.interactions; - this.editorState = new McqForm({ - question, options, answer: _.get(responseDeclaration, 'response1.correctResponse.value') - }, { templateId, numberOfOptions,maximumOptions }); - this.editorState.solutions = this.questionMetaData?.editorState?.solutions; this.editorState.interactions = interactions; - if (_.has(this.questionMetaData, 'responseDeclaration')) { - this.editorState.responseDeclaration = _.get(this.questionMetaData, 'responseDeclaration'); + if (this.questionInteractionType === 'choice') { + const options = _.map(this.questionMetaData?.editorState?.options, option => ({ body: option.value.body })); + this.editorState = new McqForm({ + question, options, answer: _.get(responseDeclaration, 'response1.correctResponse.value') + }, { templateId, numberOfOptions, maximumOptions }); + } + else if (this.questionInteractionType === 'match') { + const options = _.map(this.questionMetaData?.editorState?.options?.left, (left, index) => ({ + left, + right:this.questionMetaData?.editorState?.options?.right?.[index] + })); + this.editorState = new MtfForm({ + question, options, correctMatchPair: _.get(responseDeclaration, 'response1.correctResponse.value') + }, { templateId, numberOfOptions, maximumOptions }); } - } - - if (this.questionInteractionType === 'match') { - const responseDeclaration = this.questionMetaData.responseDeclaration; - this.scoreMapping = _.get(responseDeclaration, 'response1.mapping'); - const templateId = this.questionMetaData.templateId; - const numberOfOptions = this.questionMetaData?.editorState?.options?.length || 0; - const maximumOptions = _.get(this.questionInput, 'config.maximumOptions'); - this.editorService.optionsLength = numberOfOptions; - // converting the options to the format required by the editor - const options = _.map(this.questionMetaData?.editorState?.options?.left, (left, index) => ({ - left, - right:this.questionMetaData?.editorState?.options?.right?.[index] - })); - const question = this.questionMetaData?.editorState?.question; - const interactions = this.questionMetaData?.interactions; - this.editorState = new MtfForm({ - question, options, correctMatchPair: _.get(responseDeclaration, 'response1.correctResponse.value') - }, { templateId, numberOfOptions, maximumOptions }); this.editorState.solutions = this.questionMetaData?.editorState?.solutions; - this.editorState.interactions = interactions; if (_.has(this.questionMetaData, 'responseDeclaration')) { this.editorState.responseDeclaration = _.get(this.questionMetaData, 'responseDeclaration'); } From 5cbf70cf0673105bf370f10b0a0202eb5e36e816 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Fri, 18 Aug 2023 21:48:18 +0530 Subject: [PATCH 32/45] Refactored Code --- .../question/question.component.spec.ts | 54 ++++++++---------- .../components/question/question.component.ts | 57 +++++++++---------- sonar-project.properties | 2 +- 3 files changed, 52 insertions(+), 61 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts index 9ddb4bd9..918f3a9a 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.spec.ts @@ -1534,41 +1534,38 @@ describe("QuestionComponent", () => { expect(component.validateChoiceQuestionData).toHaveBeenCalled(); }); - it('#validateChoiceQuestionData() should validate and set showFormError to true', () => { + it('#validateChoiceQuestionData() should validate choice question data when all options are valid and set showFormError to false', () => { component.sourcingSettings = sourcingSettingsMock; - component.treeNodeData = {data: {metadata: {allowScoring: 'Yes'}}} - component.editorState = mockData.mcqQuestionMetaData.result.question; - component.editorState.responseDeclaration.response1.mapping = []; - editorService = TestBed.inject(EditorService); - editorService.editorConfig.renderTaxonomy = false; component.editorState.question = "

Hi how are you

"; + component.editorState.options = [ + { body: "

1

" }, + { body: "

2

" }, + ] component.editorState.answer = ""; component.questionInteractionType = "choice"; - const toasterService = TestBed.inject(ToasterService); - spyOn(toasterService, 'error').and.callFake(() => {}); spyOn(component, 'validateChoiceQuestionData').and.callThrough(); component.validateChoiceQuestionData(); - expect(component.showFormError).toBeTruthy(); + expect(component.showFormError).toBeFalsy(); }); - it('#validateChoiceQuestionData() should validate and set showFormError to false when allowScoring is No', () => { + it("#validateMatchQuestionData() should validate match question data when all options have valid left and right values and set showFormError to false", () => { component.sourcingSettings = sourcingSettingsMock; - component.treeNodeData = {data: {metadata: {allowScoring: 'No'}}} - component.editorState = mockData.mcqQuestionMetaData.result.question; - editorService = TestBed.inject(EditorService); - editorService.editorConfig.renderTaxonomy = false; - component.editorState.question = "

Hi how are you

"; - component.editorState.answer = ""; - component.questionInteractionType = "choice"; - const toasterService = TestBed.inject(ToasterService); - spyOn(toasterService, 'error').and.callFake(() => {}); - spyOn(component, 'validateChoiceQuestionData').and.callThrough(); - component.validateChoiceQuestionData(); + component.editorState.question = "

Match each object with its correct type

"; + component.editorState.options = [ + { left: "

1

", right: "

a

" }, + { left: "

2

", right: "

b

"}, + ] + component.editorState.correctMatchPair = [ + { "0": "0" }, + { "1": "1"}, + ]; + component.questionInteractionType = "match"; + spyOn(component, "validateMatchQuestionData").and.callThrough(); + component.validateMatchQuestionData(); expect(component.showFormError).toBeFalsy(); }); - it("#validateMatchQuestionData() should validate and set showFormError to true", () => { - component.sourcingSettings = sourcingSettingsMock; + it("#validateData() should validate and set showFormError to true when allowScoring is Yes", () => { component.treeNodeData = { data: { metadata: { allowScoring: "Yes" } } }; component.editorState = mockData.mtfQuestionMetaData.result.question; component.editorState.responseDeclaration.response1.mapping = []; @@ -1579,13 +1576,12 @@ describe("QuestionComponent", () => { component.questionInteractionType = "match"; const toasterService = TestBed.inject(ToasterService); spyOn(toasterService, "error").and.callFake(() => {}); - spyOn(component, "validateMatchQuestionData").and.callThrough(); - component.validateMatchQuestionData(); + spyOn(component, "validateData").and.callThrough(); + component.validateData(component.questionInteractionType); expect(component.showFormError).toBeTruthy(); }); - it("#validateMatchQuestionData() should validate and set showFormError to false when allowScoring is No", () => { - component.sourcingSettings = sourcingSettingsMock; + it("#validateData() should validate and set showFormError to false when allowScoring is No", () => { component.treeNodeData = { data: { metadata: { allowScoring: "No" } } }; component.editorState = mockData.mtfQuestionMetaData.result.question; editorService = TestBed.inject(EditorService); @@ -1595,8 +1591,8 @@ describe("QuestionComponent", () => { component.questionInteractionType = "match"; const toasterService = TestBed.inject(ToasterService); spyOn(toasterService, "error").and.callFake(() => {}); - spyOn(component, "validateMatchQuestionData").and.callThrough(); - component.validateMatchQuestionData(); + spyOn(component, "validateData").and.callThrough(); + component.validateData(component.questionInteractionType); expect(component.showFormError).toBeFalsy(); }); diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index d4e6d5a8..67363565 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -597,17 +597,7 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } validateChoiceQuestionData() { - const data = _.get(this.treeNodeData, 'data.metadata'); - if (_.get(this.editorState, 'interactionTypes[0]') === 'choice' && - _.isEmpty(this.editorState?.responseDeclaration?.response1?.mapping) && - !_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy) && - _.get(data,'allowScoring') === 'Yes') { - this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.005')); - this.showFormError = true; - return; - } else { - this.showFormError = false; - } + this.validateData('choice'); const optionValid = _.find(this.editorState.options, option => (option.body === undefined || option.body === '' || option.length > this.setCharacterLimit)); if (optionValid || (_.isUndefined(this.editorState.answer) && this.sourcingSettings?.enforceCorrectAnswer)) { @@ -619,27 +609,18 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } validateMatchQuestionData() { - const data = _.get(this.treeNodeData, 'data.metadata'); - if (_.get(this.editorState, 'interactionTypes[0]') === 'match' && - _.isEmpty(this.editorState?.responseDeclaration?.response1?.mapping) && - !_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy) && - _.get(data,'allowScoring') === 'Yes') { - this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.005')); - this.showFormError = true; - return; - } else { - this.showFormError = false; - } - const rightOptionValid = _.find(this.editorState.options, option => (option.right === undefined || option.right === '' || option.right.length > this.setCharacterLimit)); - const leftOptionValid = _.find(this.editorState.options, option => (option.left === undefined || option.left === '' || option.left.length > this.setCharacterLimit)); - if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.correctMatchPair) && this.sourcingSettings?.enforceCorrectAnswer)) { - this.showFormError = true; - return; //NOSONAR - } else { - this.showFormError = false; - } + this.validateData('match'); + const rightOptionValid = _.find(this.editorState.options, option => (option.right === undefined || option.right === '' || option.right.length > this.setCharacterLimit)); + const leftOptionValid = _.find(this.editorState.options, option => (option.left === undefined || option.left === '' || option.left.length > this.setCharacterLimit)); + if (rightOptionValid || leftOptionValid || (_.isUndefined(this.editorState.correctMatchPair) && this.sourcingSettings?.enforceCorrectAnswer)) { + this.showFormError = true; + return; //NOSONAR + } else { + this.showFormError = false; + } } + validateSliderQuestionData() { const min = _.get(this.sliderDatas, 'validation.range.min'); const max = _.get(this.sliderDatas, 'validation.range.max'); @@ -651,7 +632,21 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { this.showFormError = false; } } - + + validateData(interactionType) { + const data = _.get(this.treeNodeData, 'data.metadata'); + if (_.get(this.editorState, 'interactionTypes[0]') === interactionType && + _.isEmpty(this.editorState?.responseDeclaration?.response1?.mapping) && + !_.isUndefined(this.editorService?.editorConfig?.config?.renderTaxonomy) && + _.get(data,'allowScoring') === 'Yes') { + this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.005')); + this.showFormError = true; + return; //NOSONAR + } else { + this.showFormError = false; + } + } + redirectToQuestionset() { this.showConfirmPopup = false; this.treeService.clearTreeCache(); diff --git a/sonar-project.properties b/sonar-project.properties index 0c80de60..10f91e1b 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,7 +1,7 @@ sonar.projectName=sunbird-questionset-editor sonar.language=ts sonar.sources=projects/questionset-editor-library/src -sonar.exclusions=projects/questionset-editor-library/src/lib/assets/**,projects/questionset-editor-library/src/lib/**/*.spec.ts,projects/questionset-editor-library/src/lib/**/*.spec.data.ts,projects/questionset-editor-library/src/lib/**/*.module.ts,projects/questionset-editor-library/src/lib/interfaces/* +sonar.exclusions=projects/questionset-editor-library/src/lib/assets/**,projects/questionset-editor-library/src/lib/**/*.spec.ts,projects/questionset-editor-library/src/lib/**/*.spec.data.ts,projects/questionset-editor-library/src/lib/**/*.module.ts,projects/questionset-editor-library/src/lib/interfaces/*,projects/questionset-editor-library/src/lib/services/config/label.config.json sonar.javascript.lcov.reportPaths=projects/questionset-editor-library/coverage/lcov.info sonar.projectKey=Sunbird-inQuiry_editor sonar.host.url=https://sonarcloud.io From e3a703825331e07afeaf0c6de7fa7be269ebfa7f Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Sat, 19 Aug 2023 14:56:18 +0530 Subject: [PATCH 33/45] Canaged correctMatchPair property in metadata --- .../src/lib/components/question/question.component.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/question/question.component.ts b/projects/questionset-editor-library/src/lib/components/question/question.component.ts index 67363565..3c73f944 100644 --- a/projects/questionset-editor-library/src/lib/components/question/question.component.ts +++ b/projects/questionset-editor-library/src/lib/components/question/question.component.ts @@ -243,8 +243,8 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { } else if (this.questionInteractionType === 'match') { const options = _.map(this.questionMetaData?.editorState?.options?.left, (left, index) => ({ - left, - right:this.questionMetaData?.editorState?.options?.right?.[index] + left: left.value.body, + right:this.questionMetaData?.editorState?.options?.right?.[index].value.body })); this.editorState = new MtfForm({ question, options, correctMatchPair: _.get(responseDeclaration, 'response1.correctResponse.value') @@ -830,7 +830,9 @@ export class QuestionComponent implements OnInit, AfterViewInit, OnDestroy { const { question, templateId } = this.editorState; const { left, right } = this.editorState.interactions.response1.options; metadata.body = this.getMtfQuestionHtmlBody(question, templateId); - metadata.correctMatchPair = this.getMtfAnswerContainerHtml(left, right); + metadata['answer'] = metadata['correctMatchPair']; + delete metadata['correctMatchPair']; + metadata.answer = this.getMtfAnswerContainerHtml(left, right); } else if (this.questionInteractionType !== 'default') { metadata.responseDeclaration = this.getResponseDeclaration(this.questionInteractionType); } From 7eb285a122328c58a123c771bfeb6c6c9eae5638 Mon Sep 17 00:00:00 2001 From: Arpan Gupta Date: Wed, 23 Aug 2023 17:49:57 +0530 Subject: [PATCH 34/45] Resolved fill this option error bug --- .../src/lib/components/match/match.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html index 149b9888..ce10ec67 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.html +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -30,7 +30,7 @@ + [class.mb-5]="showFormError && ([undefined, ''].includes(option.left.body) || option.left.length > setCharacterLimit)">
diff --git a/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss b/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss index 74e14cb2..c9e2fef5 100644 --- a/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss +++ b/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss @@ -16,6 +16,15 @@ font-size: 11px; font-weight: bold; margin-top: -16px; + position: relative; +} + +.bottomImage { + background-color: transparent; + z-index: 1; + left: 510px; + font-size: 11px; + margin-top: -18px; position: relative } diff --git a/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.ts b/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.ts index 45a4c5b6..040d9147 100644 --- a/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.ts +++ b/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.ts @@ -21,6 +21,7 @@ export class CkeditorToolComponent implements OnInit, AfterViewInit, OnChanges { @Output() videoDataOutput = new EventEmitter(); @Input() videoShow; @Input() setCharacterLimit: number; + @Input() imageIconPosition = 'default'; @Input() setImageLimit: any; public editorConfig: any; public imageUploadLoader = false; diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html index ce10ec67..ac0bd7cb 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.html +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -28,11 +28,11 @@
-
- + \ No newline at end of file diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts index d7abe9b2..2b4d4c7c 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.data.ts @@ -14,12 +14,12 @@ export const mockOptionData = { templateId: "mtf-vertical", correctMatchPair: [ { - "lhs": 0, - "rhs": 0 + "left": 0, + "right": [0] }, { - "lhs": 1, - "rhs": 1 + "left": 1, + "right": [1] } ], numberOfOptions: 4, @@ -34,27 +34,27 @@ export const mockOptionData = { "correctResponse": { "value": [ { - "lhs": 0, - "rhs": 0 + "left": 0, + "right": [0] }, { - "lhs": 1, - "rhs": 1 + "left": 1, + "right": [1] } ] }, "mapping": [ { "value": { - "lhs": 0, - "rhs": 0 + "left": 0, + "right": 0 }, "score": 0.5 }, { "value": { - "lhs": 1, - "rhs": 1 + "left": 1, + "right": 1 }, "score": 0.5 } diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts index 4e4684f4..139fde28 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts @@ -120,7 +120,7 @@ describe('MatchComponent', () => { component.maxScore = 4; spyOn(component, 'getOutcomeDeclaration').and.callThrough(); const outcomeDeclaration = component.getOutcomeDeclaration(); - expect(outcomeDeclaration.maxScore.cardinality).toEqual('ordered'); + expect(outcomeDeclaration.maxScore.cardinality).toEqual('multiple'); expect(outcomeDeclaration.maxScore.defaultValue).toEqual(4); }) @@ -141,7 +141,7 @@ describe('MatchComponent', () => { ]; spyOn(component, "getResponseDeclaration").and.callThrough(); const responseDeclaration = component.getResponseDeclaration(mockOptionData.editorOptionData); - expect(responseDeclaration.response1.cardinality).toEqual('ordered'); + expect(responseDeclaration.response1.cardinality).toEqual('multiple'); }) it('#setTemplate() should set #templateType to "mtf-vertical"', () => { diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.ts index 44021851..4051760c 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.ts @@ -49,7 +49,7 @@ export class MatchComponent implements OnInit, OnChanges { let metadata: any; if (!_.isEmpty(editorState.options)) { editorState.correctMatchPair = editorState.options.map((option, index) => { - const correctMatchPair = {lhs: index, rhs: index}; + const correctMatchPair = {left: index, right: [index]}; return correctMatchPair; }); } @@ -94,7 +94,7 @@ export class MatchComponent implements OnInit, OnChanges { getResponseDeclaration(editorState) { const responseDeclaration = { response1: { - cardinality: 'ordered', + cardinality: 'multiple', type: 'map', correctResponse: { value: editorState.correctMatchPair, @@ -108,7 +108,7 @@ export class MatchComponent implements OnInit, OnChanges { getOutcomeDeclaration() { const outcomeDeclaration = { maxScore: { - cardinality: 'ordered', + cardinality: 'multiple', type: 'integer', defaultValue: this.maxScore } @@ -123,13 +123,13 @@ export class MatchComponent implements OnInit, OnChanges { this.maxScore / this.editorState.correctMatchPair.length, 2 ); - _.forEach(this.editorState.correctMatchPair, (value) => { + _.forEach(this.editorState.correctMatchPair, (pair) => { const optionMapping = { - value: value, + value: { left: pair.left, right: pair.right[0] }, score: scoreForEachMatch, }; this.mapping.push(optionMapping); - }) + }); } else { this.mapping = []; } From 05b3b581908414f15b46cc7e664c6fa95814131d Mon Sep 17 00:00:00 2001 From: Rajnish Dargan Date: Fri, 5 Jul 2024 18:49:02 +0530 Subject: [PATCH 42/45] Issue #220602 feat: UI improvement --- .../components/ckeditor-tool/ckeditor-tool.component.scss | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss b/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss index c9e2fef5..97babb4e 100644 --- a/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss +++ b/projects/questionset-editor-library/src/lib/components/ckeditor-tool/ckeditor-tool.component.scss @@ -22,10 +22,8 @@ .bottomImage { background-color: transparent; z-index: 1; - left: 510px; - font-size: 11px; - margin-top: -18px; - position: relative + font-size: 12px; + float:right; } .custom-image img { From 116c00d7c7eeed4220748622b85d81c05e8f6268 Mon Sep 17 00:00:00 2001 From: Rajnish Dargan Date: Mon, 8 Jul 2024 14:56:33 +0530 Subject: [PATCH 43/45] Issue #221304 feat: UI improvement --- .../src/lib/components/match/match.component.html | 14 +++++++------- .../src/lib/components/match/match.component.ts | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.html b/projects/questionset-editor-library/src/lib/components/match/match.component.html index 3e5303ba..11c9e07b 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.html +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.html @@ -10,13 +10,6 @@ - - - + + +
diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.ts index 4051760c..cc1c44fe 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.ts @@ -16,8 +16,8 @@ export class MatchComponent implements OnInit, OnChanges { @Input() isReadOnlyMode; @Input() maxScore; @Output() editorDataOutput: EventEmitter = new EventEmitter(); - public setCharacterLimit = 160; - public templateType = 'mtf-horizontal'; + public setCharacterLimit = 65; + public templateType = 'mtf-vertical'; constructor( public telemetryService: EditorTelemetryService, From 0e69d658d8591e0a4dd588b29a3f94668f67b587 Mon Sep 17 00:00:00 2001 From: Rajnish Dargan Date: Mon, 8 Jul 2024 15:08:45 +0530 Subject: [PATCH 44/45] Issue #221304 feat: Fix test cases --- .../src/lib/components/match/match.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts index 139fde28..d0aa1f04 100644 --- a/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts +++ b/projects/questionset-editor-library/src/lib/components/match/match.component.spec.ts @@ -42,7 +42,7 @@ describe('MatchComponent', () => { component.editorState = {}; spyOn(component, "editorDataHandler"); component.ngOnInit(); - expect(component.templateType).toEqual("mtf-horizontal"); + expect(component.templateType).toEqual("mtf-vertical"); }); it("should set #templateType when updating an existing question", () => { From 29ebbd5cc5363de4b21567a364cc8130522d3623 Mon Sep 17 00:00:00 2001 From: Rajnish Dargan Date: Tue, 13 Aug 2024 11:38:39 +0530 Subject: [PATCH 45/45] Issue #220602 feat: Building web component and updating package versions --- projects/questionset-editor-library/package.json | 2 +- web-component-examples/vanilla-js/styles.css | 2 +- web-component-examples/vanilla-js/sunbird-questionset-editor.js | 2 +- web-component/package.json | 2 +- web-component/styles.css | 2 +- web-component/sunbird-questionset-editor.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/questionset-editor-library/package.json b/projects/questionset-editor-library/package.json index 7633c59d..e7d9376d 100644 --- a/projects/questionset-editor-library/package.json +++ b/projects/questionset-editor-library/package.json @@ -1,6 +1,6 @@ { "name": "@tekdi/sunbird-questionset-editor", - "version": "8.0.0", + "version": "9.0.0-beta.0", "dependencies": { "tslib": "^2.0.0" }, diff --git a/web-component-examples/vanilla-js/styles.css b/web-component-examples/vanilla-js/styles.css index 44013528..4081caa6 100644 --- a/web-component-examples/vanilla-js/styles.css +++ b/web-component-examples/vanilla-js/styles.css @@ -6,7 +6,7 @@ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].rules[0].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].rules[0].oneOf[0].use[2]!./projects/quml-library/src/lib/assets/styles/quml-carousel.css?ngGlobalStyle ***! \*********************************************************************************************************************************************************************************************************************************************************************/.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}/*!*********************************************************************************************************************************************************************************************************************************************!*\ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[5].rules[0].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[5].rules[0].oneOf[0].use[2]!./node_modules/katex/dist/katex.min.css?ngGlobalStyle ***! - \*********************************************************************************************************************************************************************************************************************************************/@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(KaTeX_AMS-Regular.woff2) format("woff2"),url(KaTeX_AMS-Regular.woff) format("woff"),url(KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(KaTeX_Caligraphic-Bold.woff) format("woff"),url(KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(KaTeX_Caligraphic-Regular.woff) format("woff"),url(KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(KaTeX_Fraktur-Bold.woff2) format("woff2"),url(KaTeX_Fraktur-Bold.woff) format("woff"),url(KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(KaTeX_Fraktur-Regular.woff2) format("woff2"),url(KaTeX_Fraktur-Regular.woff) format("woff"),url(KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(KaTeX_Main-Bold.woff2) format("woff2"),url(KaTeX_Main-Bold.woff) format("woff"),url(KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(KaTeX_Main-BoldItalic.woff2) format("woff2"),url(KaTeX_Main-BoldItalic.woff) format("woff"),url(KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(KaTeX_Main-Italic.woff2) format("woff2"),url(KaTeX_Main-Italic.woff) format("woff"),url(KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(KaTeX_Main-Regular.woff2) format("woff2"),url(KaTeX_Main-Regular.woff) format("woff"),url(KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(KaTeX_Math-BoldItalic.woff2) format("woff2"),url(KaTeX_Math-BoldItalic.woff) format("woff"),url(KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(KaTeX_Math-Italic.woff2) format("woff2"),url(KaTeX_Math-Italic.woff) format("woff"),url(KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(KaTeX_SansSerif-Bold.woff2) format("woff2"),url(KaTeX_SansSerif-Bold.woff) format("woff"),url(KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(KaTeX_SansSerif-Italic.woff2) format("woff2"),url(KaTeX_SansSerif-Italic.woff) format("woff"),url(KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(KaTeX_SansSerif-Regular.woff2) format("woff2"),url(KaTeX_SansSerif-Regular.woff) format("woff"),url(KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(KaTeX_Script-Regular.woff2) format("woff2"),url(KaTeX_Script-Regular.woff) format("woff"),url(KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(KaTeX_Size1-Regular.woff2) format("woff2"),url(KaTeX_Size1-Regular.woff) format("woff"),url(KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(KaTeX_Size2-Regular.woff2) format("woff2"),url(KaTeX_Size2-Regular.woff) format("woff"),url(KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(KaTeX_Size3-Regular.woff2) format("woff2"),url(KaTeX_Size3-Regular.woff) format("woff"),url(KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(KaTeX_Size4-Regular.woff2) format("woff2"),url(KaTeX_Size4-Regular.woff) format("woff"),url(KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(KaTeX_Typewriter-Regular.woff2) format("woff2"),url(KaTeX_Typewriter-Regular.woff) format("woff"),url(KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.11"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}::ng-deep .dynamic-form label,.add-to-library .dynamic-form .multi-select-container .list-border ul{font-size:1rem!important;line-height:1.4;font-weight:400}.sb-modal-content{padding:1.3rem}.sb-modal-content label{font-weight:bolder}label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}table{font-family:arial,sans-serif;border-collapse:collapse;width:97%;border:1px solid #cccccc;margin:15px 25px 15px 15px}table thead tr{background-color:#ededed}table thead tr th{margin-right:86px}td,th{text-align:left;padding:15px}tr:nth-child(2n){background-color:#f3f7fa}tr{border:2px solid #cccccc}tr td input{float:right;width:14%;border-radius:6px;border-width:1px;height:42px;text-align:center;margin-right:10px}tr .right{float:right}h2{margin-left:15px}.close-button{opacity:0;float:right;margin-top:5px;margin-right:15px;color:#8b8080;font-size:20px}.close-button:hover{opacity:1;color:#8b8080;float:right;margin-top:5px;margin-right:15px;font-size:20px}.editorWrapper{border:0px solid white}.editorWrapper.hasError{border:1px solid red;border-radius:2px}.characterCount{text-align:right;border-top:0;padding-right:7px;font-size:11px;font-weight:700;margin-top:-16px;position:relative}.custom-image img{border:1px dotted;padding:7px;margin:6px;cursor:pointer}.resource-image{height:180px!important}.asset_container{overflow-y:auto;overflow-x:hidden;min-height:300px!important;max-height:300px!important;padding:5px}.insert-image-btn{position:absolute;z-index:1;left:653px;background-color:transparent;padding:12px 14px!important;margin-left:6px}.insert-image-btn>.icon{opacity:1}.insert-image-btn:active{background-color:transparent}.upload-file-section{display:flex;height:240px;width:100%;max-width:800px;align-items:center;justify-content:center;flex-direction:column;margin:0 auto;background-color:#f5f9fc;border:1px dashed #80a7ce}.upload-file-description p{color:#999}.upload-file-description ul{margin:0;list-style:disc}.upload-file-description ul li{margin-bottom:8px}.upload-file-description ul li a{cursor:pointer;font-size:12px}.sb-grid-layout{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));grid-gap:16px}.sb-grid-layout.image{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}.sb-grid-layout.video{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.sb-grid-layout .sb-video-content .sb-image-section{height:96px;overflow:hidden;border-radius:4px;box-shadow:inset 0 1px 3px #00000080}.sb-image-section .selected-video{display:none}.sb-image-section.active .selected-video{position:absolute;right:4px;top:4px;color:#07bc81;font-size:20px;display:block}.sb-grid-layout .sb-video-content .sb-image-section img{width:100%;height:100%;cursor:pointer}.overlay-image{width:100%;height:100%;background:rgba(0,0,0,.3);position:absolute;left:0;right:0;cursor:pointer}.overlay-image .play.icon{position:absolute;transform:translate(-50%,-50%);top:50%;left:50%;color:#fff9;font-size:32px;cursor:pointer}::ng-deep .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,::ng-deep .ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-left:none;border-right:none;border-bottom:1px solid #c4c4c4;border-radius:0}::ng-deep .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,::ng-deep .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border:none}::ng-deep .ck-dropdown.ck-font-size-dropdown .ck-dropdown__panel{height:150px;overflow-y:scroll}::ng-deep figure.image.ck-widget{width:auto;height:auto;overflow:visible}::ng-deep figure.image img{width:100%}::ng-deep figure.image.resize-25{width:25%;height:auto}::ng-deep figure.image.resize-50{width:50%;height:auto}::ng-deep figure.image.resize-75{width:75%;height:auto}::ng-deep figure.image.resize-100{width:100%;height:auto}::ng-deep figure.table{margin:2.2rem 0 1.5rem 1rem!important}::ng-deep .text-center{text-align:center}::ng-deep .text-left{text-align:left}::ng-deep .text-right{text-align:right}::ng-deep .fs-8{font-size:.5rem}::ng-deep .fs-10{font-size:.625rem}::ng-deep .fs-12{font-size:.75rem}::ng-deep .fs-14{font-size:.875rem}::ng-deep .fs-16{font-size:1rem}::ng-deep .fs-18{font-size:1.125rem}::ng-deep .fs-20{font-size:1.25rem}::ng-deep .fs-22{font-size:1.375rem}::ng-deep .fs-24{font-size:1.5rem}::ng-deep .fs-26{font-size:1.625rem}::ng-deep .fs-28{font-size:1.75rem}::ng-deep .fs-30{font-size:1.875rem}::ng-deep .fs-36{font-size:2.25rem}.upload-image-modal-section{border-radius:4px;width:100%;min-height:130px;background:#F5F9FC;border:1px dashed #024f9d}.upload-input-button input[type=file]{position:absolute;right:0;top:0;font-size:118px;margin:0;padding:0;cursor:pointer;opacity:0;height:100%}.qq-uploader.qq-uploader-selector.custom-qq-uploader{background:inherit;border-color:none;border:none;max-height:inherit;min-height:inherit;overflow-y:inherit;width:688px;height:240px;display:flex;justify-content:center;align-items:center}.terms-and-condition{line-height:14px}.sb-info-bx{padding:.4rem!important}.sb-info-bx li{margin:0!important;padding:0!important}.sb-info-bx li:before{content:""!important}.red{color:red}.b-bl{border-left:solid 1px #e4e1e1}.sb-form-fields .sb-field-group{margin:1rem 0}.sb-form-fields .sb-field{position:relative;margin-bottom:.5rem}.sb-form-fields .sb-field .sb-form-control{border:1px solid rgba(34,36,38,.15);width:100%;border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;padding:.25rem .5rem!important}.sb-loading-spinner{width:1rem;height:1rem;margin-right:8px;border-width:.2em;display:inline-block;vertical-align:text-bottom;border:.15em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.sb-btn-loading:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}.sb-btn-loading:after{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;animation:button-spin .6s linear;animation-iteration-count:infinite;border-radius:500rem;border-color:#fff transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.sb-btn-outline-disabled{background-color:#fff;border:1px solid #cccccc;color:#999;cursor:default;font-weight:400}.sb-color-grey{color:#666}.ui.info.message{color:#276f86!important}.sb-textbox[disabled=true],.sb-editor-container .dynamic-form [disabled=true].topic-picker-selector,[disabled=true].topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form [disabled=true].topic-picker-selector{opacity:.3!important;font-weight:500!important}.sb-tabset-segment{min-height:288px;max-height:288px;overflow-y:auto}input:focus-visible{border:none!important}.sb-appicon{height:110px;width:120px;border:solid 1px #ccc;padding:5px}.sb-centericon{height:110px;width:120px;border:solid 1px #ccc;padding:10px;display:flex;justify-content:center;align-items:center;flex-direction:column}.addImageText{font-size:.8rem!important}.app-icon-label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}lib-questionset-editor .fancytree-helper-hidden{display:none}lib-questionset-editor .fancytree-helper-indeterminate-cb{color:#777}lib-questionset-editor .fancytree-helper-disabled{color:silver}lib-questionset-editor .fancytree-helper-spin{animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}lib-questionset-editor ul.fancytree-container{font-family:inherit;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}lib-questionset-editor ul.fancytree-container ul{padding:0 0 0 16px;margin:0}lib-questionset-editor ul.fancytree-container ul>li:before{content:none}lib-questionset-editor ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}lib-questionset-editor ul.fancytree-container li.fancytree-lastsib{background-image:none}lib-questionset-editor .ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}lib-questionset-editor ul.fancytree-connectors.fancytree-container li{background-image:url(vline.gif);background-position:0 0}lib-questionset-editor ul.fancytree-container li.fancytree-lastsib,lib-questionset-editor ul.fancytree-no-connector>li{background-image:none}lib-questionset-editor li.fancytree-animating{position:relative}lib-questionset-editor #fancytree-drop-marker,lib-questionset-editor span.fancytree-checkbox,lib-questionset-editor span.fancytree-drag-helper-img,lib-questionset-editor span.fancytree-empty,lib-questionset-editor span.fancytree-expander,lib-questionset-editor span.fancytree-icon,lib-questionset-editor span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url(icons.gif);background-position:0 0}lib-questionset-editor span.fancytree-checkbox,lib-questionset-editor span.fancytree-custom-icon,lib-questionset-editor span.fancytree-expander,lib-questionset-editor span.fancytree-icon{margin-top:0}lib-questionset-editor span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}lib-questionset-editor img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:0;vertical-align:top;border-style:none}lib-questionset-editor span.fancytree-expander{cursor:pointer}lib-questionset-editor .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}lib-questionset-editor .fancytree-connectors .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url(icons.gif);margin-top:0}lib-questionset-editor .fancytree-connectors .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}lib-questionset-editor .fancytree-connectors .fancytree-exp-nl span.fancytree-expander,lib-questionset-editor .fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}lib-questionset-editor .fancytree-exp-c span.fancytree-expander{background-position:0 -80px}lib-questionset-editor .fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}lib-questionset-editor .fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}lib-questionset-editor .fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}lib-questionset-editor .fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}lib-questionset-editor .fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}lib-questionset-editor .fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}lib-questionset-editor .fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}lib-questionset-editor .fancytree-exp-e span.fancytree-expander,lib-questionset-editor .fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}lib-questionset-editor .fancytree-exp-e span.fancytree-expander:hover,lib-questionset-editor .fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}lib-questionset-editor .fancytree-exp-edl span.fancytree-expander,lib-questionset-editor .fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}lib-questionset-editor .fancytree-exp-edl span.fancytree-expander:hover,lib-questionset-editor .fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}lib-questionset-editor .fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}lib-questionset-editor .fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,lib-questionset-editor .fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,lib-questionset-editor .fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,lib-questionset-editor .fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}lib-questionset-editor span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}lib-questionset-editor span.fancytree-checkbox:hover{background-position:-16px -32px}lib-questionset-editor span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}lib-questionset-editor span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}lib-questionset-editor .fancytree-unselectable span.fancytree-checkbox{opacity:.4}lib-questionset-editor .fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}lib-questionset-editor .fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}lib-questionset-editor .fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}lib-questionset-editor .fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}lib-questionset-editor .fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}lib-questionset-editor span.fancytree-icon{margin-left:3px;background-position:0 0}lib-questionset-editor .fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}lib-questionset-editor .fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}lib-questionset-editor .fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}lib-questionset-editor .fancytree-ico-e span.fancytree-icon{background-position:-64px 0}lib-questionset-editor .fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}lib-questionset-editor .fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}lib-questionset-editor .fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}lib-questionset-editor .fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}lib-questionset-editor .fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}lib-questionset-editor .fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}lib-questionset-editor .fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}lib-questionset-editor .fancytree-loading span.fancytree-expander,lib-questionset-editor .fancytree-loading span.fancytree-expander:hover,lib-questionset-editor .fancytree-statusnode-loading span.fancytree-icon,lib-questionset-editor .fancytree-statusnode-loading span.fancytree-icon:hover,lib-questionset-editor span.fancytree-icon.fancytree-icon-loading{background-image:url(loading.gif);background-position:0 0}lib-questionset-editor .fancytree-statusnode-error span.fancytree-icon,lib-questionset-editor .fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}lib-questionset-editor span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:16px}lib-questionset-editor span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:16px;padding:0 3px;margin:0 0 0 3px;border:1px solid transparent;border-radius:0}lib-questionset-editor span.fancytree-node.fancytree-error span.fancytree-title{color:red}lib-questionset-editor span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}lib-questionset-editor div.fancytree-drag-helper span.fancytree-childcounter,lib-questionset-editor div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}lib-questionset-editor div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}lib-questionset-editor div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}lib-questionset-editor div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}lib-questionset-editor div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}lib-questionset-editor #fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}lib-questionset-editor #fancytree-drop-marker.fancytree-drop-after,lib-questionset-editor #fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}lib-questionset-editor #fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}lib-questionset-editor #fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}lib-questionset-editor span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-connector,lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-expander,lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url(icons-rtl.gif)}lib-questionset-editor .fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}lib-questionset-editor .fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url(icons-rtl.gif)}lib-questionset-editor ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}lib-questionset-editor ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url(vline-rtl.gif)}lib-questionset-editor ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,lib-questionset-editor ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}lib-questionset-editor #fancytree-drop-marker.fancytree-rtl{background-image:url(icons-rtl.gif)}lib-questionset-editor table.fancytree-ext-table{font-family:inherit;font-size:10pt;border-collapse:collapse}lib-questionset-editor table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}lib-questionset-editor table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}lib-questionset-editor table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}lib-questionset-editor table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}lib-questionset-editor table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}lib-questionset-editor table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}lib-questionset-editor table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}lib-questionset-editor table.fancytree-ext-columnview tbody tr td>ul{padding:0}lib-questionset-editor table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}lib-questionset-editor table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}lib-questionset-editor table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}lib-questionset-editor .fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}lib-questionset-editor .fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}lib-questionset-editor .fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}lib-questionset-editor .fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,lib-questionset-editor .fancytree-ext-filter-hide tr.fancytree-hide{display:none}lib-questionset-editor .fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}lib-questionset-editor .fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}lib-questionset-editor .fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,lib-questionset-editor .fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}lib-questionset-editor .fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,lib-questionset-editor .fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}lib-questionset-editor .fancytree-ext-childcounter span.fancytree-custom-icon,lib-questionset-editor .fancytree-ext-childcounter span.fancytree-icon,lib-questionset-editor .fancytree-ext-filter span.fancytree-custom-icon,lib-questionset-editor .fancytree-ext-filter span.fancytree-icon{position:relative}lib-questionset-editor .fancytree-ext-childcounter span.fancytree-childcounter,lib-questionset-editor .fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}lib-questionset-editor ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;box-sizing:border-box}lib-questionset-editor ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}lib-questionset-editor ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;box-sizing:border-box}lib-questionset-editor .fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}lib-questionset-editor span.fancytree-title{border:1px solid transparent;border-radius:0}lib-questionset-editor span.fancytree-focused span.fancytree-title{outline:1px dotted #000}lib-questionset-editor span.fancytree-active span.fancytree-title,lib-questionset-editor span.fancytree-selected span.fancytree-title{background-color:#d4d4d4}lib-questionset-editor span.fancytree-selected span.fancytree-title{font-style:italic}lib-questionset-editor .fancytree-treefocus span.fancytree-active span.fancytree-title,lib-questionset-editor .fancytree-treefocus span.fancytree-selected span.fancytree-title{color:#fff;background-color:#3875d7}lib-questionset-editor table.fancytree-ext-table{border-collapse:collapse}lib-questionset-editor table.fancytree-ext-table tbody tr.fancytree-focused{background-color:#99defd}lib-questionset-editor table.fancytree-ext-table tbody tr.fancytree-active{background-color:#4169e1}lib-questionset-editor table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#99defd}lib-questionset-editor table.fancytree-ext-columnview tbody tr td{border:1px solid gray}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#ccc}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#4169e1}lib-questionset-editor .optionsArrayMap,lib-questionset-editor .optionsLast,lib-questionset-editor .optionsArray{color:#000!important}lib-questionset-editor .dynamic-form .required .sb-modal-dropdown-web label:after,lib-questionset-editor .sb-editor-container .dynamic-form .required .sb-modal-dropdown-web .multi-select-container .list-border ul:after,.sb-editor-container lib-questionset-editor .dynamic-form .required .sb-modal-dropdown-web .multi-select-container .list-border ul:after,lib-questionset-editor .sb-editor-container .dynamic-form .multi-select-container .list-border .required .sb-modal-dropdown-web ul:after,.sb-editor-container lib-questionset-editor .dynamic-form .multi-select-container .list-border .required .sb-modal-dropdown-web ul:after,lib-questionset-editor .add-to-library .dynamic-form .required .sb-modal-dropdown-web .multi-select-container .list-border ul:after,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .required .sb-modal-dropdown-web ul:after{content:" "!important}lib-questionset-editor .dynamic-form sb-dynamic-checkbox{margin-top:3.5rem}lib-questionset-editor .dynamic-form .sb-dropdown-select{padding:16px 8px!important}lib-questionset-editor .dynamic-form .list-border{margin-top:2px!important}lib-questionset-editor body{background:#fff!important}lib-questionset-editor .add-to-library{position:relative;z-index:998!important;background:#e5edf5}lib-questionset-editor .add-to-library .sb-required{color:#ff4558;padding-left:2px;position:relative;top:-5px}lib-questionset-editor .add-to-library .back-btn:hover{background:none!important}lib-questionset-editor .add-to-library .back-btn{min-width:auto}lib-questionset-editor .add-to-library .dynamic-form .multi-select-section-app label,lib-questionset-editor .add-to-library .dynamic-form .multi-select-section-app .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .multi-select-section-app ul{margin-bottom:.3rem!important;z-index:inherit}lib-questionset-editor .add-to-library .dynamic-form label,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600;position:relative}lib-questionset-editor .add-to-library .dynamic-form label:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before{z-index:1!important}lib-questionset-editor .add-to-library .dynamic-form .sb-textbox,lib-questionset-editor .add-to-library .sb-editor-container .dynamic-form .topic-picker-selector,.sb-editor-container lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form select,lib-questionset-editor .add-to-library .dynamic-form .sb-textarea,lib-questionset-editor .add-to-library .dynamic-form .list-border{border:1px solid rgba(34,36,38,.15)!important;padding:.85rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500}lib-questionset-editor .add-to-library .dynamic-form select{padding:12px 8px!important}lib-questionset-editor .add-to-library .dynamic-form .list-border{margin-top:2px!important;min-height:43px!important;height:inherit!important;padding:5px 8px!important}lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .placeholder{font-weight:500!important;color:#333!important}lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-weight:500!important;position:inherit!important}lib-questionset-editor .add-to-library .dynamic-form .sb-modal-dropdown-web ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-size:12px!important;font-weight:500;border:2px solid #eeeeef;z-index:99999!important}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .ng2-tag-input{padding:0}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .ng2-tags-container{margin-top:.2rem}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .tag-wrapper,lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox delete-icon svg{height:24px;line-height:24px}lib-questionset-editor .add-to-library .dynamic-form .sb-dropdown label,lib-questionset-editor .add-to-library .dynamic-form .sb-dropdown .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-dropdown ul{padding:0}lib-questionset-editor .add-to-library .dynamic-form .textbox .sb-textarea-container .sb-textarea{height:10rem!important;padding-top:.5rem!important}lib-questionset-editor .add-to-library .dynamic-form .textbox .sb-textarea-container label,lib-questionset-editor .add-to-library .dynamic-form .textbox .sb-textarea-container .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .textbox .sb-textarea-container ul{padding:0}lib-questionset-editor .add-to-library .dynamic-form .sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}lib-questionset-editor .add-to-library .dynamic-form .sb-textarea-container label,lib-questionset-editor .add-to-library .dynamic-form .sb-textarea-container .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-textarea-container ul{padding:0}lib-questionset-editor .add-to-library .dynamic-form .sb-checkbox{padding:0;margin-top:0}lib-questionset-editor .add-to-library .dynamic-form sb-icon-dropdown{top:10px!important;right:6px!important}lib-questionset-editor .add-to-library .sb-textarea-container,lib-questionset-editor .add-to-library .sb-dropdown{margin:1rem 0!important}lib-questionset-editor .add-to-library .sb-container{width:95%!important}lib-questionset-editor .sb-checkbox-tnc .sb-required{position:absolute;padding-left:0;left:18px}lib-questionset-editor .h-100vh{height:100vh}lib-questionset-editor .ui.column.grid>[class*="eight wide"].column{width:73%!important}lib-questionset-editor .footer-fix{padding-bottom:1rem!important}lib-questionset-editor .bg-white,lib-questionset-editor .ui.twelve.grid{background:#fff!important}@keyframes spinner-border{to{transform:rotate(360deg)}}lib-questionset-editor .sb-loading-spinner{width:1rem;height:1rem;margin-right:8px;border-width:.2em;display:inline-block;vertical-align:text-bottom;border:.15em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}lib-questionset-editor .sb-btn-loading:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}lib-questionset-editor .sb-btn-loading:after{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;animation:button-spin .6s linear;animation-iteration-count:infinite;border-radius:500rem;border-color:#fff transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}lib-questionset-editor .sb-btn-outline-disabled{background-color:#fff;border:1px solid #cccccc;color:#999;cursor:default;font-weight:400}lib-questionset-editor lib-chat-window,lib-questionset-editor .chat_bot{display:none!important}lib-questionset-editor .sb-textbox::-webkit-input-placeholder,lib-questionset-editor .sb-editor-container .dynamic-form .topic-picker-selector::-webkit-input-placeholder,.sb-editor-container .dynamic-form lib-questionset-editor .topic-picker-selector::-webkit-input-placeholder,lib-questionset-editor .topic-picker-selector::-webkit-input-placeholder,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector::-webkit-input-placeholder{color:var(--gray-100)!important;font-weight:600!important}lib-questionset-editor .treepicker-parent{margin:.6rem 0!important}lib-questionset-editor .ck-content ul{list-style-type:disc!important}lib-questionset-editor .ck-content ul li{margin-bottom:0!important}lib-questionset-editor sb-dynamic-richtext .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-left:1px solid #c4c4c4!important;border-right:1px solid #c4c4c4!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important;border-bottom:0!important}lib-questionset-editor sb-dynamic-richtext .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,lib-questionset-editor sb-dynamic-richtext .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border:1px solid #c4c4c4!important;border-color:var(--ck-color-base-border)!important}lib-questionset-editor sb-dynamic-richtext .ck-content .table{margin:.8rem 0!important}lib-questionset-editor .sb-textbox::placeholder,lib-questionset-editor .sb-editor-container .dynamic-form .topic-picker-selector::placeholder,.sb-editor-container .dynamic-form lib-questionset-editor .topic-picker-selector::placeholder,lib-questionset-editor .topic-picker-selector::placeholder,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector::placeholder,lib-questionset-editor .sb-textarea::placeholder{color:#333!important;font-weight:500!important}lib-questionset-editor .multi-select-container .sb-modal-dropdown-web ul{border:1px solid #d6d4d4!important;box-shadow:0 0 2px #cecaca!important}lib-questionset-editor .sb-disabled-textarea{background:var(--gray-0)!important;border:.0625rem solid var(--gray-100)!important;opacity:.45!important;pointer-events:none!important;font-size:1em!important}lib-questionset-editor .overflow-y{overflow-y:auto}lib-questionset-editor input:focus-visible{border:none!important}lib-questionset-editor #fancytree-drop-marker.fa-long-arrow-right:before{content:" "!important}lib-questionset-editor .sb-collectionTree-fancyTreelist ul>li>span:first-child{padding:15px 33px}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-nl span.fancytree-expander{background:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree:before,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul:before{content:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree li:before,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul li:before{content:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul .fa-caret-right,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul .fa-caret-down{display:block!important}lib-questionset-editor .sb-collectionTree-fancyTreelist ul.fancytree-container{font-size:inherit!important;font-family:inherit!important;border:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist ul.fancytree-connectors.fancytree-container li{background-image:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-node{width:inherit!important}lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-active span.fancytree-title,lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-selected span.fancytree-title{background:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-active span.fancytree-title,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-selected span.fancytree-title{background:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-edl span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-el span.fancytree-expander{background-position:-34px -94px}lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-focused span.fancytree-title{outline:0!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree{margin:0!important}lib-questionset-editor .sb-collectionTree-fancyTreelist.ui-fancytree,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul{margin:0 0 0 .625rem!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-e span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-ed span.fancytree-expander{background-position:-32px -68px!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-edl span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-el span.fancytree-expander{background-position:-34px -94px!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-active span.fancytree-title,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-selected span.fancytree-title{color:inherit}lib-questionset-editor .sb-loader{position:fixed;top:0%;left:23%;transform:translate(-50%,-50%)}lib-questionset-editor .sb-loader:after{content:"";width:32px;height:32px;border-radius:50%;border:2px solid;border-color:#ccc #ccc transparent;animation:loader .5s infinite;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}lib-questionset-editor .sb-loader.dimmer{width:100%;height:100%;background:rgba(0,0,0,.8);z-index:9999}lib-questionset-editor .sb-success-loader{position:absolute!important;top:46%!important;left:-12%!important;transform:translate(-46%,-50%)!important}lib-questionset-editor .sb-success-loader:after{width:1.2rem!important;height:1.2rem!important}lib-questionset-editor .pos-relative{position:relative}lib-questionset-editor .sb-circle-ul{list-style-type:disc;padding:0;font-size:.785rem}lib-questionset-editor .sb-circle-ul li{margin:0!important;line-height:1.4}lib-questionset-editor .sb-bg-color-success-0{background:#e1ffdf}lib-questionset-editor .flex-ai-center{align-self:center!important}lib-questionset-editor .sb-br-primary{border:1px dashed #aedbfd!important}lib-questionset-editor .sb-min-h-250{min-height:250px}lib-questionset-editor .z-index-9 .menu{z-index:99999!important}lib-questionset-editor .p-50{padding:10px 0 10px 50px}lib-questionset-editor .h-1{height:1.1em!important}lib-questionset-editor .mn-15{margin:-15px!important}lib-questionset-editor .upload-input-button{position:relative}lib-questionset-editor .upload-input-button input{position:absolute;opacity:0;left:0}lib-questionset-editor .bg-none{background:none}lib-questionset-editor .label-disable{opacity:.3!important;font-weight:500!important}lib-questionset-editor .sb-folder-menu{position:absolute;left:35px;display:flex;justify-content:space-between;width:24%;margin-top:5px}lib-questionset-editor .sb-disable-icon{color:#ccc!important}lib-questionset-editor .sb-w-240px{width:240px}lib-questionset-editor .publish-checklist label,lib-questionset-editor .publish-checklist .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border lib-questionset-editor .publish-checklist ul,lib-questionset-editor .publish-checklist .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .publish-checklist ul{font-size:13px!important;padding:0 1.5rem!important}lib-questionset-editor .sb-keywords input{width:100%}lib-questionset-editor .sb-keywords input::placeholder{display:block!important;width:100%}lib-questionset-editor .sb-keywords .ng2-tags-container{width:inherit!important;display:block!important}lib-questionset-editor .sb-keywords .ng2-tags-container tag{display:inline-flex!important}lib-questionset-editor sb-dynamic-timer .sb-timer-input{width:10rem;font-size:.785rem!important;border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;padding:12px 10px;margin-right:5px;height:44px}lib-questionset-editor sb-dynamic-timer .sb-timer-input:focus-visible{border:1px solid rgba(34,36,38,.15)!important}lib-questionset-editor sb-dynamic-timer .sb-btn-normal{height:42px!important}.sb-collectionTree-fancyTreelist ul{padding:0!important}.sb-collectionTree-fancyTreelist .ui-fancytree{margin-bottom:1rem!important}.sb-collectionTree-fancyTreelist .ui-fancytree:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree ul:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li{padding:0;margin:0 0 1px}.sb-collectionTree-fancyTreelist .ui-fancytree li .highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-ico-c{padding-left:5px!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-expanded{padding:15px 33px;border:1px solid transparent;background-color:#fff}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-active{border:1px solid #d0e0f3;background-color:var(--primary-0);padding:15px 33px;border-top:none}.sb-collectionTree-fancyTreelist .ui-fancytree li:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul{padding-top:1px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li{list-style-type:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-top:2px;float:left;margin-left:6px;font-size:16px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node{padding:6px 6px 8px 5px;margin-left:45px;border:1px solid transparent}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-active,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-focused,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node:hover{border:1px solid #d0e0f3;background-color:var(--primary-0);border-right:0}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.dependent{margin-left:65px}.sb-collectionTree-fancyTreelist .ui-fancytree li:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .sb-fancyTree-icon{color:var(--gray-300)!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down{margin-top:6px;display:block;width:10px;padding-left:2px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right{margin-top:6px;display:block;width:10px;padding-left:6px}.sb-collectionTree-fancyTreelist .ui-fancytree{margin:0;padding:0;list-style-type:none}.sb-fixed-with-whitebg{position:fixed;width:100%;border-top:1px solid #ddd;left:0;right:0;bottom:0;background-color:#fff;z-index:99999;padding:0!important}.sb-fixed-with-whitebg .sb-btn-cover{padding:.5rem;border-right:solid 1px #ccc;width:50%;text-align:center}.sb-fixed-with-whitebg .sb-btn-cover .sb-btn:hover{background:none!important;color:var(--primary-400)}.sb-dotted-dropdown{position:absolute!important;right:6px;padding-left:33px}.sb-dotted-dropdown .menu{right:0!important;left:inherit!important}.sb-dotted-dropdown .menu .item{font-size:.785rem!important}.eight.bg-white{border-left:solid 1px var(--gray-100);padding-bottom:4.5rem!important}.w-25{width:25.1%;max-width:25.1%}#removeNodeIcon{padding-right:24px}.sb-disabled{background:var(--gray-0);border:.0625rem solid var(--gray-0);opacity:.45;pointer-events:none}.hover-none:hover{background:none!important}.bx-none .ui.modal{box-shadow:none!important}.overflow-modal .ui.modal{box-shadow:none}.overflow-modal .sb-tabset-segment{border:none}.sb-bg-lightBlue{background:var(--primary-0)!important}.flex-as-baseline{align-self:baseline!important}div[data-title]:before{position:absolute;right:30%;top:85%;height:25px;width:max-content}.sb-modal-fullscreen .modals.dimmer .ui.scrolling.modal{margin:0 auto!important}.sb-modal-header{display:flex;justify-content:space-between}.one-column-grid{display:grid;grid-template-columns:repeat(1,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.three-column-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.formSection{padding:1.5rem 0}.formSection:first-child{padding:0 0 1.5rem}.multi-select-section-app label,.multi-select-section-app .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .multi-select-section-app ul,.multi-select-section-app lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .multi-select-section-app ul{margin-bottom:.3rem!important;z-index:inherit}.list-border{height:inherit!important;min-height:45px!important}.list-border ul{padding:0 22px 0 0!important;position:inherit!important}.list-border ul span{font-weight:500!important;font-size:.785rem;padding:1.4rem 0!important}.multi-select-container .sb-modal-dropdown-web ul{border:none!important}.sb-textbox,.sb-editor-container .dynamic-form .topic-picker-selector,.topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,select,.sb-textarea,.list-border{border:1px solid rgba(34,36,38,.15)!important;padding:.85rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500!important}.sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}.sb-keywordbox .ng2-tag-input{padding:0}.sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}.sb-keywordbox .ng2-tags-container{margin-top:.2rem}.sb-keywordbox .tag-wrapper,.sb-keywordbox delete-icon svg{height:24px!important;line-height:24px}label,.sb-editor-container .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:500}.multi-select-container .caret-down.disabled+.list-border{cursor:not-allowed;background-color:#fafafa!important}\200b .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#333;padding:0;opacity:1!important;font-weight:500!important;position:inherit!important}.sb-dropdown label,.sb-dropdown .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-dropdown ul,.sb-dropdown lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-dropdown ul{padding:0!important}.sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}.sb-textarea-container label,.sb-textarea-container .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-textarea-container ul,.sb-textarea-container lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-textarea-container ul{padding:0!important}sb-icon-dropdown{top:10px!important;right:6px!important}.sb-textarea-container,.sb-dropdown{margin:1rem 0!important}.dynamic-form sb-dynamic-checkbox label,.sb-editor-container .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul,lib-questionset-editor .add-to-library .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul{padding-left:1.5rem!important}.dynamic-form sb-dynamic-checkbox label:after,.sb-editor-container .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul:after,.sb-editor-container .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul:after,lib-questionset-editor .add-to-library .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul:after,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul:after{color:#fff!important;width:1rem!important;height:1rem!important}.sb-textbox[disabled=true],.sb-editor-container .dynamic-form [disabled=true].topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form [disabled=true].topic-picker-selector,[disabled=true].topic-picker-selector,.sb-textarea[disabled=true],.sb-dropdown-select[disabled],.treepicker-parent div[disabled=true]{opacity:1!important;font-weight:500!important;cursor:not-allowed;background-color:#fafafa!important}lib-meta-form sb-dynamic-form .dynamic-form{min-height:1100px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.fs-8{font-size:.5rem}.fs-10{font-size:.625rem}.fs-12{font-size:.75rem}.fs-14{font-size:.875rem}.fs-16{font-size:1rem}.fs-18{font-size:1.125rem}.fs-20{font-size:1.25rem}.fs-22{font-size:1.375rem}.fs-24{font-size:1.5rem}.fs-26{font-size:1.625rem}.fs-28{font-size:1.75rem}.fs-30{font-size:1.875rem}.fs-36{font-size:2.25rem}[data-title]:hover:before{content:attr(data-title);position:absolute;left:0;top:20px!important;bottom:initial!important;display:inline-block;padding:3px 6px;border-radius:2px;background:#fff;color:#000;font-size:12px;font-family:sans-serif;white-space:normal!important;border:solid 1px #ccc!important;height:auto!important;font-weight:600!important}.q-sb-layout-single:before{content:url(/assets/images/layoutoneicon.svg)}.q-sb-layout-single.active,.q-sb-layout-single:hover{border-color:var(--primary-400);background-color:#fff;color:var(--primary-400)}.q-sb-layout-single.active:before,.q-sb-layout-single:hover:before{content:url(/assets/images/layoutoneicon_blue.svg)}.q-sb-layout-two:before{content:url(/assets/images/layouttwoicon.svg)}.q-sb-layout-two.active,.q-sb-layout-two:hover{border-color:var(--primary-400);background-color:#fff;color:var(--primary-400)}.q-sb-layout-two.active:before,.q-sb-layout-two:hover:before{content:url(/assets/images/layouttwoicon_blue.svg)}.q-sb-layout-three:before{content:url(/assets/images/layoutthreeicon.svg);top:-2px;position:relative}.q-sb-layout-three.active,.q-sb-layout-three:hover{border-color:var(--primary-400);background-color:#fff;color:var(--primary-400)}.q-sb-layout-three.active:before,.q-sb-layout-three:hover:before{content:url(/assets/images/layoutthreeicon_blue.svg)}.q-sb-layout-imgoption:before{content:url(/assets/images/imageicon.svg)}.q-sb-layout-imgoption.active:before,.q-sb-layout-imgoption:hover:before{content:url(/assets/images/imageicon_blue.svg)}.q-sb-layout-alignleft:before{content:url(/assets/images/leftalignicon.svg)}.q-sb-layout-alignleft.active:before,.q-sb-layout-alignleft:hover:before{content:url(/assets/images/leftalignicon_blue.svg)}.q-sb-layout-aligncenter:before{content:url(/assets/images/middlealignicon.svg)}.q-sb-layout-aligncenter.active:before,.q-sb-layout-aligncenter:hover:before{content:url(/assets/images/middlealignicon_blue.svg)}.q-sb-layout-alignright:before{content:url(/assets/images/rightalignicon.svg)}.q-sb-layout-alignright.active:before,.q-sb-layout-alignright:hover:before{content:url(/assets/images/rightalignicon_blue.svg)}.sb-w-85 div[data-title]:hover:before{left:0%;top:-122%!important;width:256px}.sb-field-group .sb-left-icon-btn.sb-btn-xs{padding:0!important;margin-top:-10px}.optionLabel{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}table{font-family:arial,sans-serif;width:97%;border-collapse:collapse}table thead tr .width-40{width:40%}table thead tr .width-13{width:13%}table thead tr .width-24{width:24%}table thead tr .width-10{width:10%}table tbody{border-top:15px solid white;font-family:arial,sans-serif}table tbody tr{height:60px;background:#e9e8e8}table tbody tr td input{max-width:37%;box-sizing:border-box;height:43px;border-radius:6px;text-align:center;background:white}table tbody tr td .hidden-input{margin-bottom:10px}table tbody tr td .label{font-size:18px!important;margin-top:5px}table tbody tr .padding-x-25{padding:0 25px}table tbody tr .font-blue{color:#2f2fb0}table tbody tr .font-bold{font-weight:700}.border{border-left:1px solid rgb(126,126,126)}.flex{display:flex;justify-content:center;height:inherit;align-items:center}.hidden-block{display:table-row;background:white!important}.sb-modal-content sb-dynamic-checkbox{margin:0!important}.sb-modal-content .sb-checkbox{padding:0!important;margin:0!important}.sectionTitle{font-size:1rem;font-weight:600;line-height:1.4;padding:7px 0 20px}.formSection{padding:0!important}.display-sectionName .sectionName{display:block}.hidden-sectionName .sectionName,.two-column-grid .sectionName{display:none}.sectionName{font-size:1rem!important;font-weight:600}.d-grid{display:grid;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-2{display:grid;grid-template-columns:auto auto;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-3{display:grid;grid-template-columns:auto auto auto;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-1{display:inline-grid;width:100%;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-2{display:inline-grid;width:50%;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-3{display:inline-grid;width:33.3%;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-4{display:inline-grid;width:25%;grid-column-gap:1rem;grid-row-gap:1rem}.sb-w-85{width:85%}sui-select{width:100%;border:1px solid rgba(34,36,38,.15);font-size:.8rem;padding:.4rem .2rem;background:#fff}.dropdown.icon{float:right!important}.menu{width:100%}.solution-media__video{width:166px;height:96px}.solution-media__video .overlay-image{width:100%;height:100%;background:rgba(0,0,0,.3);position:absolute;left:0;right:0;cursor:pointer;z-index:1;background-repeat:no-repeat!important}.solution-media__video .overlay-image .play.icon{position:absolute;transform:translate(-50%,-50%);top:50%;left:50%;color:#fff9;font-size:32px;cursor:pointer;height:auto}.solution-media__desc{font-size:12px;font-weight:700;color:#333;max-width:180px;height:96px;display:flex;align-items:flex-end;line-height:normal;line-height:13px}.ckeditor-tool__option,.ckeditor-tool__question{border:1px solid #c4c4c4;border-radius:4px;border-top:0;position:relative;display:flow-root}.ckeditor-tool__solution,.ckeditor-tool__question-readonly,.ckeditor-tool__option-readonly{border:1px solid #c4c4c4;border-radius:4px;margin-bottom:-4px}.ckeditor-tool__label{background-color:#f3f8ff;color:var(--primary-color)!important;font-weight:600;border-top-left-radius:4px;border-top-right-radius:4px}.mcq-checkbox-answer{background:#f2f2f2;padding:8px;display:flex;justify-content:center;align-items:center;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ckeditor-tool__solution .menu .item{font-size:.785rem!important}.solution_video .ckeditor-tool__option{border:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:4px!important}.solution_html .sb-ckeditor .sb-ckeditor-close,.solution_video .sb-ckeditor .sb-ckeditor-close{right:5px;top:-30px;border:0;background:none;min-width:auto;padding:0;color:#999}.sb-ckeditor .sb-ckeditor-close{right:-5px;top:-22px;border:0;background:none;min-width:auto;padding:0;color:#999}.sb-mcq-form .sb-mcq-item:nth-child(4) .sb-ckeditor .ckeditor-tool__option{margin-bottom:0!important}.two-column-grid{display:grid;grid-template-columns:repeat(2,1fr);column-gap:.5rem;border-bottom:solid 1px var(--gray-100)}.two-column-grid:last-child{border-bottom:none}.dynamic-form .sb-search-input::-webkit-input-placeholder{padding-left:1.4rem!important}.dynamic-form .required label:after,.sb-editor-container .dynamic-form .required .multi-select-container .list-border ul:after,.sb-editor-container .dynamic-form .multi-select-container .list-border .required ul:after,lib-questionset-editor .add-to-library .dynamic-form .required .multi-select-container .list-border ul:after,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .required ul:after{content:"*";margin:-.2em 0 0 .2em;color:#db2828}.list-border{height:inherit!important}.list-border ul{padding:0!important}.list-border ul span{font-weight:500!important;font-size:.785rem}.sb-editor-container{position:relative;z-index:998!important}.sb-editor-container .sb-input:first-child{margin:1rem 0!important}.sb-editor-container .sb-container{width:95%!important}.sb-editor-container .dynamic-form .sb-dropdown-select{padding:11px 8px!important}.sb-editor-container .dynamic-form label,.sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .sb-editor-container .dynamic-form .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600;position:relative}.sb-editor-container .dynamic-form label:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before,.sb-editor-container .dynamic-form .multi-select-container .list-border ul:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before{z-index:1!important}.sb-editor-container .dynamic-form .sb-textbox,.sb-editor-container .dynamic-form .topic-picker-selector,.sb-editor-container lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,lib-questionset-editor .add-to-library .sb-editor-container .dynamic-form .topic-picker-selector,.sb-editor-container .dynamic-form select,.sb-editor-container .dynamic-form .sb-textarea,.sb-editor-container .dynamic-form .list-border{border:1px solid rgba(34,36,38,.15)!important;padding:12px 8px!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500}.sb-editor-container .dynamic-form .multi-select-container .list-border ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-weight:500!important}.sb-editor-container .dynamic-form .sb-modal-dropdown-web ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-size:12px!important;font-weight:500;border:2px solid #eeeeef}.sb-editor-container .dynamic-form .sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}.sb-editor-container .dynamic-form .sb-keywordbox .ng2-tag-input{padding:0}.sb-editor-container .dynamic-form .sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}.sb-editor-container .dynamic-form .sb-keywordbox .ng2-tags-container{margin-top:.2rem}.sb-editor-container .dynamic-form .sb-keywordbox .tag-wrapper,.sb-editor-container .dynamic-form .sb-keywordbox delete-icon svg{height:24px;line-height:24px}.sb-editor-container .dynamic-form .sb-dropdown label,.sb-editor-container .dynamic-form .sb-dropdown .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-dropdown ul{padding:0}.sb-editor-container .dynamic-form .sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}.sb-editor-container .dynamic-form .sb-textarea-container label,.sb-editor-container .dynamic-form .sb-textarea-container .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-textarea-container ul{padding:0}.sb-editor-container .dynamic-form .sb-checkbox{padding:0;margin-top:0}.sb-editor-container .dynamic-form sb-icon-dropdown{top:10px!important;right:6px!important}.sb-editor-container .sb-textarea-container,.sb-editor-container .sb-dropdown{margin:1rem 0!important}lib-chat-window,.chat_bot{display:none!important}.h-100{height:100%!important}.sb-required{color:#ff4558;padding-left:2px;position:relative;top:-5px}select[disabled]{opacity:.8!important;font-weight:500!important}.multiselect{position:relative;top:-7px;height:48px;left:7px;font-size:14px;font-weight:400}.treepicker-parent .list-border{height:38px!important;padding:1rem!important;margin-top:15px!important}.options{justify-content:flex-end;margin-right:10px;display:flex;gap:10px}.selected-audio-container{height:100%;border:1px solid #9E9E9E;border-radius:6px;float:left;width:20%;margin-right:15px}.audio-container{height:100px;float:left;width:200px;padding:10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.cursor-pointer-txt{cursor:pointer}.b-1-100{border:solid 1px #cccccc}.preview-modal .sb-modal-content{height:inherit!important}.potrait-mode .b-1-100{width:480px;margin:auto}.potrait-mode .aspectratio[data-ratio="16:9"]{padding-top:177.7777777778%}.br-2{border-radius:2px}.contentViewerIframeShadow{width:100%;height:100%;border:0}.aspectratio{position:relative;width:100%;height:0}.aspectratio>*{position:absolute;width:100%;height:100%;top:0;left:0}.content-player{z-index:11}.quml-container .container{width:inherit!important}.btn-align{display:flex;flex-direction:row;justify-content:center;align-items:center;flex:1;margin-top:10px}.mt-25{margin-top:25%;text-align:center}.handle-zoom{overflow:hidden;position:relative}lib-questionset-editor .image-viewer__close{line-height:45px!important}.btn-none{background:none!important;border:none!important;padding:0!important;cursor:pointer}.opacity-icon{opacity:.45!important}.slider-align{margin-top:15px}::placeholder{padding:.25rem;opacity:.99;color:#999;font-family:Noto Sans;font-size:12px;font-weight:700}.sb-input{margin:1rem 0}label,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border ul{display:block;font-size:1rem;margin:0}.flex-container{display:flex;margin-top:15px}.textbox{width:90%;border:1px solid rgba(34,36,38,.15)!important;box-sizing:border-box;background-color:#fff;margin-right:40px;height:45px;border-radius:5px;font-size:13px;padding:12px}.common-contribution-card{box-sizing:border-box;border:.5px solid rgba(123,134,244,.39);border-radius:4px;background-color:#fff;box-shadow:none;width:150px}.common-contribution-card .content img{width:64px;height:64px}.common-contribution-card .content .content-title{font-size:12px;vertical-align:middle;line-height:16px}.common-contribution-card .content .icon.check{display:none;height:18px;position:absolute;right:8px;top:8px;margin:0;width:20px;color:#00c786;font-size:20px}.common-contribution-card:hover .content .icon.check,.common-contribution-card.active .content .icon.check{display:block}.common-contribution-card:hover,.common-contribution-card.active{cursor:pointer;z-index:5;background:white;transform:translateY(-3px);box-shadow:0 2px 8px #7b86f44f;border:.5px solid rgba(208,208,208,.48)}.common-contribution-card.active .content-title{font-weight:700}.fs-16{font-size:16px!important}.tarnslation{margin-top:15px;margin-bottom:15px}.mt-15{margin-top:15px!important;margin-bottom:5px}.label-align{font-size:15px;font-weight:500}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;transition:transform .6s ease;backface-visibility:hidden;perspective:1000px}@media screen and (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translate(0)}@supports (transform-style: preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateZ(0)}}.carousel-item-next,.active.carousel-item-right{transform:translate(100%)}@supports (transform-style: preserve-3d){.carousel-item-next,.active.carousel-item-right{transform:translate3d(100%,0,0)}}.carousel-item-prev,.active.carousel-item-left{transform:translate(-100%)}@supports (transform-style: preserve-3d){.carousel-item-prev,.active.carousel-item-left{transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translate(0)}@supports (transform-style: preserve-3d){.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translateZ(0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#ffffff80}.carousel-indicators li:before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}:root{--font-stack-en: "Noto Sans", "Noto Sans Devanagari", "Noto Sans Tamil", "Noto Sans Bengali", "Noto Sans Malayalam", "Noto Sans Gurmukhi", "Noto Sans Gujarati", "Noto Sans Telugu", "Noto Sans Kannada", "Noto Sans Oriya", "Noto Nastaliq Urdu", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-stack-hi: "Noto Sans Devanagari", "Noto Sans", "Noto Sans Tamil", "Noto Sans Bengali", "Noto Sans Malayalam", "Noto Sans Gurmukhi", "Noto Sans Gujarati", "Noto Sans Telugu", "Noto Sans Kannada", "Noto Sans Oriya", "Noto Nastaliq Urdu", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-stack-ur: "Noto Sans", "Noto Nastaliq Urdu", "Noto Sans Devanagari", "Noto Sans Tamil", "Noto Sans Bengali", "Noto Sans Malayalam", "Noto Sans Gurmukhi", "Noto Sans Gujarati", "Noto Sans Telugu", "Noto Sans Kannada", "Noto Sans Oriya", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-default-size: .875rem;--font-size-base: var(--font-default-size);--font-weight-light: 300;--font-weight-normal: 400;--font-weight-bold: 700;--font-weight-base: var(--font-weight-normal);--line-height-value: 1.61803398875;--line-height-base: calc(var(--font-size-base) * var(--line-height-value));--h1-font-size: 2rem;--h2-font-size: 1.75rem;--h3-font-size: 1.5rem;--h4-font-size: 1.2rem;--h5-font-size: 1rem;--h6-font-size: var(--font-size-base);--font-size-lg: var(--h4-font-size);--font-size-md: var(--h5-font-size);--font-size-normal: var(--font-size-base);--font-size-sm: .75rem;--font-size-xs: .625rem;--p-font-size: var(--font-size-base);--base-font-size: .875rem;--base-block-space: .5rem;--icon-svg-xxs: .75rem;--icon-svg-xs: calc(var(--base-block-space) * 2);--icon-svg-sm: calc(var(--base-block-space) * 3);--icon-svg-md: calc(var(--base-block-space) * 4);--icon-svg-lg: calc(var(--base-block-space) * 5);--icon-svg-xl: calc(var(--base-block-space) * 6)}:root{--blue: #024f9d;--green: #008840;--orange: #e55a28;--red: #ff4558;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--yellow: #ffc107;--teal: #20c997;--cyan: #17a2b8;--black: #000000;--white: #ffffff;--accessibility-red: #A30010;--accessibility-red2: #A30010;--gray-hs: 0, 0%;--gray: hsl(var(--gray-hs), 20%);--gray-0: hsl(var(--gray-hs), 95%);--gray-100: hsl(var(--gray-hs), 80%);--gray-200: hsl(var(--gray-hs), 60%);--gray-300: hsl(var(--gray-hs), 59%);--gray-400: hsl(var(--gray-hs), 40%);--gray-800: var(--gray);--primary-color: #024f9d;--secondary-color: #008840;--tertiary-color: #e55a28;--primary-0: #f3f7fa;--primary-100: #edf4f9;--primary-200: #80a7ce;--primary-250: #d3e7f4;--primary-300: #7ab4ee;--primary-400: var(--primary-color);--primary-600: #005391;--primary-800: #002e50;--primary-color-contrast: #fff;--primary-color-contrast-rgb: rgb(255, 255, 255);--primary-color-shade: var(--primary-800);--primary-color-tint: var(--primary-200);--secondary-0: #e1ffdf;--secondary-100: #00c786;--secondary-200: #07bc81;--secondary-400: var(--secondary-color);--tertiary-0: #feedd7;--tertiary-100: #ffa11d;--tertiary-400: var(--tertiary-color);--red-0: #fbccd1;--red-100: #ff6979;--red-400: var(--red);--info-color: var(--blue);--success-color: var(--green);--warning-color: var(--orange);--danger-color: var(--red);--body-background-color: var(--primary-0);--default-text-color: var(--gray-800);--bg-body: var(--primary-0);--body-color: var(--gray-800);--alpha0: 0;--alpha25: .25;--alpha50: .5;--alpha75: .75;--rc-00abc7: #00abc7;--rc-33B6CC: #33B6CC;--rc-2dadc2: #2dadc2;--rc-0fbad6: #0fbad6;--rc-96C8DA: #96C8DA;--rc-add8e6: #add8e6;--rc-afd9e7: #afd9e7;--rc-66c7f4: #66c7f4;--rc-289fd9: #289fd9;--rc-88B7E6: #88B7E6;--rc-007AFF: #007AFF;--rc-7b86f4: #7b86f4;--rc-0076FE: #0076FE;--rc-2361ff: #2361ff;--rc-1B4785: #1B4785;--rc-196DAB: #196DAB;--rc-5c8db7: #5c8db7;--rc-91aecc: #91aecc;--rc-80A7CE: #80A7CE;--rc-2972a4: #2972a4;--rc-2f4272: #2f4272;--rc-042D55: #042D55;--rc-1b1c1d: #1b1c1d;--rc-252525: #252525;--rc-4a4a4a: #4a4a4a;--rc-565c70: #565c70;--rc-6D7278: #6D7278;--rc-424242: #424242;--rc-a9a9a9: #a9a9a9;--rc-aaaaaa: #aaaaaa;--rc-bbbbbb: #bbbbbb;--rc-979797: #979797;--rc-9F9F9F: #9F9F9F;--rc-9b9b9b: #9b9b9b;--rc-00BD7F: #00BD7F;--rc-2ca58d: #2ca58d;--rc-009D53: #009D53;--rc-bfe1cf: #bfe1cf;--rc-E5EDF5: #E5EDF5;--rc-f5f5f5: #f5f5f5;--rc-f9f9f9: #f9f9f9;--rc-fdfdfd: #fdfdfd;--rc-dedede: #dedede;--rc-F5F9FC: #F5F9FC;--rc-c4c4c4: #c4c4c4;--rc-d8d8d8: #d8d8d8;--rc-e9e5e5: #e9e5e5;--rc-dddddd: #dddddd;--rc-e9e8d9: #e9e8d9;--rc-d0d0d0: #d0d0d0;--rc-d4d3d3: #d4d3d3;--rc-FAFAFA: #FAFAFA;--rc-F3F8FF: #F3F8FF;--rc-e0e1e2: #e0e1e2;--rc-bdbdbd: #bdbdbd;--rc-cecece: #cecece;--rc-E0F1FD: #E0F1FD;--rc-C8D6EA: #C8D6EA;--rc-e2e3e5: #e2e3e5;--rc-BCBEC0: #BCBEC0;--rc-d4d4d5: #d4d4d5;--rc-d4d8da: #d4d8da;--rc-e0e0e0: #e0e0e0;--rc-d8dee2: #d8dee2;--rc-D9E4F2: #D9E4F2;--rc-fff6f6: #fff6f6;--rc-f7f7f7: #f7f7f7;--rc-eeeeee: #eeeeee;--rc-dededf: #dededf;--rc-E0EFFF: #E0EFFF;--rc-c2c2c2: #c2c2c2;--rc-e5e5e5: #e5e5e5;--rc-c3c3c3: #c3c3c3;--rc-F7FFF5: #F7FFF5;--rc-D3DED1: #D3DED1;--rc-EBF6E0: #EBF6E0;--rc-F6F6F6: #F6F6F6;--rc-f7ffec: #f7ffec;--rc-d2ddc7: #d2ddc7;--rc-866A6A: #866a6a;--rc-7c7b7b: #7c7b7b;--rc-DECACA: #DECACA;--rc-FCE6E6: #FCE6E6;--rc-fcf2d6: #fcf2d6;--rc-F5D7D7: #F5D7D7;--rc-ffe1e1: #ffe1e1;--rc-e6c8c8: #e6c8c8;--rc-ffb300: #ffb300;--rc-e68900: #e68900;--rc-E08A20: #E08A20;--rc-DD680F: #DD680F;--rc-f56b56: #f56b56;--rc-dc523d: #dc523d;--rc-e65c47: #e65c47;--rc-rgba-black: 0, 0, 0;--rc-rgba-white: 255, 255, 255;--rc-rgba-gray: 51, 51, 51;--rc-rgba-primary: 2, 79, 157;--rc-rgba-primary-300: 41, 114, 164;--rc-rgba-gray-300: 34, 36, 38;--rc-rgba-866a6a: 134, 106, 106;--rc-rgba-d0d0d0: 208, 208, 208;--rc-rgba-7b86f4: 123, 134, 244;--rc-rgba-C8D6EA: 200, 214, 234;--sbt-box-shadow-black: rgba(0, 0, 0, .1);--sbt-box-shadow-6px: .375rem .375rem .125rem 0 var(--sbt-box-shadow-black);--sbt-box-shadow-3px: .1875rem .1875rem .125rem 0 var(--sbt-box-shadow-black);--sbt-box-shadow: rgba(128, 167, 206, 1);--lazyload-bg: #f6f7f8;--grey-nuance-lighter: #eeeeee;--grey-nuance-darker: #dddddd;--fade-grey: #e8e8e8}[class^=sb-icon-],[class*=sb-icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;font-size:inherit;text-transform:none;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sb-icon-preview:before{content:"\e909"}.sb-icon-refresh:before{content:"\e90c"}.sb-icon-reviewer:before{content:"\e90a"}.sb-icon-folder:before{content:"\e902"}.sb-icon-comment:before{content:"\e908"}.sb-icon-send:before{content:"\e90b"}.sb-icon-book:before{content:"\e900"}.sb-icon-content:before{content:"\e901"}.sb-icon-collection:before{content:"\e903"}.sb-icon-doc:before{content:"\e904"}.sb-icon-mp3:before{content:"\e905"}.sb-icon-open-book:before{content:"\e906"}.sb-icon-video:before{content:"\e907"}.sb-lock-icon{cursor:pointer}[class*=sb-icon-primary]{background-color:var(--primary-color)}[class*=sb-icon-secondary]{background-color:var(--secondary-color)}[class*=sb-icon-warning]{background-color:var(--tertiary-color)}[class*=sb-icon-error]{background-color:var(--red)}.info-icon{background-color:var(--gray-400);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:50% 50%;mask-position:50% 50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;width:1rem;height:1rem;margin-left:.25rem;display:inline-block;vertical-align:bottom}.icon-arrow-round-down{transform:rotate(90deg)}.icon-svg{position:relative;top:.0625rem;display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;opacity:1}.icon-svg svg.icon{width:100%;height:inherit}.icon-svg--xxs{width:var(--icon-svg-xxs);height:var(--icon-svg-xxs)}.icon-svg--xs{width:var(--icon-svg-xs);height:var(--icon-svg-xs)}.icon-svg--sm{width:var(--icon-svg-sm);height:var(--icon-svg-sm)}.icon-svg--md{width:var(--icon-svg-md);height:var(--icon-svg-md)}.icon-svg--lg{width:var(--icon-svg-lg);height:var(--icon-svg-lg)}.icon-svg--xl{width:var(--icon-svg-xl);height:var(--icon-svg-xl)}.icon-svg--white{fill:var(--white)}.icon-svg--primary{fill:var(--primary-color)}.icon-svg--secondary{fill:var(--secondary-color)}.icon-svg--tertiary{fill:var(--tertiary-color)}.icon-svg--red{fill:var(--red-400)}.icon-svg--gray{fill:var(--gray-800)}*,*:before,*:after{box-sizing:border-box}html{font-family:inherit;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:var(--font-stack-en);font-size:1rem;font-weight:400;line-height:1.5;color:var(--gray-800);text-align:left;background:#E5EDF5}[tabindex="-1"]:focus{outline:none!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}a{color:theme-color("primary");text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:0px dotted;outline:0px auto transparent}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=search]{outline-offset:-2px;-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}[hidden]{display:none!important}.w-15{width:15%;max-width:15%}.w-10{width:10%;max-width:10%}.w-5{width:5%;max-width:5%}h1,.sb-h1{font-size:var(--h1-font-size);line-height:calc(var(--h1-font-size) * var(--line-height-value));margin:0;padding:0}h2,.sb-h2{font-size:var(--h2-font-size);line-height:calc(var(--h2-font-size) * var(--line-height-value));margin:0;padding:0}h3,.sb-h3{font-size:var(--h3-font-size);line-height:calc(var(--h3-font-size) * var(--line-height-value));margin:0;padding:0}h4,.sb-h4{font-size:var(--h4-font-size);line-height:calc(var(--h4-font-size) * var(--line-height-value));margin:0;padding:0}h5,.sb-h5{font-size:var(--h5-font-size);line-height:calc(var(--h5-font-size) * var(--line-height-value));margin:0;padding:0}h6,.sb-h6{font-size:var(--h6-font-size);line-height:calc(var(--h6-font-size) * var(--line-height-value));margin:0;padding:0}p,.sb-para{font-size:var(--p-font-size);line-height:calc(var(--p-font-size) * var(--line-height-value))}.lineHeight-normal{line-height:normal!important}.b-0{border:0px solid var(--gray-400)!important}.bl-0{border-left:none!important}.br-0{border-right:none!important}.br-4{border-radius:4px!important}.bt-0{border-top:none!important}.bb-0{border-bottom:none!important}.b-1{border:1px solid var(--gray-400)!important}.b-2{border:2px solid var(--gray-400)!important}.b-4{border:4px solid var(--gray-400)!important}.b-8{border:8px solid var(--gray-400)!important}.bs-0{box-shadow:none!important}.bs-1{box-shadow:0 3px 6px #0000004a!important}.bs-1:hover{box-shadow:0 4px 9px #0000004a!important}.bs-2{box-shadow:0 0 20px #0000004a!important}.sb-btn{white-space:nowrap;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;outline:0;display:inline-block;border:.0625rem solid;cursor:pointer;min-width:4rem;border-radius:.125rem;position:relative;line-height:1;text-transform:inherit;text-decoration:none}.sb-btn-gray:hover,.sb-btn-gray:active,.sb-btn-gray.active{background-color:var(--gray-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-primary:hover,.sb-btn-primary:active,.sb-btn-primary.active{background-color:var(--primary-800);border:.0625rem solid transparent;color:var(--white)}.sb-btn-secondary:hover,.sb-btn-secondary:active,.sb-btn-secondary.active{background-color:var(--secondary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-tertiary:hover,.sb-btn-tertiary:active,.sb-btn-tertiary.active{background-color:var(--tertiary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-red:hover,.sb-btn-red:active,.sb-btn-red.active{background-color:var(--red-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-info:hover,.sb-btn-info:active,.sb-btn-info.active{background-color:var(--primary-800);border:.0625rem solid transparent;color:var(--white)}.sb-btn-success:hover,.sb-btn-success:active,.sb-btn-success.active{background-color:var(--secondary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-warning:hover,.sb-btn-warning:active,.sb-btn-warning.active{background-color:var(--tertiary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-error:hover,.sb-btn-error:active,.sb-btn-error.active{background-color:var(--red-400);border:.0625rem solid transparent;color:var(--white)}.ui.toggle.checkbox.sb-toggle{min-height:1.5rem;position:relative;display:inline-block;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;min-height:1rem;font-size:1rem;min-width:1rem}.ui.toggle.checkbox.sb-toggle input{width:4rem;height:1.5rem;cursor:pointer;position:absolute;top:0;left:0;opacity:0;outline:0;z-index:3}.ui.toggle.checkbox.sb-toggle input:focus:checked~label:before,.ui.toggle.checkbox.sb-toggle input:focus:checked~.box:before,.ui.toggle.checkbox.sb-toggle input:checked~.box:before,.ui.toggle.checkbox.sb-toggle input:checked~label:before{background-color:var(--primary-color)!important}.ui.toggle.checkbox.sb-toggle label{min-height:1rem;padding-left:4.5rem;color:rgba(var(--rc-rgba-black),.87);position:relative;display:block;outline:0;font-size:1rem}.ui.toggle.checkbox.sb-toggle label:before{display:block;position:absolute;content:"";z-index:1;transform:none;border:none;top:.0625rem;left:0;background:rgba(var(--rc-rgba-black),.05);box-shadow:none;width:4rem;height:1.5rem;border-radius:500rem;border-color:var(--primary-color);background-color:var(--primary-color);color:var(--white);transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease}.ui.toggle.checkbox.sb-toggle label:after{background:var(--white) linear-gradient(transparent,rgba(var(--rc-rgba-black),.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;width:1.25rem;height:1.25rem;top:.1875rem;left:0;border-radius:500rem;transition:background .3s ease,left .3s ease}.ui.toggle.checkbox.sb-toggle input~label:after{left:.1rem;box-shadow:none}.ui.toggle.checkbox.sb-toggle input:checked~label:after{left:2.5625rem;box-shadow:none}.btn-group{border:.0625rem solid var(--gray-100);display:inline-flex;flex-direction:row;font-size:0;vertical-align:baseline}.btn-group .sb-btn{background:var(--white);border-left:.0625rem solid var(--gray-100);flex:1 0 auto;border-radius:0;margin:0;border:0;color:var(--primary-400);min-width:2.5rem}.sb-btn-grow{background:none;border:0px solid var(--white);font-size:.75rem;color:var(--white);cursor:pointer;transition:all .2s ease-in-out}.sb-btn-grow:disabled{opacity:.4;cursor:default}.sb-btn-grow:hover:not([disabled]){background:none;transform:scale(1.15)}.sb-btn-primary svg.icon-svg--primary{fill:var(--primary-color-contrast)}/*! + \*********************************************************************************************************************************************************************************************************************************************/@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(KaTeX_AMS-Regular.woff2) format("woff2"),url(KaTeX_AMS-Regular.woff) format("woff"),url(KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(KaTeX_Caligraphic-Bold.woff) format("woff"),url(KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(KaTeX_Caligraphic-Regular.woff) format("woff"),url(KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(KaTeX_Fraktur-Bold.woff2) format("woff2"),url(KaTeX_Fraktur-Bold.woff) format("woff"),url(KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(KaTeX_Fraktur-Regular.woff2) format("woff2"),url(KaTeX_Fraktur-Regular.woff) format("woff"),url(KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(KaTeX_Main-Bold.woff2) format("woff2"),url(KaTeX_Main-Bold.woff) format("woff"),url(KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(KaTeX_Main-BoldItalic.woff2) format("woff2"),url(KaTeX_Main-BoldItalic.woff) format("woff"),url(KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(KaTeX_Main-Italic.woff2) format("woff2"),url(KaTeX_Main-Italic.woff) format("woff"),url(KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(KaTeX_Main-Regular.woff2) format("woff2"),url(KaTeX_Main-Regular.woff) format("woff"),url(KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(KaTeX_Math-BoldItalic.woff2) format("woff2"),url(KaTeX_Math-BoldItalic.woff) format("woff"),url(KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(KaTeX_Math-Italic.woff2) format("woff2"),url(KaTeX_Math-Italic.woff) format("woff"),url(KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(KaTeX_SansSerif-Bold.woff2) format("woff2"),url(KaTeX_SansSerif-Bold.woff) format("woff"),url(KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(KaTeX_SansSerif-Italic.woff2) format("woff2"),url(KaTeX_SansSerif-Italic.woff) format("woff"),url(KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(KaTeX_SansSerif-Regular.woff2) format("woff2"),url(KaTeX_SansSerif-Regular.woff) format("woff"),url(KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(KaTeX_Script-Regular.woff2) format("woff2"),url(KaTeX_Script-Regular.woff) format("woff"),url(KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(KaTeX_Size1-Regular.woff2) format("woff2"),url(KaTeX_Size1-Regular.woff) format("woff"),url(KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(KaTeX_Size2-Regular.woff2) format("woff2"),url(KaTeX_Size2-Regular.woff) format("woff"),url(KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(KaTeX_Size3-Regular.woff2) format("woff2"),url(KaTeX_Size3-Regular.woff) format("woff"),url(KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(KaTeX_Size4-Regular.woff2) format("woff2"),url(KaTeX_Size4-Regular.woff) format("woff"),url(KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(KaTeX_Typewriter-Regular.woff2) format("woff2"),url(KaTeX_Typewriter-Regular.woff) format("woff"),url(KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.11"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}::ng-deep .dynamic-form label,.add-to-library .dynamic-form .multi-select-container .list-border ul{font-size:1rem!important;line-height:1.4;font-weight:400}.sb-modal-content{padding:1.3rem}.sb-modal-content label{font-weight:bolder}label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}table{font-family:arial,sans-serif;border-collapse:collapse;width:97%;border:1px solid #cccccc;margin:15px 25px 15px 15px}table thead tr{background-color:#ededed}table thead tr th{margin-right:86px}td,th{text-align:left;padding:15px}tr:nth-child(2n){background-color:#f3f7fa}tr{border:2px solid #cccccc}tr td input{float:right;width:14%;border-radius:6px;border-width:1px;height:42px;text-align:center;margin-right:10px}tr .right{float:right}h2{margin-left:15px}.close-button{opacity:0;float:right;margin-top:5px;margin-right:15px;color:#8b8080;font-size:20px}.close-button:hover{opacity:1;color:#8b8080;float:right;margin-top:5px;margin-right:15px;font-size:20px}.editorWrapper{border:0px solid white}.editorWrapper.hasError{border:1px solid red;border-radius:2px}.characterCount{text-align:right;border-top:0;padding-right:7px;font-size:11px;font-weight:700;margin-top:-16px;position:relative}.bottomImage{background-color:transparent;z-index:1;font-size:12px;float:right}.custom-image img{border:1px dotted;padding:7px;margin:6px;cursor:pointer}.resource-image{height:180px!important}.asset_container{overflow-y:auto;overflow-x:hidden;min-height:300px!important;max-height:300px!important;padding:5px}.insert-image-btn{position:absolute;z-index:1;left:653px;background-color:transparent;padding:12px 14px!important;margin-left:6px}.insert-image-btn>.icon{opacity:1}.insert-image-btn:active{background-color:transparent}.upload-file-section{display:flex;height:240px;width:100%;max-width:800px;align-items:center;justify-content:center;flex-direction:column;margin:0 auto;background-color:#f5f9fc;border:1px dashed #80a7ce}.upload-file-description p{color:#999}.upload-file-description ul{margin:0;list-style:disc}.upload-file-description ul li{margin-bottom:8px}.upload-file-description ul li a{cursor:pointer;font-size:12px}.sb-grid-layout{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));grid-gap:16px}.sb-grid-layout.image{grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}.sb-grid-layout.video{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.sb-grid-layout .sb-video-content .sb-image-section{height:96px;overflow:hidden;border-radius:4px;box-shadow:inset 0 1px 3px #00000080}.sb-image-section .selected-video{display:none}.sb-image-section.active .selected-video{position:absolute;right:4px;top:4px;color:#07bc81;font-size:20px;display:block}.sb-grid-layout .sb-video-content .sb-image-section img{width:100%;height:100%;cursor:pointer}.overlay-image{width:100%;height:100%;background:rgba(0,0,0,.3);position:absolute;left:0;right:0;cursor:pointer}.overlay-image .play.icon{position:absolute;transform:translate(-50%,-50%);top:50%;left:50%;color:#fff9;font-size:32px;cursor:pointer}::ng-deep .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,::ng-deep .ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-left:none;border-right:none;border-bottom:1px solid #c4c4c4;border-radius:0}::ng-deep .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,::ng-deep .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border:none}::ng-deep .ck-dropdown.ck-font-size-dropdown .ck-dropdown__panel{height:150px;overflow-y:scroll}::ng-deep figure.image.ck-widget{width:auto;height:auto;overflow:visible}::ng-deep figure.image img{width:100%}::ng-deep figure.image.resize-25{width:25%;height:auto}::ng-deep figure.image.resize-50{width:50%;height:auto}::ng-deep figure.image.resize-75{width:75%;height:auto}::ng-deep figure.image.resize-100{width:100%;height:auto}::ng-deep figure.table{margin:2.2rem 0 1.5rem 1rem!important}::ng-deep .text-center{text-align:center}::ng-deep .text-left{text-align:left}::ng-deep .text-right{text-align:right}::ng-deep .fs-8{font-size:.5rem}::ng-deep .fs-10{font-size:.625rem}::ng-deep .fs-12{font-size:.75rem}::ng-deep .fs-14{font-size:.875rem}::ng-deep .fs-16{font-size:1rem}::ng-deep .fs-18{font-size:1.125rem}::ng-deep .fs-20{font-size:1.25rem}::ng-deep .fs-22{font-size:1.375rem}::ng-deep .fs-24{font-size:1.5rem}::ng-deep .fs-26{font-size:1.625rem}::ng-deep .fs-28{font-size:1.75rem}::ng-deep .fs-30{font-size:1.875rem}::ng-deep .fs-36{font-size:2.25rem}.upload-image-modal-section{border-radius:4px;width:100%;min-height:130px;background:#F5F9FC;border:1px dashed #024f9d}.upload-input-button input[type=file]{position:absolute;right:0;top:0;font-size:118px;margin:0;padding:0;cursor:pointer;opacity:0;height:100%}.qq-uploader.qq-uploader-selector.custom-qq-uploader{background:inherit;border-color:none;border:none;max-height:inherit;min-height:inherit;overflow-y:inherit;width:688px;height:240px;display:flex;justify-content:center;align-items:center}.terms-and-condition{line-height:14px}.sb-info-bx{padding:.4rem!important}.sb-info-bx li{margin:0!important;padding:0!important}.sb-info-bx li:before{content:""!important}.red{color:red}.b-bl{border-left:solid 1px #e4e1e1}.sb-form-fields .sb-field-group{margin:1rem 0}.sb-form-fields .sb-field{position:relative;margin-bottom:.5rem}.sb-form-fields .sb-field .sb-form-control{border:1px solid rgba(34,36,38,.15);width:100%;border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;padding:.25rem .5rem!important}.sb-loading-spinner{width:1rem;height:1rem;margin-right:8px;border-width:.2em;display:inline-block;vertical-align:text-bottom;border:.15em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.sb-btn-loading:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}.sb-btn-loading:after{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;animation:button-spin .6s linear;animation-iteration-count:infinite;border-radius:500rem;border-color:#fff transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.sb-btn-outline-disabled{background-color:#fff;border:1px solid #cccccc;color:#999;cursor:default;font-weight:400}.sb-color-grey{color:#666}.ui.info.message{color:#276f86!important}.sb-textbox[disabled=true],.sb-editor-container .dynamic-form [disabled=true].topic-picker-selector,[disabled=true].topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form [disabled=true].topic-picker-selector{opacity:.3!important;font-weight:500!important}.sb-tabset-segment{min-height:288px;max-height:288px;overflow-y:auto}input:focus-visible{border:none!important}.sb-appicon{height:110px;width:120px;border:solid 1px #ccc;padding:5px}.sb-centericon{height:110px;width:120px;border:solid 1px #ccc;padding:10px;display:flex;justify-content:center;align-items:center;flex-direction:column}.addImageText{font-size:.8rem!important}.app-icon-label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}lib-questionset-editor .fancytree-helper-hidden{display:none}lib-questionset-editor .fancytree-helper-indeterminate-cb{color:#777}lib-questionset-editor .fancytree-helper-disabled{color:silver}lib-questionset-editor .fancytree-helper-spin{animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}lib-questionset-editor ul.fancytree-container{font-family:inherit;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}lib-questionset-editor ul.fancytree-container ul{padding:0 0 0 16px;margin:0}lib-questionset-editor ul.fancytree-container ul>li:before{content:none}lib-questionset-editor ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}lib-questionset-editor ul.fancytree-container li.fancytree-lastsib{background-image:none}lib-questionset-editor .ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}lib-questionset-editor ul.fancytree-connectors.fancytree-container li{background-image:url(vline.gif);background-position:0 0}lib-questionset-editor ul.fancytree-container li.fancytree-lastsib,lib-questionset-editor ul.fancytree-no-connector>li{background-image:none}lib-questionset-editor li.fancytree-animating{position:relative}lib-questionset-editor #fancytree-drop-marker,lib-questionset-editor span.fancytree-checkbox,lib-questionset-editor span.fancytree-drag-helper-img,lib-questionset-editor span.fancytree-empty,lib-questionset-editor span.fancytree-expander,lib-questionset-editor span.fancytree-icon,lib-questionset-editor span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url(icons.gif);background-position:0 0}lib-questionset-editor span.fancytree-checkbox,lib-questionset-editor span.fancytree-custom-icon,lib-questionset-editor span.fancytree-expander,lib-questionset-editor span.fancytree-icon{margin-top:0}lib-questionset-editor span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}lib-questionset-editor img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:0;vertical-align:top;border-style:none}lib-questionset-editor span.fancytree-expander{cursor:pointer}lib-questionset-editor .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}lib-questionset-editor .fancytree-connectors .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url(icons.gif);margin-top:0}lib-questionset-editor .fancytree-connectors .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}lib-questionset-editor .fancytree-connectors .fancytree-exp-nl span.fancytree-expander,lib-questionset-editor .fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}lib-questionset-editor .fancytree-exp-c span.fancytree-expander{background-position:0 -80px}lib-questionset-editor .fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}lib-questionset-editor .fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}lib-questionset-editor .fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}lib-questionset-editor .fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}lib-questionset-editor .fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}lib-questionset-editor .fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}lib-questionset-editor .fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}lib-questionset-editor .fancytree-exp-e span.fancytree-expander,lib-questionset-editor .fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}lib-questionset-editor .fancytree-exp-e span.fancytree-expander:hover,lib-questionset-editor .fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}lib-questionset-editor .fancytree-exp-edl span.fancytree-expander,lib-questionset-editor .fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}lib-questionset-editor .fancytree-exp-edl span.fancytree-expander:hover,lib-questionset-editor .fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}lib-questionset-editor .fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}lib-questionset-editor .fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,lib-questionset-editor .fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,lib-questionset-editor .fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,lib-questionset-editor .fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}lib-questionset-editor span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}lib-questionset-editor span.fancytree-checkbox:hover{background-position:-16px -32px}lib-questionset-editor span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}lib-questionset-editor span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}lib-questionset-editor .fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}lib-questionset-editor .fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}lib-questionset-editor .fancytree-unselectable span.fancytree-checkbox{opacity:.4}lib-questionset-editor .fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}lib-questionset-editor .fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}lib-questionset-editor .fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}lib-questionset-editor .fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}lib-questionset-editor .fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,lib-questionset-editor .fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}lib-questionset-editor span.fancytree-icon{margin-left:3px;background-position:0 0}lib-questionset-editor .fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}lib-questionset-editor .fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}lib-questionset-editor .fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}lib-questionset-editor .fancytree-ico-e span.fancytree-icon{background-position:-64px 0}lib-questionset-editor .fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}lib-questionset-editor .fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}lib-questionset-editor .fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}lib-questionset-editor .fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}lib-questionset-editor .fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}lib-questionset-editor .fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}lib-questionset-editor .fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}lib-questionset-editor .fancytree-loading span.fancytree-expander,lib-questionset-editor .fancytree-loading span.fancytree-expander:hover,lib-questionset-editor .fancytree-statusnode-loading span.fancytree-icon,lib-questionset-editor .fancytree-statusnode-loading span.fancytree-icon:hover,lib-questionset-editor span.fancytree-icon.fancytree-icon-loading{background-image:url(loading.gif);background-position:0 0}lib-questionset-editor .fancytree-statusnode-error span.fancytree-icon,lib-questionset-editor .fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}lib-questionset-editor span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:16px}lib-questionset-editor span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:16px;padding:0 3px;margin:0 0 0 3px;border:1px solid transparent;border-radius:0}lib-questionset-editor span.fancytree-node.fancytree-error span.fancytree-title{color:red}lib-questionset-editor span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}lib-questionset-editor div.fancytree-drag-helper span.fancytree-childcounter,lib-questionset-editor div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}lib-questionset-editor div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}lib-questionset-editor div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}lib-questionset-editor div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}lib-questionset-editor div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}lib-questionset-editor #fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}lib-questionset-editor #fancytree-drop-marker.fancytree-drop-after,lib-questionset-editor #fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}lib-questionset-editor #fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}lib-questionset-editor #fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}lib-questionset-editor span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-connector,lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-expander,lib-questionset-editor .fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url(icons-rtl.gif)}lib-questionset-editor .fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}lib-questionset-editor .fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url(icons-rtl.gif)}lib-questionset-editor ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}lib-questionset-editor ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url(vline-rtl.gif)}lib-questionset-editor ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,lib-questionset-editor ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}lib-questionset-editor #fancytree-drop-marker.fancytree-rtl{background-image:url(icons-rtl.gif)}lib-questionset-editor table.fancytree-ext-table{font-family:inherit;font-size:10pt;border-collapse:collapse}lib-questionset-editor table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}lib-questionset-editor table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}lib-questionset-editor table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}lib-questionset-editor table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}lib-questionset-editor table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}lib-questionset-editor table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}lib-questionset-editor table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}lib-questionset-editor table.fancytree-ext-columnview tbody tr td>ul{padding:0}lib-questionset-editor table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}lib-questionset-editor table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}lib-questionset-editor table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}lib-questionset-editor .fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}lib-questionset-editor .fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}lib-questionset-editor .fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}lib-questionset-editor .fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,lib-questionset-editor .fancytree-ext-filter-hide tr.fancytree-hide{display:none}lib-questionset-editor .fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}lib-questionset-editor .fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,lib-questionset-editor .fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}lib-questionset-editor .fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,lib-questionset-editor .fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}lib-questionset-editor .fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,lib-questionset-editor .fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}lib-questionset-editor .fancytree-ext-childcounter span.fancytree-custom-icon,lib-questionset-editor .fancytree-ext-childcounter span.fancytree-icon,lib-questionset-editor .fancytree-ext-filter span.fancytree-custom-icon,lib-questionset-editor .fancytree-ext-filter span.fancytree-icon{position:relative}lib-questionset-editor .fancytree-ext-childcounter span.fancytree-childcounter,lib-questionset-editor .fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}lib-questionset-editor ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;box-sizing:border-box}lib-questionset-editor ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}lib-questionset-editor ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;box-sizing:border-box}lib-questionset-editor .fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}lib-questionset-editor .fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}lib-questionset-editor span.fancytree-title{border:1px solid transparent;border-radius:0}lib-questionset-editor span.fancytree-focused span.fancytree-title{outline:1px dotted #000}lib-questionset-editor span.fancytree-active span.fancytree-title,lib-questionset-editor span.fancytree-selected span.fancytree-title{background-color:#d4d4d4}lib-questionset-editor span.fancytree-selected span.fancytree-title{font-style:italic}lib-questionset-editor .fancytree-treefocus span.fancytree-active span.fancytree-title,lib-questionset-editor .fancytree-treefocus span.fancytree-selected span.fancytree-title{color:#fff;background-color:#3875d7}lib-questionset-editor table.fancytree-ext-table{border-collapse:collapse}lib-questionset-editor table.fancytree-ext-table tbody tr.fancytree-focused{background-color:#99defd}lib-questionset-editor table.fancytree-ext-table tbody tr.fancytree-active{background-color:#4169e1}lib-questionset-editor table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#99defd}lib-questionset-editor table.fancytree-ext-columnview tbody tr td{border:1px solid gray}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#ccc}lib-questionset-editor table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#4169e1}lib-questionset-editor .optionsArrayMap,lib-questionset-editor .optionsLast,lib-questionset-editor .optionsArray{color:#000!important}lib-questionset-editor .dynamic-form .required .sb-modal-dropdown-web label:after,lib-questionset-editor .sb-editor-container .dynamic-form .required .sb-modal-dropdown-web .multi-select-container .list-border ul:after,.sb-editor-container lib-questionset-editor .dynamic-form .required .sb-modal-dropdown-web .multi-select-container .list-border ul:after,lib-questionset-editor .sb-editor-container .dynamic-form .multi-select-container .list-border .required .sb-modal-dropdown-web ul:after,.sb-editor-container lib-questionset-editor .dynamic-form .multi-select-container .list-border .required .sb-modal-dropdown-web ul:after,lib-questionset-editor .add-to-library .dynamic-form .required .sb-modal-dropdown-web .multi-select-container .list-border ul:after,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .required .sb-modal-dropdown-web ul:after{content:" "!important}lib-questionset-editor .dynamic-form sb-dynamic-checkbox{margin-top:3.5rem}lib-questionset-editor .dynamic-form .sb-dropdown-select{padding:16px 8px!important}lib-questionset-editor .dynamic-form .list-border{margin-top:2px!important}lib-questionset-editor body{background:#fff!important}lib-questionset-editor .add-to-library{position:relative;z-index:998!important;background:#e5edf5}lib-questionset-editor .add-to-library .sb-required{color:#ff4558;padding-left:2px;position:relative;top:-5px}lib-questionset-editor .add-to-library .back-btn:hover{background:none!important}lib-questionset-editor .add-to-library .back-btn{min-width:auto}lib-questionset-editor .add-to-library .dynamic-form .multi-select-section-app label,lib-questionset-editor .add-to-library .dynamic-form .multi-select-section-app .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .multi-select-section-app ul{margin-bottom:.3rem!important;z-index:inherit}lib-questionset-editor .add-to-library .dynamic-form label,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600;position:relative}lib-questionset-editor .add-to-library .dynamic-form label:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before{z-index:1!important}lib-questionset-editor .add-to-library .dynamic-form .sb-textbox,lib-questionset-editor .add-to-library .sb-editor-container .dynamic-form .topic-picker-selector,.sb-editor-container lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form select,lib-questionset-editor .add-to-library .dynamic-form .sb-textarea,lib-questionset-editor .add-to-library .dynamic-form .list-border{border:1px solid rgba(34,36,38,.15)!important;padding:.85rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500}lib-questionset-editor .add-to-library .dynamic-form select{padding:12px 8px!important}lib-questionset-editor .add-to-library .dynamic-form .list-border{margin-top:2px!important;min-height:43px!important;height:inherit!important;padding:5px 8px!important}lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .placeholder{font-weight:500!important;color:#333!important}lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-weight:500!important;position:inherit!important}lib-questionset-editor .add-to-library .dynamic-form .sb-modal-dropdown-web ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-size:12px!important;font-weight:500;border:2px solid #eeeeef;z-index:99999!important}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .ng2-tag-input{padding:0}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .ng2-tags-container{margin-top:.2rem}lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox .tag-wrapper,lib-questionset-editor .add-to-library .dynamic-form .sb-keywordbox delete-icon svg{height:24px;line-height:24px}lib-questionset-editor .add-to-library .dynamic-form .sb-dropdown label,lib-questionset-editor .add-to-library .dynamic-form .sb-dropdown .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-dropdown ul{padding:0}lib-questionset-editor .add-to-library .dynamic-form .textbox .sb-textarea-container .sb-textarea{height:10rem!important;padding-top:.5rem!important}lib-questionset-editor .add-to-library .dynamic-form .textbox .sb-textarea-container label,lib-questionset-editor .add-to-library .dynamic-form .textbox .sb-textarea-container .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .textbox .sb-textarea-container ul{padding:0}lib-questionset-editor .add-to-library .dynamic-form .sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}lib-questionset-editor .add-to-library .dynamic-form .sb-textarea-container label,lib-questionset-editor .add-to-library .dynamic-form .sb-textarea-container .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-textarea-container ul{padding:0}lib-questionset-editor .add-to-library .dynamic-form .sb-checkbox{padding:0;margin-top:0}lib-questionset-editor .add-to-library .dynamic-form sb-icon-dropdown{top:10px!important;right:6px!important}lib-questionset-editor .add-to-library .sb-textarea-container,lib-questionset-editor .add-to-library .sb-dropdown{margin:1rem 0!important}lib-questionset-editor .add-to-library .sb-container{width:95%!important}lib-questionset-editor .sb-checkbox-tnc .sb-required{position:absolute;padding-left:0;left:18px}lib-questionset-editor .h-100vh{height:100vh}lib-questionset-editor .ui.column.grid>[class*="eight wide"].column{width:73%!important}lib-questionset-editor .footer-fix{padding-bottom:1rem!important}lib-questionset-editor .bg-white,lib-questionset-editor .ui.twelve.grid{background:#fff!important}@keyframes spinner-border{to{transform:rotate(360deg)}}lib-questionset-editor .sb-loading-spinner{width:1rem;height:1rem;margin-right:8px;border-width:.2em;display:inline-block;vertical-align:text-bottom;border:.15em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}lib-questionset-editor .sb-btn-loading:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}lib-questionset-editor .sb-btn-loading:after{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;animation:button-spin .6s linear;animation-iteration-count:infinite;border-radius:500rem;border-color:#fff transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}lib-questionset-editor .sb-btn-outline-disabled{background-color:#fff;border:1px solid #cccccc;color:#999;cursor:default;font-weight:400}lib-questionset-editor lib-chat-window,lib-questionset-editor .chat_bot{display:none!important}lib-questionset-editor .sb-textbox::-webkit-input-placeholder,lib-questionset-editor .sb-editor-container .dynamic-form .topic-picker-selector::-webkit-input-placeholder,.sb-editor-container .dynamic-form lib-questionset-editor .topic-picker-selector::-webkit-input-placeholder,lib-questionset-editor .topic-picker-selector::-webkit-input-placeholder,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector::-webkit-input-placeholder{color:var(--gray-100)!important;font-weight:600!important}lib-questionset-editor .treepicker-parent{margin:.6rem 0!important}lib-questionset-editor .ck-content ul{list-style-type:disc!important}lib-questionset-editor .ck-content ul li{margin-bottom:0!important}lib-questionset-editor sb-dynamic-richtext .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-left:1px solid #c4c4c4!important;border-right:1px solid #c4c4c4!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important;border-bottom:0!important}lib-questionset-editor sb-dynamic-richtext .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,lib-questionset-editor sb-dynamic-richtext .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border:1px solid #c4c4c4!important;border-color:var(--ck-color-base-border)!important}lib-questionset-editor sb-dynamic-richtext .ck-content .table{margin:.8rem 0!important}lib-questionset-editor .sb-textbox::placeholder,lib-questionset-editor .sb-editor-container .dynamic-form .topic-picker-selector::placeholder,.sb-editor-container .dynamic-form lib-questionset-editor .topic-picker-selector::placeholder,lib-questionset-editor .topic-picker-selector::placeholder,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector::placeholder,lib-questionset-editor .sb-textarea::placeholder{color:#333!important;font-weight:500!important}lib-questionset-editor .multi-select-container .sb-modal-dropdown-web ul{border:1px solid #d6d4d4!important;box-shadow:0 0 2px #cecaca!important}lib-questionset-editor .sb-disabled-textarea{background:var(--gray-0)!important;border:.0625rem solid var(--gray-100)!important;opacity:.45!important;pointer-events:none!important;font-size:1em!important}lib-questionset-editor .overflow-y{overflow-y:auto}lib-questionset-editor input:focus-visible{border:none!important}lib-questionset-editor #fancytree-drop-marker.fa-long-arrow-right:before{content:" "!important}lib-questionset-editor .sb-collectionTree-fancyTreelist ul>li>span:first-child{padding:15px 33px}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-n span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-nl span.fancytree-expander{background:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree:before,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul:before{content:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree li:before,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul li:before{content:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul .fa-caret-right,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul .fa-caret-down{display:block!important}lib-questionset-editor .sb-collectionTree-fancyTreelist ul.fancytree-container{font-size:inherit!important;font-family:inherit!important;border:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist ul.fancytree-connectors.fancytree-container li{background-image:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-node{width:inherit!important}lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-active span.fancytree-title,lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-selected span.fancytree-title{background:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-active span.fancytree-title,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-selected span.fancytree-title{background:none!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-edl span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-el span.fancytree-expander{background-position:-34px -94px}lib-questionset-editor .sb-collectionTree-fancyTreelist span.fancytree-focused span.fancytree-title{outline:0!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree{margin:0!important}lib-questionset-editor .sb-collectionTree-fancyTreelist.ui-fancytree,lib-questionset-editor .sb-collectionTree-fancyTreelist .ui-fancytree ul{margin:0 0 0 .625rem!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-e span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-ed span.fancytree-expander{background-position:-32px -68px!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-edl span.fancytree-expander,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-exp-el span.fancytree-expander{background-position:-34px -94px!important}lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-active span.fancytree-title,lib-questionset-editor .sb-collectionTree-fancyTreelist .fancytree-treefocus span.fancytree-selected span.fancytree-title{color:inherit}lib-questionset-editor .sb-loader{position:fixed;top:0%;left:23%;transform:translate(-50%,-50%)}lib-questionset-editor .sb-loader:after{content:"";width:32px;height:32px;border-radius:50%;border:2px solid;border-color:#ccc #ccc transparent;animation:loader .5s infinite;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}lib-questionset-editor .sb-loader.dimmer{width:100%;height:100%;background:rgba(0,0,0,.8);z-index:9999}lib-questionset-editor .sb-success-loader{position:absolute!important;top:46%!important;left:-12%!important;transform:translate(-46%,-50%)!important}lib-questionset-editor .sb-success-loader:after{width:1.2rem!important;height:1.2rem!important}lib-questionset-editor .pos-relative{position:relative}lib-questionset-editor .sb-circle-ul{list-style-type:disc;padding:0;font-size:.785rem}lib-questionset-editor .sb-circle-ul li{margin:0!important;line-height:1.4}lib-questionset-editor .sb-bg-color-success-0{background:#e1ffdf}lib-questionset-editor .flex-ai-center{align-self:center!important}lib-questionset-editor .sb-br-primary{border:1px dashed #aedbfd!important}lib-questionset-editor .sb-min-h-250{min-height:250px}lib-questionset-editor .z-index-9 .menu{z-index:99999!important}lib-questionset-editor .p-50{padding:10px 0 10px 50px}lib-questionset-editor .h-1{height:1.1em!important}lib-questionset-editor .mn-15{margin:-15px!important}lib-questionset-editor .upload-input-button{position:relative}lib-questionset-editor .upload-input-button input{position:absolute;opacity:0;left:0}lib-questionset-editor .bg-none{background:none}lib-questionset-editor .label-disable{opacity:.3!important;font-weight:500!important}lib-questionset-editor .sb-folder-menu{position:absolute;left:35px;display:flex;justify-content:space-between;width:24%;margin-top:5px}lib-questionset-editor .sb-disable-icon{color:#ccc!important}lib-questionset-editor .sb-w-240px{width:240px}lib-questionset-editor .publish-checklist label,lib-questionset-editor .publish-checklist .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border lib-questionset-editor .publish-checklist ul,lib-questionset-editor .publish-checklist .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .publish-checklist ul{font-size:13px!important;padding:0 1.5rem!important}lib-questionset-editor .sb-keywords input{width:100%}lib-questionset-editor .sb-keywords input::placeholder{display:block!important;width:100%}lib-questionset-editor .sb-keywords .ng2-tags-container{width:inherit!important;display:block!important}lib-questionset-editor .sb-keywords .ng2-tags-container tag{display:inline-flex!important}lib-questionset-editor sb-dynamic-timer .sb-timer-input{width:10rem;font-size:.785rem!important;border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;padding:12px 10px;margin-right:5px;height:44px}lib-questionset-editor sb-dynamic-timer .sb-timer-input:focus-visible{border:1px solid rgba(34,36,38,.15)!important}lib-questionset-editor sb-dynamic-timer .sb-btn-normal{height:42px!important}.sb-collectionTree-fancyTreelist ul{padding:0!important}.sb-collectionTree-fancyTreelist .ui-fancytree{margin-bottom:1rem!important}.sb-collectionTree-fancyTreelist .ui-fancytree:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree ul:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li{padding:0;margin:0 0 1px}.sb-collectionTree-fancyTreelist .ui-fancytree li .highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-ico-c{padding-left:5px!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-expanded{padding:15px 33px;border:1px solid transparent;background-color:#fff}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-active{border:1px solid #d0e0f3;background-color:var(--primary-0);padding:15px 33px;border-top:none}.sb-collectionTree-fancyTreelist .ui-fancytree li:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul{padding-top:1px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li{list-style-type:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-top:2px;float:left;margin-left:6px;font-size:16px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node{padding:6px 6px 8px 5px;margin-left:45px;border:1px solid transparent}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-active,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-focused,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node:hover{border:1px solid #d0e0f3;background-color:var(--primary-0);border-right:0}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.dependent{margin-left:65px}.sb-collectionTree-fancyTreelist .ui-fancytree li:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .sb-fancyTree-icon{color:var(--gray-300)!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down{margin-top:6px;display:block;width:10px;padding-left:2px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right{margin-top:6px;display:block;width:10px;padding-left:6px}.sb-collectionTree-fancyTreelist .ui-fancytree{margin:0;padding:0;list-style-type:none}.sb-fixed-with-whitebg{position:fixed;width:100%;border-top:1px solid #ddd;left:0;right:0;bottom:0;background-color:#fff;z-index:99999;padding:0!important}.sb-fixed-with-whitebg .sb-btn-cover{padding:.5rem;border-right:solid 1px #ccc;width:50%;text-align:center}.sb-fixed-with-whitebg .sb-btn-cover .sb-btn:hover{background:none!important;color:var(--primary-400)}.sb-dotted-dropdown{position:absolute!important;right:6px;padding-left:33px}.sb-dotted-dropdown .menu{right:0!important;left:inherit!important}.sb-dotted-dropdown .menu .item{font-size:.785rem!important}.eight.bg-white{border-left:solid 1px var(--gray-100);padding-bottom:4.5rem!important}.w-25{width:25.1%;max-width:25.1%}#removeNodeIcon{padding-right:24px}.sb-disabled{background:var(--gray-0);border:.0625rem solid var(--gray-0);opacity:.45;pointer-events:none}.hover-none:hover{background:none!important}.bx-none .ui.modal{box-shadow:none!important}.overflow-modal .ui.modal{box-shadow:none}.overflow-modal .sb-tabset-segment{border:none}.sb-bg-lightBlue{background:var(--primary-0)!important}.flex-as-baseline{align-self:baseline!important}div[data-title]:before{position:absolute;right:30%;top:85%;height:25px;width:max-content}.sb-modal-fullscreen .modals.dimmer .ui.scrolling.modal{margin:0 auto!important}.sb-modal-header{display:flex;justify-content:space-between}.one-column-grid{display:grid;grid-template-columns:repeat(1,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.three-column-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.formSection{padding:1.5rem 0}.formSection:first-child{padding:0 0 1.5rem}.multi-select-section-app label,.multi-select-section-app .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .multi-select-section-app ul,.multi-select-section-app lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .multi-select-section-app ul{margin-bottom:.3rem!important;z-index:inherit}.list-border{height:inherit!important;min-height:45px!important}.list-border ul{padding:0 22px 0 0!important;position:inherit!important}.list-border ul span{font-weight:500!important;font-size:.785rem;padding:1.4rem 0!important}.multi-select-container .sb-modal-dropdown-web ul{border:none!important}.sb-textbox,.sb-editor-container .dynamic-form .topic-picker-selector,.topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,select,.sb-textarea,.list-border{border:1px solid rgba(34,36,38,.15)!important;padding:.85rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500!important}.sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}.sb-keywordbox .ng2-tag-input{padding:0}.sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}.sb-keywordbox .ng2-tags-container{margin-top:.2rem}.sb-keywordbox .tag-wrapper,.sb-keywordbox delete-icon svg{height:24px!important;line-height:24px}label,.sb-editor-container .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:500}.multi-select-container .caret-down.disabled+.list-border{cursor:not-allowed;background-color:#fafafa!important}\200b .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#333;padding:0;opacity:1!important;font-weight:500!important;position:inherit!important}.sb-dropdown label,.sb-dropdown .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-dropdown ul,.sb-dropdown lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-dropdown ul{padding:0!important}.sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}.sb-textarea-container label,.sb-textarea-container .sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-textarea-container ul,.sb-textarea-container lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .sb-textarea-container ul{padding:0!important}sb-icon-dropdown{top:10px!important;right:6px!important}.sb-textarea-container,.sb-dropdown{margin:1rem 0!important}.dynamic-form sb-dynamic-checkbox label,.sb-editor-container .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul,lib-questionset-editor .add-to-library .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul{padding-left:1.5rem!important}.dynamic-form sb-dynamic-checkbox label:after,.sb-editor-container .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul:after,.sb-editor-container .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul:after,lib-questionset-editor .add-to-library .dynamic-form sb-dynamic-checkbox .multi-select-container .list-border ul:after,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border sb-dynamic-checkbox ul:after{color:#fff!important;width:1rem!important;height:1rem!important}.sb-textbox[disabled=true],.sb-editor-container .dynamic-form [disabled=true].topic-picker-selector,lib-questionset-editor .add-to-library .dynamic-form [disabled=true].topic-picker-selector,[disabled=true].topic-picker-selector,.sb-textarea[disabled=true],.sb-dropdown-select[disabled],.treepicker-parent div[disabled=true]{opacity:1!important;font-weight:500!important;cursor:not-allowed;background-color:#fafafa!important}lib-meta-form sb-dynamic-form .dynamic-form{min-height:1100px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.fs-8{font-size:.5rem}.fs-10{font-size:.625rem}.fs-12{font-size:.75rem}.fs-14{font-size:.875rem}.fs-16{font-size:1rem}.fs-18{font-size:1.125rem}.fs-20{font-size:1.25rem}.fs-22{font-size:1.375rem}.fs-24{font-size:1.5rem}.fs-26{font-size:1.625rem}.fs-28{font-size:1.75rem}.fs-30{font-size:1.875rem}.fs-36{font-size:2.25rem}[data-title]:hover:before{content:attr(data-title);position:absolute;left:0;top:20px!important;bottom:initial!important;display:inline-block;padding:3px 6px;border-radius:2px;background:#fff;color:#000;font-size:12px;font-family:sans-serif;white-space:normal!important;border:solid 1px #ccc!important;height:auto!important;font-weight:600!important}.q-sb-layout-single:before{content:url(/assets/images/layoutoneicon.svg)}.q-sb-layout-single.active:before,.q-sb-layout-single:hover:before{content:url(/assets/images/layoutoneicon_blue.svg)}.q-sb-layout-two:before{content:url(/assets/images/layouttwoicon.svg)}.q-sb-layout-two.active:before,.q-sb-layout-two:hover:before{content:url(/assets/images/layouttwoicon_blue.svg)}.q-sb-layout-three:before{content:url(/assets/images/layoutthreeicon.svg);top:-2px;position:relative}.q-sb-layout-three.active,.q-sb-layout-three:hover{border-color:var(--primary-400);background-color:#fff;color:var(--primary-400)}.q-sb-layout-three.active:before,.q-sb-layout-three:hover:before{content:url(/assets/images/layoutthreeicon_blue.svg)}.q-sb-layout-imgoption:before{content:url(/assets/images/imageicon.svg)}.q-sb-layout-imgoption.active:before,.q-sb-layout-imgoption:hover:before{content:url(/assets/images/imageicon_blue.svg)}.q-sb-layout-alignleft:before{content:url(/assets/images/leftalignicon.svg)}.q-sb-layout-alignleft.active:before,.q-sb-layout-alignleft:hover:before{content:url(/assets/images/leftalignicon_blue.svg)}.q-sb-layout-aligncenter:before{content:url(/assets/images/middlealignicon.svg)}.q-sb-layout-aligncenter.active:before,.q-sb-layout-aligncenter:hover:before{content:url(/assets/images/middlealignicon_blue.svg)}.q-sb-layout-alignright:before{content:url(/assets/images/rightalignicon.svg)}.q-sb-layout-alignright.active:before,.q-sb-layout-alignright:hover:before{content:url(/assets/images/rightalignicon_blue.svg)}.sb-w-85 div[data-title]:hover:before{left:0%;top:-122%!important;width:256px}.sb-field-group .sb-left-icon-btn.sb-btn-xs{padding:0!important;margin-top:-10px}.optionLabel{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600}table{font-family:arial,sans-serif;width:97%;border-collapse:collapse}table thead tr .width-40{width:40%}table thead tr .width-13{width:13%}table thead tr .width-24{width:24%}table thead tr .width-10{width:10%}table tbody{border-top:15px solid white;font-family:arial,sans-serif}table tbody tr{height:60px;background:#e9e8e8}table tbody tr td input{max-width:37%;box-sizing:border-box;height:43px;border-radius:6px;text-align:center;background:white}table tbody tr td .hidden-input{margin-bottom:10px}table tbody tr td .label{font-size:18px!important;margin-top:5px}table tbody tr .padding-x-25{padding:0 25px}table tbody tr .font-blue{color:#2f2fb0}table tbody tr .font-bold{font-weight:700}.border{border-left:1px solid rgb(126,126,126)}.flex{display:flex;justify-content:center;height:inherit;align-items:center}.hidden-block{display:table-row;background:white!important}.sb-modal-content sb-dynamic-checkbox{margin:0!important}.sb-modal-content .sb-checkbox{padding:0!important;margin:0!important}.sectionTitle{font-size:1rem;font-weight:600;line-height:1.4;padding:7px 0 20px}.formSection{padding:0!important}.display-sectionName .sectionName{display:block}.hidden-sectionName .sectionName,.two-column-grid .sectionName{display:none}.sectionName{font-size:1rem!important;font-weight:600}.d-grid{display:grid;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-2{display:grid;grid-template-columns:auto auto;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-3{display:grid;grid-template-columns:auto auto auto;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-1{display:inline-grid;width:100%;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-2{display:inline-grid;width:50%;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-3{display:inline-grid;width:33.3%;grid-column-gap:1rem;grid-row-gap:1rem}.d-grid-inline-4{display:inline-grid;width:25%;grid-column-gap:1rem;grid-row-gap:1rem}.sb-w-85{width:85%}sui-select{width:100%;border:1px solid rgba(34,36,38,.15);font-size:.8rem;padding:.4rem .2rem;background:#fff}.dropdown.icon{float:right!important}.menu{width:100%}.solution-media__video{width:166px;height:96px}.solution-media__video .overlay-image{width:100%;height:100%;background:rgba(0,0,0,.3);position:absolute;left:0;right:0;cursor:pointer;z-index:1;background-repeat:no-repeat!important}.solution-media__video .overlay-image .play.icon{position:absolute;transform:translate(-50%,-50%);top:50%;left:50%;color:#fff9;font-size:32px;cursor:pointer;height:auto}.solution-media__desc{font-size:12px;font-weight:700;color:#333;max-width:180px;height:96px;display:flex;align-items:flex-end;line-height:normal;line-height:13px}.ckeditor-tool__option,.ckeditor-tool__question{border:1px solid #c4c4c4;border-radius:4px;border-top:0;position:relative;display:flow-root}.ckeditor-tool__solution,.ckeditor-tool__question-readonly,.ckeditor-tool__option-readonly{border:1px solid #c4c4c4;border-radius:4px;margin-bottom:-4px}.ckeditor-tool__label{background-color:#f3f8ff;color:var(--primary-color)!important;font-weight:600;border-top-left-radius:4px;border-top-right-radius:4px}.mcq-checkbox-answer{background:#f2f2f2;padding:8px;display:flex;justify-content:center;align-items:center;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ckeditor-tool__solution .menu .item{font-size:.785rem!important}.solution_video .ckeditor-tool__option{border:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:4px!important}.solution_html .sb-ckeditor .sb-ckeditor-close,.solution_video .sb-ckeditor .sb-ckeditor-close{right:5px;top:-30px;border:0;background:none;min-width:auto;padding:0;color:#999}.sb-ckeditor .sb-ckeditor-close{right:-5px;top:-22px;border:0;background:none;min-width:auto;padding:0;color:#999}.sb-mcq-form .sb-mcq-item:nth-child(4) .sb-ckeditor .ckeditor-tool__option{margin-bottom:0!important}.two-column-grid{display:grid;grid-template-columns:repeat(2,1fr);column-gap:.5rem;border-bottom:solid 1px var(--gray-100)}.two-column-grid:last-child{border-bottom:none}.dynamic-form .sb-search-input::-webkit-input-placeholder{padding-left:1.4rem!important}.dynamic-form .required label:after,.sb-editor-container .dynamic-form .required .multi-select-container .list-border ul:after,.sb-editor-container .dynamic-form .multi-select-container .list-border .required ul:after,lib-questionset-editor .add-to-library .dynamic-form .required .multi-select-container .list-border ul:after,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border .required ul:after{content:"*";margin:-.2em 0 0 .2em;color:#db2828}.list-border{height:inherit!important}.list-border ul{padding:0!important}.list-border ul span{font-weight:500!important;font-size:.785rem}.sb-editor-container{position:relative;z-index:998!important}.sb-editor-container .sb-input:first-child{margin:1rem 0!important}.sb-editor-container .sb-container{width:95%!important}.sb-editor-container .dynamic-form .sb-dropdown-select{padding:11px 8px!important}.sb-editor-container .dynamic-form label,.sb-editor-container .dynamic-form .multi-select-container .list-border ul,.sb-editor-container lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,lib-questionset-editor .add-to-library .sb-editor-container .dynamic-form .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:600;position:relative}.sb-editor-container .dynamic-form label:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before,.sb-editor-container .dynamic-form .multi-select-container .list-border ul:not(input+label):not(.sb-editor-container .dynamic-form .multi-select-container .list-border input+ul):not(lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border input+ul):before{z-index:1!important}.sb-editor-container .dynamic-form .sb-textbox,.sb-editor-container .dynamic-form .topic-picker-selector,.sb-editor-container lib-questionset-editor .add-to-library .dynamic-form .topic-picker-selector,lib-questionset-editor .add-to-library .sb-editor-container .dynamic-form .topic-picker-selector,.sb-editor-container .dynamic-form select,.sb-editor-container .dynamic-form .sb-textarea,.sb-editor-container .dynamic-form .list-border{border:1px solid rgba(34,36,38,.15)!important;padding:12px 8px!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500}.sb-editor-container .dynamic-form .multi-select-container .list-border ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-weight:500!important}.sb-editor-container .dynamic-form .sb-modal-dropdown-web ul{color:#333;padding:0;margin:0!important;opacity:1!important;font-size:12px!important;font-weight:500;border:2px solid #eeeeef}.sb-editor-container .dynamic-form .sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}.sb-editor-container .dynamic-form .sb-keywordbox .ng2-tag-input{padding:0}.sb-editor-container .dynamic-form .sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}.sb-editor-container .dynamic-form .sb-keywordbox .ng2-tags-container{margin-top:.2rem}.sb-editor-container .dynamic-form .sb-keywordbox .tag-wrapper,.sb-editor-container .dynamic-form .sb-keywordbox delete-icon svg{height:24px;line-height:24px}.sb-editor-container .dynamic-form .sb-dropdown label,.sb-editor-container .dynamic-form .sb-dropdown .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-dropdown ul{padding:0}.sb-editor-container .dynamic-form .sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}.sb-editor-container .dynamic-form .sb-textarea-container label,.sb-editor-container .dynamic-form .sb-textarea-container .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border .sb-textarea-container ul{padding:0}.sb-editor-container .dynamic-form .sb-checkbox{padding:0;margin-top:0}.sb-editor-container .dynamic-form sb-icon-dropdown{top:10px!important;right:6px!important}.sb-editor-container .sb-textarea-container,.sb-editor-container .sb-dropdown{margin:1rem 0!important}lib-chat-window,.chat_bot{display:none!important}.h-100{height:100%!important}.sb-required{color:#ff4558;padding-left:2px;position:relative;top:-5px}select[disabled]{opacity:.8!important;font-weight:500!important}.multiselect{position:relative;top:-7px;height:48px;left:7px;font-size:14px;font-weight:400}.treepicker-parent .list-border{height:38px!important;padding:1rem!important;margin-top:15px!important}.options{justify-content:flex-end;margin-right:10px;display:flex;gap:10px}.selected-audio-container{height:100%;border:1px solid #9E9E9E;border-radius:6px;float:left;width:20%;margin-right:15px}.audio-container{height:100px;float:left;width:200px;padding:10px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.cursor-pointer-txt{cursor:pointer}.b-1-100{border:solid 1px #cccccc}.preview-modal .sb-modal-content{height:inherit!important}.potrait-mode .b-1-100{width:480px;margin:auto}.potrait-mode .aspectratio[data-ratio="16:9"]{padding-top:177.7777777778%}.br-2{border-radius:2px}.contentViewerIframeShadow{width:100%;height:100%;border:0}.aspectratio{position:relative;width:100%;height:0}.aspectratio>*{position:absolute;width:100%;height:100%;top:0;left:0}.content-player{z-index:11}.quml-container .container{width:inherit!important}.btn-align{display:flex;flex-direction:row;justify-content:center;align-items:center;flex:1;margin-top:10px}.mt-25{margin-top:25%;text-align:center}.handle-zoom{overflow:hidden;position:relative}lib-questionset-editor .image-viewer__close{line-height:45px!important}.btn-none{background:none!important;border:none!important;padding:0!important;cursor:pointer}.opacity-icon{opacity:.45!important}.slider-align{margin-top:15px}::placeholder{padding:.25rem;opacity:.99;color:#999;font-family:Noto Sans;font-size:12px;font-weight:700}.sb-input{margin:1rem 0}label,lib-questionset-editor .add-to-library .dynamic-form .multi-select-container .list-border ul,.sb-editor-container .dynamic-form .multi-select-container .list-border ul{display:block;font-size:1rem;margin:0}.flex-container{display:flex;margin-top:15px}.textbox{width:90%;border:1px solid rgba(34,36,38,.15)!important;box-sizing:border-box;background-color:#fff;margin-right:40px;height:45px;border-radius:5px;font-size:13px;padding:12px}.common-contribution-card{box-sizing:border-box;border:.5px solid rgba(123,134,244,.39);border-radius:4px;background-color:#fff;box-shadow:none;width:150px}.common-contribution-card .content img{width:64px;height:64px}.common-contribution-card .content .content-title{font-size:12px;vertical-align:middle;line-height:16px}.common-contribution-card .content .icon.check{display:none;height:18px;position:absolute;right:8px;top:8px;margin:0;width:20px;color:#00c786;font-size:20px}.common-contribution-card:hover .content .icon.check,.common-contribution-card.active .content .icon.check{display:block}.common-contribution-card:hover,.common-contribution-card.active{cursor:pointer;z-index:5;background:white;transform:translateY(-3px);box-shadow:0 2px 8px #7b86f44f;border:.5px solid rgba(208,208,208,.48)}.common-contribution-card.active .content-title{font-weight:700}.fs-16{font-size:16px!important}.tarnslation{margin-top:15px;margin-bottom:15px}.mt-15{margin-top:15px!important;margin-bottom:5px}.label-align{font-size:15px;font-weight:500}.q-sb-layout-single:before{content:url(/assets/images/layoutoneicon.svg)}.q-sb-layout-single.active,.q-sb-layout-single:hover{border-color:var(--primary-400);background-color:#fff;color:var(--primary-400)}.q-sb-layout-single.active:before,.q-sb-layout-single:hover:before{content:url(/assets/images/layoutoneicon_blue.svg)}.q-sb-layout-two:before{content:url(/assets/images/layouttwoicon.svg)}.q-sb-layout-two.active,.q-sb-layout-two:hover{border-color:var(--primary-400);background-color:#fff;color:var(--primary-400)}.q-sb-layout-two.active:before,.q-sb-layout-two:hover:before{content:url(/assets/images/layouttwoicon_blue.svg)}.w-49{width:49%;max-width:49%}.right{float:right}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;transition:transform .6s ease;backface-visibility:hidden;perspective:1000px}@media screen and (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translate(0)}@supports (transform-style: preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateZ(0)}}.carousel-item-next,.active.carousel-item-right{transform:translate(100%)}@supports (transform-style: preserve-3d){.carousel-item-next,.active.carousel-item-right{transform:translate3d(100%,0,0)}}.carousel-item-prev,.active.carousel-item-left{transform:translate(-100%)}@supports (transform-style: preserve-3d){.carousel-item-prev,.active.carousel-item-left{transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translate(0)}@supports (transform-style: preserve-3d){.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translateZ(0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#ffffff80}.carousel-indicators li:before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}:root{--font-stack-en: "Noto Sans", "Noto Sans Devanagari", "Noto Sans Tamil", "Noto Sans Bengali", "Noto Sans Malayalam", "Noto Sans Gurmukhi", "Noto Sans Gujarati", "Noto Sans Telugu", "Noto Sans Kannada", "Noto Sans Oriya", "Noto Nastaliq Urdu", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-stack-hi: "Noto Sans Devanagari", "Noto Sans", "Noto Sans Tamil", "Noto Sans Bengali", "Noto Sans Malayalam", "Noto Sans Gurmukhi", "Noto Sans Gujarati", "Noto Sans Telugu", "Noto Sans Kannada", "Noto Sans Oriya", "Noto Nastaliq Urdu", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-stack-ur: "Noto Sans", "Noto Nastaliq Urdu", "Noto Sans Devanagari", "Noto Sans Tamil", "Noto Sans Bengali", "Noto Sans Malayalam", "Noto Sans Gurmukhi", "Noto Sans Gujarati", "Noto Sans Telugu", "Noto Sans Kannada", "Noto Sans Oriya", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;--font-default-size: .875rem;--font-size-base: var(--font-default-size);--font-weight-light: 300;--font-weight-normal: 400;--font-weight-bold: 700;--font-weight-base: var(--font-weight-normal);--line-height-value: 1.61803398875;--line-height-base: calc(var(--font-size-base) * var(--line-height-value));--h1-font-size: 2rem;--h2-font-size: 1.75rem;--h3-font-size: 1.5rem;--h4-font-size: 1.2rem;--h5-font-size: 1rem;--h6-font-size: var(--font-size-base);--font-size-lg: var(--h4-font-size);--font-size-md: var(--h5-font-size);--font-size-normal: var(--font-size-base);--font-size-sm: .75rem;--font-size-xs: .625rem;--p-font-size: var(--font-size-base);--base-font-size: .875rem;--base-block-space: .5rem;--icon-svg-xxs: .75rem;--icon-svg-xs: calc(var(--base-block-space) * 2);--icon-svg-sm: calc(var(--base-block-space) * 3);--icon-svg-md: calc(var(--base-block-space) * 4);--icon-svg-lg: calc(var(--base-block-space) * 5);--icon-svg-xl: calc(var(--base-block-space) * 6)}:root{--blue: #024f9d;--green: #008840;--orange: #e55a28;--red: #ff4558;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--yellow: #ffc107;--teal: #20c997;--cyan: #17a2b8;--black: #000000;--white: #ffffff;--accessibility-red: #A30010;--accessibility-red2: #A30010;--gray-hs: 0, 0%;--gray: hsl(var(--gray-hs), 20%);--gray-0: hsl(var(--gray-hs), 95%);--gray-100: hsl(var(--gray-hs), 80%);--gray-200: hsl(var(--gray-hs), 60%);--gray-300: hsl(var(--gray-hs), 59%);--gray-400: hsl(var(--gray-hs), 40%);--gray-800: var(--gray);--primary-color: #024f9d;--secondary-color: #008840;--tertiary-color: #e55a28;--primary-0: #f3f7fa;--primary-100: #edf4f9;--primary-200: #80a7ce;--primary-250: #d3e7f4;--primary-300: #7ab4ee;--primary-400: var(--primary-color);--primary-600: #005391;--primary-800: #002e50;--primary-color-contrast: #fff;--primary-color-contrast-rgb: rgb(255, 255, 255);--primary-color-shade: var(--primary-800);--primary-color-tint: var(--primary-200);--secondary-0: #e1ffdf;--secondary-100: #00c786;--secondary-200: #07bc81;--secondary-400: var(--secondary-color);--tertiary-0: #feedd7;--tertiary-100: #ffa11d;--tertiary-400: var(--tertiary-color);--red-0: #fbccd1;--red-100: #ff6979;--red-400: var(--red);--info-color: var(--blue);--success-color: var(--green);--warning-color: var(--orange);--danger-color: var(--red);--body-background-color: var(--primary-0);--default-text-color: var(--gray-800);--bg-body: var(--primary-0);--body-color: var(--gray-800);--alpha0: 0;--alpha25: .25;--alpha50: .5;--alpha75: .75;--rc-00abc7: #00abc7;--rc-33B6CC: #33B6CC;--rc-2dadc2: #2dadc2;--rc-0fbad6: #0fbad6;--rc-96C8DA: #96C8DA;--rc-add8e6: #add8e6;--rc-afd9e7: #afd9e7;--rc-66c7f4: #66c7f4;--rc-289fd9: #289fd9;--rc-88B7E6: #88B7E6;--rc-007AFF: #007AFF;--rc-7b86f4: #7b86f4;--rc-0076FE: #0076FE;--rc-2361ff: #2361ff;--rc-1B4785: #1B4785;--rc-196DAB: #196DAB;--rc-5c8db7: #5c8db7;--rc-91aecc: #91aecc;--rc-80A7CE: #80A7CE;--rc-2972a4: #2972a4;--rc-2f4272: #2f4272;--rc-042D55: #042D55;--rc-1b1c1d: #1b1c1d;--rc-252525: #252525;--rc-4a4a4a: #4a4a4a;--rc-565c70: #565c70;--rc-6D7278: #6D7278;--rc-424242: #424242;--rc-a9a9a9: #a9a9a9;--rc-aaaaaa: #aaaaaa;--rc-bbbbbb: #bbbbbb;--rc-979797: #979797;--rc-9F9F9F: #9F9F9F;--rc-9b9b9b: #9b9b9b;--rc-00BD7F: #00BD7F;--rc-2ca58d: #2ca58d;--rc-009D53: #009D53;--rc-bfe1cf: #bfe1cf;--rc-E5EDF5: #E5EDF5;--rc-f5f5f5: #f5f5f5;--rc-f9f9f9: #f9f9f9;--rc-fdfdfd: #fdfdfd;--rc-dedede: #dedede;--rc-F5F9FC: #F5F9FC;--rc-c4c4c4: #c4c4c4;--rc-d8d8d8: #d8d8d8;--rc-e9e5e5: #e9e5e5;--rc-dddddd: #dddddd;--rc-e9e8d9: #e9e8d9;--rc-d0d0d0: #d0d0d0;--rc-d4d3d3: #d4d3d3;--rc-FAFAFA: #FAFAFA;--rc-F3F8FF: #F3F8FF;--rc-e0e1e2: #e0e1e2;--rc-bdbdbd: #bdbdbd;--rc-cecece: #cecece;--rc-E0F1FD: #E0F1FD;--rc-C8D6EA: #C8D6EA;--rc-e2e3e5: #e2e3e5;--rc-BCBEC0: #BCBEC0;--rc-d4d4d5: #d4d4d5;--rc-d4d8da: #d4d8da;--rc-e0e0e0: #e0e0e0;--rc-d8dee2: #d8dee2;--rc-D9E4F2: #D9E4F2;--rc-fff6f6: #fff6f6;--rc-f7f7f7: #f7f7f7;--rc-eeeeee: #eeeeee;--rc-dededf: #dededf;--rc-E0EFFF: #E0EFFF;--rc-c2c2c2: #c2c2c2;--rc-e5e5e5: #e5e5e5;--rc-c3c3c3: #c3c3c3;--rc-F7FFF5: #F7FFF5;--rc-D3DED1: #D3DED1;--rc-EBF6E0: #EBF6E0;--rc-F6F6F6: #F6F6F6;--rc-f7ffec: #f7ffec;--rc-d2ddc7: #d2ddc7;--rc-866A6A: #866a6a;--rc-7c7b7b: #7c7b7b;--rc-DECACA: #DECACA;--rc-FCE6E6: #FCE6E6;--rc-fcf2d6: #fcf2d6;--rc-F5D7D7: #F5D7D7;--rc-ffe1e1: #ffe1e1;--rc-e6c8c8: #e6c8c8;--rc-ffb300: #ffb300;--rc-e68900: #e68900;--rc-E08A20: #E08A20;--rc-DD680F: #DD680F;--rc-f56b56: #f56b56;--rc-dc523d: #dc523d;--rc-e65c47: #e65c47;--rc-rgba-black: 0, 0, 0;--rc-rgba-white: 255, 255, 255;--rc-rgba-gray: 51, 51, 51;--rc-rgba-primary: 2, 79, 157;--rc-rgba-primary-300: 41, 114, 164;--rc-rgba-gray-300: 34, 36, 38;--rc-rgba-866a6a: 134, 106, 106;--rc-rgba-d0d0d0: 208, 208, 208;--rc-rgba-7b86f4: 123, 134, 244;--rc-rgba-C8D6EA: 200, 214, 234;--sbt-box-shadow-black: rgba(0, 0, 0, .1);--sbt-box-shadow-6px: .375rem .375rem .125rem 0 var(--sbt-box-shadow-black);--sbt-box-shadow-3px: .1875rem .1875rem .125rem 0 var(--sbt-box-shadow-black);--sbt-box-shadow: rgba(128, 167, 206, 1);--lazyload-bg: #f6f7f8;--grey-nuance-lighter: #eeeeee;--grey-nuance-darker: #dddddd;--fade-grey: #e8e8e8}[class^=sb-icon-],[class*=sb-icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;font-size:inherit;text-transform:none;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sb-icon-preview:before{content:"\e909"}.sb-icon-refresh:before{content:"\e90c"}.sb-icon-reviewer:before{content:"\e90a"}.sb-icon-folder:before{content:"\e902"}.sb-icon-comment:before{content:"\e908"}.sb-icon-send:before{content:"\e90b"}.sb-icon-book:before{content:"\e900"}.sb-icon-content:before{content:"\e901"}.sb-icon-collection:before{content:"\e903"}.sb-icon-doc:before{content:"\e904"}.sb-icon-mp3:before{content:"\e905"}.sb-icon-open-book:before{content:"\e906"}.sb-icon-video:before{content:"\e907"}.sb-lock-icon{cursor:pointer}[class*=sb-icon-primary]{background-color:var(--primary-color)}[class*=sb-icon-secondary]{background-color:var(--secondary-color)}[class*=sb-icon-warning]{background-color:var(--tertiary-color)}[class*=sb-icon-error]{background-color:var(--red)}.info-icon{background-color:var(--gray-400);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:50% 50%;mask-position:50% 50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;width:1rem;height:1rem;margin-left:.25rem;display:inline-block;vertical-align:bottom}.icon-arrow-round-down{transform:rotate(90deg)}.icon-svg{position:relative;top:.0625rem;display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;opacity:1}.icon-svg svg.icon{width:100%;height:inherit}.icon-svg--xxs{width:var(--icon-svg-xxs);height:var(--icon-svg-xxs)}.icon-svg--xs{width:var(--icon-svg-xs);height:var(--icon-svg-xs)}.icon-svg--sm{width:var(--icon-svg-sm);height:var(--icon-svg-sm)}.icon-svg--md{width:var(--icon-svg-md);height:var(--icon-svg-md)}.icon-svg--lg{width:var(--icon-svg-lg);height:var(--icon-svg-lg)}.icon-svg--xl{width:var(--icon-svg-xl);height:var(--icon-svg-xl)}.icon-svg--white{fill:var(--white)}.icon-svg--primary{fill:var(--primary-color)}.icon-svg--secondary{fill:var(--secondary-color)}.icon-svg--tertiary{fill:var(--tertiary-color)}.icon-svg--red{fill:var(--red-400)}.icon-svg--gray{fill:var(--gray-800)}*,*:before,*:after{box-sizing:border-box}html{font-family:inherit;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:var(--font-stack-en);font-size:1rem;font-weight:400;line-height:1.5;color:var(--gray-800);text-align:left;background:#E5EDF5}[tabindex="-1"]:focus{outline:none!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}a{color:theme-color("primary");text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:0px dotted;outline:0px auto transparent}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=search]{outline-offset:-2px;-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}[hidden]{display:none!important}.w-15{width:15%;max-width:15%}.w-10{width:10%;max-width:10%}.w-5{width:5%;max-width:5%}h1,.sb-h1{font-size:var(--h1-font-size);line-height:calc(var(--h1-font-size) * var(--line-height-value));margin:0;padding:0}h2,.sb-h2{font-size:var(--h2-font-size);line-height:calc(var(--h2-font-size) * var(--line-height-value));margin:0;padding:0}h3,.sb-h3{font-size:var(--h3-font-size);line-height:calc(var(--h3-font-size) * var(--line-height-value));margin:0;padding:0}h4,.sb-h4{font-size:var(--h4-font-size);line-height:calc(var(--h4-font-size) * var(--line-height-value));margin:0;padding:0}h5,.sb-h5{font-size:var(--h5-font-size);line-height:calc(var(--h5-font-size) * var(--line-height-value));margin:0;padding:0}h6,.sb-h6{font-size:var(--h6-font-size);line-height:calc(var(--h6-font-size) * var(--line-height-value));margin:0;padding:0}p,.sb-para{font-size:var(--p-font-size);line-height:calc(var(--p-font-size) * var(--line-height-value))}.lineHeight-normal{line-height:normal!important}.b-0{border:0px solid var(--gray-400)!important}.bl-0{border-left:none!important}.br-0{border-right:none!important}.br-4{border-radius:4px!important}.bt-0{border-top:none!important}.bb-0{border-bottom:none!important}.b-1{border:1px solid var(--gray-400)!important}.b-2{border:2px solid var(--gray-400)!important}.b-4{border:4px solid var(--gray-400)!important}.b-8{border:8px solid var(--gray-400)!important}.bs-0{box-shadow:none!important}.bs-1{box-shadow:0 3px 6px #0000004a!important}.bs-1:hover{box-shadow:0 4px 9px #0000004a!important}.bs-2{box-shadow:0 0 20px #0000004a!important}.sb-btn{white-space:nowrap;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;outline:0;display:inline-block;border:.0625rem solid;cursor:pointer;min-width:4rem;border-radius:.125rem;position:relative;line-height:1;text-transform:inherit;text-decoration:none}.sb-btn-gray:hover,.sb-btn-gray:active,.sb-btn-gray.active{background-color:var(--gray-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-primary:hover,.sb-btn-primary:active,.sb-btn-primary.active{background-color:var(--primary-800);border:.0625rem solid transparent;color:var(--white)}.sb-btn-secondary:hover,.sb-btn-secondary:active,.sb-btn-secondary.active{background-color:var(--secondary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-tertiary:hover,.sb-btn-tertiary:active,.sb-btn-tertiary.active{background-color:var(--tertiary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-red:hover,.sb-btn-red:active,.sb-btn-red.active{background-color:var(--red-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-info:hover,.sb-btn-info:active,.sb-btn-info.active{background-color:var(--primary-800);border:.0625rem solid transparent;color:var(--white)}.sb-btn-success:hover,.sb-btn-success:active,.sb-btn-success.active{background-color:var(--secondary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-warning:hover,.sb-btn-warning:active,.sb-btn-warning.active{background-color:var(--tertiary-400);border:.0625rem solid transparent;color:var(--white)}.sb-btn-error:hover,.sb-btn-error:active,.sb-btn-error.active{background-color:var(--red-400);border:.0625rem solid transparent;color:var(--white)}.ui.toggle.checkbox.sb-toggle{min-height:1.5rem;position:relative;display:inline-block;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;min-height:1rem;font-size:1rem;min-width:1rem}.ui.toggle.checkbox.sb-toggle input{width:4rem;height:1.5rem;cursor:pointer;position:absolute;top:0;left:0;opacity:0;outline:0;z-index:3}.ui.toggle.checkbox.sb-toggle input:focus:checked~label:before,.ui.toggle.checkbox.sb-toggle input:focus:checked~.box:before,.ui.toggle.checkbox.sb-toggle input:checked~.box:before,.ui.toggle.checkbox.sb-toggle input:checked~label:before{background-color:var(--primary-color)!important}.ui.toggle.checkbox.sb-toggle label{min-height:1rem;padding-left:4.5rem;color:rgba(var(--rc-rgba-black),.87);position:relative;display:block;outline:0;font-size:1rem}.ui.toggle.checkbox.sb-toggle label:before{display:block;position:absolute;content:"";z-index:1;transform:none;border:none;top:.0625rem;left:0;background:rgba(var(--rc-rgba-black),.05);box-shadow:none;width:4rem;height:1.5rem;border-radius:500rem;border-color:var(--primary-color);background-color:var(--primary-color);color:var(--white);transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease}.ui.toggle.checkbox.sb-toggle label:after{background:var(--white) linear-gradient(transparent,rgba(var(--rc-rgba-black),.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;width:1.25rem;height:1.25rem;top:.1875rem;left:0;border-radius:500rem;transition:background .3s ease,left .3s ease}.ui.toggle.checkbox.sb-toggle input~label:after{left:.1rem;box-shadow:none}.ui.toggle.checkbox.sb-toggle input:checked~label:after{left:2.5625rem;box-shadow:none}.btn-group{border:.0625rem solid var(--gray-100);display:inline-flex;flex-direction:row;font-size:0;vertical-align:baseline}.btn-group .sb-btn{background:var(--white);border-left:.0625rem solid var(--gray-100);flex:1 0 auto;border-radius:0;margin:0;border:0;color:var(--primary-400);min-width:2.5rem}.sb-btn-grow{background:none;border:0px solid var(--white);font-size:.75rem;color:var(--white);cursor:pointer;transition:all .2s ease-in-out}.sb-btn-grow:disabled{opacity:.4;cursor:default}.sb-btn-grow:hover:not([disabled]){background:none;transform:scale(1.15)}.sb-btn-primary svg.icon-svg--primary{fill:var(--primary-color-contrast)}/*! * # Semantic UI 2.2.13 - Reset * http://github.com/semantic-org/semantic-ui/ * diff --git a/web-component-examples/vanilla-js/sunbird-questionset-editor.js b/web-component-examples/vanilla-js/sunbird-questionset-editor.js index 489ec704..3ecce7dc 100644 --- a/web-component-examples/vanilla-js/sunbird-questionset-editor.js +++ b/web-component-examples/vanilla-js/sunbird-questionset-editor.js @@ -3645,4 +3645,4 @@ 1950);t( /*! reflect-metadata */ 7550),n.environment.production&&(0,r.enableProdMode)(),e.platformBrowser().bootstrapModule(d.AppModule).catch(s=>console.error(s))}},R=>{R.O(0,["vendor"],()=>R(R.s=8334)),R.O()}]),function(R,C){"function"==typeof define&&define.amd?define([],C()):"object"==typeof exports?module.exports=C():R.iziToast=C()}(typeof global<"u"?global:window||this.window||this.global,function(R){"use strict";var C={},t="iziToast",e=(document.querySelector("body"),!!/Mobi/.test(navigator.userAgent)),r=/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),d=typeof InstallTrigger<"u",n="ontouchstart"in document.documentElement,l=["bottomRight","bottomLeft","bottomCenter","topRight","topLeft","topCenter","center"],s=568,p={};C.children={};var u={id:null,class:"",title:"",titleColor:"",titleSize:"",titleLineHeight:"",message:"",messageColor:"",messageSize:"",messageLineHeight:"",backgroundColor:"",theme:"light",color:"",icon:"",iconText:"",iconColor:"",image:"",imageWidth:50,maxWidth:null,zindex:null,layout:1,balloon:!1,close:!0,closeOnEscape:!1,closeOnClick:!1,rtl:!1,position:"bottomRight",target:"",targetFirst:!0,toastOnce:!1,timeout:5e3,animateInside:!0,drag:!0,pauseOnHover:!0,resetOnHover:!1,progressBar:!0,progressBarColor:"",progressBarEasing:"linear",overlay:!1,overlayClose:!1,overlayColor:"rgba(0, 0, 0, 0.6)",transitionIn:"fadeInUp",transitionOut:"fadeOut",transitionInMobile:"fadeInUp",transitionOutMobile:"fadeOutDown",buttons:{},inputs:{},onOpening:function(){},onOpened:function(){},onClosing:function(){},onClosed:function(){}};if("remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}),"function"!=typeof window.CustomEvent){var g=function(M,w){w=w||{bubbles:!1,cancelable:!1,detail:void 0};var S=document.createEvent("CustomEvent");return S.initCustomEvent(M,w.bubbles,w.cancelable,w.detail),S};g.prototype=window.Event.prototype,window.CustomEvent=g}var f=function(M,w,S){if("[object Object]"===Object.prototype.toString.call(M))for(var c in M)Object.prototype.hasOwnProperty.call(M,c)&&w.call(S,M[c],c,M);else if(M)for(var B=0,E=M.length;E>B;B++)w.call(S,M[B],B,M)},y=function(M,w){var S={};return f(M,function(c,B){S[B]=M[B]}),f(w,function(c,B){S[B]=w[B]}),S},v=function(M){var w=document.createDocumentFragment(),S=document.createElement("div");for(S.innerHTML=M;S.firstChild;)w.appendChild(S.firstChild);return w},D={move:function(M,w,S,c){var B,E=.3,h=180;0!==c&&(M.classList.add(t+"-dragged"),M.style.transform="translateX("+c+"px)",c>0?E>(B=(h-c)/h)&&w.hide(y(S,{transitionOut:"fadeOutRight",transitionOutMobile:"fadeOutRight"}),M,"drag"):E>(B=(h+c)/h)&&w.hide(y(S,{transitionOut:"fadeOutLeft",transitionOutMobile:"fadeOutLeft"}),M,"drag"),M.style.opacity=B,E>B&&((r||d)&&(M.style.left=c+"px"),M.parentNode.style.opacity=E,this.stopMoving(M,null)))},startMoving:function(M,w,S,c){c=c||window.event;var B=n?c.touches[0].clientX:c.clientX,E=M.style.transform.replace("px)",""),h=B-(E=E.replace("translateX(",""));M.classList.remove(S.transitionIn),M.classList.remove(S.transitionInMobile),M.style.transition="",n?document.ontouchmove=function(b){b.preventDefault(),b=b||window.event,D.move(M,w,S,b.touches[0].clientX-h)}:document.onmousemove=function(b){b.preventDefault(),b=b||window.event,D.move(M,w,S,b.clientX-h)}},stopMoving:function(M,w){n?document.ontouchmove=function(){}:document.onmousemove=function(){},M.style.opacity="",M.style.transform="",M.classList.contains(t+"-dragged")&&(M.classList.remove(t+"-dragged"),M.style.transition="transform 0.4s ease, opacity 0.4s ease",setTimeout(function(){M.style.transition=""},400))}};return C.setSetting=function(M,w,S){C.children[M][w]=S},C.getSetting=function(M,w){return C.children[M][w]},C.destroy=function(){f(document.querySelectorAll("."+t+"-wrapper"),function(M,w){M.remove()}),f(document.querySelectorAll("."+t),function(M,w){M.remove()}),document.removeEventListener(t+"-opened",{},!1),document.removeEventListener(t+"-opening",{},!1),document.removeEventListener(t+"-closing",{},!1),document.removeEventListener(t+"-closed",{},!1),document.removeEventListener("keyup",{},!1),p={}},C.settings=function(M){C.destroy(),p=M,u=y(u,M||{})},f({info:{color:"blue",icon:"ico-info"},success:{color:"green",icon:"ico-success"},warning:{color:"orange",icon:"ico-warning"},error:{color:"red",icon:"ico-error"},question:{color:"yellow",icon:"ico-question"}},function(M,w){C[w]=function(S){var c=y(p,S||{});c=y(M,c||{}),this.show(c)}}),C.progress=function(M,w,S){var c=this,B=w.getAttribute("data-iziToast-ref"),E=y(this.children[B],M||{}),h=w.querySelector("."+t+"-progressbar div");return{start:function(){typeof E.time.REMAINING>"u"&&(w.classList.remove(t+"-reseted"),null!==h&&(h.style.transition="width "+E.timeout+"ms "+E.progressBarEasing,h.style.width="0%"),E.time.START=(new Date).getTime(),E.time.END=E.time.START+E.timeout,E.time.TIMER=setTimeout(function(){clearTimeout(E.time.TIMER),w.classList.contains(t+"-closing")||(c.hide(E,w,"timeout"),"function"==typeof S&&S.apply(c))},E.timeout),c.setSetting(B,"time",E.time))},pause:function(){if(typeof E.time.START<"u"&&!w.classList.contains(t+"-paused")&&!w.classList.contains(t+"-reseted")){if(w.classList.add(t+"-paused"),E.time.REMAINING=E.time.END-(new Date).getTime(),clearTimeout(E.time.TIMER),c.setSetting(B,"time",E.time),null!==h){var T=window.getComputedStyle(h).getPropertyValue("width");h.style.transition="none",h.style.width=T}"function"==typeof S&&setTimeout(function(){S.apply(c)},10)}},resume:function(){typeof E.time.REMAINING<"u"?(w.classList.remove(t+"-paused"),null!==h&&(h.style.transition="width "+E.time.REMAINING+"ms "+E.progressBarEasing,h.style.width="0%"),E.time.END=(new Date).getTime()+E.time.REMAINING,E.time.TIMER=setTimeout(function(){clearTimeout(E.time.TIMER),w.classList.contains(t+"-closing")||(c.hide(E,w,"timeout"),"function"==typeof S&&S.apply(c))},E.time.REMAINING),c.setSetting(B,"time",E.time)):this.start()},reset:function(){clearTimeout(E.time.TIMER),delete E.time.REMAINING,c.setSetting(B,"time",E.time),w.classList.add(t+"-reseted"),w.classList.remove(t+"-paused"),null!==h&&(h.style.transition="none",h.style.width="100%"),"function"==typeof S&&setTimeout(function(){S.apply(c)},10)}}},C.hide=function(M,w,S){var c=this,B=y(this.children[w.getAttribute("data-iziToast-ref")],M||{});B.closedBy=S||null,delete B.time.REMAINING,"object"!=typeof w&&(w=document.querySelector(w)),w.classList.add(t+"-closing"),function(){var b=document.querySelector("."+t+"-overlay");if(null!==b){var T=b.getAttribute("data-iziToast-ref"),I=(T=T.split(",")).indexOf(String(B.ref));-1!==I&&T.splice(I,1),b.setAttribute("data-iziToast-ref",T.join()),0===T.length&&(b.classList.remove("fadeIn"),b.classList.add("fadeOut"),setTimeout(function(){b.remove()},700))}}(),(B.transitionIn||B.transitionInMobile)&&(w.classList.remove(B.transitionIn),w.classList.remove(B.transitionInMobile)),e||window.innerWidth<=s?B.transitionOutMobile&&w.classList.add(B.transitionOutMobile):B.transitionOut&&w.classList.add(B.transitionOut),w.parentNode.style.height=w.parentNode.offsetHeight+"px",w.style.pointerEvents="none",(!e||window.innerWidth>s)&&(w.parentNode.style.transitionDelay="0.2s");try{var h=new CustomEvent(t+"-closing",{detail:B,bubbles:!0,cancelable:!0});document.dispatchEvent(h)}catch(b){console.warn(b)}setTimeout(function(){w.parentNode.style.height="0px",w.parentNode.style.overflow="",setTimeout(function(){delete c.children[B.ref],w.parentNode.remove();try{var b=new CustomEvent(t+"-closed",{detail:B,bubbles:!0,cancelable:!0});document.dispatchEvent(b)}catch(T){console.warn(T)}typeof B.onClosed<"u"&&B.onClosed.apply(null,[B,w,S])},1e3)},200),typeof B.onClosing<"u"&&B.onClosing.apply(null,[B,w,S])},C.show=function(M){var w=this,S=y(p,M||{});if((S=y(u,S)).time={},S.toastOnce&&S.id&&document.querySelectorAll("."+t+"#"+S.id).length>0)return!1;S.ref=(new Date).getTime()+Math.floor(1e7*Math.random()+1),C.children[S.ref]=S;var B,c={body:document.querySelector("body"),overlay:document.createElement("div"),toast:document.createElement("div"),toastBody:document.createElement("div"),toastTexts:document.createElement("div"),toastCapsule:document.createElement("div"),icon:document.createElement("i"),cover:document.createElement("div"),buttons:document.createElement("div"),inputs:document.createElement("div"),wrapper:null};c.toast.setAttribute("data-iziToast-ref",S.ref),c.toast.appendChild(c.toastBody),c.toastCapsule.appendChild(c.toast),function(){if(c.toast.classList.add(t),c.toast.classList.add(t+"-opening"),c.toastCapsule.classList.add(t+"-capsule"),c.toastBody.classList.add(t+"-body"),c.toastTexts.classList.add(t+"-texts"),e||window.innerWidth<=s?S.transitionInMobile&&c.toast.classList.add(S.transitionInMobile):S.transitionIn&&c.toast.classList.add(S.transitionIn),S.class){var h=S.class.split(" ");f(h,function(b,T){c.toast.classList.add(b)})}S.id&&(c.toast.id=S.id),S.rtl&&(c.toast.classList.add(t+"-rtl"),c.toast.setAttribute("dir","rtl")),S.layout>1&&c.toast.classList.add(t+"-layout"+S.layout),S.balloon&&c.toast.classList.add(t+"-balloon"),S.maxWidth&&(c.toast.style.maxWidth=isNaN(S.maxWidth)?S.maxWidth:S.maxWidth+"px"),""===S.theme&&"light"===S.theme||c.toast.classList.add(t+"-theme-"+S.theme),S.color&&(function(M){return"#"==M.substring(0,1)||"rgb"==M.substring(0,3)||"hsl"==M.substring(0,3)}(S.color)?c.toast.style.background=S.color:c.toast.classList.add(t+"-color-"+S.color)),S.backgroundColor&&(c.toast.style.background=S.backgroundColor,S.balloon&&(c.toast.style.borderColor=S.backgroundColor))}(),S.image&&(c.cover.classList.add(t+"-cover"),c.cover.style.width=S.imageWidth+"px",c.cover.style.backgroundImage=function(M){try{return btoa(atob(M))==M}catch{return!1}}(S.image.replace(/ /g,""))?"url(data:image/png;base64,"+S.image.replace(/ /g,"")+")":"url("+S.image+")",S.rtl?c.toastBody.style.marginRight=S.imageWidth+10+"px":c.toastBody.style.marginLeft=S.imageWidth+10+"px",c.toast.appendChild(c.cover)),S.close?(c.buttonClose=document.createElement("button"),c.buttonClose.classList.add(t+"-close"),c.buttonClose.addEventListener("click",function(h){w.hide(S,c.toast,"button")}),c.toast.appendChild(c.buttonClose)):S.rtl?c.toast.style.paddingLeft="18px":c.toast.style.paddingRight="18px",S.progressBar&&(c.progressBar=document.createElement("div"),c.progressBarDiv=document.createElement("div"),c.progressBar.classList.add(t+"-progressbar"),c.progressBarDiv.style.background=S.progressBarColor,c.progressBar.appendChild(c.progressBarDiv),c.toast.appendChild(c.progressBar)),S.timeout&&(S.pauseOnHover&&!S.resetOnHover&&(c.toast.addEventListener("mouseenter",function(h){w.progress(S,c.toast).pause()}),c.toast.addEventListener("mouseleave",function(h){w.progress(S,c.toast).resume()})),S.resetOnHover&&(c.toast.addEventListener("mouseenter",function(h){w.progress(S,c.toast).reset()}),c.toast.addEventListener("mouseleave",function(h){w.progress(S,c.toast).start()}))),S.icon&&(c.icon.setAttribute("class",t+"-icon "+S.icon),S.iconText&&c.icon.appendChild(document.createTextNode(S.iconText)),S.rtl?c.toastBody.style.paddingRight="33px":c.toastBody.style.paddingLeft="33px",S.iconColor&&(c.icon.style.color=S.iconColor),c.toastBody.appendChild(c.icon)),S.title.length>0&&(c.strong=document.createElement("strong"),c.strong.classList.add(t+"-title"),c.strong.appendChild(v(S.title)),c.toastTexts.appendChild(c.strong),S.titleColor&&(c.strong.style.color=S.titleColor),S.titleSize&&(c.strong.style.fontSize=isNaN(S.titleSize)?S.titleSize:S.titleSize+"px"),S.titleLineHeight&&(c.strong.style.lineHeight=isNaN(S.titleSize)?S.titleLineHeight:S.titleLineHeight+"px")),S.message.length>0&&(c.p=document.createElement("p"),c.p.classList.add(t+"-message"),c.p.appendChild(v(S.message)),c.toastTexts.appendChild(c.p),S.messageColor&&(c.p.style.color=S.messageColor),S.messageSize&&(c.p.style.fontSize=isNaN(S.titleSize)?S.messageSize:S.messageSize+"px"),S.messageLineHeight&&(c.p.style.lineHeight=isNaN(S.titleSize)?S.messageLineHeight:S.messageLineHeight+"px")),S.title.length>0&&S.message.length>0&&(S.rtl?c.strong.style.marginLeft="10px":2===S.layout||S.rtl||(c.strong.style.marginRight="10px")),c.toastBody.appendChild(c.toastTexts),S.inputs.length>0&&(c.inputs.classList.add(t+"-inputs"),f(S.inputs,function(h,b){c.inputs.appendChild(v(h[0])),(B=c.inputs.childNodes)[b].classList.add(t+"-inputs-child"),h[3]&&setTimeout(function(){B[b].focus()},300),B[b].addEventListener(h[1],function(T){return(0,h[2])(w,c.toast,this,T)})}),c.toastBody.appendChild(c.inputs)),S.buttons.length>0&&(c.buttons.classList.add(t+"-buttons"),f(S.buttons,function(h,b){c.buttons.appendChild(v(h[0]));var T=c.buttons.childNodes;T[b].classList.add(t+"-buttons-child"),h[2]&&setTimeout(function(){T[b].focus()},300),T[b].addEventListener("click",function(I){return I.preventDefault(),(0,h[1])(w,c.toast,this,I,B)})})),c.toastBody.appendChild(c.buttons),S.message.length>0&&(S.inputs.length>0||S.buttons.length>0)&&(c.p.style.marginBottom="0"),(S.inputs.length>0||S.buttons.length>0)&&(S.rtl?c.toastTexts.style.marginLeft="10px":c.toastTexts.style.marginRight="10px",S.inputs.length>0&&S.buttons.length>0&&(S.rtl?c.inputs.style.marginLeft="8px":c.inputs.style.marginRight="8px")),c.toastCapsule.style.visibility="hidden",setTimeout(function(){var h=c.toast.offsetHeight,b=c.toast.currentStyle||window.getComputedStyle(c.toast),T=b.marginTop;T=T.split("px"),T=parseInt(T[0]);var I=b.marginBottom;I=I.split("px"),I=parseInt(I[0]),c.toastCapsule.style.visibility="",c.toastCapsule.style.height=h+I+T+"px",setTimeout(function(){c.toastCapsule.style.height="auto",S.target&&(c.toastCapsule.style.overflow="visible")},500),S.timeout&&w.progress(S,c.toast).start()},100),function(){var h=S.position;if(S.target)c.wrapper=document.querySelector(S.target),c.wrapper.classList.add(t+"-target"),S.targetFirst?c.wrapper.insertBefore(c.toastCapsule,c.wrapper.firstChild):c.wrapper.appendChild(c.toastCapsule);else{if(-1==l.indexOf(S.position))return void console.warn("["+t+"] Incorrect position.\nIt can be \u203a "+l);h=e||window.innerWidth<=s?"bottomLeft"==S.position||"bottomRight"==S.position||"bottomCenter"==S.position?t+"-wrapper-bottomCenter":"topLeft"==S.position||"topRight"==S.position||"topCenter"==S.position?t+"-wrapper-topCenter":t+"-wrapper-center":t+"-wrapper-"+h,c.wrapper=document.querySelector("."+t+"-wrapper."+h),c.wrapper||(c.wrapper=document.createElement("div"),c.wrapper.classList.add(t+"-wrapper"),c.wrapper.classList.add(h),document.body.appendChild(c.wrapper)),"topLeft"==S.position||"topCenter"==S.position||"topRight"==S.position?c.wrapper.insertBefore(c.toastCapsule,c.wrapper.firstChild):c.wrapper.appendChild(c.toastCapsule)}isNaN(S.zindex)?console.warn("["+t+"] Invalid zIndex."):c.wrapper.style.zIndex=S.zindex}(),S.overlay&&(null!==document.querySelector("."+t+"-overlay.fadeIn")?(c.overlay=document.querySelector("."+t+"-overlay"),c.overlay.setAttribute("data-iziToast-ref",c.overlay.getAttribute("data-iziToast-ref")+","+S.ref),isNaN(S.zindex)||null===S.zindex||(c.overlay.style.zIndex=S.zindex-1)):(c.overlay.classList.add(t+"-overlay"),c.overlay.classList.add("fadeIn"),c.overlay.style.background=S.overlayColor,c.overlay.setAttribute("data-iziToast-ref",S.ref),isNaN(S.zindex)||null===S.zindex||(c.overlay.style.zIndex=S.zindex-1),document.querySelector("body").appendChild(c.overlay)),S.overlayClose?(c.overlay.removeEventListener("click",{}),c.overlay.addEventListener("click",function(h){w.hide(S,c.toast,"overlay")})):c.overlay.removeEventListener("click",{})),function(){if(S.animateInside){c.toast.classList.add(t+"-animateInside");var h=[200,100,300];"bounceInLeft"!=S.transitionIn&&"bounceInRight"!=S.transitionIn||(h=[400,200,400]),S.title.length>0&&setTimeout(function(){c.strong.classList.add("slideIn")},h[0]),S.message.length>0&&setTimeout(function(){c.p.classList.add("slideIn")},h[1]),S.icon&&setTimeout(function(){c.icon.classList.add("revealIn")},h[2]);var b=150;S.buttons.length>0&&c.buttons&&setTimeout(function(){f(c.buttons.childNodes,function(T,I){setTimeout(function(){T.classList.add("revealIn")},b),b+=150})},S.inputs.length>0?150:0),S.inputs.length>0&&c.inputs&&(b=150,f(c.inputs.childNodes,function(T,I){setTimeout(function(){T.classList.add("revealIn")},b),b+=150}))}}(),S.onOpening.apply(null,[S,c.toast]);try{var E=new CustomEvent(t+"-opening",{detail:S,bubbles:!0,cancelable:!0});document.dispatchEvent(E)}catch(h){console.warn(h)}setTimeout(function(){c.toast.classList.remove(t+"-opening"),c.toast.classList.add(t+"-opened");try{var h=new CustomEvent(t+"-opened",{detail:S,bubbles:!0,cancelable:!0});document.dispatchEvent(h)}catch(b){console.warn(b)}S.onOpened.apply(null,[S,c.toast])},1e3),S.drag&&(n?(c.toast.addEventListener("touchstart",function(h){D.startMoving(this,w,S,h)},!1),c.toast.addEventListener("touchend",function(h){D.stopMoving(this,h)},!1)):(c.toast.addEventListener("mousedown",function(h){h.preventDefault(),D.startMoving(this,w,S,h)},!1),c.toast.addEventListener("mouseup",function(h){h.preventDefault(),D.stopMoving(this,h)},!1))),S.closeOnEscape&&document.addEventListener("keyup",function(h){27==(h=h||window.event).keyCode&&w.hide(S,c.toast,"esc")}),S.closeOnClick&&c.toast.addEventListener("click",function(h){w.hide(S,c.toast,"toast")}),w.toast=c.toast},C}),function(R,C){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=R.document?C(R,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return C(t)}:C(R)}(typeof window<"u"?window:this,function(R,C){"use strict";var t=[],e=Object.getPrototypeOf,r=t.slice,d=t.flat?function(A){return t.flat.call(A)}:function(A){return t.concat.apply([],A)},n=t.push,l=t.indexOf,o={},s=o.toString,p=o.hasOwnProperty,u=p.toString,g=u.call(Object),f={},y=function(A){return"function"==typeof A&&"number"!=typeof A.nodeType&&"function"!=typeof A.item},v=function(A){return null!=A&&A===A.window},_=R.document,O={type:!0,src:!0,nonce:!0,noModule:!0};function D(A,N,Z){var ee,he,Ee=(Z=Z||_).createElement("script");if(Ee.text=A,N)for(ee in O)(he=N[ee]||N.getAttribute&&N.getAttribute(ee))&&Ee.setAttribute(ee,he);Z.head.appendChild(Ee).parentNode.removeChild(Ee)}function M(A){return null==A?A+"":"object"==typeof A||"function"==typeof A?o[s.call(A)]||"object":typeof A}var w="3.7.1",S=/HTML$/i,c=function(A,N){return new c.fn.init(A,N)};function B(A){var N=!!A&&"length"in A&&A.length,Z=M(A);return!y(A)&&!v(A)&&("array"===Z||0===N||"number"==typeof N&&0+~]|"+I+")"+I+"*"),Jt=new RegExp(I+"|>"),pn=new RegExp(ze),Nt=new RegExp("^"+be+"$"),An={ID:new RegExp("^#("+be+")"),CLASS:new RegExp("^\\.("+be+")"),TAG:new RegExp("^("+be+"|[*])"),ATTR:new RegExp("^"+de),PSEUDO:new RegExp("^"+ze),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+I+"*(even|odd|(([+-]|)(\\d*)n|)"+I+"*(?:([+-]|)"+I+"*(\\d+)|))"+I+"*\\)|)","i"),bool:new RegExp("^(?:"+Fe+")$","i"),needsContext:new RegExp("^"+I+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+I+"*((?:-\\d)?\\d*)"+I+"*\\)|)(?=[^-]|$)","i")},ar=/^(?:input|select|textarea|button)$/i,ur=/^h\d$/i,_r=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,dr=/[+~]/,pr=new RegExp("\\\\[\\da-fA-F]{1,6}"+I+"?|\\\\([^\\r\\n\\f])","g"),cr=function(Ke,vt){var kt="0x"+Ke.slice(1)-65536;return vt||(kt<0?String.fromCharCode(kt+65536):String.fromCharCode(kt>>10|55296,1023&kt|56320))},jt=function(){li()},ge=pi(function(Ke){return!0===Ke.disabled&&E(Ke,"fieldset")},{dir:"parentNode",next:"legend"});try{Ft.apply(t=r.call(Q.childNodes),Q.childNodes)}catch{Ft={apply:function(vt,kt){q.apply(vt,r.call(kt))},call:function(vt){q.apply(vt,r.call(arguments,1))}}}function He(Ke,vt,kt,Vt){var Yt,Dn,On,Nn,Tn,ir,Gn,Kn=vt&&vt.ownerDocument,rr=vt?vt.nodeType:9;if(kt=kt||[],"string"!=typeof Ke||!Ke||1!==rr&&9!==rr&&11!==rr)return kt;if(!Vt&&(li(vt),vt=vt||Ee,ut)){if(11!==rr&&(Tn=_r.exec(Ke)))if(Yt=Tn[1]){if(9===rr){if(!(On=vt.getElementById(Yt)))return kt;if(On.id===Yt)return Ft.call(kt,On),kt}else if(Kn&&(On=Kn.getElementById(Yt))&&He.contains(vt,On)&&On.id===Yt)return Ft.call(kt,On),kt}else{if(Tn[2])return Ft.apply(kt,vt.getElementsByTagName(Ke)),kt;if((Yt=Tn[3])&&vt.getElementsByClassName)return Ft.apply(kt,vt.getElementsByClassName(Yt)),kt}if(!(mr[Ke+" "]||at&&at.test(Ke))){if(Gn=Ke,Kn=vt,1===rr&&(Jt.test(Ke)||We.test(Ke))){for((Kn=dr.test(Ke)&&qi(vt.parentNode)||vt)==vt&&f.scope||((Nn=vt.getAttribute("id"))?Nn=c.escapeSelector(Nn):vt.setAttribute("id",Nn=Zt)),Dn=(ir=ji(Ke)).length;Dn--;)ir[Dn]=(Nn?"#"+Nn:":scope")+" "+Ni(ir[Dn]);Gn=ir.join(",")}try{return Ft.apply(kt,Kn.querySelectorAll(Gn)),kt}catch{mr(Ke,!0)}finally{Nn===Zt&&vt.removeAttribute("id")}}}return ao(Ke.replace(x,"$1"),vt,kt,Vt)}function Lt(){var Ke=[];return function vt(kt,Vt){return Ke.push(kt+" ")>N.cacheLength&&delete vt[Ke.shift()],vt[kt+" "]=Vt}}function vn(Ke){return Ke[Zt]=!0,Ke}function Qn(Ke){var vt=Ee.createElement("fieldset");try{return!!Ke(vt)}catch{return!1}finally{vt.parentNode&&vt.parentNode.removeChild(vt),vt=null}}function Br(Ke){return function(vt){return E(vt,"input")&&vt.type===Ke}}function fi(Ke){return function(vt){return(E(vt,"input")||E(vt,"button"))&&vt.type===Ke}}function Si(Ke){return function(vt){return"form"in vt?vt.parentNode&&!1===vt.disabled?"label"in vt?"label"in vt.parentNode?vt.parentNode.disabled===Ke:vt.disabled===Ke:vt.isDisabled===Ke||vt.isDisabled!==!Ke&&ge(vt)===Ke:vt.disabled===Ke:"label"in vt&&vt.disabled===Ke}}function Oi(Ke){return vn(function(vt){return vt=+vt,vn(function(kt,Vt){for(var Yt,Dn=Ke([],kt.length,vt),On=Dn.length;On--;)kt[Yt=Dn[On]]&&(kt[Yt]=!(Vt[Yt]=kt[Yt]))})})}function qi(Ke){return Ke&&typeof Ke.getElementsByTagName<"u"&&Ke}function li(Ke){var vt,kt=Ke?Ke.ownerDocument||Ke:Q;return kt!=Ee&&9===kt.nodeType&&kt.documentElement&&(Re=(Ee=kt).documentElement,ut=!c.isXMLDoc(Ee),It=Re.matches||Re.webkitMatchesSelector||Re.msMatchesSelector,Re.msMatchesSelector&&Q!=Ee&&(vt=Ee.defaultView)&&vt.top!==vt&&vt.addEventListener("unload",jt),f.getById=Qn(function(Vt){return Re.appendChild(Vt).id=c.expando,!Ee.getElementsByName||!Ee.getElementsByName(c.expando).length}),f.disconnectedMatch=Qn(function(Vt){return It.call(Vt,"*")}),f.scope=Qn(function(){return Ee.querySelectorAll(":scope")}),f.cssHas=Qn(function(){try{return Ee.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),f.getById?(N.filter.ID=function(Vt){var Yt=Vt.replace(pr,cr);return function(Dn){return Dn.getAttribute("id")===Yt}},N.find.ID=function(Vt,Yt){if(typeof Yt.getElementById<"u"&&ut){var Dn=Yt.getElementById(Vt);return Dn?[Dn]:[]}}):(N.filter.ID=function(Vt){var Yt=Vt.replace(pr,cr);return function(Dn){var On=typeof Dn.getAttributeNode<"u"&&Dn.getAttributeNode("id");return On&&On.value===Yt}},N.find.ID=function(Vt,Yt){if(typeof Yt.getElementById<"u"&&ut){var Dn,On,Nn,Tn=Yt.getElementById(Vt);if(Tn){if((Dn=Tn.getAttributeNode("id"))&&Dn.value===Vt)return[Tn];for(Nn=Yt.getElementsByName(Vt),On=0;Tn=Nn[On++];)if((Dn=Tn.getAttributeNode("id"))&&Dn.value===Vt)return[Tn]}return[]}}),N.find.TAG=function(Vt,Yt){return typeof Yt.getElementsByTagName<"u"?Yt.getElementsByTagName(Vt):Yt.querySelectorAll(Vt)},N.find.CLASS=function(Vt,Yt){if(typeof Yt.getElementsByClassName<"u"&&ut)return Yt.getElementsByClassName(Vt)},at=[],Qn(function(Vt){var Yt;Re.appendChild(Vt).innerHTML="",Vt.querySelectorAll("[selected]").length||at.push("\\["+I+"*(?:value|"+Fe+")"),Vt.querySelectorAll("[id~="+Zt+"-]").length||at.push("~="),Vt.querySelectorAll("a#"+Zt+"+*").length||at.push(".#.+[+~]"),Vt.querySelectorAll(":checked").length||at.push(":checked"),(Yt=Ee.createElement("input")).setAttribute("type","hidden"),Vt.appendChild(Yt).setAttribute("name","D"),Re.appendChild(Vt).disabled=!0,2!==Vt.querySelectorAll(":disabled").length&&at.push(":enabled",":disabled"),(Yt=Ee.createElement("input")).setAttribute("name",""),Vt.appendChild(Yt),Vt.querySelectorAll("[name='']").length||at.push("\\["+I+"*name"+I+"*="+I+"*(?:''|\"\")")}),f.cssHas||at.push(":has"),at=at.length&&new RegExp(at.join("|")),vr=function(Vt,Yt){if(Vt===Yt)return he=!0,0;var Dn=!Vt.compareDocumentPosition-!Yt.compareDocumentPosition;return Dn||(1&(Dn=(Vt.ownerDocument||Vt)==(Yt.ownerDocument||Yt)?Vt.compareDocumentPosition(Yt):1)||!f.sortDetached&&Yt.compareDocumentPosition(Vt)===Dn?Vt===Ee||Vt.ownerDocument==Q&&He.contains(Q,Vt)?-1:Yt===Ee||Yt.ownerDocument==Q&&He.contains(Q,Yt)?1:ee?l.call(ee,Vt)-l.call(ee,Yt):0:4&Dn?-1:1)}),Ee}for(A in He.matches=function(Ke,vt){return He(Ke,null,null,vt)},He.matchesSelector=function(Ke,vt){if(li(Ke),ut&&!mr[vt+" "]&&(!at||!at.test(vt)))try{var kt=It.call(Ke,vt);if(kt||f.disconnectedMatch||Ke.document&&11!==Ke.document.nodeType)return kt}catch{mr(vt,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(Ke){return Ke[1]=Ke[1].replace(pr,cr),Ke[3]=(Ke[3]||Ke[4]||Ke[5]||"").replace(pr,cr),"~="===Ke[2]&&(Ke[3]=" "+Ke[3]+" "),Ke.slice(0,4)},CHILD:function(Ke){return Ke[1]=Ke[1].toLowerCase(),"nth"===Ke[1].slice(0,3)?(Ke[3]||He.error(Ke[0]),Ke[4]=+(Ke[4]?Ke[5]+(Ke[6]||1):2*("even"===Ke[3]||"odd"===Ke[3])),Ke[5]=+(Ke[7]+Ke[8]||"odd"===Ke[3])):Ke[3]&&He.error(Ke[0]),Ke},PSEUDO:function(Ke){var vt,kt=!Ke[6]&&Ke[2];return An.CHILD.test(Ke[0])?null:(Ke[3]?Ke[2]=Ke[4]||Ke[5]||"":kt&&pn.test(kt)&&(vt=ji(kt,!0))&&(vt=kt.indexOf(")",kt.length-vt)-kt.length)&&(Ke[0]=Ke[0].slice(0,vt),Ke[2]=kt.slice(0,vt)),Ke.slice(0,3))}},filter:{TAG:function(Ke){var vt=Ke.replace(pr,cr).toLowerCase();return"*"===Ke?function(){return!0}:function(kt){return E(kt,vt)}},CLASS:function(Ke){var vt=Pn[Ke+" "];return vt||(vt=new RegExp("(^|"+I+")"+Ke+"("+I+"|$)"))&&Pn(Ke,function(kt){return vt.test("string"==typeof kt.className&&kt.className||typeof kt.getAttribute<"u"&&kt.getAttribute("class")||"")})},ATTR:function(Ke,vt,kt){return function(Vt){var Yt=He.attr(Vt,Ke);return null==Yt?"!="===vt:!vt||(Yt+="","="===vt?Yt===kt:"!="===vt?Yt!==kt:"^="===vt?kt&&0===Yt.indexOf(kt):"*="===vt?kt&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function G(A,N,Z){return y(N)?c.grep(A,function(ee,he){return!!N.call(ee,he,ee)!==Z}):N.nodeType?c.grep(A,function(ee){return ee===N!==Z}):"string"!=typeof N?c.grep(A,function(ee){return-1)[^>]*|#([\w-]+))$/;(c.fn.init=function(A,N,Z){var ee,he;if(!A)return this;if(Z=Z||X,"string"==typeof A){if(!(ee="<"===A[0]&&">"===A[A.length-1]&&3<=A.length?[null,A,null]:H.exec(A))||!ee[1]&&N)return!N||N.jquery?(N||Z).find(A):this.constructor(N).find(A);if(ee[1]){if(c.merge(this,c.parseHTML(ee[1],(N=N instanceof c?N[0]:N)&&N.nodeType?N.ownerDocument||N:_,!0)),Ne.test(ee[1])&&c.isPlainObject(N))for(ee in N)y(this[ee])?this[ee](N[ee]):this.attr(ee,N[ee]);return this}return(he=_.getElementById(ee[2]))&&(this[0]=he,this.length=1),this}return A.nodeType?(this[0]=A,this.length=1,this):y(A)?void 0!==Z.ready?Z.ready(A):A(c):c.makeArray(A,this)}).prototype=c.fn,X=c(_);var J=/^(?:parents|prev(?:Until|All))/,me={children:!0,contents:!0,next:!0,prev:!0};function Me(A,N){for(;(A=A[N])&&1!==A.nodeType;);return A}c.fn.extend({has:function(A){var N=c(A,this),Z=N.length;return this.filter(function(){for(var ee=0;ee\x20\t\r\n\f]*)/i,Ze=/^$|^module$|\/(?:java|ecma)script/i;$e=_.createDocumentFragment().appendChild(_.createElement("div")),(rt=_.createElement("input")).setAttribute("type","radio"),rt.setAttribute("checked","checked"),rt.setAttribute("name","t"),$e.appendChild(rt),f.checkClone=$e.cloneNode(!0).cloneNode(!0).lastChild.checked,$e.innerHTML="",f.noCloneChecked=!!$e.cloneNode(!0).lastChild.defaultValue,$e.innerHTML="",f.option=!!$e.lastChild;var nt={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Et(A,N){var Z;return Z=typeof A.getElementsByTagName<"u"?A.getElementsByTagName(N||"*"):typeof A.querySelectorAll<"u"?A.querySelectorAll(N||"*"):[],void 0===N||N&&E(A,N)?c.merge([A],Z):Z}function Xt(A,N){for(var Z=0,ee=A.length;Z",""]);var qt=/<|&#?\w+;/;function hn(A,N,Z,ee,he){for(var Ee,Re,ut,at,It,Ft,Zt=N.createDocumentFragment(),St=[],Kt=0,Pn=A.length;Kt\s*$/g;function gn(A,N){return E(A,"table")&&E(11!==N.nodeType?N:N.firstChild,"tr")&&c(A).children("tbody")[0]||A}function bn(A){return A.type=(null!==A.getAttribute("type"))+"/"+A.type,A}function Be(A){return"true/"===(A.type||"").slice(0,5)?A.type=A.type.slice(5):A.removeAttribute("type"),A}function ot(A,N){var Z,ee,he,Ee,Re,ut;if(1===N.nodeType){if(Y.hasData(A)&&(ut=Y.get(A).events))for(he in Y.remove(N,"handle events"),ut)for(Z=0,ee=ut[he].length;Z"u"?c.prop(A,N,Z):(1===Ee&&c.isXMLDoc(A)||(he=c.attrHooks[N.toLowerCase()]||(c.expr.match.bool.test(N)?Fn:void 0)),void 0!==Z?null===Z?void c.removeAttr(A,N):he&&"set"in he&&void 0!==(ee=he.set(A,Z,N))?ee:(A.setAttribute(N,Z+""),Z):he&&"get"in he&&null!==(ee=he.get(A,N))?ee:null==(ee=c.find.attr(A,N))?void 0:ee)},attrHooks:{type:{set:function(A,N){if(!f.radioValue&&"radio"===N&&E(A,"input")){var Z=A.value;return A.setAttribute("type",N),Z&&(A.value=Z),N}}}},removeAttr:function(A,N){var Z,ee=0,he=N&&N.match(ue);if(he&&1===A.nodeType)for(;Z=he[ee++];)A.removeAttribute(Z)}}),Fn={set:function(A,N,Z){return!1===N?c.removeAttr(A,Z):A.setAttribute(Z,Z),Z}},c.each(c.expr.match.bool.source.match(/\w+/g),function(A,N){var Z=Bn[N]||c.find.attr;Bn[N]=function(ee,he,Ee){var Re,ut,at=he.toLowerCase();return Ee||(ut=Bn[at],Bn[at]=Re,Re=null!=Z(ee,he,Ee)?at:null,Bn[at]=ut),Re}});var lr=/^(?:input|select|textarea|button)$/i,nr=/^(?:a|area)$/i;function br(A){return(A.match(ue)||[]).join(" ")}function Ir(A){return A.getAttribute&&A.getAttribute("class")||""}function Yr(A){return Array.isArray(A)?A:"string"==typeof A&&A.match(ue)||[]}c.fn.extend({prop:function(A,N){return je(this,c.prop,A,N,1").attr(A.scriptAttrs||{}).prop({charset:A.scriptCharset,src:A.url}).on("load error",Z=function(Ee){N.remove(),Z=null,Ee&&he("error"===Ee.type?404:200,Ee.type)}),_.head.appendChild(N[0])},abort:function(){Z&&Z()}}});var Nr,Ur=[],ui=/(=)\?(?=&|$)|\?\?/;c.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var A=Ur.pop()||c.expando+"_"+ti.guid++;return this[A]=!0,A}}),c.ajaxPrefilter("json jsonp",function(A,N,Z){var ee,he,Ee,Re=!1!==A.jsonp&&(ui.test(A.url)?"url":"string"==typeof A.data&&0===(A.contentType||"").indexOf("application/x-www-form-urlencoded")&&ui.test(A.data)&&"data");if(Re||"jsonp"===A.dataTypes[0])return ee=A.jsonpCallback=y(A.jsonpCallback)?A.jsonpCallback():A.jsonpCallback,Re?A[Re]=A[Re].replace(ui,"$1"+ee):!1!==A.jsonp&&(A.url+=(Ii.test(A.url)?"&":"?")+A.jsonp+"="+ee),A.converters["script json"]=function(){return Ee||c.error(ee+" was not called"),Ee[0]},A.dataTypes[0]="json",he=R[ee],R[ee]=function(){Ee=arguments},Z.always(function(){void 0===he?c(R).removeProp(ee):R[ee]=he,A[ee]&&(A.jsonpCallback=N.jsonpCallback,Ur.push(ee)),Ee&&y(he)&&he(Ee[0]),Ee=he=void 0}),"script"}),f.createHTMLDocument=((Nr=_.implementation.createHTMLDocument("").body).innerHTML="
",2===Nr.childNodes.length),c.parseHTML=function(A,N,Z){return"string"!=typeof A?[]:("boolean"==typeof N&&(Z=N,N=!1),N||(f.createHTMLDocument?((ee=(N=_.implementation.createHTMLDocument("")).createElement("base")).href=_.location.href,N.head.appendChild(ee)):N=_),Ee=!Z&&[],(he=Ne.exec(A))?[N.createElement(he[1])]:(he=hn([A],N,Ee),Ee&&Ee.length&&c(Ee).remove(),c.merge([],he.childNodes)));var ee,he,Ee},c.fn.load=function(A,N,Z){var ee,he,Ee,Re=this,ut=A.indexOf(" ");return-1").append(c.parseHTML(at)).find(ee):at)}).always(Z&&function(at,It){Re.each(function(){Z.apply(this,Ee||[at.responseText,It,at])})}),this},c.expr.pseudos.animated=function(A){return c.grep(c.timers,function(N){return A===N.elem}).length},c.offset={setOffset:function(A,N,Z){var ee,he,Ee,Re,ut,at,It=c.css(A,"position"),Ft=c(A),Zt={};"static"===It&&(A.style.position="relative"),ut=Ft.offset(),Ee=c.css(A,"top"),at=c.css(A,"left"),("absolute"===It||"fixed"===It)&&-1<(Ee+at).indexOf("auto")?(Re=(ee=Ft.position()).top,he=ee.left):(Re=parseFloat(Ee)||0,he=parseFloat(at)||0),y(N)&&(N=N.call(A,Z,c.extend({},ut))),null!=N.top&&(Zt.top=N.top-ut.top+Re),null!=N.left&&(Zt.left=N.left-ut.left+he),"using"in N?N.using.call(A,Zt):Ft.css(Zt)}},c.fn.extend({offset:function(A){if(arguments.length)return void 0===A?this:this.each(function(he){c.offset.setOffset(this,A,he)});var N,Z,ee=this[0];return ee?ee.getClientRects().length?{top:(N=ee.getBoundingClientRect()).top+(Z=ee.ownerDocument.defaultView).pageYOffset,left:N.left+Z.pageXOffset}:{top:0,left:0}:void 0},position:function(){if(this[0]){var A,N,Z,ee=this[0],he={top:0,left:0};if("fixed"===c.css(ee,"position"))N=ee.getBoundingClientRect();else{for(N=this.offset(),Z=ee.ownerDocument,A=ee.offsetParent||Z.documentElement;A&&(A===Z.body||A===Z.documentElement)&&"static"===c.css(A,"position");)A=A.parentNode;A&&A!==ee&&1===A.nodeType&&((he=c(A).offset()).top+=c.css(A,"borderTopWidth",!0),he.left+=c.css(A,"borderLeftWidth",!0))}return{top:N.top-he.top-c.css(ee,"marginTop",!0),left:N.left-he.left-c.css(ee,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var A=this.offsetParent;A&&"static"===c.css(A,"position");)A=A.offsetParent;return A||Ie})}}),c.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(A,N){var Z="pageYOffset"===N;c.fn[A]=function(ee){return je(this,function(he,Ee,Re){var ut;if(v(he)?ut=he:9===he.nodeType&&(ut=he.defaultView),void 0===Re)return ut?ut[N]:he[Ee];ut?ut.scrollTo(Z?ut.pageXOffset:Re,Z?Re:ut.pageYOffset):he[Ee]=Re},A,ee,arguments.length)}}),c.each(["top","left"],function(A,N){c.cssHooks[N]=Ct(f.pixelPosition,function(Z,ee){if(ee)return ee=qe(Z,N),mt.test(ee)?c(Z).position()[N]+"px":ee})}),c.each({Height:"height",Width:"width"},function(A,N){c.each({padding:"inner"+A,content:N,"":"outer"+A},function(Z,ee){c.fn[ee]=function(he,Ee){var Re=arguments.length&&(Z||"boolean"!=typeof he),ut=Z||(!0===he||!0===Ee?"margin":"border");return je(this,function(at,It,Ft){var Zt;return v(at)?0===ee.indexOf("outer")?at["inner"+A]:at.document.documentElement["client"+A]:9===at.nodeType?(Zt=at.documentElement,Math.max(at.body["scroll"+A],Zt["scroll"+A],at.body["offset"+A],Zt["offset"+A],Zt["client"+A])):void 0===Ft?c.css(at,It,ut):c.style(at,It,Ft,ut)},N,Re?he:void 0,Re)}})}),c.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(A,N){c.fn[N]=function(Z){return this.on(N,Z)}}),c.fn.extend({bind:function(A,N,Z){return this.on(A,null,N,Z)},unbind:function(A,N){return this.off(A,null,N)},delegate:function(A,N,Z,ee){return this.on(N,A,Z,ee)},undelegate:function(A,N,Z){return 1===arguments.length?this.off(A,"**"):this.off(N,A||"**",Z)},hover:function(A,N){return this.on("mouseenter",A).on("mouseleave",N||A)}}),c.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(A,N){c.fn[N]=function(Z,ee){return 0"u"&&(R.jQuery=R.$=c),c}),function(R){R.ui=R.ui||{},R.ui.version="1.13.2";var C,d,n,l,o,s,p,u,g,f,O,D,M,t=0,e=Array.prototype.hasOwnProperty,r=Array.prototype.slice;function y(w,S,c){return[parseFloat(w[0])*(g.test(w[0])?S/100:1),parseFloat(w[1])*(g.test(w[1])?c/100:1)]}function v(w,S){return parseInt(R.css(w,S),10)||0}function _(w){return null!=w&&w===w.window}R.cleanData=(C=R.cleanData,function(w){for(var S,c,B=0;null!=(c=w[B]);B++)(S=R._data(c,"events"))&&S.remove&&R(c).triggerHandler("remove");C(w)}),R.widget=function(w,S,c){var B,E,h,b={},T=w.split(".")[0],I=T+"-"+(w=w.split(".")[1]);return c||(c=S,S=R.Widget),Array.isArray(c)&&(c=R.extend.apply(null,[{}].concat(c))),R.expr.pseudos[I.toLowerCase()]=function(x){return!!R.data(x,I)},R[T]=R[T]||{},B=R[T][w],E=R[T][w]=function(x,L){if(!this||!this._createWidget)return new E(x,L);arguments.length&&this._createWidget(x,L)},R.extend(E,B,{version:c.version,_proto:R.extend({},c),_childConstructors:[]}),(h=new S).options=R.widget.extend({},h.options),R.each(c,function(x,L){function V(){return S.prototype[x].apply(this,arguments)}function Q(q){return S.prototype[x].apply(this,q)}b[x]="function"==typeof L?function(){var q,te=this._super,we=this._superApply;return this._super=V,this._superApply=Q,q=L.apply(this,arguments),this._super=te,this._superApply=we,q}:L}),E.prototype=R.widget.extend(h,{widgetEventPrefix:B&&h.widgetEventPrefix||w},b,{constructor:E,namespace:T,widgetName:w,widgetFullName:I}),B?(R.each(B._childConstructors,function(x,L){var V=L.prototype;R.widget(V.namespace+"."+V.widgetName,E,L._proto)}),delete B._childConstructors):S._childConstructors.push(E),R.widget.bridge(w,E),E},R.widget.extend=function(w){for(var S,c,B=r.call(arguments,1),E=0,h=B.length;E",options:{classes:{},disabled:!1,create:null},_createWidget:function(w,S){S=R(S||this.defaultElement||this)[0],this.element=R(S),this.uuid=t++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=R(),this.hoverable=R(),this.focusable=R(),this.classesElementLookup={},S!==this&&(R.data(S,this.widgetFullName,this),this._on(!0,this.element,{remove:function(c){c.target===S&&this.destroy()}}),this.document=R(S.style?S.ownerDocument:S.document||S),this.window=R(this.document[0].defaultView||this.document[0].parentWindow)),this.options=R.widget.extend({},this.options,this._getCreateOptions(),w),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:R.noop,_create:R.noop,_init:R.noop,destroy:function(){var w=this;this._destroy(),R.each(this.classesElementLookup,function(S,c){w._removeClass(c,S)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:R.noop,widget:function(){return this.element},option:function(w,S){var c,B,E,h=w;if(0===arguments.length)return R.widget.extend({},this.options);if("string"==typeof w)if(h={},w=(c=w.split(".")).shift(),c.length){for(B=h[w]=R.widget.extend({},this.options[w]),E=0;E
"),c=S.children()[0];return R("body").append(S),w=c.offsetWidth,S.css("overflow","scroll"),w===(c=c.offsetWidth)&&(c=S[0].clientWidth),S.remove(),d=w-c},getScrollInfo:function(w){var c=w.isWindow||w.isDocument?"":w.element.css("overflow-x"),S=w.isWindow||w.isDocument?"":w.element.css("overflow-y");return c="scroll"===c||"auto"===c&&w.widthn(l(Le),l(pt))?"horizontal":"vertical",w.using.call(this,ue,it)}),we.offset(R.extend(me,{using:te}))})},R.ui.position={fit:{left:function(w,S){var c=S.within,B=c.isWindow?c.scrollLeft:c.offset.left,E=c.width,h=w.left-S.collisionPosition.marginLeft,b=B-h,T=h+S.collisionWidth-E-B;S.collisionWidth>E?0E?0"'/]/g,l=/[<>"'/]/g,o="$recursive_request",s="$request_target_invalid",p={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},u={16:!0,17:!0,18:!0},g={8:"backspace",9:"tab",10:"return",13:"return",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",59:";",61:"=",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},f={16:"shift",17:"ctrl",18:"alt",91:"meta",93:"meta"},y={0:"",1:"left",2:"middle",3:"right"},v="active expanded focus folder lazy radiogroup selected unselectable unselectableIgnore".split(" "),_={},O="columns types".split(" "),D="checkbox expanded extraClasses folder icon iconTooltip key lazy partsel radiogroup refKey selected statusNodeType title tooltip type unselectable unselectableIgnore unselectableStatus".split(" "),M={},w={},S={active:!0,children:!0,data:!0,focus:!0},c=0;cG.getIndexHier(".",5)},isChildOf:function(G){return this.parent&&this.parent===G},isDescendantOf:function(G){if(!G||G.tree!==this.tree)return!1;for(var X=this.parent;X;){if(X===G)return!0;X===X.parent&&t.error("Recursive parent link: "+X),X=X.parent}return!1},isExpanded:function(){return!!this.expanded},isFirstSibling:function(){var G=this.parent;return!G||G.children[0]===this},isFolder:function(){return!!this.folder},isLastSibling:function(){var G=this.parent;return!G||G.children[G.children.length-1]===this},isLazy:function(){return!!this.lazy},isLoaded:function(){return!this.lazy||void 0!==this.hasChildren()},isLoading:function(){return!!this._isLoading},isRoot:function(){return this.isRootNode()},isPartsel:function(){return!this.selected&&!!this.partsel},isPartload:function(){return!!this.partload},isRootNode:function(){return this.tree.rootNode===this},isSelected:function(){return!!this.selected},isStatusNode:function(){return!!this.statusNodeType},isPagingNode:function(){return"paging"===this.statusNodeType},isTopLevel:function(){return this.tree.rootNode===this.parent},isUndefined:function(){return void 0===this.hasChildren()},isVisible:function(){var G,X,H=this.tree.enableFilter,J=this.getParentList(!1,!1);if(H&&!this.match&&!this.subMatchCount)return!1;for(G=0,X=J.length;GDate.now()?X.value:(delete this._tempCache[G],null)},_usesExtension:function(G){return 0<=t.inArray(G,this.options.extensions)},_requireExtension:function(G,X,H,J){null!=H&&(H=!!H);var Me,me=this._local.name,ue=t.inArray(G,Me=this.options.extensions)",{type:"checkbox",name:J,value:Le.key,checked:!0}))}ue.length?ue.empty():ue=t("
",{id:Me}).hide().insertAfter(this.$container),!1!==X&&this.activeNode&&ue.append(t("",{type:"radio",name:me,value:this.activeNode.key,checked:!0})),H.filter?this.visit(function(Le){var pt=H.filter(Le);if("skip"===pt)return pt;!1!==pt&&Pe(Le)}):!1!==G&&(De=this.getSelectedNodes(De),t.each(De,function(Le,pt){Pe(pt)}))},getActiveNode:function(){return this.activeNode},getFirstChild:function(){return this.rootNode.getFirstChild()},getFocusNode:function(){return this.focusNode},getOption:function(G){return this.widget.option(G)},getNodeByKey:function(G,X){var H,J;return!X&&(H=document.getElementById(this.options.idPrefix+G))?H.ftnode||null:(G=""+G,(X=X||this.rootNode).visit(function(me){if(me.key===G)return J=me,!1},!(J=null)),J)},getRootNode:function(){return this.rootNode},getSelectedNodes:function(G){return this.rootNode.getSelectedNodes(G)},hasFocus:function(){return!!this._hasFocus},info:function(G){3<=this.options.debugLevel&&(Array.prototype.unshift.call(arguments,this.toString()),I("info",arguments))},isLoading:function(){var G=!1;return this.rootNode.visit(function(X){if(X._isLoading||X._requestId)return!(G=!0)},!0),G},loadKeyPath:function(G,X){var H,J,me,Me=this,ue=new t.Deferred,De=this.getRootNode(),Pe=this.options.keyPathSeparator,Le=[],pt=t.extend({},X);for("function"==typeof X?H=X:X&&X.callback&&(H=X.callback),pt.callback=function(it,ae,je){H&&H.call(it,ae,je),ue.notifyWith(it,[{node:ae,status:je}])},null==pt.matchKey&&(pt.matchKey=function(it,ae){return it.key===ae}),B(G)||(G=[G]),J=0;Jit)me.rejectWith(this,[o]);else if(null!==Pe.parent||null===Le){if(G.options.postProcess){try{(ct=De._triggerNodeEvent("postProcess",G,G.originalEvent,{response:ae,error:null,dataType:X.dataType})).error&&De.warn("postProcess returned error:",ct)}catch(yt){ct={error:yt,message:""+yt,details:"postProcess failed"}}if(ct.error)return Ge=t.isPlainObject(ct.error)?ct.error:{message:ct.error},Ge=De._makeHookContext(Pe,null,Ge),void me.rejectWith(this,[Ge]);(B(ct)||t.isPlainObject(ct)&&B(ct.children))&&(ae=ct)}else ae&&h(ae,"d")&&G.options.enableAspx&&(42===G.options.enableAspx&&De.warn("The default for enableAspx will change to `false` in the fututure. Pass `enableAspx: true` or implement postProcess to silence this warning."),ae="string"==typeof ae.d?t.parseJSON(ae.d):ae.d);me.resolveWith(this,[ae])}else me.rejectWith(this,[s])},function(ae,je,pe){pe=De._makeHookContext(Pe,null,{error:ae,args:Array.prototype.slice.call(arguments),message:pe,details:ae.status+": "+pe}),me.rejectWith(this,[pe])}),me.done(function(ae){var je,pe,Ge;De.nodeSetStatus(G,"ok"),t.isPlainObject(ae)?(E(Pe.isRootNode(),"source may only be an object for root nodes (expecting an array of child objects otherwise)"),E(B(ae.children),"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')"),je=(pe=ae).children,delete pe.children,t.each(O,function(ct,yt){void 0!==pe[yt]&&(De[yt]=pe[yt],delete pe[yt])}),t.extend(De.data,pe)):je=ae,E(B(je),"expected array of children"),Pe._setChildren(je),De.options.nodata&&0===je.length&&(b(De.options.nodata)?Ge=De.options.nodata.call(De,{type:"nodata"},G):!0===De.options.nodata&&Pe.isRootNode()?Ge=De.options.strings.noData:"string"==typeof De.options.nodata&&Pe.isRootNode()&&(Ge=De.options.nodata),Ge&&Pe.setStatus("nodata",Ge)),De._triggerNodeEvent("loadChildren",Pe)}).fail(function(ae){var je;ae!==o?ae!==s?(ae.node&&ae.error&&ae.message?je=ae:"[object Object]"===(je=De._makeHookContext(Pe,null,{error:ae,args:Array.prototype.slice.call(arguments),message:ae?ae.message||ae.toString():""})).message&&(je.message=""),Pe.warn("Load children failed ("+je.message+")",je),!1!==De._triggerNodeEvent("loadError",je,null)&&De.nodeSetStatus(G,"error",je.message,je.details)):Pe.warn("Lazy parent node was removed while loading: discarding response."):Pe.warn("Ignored response for obsolete load request #"+it+" (expected #"+Pe._requestId+")")}).always(function(){Pe._requestId=null,ue&&De.debugTimeEnd(pt)}),me.promise()},nodeLoadKeyPath:function(G,X){},nodeRemoveChild:function(G,X){var H=G.node,J=t.extend({},G,{node:X}),me=H.children;if(1===me.length)return E(X===me[0],"invalid single child"),this.nodeRemoveChildren(G);this.activeNode&&(X===this.activeNode||this.activeNode.isDescendantOf(X))&&this.activeNode.setActive(!1),this.focusNode&&(X===this.focusNode||this.focusNode.isDescendantOf(X))&&(this.focusNode=null),this.nodeRemoveMarkup(J),this.nodeRemoveChildren(J),E(0<=(J=t.inArray(X,me)),"invalid child"),H.triggerModifyChild("remove",X),X.visit(function(Me){Me.parent=null},!0),this._callHook("treeRegisterNode",this,!1,X),me.splice(J,1)},nodeRemoveChildMarkup:function(G){(G=G.node).ul&&(G.isRootNode()?t(G.ul).empty():(t(G.ul).remove(),G.ul=null),G.visit(function(X){X.li=X.ul=null}))},nodeRemoveChildren:function(G){var X=G.tree,H=G.node;H.children&&(this.activeNode&&this.activeNode.isDescendantOf(H)&&this.activeNode.setActive(!1),this.focusNode&&this.focusNode.isDescendantOf(H)&&(this.focusNode=null),this.nodeRemoveChildMarkup(G),H.triggerModifyChild("remove",null),H.visit(function(J){J.parent=null,X._callHook("treeRegisterNode",X,!1,J)}),H.children=H.lazy?[]:null,H.isRootNode()||(H.expanded=!1),this.nodeRenderStatus(G))},nodeRemoveMarkup:function(G){var X=G.node;X.li&&(t(X.li).remove(),X.li=null),this.nodeRemoveChildMarkup(G)},nodeRender:function(G,X,H,J,me){var Me,ue,De,Pe,Le,pt,it,ae=G.node,je=G.tree,pe=G.options,Ge=pe.aria,ct=!1,yt=ae.parent,ve=!yt,Ae=ae.children,Y=null;if(!1!==je._enableUpdate&&(ve||yt.ul)){if(E(ve||yt.ul,"parent UL must exist"),ve||(ae.li&&(X||ae.li.parentNode!==ae.parent.ul)&&(ae.li.parentNode===ae.parent.ul?Y=ae.li.nextSibling:this.debug("Unlinking "+ae+" (must be child of "+ae.parent+")"),this.nodeRemoveMarkup(G)),ae.li?this.nodeRenderStatus(G):(ct=!0,ae.li=document.createElement("li"),(ae.li.ftnode=ae).key&&pe.generateIds&&(ae.li.id=pe.idPrefix+ae.key),ae.span=document.createElement("span"),ae.span.className="fancytree-node",Ge&&!ae.tr&&t(ae.li).attr("role","treeitem"),ae.li.appendChild(ae.span),this.nodeRenderTitle(G),pe.createNode&&pe.createNode.call(je,{type:"createNode"},G)),pe.renderNode&&pe.renderNode.call(je,{type:"renderNode"},G)),Ae){if(ve||ae.expanded||!0===H){for(ae.ul||(ae.ul=document.createElement("ul"),(!0!==J||me)&&ae.expanded||(ae.ul.style.display="none"),Ge&&t(ae.ul).attr("role","group"),ae.li?ae.li.appendChild(ae.ul):ae.tree.$div.append(ae.ul)),Pe=0,Le=Ae.length;Pe")):Le.push(""),(Pe=r.evalOption("checkbox",me,me,ue,!1))&&!me.isStatusNode()&&(H="fancytree-checkbox",("radio"===Pe||me.parent&&me.parent.radiogroup)&&(H+=" fancytree-radio"),Le.push("")),void 0!==me.data.iconClass&&(me.icon?t.error("'iconClass' node option is deprecated since v2.14.0: use 'icon' only instead"):(me.warn("'iconClass' node option is deprecated since v2.14.0: use 'icon' instead"),me.icon=me.data.iconClass)),!1!==(H=r.evalOption("icon",me,me,ue,!0))&&(X=De?" role='presentation'":"",J=(J=r.evalOption("iconTooltip",me,me,ue,null))?" title='"+te(J)+"'":"","string"==typeof H?d.test(H)?(H="/"===H.charAt(0)?H:(ue.imagePath||"")+H,Le.push("")):Le.push(""):Le.push(H.text?""+r.escapeHtml(H.text)+"":H.html?""+H.html+"":"")),X="",X=(X=ue.renderTitle?ue.renderTitle.call(Me,{type:"renderTitle"},G)||"":X)||""+(ue.escapeTitles?r.escapeHtml(me.title):me.title)+"",Le.push(X),me.span.innerHTML=Le.join(""),this.nodeRenderStatus(G),ue.enhanceTitle&&(G.$title=t(">span.fancytree-title",me.span),X=ue.enhanceTitle.call(Me,{type:"enhanceTitle"},G)||""))},nodeRenderStatus:function(pt){var X,H=pt.node,J=pt.tree,me=pt.options,Me=H.hasChildren(),ue=H.isLastSibling(),De=me.aria,Pe=me._classNames,Le=[];(pt=H[J.statusClassPropName])&&!1!==J._enableUpdate&&(De&&(X=t(H.tr||H.li)),Le.push(Pe.node),J.activeNode===H&&Le.push(Pe.active),J.focusNode===H&&Le.push(Pe.focused),H.expanded&&Le.push(Pe.expanded),De&&(!1===Me?X.removeAttr("aria-expanded"):X.attr("aria-expanded",!!H.expanded)),H.folder&&Le.push(Pe.folder),!1!==Me&&Le.push(Pe.hasChildren),ue&&Le.push(Pe.lastsib),H.lazy&&null==H.children&&Le.push(Pe.lazy),H.partload&&Le.push(Pe.partload),H.partsel&&Le.push(Pe.partsel),r.evalOption("unselectable",H,H,me,!1)&&Le.push(Pe.unselectable),H._isLoading&&Le.push(Pe.loading),H._error&&Le.push(Pe.error),H.statusNodeType&&Le.push(Pe.statusNodePrefix+H.statusNodeType),H.selected?(Le.push(Pe.selected),De&&X.attr("aria-selected",!0)):De&&X.attr("aria-selected",!1),H.extraClasses&&Le.push(H.extraClasses),Le.push(!1===Me?Pe.combinedExpanderPrefix+"n"+(ue?"l":""):Pe.combinedExpanderPrefix+(H.expanded?"e":"c")+(H.lazy&&null==H.children?"d":"")+(ue?"l":"")),Le.push(Pe.combinedIconPrefix+(H.expanded?"e":"c")+(H.folder?"f":"")),pt.className=Le.join(" "),H.li&&t(H.li).toggleClass(Pe.lastsib,ue))},nodeSetActive:function(G,X,Pe){var J=G.node,me=G.tree,Me=G.options,ue=!0===(Pe=Pe||{}).noEvents,De=!0===Pe.noFocus;return Pe=!1!==Pe.scrollIntoView,J===me.activeNode==(X=!1!==X)?L(J):(Pe&&G.originalEvent&&t(G.originalEvent.target).is("a,:checkbox")&&(J.info("Not scrolling while clicking an embedded link."),Pe=!1),X&&!ue&&!1===this._triggerNodeEvent("beforeActivate",J,G.originalEvent)?V(J,["rejected"]):(X?(me.activeNode&&(E(me.activeNode!==J,"node was active (inconsistency)"),X=t.extend({},G,{node:me.activeNode}),me.nodeSetActive(X,!1),E(null===me.activeNode,"deactivate was out of sync?")),Me.activeVisible&&J.makeVisible({scrollIntoView:Pe}),me.activeNode=J,me.nodeRenderStatus(G),De||me.nodeSetFocus(G),ue||me._triggerNodeEvent("activate",J,G.originalEvent)):(E(me.activeNode===J,"node was not active (inconsistency)"),me.activeNode=null,this.nodeRenderStatus(G),ue||G.tree._triggerNodeEvent("deactivate",J,G.originalEvent)),L(J)))},nodeSetExpanded:function(G,X,H){var J,me,Me,ue,De,Pe,Le=G.node,pt=G.tree,it=G.options,ae=!0===(H=H||{}).noAnimation,je=!0===H.noEvents;if(X=!1!==X,t(Le.li).hasClass(it._classNames.animating))return Le.warn("setExpanded("+X+") while animating: ignored."),V(Le,["recursion"]);if(Le.expanded&&X||!Le.expanded&&!X||X&&!Le.lazy&&!Le.hasChildren())return L(Le);if(!X&&Le.getLevel()ul.fancytree-container").empty(),X.rootNode.children=null,X._callHook("treeStructureChanged",G,"clear")},treeCreate:function(G){},treeDestroy:function(G){this.$div.find(">ul.fancytree-container").remove(),this.$source&&this.$source.removeClass("fancytree-helper-hidden")},treeInit:function(G){var X=G.tree,H=X.options;X.$container.attr("tabindex",H.tabindex),t.each(O,function(J,me){void 0!==H[me]&&(X.info("Move option "+me+" to tree"),X[me]=H[me],delete H[me])}),H.checkboxAutoHide&&X.$container.addClass("fancytree-checkbox-auto-hide"),H.rtl?X.$container.attr("DIR","RTL").addClass("fancytree-rtl"):X.$container.removeAttr("DIR").removeClass("fancytree-rtl"),H.aria&&(X.$container.attr("role","tree"),1!==H.selectMode&&X.$container.attr("aria-multiselectable",!0)),this.treeLoad(G)},treeLoad:function(G,X){var H,J,me,Me=G.tree,ue=G.widget.element,De=t.extend({},G,{node:this.rootNode});if(Me.rootNode.children&&this.treeClear(G),X=X||this.options.source)"string"==typeof X&&t.error("Not implemented");else switch(J=ue.data("type")||"html"){case"html":(me=ue.find(">ul").not(".fancytree-container").first()).length?(me.addClass("ui-fancytree-source fancytree-helper-hidden"),X=t.ui.fancytree.parseHtml(me),this.data=t.extend(this.data,q(me))):(r.warn("No `source` option was passed and container does not contain `
    `: assuming `source: []`."),X=[]);break;case"json":X=t.parseJSON(ue.text()),ue.contents().filter(function(){return 3===this.nodeType}).remove(),t.isPlainObject(X)&&(E(B(X.children),"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')"),X=(H=X).children,delete H.children,t.each(O,function(Pe,Le){void 0!==H[Le]&&(Me[Le]=H[Le],delete H[Le])}),t.extend(Me.data,H));break;default:t.error("Invalid data-type: "+J)}return Me._triggerTreeEvent("preInit",null),this.nodeLoadChildren(De,X).done(function(){Me._callHook("treeStructureChanged",G,"loadChildren"),Me.render(),3===G.options.selectMode&&Me.rootNode.fixSelection3FromEndNodes(),Me.activeNode&&Me.options.activeVisible&&Me.activeNode.makeVisible(),Me._triggerTreeEvent("init",null,{status:!0})}).fail(function(){Me.render(),Me._triggerTreeEvent("init",null,{status:!1})})},treeRegisterNode:function(G,X,H){G.tree._callHook("treeStructureChanged",G,X?"addNode":"removeNode")},treeSetFocus:function(G,X,H){var J;(X=!1!==X)!==this.hasFocus()&&(!(this._hasFocus=X)&&this.focusNode?this.focusNode.setFocus(!1):!X||H&&H.calledByNode||t(this.$container).focus(),this.$container.toggleClass("fancytree-treefocus",X),this._triggerTreeEvent(X?"focusTree":"blurTree"),X&&!this.activeNode&&(J=this._lastMousedownNode||this.getFirstChild())&&J.setFocus())},treeSetOption:function(G,X,H){var J=G.tree,me=!0,Me=!1,ue=!1;switch(X){case"aria":case"checkbox":case"icon":case"minExpandLevel":case"tabindex":ue=Me=!0;break;case"checkboxAutoHide":J.$container.toggleClass("fancytree-checkbox-auto-hide",!!H);break;case"escapeTitles":case"tooltip":ue=!0;break;case"rtl":!1===H?J.$container.removeAttr("DIR").removeClass("fancytree-rtl"):J.$container.attr("DIR","RTL").addClass("fancytree-rtl"),ue=!0;break;case"source":me=!1,J._callHook("treeLoad",J,H),ue=!0}J.debug("set option "+X+"="+H+" <"+typeof H+">"),me&&(this.widget._super||t.Widget.prototype._setOption).call(this.widget,X,H),Me&&J._callHook("treeCreate",J),ue&&J.render(!0,!1)},treeStructureChanged:function(G,X){}}),t.widget("ui.fancytree",{options:{activeVisible:!0,ajax:{type:"GET",cache:!1,dataType:"json"},aria:!0,autoActivate:!0,autoCollapse:!1,autoScroll:!1,checkbox:!1,clickFolderMode:4,copyFunctionsToData:!1,debugLevel:null,disabled:!1,enableAspx:42,escapeTitles:!1,extensions:[],focusOnSelect:!1,generateIds:!1,icon:!0,idPrefix:"ft_",keyboard:!0,keyPathSeparator:"/",minExpandLevel:1,nodata:!0,quicksearch:!1,rtl:!1,scrollOfs:{top:0,bottom:0},scrollParent:null,selectMode:2,strings:{loading:"Loading...",loadError:"Load error!",moreData:"More...",noData:"No data."},tabindex:"0",titlesTabbable:!1,toggleEffect:{effect:"slideToggle",duration:200},tooltip:!1,treeId:null,_classNames:{active:"fancytree-active",animating:"fancytree-animating",combinedExpanderPrefix:"fancytree-exp-",combinedIconPrefix:"fancytree-ico-",error:"fancytree-error",expanded:"fancytree-expanded",focused:"fancytree-focused",folder:"fancytree-folder",hasChildren:"fancytree-has-children",lastsib:"fancytree-lastsib",lazy:"fancytree-lazy",loading:"fancytree-loading",node:"fancytree-node",partload:"fancytree-partload",partsel:"fancytree-partsel",radio:"fancytree-radio",selected:"fancytree-selected",statusNodePrefix:"fancytree-statusnode-",unselectable:"fancytree-unselectable"},lazyLoad:null,postProcess:null},_deprecationWarning:function(G){var X=this.tree;X&&3<=X.options.debugLevel&&X.warn("$().fancytree('"+G+"') is deprecated (see https://wwwendt.de/tech/fancytree/doc/jsdoc/Fancytree_Widget.html")},_create:function(){this.tree=new Ne(this),this.$source=this.source||"json"===this.element.data("type")?this.element:this.element.find(">ul").first();for(var G,X,H=this.options,J=H.extensions,me=0;me element.");else{if(ue){if(H._getExpiringValue("focusin"))return void H.debug("Ignored double focusin.");H._setExpiringValue("focusin",!0,50),Me||(Me=H._getExpiringValue("mouseDownNode"))&&H.debug("Reconstruct mouse target for focusin from recent event.")}Me?H._callHook("nodeSetFocus",H._makeHookContext(Me,me),ue):H.tbody&&t(me.target).parents("table.fancytree-container > thead").length?H.debug("Ignore focus event outside table body.",me):H._callHook("treeSetFocus",H,ue)}}).on("selectstart"+J,"span.fancytree-title",function(me){me.preventDefault()}).on("keydown"+J,function(me){if(X.disabled||!1===X.keyboard)return!0;var Me,ue=H.focusNode,De=H._makeHookContext(ue||H,me),Pe=H.phase;try{return H.phase="userEvent","preventNav"===(Me=ue?H._triggerNodeEvent("keydown",ue,me):H._triggerTreeEvent("keydown",me))?Me=!0:!1!==Me&&(Me=H._callHook("nodeKeydown",De)),Me}finally{H.phase=Pe}}).on("mousedown"+J,function(me){me=r.getEventTarget(me),H._lastMousedownNode=me?me.node:null,H._setExpiringValue("mouseDownNode",H._lastMousedownNode)}).on("click"+J+" dblclick"+J,function(me){if(X.disabled)return!0;var Me,ue=r.getEventTarget(me),De=ue.node,Pe=G.tree,Le=Pe.phase;if(!De)return!0;Me=Pe._makeHookContext(De,me);try{switch(Pe.phase="userEvent",me.type){case"click":return Me.targetType=ue.type,De.isPagingNode()?!0===Pe._triggerNodeEvent("clickPaging",Me,me):!1!==Pe._triggerNodeEvent("click",Me,me)&&Pe._callHook("nodeClick",Me);case"dblclick":return Me.targetType=ue.type,!1!==Pe._triggerNodeEvent("dblclick",Me,me)&&Pe._callHook("nodeDblclick",Me)}}finally{Pe.phase=Le}})},getActiveNode:function(){return this._deprecationWarning("getActiveNode"),this.tree.activeNode},getNodeByKey:function(G){return this._deprecationWarning("getNodeByKey"),this.tree.getNodeByKey(G)},getRootNode:function(){return this._deprecationWarning("getRootNode"),this.tree.rootNode},getTree:function(){return this._deprecationWarning("getTree"),this.tree}}),r=t.ui.fancytree,t.extend(t.ui.fancytree,{version:"2.38.3",buildType:"production",debugLevel:3,_nextId:1,_nextNodeKey:1,_extensions:{},_FancytreeClass:Ne,_FancytreeNodeClass:ie,jquerySupports:{positionMyOfs:function(G){for(var X,H,J=t.map(T(G).split("."),function(ue){return parseInt(ue,10)}),me=t.map(Array.prototype.slice.call(arguments,1),function(ue){return parseInt(ue,10)}),Me=0;Meli"),pt=[];return Le.each(function(){var it,ae,je=t(this),pe=je.find(">span",this).first(),Ge=pe.length?null:je.find(">a").first(),ct={tooltip:null,data:{}};for(pe.length?ct.title=pe.html():Ge&&Ge.length?(ct.title=Ge.html(),ct.data.href=Ge.attr("href"),ct.data.target=Ge.attr("target"),ct.tooltip=Ge.attr("title")):(ct.title=je.html(),0<=(Me=ct.title.search(/
      ul").first()).length?t.ui.fancytree.parseHtml(G):ct.lazy?void 0:null,pt.push(ct)}),pt},registerExtension:function(G){E(null!=G.name,"extensions must have a `name` property."),E(null!=G.version,"extensions must have a `version` property."),t.ui.fancytree._extensions[G.name]=G},trim:T,unescapeHtml:function(G){var X=document.createElement("div");return X.innerHTML=G,0===X.childNodes.length?"":X.childNodes[0].nodeValue},warn:function(G){2<=t.ui.fancytree.debugLevel&&I("warn",arguments)}}),t.ui.fancytree}function E(G,X){G||(t.ui.fancytree.error(X="Fancytree assertion failed"+(X=X?": "+X:"")),t.error(X))}function h(G,X){return Object.prototype.hasOwnProperty.call(G,X)}function b(G){return"function"==typeof G}function T(G){return null==G?"":G.trim()}function I(me,X){var H,J;if(me=window.console?window.console[me]:null)try{me.apply(window.console,X)}catch{for(J="",H=0;Hul.fancytree-container").remove(),this.rootNode=new ie({tree:this},{title:"root",key:"root_"+this._id,children:null,expanded:!0}),this.rootNode.parent=null,G=t("
        ",{id:"ft-id-"+this._id,class:"ui-fancytree fancytree-container fancytree-plain"}).appendTo(this.$div),this.$container=G,this.rootNode.ul=G[0],null==this.options.debugLevel&&(this.options.debugLevel=r.debugLevel)}t.ui.fancytree.warn("Fancytree: ignored duplicate include")},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree.ui-deps"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree.ui-deps"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";return t.ui.fancytree._FancytreeClass.prototype.countSelected=function(e){return this.getSelectedNodes(e).length},t.ui.fancytree._FancytreeNodeClass.prototype.updateCounters=function(){var e=this,r=t("span.fancytree-childcounter",e.span),d=e.tree.options.childcounter,n=e.countChildren(d.deep);!(e.data.childCounter=n)&&d.hideZeros||e.isExpanded()&&d.hideExpanded?r.remove():(r=r.length?r:t("").appendTo(t("span.fancytree-icon,span.fancytree-custom-icon",e.span))).text(n),!d.deep||e.isTopLevel()||e.isRootNode()||e.parent.updateCounters()},t.ui.fancytree.prototype.widgetMethod1=function(e){return e},t.ui.fancytree.registerExtension({name:"childcounter",version:"2.38.3",options:{deep:!0,hideZeros:!0,hideExpanded:!1},foo:42,_appendCounter:function(e){},treeInit:function(e){this._superApply(arguments),this.$container.addClass("fancytree-ext-childcounter")},treeDestroy:function(e){this._superApply(arguments)},nodeRenderTitle:function(e,r){var d=e.node,n=e.options.childcounter,l=null==d.data.childCounter?d.countChildren(n.deep):+d.data.childCounter;this._super(e,r),!l&&n.hideZeros||d.isExpanded()&&n.hideExpanded||t("span.fancytree-icon,span.fancytree-custom-icon",d.span).append(t("").text(l))},nodeSetExpanded:function(e,r,d){var n=e.tree;return this._superApply(arguments).always(function(){n.nodeRenderTitle(e)})}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e=t.ui.fancytree.assert;function r(d,n,l){for(var o,s,p=3&d.length,u=d.length-p,g=l,f=3432918353,y=461845907,v=0;v>>16)*f&65535)<<16)&4294967295)<<15|s>>>17))*y+(((s>>>16)*y&65535)<<16)&4294967295)<<13|g>>>19))+((5*(g>>>16)&65535)<<16)&4294967295))+((58964+(o>>>16)&65535)<<16);switch(s=0,p){case 3:s^=(255&d.charCodeAt(v+2))<<16;case 2:s^=(255&d.charCodeAt(v+1))<<8;case 1:g^=s=(65535&(s=(s=(65535&(s^=255&d.charCodeAt(v)))*f+(((s>>>16)*f&65535)<<16)&4294967295)<<15|s>>>17))*y+(((s>>>16)*y&65535)<<16)&4294967295}return g^=d.length,g=2246822507*(65535&(g^=g>>>16))+((2246822507*(g>>>16)&65535)<<16)&4294967295,g=3266489909*(65535&(g^=g>>>13))+((3266489909*(g>>>16)&65535)<<16)&4294967295,g^=g>>>16,n?("0000000"+(g>>>0).toString(16)).substr(-8):g>>>0}return t.ui.fancytree._FancytreeNodeClass.prototype.getCloneList=function(d){var n,l=this.tree,o=l.refMap[this.refKey]||null,s=l.keyMap;return o&&(n=this.key,d?o=t.map(o,function(p){return s[p]}):(o=t.map(o,function(p){return p===n?null:s[p]})).length<1&&(o=null)),o},t.ui.fancytree._FancytreeNodeClass.prototype.isClone=function(){var d;return!!((d=(d=this.refKey||null)&&this.tree.refMap[d]||null)&&1 "+s.getPath(!0),p.error(s),t.error(s)),u[f]=l,y&&((o=g[y])?(o.push(f),2===o.length&&d.options.clones.highlightClones&&u[o[0]].renderStatus()):g[y]=[f])):(null==u[f]&&t.error("clones.treeRegisterNode: node.key not registered: "+l.key),delete u[f],y&&(o=g[y])&&((s=o.length)<=1?(e(1===s),e(o[0]===f),delete g[y]):(function(v,_){for(var O=v.length-1;0<=O;O--)if(v[O]===_)return v.splice(O,1)}(o,f),2===s&&d.options.clones.highlightClones&&u[o[0]].renderStatus())))),this._super(d,n,l)},nodeRenderStatus:function(d){var n,l=d.node,o=this._super(d);return d.options.clones.highlightClones&&(n=t(l[d.tree.statusClassPropName])).length&&l.isClone()&&n.addClass("fancytree-clone"),o},nodeSetActive:function(d,n,l){var o=d.tree.statusClassPropName,s=d.node,p=this._superApply(arguments);return d.options.clones.highlightActiveClones&&s.isClone()&&t.each(s.getCloneList(!0),function(u,g){t(g[o]).toggleClass("fancytree-active-clone",!1!==n)}),p}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e,r,d=t.ui.fancytree,n=/Mac/.test(navigator.platform),l="fancytree-drag-source",o="fancytree-drag-remove",s="fancytree-drop-accept",p="fancytree-drop-after",u="fancytree-drop-before",g="fancytree-drop-over",f="fancytree-drop-reject",v="application/x-fancytree-node",_=null,O=null,D=null,M=null,w=null,S=null,c=null,B=null,E=null,h=null;function b(){D=O=S=B=c=h=w=null,M&&M.removeClass(l+" "+o),M=null,_&&_.hide(),r&&(r.remove(),r=null)}function T(Q){return 0===Q?"":0 "+we),S=we),q.isMove="move"===q.dropEffect,q.files=ie.files||[]}function x(Q,q,te){var we=q.tree,ie=q.dataTransfer;return"dragstart"!==Q.type&&B!==q.effectAllowed&&we.warn("effectAllowed should only be changed in dragstart event: "+Q.type+": data.effectAllowed changed from "+B+" -> "+q.effectAllowed),!1===te&&(we.info("applyDropEffectCallback: allowDrop === false"),q.effectAllowed="none",q.dropEffect="none"),q.isMove="move"===q.dropEffect,"dragstart"===Q.type&&(B=q.effectAllowed,c=q.dropEffect),ie.effectAllowed=B,ie.dropEffect=c}function V(Q){var q,te=this,we=te.options.dnd5,ie=null,Ne=d.getNode(Q),G=Q.dataTransfer||Q.originalEvent.dataTransfer,X={tree:te,node:Ne,options:te.options,originalEvent:Q.originalEvent,widget:te.widget,hitMode:w,dataTransfer:G,otherNode:O||null,otherNodeList:D||null,otherNodeData:null,useDefaultImage:!0,dropEffect:void 0,dropEffectSuggested:void 0,effectAllowed:void 0,files:null,isCancelled:void 0,isMove:void 0};switch(Q.type){case"dragenter":if(h=null,!Ne){te.debug("Ignore non-node "+Q.type+": "+Q.target.tagName+"."+Q.target.className),w=!1;break}if(t(Ne.span).addClass(g).removeClass(s+" "+f),q=0<=t.inArray(v,G.types),we.preventNonNodes&&!q){Ne.debug("Reject dropping a non-node."),w=!1;break}if(we.preventForeignNodes&&(!O||O.tree!==Ne.tree)){Ne.debug("Reject dropping a foreign node."),w=!1;break}if(we.preventSameParent&&X.otherNode&&X.otherNode.tree===Ne.tree&&Ne.parent===X.otherNode.parent){Ne.debug("Reject dropping as sibling (same parent)."),w=!1;break}if(we.preventRecursion&&X.otherNode&&X.otherNode.tree===Ne.tree&&Ne.isDescendantOf(X.otherNode)){Ne.debug("Reject dropping below own ancestor."),w=!1;break}if(we.preventLazyParents&&!Ne.isLoaded()){Ne.warn("Drop over unloaded target node prevented."),w=!1;break}_.show(),I(Q,X),q=!!(q=we.dragEnter(Ne,X))&&(q=t.isPlainObject(q)?{over:!!q.over,before:!!q.before,after:!!q.after}:Array.isArray(q)?{over:0<=t.inArray("over",q),before:0<=t.inArray("before",q),after:0<=t.inArray("after",q)}:{over:!0===q||"over"===q,before:!0===q||"before"===q,after:!0===q||"after"===q},0!==Object.keys(q).length&&q),x(Q,X,ie=(w=q)&&(q.over||q.before||q.after));break;case"dragover":if(!Ne){te.debug("Ignore non-node "+Q.type+": "+Q.target.tagName+"."+Q.target.className);break}I(Q,X),ie=!!(E=function L(Q,q){if(q.options.dnd5.scroll&&(G=Q,H=(ie=(ue=q.tree).options.dnd5).scrollSensitivity,Me=ie.scrollSpeed,we=0,(Ne=ue.$scrollParent[0])!==document&&"HTML"!==Ne.tagName?(ie=ue.$scrollParent.offset(),J=Ne.scrollTop,ie.top+Ne.offsetHeight-G.pageYwe.autoExpandMS)||Ne.isLoading()||we.dragExpand&&!1===we.dragExpand(Ne,X)||Ne.setExpanded():h=Date.now();break;case"dragleave":if(!Ne){te.debug("Ignore non-node "+Q.type+": "+Q.target.tagName+"."+Q.target.className);break}if(!t(Ne.span).hasClass(g)){Ne.debug("Ignore dragleave (multi).");break}t(Ne.span).removeClass(g+" "+s+" "+f),Ne.scheduleAction("cancel"),we.dragLeave(Ne,X),_.hide();break;case"drop":if(0<=t.inArray(v,G.types)&&(J=G.getData(v),te.info(Q.type+": getData('application/x-fancytree-node'): '"+J+"'")),J||(J=G.getData("text"),te.info(Q.type+": getData('text'): '"+J+"'")),J)try{void 0!==(H=JSON.parse(J)).title&&(X.otherNodeData=H)}catch{}te.debug(Q.type+": nodeData: '"+J+"', otherNodeData: ",X.otherNodeData),t(Ne.span).removeClass(g+" "+s+" "+f),X.hitMode=E,I(Q,X),X.isCancelled=!E;var H=O&&O.span,J=O&&O.tree;we.dragDrop(Ne,X),Q.preventDefault(),H&&!document.body.contains(H)&&(J===te?(te.debug("Drop handler removed source element: generating dragEnd."),we.dragEnd(O,X)):te.warn("Drop handler removed source element: dragend event may be lost.")),b()}if(ie)return Q.preventDefault(),!1}return t.ui.fancytree.getDragNodeList=function(){return D||[]},t.ui.fancytree.getDragNode=function(){return O},t.ui.fancytree.registerExtension({name:"dnd5",version:"2.38.3",options:{autoExpandMS:1500,dropMarkerInsertOffsetX:-16,dropMarkerOffsetX:-24,dropMarkerParent:"body",multiSource:!1,effectAllowed:"all",dropEffectDefault:"move",preventForeignNodes:!1,preventLazyParents:!0,preventNonNodes:!1,preventRecursion:!0,preventSameParent:!1,preventVoidMoves:!0,scroll:!0,scrollSensitivity:20,scrollSpeed:5,setTextTypeJson:!1,sourceCopyHook:null,dragStart:null,dragDrag:t.noop,dragEnd:t.noop,dragEnter:null,dragOver:t.noop,dragExpand:t.noop,dragDrop:t.noop,dragLeave:t.noop},treeInit:function(Q){var q=Q.tree,te=Q.options,we=te.glyph||null,ie=te.dnd5;0<=t.inArray("dnd",te.extensions)&&t.error("Extensions 'dnd' and 'dnd5' are mutually exclusive."),ie.dragStop&&t.error("dragStop is not used by ext-dnd5. Use dragEnd instead."),null!=ie.preventRecursiveMoves&&t.error("preventRecursiveMoves was renamed to preventRecursion."),ie.dragStart&&d.overrideMethod(Q.options,"createNode",function(Ne,G){this._super.apply(this,arguments),G.node.span?G.node.span.draggable=!0:G.node.warn("Cannot add `draggable`: no span tag")}),this._superApply(arguments),this.$container.addClass("fancytree-ext-dnd5"),Q=t("").appendTo(this.$container),this.$scrollParent=Q.scrollParent(),Q.remove(),(_=t("#fancytree-drop-marker")).length||(_=t("
        ").hide().css({"z-index":1e3,"pointer-events":"none"}).prependTo(ie.dropMarkerParent),we&&d.setSpanIcon(_[0],we.map._addClass,we.map.dropMarker)),_.toggleClass("fancytree-rtl",!!te.rtl),ie.dragStart&&q.$container.on("dragstart drag dragend",function(Ne){var G=this,X=G.options.dnd5,H=d.getNode(Ne),J=Ne.dataTransfer||Ne.originalEvent.dataTransfer,me={tree:G,node:H,options:G.options,originalEvent:Ne.originalEvent,widget:G.widget,dataTransfer:J,useDefaultImage:!0,dropEffect:void 0,dropEffectSuggested:void 0,effectAllowed:void 0,files:void 0,isCancelled:void 0,isMove:void 0};switch(Ne.type){case"dragstart":if(!H)return G.info("Ignored dragstart on a non-node."),!1;O=H,D=!1===X.multiSource?[H]:!0===X.multiSource?H.isSelected()?G.getSelectedNodes():[H]:X.multiSource(H,me),(M=t(t.map(D,function(ue){return ue.span}))).addClass(l);var Me=H.toDict(!0,X.sourceCopyHook);Me.treeId=H.tree._id,Me=JSON.stringify(Me);try{J.setData(v,Me),J.setData("text/html",t(H.span).html()),J.setData("text/plain",H.title)}catch(ue){G.warn("Could not set data (IE only accepts 'text') - "+ue)}return J.setData("text",X.setTextTypeJson?Me:H.title),I(Ne,me),!1===X.dragStart(H,me)?(b(),!1):(x(Ne,me),r=null,me.useDefaultImage&&(e=t(H.span).find(".fancytree-title"),D&&1").text("+"+(D.length-1)).appendTo(e)),J.setDragImage&&J.setDragImage(e[0],-10,-10)),!0);case"drag":I(Ne,me),X.dragDrag(H,me),x(Ne,me),M.toggleClass(o,me.isMove);break;case"dragend":I(Ne,me),b(),me.isCancelled=!E,X.dragEnd(H,me,!E)}}.bind(q)),ie.dragEnter&&q.$container.on("dragenter dragover dragleave drop",V.bind(q))}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e=/Mac/.test(navigator.platform),r=t.ui.fancytree.escapeHtml,d=t.ui.fancytree.trim,n=t.ui.fancytree.unescapeHtml;return t.ui.fancytree._FancytreeNodeClass.prototype.editStart=function(){var l,o=this,s=this.tree,p=s.ext.edit,u=s.options.edit,g=t(".fancytree-title",o.span),f={node:o,tree:s,options:s.options,isNew:t(o[s.statusClassPropName]).hasClass("fancytree-edit-new"),orgTitle:o.title,input:null,dirty:!1};if(!1===u.beforeEdit.call(o,{type:"beforeEdit"},f))return!1;t.ui.fancytree.assert(!p.currentNode,"recursive edit"),p.currentNode=this,p.eventData=f,s.widget._unbind(),p.lastDraggableAttrValue=o.span.draggable,p.lastDraggableAttrValue&&(o.span.draggable=!1),t(document).on("mousedown.fancytree-edit",function(y){t(y.target).hasClass("fancytree-edit-input")||o.editEnd(!0,y)}),l=t("",{class:"fancytree-edit-input",type:"text",value:s.options.escapeTitles?f.orgTitle:n(f.orgTitle)}),p.eventData.input=l,null!=u.adjustWidthOfs&&l.width(g.width()+u.adjustWidthOfs),null!=u.inputCss&&l.css(u.inputCss),g.html(l),l.focus().change(function(y){l.addClass("fancytree-edit-dirty")}).on("keydown",function(y){switch(y.which){case t.ui.keyCode.ESCAPE:o.editEnd(!1,y);break;case t.ui.keyCode.ENTER:return o.editEnd(!0,y),!1}y.stopPropagation()}).blur(function(y){return o.editEnd(!0,y)}),u.edit.call(o,{type:"edit"},f)},t.ui.fancytree._FancytreeNodeClass.prototype.editEnd=function(l,o){var s,p=this,u=this.tree,g=u.ext.edit,f=g.eventData,y=u.options.edit,v=t(".fancytree-title",p.span).find("input.fancytree-edit-input");return y.trim&&v.val(d(v.val())),s=v.val(),f.dirty=s!==p.title,f.originalEvent=o,f.save=!1!==l&&(f.isNew||f.dirty)&&""!==s,!(!1===y.beforeClose.call(p,{type:"beforeClose"},f)||f.save&&!1===y.save.call(p,{type:"save"},f)||(v.removeClass("fancytree-edit-dirty").off(),t(document).off(".fancytree-edit"),f.save?(p.setTitle(u.options.escapeTitles?s:r(s)),p.setFocus()):f.isNew?(p.remove(),p=f.node=null,g.relatedNode.setFocus()):(p.renderTitle(),p.setFocus()),g.eventData=null,g.currentNode=null,g.relatedNode=null,u.widget._bind(),p&&g.lastDraggableAttrValue&&(p.span.draggable=!0),u.$container.get(0).focus({preventScroll:!0}),f.input=null,y.close.call(p,{type:"close"},f),0))},t.ui.fancytree._FancytreeNodeClass.prototype.editCreateNode=function(l,o){var s,p=this.tree,u=this;l=l||"child",null==o?o={title:""}:"string"==typeof o?o={title:o}:t.ui.fancytree.assert(t.isPlainObject(o)),"child"!==l||this.isExpanded()||!1===this.hasChildren()?((s=this.addNode(o,l)).match=!0,t(s[p.statusClassPropName]).removeClass("fancytree-hide").addClass("fancytree-match"),s.makeVisible().done(function(){t(s[p.statusClassPropName]).addClass("fancytree-edit-new"),u.tree.ext.edit.relatedNode=u,s.editStart()})):this.setExpanded().done(function(){u.editCreateNode(l,o)})},t.ui.fancytree._FancytreeClass.prototype.isEditing=function(){return this.ext.edit?this.ext.edit.currentNode:null},t.ui.fancytree._FancytreeNodeClass.prototype.isEditing=function(){return!!this.tree.ext.edit&&this.tree.ext.edit.currentNode===this},t.ui.fancytree.registerExtension({name:"edit",version:"2.38.3",options:{adjustWidthOfs:4,allowEmpty:!1,inputCss:{minWidth:"3em"},triggerStart:["f2","mac+enter","shift+click"],trim:!0,beforeClose:t.noop,beforeEdit:t.noop,close:t.noop,edit:t.noop,save:t.noop},currentNode:null,treeInit:function(l){var o=l.tree;this._superApply(arguments),this.$container.addClass("fancytree-ext-edit").on("fancytreebeforeupdateviewport",function(s,p){var u=o.isEditing();u&&(u.info("Cancel edit due to scroll event."),u.editEnd(!1,s))})},nodeClick:function(l){var o=t.ui.fancytree.eventToString(l.originalEvent),s=l.options.edit.triggerStart;return"shift+click"===o&&0<=t.inArray("shift+click",s)&&l.originalEvent.shiftKey||"click"===o&&0<=t.inArray("clickActive",s)&&l.node.isActive()&&!l.node.isEditing()&&t(l.originalEvent.target).hasClass("fancytree-title")?(l.node.editStart(),!1):this._superApply(arguments)},nodeDblclick:function(l){return 0<=t.inArray("dblclick",l.options.edit.triggerStart)?(l.node.editStart(),!1):this._superApply(arguments)},nodeKeydown:function(l){switch(l.originalEvent.which){case 113:if(0<=t.inArray("f2",l.options.edit.triggerStart))return l.node.editStart(),!1;break;case t.ui.keyCode.ENTER:if(0<=t.inArray("mac+enter",l.options.edit.triggerStart)&&e)return l.node.editStart(),!1}return this._superApply(arguments)}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e="__not_found__",r=t.ui.fancytree.escapeHtml;function d(l){return(l+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}function n(l,o,s){for(var p=[],u=1;u"}),f.join("")}return t.ui.fancytree._FancytreeClass.prototype._applyFilterImpl=function(l,o,s){var p,u,g,f,y,v,_=0,O=this.options,D=O.escapeTitles,M=O.autoCollapse,w=t.extend({},O.filter,s),S="hide"===w.mode,c=!!w.leavesOnly&&!o;if("string"==typeof l){if(""===l)return this.warn("Fancytree passing an empty string as a filter is handled as clearFilter()."),void this.clearFilter();p=w.fuzzy?l.split("").map(d).reduce(function(B,E){return B+"([^"+E+"]*)"+E},""):d(l),u=new RegExp(p,"i"),g=new RegExp(d(l),"gi"),D&&(f=new RegExp(d("\ufff7"),"g"),y=new RegExp(d("\ufff8"),"g")),l=function(B){if(!B.title)return!1;var h,E=D?B.title:0<=(h=B.title).indexOf(">")?t("
        ").html(h).text():h;return(h=E.match(u))&&w.highlight&&(D?(v=w.fuzzy?n(E,h,D):E.replace(g,function(b){return"\ufff7"+b+"\ufff8"}),B.titleWithHighlight=r(v).replace(f,"").replace(y,"")):B.titleWithHighlight=w.fuzzy?n(E,h):E.replace(g,function(b){return""+b+""})),!!h}}return this.enableFilter=!0,this.lastFilterArgs=arguments,s=this.enableUpdate(!1),this.$div.addClass("fancytree-ext-filter"),this.$div.addClass(S?"fancytree-ext-filter-hide":"fancytree-ext-filter-dimm"),this.$div.toggleClass("fancytree-ext-filter-hide-expanders",!!w.hideExpanders),this.rootNode.subMatchCount=0,this.visit(function(B){delete B.match,delete B.titleWithHighlight,B.subMatchCount=0}),(p=this.getRootNode()._findDirectChild(e))&&p.remove(),O.autoCollapse=!1,this.visit(function(B){if(!c||null==B.children){var E=l(B),h=!1;if("skip"===E)return B.visit(function(b){b.match=!1},!0),"skip";E||!o&&"branch"!==E||!B.parent.match||(h=E=!0),E&&(_++,B.match=!0,B.visitParents(function(b){b!==B&&(b.subMatchCount+=1),!w.autoExpand||h||b.expanded||(b.setExpanded(!0,{noAnimation:!0,noEvents:!0,scrollIntoView:!1}),b._filterAutoExpanded=!0)},!0))}}),O.autoCollapse=M,0===_&&w.nodata&&S&&(!0===(p="function"==typeof(p=w.nodata)?p():p)?p={}:"string"==typeof p&&(p={title:p}),p=t.extend({statusNodeType:"nodata",key:e,title:this.options.strings.noData},p),this.getRootNode().addNode(p).match=!0),this._callHook("treeStructureChanged",this,"applyFilter"),this.enableUpdate(s),_},t.ui.fancytree._FancytreeClass.prototype.filterNodes=function(l,o){return"boolean"==typeof o&&(o={leavesOnly:o},this.warn("Fancytree.filterNodes() leavesOnly option is deprecated since 2.9.0 / 2015-04-19. Use opts.leavesOnly instead.")),this._applyFilterImpl(l,!1,o)},t.ui.fancytree._FancytreeClass.prototype.filterBranches=function(l,o){return this._applyFilterImpl(l,!0,o)},t.ui.fancytree._FancytreeClass.prototype.updateFilter=function(){this.enableFilter&&this.lastFilterArgs&&this.options.filter.autoApply?this._applyFilterImpl.apply(this,this.lastFilterArgs):this.warn("updateFilter(): no filter active.")},t.ui.fancytree._FancytreeClass.prototype.clearFilter=function(){var l,o=this.getRootNode()._findDirectChild(e),s=this.options.escapeTitles,p=this.options.enhanceTitle,u=this.enableUpdate(!1);o&&o.remove(),delete this.rootNode.match,delete this.rootNode.subMatchCount,this.visit(function(g){g.match&&g.span&&(l=t(g.span).find(">span.fancytree-title"),s?l.text(g.title):l.html(g.title),p&&p({type:"enhanceTitle"},{node:g,$title:l})),delete g.match,delete g.subMatchCount,delete g.titleWithHighlight,g.$subMatchBadge&&(g.$subMatchBadge.remove(),delete g.$subMatchBadge),g._filterAutoExpanded&&g.expanded&&g.setExpanded(!1,{noAnimation:!0,noEvents:!0,scrollIntoView:!1}),delete g._filterAutoExpanded}),this.enableFilter=!1,this.lastFilterArgs=null,this.$div.removeClass("fancytree-ext-filter fancytree-ext-filter-dimm fancytree-ext-filter-hide"),this._callHook("treeStructureChanged",this,"clearFilter"),this.enableUpdate(u)},t.ui.fancytree._FancytreeClass.prototype.isFilterActive=function(){return!!this.enableFilter},t.ui.fancytree._FancytreeNodeClass.prototype.isMatched=function(){return!(this.tree.enableFilter&&!this.match)},t.ui.fancytree.registerExtension({name:"filter",version:"2.38.3",options:{autoApply:!0,autoExpand:!1,counter:!0,fuzzy:!1,hideExpandedCounter:!0,hideExpanders:!1,highlight:!0,leavesOnly:!1,nodata:!0,mode:"dimm"},nodeLoadChildren:function(l,o){var s=l.tree;return this._superApply(arguments).done(function(){s.enableFilter&&s.lastFilterArgs&&l.options.filter.autoApply&&s._applyFilterImpl.apply(s,s.lastFilterArgs)})},nodeSetExpanded:function(l,o,s){var p=l.node;return delete p._filterAutoExpanded,!o&&l.options.filter.hideExpandedCounter&&p.$subMatchBadge&&p.$subMatchBadge.show(),this._superApply(arguments)},nodeRenderStatus:function(v){var o=v.node,s=v.tree,p=v.options.filter,u=t(o.span).find("span.fancytree-title"),g=t(o[s.statusClassPropName]),f=v.options.enhanceTitle,y=v.options.escapeTitles;return v=this._super(v),g.length&&s.enableFilter&&(g.toggleClass("fancytree-match",!!o.match).toggleClass("fancytree-submatch",!!o.subMatchCount).toggleClass("fancytree-hide",!(o.match||o.subMatchCount)),!p.counter||!o.subMatchCount||o.isExpanded()&&p.hideExpandedCounter?o.$subMatchBadge&&o.$subMatchBadge.hide():(o.$subMatchBadge||(o.$subMatchBadge=t(""),t("span.fancytree-icon, span.fancytree-custom-icon",o.span).append(o.$subMatchBadge)),o.$subMatchBadge.show().text(o.subMatchCount)),!o.span||o.isEditing&&o.isEditing.call(o)||(o.titleWithHighlight?u.html(o.titleWithHighlight):y?u.text(o.title):u.html(o.title),f&&f({type:"enhanceTitle"},{node:o,$title:u}))),v}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e=t.ui.fancytree,r={awesome3:{_addClass:"",checkbox:"icon-check-empty",checkboxSelected:"icon-check",checkboxUnknown:"icon-check icon-muted",dragHelper:"icon-caret-right",dropMarker:"icon-caret-right",error:"icon-exclamation-sign",expanderClosed:"icon-caret-right",expanderLazy:"icon-angle-right",expanderOpen:"icon-caret-down",loading:"icon-refresh icon-spin",nodata:"icon-meh",noExpander:"",radio:"icon-circle-blank",radioSelected:"icon-circle",doc:"icon-file-alt",docOpen:"icon-file-alt",folder:"icon-folder-close-alt",folderOpen:"icon-folder-open-alt"},awesome4:{_addClass:"fa",checkbox:"fa-square-o",checkboxSelected:"fa-check-square-o",checkboxUnknown:"fa-square fancytree-helper-indeterminate-cb",dragHelper:"fa-arrow-right",dropMarker:"fa-long-arrow-right",error:"fa-warning",expanderClosed:"fa-caret-right",expanderLazy:"fa-angle-right",expanderOpen:"fa-caret-down",loading:{html:""},nodata:"fa-meh-o",noExpander:"",radio:"fa-circle-thin",radioSelected:"fa-circle",doc:"fa-file-o",docOpen:"fa-file-o",folder:"fa-folder-o",folderOpen:"fa-folder-open-o"},awesome5:{_addClass:"",checkbox:"far fa-square",checkboxSelected:"far fa-check-square",checkboxUnknown:"fas fa-square fancytree-helper-indeterminate-cb",radio:"far fa-circle",radioSelected:"fas fa-circle",radioUnknown:"far fa-dot-circle",dragHelper:"fas fa-arrow-right",dropMarker:"fas fa-long-arrow-alt-right",error:"fas fa-exclamation-triangle",expanderClosed:"fas fa-caret-right",expanderLazy:"fas fa-angle-right",expanderOpen:"fas fa-caret-down",loading:"fas fa-spinner fa-pulse",nodata:"far fa-meh",noExpander:"",doc:"far fa-file",docOpen:"far fa-file",folder:"far fa-folder",folderOpen:"far fa-folder-open"},bootstrap3:{_addClass:"glyphicon",checkbox:"glyphicon-unchecked",checkboxSelected:"glyphicon-check",checkboxUnknown:"glyphicon-expand fancytree-helper-indeterminate-cb",dragHelper:"glyphicon-play",dropMarker:"glyphicon-arrow-right",error:"glyphicon-warning-sign",expanderClosed:"glyphicon-menu-right",expanderLazy:"glyphicon-menu-right",expanderOpen:"glyphicon-menu-down",loading:"glyphicon-refresh fancytree-helper-spin",nodata:"glyphicon-info-sign",noExpander:"",radio:"glyphicon-remove-circle",radioSelected:"glyphicon-ok-circle",doc:"glyphicon-file",docOpen:"glyphicon-file",folder:"glyphicon-folder-close",folderOpen:"glyphicon-folder-open"},material:{_addClass:"material-icons",checkbox:{text:"check_box_outline_blank"},checkboxSelected:{text:"check_box"},checkboxUnknown:{text:"indeterminate_check_box"},dragHelper:{text:"play_arrow"},dropMarker:{text:"arrow-forward"},error:{text:"warning"},expanderClosed:{text:"chevron_right"},expanderLazy:{text:"last_page"},expanderOpen:{text:"expand_more"},loading:{text:"autorenew",addClass:"fancytree-helper-spin"},nodata:{text:"info"},noExpander:{text:""},radio:{text:"radio_button_unchecked"},radioSelected:{text:"radio_button_checked"},doc:{text:"insert_drive_file"},docOpen:{text:"insert_drive_file"},folder:{text:"folder"},folderOpen:{text:"folder_open"}}};function d(n,l,o,f,p){var u=(y=f.map)[p],g=t(l),y=(f=g.find(".fancytree-childcounter"),o+" "+(y._addClass||""));"string"==typeof(u="function"==typeof u?u.call(this,n,l,p):u)?(l.innerHTML="",g.attr("class",y+" "+u).append(f)):u&&(u.text?l.textContent=""+u.text:l.innerHTML=u.html?u.html:"",g.attr("class",y+" "+(u.addClass||"")).append(f))}return t.ui.fancytree.registerExtension({name:"glyph",version:"2.38.3",options:{preset:null,map:{}},treeInit:function(o){var l=o.tree;(o=o.options.glyph).preset?(e.assert(!!r[o.preset],"Invalid value for `options.glyph.preset`: "+o.preset),o.map=t.extend({},r[o.preset],o.map)):l.warn("ext-glyph: missing `preset` option."),this._superApply(arguments),l.$container.addClass("fancytree-ext-glyph")},nodeRenderStatus:function(n){var l,o,s=n.node,p=t(s.span),u=n.options.glyph,g=this._super(n);return s.isRootNode()||((o=p.children(".fancytree-expander").get(0))&&(l=s.expanded&&s.hasChildren()?"expanderOpen":s.isUndefined()?"expanderLazy":s.hasChildren()?"expanderClosed":"noExpander",d(s,o,"fancytree-expander",u,l)),(o=(s.tr?t("td",s.tr).find(".fancytree-checkbox"):p.children(".fancytree-checkbox")).get(0))&&(n=e.evalOption("checkbox",s,s,u,!1),s.parent&&s.parent.radiogroup||"radio"===n?d(s,o,"fancytree-checkbox fancytree-radio",u,l=s.selected?"radioSelected":"radio"):d(s,o,"fancytree-checkbox",u,l=s.selected?"checkboxSelected":s.partsel?"checkboxUnknown":"checkbox")),(o=p.children(".fancytree-icon").get(0))&&(l=s.statusNodeType||(s.folder?s.expanded&&s.hasChildren()?"folderOpen":"folder":s.expanded?"docOpen":"doc"),d(s,o,"fancytree-icon",u,l))),g},nodeSetStatus:function(f,l,o,s){var p,u=f.options.glyph,g=f.node;return f=this._superApply(arguments),"error"!==l&&"loading"!==l&&"nodata"!==l||(g.parent?(p=t(".fancytree-expander",g.span).get(0))&&d(g,p,"fancytree-expander",u,l):(p=t(".fancytree-statusnode-"+l,g[this.nodeContainerAttrName]).find(".fancytree-icon").get(0))&&d(g,p,"fancytree-icon",u,l)),f}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e=t.ui.keyCode,r={text:[e.UP,e.DOWN],checkbox:[e.UP,e.DOWN,e.LEFT,e.RIGHT],link:[e.UP,e.DOWN,e.LEFT,e.RIGHT],radiobutton:[e.UP,e.DOWN,e.LEFT,e.RIGHT],"select-one":[e.LEFT,e.RIGHT],"select-multiple":[e.LEFT,e.RIGHT]};return t.ui.fancytree.registerExtension({name:"gridnav",version:"2.38.3",options:{autofocusInput:!1,handleCursorKeys:!0},treeInit:function(n){this._requireExtension("table",!0,!0),this._superApply(arguments),this.$container.addClass("fancytree-ext-gridnav"),this.$container.on("focusin",function(l){var o=t.ui.fancytree.getNode(l.target);o&&!o.isActive()&&(l=n.tree._makeHookContext(o,l),n.tree._callHook("nodeSetActive",l,!0))})},nodeSetActive:function(n,l,o){var s=n.options.gridnav,p=n.node,u=t((u=n.originalEvent||{}).target).is(":input");l=!1!==l,this._superApply(arguments),l&&(n.options.titlesTabbable?(u||(t(p.span).find("span.fancytree-title").focus(),p.setFocus()),n.tree.$container.attr("tabindex","-1")):s.autofocusInput&&!u&&t(p.tr||p.span).find(":input:enabled").first().focus())},nodeKeydown:function(u){var l,o,s=u.options.gridnav,p=u.originalEvent;return(u=t(p.target)).is(":input:enabled")?l=u.prop("type"):u.is("a")&&(l="link"),l&&s.handleCursorKeys?!((l=r[l])&&0<=t.inArray(p.which,l)&&(o=function d(n,l){var o,s,p,u,g,f,y=n.closest("td"),v=null;switch(l){case e.LEFT:v=y.prev();break;case e.RIGHT:v=y.next();break;case e.UP:case e.DOWN:for(p=o=y.parent(),g=y.get(0),f=0,p.children().each(function(){return this!==g&&(u=t(this).prop("colspan"),void(f+=u||1))}),s=f;(o=l===e.UP?o.prev():o.next()).length&&(o.is(":hidden")||!(v=function(_,O){var D,M=null,w=0;return _.children().each(function(){return O<=w?(M=t(this),!1):(D=t(this).prop("colspan"),void(w+=D||1))}),M}(o,s))||!v.find(":input,a").length););}return v}(u,p.which))&&o.length&&(o.find(":input:enabled,a").focus(),1)):this._superApply(arguments)}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree","./jquery.fancytree.table"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree.table"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";return t.ui.fancytree.registerExtension({name:"multi",version:"2.38.3",options:{allowNoSelect:!1,mode:"sameParent"},treeInit:function(e){this._superApply(arguments),this.$container.addClass("fancytree-ext-multi"),1===e.options.selectMode&&t.error("Fancytree ext-multi: selectMode: 1 (single) is not compatible.")},nodeClick:function(e){var r=e.tree,d=e.node,n=r.getActiveNode()||r.getFirstChild(),l="checkbox"===e.targetType,o="expander"===e.targetType;switch(t.ui.fancytree.eventToString(e.originalEvent)){case"click":if(o)break;l||(r.selectAll(!1),d.setSelected());break;case"shift+click":r.visitRows(function(s){if(s.setSelected(),s===d)return!1},{start:n,reverse:n.isBelowOf(d)});break;case"ctrl+click":case"meta+click":return void d.toggleSelected()}return this._superApply(arguments)},nodeKeydown:function(e){var r=e.tree,d=e.node,n=e.originalEvent;switch(t.ui.fancytree.eventToString(n)){case"up":case"down":r.selectAll(!1),d.navigate(n.which,!0),r.getActiveNode().setSelected();break;case"shift+up":case"shift+down":d.navigate(n.which,!0),r.getActiveNode().setSelected()}return this._superApply(arguments)}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e=null,r=null,d=null,n=t.ui.fancytree.assert,l="active",o="expanded",s="focus",p="selected";try{n(window.localStorage&&window.localStorage.getItem),r={get:function(u){return window.localStorage.getItem(u)},set:function(u,g){window.localStorage.setItem(u,g)},remove:function(u){window.localStorage.removeItem(u)}}}catch(u){t.ui.fancytree.warn("Could not access window.localStorage",u)}try{n(window.sessionStorage&&window.sessionStorage.getItem),d={get:function(u){return window.sessionStorage.getItem(u)},set:function(u,g){window.sessionStorage.setItem(u,g)},remove:function(u){window.sessionStorage.removeItem(u)}}}catch(u){t.ui.fancytree.warn("Could not access window.sessionStorage",u)}return"function"==typeof Cookies?e={get:Cookies.get,set:function(u,g){Cookies.set(u,g,this.options.persist.cookie)},remove:Cookies.remove}:t&&"function"==typeof t.cookie&&(e={get:t.cookie,set:function(u,g){t.cookie(u,g,this.options.persist.cookie)},remove:t.removeCookie}),t.ui.fancytree._FancytreeClass.prototype.clearPersistData=function(u){var g=this.ext.persist,f=g.cookiePrefix;0<=(u=u||"active expanded focus selected").indexOf(l)&&g._data(f+l,null),0<=u.indexOf(o)&&g._data(f+o,null),0<=u.indexOf(s)&&g._data(f+s,null),0<=u.indexOf(p)&&g._data(f+p,null)},t.ui.fancytree._FancytreeClass.prototype.clearCookies=function(u){return this.warn("'tree.clearCookies()' is deprecated since v2.27.0: use 'clearPersistData()' instead."),this.clearPersistData(u)},t.ui.fancytree._FancytreeClass.prototype.getPersistData=function(){var u=this.ext.persist,g=u.cookiePrefix,f=u.cookieDelimiter,y={};return y[l]=u._data(g+l),y[o]=(u._data(g+o)||"").split(f),y[p]=(u._data(g+p)||"").split(f),y[s]=u._data(g+s),y},t.ui.fancytree.registerExtension({name:"persist",version:"2.38.3",options:{cookieDelimiter:"~",cookiePrefix:void 0,cookie:{raw:!1,expires:"",path:"",domain:"",secure:!1},expandLazy:!1,expandOpts:void 0,fireActivate:!0,overrideSource:!0,store:"auto",types:"active expanded focus selected"},_data:function(u,g){var f=this._local.store;if(void 0===g)return f.get.call(this,u);null===g?f.remove.call(this,u):f.set.call(this,u,g)},_appendKey:function(O,g,f){g=""+g;var D,y=this._local,v=this.options.persist.cookieDelimiter,_=y.cookiePrefix+O;O=(D=y._data(_))?D.split(v):[],0<=(D=t.inArray(g,O))&&O.splice(D,1),f&&O.push(g),y._data(_,O.join(v))},treeInit:function(u){var g=u.tree,f=u.options,y=this._local,v=this.options.persist;return y.cookiePrefix=v.cookiePrefix||"fancytree-"+g._id+"-",y.storeActive=0<=v.types.indexOf(l),y.storeExpanded=0<=v.types.indexOf(o),y.storeSelected=0<=v.types.indexOf(p),y.storeFocus=0<=v.types.indexOf(s),y.store=null,"auto"===v.store&&(v.store=r?"local":"cookie"),t.isPlainObject(v.store)?y.store=v.store:"cookie"===v.store?y.store=e:"local"!==v.store&&"session"!==v.store||(y.store="local"===v.store?r:d),n(y.store,"Need a valid store."),g.$div.on("fancytreeinit",function(_){var O,D,M,w,S,c;!1!==g._triggerTreeEvent("beforeRestore",null,{})&&(M=y._data(y.cookiePrefix+s),w=!1===v.fireActivate,S=y._data(y.cookiePrefix+o),c=S&&S.split(v.cookieDelimiter),(y.storeExpanded?function B(E,h,b,T,I){var x,L,V,Q,q=!1,te=E.options.persist.expandOpts,we=[],ie=[];for(b=b||[],I=I||t.Deferred(),x=0,V=b.length;xtbody")).length||(g.find(">tr").length&&t.error("Expected table > tbody > tr. If you see this please open an issue."),o=t("").appendTo(g)),s.tbody=o[0],s.columnCount=t("thead >tr",g).last().find(">th",g).length,(l=o.children("tr").first()).length)d=l.children("td").length,s.columnCount&&d!==s.columnCount&&(s.warn("Column count mismatch between thead ("+s.columnCount+") and tbody ("+d+"): using tbody."),s.columnCount=d),l=l.clone();else for(e(1<=s.columnCount,"Need either or with elements to determine column count."),l=t(""),n=0;n");l.find(">td").eq(u.nodeColumnIdx).html(""),p.aria&&(l.attr("role","row"),l.find("td").attr("role","gridcell")),s.rowFragment=document.createDocumentFragment(),s.rowFragment.appendChild(l.get(0)),o.empty(),s.statusClassPropName="tr",s.ariaPropName="tr",this.nodeContainerAttrName="tr",s.$container=g,this._superApply(arguments),t(s.rootNode.ul).remove(),s.rootNode.ul=null,this.$container.attr("tabindex",p.tabindex),p.aria&&s.$container.attr("role","treegrid").attr("aria-readonly",!0)},nodeRemoveChildMarkup:function(d){d.node.visit(function(n){n.tr&&(t(n.tr).remove(),n.tr=null)})},nodeRemoveMarkup:function(d){var n=d.node;n.tr&&(t(n.tr).remove(),n.tr=null),this.nodeRemoveChildMarkup(d)},nodeRender:function(d,n,l,o,s){var p,u,g,f,y,v,_,O,D,M=d.tree,w=d.node,S=d.options,c=!w.parent;if(!1!==M._enableUpdate){if(s||(d.hasCollapsedParents=w.parent&&!w.parent.expanded),!c)if(w.tr&&n&&this.nodeRemoveMarkup(d),w.tr)n?this.nodeRenderTitle(d):this.nodeRenderStatus(d);else{if(d.hasCollapsedParents&&!l)return;y=M.rowFragment.firstChild.cloneNode(!0),O=function(B){var E,h,b=B.parent,T=b?b.children:null;if(T&&1td").eq(0).prop("colspan",l.columnCount).text(o.title).addClass("fancytree-status-merged").nextAll().remove():s.renderColumns&&s.renderColumns.call(l,{type:"renderColumns"},d)),u},nodeRenderStatus:function(d){var n=d.node,l=d.options;this._super(d),t(n.tr).removeClass("fancytree-node"),d=(n.getLevel()-1)*l.table.indentation,l.rtl?t(n.span).css({paddingRight:d+"px"}):t(n.span).css({paddingLeft:d+"px"})},nodeSetExpanded:function(d,n,l){if(n=!1!==n,d.node.expanded&&n||!d.node.expanded&&!n)return this._superApply(arguments);var o=new t.Deferred,s=t.extend({},l,{noEvents:!0,noAnimation:!0});function p(u){u?(r(d.node,n),n&&d.options.autoScroll&&!l.noAnimation&&d.node.hasChildren()?d.node.getLastChild().scrollIntoView(!0,{topNode:d.node}).always(function(){l.noEvents||d.tree._triggerNodeEvent(n?"expand":"collapse",d),o.resolveWith(d.node)}):(l.noEvents||d.tree._triggerNodeEvent(n?"expand":"collapse",d),o.resolveWith(d.node))):(l.noEvents||d.tree._triggerNodeEvent(n?"expand":"collapse",d),o.rejectWith(d.node))}return l=l||{},this._super(d,n,s).done(function(){p(!0)}).fail(function(){p(!1)}),o.promise()},nodeSetStatus:function(d,n,l,o){return"ok"!==n||(d=(d=d.node).children?d.children[0]:null)&&d.isStatusNode()&&t(d.tr).remove(),this._superApply(arguments)},treeClear:function(d){return this.nodeRemoveChildMarkup(this._makeHookContext(this.rootNode)),this._superApply(arguments)},treeDestroy:function(d){return this.$container.find("tbody").empty(),this.$source&&this.$source.removeClass("fancytree-helper-hidden"),this._superApply(arguments)}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";return t.ui.fancytree.registerExtension({name:"themeroller",version:"2.38.3",options:{activeClass:"ui-state-active",addClass:"ui-corner-all",focusClass:"ui-state-focus",hoverClass:"ui-state-hover",selectedClass:"ui-state-highlight"},treeInit:function(e){var r=e.widget.element,d=e.options.themeroller;this._superApply(arguments),"TABLE"===r[0].nodeName?(r.addClass("ui-widget ui-corner-all"),r.find(">thead tr").addClass("ui-widget-header"),r.find(">tbody").addClass("ui-widget-conent")):r.addClass("ui-widget ui-widget-content ui-corner-all"),r.on("mouseenter mouseleave",".fancytree-node",function(o){var l=t.ui.fancytree.getNode(o.target);o="mouseenter"===o.type,t(l.tr||l.span).toggleClass(d.hoverClass+" "+d.addClass,o)})},treeDestroy:function(e){this._superApply(arguments),e.widget.element.removeClass("ui-widget ui-widget-content ui-corner-all")},nodeRenderStatus:function(e){var r={},d=e.node,n=t(d.tr||d.span),l=e.options.themeroller;this._super(e),r[l.activeClass]=!1,r[l.focusClass]=!1,r[l.selectedClass]=!1,d.isActive()&&(r[l.activeClass]=!0),d.hasFocus()&&(r[l.focusClass]=!0),d.isSelected()&&!d.isActive()&&(r[l.selectedClass]=!0),n.toggleClass(l.activeClass,r[l.activeClass]),n.toggleClass(l.focusClass,r[l.focusClass]),n.toggleClass(l.selectedClass,r[l.selectedClass]),n.addClass(l.addClass)}}),t.ui.fancytree},"function"==typeof define&&define.amd?define(["jquery","./jquery.fancytree"],C):"object"==typeof module&&module.exports?(require("./jquery.fancytree"),module.exports=C(require("jquery"))):C(jQuery),C=function(t){"use strict";var e=/^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/;function r(n,l){var o=t("#"+(n="fancytree-style-"+n));if(l){o.length||(o=t("