{"version":3,"file":"js/51-44112e60c6025382c07e.js","mappings":"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","sources":["webpack://relier-react-webpack-rails/./app/javascript/src/application/analytics.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/api/client.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/api/sdk.gen.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Admin/Versions/List.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/Button.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Dashboard/assessment_dashboard_modal.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CohortProgressesDeliveriesTable.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/clc_bar.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/curricular_summary_discipline.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/curricular_summary_focus.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/curricular_summary_system.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/ibubble.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CurricularPerformanceSummary/sorting_curricular_summary.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/CustomMultiSelect.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Assessment/Reports/StudentLearningProgressTable.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/FileUploader/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Button/component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/CollapsibleList/Item/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/DirectionalButtons/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/List/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/check_visibility.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/LoadingSpinner/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Modal/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/PostButton/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/StickyTable/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/SortTable/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/ToggleBar/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/ToggleView/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Integrations/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/FindAndReplaceControls.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/find.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/NodeGeneralControls/ColorPicker.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/NodeGeneralControls/LinkInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/BooleanInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/EnumTagsInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/FalseOrNumberInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/SelectInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/TextInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/TagsInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/MultiSelectInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader/MetadataInputs.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/EditHeader.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ConvertToRLOModal.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Channels/ActiveEditors/ActiveEditor.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Channels/ActiveEditors.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ListRLOModal.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/NodeGeneralControls.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/TopControls.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/MediaManager.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/UpdateOnBlurTextField/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar/MediaPicker.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/EditBar.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/StyledText/Editor.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/StyledText.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CDQFeatures.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Section/Header.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/AddNode.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/currentlyEditing.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/Bookmark.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodeHelpers/Note.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Audio.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/handleActions.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Button.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CategoryMatcher/GradedFeedbackBanner.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CategoryMatcher.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/CDQQuestion.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Checkbox.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/HorizontalRule.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Image.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/ImageGallery.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/LearningObjective.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/LearningObjectivesList.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/List/ListItem.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/Inline.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/List.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/MultipleChoice.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Paragraph.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/RatingBar.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Table/Cell.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Table/Row.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Table.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/InfoBubble.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/Switch.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Aq/SmileRating.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/channels/consumer.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/TextInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/channels/automated_summary_statement_channel.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/VariantPlaceholder.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Video.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals/FeedbackModal.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/BlockNodes/Section.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/Panel/DeleteCell.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/Panel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDataPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDetails/DetailsTab.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDetails/StatisticsTab.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/BarButton.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/BookmarksPanel/BookmarkSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseMetadataPanel/PrerequisiteMetadata.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseTeachingPointsPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseMapPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/FeedbackSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/FeedbackPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Gen/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Span/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Gen/Paragraph/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/TextListPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/DiagnosisSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/FindingSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/NoteSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/AuthorHeader.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/StudentFeedback.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/CommentInput/mentionsInputStyle.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/CommentInput/mentionStyle.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/CommentInput.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/SummaryOfEdit.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/EditorsChecklist.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/Timer.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AdminToolsPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/AssessmentQuestionDetails/component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseMetadataPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/CaseLearningObjectivesPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/SummaryOfEditsPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/StudentFeedbackPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/BookmarksPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ReasoningTool/LabValuesPanel.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals/LearningObjectivesAddNew.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals/LearningObjectivesConfirmEdit.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Modals.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ContentMappingTool/AssessmentMap.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ContentMappingTool/LOTPMap.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ContentMappingTool.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn/ChangeSummary.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ChangeSummaryColumn.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/ROName.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/AssessmentQuestionForm.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/baseObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/activeUserObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/beforeInputObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/copyObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/mouseClickObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/offlineObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Observers/selectionObserver.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Kind/SignatureCase.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Reflow.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/undoRedoState.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/delete.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/shared.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/paste.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/return.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/Container.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/insert.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/tab.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/shiftTab.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/EditActions/toggleStyle.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/NewEditDoc/TeachingPointModal/component.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/Paginator.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/PerPage.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/PrimaryControls.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/table_def_funcs.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/table_defs.jsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/aqueduct_table.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/Reactabular/helpers/paginate.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/Detail/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/Summary/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/List/defaults.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/components/ReusableObject/List/component.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Convert/HTML.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Convert/PlainText.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Convert/RangeInlineJSON.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Define/base.ts","webpack://relier-react-webpack-rails/./lib/case_metadata/additional_diagnoses.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/clinical_principles.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/differential_diagnosis.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/final_diagnoses.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/presenting_problems.txt","webpack://relier-react-webpack-rails/./lib/case_metadata/sciences_core_concepts.txt","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/Range.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/RangeInlineJSON.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/TreeInlineJSON.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/base.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/Functions/table.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/changes.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/colors.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/generateReasoningToolStateFunctions.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/context.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/displayMode.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/documentUserState.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/menu.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/scrollTo.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/selection.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/trackChangesEditMode.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/Doc/version_types.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/DocumentUserLog.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/RO/content_type.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/assessment.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/dates.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/generateUUID.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/media_manager.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/progressHelper.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/time_format.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/url.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/helpers/utils.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/documentUserStates.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/documents.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/itemReducer.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/learningObjectives.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/reusableObjects.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/ui/reasoningTool.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/variants.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/versions.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/docSettings.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/reducers/indexNewDocEdit.ts","webpack://relier-react-webpack-rails/./app/javascript/src/react/store/storeNewDocEdit.js","webpack://relier-react-webpack-rails/./app/javascript/src/react/startup/NewEditDocApp.tsx","webpack://relier-react-webpack-rails/./app/javascript/src/react/ui/MySwal.tsx"],"sourcesContent":["import ahoy from \"ahoy.js\"\n\nfunction analyticsModule() {\n  function track(eventName, data){\n    ahoy.track(eventName, data)\n  }\n\n  return { track };\n}\n\nwindow.analytics = analyticsModule()\n\nexport default analyticsModule();\n","// src/config/clientConfig.ts\nimport { client } from \"./sdk.gen\";\nimport Cookies from \"js-cookie\";\n\n// Get the auth token from cookies\nconst authToken = Cookies.get(\"auth_token\");\n\n// Configure the client with base URL and headers\nclient.setConfig({\n  baseUrl: '/',\n  headers: {\n    Authorization: authToken ? `Bearer ${authToken}` : \"\",\n    \"Content-Type\": \"application/json\",\n  },\n});\n\n// Export the client for use in the application\nexport default client;\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createClient, createConfig, type OptionsLegacyParser, formDataBodySerializer } from '@hey-api/client-fetch';\nimport type { GetAdminAssessmentQuestionSetsData, GetAdminAssessmentQuestionSetsError, GetAdminAssessmentQuestionSetsResponse, CreateAdminAssessmentQuestionSetData, CreateAdminAssessmentQuestionSetError, CreateAdminAssessmentQuestionSetResponse, GetAdminAssessmentQuestionsData, GetAdminAssessmentQuestionsError, GetAdminAssessmentQuestionsResponse, UpdateBulkAdminAssessmentQuestionsData, UpdateBulkAdminAssessmentQuestionsError, UpdateBulkAdminAssessmentQuestionsResponse, DeleteBulkAdminAssessmentQuestionsError, DeleteBulkAdminAssessmentQuestionsResponse, GetAdminAssessmentQuestionData, GetAdminAssessmentQuestionError, GetAdminAssessmentQuestionResponse, ImportAdminAssessmentQuestionsData, ImportAdminAssessmentQuestionsError, ImportAdminAssessmentQuestionsResponse, ForkAdminAssessmentQuestionData, ForkAdminAssessmentQuestionError, ForkAdminAssessmentQuestionResponse, GetAdminAssessmentStatisticsData, GetAdminAssessmentStatisticsError, GetAdminAssessmentStatisticsResponse, GetAdminInitDataError, GetAdminInitDataResponse, GetAdminDocumentsData, GetAdminDocumentsError, GetAdminDocumentsResponse, GetAdminDocumentData, GetAdminDocumentError, GetAdminDocumentResponse, GetAdminGroupsData, GetAdminGroupsError, GetAdminGroupsResponse, GetAdminGroupData, GetAdminGroupError, GetAdminGroupResponse, GetAdminLearningObjectivesData, GetAdminLearningObjectivesError, GetAdminLearningObjectivesResponse, GetAdminLearningObjectiveData, GetAdminLearningObjectiveError, GetAdminLearningObjectiveResponse, GetAdminQuizItemResponsesData, GetAdminQuizItemResponsesError, GetAdminQuizItemResponsesResponse, GetAdminQuizItemResponseData, GetAdminQuizItemResponseError, GetAdminQuizItemResponseResponse, GetAdminQuizItemsData, GetAdminQuizItemsError, GetAdminQuizItemsResponse, GetAdminQuizItemData, GetAdminQuizItemError, GetAdminQuizItemResponse, GetAdminQuizzesData, GetAdminQuizzesError, GetAdminQuizzesResponse, GetAdminQuizData, GetAdminQuizError, GetAdminQuizResponse, GetAdminReusableObjectsData, GetAdminReusableObjectsError, GetAdminReusableObjectsResponse, GetAdminReusableObjectData, GetAdminReusableObjectError, GetAdminReusableObjectResponse, GetAdminSaqResponsesData, GetAdminSaqResponsesError, GetAdminSaqResponsesResponse, GetAdminSaqResponseData, GetAdminSaqResponseError, GetAdminSaqResponseResponse, GetAdminUsersData, GetAdminUsersError, GetAdminUsersResponse, GetAdminUserData, GetAdminUserError, GetAdminUserResponse, GetAdminVersionsData, GetAdminVersionsError, GetAdminVersionsResponse, GetCommonUserError, GetCommonUserResponse, PatchApiV1UsersByIdData, PatchApiV1UsersByIdError, PatchApiV1UsersByIdResponse } from './types.gen';\n\nexport const client = createClient(createConfig());\n\n/**\n * list assessment_question_sets\n * Get assessment_question_sets list\n */\nexport const getAdminAssessmentQuestionSets = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminAssessmentQuestionSetsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminAssessmentQuestionSetsResponse, GetAdminAssessmentQuestionSetsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_question_sets'\n    });\n};\n\n/**\n * create admin assessment question set\n * Create admin assessment question set\n */\nexport const createAdminAssessmentQuestionSet = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<CreateAdminAssessmentQuestionSetData, ThrowOnError>) => {\n    return (options?.client ?? client).post<CreateAdminAssessmentQuestionSetResponse, CreateAdminAssessmentQuestionSetError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_question_sets'\n    });\n};\n\n/**\n * list assessment_questions\n * Get assessment_questions list\n */\nexport const getAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminAssessmentQuestionsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminAssessmentQuestionsResponse, GetAdminAssessmentQuestionsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_questions'\n    });\n};\n\n/**\n * update assessment_questions\n * Update AssessmentQuestions\n */\nexport const updateBulkAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<UpdateBulkAdminAssessmentQuestionsData, ThrowOnError>) => {\n    return (options?.client ?? client).patch<UpdateBulkAdminAssessmentQuestionsResponse, UpdateBulkAdminAssessmentQuestionsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_questions/update_bulk'\n    });\n};\n\n/**\n * delete AssessmentQuestions\n * Delete AssessmentQuestions\n */\nexport const deleteBulkAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {\n    return (options?.client ?? client).delete<DeleteBulkAdminAssessmentQuestionsResponse, DeleteBulkAdminAssessmentQuestionsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_questions/delete_bulk'\n    });\n};\n\n/**\n * show assessment_question\n * Show assessment_question\n */\nexport const getAdminAssessmentQuestion = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminAssessmentQuestionData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminAssessmentQuestionResponse, GetAdminAssessmentQuestionError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_questions/{id}'\n    });\n};\n\n/**\n * import assessment questions\n * Import assessment questions\n */\nexport const importAdminAssessmentQuestions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<ImportAdminAssessmentQuestionsData, ThrowOnError>) => {\n    return (options?.client ?? client).post<ImportAdminAssessmentQuestionsResponse, ImportAdminAssessmentQuestionsError, ThrowOnError>({\n        ...options,\n        ...formDataBodySerializer,\n        headers: {\n            'Content-Type': null,\n            ...options?.headers\n        },\n        url: '/api/admin/assessment_questions/import'\n    });\n};\n\n/**\n * fork assessment question\n * Fork assessment question\n */\nexport const forkAdminAssessmentQuestion = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<ForkAdminAssessmentQuestionData, ThrowOnError>) => {\n    return (options?.client ?? client).post<ForkAdminAssessmentQuestionResponse, ForkAdminAssessmentQuestionError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_questions/{id}/fork'\n    });\n};\n\n/**\n * list assessment_statistics\n * Get assessment statistics list\n */\nexport const getAdminAssessmentStatistics = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminAssessmentStatisticsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminAssessmentStatisticsResponse, GetAdminAssessmentStatisticsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/assessment_statistics'\n    });\n};\n\n/**\n * list init data\n * Get admin init data\n */\nexport const getAdminInitData = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminInitDataResponse, GetAdminInitDataError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/base/init_data'\n    });\n};\n\n/**\n * list documents\n * Get documents list\n */\nexport const getAdminDocuments = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminDocumentsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminDocumentsResponse, GetAdminDocumentsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/documents'\n    });\n};\n\n/**\n * show document\n * Show document\n */\nexport const getAdminDocument = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminDocumentData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminDocumentResponse, GetAdminDocumentError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/documents/{id}'\n    });\n};\n\n/**\n * list groups\n * Get groups list\n */\nexport const getAdminGroups = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminGroupsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminGroupsResponse, GetAdminGroupsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/groups'\n    });\n};\n\n/**\n * show group\n * Show group\n */\nexport const getAdminGroup = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminGroupData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminGroupResponse, GetAdminGroupError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/groups/{id}'\n    });\n};\n\n/**\n * list learning_objectives\n * Get learning_objectives list\n */\nexport const getAdminLearningObjectives = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminLearningObjectivesData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminLearningObjectivesResponse, GetAdminLearningObjectivesError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/learning_objectives'\n    });\n};\n\n/**\n * show learning_objective\n * Show learning_objective\n */\nexport const getAdminLearningObjective = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminLearningObjectiveData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminLearningObjectiveResponse, GetAdminLearningObjectiveError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/learning_objectives/{id}'\n    });\n};\n\n/**\n * list quiz_item_responses\n * Get quiz_item_responses list\n */\nexport const getAdminQuizItemResponses = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminQuizItemResponsesData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminQuizItemResponsesResponse, GetAdminQuizItemResponsesError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/quiz_item_responses'\n    });\n};\n\n/**\n * show quiz_item_response\n * Show quiz_item_response\n */\nexport const getAdminQuizItemResponse = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminQuizItemResponseData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminQuizItemResponseResponse, GetAdminQuizItemResponseError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/quiz_item_responses/{id}'\n    });\n};\n\n/**\n * list quiz_items\n * Get quiz_items list\n */\nexport const getAdminQuizItems = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminQuizItemsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminQuizItemsResponse, GetAdminQuizItemsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/quiz_items'\n    });\n};\n\n/**\n * show quiz_item\n * Show quiz_item\n */\nexport const getAdminQuizItem = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminQuizItemData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminQuizItemResponse, GetAdminQuizItemError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/quiz_items/{id}'\n    });\n};\n\n/**\n * list quizzes\n * Get quizzes list\n */\nexport const getAdminQuizzes = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminQuizzesData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminQuizzesResponse, GetAdminQuizzesError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/quizzes'\n    });\n};\n\n/**\n * show quiz\n * Show quiz\n */\nexport const getAdminQuiz = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminQuizData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminQuizResponse, GetAdminQuizError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/quizzes/{id}'\n    });\n};\n\n/**\n * list reusable_objects\n * Get reusable_objects list\n */\nexport const getAdminReusableObjects = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminReusableObjectsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminReusableObjectsResponse, GetAdminReusableObjectsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/reusable_objects'\n    });\n};\n\n/**\n * show reusable_object\n * Show reusable_object\n */\nexport const getAdminReusableObject = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminReusableObjectData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminReusableObjectResponse, GetAdminReusableObjectError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/reusable_objects/{id}'\n    });\n};\n\n/**\n * list saq_responses\n * Get saq_responses list\n */\nexport const getAdminSaqResponses = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminSaqResponsesData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminSaqResponsesResponse, GetAdminSaqResponsesError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/saq_responses'\n    });\n};\n\n/**\n * show saq_response\n * Show saq_response\n */\nexport const getAdminSaqResponse = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminSaqResponseData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminSaqResponseResponse, GetAdminSaqResponseError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/saq_responses/{id}'\n    });\n};\n\n/**\n * list users\n * Get users list\n */\nexport const getAdminUsers = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminUsersData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminUsersResponse, GetAdminUsersError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/users'\n    });\n};\n\n/**\n * show user\n * Show user\n */\nexport const getAdminUser = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<GetAdminUserData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminUserResponse, GetAdminUserError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/users/{id}'\n    });\n};\n\n/**\n * list versions\n * Get versions list\n */\nexport const getAdminVersions = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<GetAdminVersionsData, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetAdminVersionsResponse, GetAdminVersionsError, ThrowOnError>({\n        ...options,\n        url: '/api/admin/versions'\n    });\n};\n\n/**\n * show user\n * User details\n */\nexport const getCommonUser = <ThrowOnError extends boolean = false>(options?: OptionsLegacyParser<unknown, ThrowOnError>) => {\n    return (options?.client ?? client).get<GetCommonUserResponse, GetCommonUserError, ThrowOnError>({\n        ...options,\n        url: '/api/common/user'\n    });\n};\n\n/**\n * Updates the user password\n */\nexport const patchApiV1UsersById = <ThrowOnError extends boolean = false>(options: OptionsLegacyParser<PatchApiV1UsersByIdData, ThrowOnError>) => {\n    return (options?.client ?? client).patch<PatchApiV1UsersByIdResponse, PatchApiV1UsersByIdError, ThrowOnError>({\n        ...options,\n        url: '/api/v1/users/{id}'\n    });\n};","import * as React from 'react';\nimport { useEffect, useState } from \"react\";\nimport * as classNames from \"classnames\";\n\nimport client from \"../../../api/client\";\nimport { getAdminVersions } from \"../../../api/sdk.gen\";\n\nconst VersionsList = ({ itemId, itemType, itemData }) => {\n  client;\n\n  const [versions, setVersions] = useState([]);\n  const [filteredVersions, setFilteredVersions] = useState([]);\n  const [comparisonKeys, setComparisonKeys] = useState<string[]>([]);\n  const [hideCreateEvent, setHideCreateEvent] = useState(true);\n  const [hideUnmodifiedColumns, setHideUnmodifiedColumns] = useState(false);\n\n  useEffect(() => {\n    const fetchVersions = async () => {\n      const resp = await getAdminVersions({\n        query: { item_id: itemId, item_type: itemType, per: 1000 },\n      });\n\n      setVersions(resp.data.data);\n    };\n    fetchVersions();\n  }, [itemId]);\n\n  useEffect(() => {\n    const res = hideCreateEvent\n      ? versions.filter((version) => version.event !== \"create\")\n      : versions;\n    setFilteredVersions(res)\n  }, [versions, hideCreateEvent]);\n\n  useEffect(() => {\n    generateComparisonKeys();\n  }, [filteredVersions, hideUnmodifiedColumns]);\n\n  const extractKeys = (obj: Record<string, any>, prefix = \"\"): string[] => {\n    return Object.keys(obj).reduce<string[]>((keys, key) => {\n      const fullPath = prefix ? `${prefix}.${key}` : key;\n\n      if (obj[key] && typeof obj[key] === \"object\" && !Array.isArray(obj[key])) {\n        keys.push(...extractKeys(obj[key], fullPath));\n      } else {\n        keys.push(fullPath);\n      }\n\n      return keys;\n    }, []);\n  };\n\n  const generateComparisonKeys = () => {\n    const keysSet = new Set<string>();\n\n    // Loop through all versions to gather the keys\n    filteredVersions.forEach((version) => {\n      if (version.reified_object) {\n        const keys = extractKeys(version.reified_object);\n        keys.forEach((key) => keysSet.add(key));\n      }\n    });\n\n    // Only include modified keys if hideUnmodifiedColumns is true\n    if (hideUnmodifiedColumns) {\n      const modifiedKeys = Array.from(keysSet).filter((key) => {\n        for (let i = 0; i < filteredVersions.length; i++) {\n          const currentValue = getValueByPath(filteredVersions[i].reified_object || {}, key);\n          const previousObject = i === 0 ? itemData : filteredVersions[i - 1]?.reified_object;\n          const previousValue = getValueByPath(previousObject || {}, key);\n          \n          // Skip \"create\" event versions when filtering\n          if (hideCreateEvent && versions[i].event === \"create\") {\n            continue;\n          }\n\n          if ((previousValue || currentValue) && JSON.stringify(currentValue) !== JSON.stringify(previousValue)) {\n            return true;\n          }\n        }\n        return false;\n      });\n      setComparisonKeys(modifiedKeys);\n    } else {\n      // If hideUnmodifiedColumns is false, include all keys\n      setComparisonKeys(Array.from(keysSet));\n    }\n  };\n\n  const getValueByPath = (obj: Record<string, any>, path: string) => {\n    return path\n      .split(\".\")\n      .reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj);\n  };\n\n  const renderTableHead = () => {\n    return (\n      <tr>\n        <th>Version</th>\n        <th>Event</th>\n        <th>Editor</th>\n        <th>Created At</th>\n        {comparisonKeys.map((key) => (\n          <th key={key}>{key}</th>\n        ))}\n      </tr>\n    );\n  };\n\n  const renderCurrentState = () => {\n    return (\n      <tr>\n        <td>-</td>\n        <td>-</td>\n        <td>-</td>\n        <td>Current state</td>\n        {comparisonKeys.map((key) => {\n          const currentValue = getValueByPath(itemData || {}, key);\n          \n          return (\n            <td key={key}>\n              {currentValue}\n            </td>\n          );\n        })}\n      </tr>\n    );\n  };\n\n  const renderTableRows = () => {\n    if (filteredVersions.length === 0) {\n      return (\n        <tr>\n          <td colSpan={4} style={{ textAlign: \"center\" }}>\n            There are no records\n          </td>\n        </tr>\n      );\n    }\n\n    return filteredVersions.map((version, index) => {\n      const prevVersion = index === 0 ? { reified_object: itemData } : filteredVersions[index - 1];\n\n      return (\n        <tr key={version.id}>\n          <td>{version.id}</td>\n          <td>{version.event}</td>\n          <td>{version.whodunnit || \"Unknown\"}</td>\n          <td>{new Date(version.created_at).toLocaleString()}</td>\n          {comparisonKeys.map((key) => {\n            const currentValue = getValueByPath(version.reified_object || {}, key);\n            const previousValue = getValueByPath(prevVersion?.reified_object || {}, key);\n\n            const isLost = (previousValue || currentValue) && JSON.stringify(previousValue) !== JSON.stringify(currentValue);\n\n            return (\n              <td\n                key={key}\n                style={{\n                  backgroundColor: isLost ? \"#f8d7da\" : undefined,\n                }}\n              >\n                {currentValue}\n              </td>\n            );\n          })}\n        </tr>\n      );\n    });\n  };\n\n  return (\n    <div className=\"table-container\">\n      <div className=\"filters\">\n        <label>\n          <input\n            type=\"checkbox\"\n            checked={hideCreateEvent}\n            onChange={(e) => setHideCreateEvent(e.target.checked)}\n          />\n          Hide Create Event\n        </label>\n        <label style={{marginLeft: '10px'}}>\n          <input\n            type=\"checkbox\"\n            checked={hideUnmodifiedColumns}\n            onChange={(e) => setHideUnmodifiedColumns(e.target.checked)}\n          />\n          Hide Unmodified Columns\n        </label>\n      </div>\n      <table className=\"table-with-fixed-columns\">\n        <thead>{renderTableHead()}</thead>\n        <tbody>\n          {renderCurrentState()}\n          {renderTableRows()}\n        </tbody>\n      </table>\n    </div>\n  );\n};\n\nexport default VersionsList;\n","import * as React from 'react';\n\nimport * as classNames from 'classnames';\n\ninterface Props extends React.ComponentPropsWithoutRef<'button'> {\n  outline?: boolean\n}\n\nexport default function AqButton(props: Props): React.ReactElement {\n  const {\n    disabled = false,\n    outline = false,\n    children,\n    onClick,\n    className,\n  } = props;\n\n  return (\n    <button\n      className={classNames('aq-button-2', { outline }, className)}\n      onClick={onClick}\n      disabled={disabled}\n    >\n      {children}\n    </button>\n  );\n}","import React, { Component } from 'react';\n\nclass AssessmentDashboardModal extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      preserveDates: false,\n      preserveAssessment: false,\n      preservePurpose: false,\n      preserveStudents: false,\n    };\n  }\n\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n\n  handleKeyDown = (event) => {\n    if (!this.props.isOpen) return\n\n    if (event.key === 'Escape') {\n      this.props.onClose();\n    } else if (event.key === 'Enter') {\n      this.handleSave();\n    }\n  };\n\n  handleCheckboxChange = (event) => {\n    const { name, checked } = event.target;\n    this.setState({ [name]: checked });\n  };\n\n  handleSave = () => {\n    const { preserveAssessment, preservePurpose, preserveStudents } = this.state;\n    if (preserveAssessment && preservePurpose && preserveStudents) {\n      const confirmMessage =\n        \"Warning: By selecting 'Assessment,' 'Purpose,' and 'Students,' you will assign the same assessment to students twice. Are you sure you want to proceed?\";\n      if (window.confirm(confirmMessage)) {\n        this.proceedToSave();\n      }\n    } else {\n      this.proceedToSave();\n    }\n  };\n\n  proceedToSave = () => {\n    const { url } = this.props;\n    const { preserveDates, preserveAssessment, preservePurpose, preserveStudents } = this.state;\n  \n    const params = new URLSearchParams({\n      preserve_dates: preserveDates,\n      preserve_assessment: preserveAssessment,\n      preserve_purpose: preservePurpose,\n      preserve_students: preserveStudents,\n    });\n  \n    const requestUrl = `${url}?${params.toString()}`;\n    window.location.href = requestUrl;\n  };\n\n  isDateRangeValid = () => {\n    const { date_range } = this.props;\n    const [start, end] = date_range.split(' - ').map((date) => new Date(date));\n    const now = new Date();\n    return end >= now;\n  };\n\n  render() {\n    const { isOpen, onClose } = this.props;\n    const { preserveDates, preserveAssessment, preservePurpose, preserveStudents } = this.state;\n    const assessmentName = this.props.assessment?.replace(/\\s\\d{4}$/, '');\n\n    if (!isOpen) return null;\n\n    const showAvailabilityDates = this.isDateRangeValid();\n\n    return (\n      <div className=\"modal-overlay\">\n        <div className=\"modal-container\">\n          <button className=\"close-button\" onClick={onClose} aria-label=\"Close modal\">\n            &times;\n          </button>\n          <div className=\"modal-body\">\n            <div style={{fontSize:\"22px\", fontWeight: 700}}>\n              Duplicate Assessment\n            </div>\n            <div style={{ padding: '10px 0px' }}>\n              Choose the fields you would like to duplicate for your new assessment.\n              <br />\n              You will be able to edit all fields once you save the duplicate.\n            </div>\n            <form>\n              {showAvailabilityDates && (\n                <label className='modal-elements'>\n                  <input\n                    type=\"checkbox\"\n                    name=\"preserveDates\"\n                    checked={preserveDates}\n                    onChange={this.handleCheckboxChange}\n                    aria-label=\"Preserve availability dates\"\n                  />\n                  <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Availability Dates: </span>\n                  <span style={{ fontWeight: 'bold' }}>{this.props.date_range}</span>\n                </label>\n              )}\n              <label className='modal-elements'>\n                <input\n                  type=\"checkbox\"\n                  name=\"preserveAssessment\"\n                  checked={preserveAssessment}\n                  onChange={this.handleCheckboxChange}\n                  aria-label=\"Preserve assessment\"\n                />\n                <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Assessment: </span>\n                <span style={{ fontWeight: 'bold' }}>{assessmentName}</span>\n              </label>\n              <label className='modal-elements'>\n                <input\n                  type=\"checkbox\"\n                  name=\"preservePurpose\"\n                  checked={preservePurpose}\n                  onChange={this.handleCheckboxChange}\n                  aria-label=\"Preserve purpose\"\n                />\n                <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Purpose: </span>\n                <span style={{ fontWeight: 'bold' }}>{this.props.purpose}</span>\n              </label>\n              <label className='modal-elements'>\n                <input\n                  type=\"checkbox\"\n                  name=\"preserveStudents\"\n                  checked={preserveStudents}\n                  onChange={this.handleCheckboxChange}\n                  aria-label=\"Preserve students\"\n                />\n                <span style={{ fontWeight: 'normal', paddingRight: '5px' }}>Students: </span>\n                <span style={{ fontWeight: 'bold' }}>{this.props.student_count}</span>\n              </label>\n            </form>\n          </div>\n          <button\n            className=\"actionBtn\"\n            style={{ margin: \"30px 30px\" }}\n            onClick={this.handleSave}\n            aria-label=\"Save duplicate assessment\"\n          >\n            Save Duplicate\n          </button>\n          <button\n            className=\"aq-button-2 outline-whitebg-dark-grey\"\n            style={{ float: 'right', margin: \"30px 30px\", textTransform: 'uppercase' }}\n            onClick={onClose}\n            aria-label=\"Cancel and close modal\"\n          >\n            Cancel\n          </button>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default AssessmentDashboardModal;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport GenSortTable from 'Gen/SortTable/component'\nimport TeachingPointModal from 'NewEditDoc/TeachingPointModal/component'\n\nimport TableDownArrowImage from \"images/table-down_arrow.png\";\nimport TableUpArrowImage from \"images/table-up_arrow.png\";\nimport CustomMultiSelect from './CustomMultiSelect';\n\nclass CohortProgressesDeliveriesTable extends React.Component{\n  constructor(props){\n    super(props);\n\n    this.state = {\n      cohorts: this.props.cohorts,\n      search: '',\n      cohortFiltered: this.props.rows,\n      filteredData: this.props.rows,\n      sortCol: 'status',\n      sortDir: 'asc',\n      assessment_date: [],\n      discipline: [],\n      system: [],\n      clinical_focus: [],\n      purpose: [],\n    };\n  }\n\n  get cohortFilters() {\n    return ['assessment_date','discipline','purpose']\n  }\n\n  get clcFractionNames() {\n    return [\n      'excel_fraction',\n      'competent_fraction',\n      'unsure_fraction',\n      'novice_fraction',\n      'warning_fraction'\n    ]\n  }\n\n  sortDeliveries = (sortCol, sortDir) =>{\n    var data = this.state.filteredData\n    if(sortCol == \"clc\") {\n      return this.sortByClc(sortDir)\n    }\n    data.sort((a, b) => {\n      let fa = a[sortCol].toLowerCase(),\n          fb = b[sortCol].toLowerCase();\n      if (fa < fb) {\n          return sortDir == 'asc' ? -1 : 1;\n      }\n      if (fa > fb) {\n        return sortDir == 'asc' ? 1 : -1;\n      }\n      return 0;\n    });\n    return data\n  }\n\n  sortImage = (sortCol)=>{\n    return this.state.sortCol == sortCol ? this.state.sortDir == 'asc' ? TableDownArrowImage : TableUpArrowImage : TableDownArrowImage\n  }\n\n  sortByClc(sortDir) {\n    let data = this.state.filteredData\n    data.sort((a, b) => {\n      let dir = 0\n      for (const name of this.clcFractionNames) {\n        let fa = a[name],\n            fb = b[name]\n        if (fa < fb) {\n          dir = sortDir == 'asc' ? -1 : 1\n        }\n        if (fa > fb) {\n          dir = sortDir == 'asc' ? 1 : -1\n        }\n        if (dir == 0) continue\n        break\n      }\n      return dir\n    })\n    return data\n  }\n\n  applyFilters() {\n    const { system, clinical_focus, search, assessment_date, discipline, purpose, cohortFiltered } = this.state;\n    const baseData = (assessment_date.length === 0 && discipline.length === 0 && purpose.length === 0)? this.props.rows : cohortFiltered;\n\n    const filteredData = baseData.filter((item) => {\n      const matchesSystem = system.length === 0 || system.some(sys => item.system?.includes(sys));\n      const matchesClinicalFocus = clinical_focus.length === 0 || clinical_focus.some(cf => item.clinical_focus?.includes(cf));\n\n      const matchesSearch = (item.learning_objective || '').toLowerCase().includes(search.toLowerCase()) ||\n        (item.teaching_point_url_name || '').toLowerCase().includes(search.toLowerCase()) ||\n        (item.case || '').toLowerCase().includes(search.toLowerCase());\n\n      return matchesSystem && matchesClinicalFocus && matchesSearch;\n    });\n\n    this.setState({ filteredData });\n  }\n\n\n  handleFilterChange(filterName, values) {\n    this.setState({ [filterName]: values }, () => {\n      if (['assessment_date', 'discipline', 'purpose'].includes(filterName)) {\n        // Call setFilters for cohort-related filtering logic\n        this.setFilters(filterName, values);\n      } else {\n        // Otherwise, apply the general filters\n        this.applyFilters();\n      }\n    });\n  }\n\n  async getFilteredDetails(ids) {\n    let params = \"?\"\n    for (const id of ids) {\n      params += `&ids[]=${id}`\n    }\n    const response = await fetch(this.props.filter_url + params)\n    return response.json()\n  }\n\n  filtersRow() {\n    if (this.props.multiple_cohorts) {\n      return (\n        <div>\n          <div className=\"filtersRow reportSelectFilters\">\n            <div className=\"form-inline\">\n              <CustomMultiSelect\n                options={this.props.assessment_date_options}\n                selectedOptions={this.state.assessment_date}\n                onChange={(selectedOptions) => this.handleFilterChange('assessment_date', selectedOptions)}\n                placeholder=\"Assessment Date\"\n              />\n\n              <CustomMultiSelect\n                options={this.props.discipline_options.map(option => (option.replace('Aquifer ', '')))}\n                selectedOptions={this.state.discipline}\n                onChange={(selectedOptions) => this.handleFilterChange('discipline', selectedOptions)}\n                placeholder=\"Discipline\"\n              />\n\n              <CustomMultiSelect\n                options={this.props.purpose_options}\n                selectedOptions={this.state.purpose}\n                onChange={(selectedOptions) => this.handleFilterChange('purpose', selectedOptions)}\n                placeholder=\"Purpose\"\n              />\n\n              <CustomMultiSelect\n                options={this.props.system_options}\n                selectedOptions={this.state.system}\n                onChange={(selectedOptions) => this.handleFilterChange('system', selectedOptions)}\n                placeholder=\"System\"\n              />\n              <CustomMultiSelect\n                options={this.props.clinical_focus_options}\n                selectedOptions={this.state.clinical_focus}\n                onChange={(selectedOptions) => this.handleFilterChange('clinical_focus', selectedOptions)}\n                placeholder=\"Clinical Focus\"\n              />\n            </div>\n          </div>\n\n          <div className=\"educatorSelectedFilters\">\n\n            {this.state.assessment_date.length > 0 && this.state.assessment_date.map((selectedAssessmentDate, index) => (\n              <p key={index} onClick={() => {\n                const updatedssessmentDates = this.state.assessment_date.filter(ad => ad !== selectedAssessmentDate);\n                this.handleFilterChange('assessment_date', updatedssessmentDates);\n              }} className='educatorfilterSelectedVal'>{selectedAssessmentDate}&nbsp;&nbsp;&nbsp; X</p>\n            ))}\n\n            {this.state.discipline.length > 0 &&\n              this.state.discipline.map((selectedDiscipline, index) => (\n                <p key={index} onClick={() => {\n                  const updatedDisciplines = this.state.discipline.filter(d => d !== selectedDiscipline);\n                  this.handleFilterChange('discipline', updatedDisciplines);\n                }} className='educatorfilterSelectedVal'>{selectedDiscipline}&nbsp;&nbsp;&nbsp; X</p>\n              ))}\n\n            {this.state.system.length > 0 && this.state.system.map((selectedSystem, index) => (\n              <p key={index} onClick={() => {\n                const updatedSystems = this.state.system.filter(s => s !== selectedSystem);\n                this.handleFilterChange('system', updatedSystems);\n              }} className='educatorfilterSelectedVal'>{selectedSystem}&nbsp;&nbsp;&nbsp; X</p>\n            ))}\n\n            {this.state.purpose.length > 0 && this.state.purpose.map((selectedPurpose, index) => (\n              <p key={index} onClick={() => {\n                const updatedPurpose = this.state.purpose.filter(s => s !== selectedPurpose);\n                this.handleFilterChange('purpose', updatedPurpose);\n              }} className='educatorfilterSelectedVal'>{selectedPurpose}&nbsp;&nbsp;&nbsp; X</p>\n            ))}\n\n            {this.state.clinical_focus.length > 0 && this.state.clinical_focus.map((selectedClinicalFocus, index) => (\n              <p key={index} onClick={() => {\n                const updatedClinicalFocus = this.state.clinical_focus.filter(cf => cf !== selectedClinicalFocus);\n                this.handleFilterChange('clinical_focus', updatedClinicalFocus);\n              }} className='educatorfilterSelectedVal'>{selectedClinicalFocus}&nbsp;&nbsp;&nbsp; X</p>\n            ))}\n          </div>\n        </div>\n      )\n    }\n  }\n\n  getCorrectResponses(row) {\n    if (row.accuracy_fraction.length === 0) {\n      return \"N/A\"\n    } else if (this.props.multiple_cohorts) {\n      return row.accuracy_fraction\n    } else {\n      return `${row.accuracy_percentage}%`\n    }\n  }\n\n  getClcStyle(percentage) {\n    if (percentage <= 0) {\n      return { display: 'none' }\n    }\n    return { width: `${percentage}%` }\n  }\n\n  setFilters(currentFilterCol, value) {\n    var filters = {}\n    filters[currentFilterCol] = value\n    if(this.cohortFilters.includes(currentFilterCol)) {\n      let ids = [];\n      const { system, clinical_focus } = this.state;\n      switch (currentFilterCol) {\n        case 'assessment_date':\n          ids = this.props.cohorts.filter((cohort) => {\n            const dateMatch = value.length === 0 || value.includes(cohort.date_range);\n            const courseNameMatch = this.state.discipline.length === 0 ||\n              this.state.discipline.some(d => cohort.course_name.replace('Aquifer ', '').includes(d.trim()));\n            const purposeMatch = this.state.purpose.length === 0 ||\n              this.state.purpose.some(p => cohort.purpose.includes(p));\n            return dateMatch && courseNameMatch && purposeMatch;\n          }).map(c => c.delivery_id);\n          break;\n        case 'discipline':\n          ids = this.props.cohorts.filter((cohort) => {\n            const dateMatch = this.state.assessment_date.length === 0 || this.state.assessment_date.some(a => cohort.date_range.includes(a));\n            const courseNameMatch = value.length === 0 || value.includes(cohort.course_name.replace('Aquifer ', ''));\n            const purposeMatch = this.state.purpose.length === 0 ||\n              this.state.purpose.some(p => cohort.purpose.includes(p));\n            return dateMatch && courseNameMatch && purposeMatch;\n          }).map(c => c.delivery_id);\n          break;\n        case 'purpose':\n          ids = this.props.cohorts.filter((cohort) => {\n            const dateMatch = this.state.assessment_date.length === 0 || this.state.assessment_date.some(a => cohort.date_range.includes(a));\n            const courseNameMatch = this.state.discipline.length === 0 ||\n              this.state.discipline.some(d => cohort.course_name.replace('Aquifer ', '').includes(d.trim()));\n            const purposeMatch = value.length === 0 || value.includes(cohort.purpose);\n            return dateMatch && courseNameMatch && purposeMatch;\n          }).map(c => c.delivery_id);\n          break;\n      }\n      this.getFilteredDetails(ids).then((data) => {\n        filters.cohortFiltered = data.details\n        filters.filteredData = filters.cohortFiltered.filter((item) => (system.length === 0 || system.some(sys => item.system?.includes(sys))) &&\n          ((item.learning_objective || '').toLowerCase().indexOf(this.state.search) > -1 ||\n          (item.teaching_point_url_name || '').toLowerCase().indexOf(this.state.search) > -1 ||\n          (item.case || '').toLowerCase().indexOf(this.state.search) > -1) &&\n          (clinical_focus.length === 0 || clinical_focus.some(cf => item.clinical_focus?.includes(cf)))\n        )\n        this.setState(filters)\n      })\n    }\n\n    return filters\n  }\n\n  getTeachingPointModal(row) {\n    if (row.teaching_point_url_name != 'N/A') {\n      return <TeachingPointModal\n        title={row.teaching_point_url_name}\n        docType=\"ReusableObject\"\n        documentId={row.teaching_point?.id}\n        versionId={row.teaching_point_publish_variant_id}\n        currentUser={this.props.user}\n        isAdmin={this.props.admin}\n        currentRoleName=\"Student\"\n        permissions={{}}\n        displayUid={row.teaching_point?.uid}\n      />\n    }\n  }\n\n  render() {\n\n    return <>\n      <div className=\"detailsSection\">\n        <div className=\"col-md-12\">\n          <div className=\"sectionTitleRow\">\n            <div className=\"educator-detail-heading\">\n              <h2 className=\"reportTopSectionTitle\">{this.props.multiple_cohorts ? 'Item Detail' : `Item Detail - ${this.props.students_count} students`} </h2>\n              <div className=\"info-bubble\">\n                <span className=\"tooltip-box small after above-center tab-2\">\n                  % correct responses and CLC breakdown are based on submitted assessments only. The item details shown in the table below reflect the students who submitted responses for that item only.\n                  {this.props.multiple_cohorts ? \" As such, the denominators may be different from the number of students in a given cohort.\" : \"\"}\n                </span>\n              </div>\n            </div>\n            <div className=\"form-group\" style={{width: 400}}>\n              <label className=\"bottomSectionGraphLegendText\">Search</label>\n              <input type=\"text\" name=\"search\" placeholder='Search' className=\"form-control\" onChange={e => this.setState({ search: e.target.value }, this.applyFilters)}/>\n            </div>\n          </div>\n\n          {this.filtersRow()}\n\n          <table className=\"detailsTable\">\n            <thead>\n              <tr>\n                <th className=\"bottomSectionGraphLegendText\">Learning Objective</th>\n                <th className=\"bottomSectionGraphLegendText\">Teaching Point</th>\n                <th\n                  className='bottomSectionGraphLegendText tableSortCol'\n                  onClick={() => {\n                    this.setState({\n                    sortCol: 'clinical_focus',\n                    sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n                    filteredData: this.sortDeliveries('clinical_focus', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n                    })\n                  }}\n                >\n                  <div>Clinical Focus <img src={this.sortImage('clinical_focus')} alt=\"case name\" className=\"icon-case_name\" /></div>\n                </th>\n                <th\n                  className='bottomSectionGraphLegendText tableSortCol'\n                  onClick={() => this.setState({\n                    sortCol: 'system',\n                    sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n                    filteredData: this.sortDeliveries('system', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n                    })\n                  }\n                >\n                  <div>System <img src={this.sortImage('system')} alt=\"case name\" className=\"icon-case_name\" /></div>\n                </th>\n                <th className='bottomSectionGraphLegendText'>{this.props.multiple_cohorts ? \"Correct Responses\" : \"% Correct Responses\"}</th>\n                <th\n                  className='bottomSectionGraphLegendText tableSortCol clc'\n                  onClick={() => this.setState({\n                    sortCol: 'clc',\n                    sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n                    filteredData: this.sortDeliveries('clc', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n                    })\n                  }\n                >\n                  <div>Clc Breakdown <img src={this.sortImage('clc')} alt=\"case name\" className=\"icon-case_name\" /></div>\n                </th>\n                <th className=\"bottomSectionGraphLegendText\">Aquifer Case</th>\n                <th className=\"bottomSectionGraphLegendText\">% of Students Completing Case</th>\n              </tr>\n            </thead>\n            <tbody>\n              {this.state.filteredData.map((row, i) => {\n                return <tr key={`cohortProgressTable${i}`}>\n                  <td>{row.learning_objective}</td>\n                  <td>\n                    {this.getTeachingPointModal(row)}\n                  </td>\n                  <td><p className=\"metadata-box clinical-focus\">{row.clinical_focus || 'N/A'}</p></td>\n                  <td><p className=\"metadata-box system\" style={{ wordBreak: \"break-word\", overflowWrap: \"break-word\" }}>{row.system || 'N/A'}</p></td>\n                  <td className=\"centerColumn\">{this.getCorrectResponses(row)}</td>\n                  <td>\n                    <div className=\"row graphSectionRow\">\n                      <div className=\"overallPerformancesBar excel\" style={this.getClcStyle(row.excel_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.excel_fraction)}%</p></div>\n                      <div className=\"overallPerformancesBar competent\" style={this.getClcStyle(row.competent_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.competent_fraction)}%</p></div>\n                      <div className=\"overallPerformancesBar unsure\" style={this.getClcStyle(row.unsure_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.unsure_fraction)}%</p></div>\n                      <div className=\"overallPerformancesBar novice\" style={this.getClcStyle(row.novice_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.novice_fraction)}%</p></div>\n                      <div className=\"overallPerformancesBar warning\" style={this.getClcStyle(row.warning_fraction)}><p className=\"bottomGraphIndicatorBarPercentText\">{Math.round(row.warning_fraction)}%</p></div>\n                    </div>\n                  </td>\n                  <td style={{color: \"#110EBF\"}}>{row.document_set_document_relation_path != 'N/A' ? <a style={{color: '#1b5599', textDecoration: 'underline'}} target=\"_blank\" href={row.document_set_document_relation_path}>{row.case}</a> : 'N/A'}</td>\n                  <td className=\"centerColumn\">{Math.round(row.case_completed_fraction)}%</td>\n                </tr>\n              })}\n            </tbody>\n          </table>\n        </div>\n      </div>\n    </>\n  }\n}\n\nexport default CohortProgressesDeliveriesTable;\n","// src/components/ClcBar.js\nimport React from \"react\";\n\nconst ClcBar = ({ data }) => {\n  const getClcStyle = (percentage) => {\n    if (percentage <= 0) {\n      return { display: \"none\" };\n    }\n    return { width: `${percentage}%` };\n  };\n\n  return (\n    <div className=\"row graphSectionRow clc-bar\">\n      <div\n        className=\"overallPerformancesBar excel\"\n        style={getClcStyle(data.cognitive_competence_score_excel)}\n      ></div>\n      <div\n        className=\"overallPerformancesBar competent\"\n        style={getClcStyle(data.cognitive_competence_score_competent)}\n      ></div>\n      <div\n        className=\"overallPerformancesBar unsure\"\n        style={getClcStyle(data.cognitive_competence_score_unsure)}\n      ></div>\n      <div\n        className=\"overallPerformancesBar novice\"\n        style={getClcStyle(data.cognitive_competence_score_novice)}\n      ></div>\n      <div\n        className=\"overallPerformancesBar warning\"\n        style={getClcStyle(data.cognitive_competence_score_warning)}\n      ></div>\n    </div>\n  );\n};\n\nexport default ClcBar;\n","import React from \"react\";\nimport ClcBar from \"./clc_bar\";\nimport { sortImage, SortingCurricularSummary } from \"./sorting_curricular_summary\";\nimport Ibubble from \"./ibubble\";\n\nexport default class CurricularSummaryDiscipline extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      collapsed: this.props.isDefaultCollapse,\n      filteredData: this.props.rows.questions_count_by_clinical_disciplines,\n      sortCol: \"number_of_items\",\n      sortDir: \"asc\"\n    };\n  }\n\n  componentDidMount() {\n    window.addEventListener(\"resize\", this.updateCollapsedState);\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener(\"resize\", this.updateCollapsedState);\n  }\n\n  updateCollapsedState = () => {\n    const isSmallScreen = window.innerWidth < 768;\n    this.setState({ collapsed: !isSmallScreen });\n  };\n\n  handleSort = (sortCol, sortDir) => {\n    const isClc = sortCol === 'ccc_hash';\n    this.setState({\n      sortCol,\n      sortDir,\n      filteredData: SortingCurricularSummary(\n        this.state.filteredData,\n        sortCol,\n        sortDir,\n        isClc,\n      ),\n    });\n  };\n\n  getCorrectResponses(row) {\n    if (row.accuracy_fraction === 0) {\n      return \"N/A\"\n    } else {\n      return `${row.accuracy_percentage}%`\n    }\n  }\n\n  render() {\n    return (\n      <>\n        <div className=\"performanceQuizCard focusArea\">\n          <div className=\"performanceQuizCardTitleRow filter-label-focus\" tabIndex=\"0\"\n              onClick={() => {\n                this.setState({ collapsed: !this.state.collapsed });\n              }}\n              onKeyPress={(event) => {\n                if (event.key === 'Enter') {\n                  this.setState({ collapsed: !this.state.collapsed });\n                }\n              }}\n            >\n            <div\n              className={\n                this.state.collapsed\n                  ? \"saqResultsCardOpen\"\n                  : \"saqResultsCardClosed\"\n              }\n            ></div>\n            <h2 className=\"saqResultsCardTitle1\">CLINICAL DISCIPLINE</h2>\n          </div>\n          <table\n            className=\"performanceQuizCardTable performanceSummary performancePointer\"\n            style={{ display: this.state.collapsed ? \"none\" : \"table\" }}\n          >\n            <thead>\n              <tr>\n                <th width=\"25%\">CLINICAL DISCIPLINE</th>\n                <th width=\"15%\">\n                  <div\n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"completed_questions\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"completed_questions\", newSortDir);\n                    }}\n                  >\n                    QUESTIONS COMPLETED &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"completed_questions\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n                <th width=\"15%\">\n                  <div\n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"accuracy_percentage\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"accuracy_percentage\", newSortDir);\n                    }}\n                  >\n                    AVG. ACCURACY &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"accuracy_percentage\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n                <th width=\"25%\">\n                  <div className=\"position-relative d-flex align-items-center gap-1\" \n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"ccc_hash\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"ccc_hash\", newSortDir);\n                    }}\n                  >\n                    <div>\n                    CLINICAL LEARNING CALIBRATION &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"ccc_hash\",\n                      this.handleSort\n                    )}\n                    </div>\n                    <sup className=\"info-bubble learning-bubble\">\n                      <span className=\"tooltip-box\">\n                        <Ibubble />\n                      </span>\n                    </sup>\n                  </div>\n                </th>\n                <th width=\"20%\">\n                  <div\n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"students_assessed\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"students_assessed\", newSortDir);\n                    }}\n                  >\n                    STUDENT ASSESSED &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"students_assessed\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n              </tr>\n            </thead>\n            <tbody>\n              {this.state.filteredData.map((row, i) => (\n                <tr key={`curricularSummaryTable${i}`}>\n                  <td width=\"25%\">\n                    {row.name || 'N/A'}\n                  </td>\n                  <td width=\"15%\">\n                    {row.completed_questions}\n                  </td>\n                  <td width=\"15%\">{this.getCorrectResponses(row)}</td>\n                  <td width=\"25%\" style={{ textAlign: '-webkit-center' }}>\n                    <ClcBar data={row.ccc_hash} />\n                  </td>\n                  <td width=\"20%\">\n                    {row.students_assessed}\n                  </td>\n                </tr>\n              ))}\n            </tbody>\n          </table>\n        </div>\n      </>\n    );\n  }\n}\n","import React from \"react\";\nimport ClcBar from \"./clc_bar\";\nimport { sortImage, SortingCurricularSummary } from \"./sorting_curricular_summary\";\nimport Ibubble from \"./ibubble\";\n\nexport default class CurricularSummaryFocus extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      collapsed: this.props.isDefaultCollapse,\n      filteredData: this.props.rows.questions_count_by_clinical_focuses,\n      sortCol: \"number_of_items\",\n      sortDir: \"asc\"\n    };\n  }\n\n  componentDidMount() {\n    window.addEventListener(\"resize\", this.updateCollapsedState);\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener(\"resize\", this.updateCollapsedState);\n  }\n\n  updateCollapsedState = () => {\n    const isSmallScreen = window.innerWidth < 768;\n    this.setState({ collapsed: isSmallScreen });\n  };\n\n  handleSort = (sortCol, sortDir) => {\n    const isClc = sortCol === 'ccc_hash';\n    this.setState({\n      sortCol,\n      sortDir,\n      filteredData: SortingCurricularSummary(\n        this.state.filteredData,\n        sortCol,\n        sortDir,\n        isClc,\n      ),\n    });\n  };\n\n  getCorrectResponses(row) {\n    if (row.accuracy_fraction === 0) {\n      return \"N/A\"\n    } else {\n      return `${row.accuracy_percentage}%`\n    }\n  }\n\n  render() {\n    return (\n      <>\n        <div className=\"performanceQuizCard focusArea\">\n          <div className=\"performanceQuizCardTitleRow filter-label-focus\" tabIndex=\"0\"\n              onClick={() => {\n                this.setState({ collapsed: !this.state.collapsed });\n              }}\n              onKeyPress={(event) => {\n                if (event.key === 'Enter') {\n                  this.setState({ collapsed: !this.state.collapsed });\n                }\n              }}\n            >\n            <div\n              className={\n                this.state.collapsed\n                  ? \"saqResultsCardOpen\"\n                  : \"saqResultsCardClosed\"\n              }\n            ></div>\n            <h2 className=\"saqResultsCardTitle1\">CLINICAL FOCUS</h2>\n          </div>\n          <table\n            className=\"performanceQuizCardTable performanceSummary performancePointer\"\n            style={{ display: this.state.collapsed ? \"none\" : \"table\" }}\n          >\n            <thead>\n              <tr>\n                <th width=\"25%\">CLINICAL FOCUS</th>\n                <th width=\"15%\">\n                  <div \n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"completed_questions\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"completed_questions\", newSortDir);\n                    }}\n                  >\n                    QUESTIONS COMPLETED &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"completed_questions\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n                <th width=\"15%\">\n                  <div \n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"accuracy_percentage\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"accuracy_percentage\", newSortDir);\n                    }}\n                  >\n                    AVG. ACCURACY &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"accuracy_percentage\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n                <th width=\"25%\">\n                  <div className=\"position-relative d-flex align-items-center gap-1\" \n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"ccc_hash\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"ccc_hash\", newSortDir);\n                    }}\n                  >\n                    <div>\n                    CLINICAL LEARNING CALIBRATION &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"ccc_hash\",\n                      this.handleSort\n                    )}\n                    </div>\n                    <sup className=\"info-bubble learning-bubble\">\n                      <span className=\"tooltip-box\">\n                        <Ibubble />\n                      </span>\n                    </sup>\n                  </div>\n                </th>\n                <th width=\"20%\">\n                  <div \n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"students_assessed\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"students_assessed\", newSortDir);\n                    }}\n                  >\n                    STUDENT ASSESSED &nbsp;\n                    {sortImage(this.state.sortCol, \"students_assessed\", this.handleSort)}\n                  </div>\n                </th>\n              </tr>\n            </thead>\n            <tbody>\n              {this.state.filteredData.map((row, i) => (\n                <tr key={`curricularSummaryTable${i}`}>\n                  <td width=\"25%\">\n                    {row.name || 'N/A'}\n                  </td>\n                  <td width=\"15%\">\n                    {row.completed_questions}\n                  </td>\n                  <td width=\"15%\">{this.getCorrectResponses(row)}</td>\n                  <td width=\"25%\" style={{ textAlign: '-webkit-center' }}>\n                    <ClcBar data={row.ccc_hash} />\n                  </td>\n                  <td width=\"20%\">\n                    {row.students_assessed}\n                  </td>\n                </tr>\n              ))}\n            </tbody>\n          </table>\n        </div>\n      </>\n    );\n  }\n}\n","import React from \"react\";\nimport ClcBar from \"./clc_bar\";\nimport { sortImage, SortingCurricularSummary } from \"./sorting_curricular_summary\";\nimport Ibubble from \"./ibubble\";\n\nexport default class CurricularSummarySystem extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      collapsed: this.props.isDefaultCollapse,\n      filteredData: this.props.rows.questions_count_by_systems,\n      sortCol: \"number_of_items\",\n      sortDir: \"asc\"\n    };\n  }\n\n  componentDidMount() {\n    window.addEventListener(\"resize\", this.updateCollapsedState);\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener(\"resize\", this.updateCollapsedState);\n  }\n\n  updateCollapsedState = () => {\n    const isSmallScreen = window.innerWidth < 768;\n    this.setState({ collapsed: !isSmallScreen });\n  };\n\n  handleSort = (sortCol, sortDir) => {\n    const isClc = sortCol === 'ccc_hash';\n    this.setState({\n      sortCol,\n      sortDir,\n      filteredData: SortingCurricularSummary(\n        this.state.filteredData,\n        sortCol,\n        sortDir,\n        isClc,\n      ),\n    });\n  };\n\n  getCorrectResponses(row) {\n    if (row.accuracy_fraction === 0) {\n      return \"N/A\"\n    } else {\n      return `${row.accuracy_percentage}%`\n    }\n  }\n\n  render() {\n    return (\n      <>\n        <div className=\"performanceQuizCard focusArea\">\n          <div className=\"performanceQuizCardTitleRow filter-label-focus\" tabIndex=\"0\"\n              onClick={() => {\n                this.setState({ collapsed: !this.state.collapsed });\n              }}\n              onKeyPress={(event) => {\n                if (event.key === 'Enter') {\n                  this.setState({ collapsed: !this.state.collapsed });\n                }\n              }}\n            >\n            <div\n              className={\n                this.state.collapsed\n                  ? \"saqResultsCardOpen\"\n                  : \"saqResultsCardClosed\"\n              }\n            ></div>\n            <h2 className=\"saqResultsCardTitle1\">SYSTEM</h2>\n          </div>\n          <table\n            className=\"performanceQuizCardTable performanceSummary performancePointer\"\n            style={{ display: this.state.collapsed ? \"none\" : \"table\" }}\n          >\n            <thead>\n              <tr>\n                <th width=\"25%\">SYSTEM</th>\n                <th width=\"15%\">\n                  <div\n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"completed_questions\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"completed_questions\", newSortDir);\n                    }}\n                  >\n                    QUESTIONS COMPLETED &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"completed_questions\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n                <th width=\"15%\">\n                  <div\n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"accuracy_percentage\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"accuracy_percentage\", newSortDir);\n                    }}\n                  >\n                    AVG. ACCURACY &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"accuracy_percentage\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n                <th width=\"25%\">\n                  <div className=\"position-relative d-flex align-items-center gap-1\" \n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"ccc_hash\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"ccc_hash\", newSortDir);\n                    }}\n                  >\n                    <div>\n                    CLINICAL LEARNING CALIBRATION &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"ccc_hash\",\n                      this.handleSort\n                    )}\n                    </div>\n                    <sup className=\"info-bubble learning-bubble\">\n                      <span className=\"tooltip-box\">\n                        <Ibubble />\n                      </span>\n                    </sup>\n                  </div>\n                </th>\n                <th width=\"20%\">\n                  <div\n                    onClick={() => {\n                      const newSortDir =\n                        this.state.sortCol === \"students_assessed\" && this.state.sortDir === \"asc\"\n                          ? \"desc\"\n                          : \"asc\";\n                      this.handleSort(\"students_assessed\", newSortDir);\n                    }}\n                  >\n                    STUDENT ASSESSED &nbsp;\n                    {sortImage(\n                      this.state.sortCol,\n                      \"students_assessed\",\n                      this.handleSort\n                    )}\n                  </div>\n                </th>\n              </tr>\n            </thead>\n            <tbody>\n              {this.state.filteredData.map((row, i) => (\n                <tr key={`curricularSummaryTable${i}`}>\n                  <td width=\"25%\">\n                    {row.name || 'N/A'}\n                  </td>\n                  <td width=\"15%\">\n                    {row.completed_questions}\n                  </td>\n                  <td width=\"15%\">{this.getCorrectResponses(row)}</td>\n                  <td width=\"25%\" style={{ textAlign: '-webkit-center' }}>\n                    <ClcBar data={row.ccc_hash} />\n                  </td>\n                  <td width=\"20%\">\n                    {row.students_assessed}\n                  </td>\n                </tr>\n              ))}\n            </tbody>\n          </table>\n        </div>\n      </>\n    );\n  }\n}\n","import React from \"react\";\n\nconst categories = [\n  { className: \"excelBox\", title: \"Excel\", description: \"Certain, correct, & fast\" },\n  { className: \"competentBox\", title: \"COMPETENT\", description: \"Certain & correct OR very certain & correct with hesitation\" },\n  { className: \"unsureBox\", title: \"UNSURE\", description: \"Uncertain & correct OR certain & correct with hesitation\" },\n  { className: \"noviceBox\", title: \"Novice\", description: \"Uncertain & Wrong\" },\n  { className: \"warningBox\", title: \"WARNING\", description: \"Certain & Wrong\" },\n];\n\nconst Ibubble = () => {\n  return (\n    <div className=\"curricular-performance-legend\">\n      {categories.map(({ className, title, description }) => (\n        <div className=\"indicatorBox\" key={title}>\n          <div className={`ColorBox ${className}`}></div>\n          <div className=\"pl10\">\n            <p className=\"label GraphLegendText legendTitle\">{title}</p>\n            <p className=\"bottomSectionGraphLegendText\">{description}</p>\n          </div>\n        </div>\n      ))}\n    </div>\n  );\n};\n\nexport default Ibubble;\n","import React from 'react';\nimport TableDownArrowImage from \"images/table-down_arrow.png\";\nimport TableUpArrowImage from \"images/table-up_arrow.png\";\n\nexport const SortingCurricularSummary = (data, sortCol, sortDir, isClc) =>{\n  data.sort((a, b) => {\n    let comparison = 0;\n    let fa, fb\n    if(isClc){\n      fa = a[sortCol].cognitive_competence_score_excel;\n      fb = b[sortCol].cognitive_competence_score_excel;\n    }else {\n       fa = a[sortCol];\n       fb = b[sortCol];\n    }\n    if (fa < fb) {\n      comparison = -1;\n  } else if (fa > fb) {\n      comparison = 1;\n  }\n    return sortDir === 'asc' ? comparison : -comparison;\n   \n});\n  return data\n}\n\nexport const sortImage = (currentSortCol, sortCol, onSort) => {\n  const handleSortAsc = () => onSort(sortCol, 'asc');\n  const handleSortDesc = () => onSort(sortCol, 'desc');\n\n  const handleTouchStartAsc = (event) => {\n    handleSortAsc();\n  }\n\n  const handleTouchStartDesc = (event) => {\n    handleSortDesc();\n  }\n\n  return (\n    <span className=\"sort-arrows\">\n      <span className='sort-up-arrow filter-label-focus' onClick={handleSortDesc} onTouchStart={handleTouchStartDesc} tabIndex=\"0\" onKeyPress={(event) => { if(event.key === 'Enter') handleSortDesc(); }}></span>\n      <span className='sort-bottom-arrow filter-label-focus' onClick={handleSortAsc} onTouchStart={handleTouchStartAsc} tabIndex=\"0\" onKeyPress={(event) => { if(event.key === 'Enter') handleSortAsc(); }}></span>\n    </span>\n  );\n};\n","import React from 'react';\n\nclass CustomMultiSelect extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isOpen: false,        // Control dropdown visibility\n    };\n    this.dropdownRef = React.createRef(); // Ref for the dropdown\n  }\n\n  componentDidMount() {\n    document.addEventListener('mousedown', this.handleClickOutside);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('mousedown', this.handleClickOutside);\n  }\n\n  handleClickOutside = (event) => {\n    if (this.dropdownRef.current && !this.dropdownRef.current.contains(event.target)) {\n      this.setState({ isOpen: false }); // Close dropdown if click is outside\n    }\n  };\n\n  toggleDropdown = () => {\n    this.setState(prevState => ({\n      isOpen: !prevState.isOpen\n    }));\n  };\n\n  handleOptionChange = (optionValue) => {\n    const { selectedOptions } = this.props;\n    const isSelected = selectedOptions.includes(optionValue);\n\n    const updatedOptions = isSelected\n      ? selectedOptions.filter(option => option !== optionValue)  // Deselect if already selected\n      : [...selectedOptions, optionValue];                       // Select if not selected\n\n    this.props.onChange(updatedOptions);  // Trigger parent's onChange for external handling\n  };\n\n\n  render() {\n    const { options, placeholder, selectedOptions, dropdownArrow } = this.props;\n    const {isOpen } = this.state;\n\n    return (\n      <div className=\"custom-multi-select\" ref={this.dropdownRef} style={{ position: 'relative' }}>\n        {/* Dropdown-like div styled like a select element */}\n        <button className=\"form-control filterSelect selection-arrow\" onClick={this.toggleDropdown} style={{ cursor: 'pointer' }} aria-label={`Select ${placeholder}`}>\n          {placeholder}\n          {dropdownArrow && <img src={dropdownArrow} alt=\"Dropdown Arrow\" className=\"dropdown-arrow\" />}\n        </button>\n\n        {/* Dropdown content with options */}\n        {isOpen && (\n          <div className=\"dropdown-menu\" style={{ display: 'block' }}>\n            {options.map(option => (\n              <li\n                key={option}\n                className={selectedOptions.includes(option) ? 'selected' : ''}\n                onClick={() => this.handleOptionChange(option)}\n              >\n                {option}\n              </li>\n            ))}\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n\nexport default CustomMultiSelect;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport GenSortTable from 'Gen/SortTable/component'\n\nimport TableDownArrowImage from \"images/table-down_arrow.png\";\nimport TableUpArrowImage from \"images/table-up_arrow.png\";\nimport CustomMultiSelect from './CustomMultiSelect';\n\nclass StudentLearningProgressTable extends React.Component{\n  constructor(props) {\n    super(props);\n    this.state = {\n      search: '',\n      filteredData: this.props.rows,\n      sortCol: 'status',\n      sortDir: 'asc',\n      assessment_type: [],\n      early_assessment_date: [],\n      late_assessment_date: [],\n    };\n  }\n\n  sortProgresses = (sortCol, sortDir) =>{\n    var data = this.state.filteredData\n    if(sortCol === \"progress_indicator_text_late\" || sortCol === \"progress_indicator_text_early\"){\n      data = data.filter(item => item[sortCol] !== 'N/A')\n      const order = ['On Track', 'Below Target', 'Off Track'];\n      if(sortDir===\"asc\"){\n        data.sort((a, b) => {\n          const aIndex = order.indexOf(a[sortCol]);\n          const bIndex = order.indexOf(b[sortCol]);\n          return aIndex - bIndex;\n        });\n      }else{\n        data.sort((a, b) => {\n          const aIndex = order.indexOf(a[sortCol]);\n          const bIndex = order.indexOf(b[sortCol]);\n          return bIndex - aIndex;\n        });\n      }\n      data = data.concat(this.state.filteredData.filter(item => item[sortCol] === 'N/A'))\n    }else {\n      data.sort((a, b) => {\n        let fa = a[sortCol].toLowerCase(),\n          fb = b[sortCol].toLowerCase();\n        if (fa < fb) {\n          return sortDir == 'asc' ? -1 : 1;\n        }\n        if (fa > fb) {\n          return sortDir == 'asc' ? 1 : -11;\n        }\n        return 0;\n      });\n    }\n    return data\n  }\n\n  sortImage = (sortCol)=>{\n    return this.state.sortCol == sortCol ? this.state.sortDir == 'asc' ? TableDownArrowImage : TableUpArrowImage : TableDownArrowImage\n  }\n\n  applyFilters = () => {\n    const { early_assessment_date, late_assessment_date ,assessment_type, search } = this.state;\n    const filteredData = this.props.rows.filter((item) => {\n      const matchesEarlyAssessmentDate = early_assessment_date.length === 0 || early_assessment_date.some(date => item.date_range_for_early_assessment?.includes(date));\n      const matchesLateAssessmentDate = late_assessment_date.length === 0 || late_assessment_date.some(date => item.date_range_for_late_assessment?.includes(date));\n      const matchesAssessmentType = assessment_type.length === 0 || assessment_type.some(type => item.assessment_type?.includes(type));\n      const matchesSearch = item.student_name.toLowerCase().includes(search.toLowerCase()) ||\n        item.status.toLowerCase().includes(search.toLowerCase()) ||\n        (this.props.report_type == 'multi-cohort' &&\n          (\n            (item.assessment_type?.toLowerCase() || '').includes(search.toLowerCase()) ||\n            (item.status_for_early_assessment?.toLowerCase() || '').includes(search.toLowerCase()) ||\n            (item.status_for_late_assessment?.toLowerCase() || '').includes(search.toLowerCase())\n          )\n        );\n\n      return matchesEarlyAssessmentDate && matchesLateAssessmentDate && matchesAssessmentType && matchesSearch;\n    });\n    this.setState({ filteredData });\n  }\n\n  handleFilterChange = (filterName, values) => {\n    this.setState({ [filterName]: values }, this.applyFilters);\n  }\n\n  filtersRow() {\n    if (this.props.multiple_cohorts) {\n      return (\n        <div>\n          <div className=\"filtersRow\">\n            <div className=\"form-inline\">\n              <CustomMultiSelect\n                options={this.props.early_assessment_date_options}\n                placeholder=\"Early Assessment Date\"\n                selectedOptions={this.state.early_assessment_date}\n                onChange={(selectedOptions) => this.handleFilterChange('early_assessment_date', selectedOptions)}\n              />\n\n              <CustomMultiSelect\n                options={this.props.late_assessment_date_options}\n                placeholder=\"Late Assessment Date\"\n                selectedOptions={this.state.late_assessment_date}\n                onChange={(selectedOptions) => this.handleFilterChange('late_assessment_date', selectedOptions)}\n              />\n\n              <CustomMultiSelect\n                options={this.props.discipline_options}\n                placeholder=\"Discipline\"\n                selectedOptions={this.state.assessment_type}\n                onChange={(selectedOptions) => this.handleFilterChange('assessment_type', selectedOptions)}\n              />\n            </div>\n          </div>\n\n          <div className='filtersRow' style={{ justifyContent: 'center', marginBottom: '-10px' }}>\n            {this.state.assessment_type.length > 0 && this.state.assessment_type.map((selectedAssessmentType, index) => (\n              <p key={index} onClick={() => {\n                const updatedAssessmentType = this.state.assessment_type.filter(at => at !== selectedAssessmentType);\n                this.handleFilterChange('assessment_type', updatedAssessmentType);\n              }} className='filterSelectedVal'>{selectedAssessmentType}&nbsp;&nbsp;&nbsp; X</p>\n            ))}\n\n            {this.state.early_assessment_date.length > 0 && this.state.early_assessment_date.map((selectedEarlyAssessmentDate, index) => (\n              <p key={index} onClick={() => {\n                const updatedEarlyAssessmentDate = this.state.early_assessment_date.filter(adt => adt !== selectedEarlyAssessmentDate);\n                this.handleFilterChange('early_assessment_date', updatedEarlyAssessmentDate);\n              }} className='filterSelectedVal'>{selectedEarlyAssessmentDate}&nbsp;&nbsp;&nbsp; X</p>\n            ))}\n\n            {this.state.late_assessment_date.length > 0 && this.state.late_assessment_date.map((selectedLateAssessmentDate, index) => (\n              <p key={index} onClick={() => {\n                const updatedLateAssessmentDate = this.state.late_assessment_date.filter(ad => ad !== selectedLateAssessmentDate);\n                this.handleFilterChange('late_assessment_date', updatedLateAssessmentDate);\n              }} className='filterSelectedVal'>{selectedLateAssessmentDate}&nbsp;&nbsp;&nbsp; X</p>\n            ))}\n          </div>\n        </div>\n      )\n    }\n  }\n\n\n  render() {\n    return <>\n      <div className=\"detailsSection\">\n        <div className=\"col-md-12\">\n          <div className=\"sectionTitleRow\">\n            <div className=\"educator-detail-heading\">\n              <h2 className=\"reportTopSectionTitle\">{this.props.purpose == \"Early\" ? \"Early -\" : \"\"} Individual Student Learning Progress</h2>\n              {(() => {\n                if (this.props.report_type == 'multi-cohort' || this.props.purpose == 'Late') {\n                  return (<div className=\"info-bubble\">\n                    <span className=\"tooltip-box small after above-center tab-1\">\n                      Assessment details are displayed in early/late pairs. If both early and late data are available, the LPI displays for both with all other fields displaying for the late assessment. If there is no late assessment, the late LPI displays as N/A and all other details are matched with the early assessment.\n                    </span>\n                  </div>)\n                }\n              })()}\n            </div>\n            <div className=\"form-group\" style={{width: '400px'}}>\n              <input type=\"text\" name=\"search\" placeholder='Search:' className=\"form-control\" onChange={e => this.setState({ search: e.target.value }, this.applyFilters)} />\n            </div>\n          </div>\n\n          {this.filtersRow()}\n          {(() => {\n            if (this.props.report_type == 'multi-cohort') {\n              return (\n                <table className=\"detailsTable\">\n                  <thead>\n                    <tr>\n                      <th\n                        key=\"student-name\"\n                        rowSpan=\"2\"\n                        className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n                        width=\"250\"\n                        onClick={() => this.setState({\n                          sortCol: 'student_name',\n                          sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n                          filteredData: this.sortProgresses('student_name', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n                          })\n                        }\n                      >Student Name<img src={this.sortImage('student_name')} height='20' width='20' /></th>\n                      <th key=\"learning-progress\" colSpan=\"2\"\n                        className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n                        width=\"300\"\n                        onClick={() => {\n                          var sortColName= 'progress_indicator_text_late'\n                          this.setState({\n                          sortCol: sortColName,\n                          sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n                          filteredData: this.sortProgresses(sortColName, this.state.sortDir == 'asc' ? 'desc' : 'asc')\n                          })}\n                        }\n                      >\n                        Learning Progress\n                        <img src={this.sortImage('progress_indicator_text_late')} height='20' width='20' />\n                        <div className=\"info-bubble\" style={{marginLeft: '65%', marginTop: '-25px'}}>\n                          <span className=\"tooltip-box mid after\">\n                            Sort by late LPI\n                          </span>\n                        </div>\n                      </th>\n                      <th width=\"200\" key=\"assessment-types\" rowSpan=\"2\" className=\"bottomSectionGraphLegendText progress-table-head\">Assessment Type</th>\n                      <th key=\"exam-status\" colSpan=\"2\" className=\"bottomSectionGraphLegendText progress-table-head\" style={{textAlign: 'center' }} >Assessment Status</th>\n                      <th key=\"assessment-dates\" colSpan=\"2\" className=\"bottomSectionGraphLegendText progress-table-head\" style={{textAlign: 'center' }}>Assessment Dates</th>\n                    </tr>\n                    <tr>\n                      <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n                      <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n                      <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n                      <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n                      <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n                      <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {this.state.filteredData.map((row, i) => {\n                      return <tr key={`studentLearningProgressTable${i}`}>\n                        <td>\n                          {row.student_name}\n                          <div><a target=\"_blank\" href={row.student_case_log_path}>Student Case <br></br> Log Report</a></div>\n                        </td>\n                        <td>\n                          <div className={`progressIndicatorBox ${row.progress_indicator_color_early}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_early}</div></div>\n                          {row.early_rostering_progress_url && this.props.ind_result_faculty_feature && (\n                            <div className=\"mt-1\"><a target=\"_blank\" href={row.early_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name ,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_early })}>Results</a></div>\n                          )}\n                        </td>\n                        <td>\n                          <div className={`progressIndicatorBox ${row.progress_indicator_color_late}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_late}</div></div>\n                          {row.late_rostering_progress_url && this.props.ind_result_faculty_feature && (\n                            <div className=\"mt-1\"><a target=\"_blank\" href={row.late_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_late })} >Results</a></div>\n                          )}\n                        </td>\n                        <td>{row.assessment_type}</td>\n                        <td>{row.status_for_early_assessment || \"N/A\"}</td>\n                        <td>{row.status_for_late_assessment || \"N/A\"}</td>\n                        <td>{row.date_range_for_early_assessment || \"N/A\"}</td>\n                        <td>{row.date_range_for_late_assessment || \"N/A\"}</td>\n                      </tr>\n                    })}\n                  </tbody>\n                </table>\n              );\n            } else {\n              return (\n                <table className=\"detailsTable\">\n                  <thead>\n                    <tr>\n                      <th\n                        key=\"student-name\"\n                        rowSpan=\"2\"\n                        className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n                        width=\"250\"\n                        onClick={() => this.setState({\n                          sortCol: 'student_name',\n                          sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n                          filteredData: this.sortProgresses('student_name', this.state.sortDir == 'asc' ? 'desc' : 'asc')\n                          })\n                        }\n                      >Student Name<img src={this.sortImage('student_name')} height='20' width='20' /></th>\n                      <th key=\"learning-progress\" colSpan=\"2\"\n                        className=\"bottomSectionGraphLegendText progress-table-head sortable\"\n                        width=\"300\"\n                        onClick={() => {\n                          var sortColName= (this.props.purpose === 'Late') ? 'progress_indicator_text_late' : 'progress_indicator_text_early'\n                          this.setState({\n                          sortCol: sortColName,\n                          sortDir: this.state.sortDir == 'asc' ? 'desc' : 'asc',\n                          filteredData: this.sortProgresses(sortColName, this.state.sortDir == 'asc' ? 'desc' : 'asc')\n                          })}\n                        }\n                      >\n                        Learning Progress\n                        <img src={this.sortImage((this.props.purpose === 'Late') ? 'progress_indicator_text_late' : 'progress_indicator_text_early')} height='20' width='20' />\n                        {(() => {\n                          if (this.props.purpose === 'Late') {\n                            return (\n                              <div className=\"info-bubble\" style={{marginLeft: '65%', marginTop: '-25px'}}>\n                                <span className=\"tooltip-box mid after\">\n                                  Sort by late LPI\n                                </span>\n                              </div>\n                            )\n                          }\n                        })()}\n\n                      </th>\n                      <th className=\"bottomSectionGraphLegendText progress-table-head\" rowSpan=\"2\" width=\"300\">\n                        <span>\n                          Case Completion\n                        </span>\n                        <div className=\"info-bubble\" style={{marginLeft: '140px', marginTop: '-22px'}}>\n                          <span className=\"tooltip-box mid after\" >\n                            Case completion for all {this.props.discipline} cases at the time of assessment\n                          </span>\n                        </div>\n                      </th>\n                      <th key=\"exam-status\" className=\"bottomSectionGraphLegendText progress-table-head\" rowSpan=\"2\">Exam Status</th>\n                    </tr>\n                    {(() => {\n                      if (this.props.purpose === 'Late') {\n                        return (\n                          <tr>\n                            <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Early</th>\n                            <th className=\"bottomSectionGraphLegendText small\" style={{textAlign: 'left', fontSize: '12px'}}>Late</th>\n                          </tr>\n                        )\n                      }\n                    })()}\n                  </thead>\n                  <tbody>\n                    {this.state.filteredData.map((row, i) => {\n                      return <tr key={`studentLearningProgressTable${i}`}>\n                        <td>{row.student_name}</td>\n                        <td>\n                          <div className={`progressIndicatorBox ${row.progress_indicator_color_early}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_early}</div></div>\n                          {row.early_rostering_progress_url && this.props.ind_result_faculty_feature && (\n                            <div className=\"mt-1\"><a target=\"_blank\" href={row.early_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_early })}>Results</a></div>\n                          )}\n                        </td>\n                        <td>\n                          <div className={`progressIndicatorBox ${row.progress_indicator_color_late}`}><div className=\"progressIndicatorText\">{row.progress_indicator_text_late}</div></div>\n                          {row.late_rostering_progress_url && this.props.ind_result_faculty_feature && (\n                            <div className=\"mt-1\"><a target=\"_blank\" href={row.late_rostering_progress_url} onClick={() => analytics.track(\"student_detail_report_access\", { page: window.location.href, source: 'Calibrate Reports', student_name: row.student_full_name,student_email: row.email, assessment_name: row.assessment_type, lpi: row.progress_indicator_text_late })}>Results</a></div>\n                          )}\n                        </td>\n                        <td>\n                          <div className=\"row\">\n                            <div className=\"col-md-12\">\n                              <span>{row.case_completion_fraction}</span>\n                              <div className=\"mt-1\"><a target=\"_blank\" href={row.student_case_log_path} >Student Case Log Report</a></div>\n                            </div>\n                          </div>\n                        </td>\n                        <td>{row.status}</td>\n                      </tr>\n                    })}\n                  </tbody>\n                </table>\n              );\n            }\n          })()}\n        </div>\n      </div>\n    </>\n  }\n}\n\nexport default StudentLearningProgressTable;\n","import * as React from 'react'\nimport ReactOnRails from 'react-on-rails'\nimport axios from 'axios'\n\nexport default class FileUploader extends React.Component {\n  onSubmit(e) {\n    e.preventDefault();\n\n    // Chrome triggers the onChange when the file picker \"Cancel\" is clicked\n    // after a file is uploaded. This prevents an error from being spawend.\n    if (!e.target.files[0]) { return; }\n\n    if (this.props.changeLoadingCountByValue) {\n      this.props.changeLoadingCountByValue(1)\n    }\n\n    const formData = new FormData();\n    formData.append(this.props.name, e.target.files[0]);\n    Object.entries(this.props.extraData || {}).forEach(([key, val]) => formData.append(key, val))\n    const firstFileName = e.target.files[0].name\n\n    axios.post(\n      this.props.fileUploadPath,\n      formData,\n      ReactOnRails.authenticityHeaders({\n        'Content-Type': 'multipart/form-data',\n        'Accept': 'application/json'\n      })\n    ).then(response => {\n      if (this.props.onSuccess) {\n        this.props.onSuccess(response.data)\n      }\n\n      if (this.props.changeLoadingCountByValue) {\n        this.props.changeLoadingCountByValue(-1)\n      }\n\n      alert(`${firstFileName} uploaded!`)\n    }).catch(error => {\n      console.error(error)\n\n      if (this.props.changeLoadingCountByValue) {\n        this.props.changeLoadingCountByValue(-1)\n      }\n\n      alert(`There was an error encountered when uploading ${firstFileName}.`)\n      throw(error)\n    })\n  }\n\n  render() {\n    return (\n      <span>\n        {(this.props.loadingCount && this.props.loadingCount > 0) ? ` (${this.props.loadingCount} Uploading)` : \"\"}\n        <form>\n          <input label='Upload File' type='file' onChange={this.onSubmit.bind(this)}/>\n        </form>\n      </span>\n    )\n  }\n}\n","import * as React from \"react\";\nimport * as classNames from 'classnames'\nimport GenLoadingSpinner from '../LoadingSpinner/component'\n\ninterface OnClickWrapperProps {\n  confirmMessage?: string;\n  confirmOKText?: string;\n  confirmTitle?: string;\n  disabled?: boolean;\n  href?: string;\n  onClick: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\nconst onClickWrapper = (props: OnClickWrapperProps) => {\n  const {\n    confirmTitle,\n    confirmMessage,\n    confirmOKText,\n    disabled,\n    onClick,\n    href,\n  } = props;\n\n  return (e: React.MouseEvent<HTMLAnchorElement>) => {\n    e.stopPropagation()\n    e.preventDefault()\n\n    if (disabled) {return null}\n\n    const action = onClick ? () => onClick(e) : () => { if(href) { window.location.href = href; }}\n\n    if (confirmTitle || confirmMessage) {\n      window.customConfirmBox({\n        message: confirmMessage,\n        callback: action,\n        title: confirmTitle,\n        okLabel: confirmOKText,\n      })\n    } else {\n      action()\n    }\n  }\n}\n\ninterface GenButtonProps {\n  ariaLabel?: string;\n  className?: string;\n  confirmMessage?: string;\n  confirmOKText?: string;\n  confirmTitle?: string;\n  disabled?: boolean;\n  highlighted?: boolean;\n  href?: string;\n  loading?: boolean;\n  loadingName?: string;\n  name: React.ReactNode;\n  onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n  small?: boolean;\n}\n\nconst GenButton = (props: GenButtonProps) => {\n  const {\n    className = \"\",\n    highlighted = false,\n    disabled = false,\n    small = false,\n    loading = false,\n    loadingName,\n    name,\n    href,\n    onClick,\n    confirmOKText,\n    confirmTitle,\n    confirmMessage,\n    ariaLabel,\n  } = props;\n\n  return (\n    <div className={classNames('gen-button', className, { disabled, highlighted, small})} >\n      { loading ? (\n        <span className=\"button-name\">\n          <GenLoadingSpinner/>\n          {loadingName}\n        </span>\n      ) : (\n        <a\n          aria-label={ariaLabel}\n          href=\"#\"\n          onClick={onClickWrapper({ href, onClick, disabled, confirmTitle, confirmMessage, confirmOKText })}\n          className=\"button-name\"\n        >\n          {name}\n        </a>\n      )}\n    </div>\n  )\n}\n\nexport default GenButton\n","import React, { useState } from 'react';\n\nconst CollapsibleListItem = ({ header, content }) => {\n  const [collapsed, setCollapsed] = useState(false);\n\n  const handleClick = () => {\n    setCollapsed(!collapsed);\n  }\n\n  const listContent = () => {\n    return(\n      [...[content]].flat().map((e) => {\n        return <div key={e.key} className=\"collapsible-list-content-item\">{e.content}</div>\n      })\n    );\n  }\n\n  return (\n    <div className=\"collapsible-list-item\">\n      <div className=\"collapsible-list-header\" onClick={handleClick}>\n        <div className={\"collapsible-list-handle\"}>\n          <i className={collapsed ? \"fas fa-plus-square fa-sm\" : \"fas fa-minus-square fa-sm\"}></i>\n        </div>\n        <div className=\"collapsible-list-header-text\">{header}</div>\n      </div>\n      {!collapsed && <div className=\"collapsible-list-content\">{listContent()}</div>}\n    </div>\n  );\n};\n\nexport default props => <CollapsibleListItem {...props} />;\n","import React from 'react';\n\nimport * as classNames from 'classnames'\n\nconst onButtonClick = (e, {\n  value,\n  selectedValue,\n  onUpdate,\n  selectedDirection\n}) => {\n  e.preventDefault()\n\n  let direction\n  if ((value === 'documents.last_release_date') && selectedValue !== value) {\n    direction = 'descending'\n  } else if (selectedValue === value && selectedDirection === 'ascending') {\n    direction = 'descending'\n  } else {\n    direction = 'ascending'\n  }\n\n  onUpdate(value, direction)\n  return false\n}\n\nconst GenDirectionalButtons = ({\n  selectedValue,\n  selectedDirection,\n  disabled,\n  onUpdate,\n  buttons,\n}) => (\n  <div className=\"gen-directional-buttons\">\n    { buttons.map(({ value, disabled, title }) => (\n      <a\n        className={\n          classNames(\n            \"gen-directional-button\",\n            {\n              'disabled': disabled || disabled,\n              'selected': value === selectedValue,\n              [selectedDirection]: value === selectedValue\n            }\n          )\n        }\n        key={value}\n        value={value}\n        href=\"#\"\n        onClick={(e) => onButtonClick(e, {value, selectedValue, onUpdate, selectedDirection})}>\n          <span className=\"button-group-item\">{title}</span>\n      </a>\n    ))}\n  </div>\n)\n\nexport default GenDirectionalButtons\n","import React from 'react'\n\nimport { assign, pick, map, concat, uniqBy, groupBy, fromPairs } from 'lodash'\n\nimport GenModal from 'Gen/Modal/component'\nimport GenDirectionalButtons from 'DirectionalButtons/component'\nimport GenLoadingSpinner from 'LoadingSpinner/component'\n\nimport {checkVisible} from 'helpers/check_visibility'\nimport {full_url} from 'helpers/url'\nimport * as classNames from \"classnames\";\nimport Select from 'react-select';\n\nconst FILTERS_SETTINGS = [\n  {\n    title: \"Presenting Problem\",\n    forKey: \"for_presenting_problem\",\n    optionsKey: \"presentingProblemOptions\",\n    filterGroup: 1,\n  },\n  {\n    title: \"Final Diagnosis\",\n    forKey: \"for_final_diagnosis\",\n    optionsKey: \"finalDiagnosisOptions\",\n    filterGroup: 1,\n  },\n  {\n    title: \"Additional Diagnosis\",\n    forKey: \"for_additional_diagnosis\",\n    optionsKey: \"additionalDiagnosisOptions\",\n    filterGroup: 1,\n  },\n  {\n    title: \"Illness Script Document\",\n    forKey: \"for_illness_script\",\n    optionsKey: \"illnessScriptOptions\",\n    shouldHide: (context) => context !== 'RC',\n    filterGroup: 1,\n  },\n  {\n    title: \"Aquifer Signature Content\",\n    forKey: \"for_course_name\",\n    optionsKey: \"aquiferContentOptions\",\n    filterGroup: 2,\n  },\n  {\n    title: \"Clinical Disciplines\",\n    forKey: \"for_clinical_discipline\",\n    optionsKey: \"clinicalDisciplinesOptions\",\n    filterGroup: 2,\n  },\n  {\n    title: \"Clinical Focus\",\n    forKey: \"for_clinical_focus\",\n    optionsKey: \"clinicalFocusOptions\",\n    filterGroup: 2,\n  },\n  {\n    title: \"System\",\n    forKey: \"for_system\",\n    optionsKey: \"systemOptions\",\n    filterGroup: 2,\n  },\n  {\n    title: \"Basic Science Disciplines\",\n    subtitle: (optionsCount) => <small style={{fontSize: \"8pt\"}}>{optionsCount === 0 ? '(No Subscribed Content)' : \"\"}</small>,\n    forKey: \"for_basic_science_discipline\",\n    optionsKey: \"basicScienceDisciplinesOptions\",\n    filterGroup: 2,\n  },\n  {\n    title: \"Clinical Location\",\n    forKey: \"for_clinical_location\",\n    optionsKey: \"clinicalLocationOptions\",\n    filterGroup: 2,\n  },\n  {\n    title: \"Age Groups\",\n    forKey: \"for_age_groups\",\n    optionsKey: \"ageGroupsOptions\",\n    filterGroup: 2,\n  },\n  {\n    title: \"Aquifer Signature Cases\",\n    forKey: \"for_signature_case\",\n    optionsKey: \"signatureCaseOptions\",\n    shouldHide: (context) => context !== 'RC',\n    filterGroup: 2,\n  },\n]\n\nexport default class GenList extends React.Component {\n  static defaultProps = {\n    historyPersistance: false,\n    defaultItemsPerPage: 12,\n    isInfiniteScroll: false,\n    permanentFilters: [],\n    pinnedItems: []\n  };\n\n  constructor(props, context) {\n    super(props, context);\n    var defaults = {\n      currentItems: null,\n      itemsMap: {},\n      currentItemCountMsg: null,\n      itemsPerPage: props.defaultItemsPerPage,\n      pageNumber: 0,\n      gettingNewPage: false,\n      itemsLastRecieved: null,\n      searchValue: \"\",\n      loSearchValue: \"\",\n      searchTimer: null,\n      loSearchTimer: null,\n      sortValue: null,\n      sortDirection: null,\n      activeFilters: {},\n      activeGenericFilters: {},\n      selectionBasketModalOpen: false,\n      moreScrollId: Math.floor(Math.random() * 0xFFFF),\n      activeDynamicFilters: {},\n      filterOptions: fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.optionsKey, []]))\n    };\n\n    var history = this.getHistoryState();\n    var merged = assign(defaults, history);\n\n    this.state = merged;\n  }\n\n  createFilterOptions = (filterType) => {\n    let documentLookupTable = this.props.documentLookupTable\n    let arrayOptions = []\n    let uniqueCount = {}\n    Object.keys(documentLookupTable).forEach((key) => {\n      arrayOptions = arrayOptions.concat(documentLookupTable[key][filterType])\n    })\n    arrayOptions.forEach(function(i) { uniqueCount[i] = (uniqueCount[i]||0) + 1;});\n    return Object.keys(uniqueCount).map ((k) => [`${k} [${uniqueCount[k]}]`, k]).sort()\n  }\n\n  componentDidMount() {\n    this.getUpdatedList();\n\n    if (this.props.documentLookupTable){\n      this.setState({\n        filterOptions: fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.optionsKey, this.createFilterOptions(filterSetting.title)]))\n      });\n    }\n\n    if (Object.keys(this.state.activeDynamicFilters).length > 0) {\n      const allDocumentsKeys = Object.keys(this.props.documentLookupTable)\n      const scopeHash = fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.forKey, [filterSetting.title, filterSetting.optionsKey]]))\n      let newFilterOptions = {}\n\n      Object.keys(scopeHash).forEach(key => {\n        let newClonedFilter = Object.assign({}, this.state.activeDynamicFilters)\n        delete newClonedFilter[key]\n        const selectedDocuments = Object.keys(newClonedFilter).length === 0 ? allDocumentsKeys : this.collectDocuments(newClonedFilter)\n        newFilterOptions[scopeHash[key][1]] = this.computeStateFilterOptions(selectedDocuments, scopeHash[key][0])\n      })\n\n      this.setState({filterOptions: newFilterOptions})\n    }\n\n    if (this.props.isInfiniteScroll) {\n      window.addEventListener(\"scroll\", this.checkVisibilityForMore.bind(this));\n      setTimeout(this.checkVisibilityForMore.bind(this),500);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.state.timer) {\n      clearTimeout(this.state.searchTimer);\n    }\n\n    window.removeEventListener(\"scroll\", this.checkVisibilityForMore.bind(this));\n  }\n\n  // search=string\n  // page=int\n  // sort_value=string\n  // sort_order=string\n  //\n  getHistoryState = () => {\n    var state = history.state;\n    if (state === null) {\n      state = {};\n    }\n    return(pick(state, [\"searchValue\", \"loSearchValue\", \"sortValue\", \"sortDirection\", \"pageNumber\", \"activeFilters\", \"activeDynamicFilters\"]));\n  };\n\n  setHistoryState = () => {\n    var currentState = history.state;\n    var newPartial = pick(this.state, [\"searchValue\", \"loSearchValue\", \"sortValue\", \"sortDirection\", \"pageNumber\", \"activeFilters\", \"activeDynamicFilters\"]);\n    var newState = assign(currentState, newPartial);\n\n    history.replaceState(newState, document.title);\n  };\n\n  handleSearchChange = (e) => {\n    this.setState({searchValue: e.target.value,\n                   currentItems: null,\n                   gettingNewPage: false,\n                   pageNumber: 0});\n    if (this.state.searchTimer) { clearTimeout(this.state.searchTimer); }\n    this.setState({searchTimer: setTimeout(this.updateSearchWithTimer, 1000)});\n  };\n\n  handleLOSearchChange = (e) => {\n    this.setState({loSearchValue: e.target.value,\n                   currentItems: null,\n                   gettingNewPage: false,\n                   pageNumber: 0});\n    if (this.state.loSearchTimer) { clearTimeout(this.state.loSearchTimer); }\n    this.setState({loSearchTimer: setTimeout(this.updateSearchWithTimer, 1000)});\n  };\n\n  handleSearchKeyPress = (e) => {\n    if (e.key === 'Enter') {\n      e.preventDefault();\n    }\n  };\n\n  updateSearchWithTimer = () => {\n    // this.updateUSC();\n    this.getUpdatedList();\n    this.setState({timer: null});\n  };\n\n  updateSort = (newSortValue, newSortDirection) => {\n    this.setState({ sortValue: newSortValue,\n                    sortDirection: newSortDirection,\n                    currentItems: null,\n                    gettingNewPage: false,\n                    pageNumber: 0 }, this.getUpdatedList);\n    return false\n  };\n\n  handleFilterChange = (that, newKey) => {\n    return(function(newSelect){\n      let newValue = newSelect.target.value;\n\n      let currentActiveFilters = that.state.activeFilters;\n      let newActiveFilters = {};\n      for (var attr in currentActiveFilters) {\n        if (attr != newKey) {\n          newActiveFilters[attr] = currentActiveFilters[attr];\n        }\n      }\n\n      if (newValue != \"All\") {\n        newActiveFilters[newKey] = newValue;\n      }\n\n      that.setState({ activeFilters: newActiveFilters,\n                      currentItems: null,\n                      gettingNewPage: false,\n                      pageNumber: 0 }, that.getUpdatedList);\n    });\n  };\n\n  computeStateFilterOptions = (selectedDocuments, filterType) => {\n    let documentLookupTable = this.props.documentLookupTable\n    let arrayOptions = []\n    let otherOptions = []\n    let uniqueCount = {}\n    Object.keys(documentLookupTable).forEach((key) => {\n      if(selectedDocuments.includes(key)){\n        arrayOptions = arrayOptions.concat(documentLookupTable[key][filterType])\n      }\n      else{\n        otherOptions = otherOptions.concat(documentLookupTable[key][filterType])\n      }\n    })\n    arrayOptions.forEach(function(i) { uniqueCount[i] = (uniqueCount[i]||0) + 1;});\n    otherOptions.forEach(function(i) {\n      if(!arrayOptions.includes(i)) {\n        uniqueCount[i] = 0\n      }\n    })\n    return Object.keys(uniqueCount).map ((k) => [`${k} [${uniqueCount[k]}]`, k]).sort()\n  }\n\n  collectDocuments = (newActiveDynamicFilters) => {\n    let documentLookupTable = this.props.documentLookupTable\n    let scopeHash = fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.forKey, filterSetting.title]))\n\n    let documentArray = []\n    let documentCountHash = {}\n    let selectedDocuments = []\n    Object.keys(newActiveDynamicFilters).forEach((key) => {\n      Object.keys(documentLookupTable).forEach((documentId) => {\n        if(Array.isArray(documentLookupTable[documentId][scopeHash[key]])) {\n          if(Array.isArray(newActiveDynamicFilters[key])){\n            if(newActiveDynamicFilters[key].some((elem) => documentLookupTable[documentId][scopeHash[key]].includes(elem))){\n              documentArray.push(documentId)\n            }\n          }else{\n            if(documentLookupTable[documentId][scopeHash[key]].includes(newActiveDynamicFilters[key])){\n              documentArray.push(documentId)\n            }\n          }\n        }\n      })\n    })\n    documentArray.forEach(function(i) { documentCountHash[i] = (documentCountHash[i]||0) + 1;});\n    Object.keys(documentCountHash).forEach((key) => {\n      if(documentCountHash[key]==Object.keys(newActiveDynamicFilters).length){\n        selectedDocuments.push(key)\n      }\n    })\n\n    return selectedDocuments\n  }\n\n  calculateDynamicOptions = (newActiveDynamicFilters, currentFilters, newKey, newValue) => {\n    let scopeHash = fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.forKey, [filterSetting.title, filterSetting.optionsKey]]))\n\n    const selectedValueLabel = this.state.filterOptions?.[scopeHash[newKey][1]].find(z => z[1] === newValue)?.[0] || 'All'\n    const uniqueCount = parseInt(selectedValueLabel.substring(\n      selectedValueLabel.indexOf(\"[\") + 1,\n      selectedValueLabel.lastIndexOf(\"]\")\n    )) || 0;\n    let newFilterOptions = {}\n\n    if (Object.keys(currentFilters).length === 0) {\n      newFilterOptions[scopeHash[newKey][1]] = this.createFilterOptions(scopeHash[newKey][0])\n    } else {\n      const currentFilterDocuments = this.collectDocuments(currentFilters)\n      newFilterOptions[scopeHash[newKey][1]] = this.computeStateFilterOptions(currentFilterDocuments, scopeHash[newKey][0])\n    }\n\n    if (uniqueCount !== 0 || newValue==='All') {\n      const allDocumentsKeys = Object.keys(this.props.documentLookupTable)\n\n      delete scopeHash[newKey]\n      Object.keys(scopeHash).forEach(key => {\n        let newClonedFilter = Object.assign({}, newActiveDynamicFilters)\n        delete newClonedFilter[key]\n        const selectedDocuments = Object.keys(newClonedFilter).length === 0 ? allDocumentsKeys : this.collectDocuments(newClonedFilter)\n        newFilterOptions[scopeHash[key][1]] = this.computeStateFilterOptions(selectedDocuments, scopeHash[key][0])\n      })\n    } else {\n      newFilterOptions = { ...this.state.filterOptions,...newFilterOptions}\n    }\n    this.setState({filterOptions: newFilterOptions})\n  }\n\n  handleDynamicFilterChange = (that, newKey) => {\n    return(function(newSelect){\n      let newValue\n      if(Array.isArray(newSelect)){\n        newValue = newSelect.map((item) => item.value);\n      }else{\n        newValue = newSelect?.value || \"All\";\n      }\n      let currentActiveDynamicFilters = that.state.activeDynamicFilters;\n      let selectedFilters = that.state.activeDynamicFilters;\n      if(Object.keys(selectedFilters).includes(newKey)){\n        delete selectedFilters[newKey]\n      }\n      let newActiveDynamicFilters = {};\n      for (var attr in currentActiveDynamicFilters) {\n        if (attr != newKey) {\n          newActiveDynamicFilters[attr] = currentActiveDynamicFilters[attr];\n        }\n      }\n\n      if (newValue != \"All\") {\n        newActiveDynamicFilters[newKey] = newValue;\n      }\n\n     if(Object.keys(newActiveDynamicFilters).length === 0 || (Object.values(newActiveDynamicFilters).every(v => Array.isArray(v) ? v.includes(\"All\"): v==\"All\"))){\n        that.setState({\n          filterOptions: fromPairs(FILTERS_SETTINGS.map((filterSetting) => [filterSetting.optionsKey, that.createFilterOptions(filterSetting.title)]))\n        })\n      } else {\n        if(Array.isArray(newValue)){\n          newValue.map((nv) => that.calculateDynamicOptions(newActiveDynamicFilters,selectedFilters,newKey,nv))\n        }else{\n          that.calculateDynamicOptions(newActiveDynamicFilters,selectedFilters,newKey,newValue)\n        }\n      }\n\n      that.setState({\n        activeDynamicFilters: newActiveDynamicFilters,\n        currentItems: null,\n        gettingNewPage: false,\n        pageNumber: 0 }, that.getUpdatedList\n      );\n    });\n  };\n\n  handleGenericFilterChange = (that, newKey) => {\n    return(function(newSelect){\n      let newValue = newSelect.target.value;\n\n      let currentActiveGenericFilters = that.state.activeGenericFilters;\n      let newActiveGenericFilters = {};\n      for (var attr in currentActiveGenericFilters) {\n        if (attr != newKey) {\n          newActiveGenericFilters[attr] = currentActiveGenericFilters[attr];\n        }\n      }\n\n      if (newValue != \"All\") {\n        newActiveGenericFilters[newKey] = newValue;\n      }\n\n      that.setState({ activeGenericFilters: newActiveGenericFilters,\n                      currentItems: null,\n                      gettingNewPage: false,\n                      pageNumber: 0 }, that.getUpdatedList);\n    });\n  };\n\n  moreClick = () => {\n    this.setState({ pageNumber: this.state.pageNumber + 1,\n                    gettingNewPage: true}, this.getAdditionalPage);\n  };\n\n  checkVisibilityForMore = () => {\n    const elem = document.getElementById(this.state.moreScrollId)\n\n    if (elem) {\n      if (checkVisible(elem)) {\n        this.moreClick()\n      }\n    }\n  }\n\n  dataForQuery = () => {\n    let data = {};\n\n    if (this.props.ids) {\n      data.ids = this.props.ids;\n    }\n\n    if (this.props.notIds) {\n      data.not_ids = this.props.notIds;\n    }\n\n    if (this.state.searchValue && (this.state.searchValue !== \"\")) {\n      data.search = this.state.searchValue;\n    }\n\n    if (this.state.loSearchValue && (this.state.loSearchValue !== \"\")) {\n      data.lo_search = this.state.loSearchValue;\n    }\n\n    if (this.state.sortValue) {\n      data.sort_order = (this.state.sortDirection === \"descending\") ? \"DESC\" : \"ASC\";\n      data.sort_by = this.state.sortValue;\n    }\n\n\n    if (this.state.itemsPerPage) {\n      if (this.state.currentItems === null) {\n        data.page = 0;\n        data.per_page = (this.state.pageNumber + 1) * this.state.itemsPerPage;\n      } else {\n        data.page = this.state.pageNumber;\n        data.per_page = this.state.itemsPerPage;\n      }\n    }\n\n    let filterValues = [];\n    for(var key in this.state.activeFilters) {\n      filterValues.push(this.state.activeFilters[key]);\n    }\n    if (filterValues.length > 0) {\n      data.filters = filterValues;\n    }\n\n    if (Object.keys(this.state.activeDynamicFilters).length > 0) {\n      data.dynamic_filters = JSON.stringify(this.state.activeDynamicFilters);\n    }\n\n    if (this.props.permanentFilters.length > 0) {\n      data.where = JSON.stringify(this.props.permanentFilters)\n    }\n\n    let genericFilterValues = [];\n    for(var key in this.state.activeGenericFilters) {\n      let title = key\n      let selectedOption = this.state.activeGenericFilters[title]\n      let activeGenericFilter = this.props.genericFilterOptions.find((genericFilter) =>{\n        return genericFilter['title'] === title\n      })\n\n      if (activeGenericFilter) {\n        let genericFilterWhere = activeGenericFilter['options'][selectedOption]\n\n        if (genericFilterWhere) {\n          genericFilterValues.push(genericFilterWhere)\n        }\n      }\n    }\n\n    if (genericFilterValues.length > 0) {\n      data.generic_filters = JSON.stringify(genericFilterValues);\n    }\n\n    return data;\n  };\n\n  getPage(successCallback) {\n    if(this.ongoingFetchController) {\n      this.ongoingFetchController.abort();\n    }\n\n    // (\"AbortController\" in window) gaurds againt legacy browsers that don't support AbortController\n    const controller = (\"AbortController\" in window) && new AbortController();\n    this.ongoingFetchController = controller;\n\n    const queryParams = new URLSearchParams(this.dataForQuery());\n    const url = `${full_url(this.props.itemsURL)}?${queryParams}`;\n\n    fetch(url, {\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json',\n      },\n      signal: controller.signal\n    })\n      .then(response => response.json())\n      .then((json) => successCallback.bind(this)(json))\n      .catch((error) => console.log(error));\n  };\n\n  getPageCount = (successCallback) => {\n    if (!this.props.itemCountURL) {\n      return;\n    }\n\n    $.ajax({\n      type: \"GET\",\n      url: full_url(this.props.itemCountURL),\n      dataType: 'json',\n      data: this.dataForQuery(),\n      contentType: 'application/json',\n      success: successCallback.bind(this),\n      error: function(xhr, status, error) {\n        console.log(xhr.responseText);\n        console.log(status);\n        console.log(error);\n      }\n    });\n  };\n\n  mergeDocumentItems = (newItems, itemsMap) => {\n    if (itemsMap && Array.isArray(newItems)) {\n      newItems.forEach(item => {\n        // Repeat the +replaceAll+ call multiple times to accommodate nested spans.\n        const searchStrippedTitle = this.stripSearchSpans(item.title)\n\n        const reducedItem = {\n          title:                 searchStrippedTitle,\n          url:                   item.url && item.url.toString().replace(/.json$/i, ''),\n          prerequisite_document: item.prerequisite_document,\n        };\n        itemsMap[item.id] = reducedItem\n      })\n    }\n\n    // ADD PREREQUISITE DOCUMENTS TO ITEMS MAP SO THEY CAN BE ADDED TO SELECTION BASKET\n    const prerequisiteDocuments = newItems.map(newItem => newItem.prerequisite_document).filter(x => x);\n    if (prerequisiteDocuments.length > 0) {\n      itemsMap = this.mergeDocumentItems(prerequisiteDocuments, itemsMap)\n    }\n\n    return itemsMap\n  }\n\n  stripSearchSpans(html) {\n    if (!html) { return html }\n\n    let htmlAfterOneStrip = html.replace(/<span class=\"search-hit\">(.*?)<\\/span>/, \"$1\")\n    if (htmlAfterOneStrip == html) { return html }\n\n    // Recurse\n    return this.stripSearchSpans(htmlAfterOneStrip)\n  }\n\n  getUpdatedList = () => {\n    this.getPage(function(result) {\n      if (this.props.historyPersistance) { this.setHistoryState(); }\n      this.setState({currentItems: uniqBy(result, 'id'),\n                     itemsMap: this.mergeDocumentItems(result, this.state.itemsMap),\n                     itemsLastRecieved: result?.length}, () => {\n                       setTimeout(() => {\n                         if (this.props.isInfiniteScroll) {\n                           this.checkVisibilityForMore()\n                         }\n                       }, 300)\n                     });\n    });\n    this.getPageCount(function(result) {\n      this.setState({currentItemCountMsg: result});\n    });\n  };\n\n  getAdditionalPage = () => {\n    this.getPage(function(result) {\n      // To prevent error caused when user changes filters making this.state.currentItems null before additional page is loaded\n      if (!this.state.currentItems) { return; }\n\n      if (this.props.historyPersistance) { this.setHistoryState(); }\n      const currentItems = uniqBy(concat(this.state.currentItems, result), 'id')\n      this.setState({\n          currentItems,\n          itemsMap: this.mergeDocumentItems(result, this.state.itemsMap),\n          itemsLastRecieved: result.length,\n          gettingNewPage: false\n        },\n        () => setTimeout(this.props.isInfiniteScroll ? this.checkVisibilityForMore : () => {}, 300)\n      )\n    });\n  };\n\n  moreItems = () => {\n    if (!this.state.currentItems) return null\n\n    const MoreItemsContainer = this.props.tableHeader ? 'tr' : 'div'\n    const InfiniteScrollContainer = this.props.tableHeader ? 'td' : 'div'\n\n    if (this.state.itemsLastRecieved !== null &&\n      this.state.itemsLastRecieved < this.state.itemsPerPage){\n\n      if (this.props.isInfiniteScroll) return <MoreItemsContainer />\n\n      return <MoreItemsContainer className=\"gen-list-pagination\">\n        <button className=\"gen-list-more-button disabled\">More</button>\n      </MoreItemsContainer>\n    } else if (this.state.gettingNewPage) {\n      return <MoreItemsContainer><GenLoadingSpinner/></MoreItemsContainer>\n    }\n\n    return <MoreItemsContainer className=\"gen-list-pagination\">\n        { this.props.isInfiniteScroll ? (\n          <InfiniteScrollContainer>\n            <span id={this.state.moreScrollId} className=\"more-scroll\"></span>\n          </InfiniteScrollContainer>\n        ) : (\n          <button onClick={this.moreClick} className=\"gen-list-more-button\">More</button>\n        )}\n      </MoreItemsContainer>\n  }\n\n  handleToggleSelectionBasketModalOpen = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n    this.setState({\n      selectionBasketModalOpen: !this.state.selectionBasketModalOpen\n    });\n  };\n\n  selectionBasketItem = (documentId) => {\n    const docItem = this.state.itemsMap[documentId];\n\n    const removeIdFromSelectionBasket = ({documentId}) => (e) =>{\n      this.props.removeDocumentId(documentId)\n    };\n\n    return <tr key={documentId}>\n      <td style={{paddingBottom: 0, paddingTop: '5px'}}>\n        <a href={docItem.url} target=\"_blank\">\n          {docItem.title}\n        </a>\n      </td>\n      {!this.hasAnySelectedSubservientDocuments(documentId) && (\n        <td style={{paddingBottom: 0, paddingTop: '5px'}}>\n          <button\n            className={classNames('button', 'small')}\n            onClick={removeIdFromSelectionBasket({documentId})}>\n            Remove\n          </button>\n        </td>\n      )}\n    </tr>\n  }\n\n  hasAnySelectedSubservientDocuments = (documentId) => {\n    return this.props.selectedDocuments?.some(selectedDocumentId => {\n      return this.state.itemsMap[selectedDocumentId]?.prerequisite_document?.id === documentId\n    })\n  }\n\n\n  deselectAll = () => {\n    this.props.selected.forEach(documentId => this.props.removeDocumentId(documentId))\n  }\n\n  render() {\n    let viewSelectionBasket = null\n    let itemCountBox = null\n    let searchBox = null\n    let searchBoxForLO = null\n    let filterRole = null\n    let sortOptions = null\n    let controlPanel = null\n    let roleDropdown = null\n\n    let modalHeader = null\n    if (this.props.selectedDocuments?.length == 0) {\n      modalHeader = <h5>\n        You have no selected items.\n        Click \"Close\" to continue to filter or search and add items.\n      </h5>\n    } else {\n      if (this.props.selectedDocuments) {\n        const showPrerequisiteWarning = this.props.selectedDocuments.some(documentId => this.hasAnySelectedSubservientDocuments(documentId));\n\n        modalHeader = <h5>\n          You have added the following items to create your course.\n          {showPrerequisiteWarning ? \" At least one of these is a case associated with a prerequisite case and the prerequisite case has also been added to your course.\" : \" \"}\n          You may continue to filter or search and add items.\n          Click the Create Course button when you have finalized your selections.\n        </h5>\n      }\n    }\n\n\n    let removeAllButton = null\n    if (this.props.selectedDocuments && this.props.selectedDocuments.length != 0) {\n      removeAllButton = <button style={{float: 'right'}} onClick={this.deselectAll}>Remove All</button>\n    }\n\n    let selectionBasketModal =\n      <GenModal open={this.state.selectionBasketModalOpen} >\n        <div className=\"gen-modal-panel\">\n          {modalHeader}\n          <table>\n            <tbody>\n              <tr style={{borderBottom: '1px solid #ccc'}}>\n                <td style={{width: '100%', padding: 0}} />\n                <td style={{width: '90px', padding: 0}} />\n              </tr>\n              {this.props.selectedDocuments && this.props.selectedDocuments.map(documentId => this.selectionBasketItem(documentId))}\n            </tbody>\n          </table>\n\n          {removeAllButton}\n          <div style={{textAlign: 'center'}}>\n            <button\n              onClick={this.handleToggleSelectionBasketModalOpen}>\n              Close\n            </button>\n          </div>\n        </div>\n      </GenModal>\n\n    if (this.props.selected && this.props.selected.length > 0) {\n      if (this.props.useSelectionBasket) {\n        viewSelectionBasket = <button\n          onClick={this.handleToggleSelectionBasketModalOpen}>\n          {`View Selected Items (${this.props.selected.length})`}\n        </button>\n      } else {\n        viewSelectionBasket = <span>{this.props.selected.length} selected</span>\n      }\n    }\n\n    if (this.props.search || this.props.sortOptions || this.props.filterRole) {\n      if (this.state.currentItemCountMsg) {\n        itemCountBox = <div className=\"gen-list-item-count\">\n          {this.state.currentItemCountMsg}\n        </div>\n      }\n\n      if (this.props.search) {\n        searchBox = <form className=\"gen-list-search-bar\" style={(this.props.searchByLO || this.props.coursePageUpgrade) && {float: 'right', marginRight: '20px'}} role=\"search\">\n          <input\n            type=\"search\"\n            placeholder=\"Search...\"\n            value={this.state.searchValue}\n            onChange={this.handleSearchChange}\n            onKeyPress={this.handleSearchKeyPress}\n          />\n        </form>;\n      }\n\n      if (this.props.searchByLO) {\n        searchBoxForLO = <form className=\"gen-list-search-bar\" role=\"search\">\n          <h4>Learning Objectives</h4><br/>\n          <input\n            type=\"search\"\n            placeholder=\"Search By Learning Objective...\"\n            value={this.state.loSearchValue}\n            onChange={this.handleLOSearchChange}\n            onKeyPress={this.handleSearchKeyPress}\n          />\n        </form>;\n      }\n\n      if (this.props.sortOptions) {\n        sortOptions = <GenDirectionalButtons\n                          buttons={this.props.sortOptions}\n                          selectedValue={this.state.sortValue || this.props.defaultSortValue}\n                          selectedDirection={this.state.sortDirection || this.props.defaultSortDirection}\n                          onUpdate={this.updateSort}/>;\n      }\n\n\n      controlPanel = <>\n        {this.props.searchByLO && (\n          <div className=\"gen-list-control-panel\">\n            {searchBoxForLO}\n          </div>\n        )}\n        <div className=\"gen-list-control-panel\" style={this.props.coursePageUpgrade && {boxShadow: 'none', border: 'none', paddingBottom: '23px'}}>\n          {filterRole}\n          {searchBox}\n          {sortOptions}\n          {itemCountBox}\n        </div>\n      </>\n    }\n\n    let activeFilters, activeGenericFilters\n    let filterPanel = null\n    if (this.props.filterOptions || this.props.genericFilterOptions) {\n      activeFilters = this.state.activeFilters;\n      activeGenericFilters = this.state.activeGenericFilters\n      filterPanel = <div className=\"gen-list-filter-panel\" style={this.props.coursePageUpgrade && {boxShadow: 'none', border: 'none'}}>\n        {this.props.filterOptions && this.props.filterOptions.map(function(filter){\n          let filterOut = <div key={filter.title} className=\"gen-list-filter\">\n            <h5>{filter.title}</h5>\n            <select defaultValue={activeFilters[filter.title] || \"All\"} onChange={this.handleFilterChange(this, filter.title)}>\n              <option value=\"All\">All</option>\n              {filter.options.map(function(option){\n                return (\n                  <option key={option} value={option}>\n                    {option}\n                  </option>\n                );\n              })}\n            </select>\n          </div>;\n\n            return( filterOut );\n          }, this)}\n        {this.props.genericFilterOptions && this.props.genericFilterOptions.map(function(filter){\n          let filterOut = <div key={filter.title} className=\"gen-list-filter\">\n            <h5><span className={this.props.coursePageUpgrade && \"course-page-filter-title\"}>{filter.title}</span></h5>\n            <select defaultValue={activeGenericFilters[filter.title] || \"All\"} onChange={this.handleGenericFilterChange(this, filter.title)}>\n              <option value=\"All\">All</option>\n              {Object.keys(filter.options).map(function(option){\n                if (option === 'Invited') {\n                  return(\n                    <option key={option} value={option}>\n                      Registration Pending\n                    </option>\n                  );\n                } else {\n                  return(\n                    <option key={option} value={option}>\n                      {option}\n                    </option>\n                  );\n                }\n              })}\n            </select>\n          </div>;\n\n            return( filterOut );\n          }, this)\n        }\n      </div>;\n    }\n\n    let activeDynamicFilters\n    let dynamicFilters = null\n    let isMultiSelect = !this.props.isMultiSelect && {label: \"All\", value: \"All\"}\n\n    if (this.props.documentLookupTable) {\n      activeDynamicFilters = this.state.activeDynamicFilters;\n\n      dynamicFilters = Object.entries(groupBy(FILTERS_SETTINGS, (filter) => filter.filterGroup)).map(([key, filterGroup]) => {\n        const filters = filterGroup.map(filterSettings => {\n          if (filterSettings.shouldHide && filterSettings.shouldHide(this.props.context)) { return null }\n\n          const filterOptions = this.state.filterOptions[filterSettings.optionsKey]\n          const subtitle = filterSettings.subtitle && filterSettings.subtitle(filterOptions.length)\n          const activeFilters = activeDynamicFilters[filterSettings.forKey]\n\n          return (\n            <div className=\"gen-list-filter\" style={{marginRight: \"1.6%\"}} key={filterSettings.title}>\n              <h5>{filterSettings.title} {subtitle}</h5>\n              <Select\n                isMulti={this.props.isMultiSelect}\n                placeholder=\"All\"\n                value={\n                  activeFilters && Object.keys(activeFilters).length\n                  ? [isMultiSelect, ...filterOptions.map((option) => ({ label: option[0], value: option[1] }))]\n                    .filter(option => activeFilters.includes(option.value))\n                  : isMultiSelect\n                }\n                onChange={this.handleDynamicFilterChange(this, filterSettings.forKey)}\n                options={[isMultiSelect, ...filterOptions.map((option) => ({label: option[0], value: option[1]}))]}\n                disabled={filterOptions.length===0}\n              />\n            </div>\n          )\n        })\n\n        return (\n          <div className=\"gen-list-filter-panel\" key={key}>\n            {filters}\n          </div>\n        )\n      })\n    }\n\n\n    let pinnedItems = []\n    if (this.props.pinnedItems.length > 0) {\n      pinnedItems = this.props.pinnedItems.map((item) => {\n        return(this.props.itemView(item));\n      })\n    }\n\n    let listItems\n    let tableStyle = this.props.tableStyle\n\n    if (this.state.currentItems === null) {\n      listItems = <GenLoadingSpinner/>;\n    } else if (this.state.currentItems.length === 0) {\n      listItems =\n        <div className=\"gen-list-no-items\">\n          <h1>No Items</h1>\n        </div>\n    } else {\n      let stripSearch = this.state.currentItems\n      if(typeof stripSearch!=='undefined') {\n        stripSearch.forEach(item => {\n          if(typeof item.title!=='undefined') {\n            item.title = item.title.replace(/<span class=\"search-hit\">(.*?)<\\/span>/, \"$1\")\n          }\n        })\n      }\n      listItems = map(stripSearch, (item) => this.props.itemView({...item, canRemove: !this.hasAnySelectedSubservientDocuments(item.id)}))\n      if (this.props.tableHeader) {\n        listItems =\n          <table style={tableStyle}>\n            <thead>\n              {this.props.tableHeader}\n            </thead>\n            <tbody>\n              {listItems}\n            </tbody>\n            <tfoot>\n              {this.moreItems()}\n            </tfoot>\n          </table>\n      } else {\n        listItems = <div className=\"gen-list-items\">{listItems}{this.moreItems()}</div>;\n      }\n    }\n\n    let otherPages = <div className=\"gen-list\">\n                      {filterPanel}\n                      {dynamicFilters}\n                      {this.props.selectPanel && this.props.selectPanel(viewSelectionBasket)}\n                      {controlPanel}\n                      {pinnedItems}\n                      {listItems}\n                      {selectionBasketModal}\n                    </div>\n\n    let coursepage = <div className=\"gen-list\">\n                      <div style={{display: \"inline-flex\", width: \"100%\"}}>\n                        <div style={{width: \"70%\"}}>\n                          {filterPanel}\n                        </div>\n                        <div style={{width: \"30%\"}}>\n                          {dynamicFilters}\n                          {this.props.selectPanel && this.props.selectPanel(viewSelectionBasket)}\n                          {controlPanel}\n                        </div>\n                      </div>\n                      {pinnedItems}\n                      {listItems}\n                      {selectionBasketModal}\n                    </div>\n\n    let displayDiv = this.props.coursePageUpgrade ? coursepage : otherPages\n\n    return(\n      <div>\n        {displayDiv}\n      </div>\n    );\n  }\n}\n","export function checkVisible(elm) {\n  if (!elm) return true\n  let rect = elm.getBoundingClientRect();\n  let viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n  return !(rect.bottom < 0 || rect.top - viewHeight >= 0);\n}\n","import React from 'react'\n\nexport default function GenLoadingSpinner({ variant = 'big' }) {\n  return(\n    <div className={`gen-loading-spinner ${variant}`}>\n      <div className=\"gen-loading-spinner-bounce-1\" />\n      <div className=\"gen-loading-spinner-bounce-2\" />\n      <div className=\"gen-loading-spinner-bounce-3\" />\n    </div>\n  );\n}\n","import React from 'react';\n\nexport default function GenModal(props) {\n  if (props.open) {\n    return (\n      <div className=\"gen-modal\">\n        {props.children}\n      </div>\n    );\n  } else {\n    return(null);\n  }\n}\n","import * as React from 'react';\nimport ReactOnRails from 'react-on-rails';\n\nimport GenLoadingSpinner from 'Gen/LoadingSpinner/component';\n\nexport default class GenPostButton extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isLoading: false,\n    };\n  }\n\n  static defaultProps = {\n    highlighted: false,\n    disabled: false,\n    loading: false,\n    data: {},\n  };\n\n  handleSubmit = (event) => {\n    // Prevent default form submission behavior\n    event.preventDefault();\n\n    // Set loading state to true\n    this.setState({ isLoading: true });\n\n    // Submit the form after setting loading state\n    event.target.submit();\n  };\n\n  render() {\n    let classes = \"gen-button\";\n\n    if (this.props.disabled) {\n      classes += \" disabled\";\n    }\n\n    if (this.props.highlighted) {\n      classes += \" highlighted\";\n    }\n\n    if (this.props.small) {\n      classes += \" small\";\n    }\n\n    if (this.props.className) {\n      classes += \" \";\n      classes += this.props.className;\n    }\n\n    const authToken = ReactOnRails.authenticityToken();\n\n    if (this.state.isLoading || this.props.loading) {\n      return (\n        <div className={classes}>\n          <span className=\"is-loading\"><GenLoadingSpinner variant='small'/></span>\n        </div>\n      );\n    } else {\n      return (\n        <div className={classes}>\n          <form\n            action={this.props.url}\n            method=\"POST\"\n            target={this.props.openInNewTab ? \"_blank\" : \"_self\"}\n            onSubmit={this.handleSubmit}\n          >\n            {Object.keys(this.props.data).map((key) => {\n              return (\n                <input\n                  type=\"hidden\"\n                  key={key}\n                  name={key}\n                  value={JSON.stringify(this.props.data[key])}\n                />\n              );\n            })}\n            <input\n              key=\"submit\"\n              type=\"submit\"\n              value={this.props.name}\n              disabled={this.props.disabled}\n              data-confirm={this.props.confirmMessage}\n            />\n            <input\n              type=\"hidden\"\n              name=\"authenticity_token\"\n              value={authToken || \"\"}\n            />\n          </form>\n        </div>\n      );\n    }\n  }\n}\n","import React from 'react'\n\nconst StickyTable = () => {\n  const setStickyHeader = function() {\n    document.querySelectorAll(\".sticky-table\").forEach(stickyTable => {\n      let stickyRowHeights = 0\n      stickyTable.querySelectorAll(\".sticky-row\").forEach(stickyRow => {\n        stickyRow.querySelectorAll(\"th, td\").forEach(stickyCell => {\n          stickyCell.style.top = `${stickyRowHeights}px`\n        })\n\n        stickyRowHeights += stickyRow.offsetHeight\n      })\n\n      // stickyTable.querySelectorAll(\"tr\").forEach(row => {\n      //   let stickyCellWidths = 0\n      //   row.querySelectorAll(\".sticky-cell\").forEach(stickyCell => {\n      //     stickyCell.style.left = `${stickyCellWidths}px`\n      //\n      //     stickyCellWidths += stickyCell.offsetWidth\n      //   })\n      // })\n    })\n  }\n\n  setStickyHeader()\n\n  window.onresize = setStickyHeader\n}\n\nexport default StickyTable\n","import React from 'react'\n\nimport _ from 'lodash'\nimport stickyTable from 'components/StickyTable/component'\n\nimport GenLoadingSpinner from 'Gen/LoadingSpinner/component'\n\nimport {full_url} from 'helpers/url'\n\nexport default class GenSortTable extends React.Component {\n  static defaultProps = {\n    searchKeys: [],\n    searchPlaceholder: \"Search...\",\n    columnWidths: null,\n    headerView: null,\n    rowView: null,\n    rowDataGenerator: null,\n    dataURL: null,\n    data: null,\n    exportButtonURL: null,\n  };\n\n  constructor(props, context) {\n    super(props, context);\n    var defaults = {\n      searchValue: \"\",\n      sortValue: null,\n      sortDirection: null,\n      data: this.props.data,\n    };\n\n    if (this.props.data && this.props.rowDataGenerator) {\n      defaults.rowData = this.props.rowDataGenerator(this.props.data)\n    } else {\n      defaults.rowData = this.props.data\n    }\n\n    this.state = defaults\n  }\n\n  componentDidMount() {\n    if (!this.props.data) {\n      this.getUpdatedList()\n    } else {\n      stickyTable()\n    }\n    if (this.props.defaultSort){\n      this.setState({sortValue: this.props.defaultSort,\n                     sortDirection: \"ascending\"})\n    }\n  }\n\n  componentWillUnmount() {\n  }\n\n  handleSearchChange = (e) => {\n    this.setState({searchValue: e.target.value});\n  };\n\n  handleSearchKeyPress = (e) => {\n    if (e.key === 'Enter') {\n      e.preventDefault();\n    }\n  };\n\n  updateSort = (newSortValue, newSortDirection) => {\n    this.setState({ sortValue: newSortValue,\n                    sortDirection: newSortDirection });\n  };\n\n  getPage = (successCallback) => {\n    $.ajax({\n      type: \"GET\",\n      url: this.props.dataURL,\n      dataType: 'json',\n      data: {},\n      contentType: 'application/json',\n      success: successCallback.bind(this),\n      error: function(xhr, status, error) {\n        console.log(xhr.responseText);\n        console.log(status);\n        console.log(error);\n      }\n    });\n  };\n\n  getUpdatedList = () => {\n    this.getPage(function(data) {\n      let rowData = data\n      if (this.props.rowDataGenerator) {\n         rowData = this.props.rowDataGenerator(data)\n      }\n\n      this.setState({data: data, rowData: rowData}, () => {stickyTable()});\n    });\n  };\n\n  render() {\n    let data = this.props.data || this.state.data\n    let searchWidth = \"twocol\"\n    let exportWidth = \"twocol txt-rt\"\n\n    let controlPanel = null\n    if (this.props.searchKeys.length > 0 || this.props.exportButtonURL || this.props.infoText || this.props.extraButtons) {\n      let title = null\n      if (this.props.title) {\n        title = <div className=\"header-title\">\n          <h3>{this.props.title}</h3>\n        </div>\n      }\n\n      let infoText = null\n      if (this.props.infoText) {\n        infoText = <div key=\"info-text\" className=\"seventywidth txt-lft\" dangerouslySetInnerHTML={{__html:this.props.infoText}}/>\n        searchWidth = \"twentywidth\"\n        exportWidth = \"tenwidth txt-rt\"\n      }\n\n      let searchBox = null\n      if (this.props.searchKeys.length > 0) {\n        searchBox = <div key=\"search-box\" className={searchWidth}>\n          <form className=\"\" role=\"search\">\n            <input placeholder={this.props.searchPlaceholder} type=\"search\" className=\"searchform-short\" value={this.state.searchValue} onChange={this.handleSearchChange} onKeyPress={this.handleSearchKeyPress}/>\n          </form>\n        </div>\n      }\n\n      let exportButton = null\n      if (this.props.exportButtonURL) {\n        exportButton = <div key=\"export-button\" className={exportWidth}>\n          <a href={this.props.exportButtonURL} className=\"report-button\">Export</a>\n        </div>\n      }\n\n      let extraButtons = null\n      if (this.props.extraButtons) {\n        extraButtons = <div key=\"extra-buttons\" className=\"extra-buttons\">\n          {this.props.extraButtons}\n        </div>\n      }\n\n      controlPanel = <div className=\"header_controls\">\n        {title}\n        {searchBox}\n        {infoText}\n        {exportButton}\n        {extraButtons}\n        <div className=\"cleardiv\"></div>\n      </div>\n    }\n\n    let table\n    if (data === null) {\n      table = <GenLoadingSpinner/>;\n    } else {\n      let newDirection = this.state.sortDirection === 'descending' ? 'ascending' : 'descending'\n\n      let columnGroup = null\n      if (this.props.columnWidths) {\n        let calculatedWidths = this.props.columnWidths(this.state)\n        columnGroup = <colgroup key=\"colgroup\">\n          {calculatedWidths.map((width, i)=> {return <col key={width+'-'+i}style={{width: width + 'px'}}></col>})}\n        </colgroup>\n      }\n\n      let header = this.props.headerView(this.state, this.updateSort.bind(this))\n      let rowData = this.state.rowData\n\n      if (this.props.searchKeys.length > 0 && this.state.searchValue && this.state.searchValue != \"\") {\n        let lowerCaseSearchValue = this.state.searchValue.toLowerCase()\n        let words = lowerCaseSearchValue.split(\" \").filter((word) => word != \"\")\n\n        rowData = rowData.filter((rowDatum) => {\n          return words.reduce((acc, word) => {\n            return acc && (this.props.searchKeys.map((searchKey) => {\n              return rowDatum[searchKey].toLowerCase().indexOf(word) >= 0\n            }).reduce((res, item) => {\n              return res || item\n            }))\n          }, true)\n        })\n      }\n\n      if (this.state.sortValue &&  this.state.sortDirection) {\n        rowData = rowData.sort((a, b) => {\n          let compare\n          if (this.state.sortValue == \"progress\") {\n            if (a[\"progress\"][\"percent_complete\"] > b[\"progress\"].percent_complete) {\n              compare = 1\n            }\n            else if (a[\"progress\"][\"percent_complete\"] < b[\"progress\"].percent_complete){\n              compare = -1\n            }\n            else {\n              compare = 0\n            }\n          }\n          else if (this.state.sortValue == \"percentages\") {\n            if (a[\"percentages\"].reduce((prev,next) => prev + next,0) > b[\"percentages\"].reduce((prev,next) => prev + next,0)) {\n              compare = 1\n            }\n            else if (a[\"percentages\"].reduce((prev,next) => prev + next,0) < b[\"percentages\"].reduce((prev,next) => prev + next,0)) {\n              compare = -1\n            }\n            else {\n              compare = 0\n            }\n          }\n          else {\n            if (typeof a[this.state.sortValue] !== typeof b[this.state.sortValue]) {\n              if (a[this.state.sortValue] === null) {\n                compare = 1\n              } else if (b[this.state.sortValue] === null) {\n                compare = -1\n              } else {\n                if (typeof a[this.state.sortValue] === typeof b[this.state.sortValue]) {\n                  compare = 0\n                } else if (typeof a[this.state.sortValue] < typeof b[this.state.sortValue]) {\n                  compare = -1\n                } else {\n                  compare = 1\n                }\n              }\n            } else {\n              switch (typeof a[this.state.sortValue]) {\n                case \"string\":\n                  compare = a[this.state.sortValue].localeCompare(b[this.state.sortValue])\n                  break;\n                case \"number\":\n                  compare = a[this.state.sortValue] - b[this.state.sortValue]\n                default:\n                if (a[this.state.sortValue] === b[this.state.sortValue]) {\n                  compare = 0\n                } else if (a[this.state.sortValue] < b[this.state.sortValue]) {\n                  compare = -1\n                } else {\n                  compare = 1\n                }\n              }\n            }\n          }\n\n          if (this.state.sortDirection === 'ascending') {\n            compare = compare * -1\n          }\n\n          return compare\n        })\n      }\n\n\n      let rows = rowData.map((rowDatum) => this.props.rowView(rowDatum))\n\n      table = <div className=\"gen-sort-table data_table_wrapper\">\n        <div className=\"table_content sticky-table\">\n          <table>\n            {columnGroup}\n            <thead>\n              {header}\n            </thead>\n            <tbody>\n              {\n                (rows.length < 1 && this.props.noRowsMessage) ?\n                <tr>\n                  <td colSpan=\"100%\">{this.props.noRowsMessage}</td>\n                </tr>\n                :\n                rows\n              }\n            </tbody>\n          </table>\n        </div>\n      </div>\n    }\n\n    return(\n      <div className=\"report-panel\">\n        {controlPanel}\n        {table}\n      </div>\n    );\n  }\n}\n","import React from 'react';\n\nimport GenButton from 'Gen/Button/component'\n\nexport default function GenToggleBar(props) {\n  let toggleButtons = props.buttons.map((button) => {\n    return(\n      <GenButton\n        {...button}\n        disabled={props.disabled || button.disabled}\n      />\n    )\n  })\n\n  return(\n    <div className=\"gen-toggle-bar\">\n      {toggleButtons}\n    </div>\n  )\n\n}\n\nGenToggleBar.defaultProps = {\n  disabled: false\n}\n","import React from 'react';\n\nimport GenToggleBar from 'Gen/ToggleBar/component'\n\nexport default function GenToggleView(props){\n  let buttons = props.views.map(function(viewObj){\n    return({\n      ...viewObj,\n      highlighted: viewObj.key === props.activeKey\n    })\n  })\n  let toggleControls = (<GenToggleBar buttons={buttons} value={props.activeViewIndex}/>);\n\n  let view = props.views.find((viewObj) => viewObj.key === props.activeKey)\n  if (view) {\n    view = view.view\n  }\n\n  return(\n    <div className=\"gen-toggle-views\">\n      <div className=\"gen-toogle-views-controls\">\n        {toggleControls}\n      </div>\n      <div className=\"gen-toogle-views-view\">\n        {view}\n      </div>\n    </div>\n  );\n}\n","import React from 'react'\n\nexport default function IntegrationsTags(props) {\n  let finalDiagnosesInfo = (props.final_diagnoses && props.final_diagnoses.length!==0) ?\n    <div>\n      <hr/>\n      Final Diagnosis: {props.final_diagnoses.map((final_diagnosis) => {\n      return <span key={final_diagnosis} className=\"final-diagnosis\">{final_diagnosis}</span>\n    })}\n    </div> : \"\"\n\n  let clinicalExcellenceInfo = (props.clinical_excellence && props.clinical_excellence.length!==0) ?\n    <div>\n      <hr/>\n      Clinical Excellence Curricular Thread: {props.clinical_excellence.map((obj) => {\n      return <span key={obj} className=\"clinical-excellence\">{obj}</span>\n    })}\n    </div> : \"\"\n\n  let basicScienceDisciplineInfo = (props.basic_science_disciplines && props.basic_science_disciplines.length!==0) ?\n    <div>\n      <hr/>\n      Basic Science Curricular Thread: {props.basic_science_disciplines.map((obj) => {\n      return <span key={obj} className=\"basic_science_discipline\">{obj}</span>\n    })}\n    </div> : \"\"\n\n  return <>\n    {finalDiagnosesInfo}\n    {clinicalExcellenceInfo}\n    {basicScienceDisciplineInfo}<br/>\n    </>\n}","import * as React from \"react\";\nimport { batch } from \"react-redux\";\n\nimport { findNodeLineageByUid } from \"../../../helpers/Doc/Functions/base\";\nimport { scrollToLineage } from \"../../../helpers/Doc/scrollTo\";\nimport { findAllSelectionsByText } from \"../../../helpers/Doc/find\";\nimport { newChangeTextAndNodesChange } from \"../../../helpers/Doc/changes\";\nimport { FIND_AND_REPLACE } from \"../../../helpers/Doc/menu\";\nimport { full_url } from \"../../../helpers/url\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\ninterface DocEditBarFindAndReplaceControlsProps {\n  userContext: UserContext;\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  mergedData: MergedData;\n};\n\nexport default function DocEditBarFindAndReplaceControls(props: DocEditBarFindAndReplaceControlsProps) {\n  const {\n    userContext,\n    editingContext,\n    editingContextExtra,\n    mergedData,\n  } = props;\n\n  const currentMenu = editingContextExtra.currentMenu;\n  if (currentMenu?.menu !== \"FIND_AND_REPLACE\") { return }\n\n  const findScope = currentMenu.findScope || \"document\"\n  const findText = editingContextExtra.findText || \"\";\n  const replaceText = editingContextExtra.replaceText || \"\";\n  const isFindButtonDisabled = findText.length < 3 || (currentMenu.findMatches?.length === 0);\n  const isReplaceButtonDisabled = !currentMenu.findMatches || currentMenu.findMatches.length === 0;\n\n  const handleFindScopeChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n    editingContext.setCurrentMenu(FIND_AND_REPLACE, {findScope: event.target.value});\n  }\n\n  const handleFind = () => {\n    switch(findScope){\n      case \"global\" :\n        fetch(full_url(`/versions/global_search.csv?search_text=${encodeURIComponent(findText)}`))\n        .then(response => {\n          if (response.ok) {\n            return response.text();\n          } else {\n            throw new Error('Error');\n          }\n        })\n        .then(data => {\n          const globalSearchResultCount = data.match(/(?:\"(?:[^\"]|\"\")*\"|[^,\\n]*)(?:,(?:\"(?:[^\"]|\"\")*\"|[^,\\n]*))*\\n/g).length - 1;\n          if (globalSearchResultCount > 0) {\n            const csv = data;\n            const csvFile = new Blob([csv], { type: 'text/csv' });\n            const downloadLink = document.createElement(\"a\");\n            downloadLink.download = \"Search Result.csv\";\n            downloadLink.href = window.URL.createObjectURL(csvFile);\n            downloadLink.style.display = \"none\";\n            document.body.appendChild(downloadLink);\n            downloadLink.click();\n            alert(\"Check exported search result\");\n          }\n          editingContext.setCurrentMenu(FIND_AND_REPLACE, { findScope: \"global\", resultCount: globalSearchResultCount });\n        })\n        .catch(error => {\n          alert(\"Error\");\n          console.log(error);\n        });\n        break;\n\n      case \"document\" :\n        const newFindMatches = !currentMenu.findMatches\n          ? findAllSelectionsByText(mergedData, findText)\n          : currentMenu.findMatches.slice(1).concat([currentMenu.findMatches[0]]);\n\n        if (newFindMatches.length > 0) {\n          const firstMatch = newFindMatches[0];\n          editingContext.setCurrentDocSelection(firstMatch);\n\n          const lineage = findNodeLineageByUid(mergedData, firstMatch.start.uid);\n          if (lineage) {\n            scrollToLineage(lineage, userContext.addState);\n          }\n        } else {\n          alert(\"No matches found\");\n        }\n        editingContext.setCurrentMenu(FIND_AND_REPLACE, {findMatches: newFindMatches});\n    }\n  }\n\n  return (\n    <div className=\"edit-bar-control-bar doc-edit-bar-find-and-replace-controls\">\n      <GenButton\n        name={<i className=\"fa fa-times\"></i>}\n        onClick={() => editingContext.closeCurrentMenu()}\n        small\n      />\n      <div className=\"edit-bar-control-bar-divider\"></div>\n      <select onChange={handleFindScopeChange.bind(this)} style={{marginTop: \"20px\",height: \"35px\"}} value={findScope}>\n        <option value=\"\">Find within...</option>\n        <option value={\"document\"}>This document</option>\n        <option value={\"global\"}>All courses</option>\n      </select>\n      <input\n        type=\"text\"\n        className=\"find-and-replace-input\"\n        value={findText}\n        onChange={(e) => {\n          batch(() => {\n            editingContextExtra.setFindText(e.target.value);\n            if (currentMenu.findMatches) {\n              editingContext.setCurrentMenu(FIND_AND_REPLACE);\n            }\n          });\n        }}\n      />\n      <GenButton\n        name=\"Find\"\n        small\n        disabled={isFindButtonDisabled}\n        onClick={handleFind}\n      />\n      {\n        findScope===\"document\" ?\n          <div>{currentMenu.findMatches && <p style={{margin: \"10px\"}}>{currentMenu.findMatches.length > 0 ? `${currentMenu.findMatches.length} Found` : \"None Found\"}</p>}</div> :\n          <div>{currentMenu.resultCount!=undefined && <p style={{margin: \"10px\"}}>{currentMenu.resultCount > 0 ? `${currentMenu.resultCount} Found` : \"None Found\"}</p>}</div>\n      }\n      <div className=\"edit-bar-control-bar-divider\"></div>\n      {findScope===\"document\" && <>\n        <input\n          type=\"text\"\n          className=\"find-and-replace-input\"\n          value={replaceText}\n          onChange={(e) => editingContextExtra.setReplaceText(e.target.value)}\n        />\n        <GenButton\n          name=\"Replace\"\n          small\n          disabled={isReplaceButtonDisabled}\n          onClick={() => {\n            const toReplaceSelection = currentMenu.findMatches[0];\n\n            const replaceStyledText = {\n              text: replaceText,\n              styleRanges: []\n            }\n\n            editingContext.addChange(newChangeTextAndNodesChange(toReplaceSelection, replaceStyledText));\n\n            const newFindMatches = currentMenu.findMatches.slice(1);\n\n            if (newFindMatches.length > 0) {\n              const firstMatch = newFindMatches[0];\n              editingContext.setCurrentDocSelection(firstMatch);\n\n              const lineage = findNodeLineageByUid(mergedData, firstMatch.start.uid);\n              if (lineage) {scrollToLineage(lineage, userContext.addState);}\n            } else {\n              alert(\"No more matches\");\n            }\n\n            editingContext.setCurrentMenu(FIND_AND_REPLACE, {findMatches: newFindMatches});\n          }}\n        />\n        <GenButton\n          name=\"Replace All\"\n          small\n          disabled={isReplaceButtonDisabled}\n          onClick={() => {\n            const allMatches = currentMenu.findMatches;\n\n            const replaceStyledText = {\n              text: replaceText,\n              styleRanges: []\n            }\n\n            editingContext.addChanges(allMatches.map((toReplaceSelection) => newChangeTextAndNodesChange(toReplaceSelection, replaceStyledText)));\n\n            alert(\"Replaced all.\");\n\n            editingContext.setCurrentMenu(FIND_AND_REPLACE, { findMatches: [] });\n          }}\n        />\n      </>}\n    </div>\n  );\n}\n","import { escapeRegExp } from \"lodash\";\n\nimport {\n  nodeInlineContentKeys,\n  docReduceBlockNodes\n} from \"./Functions/base\";\n\nexport function findAllSelectionsByText(baseNode: DocBlockNode<InlineNode>, findText: string) {\n  const findRegExp = new RegExp(escapeRegExp(findText), \"ig\");\n\n  return (docReduceBlockNodes(baseNode, (accum, node) => {\n    nodeInlineContentKeys(node).forEach((inlineContentKey) => {\n      const findRegExp = new RegExp(escapeRegExp(findText), \"ig\");\n\n      let regResult;\n      while ((regResult = findRegExp.exec(node[inlineContentKey].text)) !== null) {\n        accum = accum.concat([{\n          start: {\n            uid: node.uid,\n            contentKey: inlineContentKey,\n            index: regResult.index,\n          },\n          end: {\n            uid: node.uid,\n            contentKey: inlineContentKey,\n            index: regResult.index + findText.length,\n          },\n        }]);\n      }\n    });\n\n    return (accum);\n  }, []));\n}\n","import * as React from \"react\";\n\nimport { ChromePicker, ColorResult } from 'react-color'\n\nimport { newAddStyleChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\nimport {\n  TEXT_COLOR_PICKER,\n} from \"../../../../helpers/Doc/menu\"\n\ninterface DocEditHeaderColorPickerProps {\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n\n};\n\nexport default function DocEditHeaderColorPicker(props: DocEditHeaderColorPickerProps) {\n  const {\n    editingContext,\n    editingContextExtra,\n  } = props;\n\n  const currentDocSelection = editingContextExtra.currentDocSelection\n\n  const isColorPickerOpen = editingContextExtra.currentMenu?.menu === TEXT_COLOR_PICKER;\n  const currentColor = (editingContextExtra?.activeStylesFromChanges?.color as StyleRangeColor)?.args?.hexCode || \"#333333\";\n\n  const [newColor, setNewColor] = React.useState<string>();\n\n  React.useEffect(() => {\n    if (newColor) {\n      setNewColor(undefined);\n    }\n  }, [currentDocSelection]);\n\n  const selectedColor = newColor || currentColor;\n\n  const handleChange = (color: ColorResult) => {\n    setNewColor(color.hex);\n  }\n\n  const handleSave = () => {\n    editingContext.addChange(\n      newAddStyleChange(\n        currentDocSelection,\n        \"color\",\n        {hexCode: selectedColor}\n      ),\n      currentDocSelection.variantId\n    );\n\n    editingContext.closeCurrentMenu();\n  }\n\n  const handleCancel = () => {\n    editingContext.closeCurrentMenu();\n  }\n\n  let colorPicker;\n  if (isColorPickerOpen) {\n    colorPicker = (\n      <div className=\"doc-edit-text-color-input-box\" onClick={(e) => {e.stopPropagation();}}>\n        <ChromePicker\n          color={ selectedColor }\n          onChange={ handleChange }\n        />\n        <div className=\"text-color-input-buttons\">\n          <GenButton\n            name=\"Select\"\n            highlighted\n            small\n            onClick={handleSave}\n          />\n          <GenButton\n            name=\"Cancel\"\n            highlighted\n            small\n            onClick={handleCancel}\n          />\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      key=\"color-style\"\n      style={{\n        backgroundColor: selectedColor,\n        width: \"25px\",\n        height: \"25px\",\n        border: \"solid 2px white\",\n        position: \"relative\"\n      }}\n      onClick={() => {\n        if (editingContextExtra.currentMenu?.menu !== TEXT_COLOR_PICKER) {\n          editingContext.setCurrentMenu(TEXT_COLOR_PICKER);\n        } else {\n          editingContext.closeCurrentMenu();\n        }\n      }}\n    >\n      {colorPicker}\n    </div>\n  )\n}\n","import * as React from \"react\";\n\nimport { newDeleteStyleChange, newAddStyleChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\ninterface DocEditHeaderLinkInputProps {\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n};\n\ninterface DocEditHeaderLinkInputState {\n  link: string;\n};\n\nexport default class DocEditHeaderLinkInput extends React.Component<DocEditHeaderLinkInputProps, DocEditHeaderLinkInputState> {\n  constructor(props: DocEditHeaderLinkInputProps) {\n    super(props);\n    this.state = {\n      link: (props.editingContextExtra?.activeStylesFromChanges?.link as StyleRangeLink)?.args?.url || \"\",\n    };\n  }\n\n  handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n    this.setState({link: e.target.value});\n  }\n\n  render() {\n    const {\n      editingContext,\n      editingContextExtra,\n    } = this.props;\n\n    return (\n      <div className=\"doc-edit-link-input\">\n        <div className=\"doc-edit-link-input-box\">\n          <input\n            key=\"link-input-input\"\n            className=\"link-input\"\n            type=\"text\"\n            value={this.state.link}\n            onChange={this.handleChange.bind(this)}\n            placeholder=\"http://www.example.com\"\n            autoFocus\n          />\n          <div className=\"link-buttons\">\n            <div className=\"link-buttons-left\">\n              <GenButton\n                className=\"unlink-button\"\n                name=\"Unlink\"\n                highlighted\n                small\n                onClick={() => {\n                  const currentDocSelection = editingContextExtra.currentDocSelection\n\n                  editingContext.addChange(\n                    newDeleteStyleChange(\n                      currentDocSelection,\n                      \"link\"\n                    ),\n                    currentDocSelection.variantId\n                  );\n\n                  editingContext.closeCurrentMenu();\n                }}\n              />\n            </div>\n            <div className=\"link-buttons-right\">\n              <GenButton\n                className=\"save-button\"\n                name=\"Save\"\n                highlighted\n                small\n                disabled={this.state.link.length === 0}\n                onClick={() => {\n                  let link = this.state.link;\n\n                  const currentDocSelection = editingContextExtra.currentDocSelection\n\n                  editingContext.addChange(\n                    newAddStyleChange(\n                      currentDocSelection,\n                      \"link\",\n                      {url: link}\n                    ),\n                    currentDocSelection.variantId\n                  );\n\n                  editingContext.closeCurrentMenu();\n                }}\n              />\n              <GenButton\n                className=\"cancel-button\"\n                name=\"Cancel\"\n                highlighted\n                small\n                onClick={() => { editingContext.closeCurrentMenu(); }}\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderBooleanInputProps {\n  contentKey: string;\n  default: boolean;\n  disableMetadataEdit: boolean;\n  editingContext: EditingContextInEditor;\n  label: string;\n  uid: string;\n  value: boolean;\n};\n\nexport default function DocEditHeaderBooleanInput(props: DocEditHeaderBooleanInputProps) {\n  const value = typeof(props.value) === \"boolean\" ? props.value : props.default || false;\n\n  return (\n    <div className=\"doc-edit-header-input doc-edit-header-boolean-input\">\n      <label htmlFor={props.label}>{props.label}</label>\n      <input type=\"checkbox\" name={props.label} checked={value} disabled={props.disableMetadataEdit} onChange={() => {\n        props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, !value));\n      }} />\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { filter } from \"lodash\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\ninterface DocEnumTagsInputProps {\n  contentKey: string;\n  default: Array<string>;\n  disableMetadataEdit: boolean;\n  editingContext: EditingContextInEditor;\n  label: string;\n  options: Array<string>;\n  tags: Array<string>;\n  uid: string;\n};\n\ninterface DocEnumTagsInputState {\n  editWindowOpen: boolean;\n};\n\nexport default class DocEnumTagsInput extends React.Component<DocEnumTagsInputProps, DocEnumTagsInputState>  {\n  constructor(props: DocEnumTagsInputProps) {\n    super(props);\n    this.state = {\n      editWindowOpen: false,\n    };\n  }\n\n  toggleEditWindow() {\n    if (!this.props.disableMetadataEdit) {\n      this.setState({editWindowOpen: !this.state.editWindowOpen});\n    }\n  }\n\n  render() {\n    const value = this.props.tags || this.props.default || [];\n\n    let editWindow = null;\n    if (this.state.editWindowOpen) {\n      const options = this.props.options.map((optionName) => {\n        const isChecked = value.includes(optionName);\n        return (\n          <div key={optionName} className=\"doc-edit-header-enum-tags-input-option\">\n            <input type=\"checkbox\" name={optionName} checked={isChecked} onChange={() => {\n              let newValue = value;\n              if (isChecked) {\n                newValue = filter(newValue, (val) => val !== optionName);\n              } else {\n                newValue.push(optionName);\n              }\n\n              this.props.editingContext.addChange(newSetKeyValueChange(this.props.uid, this.props.contentKey, newValue));\n            }} />\n            <label htmlFor={optionName}>{optionName}</label>\n          </div>\n        );\n      });\n\n      editWindow = (\n        <div className=\"doc-edit-header-edit-window\" onClick={(e) => {e.stopPropagation();}}>\n          {options}\n          <GenButton\n            className=\"close-edit-window\"\n            name={\"Close\"}\n            highlighted\n            small\n            onClick={this.toggleEditWindow.bind(this)}\n          />\n        </div>\n      );\n    }\n\n    return (\n      <div className=\"doc-edit-header-input doc-edit-header-enum-tags-input\" onClick={this.toggleEditWindow.bind(this)}>\n        <label>{this.props.label}</label>\n        <p className=\"doc-edit-header-options-input-summary\">{value.length > 0 ? value.join(\", \") : <span className=\"input-summary-empty\">None</span>}</p>\n        {editWindow}\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderFalseOrNumberInputProps {\n  contentKey: string;\n  default: false | number;\n  disableMetadataEdit: boolean;\n  editingContext: EditingContextInEditor;\n  label: string;\n  uid: string;\n  value: false | number;\n};\n\nexport default function DocEditHeaderFalseOrNumberInput(props: DocEditHeaderFalseOrNumberInputProps) {\n  const value = typeof(props.value) === \"number\" ? props.value : props.default || false;\n\n  return (\n    <div className=\"doc-edit-header-input doc-edit-header-false-or-number-input\">\n      <label htmlFor={props.label}>{props.label}</label>\n      <input type=\"checkbox\" name={props.label} checked={value !== false} disabled={props.disableMetadataEdit} onChange={() => {\n        props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, value === false ? 1 : false));\n      }} />\n      {(value !== false) && <input type=\"text\" value={value || \"\"} onChange={(e) => {\n          let newNumber = parseInt(e.target.value);\n          if (isNaN(newNumber)) {\n            newNumber = 0;\n          }\n\n          if (newNumber < 0) {\n            newNumber = newNumber * -1;\n          }\n\n          props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, newNumber));\n        }} />\n      }\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderSelectInputProps {\n  contentKey: string;\n  default: string;\n  disableMetadataEdit: boolean;\n  editingContext: EditingContextInEditor;\n  label: string;\n  options: Array<string>;\n  uid: string;\n  value: string;\n};\n\nexport default function DocEditHeaderSelectInput(props: DocEditHeaderSelectInputProps) {\n  const value = props.value || props.default || props.options[0];\n\n  const options = props.options.map((optionName) => {\n    return <option key={optionName} value={optionName}>{optionName}</option>;\n  });\n\n  return (\n    <div className=\"doc-edit-header-input doc-edit-header-select-input\">\n      <label>{props.label}</label>\n      <div className=\"doc-edit-header-select-input-summary\">\n        <select value={value} disabled={props.disableMetadataEdit} onChange={(event) => {\n          props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, event.target.value));\n        }}>\n          {options}\n        </select>\n      </div>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderTextInputProps {\n  beforeSaveFunction: (newValue: string) => string;\n  contentKey: string;\n  default: string;\n  disableMetadataEdit: boolean;\n  editingContext: EditingContextInEditor;\n  label: string;\n  uid: string;\n  value: string;\n};\n\ninterface DocEditHeaderTextInputState {\n  inputValue?: string;\n};\n\nexport default class DocEditHeaderTextInput extends React.Component<DocEditHeaderTextInputProps, DocEditHeaderTextInputState> {\n  constructor(props: DocEditHeaderTextInputProps) {\n    super(props);\n    this.state = {};\n  }\n\n  componentWillUnmount() {\n    this.handleBlur();\n  }\n\n  handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n    this.setState({inputValue: e.target.value});\n  }\n\n  handleBlur() {\n    if (this.state.inputValue) {\n      let newValue = this.state.inputValue;\n      if (this.props.beforeSaveFunction) {\n        newValue = this.props.beforeSaveFunction(newValue);\n      }\n\n      this.props.editingContext.addChange(newSetKeyValueChange(this.props.uid, this.props.contentKey, newValue));\n\n      this.setState({inputValue: undefined});\n    }\n  }\n\n  render() {\n    let value = this.state.inputValue;\n    if (value === undefined) { value = this.props.value || this.props.default; }\n\n    return (\n      <div className=\"doc-edit-header-input doc-edit-header-text-input\">\n        <label>{this.props.label}</label>\n        <input type=\"text\" value={value} disabled={this.props.disableMetadataEdit} onChange={this.handleChange.bind(this)} onBlur={this.handleBlur.bind(this)} />\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\nimport { HotKeys } from \"react-hotkeys\";\n\nimport { filter, uniq, concat } from \"lodash\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\nimport GenButton from \"../../../Gen/Button/component\";\n\ninterface DocEditHeaderTagsInputProps {\n  contentKey: string;\n  disableMetadataEdit: boolean;\n  editingContext: EditingContextInEditor;\n  label: string;\n  tags: Array<string>;\n  uid: string;\n};\n\ninterface DocEditHeaderTagsInputState {\n  inputTag: string;\n  editWindowOpen: boolean;\n\n};\n\nexport default class DocEditHeaderTagsInput extends React.Component<DocEditHeaderTagsInputProps, DocEditHeaderTagsInputState> {\n  constructor(props: DocEditHeaderTagsInputProps) {\n    super(props);\n    this.state = {\n      inputTag: \"\",\n      editWindowOpen: false,\n    };\n  }\n\n  handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n    this.setState({inputTag: e.target.value});\n  }\n\n  setTags(newTags: Array<string>) {\n    this.props.editingContext.addChange(newSetKeyValueChange(this.props.uid, this.props.contentKey, newTags));\n  }\n\n  onMinusClick(toDeleteTag: string) {\n    this.setTags(filter(this.props.tags, (tag) => {return tag !== toDeleteTag;}));\n  }\n\n  onPlusClick() {\n    if (this.state.inputTag.length > 0) {\n      this.setTags(uniq(concat(this.props.tags, this.state.inputTag)));\n      this.setState({inputTag: \"\"});\n    }\n  }\n\n  toggleEditWindow() {\n    if (!this.props.disableMetadataEdit) {\n      this.setState({editWindowOpen: !this.state.editWindowOpen});\n    }\n  }\n\n  render() {\n    let editWindow = null;\n    if (this.state.editWindowOpen) {\n      const keyHandlers = { return: (event: KeyboardEvent) => {this.onPlusClick(); return false;} };\n\n      const tags = this.props.tags.map((tag) => {\n        return (\n          <span key={tag} className=\"doc-edit-tag-wrapper\">\n            <span className=\"doc-edit-tag\">{tag}</span>\n            <i className=\"fa fa-trash\" onClick={(e) => {this.onMinusClick(tag);}}></i>\n          </span>\n        );\n      });\n\n      const HotKeysAnyType: any = HotKeys; // TODO: Remove when able to import type from HotKeys\n      editWindow = (\n        <div className=\"doc-edit-header-edit-window\" onClick={(e) => {e.stopPropagation();}}>\n          {tags}\n          <HotKeysAnyType handlers={keyHandlers}>\n            <div className=\"doc-edit-tag-wrapper\">\n              <input\n                className=\"doc-edit-tag-wrapper\"\n                type=\"text\"\n                value={this.state.inputTag}\n                onChange={this.handleChange.bind(this)}\n                placeholder=\"Add Class...\"\n              />\n              <GenButton\n                className=\"tag-input-add-button\"\n                name={<i className=\"fa fa-plus\"></i>}\n                highlighted\n                small\n                disabled={this.state.inputTag.length === 0}\n                onClick={this.onPlusClick.bind(this)}\n              />\n            </div>\n          </HotKeysAnyType>\n          <GenButton\n            className=\"close-edit-window\"\n            name={\"Close\"}\n            highlighted\n            small\n            onClick={this.toggleEditWindow.bind(this)}\n          />\n        </div>\n      );\n    }\n\n    return (\n      <div className=\"doc-edit-header-input doc-edit-header-tags-input\" onClick={this.toggleEditWindow.bind(this)}>\n        <label>{this.props.label}</label>\n        <p className=\"doc-edit-header-tags-input-summary\">{this.props.tags.length > 0 ? this.props.tags.join(\", \") : <span className=\"input-summary-empty\">None</span>}</p>\n        {editWindow}\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\nimport Select from 'react-select';\n\ninterface DocEditHeaderMultiSelectInputProps {\n  contentKey: string;\n  default: Array<string>;\n  disableMetadataEdit: boolean;\n  editingContext: EditingContextInEditor;\n  label: string;\n  options: Array<string>;\n  tags: Array<string>;\n  uid: string;\n};\n\nexport default function DocEditHeaderMultiSelectInput(props: DocEditHeaderMultiSelectInputProps) {\n  const values = props.tags || props.default || [];\n\n  const options = props.options.map((optionName) => {\n    return {value: optionName, label: optionName};\n  })\n\n  return (\n    <div className=\"doc-edit-header-input doc-edit-header-select-input\">\n      <label style={{fontSize: '14px'}}>{props.label}</label>\n      <div style={{width: '350px'}}>\n        <Select\n          isMulti\n          options={options}\n          defaultValue={options.filter(option=> values.includes(option[\"value\"]))}\n          isDisabled={props.disableMetadataEdit}\n          onChange={(onChangeValue)=>{\n            let newValue: Array<string> = []\n            if(onChangeValue) {\n              newValue = onChangeValue.map((obj) => obj[\"value\"])\n            }\n            props.editingContext.addChange(newSetKeyValueChange(props.uid, props.contentKey, newValue));\n          }}\n        />\n      </div>\n      <br/>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { toInteger } from \"lodash\";\n\nimport { getSubType } from \"../../../../helpers/Doc/Define/base\";\n\nimport DocEditHeaderBooleanInput from \"./BooleanInput\";\nimport DocEditHeaderEnumTagsInput from \"./EnumTagsInput\";\nimport DocEditHeaderFalseOrNumberInput from \"./FalseOrNumberInput\";\nimport DocEditHeaderSelectInput from \"./SelectInput\";\nimport DocEditHeaderTextInput from \"./TextInput\";\nimport DocEditHeaderTagsInput from \"./TagsInput\";\nimport DocEditHeaderMultiSelectInput from \"./MultiSelectInput\";\n\ninterface DocEditHeaderMetadataInputsProps {\n  disableMetadataEdit?: boolean;\n  editingContext: EditingContextInEditor;\n  node: DocBlockNode<InlineNode>;\n  onlyKeys?: Array<string>;\n  userContext: UserContext;\n};\n\nfunction DocEditHeaderMetadataInputs(props: DocEditHeaderMetadataInputsProps) {\n  const {\n    disableMetadataEdit,\n    editingContext,\n    userContext,\n    node,\n    onlyKeys,\n  } = props;\n\n  const nodeType = getSubType(node);\n\n  const nodeDefinition = editingContext.nodeDefinitions[nodeType].deref(editingContext.nodeDefinitions);\n\n  let editWithInputs = null;\n  if (nodeDefinition) {\n    let editWithList = nodeDefinition.generateEditWithList();\n\n    if (onlyKeys) {\n      editWithList = editWithList.filter((editWithData) => onlyKeys.includes(editWithData[0]));\n    }\n\n    if (!userContext.permissions.editNodeInvisible) {\n      editWithList = editWithList.filter((editWithData) => \"invisible\" !== editWithData[0]);\n    }\n\n    editWithInputs = editWithList.map((editWithData) => {\n      const editKey = editWithData[0];\n      const editWithName = editWithData[1];\n      const editWithArgs = editWithData[2];\n      const displayName = editWithData[3]\n\n      const inAllEditHeaderInputs = {\n        key: editKey,\n        uid: node.uid,\n        label: displayName || editKey,\n        contentKey: editKey,\n        ...editWithArgs,\n        editingContext: editingContext,\n        disableMetadataEdit: disableMetadataEdit,\n      };\n\n      switch (editWithName) {\n        case \"booleanInput\":\n          return (\n            <DocEditHeaderBooleanInput\n              {...inAllEditHeaderInputs}\n              value={node[editKey]}\n            />\n          );\n        case \"falseOrNumberInput\":\n          return (\n            <DocEditHeaderFalseOrNumberInput\n              {...inAllEditHeaderInputs}\n              value={node[editKey]}\n            />\n          );\n        case \"textInput\":\n          return (\n            <DocEditHeaderTextInput\n              {...inAllEditHeaderInputs}\n              value={node[editKey]}\n            />\n          );\n        case \"selectInput\":\n          return (\n            <DocEditHeaderSelectInput\n              {...inAllEditHeaderInputs}\n              value={node[editKey]}\n            />\n          );\n        case \"integerTextInput\":\n          return (\n            <DocEditHeaderTextInput\n              {...inAllEditHeaderInputs}\n              value={node[editKey]}\n              beforeSaveFunction={(a) => toInteger(a)}\n            />\n          );\n        case \"tagsInput\":\n          return (\n            <DocEditHeaderTagsInput\n              {...inAllEditHeaderInputs}\n              tags={node[editKey] || []}\n            />\n          );\n        case \"enumTagsInput\":\n          return (\n            <DocEditHeaderEnumTagsInput\n              {...inAllEditHeaderInputs}\n              tags={node[editKey] || []}\n            />\n          );\n        case \"multiSelectInput\":\n          return (\n            <DocEditHeaderMultiSelectInput\n              {...inAllEditHeaderInputs}\n              tags={node[editKey] || []}\n            />\n          );\n        default:\n          return null;\n      }\n    });\n  }\n\n  return editWithInputs;\n}\n\nexport default React.memo(DocEditHeaderMetadataInputs);\n","import * as React from \"react\";\n\nimport { takeRightWhile } from \"lodash\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport DocEditHeaderMetadataInputs from \"./EditHeader/MetadataInputs\";\n\nimport { findNodePathByUid } from \"../../../helpers/Doc/Functions/base\";\nimport {\n  newDeleteNodeChange,\n  newMoveNodeUpChange,\n  newMoveNodeDownChange,\n} from \"../../../helpers/Doc/changes\";\n\ninterface DocEditHeaderProps {\n  editingContext: EditingContext;\n  editingContextExtra: EditingContextExtra;\n  userContext: UserContext;\n};\n\nexport default function DocEditHeader(props: DocEditHeaderProps) {\n  const {\n    editingContext,\n    editingContextExtra,\n    userContext,\n  } = props;\n\n  if (!editingContext.isEditing || !editingContextExtra.currentlyEditingNodeLineage) { return null; }\n  if (!userContext.permissions.editContentNodes) { return null; }\n  const nodeLineage = editingContextExtra.currentlyEditingNodeLineage.filter((node, index) => {\n    // Check if the current node is of type 'paragraph'\n    if (node.type === 'paragraph') {\n      // Check if the previous node is of type 'listItem'\n      const prevNode = editingContextExtra.currentlyEditingNodeLineage[index - 1];\n      if (prevNode && prevNode.type === 'listItem') {\n        return false; // Exclude this node\n      }\n    }\n    return true; // Keep this node\n  });\n\n  if (nodeLineage.length <= 1) { return null; }\n\n  let nodesSinceLastSection: Array<[DocBlockNode<any>, number]> = takeRightWhile(nodeLineage.map((node, index) => [node, index]), ([node, index]) => node.type !== \"section\"); // TODO: REMOVE ANY\n  if (nodesSinceLastSection.length === 0) {\n    const lastElementIndex = nodeLineage.length - 1;\n    nodesSinceLastSection = [[nodeLineage[lastElementIndex], lastElementIndex]];\n  }\n\n  const toEditNodePairs = nodesSinceLastSection.filter(([node, index]) => ![\"tableRow\", \"tableColumn\", \"tableCell\"].includes(node.type));\n  const indexOfToEditNodes = toEditNodePairs.map(([node, index]) => index);\n\n  const allNodesEditHeaders = indexOfToEditNodes.map((indexOfToEditNode) => {\n    const node = nodeLineage[indexOfToEditNode];\n\n    if (node.type === \"section\" && node.level === 0 && !userContext.permissions.editPages) { return null; }\n\n    let nonRootActionButtons = null;\n    if (indexOfToEditNode > 0) {\n      const parent = nodeLineage[indexOfToEditNode - 1];\n      const parentUID = parent.uid;\n      const pathFromParent = findNodePathByUid(parent, node.uid);\n\n      const parentContentKey = pathFromParent[0];\n      const displaySiblingIndex = pathFromParent[1];\n      const displaySiblingCount = parent[parentContentKey].length;\n\n      let displaySiblingBeforeIndex = 0;\n      if (displaySiblingIndex > 0) {\n        const displaySiblingBefore = parent[parentContentKey][displaySiblingIndex - 1];\n        displaySiblingBeforeIndex = displaySiblingBefore.editIndex;\n      }\n\n      let displaySiblingAfterIndex = displaySiblingCount - 1;\n      if (displaySiblingIndex + 1 !== displaySiblingCount) {\n        const displaySiblingAfter = parent[parentContentKey][displaySiblingIndex + 1];\n        displaySiblingAfterIndex = displaySiblingAfter.editIndex;\n      }\n\n      nonRootActionButtons = [\n        <GenButton\n          key=\"up-arrow\"\n          name={<i className=\"fa fa-arrow-up\"></i>}\n          highlighted\n          small\n          disabled={displaySiblingIndex === 0 || (node.type === \"section\" && node.level === 1 && !userContext.permissions.editPages)}\n          onClick={() => {\n            editingContext.addChange(newMoveNodeUpChange(node.variantUid || node.uid));\n          }}\n        />,\n        <GenButton\n          key=\"down-arrow\"\n          name={<i className=\"fa fa-arrow-down\"></i>}\n          highlighted\n          small\n          disabled={displaySiblingIndex + 1 === displaySiblingCount || (node.type === \"section\" && node.level === 1 && !userContext.permissions.editPages)}\n          onClick={() => {\n            editingContext.addChange(newMoveNodeDownChange(node.variantUid || node.uid));\n          }}\n        />,\n        <GenButton\n          key=\"trash\"\n          name={<i className=\"fa fa-trash\"></i>}\n          highlighted\n          small\n          disabled={!userContext.permissions.deleteContentNodes || (node.type === \"section\" && node.level === 1 && !userContext.permissions.deletePages)}\n          onClick={() => {\n            editingContext.clearCurrentDocSelection();\n            editingContext.addChange(newDeleteNodeChange(node.variantUid || node.uid));\n          }}\n        />,\n      ];\n    }\n\n    const editWithInputs = (\n      <DocEditHeaderMetadataInputs\n        editingContext={editingContext}\n        userContext={userContext}\n        node={node}\n      />\n    );\n\n    let divider = null;\n    if (indexOfToEditNode !== indexOfToEditNodes[indexOfToEditNodes.length - 1]) {\n      divider = <div className=\"edit-bar-control-bar-divider\" />;\n    }\n\n    return (\n      <div key={node.uid} className=\"edit-header-one-node\">\n        <div className=\"edit-header-action-buttons\">\n          <label className=\"edit-header-class-name\">{node.type} ({node.uid})</label>\n          {nonRootActionButtons}\n        </div>\n        {editWithInputs}\n        {divider}\n      </div>\n    );\n  });\n\n  const editHeader = (\n    <div className=\"edit-header\">\n      {allNodesEditHeaders}\n    </div>\n  );\n\n  return (\n    <div className=\"edit-bar-control-bar-nodes\">\n      <div className=\"edit-bar-control-bar-divider\" />\n      {editHeader}\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport GenModal from \"../Gen/Modal/component\";\nimport GenButton from \"../Gen/Button/component\";\nimport { newSetKeyValueChange } from \"../../helpers/Doc/changes\";\n\nimport { CAUSAL_EXPLANATION_CLASSES, CORE_CONCEPT_CLASSES } from \"../../helpers/RO/content_type\";\n\ninterface ConvertToRLOModalProps {\n  handleCancel: () => void;\n  editingContextExtra: EditingContextExtra;\n  editingContext: EditingContextInEditor;\n  mappingContext: MappingContext;\n  rlo: ReusableObject;\n};\n\nexport default function ConvertToRLOModal(props: ConvertToRLOModalProps) {\n  const {\n    handleCancel,\n    editingContextExtra,\n    editingContext,\n    rlo,\n  } = props\n\n  const mappingContext = props.mappingContext as DocumentMappingContext;\n\n  const disableFields = !!rlo\n  const [name, setName] = React.useState(rlo?.name || '')\n  const [description, setDescription] = React.useState(rlo?.description || '')\n  const [learningObjectiveId, setLearningObjectiveId] = React.useState('')\n  const [nameError, setNameError] = React.useState('')\n  const [currentRO, setCurrentRO] = React.useState<DocSectionType<InlineNode> | null>(null)\n  const [errorModalOpen, setErrorModalOpen] = React.useState(false)\n  const [confirmationModalOpen, setConfirmationModalOpen] = React.useState(false)\n\n  if (editingContextExtra.currentRO && (!currentRO || currentRO != editingContextExtra.currentRO)) {\n    setCurrentRO(editingContextExtra.currentRO)\n    editingContextExtra.setCurrentRO(editingContextExtra.currentRO)\n  }\n\n  const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setName(e.target.value)\n    setNameError(null);\n  }\n\n  const handleDescriptionChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n    setDescription(e.target.value)\n  }\n\n  const handleLearingObjectiveChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n    setLearningObjectiveId(e.target.value)\n  }\n\n  const closeErrorModal = () => {\n    setErrorModalOpen(false)\n  }\n\n  const learningObjectiveReusableObjects = mappingContext.learningObjectiveReusableObjects.filter(loro => loro.reusable_object.uid === currentRO?.uid)\n\n  const handleContinue = (e: React.MouseEvent<HTMLAnchorElement>) => {\n    if (!currentRO) { return; }\n\n    const roData = {\n      name,\n      description,\n      uid: currentRO.uid,\n      learning_objective_id: parseInt(learningObjectiveId),\n    }\n\n    let loroToBeSaved: ProposedLearningObjectiveReusableObject = {\n      learning_objective_id: parseInt(learningObjectiveId),\n      reusable_object_id: (currentRO as any).roId, // TODO: Remove any\n    }\n\n    let newProposedLoros = mappingContext.proposedLearningObjectiveReusableObjects || [];\n    newProposedLoros = newProposedLoros.concat([loroToBeSaved]);\n    mappingContext.setProposedLearningObjectiveReusableObjects(newProposedLoros);\n\n    editingContext.addChange(newSetKeyValueChange(currentRO.uid, \"roData\", roData))\n    setConfirmationModalOpen(false)\n    handleCancel()\n  }\n\n  const rloClasses = rlo?.classes || editingContextExtra?.currentRO?.classes || [];\n  const shouldMapToLearningObjectives = R.isEmpty(R.intersection(rloClasses, [...CAUSAL_EXPLANATION_CLASSES, ...CORE_CONCEPT_CLASSES]))\n\n  const handleSave = (e: React.MouseEvent<HTMLAnchorElement>) => {\n    if (!name) {\n      setNameError('Reusable Content name is required');\n    } else if (shouldMapToLearningObjectives && learningObjectiveReusableObjects.length === 0 && !learningObjectiveId) {\n      setErrorModalOpen(true)\n    } else {\n      setConfirmationModalOpen(true)\n    }\n  }\n\n  return (<>\n    <GenModal open >\n      <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n        <h4>Reusable Content details</h4>\n        <div>\n          <form action=\"\">\n            {rlo && (<>\n              <p style={{whiteSpace: 'normal'}}> Source Course: {rlo.document_sets?.name} </p>\n              <p style={{whiteSpace: 'normal'}}> Source Case: {rlo.documents[0]?.title} </p>\n            </>)}\n            <div>\n              Name:\n              <input\n                type=\"text\"\n                name=\"name\"\n                disabled={disableFields}\n                placeholder=\"Enter Reusable Content Name\"\n                onChange={handleNameChange}\n                value={name}\n              />\n              <span style={{color: 'red'}}>{nameError}</span>\n            </div>\n            <div style={{display: 'grid'}}>\n              Description:\n              <textarea\n                name=\"description\"\n                disabled={disableFields}\n                placeholder=\"Enter keyword description for Reusable Content\"\n                onChange={handleDescriptionChange}\n                value={description}\n              />\n            </div>\n            {\n              shouldMapToLearningObjectives &&\n              <div style={{display: 'grid'}}>\n                Map Reusable Content to Learning Objective(s):\n                <select style={{width: '100%'}} value={learningObjectiveId} onChange={handleLearingObjectiveChange} disabled={learningObjectiveReusableObjects.length !== 0}>\n                  <option value=\"\">Select case learning objective</option>\n                  {mappingContext.learningObjectives.map((lo)=>(\n                    <option key={lo.id} value={lo.id}>{lo.name}</option>\n                  ))}\n                </select>\n              </div>\n            }\n            <div style={{display: 'grid'}}>\n              {learningObjectiveReusableObjects.length !== 0 && <>\n                <div>Reusable Content Learning Objective(s):</div>\n                <p style={{whiteSpace: 'pre-wrap'}}>{learningObjectiveReusableObjects[0].learning_objective?.name}</p>\n              </>}\n            </div>\n          </form>\n          <div className=\"gen-button-left-group\">\n            <GenButton name=\"Save\" highlighted small onClick={handleSave}/>\n            <GenButton name=\"Cancel\" highlighted small onClick={handleCancel} />\n          </div>\n        </div>\n      </div>\n    </GenModal>\n    <GenModal open={errorModalOpen} >\n      <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n        <div style={{\"textAlign\": \"center\"}}>\n          <p style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n            Please map this reusable content to a case learning objective before saving.\n          </p>\n          <div><button onClick={closeErrorModal}>OK</button></div>\n        </div>\n      </div>\n    </GenModal>\n    <GenModal open={confirmationModalOpen} >\n      <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n        <div style={{\"textAlign\": \"center\"}}>\n          <p>\n            Click <b>Continue</b> to save this Reusable Content or <b>Cancel</b> to discard\n          </p>\n          <div className=\"gen-button-left-group\" style={{position: 'relative', marginLeft: 36 + '%'}}>\n            <GenButton name=\"Continue\" highlighted small onClick={handleContinue}/>\n            <GenButton name=\"Cancel\" highlighted small onClick={handleCancel} />\n          </div>\n        </div>\n      </div>\n    </GenModal>\n  </>);\n}\n","import * as React from \"react\";\n\nconst randRGBLvl = () => {\n  return `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;\n}\n\ninterface ActiveEditorProps {\n  userContext: UserContext;\n  editor: PressenceEditor;\n  hasLock: boolean;\n  hasLockInSession: boolean;\n  lockIfFree: () => void;\n  unlockIfOwned: () => void;\n  forceLock: () => void;\n};\n\nexport default function ActiveEditor(props: ActiveEditorProps) {\n  const {\n    userContext,\n    editor,\n    hasLock,\n    hasLockInSession,\n    lockIfFree,\n    unlockIfOwned,\n    forceLock,\n  } = props;\n\n  const [color, setColor] = React.useState(randRGBLvl())\n  const [isHovering, setIsHovering] = React.useState(false)\n\n  const onClickAction = () => {\n    if (editor.id === userContext.id) {\n      if (hasLock) {\n        if (hasLockInSession) {\n          unlockIfOwned()\n        } else {\n          forceLock()\n        }\n      } else {\n        lockIfFree()\n      }\n    } else {\n      if (hasLock) {\n        forceLock()\n      }\n    }\n  }\n\n  let extraMessage;\n  if (editor.id === userContext.id && hasLock && !hasLockInSession) {\n    extraMessage = <strong>(You hold the lock in different window. Click to claim here.)</strong>\n  }\n\n  return (\n    <div className=\"locker\" onClick={onClickAction}>\n      {hasLock && (\n        <div className=\"lock-icon-wrapper\">\n          <div className={`${ isHovering ? \"unlocked\" : \"locked\"}-icon`}>\n          </div>\n        </div>\n      )}\n      <div onMouseOver={() => setIsHovering(true)} onMouseLeave={() => setIsHovering(false)} className=\"active-editor\" style={{backgroundColor: color}}>\n        <p className=\"editor-display\">{editor.display}</p>\n        {isHovering && (\n          <span className=\"editor-details\">\n            {editor.email} {extraMessage}\n          </span>\n        )}\n      </div>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport ActiveEditor from \"./ActiveEditors/ActiveEditor\";\n\nimport GenButton from \"../Gen/Button/component\";\n\ninterface ActiveEditorsProps {\n  userContext: UserContext;\n  activeEditors: Array<PressenceEditor>;\n  lockState: LockState;\n  lockIfFree: () => void;\n  unlockIfOwned: () => void;\n  forceLock: () => void;\n};\n\nexport default function ActiveEditors(props: ActiveEditorsProps) {\n  const {\n    userContext,\n    activeEditors,\n    lockState,\n    lockIfFree,\n    unlockIfOwned,\n    forceLock,\n  } = props;\n\n  const lockIsLocked = lockState.lockUserId === null;\n\n  return (\n    <div className=\"active-editors-wrapper\">\n      {activeEditors.map((editor) => (\n        <ActiveEditor\n          key={`versionEditor${editor.id}`}\n          userContext={userContext}\n          editor={editor}\n          hasLock={editor.id === lockState.lockUserId}\n          hasLockInSession={editor.id === lockState.lockUserId && userContext.sessionId === lockState.lockSessionId}\n          lockIfFree={lockIfFree}\n          unlockIfOwned={unlockIfOwned}\n          forceLock={forceLock}\n        />\n      ))}\n      { lockIsLocked && (\n        <GenButton\n          name=\"LOCK!\"\n          className=\"highlighted small\"\n          onClick={lockIfFree}\n        />\n      )}\n    </div>\n  )\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../Gen/Modal/component\";\nimport ReusableObjectList from \"../ReusableObject/List/component\";\n\nimport {\n  newAddTextNodesBeforeNodeChange,\n  newAddTextAndNodesToNodeChange,\n} from \"../../helpers/Doc/changes\";\nimport { RLO_MODAL, LIST_RLO_MODAL } from \"../../helpers/Doc/menu\";\n\ninterface ListRLOModalProps {\n  editingContextExtra: EditingContextExtra;\n  editingContext: EditingContextInEditor;\n  permissions: AqPermissions;\n};\n\nconst ListRLOModal = (props: ListRLOModalProps) => {\n  const {\n    editingContextExtra,\n    editingContext,\n    permissions\n  } = props;\n\n  const [rloModalOpen, setRloModalOpen] = React.useState(true);\n  const [rlo, setRlo] = React.useState(null)\n  const [addModalOpen, setAddModalOpen] = React.useState(false)\n  const [showRLOResponse, setShowRLOResponse] = React.useState(null);\n\n  React.useEffect(()=> {\n    fetch('/reusable_objects/show_rlo_list')\n    .then(res => res.json())\n      .then(\n        (response) => {\n          setShowRLOResponse(response)\n        },\n        (error) => {\n          console.error(error)\n        }\n      )\n  }, [])\n\n  const closeRloModal = () => {\n    setRloModalOpen(false)\n  }\n\n  const handleAddModalOpen = (rlo) => {\n    setRlo(rlo)\n    setAddModalOpen(true)\n  }\n\n  const closeAddModal = () => {\n    setRlo(null)\n    setAddModalOpen(false)\n  }\n\n  const addModalContinue = () => {\n    const currentMenu = editingContextExtra.currentMenu;\n    if (currentMenu?.menu !== LIST_RLO_MODAL) { return }\n\n    const node = {\n      ...rlo.review_variant.change_data,\n      roDocumentCount: (rlo.data.roDocumentCount || 1) + 1,\n    }\n    if (currentMenu.siblingUid) {\n      editingContext.addChange(newAddTextNodesBeforeNodeChange(currentMenu.siblingUid, null, [node]))\n    } else {\n      editingContext.addChange(newAddTextAndNodesToNodeChange(currentMenu.uid, currentMenu.contentKey, null, [node]));\n    }\n    editingContextExtra.setCurrentRO(node)\n    editingContext.setCurrentMenu(RLO_MODAL, {data: rlo, menu: RLO_MODAL})\n  }\n\n  return (\n    <>\n    <GenModal open={rloModalOpen} >\n      <div className=\"gen-modal-panel gen-modal-panel-large gen-modal-media-menu\" style={{marginTop: 90 + 'px', width: 92 + '%', marginLeft: 20 + 'px'}}>\n        <div style={{textAlign: \"end\"}}>\n          <button onClick={closeRloModal}>X</button>\n        </div>\n        {showRLOResponse ? (<ReusableObjectList\n          itemsURL={showRLOResponse.item_url}\n          permissions={permissions}\n          documentLookupTable={showRLOResponse.document_lookup_table}\n          context=\"editor\"\n          setAddModalOpen={handleAddModalOpen}\n        />) : (<div>Loading...</div>)}\n      </div>\n    </GenModal>\n\n    <GenModal open={addModalOpen} >\n      <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n        <div style={{textAlign: \"center\"}}>\n          <div style={{marginBottom: \"20px\"}}>Click <b>Continue</b> to insert this Reusable Content to your document or <b>Cancel</b> to discard.</div>\n          <button onClick={addModalContinue} style={{marginRight: \"20px\"}} >Continue</button>\n          <button onClick={closeAddModal}>Cancel</button>\n        </div>\n      </div>\n    </GenModal>\n    </>\n  );\n}\n\nexport default ListRLOModal;\n","import * as React from \"react\";\n\nimport { get } from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport DocEditHeaderColorPicker from \"./NodeGeneralControls/ColorPicker\";\nimport DocEditHeaderLinkInput from \"./NodeGeneralControls/LinkInput\";\nimport DocEditHeader from \"./EditHeader\";\nimport ConvertToRLOModal from \"../ConvertToRLOModal\";\n\nimport ActiveEditors from \"../../Channels/ActiveEditors\";\n\nimport * as selection from \"../../../helpers/Doc/selection\";\n\nimport {\n  EDIT_LINK,\n  FIND_AND_REPLACE,\n  NEW_COMMENT_THREAD,\n  RLO_MODAL,\n} from \"../../../helpers/Doc/menu\"\n\nimport { LIST_RLO_MODAL } from \"../../../helpers/Doc/menu\";\nimport ListRLOModal from \"../ListRLOModal\";\n\nimport {\n  newSetKeyValueChange,\n} from \"../../../helpers/Doc/changes\";\n\ninterface DocEditBarNodeGeneralControlsProps {\n  documentContext: DocumentContext;\n  editingContext: EditingContext;\n  editingContextExtra: EditingContextExtra;\n  mergedData: MergedData;\n  userContext: UserContext;\n  mappingContext: MappingContext;\n  projectContext: ProjectContext;\n  featureFlag: FeatureFlag\n};\n\nexport default function DocEditBarNodeGeneralControls(props: DocEditBarNodeGeneralControlsProps) {\n  const {\n    documentContext,\n    editingContext,\n    editingContextExtra,\n    mergedData,\n    userContext,\n    mappingContext,\n    projectContext,\n  } = props;\n\n  const {\n    activeEditors,\n    lockState,\n    lockIfFree,\n    unlockIfOwned,\n    forceLock,\n  } = editingContextExtra;\n\n  let activeEditorsDisplay;\n  if (editingContext.shouldShowEditor && activeEditors && lockState) {\n    activeEditorsDisplay = (\n      <ActiveEditors\n        key=\"ActiveEditors\"\n        userContext={userContext}\n        activeEditors={activeEditors}\n        lockState={lockState}\n        lockIfFree={lockIfFree}\n        unlockIfOwned={unlockIfOwned}\n        forceLock={forceLock}\n      />\n    )\n  }\n\n  if (!editingContext.isEditing) {\n    if (activeEditorsDisplay) {\n      return (\n        <div className=\"edit-bar-control-bar\">\n          {activeEditorsDisplay}\n        </div>\n      );\n    } else {\n      return null;\n    }\n  }\n\n  const styles: Array<StyleName> = [\n    \"bold\",\n    \"italic\",\n    \"underline\",\n    \"superscript\",\n    \"subscript\",\n    \"link\"\n  ];\n\n  const controls = [];\n\n  styles.forEach((style) => {\n    const isActiveStyle = get(editingContextExtra, \"activeStyles\", [] as Array<StyleName>).includes(style);\n    const isLinkStyle = style === \"link\";\n\n    if (isLinkStyle && editingContextExtra.currentMenu?.menu === EDIT_LINK) {\n      controls.push(<DocEditHeaderLinkInput\n        key=\"DocEditHeaderLinkInput\"\n        editingContext={editingContext}\n        editingContextExtra={editingContextExtra}\n      />);\n    }\n\n    controls.push(<GenButton\n      key={`${style}-style`}\n      name={<i className={`fa fa-${style}`}></i>}\n      highlighted={isActiveStyle}\n      small\n      disabled={!editingContextExtra.currentDocSelection || (isLinkStyle && selection.isCollapsed(editingContextExtra.currentDocSelection))}\n      onClick={() => {\n        if (isLinkStyle) {\n          editingContext.setCurrentMenu(EDIT_LINK);\n        } else {\n          editingContextExtra.toggleStyle(style);\n        }\n      }}\n    />);\n  });\n\n  controls.push(\n    <DocEditHeaderColorPicker\n      key=\"DocEditHeaderColorPicker\"\n      editingContext={editingContext}\n      editingContextExtra={editingContextExtra}\n    />\n  )\n\n  controls.push(<div key=\"divider-1\" className=\"edit-bar-control-bar-divider\"></div>);\n\n  controls.push(\n    <GenButton\n      key=\"Find/Replace\"\n      name=\"Find/Replace\"\n      small\n      onClick={() => {\n        editingContext.setCurrentMenu(FIND_AND_REPLACE);\n      }}\n    />,\n  );\n\n  controls.push(<div key=\"divider-2\" className=\"edit-bar-control-bar-divider\"></div>);\n\n  // Disability checks for Inline/Node comments\n  const tempForType: Array<any> = editingContextExtra.currentlyEditingNodeLineage || [] // TODO: Narrow down any\n  const isDisabled =\n    !userContext.permissions.createComments ||\n    (editingContextExtra.currentMenu?.menu !== NEW_COMMENT_THREAD &&\n    (!editingContextExtra.currentDocSelection || !selection.isInOneNode(editingContextExtra.currentDocSelection) || (selection.isCollapsed(editingContextExtra.currentDocSelection) && ![\"image\", \"audio\", \"video\"].includes(R.last(tempForType)?.type))));\n\n  controls.push(\n    <GenButton\n      key=\"Add Comment\"\n      name=\"Add Comment\"\n      highlighted={editingContextExtra.currentMenu?.menu === NEW_COMMENT_THREAD}\n      small\n      disabled={isDisabled}\n      onClick={() => {\n        if (editingContextExtra.currentMenu?.menu === NEW_COMMENT_THREAD) {\n          editingContext.closeCurrentMenu();\n        } else {\n          editingContext.setCurrentMenu(NEW_COMMENT_THREAD);\n        }\n      }}\n    />,\n  );\n\n  if (documentContext.docType !== \"ReusableObject\" && userContext.permissions.createExistingContentRlo) {\n    if (editingContextExtra.currentRO?.roData) {\n      controls.push(\n        <GenButton\n          key=\"Undo RC\"\n          name=\"Undo RC\"\n          disabled={(editingContextExtra.currentRO?.roDocumentCount || 1) > 1}\n          highlighted\n          small\n          onClick={() => {\n            editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentRO.uid, \"roData\", null))\n          }}\n        />,\n      );\n    } else {\n      controls.push(\n        <GenButton\n          key=\"Make RC\"\n          name=\"Make RC\"\n          disabled={!editingContextExtra.currentRO}\n          highlighted\n          small\n          onClick={() => {\n            if (editingContextExtra.currentMenu?.menu === RLO_MODAL) {\n              editingContext.closeCurrentMenu();\n            } else {\n              editingContext.setCurrentMenu(RLO_MODAL);\n            }\n          }}\n        />,\n      );\n    }\n  }\n\n  if (activeEditorsDisplay) {\n    controls.push(activeEditorsDisplay)\n  }\n\n  if (projectContext.activeMemberName) {\n    controls.push(<span key=\"Workflow Editor\" style={{float: 'right', marginRight: '15px'}}><b>Current Workflow Editor is:</b> {projectContext.activeMemberName}</span>);\n  } else if (projectContext.projectProductionAssociate) {\n    controls.push(<span key=\"Project Production Associate\" style={{float: 'right', marginRight: '15px'}}><b>Project Production Associate is:</b> {projectContext.projectProductionAssociate}</span>);\n  }\n\n  return (\n    <div>\n      <div className=\"edit-bar-control-bar\">\n        {controls}\n        {editingContextExtra.currentMenu?.menu === LIST_RLO_MODAL && (\n          <ListRLOModal\n            editingContextExtra={editingContextExtra}\n            editingContext={editingContext}\n            permissions={userContext.permissions}\n          />\n        )}\n        {editingContextExtra.currentMenu?.menu === RLO_MODAL && (\n          <ConvertToRLOModal\n            mappingContext={mappingContext}\n            handleCancel={() => editingContext.closeCurrentMenu()}\n            editingContextExtra={editingContextExtra}\n            editingContext={editingContext}\n            rlo={editingContextExtra.currentMenu.data}\n          />\n        )}\n        {!props.featureFlag.new_landing_pages && (\n          <DocEditHeader\n            editingContext={editingContext}\n            editingContextExtra={editingContextExtra}\n            userContext={userContext}\n          />\n        )}\n      </div>\n      {props.featureFlag.new_landing_pages && (\n        <div className=\"edit-bar-control-bar\">\n          <DocEditHeader\n            editingContext={editingContext}\n            editingContextExtra={editingContextExtra}\n            userContext={userContext}\n          />\n        </div>\n      )}\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport GenButton from \"../../Gen/Button/component\";\nimport GenPostButton from \"../../Gen/PostButton/component\";\n\nimport {full_url} from \"../../../helpers/url\";\nimport { startCase, lowerCase } from \"lodash\";\n\nimport {\n  versionTypes,\n  versionTypeShortName,\n  versionTypeCssClassPrefix,\n  versionPushButtonData,\n  determineVersionType,\n  publishVersionId,\n  ongoingMaintenaceVersionId,\n  scheduledReviewVersionId,\n} from \"../../../helpers/Doc/version_types\";\nimport { changesDisplayModes, isChangesDisplayMode } from \"../../../helpers/Doc/changes\";\nimport { displayModes, isDisplayMode } from \"../../../helpers/Doc/displayMode\";\nimport { trackChangesEditModes, isTrackChangesEditMode } from \"../../../helpers/Doc/trackChangesEditMode\";\n\nimport { MEDIA_MANAGER } from \"../../../helpers/Doc/menu\";\n\ninterface DocEditBarTopControlsProps {\n  documentContext: DocumentContext;\n  currentVersion: CurrentVersion;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  editingContext: EditingContext;\n  editingContextExtra: EditingContextExtra;\n  featureFlag: FeatureFlag\n};\n\nexport default function DocEditBarTopControls(props: DocEditBarTopControlsProps) {\n  const {\n    documentContext,\n    currentVersion,\n    userContext,\n    displayContext,\n    editingContext,\n    editingContextExtra,\n  } = props;\n\n  const permissions: AqPermissions = userContext.permissions || {};\n\n  const versionType = determineVersionType(documentContext, currentVersion.id)\n  const {pushButtonName, pushButtonConfirmationText, pushButtonPath, pushButtonReplaceableVariant} = versionPushButtonData(versionType)\n\n  let pushButtonURL;\n  if (documentContext.docType === \"ReusableObject\") {\n    pushButtonURL = full_url(`/variants/${currentVersion.id}/replace?replaceable_variant=${pushButtonReplaceableVariant}`)\n  } else {\n    pushButtonURL = full_url(`/versions/${currentVersion.id}/${pushButtonPath}`)\n  }\n\n  let displayModeSelector =\n    <select\n      className=\"edit-bar-view-selector\"\n      value={displayContext.displayMode}\n      onChange={(e) => {isDisplayMode(e.target.value) && displayContext.setDisplayMode(e.target.value);}}\n    >\n      <option value={displayModes.STUDENT}>Student</option>\n      <option value={displayModes.UNGATED}>Ungated</option>\n      <option value={displayModes.FULL}>Full</option>\n      <option value={displayModes.OUTLINE}>Outline</option>\n    </select>\n\n  if (!editingContext.shouldShowEditor) {\n    // For adding content to the top toolbar in the normal document view mode.\n    return(\n      <>\n      </>\n    );\n  } else {\n    const publishPermission = documentContext.docType === \"ReusableObject\" ? permissions.publishMultiUseRlo : permissions.publish;\n\n    return (\n      <div>\n        <div className=\"edit-bar-control-bar\">\n          <h3 className={`edit-bar-version-type-header ${versionTypeCssClassPrefix(versionType)}-color`}>\n            {versionTypeShortName(versionType)}\n          </h3>\n          <select\n            className=\"edit-bar-view-selector\"\n            value={currentVersion.id}\n            onChange={(e) => {editingContextExtra.setVersionId(Number(e.target.value));}}\n          >\n            <option value={publishVersionId(documentContext)} key={\"Published\"}>Published</option>\n            <option value={ongoingMaintenaceVersionId(documentContext)} key={\"Ongoing Maintenance\"}>Ongoing Maintenance</option>\n            <option value={scheduledReviewVersionId(documentContext)} key={\"Scheduled Review\"}>Scheduled Review</option>\n          </select>\n          {displayModeSelector}\n          <GenButton\n            name={<i className=\"fa fa-undo\"></i>}\n            highlighted={editingContextExtra.canUndo}\n            disabled={!editingContext.isEditing || !editingContextExtra.canUndo}\n            small\n            onClick={editingContextExtra.undo}\n          />\n          <GenButton\n            name={<i className=\"fa fa-redo\"></i>}\n            highlighted={editingContextExtra.canRedo}\n            disabled={!editingContext.isEditing || !editingContextExtra.canRedo}\n            small\n            onClick={editingContextExtra.redo}\n          />\n          <GenButton\n            key={\"save-button\"}\n            name={<i className=\"fa fa-save\"></i>}\n            disabled={!editingContext.isEditing || !editingContextExtra.isActiveEditData}\n            highlighted={editingContextExtra.isActiveEditData}\n            small\n            onClick={editingContextExtra.save}\n            loading={editingContextExtra.isSyncing}\n          />\n          <GenButton\n            key={\"auto-save-toggle-button\"}\n            name={editingContextExtra.isAutoSaveOn ? <div key=\"auto-save-on\">Auto <i className=\"fa fa-save\"></i> On</div> : <div key=\"auto-save-off\">Auto <i className=\"fa fa-save\"></i> Off</div>}\n            highlighted={editingContextExtra.isAutoSaveOn}\n            small\n            onClick={(e) => {editingContextExtra.toggleAutoSave();}}\n          />\n          <GenButton\n            key=\"publish-button\"\n            name=\"Publish\"\n            disabled={!editingContext.isEditing || editingContextExtra.isActiveEditData || !publishPermission}\n            highlighted={!editingContextExtra.isActiveEditData}\n            small\n            onClick={() => {editingContextExtra.publish();}}\n          />\n          { pushButtonName &&\n            <GenPostButton\n            name={pushButtonName}\n            confirmMessage={pushButtonConfirmationText}\n            disabled={!editingContext.isEditing || editingContextExtra.isActiveEditData || !publishPermission }\n            highlighted={!editingContextExtra.isActiveEditData}\n            small\n            url={pushButtonURL}\n          />}\n          <GenButton\n            name=\"Reset\"\n            highlighted\n            small\n            onClick={userContext.resetState}\n          />\n          <GenButton\n            name={<i className=\"fa fa-image\"></i>}\n            disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n            highlighted\n            small\n            onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"image\" });}}\n          />\n          <GenButton\n            name={<i className=\"fa fa-music\"></i>}\n            disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n            highlighted\n            small\n            onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"audio\" });}}\n          />\n          <GenButton\n            name={<i className=\"fa fa-video\"></i>}\n            disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n            highlighted\n            small\n            onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"video\" });}}\n          />\n          <GenButton\n            name={<i className=\"fa fa-file-pdf\"></i>}\n            disabled={!editingContext.isEditing || !permissions.viewMediaAssets}\n            highlighted\n            small\n            onClick={(e) => {editingContext.setCurrentMenu(MEDIA_MANAGER, { mediaType: \"pdf\" });}}\n          />\n          { !props.featureFlag.new_landing_pages && (\n            <select\n              className=\"edit-bar-view-selector\"\n              value={editingContextExtra.trackChangesEditMode}\n              onChange={(e) => {isTrackChangesEditMode(e.target.value) && editingContextExtra.setTrackChangesEditMode(e.target.value);}}\n              disabled={!editingContext.isEditing || permissions.allowedEditMode === \"Suggesting\"}\n            >\n              <option value={trackChangesEditModes.EDITING_MODE}>Editing Mode</option>\n              <option value={trackChangesEditModes.SUGGESTING_MODE}>Suggesting Mode</option>\n            </select>\n          )}\n          { !props.featureFlag.new_landing_pages && (\n            <select\n              className=\"edit-bar-view-selector\"\n              value={editingContext.changesDisplayMode}\n              onChange={(e) => {isChangesDisplayMode(e.target.value) && editingContextExtra.setChangesDisplayMode(e.target.value);}}\n              disabled={versionType === versionTypes.PUBLISHED}\n            >\n              {Object.values(changesDisplayModes).map((changesDisplayMode) => {\n                return <option value={changesDisplayMode} key={changesDisplayMode}>{startCase(lowerCase(changesDisplayMode))}</option>;\n              })}\n            </select>\n          )}\n          { !props.featureFlag.new_landing_pages && userContext.permissions.viewLinksReport && (\n            <GenButton\n              name=\"Links Report\"\n              highlighted\n              small\n              confirmTitle=\"Just so you know\"\n              confirmMessage=\"This report could take a few minutes to produce. You can monitor its completion on the My Reports page. Please note: Any changes made to hyperlinks will be reflected in reporting only after publishing.\"\n              confirmOKText=\"OK\"\n              href={`/reports/document_links/${documentContext.id}.csv`}\n            />\n          )}\n        </div>\n        {props.featureFlag.new_landing_pages && (\n          <div className=\"edit-bar-control-bar\">\n            <select\n              className=\"edit-bar-view-selector\"\n              value={editingContextExtra.trackChangesEditMode}\n              onChange={(e) => {isTrackChangesEditMode(e.target.value) && editingContextExtra.setTrackChangesEditMode(e.target.value);}}\n              disabled={!editingContext.isEditing || permissions.allowedEditMode === \"Suggesting\"}\n            >\n              <option value={trackChangesEditModes.EDITING_MODE}>Editing Mode</option>\n              <option value={trackChangesEditModes.SUGGESTING_MODE}>Suggesting Mode</option>\n            </select>\n            <select\n              className=\"edit-bar-view-selector\"\n              value={editingContext.changesDisplayMode}\n              onChange={(e) => {isChangesDisplayMode(e.target.value) && editingContextExtra.setChangesDisplayMode(e.target.value);}}\n              disabled={versionType === versionTypes.PUBLISHED}\n            >\n              {Object.values(changesDisplayModes).map((changesDisplayMode) => {\n                return <option value={changesDisplayMode} key={changesDisplayMode}>{startCase(lowerCase(changesDisplayMode))}</option>;\n              })}\n            </select>\n            {userContext.permissions.viewLinksReport && (\n              <GenButton\n                name=\"Links Report\"\n                highlighted\n                small\n                confirmTitle=\"Just so you know\"\n                confirmMessage=\"This report could take a few minutes to produce. You can monitor its completion on the My Reports page. Please note: Any changes made to hyperlinks will be reflected in reporting only after publishing.\"\n                confirmOKText=\"OK\"\n                href={`/reports/document_links/${documentContext.id}.csv`}\n              />\n            )}\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport FileUploader from \"../../FileUploader/component\";\n\nimport {\n  getAssetAssociations,\n  deleteAssetAssociation,\n} from \"../../../helpers/media_manager\";\n\nimport { MEDIA_MANAGER } from \"../../../helpers/Doc/menu\";\n\ninterface DocEditBarMediaManagerProps {\n  createHandler?: (data: DigitalAsset) => void;\n  currentVersion: CurrentVersion;\n  deleteHandler?: (data: DigitalAsset) => void;\n  documentContext: DocumentContext;\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  mediaContext: MediaContext;\n  replaceHandler?: (data: {new?: DigitalAsset; old?: DigitalAsset}) => void;\n  userContext: UserContext;\n};\n\nexport default function DocEditBarMediaManager(props: DocEditBarMediaManagerProps) {\n  const {\n    documentContext,\n    currentVersion,\n    userContext,\n    editingContext,\n    editingContextExtra,\n    mediaContext,\n    createHandler,\n    deleteHandler,\n    replaceHandler,\n  } = props;\n\n  const currentMenu = editingContextExtra.currentMenu;\n  if (currentMenu?.menu !== MEDIA_MANAGER) { return null; }\n\n  const handleNewResourcesResponse = (data) => {\n    if (data.digital_assets && data.digital_assets.length) {\n      for (const asset of data.digital_assets) {\n        createHandler(asset);\n      }\n    }\n  };\n\n  const handleResourceReplacement = (data) => {\n    const assets = {};\n    if (data.digital_assets && data.digital_assets.length) {\n      assets[\"new\"] = data.digital_assets[0];\n    }\n    if (data.old_asset && data.old_asset !== \"null\") {\n      assets[\"old\"] = data.old_asset;\n    }\n    replaceHandler(assets);\n  };\n\n  const deleteWithConfirmFunction = (e: React.MouseEvent<HTMLButtonElement>) => {\n    const data = (e.target as any).dataset; // TODO: Remove any\n    const externalId = data.id;\n    const mediaType = data.media_type;\n\n    const confirmAndDelete = (associations) => {\n      let message = \"\";\n      if (associations.length > 1) {\n        message += `This ${mediaType} is also associated with the following:\\n `;\n        for (const a of associations) {\n          if (a.id !== documentContext.id) {\n            message += `${a.type} with ID: ${a.id}\\n`;\n          }\n        }\n      }\n      message += \"Are you sure you would like to delete?\";\n      const result = confirm(message);\n      if (result) {\n        deleteAssetAssociation({\n          modelId: documentContext.id as any, // TODO: Remove any\n          modelType: \"Document\",\n          externalId: externalId,\n          responseHandler: deleteHandler,\n        });\n        return true;\n      } else {\n        return false;\n      }\n    };\n\n    return getAssetAssociations({\n      externalId: externalId,\n      responseHandler: confirmAndDelete,\n    });\n  };\n\n  const makeCover = (e) => {\n    const data = e.target.dataset;\n    editingContextExtra.setVersionCoverImage(data.url);\n  };\n\n  const onClose = (e: React.MouseEvent<HTMLButtonElement>) => {\n    e.stopPropagation();\n    editingContext.closeCurrentMenu();\n    if (currentVersion.coverImage\n        && editingContextExtra.isAutoSaveOn) {\n      editingContextExtra.save();\n    }\n  };\n\n  const uploadButton = () => {\n    if (!userContext.permissions.createMediaAssets) {\n      return null;\n    }\n    const mediaType = currentMenu?.mediaType;\n    return(\n      <button className=\"upload-button\" onClick={(e) => {}}>\n        Upload\n        <FileUploader\n          name={`document[${mediaType}_file]`}\n          fileUploadPath={\"/api/v2/dam_file_uploads\"}\n          extraData={{\"document[id]\": documentContext.id}}\n          onSuccess={handleNewResourcesResponse}\n          loadingCount={editingContextExtra.getUploadCountByMediaType(mediaType)}\n          changeLoadingCountByValue={(countChange: number) => {\n            editingContextExtra.changeUploadCountForMediaTypeByValue(mediaType, countChange);\n          }}\n        />\n      </button>\n    );\n  }\n\n  const captionsUploadButton = (item, replacing) => {\n    if (!userContext.permissions.editMediaAssets) {\n      return null;\n    }\n    const extraData = {\n      \"document[caption_video_file_name]\": item.title,\n      \"document[id]\": documentContext.id,\n    };\n    if (replacing) {\n      extraData[\"document[old_caption_id]\"] = replacing.external_identifier;\n    }\n    return (\n      <button className=\"upload-button\" onClick={(e) => {}}>\n        {replacing ? \"Replace Caption\" : \"Upload New Caption\"}\n        <FileUploader\n          name={\"document[caption_file]\"}\n          fileUploadPath={\"/api/v2/dam_file_uploads\"}\n          onSuccess={handleResourceReplacement}\n          loadingCount={editingContextExtra.getUploadCountByMediaType(`caption-${item.title}`)}\n          changeLoadingCountByValue={(countChange: number) => {\n            editingContextExtra.changeUploadCountForMediaTypeByValue(`caption-${item.title}`, countChange);\n          }}\n          extraData={extraData}\n        />\n      </button>\n    );\n  };\n\n  const makeCoverButton = (item: DigitalAsset) => {\n    if (item.distribution_url === currentVersion.coverImage || !userContext.permissions.editMediaAssets) {\n      return null;\n    }\n    return (\n      <div className=\"doc-media-menu-media-item-buttons\">\n        <button data-url={item.distribution_url} onClick={makeCover}>Make Cover Image</button>\n      </div>\n    );\n  };\n\n  const deleteButton = (item: DigitalAsset) => {\n    if (!userContext.permissions.deleteMediaAssets) {\n      return null;\n    }\n    return <button data-id={item.external_identifier} data-media_type={item.media_type} onClick={deleteWithConfirmFunction}>Delete</button>\n  }\n\n  let title = \"\";\n  let mediaItems = [];\n  const mediaType = currentMenu?.mediaType;\n  switch (mediaType) {\n    case \"image\":\n      title = \"Image Files\";\n      mediaItems = mediaContext.images.map((item) => {\n        return (\n          <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n            <img src={item.distribution_url} />\n            <h6>{item.title}</h6>\n            <div className=\"doc-media-menu-media-item-buttons-inline\">\n              <div className=\"doc-media-menu-media-item-buttons\">\n                {deleteButton(item)}\n              </div>\n              {makeCoverButton(item)}\n            </div>\n            <hr />\n          </div>\n        );\n      });\n      break;\n    case \"audio\":\n      title = \"Audio Files\";\n      mediaItems = mediaContext.audios.map((item) => {\n        return (\n          <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n            <audio preload=\"none\" controls>\n              <source src={item.distribution_url} />\n            </audio>\n            <h6>{item.title}</h6>\n            <div className=\"doc-media-menu-media-item-buttons\">\n              {deleteButton(item)}\n            </div>\n            <hr />\n          </div>\n        );\n      });\n      break;\n    case \"video\":\n      title = \"Video Files\";\n      mediaItems = mediaContext.videos.map((item) => {\n        let captionsTrack = null;\n        const captionItem = mediaContext.captions.filter((c)=>{return c.title === item.title;}).pop() || null;\n        if (captionItem) {\n          captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={captionItem.distribution_url} />;\n        }\n        return (\n          <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n            <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n              <source src={item.distribution_url} />\n              {captionsTrack}\n            </video>\n            <h6>{item.title}</h6>\n            <div className=\"doc-media-menu-media-item-buttons\">\n              {captionsUploadButton(item, captionItem)}\n              {deleteButton(item)}\n            </div>\n            <hr />\n          </div>\n        );\n      });\n      break;\n    case \"pdf\":\n      title = \"PDF Files\";\n      mediaItems = mediaContext.pdfs.map((item) => {\n        return (\n          <div key={item.external_identifier} className=\"doc-media-menu-media-item\">\n            <embed width=\"191\" height=\"246\" src={item.distribution_url} type=\"application/pdf\" />\n            <h6>{item.title}</h6>\n            <h6>{item.distribution_url}</h6>\n            <div className=\"doc-media-menu-media-item-buttons\">\n              {deleteButton(item)}\n            </div>\n            <hr />\n          </div>\n        );\n      });\n      break;\n    default:\n      // TODO ADD ERROR\n      return null;\n  }\n\n  let uploadingParagraph = null;\n  if (editingContextExtra.getUploadCountByMediaType(mediaType) > 0) {\n    uploadingParagraph = (\n      <p>\n        Your file is being uploaded; depending on the file size this might take some time.\n        You can click the “Uploading” button to upload additional files or click the “Close” button to continue editing.\n        The system will notify you when the upload is complete.\n      </p>\n    );\n  }\n\n  return (\n    <GenModal open>\n      <div className=\"gen-modal-panel gen-modal-media-menu\">\n        <div className=\"gen-modal-header\">\n          <div className=\"gen-modal-header-left\">\n            <h1 className=\"title\">{title}</h1>\n          </div>\n          <div className=\"gen-modal-header-right\">\n            {uploadButton()}\n            <button className=\"close-button\" onClick={onClose}><i className={\"fa fa-times\"}></i></button>\n          </div>\n        </div>\n        <hr />\n        {uploadingParagraph}\n        {mediaItems}\n      </div>\n    </GenModal>\n  );\n}\n","import * as React from 'react'\n\nexport default class GenUpdateOnBlurTextField extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {}\n  }\n\n  componentWillUnmount() {\n    this.handleBlur()\n  }\n\n  handleChange(e) {\n    this.setState({inputValue: e.target.value})\n  }\n\n  handleBlur() {\n    if (this.state.inputValue) {\n      this.props.updateOnBlur(this.state.inputValue)\n      this.setState({inputValue: null})\n    }\n  }\n\n  render() {\n    let value = this.state.inputValue || this.props.value\n\n    return <input type=\"text\" value={value} onChange={this.handleChange.bind(this)} onBlur={this.handleBlur.bind(this)} placeholder={this.props.placeholder}/>\n  }\n}\n","import * as React from \"react\";\n\nimport { startCase } from \"lodash\";\n\nimport { newSetKeyValueChange } from \"../../../helpers/Doc/changes\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport GenToggleView from \"../../Gen/ToggleView/component\";\nimport GenUpdateOnBlurTextField from \"../../Gen/UpdateOnBlurTextField/component\";\n\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\n\ninterface EditBarMediaPickerProps {\n  userContext: UserContext;\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  mediaContext: MediaContext;\n};\n\nexport default function EditBarMediaPicker(props: EditBarMediaPickerProps) {\n  const {\n    userContext,\n    editingContext,\n    editingContextExtra,\n    mediaContext,\n  } = props;\n\n  const currentMenu = editingContextExtra.currentMenu;\n\n  if (currentMenu?.menu !== MEDIA_PICKER) { return null; }\n\n  let innerContent;\n  switch (currentMenu.mediaType) {\n    case \"image\":\n      const images = mediaContext.images.map((imageAsset) => {\n        if(!userContext.permissions.editMediaAssets) {\n          return (\n            <div key={imageAsset.external_identifier}>\n              <img src={imageAsset.distribution_url} />\n              <p>{imageAsset.title}</p>\n            </div>\n          );\n        }\n\n        const makeImage = (e: React.MouseEvent<HTMLImageElement | HTMLButtonElement>) => {\n          e.stopPropagation();\n\n          if (editingContextExtra.currentMenuNode.type === \"section\") {\n            editingContextExtra.setVersionCoverImage(imageAsset.distribution_url);\n            editingContext.closeCurrentMenu();\n          } else {\n            editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"url\", imageAsset.distribution_url));\n            editingContext.closeCurrentMenu();\n          }\n        };\n\n        return (\n          <div key={imageAsset.external_identifier}>\n            <img onClick={makeImage} src={imageAsset.distribution_url} />\n            <p>{imageAsset.title} <button onClick={makeImage}>Select</button></p>\n          </div>\n        );\n      });\n\n      innerContent = images.length > 0 ? images : <div key=\"no-images\"><h3>No Image Files</h3><h6>Upload files to Case</h6></div>;\n      break;\n    case \"audio\":\n      const audios = mediaContext.audios.map((audioAsset) => {\n        if(!userContext.permissions.editMediaAssets) {\n          return (\n            <div key={audioAsset.external_identifier}>\n              <audio preload=\"none\" controls>\n                <source src={audioAsset.distribution_url} />\n              </audio>\n              <p>{audioAsset.title}</p>\n            </div>\n          );\n        }\n\n        const makeAudio = (e: React.MouseEvent<HTMLButtonElement>) => {\n          e.stopPropagation();\n          editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"url\", audioAsset.distribution_url));\n          editingContext.closeCurrentMenu();\n        };\n\n        return (\n          <div key={audioAsset.external_identifier}>\n            <audio preload=\"none\" controls>\n              <source src={audioAsset.distribution_url} />\n            </audio>\n            <p>{audioAsset.title} <button onClick={makeAudio}>Select</button></p>\n          </div>\n        );\n      });\n\n      innerContent = audios.length > 0 ? audios : <div key=\"no-audios\"><h3>No Audio Files</h3><h6>Upload files to Case</h6></div>;\n      break;\n    case \"video\":\n      if (editingContextExtra.currentMenuNode.type !== \"video\") { return }\n\n      const updateOnBlur = (newValue) => {\n        editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"uri\", newValue));\n        editingContext.closeCurrentMenu();\n      };\n\n      const possibleVideos = mediaContext.videos.map((videoAsset) => {\n        let captionsTrack = null;\n        const captions = mediaContext.captions.filter((c)=>{return c.title === videoAsset.title;});\n        if (captions.length) {\n          let caption = null;\n          if (captions.length > 1) {\n            caption = captions.reduce((capn_1, capn) => (capn_1.external_identifier > capn.external_identifier) ? capn_1 : capn);\n          } else {\n            caption = captions[0];\n          }\n          captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={caption.distribution_url} />;\n        }\n\n        if(!userContext.permissions.editMediaAssets) {\n          return (\n            <div key={videoAsset.external_identifier}>\n              <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n                <source src={videoAsset.distribution_url} />\n                {captionsTrack}\n              </video>\n              <p>{videoAsset.title}</p>\n            </div>\n          );\n        }\n\n        const makeVideo = (e: React.MouseEvent<HTMLButtonElement>) => {\n          e.stopPropagation();\n\n          editingContext.addChange(newSetKeyValueChange(currentMenu.uid, \"url\", videoAsset.distribution_url));\n          editingContext.closeCurrentMenu();\n        };\n\n        return (\n          <div key={videoAsset.external_identifier}>\n            <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n              <source src={videoAsset.distribution_url} />\n              {captionsTrack}\n            </video>\n            <p>{videoAsset.title} <button onClick={makeVideo}>Select</button></p>\n          </div>\n        );\n      });\n\n      innerContent = (\n        <GenToggleView\n          activeKey={editingContextExtra.currentMenuNode.source}\n          views={[{\n            key: \"local\",\n            name: \"Local\",\n            onClick: () => {editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentMenuNode.uid, \"source\", \"local\"));},\n            view: <div>\n              {possibleVideos.length > 0 ? possibleVideos : <div key=\"no-videos\"><h3>No Video Files</h3><h6>Upload files to Case</h6></div> }\n            </div>,\n          },{\n            key: \"youtube\",\n            name: \"YouTube\",\n            onClick: () => {editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentMenuNode.uid, \"source\", \"youtube\"));},\n            view: <div>\n              <GenUpdateOnBlurTextField\n                value={editingContextExtra.currentMenuNode.uri}\n                updateOnBlur={updateOnBlur}\n                placeholder={\"Insert the YouTube video ID. For example... dQw4w9WgXcQ\"}\n              />\n            </div>,\n          },{\n            key: \"vimeo\",\n            name: \"Vimeo\",\n            onClick: () => {editingContext.addChange(newSetKeyValueChange(editingContextExtra.currentMenuNode.uid, \"source\", \"vimeo\"));},\n            view: <GenUpdateOnBlurTextField\n              value={editingContextExtra.currentMenuNode.uri}\n              updateOnBlur={updateOnBlur}\n              placeholder={\"Insert the Vimeo video ID. For example... 123456789\"}\n            />,\n          }]}\n        />\n      );\n\n      break;\n    default:\n      // Todo Add Error\n      return null;\n  }\n\n  return (\n    <GenModal open>\n      <div className=\"gen-modal-panel gen-modal-media-picker\">\n        <div className=\"gen-modal-header\">\n          <div className=\"gen-modal-header-left\">\n            <h1>Pick {startCase(currentMenu.mediaType)}</h1>\n          </div>\n          <div className=\"gen-modal-header-right\">\n            <button onClick={(e) => {e.stopPropagation(); editingContext.closeCurrentMenu();}}>Cancel</button>\n          </div>\n        </div>\n        <hr />\n        {innerContent}\n      </div>\n    </GenModal>\n  );\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../Gen/Modal/component\";\n\nimport DocEditBarFindAndReplaceControls from \"./EditBar/FindAndReplaceControls\";\nimport DocEditBarNodeGeneralControls from \"./EditBar/NodeGeneralControls\";\nimport DocEditBarTopControls from \"./EditBar/TopControls\";\nimport DocEditBarMediaManager from \"./EditBar/MediaManager\";\nimport DocEditMediaPicker from \"./EditBar/MediaPicker\";\n\nimport { FIND_AND_REPLACE } from \"../../helpers/Doc/menu\";\n\ninterface DocEditBarProps {\n  currentVersion: CurrentVersion;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n  editingContext: EditingContext;\n  editingContextExtra: EditingContextExtra;\n  mappingContext: MappingContext;\n  projectContext: ProjectContext;\n  mediaContext: MediaContext;\n  mergedData: MergedData;\n  userContext: UserContext;\n  featureFlag: FeatureFlag;\n};\n\nexport default function DocEditBar(props: DocEditBarProps) {\n  const {\n    editingContext,\n  } = props;\n\n  let editBarSideNavChanges = props.featureFlag.new_landing_pages ? {marginLeft: \"10px\"} : {}\n  if (!editingContext.shouldShowEditor) {\n    return (\n      <div className=\"edit-bar\">\n        <DocEditBarTopControls\n          {...props}\n        />\n      </div>\n    );\n  } else if (props.editingContextExtra.currentMenu?.menu === FIND_AND_REPLACE) {\n    return (\n      <div className=\"edit-bar\">\n        <DocEditBarFindAndReplaceControls\n          {...props}\n          editingContext={editingContext}\n        />\n      </div>\n    );\n  } else {\n    return (\n      <>\n        <GenModal open={props.editingContextExtra.savingErrors.length > 0}>\n          <div className=\"gen-modal-panel\">\n            <p>{props.editingContextExtra.savingErrors}</p>\n          </div>\n        </GenModal>\n        <DocEditBarMediaManager\n          {...props}\n          editingContext={editingContext}\n        />\n        <DocEditMediaPicker\n          {...props}\n          editingContext={editingContext}\n        />\n        <div className=\"edit-bar\" style={editBarSideNavChanges}>\n          <DocEditBarTopControls\n            {...props}\n          />\n          <DocEditBarNodeGeneralControls\n            {...props}\n          />\n        </div>\n      </>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport * as DocConvertRangeInlineJSON from \"../../../../helpers/Doc/Convert/RangeInlineJSON\";\n\nimport {\n  compressRanges\n} from \"../../../../helpers/Doc/Functions/Range\";\n\ninterface DocStyledTextEditorProps {\n  uid?: string;\n  content: InlineNode;\n  contentKey?: string;\n\n  disableStyleTextEditing?: boolean;\n\n  editingContext: EditingContext;\n\n  independentlyEditable?: boolean;\n  placeholder?: string;\n\n  variantId?: number;\n\n  returnPlainText?: boolean;\n};\n\nexport default function DocStyledTextEditor(props: DocStyledTextEditorProps) {\n  const {\n    content=\"\",\n    contentKey,\n    disableStyleTextEditing,\n    editingContext,\n    independentlyEditable,\n    placeholder=\"EMPTY\",\n    uid,\n    variantId,\n  } = props\n\n  let isAllEmpty;\n  if (typeof content !== \"string\" && content.inlineIrrlevantRanges) {\n    const firstRange = compressRanges(content.inlineIrrlevantRanges.map(x => x.range))[0];\n    if (firstRange) {\n      isAllEmpty = firstRange.start === 0 && firstRange.end === content.text.length;\n    }\n  }\n\n  const htmlContent = typeof content !== \"string\"\n    ? DocConvertRangeInlineJSON.toHTML(content, editingContext.colorLookup)\n    : content;\n\n  let editableData = {}\n  if (independentlyEditable) {\n    if (!disableStyleTextEditing) {\n      editableData = {\n        contentEditable: true,\n        \"data-is-independently-editable\": true,\n        style: {\n          \"userSelect\": \"auto\",\n          \"WebkitUserSelect\": \"auto\",\n        }\n      };\n    } else {\n      editableData = {\n        style: {\n          \"userSelect\": \"text\",\n          \"WebkitUserSelect\": \"text\",\n        }\n      };\n    }\n  }\n\n  const sharedProps = {\n    id: `${uid}//${contentKey}`,\n    className: \"doc-styled-text\",\n    'data-is-styled-text': true,\n    'data-uid': uid,\n    'data-contentkey': contentKey,\n    ...editableData,\n    autoComplete: \"off\",\n    autoCorrect: \"off\",\n    autoCapitalize: \"off\",\n    spellCheck: false,\n    draggable: false,\n    onClick: (e: React.MouseEvent<HTMLSpanElement>) => e.stopPropagation(),\n  }\n\n  if (variantId) {\n    sharedProps['data-variantid'] = variantId\n  }\n\n  if (isAllEmpty || htmlContent.length === 0) {\n    return (\n      <span\n        {...sharedProps}\n        className=\"doc-styled-text doc-styled-text-placeholder\"\n        data-is-empty\n        suppressContentEditableWarning\n      >\n        <span>&nbsp;</span>\n        <span contentEditable={false} style={{\"userSelect\": \"auto\", \"WebkitUserSelect\": \"auto\"}}>{placeholder}</span>\n      </span>\n    );\n  } else {\n    return (\n      <span\n        {...sharedProps}\n        className=\"doc-styled-text\"\n        dangerouslySetInnerHTML={{__html: htmlContent.replace(/\\ $/, \"&nbsp;\").replace(/\\ </, \"&nbsp;<\")}}\n      />\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport DocStyledTextEditor from \"./StyledText/Editor\";\nimport * as DocConvertRangeInlineJSON from \"../../../helpers/Doc/Convert/RangeInlineJSON\";\nimport * as DocConvertHTML from \"../../../helpers/Doc/Convert/HTML\";\nimport { isRangeInlineJSON } from \"../../../helpers/Doc/Functions/RangeInlineJSON\";\nimport analyticsModule from \"../../../../application/analytics.js\";\n\nconst renderContent = (content: InlineNode, onClick?: React.MouseEventHandler<HTMLSpanElement>) => {\n  if (typeof content === \"string\") {\n    return <span key={content} onClick={onClick} dangerouslySetInnerHTML={{__html: content}} />;\n  } else if(isRangeInlineJSON(content)) {\n    return <span key={content.text} onClick={onClick} dangerouslySetInnerHTML={{__html: DocConvertRangeInlineJSON.toHTML(content)}} />;\n  } else {\n    return <span onClick={onClick} dangerouslySetInnerHTML={{__html: DocConvertHTML.fromInlineJson(content)}} />;\n  }\n};\n\ninterface DocStyledTextProps {\n  uid?: string;\n  content: InlineNode;\n  contentKey?: string;\n\n  disableStyleTextEditing?: boolean;\n\n  editingContext: EditingContext;\n  documentContext?: DocumentContext;\n\n  independentlyEditable?: boolean;\n  placeholder?: string;\n\n  readOnly?: boolean;\n\n  variantId?: number\n\n  returnPlainText?: boolean; // Can drop?\n};\n\nexport default function DocStyledText(props: DocStyledTextProps) {\n  if (props.editingContext.isEditing && !props.readOnly) {\n    return <DocStyledTextEditor {...props} />;\n  } else {\n    let onClick;\n    const [courseNode, _] = Array.from(document.querySelectorAll(\".breadcrumb-header-panel a\"))\n    const caseTitle = props.documentContext ? props.documentContext.title : ''\n\n    if(String(props.content).startsWith('<a') && courseNode && courseNode.textContent == 'Educator Resources' ) {\n      onClick = () => { analyticsModule.track(\"click_on_each_educator_resource_pdf\", { page: window.location.href, source: 'Educator Resources', case: caseTitle }) }\n    } else if(String(props.content).includes('<a')) {\n      onClick = () => { analyticsModule.track(\"clicks_on_external_resources\", { page: window.location.href, source: 'Case', case: caseTitle }) }\n    }\n\n    return renderContent(props.content, onClick);\n  }\n}\n","import * as React from \"react\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\ninterface DocCDQFeaturesProps extends BlockNodeAll {\n  type: string;\n  uid: string;\n  classes?: Array<string>;\n}\n\nexport default function DocCDQFeatures(props: DocCDQFeaturesProps) {\n  if (!props.cdqFeatures || !props.editingContext.isEditing) { return null; }\n\n  const cdqFeatureRows = props.cdqFeatures.map((cdqFeature, index) => {\n    const includeInAllNodes = {\n      key: cdqFeature.uid,\n      documentContext: props.documentContext,\n      currentVersion: props.currentVersion,\n      editingContext: props.editingContext,\n      userContext: props.userContext,\n    };\n\n    return (\n      <li\n        id={cdqFeature.uid}\n        key={cdqFeature.uid}\n        className=\"doc-cdq-key-feature-row\"\n        style={backgroundStyleFromNode({...includeInAllNodes, ...cdqFeature})}\n      >\n        <span>\n          <DocStyledText\n            uid={cdqFeature.uid}\n            content={cdqFeature.content}\n            contentKey={\"content\"}\n            editingContext={props.editingContext}\n            independentlyEditable\n            disableStyleTextEditing={props.disableStyleTextEditing}\n            returnPlainText\n          />\n        </span>\n      </li>\n    );\n  });\n\n  return (\n    <div\n      className=\"doc-cdq-key-feature-rows\"\n      contentEditable={false}\n    >\n      <h5>Features</h5>\n      <ul>\n        {cdqFeatureRows}\n      </ul>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport analyticsModule from \"../../../../../application/analytics\";\n\nimport {\n  find,\n  includes,\n  intersection,\n  isEmpty,\n  kebabCase,\n  replace,\n  upperCase,\n} from \"lodash\";\n\nimport IconCircleExpandImage from \"images/icon-circle-expand-1.svg\";\nimport IconCircleCollapseImage from \"images/icon-circle-collapse-1.svg\";\n\nimport MultiUseImage from \"images/multi-use.jpg\";\nimport SingleUseImage from \"images/single-use.jpg\";\n\nimport { OPENED_SECTION_LOG } from \"../../../../helpers/DocumentUserLog\";\n\nimport { MEDIA_PICKER } from \"../../../../helpers/Doc/menu\";\n\nimport DocStyledText from \"../../BlockNodeHelpers/StyledText\";\n\nimport { TEACHING_POINT_CLASSES } from \"../../../../helpers/RO/content_type\";\n\nimport AqButton from '../../../Aq/Button';\n\ninterface DocSectionHeaderProps extends DocSectionType<InlineNode>, BlockNodeAll {\n  integrationInfo: IntegrationInfo;\n  openSiblingSectionUIDs: Array<string>;\n  paused?: boolean;\n  roData: RoData;\n  roDocumentCount: number;\n  submitted?: boolean;\n};\n\nfunction DocSectionHeader(props: DocSectionHeaderProps) {\n  const {\n    currentVersion,\n    editingContext,\n    displayContext,\n    userContext,\n    classes,\n    collapsed,\n    collapsible,\n    inactiveBool,\n    level,\n    title,\n    uid,\n    openSiblingSectionUIDs,\n    disableStyleTextEditing,\n    roData,\n    roDocumentCount = 1,\n  } = props;\n\n  const onHeaderClick = () => {\n    displayContext.setFocusedBookmarkUid(null);\n\n    if (inactiveBool) { return null; }\n\n    if (collapsible) {\n      const newState = { [uid]: {collapsed: !collapsed} };\n\n      if (collapsed) {\n        userContext.logEvent(OPENED_SECTION_LOG, {node_uid: uid});\n\n        if(classes && classes.includes(\"mod_map_card\")) {\n          analyticsModule.track(\"open_mod_map_from_within_script\", { case: document.title, source: 'Integrated Illness Script', page: window.location.href })\n        }\n\n        if(classes && classes.includes(\"core_concept_header\")) {\n          analyticsModule.track(\"open_core_concept\", { case: document.title, source: 'Integrated Illness Script', page: window.location.href })\n        }\n\n        if (currentVersion.onlyOneUncollapsedSection && level === 1 && openSiblingSectionUIDs && !displayContext.canBeEditing) {\n          openSiblingSectionUIDs.forEach((uid) => {\n            newState[uid] = {collapsed: true};\n          });\n        }\n\n        if(classes && classes.includes(\"expert_comment\")) {\n          analyticsModule.track(\"clicks_on_deep_dives\", { case: document.title, source: 'Case', page: window.location.href })\n        }\n      }\n\n      userContext.addState(newState);\n    }\n  };\n\n  let collapsedIndicator;\n  if (collapsible) {\n    if (!isEmpty(intersection([\"neutral_text\", \"core_concept_header\"], classes))) {\n      if (collapsed) {\n        collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><img src={IconCircleExpandImage} alt=\"collapse\" className=\"neutral-text-collapse-icon\" /></span>;\n      } else {\n        collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><img src={IconCircleCollapseImage} alt=\"expand\" className=\"neutral-text-collapse-icon\" /></span>;\n      }\n    } else {\n      if (collapsed) {\n        collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><span className=\"icon-open-box\"></span></span>;\n      } else {\n        collapsedIndicator = <span className=\"doc-section-collapsed-indicator\"><span className=\"icon-close-box\"></span></span>;\n      }\n    }\n  }\n\n  let coverImage;\n  if (level === 0 && editingContext.isEditing) {\n    const startCoverEditAction = (e: React.MouseEvent<HTMLDivElement>) => {\n      e.stopPropagation();\n      editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"image\", uid: uid });\n    };\n\n    coverImage = (\n      <div className=\"doc-section-header-cover-image\" onClick={startCoverEditAction}>\n        <img src={currentVersion.coverImage} />\n      </div>\n    );\n  }\n\n  let addLOButton;\n  if (props?.featureFlag?.saq_phase_1 && editingContext.isEditing && classes?.includes(\"learning_objectives_card\")) {\n    addLOButton = (\n      <span style={{marginRight: '10px'}}>\n        <AqButton\n          className=\"pink outline small\"\n          onClick={() => {\n            editingContext.setCurrentMenu(\"LEARNING_OBJECTIVES_ADD_NEW\");\n          }}\n        >\n          <div className=\"aq-button-text\">\n            ADD LO\n          </div>\n        </AqButton>\n      </span>\n    );\n  }\n\n  let rightHeader = null;\n  const cardClass = find(classes, (cl) => {return cl.includes(\"_card\");});\n  if (cardClass) {\n    const cardC = replace(cardClass, \"_card\", \"\");\n    const cardText = upperCase(cardC);\n\n    const cardIcon = <span className={kebabCase(`icon-${cardC}`)}></span>;\n\n    rightHeader = (\n      <div className=\"doc-section-header-right\">\n        <h5 className=\"doc-section-header-right-title\">{cardText}{cardIcon}</h5>\n      </div>\n    );\n  }\n\n  let topper = null;\n  if (!isEmpty(intersection([...TEACHING_POINT_CLASSES,\"expert_comment\"], classes))) {\n\n    let icon = \"icon-star-circle\";\n    let topperTitle = \"TEACHING POINT\";\n    let faIcon = null;\n    let topperCollapsedIndicator = null;\n    let sectionTitle = null;\n\n    if (includes(classes, \"underlying_core_concepts\")) {\n      icon = \"\";\n      faIcon = <i key=\"fa-list-ul\" className=\"fa fa-list-ul\"></i>;\n      topperTitle = \"Underlying Core Concepts\";\n\n      topper = (\n        <div className=\"core-concepts-topper\">\n          <span className={`core-concepts-topper-icon ${icon}`}>{faIcon}</span>\n          <span className=\"core-concepts-topper-title\">{topperTitle} </span>\n        </div>\n      );\n    } else if (includes(classes, \"expert_comment\")) {\n      icon = \"\";\n      faIcon = <i key=\"fa-anchor-icon\" className=\"fa fa-anchor\"></i>;\n      topperTitle = \"Deep Dive\";\n      sectionTitle = (\n        <span className=\"teaching-point-section-topper-title\">\n          <DocStyledText\n            uid={uid}\n            content={title}\n            contentKey={\"title\"}\n            editingContext={editingContext}\n            placeholder={\"Enter Deep Dive title here\"}\n            independentlyEditable\n            disableStyleTextEditing={disableStyleTextEditing}\n          />\n        </span>\n      );\n\n      if (collapsible) {\n        if (collapsed) {\n          topperCollapsedIndicator = <img src={IconCircleExpandImage} alt=\"collapse\" className=\"expert-comment-collapse-icon\" />;\n        } else {\n          topperCollapsedIndicator = <img src={IconCircleCollapseImage} alt=\"expand\" className=\"expert-comment-collapse-icon\" />;\n        }\n      }\n    }\n\n    topper = (\n      <div className=\"teaching-point-topper\" onClick={onHeaderClick}>\n        <div className=\"teaching-point-topper-content\">\n          {topperCollapsedIndicator}\n          {roData && <img src={roDocumentCount > 1 ? MultiUseImage : SingleUseImage}  height=\"25\" width=\"25\"/>}\n          <span className={`teaching-point-topper-icon ${icon}`}>{faIcon}</span>\n          <span className=\"teaching-point-topper-title\">{topperTitle}</span>\n          {sectionTitle}\n        </div>\n        <div className=\"teaching-point-topper-border\" />\n      </div>\n    );\n  }\n\n  const sectionPlaceholder = () => {\n    if (level === 1) {\n      return \"Enter Page title here\";\n    } else if (level > 1) {\n      if (includes(classes, \"neutral_text\")) {            return \"Enter Neutral text here\";}\n      else if (includes(classes, \"core_concept_header\")) {return \"Enter Core Concept header here\"; }\n      else if (includes(classes, \"dialog_box\")) {         return \"Enter Dialog Box text here\"; }\n      else if (includes(classes, \"alert\")) {              return \"Enter Alert text here\"; }\n      else if (includes(classes, \"clinical_reasoning\")) { return \"Enter Clinical Reasoning text here\"; }\n      else if (includes(classes, \"clinical_skills\")) {    return \"Enter Clinical Skills text here\"; }\n      else if (includes(classes, \"knowledge\")) {          return \"Enter Knowledge text here\"; }\n      else if (includes(classes, \"management\")) {         return \"Enter Management text here\"; }\n      else if (includes(classes, \"principles\")) {         return \"Enter Principles text here\"; }\n      else if (includes(classes, \"studies\")) {            return \"Enter Studies text here\"; }\n      else                                                return \"Enter Section text here\";\n    } else {\n      return \"Enter Section text here\";\n    }\n  };\n\n  return (\n    <div\n      id={`${uid}_header`}\n      className={classNames(\"doc-section-header\", { \"display-root\": level === 0 })}\n      onClick={onHeaderClick}\n    >\n      {topper}\n      <div className=\"doc-section-header-banner\">\n        <h1 className=\"doc-section-header-title\">\n          {coverImage}\n          {collapsedIndicator}\n          <span>\n            <DocStyledText\n              uid={uid}\n              content={title}\n              contentKey={\"title\"}\n              placeholder={sectionPlaceholder()}\n              editingContext={editingContext}\n              independentlyEditable\n              disableStyleTextEditing={disableStyleTextEditing}\n            />\n          </span>\n        </h1>\n        <span style={{marginRight: '10px'}}>\n          {addLOButton}\n        </span>\n        {rightHeader}\n      </div>\n    </div>\n  );\n}\n\nexport default React.memo(DocSectionHeader);\n","import * as React from \"react\";\nimport { isNumber, keyBy } from \"lodash\";\nimport * as R from \"ramda\";\nimport * as classNames from \"classnames\";\n\nimport {\n  findNode,\n  docMapAllNodes\n} from \"../../../helpers/Doc/Functions/base\";\nimport {\n  newAddTextNodesBeforeNodeChange,\n  newAddTextAndNodesToNodeChange,\n} from \"../../../helpers/Doc/changes\";\nimport { isCurrentlyEditing } from \"../../../helpers/Doc/currentlyEditing\";\nimport { ADD_NODE } from \"../../../helpers/Doc/menu\";\nimport { getSubType } from \"../../../helpers/Doc/Define/base\";\nimport generateUUID from \"../../../helpers/generateUUID\";\nimport { LIST_RLO_MODAL } from \"../../../helpers/Doc/menu\";\n\nimport { DocBlockNodesProps } from \"../BlockNodes\"\n\nconst QUESTION_NODE_TYPES = [\n  \"category_matcher_question\",\n  \"free_text_question\",\n  \"mcq_diff_diagnosis\",\n  \"mcq_feq\",\n  \"mcq_multiple\",\n  \"mcq_no_best\",\n  \"mcq_single\",\n  \"summary_statement\",\n  \"cdq_question\",\n]\n\ninterface DocAddNodeProps {\n  currentMenu?: DocMenu;\n  editIndex?: number;\n  parentContentKey: string;\n  parentNode: DocBlockNodesProps;\n  siblingUid?: string;\n  localClipboard?: LocalClipboardData;\n  shouldHaveSpace: boolean;\n\n  documentContext: DocumentContext;\n  editingContext: EditingContext;\n  userContext: UserContext;\n};\n\nfunction DocAddNode(props: DocAddNodeProps) {\n  const {\n    currentMenu,\n    documentContext,\n    userContext,\n    editIndex,\n    editingContext,\n    parentContentKey,\n    parentNode,\n    siblingUid,\n    localClipboard,\n    shouldHaveSpace,\n  } = props\n\n  if (!editingContext.isEditing) { return null; }\n  if (\n    (\n      !userContext.permissions.createContentNodes ||\n      (parentNode.type === \"section\" && parentNode.level === 0 && !userContext.permissions.createPages)\n    ) && (\n      documentContext.kind !== \"assessment_question_mcq\" ||\n      !userContext.permissions.editMediaAssets ||\n      parentNode.type !== \"section\" ||\n      !parentNode.classes?.includes(\"question_vignette\")\n    )\n  ) { return null; }\n\n  const classes = classNames(\n    \"doc-add-node\",\n    {\"level-one\": parentNode.type === \"section\" && parentNode.level === 0},\n  );\n\n  const style = {marginLeft: (parentNode.type === \"section\" && parentNode.level === 0 && documentContext.docType !== \"ReusableObject\") ? \"20px\" : \"0px\"};\n\n  const index = isNumber(editIndex) ? editIndex + 1 : 0;\n\n  let addNodeMenu;\n  const isOpen = currentMenu?.menu === ADD_NODE && isCurrentlyEditing(currentMenu, { menu: ADD_NODE, uid: parentNode.uid, contentKey: parentContentKey, index: index });\n\n  if (isOpen) {\n    const parentType = getSubType(parentNode);\n    const nodeDefinition = editingContext.nodeDefinitions[parentType].deref(editingContext.nodeDefinitions);\n    const parentDisplayName = nodeDefinition.displayName(editingContext.nodeDefinitions);\n\n    let addText = `Add Content to ${parentDisplayName}`;\n    if (parentNode.type === \"section\") {\n      addText = (parentNode.level === 0 && documentContext.docType !== \"ReusableObject\") ? \"Add Page\" : addText;\n    } else if (parentNode.type === \"tableCell\") {\n      addText = \"Add Table Content\";\n    }\n\n    const options = nodeDefinition.objectModel[parentContentKey].generateOptions(editingContext.nodeDefinitions);\n    const optionsMap = keyBy(options, (option) => {\n      return option.description(editingContext.nodeDefinitions);\n    });\n    let selectOptionSummaries = Object.keys(optionsMap).map((optionName) => {\n      const displayName = optionsMap[optionName].displayName(editingContext.nodeDefinitions);\n      return [displayName, optionName];\n    }).sort();\n\n    if (!userContext.permissions.insertRloToDocuments) {\n      selectOptionSummaries = selectOptionSummaries.filter(([optionTitle, optionKey]) => \"RLOModal\" !== optionKey )\n    }\n\n    const selectOptions = selectOptionSummaries.map(([displayName, optionName]) => {\n      return <option value={optionName} key={optionName}>{displayName}</option>;\n    });\n\n    if (localClipboard) {\n      selectOptions.unshift(\n        <option value=\"PASTE_CONTENT\" key=\"PASTE_CONTENT\">PASTE CONTENT</option>\n      );\n    }\n\n    const handleSelectChange = (selectNode: React.ChangeEvent<HTMLSelectElement>) => {\n      const name = selectNode.target.value;\n\n      if (name === \"RLOModal\") {\n        editingContext.setCurrentMenu(LIST_RLO_MODAL, {...currentMenu, menu: LIST_RLO_MODAL})\n      } else if (name === \"PASTE_CONTENT\") {\n        if (localClipboard) {\n          const typesToAdd = localClipboard.map(node => getSubType(node));\n          const allowableTypes = options.map(option => option.refName);\n\n          if (!R.isEmpty(R.intersection(QUESTION_NODE_TYPES, allowableTypes))) {\n            allowableTypes.push(\"question\");\n          }\n\n          let canAddContent = R.isEmpty(R.difference(typesToAdd, allowableTypes));\n\n          if (canAddContent) {\n            // Remove Extra Data\n            let cleanedLocalClipboard = localClipboard.map(node => docMapAllNodes(node, (nodeP) => ({...nodeP, uid: generateUUID()})));\n\n            if (currentMenu.siblingUid) {\n              editingContext.addChange(newAddTextNodesBeforeNodeChange(currentMenu.siblingUid, null, cleanedLocalClipboard))\n            } else {\n              editingContext.addChange(newAddTextAndNodesToNodeChange(currentMenu.uid, currentMenu.contentKey, null, cleanedLocalClipboard));\n            }\n          } else {\n            alert(\"Content type not allowed\");\n          }\n        }\n        editingContext.closeCurrentMenu();\n      } else {\n        const option = optionsMap[name];\n        const newNode = option.generate(editingContext.nodeDefinitions, {});\n\n        if (currentMenu.siblingUid) {\n          editingContext.addChange(newAddTextNodesBeforeNodeChange(currentMenu.siblingUid, null, [newNode]))\n        } else {\n          editingContext.addChange(newAddTextAndNodesToNodeChange(currentMenu.uid, currentMenu.contentKey, null, [newNode]));\n        }\n        editingContext.closeCurrentMenu();\n      }\n\n    };\n\n    addNodeMenu = (\n      <div className=\"doc-add-node-menu\" contentEditable={false}>\n        <h4>{addText}</h4>\n        <select onChange={handleSelectChange}>\n          <option value=\"Pick an item\" key=\"Pick an item\">--Pick an item--</option>\n          {selectOptions}\n        </select>\n      </div>\n    );\n  }\n\n  return (\n    <div className={classes} style={style} contentEditable={false}>\n      {\n        shouldHaveSpace && (\n          <div className=\"doc-add-node-space\">\n            &nbsp;\n          </div>\n        )\n      }\n      <div\n        className=\"doc-add-node-tag\"\n        contentEditable={false}\n        onMouseDown={(e) => {\n          e.preventDefault();\n          e.stopPropagation();\n        }}\n        onClick={(e) => {\n          e.preventDefault();\n          e.stopPropagation();\n          if (isOpen) {\n            editingContext.closeCurrentMenu();\n          } else {\n            editingContext.setCurrentMenu(ADD_NODE, {\n              uid: parentNode.uid,\n              contentKey: parentContentKey,\n              index: index,\n              siblingUid: siblingUid\n            });\n          }\n        }}\n      >\n        <i className={`fa fa-${isOpen ? \"times\" : \"plus\"}`}></i>\n      </div>\n      {addNodeMenu}\n    </div>\n  );\n}\n\nexport default React.memo(DocAddNode);\n","import { reduce } from \"lodash\";\n\nexport function isCurrentlyEditing(currentlyEditing, possibleCurrentlyEditing) {\n  return !!currentlyEditing && reduce(possibleCurrentlyEditing, (result, value, key) => result && currentlyEditing[key] === value, true);\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\nimport analyticsModule from \"../../../../application/analytics.js\";\n\ninterface DocBookmarkProps {\n  uid: string;\n  bookmarked?: boolean;\n\n  currentVersion: CurrentVersion;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n};\n\nexport default function DocBookmark(props: DocBookmarkProps) {\n  const {\n    currentVersion,\n    userContext,\n    uid,\n    bookmarked,\n    displayContext,\n    documentContext,\n  } = props;\n\n  if (currentVersion.disableBookmarks || displayContext.canBeEditing || displayContext.isEmbeded) { return null; }\n\n  const onClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n    const newBookmarkState = !bookmarked;\n\n    userContext.addState({\n      [uid]: { bookmarked: newBookmarkState },\n    });\n\n    displayContext.setFocusedBookmarkUid(newBookmarkState ? uid : null);\n\n    analyticsModule.track('use_bookmark_feature_on_the_page', { page: window.location.href, source: 'Case', case: documentContext.title})\n\n    e.stopPropagation();\n  };\n\n  return (\n    <div\n      id={`bookmark ${uid}`}\n      className={classNames(\"doc-bookmark-button\", {bookmarked: bookmarked})}\n      onClick={onClick}\n      contentEditable={false}\n    >\n      <div className=\"icon-bookmark\" />\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { NOTES } from \"../../../reducers/ui/reasoningTool\";\n\nimport * as classNames from \"classnames\";\nimport generateUUID from \"../../../helpers/generateUUID\";\n\ninterface DocNoteProps {\n  noteUid?: string;\n  uid: string;\n\n  displayContext: DisplayContext;\n  userContext: UserContext;\n};\n\nexport default function DocNote(props: DocNoteProps) {\n  const {\n    displayContext,\n    noteUid,\n    uid,\n    userContext,\n  } = props;\n\n  if (displayContext.canBeEditing || displayContext.isEmbeded) { return null; }\n\n  const onClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n    if (noteUid) {\n      userContext.deleteNote(noteUid);\n      displayContext.setFocusedBookmarkUid(null);\n    } else {\n      const newUid = generateUUID();\n      userContext.addNote(newUid, {notedNodeUid: uid});\n      displayContext.togglePanel(NOTES);\n      displayContext.panelNodeEditStart(newUid);\n      displayContext.setFocusedBookmarkUid(uid);\n    }\n\n    e.stopPropagation();\n  };\n\n  return (\n    <div\n      id={`note${uid}`}\n      className={classNames(\"doc-note-button\", {noted: noteUid})}\n      onClick={onClick}\n      contentEditable={false}\n    >\n      <div className=\"icon-notes\" />\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\n\ninterface DocAudioProps extends DocAudioType<InlineNode>, BlockNodeAll {}\n\nfunction DocAudio(props: DocAudioProps) {\n  const {\n    disableStyleTextEditing,\n    editingContext,\n    source,\n    title,\n    uid,\n    userContext,\n  } = props;\n\n  switch (source) {\n    case \"local\":\n      return (\n        <div\n          id={props.uid}\n          data-is-node\n          data-uid={props.uid}\n          className={classNames(\"doc-audio\", \"doc-audio-local\", props.uid, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n          contentEditable={false}\n        >\n          <div className=\"doc-audio-wrapper-outer\">\n            <div className=\"doc-audio-wrapper-inner\">\n              <div className=\"comment-container\" style={backgroundStyleFromNode(props)}>\n                <audio key={props.url} preload=\"none\" controls>\n                  <source src={props.url} />\n                </audio>\n              </div>\n              {editingContext.isEditing && userContext.permissions.viewMediaAssets && <GenButton\n                  key=\"picker-button\"\n                  className=\"doc-audio-picker-button\"\n                  name={<i className=\"fa fa-music\"></i>}\n                  highlighted\n                  small\n                  onClick={(e) => {\n                    editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"audio\", uid: uid });\n                    e.stopPropagation();\n                  }}\n                />}\n            </div>\n          </div>\n          {(typeof title === \"string\" && title.length > 0) || editingContext.isEditing && (\n            <figcaption>\n              <DocStyledText\n                uid={uid}\n                content={title}\n                contentKey={\"title\"}\n                placeholder={\"Add Audio text here\"}\n                editingContext={editingContext}\n                independentlyEditable\n                disableStyleTextEditing={disableStyleTextEditing}\n              />\n            </figcaption>\n          )}\n          <DocBookmark {...props} />\n          <DocNote {...props} />\n        </div>\n      );\n    default:\n      Rollbar.warning(`DocAudio does not recognize source of type ${props.source}`);\n      return null;\n  }\n}\n\nexport default React.memo(DocAudio);\n","import { mergeStates } from \"./documentUserState\";\n\nimport { full_url } from \"../url\";\n\nconst STATE_ACTIONS = [\n  \"setNodeInactive\",\n  \"setNodeInvisible\",\n  \"setNodeKVPair\",\n  \"startTimer\",\n]\n\nconst CALLBACK_ACTIONS = [\n  \"scrollTo\",\n];\n\ninterface HandleActionProps {\n  displayContext: DisplayContext\n  userContext: UserContext;\n}\n\nexport function handleActions(actions: Array<DocAction>, props: HandleActionProps) {\n  if (props.displayContext) {\n    props.displayContext.setFocusedBookmarkUid(null);\n  }\n\n  const stateActions = actions.filter((action) => {\n    return (STATE_ACTIONS.indexOf(action.action) >= 0);\n  });\n\n  const newStates = stateActions.reduce((acc, action) => {\n    switch (action.action) {\n      case \"setNodeInactive\":\n        return (mergeStates(acc, {\n          [action.arguments.uid]: {\n            inactive: action.arguments.value,\n          },\n        }));\n      case \"setNodeInvisible\":\n        return (mergeStates(acc, {\n          [action.arguments.uid]: {\n            invisible: action.arguments.value,\n          },\n        }));\n      case \"cmeRedirect\":\n        window.location.href = \"/users/cme_redirect\";\n\n        return (1);\n      case \"setNodeKVPair\":\n        return (mergeStates(acc, {\n          [action.arguments.uid]: {\n            [action.arguments.key]: action.arguments.value,\n          },\n        }));\n      case \"startTimer\":\n        return (mergeStates(acc, {\n          [action.arguments.uid]: {\n            currentTimeSegmentStart: Math.floor(new Date().getTime() / 1000),\n          },\n        }));\n      default:\n        Rollbar.warning(`handleActions does not recognize Callback Action of type ${action.action}`);\n    }\n  }, {});\n\n\n  const callbackActions = actions.filter((action) => {\n    return (CALLBACK_ACTIONS.indexOf(action.action) >= 0);\n  });\n\n  const callbacks = callbackActions.map((action) => {\n    switch (action.action) {\n      case \"scrollTo\":\n        return () => {\n          setTimeout(()=> {\n            const el = document.getElementsByClassName(action.arguments.uid)[0];\n            if (el) {\n              window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 125);\n            }\n          }, 100);\n        };\n      default:\n        Rollbar.warning(`handleActions does not recognize Callback Action of type ${action.action}`);\n    }\n  }).filter((callback): callback is () => void => !!callback);\n\n  props.userContext.addState(newStates, () => {\n    callbacks.forEach((callback) => callback());\n  });\n\n  const otherActions = actions.filter((action) => {\n    return ((STATE_ACTIONS.concat(CALLBACK_ACTIONS)).indexOf(action.action) < 0);\n  });\n\n  otherActions.forEach((action) => {\n    switch (action.action) {\n      case \"openExternalLink\":\n        window.window.open(action.arguments.url,\"_blank\");\n        break;\n      case \"openInternalLink\":\n        window.window.open(full_url(action.arguments.path), \"_blank\");\n        break;\n      case \"submitExam\":\n        props.userContext.submitExam(\"Your exam has been successfully submitted\");\n        break;\n      default:\n        Rollbar.warning(`handleActions does not recognize Other Action of type ${action.action}`);\n    }\n  });\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport analyticsModule from \"../../../../application/analytics.js\";\n\ninterface DocButtonProps extends DocButtonType<InlineNode>, BlockNodeAll {}\n\nfunction DocButton(props: DocButtonProps) {\n  const onClick = () => {\n    if (!props.inactiveBool) {\n      handleActions(props.onClick, props);\n      if (props.title == 'Submit') {\n        const caseName = props.documentContext.title\n        analyticsModule.track('complete_saqs', { page: window.location.href, source: 'Case', case: caseName});\n      }\n    }\n  };\n\n  if(props.classes?.includes(\"case_summary_button\")) {\n    return <></>;\n  }\n\n  if(props.classes?.includes(\"finish_case_button\")) {\n    // TODO FIX: hangeActions should not be called in render!!!\n    handleActions(props.onClick, props);\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-button-slice\", props.uid, {inactive: props.inactiveBool})}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    >\n      <button className=\"doc-button\" onClick={onClick}>\n        <DocStyledText\n          uid={props.uid}\n          content={props.title}\n          contentKey={\"title\"}\n          editingContext={props.editingContext}\n          readOnly\n          disableStyleTextEditing={props.disableStyleTextEditing}\n        />\n      </button>\n    </div>\n  );\n}\n\nexport default React.memo(DocButton);\n","import * as React from \"react\";\n\ninterface DocGradedFeedbackBannerProps {\n  type: \"correct\" | \"partial\" | \"incorrect\" | \"no-single-answer\" | \"no-grade\";\n}\n\nexport default function DocGradedFeedbackBanner(props: DocGradedFeedbackBannerProps) {\n  switch (props.type) {\n    case \"correct\":\n      return (\n        <div className=\"doc-graded-feedback-banner correct\">\n          <span className=\"doc-graded-feedback-banner-icon icon-star\"></span>\n          <span className=\"doc-graded-feedback-banner-text\">CORRECT</span>\n        </div>\n      );\n    case \"partial\":\n      return (\n        <div className=\"doc-graded-feedback-banner partial\">\n          <span className=\"doc-graded-feedback-banner-icon icon-warning\"></span>\n          <span className=\"doc-graded-feedback-banner-text\">PARTIALLY CORRECT</span>\n        </div>\n      );\n    case \"incorrect\":\n      return (\n        <div className=\"doc-graded-feedback-banner incorrect\">\n          <span className=\"doc-graded-feedback-banner-icon icon-warning\"></span>\n          <span className=\"doc-graded-feedback-banner-text\">INCORRECT</span>\n        </div>\n      );\n    case \"no-single-answer\":\n      return (\n        <div className=\"doc-graded-feedback-banner no-single-answer\">\n          <span className=\"doc-graded-feedback-banner-icon icon-star\"></span>\n          <span className=\"doc-graded-feedback-banner-text\">THERE IS NO SINGLE BEST ANSWER</span>\n        </div>\n      );\n    case \"no-grade\":\n    default:\n      return (\n        <div className=\"doc-graded-feedback-banner not-graded\">\n          <span className=\"doc-graded-feedback-banner-icon icon-star\"></span>\n          <span className=\"doc-graded-feedback-banner-text\">NOT GRADED</span>\n        </div>\n      );\n  }\n}\n","import * as React from \"react\";\n\nimport {\n  filter,\n  includes,\n  keys,\n  mapValues,\n  pickBy,\n} from \"lodash\";\n\nimport * as classNames from \"classnames\";\n\nimport DocGradedFeedbackBanner from \"./CategoryMatcher/GradedFeedbackBanner\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { newSetKeyValueChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport * as DocConvertPlainText from \"../../../helpers/Doc/Convert/PlainText\";\n\nconst addItemToCategory = (mapping: Record<string, Array<string>>, categoryUID: string, itemUID: string) => {\n  let newMapping = {...mapping};\n\n  newMapping = mapValues(newMapping, (categoryArray) => {\n    return filter(categoryArray, (itemUid) => itemUID !== itemUid);\n  });\n\n  if (newMapping[categoryUID]) {\n    newMapping[categoryUID] = newMapping[categoryUID].concat(itemUID);\n  } else {\n    newMapping[categoryUID] = [itemUID];\n  }\n\n  return newMapping;\n};\n\ninterface DocCategoryMatcherProps extends DocCategoryMatcherType<InlineNode>, BlockNodeAll {}\n\nfunction DocCategoryMatcher(props: DocCategoryMatcherProps) {\n  const {\n    uid,\n    answer,\n    contentCategories,\n    contentItems,\n    inactiveBool,\n    graded,\n  } = props;\n\n  const value = props.value || {};\n\n  const contentItemsExpanded = contentItems.map((contentItem) => {\n    const categoryItemValue = keys(\n      pickBy(\n        value,\n        (contentItemArray) => includes(contentItemArray, contentItem.uid),\n      ),\n    )[0] || \"default\";\n\n    const categoryItemAnswer = keys(\n      pickBy(\n        answer,\n        (contentItemArray) => includes(contentItemArray, contentItem.uid),\n      ),\n    )[0];\n\n    const isCorrect = categoryItemValue === categoryItemAnswer;\n\n    return ({\n      ...contentItem,\n      categoryItemValue,\n      categoryItemAnswer,\n      isCorrect,\n    });\n  });\n\n  const rows = contentItemsExpanded.map((contentItem, index) => {\n    const includeInAllNodes = {\n      key: contentItem.uid,\n      documentContext: props.documentContext,\n      currentVersion: props.currentVersion,\n      editingContext: props.editingContext,\n      userContext: props.userContext,\n    };\n\n    const selectOptions = contentCategories.map((contentCategory) => {\n      return (\n        <option value={contentCategory.uid} key={contentCategory.uid}>\n          {DocConvertPlainText.fromAnyType(contentCategory.content)}\n        </option>\n      );\n    });\n\n    const addDocumentUserState = (event: React.ChangeEvent<HTMLSelectElement>) => {\n      const newValue = addItemToCategory(value, event.target.value, contentItem.uid);\n\n      props.userContext.addState({[uid]: {value: newValue}});\n    };\n\n    const updateAnswer = (event: React.ChangeEvent<HTMLSelectElement>) => {\n      const {\n        editingContext,\n      } = props;\n\n      const newAnswer = addItemToCategory(props.answer, event.target.value, contentItem.uid);\n\n      if (editingContext.isEditing === true) {\n        editingContext.addChange(newSetKeyValueChange(uid, \"answer\", newAnswer));\n      }\n      event.stopPropagation();\n    };\n\n    const answer = filter(contentCategories, (contentCategory) => {\n      return (contentCategory.uid === contentItem.categoryItemAnswer);\n    })[0];\n\n    return (\n      <div\n        key={contentItem.uid}\n        id={contentItem.uid}\n        className={classNames(\"doc-category-matcher-row\", uid)}\n        style={backgroundStyleFromNode({...includeInAllNodes, ...contentItem})}\n      >\n        <span>\n          <DocStyledText\n            uid={contentItem.uid}\n            content={contentItem.content}\n            contentKey={\"content\"}\n            editingContext={props.editingContext}\n            placeholder={\"Enter question text here (use the Return key to add more questions)\"}\n            independentlyEditable\n            disableStyleTextEditing={props.disableStyleTextEditing}\n          />\n        </span>\n        <select value={contentItem.categoryItemValue} onChange={addDocumentUserState} disabled={inactiveBool}>\n          <option disabled value=\"default\" key=\"default\"> -- select an option -- </option>\n          {selectOptions}\n        </select>\n        {\n          props.editingContext.isEditing\n          && <div key=\"correct-answer\">Correct Answer:\n            <select value={contentItem.categoryItemAnswer} onChange={updateAnswer}>\n              <option disabled value=\"default\" key=\"default\"> -- select an option -- </option>\n              {selectOptions}\n            </select>\n          </div>\n        }\n        {\n          graded\n          && <span className={classNames(\"doc-category-matcher-row-answer\", {correct: contentItem.isCorrect, incorrect: !contentItem.isCorrect})}>\n            {answer && DocConvertPlainText.fromAnyType(answer.content)}\n          </span>\n        }\n      </div>\n    );\n  });\n\n  let categoryRows = null;\n  if (props.editingContext.isEditing) {\n    categoryRows = contentCategories.map((contentCategory, index) => {\n      const includeInAllNodes = {\n        key: contentCategory.uid,\n        documentContext: props.documentContext,\n        currentVersion: props.currentVersion,\n        editingContext: props.editingContext,\n        userContext: props.userContext,\n      };\n\n      return (\n        <div\n          key={contentCategory.uid}\n          id={contentCategory.uid}\n          className={classNames(\"doc-category-matcher-category-row\", uid)}\n          style={backgroundStyleFromNode({...includeInAllNodes, ...contentCategory})}\n        >\n          <span>\n            <DocStyledText\n              uid={contentCategory.uid}\n              content={contentCategory.content}\n              contentKey={\"content\"}\n              editingContext={props.editingContext}\n              placeholder={\"Enter answer text here (use the Return key to add more answers)\"}\n              independentlyEditable\n              disableStyleTextEditing={props.disableStyleTextEditing}\n              returnPlainText\n            />\n          </span>\n        </div>\n      );\n    });\n\n    categoryRows = (\n      <div className=\"doc-category-matcher-category-rows\">\n        <h5>Question Options</h5>\n        {categoryRows}\n      </div>\n    );\n  }\n\n  let gradedFeedbackBanner = null;\n  if (graded) {\n    const isEachCorrect = contentItemsExpanded.map((contentItem) => {\n      return (contentItem.isCorrect);\n    });\n\n    if (isEachCorrect.reduce((a, b) => a && b)) {\n      gradedFeedbackBanner = <DocGradedFeedbackBanner type=\"correct\" />;\n    } else if (isEachCorrect.reduce((a, b) => a || b)) {\n      gradedFeedbackBanner = <DocGradedFeedbackBanner type=\"partial\" />;\n    } else {\n      gradedFeedbackBanner = <DocGradedFeedbackBanner type=\"incorrect\" />;\n    }\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-category-matcher\", uid, {inactive: inactiveBool})}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    >\n      {gradedFeedbackBanner}\n      {rows}\n      {categoryRows}\n    </div>\n  );\n}\n\nexport default React.memo(DocCategoryMatcher);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { newSetKeyValueChange, newSetKeysValuesChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport { compact, uniq } from \"lodash\";\n\nimport * as DocConvertHTML from \"../../../helpers/Doc/Convert/HTML\";\n\nimport * as DocConvertRangeInlineJSON from \"../../../helpers/Doc/Convert/RangeInlineJSON\";\nimport * as DocConvertPlainText from \"../../../helpers/Doc/Convert/PlainText\";\n\ninterface DocCDQQuestionProps extends DocCdqQuestionType<InlineNode>, BlockNodeAll {}\n\nfunction DocCDQQuestion(props: DocCDQQuestionProps) {\n  const {\n    editingContext,\n  } = props;\n\n  const classes = classNames(\"doc-cdq\", {inactive: props.inactiveBool, graded: props.graded});\n\n  const answersSelected = props.content.filter((answer) => answer.value);\n  const answersSelectedCount = answersSelected.length;\n  const answers = props.content.map((answer, index) => {\n    const answerOnClick = (e: React.MouseEvent<HTMLLIElement>) => {\n      if (editingContext.isEditing) {\n        e.stopPropagation();\n      } else {\n        let uscs = {};\n\n        if (answer.value || (props.limit === false) || !props.isExplicitLimit || (answersSelectedCount < props.limit)) {\n          uscs = {\n            [answer.uid]: {value: !answer.value},\n          };\n        } else if (props.isExplicitLimit && answersSelectedCount >= props.limit) {\n          alert(\"You have chosen the maximum number of answers for this question. In order to choose a different answer, you will first need to de-select one that you have previously chosen.\");\n        }\n\n        props.userContext.addState(uscs);\n      }\n    };\n\n    const letter = (index < 26) ? String.fromCharCode(65 + index) : String.fromCharCode(71 + index);\n\n    let answerSummary, answerEditor = null;\n    if (props.userContext.isAdmin) {\n      let answerLetter;\n      switch (answer.answer) {\n        case \"poison\":\n          answerLetter = \"P\";\n          break;\n        case true:\n          answerLetter = \"Y\";\n          break;\n        default:\n          answerLetter = \"N\";\n      }\n\n      let featureIndex;\n      if (answer.feature) {\n        featureIndex = props.cdqFeatures.map((cdqFeature) => cdqFeature.uid).indexOf(answer.feature) + 1;\n      }\n\n      answerSummary = <span>{answerLetter}{featureIndex} -&nbsp;</span>;\n\n      if (editingContext.isEditing) {\n        const cdqFeatureSelections = props.cdqFeatures.map((cdqFeature) => {\n          return (\n            <option key={cdqFeature.uid} value={cdqFeature.uid}>\n              {(typeof cdqFeature.content === \"string\") ? cdqFeature.content : DocConvertHTML.fromInlineJson(DocConvertRangeInlineJSON.toInlineJson(cdqFeature.content))}\n            </option>\n          );\n        });\n\n        answerEditor = [\n          <select key=\"doc-cdq-answer-select-list\" value={answer.feature || \"no-selection\"} className=\"doc-cdq-answer-select-list\" onChange={(event) => {\n            if (event.target.value === \"no-selection\") {\n              editingContext.addChange(newSetKeysValuesChange(answer.uid, {feature: null, answer: false}));\n            } else {\n              editingContext.addChange(newSetKeyValueChange(answer.uid, \"feature\", event.target.value));\n            }\n          }}>\n            <option key=\"no-selection\" value=\"no-selection\">--No Key Feature--</option>\n            {cdqFeatureSelections}\n          </select>,\n          <input className=\"doc-cdq-answer-select\" type=\"checkbox\" checked={answer.answer === true} onClick={(e) => {\n            if (!answer.feature) { alert(\"Select a key feature first\"); return; }\n\n            editingContext.addChange(newSetKeyValueChange(answer.uid, \"answer\", (answer.answer === true) ? false : true));\n            e.stopPropagation();\n          }} />,\n          <i key=\"doc-cdq-answer-poison\" className={classNames(\"fa fa-ban doc-cdq-answer-poison\", {\"is-poison\": answer.answer === \"poison\"})} onClick={(e) => {\n            if (!answer.feature) { alert(\"Select a key feature first\"); return; }\n\n            editingContext.addChange(newSetKeyValueChange(answer.uid, \"answer\", (answer.answer === \"poison\") ? false : \"poison\"));\n            e.stopPropagation();\n          }}></i>,\n        ];\n      }\n    }\n\n    return (\n      <li key={answer.uid} className={classNames(\"doc-cdq-answer\", {checked: answer.value})} onClick={!props.inactiveBool && answerOnClick}>\n        <div className=\"doc-cdq-answer-flex-wrapper\">\n          <span className=\"doc-cdq-answer-outer\"></span>\n          {answerSummary}\n          <span className=\"doc-cdq-answer-letter\">{`${letter}. `}</span>\n          &nbsp;\n          <span className=\"doc-cdq-answer-title\">\n            <DocStyledText\n              uid={answer.uid}\n              content={answer.content}\n              contentKey={\"content\"}\n              editingContext={editingContext}\n              independentlyEditable\n              disableStyleTextEditing={props.disableStyleTextEditing}\n            />\n          </span>\n          {answerEditor}\n        </div>\n      </li>\n    );\n  });\n\n  let limitExplinationText = null;\n  let limitExplinationTextExtra = null;\n  if (props.limit !== false) {\n    if (props.isExplicitLimit) {\n      if (props.limit === 1) {\n        limitExplinationText = `You will be able to select ${props.limit} option.`;\n      } else {\n        limitExplinationText = `You will be able to select up to ${props.limit} options.`;\n        limitExplinationTextExtra = \"Please note that this is the maximum number of responses, but not all of the responses may contribute to your score for this question.\";\n      }\n    } else {\n      limitExplinationText = \"Select as many options as are appropriate.\";\n      limitExplinationTextExtra = \"Remember to prioritize, you may lose the point for this case if you select too many responses.\";\n      if (props.userContext.isAdmin) {\n        limitExplinationTextExtra = <span><u>{`The implicit limit is ${props.limit}.`}</u> {limitExplinationText}</span>;\n      }\n    }\n  }\n\n  let limitExplinationDiv = null;\n  if (limitExplinationText) {\n    limitExplinationDiv = <p className=\"doc-cdq-limit-text\"><span className=\"doc-cdq-limit-text-main\">{limitExplinationText}</span> <span className=\"doc-cdq-limit-text-extra\">{limitExplinationTextExtra}</span></p>;\n  }\n\n  let selectedVsLimitView = null;\n  if (props.limit !== false && props.isExplicitLimit) {\n    selectedVsLimitView = (\n      <p className=\"doc-cdq-selected-count\">\n        <strong>\n          <span className=\"doc-cdq-selected-count-number\">{answersSelectedCount}</span> selected of {props.limit} maximum\n        </strong>\n      </p>\n    );\n  }\n\n  let scorePreview = null;\n  if (props.userContext.isAdmin) {\n    let score:any = 0; // TODO: Remove any\n    if (props.limit !== false && answersSelectedCount > props.limit) {\n      score = 0;\n    } else {\n      const features = uniq(compact(props.content.map((answer) => answer.feature)));\n      const featureScores = {questionScore: 0};\n      features.forEach((feature) => {\n        const cdqFeature = props.cdqFeatures.find((cdqFeature) => cdqFeature.uid === feature);\n        const cdqFeatureName =  DocConvertPlainText.fromAnyType(cdqFeature ? cdqFeature.content : feature);\n        if (props.limit !== false && answersSelectedCount > props.limit) {\n          featureScores[cdqFeatureName] = 0;\n        } else {\n          const featureAnswers = props.content.filter((answer) => {return answer.feature === feature;});\n\n          const poisonFeatureAnswers = featureAnswers.filter((answer) => {return answer.answer === \"poison\";});\n          const isPoisoned = poisonFeatureAnswers.reduce((acc, answer) => {return acc || answer.value;}, false);\n          if (isPoisoned) {\n            featureScores[cdqFeatureName] = 0;\n          } else {\n            const correctFeatureAnswers = featureAnswers.filter((answer) => {return answer.answer === true;});\n            const correctCorrectFeatureAnswers = correctFeatureAnswers.filter((answer) => answer.value);\n\n            featureScores[cdqFeatureName] = correctCorrectFeatureAnswers.length / correctFeatureAnswers.length;\n          }\n        }\n\n        featureScores.questionScore = featureScores[cdqFeatureName] + featureScores.questionScore;\n      });\n\n      featureScores.questionScore = featureScores.questionScore / features.length;\n      score = JSON.stringify(featureScores);\n    }\n    scorePreview = <p>Score Preview: {score}</p>;\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={`doc-cdq-wrapper ${props.uid}`}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    >\n      {limitExplinationDiv}\n      {selectedVsLimitView}\n      <ul className={classes}>\n        {answers}\n      </ul>\n      {scorePreview}\n    </div>\n  );\n}\n\nexport default React.memo(DocCDQQuestion);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocCheckboxProps extends DocCheckboxType<InlineNode>, BlockNodeAll {}\n\nfunction DocCheckbox(props: DocCheckboxProps) {\n  const onChanged = (e: React.ChangeEvent<HTMLInputElement>) => {\n    props.userContext.addState({\n      [props.uid]: {value: e.target.checked},\n    });\n  };\n\n  const onClick = (e: React.MouseEvent<HTMLInputElement | HTMLLabelElement>) => { e.stopPropagation(); };\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-checkbox\", props.uid, {inactive: props.inactiveBool})}\n      style={backgroundStyleFromNode(props)}\n    >\n      <input type=\"checkbox\" id={`${props.uid}_checkbox`} disabled={props.inactiveBool} checked={props.value} onChange={onChanged} onClick={onClick} />\n      <label htmlFor={`${props.uid}_checkbox`} onClick={onClick}>\n        <span className=\"doc-checkbox-outer\"><span className=\"doc-checkbox-inner\"></span></span>\n        <span className=\"doc-checkbox-title\">\n          <DocStyledText\n            uid={props.uid}\n            content={props.content}\n            contentKey={\"content\"}\n            placeholder={\"Enter Checkbox text here\"}\n            editingContext={props.editingContext}\n          />\n        </span>\n      </label>\n    </div>\n  );\n}\n\nexport default React.memo(DocCheckbox);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocHorizontalRuleProps extends DocHorizontalRuleType, BlockNodeAll {}\n\nfunction DocHorizontalRule(props: DocHorizontalRuleProps) {\n  return (\n    <hr\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-horizontal-rule\", props.uid, {\"doc-horizontal-rule-edit\": props.editingContext.isEditing})}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    />\n  );\n}\n\nexport default React.memo(DocHorizontalRule);\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport * as classNames from \"classnames\";\nimport {\n  EXPANDED_MOD_MAP_LOG,\n  OPENED_MOD_MAP_LOG,\n} from \"../../../helpers/DocumentUserLog\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\nimport GenButton from \"../../Gen/Button/component\";\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\nimport PlaceholderImage from \"images/placeholder-image.png\";\n\nconst onExpandCollapseClick = (toggleImageModal: () => void) => (e: React.MouseEvent<HTMLAnchorElement>) => {\n  e.preventDefault();\n  e.stopPropagation();\n  toggleImageModal();\n};\n\ninterface DocImageProps extends DocImageType<InlineNode>, BlockNodeAll {\n  inGallery?: boolean;\n}\n\ninterface DocImageState {\n  imageModalOn: boolean;\n}\n\nexport default class DocImage extends React.PureComponent<DocImageProps, DocImageState> {\n  constructor(props: DocImageProps) {\n    super(props);\n\n    this.state = {\n      imageModalOn: false,\n    };\n  }\n\n  openPicker(e: React.MouseEvent<HTMLAnchorElement>) {\n    const { editingContext } = this.props;\n\n    if (editingContext.isEditing) {\n      editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"image\", uid: this.props.uid });\n    }\n\n    e.stopPropagation();\n  }\n\n  toggleImageModal() {\n    if (!this.state.imageModalOn && this.props.classes?.includes(\"mod-map-image\")) {\n      this.props.userContext.logEvent(EXPANDED_MOD_MAP_LOG);\n    }\n    this.setState({ imageModalOn: !this.state.imageModalOn });\n  }\n\n  onImageExternalLinkClick(e: React.MouseEvent<HTMLAnchorElement>) {\n    e.stopPropagation();\n    if (this.props.classes?.includes(\"mod-map-image\")) {\n      this.props.userContext.logEvent(OPENED_MOD_MAP_LOG);\n    }\n    return true;\n  }\n\n  renderModalContent(imageURL: string) {\n    return (\n      <div className=\"image-modal-outer\" onClick={this.toggleImageModal.bind(this)}>\n        <div className=\"image-modal-inner doc-image\">\n          <img src={imageURL} />\n          <a title=\"Back\" href=\"#\" onClick={onExpandCollapseClick(this.toggleImageModal.bind(this))} className=\"doc-image-compress-button\">\n            <i className=\"fa fa-compress\"> </i>\n          </a>\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    let imageURL, imageExternalLink;\n    if (this.props.url) {\n      imageURL = this.props.url;\n      const asset: Partial<DigitalAsset> = this.props.mediaContext.images.find(\n        (i) => i.distribution_url === this.props.url || this.props.url.includes(i.asset_path)\n      ) || {};\n      const external_id = asset.external_identifier || this.props.url.split('/').pop()?.split('_')[0];\n      imageExternalLink = `/documents/${this.props.documentContext.id}/asset_pdf.pdf?external_id=${external_id}`;\n    } else if (this.props.uri && this.props.uri !== \"blank.jpg\") {\n      Rollbar.warning(\"Deprecated render DocImage with uri called\");\n      imageURL = this.props.currentVersion.localImageURL(this.props.uri);\n      imageExternalLink = `/documents/${this.props.documentContext.id}/image_pdf.pdf?image_name=${encodeURIComponent(this.props.uri)}`;\n    } else {\n      imageURL = PlaceholderImage;\n      imageExternalLink = \"#\";\n    }\n\n    const image = (\n      <figure\n        id={this.props.uid}\n        className={classNames(\"doc-image\", this.props.uid)}\n        contentEditable={false}\n      >\n        <div className=\"doc-image-wrapper\" onClick={this.toggleImageModal.bind(this)}>\n          <img style={backgroundStyleFromNode(this.props)} src={imageURL} />\n          <a\n            href=\"#\"\n            title=\"Larger Version\"\n            onClick={onExpandCollapseClick(this.toggleImageModal.bind(this))}\n            className=\"doc-image-expand-button\"\n          >\n            <i className=\"fa fa-expand\"></i>\n          </a>\n          <a\n            href={imageExternalLink}\n            onClick={this.onImageExternalLinkClick.bind(this)}\n            target=\"_blank\"\n            title=\"Open in New Tab\"\n            className=\"doc-image-external-link-button\"\n          >\n            <i className=\"fa fa-external-link-alt\"> </i>\n          </a>\n          {this.props.editingContext.isEditing && this.props.userContext.permissions.viewMediaAssets && (\n            <GenButton\n              key=\"picker-button\"\n              className=\"doc-image-picker-button\"\n              name={<i className=\"fa fa-image\"></i>}\n              highlighted\n              small\n              onClick={this.openPicker.bind(this)}\n            />\n          )}\n        </div>\n        <figcaption>\n          <DocStyledText\n            uid={this.props.uid}\n            content={this.props.title || \"\"}\n            contentKey={\"title\"}\n            editingContext={this.props.editingContext}\n            placeholder={\"Enter Image caption here\"}\n            independentlyEditable\n            disableStyleTextEditing={this.props.disableStyleTextEditing}\n          />\n        </figcaption>\n        {this.state.imageModalOn &&\n          ReactDOM.createPortal(this.renderModalContent(imageURL), document.body)}\n      </figure>\n    );\n\n    if (this.props.inGallery) {\n      return image;\n    } else {\n      return (\n        <>\n          <span></span>\n          <div\n            data-is-node\n            data-uid={this.props.uid}\n            className={classNames(\"doc-image-single\", this.props.uid, {\n              [`doc-image-alignment-${this.props.alignment}`]: this.props.alignment,\n              \"focused-bookmark\": this.props.isFocusedBookmark && !this.props.simple,\n            })}\n            contentEditable={false}\n          >\n            {image}\n            {!this.props.simple && <DocBookmark {...this.props} />}\n            {!this.props.simple && <DocNote {...this.props} />}\n          </div>\n          <span></span>\n        </>\n      );\n    }\n  }\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { range, compact, flatten, zip } from \"lodash\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocImage from \"./Image\";\nimport Carousel from 'react-grid-carousel'\nimport { newAddNodeChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport EmptyImageGalleryImage from \"images/EmptyImageGallery.png\";\n\ninterface DocImageGalleryProps extends DocImageGalleryType<InlineNode>, BlockNodeAll {};\n\nfunction DocImageGallery(props: DocImageGalleryProps) {\n  const {\n    currentVersion,\n    displayContext,\n    documentContext,\n    editingContext,\n    featureFlag,\n    images,\n    mediaContext,\n    uid,\n    userContext,\n  } = props;\n\n  let isEditing = editingContext.isEditing\n  let renderedImages = images.map((image, index) => {\n    const includeInAllNodes = {\n      key: image.uid,\n      documentContext: documentContext,\n      currentVersion: currentVersion,\n      editingContext: editingContext,\n      userContext: userContext,\n      mediaContext: mediaContext,\n      displayContext: displayContext,\n      featureFlag: featureFlag,\n    };\n\n    return (\n      <div className=\"doc-image-gallery-slide\" key={`doc-image-gallery-image-${image.uid}`}>\n        <DocImage\n          {...image}\n          {...includeInAllNodes}\n          inGallery\n          simple\n        />\n      </div>\n    );\n  });\n\n  if (editingContext.isEditing) {\n    if (renderedImages.length === 0) {\n      renderedImages = [\n        <div className=\"doc-image-gallery-slide\" key=\"doc-image-gallery-image-0\">\n          <img\n            src={EmptyImageGalleryImage}\n            className=\"doc-image-gallery-empty-image\"\n            onClick={() => {\n              editingContext.clearCurrentDocSelection();\n              editingContext.setCurrentDocSelection({start: {uid: uid, index: 0}, end: {uid: uid, index: 0}})\n            }}\n          />\n        </div>\n      ]\n    }\n\n    const addImageButtons = range(0, renderedImages.length + 1).map((imageIndex) => {\n      return (\n        <div\n          key={`doc-image-gallery-add-image-${imageIndex}`}\n          className=\"doc-image-gallery-slide add-image-button\"\n        >\n          <div\n            key=\"doc-image-gallery-add-image\"\n            className=\"doc-image-gallery-add-image\"\n            onClick={() => {\n              const newNode = editingContext.nodeDefinitions[\"image\"].generate(editingContext.nodeDefinitions, {});\n              editingContext.addChange(newAddNodeChange(newNode, uid, \"images\", imageIndex));\n            }}\n          ><i className=\"fa fa-plus\"></i></div>\n        </div>\n      );\n    });\n\n    renderedImages = compact(flatten(zip(addImageButtons, renderedImages)));\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-image-gallery\", uid)}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    >\n      <div className=\"doc-image-gallery-scroller\">\n        <Carousel cols={1} rows={1} showDots loop>\n          {renderedImages.map((image, index) => (\n            renderedImages[index].props.className.indexOf(\"add-image-button\") === -1 &&\n            <Carousel.Item key={index}>\n              { isEditing &&\n                <div className=\"doc-image-gallery-add-image-buttons-container\">\n                  {renderedImages[index-1]}\n                  {renderedImages[index+1]}\n                </div>\n              }\n              {renderedImages[index]}\n            </Carousel.Item>\n          ))}\n        </Carousel>\n      </div>\n      <DocBookmark {...props} />\n      <DocNote {...props} />\n    </div>\n  );\n}\n\nexport default React.memo(DocImageGallery);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport AqButton from '../../Aq/Button';\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport editGradientSmall from 'app/assets/images/edit_gradient_small.svg';\n\ninterface DocLearningObjectiveProps extends DocLearningObjectiveType<InlineNode>, BlockNodeAll {\n  variantId?: number;\n}\n\nfunction DocLearningObjective(props: DocLearningObjectiveProps) {\n  const {\n    uid,\n    classes,\n    content,\n    editingContext,\n    variantId,\n  } = props;\n\n  let handleClick;\n  let readOnly = true;\n  let editButton;\n  if (editingContext.isEditing) {\n    if (editingContext.allowLearningObjectivesEdit === uid) {\n      readOnly = false;\n    } else {\n      handleClick = () => { editingContext.setCurrentMenu(\"LEARNING_OBJECTIVES_CONFIRM_EDIT\", {learningObjectiveUid: uid}) }\n\n      editButton = (\n        <AqButton\n          className=\"learning-objective-edit-button pink outline small\"\n          onClick={handleClick}\n        >\n          <img src={editGradientSmall} style={{height: '12px'}}></img>\n        </AqButton>\n      )\n    }\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-learning-objective\", uid, classes, {\"locked-lo\": editingContext.isEditing && readOnly})}\n      contentEditable={false}\n      onClick={handleClick}\n    >\n      <div className=\"learning-objective-arrow\"/>\n      {editButton}\n      <div className=\"learning-objective-content\">\n        <DocStyledText\n          uid={uid}\n          content={content}\n          contentKey={\"content\"}\n          placeholder={\"Enter Learning Objective here\"}\n          editingContext={editingContext}\n          independentlyEditable\n          variantId={variantId}\n          readOnly={readOnly}\n        />\n      </div>\n    </div>\n  );\n}\n\nexport default React.memo(DocLearningObjective);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBlockNodes from \"../BlockNodes\";\n\ninterface DocLearningObjectivesListProps extends DocLearningObjectivesListType<InlineNode>, BlockNodeAll {}\n\nfunction DocLearningObjectivesList(props: DocLearningObjectivesListProps) {\n  const {\n    uid,\n    classes,\n    content,\n  } = props;\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-learning-objectives-list\", uid, classes)}\n      contentEditable={false}\n      style={{marginBottom: '10px'}}\n    >\n      <p>Upon completion of this module, the learner should be able to:</p>\n\n      <DocBlockNodes\n        {...props}\n        content={content}\n        contentKey=\"content\"\n        independentlyEditable\n        simple\n        shouldHaveAddNodes={false}\n      />\n    </div>\n  );\n}\n\nexport default React.memo(DocLearningObjectivesList);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../../helpers/Doc/changes\";\nimport { isInlineNode } from \"../../../../helpers/Doc/Functions/Inline\";\n\nimport DocStyledText from \"../../BlockNodeHelpers/StyledText\";\nimport DocBlockNodes from \"../../BlockNodes\";\n\ninterface DocListItemProps extends DocListItemType<InlineNode>, BlockNodeAll {}\n\nfunction DocListItem(props: DocListItemProps) {\n  if (isInlineNode(props.content)) {\n    return (\n      <li\n        id={props.uid}\n        data-is-node\n        data-uid={props.uid}\n        className={classNames(\"doc-list-item\", props.uid)}\n      >\n        <DocStyledText\n          uid={props.uid}\n          content={props.content}\n          contentKey={\"content\"}\n          editingContext={props.editingContext}\n          placeholder={\"Enter List Item text here\"}\n        />\n      </li>\n    );\n  } else {\n    return (\n      <li\n        id={props.uid}\n        data-is-node\n        data-uid={props.uid}\n        className={classNames(\"doc-list-item\", props.uid)}\n        style={backgroundStyleFromNode(props)}\n      >\n        <ChangeHighlightListItemMark\n          blockChangeHighlight={props.blockChangeHighlight}\n          editingContext={props.editingContext}\n        />\n        <DocBlockNodes\n          {...props}\n          content={props.content}\n          contentKey=\"content\"\n          simple\n        />\n      </li>\n    );\n  }\n}\n\ninterface ChangeHighlightListItemMarkProps {\n  blockChangeHighlight?: BlockChangeHighlight;\n  editingContext: EditingContext;\n}\n\nfunction ChangeHighlightListItemMark(props: ChangeHighlightListItemMarkProps) {\n  const {\n    blockChangeHighlight,\n    editingContext,\n  } = props;\n\n  switch (blockChangeHighlight?.type) {\n    case \"DELETE_CONTENT\":\n      return (\n        <span\n          className=\"doc-list-item-mark\"\n          style={{\n            textDecorationColor: `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})`,\n            textDecoration: \"line-through\",\n          }}\n        >\n          &nbsp;&nbsp;&nbsp;&nbsp;\n        </span>\n      );\n    case \"ADD_CONTENT\":\n      return (\n        <span\n          className=\"doc-list-item-mark\"\n          style={{\n            color: `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})`,\n            textDecoration: \"underline\",\n          }}\n        >\n          &nbsp;&nbsp;&nbsp;&nbsp;\n        </span>\n      );\n    default:\n      return null;\n  }\n}\n\n\nexport default React.memo(DocListItem);\n","import {isRangeInlineJSON} from \"./RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"./TreeInlineJSON\";\n\nexport function isInlineNode(possibleInlineContent): possibleInlineContent is InlineNode {\n  return typeof possibleInlineContent === \"string\"\n    || isTreeInlineJSON(possibleInlineContent)\n    || isRangeInlineJSON(possibleInlineContent);\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocListItem from \"./List/ListItem\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocListProps extends DocListType<InlineNode>, BlockNodeAll {};\n\nfunction DocList(props: DocListProps) {\n  const listItems = props.content.map((listItem, index) => {\n    return (\n      <DocListItem\n        {...listItem}\n        key={listItem.uid}\n        simple={props.simple}\n        documentContext={props.documentContext}\n        currentVersion={props.currentVersion}\n        editingContext={props.editingContext}\n        userContext={props.userContext}\n        displayContext={props.displayContext}\n      />\n    );\n  });\n\n  switch (props.type) {\n    case \"numberedList\":\n      return (\n        <ol\n          id={props.uid}\n          data-is-node\n          data-uid={props.uid}\n          className={classNames(props.simple ? \"doc-numbered-list-simple\" : \"doc-numbered-list\", props.uid, props.classes, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n          style={backgroundStyleFromNode(props)}\n        >\n          {listItems}\n          {!props.simple && <DocBookmark {...props} />}\n          {!props.simple && <DocNote {...props} />}\n        </ol>\n      );\n    case \"regularList\":\n    default:\n      return (\n        <ul\n          id={props.uid}\n          data-is-node\n          data-uid={props.uid}\n          className={classNames(props.simple ? \"doc-regular-list-simple\" : \"doc-regular-list\", props.uid, props.classes, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n          style={backgroundStyleFromNode(props)}\n        >\n          {listItems}\n          {!props.simple && <DocBookmark {...props} />}\n          {!props.simple && <DocNote {...props} />}\n        </ul>\n      );\n  }\n}\n\nexport default React.memo(DocList);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { newSetKeyValueChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocMultipleChoiceProps extends DocMultipleChoiceType<InlineNode>, BlockNodeAll {};\n\nfunction DocMultipleChoice(props: DocMultipleChoiceProps) {\n  const {\n    editingContext,\n  } = props;\n\n  const classes = classNames(\"doc-multiple-choice\", {inactive: props.inactiveBool, graded: props.graded});\n\n  const answers = props.content.map((answer, index) => {\n    const includeInAllNodes = {\n      key: answer.uid,\n      simple: true,\n      documentContext: props.documentContext,\n      currentVersion: props.currentVersion,\n      editingContext: editingContext,\n      userContext: props.userContext,\n    };\n\n    const answerOnClick = () => {\n      if (!props.inactiveBool) {\n        let uscs = {\n          [answer.uid]: {value: !answer.value},\n        };\n\n        if (!props.multipleSelect) {\n          const newUscs = props.content.filter( (ans) => {\n            return (ans.value && (ans.uid !== answer.uid));\n          }).reduce((acc, ans) => {\n            return ({ ...acc,\n              [ans.uid]: {value: false},\n            });\n          }, {});\n\n          uscs = {...uscs, ...newUscs};\n        }\n\n        props.userContext.addState(uscs);\n      }\n    };\n\n    let gradedInfo = null;\n    if (props.graded) {\n      gradedInfo = (\n        <div className=\"doc-multiple-choice-answer-graded-info\">\n          {answer.answer && <span className={classNames(\"icon-check-circle\", \"correct\")}></span>}\n        </div>\n      );\n    }\n\n    return (\n      <li\n        key={answer.uid}\n        id={answer.uid}\n        className={classNames(\"doc-multiple-choice-answer\", answer.uid, {checked: answer.value})}\n        onClick={answerOnClick}\n        style={backgroundStyleFromNode({...includeInAllNodes, ...answer})}\n      >\n        {editingContext.isEditing && <input type=\"checkbox\" defaultChecked={answer.answer} onClick={(e) => {\n          editingContext.addChange(newSetKeyValueChange(answer.uid, \"answer\", !answer.answer));\n          e.stopPropagation();\n        }} />}\n        {gradedInfo}\n        <span className=\"doc-multiple-choice-answer-outer\"></span>\n        <span className=\"doc-multiple-choice-answer-title\">\n          <DocStyledText\n            uid={answer.uid}\n            content={answer.content}\n            contentKey={\"content\"}\n            placeholder={\"Enter Multiple Choice text here\"}\n            editingContext={editingContext}\n            independentlyEditable\n            disableStyleTextEditing={props.disableStyleTextEditing}\n          />\n        </span>\n      </li>\n    );\n  });\n\n\n  let gradedFeedback = null;\n  if (props.graded) {\n    const isAllYes = props.content.map((answer) => {\n      return (answer.answer);\n    }).reduce((a, b) => a && b);\n\n    const isAllNo = props.content.map((answer) => {\n      return (!answer.answer);\n    }).reduce((a, b) => a && b);\n\n    const isEachCorrect = props.content.filter((answer) => {\n      return (answer.value || answer.answer);\n    }).map((answer) => {\n      return (answer.value === answer.answer);\n    });\n\n    const isSingleCorrect = (props.content.map((answer) => {\n      return (answer.answer);\n    }).filter((x) => x).length === 1);\n\n    if (isAllNo) {\n      gradedFeedback = <p key=\"graded-feedback-no-single-best\" className=\"graded-feedback\">There is no single best answer.</p>;\n    } else if (isSingleCorrect) {\n      gradedFeedback = <p key=\"graded-feedback-one-option\" className=\"graded-feedback\">The best option is indicated below. Your selections are indicated by the shaded boxes.</p>;\n    } else {\n      gradedFeedback = <p key=\"graded-feedback-multiple-options\" className=\"graded-feedback\">The best options are indicated below. Your selections are indicated by the shaded boxes.</p>;\n    }\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-multiple-choice-wrapper\", props.uid)}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    >\n      {gradedFeedback}\n      <ul className={classes}>\n        {answers}\n      </ul>\n    </div>\n  );\n}\n\nexport default React.memo(DocMultipleChoice);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocParagraphProps extends DocParagraphType<InlineNode>, BlockNodeAll {}\n\nfunction DocParagraph(props: DocParagraphProps) {\n  return (\n    <p\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames({\"focused-bookmark\": props.isFocusedBookmark && !props.simple}, props.simple ? \"doc-paragraph-simple\" : \"doc-paragraph\", props.uid, props.classes)}\n      style={backgroundStyleFromNode(props)}\n    >\n      <ChangeHighlightParagraphMark\n        blockChangeHighlight={props.blockChangeHighlight}\n        editingContext={props.editingContext}\n      />\n      <DocStyledText\n        uid={props.uid}\n        content={props.content}\n        contentKey={\"content\"}\n        placeholder={\"Enter Paragraph text here\"}\n        editingContext={props.editingContext}\n        documentContext={props.documentContext}\n      />\n      {!props.simple && <DocBookmark {...props} />}\n      {!props.simple && <DocNote {...props} />}\n    </p>\n  )\n}\n\ninterface ChangeHighlightParagraphProps {\n  blockChangeHighlight?: BlockChangeHighlight;\n  editingContext: EditingContext;\n}\n\nfunction ChangeHighlightParagraphMark(props: ChangeHighlightParagraphProps) {\n  const {\n    blockChangeHighlight,\n    editingContext,\n  } = props;\n\n  let textColor = \"\"\n  switch (blockChangeHighlight?.type) {\n    case \"DELETE_CONTENT\":\n      textColor = editingContext.hasOwnProperty(\"colorLookup\") ? `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})` : `rgb(255,0,0))`\n      return (\n        <span\n          className=\"doc-paragraph-mark\"\n          style={{\n            textDecorationColor: textColor,\n            textDecoration: \"line-through\",\n            fontWeight: \"bold\",\n          }}\n        >\n          &nbsp;&para;&nbsp;\n        </span>\n      );\n    case \"ADD_CONTENT\":\n      textColor = editingContext.hasOwnProperty(\"colorLookup\") ? `rgb(${editingContext.colorLookup[blockChangeHighlight.author_id]})` : `rgb(255,0,0))`\n      return (\n        <span\n          className=\"doc-paragraph-mark\"\n          style={{\n            color: textColor,\n            textDecoration: \"underline\",\n            fontWeight: \"bold\",\n          }}\n        >\n          &nbsp;&para;&nbsp;\n        </span>\n      );\n    default:\n      return null;\n  }\n}\n\nexport default React.memo(DocParagraph);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocRatingBarProps extends DocRatingBarType, BlockNodeAll {};\n\nfunction DocRatingBar(props: DocRatingBarProps) {\n  const onClick = (clickValue: number, e: React.MouseEvent<HTMLSpanElement>) => {\n    e.stopPropagation();\n\n    if (props.inactiveBool) { return; }\n\n    const allActions = (props.onClick || []);\n    allActions.push({\n      type: \"action\",\n      action: \"setNodeKVPair\",\n      arguments: {\n        uid: props.uid,\n        key: \"value\",\n        value: props.maxValue - clickValue,\n      },\n    });\n\n    handleActions(allActions, props);\n  };\n\n  const stars = [];\n  for (let i = 0; i < props.maxValue; i += 1) {\n    const className = classNames(\"doc-rating-bar-star\", {\"doc-rating-bar-star-active\": (i >= props.maxValue - props.value)});\n    stars.push(<span className={className} key={i} onClick={(e) => onClick(i, e)}>☆</span>);\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-rating-bar\", props.uid, {inactive: props.inactiveBool})}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    >\n      {stars}\n    </div>\n  );\n}\n\nexport default React.memo(DocRatingBar);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBlockNodes from \"../../BlockNodes\";\n\nimport {\n  newMergeTableCells,\n  newUnmergeTableCells,\n} from \"../../../../helpers/Doc/changes\";\n\ninterface DocTableCellProps extends DocTableCellType<InlineNode>, BlockNodeAll {\n  columnIndex: number;\n  rowIndex: number;\n  firstColumn: boolean;\n  firstRow: boolean;\n  parentTableUID: string;\n}\n\nfunction DocTableCell(props: DocTableCellProps) {\n  const {\n    editingContext,\n    rowSpan = 1,\n    columnSpan = 1,\n  } = props\n\n  return (\n    <td\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-table-cell\", props.uid)}\n      rowSpan={rowSpan}\n      colSpan={columnSpan}\n    >\n      <DocBlockNodes\n        {...props}\n        content={props.content}\n        contentKey=\"content\"\n        independentlyEditable\n        simple\n        shouldHaveAddNodes={editingContext.isEditing}\n      />\n      {(rowSpan > 1 || columnSpan > 1) && editingContext.isEditing &&\n        <div\n          key=\"doc-table-cell-unmerge-cell\"\n          className=\"doc-table-cell-unmerge-cell no-document-selection\"\n          onClick={() => {\n            const rowRange = { start: props.rowIndex, end: props.rowIndex + rowSpan - 1 };\n            const columnRange = { start: props.columnIndex, end: props.columnIndex + columnSpan - 1 };\n\n            editingContext.clearCurrentDocSelection();\n            editingContext.addChange(newUnmergeTableCells(props.parentTableUID, rowRange, columnRange));\n          }}\n        ><i className=\"fa fa-columns\"></i></div>\n      }\n      {!props.firstColumn && editingContext.isEditing &&\n        <div\n          key=\"doc-table-cell-merge-row-cell\"\n          className=\"doc-table-cell-merge-row-cell no-document-selection\"\n          onClick={() => {\n            const rowRange = { start: props.rowIndex, end: props.rowIndex };\n            const columnRange = { start: props.columnIndex - 1, end: props.columnIndex };\n\n            editingContext.clearCurrentDocSelection();\n            editingContext.addChange(newMergeTableCells(props.parentTableUID, rowRange, columnRange));\n          }}\n        ><i className=\"fa fa-times\"></i></div>\n      }\n      {!props.firstRow && editingContext.isEditing &&\n        <div\n          key=\"doc-table-cell-merge-column-cell\"\n          className=\"doc-table-cell-merge-column-cell no-document-selection\"\n          onClick={() => {\n            const rowRange = { start: props.rowIndex - 1, end: props.rowIndex };\n            const columnRange = { start: props.columnIndex, end: props.columnIndex };\n\n            editingContext.clearCurrentDocSelection();\n            editingContext.addChange(newMergeTableCells(props.parentTableUID, rowRange, columnRange));\n          }}\n        ><i className=\"fa fa-times\"></i></div>\n      }\n    </td>\n  );\n}\n\nDocTableCell.defaultProps = {\n  rowSpan: 1,\n  columnSpan: 1,\n};\n\nexport default React.memo(DocTableCell);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocTableCell from \"../Table/Cell\";\n\nimport {\n  newAddTableRowChange,\n  newDeleteTableRowChange,\n  backgroundStyleFromNode\n} from \"../../../../helpers/Doc/changes\";\n\ninterface DocTableRowProps extends DocTableRowType<InlineNode>, BlockNodeAll {\n  firstRow: boolean;\n  index: number;\n  parentTableUID: string;\n}\n\nfunction DocTableRow(props: DocTableRowProps) {\n  const {\n    editingContext,\n  } = props;\n\n  const cells = props.cells.map((cell, index) => {\n    return (\n      <DocTableCell\n        key={cell.uid}\n        {...cell}\n        documentContext={props.documentContext}\n        currentVersion={props.currentVersion}\n        editingContext={editingContext}\n        userContext={props.userContext}\n        displayContext={props.displayContext}\n        parentTableUID={props.parentTableUID}\n        featureFlag={props.featureFlag}\n        mediaContext={props.mediaContext}\n        firstRow={props.firstRow}\n        firstColumn={index === 0}\n        disableStyleTextEditing={props.disableStyleTextEditing}\n      />\n    );\n  });\n\n  if (editingContext.isEditing) {\n    cells.unshift(\n      <td className=\"doc-table-edit-row-cell\" key=\"doc-table-edit-row-cell\">\n        <div\n          key=\"doc-table-cell-add-row-after\"\n          className=\"doc-table-cell-add-row-after no-document-selection\"\n          onClick={() => {\n            editingContext.clearCurrentDocSelection();\n            editingContext.addChange(newAddTableRowChange(props.parentTableUID, props.index + 1));\n          }}\n        ><i className=\"fa fa-plus\"></i></div>\n        <div\n          key=\"doc-table-cell-remove-row\"\n          className=\"doc-table-cell-remove-row no-document-selection\"\n          onClick={() => {\n            editingContext.clearCurrentDocSelection();\n            editingContext.addChange(newDeleteTableRowChange(props.parentTableUID, props.index));\n          }}\n        ><i className=\"fa fa-times\"></i></div>\n      </td>\n    );\n  }\n\n  return (\n    <tr\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-table-row\", props.uid)}\n      style={backgroundStyleFromNode(props)}\n    >\n      {cells}\n    </tr>\n  );\n}\n\nexport default React.memo(DocTableRow);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocTableRow from \"./Table/Row\";\n\nimport { newAddTableRowChange, newAddTableColumnChange, newDeleteTableColumnChange, backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\ninterface DocTableProps extends DocTableType<InlineNode>, BlockNodeAll {\n  relevantColumnIndices: Array<number>;\n};\n\nfunction DocTable(props: DocTableProps) {\n  const {\n    editingContext,\n  } = props;\n\n  const rows = props.rows.map((row, index) => {\n    return (\n      <DocTableRow\n        key={row.uid}\n        {...row}\n        documentContext={props.documentContext}\n        currentVersion={props.currentVersion}\n        editingContext={editingContext}\n        userContext={props.userContext}\n        displayContext={props.displayContext}\n        parentTableUID={props.uid}\n        firstRow={index === 0}\n        disableStyleTextEditing={props.disableStyleTextEditing}\n        featureFlag={props.featureFlag}\n        mediaContext={props.mediaContext}\n      />\n    );\n  });\n\n  if (editingContext.isEditing) {\n    const editCells = [0].concat(props.relevantColumnIndices.map((index) => index + 1)).map((editColumnIndex) => {\n      const addColumnAfterButton = (\n        <div\n          key=\"doc-table-cell-add-column-after\"\n          className=\"doc-table-cell-add-column-after no-document-selection\"\n          onClick={() => {\n            editingContext.clearCurrentDocSelection();\n            editingContext.addChange(newAddTableColumnChange(props.uid, editColumnIndex));\n          }}\n        ><i className=\"fa fa-plus\"></i></div>\n      );\n\n      if (editColumnIndex === 0) {\n        return (\n          <td key={editColumnIndex} className=\"doc-table-edit-column-cell doc-table-edit-row-cell\">\n            {addColumnAfterButton}\n            <div\n              key=\"doc-table-cell-add-row-after\"\n              className=\"doc-table-cell-add-row-after no-document-selection\"\n              onClick={() => {\n                editingContext.clearCurrentDocSelection();\n                editingContext.addChange(newAddTableRowChange(props.uid, 0));\n              }}\n            ><i className=\"fa fa-plus\"></i></div>\n          </td>\n        );\n      } else {\n        return (\n          <td key={editColumnIndex} className=\"doc-table-edit-column-cell\">\n            {addColumnAfterButton}\n            <div\n              key=\"doc-table-cell-remove-column\"\n              className=\"doc-table-cell-remove-column no-document-selection\"\n              onClick={() => {\n                editingContext.clearCurrentDocSelection();\n                editingContext.addChange(newDeleteTableColumnChange(props.uid, editColumnIndex - 1));\n              }}\n            ><i className=\"fa fa-times\"></i></div>\n          </td>\n        );\n      }\n    });\n\n    rows.unshift(<tr key=\"edit-row\">\n      {editCells}\n    </tr>);\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(props.simple ? \"doc-table-simple\" : \"doc-table\", props.uid)}\n      style={backgroundStyleFromNode(props)}\n      contentEditable={false}\n    >\n      <table>\n        <tbody>\n          {rows}\n        </tbody>\n      </table>\n    </div>\n  );\n}\n\nexport default React.memo(DocTable);\n","import * as React from 'react';\n\ninterface Props {\n  infoText: string\n\n  onMouseEnter: () => void\n}\n\nexport default function AqInfoBubble(props: Props): React.ReactElement {\n  const {\n    infoText,\n    onMouseEnter,\n  } = props;\n\n  return (\n    <div className=\"aq-info-bubble\" onMouseEnter={onMouseEnter}>\n      <span className=\"tooltip-box small above after wider\">\n        {infoText}\n      </span>\n    </div>\n  );\n}","import * as React from 'react';\n\ninterface Props extends React.ComponentPropsWithoutRef<'input'> {}\n\nexport default function AqSwitch(props: Props): React.ReactElement {\n  const {\n    checked,\n    disabled,\n\n    onChange,\n  } = props;\n\n  return (\n    <label className=\"aq-switch\">\n      <input\n        type=\"checkbox\"\n        checked={checked}\n        disabled={disabled}\n\n        onChange={onChange}\n      />\n      <span className=\"switch\"/>\n    </label>\n  );\n}","import * as React from 'react';\n\nimport * as R from 'ramda';\n\nimport * as classNames from 'classnames';\n\nimport Smile1 from 'images/smile-rating-1.svg';\nimport Smile2 from 'images/smile-rating-2.svg';\nimport Smile3 from 'images/smile-rating-3.svg';\nimport Smile4 from 'images/smile-rating-4.svg';\nimport Smile5 from 'images/smile-rating-5.svg';\n\nconst smileImageSrcs = [\n  Smile1,\n  Smile2,\n  Smile3,\n  Smile4,\n  Smile5,\n];\n\ninterface Props {\n  value: number\n  disabled?: boolean\n\n  onChange: (number: number) => void\n}\n\nexport default function AqSmileRating(props: Props): React.ReactElement {\n  const {\n    value,\n    disabled,\n\n    onChange,\n  } = props;\n\n  return (\n    <div>\n      {R.range(1, 6).reverse().map((val) => (\n        <button\n          key={val}\n          className={classNames('aq-smile-rating-button', { active: value === val })}\n          disabled={disabled}\n          onClick={() => { onChange(val); }}\n        >\n          <img src={smileImageSrcs[val - 1]} />\n        </button>\n      ))}\n    </div>\n  );\n}\n","import { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport ahoy from \"ahoy.js\"\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\n\nimport AqButton from \"../../Aq/Button\";\nimport AqInfoBubble from \"../../Aq/InfoBubble\";\nimport AqSwitch from \"../../Aq/Switch\";\nimport AqSmileRating from \"../../Aq/SmileRating\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport GenLoadingSpinner from \"../../Gen/LoadingSpinner/component\";\n\nimport DocBlockNodes from \"../BlockNodes\";\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\nimport { wrapStateAsSetNodeKVPairActions } from \"../../../helpers/Doc/documentUserState\";\n\nimport createAutomatedSummaryStatementSubscription from \"../../../channels/automated_summary_statement_channel\"\nimport analytics from \"../../../../application/analytics\";\n\ninterface DocTextInputProps extends DocTextInputType, BlockNodeAll {\n  aiSummaryStatementAllowFeedback?: boolean;\n  aiSummaryStatementRequestFeedback?: boolean;\n  aiSummaryStatementResponseRecieved?: boolean;\n  aiSummaryStatementResponseError?: string;\n  aiSummaryStatementFeedback?: string;\n  aiSummaryStatementUserRating?: number;\n  aiSummaryStatementUserComment?: string;\n  aiSummaryStatementUserRatingSubmitted?: boolean;\n  aiSubmitButtonActions?: Array<DocAction>;\n  aiSummaryStatementIdeal?: string;\n};\n\ninterface DocTextInputState {\n  value: string,\n  timer?: NodeJS.Timeout,\n  aiSummaryStatementLoadingFeedback: boolean,\n  tempAiSummaryStatementUserRating: number,\n  tempAiSummaryStatementUserComment: string,\n  aiSummaryStatementNeedsToAcceptInfo?: boolean,\n  aiSummaryStatementLoadingFeedbackStartedAt?: Date,\n}\n\nconst MAX_SUMMARY_STATEMENT_TIME = 60000\n\nexport default class DocTextInput extends React.PureComponent<DocTextInputProps, DocTextInputState> {\n  aiAutomatedSummaryStatementSubscription: any; // TODO: Remove any\n  aiAutomatedSummaryStatementFeedbackRequested?: boolean;\n  aiAutomatedSummaryStatementSubscriptionTimer?: ReturnType<typeof setTimeout>;\n\n  constructor(props: DocTextInputProps) {\n    super(props);\n\n    this.state = {\n      value: this.props.value,\n      timer: undefined,\n      aiSummaryStatementLoadingFeedback: false,\n      tempAiSummaryStatementUserRating: 0,\n      tempAiSummaryStatementUserComment: \"\"\n    };\n  }\n\n  componentWillReceiveProps(newProps: DocTextInputProps) {\n    if ((newProps.value !== this.props.value) && (newProps.value !== this.state.value)) {\n      this.setState({value: newProps.value});\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.state.timer) {\n      clearTimeout(this.state.timer);\n      this.updateUSCWithTimer();\n    }\n  }\n\n  handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\n    this.setState({value: e.target.value});\n\n    if (this.state.timer) { clearTimeout(this.state.timer); }\n    this.setState({timer: setTimeout(this.updateUSCWithTimer.bind(this), 2000)});\n  };\n\n  updateUSC() {\n    this.props.userContext.addState({\n      [this.props.uid]: {value: this.state.value},\n    });\n  };\n\n  updateUSCWithTimer() {\n    this.updateUSC();\n    this.setState({timer: undefined});\n  };\n\n  loadSummaryStatementFeedback() {\n    const {\n      aiSummaryStatementIdeal,\n      documentContext,\n      uid,\n      userContext,\n    } = this.props;\n\n    this.setState({\n      aiSummaryStatementLoadingFeedback: true,\n      aiSummaryStatementLoadingFeedbackStartedAt: (new Date()),\n      aiSummaryStatementNeedsToAcceptInfo: true,\n    })\n\n    this.aiAutomatedSummaryStatementSubscription = createAutomatedSummaryStatementSubscription({\n      summaryStatementId: `${userContext.id}::${uid}`,\n      onSummaryStatementFeedback: this.onSummaryStatementFeedback.bind(this),\n      onConnected: () => {\n        console.log(\"onConnected\")\n\n        if (!this.aiAutomatedSummaryStatementFeedbackRequested) {\n          this.aiAutomatedSummaryStatementFeedbackRequested = true;\n\n          this.aiAutomatedSummaryStatementSubscription.getFeedback({\n            ideal_summary_statement: aiSummaryStatementIdeal,\n            user_summary_statement: this.state.value,\n          })\n\n          this.aiAutomatedSummaryStatementSubscriptionTimer = setTimeout(() => {\n            userContext.addState({\n              [uid]: {\n                aiSummaryStatementRequestFeedback: true,\n                aiSummaryStatementResponseError: \"Connection Timeout\",\n              },\n            });\n          }, MAX_SUMMARY_STATEMENT_TIME);\n        }\n      },\n      onDisconnected: () => {},\n      onRejected: this.handleConnectionRejected.bind(this),\n    })\n\n    ahoy.track(\"AI Summary Statement Feedback Requested\", {document_id: documentContext.id});\n  }\n\n  handleConnectionClosed() {\n    console.log(\"handleConnectionClosed\")\n  }\n\n  handleConnectionRejected() {\n    console.log(\"handleConnectionRejected\")\n\n    const {\n      aiSummaryStatementLoadingFeedback,\n    } = this.state\n\n    const {\n      aiSummaryStatementResponseError,\n      uid,\n      userContext,\n    } = this.props\n\n    if (aiSummaryStatementLoadingFeedback && !aiSummaryStatementResponseError) {\n      userContext.addState({\n        [uid]: {\n          aiSummaryStatementRequestFeedback: true,\n          aiSummaryStatementResponseError: \"Connection Rejected\",\n        },\n      });\n    }\n  }\n\n  onSummaryStatementFeedback(feedback) {\n    const {\n      uid,\n      userContext,\n      aiSummaryStatementIdeal,\n      aiSubmitButtonActions,\n    } = this.props;\n\n    const {\n      aiSummaryStatementLoadingFeedbackStartedAt,\n    } = this.state;\n\n    if (this.aiAutomatedSummaryStatementSubscriptionTimer) {\n      clearTimeout(this.aiAutomatedSummaryStatementSubscriptionTimer)\n      this.aiAutomatedSummaryStatementSubscriptionTimer = undefined;\n    }\n\n    if (feedback.error) {\n      userContext.addState({\n        [uid]: {\n          aiSummaryStatementRequestFeedback: true,\n          aiSummaryStatementResponseError: feedback.error.message,\n        },\n      });\n\n      return;\n    }\n\n    this.setState({aiSummaryStatementLoadingFeedback: false});\n    userContext.addState({\n      [uid]: {\n        aiSummaryStatementRequestFeedback: true,\n        aiSummaryStatementResponseRecieved: true,\n        aiSummaryStatementResponseError: null,\n        aiSummaryStatementResponseTime: (new Date()).getTime() - aiSummaryStatementLoadingFeedbackStartedAt.getTime(),\n        aiSummaryStatementFeedback: feedback.ai_response,\n        aiSummaryStatementModelId: feedback.ai_prompt_id,\n        aiSummaryStatementModelUsageTokens: feedback.usage_tokens,\n        aiSummaryStatementIdeal: aiSummaryStatementIdeal,\n      },\n    });\n  }\n\n  render() {\n    const {\n      boxLines,\n      characterLimit,\n      classes,\n      documentContext,\n      editingContext,\n      graded,\n      inactiveBool,\n      uid,\n      userContext,\n      aiAnswerCommentSection,\n      aiSummaryStatementAllowFeedback,\n      aiSummaryStatementRequestFeedback=true,\n      aiSummaryStatementResponseRecieved,\n      aiSummaryStatementResponseError,\n      aiSummaryStatementFeedback,\n      aiSummaryStatementUserRating,\n      aiSummaryStatementUserComment,\n      aiSummaryStatementUserRatingSubmitted,\n      aiSubmitButtonActions,\n    } = this.props;\n\n    const {\n      aiSummaryStatementLoadingFeedback,\n      aiSummaryStatementNeedsToAcceptInfo,\n      tempAiSummaryStatementUserRating,\n      tempAiSummaryStatementUserComment,\n    } = this.state;\n\n    const inactive = inactiveBool || aiSummaryStatementLoadingFeedback || aiSummaryStatementResponseRecieved;\n\n    let studentNotice;\n    if (classes?.includes(\"summary_statement\")) {\n      studentNotice = <p className=\"graded-feedback\">Your response will be recorded in your Student Report and may also be viewed by faculty.</p>;\n    } else if(graded) {\n      studentNotice = <p className=\"graded-feedback\">The suggested answer is shown below.</p>;\n    }\n\n    const textInputArea = (\n      <>\n        <textarea\n          cols={40}\n          rows={boxLines}\n          maxLength={characterLimit}\n          disabled={inactive}\n          value={this.state.value}\n          onChange={this.handleChange.bind(this)}\n        />\n        {!inactive && <p className=\"letter-count\">Letter Count: {(this.state.value || \"\").length}/{characterLimit}</p>}\n      </>\n    )\n\n    let renderedInput = (\n      <div>\n        {studentNotice}\n        {textInputArea}\n      </div>\n    )\n\n    let aiSubmitButton\n    let aiSwitch\n    if (aiSummaryStatementAllowFeedback) {\n      if (!(inactive || aiSummaryStatementLoadingFeedback || aiSummaryStatementResponseRecieved)) {\n        aiSwitch = (\n          <div style={{display: 'flex', alignItems: 'center', marginBottom: '10px'}}>\n            <AqSwitch\n              checked={aiSummaryStatementRequestFeedback}\n              onChange={() => {userContext.addState({ [uid]: {aiSummaryStatementRequestFeedback: !aiSummaryStatementRequestFeedback} })}}\n              disabled={inactive || !!aiSummaryStatementResponseError}\n            />\n            <span style={{margin: '0 10px'}}>\n              Receive AI-generated feedback on my summary statement\n            </span>\n            <div>\n              <AqInfoBubble\n                infoText={\n                  userContext?.groupRoleDefinition?.role_definition.name === \"Student\" ?\n                  \"This is an experimental new feature. AI-generated feedback will not be shared with faculty.\" :\n                  \"Students have the option of receiving AI-generated feedback on their summary statements for their own study use, but they cannot edit their statements after their initial response. Please feel free to try out this new feature!\"\n                }\n                onMouseEnter={() => {ahoy.track(\"AI Summary Statement i-bubble Hovered Over\", {document_id: documentContext.id});}}\n                />\n            </div>\n          </div>\n        )\n\n        aiSubmitButton = (\n          <div style={{marginBottom: '10px'}}>\n            <AqButton\n              onClick={() => {\n                if (aiSummaryStatementRequestFeedback) {\n                  this.loadSummaryStatementFeedback();\n                } else {\n                  handleActions(aiSubmitButtonActions, this.props);\n\n                  if (!aiSummaryStatementResponseError) {\n                    ahoy.track(\"AI Summary Statement Feedback Opt Out\", {document_id: documentContext.id});\n                  }\n                }\n              }}\n              disabled={R.isEmpty(this.state.value)}\n            >\n              SUBMIT\n            </AqButton>\n          </div>\n        )\n\n        renderedInput = (\n          <div>\n            {studentNotice}\n            {textInputArea}\n            {aiSwitch}\n            {aiSubmitButton}\n          </div>\n        )\n      } else if (aiSummaryStatementRequestFeedback && (aiSummaryStatementLoadingFeedback || aiSummaryStatementResponseRecieved)) {\n        let userRating, answerCommentSection;\n        if (aiSummaryStatementResponseRecieved) {\n          answerCommentSection = (\n            <div style={{marginTop: \"15px\"}}>\n              <DocBlockNodes\n                {...{...this.props, inactiveBool: false}}\n                content={[aiAnswerCommentSection]}\n                contentKey=\"content\"\n                independentlyEditable\n                simple\n                shouldHaveAddNodes={editingContext.isEditing}\n              />\n            </div>\n          )\n\n          userRating = (\n            <div>\n              <hr/>\n              <div style={{marginBottom: '10px'}}>\n                <p>My reaction to this feedback is best expressed as: <span style={{color: 'red'}}>*</span></p>\n                <AqSmileRating\n                  value={aiSummaryStatementUserRatingSubmitted ? aiSummaryStatementUserRating : tempAiSummaryStatementUserRating}\n                  disabled={aiSummaryStatementUserRatingSubmitted}\n                  onChange={(newRating) => {\n                    this.setState({tempAiSummaryStatementUserRating: newRating});\n                  }}\n                />\n              </div>\n              <div style={{marginBottom: '10px'}}>\n                <p>How could this feedback process be improved:</p>\n                <textarea\n                  value={aiSummaryStatementUserRatingSubmitted ? aiSummaryStatementUserComment : tempAiSummaryStatementUserComment}\n                  disabled={aiSummaryStatementUserRatingSubmitted}\n                  onChange={(e) => {this.setState({tempAiSummaryStatementUserComment: e.target.value})}}\n                />\n              </div>\n              <div style={{marginBottom: '10px'}}>\n                <AqButton\n                  onClick={() => {\n                    const extraActions = wrapStateAsSetNodeKVPairActions({ [uid]: {\n                      aiSummaryStatementUserRating: tempAiSummaryStatementUserRating,\n                      aiSummaryStatementUserComment: tempAiSummaryStatementUserComment,\n                      aiSummaryStatementUserRatingSubmitted: true,\n                    }});\n                    handleActions(aiSubmitButtonActions.concat(extraActions), this.props);\n                  }}\n                  disabled={tempAiSummaryStatementUserRating < 1 || aiSummaryStatementUserRatingSubmitted}\n                >\n                  SUBMIT\n                </AqButton>\n              </div>\n            </div>\n          )\n        }\n\n        let summaryStatementModal;\n        if (aiSummaryStatementResponseError) {\n          summaryStatementModal = (\n            <GenModal open>\n              <div className=\"gen-modal-panel\" style={{}}>\n                <p>Oops! This feature is experiencing difficulty. Sorry for the hassle. You can still submit your summary statement and continue working through the case.</p>\n\n                <div style={{display: 'flex', gap: '20px', justifyContent: 'center', width: '100%'}}>\n                  <AqButton\n                    onClick={() => {\n                      userContext.addState({\n                        [uid]: {\n                          aiSummaryStatementRequestFeedback: false,\n                        },\n                      })\n                      this.setState({aiSummaryStatementLoadingFeedback: false});\n                    }}\n                  >\n                    CONTINUE\n                  </AqButton>\n                </div>\n              </div>\n            </GenModal>\n          )\n        } else if(aiSummaryStatementNeedsToAcceptInfo || aiSummaryStatementLoadingFeedback) {\n          summaryStatementModal = (\n            <GenModal open>\n              <div className=\"gen-modal-panel\" style={{}}>\n                <p><em>This feedback is being generated by using artificial intelligence to compare your summary statement to an ideal summary statement and criteria for effective summary statements. The ideal summary statements and the criteria were created by case authors, which include clerkship directors, program directors, clinical educators, and other health professions educators. The artificial intelligence model used to provide feedback is being fine-tuned using expert input from clinicians.</em></p>\n\n                <div style={{display: 'flex', gap: '20px', justifyContent: 'center', width: '100%'}}>\n                  {\n                    aiSummaryStatementNeedsToAcceptInfo ? (\n                      <AqButton\n                        onClick={() => {\n                          this.setState({aiSummaryStatementNeedsToAcceptInfo: false});\n                          analytics.track(\"use_ai_preceptor_for_summary_statement_feedback\", { case: documentContext.title, source: 'Case', page: window.location.href });\n                        }}\n                      >\n                        OKAY\n                      </AqButton>\n                    ) : (\n                      <GenLoadingSpinner/>\n                    )\n                  }\n                </div>\n              </div>\n            </GenModal>\n          )\n        }\n\n        renderedInput = (\n          <div>\n            <div style={{display: 'flex', gap: '10px'}}>\n              <div style={{flex: \"0 1 50%\"}}>\n                <h5>Your Summary Statement</h5>\n                {studentNotice}\n              </div>\n              <div style={{flex: \"0 1 50%\"}}>\n                <h5 style={{paddingBottom: \"10px\"}}>AI-Generated Feedback</h5>\n              </div>\n            </div>\n            <div style={{display: 'flex', gap: '10px'}}>\n              <div style={{flex: \"0 1 50%\"}}>\n                {textInputArea}\n              </div>\n              <div style={{flex: \"0 1 50%\", backgroundColor: \"white\", padding: \"10px\", marginBottom: \"10px\"}}>\n                {aiSummaryStatementLoadingFeedback || !aiSummaryStatementFeedback ? <GenLoadingSpinner/> : R.trim(aiSummaryStatementFeedback).split(/\\n+/).map((feedbackParagraph, i) => <p key={i}>{feedbackParagraph}</p>)}\n              </div>\n            </div>\n            {answerCommentSection}\n            <div style={{display: 'flex', gap: '10px', marginTop: \"10px\"}}>\n              <div style={{flex: \"0 1 50%\"}}>\n                {userRating}\n              </div>\n              <div style={{flex: \"0 1 50%\"}}>\n              </div>\n            </div>\n            {summaryStatementModal}\n          </div>\n        )\n      } else if (!aiSummaryStatementRequestFeedback && inactive) {\n        renderedInput = (\n          <div>\n            {studentNotice}\n            {textInputArea}\n            <div style={{marginTop: \"15px\"}}>\n              <DocBlockNodes\n                {...{...this.props, inactiveBool: false}}\n                content={[aiAnswerCommentSection]}\n                contentKey=\"content\"\n                independentlyEditable\n                simple\n                shouldHaveAddNodes={editingContext.isEditing}\n              />\n            </div>\n          </div>\n        )\n      }\n    }\n\n    return (\n      <div\n        id={uid}\n        data-is-node\n        data-uid={uid}\n        className={classNames(\"doc-text-input\", uid, {inactive: inactive})}\n        style={backgroundStyleFromNode(this.props)}\n        contentEditable={false}\n      >\n        {renderedInput}\n      </div>\n    );\n  }\n}\n","import consumer from \"./consumer\"\n\nexport default function createAutomatedSummaryStatementSubscription({summaryStatementId, onSummaryStatementFeedback, onConnected, onDisconnected, onRejected}) {\n  return consumer.subscriptions.create({ channel: \"AutomatedSummaryStatementChannel\", summary_statement_id: summaryStatementId }, {\n    received(data) {\n      onSummaryStatementFeedback(data);\n    },\n\n    connected() {\n      onConnected();\n    },\n\n    disconnected() {\n      onDisconnected();\n    },\n\n    rejected() {\n      onRejected();\n    },\n\n    getFeedback(summaryStatementData) {\n      this.perform(\"getFeedback\", summaryStatementData)\n    },\n  });\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\ninterface DocVariantPlaceholderProps extends DocVariantPlaceholderType, BlockNodeAll {\n}\n\nfunction DocVariantPlaceholder(props: DocVariantPlaceholderProps) {\n  const {\n    uid,\n    classes,\n    editingContext,\n    variantableId,\n    variantableType,\n  } = props;\n\n  if (!editingContext.isEditing) { return null }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-variant-placeholder\", uid, classes)}\n      contentEditable={false}\n    >\n      <span>Loading...</span>\n    </div>\n  );\n}\n\nexport default React.memo(DocVariantPlaceholder);\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport DocBookmark from \"../BlockNodeHelpers/Bookmark\";\nimport DocNote from \"../BlockNodeHelpers/Note\";\nimport DocStyledText from \"../BlockNodeHelpers/StyledText\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { MEDIA_PICKER } from \"../../../helpers/Doc/menu\";\n\nimport PlaceholderVideo from \"images/placeholder-video.png\";\n\ninterface DocVideoProps extends DocVideoType<InlineNode>, BlockNodeAll {};\n\nfunction DocVideo(props: DocVideoProps) {\n  const {\n    editingContext,\n  } = props;\n\n  const openPicker = (e: React.MouseEvent<HTMLAnchorElement>) => {\n    e.stopPropagation();\n    if (editingContext.isEditing) {\n      editingContext.setCurrentMenu(MEDIA_PICKER, { mediaType: \"video\", uid: props.uid });\n    }\n  };\n\n  let title = null;\n  if ((typeof props.title === \"string\" && props.title.length > 0) || editingContext.isEditing) {\n    title = (\n      <figcaption>\n        <DocStyledText\n          uid={props.uid}\n          content={props.title}\n          contentKey={\"title\"}\n          editingContext={editingContext}\n          placeholder={\"Enter Video text here\"}\n          independentlyEditable\n          disableStyleTextEditing={props.disableStyleTextEditing}\n        />\n      </figcaption>\n    );\n  }\n\n  let videoPlayer = null;\n  switch (props.source) {\n    case \"local\":\n      let captionsTrack = null;\n      if (props.url) {\n        const videoAsset: Partial<DigitalAsset> = props.mediaContext.videos.find((v)=>{return v.distribution_url == props.url || props.url.includes(v.asset_path)}) || {};\n        const captions = props.mediaContext.captions.filter((c)=>{return c.title == videoAsset.title});\n        if (captions.length) {\n          let caption = null;\n          if (captions.length > 1) {\n            caption = captions.reduce((capn_1, capn) => (capn_1.external_identifier > capn.external_identifier) ? capn_1 : capn);\n          } else {\n            caption = captions[0];\n          }\n          captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={caption.distribution_url} />;\n        }\n        videoPlayer = (\n          <video key={props.url} crossOrigin=\"anonymous\" preload=\"none\" controls>\n            <source src={props.url} />\n            {captionsTrack}\n          </video>\n        );\n      } else if (props.uri && props.uri != \"blank.mp4\") {\n        Rollbar.warning(\"Deprecated render DocVideo with uri called\");\n        const captionName = `${props.uri.split(\".\")[0]}.vtt`;\n        if (props.documentContext.captions.includes(captionName)) {\n          captionsTrack = <track key=\"en\" label=\"English\" kind=\"subtitles\" srcLang=\"en\" src={props.currentVersion.localCaptionURL(captionName)} />;\n        }\n        videoPlayer = (\n          <div className=\"comment-container\" style={backgroundStyleFromNode(props)}>\n            <video crossOrigin=\"anonymous\" preload=\"none\" controls>\n              <source src={props.currentVersion.localVideoURL(props.uri)} />\n              {captionsTrack}\n            </video>\n          </div>\n        );\n      } else {\n        videoPlayer = (\n          <div className=\"comment-container\" style={backgroundStyleFromNode(props)}>\n            <img src={PlaceholderVideo} />\n          </div>\n        )\n      }\n\n      break;\n    case \"youtube\":\n      videoPlayer = <iframe width=\"560\" height=\"315\" src={`https://www.youtube.com/embed/${props.uri}`} frameBorder=\"0\" allowFullScreen></iframe>;\n      break;\n    case \"vimeo\":\n      videoPlayer = <iframe src={`https://player.vimeo.com/video/${props.uri}`} width=\"640\" height=\"360\" frameBorder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowFullScreen></iframe>;\n      break;\n    default:\n      Rollbar.warning(`DocVideo does not recognize source of type ${props.source}`);\n      return null;\n  }\n\n  return (\n    <div\n      id={props.uid}\n      data-is-node\n      data-uid={props.uid}\n      className={classNames(\"doc-video\", `doc-video-${props.source}`, props.uid, {\"focused-bookmark\": props.isFocusedBookmark && !props.simple})}\n      contentEditable={false}\n    >\n      <div className=\"doc-video-wrapper\">\n        {videoPlayer}\n        {editingContext.isEditing && props.userContext.permissions.viewMediaAssets && <GenButton\n            key=\"picker-button\"\n            className=\"doc-video-picker-button\"\n            name={<i className=\"fa fa-video\"></i>}\n            highlighted\n            small\n            onClick={openPicker}\n          />}\n      </div>\n      {title}\n      <DocBookmark {...props} />\n      <DocNote {...props} />\n    </div>\n  );\n}\n\nexport default React.memo(DocVideo);\n","import * as React from \"react\";\n\nimport { compact, flatten } from \"lodash\";\n\nimport DocAddNode from \"./BlockNodeHelpers/AddNode\";\n\nimport DocAudio from \"./BlockNodes/Audio\";\nimport DocButton from \"./BlockNodes/Button\";\nimport DocCategoryMatcher from \"./BlockNodes/CategoryMatcher\";\nimport DocCDQQuestion from \"./BlockNodes/CDQQuestion\";\nimport DocCheckbox from \"./BlockNodes/Checkbox\";\nimport DocHorizontalRule from \"./BlockNodes/HorizontalRule\";\nimport DocImage from \"./BlockNodes/Image\";\nimport DocImageGallery from \"./BlockNodes/ImageGallery\";\nimport DocLearningObjective from \"./BlockNodes/LearningObjective\"\nimport DocLearningObjectivesList from \"./BlockNodes/LearningObjectivesList\";\nimport DocList from \"./BlockNodes/List\";\nimport DocMultipleChoice from \"./BlockNodes/MultipleChoice\";\nimport DocParagraph from \"./BlockNodes/Paragraph\";\nimport DocRatingBar from \"./BlockNodes/RatingBar\";\nimport DocSection from \"./BlockNodes/Section\";\nimport DocTable from \"./BlockNodes/Table\";\nimport DocTextInput from \"./BlockNodes/TextInput\";\nimport DocVariantPlaceholder from \"./BlockNodes/VariantPlaceholder\";\nimport DocVideo from \"./BlockNodes/Video\";\n\nexport type DocBlockNodesProps = (\n    DocSectionType<InlineNode> |\n    DocTableCellType<InlineNode> |\n    DocListItemNorrowedType<InlineNode> |\n    DocLearningObjectivesListType<InlineNode> |\n    DocTextInputType\n  ) & {\n  blockNodesContainsSelection?: boolean;\n  cdqFeatures?: Array<CdqFeature>;\n  content: Array<DocBlockNodeSection>;\n  contentKey: string;\n  currentMenu?: DocMenu;\n  currentVersion: CurrentVersion;\n  disableStyleTextEditing?: boolean;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n  editingContext: EditingContext;\n  featureFlag: FeatureFlag;\n  inactiveBool?: boolean;\n  independentlyEditable?: boolean;\n  integrationInfo?: IntegrationInfo;\n  level?: number;\n  localClipboard?: LocalClipboardData;\n  mediaContext: MediaContext;\n  openSiblingSectionUIDs?: Array<string>;\n  shouldHaveAddNodes?: boolean;\n  simple?: boolean;\n  userContext: UserContext;\n};\n\nexport default function DocBlockNodes(props: DocBlockNodesProps) {\n  const {\n    content,\n    inactiveBool,\n    documentContext,\n    currentVersion,\n    editingContext,\n    userContext,\n    displayContext,\n    mediaContext,\n    featureFlag,\n    currentMenu,\n    localClipboard,\n    simple,\n    cdqFeatures,\n    level,\n    openSiblingSectionUIDs,\n    shouldHaveAddNodes,\n    contentKey,\n    disableStyleTextEditing,\n    independentlyEditable,\n    blockNodesContainsSelection,\n    integrationInfo,\n  } = props;\n\n  const nodeLookup = {\n    audio: DocAudio,\n    button: DocButton,\n    categoryMatcher: DocCategoryMatcher,\n    cdqQuestion: DocCDQQuestion,\n    checkbox: DocCheckbox,\n    horizontalRule: DocHorizontalRule,\n    image: DocImage,\n    imageGallery: DocImageGallery,\n    learningObjective: DocLearningObjective,\n    learningObjectivesList: DocLearningObjectivesList,\n    multipleChoice: DocMultipleChoice,\n    numberedList: DocList,\n    paragraph: DocParagraph,\n    ratingBar: DocRatingBar,\n    regularList: DocList,\n    section: DocSection,\n    table: DocTable,\n    textInput: DocTextInput,\n    variantPlaceholder: DocVariantPlaceholder,\n    video: DocVideo,\n  } as const;\n\n  let lastNodeType;\n\n  function checkMultipleSelect(data) {\n    const multipleSelectElement = data.find(item =>\n      [\"multipleChoice\", \"cdqQuestion\", \"textInput\", \"ratingBar\", \"categoryMatcher\"].includes(item.type)\n    );\n\n    if (!multipleSelectElement) return false;\n\n    switch (multipleSelectElement.type) {\n      case \"multipleChoice\":\n      case \"cdqQuestion\":\n        return Array.isArray(multipleSelectElement.content) &&\n               multipleSelectElement.content.some(option => option.value === true);\n\n      case \"textInput\":\n      case \"categoryMatcher\":\n        return multipleSelectElement.value !== \"\";\n\n      case \"ratingBar\":\n        return multipleSelectElement.value > 0;\n\n      default:\n        return false;\n    }\n  }\n\n  let contentNodes = content.filter((node) => node).map((node, index) => {\n    const newInactiveBool = node.hasOwnProperty(\"inactive\") && (node.inactive !== 0) ? node.inactive === 2 : inactiveBool;\n\n    const trueOrEmptyOptions = blockNodesContainsSelection || disableStyleTextEditing ?\n      {disableStyleTextEditing: true} : {}\n\n    let onlyIfSectionOptions;\n    if (node.type === \"section\") {\n      onlyIfSectionOptions = {\n        level: level + 1,\n        openSiblingSectionUIDs: openSiblingSectionUIDs,\n        cdqFeatures: node.cdqFeatures || cdqFeatures,\n        integrationInfo: integrationInfo,\n      };\n    }\n\n    let addNode: React.JSX.Element;\n    if (shouldHaveAddNodes) {\n      addNode = (\n        <DocAddNode\n          key={`${node.uid}--${index + 1}`}\n          editIndex={node.editIndex}\n          siblingUid={node.uid}\n          documentContext={documentContext}\n          editingContext={editingContext}\n          userContext={userContext}\n          currentMenu={currentMenu}\n          localClipboard={localClipboard}\n          parentNode={props}\n          parentContentKey={contentKey}\n          shouldHaveSpace={\n            ![\"paragraph\", \"regularList\", \"numberedList\"].includes(node.type) &&\n            ![\"paragraph\", \"regularList\", \"numberedList\"].includes(lastNodeType)\n          }\n        />\n      );\n    }\n\n    lastNodeType = node.type;\n\n    const NodeTag = nodeLookup[node.type];\n    if (NodeTag) {\n      return ([\n        addNode,\n        <NodeTag\n          {...node}\n          key={node.uid}\n          documentContext={documentContext}\n          currentVersion={currentVersion}\n          editingContext={editingContext}\n          userContext={userContext}\n          displayContext={displayContext}\n          mediaContext={mediaContext}\n          featureFlag={featureFlag}\n          simple={simple}\n          inactiveBool={(node.type=='button' && node.title=='Submit')? !checkMultipleSelect(content) : newInactiveBool}\n          cdqFeatures={cdqFeatures}\n          {...trueOrEmptyOptions}\n          {...onlyIfSectionOptions}\n        />,\n      ]);\n    } else {\n      // Rollbar.warning(`DocBlockNodes does not recognize node of type ${node.type}`);\n      return [];\n    }\n  });\n\n  if (shouldHaveAddNodes) {\n    contentNodes.push([\n      <DocAddNode\n        key={\"--0\"}\n        documentContext={documentContext}\n        editingContext={editingContext}\n        userContext={userContext}\n        currentMenu={currentMenu}\n        localClipboard={localClipboard}\n        parentNode={props}\n        parentContentKey={contentKey}\n        shouldHaveSpace={\n          ![\"paragraph\", \"regularList\", \"numberedList\"].includes(lastNodeType)\n        }\n      />\n    ]);\n  }\n\n\n  if (editingContext.isEditing) {\n    let editableData = {}\n    if (independentlyEditable) {\n      editableData = {\n        \"data-is-independently-editable\": true,\n        style: {\n          \"userSelect\": \"auto\",\n          \"WebkitUserSelect\": \"auto\",\n        },\n      };\n\n      if (!disableStyleTextEditing) {\n        editableData = {\n          ...editableData,\n          contentEditable: true\n        }\n      }\n    }\n\n    return (\n      <div className=\"doc-children\"\n        data-is-block-nodes\n        {...editableData}\n        suppressContentEditableWarning\n        autoCorrect={\"off\"}\n        autoCapitalize={\"off\"}\n        spellCheck={false}\n        onDrop={(e) => {e.stopPropagation(); e.preventDefault();}}\n      >\n        {compact(flatten(contentNodes))}\n      </div>\n    );\n  } else {\n    return (\n      <div className=\"doc-children\">\n        {compact(flatten(contentNodes))}\n      </div>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport * as classNames from \"classnames\";\n\nimport Confetti from 'react-confetti';\n\nimport GreenCheckImage from \"images/completed-check.png\";\n\nimport AqButton from \"../../Aq/Button\"\n\nimport { handleActions } from \"../../../helpers/Doc/handleActions\";\n\ninterface RatingStarProps {\n  maxValue: number;\n  onClick: (i: number) => void;\n  value: number;\n}\n\nfunction RatingStars(props: RatingStarProps) {\n  const {\n    maxValue,\n    onClick,\n    value,\n  } = props;\n\n  const stars = [];\n  for (let i = 0; i < maxValue; i += 1) {\n    const className = classNames(\"doc-rating-bar-star\", {\"doc-rating-bar-star-active\": (i >= maxValue - value)});\n    stars.push(<span className={className} key={i} onClick={() => onClick(maxValue - i)}>☆</span>);\n  }\n\n  return (\n    <div className={\"doc-rating-bar\"}>\n      {stars}\n    </div>\n  )\n}\n\ninterface DocFeedbackModalProps {\n  displayContext: DisplayContext;\n  userContext: UserContext;\n  onClick: Array<DocAction>;\n  onSubmitFinish: () => void;\n};\n\nexport default function DocFeedbackModal(props: DocFeedbackModalProps) {\n  const {\n    displayContext,\n    userContext,\n    onClick,\n    onSubmitFinish,\n  } = props;\n\n  const [rating1, setRating1] = React.useState(0)\n  const [rating2, setRating2] = React.useState(0)\n  const [comment, setComment] = React.useState(\"\")\n  const [showConfetti, setShowConfetti] = React.useState(false)\n\n  let modal\n  if (showConfetti) {\n    modal = (\n      <>\n        <Confetti\n          width={window.innerWidth}\n          height={window.innerHeight}\n          style={{ position: 'fixed', top: 0, left: 0 }}\n        />\n        <div style={{\n          position: 'fixed',\n          top: '50%',\n          left: '50%',\n          transform: 'translate(-50%, -50%)',\n          backgroundColor: 'white',\n          padding: '20px',\n          boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',\n          zIndex: 1000\n        }}>\n          <div style={{fontFamily: \"Roboto Condensed\",fontSize: \"24px\",fontWeight: \"700\"}}>\n            Excellent work!\n          </div>\n          <div style={{fontFamily: \"Roboto Condensed\",fontSize: \"24px\",fontWeight: \"400\"}}>\n            This case is now complete.\n          </div>\n          <div style={{display: 'flex', justifyContent: 'center'}}>\n            <img src={GreenCheckImage} alt=\"Green Check Mark\" />\n          </div>\n        </div>\n      </>\n    )\n  } else {\n    modal = (\n      <div className=\"feedback-modal\">\n        <div className=\"doc-section-body\">\n          <p className=\"feedback-modal-heading\">You’re almost done...</p>\n\n          <p className=\"feedback-modal-subheading\">GIVE US YOUR FEEDBACK TO COMPLETE THIS CASE</p>\n\n          <div className=\"feedback-modal-blue-separator\"></div>\n\n          <p className=\"feedback-modal-description-heading\">We want to know what you think.</p>\n\n          <p className=\"feedback-modal-description\">\n            Your rating and optional comment will be reviewed by Aquifer staff and shared with the educators who regularly review this case.\n          </p>\n\n          <p style={{fontSize: \"16px\", fontWeight: 700, fontFamily: \"Roboto\", marginLeft: \"30px\"}}>This case was a valuable use of my time.</p>\n\n          <div style={{marginLeft: \"45px\"}}>\n            <RatingStars\n              maxValue={5}\n              value={rating1}\n              onClick={setRating1}\n            />\n          </div>\n\n          <p style={{fontSize: \"16px\", fontWeight: 700, fontFamily: \"Roboto\", marginLeft: \"30px\"}}>I will apply what I learned to patient care.</p>\n\n          <div style={{marginLeft: \"45px\"}}>\n            <RatingStars\n              maxValue={5}\n              value={rating2}\n              onClick={setRating2}\n            />\n          </div>\n\n          <p\n            style={{\n              fontWeight: 700,\n              fontSize: \"12px\",\n              fontFamily: \"Roboto Condensed\",\n              color: \"black\"\n            }}\n          >Please note any comments, suggestions, or questions related to the case (optional):</p>\n\n          <textarea\n            cols={40}\n            rows={3}\n            value={comment}\n            onChange={(e) => setComment(e.target.value)}\n          />\n\n          <AqButton\n            disabled={rating1 < 1 || rating2 < 1}\n            onClick={() => {\n              setShowConfetti(true)\n              onSubmitFinish();\n\n              userContext.addState({\n                feedback_card_1_rating_bar: {value: rating1},\n                feedback_card_2_rating_bar: {value: rating2},\n              });\n\n              if (comment !== \"\") {\n                userContext.addState({\n                  feedback_card_1_text_input_section: {value: comment},\n                });\n              }\n\n              setTimeout(() => {\n                const handleActionsArgs = {\n                  displayContext,\n                  userContext,\n                }\n\n                setShowConfetti(false);\n                handleActions(onClick, handleActionsArgs);\n              }, 3000); // 3 seconds\n            }}\n          >\n            Submit & Finish Case\n          </AqButton>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className=\"feedback-modal-background\">\n      {modal}\n    </div>\n  )\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport * as classNames from \"classnames\";\n\nimport { backgroundStyleFromNode } from \"../../../helpers/Doc/changes\";\nimport { displayModes } from \"../../../helpers/Doc/displayMode\";\nimport { currentTimeInSeconds } from \"../../../helpers/time_format\";\n\nimport DocCDQFeatures from \"./CDQFeatures\";\nimport DocSectionHeader from \"./Section/Header\";\n\nimport DocBlockNodes from \"../BlockNodes\";\nimport IntegrationsTags from \"../../Integrations/component\";\n\nimport DocFeedbackModal from \"../Modals/FeedbackModal\";\ninterface DocSectionProps extends DocSectionType<InlineNode>, BlockNodeAll {\n  blockNodesContainsSelection?: boolean;\n  currentMenu?: DocMenu;\n  integrationInfo: IntegrationInfo;\n  openSiblingSectionUIDs: Array<string>;\n  paused?: boolean;\n  roData: RoData;\n  roDocumentCount: number;\n  submitted?: boolean;\n};\n\ninterface DocSectionState {\n  timeLeftInSeconds?: number;\n  showModal: boolean;\n};\n\nexport default class DocSection extends React.PureComponent<DocSectionProps, DocSectionState> {\n  constructor(props: DocSectionProps) {\n    super(props);\n    let startingState: DocSectionState = {\n      showModal: localStorage.getItem(\"showModal\") === \"true\",\n    };\n\n    const timeLeft = this.calculateTimeLeft();\n    if (timeLeft) {\n      startingState = {...startingState, timeLeftInSeconds: timeLeft};\n    }\n\n    this.state = startingState;\n    this.handleShowModal = this.handleShowModal.bind(this);\n  }\n\n  private sectionRef: React.RefObject<HTMLDivElement> = React.createRef<HTMLDivElement>();\n  private timer?: ReturnType<typeof setTimeout>;\n  private oldBoundingClientRect?: DOMRect;\n\n  componentDidMount() {\n    if (!this.props.userContext.isAdmin) { this.startTimer(); }\n  }\n\n  componentWillUnmount() {\n    if (this.timer) {\n      clearInterval(this.timer);\n    }\n  }\n\n  startTimer() {\n    if (this.props.timeLimit) {\n      if (!this.props.currentTimeSegmentStart && this.props.timeUsedBeforeCurrentSegment && this.props.timeUsedBeforeCurrentSegment>0) {\n        this.props.userContext.addState({\n          [this.props.uid]: {currentTimeSegmentStart: Math.floor(new Date().getTime() / 1000)},\n        });\n      }\n\n      this.timer = setInterval(this.tick.bind(this), 1000);\n    }\n  }\n\n  calculateTimeLeft() {\n    if (this.props.timeLimit) {\n      let timeLeft = this.props.timeLimit;\n      if (this.props.timeUsedBeforeCurrentSegment) {\n        timeLeft = timeLeft - this.props.timeUsedBeforeCurrentSegment;\n      }\n\n      if (this.props.currentTimeSegmentStart) {\n        timeLeft = timeLeft - (currentTimeInSeconds() - this.props.currentTimeSegmentStart);\n      }\n\n      return timeLeft;\n    } else {\n      return;\n    }\n  }\n\n  tick() {\n    if ( this.props.timeLimit && this.props.currentTimeSegmentStart ) {\n      this.setState({timeLeftInSeconds: this.calculateTimeLeft()});\n    }\n  }\n\n  componentWillUpdate(nextProps: DocSectionProps, nextState: DocSectionState) {\n    if (this.props.collapsed !== nextProps.collapsed) {\n      this.oldBoundingClientRect = this.sectionRef.current?.getBoundingClientRect();\n    }\n  }\n\n  componentDidUpdate(prevProps: DocSectionProps, prevState: DocSectionState) {\n    if ((prevProps.collapsed !== this.props.collapsed) && this.props.collapsed) {\n      const oldBoundingClientRect = this.oldBoundingClientRect;\n      const newBoundingClientRect = this.sectionRef.current?.getBoundingClientRect();\n      if (oldBoundingClientRect && newBoundingClientRect) {\n        if (oldBoundingClientRect.bottom < 0) {\n          window.scrollBy(0,newBoundingClientRect.height - oldBoundingClientRect.height);\n        } else if (oldBoundingClientRect.top < 0) {\n          if (this.props.collapsed) {\n            window.scrollBy(0,newBoundingClientRect.bottom - 70);\n          }\n        }\n      }\n    }\n  }\n\n  // Function to update showModal state\n  handleShowModal() {\n    localStorage.setItem(\"showModal\", \"true\");\n    setTimeout(() => {\n      localStorage.removeItem(\"showModal\");\n    }, 5000);\n  };\n\n  render() {\n    const {\n      title,\n      displayContext,\n      userContext,\n      content,\n    } = this.props;\n\n    const isFeedbackCard = this.props.classes?.includes(\"feedback_card\");\n    if (isFeedbackCard && displayContext.displayMode === displayModes.STUDENT) {\n      const button = content.find((child) => child.type == \"button\")\n\n      return <DocFeedbackModal\n        displayContext={displayContext}\n        userContext={userContext}\n        onClick={button.onClick}\n        onSubmitFinish={this.handleShowModal}\n      />\n    }\n\n    if (!this.props.userContext.isAdmin) {\n      if (this.props.submitted) {\n        clearInterval(this.timer);\n        this.props.userContext.submitExam(\"Your exam has been sucessfully submitted.\");\n        return null;\n      } else if (this.props.timeLimit && this.state.timeLeftInSeconds && this.state.timeLeftInSeconds <= 0) {\n        clearInterval(this.timer);\n        this.props.userContext.submitExam(\"Your time has expired. Your exam has been sucessfully submitted.\");\n        return null;\n      } else if (this.props.paused) {\n        this.props.userContext.pauseExam();\n        return null;\n      }\n    }\n\n    let visibleContent = this.props.content;\n    let shouldDisplayIntegrationTags = this.props.classes?.includes(\"case_synopsis_card\") && this.props.featureFlag.integrations\n\n    if (!this.props.displayContext.isDisplayFull) {\n      if ((this.props.level !== 0 && !this.props.nested) || (this.props.collapsed) || (this.props.inactiveBool)) {\n        visibleContent = [];\n        shouldDisplayIntegrationTags = false;\n      }\n    }\n\n    if (!this.props.displayContext.isUngated) {\n      visibleContent = visibleContent.filter((node) => node && node.invisible !== true);\n    }\n\n    if (this.props.displayContext.onlyDisplaySectionTitles) {\n      visibleContent = visibleContent.filter((node) => node.type === \"section\");\n      shouldDisplayIntegrationTags = false;\n    }\n\n    let openSiblingSectionUIDs;\n    if (this.props.level === 0 && !this.props.displayContext.canBeEditing) {\n      openSiblingSectionUIDs = visibleContent.filter((node) => {\n        return (\n          node.type === \"section\"\n          && node.collapsed !== true\n          && node.collapsible === true\n        );\n      }).map((node) => node.uid);\n    }\n\n    const classes = classNames(\"doc-section\", this.props.uid, this.props.classes,\n      {\n        nested: this.props.nested,\n        collapsible: this.props.collapsible,\n        collapsed: this.props.collapsed,\n        inactive: this.props.inactiveBool,\n        \"focused-bookmark\": this.props.isFocusedBookmark,\n      });\n\n    const isSummarySatementSection = typeof title === \"string\" && /^Summary statement/i.test(title);\n    const isSaqCard = this.props.classes?.includes(\"saq_card\");\n    const isFinishCaseCard = this.props.classes?.includes(\"finish_case_card\");\n    let propsClone = {...this.props};\n\n    if (displayContext.enableAiSummaryStatementFeedback && isSummarySatementSection) {\n      const questionSectionIndex = visibleContent.findIndex((node) => node.type == \"section\" && node.classes?.includes(\"question\"));\n      const questionSection = visibleContent.find((node): node is DocSectionType<InlineNode> => node.type === \"section\" && !!node.classes?.includes(\"question\"))\n\n      const answerCommentIndex = questionSection?.content?.findIndex((node): node is DocSectionType<InlineNode> => node.type === \"section\" && !!node.classes?.includes(\"answer_comment\"));\n      const answerCommentSection = questionSection?.content?.find((node): node is DocSectionType<InlineNode> => node.type === \"section\" && !!node.classes?.includes(\"answer_comment\"));\n      const idealSummaryStatement = answerCommentSection?.content?.find((node): node is DocParagraphType<InlineNode> => node.type === \"paragraph\" && !(/<strong>Expert Answer:<\\/strong>/.test(node.content)))?.content;\n      const summaryStatementTextInput = questionSection?.content?.find((node): node is DocTextInputType => node.type === \"textInput\");\n      const summaryStatementSubmitButtonIndex = questionSection?.content?.findIndex((node): node is DocButtonType<InlineNode> => node.type === \"button\");\n      const summaryStatementSubmitButton = questionSection?.content?.find((node): node is DocButtonType<InlineNode> => node.type === \"button\");\n\n      if (idealSummaryStatement && summaryStatementTextInput && summaryStatementSubmitButton) {\n        const summaryStatementSubmitButtonActions = summaryStatementSubmitButton.onClick;\n\n        visibleContent = R.over(R.lensPath([questionSectionIndex, \"content\"]), R.remove(answerCommentIndex, 1), visibleContent);\n        visibleContent = R.over(R.lensPath([questionSectionIndex, \"content\"]), R.remove(summaryStatementSubmitButtonIndex, 1), visibleContent);\n\n        summaryStatementTextInput.aiAnswerCommentSection = answerCommentSection;\n        summaryStatementTextInput.aiSummaryStatementIdeal = idealSummaryStatement;\n        summaryStatementTextInput.aiSummaryStatementAllowFeedback = true;\n        summaryStatementTextInput.aiSubmitButtonActions = summaryStatementSubmitButtonActions;\n      }\n    }\n\n    if(isSaqCard) {\n      return <></>;\n    }\n\n    if(isFinishCaseCard) {\n      const quizContent = !this.props.documentContext.quizUrl ? '' : `\n        <div class=\"quiz-buttons\">\n          ${this.props.documentContext.quizUrl.includes('create_start_quiz') ? `\n            <a class=\"finish-card-button\" href=${this.props.documentContext.quizUrl} target=\"_blank\" aria-label=\"Take the quiz now\" > <span class=\"finish-card-quiz-text\" data-url=${this.props.documentContext.quizUrl}> Take the quiz now </span> </a>\n          ` : `\n            <a class=\"finish-card-button\"\n              href=\"#\"\n              data-url=${this.props.documentContext.quizUrl}\n              role=\"button\"\n              aria-label=\"Take the quiz now\"\n              onclick=\"javascript: event.preventDefault();\n                                        fetch(event.target.dataset.url)\n                                          .then(response => response.text())\n                                          .then(html => Turbo.renderStreamMessage(html))\n                                          .then(() => {\n                                              document.getElementById('openQuestionContainer').classList.remove('hidden');\n                                              analytics.track('open_questions', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\n                                          });\"\n            >\n              <span class=\"finish-card-quiz-text\" data-url=${this.props.documentContext.quizUrl}> Take the quiz now </span>\n            </a>\n          ` }\n          ${ !this.props.documentContext.todoUrl ? '' : `\n            <a href=\"#\"\n              data-url=${this.props.documentContext.todoUrl}\n              role=\"button\"\n              aria-label=\"Save quiz to do list\"\n              onclick=\"javascript: event.preventDefault();\n                                    fetch(event.target.dataset.url)\n                                    .then(response => response.text())\n                                    .then(html => Turbo.renderStreamMessage(html))\n                                    .then(() => {\n                                        document.getElementById('todo_form_container').classList.remove('hidden');\n                                        analytics.track('saq_save_to_do', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\n                                    });\"\n              class=\"finish-card-todo-button\"\n              id=\"todoURLButton\"\n              >\n              ${this.props.documentContext.todoAction}\n            </a>\n          `}\n        </div>\n        <br>\n      `;\n\n      const content = `\n        <div class=\"finish-card\">\n          <div class='finish-card-start'>\n            Well done! You have completed the case.\n          </div>\n          <div class=\"finish-card-layout\">\n            ${this.props.documentContext.quizUrl ? `\n            <div class=\"finish-card-quiz-body\">\n              <div class='finish-card-body'>\n                <h5 class='finish-card-heading'> Next: Check your knowledge </h5>\n                <div class='finish-card-question-icon'></div>\n                <p class='finish-card-content'> Take a PracticeSmart quiz with ${this.props.documentContext.quizQuestionCount} questions related to this case. </p>\n                <p class='finish-card-content'> <b> Short on time? </b> Save the quiz to your to-do list for later.</p>\n              </div>\n              ${quizContent}\n            </div>\n            ` : ''}\n            <div class='finish-card-summary-body'>\n              <h5 class='finish-card-heading'> ACCESS CASE SUMMARY </h5>\n              <div class='finish-card-summary-icon'></div>\n              <p class='finish-card-content'> Download a printable Case Summary of the key teaching points covered in this case. </p>\n            </div>\n            <a class=\"finish-card-summary-button\" href=${this.props.documentContext.caseSummaryUrl} target=\"_blank\" onclick=\"analytics.track('view_case_summary', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\"> View Case Summary <span class=\"view-summary-icon\"></span> </a>\n          </div>\n        </div>\n        <div class=\"gen-modal hidden\" id=\"openQuestionContainer\">\n          <div class=\"gen-modal-panel\" style=\"padding-top: 33px; padding-left: 51px; padding-right: 63px; font-family: roboto; font-size: 16px;width: 498px;\">\n            <div id=\"quizModal\"></div>\n          </div>\n        </div>\n      `;\n\n      // Modal content (same as original content but with a different UI)\n      const modalContent = `\n        <div data-controller=\"modal\">\n          <div class=\"gen-modal\" data-modal-target=\"modal\" id=\"finish_card_modal\" role=\"dialog\" aria-labelledby=\"finish_card_heading\" aria-describedby=\"finish_card_body\">\n            <div class=\"gen-modal-panel\">\n              <div class=\"gen-modal-header-right\">\n                <button class=\"close-icon\"aria-label=\"Close modal\" data-action=\"click->modal#close\">x</button>\n              </div>\n              <div class=\"finish-card\">\n                ${this.props.documentContext.quizUrl ? `\n                <div class=\"finish-card-image-container\">\n                  <img alt=\"Quiztime\" class=\"finish-card-image\" aria-hidden=\"true\" />\n                </div>\n                ` : ''}\n                <div class=\"finish-card-layout\">\n                  ${this.props.documentContext.quizUrl ? `\n                  <div class=\"finish-card-quiz-body\">\n                    <div class='finish-card-body'>\n                      <h5 class='finish-card-heading'> Next: Check your knowledge </h5>\n                      <p class='finish-card-content'> Take a PracticeSmart quiz with ${this.props.documentContext.quizQuestionCount} questions related to this case. </p>\n                      <p class='finish-card-content'> <b> Short on time? </b> Save the quiz to your to-do list for later.</p>\n                    </div>\n                    ${quizContent}\n                  </div>\n                  ` : ''}\n                  <div class='finish-card-summary-body'>\n                    <h5 class='finish-card-heading'> ACCESS CASE SUMMARY </h5>\n                    <p class='finish-card-content'> Download a printable Case Summary of the key teaching points covered in this case. </p>\n                  </div>\n                  <a class=\"finish-card-summary-button\" href=${this.props.documentContext.caseSummaryUrl} target=\"_blank\" aria-label=\"View case summary\" onclick=\"analytics.track('view_case_summary', { page: window.location.href, source: 'Case Page', case_name: '${this.props.documentContext.title}', time_on_case: '${this.props.documentContext.timeOnCase}' });\" autofocus> View case summary <span class=\"view-summary-icon\"></span></a>\n                </div>\n              </div>\n              <div class=\"gen-modal-header-right\">\n                <button class=\"close-btn\" aria-label=\"Close modal\" data-action=\"click->modal#close\"> Close </span>\n              </div>\n            </div>\n          </div>\n        </div>\n      `;\n\n      // Combine original content and modal\n      const finalContent = this.state.showModal ? `\n        ${content}\n        ${modalContent}\n      ` : `${content}`;\n\n      propsClone.title = 'Next Steps';\n      if (propsClone.content[1]) {\n        propsClone.content[1].content = finalContent;\n      }\n    }\n\n    return (\n      <div\n        id={this.props.uid}\n        data-is-node\n        data-uid={this.props.uid}\n        className={classes}\n        style={backgroundStyleFromNode(this.props)}\n        contentEditable={false}\n        ref={this.sectionRef}\n      >\n        <DocSectionHeader {...propsClone} />\n        <div className=\"doc-section-body\">\n          <DocCDQFeatures {...this.props} />\n          <DocBlockNodes\n            {...this.props}\n            content={visibleContent}\n            contentKey=\"content\"\n            independentlyEditable\n            openSiblingSectionUIDs={openSiblingSectionUIDs}\n            shouldHaveAddNodes={this.props.editingContext.isEditing && (this.props.displayContext.isDisplayFull || !this.props.collapsed)}\n          />\n          {shouldDisplayIntegrationTags &&\n            <IntegrationsTags\n              {...this.props.integrationInfo}\n            />\n          }\n        </div>\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\n\ninterface ReasoningToolPanelDeleteCellProps {\n  children: React.ReactNode;\n  deleteNode: () => void;\n};\n\nexport default function ReasoningToolPanelDeleteCell({\n  children = [],\n  deleteNode,\n}: ReasoningToolPanelDeleteCellProps) {\n  return (\n    <div className=\"reasoning-tool-panel-delete-cell\">\n      <div\n        className=\"reasoning-tool-panel-delete-cell-delete-button\"\n        onClick={deleteNode}\n      >\n        <i className={\"icon-trash\"}></i>\n      </div>\n      <div className=\"reasoning-tool-panel-delete-cell-children\">\n        {children}\n      </div>\n    </div>\n  );\n}\n","import * as React from \"react\";\nimport * as classNames from \"classnames\";\n\nimport * as pluralize from \"pluralize\";\n\nimport ReasoningToolPanelDeleteCell from \"./Panel/DeleteCell\";\n\nimport generateUUID from \"../../../helpers/generateUUID\";\n\ninterface ReasoningToolPanelProps {\n  title: string;\n  infoBox?: React.ReactNode;\n  isDeleting?: boolean;\n  toggleDeleting?: () => void;\n  headerButton?: React.ReactNode;\n  isAddable?: boolean;\n  wide?: boolean;\n  children: React.ReactNode;\n  panelNodeEditStart?: (uid: string) => void;\n  addNode?: (uid: string, data?: Record<string, any>) => void;\n  deleteNode?: (uid: string) => void;\n  displayContext?: DisplayContext;\n};\n\nexport default function ReasoningToolPanel({\n  title = \"\",\n  infoBox = null,\n  isDeleting = false,\n  toggleDeleting,\n  headerButton = null,\n  isAddable = false,\n  wide = false,\n  children,\n  panelNodeEditStart,\n  addNode,\n  deleteNode,\n  displayContext,\n}: ReasoningToolPanelProps) {\n\n  let wrappedChildren = children;\n  if (isDeleting) {\n    wrappedChildren = React.Children.map(children, (child) => {\n      if (React.isValidElement(child)) {\n        return (\n          <ReasoningToolPanelDeleteCell\n            key={child.props.uid}\n            deleteNode={() => {\n              if (displayContext) {\n                displayContext.setFocusedBookmarkUid(null);\n              }\n              if (deleteNode) {\n                deleteNode(child.props.uid);\n              }\n            }}\n          >\n            {child}\n          </ReasoningToolPanelDeleteCell>\n        );\n      } else {\n        return child;\n      }\n    });\n  }\n\n  return (\n    <div className={classNames(\"reasoning-tool-panel\", (wide ? 'wide' : 'small'))}>\n      <div className=\"reasoning-tool-panel-header\">\n        <div className=\"reasoning-tool-panel-header-left\">\n          <h1>{title}</h1>\n          {toggleDeleting && (\n            <div\n              className={classNames(\"reasoning-tool-panel-header-delete-button\", {active: isDeleting})}\n              onClick={toggleDeleting}\n            >\n              <i className=\"icon-lg icon-edit\"></i>\n            </div>\n          )}\n          {headerButton}\n        </div>\n        <div className=\"reasoning-tool-panel-header-right\">\n        </div>\n      </div>\n      {infoBox && <div className=\"reasoning-tool-panel-header\">\n        <p><i>{infoBox}</i></p>\n      </div>}\n      <div>\n        {wrappedChildren}\n      </div>\n      {isAddable && <div className=\"reasoning-tool-add-button\" key=\"button\" onClick={() => {\n        if (addNode && panelNodeEditStart) {\n          const newUid = generateUUID();\n          addNode(newUid);\n          panelNodeEditStart(newUid);\n        }\n      }}>\n          <span><i className=\"icon-open-box\"></i> New {pluralize.singular(title)}...</span>\n      </div>}\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport { newSetKeyValueChange } from \"../../../helpers/Doc/changes\";\n\nimport ReasoningToolPanel from \"./Panel\";\nimport Select from 'react-select';\n\ninterface ReasoningToolAssessmentQuestionDataPanelProps {\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  cci_status: string;\n};\n\ninterface ReasoningToolAssessmentQuestionDataPanelState {\n  label?: string;\n  clinical_location: string;\n  final_diagnosis: string;\n  patient_age: string;\n  system: string\n  clinical_focus: string\n  current_use: string\n  clinical_disciplines: Array<string>\n  clinical_excellence: Array<string>\n};\n\nexport default class ReasoningToolAssessmentQuestionDataPanel extends React.Component<ReasoningToolAssessmentQuestionDataPanelProps, ReasoningToolAssessmentQuestionDataPanelState> {\n  constructor(props: ReasoningToolAssessmentQuestionDataPanelProps) {\n    super(props);\n\n    this.state = {\n      clinical_location: this.props.editingContextExtra.assessmentQuestion.clinical_location,\n      final_diagnosis: this.props.editingContextExtra.assessmentQuestion.final_diagnosis,\n      patient_age: this.props.editingContextExtra.assessmentQuestion.patient_age,\n      clinical_disciplines: this.props.editingContextExtra.assessmentQuestion.clinical_disciplines,\n      clinical_excellence: this.props.editingContextExtra.assessmentQuestion.clinical_excellence,\n      system: this.props.editingContextExtra.assessmentQuestion.system,\n      clinical_focus: this.props.editingContextExtra.assessmentQuestion.clinical_focus,\n      current_use: this.props.editingContextExtra.assessmentQuestion.current_use,\n    };\n  }\n\n  save(event) {\n    event.preventDefault();\n    const questionData = {\n      ...this.props.editingContextExtra.assessmentQuestion,\n      id: this.props.editingContextExtra.assessmentQuestion.id,\n      clinical_location: this.state.clinical_location,\n      final_diagnosis: this.state.final_diagnosis,\n      patient_age: this.state.patient_age,\n      system: this.state.system,\n      clinical_focus: this.state.clinical_focus,\n      current_use: this.state.current_use,\n      clinical_disciplines: this.state.clinical_disciplines || [],\n      clinical_excellence: this.state.clinical_excellence || [],\n    }\n    this.props.editingContextExtra.setAssessmentQuestionData(questionData)\n  }\n\n  generateSelectOptions(options) {\n    return options.map((optionName) => {\n      return {value: optionName, label: optionName};\n    })\n  }\n\n  render() {\n    const {\n      editingContext,\n      editingContextExtra,\n    } = this.props;\n\n    const assessmentQuestion = editingContextExtra.assessmentQuestion;\n    const assessmentQuestionStatistics = editingContextExtra.assessmentQuestionStatistics;\n    const selectedAssessmentQuestionStatistic = assessmentQuestionStatistics.find((stat) => stat.label === this.state.label) || assessmentQuestionStatistics[0];\n    const questionData = editingContextExtra.assessmentQuestionEditingData;\n    const clinicalLocationOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalLocationOptions);\n    const finalDiagnosisOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionFinalDiagnosisOptions);\n    const patientAgeOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionPatientAgeOptions);\n    const systemOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionSystemOptions);\n    const clinicalFocusOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalFocusOptions);\n    const questionUseOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionQuestionUseOptions);\n    const clinicalDisciplineOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalDisciplineOptions);\n    const clinicalExcellenceOptions = this.generateSelectOptions(editingContextExtra.assessmentQuestionClinicalExcellenceOptions);\n\n    return (\n      <ReasoningToolPanel\n        key=\"ASSESSMENT QUESTION DATA\"\n        title=\"ASSESSMENT QUESTION DATA\"\n      >\n        <h5>Assessment Question Meta Data</h5>\n\n        <div>\n        <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Question Use:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                isMulti={false}\n                isClearable={true}\n                options={questionUseOptions}\n                defaultValue={this.state.current_use && questionUseOptions.filter(option=> this.state.current_use == option[\"value\"])}\n                onChange={ (option) => { this.setState({current_use: option && option.value}); } }\n                menuPortalTarget={document.body}\n                styles={{\n                    menuPortal: base => ({ ...base, zIndex: 9999 })\n                }}\n              />\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Clinical Location:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                isMulti={false}\n                isClearable={true}\n                options={clinicalLocationOptions}\n                defaultValue={this.state.clinical_location && clinicalLocationOptions.filter(option=> this.state.clinical_location == option[\"value\"])}\n                onChange={ (option) => { this.setState({clinical_location: option && option.value}); } }\n                menuPortalTarget={document.body}\n                styles={{\n                    menuPortal: base => ({ ...base, zIndex: 9999 })\n                }}\n              />\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Final Diagnosis:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                  isMulti={false}\n                  isClearable={true}\n                  options={finalDiagnosisOptions}\n                  defaultValue={this.state.final_diagnosis && finalDiagnosisOptions.filter(option=> this.state.final_diagnosis == option[\"value\"])}\n                  onChange={ (option) => { this.setState({final_diagnosis: option && option.value}); } }\n                  menuPortalTarget={document.body}\n                  styles={{\n                      menuPortal: base => ({ ...base, zIndex: 9999 })\n                  }}\n                />\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Patient Age:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                    isMulti={false}\n                    isClearable={true}\n                    options={patientAgeOptions}\n                    defaultValue={this.state.patient_age && patientAgeOptions.filter(option=> this.state.patient_age == option[\"value\"])}\n                    onChange={ (option) => { this.setState({patient_age: option && option.value}); } }\n                    menuPortalTarget={document.body}\n                    styles={{\n                        menuPortal: base => ({ ...base, zIndex: 9999 })\n                    }}\n                  />\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">System:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                    isMulti={false}\n                    isClearable={true}\n                    options={systemOptions}\n                    defaultValue={this.state.system && systemOptions.filter(option=> this.state.system == option[\"value\"])}\n                    onChange={ (option) => { this.setState({system: option && option.value}); } }\n                    menuPortalTarget={document.body}\n                    styles={{\n                        menuPortal: base => ({ ...base, zIndex: 9999 })\n                    }}\n                  />\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Clinical Focus:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                    isMulti={false}\n                    isClearable={true}\n                    options={clinicalFocusOptions}\n                    defaultValue={this.state.clinical_focus && clinicalFocusOptions.filter(option=> this.state.clinical_focus == option[\"value\"])}\n                    onChange={ (option) => { this.setState({clinical_focus: option && option.value}); } }\n                    menuPortalTarget={document.body}\n                    styles={{\n                        menuPortal: base => ({ ...base, zIndex: 9999 })\n                    }}\n                  />\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Clinical Discipline:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                isMulti={true}\n                options={clinicalDisciplineOptions}\n                defaultValue={this.state.clinical_disciplines && clinicalDisciplineOptions.filter(option=> this.state.clinical_disciplines.includes(option[\"value\"]))}\n                onChange={ (options) => { this.setState({clinical_disciplines: options && options.map((option) => option.value) }) }}\n                menuPortalTarget={document.body}\n                styles={{\n                    menuPortal: base => ({ ...base, zIndex: 9999 })\n                }}\n              />\n            </span>\n          </div>\n\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Clinical Excellence:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <Select\n                isMulti={true}\n                options={clinicalExcellenceOptions}\n                defaultValue={this.state.clinical_excellence && clinicalExcellenceOptions.filter(option=> this.state.clinical_excellence.includes(option[\"value\"]))}\n                onChange={ (options) => { this.setState({clinical_excellence: options && options.map((option) => option.value) }) }}\n                menuPortalTarget={document.body}\n                styles={{\n                    menuPortal: base => ({ ...base, zIndex: 9999 })\n                }}\n              />\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">\n              <button className='aq-button'onClick={this.save.bind(this)} >Save</button>\n            </span>\n          </div>\n        </div>\n\n        <h5>Assessment Question Data And Statuses</h5>\n\n        <div>\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Item Decisions</span>\n            <div className={classNames(\"reasoning-tool-stat-value reasoning-tool-item-decision-input\", {changed: this.props.cci_status &&  this.props.cci_status !== assessmentQuestion.cci_status})}>\n              <select value={editingContextExtra.cci_status} onChange={(e) => {\n                editingContext.addChange(newSetKeyValueChange(editingContextExtra.rootUid, \"cci_status\", e.target.value));\n              }}>\n                {editingContextExtra.cciStatusOptions.map((cciStatus) => <option key={cciStatus.key} value={cciStatus.key}>{cciStatus.displayName}</option>)}\n              </select>\n            </div>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Academic Year for this Data:</span>\n            <span className=\"reasoning-tool-stat-value reasoning-tool-item-decision-input\">\n              <select value={selectedAssessmentQuestionStatistic?.label} disabled={false} onChange={(e) => {this.setState({label: e.target.value});}}>\n                {assessmentQuestionStatistics.map((statistic) => <option key={statistic.label} value={statistic.label}>{statistic.label}</option>)}\n              </select>\n            </span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\"># Administrations:</span>\n            <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.administrations_count}</span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Difficulty (pdiff):</span>\n            <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.difficulty}</span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Discrimination (rpb):</span>\n            <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.discrimination}</span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Item Validity Status:</span>\n            <span className=\"reasoning-tool-stat-value\">{editingContextExtra.assessmentStatus}</span>\n          </div>\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Used on Assessment?</span>\n            <span className=\"reasoning-tool-stat-value\">{questionData && (questionData?.delivered ? \"Yes\" : \"No\")}</span>\n          </div>\n        </div>\n\n        <hr />\n\n        <div>\n          <h5>Answer Option Admin Data</h5>\n\n          {[...Array(5).keys()].map((index) => {\n            const capitalLetter = String.fromCharCode(\"A\".charCodeAt(0) + index);\n            const lowerLetter = String.fromCharCode(\"a\".charCodeAt(0) + index);\n            const correct = index === assessmentQuestion?.content?.correct_answer_index;\n\n            return (\n              <div key={index} className={classNames(\"reasoning-tool-stat\", {correct: correct})}>\n                <span className=\"reasoning-tool-stat-label\">Admin {capitalLetter}:</span>\n                <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic && selectedAssessmentQuestionStatistic[`choice_${lowerLetter}_count`]}</span>\n                {correct && <span className=\"reasoning-tool-stat-comment\">Correct!</span>}\n              </div>\n            );\n          })}\n\n          <div className=\"reasoning-tool-stat\">\n            <span className=\"reasoning-tool-stat-label\">Admin Omit:</span>\n            <span className=\"reasoning-tool-stat-value\">{selectedAssessmentQuestionStatistic?.skips_count}</span>\n          </div>\n        </div>\n        <hr />\n      </ReasoningToolPanel>\n    );\n  }\n}\n","import * as React from 'react';\nimport { useEffect, useState } from \"react\";\nimport client from \"../../../../api/client\";\nimport { getAdminAssessmentQuestion } from \"../../../../api/sdk.gen\";\nimport { getCellValue } from '../../../../helpers/assessment'\n\nconst DetailsTab = ({ details }) => {\n\n  if (!details) return <div>Loading...</div>;\n\n  const columns = [\n    {\n      key: \"id\",\n      name: \"ID\",\n      renderer: (item, value) => (\n        <a\n          href={`/versions/${item.editing_document.scheduled_review_version_id}/edit`}\n          target='_blank'\n        >\n          {value}\n        </a>\n      )\n    },\n    {\n      key: \"case_summary_identifier\",\n      name: \"ITEM LABEL\",\n      renderer: (item, value) => (\n        <a\n          href={`/versions/${item.editing_document.scheduled_review_version_id}/edit`}\n          target='_blank'\n        >\n          {value}\n        </a>\n      )\n    },\n    {\n      key: \"course_name\",\n      name: \"COURSE\",\n    },\n    {\n      key: \"document.title\",\n      name: \"CASE\",\n      renderer: (item, value) => (\n        <a\n          href={`/documents/${item.document_id}`}\n          target='_blank'\n        >\n          {value}\n        </a>\n      )\n    },\n    {\n      key: \"current_use\",\n      name: \"QUESTION USE\",\n    },\n    {\n      key: \"efficiency_breakpoints_seconds\",\n      name: \"SCORABLE?\",\n    },\n    {\n      key: \"content.vignette\",\n      name: \"VIGNETTE\",\n    },\n    {\n      key: \"content.stem\",\n      name: \"STEM\",\n    },\n    {\n      key: \"content.images\",\n      name: \"IMAGES\",\n    },\n    {\n      key: \"content.correct_answer_index\",\n      name: \"CORRECT ANSWER\",\n    },\n    {\n      key: \"choice_a\",\n      name: \"CHOICE A\",\n    },\n    {\n      key: \"choice_b\",\n      name: \"CHOICE B\",\n    },\n    {\n      key: \"choice_c\",\n      name: \"CHOICE C\",\n    },\n    {\n      key: \"choice_d\",\n      name: \"CHOICE D\",\n    },\n    {\n      key: \"choice_e\",\n      name: \"CHOICE E\",\n    },\n    {\n      key: \"difficulty\",\n      name: \"DIFFICULTY\",\n    },\n    {\n      key: \"discrimination\",\n      name: \"DISCRIMINATION\",\n    },\n    {\n      key: \"status\",\n      name: \"VALIDITY STATUS\",\n    },\n    {\n      key: \"learning_objective_reusable_object.learning_objective_name\",\n      name: \"LEARNING OBJECTIVES\",\n    },\n    {\n      key: \"learning_objective_reusable_object.learning_objective_id\",\n      name: \"LO ID\",\n      renderer: (item, value) => (\n        <a\n          href={`/admin/assessment/learning_objectives?id=${value}`}\n          target='_blank'\n        >\n          {value}\n        </a>\n      )\n    },\n    {\n      key: \"learning_objective_reusable_object.reusable_object_name\",\n      name: \"TEACHING POINTS\",\n    },\n    {\n      key: \"learning_objective_reusable_object.reusable_object_id\",\n      name: \"TP ID\",\n      renderer: (item, value) => (\n        <a\n          href={`/admin/assessment/reusable_objects?id=${value}`}\n          target='_blank'\n        >\n          {value}\n        </a>\n      )\n    },\n    {\n      key: \"question_set_ids\",\n      name: \"SETS\",\n      renderer: (item, value) => (\n        <div>\n          <a\n            href={`/admin/assessment/question_sets?question_id=${item.id}`}\n            target='_blank'\n            rel=\"noopener noreferrer\"\n          >\n            {item.question_sets.length} items\n          </a>\n\n          {item.question_sets.map((item) => (\n            <div key={item.id}>\n              <a\n                href={`/admin/assessment/question_sets?id=${item.id}`}\n                target='_blank'\n                rel=\"noopener noreferrer\"\n              >\n                {item.title}\n              </a>\n            </div>\n          ))}\n        </div>\n      )\n    },\n    {\n      key: \"content.answer_explanation\",\n      name: \"ANSWER EXPLANATION\",\n    },\n    {\n      key: \"system\",\n      name: \"SYSTEM\",\n    },\n    {\n      key: \"clinical_focus\",\n      name: \"CLINICAL FOCUS\",\n    },\n    {\n      key: \"clinical_location\",\n      name: \"CLINICAL LOCATION\",\n    },\n    {\n      key: \"patient_age\",\n      name: \"PATIENT AGE\",\n    },\n    {\n      key: \"final_diagnosis\",\n      name: \"FINAL DIAGNOSIS\",\n    },\n    {\n      key: \"clinical_disciplines\",\n      name: \"CLINICAL DISCIPLINE\",\n    },\n    {\n      key: \"clinical_excellence\",\n      name: \"CLINICAL EXCELLENCE\",\n    },\n    {\n      key: \"parent_id\",\n      name: \"PARENT ID\",\n    },\n    {\n      key: \"child_ids\",\n      name: \"CHILD IDs\",\n    },\n    {\n      key: \"created_at\",\n      name: \"DATE CREATED\",\n    },\n    {\n      key: \"updated_at\",\n      name: \"DATE MODIFIED\",\n    },\n  ];\n\n  return (\n    <dl className=\"details-list\">\n      {columns.map(({ key, name, renderer }) => {\n        const val = getCellValue(details, key, false)\n\n        return (\n          <React.Fragment key={key}>\n            <dt className=\"details-term\">{name}</dt>\n            <dd className=\"details-desc\">\n              { renderer\n                ? renderer(details, val)\n                : <div dangerouslySetInnerHTML={{ __html: val }} /> }\n            </dd>\n          </React.Fragment>\n        );\n      })}\n    </dl>\n  );\n};\n\nexport default DetailsTab;\n","import * as React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport client from \"../../../../api/client\";\nimport { getAdminAssessmentStatistics } from \"../../../../api/sdk.gen\";\n\nconst StatisticsTab = ({ questionId }) => {\n  const [statistics, setStatistics] = useState([]);\n\n  const fetchStatistics = async () => {\n    const resp = await getAdminAssessmentStatistics({\n      query: { assessment_question_id: questionId, per: 1000 },\n    });\n    setStatistics(resp.data.data);\n  };\n\n  useEffect(() => {\n    fetchStatistics();\n  }, [questionId]);\n\n  const headers = [\n    \"ID\",\n    \"Assessment Question ID\",\n    \"Label\",\n    \"Choice A Count\",\n    \"Choice B Count\",\n    \"Choice C Count\",\n    \"Choice D Count\",\n    \"Choice E Count\",\n    \"Choice F Count\",\n    \"Skips Count\",\n    \"Administrations Count\",\n    \"Difficulty\",\n    \"Discrimination\",\n    \"Avg Certainty Rating\",\n    \"Created At\",\n    \"Updated At\",\n  ];\n\n  const renderTableHead = () => (\n    <tr>\n      {headers.map((header) => (\n        <th key={header}>{header}</th>\n      ))}\n    </tr>\n  );\n\n  const renderTableRows = () => {\n    if (statistics.length === 0) {\n      return (\n        <tr>\n          <td colSpan={headers.length} style={{ textAlign: \"center\" }}>\n            There are no records\n          </td>\n        </tr>\n      );\n    }\n\n    return statistics.map((stat) => (\n      <tr key={stat.id}>\n        <td>{stat.id}</td>\n        <td>{stat.assessment_question_id}</td>\n        <td>{stat.label}</td>\n        <td>{stat.choice_a_count}</td>\n        <td>{stat.choice_b_count}</td>\n        <td>{stat.choice_c_count}</td>\n        <td>{stat.choice_d_count}</td>\n        <td>{stat.choice_e_count}</td>\n        <td>{stat.choice_f_count}</td>\n        <td>{stat.skips_count}</td>\n        <td>{stat.administrations_count}</td>\n        <td>{stat.difficulty}</td>\n        <td>{stat.discrimination}</td>\n        <td>{stat.average_certainty_rating}</td>\n        <td>{new Date(stat.created_at).toLocaleString()}</td>\n        <td>{new Date(stat.updated_at).toLocaleString()}</td>\n      </tr>\n    ));\n  };\n\n  return (\n    <div className=\"table-container\">\n      <table className=\"table-with-fixed-columns\" border={1}>\n        <thead>{renderTableHead()}</thead>\n        <tbody>{renderTableRows()}</tbody>\n      </table>\n    </div>\n  );\n};\n\nexport default StatisticsTab;\n","import * as React from \"react\";\nimport * as classNames from \"classnames\";\n\ninterface ReasoningToolBarButtonProps {\n  iconName?: string;\n  isActive?: boolean;\n  name: string;\n  onToggle?: React.MouseEventHandler<HTMLAnchorElement>;\n  openLink?: string;\n  shouldShow: boolean;\n  onExpand?: () => void;\n};\n\nexport default function ReasoningToolBarButton({\n  iconName,\n  isActive = false,\n  name = \"\",\n  onToggle,\n  openLink,\n  shouldShow,\n  onExpand,\n}: ReasoningToolBarButtonProps) {\n  if (!shouldShow) { return null; }\n\n  const onClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n    e.preventDefault();\n    if (openLink) {\n      window.open(openLink, \"_blank\");\n    } else if(onToggle) {\n      onToggle(e);\n      onExpand?.();\n    }\n  };\n\n  return (\n    <a href=\"#\" className={classNames(\"reasoning-tool-bar-button\", {active: isActive})} onClick={onClick}>\n      {iconName && <>\n        <span className={iconName.slice(0,3) === \"fa \" ? iconName : `icon-lg ${iconName}`} />\n        <br />\n      </>}\n      <span className=\"button-name\">{name}</span>\n    </a>\n  );\n}\n","import * as React from \"react\";\n\nimport { capitalize } from \"lodash\";\n\nimport DocStyledText from \"../../BlockNodeHelpers/StyledText\";\n\nimport DocList from \"../../BlockNodes/List\";\nimport DocParagraph from \"../../BlockNodes/Paragraph\";\n\nimport { scrollToLineage } from \"../../../../helpers/Doc/scrollTo\";\n\nimport {\n  weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../../helpers/Doc/context\";\n\ninterface ReasoningToolBookmarkSummaryProps {\n  documentContext: DocumentContext;\n  currentVersion: CurrentVersion;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  mediaContext: MediaContext;\n  featureFlag: FeatureFlag;\n  bookmarkedNode: DocBlockNode<InlineNode>;\n  bookmarkedNodeLineage: Array<DocBlockNode<InlineNode>>;\n};\n\nexport default function ReasoningToolBookmarkSummary(props: ReasoningToolBookmarkSummaryProps) {\n  const {\n    documentContext,\n    currentVersion,\n    userContext,\n    displayContext,\n    mediaContext,\n    featureFlag,\n    bookmarkedNode,\n    bookmarkedNodeLineage,\n  } = props;\n\n  const editingContext = weakMemoizedGenerateEditingContextAllFalse();\n\n  const onClick = () => {\n    scrollToLineage(bookmarkedNodeLineage, userContext.addState);\n    displayContext.setFocusedBookmarkUid(bookmarkedNode.uid);\n  };\n\n  let displayData = null;\n  switch (bookmarkedNode.type) {\n    case \"paragraph\":\n      displayData = (\n        <DocParagraph\n          key={bookmarkedNode.uid}\n          simple\n          documentContext={documentContext}\n          currentVersion={currentVersion}\n          userContext={userContext}\n          editingContext={editingContext}\n          displayContext={displayContext}\n          mediaContext={mediaContext}\n          featureFlag={featureFlag}\n          {...bookmarkedNode}\n        />\n      );\n      break;\n    case \"numberedList\":\n    case \"regularList\":\n      displayData = (\n        <DocList\n          key={bookmarkedNode.uid}\n          simple\n          documentContext={documentContext}\n          currentVersion={currentVersion}\n          userContext={userContext}\n          editingContext={editingContext}\n          displayContext={displayContext}\n          mediaContext={mediaContext}\n          featureFlag={featureFlag}\n          {...bookmarkedNode}\n        />\n      );\n      break;\n    default:\n      displayData = <p>{capitalize(bookmarkedNode.type)} bookmark. Click to view.</p>;\n  }\n\n  if (!displayData) { return null; }\n\n  const ancestorSections = bookmarkedNodeLineage.filter((ancestor): ancestor is DocSectionType<InlineNode> => ancestor.type === \"section\");\n  const firstLevelSectionTitle = ancestorSections[1] ? ancestorSections[1].title : \"\";\n\n  return (\n    <div className=\"reasoning-tool-bookmark-summary\" onClick={onClick}>\n      <h6 className=\"reasoning-tool-bookmark-summary-card-title\">\n        <DocStyledText\n          content={firstLevelSectionTitle}\n          editingContext={editingContext}\n        />\n      </h6>\n      {displayData}\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { newSetKeyValueChange } from \"../../../../helpers/Doc/changes\";\n\ninterface DocPrerequisiteMetadataProps {\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  userContext: UserContext;\n  rootUid: string;\n  possible_prerequisite?: boolean;\n  prerequisite_document_id?: number;\n};\n\nexport default function DocPrerequisiteMetadata(props: DocPrerequisiteMetadataProps) {\n  const {\n    editingContext,\n    editingContextExtra,\n    userContext,\n    rootUid,\n    possible_prerequisite = false,\n    prerequisite_document_id,\n  } = props\n\n  if (!userContext.permissions.updatePrerequisiteSubservient) {\n    return null;\n  }\n\n  return (\n    <div style={{padding: \"0 5px\"}}>\n      <p><strong>Set this case as a Prerequisite case (not available when this case is set as subervient)</strong></p>\n\n      <label>\n        <input\n          type=\"checkbox\"\n          checked={possible_prerequisite}\n          onChange={() => {\n            editingContext.addChange(newSetKeyValueChange(rootUid, \"possible_prerequisite\", !possible_prerequisite));\n          }}\n          disabled={!!prerequisite_document_id || !userContext.permissions.updatePrerequisiteSubservient}\n        />\n        Make this case a prerequisite</label>\n\n      <p style={{marginTop: \"20px\"}}><strong>Make this case subservient to an existing prerequisite case (not available when this case is set as prerequisite).</strong></p>\n\n      <select\n        value={prerequisite_document_id}\n        onChange={(e) => {\n          const new_prerequisite_document_id = e.target.value === \"\" ? null : e.target.value;\n          editingContext.addChange(newSetKeyValueChange(rootUid, \"prerequisite_document_id\", new_prerequisite_document_id));\n        }}\n        disabled={possible_prerequisite || !userContext.permissions.updatePrerequisiteSubservient}\n      >\n        <option value={\"\"}>Select Prerequisite Case</option>\n        {editingContextExtra.possiblePrerequisiteDocuments.map(possiblePrerequisiteDocument => (\n          <option\n            key={possiblePrerequisiteDocument.id}\n            value={possiblePrerequisiteDocument.id}\n          >\n            {possiblePrerequisiteDocument.title}\n          </option>\n        ))}\n      </select>\n    </div>\n  )\n}\n","import * as React from \"react\";\n\nimport GenModal from \"../../Gen/Modal/component\";\nimport ReasoningToolPanel from \"./Panel\";\nimport NewEditDocContainer from \"../Container\";\nimport { changesDisplayModes } from \"../../../helpers/Doc/changes\";\n\ninterface CaseTeachingPointsPanelProps {\n  userContext: UserContext;\n  mergedData: MergedData;\n  mappingContext: MappingContext;\n};\n\ninterface CaseTeachingPointsPanelState {\n  selectedTeachingPoint?: ReusableObject;\n};\n\nexport default class CaseTeachingPointsPanel extends React.Component<CaseTeachingPointsPanelProps, CaseTeachingPointsPanelState> {\n  constructor(props: CaseTeachingPointsPanelProps) {\n    super(props);\n\n    this.state = {};\n  }\n\n  closeTeachingPointModal(event: React.MouseEvent<HTMLButtonElement>) {\n    event.preventDefault();\n    this.setState({selectedTeachingPoint: undefined})\n  }\n\n  openTeachingPointModal(reusableObject: ReusableObject) {\n    this.setState({selectedTeachingPoint: reusableObject})\n  }\n\n  render() {\n    let modal\n    if (this.state.selectedTeachingPoint) {\n      modal = <GenModal open={this.state.selectedTeachingPoint}>\n        <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n          <div>\n            <div style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n              <NewEditDocContainer\n                docType=\"ReusableObject\"\n                documentId={this.state.selectedTeachingPoint.id}\n                versionId={this.state.selectedTeachingPoint.review_variant_id}\n                currentUser={{\n                  id: this.props.userContext.id,\n                  first_name: this.props.userContext.firstName,\n                  last_name: this.props.userContext.lastName,\n                  email: this.props.userContext.email,\n                }}\n                isAdmin={this.props.userContext.isAdmin}\n                permissions={{}}\n                isEmbeded\n                defaultChangesDisplayMode={changesDisplayModes.HIGHLIGHT_ALL_CHANGES}\n              />\n            </div>\n            <div>\n              <button onClick={this.closeTeachingPointModal.bind(this)}>Close</button>\n            </div>\n          </div>\n        </div>\n      </GenModal>\n    }\n\n    return (<>\n      {modal}\n      <ReasoningToolPanel\n        key=\"CASE TEACHING POINTS\"\n        title=\"CASE TEACHING POINTS\"\n      >\n        <h3>{this.props.mergedData.title.text}</h3>\n        <ul>\n          {\n            this.props.mappingContext.reusableObjects.map((reusableObject) => {\n                let styleLink = reusableObject.reusable_object_edited ? {color: 'red'} : {}\n                return <li key={reusableObject.id}>\n                  <a href={\"\"} style={styleLink}\n                     onClick={() => this.openTeachingPointModal(reusableObject)}>{reusableObject.content_title}</a>\n                </li>\n              })\n          }\n        </ul>\n      </ReasoningToolPanel>\n    </>);\n  }\n}\n\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\nimport AqueductTable from \"../../Reactabular/aqueduct_table\";\nimport GenModal from \"../../Gen/Modal/component\";\nimport NewEditDocContainer from \"../Container\";\n\nimport { changesDisplayModes } from \"../../../helpers/Doc/changes\";\n\ninterface CaseMapPanelProps {\n  userContext: UserContext;\n  mappingContext: MappingContext;\n  mergedData: MergedData;\n};\n\ninterface CaseMapPanelState {\n  selectedTeachingPoint?: ReusableObject;\n  selectedAssessmentQuestion?: AssessmentQuestion;\n};\n\nexport default class CaseMapPanel extends React.Component<CaseMapPanelProps, CaseMapPanelState> {\n  constructor(props: CaseMapPanelProps) {\n    super(props);\n    this.state = {};\n  }\n\n  closeTeachingPointModal(event: React.MouseEvent<HTMLButtonElement>) {\n    event.preventDefault();\n    this.setState({selectedTeachingPoint: undefined})\n  }\n\n  openTeachingPointModal(reusableObject: ReusableObject) {\n    event.preventDefault();\n    this.setState({selectedTeachingPoint: reusableObject})\n  }\n\n  closeAssessmentQuestionModal(event: React.MouseEvent<HTMLButtonElement>) {\n    event.preventDefault();\n    this.setState({selectedAssessmentQuestion: undefined})\n  }\n\n  openAssessmentQuestionModal(assessmentQuestion: AssessmentQuestion) {\n    event.preventDefault();\n    this.setState({selectedAssessmentQuestion: assessmentQuestion})\n  }\n\n  render() {\n    let modal\n    if (this.state.selectedTeachingPoint) {\n      modal = <GenModal open={this.state.selectedTeachingPoint}>\n        <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n          <div style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n            <NewEditDocContainer\n              docType=\"ReusableObject\"\n              documentId={this.state.selectedTeachingPoint.id}\n              versionId={this.state.selectedTeachingPoint.review_variant_id}\n              currentUser={{\n                id: this.props.userContext.id,\n                first_name: this.props.userContext.firstName,\n                last_name: this.props.userContext.lastName,\n                email: this.props.userContext.email,\n              }}\n              isAdmin={this.props.userContext.isAdmin}\n              permissions={{}}\n              isEmbeded\n              defaultChangesDisplayMode={changesDisplayModes.HIGHLIGHT_ALL_CHANGES}\n            />\n          </div>\n          <div>\n            <button onClick={this.closeTeachingPointModal.bind(this)}>Close</button>\n          </div>\n        </div>\n      </GenModal>\n    }\n\n    let assessmentQuestionModal\n    if (this.state.selectedAssessmentQuestion) {\n      let learningObjective;\n      if(this.state.selectedAssessmentQuestion.mapped_learning_objective_edited){\n        learningObjective = <label style={{color: 'red'}}>{this.state.selectedAssessmentQuestion[\"mapped_learning_objective\"]}</label>\n      }else{\n        learningObjective= <>{this.state.selectedAssessmentQuestion[\"mapped_learning_objective\"]}</>\n      }\n      let teachingPoint;\n      if(this.state.selectedAssessmentQuestion.mapped_teaching_point_edited){\n        teachingPoint = <label style={{color: 'red'}}>{this.state.selectedAssessmentQuestion[\"mapped_teaching_point\"]}</label>\n      }else{\n        teachingPoint= <>{this.state.selectedAssessmentQuestion[\"mapped_teaching_point\"]}</>\n      }\n      let correctAnswer;\n      if(this.state.selectedAssessmentQuestion.answer_edited){\n        correctAnswer = <label style={{color: 'red'}}>{this.state.selectedAssessmentQuestion[\"sr_version_correct_answer\"]}</label>\n      }else{\n        correctAnswer= <>{this.state.selectedAssessmentQuestion[\"sr_version_correct_answer\"]}</>\n      }\n\n      assessmentQuestionModal = <GenModal open={this.state.selectedAssessmentQuestion} onClick={(e) => e.stopPropagation()}>\n        <div className=\"gen-modal-panel gen-modal-media-menu\" style={{marginTop: 90 + 'px'}}>\n          <div style={{\"fontWeight\": \"bold\", \"fontSize\": \"1.2vw\"}}>\n            <NewEditDocContainer\n              documentId={this.state.selectedAssessmentQuestion.editing_document_id}\n              versionId={this.state.selectedAssessmentQuestion.editing_document.scheduled_review_version_id}\n              currentUser={{\n                id: this.props.userContext.id,\n                first_name: this.props.userContext.firstName,\n                last_name: this.props.userContext.lastName,\n                email: this.props.userContext.email,\n              }}\n              isAdmin={this.props.userContext.isAdmin}\n              permissions={{}}\n              isEmbeded\n              defaultChangesDisplayMode={changesDisplayModes.HIGHLIGHT_ALL_CHANGES}\n            />\n          </div>\n          <div><h6>Correct Answer: {correctAnswer}</h6></div><br/>\n          <div><h6>{`Document: ${this.state.selectedAssessmentQuestion[\"document_title\"]}`}</h6></div><br/>\n          <div><h6>{`Scorable: ${this.state.selectedAssessmentQuestion[\"scorable?\"]}`}</h6></div><br/>\n          <div><h6>{`Difficulty: ${this.state.selectedAssessmentQuestion[\"difficulty\"]}`}</h6></div><br/>\n          <div><h6>{`Discrimination: ${this.state.selectedAssessmentQuestion[\"discrimination\"]}`}</h6></div><br/>\n          <div><h6>{`Status: ${this.state.selectedAssessmentQuestion[\"status\"]}`}</h6></div><br/>\n          <div><h6>{`Efficiency timing: ${this.state.selectedAssessmentQuestion[\"status\"] ? this.state.selectedAssessmentQuestion.efficiency_breakpoints_seconds.toString() : \"\"}`}</h6></div><br/>\n          <div><h6>Learning Objective: {learningObjective}</h6></div><br/>\n          <div><h6>Teaching Point: {teachingPoint}</h6></div><br/>\n          <div><h6>{`Operational Difficulty: ${this.state.selectedAssessmentQuestion[\"difficulty\"]}`}</h6></div><br/>\n          <div><h6>{`Operational Discrimination: ${this.state.selectedAssessmentQuestion[\"discrimination\"]}`}</h6></div><br/>\n          <div><h6>{`Operational Administrations Count: ${this.state.selectedAssessmentQuestion[\"administrations_count\"]}`}</h6></div><br/>\n          <br/>\n          <div>\n            <button onClick={this.closeAssessmentQuestionModal.bind(this)}>Close</button>\n          </div>\n        </div>\n      </GenModal>\n    }\n\n    let row_hashes = []\n    let row_hash = {}\n    let idx = 0\n    if(this.props.mappingContext.learningObjectiveReusableObjects && this.props.mappingContext.learningObjectiveReusableObjects.length > 0){\n      this.props.mappingContext.learningObjectiveReusableObjects.forEach((learningObjectiveReusableObject) => {\n        let loro_data = {\n          learning_objective: learningObjectiveReusableObject.learning_objective.name,\n          teaching_point: learningObjectiveReusableObject.reusable_object.content_title,\n          teaching_point_edited: learningObjectiveReusableObject.reusable_object.reusable_object_edited,\n          openTeachingPointModal: this.openTeachingPointModal.bind(this),\n          teachingPointObject: learningObjectiveReusableObject.reusable_object,\n        }\n        if(learningObjectiveReusableObject.questions.length==0){\n          idx = idx+1\n          row_hash = {\n            ...loro_data,\n            id: idx,\n            assessment_question: \"\",\n            body_system: \"\",\n          }\n          row_hashes.push(row_hash)\n        } else{\n          learningObjectiveReusableObject.questions.forEach((question) => {\n            idx = idx+1\n            row_hash = {\n              ...loro_data,\n              id: idx,\n              assessment_question: question.case_summary_identifier,\n              body_system: question.mapped_system,\n              current_use: question.current_use,\n              assessmentQuestionObject: question,\n              openAssessmentQuestionModal: this.openAssessmentQuestionModal.bind(this),\n              isMappedSystemEdited: question.is_mapped_system_edited,\n              isAssessmentQuestionEdited: question.question_edited,\n              isAssessmentQuestionUsedAvailableForm: question.used_in_available_form,\n            }\n            row_hashes.push(row_hash)\n          })\n        }\n      })\n    }\n\n    let caseMapTable = null\n    if(row_hashes.length==0){\n      caseMapTable = <h5>There are no mapped learning objectives.</h5>\n    }else{\n      caseMapTable = <AqueductTable\n        table_def=\"case_map\"\n        name_prefix=\"learningObjectiveReusableObjects\"\n        rows={row_hashes}\n      />\n    }\n\n    return (<>\n      {modal}\n      {assessmentQuestionModal}\n      <ReasoningToolPanel\n        key=\"CASE MAP\"\n        title={`Case Content Map: ${this.props.mergedData.title.text.split(\":\")[0]}`}\n        wide={true}\n      >\n        <p>This case content map displays the Teaching Point(s) that are mapped to each learning objective in 1:1 associations grouped by row.</p>\n        {caseMapTable}\n      </ReasoningToolPanel>\n    </>);\n  }\n}\n","import * as React from \"react\";\n\nimport DocTextInput from \"../BlockNodes/TextInput\";\nimport DocRatingBar from \"../BlockNodes/RatingBar\";\n\nimport {\n  weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../helpers/Doc/context\";\n\ninterface ReasoningToolFeedbackSummaryProps {\n  index: number;\n  question: string;\n  value: number;\n  submitted: boolean;\n  comment: string;\n  maxValue?: number;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  currentVersion: CurrentVersion;\n  documentContext: DocumentContext;\n  featureFlag: FeatureFlag;\n  mediaContext: MediaContext;\n};\n\nexport default function ReasoningToolFeedbackSummary({\n  index,\n  question = \"\",\n  value = 0,\n  submitted = false,\n  comment = \"\",\n  maxValue = 5,\n  userContext,\n  displayContext,\n  currentVersion,\n  documentContext,\n  featureFlag,\n  mediaContext,\n}: ReasoningToolFeedbackSummaryProps) {\n  return (\n    <div className={`reasoning-tool-feedback-summary ${submitted && \"submitted\"}`}>\n      {question}\n\n      <DocRatingBar\n        type={\"ratingBar\"}\n        uid={`feedback_rating_bar_${index}`}\n        value={value}\n        inactiveBool={submitted}\n        maxValue={maxValue}\n        editingContext={weakMemoizedGenerateEditingContextAllFalse()}\n        userContext={userContext}\n        displayContext={displayContext}\n        currentVersion={currentVersion}\n        documentContext={documentContext}\n        featureFlag={featureFlag}\n        mediaContext={mediaContext}\n      />\n\n      <h5>Comment (optional)</h5>\n      <DocTextInput\n        type={\"textInput\"}\n        uid={`feedback_text_input_${index}`}\n        value={comment}\n        inactiveBool={submitted}\n        characterLimit={1000}\n        editingContext={weakMemoizedGenerateEditingContextAllFalse()}\n        userContext={userContext}\n        displayContext={displayContext}\n        currentVersion={currentVersion}\n        documentContext={documentContext}\n        featureFlag={featureFlag}\n        mediaContext={mediaContext}\n      />\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport {\n  find,\n  pickBy,\n  size,\n  startsWith,\n} from \"lodash\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport ReasoningToolFeedbackSummary from \"./FeedbackSummary\";\n\nimport {stripState} from \"../../../helpers/Doc/documentUserState\";\n\nconst PANEL_QUESTIONS = [\n  \"Studying this Integrated Illness Script was a valuable use of my time.\",\n  \"I will apply what I learned from this Integrated Illness Script to patient care.\",\n  \"I would recommend this Integrated Illness Script to another student.\",\n];\n\ninterface ReasoningToolFeedbackPanelProps {\n  userState: UserState;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  currentVersion: CurrentVersion;\n  documentContext: DocumentContext;\n  featureFlag: FeatureFlag;\n  mediaContext: MediaContext;\n};\n\nexport default function ReasoningToolFeedbackPanel({\n  userState,\n  userContext,\n  displayContext,\n  currentVersion,\n  documentContext,\n  featureFlag,\n  mediaContext,\n}: ReasoningToolFeedbackPanelProps) {\n  const strippedState = stripState(userState);\n\n  const feedbackToAquifer = {\n    ratingBars: pickBy(strippedState, (value, key) => value && startsWith(key, \"feedback_rating_bar\")),\n    comments: pickBy(strippedState, (value, key) => value && startsWith(key, \"feedback_text_input\")),\n    submitted: find(strippedState, {feedback_submitted: true}) !== undefined,\n  };\n\n  const panelChildren = PANEL_QUESTIONS.map((question, index) => {\n    const prettyIndex = index + 1;\n\n    return (\n      <ReasoningToolFeedbackSummary\n        key={`feedback_summary_${prettyIndex}`}\n        index={prettyIndex}\n        question={question}\n        value={feedbackToAquifer[\"ratingBars\"][`feedback_rating_bar_${prettyIndex}`] && feedbackToAquifer[\"ratingBars\"][`feedback_rating_bar_${prettyIndex}`].value}\n        submitted={feedbackToAquifer[\"submitted\"]}\n        comment={feedbackToAquifer[\"comments\"][`feedback_text_input_${prettyIndex}`] && feedbackToAquifer[\"comments\"][`feedback_text_input_${prettyIndex}`].value}\n        userContext={userContext}\n        displayContext={displayContext}\n        currentVersion={currentVersion}\n        documentContext={documentContext}\n        featureFlag={featureFlag}\n        mediaContext={mediaContext}\n      />\n    );\n  });\n\n  const completedFeedback = size(feedbackToAquifer[\"ratingBars\"]);\n  const partiallyCompleteFeedback = completedFeedback > 0 && completedFeedback !== PANEL_QUESTIONS.length;\n  const noFeedback = completedFeedback === 0;\n\n  return (\n    <ReasoningToolPanel\n      key=\"Feedback to Aquifer\"\n      title=\"Feedback to Aquifer\"\n      infoBox=\"We value your input! Please provide your feedback to Aquifer using the easy 5-star ratings below, and enter your comments if desired.\"\n      displayContext={displayContext}\n    >\n      {panelChildren}\n      <GenButton\n        name={partiallyCompleteFeedback ? `${completedFeedback} out of ${PANEL_QUESTIONS.length}` : feedbackToAquifer[\"submitted\"] ? \"Submitted\" : \"Submit\"}\n        confirmTitle=\"Ready to Submit?\"\n        confirmMessage=\"If so, click Submit to send your feedback to Aquifer.\"\n        confirmOKText=\"Submit\"\n        highlighted\n        disabled={noFeedback || partiallyCompleteFeedback || feedbackToAquifer[\"submitted\"]}\n        onClick={(e) => {\n          userContext.addState({\n            [\"feedback_submit_button\"]: {\n              feedback_submitted: true,\n            },\n          });\n\n          window.customConfirmBox({\n            title: \"Thank you!\",\n            message: \"Thank you for submitting feedback to Aquifer, which we use to improve our products. Aquifer does not respond to individual feedback. If you require a response, please use the Feedback form accessed from the top menu bar.\",\n            callback: () => {},\n            showsCancel: false,\n          });\n        }}\n      />\n    </ReasoningToolPanel>\n  );\n}\n","import React from 'react'\n\nexport default function GenGen(props) {\n  const {\n    canShow=true,\n    children=[]\n  } = props\n\n  if (canShow) {\n    return(children)\n  } else {\n    return(null)\n  }\n}\n","import React from 'react'\n\nimport GenGen from 'Gen/component'\n\nexport default function GenSpan(props) {\n  const {\n    value,\n    onChange,\n    canEdit=true,\n    isEditing=false,\n    onSpanClick,\n    placeholder='',\n    children='',\n    onBlur,\n    onEnterKeyPress,\n    shouldAutoFocus=false,\n    className,\n    isControlled=false\n  } = props\n\n  function onKeyPress(e) {\n    if ((e.which || e.keyCode) === 13) {\n      e.preventDefault()\n      onEnterKeyPress(e)\n    }\n  }\n\n  return <GenGen {...props}>\n    {canEdit && isEditing ? (\n      isControlled ? (\n        <input\n          key='gen-span-input'\n          className='gen-span-input'\n          type='text'\n          value={children}\n          placeholder={placeholder}\n          onChange={onChange}\n          onBlur={onBlur}\n          onKeyPress={onKeyPress}\n          autoFocus={shouldAutoFocus}\n        />\n      ) : (\n        <input\n          key='gen-span-input'\n          className='gen-span-input'\n          type='text'\n          defaultValue={children}\n          placeholder={placeholder}\n          onChange={onChange}\n          onBlur={onBlur}\n          onKeyPress={onKeyPress}\n          autoFocus={shouldAutoFocus}\n        />\n      )\n    ):(\n      <span onClick={onSpanClick}>{children}</span>\n    )}\n  </GenGen>\n}\n","import React from 'react'\n\nimport * as classNames from 'classnames'\n\nimport GenGen from 'Gen/component'\n\nexport default function GenParagraph(props) {\n  const {\n    value,\n    onChange,\n    canEdit=true,\n    isEditing=false,\n    onSpanClick,\n    onEnterKeyPress,\n    placeholder='',\n    children='',\n    onBlur,\n    shouldAutoFocus=false,\n    rows=2,\n    className,\n    isControlled=false\n  } = props\n\n  function onKeyPress(e) {\n    if ((e.which || e.keyCode) === 13) {\n      e.preventDefault()\n      onEnterKeyPress(e)\n    }\n  }\n\n  return <GenGen {...props}>\n    {canEdit && isEditing ? (\n      isControlled ? (\n        <textarea\n          key='gen-paragraph-input'\n          className='gen-paragraph-input'\n          value={children}\n          placeholder={placeholder}\n          onChange={onChange}\n          onBlur={onBlur}\n          onKeyPress={onKeyPress}\n          autoFocus={shouldAutoFocus}\n          rows={rows}\n        />\n      ) : (\n        <textarea\n          key='gen-paragraph-input'\n          className='gen-paragraph-input'\n          defaultValue={children}\n          placeholder={placeholder}\n          onChange={onChange}\n          onBlur={onBlur}\n          onKeyPress={onKeyPress}\n          autoFocus={shouldAutoFocus}\n          rows={rows}\n        />\n      )\n    ):(\n      <p className={classNames(className, 'gen-paragraph')} onClick={onSpanClick}>\n        {children}\n      </p>\n    )}\n  </GenGen>\n}\n","import * as React from \"react\";\nimport { isEmpty, trim, last } from \"lodash\";\n\nimport {\n  findNodesLineages,\n} from \"../../../helpers/Doc/Functions/base\";\n\nimport { DIAGNOSES, FINDINGS, NOTES } from \"../../../reducers/ui/reasoningTool\";\nimport ReasoningToolDiagnosisSummary from \"./DiagnosisSummary\";\nimport ReasoningToolNoteSummary from \"./NoteSummary\";\nimport ReasoningToolFindingSummary from \"./FindingSummary\";\nimport ReasoningToolPanel from \"./Panel\";\nimport analyticsModule from \"../../../../application/analytics.js\";\n\nconst titles = {\n  [DIAGNOSES]: \"Diagnoses\",\n  [FINDINGS]: \"Findings\",\n  [NOTES]: \"Notes\",\n};\n\nconst infoBoxes = {\n  [NOTES]: \"Click to add a new note below.  These notes are only visible to you.\",\n};\n\nconst panelComponents = {\n  [DIAGNOSES]: ReasoningToolDiagnosisSummary,\n  [FINDINGS]: ReasoningToolFindingSummary,\n  [NOTES]: ReasoningToolNoteSummary,\n};\n\nfunction attachNodesToNotes(notes: Array<DocNote>, doc) {\n  const noteNodesUids = notes.map((note) => note.notedNodeUid).filter((uid) => uid);\n  const noteNodeLineages = findNodesLineages(doc, (node) => node.type && noteNodesUids.includes(node.uid));\n  const noteNodeLineagesLookup = Object.fromEntries(noteNodeLineages.map((noteNodeLineage: Array<any>) => [last(noteNodeLineage).uid, noteNodeLineage])); // TODO: Remove Array<any>\n\n  return notes.map((note) => { return {...note, noteNodeLineage: noteNodeLineagesLookup[note.notedNodeUid]}; });\n}\n\ninterface ReasoningToolTextListPanelProps {\n  wide: boolean;\n  documentContext: DocumentContext;\n  displayContext: DisplayContext;\n  userContext: UserContext;\n  reasoningToolContext: ReasoningToolContext;\n  leadingDiagnosis: string;\n  diagnoses: Array<DocDiagnosis>;\n  findings: Array<DocFinding>;\n  notes: Array<DocNote>;\n};\n\nexport default function ReasoningToolTextListPanel(props: ReasoningToolTextListPanelProps) {\n  const {\n    wide,\n    documentContext,\n    displayContext,\n    userContext,\n    reasoningToolContext,\n    leadingDiagnosis,\n    diagnoses = [],\n    findings = [],\n    notes = [],\n  } = props;\n\n  const {\n    activePanel,\n    togglePanelDeleting,\n    panelNodeEditStart,\n    panelNodeEditEnd,\n    isPanelDeleting,\n    activeEditNodeUid,\n  } = reasoningToolContext;\n\n\n  let items = [];\n  let panelData : {\n    addNode: (uid: string, data?: Record<string, any>) => void;\n    updateNode: (uid: string, data: Record<string, any>) => void;\n    deleteNode: (uid: string) => void;\n    setIsDangerousDiagnosis?: (uid: string, value: boolean) => void;\n    setIsLeadingDiagnosis?: (uid: string) => void;\n    userContext?: UserContext;\n  }\n  switch (activePanel) {\n    case DIAGNOSES:\n      panelData = {\n        addNode: userContext.addDiagnosis,\n        updateNode: userContext.updateDiagnosis,\n        deleteNode: userContext.deleteDiagnosis,\n        setIsDangerousDiagnosis: userContext.setIsDangerousDiagnosis,\n        setIsLeadingDiagnosis: userContext.setIsLeadingDiagnosis,\n      };\n\n      items = diagnoses;\n      break;\n    case FINDINGS:\n      panelData = {\n        addNode: userContext.addFinding,\n        updateNode: userContext.updateFinding,\n        deleteNode: userContext.deleteFinding,\n      };\n\n      items = findings;\n      break;\n    case NOTES:\n      panelData = {\n        addNode: userContext.addNote,\n        updateNode: userContext.updateNote,\n        deleteNode: userContext.deleteNote,\n        userContext: userContext,\n      };\n\n      items = attachNodesToNotes(notes, props);\n      break;\n    default:\n      return null;\n  }\n\n  const PanelComponent = panelComponents[activePanel];\n  const renderedItems = items.map((item) => {\n    const startNodeEdit = () => panelNodeEditStart(item.uid);\n\n    const endNodeEdit = (e: React.FocusEvent<HTMLInputElement>) => {\n      if (isEmpty(trim(e.target.value))) {\n        panelData.deleteNode(item.uid);\n        displayContext.setFocusedBookmarkUid(null);\n      } else {\n        panelData.updateNode(item.uid, {content: e.target.value}),\n        panelNodeEditEnd(item.uid);\n        trackEvent(item.type);\n      }\n    };\n\n    return (\n      <PanelComponent\n        {...item}\n        key={item.uid}\n        isEditing={!!activeEditNodeUid && item.uid === activeEditNodeUid}\n        startNodeEdit={startNodeEdit}\n        endNodeEdit={endNodeEdit}\n        isLeadingDiagnosis={!!leadingDiagnosis && item.uid === leadingDiagnosis}\n        documentContext={documentContext}\n        displayContext={displayContext}\n        {...panelData}\n      />\n    );\n  });\n\n  const trackEvent = (type) => {\n    const caseName = documentContext.title\n\n    switch(type) {\n      case 'diagnosis':\n        analyticsModule.track('add_a_diagnosis', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n      case 'finding':\n        analyticsModule.track('add_a_finding', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n      case 'note':\n        analyticsModule.track('use_notes_feature_on_the_page', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n    }\n  }\n\n  return (\n    <ReasoningToolPanel\n      title={titles[activePanel]}\n      infoBox={infoBoxes[activePanel]}\n      isDeleting={isPanelDeleting}\n      toggleDeleting={togglePanelDeleting}\n      isAddable\n      wide={wide}\n      panelNodeEditStart={panelNodeEditStart}\n      displayContext={displayContext}\n      {...panelData}\n    >\n      {renderedItems}\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from \"react\";\nimport * as classNames from \"classnames\";\n\nimport GenSpan from \"../../Gen/Span/component\";\n\ninterface ReasoningToolDiagnosisSummaryProps {\n  uid: string;\n  content: string;\n  isEditing: boolean;\n  startNodeEdit: () => void;\n  endNodeEdit: React.FocusEventHandler<HTMLInputElement>;\n  isLeadingDiagnosis: boolean;\n  isDangerousDiagnosis: boolean;\n  setIsDangerousDiagnosis: (uid: string, value: boolean) => void;\n  setIsLeadingDiagnosis: (uid: string) => void;\n};\n\nexport default function ReasoningToolDiagnosisSummary({\n  uid,\n  content = \"\",\n  isEditing,\n  startNodeEdit,\n  endNodeEdit,\n  isLeadingDiagnosis = false,\n  isDangerousDiagnosis = false,\n  setIsDangerousDiagnosis,\n  setIsLeadingDiagnosis,\n}: ReasoningToolDiagnosisSummaryProps) {\n  return (\n    <div className=\"reasoning-tool-diagnosis-summary\">\n      <div className=\"reasoning-tool-diagnosis-summary-content\">\n        <GenSpan\n          value={content}\n          placeholder=\"Enter Diagnosis...\"\n          shouldAutoFocus\n          isEditing={isEditing}\n          onSpanClick={startNodeEdit}\n          onBlur={endNodeEdit}\n          onEnterKeyPress={endNodeEdit}\n        >\n          {content}\n        </GenSpan>\n      </div>\n      <div className=\"reasoning-tool-diagnosis-summary-buttons\">\n        <i onClick={() => setIsDangerousDiagnosis(uid, !isDangerousDiagnosis)} className={classNames(\"icon-warning\", \"dangerous\", {active: isDangerousDiagnosis})}></i>\n        <i onClick={() => setIsLeadingDiagnosis(uid)} className={classNames(\"icon-star\", \"leading\", {active: isLeadingDiagnosis})}></i>\n      </div>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport GenParagraph from \"../../Gen/Paragraph/component\";\n\ninterface ReasoningToolFindingSummaryProps {\n  content: string;\n  isEditing: boolean;\n  startNodeEdit: () => void;\n  endNodeEdit: React.FocusEventHandler<HTMLInputElement>;\n};\n\nexport default function ReasoningToolFindingSummary({\n  content = \"\",\n  isEditing,\n  startNodeEdit,\n  endNodeEdit,\n}: ReasoningToolFindingSummaryProps) {\n  return (\n    <div className=\"reasoning-tool-finding-summary\">\n      <GenParagraph\n        value={content}\n        placeholder=\"Enter Finding...\"\n        shouldAutoFocus\n        isEditing={isEditing}\n        onSpanClick={startNodeEdit}\n        onBlur={endNodeEdit}\n        onEnterKeyPress={endNodeEdit}\n      >\n        {content}\n      </GenParagraph>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { last, startCase } from \"lodash\";\n\nimport * as classNames from \"classnames\";\n\nimport GenParagraph from \"../../Gen/Paragraph/component\";\n\nimport DocList from \"../BlockNodes/List\";\nimport DocParagraph from \"../BlockNodes/Paragraph\";\n\nimport { scrollToLineage } from \"../../../helpers/Doc/scrollTo\";\n\nimport {\n  weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../helpers/Doc/context\";\n\ninterface ReasoningToolNoteSummaryProps {\n  content: string;\n  isEditing: boolean;\n  startNodeEdit: () => void;\n  endNodeEdit: React.FocusEventHandler<HTMLInputElement>;\n  noteNodeLineage: Array<DocBlockNode<InlineNode>>;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n  currentVersion: CurrentVersion;\n  userContext: UserContext;\n  mediaContext: MediaContext;\n  featureFlag: FeatureFlag;\n};\n\nexport default function ReasoningToolNoteSummary(props: ReasoningToolNoteSummaryProps) {\n  const {\n    content = \"\",\n    isEditing,\n    startNodeEdit,\n    endNodeEdit,\n    noteNodeLineage,\n    currentVersion,\n    displayContext,\n    documentContext,\n    userContext,\n    mediaContext,\n    featureFlag,\n  } = props;\n\n  let displayData, onClick;\n  if (noteNodeLineage) {\n    const noteNode = last(noteNodeLineage);\n\n    onClick = () => {\n      scrollToLineage(noteNodeLineage, userContext.addState);\n      displayContext.setFocusedBookmarkUid(noteNode.uid);\n    };\n\n    const editingContext = weakMemoizedGenerateEditingContextAllFalse();\n    switch (noteNode.type) {\n      case \"paragraph\":\n        displayData = (\n          <DocParagraph\n            key={noteNode.uid}\n            simple\n            currentVersion={currentVersion}\n            documentContext={documentContext}\n            displayContext={displayContext}\n            editingContext={editingContext}\n            userContext={userContext}\n            mediaContext={mediaContext}\n            featureFlag={featureFlag}\n            {...noteNode}\n          />\n        );\n        break;\n      case \"numberedList\":\n      case \"regularList\":\n        displayData = (\n          <DocList\n            key={noteNode.uid}\n            simple\n            currentVersion={currentVersion}\n            documentContext={documentContext}\n            displayContext={displayContext}\n            editingContext={editingContext}\n            userContext={userContext}\n            mediaContext={mediaContext}\n            featureFlag={featureFlag}\n            {...noteNode}\n          />\n        );\n        break;\n      case \"image\":\n      case \"table\":\n      case \"video\":\n      case \"audio\":\n      default:\n        displayData = <p>{startCase(noteNode.type)} note. Click to view.</p>;\n    }\n    displayData = (\n      <>\n        <h6>Excerpt:</h6>\n        {displayData}\n        <hr />\n      </>\n    );\n  }\n\n  return (\n    <div className={classNames(\"reasoning-tool-note-summary\", {noted: noteNodeLineage})} onClick={onClick}>\n      {displayData}\n      <h6>Your Notes:</h6>\n      <GenParagraph\n        value={content}\n        placeholder=\"Enter Note...\"\n        shouldAutoFocus\n        isEditing={isEditing}\n        onSpanClick={startNodeEdit}\n        onBlur={endNodeEdit}\n        onEnterKeyPress={endNodeEdit}\n      >\n        {content}\n      </GenParagraph>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport { intToDateTimeString } from \"../../helpers/time_format\";\n\ninterface GenColorDotProps {\n  colorArray: ColorArray;\n};\n\nfunction GenColorDot(props: GenColorDotProps) {\n  const dotStyle = {\n    height: \"10px\",\n    width: \"10px\",\n    backgroundColor: `rgba(${props.colorArray})`,\n    borderRadius: \"50%\",\n    display: \"inline-block\",\n    marginRight: \"5px\",\n    marginLeft: \"5px\",\n  };\n\n  return (\n    <span\n      className=\"dot\"\n      style={dotStyle}\n    />\n  );\n}\n\ninterface DocAuthorHeaderProps {\n  colorArray: ColorArray;\n  authorName: string;\n  createdAt?: number;\n  children?: React.ReactNode;\n};\n\nexport default function DocAuthorHeader(props: DocAuthorHeaderProps) {\n  return (\n    <div style={{display: \"flex\"}}>\n      <div style={{flexGrow: 1}}>\n        <h6 style={{marginBottom: 0}}>\n          {props.authorName}\n          <GenColorDot colorArray={props.colorArray} />\n        </h6>\n        <p style={{fontSize: \".8em\", color: \"darkgray\", marginBottom: 0}}>{props.createdAt && intToDateTimeString(props.createdAt)}</p>\n      </div>\n      <div>\n        {props.children}\n      </div>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\n\nimport { newDeleteStudentFeedbackChange } from \"../../../helpers/Doc/changes\";\n\ninterface ReasoningToolStudentFeedbackProps {\n  userContext: UserContext;\n  editingContext: EditingContextInEditor;\n  studentFeedback: StudentFeedback;\n};\n\nexport default function ReasoningToolStudentFeedback(props: ReasoningToolStudentFeedbackProps) {\n  const {\n    userContext,\n    editingContext,\n    studentFeedback,\n  } = props;\n\n  return (\n    <div className=\"reasoning-tool-summary-of-edit\">\n      <DocAuthorHeader\n        authorName={studentFeedback.author_full_name}\n        colorArray={editingContext.colorLookup[studentFeedback.author_id]}\n        createdAt={studentFeedback.created_at}\n      >\n        {(studentFeedback.author_id === userContext.id || editingContext.shouldShowEditor) && <i style={{marginRight: \"5px\"}} className=\"fa fa-trash\" onClick={(e) => {\n          e.stopPropagation();\n          editingContext.addChange(newDeleteStudentFeedbackChange(studentFeedback.student_feedback_id));\n        }}></i>}\n      </DocAuthorHeader>\n      <p>{studentFeedback.text}</p>\n    </div>\n  );\n}\n","export default {\n  control: {\n    backgroundColor: '#fff',\n    fontSize: 14,\n    fontWeight: 'normal',\n  },\n\n  '&multiLine': {\n    control: {\n      fontFamily: 'monospace',\n      minHeight: 63,\n    },\n    highlighter: {\n      padding: 9,\n      border: '1px solid transparent',\n    },\n    input: {\n      padding: 9,\n      border: '1px solid silver',\n    },\n  },\n\n  '&singleLine': {\n    display: 'inline-block',\n    width: 180,\n\n    highlighter: {\n      padding: 1,\n      border: '2px inset transparent',\n    },\n    input: {\n      padding: 1,\n      border: '2px inset',\n    },\n  },\n\n  suggestions: {\n    list: {\n      backgroundColor: 'white',\n      border: '1px solid rgba(0,0,0,0.15)',\n      fontSize: 14,\n    },\n    item: {\n      padding: '5px 15px',\n      borderBottom: '1px solid rgba(0,0,0,0.15)',\n      '&focused': {\n        backgroundColor: '#cee4e5',\n      },\n    },\n  },\n}\n","export default {\n  backgroundColor: '#cee4e5',\n}\n","import * as React from \"react\";\nimport { HotKeys } from \"react-hotkeys\";\n\nimport GenButton from \"../../Gen/Button/component\";\nimport { MentionsInput, Mention, OnChangeHandlerFunc } from 'react-mentions'\n\nimport mentionsInputStyle from \"./CommentInput/mentionsInputStyle\";\nimport mentionStyle from \"./CommentInput/mentionStyle\";\n\ninterface DocCommentInputProps {\n  editors?: Array<EditorSpecialType>;\n\n  isActive: boolean;\n  onAddClick: (value: string) => void;\n  onCancelClick: () => void;\n  onFocus: () => void;\n\n  autoFocus?: boolean; // Can get rid of???\n};\n\ninterface DocCommentInputState {\n  textAreaValue: string;\n};\n\nexport default class DocCommentInput extends React.Component<DocCommentInputProps, DocCommentInputState> {\n  constructor(props: DocCommentInputProps) {\n    super(props);\n\n    this.state = {\n      textAreaValue: \"\",\n    };\n  }\n\n  handleChange(event: { target: { value: string } }) {\n    this.setState({textAreaValue: event.target.value});\n  }\n\n  render () {\n    const onAdd = () => {\n      this.props.onAddClick(this.state.textAreaValue);\n      this.setState({textAreaValue: \"\"});\n    };\n    const fetchUsers = (query: string) => {\n      const users = this.props.editors\n      if (!query) {\n        return users\n      }\n\n      const filteredUsers = users.filter((user) =>\n        user.display.toLowerCase().includes(query)\n      );\n     return filteredUsers\n    };\n\n    const HotKeysAnyType: any = HotKeys; // TODO: Remove when able to import type from HotKeys\n    return (\n      <HotKeysAnyType\n        handlers={{\n          return: (event: KeyboardEvent) => {onAdd(); return false;},\n          modReturn: (event: KeyboardEvent) => {onAdd(); return false;},\n        }}\n      >\n        <div className=\"doc-comment-input\" onClick={(e) => e.stopPropagation()}>\n        <MentionsInput\n          style={mentionsInputStyle}\n          value={this.state.textAreaValue}\n          onChange={this.handleChange.bind(this)}\n          placeholder=\"Comment\"\n          autoFocus={this.props.autoFocus}\n          onFocus={this.props.onFocus}\n        >\n          <Mention\n            style={mentionStyle}\n            trigger=\"@\"\n            data={fetchUsers}\n            markup={'@__display__{__id__}'}\n          />\n        </MentionsInput>\n\n\n        {(this.state.textAreaValue.length > 0 || this.props.isActive) && (\n          <div className=\"doc-comment-input-buttons\">\n            <GenButton\n              name=\"Add\"\n              highlighted\n              disabled={this.state.textAreaValue.length === 0}\n              onClick={onAdd}\n            />\n            <GenButton\n              name=\"Cancel\"\n              highlighted\n              onClick={() => {this.setState({textAreaValue: \"\"}); this.props.onCancelClick();}}\n            />\n          </div>\n        )}\n        </div>\n      </HotKeysAnyType>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\n\nimport { scrollToLineage } from \"../../../helpers/Doc/scrollTo\";\n\nimport { newDeleteSummaryOfEditChange } from \"../../../helpers/Doc/changes\";\n\ninterface ReasoningToolSummaryOfEditProps {\n  userContext: UserContext;\n  editingContext: EditingContextInEditor;\n  summaryOfEdit: AddSummaryOfEditClothedChange;\n  summaryOfEditLineage: Array<DocBlockNode<InlineNode>>;\n};\n\nexport default function ReasoningToolSummaryOfEdit(props: ReasoningToolSummaryOfEditProps) {\n  const {\n    userContext,\n    editingContext,\n    summaryOfEdit,\n    summaryOfEditLineage,\n  } = props;\n\n  const onClick = () => {\n    if (summaryOfEditLineage) {\n      scrollToLineage(summaryOfEditLineage, userContext.addState);\n    }\n  };\n\n  return (\n    <div className=\"reasoning-tool-summary-of-edit\" onClick={onClick}>\n      <DocAuthorHeader\n        authorName={summaryOfEdit.author_full_name}\n        colorArray={editingContext.colorLookup[summaryOfEdit.author_id]}\n        createdAt={summaryOfEdit.created_at}\n      >\n        {(editingContext.shouldShowEditor || summaryOfEdit.author_id === userContext.id) && <i style={{marginRight: \"5px\"}} className=\"fa fa-trash\" onClick={(e) => {\n          e.stopPropagation();\n          editingContext.addChange(newDeleteSummaryOfEditChange(summaryOfEdit.summary_of_edit_id));\n        }}></i>}\n      </DocAuthorHeader>\n      <p>{summaryOfEdit.text}</p>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport {full_url} from \"../../../helpers/url\";\n\nimport ReasoningToolPanel from \"./Panel\";\nimport CollapsibleListItem from \"../../Gen/CollapsibleList/Item/component\";\n\ninterface ReasoningToolEditorsChecklistTableProps {\n  activeMemberId: number;\n  checklistContents: Array<ChecklistContent>;\n  currentAssignmentId: number;\n  nextVersionId: number;\n};\n\ntype ReasoningToolEditorsChecklistTableState = Record<number, {\n  body: string,\n  checked: boolean,\n  collapsed: boolean,\n}>;\n\nexport default class ReasoningToolEditorsChecklistTable extends React.Component<ReasoningToolEditorsChecklistTableProps, ReasoningToolEditorsChecklistTableState> {\n  constructor(props: ReasoningToolEditorsChecklistTableProps) {\n    super(props);\n\n    let initialState = this.props.checklistContents.reduce((map: ReasoningToolEditorsChecklistTableState, item) => {\n      map[item.id] = { body: item.body, checked: item.checked, collapsed: false };\n      return map;\n    }, {});\n\n    this.state = initialState\n  }\n\n  handleCheckboxChange = (event: ChecklistContent) => {\n    fetch(full_url(`/projects/checklist_items/${event.id}`), {\n      method: 'PUT',\n      headers: ReactOnRails.authenticityHeaders({\n        'Accept': \"application/json\",\n        'Content-Type': 'application/json',\n      }),\n      body: JSON.stringify({\n        projects_checklist_item: {\n          checked: !event.checked\n        }\n      })\n    })\n    .then(response => {\n      if (!response.ok) {\n        throw new Error(response.statusText);\n      }\n    })\n    .catch(error => {\n      console.log(error);\n    });\n\n    let id = event.id\n    let checked = !this.state[id].checked\n\n    this.setState({[id]: {...this.state[id], checked: checked}});\n  }\n\n  render() {\n    let completeButtonStyle = {marginLeft: \"50px\"}\n    let checklistItems = this.props.checklistContents\n    let editingCompleteLink = window.location.origin + '/projects/project_members/' + this.props.activeMemberId\n    let project_id = new URLSearchParams(window.location.search).get('project_id');\n    if (!this.props.nextVersionId) {\n      editingCompleteLink +='/editing_complete'\n    } else {\n      editingCompleteLink += '/assignments/' + this.props.currentAssignmentId + '/complete?next_link=' + window.location.origin + '/versions/' + this.props.nextVersionId + '/edit?project_id=' + project_id\n    }\n\n    let renderedTable;\n    if (checklistItems?.length) {\n      renderedTable = <table className='reasoning-tool-lab-values-table'>\n        <tbody>\n          {checklistItems.map(( item, index ) => {\n            let list = item.body.split(/(?= -)/g)\n            let content = list.splice(1).map((e, i) => {\n              return { key: `${item.id}-${i}`, content: e }\n            });\n            return (\n              <tr>\n                <td style={{width: \"5%\", verticalAlign:\"top\", paddingTop:\"12px\"}}>\n                  <input type=\"checkbox\" checked={this.state[item.id].checked} onChange={this.handleCheckboxChange.bind(this, item)} />\n                </td>\n                <td>\n                  <CollapsibleListItem header={list} content={content} />\n                </td>\n              </tr>\n            );\n          })}\n        </tbody>\n        <button type='button' style={completeButtonStyle} onClick={(e) => {\n          e.preventDefault();\n          window.location.href = editingCompleteLink;\n          }}> Editing Complete </button>\n      </table>\n    } else {\n      renderedTable = <table className='reasoning-tool-lab-values-table'>\n        <tbody>\n          <tr>\n            <td style={{width: \"10%\"}}>\n            </td>\n            <td>\n              <strong>You are a simple reviewer</strong>\n            </td>\n          </tr>\n        </tbody>\n        <button type='button' style={completeButtonStyle} onClick={(e) => {\n          e.preventDefault();\n          window.location.href = editingCompleteLink;\n          }}> Editing Complete </button>\n      </table>\n    }\n\n    return (\n      <ReasoningToolPanel\n        key=\"Editor's Checklist\"\n        title=\"Editor's Checklist\"\n      >\n        {renderedTable}\n      </ReasoningToolPanel>\n    )\n  }\n}\n","import * as React from \"react\";\n\nimport { padStart } from \"lodash\";\n\nimport { currentTimeInSeconds } from \"../../../helpers/time_format\";\n\ninterface ReasoningToolTimerProps {\n  timeLimit: number;\n  timeUsedBeforeCurrentSegment: number;\n  currentTimeSegmentStart: number;\n  displayContext: DisplayContext;\n  shouldShow: boolean;\n};\n\ninterface ReasoningToolTimerState {\n  timeLeftInSeconds?: number;\n};\n\nexport default class ReasoningToolTimer extends React.Component<ReasoningToolTimerProps, ReasoningToolTimerState> {\n  timer?: ReturnType<typeof setTimeout>;\n\n  constructor(props: ReasoningToolTimerProps) {\n    super(props);\n\n    const timeLeft = this.calculateTimeLeft();\n    if (timeLeft) {\n      this.state = {timeLeftInSeconds: timeLeft};\n    } else {\n      this.state = {};\n    }\n  }\n\n  componentDidMount() {\n    if ( this.props.timeLimit ) {\n      this.timer = setInterval(this.tick.bind(this), 1000);\n    }\n  }\n\n  componentWillUnmount() {\n    if ( this.timer ) {\n      clearInterval(this.timer);\n    }\n  }\n\n  tick() {\n    const timeLeft = this.calculateTimeLeft();\n    if (timeLeft) {\n      this.setState({timeLeftInSeconds: timeLeft});\n    }\n  }\n\n  calculateTimeLeft() {\n    if (this.props.timeLimit) {\n      let timeLeft = this.props.timeLimit;\n      if (this.props.timeUsedBeforeCurrentSegment) {\n        timeLeft = timeLeft - this.props.timeUsedBeforeCurrentSegment;\n      }\n\n      if (this.props.currentTimeSegmentStart) {\n        timeLeft = timeLeft - (currentTimeInSeconds() - this.props.currentTimeSegmentStart);\n      }\n\n      return timeLeft;\n    } else {\n      return null;\n    }\n  }\n\n  render() {\n    const {\n      displayContext,\n      shouldShow = true,\n    } = this.props;\n\n    if (!shouldShow) { return null; }\n\n    if (this.state.timeLeftInSeconds && displayContext.isOnline) {\n      if (this.state.timeLeftInSeconds > 0) {\n        const hrs = padStart(Math.floor(this.state.timeLeftInSeconds / 3600).toString(), 2, \"0\");\n        const mins = padStart(Math.floor((this.state.timeLeftInSeconds % 3600) / 60).toString(), 2, \"0\");\n        const secs = padStart((this.state.timeLeftInSeconds % 60).toString(), 2, \"0\");\n\n        let timeFormat = `${mins}:${secs}`;\n        if (Number(hrs) > 0) {\n          timeFormat = `${hrs}:${timeFormat}`;\n        }\n\n        return (\n          <div className=\"reasoning-tool-bar-button reasoning-tool-timer\">\n            <p>Time Remaining</p>\n            <span className=\"reasoning-tool-timer-time\">\n              {timeFormat}\n            </span>\n          </div>\n        );\n      } else {\n        return null;\n      }\n    } else {\n      return null;\n    }\n  }\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport PoweredByAqueductImage from \"images/Powered-by-Aqueduct.png\";\n\nimport { full_url } from \"../../helpers/url\";\n\nimport { OPENED_LAB_VALUES_LOG } from \"../../helpers/DocumentUserLog\";\n\nimport { findNode } from \"../../helpers/Doc/Functions/base\";\n\nimport {\n  // EDITOR PANELS\n  AET_ADMIN_TOOLS,\n  ASSESSMENT_QUESTION_DATA,\n  QUESTION_DETAILS,\n  CASE_LEARNING_OBJECTIVES,\n  CASE_TEACHING_POINTS,\n  CASE_MAP,\n  CASE_METADATA,\n  EDITORS_CHECKLIST,\n  SUMMARY_OF_EDITS,\n  STUDENT_FEEDBACK,\n\n  // STUDENT PANELS\n  BOOKMARKS,\n  DIAGNOSES,\n  FEEDBACK,\n  FINDINGS,\n  LABVALUES,\n  NOTES,\n} from \"../../reducers/ui/reasoningTool\";\n\nimport {\n  weakMemoizedApplyAllChanges,\n  changesDisplayModes,\n} from \"../../helpers/Doc/changes\";\n\nimport ReasoningToolAdminToolsPanel from \"./ReasoningTool/AdminToolsPanel\";\nimport ReasoningToolAssessmentQuestionDataPanel from \"./ReasoningTool/AssessmentQuestionDataPanel\";\nimport ReasoningToolAssessmentQuestionDetails from \"./ReasoningTool/AssessmentQuestionDetails/component\";\nimport ReasoningToolBarButton from \"./ReasoningTool/BarButton\";\nimport ReasoningToolBookmarksPanel from \"./ReasoningTool/BookmarksPanel\";\nimport ReasoningToolCaseMetadataPanel from \"./ReasoningTool/CaseMetadataPanel\";\nimport ReasoningToolCaseTeachingPointsPanel from \"./ReasoningTool/CaseTeachingPointsPanel\";\nimport ReasoningToolCaseLearningObjectivesPanel from \"./ReasoningTool/CaseLearningObjectivesPanel\";\nimport ReasoningToolCaseMapPanel from \"./ReasoningTool/CaseMapPanel\";\nimport ReasoningToolFeedbackPanel from \"./ReasoningTool/FeedbackPanel\";\nimport ReasoningToolLabValuesPanel from \"./ReasoningTool/LabValuesPanel\";\nimport ReasoningToolTextListPanel from \"./ReasoningTool/TextListPanel\";\nimport ReasoningToolStudentFeedbackPanel from \"./ReasoningTool/StudentFeedbackPanel\";\nimport ReasoningToolSummaryOfEditsPanel from \"./ReasoningTool/SummaryOfEditsPanel\";\nimport ReasoningToolEditorsChecklist from './ReasoningTool/EditorsChecklist'\nimport ReasoningToolTimer from \"./ReasoningTool/Timer\";\nimport analyticsModule from \"../../../application/analytics.js\";\n\nconst reasoningToolPanelsMap = {\n  // EDITOR PANELS\n  [AET_ADMIN_TOOLS]: ReasoningToolAdminToolsPanel,\n  [ASSESSMENT_QUESTION_DATA]: ReasoningToolAssessmentQuestionDataPanel,\n  [QUESTION_DETAILS]: ReasoningToolAssessmentQuestionDetails,\n  [CASE_METADATA]: ReasoningToolCaseMetadataPanel,\n  [CASE_TEACHING_POINTS]: ReasoningToolCaseTeachingPointsPanel,\n  [CASE_LEARNING_OBJECTIVES]: ReasoningToolCaseLearningObjectivesPanel,\n  [CASE_MAP]: ReasoningToolCaseMapPanel,\n  [SUMMARY_OF_EDITS]: ReasoningToolSummaryOfEditsPanel,\n  [STUDENT_FEEDBACK]: ReasoningToolStudentFeedbackPanel,\n  [EDITORS_CHECKLIST]: ReasoningToolEditorsChecklist,\n\n  // STUDENT PANELS\n  [BOOKMARKS]: ReasoningToolBookmarksPanel,\n  [DIAGNOSES]: ReasoningToolTextListPanel,\n  [FEEDBACK]: ReasoningToolFeedbackPanel,\n  [FINDINGS]: ReasoningToolTextListPanel,\n  [LABVALUES]: ReasoningToolLabValuesPanel,\n  [NOTES]: ReasoningToolTextListPanel,\n};\n\ninterface ReasoningToolProps {\n  changeData: ChangeData;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n  editingContext: EditingContext;\n  editingContextExtra: EditingContextExtra;\n  currentVersion: CurrentVersion,\n  mergedData: MergedData;\n  reasoningToolContext: ReasoningToolContext;\n  userContext: UserContext;\n  featureFlag: FeatureFlag;\n  userState: UserState;\n  mediaContext: MediaContext,\n  mappingContext: MappingContext,\n  projectContext: ProjectContext,\n};\n\nexport default function ReasoningTool(props: ReasoningToolProps) {\n  const {\n    documentContext,\n    editingContext,\n    editingContextExtra,\n    displayContext,\n    userContext,\n    projectContext,\n    reasoningToolContext,\n    mergedData,\n    changeData,\n    userState,\n  } = props;\n\n  const {\n    activePanel,\n    togglePanel,\n  } = reasoningToolContext;\n\n  const {\n    disableDiagnoses = false,\n    disableFindings = false,\n    disableNotes = false,\n    disableBookmarks = false,\n    disableFeedback = true,\n    disableLabValues = false,\n    timeLimit = null,\n    currentTimeSegmentStart = null,\n    timeUsedBeforeCurrentSegment = 0,\n  } = mergedData;\n\n  const assessmentQuestionSignatureVersionId = editingContextExtra?.assessmentQuestionSignatureVersion?.documentId || documentContext.id;\n  let reasoningToolSideNavChanges = props.featureFlag.new_landing_pages ? \"reasoning-tool-side-nav\" : \"\"\n\n  const panelButtons = (\n    <>\n      <ReasoningToolBarButton\n        key=\"AET ADMIN TOOLS\"\n        name=\"AET ADMIN TOOLS\"\n        isActive={activePanel === AET_ADMIN_TOOLS}\n        onToggle={()=>{togglePanel(AET_ADMIN_TOOLS);}}\n        shouldShow={editingContext.isEditing && userContext.isAdmin}\n      />\n      <ReasoningToolBarButton\n        key=\"CASE METADATA\"\n        name=\"CASE METADATA\"\n        isActive={activePanel === CASE_METADATA}\n        onToggle={()=>{togglePanel(CASE_METADATA);}}\n        shouldShow={editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"CASE MAP\"\n        name=\"CASE MAP\"\n        isActive={activePanel === CASE_MAP}\n        onToggle={()=>{togglePanel(CASE_MAP);}}\n        shouldShow={editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"CASE LEARNING OBJECTIVES\"\n        name=\"CASE LEARNING OBJECTIVES\"\n        isActive={activePanel === CASE_LEARNING_OBJECTIVES}\n        onToggle={()=>{togglePanel(CASE_LEARNING_OBJECTIVES);}}\n        shouldShow={editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"CASE TEACHING POINTS\"\n        name=\"CASE TEACHING POINTS\"\n        isActive={activePanel === CASE_TEACHING_POINTS}\n        onToggle={()=>{togglePanel(CASE_TEACHING_POINTS);}}\n        shouldShow={editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"CASE ASSESSMENT QUESTIONS\"\n        name=\"CASE ASSESSMENT QUESTIONS\"\n        openLink={full_url(`/admin/assessment/questions?document_id=${documentContext.id}`)}\n        shouldShow={editingContext.isEditing && documentContext.kind !== \"assessment_question_mcq\"}\n      />\n      <ReasoningToolBarButton\n        key=\"ASSESSMENT QUESTION DATA\"\n        name=\"ASSESSMENT QUESTION DATA\"\n        isActive={activePanel === ASSESSMENT_QUESTION_DATA}\n        onToggle={()=>{togglePanel(ASSESSMENT_QUESTION_DATA);}}\n        shouldShow={editingContext.isEditing && documentContext.kind === \"assessment_question_mcq\"}\n      />\n      <ReasoningToolBarButton\n        key=\"QUESTION DETAILS\"\n        name=\"QUESTION DETAILS\"\n        isActive={activePanel === QUESTION_DETAILS}\n        onToggle={()=>{togglePanel(QUESTION_DETAILS);}}\n        shouldShow={editingContext.isEditing && documentContext.kind === \"assessment_question_mcq\"}\n      />\n      <ReasoningToolBarButton\n        key=\"StudentFeedback\"\n        name=\"Student Feedback\"\n        isActive={activePanel === STUDENT_FEEDBACK}\n        onToggle={()=>{togglePanel(STUDENT_FEEDBACK);}}\n        shouldShow={editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"SummaryOfEdits\"\n        name=\"Summary of Edits\"\n        iconName=\"icon-notes\"\n        isActive={activePanel === SUMMARY_OF_EDITS}\n        onToggle={()=>{togglePanel(SUMMARY_OF_EDITS);}}\n        shouldShow={editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"Editor's Checklist\"\n        name=\"Editor's Checklist\"\n        iconName='fa fa-lg fa-list-alt'\n        isActive={activePanel === EDITORS_CHECKLIST}\n        onToggle={()=>{togglePanel(EDITORS_CHECKLIST);}}\n        shouldShow={!!projectContext.activeMemberId && projectContext.activeUserId === userContext.id}\n      />\n      <ReasoningToolBarButton\n        key=\"Diagnoses\"\n        name=\"Diagnoses\"\n        iconName=\"icon-diagnosis\"\n        isActive={activePanel === DIAGNOSES}\n        onToggle={()=>{onToggle(DIAGNOSES);}}\n        shouldShow={!disableDiagnoses && !editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"Findings\"\n        name=\"Findings\"\n        iconName=\"icon-findings\"\n        isActive={activePanel === FINDINGS}\n        onToggle={()=>{onToggle(FINDINGS);}}\n        shouldShow={!disableFindings && !editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"Notes\"\n        name=\"Notes\"\n        iconName=\"icon-notes\"\n        isActive={activePanel === NOTES}\n        onToggle={()=>{onToggle(NOTES);}}\n        shouldShow={!disableNotes && !editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"Bookmarks\"\n        name=\"Bookmarks\"\n        iconName=\"icon-bookmark\"\n        isActive={activePanel === BOOKMARKS}\n        onToggle={()=>{onToggle(BOOKMARKS);}}\n        shouldShow={!disableBookmarks && !editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"Feedback\"\n        name=\"Feedback\"\n        iconName=\"fa fa-lg fa-comment\"\n        isActive={activePanel === FEEDBACK}\n        onToggle={()=>{togglePanel(FEEDBACK);}}\n        shouldShow={!disableFeedback && !editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"LabValues\"\n        name=\"Lab Values\"\n        iconName=\"fa fa-lg fa-flask\"\n        isActive={activePanel === LABVALUES}\n        onToggle={()=>{\n          if (activePanel !== LABVALUES) { userContext.logEvent(OPENED_LAB_VALUES_LOG); }\n          onToggle(LABVALUES);\n        }}\n        shouldShow={!disableLabValues && !editingContext.isEditing}\n      />\n      <ReasoningToolTimer\n        key=\"Timer\"\n        timeLimit={timeLimit}\n        currentTimeSegmentStart={currentTimeSegmentStart}\n        timeUsedBeforeCurrentSegment={timeUsedBeforeCurrentSegment}\n        displayContext={displayContext}\n        shouldShow={!editingContext.isEditing}\n      />\n      <ReasoningToolBarButton\n        key=\"AQUIFER STYLE GUIDE\"\n        name=\"AQUIFER STYLE GUIDE\"\n        openLink={full_url(`/document_set_document_relations/${displayContext.styleGuideId}`)}\n        shouldShow={!!(editingContext.isEditing && displayContext.styleGuideId)}\n      />\n    </>\n  );\n\n  const onToggle = (panel: PanelType) => {\n    if(activePanel != panel) {\n      trackEvent(panel);\n    }\n    togglePanel(panel);\n  }\n\n  const trackEvent = (panel: PanelType) => {\n    const caseName = documentContext.title\n\n    switch(panel) {\n      case DIAGNOSES:\n        analyticsModule.track('click_on_diagnoses', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n      case FINDINGS:\n        analyticsModule.track('click_on_findings', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n      case NOTES:\n        analyticsModule.track('click_on_notes_in_sidebar', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n      case BOOKMARKS:\n        analyticsModule.track('click_on_bookmark_on_sidebar', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n      case LABVALUES:\n        analyticsModule.track('click_on_lab_values', { page: window.location.href, source: 'Case', case: caseName})\n        break;\n    }\n  }\n\n  let openPanel;\n  if (activePanel && reasoningToolPanelsMap[activePanel]) {\n    let extraData: any = {}; // TODO: Remove any\n    switch (activePanel) {\n      case DIAGNOSES:\n        extraData = {\n          diagnoses: mergedData.diagnoses,\n          leadingDiagnosis: mergedData.leadingDiagnosis,\n        };\n        break;\n      case FINDINGS:\n        extraData = {\n          findings: mergedData.findings,\n        };\n        break;\n      case NOTES:\n        extraData = {\n          notes: mergedData.notes,\n        };\n        break;\n      case EDITORS_CHECKLIST:\n        extraData = {\n          currentAssignmentId: projectContext.currentAssignmentId,\n          nextVersionId: projectContext.nextVersionId,\n          checklistContents: projectContext.checklistContents,\n          activeMemberId: projectContext.activeMemberId,\n        }\n        break;\n      case FEEDBACK:\n        extraData = {\n          userState: userState,\n        }\n        break;\n      case CASE_LEARNING_OBJECTIVES:\n        if (documentContext.kind !== \"assessment_question_mcq\") {\n          const compiledChangeData = changeData && !R.isEmpty(changeData) ?\n            weakMemoizedApplyAllChanges(changeData, changesDisplayModes.HIGHLIGHT_ALL_CHANGES) :\n            mergedData;\n\n          const learningObjectivesList = findNode(mergedData, (node) => node.type === \"learningObjectivesList\");\n\n          extraData = {\n            learningObjectivesList,\n          }\n        }\n\n        break;\n    }\n\n    const OpenPanel = reasoningToolPanelsMap[activePanel];\n    openPanel = <OpenPanel {...props} {...extraData} />;\n  }\n\n  return (\n    <div\n      className={`reasoning-tool ${reasoningToolSideNavChanges}`}\n      data-expanded={activePanel !== undefined}>\n      <div className=\"reasoning-tool-tab\" aria-label=\"Open reasoning tool\"></div>\n      <div className=\"reasoning-tool-buttons-bar\" style={{ overflow: \"auto\" }}>\n        {panelButtons}\n        <div className=\"reasoning-tool-buttons-bar-watermark\">\n          <img src={PoweredByAqueductImage} />\n        </div>\n      </div>\n      {openPanel}\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport DocEditHeaderMetadataInputs from \"../EditBar/EditHeader/MetadataInputs\";\n\ninterface ReasoningToolAdminToolsPanelProps {\n  editingContext: EditingContextInEditor;\n  userContext: UserContext;\n  mergedData: MergedData;\n};\n\nexport default function ReasoningToolAdminToolsPanel(props: ReasoningToolAdminToolsPanelProps) {\n  const {\n    editingContext,\n    userContext,\n    mergedData,\n  } = props;\n\n  return (\n    <ReasoningToolPanel\n      key=\"AET ADMIN TOOLS\"\n      title=\"AET ADMIN TOOLS\"\n    >\n      <DocEditHeaderMetadataInputs\n        editingContext={editingContext}\n        userContext={userContext}\n        node={mergedData}\n        onlyKeys={[\n          \"onlyOneUncollapsedSection\",\n          \"disableDiagnoses\",\n          \"disableNotes\",\n          \"disableFindings\",\n          \"disableBookmarks\",\n          \"disableLabValues\",\n        ]}\n      />\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from 'react';\nimport { useEffect, useState } from \"react\";\n\nimport ReasoningToolPanel from \"./../Panel\";\nimport DetailsTab from \"./DetailsTab\";\nimport StatisticsTab from \"./StatisticsTab\";\nimport VersionsList from \"../../../Admin/Versions/List\";\nimport MySwal from \"../../../../ui/MySwal\";\n\nimport { getAdminAssessmentQuestion, forkAdminAssessmentQuestion } from \"../../../../api/sdk.gen\";\n\ninterface AssessmentQuestionDetailsPanelProps {\n  editingContextExtra: EditingContextExtra\n};\n\nexport default function AssessmentQuestionDetailsPanel(props: AssessmentQuestionDetailsPanelProps) {\n  const {\n    editingContextExtra\n  } = props;\n\n  const [activeTab, setActiveTab] = useState(\"details\");\n  const [details, setDetails] = useState(null);\n\n  const questionId = editingContextExtra.assessmentQuestion.id\n\n  const fetchDetails = async () => {\n    const resp = await getAdminAssessmentQuestion({ path: { id: questionId.toString() } });\n    setDetails(resp.data);\n  };\n\n  useEffect(() => {\n    fetchDetails();\n  }, [questionId]);\n\n  const handleTabChange = (tabId) => {\n    setActiveTab(tabId);\n  };\n\n  const handleDuplicate = async () => {\n    const confirmDuplicate = await MySwal.fire({\n      title: \"Are you sure you want to duplicate this question?\",\n      showCancelButton: true,\n      confirmButtonText: \"Duplicate\",\n    });\n\n    if (confirmDuplicate.isConfirmed) {\n      const result = await forkAdminAssessmentQuestion({ path: { id: questionId.toString() } });\n\n      if (result.error) {\n        MySwal.fire(\"Error!\", `Error duplicate selected. ${(result as { error: { error: string } }).error.error}`, \"error\");\n      } else {\n        MySwal.fire(\"Duplicate finished!\", result.data.message, result.data.success ? \"success\" : \"error\");\n      }\n    }\n  }\n\n  if (!details) return <div>Loading...</div>;\n\n  return (<>\n    <ReasoningToolPanel\n      key=\"Assessment Question Details\"\n      title={`Assessment Question Details`}\n      wide={true}\n    >\n      <main style={{ margin: '10px' }}>\n        <header style={{ display: 'flex', alignItems: 'center' }}>\n          <h2>Show Question {questionId}</h2>\n          <div>\n            <button style={{ marginLeft: '10px' }} onClick={handleDuplicate}>\n              Branch\n            </button>\n          </div>\n        </header>\n        <div style={{ padding: '10px 0', fontStyle: 'italic', color: '#ff5251' }}>\n          {details.lock_status_msg}\n        </div>\n        <section className=\"main-content__body\">\n          <ul className=\"nav nav-tabs\" id=\"myTab\">\n            <li className=\"nav-item\">\n              <a\n                className={`nav-link ${activeTab === \"details\" ? \"active\" : \"\"}`}\n                id=\"details-tab\"\n                onClick={() => handleTabChange(\"details\")}\n              >\n                Details\n              </a>\n            </li>\n            <li className=\"nav-item\">\n              <a\n                className={`nav-link ${activeTab === \"statistics\" ? \"active\" : \"\"}`}\n                id=\"statistics-tab\"\n                onClick={() => handleTabChange(\"statistics\")}\n              >\n                Statistics\n              </a>\n            </li>\n            <li className=\"nav-item\">\n              <a\n                className={`nav-link ${activeTab === \"versions\" ? \"active\" : \"\"}`}\n                id=\"versions-tab\"\n                onClick={() => handleTabChange(\"versions\")}\n              >\n                Versions\n              </a>\n            </li>\n          </ul>\n          <div className=\"new-tab-content\" id=\"myTabContent\">\n            <div className={`tab-pane fade ${activeTab === \"details\" ? \"active show\" : \"\"}`} id=\"details\">\n              <DetailsTab details={details} />\n            </div>\n            <div className={`tab-pane fade ${activeTab === \"statistics\" ? \"active show\" : \"\"}`} id=\"statistics\">\n              <StatisticsTab questionId={questionId} />\n            </div>\n            <div className={`tab-pane fade ${activeTab === \"versions\" ? \"active show\" : \"\"}`} id=\"versions\">\n              <VersionsList itemId={questionId} itemType=\"Assessment::Question\" itemData={details} />\n            </div>\n          </div>\n        </section>\n      </main>\n    </ReasoningToolPanel>\n  </>);\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport * as DocConvertHTML from \"../../../helpers/Doc/Convert/PlainText\";\n\nimport DocEditHeaderMetadataInputs from \"../EditBar/EditHeader/MetadataInputs\";\nimport DocPrerequisiteMetadata from \"./CaseMetadataPanel/PrerequisiteMetadata\";\n\ninterface CaseMetadataPanelProps {\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  userContext: UserContext;\n  mergedData: MergedData;\n};\n\nexport default function CaseMetadataPanel(props: CaseMetadataPanelProps) {\n  const {\n    editingContext,\n    editingContextExtra,\n    userContext,\n    mergedData,\n  } = props;\n\n  const assessmentQuestionSignatureVersion = editingContextExtra.assessmentQuestionSignatureVersion;\n  const node = assessmentQuestionSignatureVersion?.data || mergedData\n\n  return (\n    <ReasoningToolPanel\n      key=\"CASE METADATA\"\n      title=\"CASE METADATA\"\n    >\n      {assessmentQuestionSignatureVersion?.data?.title && <h5>{DocConvertHTML.fromAnyType(assessmentQuestionSignatureVersion?.data?.title)}</h5>}\n      <DocEditHeaderMetadataInputs\n        editingContext={editingContext}\n        userContext={userContext}\n        node={node}\n        disableMetadataEdit={!!assessmentQuestionSignatureVersion || !userContext.isAdmin}\n        onlyKeys={[\n          \"sex\",\n          \"age_groups\",\n          \"race\",\n          \"clinical_locations\",\n          \"clinical_disciplines\",\n          \"systems\",\n          \"clinical_focuses\",\n          \"clinical_excellence\",\n          \"clinical_principles\",\n          \"basic_science_disciplines\",\n          \"sciences_core_concepts\",\n          \"presenting_problems\",\n          \"final_diagnoses\",\n          \"differential_diagnosis\",\n          \"additional_diagnoses\"\n        ]}\n      />\n      <hr/>\n      <DocPrerequisiteMetadata\n        editingContext={editingContext}\n        editingContextExtra={editingContextExtra}\n        rootUid={node.uid}\n        possible_prerequisite={node.possible_prerequisite}\n        prerequisite_document_id={node.prerequisite_document_id}\n        userContext={userContext}\n      />\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport DocLearningObjectivesList from \"../BlockNodes/LearningObjectivesList\";\n\nimport AqButton from \"../../Aq/Button\";\n\nimport editGradientSmall from 'app/assets/images/edit_gradient_small.svg';\n\nimport {\n  weakMemoizedGenerateEditingContextAllFalse,\n} from \"../../../helpers/Doc/context\";\n\ninterface CaseLearningObjectivesPanelProps {\n  learningObjectivesList: DocLearningObjectivesListType<InlineNode>;\n  documentContext: DocumentContext;\n  currentVersion: CurrentVersion;\n  editingContext: EditingContext;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  mediaContext: MediaContext;\n  mappingContext: MappingContext;\n  featureFlag: FeatureFlag;\n};\n\nexport default function CaseLearningObjectivesPanel(props: CaseLearningObjectivesPanelProps) {\n  const {\n    learningObjectivesList,\n    documentContext,\n    currentVersion,\n    editingContext,\n    userContext,\n    displayContext,\n    mediaContext,\n    mappingContext,\n    featureFlag,\n  } = props;\n\n  let renderedLearningObjectives;\n  if (learningObjectivesList) {\n    renderedLearningObjectives = (\n      <DocLearningObjectivesList\n        {...learningObjectivesList}\n        documentContext={documentContext}\n        currentVersion={currentVersion}\n        editingContext={weakMemoizedGenerateEditingContextAllFalse()}\n        userContext={userContext}\n        displayContext={displayContext}\n        mediaContext={mediaContext}\n        featureFlag={featureFlag}\n      />\n    )\n  } else if (mappingContext?.learningObjectives && mappingContext.learningObjectives.length > 0) {\n    renderedLearningObjectives = <>\n      <p>Upon completion of this module, the learner should be able to:</p>\n      {\n        mappingContext.learningObjectives.map(learningObjective => (\n          <div key={learningObjective.id} className=\"doc-learning-objective\">\n            <div className=\"learning-objective-arrow\"/>\n            <div className=\"learning-objective-content\">\n              {learningObjective.name}\n            </div>\n          </div>\n        ))\n      }\n    </>\n  } else {\n    renderedLearningObjectives = <h3>No Learning Objectives</h3>;\n  }\n\n  const editLOsButton = documentContext.kind !== \"assessment_question_mcq\" && (\n    <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', marginBottom: '10px'}}>\n      <AqButton\n        className=\"pink outline\"\n        onClick={() => {\n          const learningObjectiveCard = document.querySelector('.learning_objectives_card')\n\n          if (learningObjectiveCard) {\n            const scrollPosition = learningObjectiveCard.getBoundingClientRect().top +  window.pageYOffset - 200;\n            window.scrollTo({top: scrollPosition, behavior: 'smooth'});\n          }\n        }}\n      >\n        <div className=\"aq-button-text\" style={{marginRight: '10px'}}>\n          Edit Learning Objectives\n        </div>\n\n        <div>\n          <img src={editGradientSmall} style={{height: '12px'}}></img>\n        </div>\n      </AqButton>\n    </div>\n  );\n\n  return (\n    <ReasoningToolPanel\n      key=\"CASE LEARNING OBJECTIVES\"\n      title=\"CASE LEARNING OBJECTIVES\"\n    >\n      <div className=\"reasoning-tool-panel-padding\">\n        {editLOsButton}\n        {renderedLearningObjectives}\n      </div>\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport {\n  findNodeLineageByUid,\n} from \"../../../helpers/Doc/Functions/base\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport ReasoningToolSummaryOfEdit from \"./SummaryOfEdit\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\nimport DocCommentInput from \"../ChangeSummaryColumn/CommentInput\";\n\nimport {\n  newAddSummaryOfEditChange,\n} from \"../../../helpers/Doc/changes\";\n\nimport { NEW_SUMMARY_OF_EDITS } from \"../../../helpers/Doc/menu\";\n\ninterface ReasoningToolSummaryOfEditsPanelProps {\n  documentContext: DocumentContext;\n  userContext: UserContext;\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  mergedData: MergedData;\n};\n\nexport default function ReasoningToolSummaryOfEditsPanel(props: ReasoningToolSummaryOfEditsPanelProps) {\n  const {\n    documentContext,\n    userContext,\n    editingContext,\n    editingContextExtra,\n    mergedData,\n  } = props;\n\n\n  let newSummaryOfEdit = null;\n  if (editingContextExtra.currentMenu?.menu === NEW_SUMMARY_OF_EDITS) {\n    const author = userContext;\n    newSummaryOfEdit = (\n        <div className=\"reasoning-tool-summary-of-edit\">\n        <DocAuthorHeader\n          authorName={`${author.firstName} ${author.lastName}`}\n          colorArray={editingContext.colorLookup[author.id]}\n        />\n        <DocCommentInput\n          isActive\n          onAddClick={(text) => {\n            editingContext.addChange(newAddSummaryOfEditChange(\n              editingContextExtra.currentDocSelection?.start?.uid,\n              editingContextExtra.currentDocSelection?.start?.contentKey,\n              editingContextExtra.currentDocSelection?.start?.index,\n              text,\n            ));\n            editingContext.closeCurrentMenu();\n          }}\n          onCancelClick={() => editingContext.closeCurrentMenu()}\n          onFocus={() => {}}\n        />\n      </div>\n    );\n  }\n\n  let summaryOfEdits = mergedData.summary_of_edits || [];\n  summaryOfEdits = R.sortBy((summaryOfEdit: any) => summaryOfEdit.created_at, summaryOfEdits).reverse(); // TODO: Remove any\n\n  const panelChildren = summaryOfEdits.map((summaryOfEdit) => {\n    return (\n      <ReasoningToolSummaryOfEdit\n        key={summaryOfEdit.change_id}\n        userContext={userContext}\n        editingContext={editingContext}\n        summaryOfEdit={summaryOfEdit}\n        summaryOfEditLineage={summaryOfEdit.uid && findNodeLineageByUid(mergedData, summaryOfEdit.uid)}\n      />\n    );\n  });\n\n  return (\n    <ReasoningToolPanel\n      key=\"SUMMARY_OF_EDITS\"\n      title=\"Summary of Edits\"\n      headerButton={\n        <GenButton\n          key=\"Add Summary Of Edits\"\n          name=\"New Summary\"\n          highlighted={editingContextExtra.currentMenu?.menu === NEW_SUMMARY_OF_EDITS}\n          small\n          onClick={() => { editingContext.setCurrentMenu(NEW_SUMMARY_OF_EDITS); }}\n        />\n      }\n    >\n      {newSummaryOfEdit}\n      {panelChildren}\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from \"react\";\n\nimport * as R from \"ramda\";\n\nimport GenButton from \"../../Gen/Button/component\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\nimport ReasoningToolStudentFeedback from \"./StudentFeedback\";\n\nimport DocAuthorHeader from \"../AuthorHeader\";\nimport DocCommentInput from \"../ChangeSummaryColumn/CommentInput\";\n\nimport { NEW_STUDENT_FEEDBACK } from \"../../../helpers/Doc/menu\";\n\nimport {\n  newAddStudentFeedbackChange,\n} from \"../../../helpers/Doc/changes\";\n\ninterface StudentFeedbackPanelProps {\n  documentContext: DocumentContext;\n  userContext: UserContext;\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  mergedData: MergedData;\n};\n\nexport default function StudentFeedbackPanel(props: StudentFeedbackPanelProps) {\n  const {\n    documentContext,\n    userContext,\n    editingContext,\n    editingContextExtra,\n    mergedData,\n  } = props;\n\n  let newStudentFeedback = null;\n  if (editingContextExtra.currentMenu?.menu === NEW_STUDENT_FEEDBACK) {\n    const author = userContext;\n    newStudentFeedback = (\n      <div className=\"reasoning-tool-summary-of-edit\">\n        <DocAuthorHeader\n          authorName={`${author.firstName} ${author.lastName}`}\n          colorArray={editingContext.colorLookup[author.id]}\n        />\n        <DocCommentInput\n          isActive\n          onAddClick={(text) => {\n            editingContext.addChange(newAddStudentFeedbackChange(text));\n            editingContext.closeCurrentMenu();\n          }}\n          onCancelClick={() => editingContext.closeCurrentMenu()}\n          onFocus={() => {}}\n        />\n      </div>\n    );\n  }\n\n  let studentFeedbackChanges = mergedData.student_feedbacks || [];\n  studentFeedbackChanges = R.sortBy((studentFeedbackChange: any) => studentFeedbackChange.created_at, studentFeedbackChanges).reverse(); // TODO: Remove any\n  const panelChildren = studentFeedbackChanges.map((studentFeedbackChange) => {\n    return (\n      <ReasoningToolStudentFeedback\n        key={studentFeedbackChange.uid}\n        userContext={userContext}\n        editingContext={editingContext}\n        studentFeedback={studentFeedbackChange}\n      />\n    );\n  });\n\n  return (\n    <ReasoningToolPanel\n      key=\"STUDENT_FEEDBACK\"\n      title=\"Student Feedback\"\n      headerButton={\n        <GenButton\n          key=\"NewStudentFeedback\"\n          name=\"New Student Feedback\"\n          highlighted\n          small\n          onClick={() => {\n            editingContext.setCurrentMenu(NEW_STUDENT_FEEDBACK);\n          }}\n        />\n      }\n    >\n      {newStudentFeedback}\n      {panelChildren}\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from \"react\";\n\nimport { last } from \"lodash\";\n\nimport ReasoningToolBookmarkSummary from \"./BookmarksPanel/BookmarkSummary\";\nimport ReasoningToolPanel from \"./Panel\";\n\nimport {\n  findNodesLineages,\n} from \"../../../helpers/Doc/Functions/base\";\n\ninterface ReasoningToolBookmarksPanelProps {\n  documentContext: DocumentContext;\n  displayContext: DisplayContext;\n  currentVersion: CurrentVersion;\n  userContext: UserContext;\n  mediaContext: MediaContext;\n  featureFlag: FeatureFlag;\n  mergedData: MergedData;\n};\n\nexport default function ReasoningToolBookmarksPanel({\n  documentContext,\n  displayContext,\n  currentVersion,\n  userContext,\n  mediaContext,\n  featureFlag,\n  mergedData,\n}: ReasoningToolBookmarksPanelProps) {\n  const bookmarkedLineages = findNodesLineages(mergedData, (node) => 'bookmarked' in node && !!node.bookmarked);\n  const panelChildren = bookmarkedLineages.map((bookmarkedNodeLineage: Array<any>) => { // TODO: Remove any\n    const bookmarkedNode = last(bookmarkedNodeLineage);\n\n    return (\n      <ReasoningToolBookmarkSummary\n        key={bookmarkedNode.uid}\n        documentContext={documentContext}\n        currentVersion={currentVersion}\n        userContext={userContext}\n        displayContext={displayContext}\n        mediaContext={mediaContext}\n        featureFlag={featureFlag}\n        bookmarkedNode={bookmarkedNode}\n        bookmarkedNodeLineage={bookmarkedNodeLineage}\n      />\n    );\n  });\n\n  return (\n    <ReasoningToolPanel\n      key=\"Bookmarks\"\n      title=\"Bookmarks\"\n      infoBox={<span><span className=\"icon-bookmark\" style={{fontSize: \"0.75em\"}}></span> Hover over text and click the Bookmarks icon to add bookmarks for your reference</span>}\n    >\n      {panelChildren}\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from \"react\";\n\nimport ReasoningToolPanel from \"./Panel\";\n\ninterface ReasoningToolLabValuePanelProps {};\n\nexport default function ReasoningToolLabValuePanel(props: ReasoningToolLabValuePanelProps) {\n  return (\n    <ReasoningToolPanel\n      key=\"Lab Values\"\n      title=\"Lab Values\"\n    >\n      <table className=\"reasoning-tool-lab-values-table\">\n        <tbody>\n          <tr>\n            <td>\n              <strong>Blood, Plasma, Serum</strong>\n            </td>\n            <td>\n              <strong>Conventional Range</strong>\n            </td>\n            <td>\n              <strong>SI Range</strong>\n            </td>\n          </tr>\n          <tr>\n            <td>Alanine aminotransferase (ALT), serum</td>\n            <td>&lt;45 U/L [male] &lt;34 U/L [female]</td>\n            <td>&lt;0.77 μkat/L [male] &lt;0.58 μkat/L [female]</td>\n          </tr>\n          <tr>\n            <td>Alkaline phosphatase (IFCC at 37<sup>o</sup>C)</td>\n            <td>39-117 U/L</td>\n            <td>0.65-1.95 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Amylase, serum</td>\n            <td>28-100 u/L</td>\n            <td>0.48-1.70 μkat/L</td>\n          </tr>\n          <tr>\n            <td>Aspartate aminotransferase (AST), serum</td>\n            <td>&lt;35 U/L [male] &lt;31 U/L [female]</td>\n            <td>&lt;0.60 μkat/L [male] &lt;0.53 μkat/L [female]</td>\n          </tr>\n          <tr>\n            <td>Bilirubin, serum (adult) Total // Conjugated</td>\n            <td>0-2.0 mg/dL // 0.0-0.2 mg/dL</td>\n            <td>0-34 μmol/L // 0.0-3.4 μmol/L</td>\n          </tr>\n          <tr>\n            <td>Calcium, serum</td>\n            <td>8.6-10.2 mg/dL</td>\n            <td>2.15-2.55 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Cholesterol, serum</td>\n            <td>&lt;200 mg/dL</td>\n            <td>&lt;5.18 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Cortisol, serum</td>\n            <td>0800 h: 0.6-1.6 μg/dL // 1600 h: 0.2-0.9 μg/dL</td>\n            <td>17-44 nmol/L // 6-25 nmol/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>2200 h: 0.7-2.2 μg/dL</td>\n            <td>2-6 nmol/L</td>\n          </tr>\n          <tr>\n            <td>Creatine kinase, serum</td>\n            <td>46-171 U/L [male] 34-145 U/L [female]</td>\n            <td>0.78-2.90 μkat/L [male] 0.58-2.47 μkat/L [female]</td>\n          </tr>\n          <tr>\n            <td>Creatinine, serum</td>\n            <td>1.0-1.7 mg/dL [male] 0.6-1.3 mg/dL [female]</td>\n            <td>88-150 μmol/L [male] 53-115 μmol/L [female]</td>\n          </tr>\n          <tr>\n            <td>Electrolytes, serum</td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Sodium</td>\n            <td>136-145 mEq/L</td>\n            <td>136-145 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Potassium</td>\n            <td>3.5-5.0 mEq/L</td>\n            <td>3.5-5.0 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Chloride</td>\n            <td>95-105 mEq/L</td>\n            <td>95-105 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Bicarbonate</td>\n            <td>22-28 mEq/L</td>\n            <td>22-28 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Magnesium</td>\n            <td>1.5-2.0 mEq/L</td>\n            <td>0.75-1.0 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Estriol, total, serum (in pregnancy)</td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>21-32 wks</td>\n            <td>5-50 ng/mL</td>\n            <td>17-174 nmol/L</td>\n          </tr>\n          <tr>\n            <td>33-35 wks</td>\n            <td>90-240 ng/mL</td>\n            <td>312-833 nmol/L</td>\n          </tr>\n          <tr>\n            <td>36-41 wks</td>\n            <td>150-213 ng/mL</td>\n            <td>521-739 nmol/L</td>\n          </tr>\n          <tr>\n            <td>Ferritin, serum</td>\n            <td>20-250 ng/mL [male] 10-120 ng/mL [female]</td>\n            <td>20-250 μg/L [male] 10-120 μg/L [female]</td>\n          </tr>\n          <tr>\n            <td>Follicle-stimulating hormone, serum/plasma</td>\n            <td>Male: 1.4-15.4 mIU/mL</td>\n            <td>1.4-15.4 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Female: follicular phase 1.4-9.9 mIU/mL</td>\n            <td>1.4-9.9 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>midcycle peak 0.2-17.2 mIU/mL</td>\n            <td>0.2-17.2 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>luteal phase 1.1-9.2 mIU/mL</td>\n            <td>1.1-9.2 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>postmenopause 19.3-100.6 mIU/mL</td>\n            <td>19.3-100.6 U/L</td>\n          </tr>\n          <tr>\n            <td>Gases, arterial blood (room air)</td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>pH</td>\n            <td>7.35-7.45</td>\n            <td>[H+] 36-44 nmol/L</td>\n          </tr>\n          <tr>\n            <td>PC02</td>\n            <td>33-45 mm Hg</td>\n            <td>4.4-5.9 kPa</td>\n          </tr>\n          <tr>\n            <td>P02</td>\n            <td>75-105 mm Hg</td>\n            <td>10.0-14.0 kPa</td>\n          </tr>\n          <tr>\n            <td>Glucose, serum</td>\n            <td>Fasting: 74-100 mg/dL</td>\n            <td>4.1-5.5 mmol/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>2-hr postprandial: &gt;120 mg/dL</td>\n            <td>&lt;6.6 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Growth hormone - arginine stimulation</td>\n            <td>&gt;7.5 ng/mL</td>\n            <td>&gt;7.5 μg/L</td>\n          </tr>\n          <tr>\n            <td>Immunoglobulins, serum</td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>IgA</td>\n            <td>70-400 mg/dL</td>\n            <td>0.-4.0 g/L</td>\n          </tr>\n          <tr>\n            <td>IgE</td>\n            <td>0-380 mg/dL</td>\n            <td>0-380 g/L</td>\n          </tr>\n          <tr>\n            <td>IgG</td>\n            <td>700-1600 mg/dL</td>\n            <td>7.0-16.0 g/L</td>\n          </tr>\n          <tr>\n            <td>IgM</td>\n            <td>40-230 mg/dL</td>\n            <td>0.4-2.3 g/L</td>\n          </tr>\n          <tr>\n            <td>Iron</td>\n            <td>50-170 μg/dL</td>\n            <td>9-30 μmol/L</td>\n          </tr>\n          <tr>\n            <td>Lactate dehydrogenase, serum</td>\n            <td>180-360 U/L</td>\n            <td>3.1-6.1 μkat/L</td>\n          </tr>\n          <tr>\n            <td>Luteinizing hormone, serum/plasma</td>\n            <td>Male: 1.2-7.8 mIU/mL</td>\n            <td>1.2-7.8 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Female: follicular phase 1.7-15.0 mIU/mL</td>\n            <td>1.7-15.0 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>midcycle peak 21.9-56.6 mIU/mL</td>\n            <td>21.9-56.6 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>luteal phase 0.6-16.3 mIU/mL</td>\n            <td>0.6-16.3 IU/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>postmenopausal 14.2-52.3 mIU/mL</td>\n            <td>14.2-52.3 IU/L</td>\n          </tr>\n          <tr>\n            <td>Osmolality, serum</td>\n            <td>275-295 mOsmol/kg H2O</td>\n            <td>275-295 mOsmol/kg H2O</td>\n          </tr>\n          <tr>\n            <td>Parathyroid hormone, serum, N-terminal</td>\n            <td>10-65 pg/mL</td>\n            <td>10-65 ng/L</td>\n          </tr>\n          <tr>\n            <td>Phosphorus (inorganic), serum</td>\n            <td>2.5-4.5 mg/dL</td>\n            <td>0.80-1.44 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Prolactin, serum (hPRL)</td>\n            <td>3.0-14.7 ng/mL [male] 3.8-23.0 ng/mL [female]</td>\n            <td>3.0-14.7 μg/L [male] 3.8-23.0 μg/L [female]</td>\n          </tr>\n          <tr>\n            <td>Proteins, serum</td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Total</td>\n            <td>6.4-8.3 g/dL</td>\n            <td>64-83 g/L</td>\n          </tr>\n          <tr>\n            <td>Albumin</td>\n            <td>3.5-5.2 g/dL</td>\n            <td>35-52 g/L</td>\n          </tr>\n          <tr>\n            <td>Thyroid-stimulating hormone, serum or plasma</td>\n            <td>0.4-4.2 μIU/mL</td>\n            <td>0.4-4.2 mIU/L</td>\n          </tr>\n          <tr>\n            <td>Thyroxine (T4), serum</td>\n            <td>4.6-10.5 μg/dL [male] 5.5-11.0 μg/dL [female]</td>\n            <td>59-135 nmol/L [male] 65-138 nmol/L [female]</td>\n          </tr>\n          <tr>\n            <td>Triglycerides, serum</td>\n            <td>&lt;150 mg/dL</td>\n            <td>&lt;1.70 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Triiodothyronine (T3), serum (RIA)</td>\n            <td>20-50yr 70-204 ng/dL</td>\n            <td>1.08-4.14 nmol/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>50-90yr 40-181 ng/dL</td>\n            <td>0.62-2.79 nmol/L</td>\n          </tr>\n          <tr>\n            <td>Urea nitrogen, serum</td>\n            <td>6-20 mg/dL</td>\n            <td>2.1-7.1 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Uric acid, serum</td>\n            <td>4.4-7.6 mg/dL [male] 2.3-6.6 mg/dL [female]</td>\n            <td>0.26-0.45 mmol/L [male] 0.13-0.39 mmol/L [female] </td>\n          </tr>\n          <tr>\n            <td>\n              <strong>Body Mass Index (BMI)</strong>\n            </td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Body mass index</td>\n            <td>Adult: 19-25 kg/m2</td>\n            <td>Adult: 19-25 kg/m2</td>\n          </tr>\n          <tr>\n            <td>\n              <strong>Cerebrospinal Fluid</strong>\n            </td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Cell count</td>\n            <td>0-5 /mm3</td>\n            <td>0-5 x 106/L</td>\n          </tr>\n          <tr>\n            <td>Gamma globulin</td>\n            <td>3%-12% total proteins</td>\n            <td>0.03-0.12</td>\n          </tr>\n          <tr>\n            <td>Glucose</td>\n            <td>40-70 mg/dL</td>\n            <td>2.2-3.9 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Pressure</td>\n            <td>70-180 mm H2O</td>\n            <td>70-180 mm H2O</td>\n          </tr>\n          <tr>\n            <td>Proteins, total</td>\n            <td>Ventricular fluid 5-15 mg/dL</td>\n            <td>50-150 g/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Cisternal fluid 15-25 mg/dL</td>\n            <td>150-250 g/L</td>\n          </tr>\n          <tr>\n            <td>\n              <strong>Hematologic</strong>\n            </td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Bleeding time (template)</td>\n            <td>2-7 minutes</td>\n            <td>2-7 minutes</td>\n          </tr>\n          <tr>\n            <td>Erythrocyte count</td>\n            <td>Male: 4.3-5.9 million/mm<sup>3</sup>\n            </td>\n            <td>4.3-5.9 x10<sup>12</sup>/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Female:3.5-5.5 million/mm<sup>3</sup>\n            </td>\n            <td>3.5-5.5 x10<sup>12</sup>/L</td>\n          </tr>\n          <tr>\n            <td>Erythrocyte sedimentation rate (Westergren)</td>\n            <td>Male: 1-15 mm/h</td>\n            <td>1-15 mm/h</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Female: 1-20 mm/h</td>\n            <td>1-20 mm/h</td>\n          </tr>\n          <tr>\n            <td>Hematocrit</td>\n            <td>Male: 37% - 51%</td>\n            <td>0.37-0.51</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Female: 35%-47%</td>\n            <td>0.35-0.47</td>\n          </tr>\n          <tr>\n            <td>Hemoglobin A1c</td>\n            <td>&lt; 6%</td>\n            <td>&lt;0.06</td>\n          </tr>\n          <tr>\n            <td>Hemoglobin, blood</td>\n            <td>Male: 12.6-17.4 g/dL</td>\n            <td>126-174 g/L</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Female: 11.7-16.1 g/dL</td>\n            <td>117-161 g/L</td>\n          </tr>\n          <tr>\n            <td>Hemoglobin, plasma</td>\n            <td>&lt;3 mg/dL</td>\n            <td>&lt;0.47 μmol/L</td>\n          </tr>\n          <tr>\n            <td>Leukocyte count and differential</td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Leukocyte count</td>\n            <td>4.5-11 cells x 10<sup>3</sup>/μL</td>\n            <td>4.5-11.0 cells x10<sup>9</sup>/L</td>\n          </tr>\n          <tr>\n            <td>Segmented neutrophils</td>\n            <td>50%-70%</td>\n            <td>0.50-0.70</td>\n          </tr>\n          <tr>\n            <td>Bands</td>\n            <td>0%-5%</td>\n            <td>0.00-0.05</td>\n          </tr>\n          <tr>\n            <td>Eosinophils</td>\n            <td>1%-5%</td>\n            <td>0.01-0.05</td>\n          </tr>\n          <tr>\n            <td>Basophils</td>\n            <td>0%-1%</td>\n            <td>0.00-1.00</td>\n          </tr>\n          <tr>\n            <td>Lymphocytes</td>\n            <td>20%-40%</td>\n            <td>0.20-0.40</td>\n          </tr>\n          <tr>\n            <td>Monocytes</td>\n            <td>1%-6%</td>\n            <td>0.01-0.06</td>\n          </tr>\n          <tr>\n            <td>Mean corpuscular hemoglobin</td>\n            <td>27-32 pg/cell</td>\n            <td>1.68-1.99 fmol/cell</td>\n          </tr>\n          <tr>\n            <td>Mean corpuscular hemoglobin concentraton</td>\n            <td>31%-36% Hb/cell</td>\n            <td>4.81-5.58 mmol Hb/L</td>\n          </tr>\n          <tr>\n            <td>Mean corpuscular volume</td>\n            <td>76-96 μm<sup>3</sup>\n            </td>\n            <td>76-96 fL</td>\n          </tr>\n          <tr>\n            <td>Partial thromboplastin time (activated)</td>\n            <td>20-34 seconds</td>\n            <td>20-34 seconds</td>\n          </tr>\n          <tr>\n            <td>Platelet count</td>\n            <td>150000-400000 /mm<sup>3</sup>\n            </td>\n            <td>150-400 x10<sup>9</sup>/L</td>\n          </tr>\n          <tr>\n            <td>Prothrombin time</td>\n            <td>11-15 seconds</td>\n            <td>11-15 seconds</td>\n          </tr>\n          <tr>\n            <td>Reticulocyte count</td>\n            <td>0.5%-1.5%</td>\n            <td>0.005-0.015</td>\n          </tr>\n          <tr>\n            <td>Thrombin time</td>\n            <td>&lt;2 seconds deviation from control</td>\n            <td>&lt;2 seconds deviation from control</td>\n          </tr>\n          <tr>\n            <td>\n              <strong>Sweat</strong>\n            </td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Chloride</td>\n            <td>5-35mEq/L</td>\n            <td>5-35 mmol/L</td>\n          </tr>\n          <tr>\n            <td>\n              <strong>Urine</strong>\n            </td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Chloride</td>\n            <td>110-250 mEq/L</td>\n            <td>110-250 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Creatinine clearance</td>\n            <td>Male: 14-26 mg/kg/day</td>\n            <td>124-230 μmol/kg/day</td>\n          </tr>\n          <tr>\n            <td>\n            </td>\n            <td>Female: 11-20 mg/kg/day</td>\n            <td>97-177 μmol/kg/day</td>\n          </tr>\n          <tr>\n            <td>Estriol, total (in pregnancy)</td>\n            <td>\n            </td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>35 wks</td>\n            <td>31-140 ng/mL</td>\n            <td>108-486 nmol/L</td>\n          </tr>\n          <tr>\n            <td>40 wks</td>\n            <td>95-460 ng/mL</td>\n            <td>330-1596 nmol/L</td>\n          </tr>\n          <tr>\n            <td>Osmolality</td>\n            <td>50-1400 mOsmol/kg H20</td>\n            <td>\n            </td>\n          </tr>\n          <tr>\n            <td>Potassium</td>\n            <td>25-125 mEq/L</td>\n            <td>25-125 mmol/L</td>\n          </tr>\n          <tr>\n            <td>Proteins, total</td>\n            <td>&lt;100 mg/day</td>\n            <td>&lt;0.1 mg/day</td>\n          </tr>\n          <tr>\n            <td>Sodium</td>\n            <td>40-220 mEq/day [male] 27-287 mEq/day [female]</td>\n            <td>40-220 mmol/L [male] 27-287 mmol/L [female]</td>\n          </tr>\n          <tr>\n            <td>Uric acid</td>\n            <td>250-750 mg/day</td>\n            <td>1.48-4.43 mmol/L </td>\n          </tr>\n          <tr>\n            <td rowSpan={1} colSpan={3}>\n              <strong>REFERENCES:</strong>\n            </td>\n          </tr>\n          <tr>\n            <td rowSpan={1} colSpan={3}>Bakerman S. Backerman's ABC's of Interpretive Laboratory Data. 4th ed. Scottsdale, AZ: Interpretive Laboratory Data, Inc.; 2002. </td>\n          </tr>\n          <tr>\n            <td rowSpan={1} colSpan={3}>Burtis CA, Ashwood ER, Bruns DE. Tietz Textbook of Clinical Chemistry and Molecular Diagnostics. 4th ed. St. Louis, MI: Elsevier Inc.; 2006. </td>\n          </tr>\n        </tbody>\n      </table>\n    </ReasoningToolPanel>\n  );\n}\n","import * as React from 'react';\n\nimport Select from 'react-select';\n\nimport AqButton from '../../Aq/Button';\nimport GenModal from '../../Gen/Modal/component';\nimport GenLoadingSpinner from '../../Gen/LoadingSpinner/component';\n\nimport generateUUID from \"../../../helpers/generateUUID\";\n\nimport { generateLearningObjectiveActions } from \"../../../reducers/learningObjectives\";\n\nimport { newAddNodeChange } from \"../../../helpers/Doc/changes\";\n\nimport { findNode } from \"../../../helpers/Doc/Functions/base\";\n\nexport type DocLearningObjectivesAddNewModalProps = {\n  currentVersion: CurrentVersion;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  mappingContext: DocumentMappingContext;\n  projectContext: ProjectContext;\n  mediaContext: MediaContext;\n  mergedData: MergedData;\n  userContext: UserContext;\n  allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n  learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n\n\n  featureFlag: FeatureFlag;\n};\n\nexport default function DocLearningObjectivesAddNewModal(props: DocLearningObjectivesAddNewModalProps) {\n  const {\n    editingContext,\n    mappingContext,\n    allLearningObjectiveOptions,\n    mergedData,\n  } = props;\n\n  const [isLoading, setIsLoading] = React.useState(false);\n  const [reusableObjectId, setReusableObjectId] = React.useState(null);\n  const [learningObjectiveId, setLearningObjectiveId] = React.useState(null);\n  const [newLearningObjectiveText, setNewLearningObjectiveText] = React.useState(\"\");\n\n  const createLO = () => {\n    setIsLoading(true)\n\n    const addInLearningObjective = (loId) => {\n      const newVariantablePlaceholder = {\n        type: \"variantPlaceholder\",\n        uid: generateUUID(),\n        variantableId: loId,\n        variantableType: \"LearningObjective\",\n      }\n\n      const learningObjectivesList = findNode(mergedData, (node) => node.type === \"learningObjectivesList\");\n\n      const newIndex = learningObjectivesList.content.length\n      editingContext.addChange(newAddNodeChange(newVariantablePlaceholder, learningObjectivesList.uid, \"content\", newIndex));\n\n      if (reusableObjectId) {\n        let loroToBeSaved: ProposedLearningObjectiveReusableObject = {\n          learning_objective_id: loId,\n          reusable_object_id: reusableObjectId.value,\n        }\n\n        let newProposedLoros = mappingContext.proposedLearningObjectiveReusableObjects || [];\n        newProposedLoros = newProposedLoros.concat([loroToBeSaved]);\n        mappingContext.setProposedLearningObjectiveReusableObjects(newProposedLoros);\n      }\n    }\n\n    if (newLearningObjectiveText.trim().length > 0) {\n      const TEMP_ID = 0\n      const learningObjectiveActions = props.learningObjectiveActionsGenerator(TEMP_ID)\n      learningObjectiveActions.startNewLearningObjective()\n      learningObjectiveActions.setEditDataLearningObjective({name: newLearningObjectiveText.trim()})\n      learningObjectiveActions.createLearningObjective((data) => addInLearningObjective(data.value.data.id))\n    } else {\n      addInLearningObjective(learningObjectiveId.value)\n      // USE GIVEN ID\n    }\n\n    setIsLoading(false)\n    editingContext.closeCurrentMenu()\n  }\n\n  const activeLearningObjective = learningObjectiveId ? allLearningObjectiveOptions.find((lo) => lo.id === learningObjectiveId.value) : null;\n\n  const learningObjectiveOptions = allLearningObjectiveOptions.map((loOption) => (\n    {\n      label: loOption.name,\n      value: loOption.id,\n    }\n  ))\n\n  const reusableObjectOptions = mappingContext.reusableObjects.filter((ro) => ro.kind === \"teaching_point\" ).map((ro) => (\n    {\n      value: ro.id,\n      label: ro.content_title,\n    }\n  ))\n\n  return (\n    <GenModal open>\n      <div className=\"gen-modal-panel\">\n        <div className=\"aq-card-header black\">\n          CREATE NEW LEARNING OBJECTIVE\n        </div>\n        <div>\n          <div className=\"aq-field-label\">\n            Select Existing Objective To Add To This Case\n          </div>\n          <Select\n            options={learningObjectiveOptions}\n            onChange={(newValue)=>{setLearningObjectiveId(newValue)}}\n          />\n          {\n            activeLearningObjective && (\n              <div>\n                <div className=\"aq-field-label\">Case/s where selected LO is used:</div>\n                <ul>\n                  {activeLearningObjective.documents.map((document) => <li key={document.id}><a href={`/documents/${document.id}`} target=\"_blank\">{document.title}</a></li>)}\n                </ul>\n              </div>\n            )\n          }\n        </div>\n        <div className=\"space-or\">or</div>\n        <div>\n          <label className=\"aq-field-label\" htmlFor=\"newLO\">create new learning objective</label>\n          <textarea\n            name=\"newLO\"\n            id=\"newLO\"\n            cols={30}\n            rows={5}\n            value={newLearningObjectiveText}\n            onChange={(e) => setNewLearningObjectiveText(e.target.value)}\n          />\n        </div>\n\n        <div className=\"aq-dividing-line\"></div>\n\n        <div>\n          <div className=\"aq-field-label\">\n            Map to teaching point/s\n          </div>\n          <Select\n            options={reusableObjectOptions}\n            onChange={(newValue)=>{ setReusableObjectId(newValue) }}\n          />\n        </div>\n        <div className=\"aq-button-bar bottom-right\">\n          <AqButton onClick={createLO}>{isLoading ? <GenLoadingSpinner /> : \"Save & Create LO\"}</AqButton>\n          <AqButton className=\"outline black\" onClick={editingContext.closeCurrentMenu}>Cancel</AqButton>\n        </div>\n      </div>\n    </GenModal>\n  );\n}\n","import * as React from 'react';\n\nimport AqButton from '../../Aq/Button';\n\nimport GenModal from '../../Gen/Modal/component';\n\nexport type DocLearningObjectivesConfirmEditModalProps = {\n  currentVersion: CurrentVersion;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n  editingContext: EditingContextInEditor;\n  editingContextExtra: EditingContextExtra;\n  mappingContext: MappingContext;\n  projectContext: ProjectContext;\n  mediaContext: MediaContext;\n  mergedData: MergedData;\n  userContext: UserContext;\n  featureFlag: FeatureFlag;\n};\n\nexport default function DocLearningObjectivesConfirmEdit(props: DocLearningObjectivesConfirmEditModalProps) {\n  const {\n    editingContext,\n    editingContextExtra,\n  } = props;\n\n  const currentMenu = editingContextExtra.currentMenu\n  if (currentMenu?.menu !== \"LEARNING_OBJECTIVES_CONFIRM_EDIT\") {\n    return null;\n  }\n\n  return (\n    <GenModal open>\n      <div className=\"gen-modal-panel\">\n        <div className=\"aq-card-header black\" style={{textTransform: \"none\"}}>\n          Are you sure you want to unlock this learning objective for editing?\n        </div>\n        <div>\n          <p>\n            We're just checking, because it's kind of a big deal.\n          </p>\n          <p>\n            Learning objectives are used across the Aquifer system and can have implications beyond just this case.\n          </p>\n        </div>\n        <div className=\"aq-button-bar bottom-right\">\n          <AqButton onClick={() => {\n            editingContextExtra.setAllowLearningObjectivesEdit(currentMenu.learningObjectiveUid)\n            editingContext.setCurrentDocSelection({start: {uid: currentMenu.learningObjectiveUid, contentKey: \"content\", index: 0}, end: {uid: currentMenu.learningObjectiveUid, contentKey: \"content\", index: 0}})\n            editingContext.closeCurrentMenu()\n          }}>I'm sure, let's do this</AqButton>\n          <AqButton className=\"outline black\" onClick={editingContext.closeCurrentMenu}>Nope, I want to go back</AqButton>\n        </div>\n      </div>\n    </GenModal>\n  )\n}\n","import * as React from \"react\";\n\nimport DocLearningObjectivesAddNewModal from \"./Modals/LearningObjectivesAddNew\";\nimport DocLearningObjectivesConfirmEdit from \"./Modals/LearningObjectivesConfirmEdit\";\n\nimport { generateLearningObjectiveActions } from \"../../reducers/learningObjectives\";\n\nexport type DocModalsProps = {\n  currentVersion: CurrentVersion;\n  displayContext: DisplayContext;\n  documentContext: DocumentContext;\n  editingContext: EditingContext;\n  editingContextExtra: EditingContextExtra;\n  mappingContext: MappingContext;\n  projectContext: ProjectContext;\n  mediaContext: MediaContext;\n  mergedData: MergedData;\n  userContext: UserContext;\n  allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n  learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n\n  featureFlag: FeatureFlag;\n};\n\nexport default function DocModals(props: DocModalsProps) {\n  const {\n    editingContext,\n    editingContextExtra,\n  } = props;\n\n  if (!editingContextExtra.currentMenu || !editingContext.isEditing) { return; }\n\n  switch (editingContextExtra.currentMenu.menu) {\n    case \"LEARNING_OBJECTIVES_CONFIRM_EDIT\":\n      return (\n        <DocLearningObjectivesConfirmEdit\n          {...props}\n          editingContext={editingContext}\n        />\n      )\n    case \"LEARNING_OBJECTIVES_ADD_NEW\":\n      const mappingContext = props.mappingContext as DocumentMappingContext; // TODO: Remove when resolved\n\n      return (\n        <DocLearningObjectivesAddNewModal\n          {...props}\n          editingContext={editingContext}\n          mappingContext={mappingContext}\n        />\n      )\n    default:\n      return null\n  }\n}\n","import * as React from \"react\";\nimport * as R from \"ramda\";\n\ninterface DocContentMappingAssessmentMapProps {\n  assessmentMappingToolPermission?: boolean;\n  assessmentTitle: string;\n  currentLearningObjectiveReusableObjectId: number;\n  learningObjectiveReusableObjects: Array<LearningObjectiveReusableObject>;\n  proposedLearningObjectiveReusableObjectId: number;\n  setLearningObjectiveReusableObjectId: (id: number) => void;\n  usedAvailableForm: boolean;\n};\n\ninterface DocContentMappingAssessmentMapState {\n  resetValue: boolean;\n  selectedLearningObjectiveId: number | string; //TODO: Why does this need a string\n  selectedReusableObjectId: number | string; //TODO: Why does this need a string\n};\n\nexport default class DocContentMappingAssessmentMap extends React.Component<DocContentMappingAssessmentMapProps, DocContentMappingAssessmentMapState> {\n  constructor(props: DocContentMappingAssessmentMapProps) {\n    super(props);\n\n    this.state = {\n      selectedLearningObjectiveId: (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).learning_objective.id : \"\",\n      selectedReusableObjectId: (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).reusable_object.id : \"\",\n      resetValue: !(this.props.proposedLearningObjectiveReusableObjectId)\n    };\n  };\n\n  handleLearningObjectiveChange(event: React.ChangeEvent<HTMLSelectElement>) {\n    let selectedLearningObjectiveId\n    if(event.target.value!==\"\") {\n      selectedLearningObjectiveId = parseInt(event.target.value);\n    }else{\n      selectedLearningObjectiveId=\"\"\n    }\n    this.setState({selectedLearningObjectiveId: selectedLearningObjectiveId})\n  };\n\n  handleReusableObjectChange(event:  React.ChangeEvent<HTMLSelectElement>) {\n    let selectedReusableObjectId\n    if(event.target.value!==\"\") {\n      selectedReusableObjectId = parseInt(event.target.value);\n    }else{\n      selectedReusableObjectId=\"\"\n    }\n    this.setState({selectedReusableObjectId: selectedReusableObjectId })\n  };\n\n  clickSaveButton(event: React.MouseEvent<HTMLButtonElement>) {\n    event.preventDefault();\n    const hasSelectedLearningObjective = this.state.selectedLearningObjectiveId !== \"\";\n    const hasSelectedReusableObject = this.state.selectedReusableObjectId !== \"\";\n\n    if(!hasSelectedLearningObjective && !hasSelectedReusableObject){\n      alert(\"Please select Mapping\")\n    }else if(hasSelectedLearningObjective && !hasSelectedReusableObject){\n      alert(\"Please select Teaching Point\")\n    } else if(hasSelectedReusableObject && !hasSelectedLearningObjective){\n      alert(\"Please select Learning Objective\")\n    } else if((hasSelectedLearningObjective && hasSelectedReusableObject)){\n      let text=\"\"\n      if(hasSelectedLearningObjective && hasSelectedReusableObject) {\n        text=\"When published, the selected content mappings for this Assessment Question will be available throughout the Aquifer curriculum. Click OK to proceed or Cancel to discard.\";\n      }else{\n        text=\"Do you want to save this incomplete map? You will not be able to publish until mapping is complete. Click OK to save the map or Cancel to continue editing.\"\n      }\n      if (confirm(text)) {\n        this.props.learningObjectiveReusableObjects.forEach((learningObjectiveReusableObject) => {\n          if (learningObjectiveReusableObject.learning_objective.id === this.state.selectedLearningObjectiveId && learningObjectiveReusableObject.reusable_object.id === this.state.selectedReusableObjectId) {\n            this.props.setLearningObjectiveReusableObjectId(learningObjectiveReusableObject.id)\n          }\n        })\n        this.setState({resetValue: false })\n      }\n    }\n  };\n\n  clickResetButton(event: React.MouseEvent<HTMLButtonElement>) {\n    event.preventDefault();\n    let text=\"You are editing the mapping to this Assessment Question. This could have additional curriculum mapping implications. Click Continue to proceed or Cancel to discard this change.\"\n    if (confirm(text)) {\n      this.setState({\n        resetValue: true,\n        selectedLearningObjectiveId: \"\",\n        selectedReusableObjectId: \"\",\n      })\n    }\n  }\n\n  clickRestoreButton(event: React.MouseEvent<HTMLButtonElement>) {\n    event.preventDefault();\n    this.props.setLearningObjectiveReusableObjectId(this.props.currentLearningObjectiveReusableObjectId)\n    const currentLearningObjectiveReusableObject = this.props.currentLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.currentLearningObjectiveReusableObjectId)\n    this.setState({\n      selectedLearningObjectiveId: currentLearningObjectiveReusableObject ? currentLearningObjectiveReusableObject.learning_objective.id : \"\",\n      selectedReusableObjectId: currentLearningObjectiveReusableObject ? currentLearningObjectiveReusableObject.reusable_object.id : \"\",\n    })\n  }\n\n  render() {\n    let learningObjectiveOptions = this.props.learningObjectiveReusableObjects\n      .filter((learningObjectiveReusableObject) => !this.state.selectedReusableObjectId || this.state.selectedReusableObjectId===learningObjectiveReusableObject.reusable_object.id )\n      .map((learningObjectiveReusableObject) => learningObjectiveReusableObject.learning_objective)\n\n    learningObjectiveOptions = R.uniqBy((lo) => lo.id, learningObjectiveOptions)\n\n    let reusableObjectOptions = this.props.learningObjectiveReusableObjects\n      .filter((learningObjectiveReusableObject) => !this.state.selectedLearningObjectiveId || this.state.selectedLearningObjectiveId===learningObjectiveReusableObject.learning_objective.id )\n      .map((learningObjectiveReusableObject) => learningObjectiveReusableObject.reusable_object)\n\n    reusableObjectOptions = R.uniqBy((ro) => ro.id, reusableObjectOptions)\n\n    let learningObjectColumn\n    let teachingPointColumn\n\n    let learningObjectColumnValue = this.props.currentLearningObjectiveReusableObjectId ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.currentLearningObjectiveReusableObjectId).learning_objective.name : \"\"\n    let teachingPointColumnValue = this.props.currentLearningObjectiveReusableObjectId ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.currentLearningObjectiveReusableObjectId).reusable_object.content_title : \"\"\n\n    let learningObjectiveSelect = <select onChange={this.handleLearningObjectiveChange.bind(this)} value={this.state.selectedLearningObjectiveId} disabled={!this.props.assessmentMappingToolPermission}>\n      <option value=\"\">Select</option>\n      {\n        learningObjectiveOptions.map((learningObjective) =>\n            <option key={learningObjective.id}\n                    value={learningObjective.id}>{learningObjective.name}\n            </option>\n        )\n      }\n    </select>\n\n    let teachingPointSelect = <select onChange={this.handleReusableObjectChange.bind(this)} value={this.state.selectedReusableObjectId} disabled={!this.props.assessmentMappingToolPermission}>\n      <option value=\"\">Select</option>\n      {\n        reusableObjectOptions.map((reusableObject) =>\n            <option key={reusableObject.id}\n                    value={reusableObject.id}>{reusableObject.content_title}\n            </option>\n        )\n      }\n    </select>\n\n    if(!this.state.resetValue) {\n      const learningObjectiveReusableObjects: Array<any> = this.props.learningObjectiveReusableObjects; // TODO: Narrow down any\n\n      if (this.props.currentLearningObjectiveReusableObjectId && R.find(R.propEq('id', this.props.currentLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).learning_objective.id === R.find(R.propEq('id', this.props.proposedLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).learning_objective.id) {\n        learningObjectColumn = <div>{learningObjectColumnValue}</div>\n      }else{\n        let proposedLearningObjectColumnValue = (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).learning_objective.name : \"\"\n        if(proposedLearningObjectColumnValue==\"\"){\n          learningObjectColumn=<div>{learningObjectiveSelect}</div>\n        }else {\n          learningObjectColumn = <div>\n            <div style={{textDecoration: \"line-through\"}}>{learningObjectColumnValue}</div>\n            <div style={{color: \"red\"}}>{proposedLearningObjectColumnValue}</div>\n          </div>\n        }\n      }\n\n      if (this.props.currentLearningObjectiveReusableObjectId && R.find(R.propEq('id', this.props.currentLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).reusable_object.id === R.find(R.propEq('id', this.props.proposedLearningObjectiveReusableObjectId), learningObjectiveReusableObjects).reusable_object.id) {\n        teachingPointColumn = <div>{teachingPointColumnValue}</div>\n      }else{\n        let proposedTeachingPointColumnValue = (this.props.proposedLearningObjectiveReusableObjectId && this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId)) ? this.props.learningObjectiveReusableObjects.find(element => element.id === this.props.proposedLearningObjectiveReusableObjectId).reusable_object.content_title : \"\"\n        if(proposedTeachingPointColumnValue==\"\") {\n          teachingPointColumn = <div>{teachingPointSelect}</div>\n        }else {\n          teachingPointColumn = <div>\n            <div style={{textDecoration: \"line-through\"}}>{teachingPointColumnValue}</div>\n            <div style={{color: \"red\"}}>{proposedTeachingPointColumnValue}</div>\n          </div>\n        }\n      }\n    }else{\n      learningObjectColumn = <div>\n        <div style={{textDecoration: \"line-through\"}}>{learningObjectColumnValue}</div>\n          {learningObjectiveSelect}\n      </div>\n\n      teachingPointColumn = <div>\n        <div style={{textDecoration: \"line-through\"}}>{teachingPointColumnValue}</div>\n          {teachingPointSelect}\n      </div>\n    }\n\n    let displayResetRestoreButton\n    if(this.props.assessmentMappingToolPermission && !this.props.usedAvailableForm) {\n      displayResetRestoreButton = this.props.currentLearningObjectiveReusableObjectId === this.props.proposedLearningObjectiveReusableObjectId ?\n          <button className='aq-button' onClick={this.clickResetButton.bind(this)}>Edit</button> :\n          <button className='aq-button' onClick={this.clickRestoreButton.bind(this)}>Restore</button>\n    }\n\n    let displaySaveButton\n    if(this.props.assessmentMappingToolPermission && !this.props.usedAvailableForm) {\n      displaySaveButton = <button className='aq-button' onClick={this.clickSaveButton.bind(this)}>Save</button>\n    }\n\n    let usedAvailableFormIcon\n    if(this.props.usedAvailableForm){\n      usedAvailableFormIcon = <i className=\"fas fa-file-alt\"></i>\n    }\n\n    return (\n      <div>\n        <h5 style={{ backgroundColor: \"#0095C9\", padding: '5px' }}>Assessment - LOTP Map</h5>\n        <div>\n          <br/>\n          <p style={{ fontWeight: \"bold\" }}>\n            The table below displays the Learning Objective and Teaching Point mapped to this Assessment Question\n          </p>\n          <table className=\"aq-mapping-table\">\n            <tbody>\n              <tr>\n                <th className=\"aq-mapping-table-header\">Assessment Question</th>\n                <th className=\"aq-mapping-table-header\">Map to Learning Objective</th>\n                <th className=\"aq-mapping-table-header\">Map to Teaching Point</th>\n              </tr>\n              <tr style={{ backgroundColor: \"white\" }}>\n                <td className=\"aq-mapping-table-assessment-title\">{this.props.assessmentTitle} {usedAvailableFormIcon}</td>\n                <td className=\"aq-mapping-table-row\">\n                  <div style={{textAlign: 'center'}}>\n                    {learningObjectColumn}\n                  </div>\n                </td>\n                <td className=\"aq-mapping-table-row\">\n                  <div style={{textAlign: 'center'}}>\n                    {teachingPointColumn}\n                  </div>\n                </td>\n                <td>\n                  <div style={{textAlign: 'center'}}>\n                    {displayResetRestoreButton}\n                  </div>\n                </td>\n              </tr>\n            </tbody>\n          </table>\n          <div style={{textAlign: 'center'}}>\n            {displaySaveButton}\n          </div>\n          <br/>\n        </div>\n      </div>\n    )\n  }\n}\n","import * as React from \"react\";\nimport { confirmAlert } from 'react-confirm-alert'\nimport 'react-confirm-alert/src/react-confirm-alert.css'\nimport * as R from \"ramda\";\n\ninterface DocContentMappingLOTPMapProps {\n  activeLearningObjective?: LearningObjective;\n  currentLearningObjectiveReusableObjects: Array<LearningObjectiveReusableObject>;\n  proposedLearningObjectiveReusableObjects: Array<ProposedLearningObjectiveReusableObject>;\n  reusableObjects: Array<ReusableObject>;\n  setProposedLearningObjectiveReusableObjects: (loros: Array<ProposedLearningObjectiveReusableObject>) => void;\n  userContext: UserContext;\n};\n\ninterface DocContentMappingLOTPMapState {\n  addingNewLoro?: boolean;\n  selectedReusableObjectId?: number;\n};\n\nfunction equalProposedLearningObjectiveReusableObject(a: ProposedLearningObjectiveReusableObject, b: ProposedLearningObjectiveReusableObject) {\n  return a.learning_objective_id === b.learning_objective_id && a.reusable_object_id === b.reusable_object_id\n}\n\nexport default class DocContentMappingLOTPMap extends React.Component<DocContentMappingLOTPMapProps, DocContentMappingLOTPMapState> {\n  constructor(props: DocContentMappingLOTPMapProps) {\n    super(props);\n    this.state = {\n      addingNewLoro: false,\n      selectedReusableObjectId: undefined,\n    };\n  }\n\n  handleReusableObjectChange(event: React.ChangeEvent<HTMLSelectElement>) {\n    this.setState({selectedReusableObjectId: event.target.value !== \"\" ? parseInt(event.target.value) : null })\n  };\n\n  handleDeleteWithAlert(loro: ProposedLearningObjectiveReusableObject) {\n    confirmAlert({\n      customUI: ({ onClose }) => {\n        return (\n          <div className='react-confirm-alert-body'>\n            <h1>You are deleting an LOTP dyad</h1>\n            <p>Breaking this LOTP dyad could have additional curriculum mapping implications. Click the Continue button to proceed or Cancel to discard the deletion of this dyad.</p>\n            <button className='aq-button'\n              style={{marginRight: '5px'}}\n              onClick={() => {\n                this.handleDeleteLoro(loro);\n                onClose();\n              }}\n            >\n              Continue\n            </button>\n            <button className='aq-button' onClick={onClose}>Cancel</button>\n          </div>\n        );\n      }\n    });\n  }\n\n  handleDeleteLoro(loro: ProposedLearningObjectiveReusableObject) {\n    const {\n      proposedLearningObjectiveReusableObjects,\n      setProposedLearningObjectiveReusableObjects,\n    } = this.props;\n\n    const newProposedLoros = proposedLearningObjectiveReusableObjects.filter((proposedLoro) => !equalProposedLearningObjectiveReusableObject(proposedLoro, loro))\n    setProposedLearningObjectiveReusableObjects(newProposedLoros)\n  }\n\n  handleRestoreLoro(loro: ProposedLearningObjectiveReusableObject) {\n    const {\n      proposedLearningObjectiveReusableObjects,\n      setProposedLearningObjectiveReusableObjects,\n    } = this.props;\n\n    const newProposedLoros = proposedLearningObjectiveReusableObjects.concat([loro])\n    setProposedLearningObjectiveReusableObjects(newProposedLoros)\n  }\n\n  handleSaveWithAlert() {\n    confirmAlert({\n      customUI: ({ onClose }) => {\n        return (\n          <div className='react-confirm-alert-body'>\n            <p>When published, the selected content mappings for this Learning Objective will be available throughout the Aquifer curriculum. Click the Continue button to proceed or Cancel to discard the deletion of this dyad.</p>\n            <button className='aq-button'\n              style={{marginRight: '5px'}}\n              onClick={() => {\n                this.handleSaveNewLoro();\n                onClose();\n              }}\n            >\n              Continue\n            </button>\n            <button className='aq-button' onClick={onClose}>Cancel</button>\n          </div>\n        );\n      }\n    });\n  }\n\n  handleSaveNewLoro() {\n    const {\n      activeLearningObjective,\n      proposedLearningObjectiveReusableObjects,\n      setProposedLearningObjectiveReusableObjects,\n    } = this.props;\n\n    const {\n      selectedReusableObjectId,\n    } = this.state;\n\n    if (!selectedReusableObjectId) {\n      alert(\"Please select a reusable object.\");\n      return;\n    }\n\n    let loroToBeSaved = {\n      learning_objective_id: activeLearningObjective.id,\n      reusable_object_id: selectedReusableObjectId,\n    }\n\n    const newProposedLoros = proposedLearningObjectiveReusableObjects.concat([loroToBeSaved])\n    setProposedLearningObjectiveReusableObjects(newProposedLoros)\n    this.setState({ addingNewLoro: false, selectedReusableObjectId: undefined })\n  }\n\n  handleCancelNewLoro() {\n    this.setState({addingNewLoro: false})\n  }\n\n  render() {\n    const {\n      reusableObjects,\n      activeLearningObjective,\n      currentLearningObjectiveReusableObjects,\n      proposedLearningObjectiveReusableObjects,\n      userContext,\n    } = this.props;\n\n    const {\n      addingNewLoro,\n      selectedReusableObjectId,\n    } = this.state;\n\n\n    if (!activeLearningObjective) {\n      return (\n        <div>\n          <h5 style={{backgroundColor: \"#0095C9\", padding: \"5px\"}}>Please Select a Learning Objective</h5>\n        </div>\n      );\n    }\n\n    const concatedLoros = (currentLearningObjectiveReusableObjects as ProposedLearningObjectiveReusableObject[]).concat(proposedLearningObjectiveReusableObjects).filter((loro) => loro.learning_objective_id === activeLearningObjective.id && loro.reusable_object_id)\n    const activeProposedLoros = R.uniqWith(equalProposedLearningObjectiveReusableObject, concatedLoros)\n\n    let tableRows = activeProposedLoros.map((loro) => {\n      const isCurrentLoro = currentLearningObjectiveReusableObjects.some((currentLoro) => equalProposedLearningObjectiveReusableObject(currentLoro, loro))\n      const isProposedLoro = proposedLearningObjectiveReusableObjects.some((proposedLoro) => equalProposedLearningObjectiveReusableObject(proposedLoro, loro))\n\n      let deleteCell\n      let rowStyle = {}\n      if (userContext.permissions.allowedEditMode === \"Editing\") {\n        if (!isProposedLoro) {\n          deleteCell = <button onClick={() => this.handleRestoreLoro(loro)}>Restore</button>\n          rowStyle = {textDecorationLine: 'line-through', textDecorationStyle: 'solid'}\n        } else if(!isCurrentLoro || (!loro.questions || loro.questions.length === 0)) {\n          deleteCell = <button onClick={() => this.handleDeleteWithAlert(loro)}>Delete</button>\n        }\n      }\n\n      const reusableObject = reusableObjects.find(x => x.id === loro.reusable_object_id)\n\n      return (\n        <tr style={rowStyle}>\n          <td>{decodeURI(activeLearningObjective.name)}</td>\n          <td>{reusableObject?.name}</td>\n          <td>\n            <div style={{textAlign: 'center'}}>\n              {\n                loro.questions?.map((question) => (\n                  <p><a href={`/versions/${question.editing_document.scheduled_review_version_id}/edit`}>{question.case_summary_identifier}</a></p>\n                ))\n              }\n            </div>\n          </td>\n          <td>\n            <div style={{textAlign: 'center'}}>\n              {deleteCell}\n            </div>\n          </td>\n        </tr>\n      );\n    })\n\n    let controls, editingRow;\n    if (userContext.permissions.allowedEditMode === \"Editing\") {\n      if(!addingNewLoro) {\n        controls = (\n          <div style={{textAlign: 'center', marginBottom: '5px'}}>\n            <button className='aq-button' onClick={() => this.setState({addingNewLoro: true})}>Add Row</button>\n          </div>\n        )\n      } else {\n        let existingRoIds = activeProposedLoros.map((loro) => loro.reusable_object_id)\n        let reusableObjectOptions = reusableObjects.filter((ro) => !existingRoIds.includes(ro.id))\n\n        editingRow = (\n          <tr>\n            <td>{decodeURI(activeLearningObjective.name)}</td>\n            <td>\n              <select onChange={this.handleReusableObjectChange.bind(this)} value={selectedReusableObjectId || \"\"}>\n                <option value=\"\">Select</option>\n                {\n                  reusableObjectOptions.map((reusableObject) =>\n                    <option\n                      key={reusableObject.id}\n                      value={reusableObject.id}>{reusableObject.content_title}\n                    </option>\n                  )\n                }\n              </select>\n            </td>\n            <td></td>\n            <td></td>\n          </tr>\n        )\n\n        controls = (\n          <div style={{textAlign: 'center', marginBottom: '5px'}}>\n            <button className='aq-button' style={{marginRight: '5px'}} onClick={() => this.handleSaveWithAlert()} disabled={!selectedReusableObjectId}>Save</button>\n            <button className='aq-button' onClick={() => this.handleCancelNewLoro()}>Cancel</button>\n          </div>\n        )\n      }\n    }\n\n    return (\n      <div>\n        <h5 style={{backgroundColor: \"#0095C9\", padding: \"5px\"}}>Assessment - LOTP - System Map</h5>\n        <div>\n          <p style={{fontWeight: \"bold\"}}>\n            The table below displays the Teaching Points that are mapped to this Learning Objective.\n            Add another row if you wish to map this Learning Objective to additional Teaching Point(s).\n            When you have finished mapping, click the Save button.\n          </p>\n          <table className=\"aq-mapping-table\">\n            <tbody>\n              <tr>\n                <th className=\"aq-mapping-table-header\">Learning Objective</th>\n                <th className=\"aq-mapping-table-header\">Existing Map to Teaching Point</th>\n                <th className=\"aq-mapping-table-header\">Assessment Questions Mapped to this Dyad</th>\n                <th className=\"aq-mapping-table-header\"></th>\n              </tr>\n              {tableRows}\n              {editingRow}\n            </tbody>\n          </table>\n          {controls}\n        </div>\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport DocContentMappingAssessmentMap from \"./ContentMappingTool/AssessmentMap\";\nimport DocContentMappingLOTPMap from \"./ContentMappingTool/LOTPMap\";\n\ninterface DocContentMappingToolProps {\n  documentContext: DocumentContext;\n  editingContextExtra: EditingContextExtra;\n  mappingContext: MappingContext;\n  title: InlineRangeNode;\n  userContext: UserContext;\n  featureFlag: FeatureFlag\n};\n\ninterface DocContentMappingToolState {\n  isCollapsed: boolean;\n};\n\nexport default class DocContentMappingTool extends React.Component<DocContentMappingToolProps, DocContentMappingToolState> {\n  constructor(props: DocContentMappingToolProps) {\n    super(props);\n\n    this.state = {\n      isCollapsed: true,\n    };\n  }\n\n  render() {\n    const {\n      documentContext,\n      editingContextExtra,\n      mappingContext,\n    } = this.props;\n\n    const {\n      isCollapsed,\n    } = this.state;\n\n    const isAssessmentQuestion = documentContext.kind === \"assessment_question_mcq\";\n    let doclotpEditorSideNavChanges = this.props.featureFlag.new_landing_pages ? \"doc-lotp-editor-side-nav\" : \"\"\n\n    let collapsibleTools\n    if (!isCollapsed) {\n      let contentMappingChild;\n      if ('setLearningObjectiveReusableObjectId' in mappingContext) {\n        contentMappingChild = (\n          <DocContentMappingAssessmentMap\n            learningObjectiveReusableObjects={mappingContext.learningObjectiveReusableObjects}\n            currentLearningObjectiveReusableObjectId={mappingContext.currentLearningObjectiveReusableObjectId}\n            proposedLearningObjectiveReusableObjectId={mappingContext.proposedLearningObjectiveReusableObjectId}\n            setLearningObjectiveReusableObjectId={mappingContext.setLearningObjectiveReusableObjectId}\n            assessmentTitle={this.props.title.text}\n            assessmentMappingToolPermission={this.props.userContext.permissions.assessmentMappingTool}\n            usedAvailableForm={this.props.editingContextExtra.usedAvailableForm}\n          />\n        );\n      } else {\n        let activeLearningObjective\n        if (editingContextExtra.currentlyEditingNodeLineage) {\n          let activeLoId = (editingContextExtra.currentlyEditingNodeLineage.find(node => node.type === \"learningObjective\") as DocLearningObjectiveType<InlineNode>)?.id\n          activeLearningObjective = mappingContext.learningObjectives.find( lo => lo.id === activeLoId)\n        }\n        contentMappingChild = (\n          <DocContentMappingLOTPMap\n            reusableObjects={mappingContext.reusableObjects}\n            currentLearningObjectiveReusableObjects={mappingContext.learningObjectiveReusableObjects}\n            proposedLearningObjectiveReusableObjects={mappingContext.proposedLearningObjectiveReusableObjects || []}\n            setProposedLearningObjectiveReusableObjects={mappingContext.setProposedLearningObjectiveReusableObjects}\n            activeLearningObjective={activeLearningObjective}\n            userContext={this.props.userContext}\n          />\n        );\n      }\n\n      collapsibleTools = (\n        <div className=\"doc-lotp-mapping\">\n          {contentMappingChild}\n        </div>\n      );\n    }\n\n    return (\n      <div className={`doc-lotp-editor ${doclotpEditorSideNavChanges}`}>\n        <div className=\"doc-lotp-editor-header\" onClick={() => this.setState({isCollapsed: !isCollapsed})}>\n          <h5>\n            <span className={isCollapsed ? \"icon-open-box\" : \"icon-close-box\"}></span>\n            <span className=\"doc-lotp-editor-title\">Content Mapping Tool</span>\n          </h5>\n        </div>\n        {collapsibleTools}\n      </div>\n    );\n  }\n}\n","import * as React from \"react\";\n\nimport {\n  newAcceptChangesChange,\n  newRejectChangesChange,\n  newAddCommentThreadChange,\n  newAddChangeCommentChange,\n  newDeleteChangeCommentChange,\n  newCloseCommentThreadChange,\n  changeSummaryDescription,\n  ADD_COMMENT_THREAD,\n} from \"../../../helpers/Doc/changes\";\n\nimport { EDIT_COMMENT } from \"../../../helpers/Doc/menu\";\nimport {\n  scrollToUid,\n  scrollToUidAndContentKey,\n} from \"../../../helpers/Doc/scrollTo\";\n\nimport DocCommentInput from \"./CommentInput\";\nimport DocAuthorHeader from \"../AuthorHeader\";\n\nconst borderStyle = {border: \"solid black 1px\", marginLeft: \"5px\", marginBottom: \"5px\", padding: \"5px\"};\n\ninterface DocChangeSummaryProps {\n  editingContext: EditingContextInEditor;\n  userContext: UserContext;\n  changeSummary: ChangeSummary | NewCommentThreadChangeSummary;\n  currentVersion: CurrentVersion;\n  offset: number;\n};\n\nfunction isNewCommentThread(changeSummary: ChangeSummary | NewCommentThreadChangeSummary): changeSummary is NewCommentThreadChangeSummary {\n  return changeSummary.type === \"NEW_COMMENT_THREAD\"\n}\n\nfunction DocChangeSummary(props: DocChangeSummaryProps) {\n  const {\n    editingContext,\n    userContext,\n    changeSummary,\n    currentVersion,\n    offset,\n  } = props;\n\n  const sendNotifications = (text: string) =>  {\n    fetch(`/versions/${currentVersion.id}/send_tag_notification`, {\n      method: 'POST',\n      headers: ReactOnRails.authenticityHeaders({\n        'Accept': \"application/json\",\n        'Content-Type': 'application/json',\n      }),\n      body: JSON.stringify({ text: text, tagger_id: props.userContext.id })\n    });\n  };\n\n  const generateCommentText = (text: string) => {\n    var out = text.replace(/{[^}]*}/g,'')\n    return out\n  }\n\n  if (isNewCommentThread(changeSummary)) {\n    const author = userContext;\n    const isInOneInlineComment = !!changeSummary.range;\n\n    return (\n      <div\n        id={\"changeSummary--newCommentThread\"}\n        className=\"doc-change-summary-item doc-inline-comment-tread\"\n        key={changeSummary.change_set_id}\n        style={{...borderStyle, width: \"300px\", position: \"absolute\", top: `${offset}px`, right: \"10px\"}}\n      >\n        <DocAuthorHeader\n          authorName={`${author.firstName} ${author.lastName}`}\n          colorArray={editingContext.colorLookup[author.id]}\n        />\n        <DocCommentInput\n          isActive\n          onAddClick={(text) => {\n            sendNotifications(text)\n            editingContext.addChange(newAddCommentThreadChange(changeSummary.selection, text), changeSummary.variantId);\n            editingContext.closeCurrentMenu();\n          }}\n          onCancelClick={() => editingContext.closeCurrentMenu()}\n          onFocus={() => {}}\n          autoFocus\n          editors={editingContext.editors}\n        />\n      </div>\n    );\n  } else {\n    let changeDescription;\n    let headerButtons = [];\n\n    const onClick = (e: React.MouseEvent<HTMLDivElement>) => {\n      if (changeSummary.key) {\n        if (changeSummary.changeNodeType && changeSummary.changeNodeType !== \"paragraph\") {\n          scrollToUid(changeSummary.uid)\n        } else {\n          editingContext.setCurrentDocSelection({\n            start: {uid: changeSummary.uid, contentKey: changeSummary.key, index: changeSummary.range.start},\n            end: {uid: changeSummary.uid, contentKey: changeSummary.key, index: changeSummary.range.start}\n          })\n\n          scrollToUidAndContentKey(changeSummary.uid, changeSummary.key)\n        }\n      }\n    }\n\n    if (ADD_COMMENT_THREAD === changeSummary.type) {\n      changeDescription = generateCommentText(changeSummary.text);\n      if (changeSummary.author_id === userContext.id || userContext.permissions.resolveComments) {\n        headerButtons.push(\n          <i\n            key=\"close-comments\"\n            style={{marginRight: \"5px\", fontSize: \"1.5em\", lineHeight: \"1em\"}}\n            className=\"fa fa-check\"\n            onClick={(e) => {\n              editingContext.addChange(newCloseCommentThreadChange(changeSummary.change_id), changeSummary.variantId);\n              e.stopPropagation();\n            }}\n          />\n        );\n      }\n    } else {\n      changeDescription = changeSummaryDescription(changeSummary, props);\n      if (userContext.permissions.acceptTrackedChanges) {\n        headerButtons.push(\n          <i\n            key=\"accept\"\n            style={{marginRight: \"5px\", fontSize: \"1.5em\", lineHeight: \"1em\"}}\n            className=\"fa fa-check\"\n            onClick={(e) => {\n              editingContext.addChange(newAcceptChangesChange(changeSummary.change_id), changeSummary.variantId);\n              e.stopPropagation();\n            }}\n          />\n        )\n      }\n      if (userContext.permissions.rejectTrackedChanges || userContext.id === changeSummary.author_id) {\n        headerButtons.push(\n          <i\n            key=\"reject\"\n            style={{marginRight: \"5px\", fontSize: \"1.5em\", lineHeight: \"1em\"}}\n            className=\"fa fa-times\"\n            onClick={(e) => {\n              editingContext.addChange(newRejectChangesChange(changeSummary.change_id), changeSummary.variantId);\n              e.stopPropagation();\n            }}\n          />\n        )\n      }\n    }\n\n    const firstChangeId = changeSummary.change_id;\n\n    const renderedComments = (changeSummary.comments || []).map((comment) => {\n      return (\n        <div key={comment.comment_id}>\n          <DocAuthorHeader\n            authorName={comment.author_full_name}\n            colorArray={editingContext.colorLookup[comment.author_id]}\n            createdAt={comment.created_at}\n          >\n            {comment.author_id === userContext.id && (\n              <i\n                style={{marginRight: \"5px\"}}\n                className=\"fa fa-trash\"\n                onClick={(e) => {\n                  editingContext.addChange(newDeleteChangeCommentChange(comment.comment_id), changeSummary.variantId);\n                  e.stopPropagation();\n                }}\n              />\n            )}\n          </DocAuthorHeader>\n          <p style={{marginBottom: 0}}>{generateCommentText(comment.text)}</p>\n          <hr style={{margin: \"5px 0\"}} />\n        </div>\n      );\n    });\n\n    const commentResponseInput = () => {\n      if (userContext.permissions.respondToComments) {\n        // TODO: Inspect to make sure editingContext.currentMenu actully gets the currentMenu\n        return (\n          <DocCommentInput\n            isActive={editingContext.currentMenu?.menu === EDIT_COMMENT && editingContext.currentMenu?.change_uid === firstChangeId}\n            onAddClick={(text) => {\n              sendNotifications(text)\n              editingContext.addChange(newAddChangeCommentChange(firstChangeId, text), changeSummary.variantId);\n              editingContext.closeCurrentMenu();\n            }}\n            onCancelClick={() => editingContext.closeCurrentMenu()}\n            onFocus={() => {\n              editingContext.clearCurrentDocSelection();\n              editingContext.setCurrentMenu(EDIT_COMMENT, {change_uid: firstChangeId, change_set_id: changeSummary.change_set_id});\n\n              if (changeSummary.key) {\n                if (changeSummary.changeNodeType && changeSummary.changeNodeType !== \"paragraph\") {\n                  scrollToUid(changeSummary.uid)\n                } else {\n                  scrollToUidAndContentKey(changeSummary.uid, changeSummary.key)\n                }\n              }\n            }}\n            editors={editingContext.editors}\n          />\n        )\n      }\n    }\n\n    return (\n      <div\n        id={`changeSummary--${changeSummary.change_set_id}`}\n        className=\"doc-change-summary-item\"\n        key={changeSummary.change_set_id}\n        style={{...borderStyle, width: \"300px\", position: \"absolute\", top: `${offset}px`, right: \"10px\"}}\n        onClick={onClick}\n      >\n        <DocAuthorHeader\n          authorName={changeSummary.author_full_name}\n          colorArray={editingContext.colorLookup[changeSummary.author_id]}\n          createdAt={changeSummary.created_at}\n        >\n          {headerButtons}\n        </DocAuthorHeader>\n        <p className=\"doc-change-summary-description\" style={{marginBottom: 0}}>{changeDescription}</p>\n        <hr style={{margin: \"5px 0\"}} />\n        {renderedComments}\n        {commentResponseInput()}\n      </div>\n    );\n  }\n}\n\nexport default React.memo(DocChangeSummary);\n","import * as React from \"react\";\n\nimport DocChangeSummary from \"./ChangeSummaryColumn/ChangeSummary\";\n\ninterface DocChangeSummaryColumnProps {\n  editingContext: EditingContext;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  changeSummaries: Array<OffsetChangeSummary>;\n  currentVersion: CurrentVersion;\n  featureFlag: FeatureFlag;\n};\n\nexport default function DocChangeSummaryColumn(props: DocChangeSummaryColumnProps) {\n  const {\n    editingContext,\n    userContext,\n    displayContext,\n    changeSummaries = [],\n    currentVersion,\n  } = props;\n\n  if (!editingContext.isEditing || !displayContext.canBeEditing) { return; }\n\n  return <>\n    {\n      changeSummaries.map((offsetChangeSummary) => {\n        return (\n          <DocChangeSummary\n            key={offsetChangeSummary.changeSummary.change_set_id}\n            editingContext={editingContext}\n            userContext={userContext}\n            changeSummary={offsetChangeSummary.changeSummary}\n            currentVersion={currentVersion}\n            offset={offsetChangeSummary.offset}\n          />\n        );\n      })\n    }\n  </>\n}\n","import * as React from \"react\";\n\nimport GenButton from \"../Gen/Button/component\";\nimport GenModal from \"../Gen/Modal/component\";\n\nimport { EDIT_RO_NAME_MODAL } from \"../../helpers/Doc/menu\";\n\ninterface Props {\n\n};\n\nexport default function DocROName(props) {\n  const {\n    documentContext,\n    editingContext,\n    editingContextExtra,\n  } = props;\n\n  if (!editingContext.isEditing || documentContext.docType !== \"ReusableObject\") { return null; }\n\n  const [newNameState, setNewNameState] = React.useState(documentContext.name);\n\n  let editRoNameModal;\n  if (editingContextExtra.currentMenu?.menu === EDIT_RO_NAME_MODAL) {\n    editRoNameModal = (\n      <GenModal open>\n        <div className=\"gen-modal-panel\">\n          <div className=\"gen-modal-header\">\n            <div className=\"gen-modal-header-left\">\n              <h1 className=\"title\">Update Reusable Content Title</h1>\n            </div>\n            <div className=\"gen-modal-header-right\">\n              <button\n                type=\"button\"\n                className=\"close-button\"\n                onClick={() => editingContext.closeCurrentMenu()}\n              >\n                <i className=\"fa fa-times\" />\n              </button>\n            </div>\n          </div>\n          <hr />\n          <label htmlFor=\"ro-name\">\n            New Title:\n            <input\n              id=\"ro-name\"\n              type=\"text\"\n              value={newNameState}\n              onChange={(e) => setNewNameState(e.target.value)}\n            />\n          </label>\n          <p>Updates to Reusable Content titles take immediate effect and do not need to be published.</p>\n          <div className=\"gen-modal-choice-buttons\">\n            <button\n              type=\"button\"\n              onClick={() => {\n                editingContextExtra.updateRoName(newNameState);\n                editingContext.closeCurrentMenu();\n              }}\n            >\n              Save\n            </button>\n            <button\n              type=\"button\"\n              onClick={() => editingContext.closeCurrentMenu()}\n            >\n              Cancel\n            </button>\n          </div>\n        </div>\n      </GenModal>\n    );\n  }\n\n  return (\n    <div className=\"doc-ro-name\">\n      <h6>Reusable Content Title:</h6>\n      <div className=\"doc-ro-name-container\">\n        <h1>\n          {documentContext.name}\n        </h1>\n        <div>\n          <GenButton\n            name={<i className=\"fa fa-edit\" />}\n            highlighted\n            small\n            onClick={() => editingContext.setCurrentMenu(EDIT_RO_NAME_MODAL)}\n          />\n        </div>\n      </div>\n      {editRoNameModal}\n    </div>\n  );\n}\n","import * as React from \"react\";\n\ninterface AssessmentQuestionFormProps {\n  editingContextExtra: EditingContextExtra\n};\n\nexport default function AssessmentQuestionForm(props: AssessmentQuestionFormProps) {\n  const [answerExplanation, setAnswerExplanation] = React.useState(null);\n\n  const save = function() {\n    if (answerExplanation) {\n      props.editingContextExtra.setAssessmentQuestionData({\n        ...props.editingContextExtra.assessmentQuestion,\n        answer_explanation: answerExplanation\n      })\n      setAnswerExplanation(null)\n    }\n  }\n\n  return (\n    <div style={{padding: 10}}>\n      <div>\n        <h5 style={{paddingBottom: 10}}>Answer Explanation:</h5>\n        <span>\n          <textarea value={answerExplanation || props.editingContextExtra.assessmentQuestion.answer_explanation || \"\"} onChange={(e) => setAnswerExplanation(e.target.value)} />\n        </span>\n        <span>\n          <button className='aq-button' onClick={save}>Save</button>\n        </span>\n      </div>\n    </div>\n  );\n}\n","import * as React from \"react\";\n\nimport * as classNames from \"classnames\";\n\nimport GenModal from \"../Gen/Modal/component\";\nimport GenButton from \"../Gen/Button/component\";\n\nimport { OPENED_DOCUMENT_LOG } from \"../../helpers/DocumentUserLog\";\nimport {\n  initializeMedia,\n  getAssetAssociations,\n  deleteAssetAssociation,\n  mediaKeyHelper,\n} from \"../../helpers/media_manager\";\n\nimport { trackChangesEditModes } from \"../../helpers/Doc/trackChangesEditMode\";\n\nimport DocEditBar from \"./EditBar\";\nimport DocSection from \"./BlockNodes/Section\";\nimport ReasoningTool from \"./ReasoningTool\";\nimport DocModals from \"./Modals\";\nimport DocContentMappingTool from \"./ContentMappingTool\";\nimport DocChangeSummaryColumn from \"./ChangeSummaryColumn\";\nimport DocEditBarMediaManager from \"./EditBar/MediaManager\";\n\nimport { displayModes, isDisplayMode } from \"../../helpers/Doc/displayMode\";\n\nimport DocROName from \"./ROName\";\n\nimport { MEDIA_MANAGER } from \"../../helpers/Doc/menu\";\nimport AssessmentQuestionForm from \"./AssessmentQuestionForm\";\n\nimport { generateLearningObjectiveActions } from \"../../reducers/learningObjectives\";\n\ninterface NewEditDocProps {\n  documentContext: DocumentContext;\n  currentVersion: CurrentVersion;\n  userContext: UserContext;\n  displayContext: DisplayContext;\n  editingContext: EditingContext;\n  editingContextExtra: EditingContextExtra;\n  mappingContext: MappingContext;\n  mediaContext: MediaContext;\n  projectContext: ProjectContext;\n  reasoningToolContext: ReasoningToolContext;\n  integrationInfo: IntegrationInfo;\n  mergedData: MergedData;\n  changeData: ChangeData;\n  displayUid?: string;\n  changeSummaries: Array<OffsetChangeSummary>;\n  userState: UserState;\n\n  featureFlag: FeatureFlag;\n\n  documentSetId?: number;\n  isEditor: boolean;\n\n  allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n  learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n};\n\nexport default function NewEditDoc(props: NewEditDocProps) {\n  const {\n    documentContext,\n    currentVersion,\n    userContext,\n    displayContext,\n    editingContext,\n    editingContextExtra,\n    mappingContext,\n    mediaContext,\n    projectContext,\n    reasoningToolContext,\n    integrationInfo,\n    mergedData,\n    changeData,\n    displayUid,\n    changeSummaries,\n    userState,\n    featureFlag,\n    allLearningObjectiveOptions,\n    learningObjectiveActionsGenerator,\n  } = props;\n\n  React.useEffect(() => {\n    const {\n      userContext,\n      documentSetId,\n      editingContext,\n      editingContextExtra,\n    } = props;\n\n    if (editingContext.isEditing && userContext.permissions.allowedEditMode === \"Suggesting\") {\n      editingContextExtra.setTrackChangesEditMode(trackChangesEditModes.SUGGESTING_MODE);\n    }\n\n    const openedDocumentLogArgs = documentSetId ? {document_set_id: documentSetId} : {};\n    userContext.logEvent(OPENED_DOCUMENT_LOG, openedDocumentLogArgs);\n  }, []);\n\n  const handleTurbolinksPageChange = React.useCallback(event => {\n      if (editingContext.isEditing && editingContextExtra.isActiveEditData) {\n        if (!confirm(\"You have unsaved changes! Are you sure you want to leave this page? Unsaved changes will be lost.\")) {\n          event.preventDefault();\n        }\n      }\n  }, [editingContext.isEditing, editingContextExtra.isActiveEditData]);\n\n  React.useEffect(() => {\n      window.addEventListener(\"turbo:before-visit\", handleTurbolinksPageChange);\n      return () => {\n          window.removeEventListener(\"turbo:before-visit\", handleTurbolinksPageChange);\n      };\n  }, [handleTurbolinksPageChange]);\n\n  ////////////\n  // MEDIA //\n  //////////\n\n  const [mediaState, setMediaState] = React.useState(mediaContext);\n\n  React.useEffect(() => {\n    initializeMedia({\n      isEmbeded: displayContext.isEmbeded,\n      modelId: documentContext.id as any, // TODO: Remove any\n      modelType: \"Document\",\n      responseHandler: setMediaState,\n    });\n  }, []);\n\n  const handleMediaCreate = (data) => {\n    const mediaKey = mediaKeyHelper(data);\n    setMediaState((prev) => ({\n      ...prev,\n      [mediaKey]: [...prev[mediaKey], data],\n    }));\n  }\n\n  const handleMediaDelete = (data) => {\n    const mediaKey = mediaKeyHelper(data);\n    setMediaState((prev) => ({\n      ...prev,\n      [mediaKey]: prev[mediaKey].filter((item) => item.external_identifier !== data.external_identifier),\n    }));\n  }\n\n  const handleMediaReplace = (data) => {\n    if (data.new) {\n      handleMediaCreate(data.new);\n    }\n    if (data.old) {\n      handleMediaDelete(data.old);\n    }\n  }\n\n  const offlineModal = (\n    <GenModal open={!displayContext.isOnline && !displayContext.isEmbeded}>\n      <div className=\"gen-modal-panel\">\n        {\n          mergedData.timeLimit\n          ? <p>You have lost your internet connectivity. In order to save your work on the exam to this point, please see your proctor. Ask your proctor to pause your exam. Once an internet connection is restored, your proctor can re-start your exam and you can continue your work.</p>\n          : <p>You have lost connection to the system, but your activity prior to disconnect has been saved. When connectivity is restored you can resume where you left off.</p>\n        }\n      </div>\n    </GenModal>\n  );\n\n  let mediaModal = null;\n  if (editingContext.isEditing && editingContextExtra.currentMenu?.menu === MEDIA_MANAGER) {\n    const mediaType = editingContextExtra.currentMenu?.mediaType\n    mediaModal = (\n      <DocEditBarMediaManager\n        key={`${mediaType}Menu`}\n        documentContext={documentContext}\n        currentVersion={currentVersion}\n        userContext={userContext}\n        editingContext={editingContext}\n        editingContextExtra={editingContextExtra}\n        mediaContext={mediaState}\n        createHandler={handleMediaCreate}\n        deleteHandler={handleMediaDelete}\n        replaceHandler={handleMediaReplace}\n      />\n    );\n  }\n\n  const outsideClasses = classNames(\n    \"doc-outside-wrapper\",\n  );\n\n  const insideClasses = classNames(\n    \"doc-body\",\n    `${displayContext.displayMode}-display-mode`,\n    {\n      \"is-editing\": editingContext.isEditing,\n    },\n  );\n\n  const showTopBar = editingContext.shouldShowEditor && !displayUid && !displayContext.isEmbeded;\n\n  let docControlsWrapper = null;\n  if (props.isEditor && !editingContext.shouldShowEditor) {\n    let docControls = [\n      <select className=\"doc-controls-select doc-controls-view-mode\"\n      key=\"doc-controls-select\"\n      value={displayContext.displayMode}\n      onChange={(e) => {isDisplayMode(e.target.value) && displayContext.setDisplayMode(e.target.value);}}>\n        <option value={displayModes.STUDENT}>Student</option>\n        <option value={displayModes.UNGATED}>Ungated</option>\n        <option value={displayModes.FULL}>Full</option>\n        <option value={displayModes.OUTLINE}>Outline</option>\n      </select>\n    ];\n\n    docControlsWrapper =\n      <div className=\"doc-controls\">\n        {docControls}\n      </div>;\n  }\n\n  const showReasoningTool = !displayUid && !displayContext.isEmbeded;\n  let showControlsInReadOnly = userContext.permissions.viewTopBar\n  let renderTopBar = showTopBar || showControlsInReadOnly\n\n  const topBarRef = React.useRef<HTMLDivElement>(null);\n  const [topBarHeight, setTopBarHeight] = React.useState(0);\n\n  React.useEffect(() => {\n    const observer = new ResizeObserver(() => {\n      if (topBarRef.current) {\n        console.log(topBarRef.current.offsetHeight)\n        setTopBarHeight(topBarRef.current.offsetHeight);\n      }\n    });\n\n    if (topBarRef.current) {\n      observer.observe(topBarRef.current);\n    }\n\n    return () => observer.disconnect();\n  }, []);\n\n  return (\n    <div className={outsideClasses}>\n      <div className=\"doc-inside-wrapper\">\n        {renderTopBar &&\n          <div ref={topBarRef} className=\"doc-top-wrapper\">\n            {showTopBar && <DocContentMappingTool\n              documentContext={documentContext}\n              editingContext={editingContext}\n              editingContextExtra={editingContextExtra}\n              displayContext={displayContext}\n              mappingContext={mappingContext}\n              userContext={userContext}\n              featureFlag={featureFlag}\n              {...mergedData}\n            />}\n            <DocEditBar\n              key=\"edit-bar\"\n              documentContext={documentContext}\n              currentVersion={currentVersion}\n              userContext={userContext}\n              displayContext={displayContext}\n              editingContext={editingContext}\n              editingContextExtra={editingContextExtra}\n              mediaContext={mediaState}\n              projectContext={projectContext}\n              mergedData={mergedData}\n              mappingContext={mappingContext}\n\n              featureFlag={featureFlag}\n            />\n          </div>\n        }\n        <div\n          id=\"doc-body-wrapper\"\n          className=\"doc-body-wrapper\"\n          style={{marginTop: topBarHeight, position: \"relative\"}}\n        >\n          <div\n            className={insideClasses}\n          >\n            {offlineModal}\n            {mediaModal}\n            {docControlsWrapper}\n            <DocROName\n              documentContext={documentContext}\n              editingContext={editingContext}\n              editingContextExtra={editingContextExtra}\n\n              featureFlag={featureFlag}\n            />\n            <DocSection\n              {...mergedData}\n              documentContext={documentContext}\n              currentVersion={currentVersion}\n              userContext={userContext}\n              displayContext={displayContext}\n              editingContext={editingContext}\n              mediaContext={mediaState}\n\n              featureFlag={featureFlag}\n\n              level={0}\n              integrationInfo={integrationInfo}\n            />\n          </div>\n\n          { editingContextExtra.assessmentQuestion && <AssessmentQuestionForm editingContextExtra={editingContextExtra} />}\n\n          <DocChangeSummaryColumn\n            editingContext={editingContext}\n            userContext={userContext}\n            displayContext={displayContext}\n            changeSummaries={changeSummaries}\n            currentVersion={currentVersion}\n\n            featureFlag={featureFlag}\n          />\n        </div>\n      </div>\n      {showReasoningTool\n        && <ReasoningTool\n          key=\"reasoning-tool\"\n          documentContext={documentContext}\n          currentVersion={currentVersion}\n          userContext={userContext}\n          displayContext={displayContext}\n          editingContext={editingContext}\n          editingContextExtra={editingContextExtra}\n          mediaContext={mediaState}\n          projectContext={projectContext}\n          reasoningToolContext={reasoningToolContext}\n          mappingContext={mappingContext}\n          mergedData={mergedData}\n          changeData={changeData}\n          userState={userState}\n\n          featureFlag={featureFlag}\n        />\n      }\n      <DocModals\n        documentContext={documentContext}\n        currentVersion={currentVersion}\n        userContext={userContext}\n        displayContext={displayContext}\n        editingContext={editingContext}\n        editingContextExtra={editingContextExtra}\n        mediaContext={mediaState}\n        projectContext={projectContext}\n        mergedData={mergedData}\n        mappingContext={mappingContext}\n        allLearningObjectiveOptions={allLearningObjectiveOptions}\n        learningObjectiveActionsGenerator={learningObjectiveActionsGenerator}\n\n        featureFlag={featureFlag}\n      />\n    </div>\n  );\n}\n","export default class BaseObserver<Delegate> {\n  delegates: Array<Delegate>;\n  isRunning?: boolean;\n\n  constructor() {\n    this.delegates = [];\n  }\n\n  start() {\n    if (!this.isRunning) {\n      this.isRunning = true;\n      this.startEventListeners();\n    }\n  }\n\n  startEventListeners() {}\n\n  stop() {\n    if (this.isRunning) {\n      this.isRunning = false;\n      this.stopEventListeners();\n    }\n  }\n\n  stopEventListeners() {}\n\n  registerDelegate(delegate: Delegate) {\n    if (!this.delegates.includes(delegate)) {\n      this.delegates.push(delegate);\n      this.start();\n      this.afterRegistrationInitializer(delegate);\n    }\n  }\n\n  afterRegistrationInitializer(delegate: Delegate) {}\n\n  unregisterDelegate(delegate: Delegate) {\n    this.delegates = this.delegates.filter(arrayDelegate => arrayDelegate !== delegate);\n    if (this.delegates.length === 0) {\n      this.stop();\n    }\n  }\n}\n","import BaseObserver from './baseObserver'\n\ninterface ActiveUserObserverDelegate {\n  activeUserDidFire: (mode: MouseEvent | KeyboardEvent) => void;\n}\n\nexport default class ActiveUserObserver extends BaseObserver<ActiveUserObserverDelegate> {\n  startEventListeners() {\n    document.addEventListener(\"mousemove\", this.notifyOnActiveUser.bind(this), true);\n    document.addEventListener(\"keydown\", this.notifyOnActiveUser.bind(this), true);\n  }\n\n  stopEventListeners() {\n    document.removeEventListener(\"mousemove\", this.notifyOnActiveUser.bind(this), true);\n    document.addEventListener(\"keydown\", this.notifyOnActiveUser.bind(this), true);\n  }\n\n  notifyOnActiveUser(event: MouseEvent | KeyboardEvent) {\n    this.delegates.forEach((delegate) => {\n      if (delegate.activeUserDidFire) {\n        delegate.activeUserDidFire(event);\n      }\n    });\n  }\n}\n","import BaseObserver from './baseObserver'\n\ninterface BeforeInputObserverDelegate {\n  beforeInputDidFire: (mode: InputEvent) => void;\n}\n\nexport default class BeforeInputObserver extends BaseObserver<BeforeInputObserverDelegate> {\n  startEventListeners() {\n    document.addEventListener(\"beforeinput\", this.notifyOnBeforeInput.bind(this), true)\n  }\n\n  stopEventListeners() {\n    document.removeEventListener(\"beforeinput\", this.notifyOnBeforeInput.bind(this), true)\n  }\n\n  notifyOnBeforeInput(event: InputEvent) {\n    this.delegates.forEach(delegate => delegate.beforeInputDidFire(event));\n  }\n}\n","import BaseObserver from './baseObserver'\n\ninterface CopyObserverDelegate {\n  copyDidFire?: (mode: ClipboardEvent) => void;\n  cutDidFire?: (mode: ClipboardEvent) => void;\n  pasteDidFire?: (mode: ClipboardEvent) => void;\n}\n\nexport default class CopyObserver extends BaseObserver<CopyObserverDelegate> {\n  startEventListeners() {\n    document.addEventListener(\"copy\", this.notifyOnCopy.bind(this), true);\n    document.addEventListener(\"cut\", this.notifyOnCut.bind(this), true);\n    document.addEventListener(\"paste\", this.notifyOnPaste.bind(this), true);\n  }\n\n  stopEventListeners() {\n    document.removeEventListener(\"copy\", this.notifyOnCopy.bind(this), true);\n    document.removeEventListener(\"cut\", this.notifyOnCut.bind(this), true);\n    document.removeEventListener(\"paste\", this.notifyOnPaste.bind(this), true);\n  }\n\n  notifyOnCopy(event: ClipboardEvent) {\n    this.delegates.forEach((delegate) => {\n      if (delegate.copyDidFire) {\n        delegate.copyDidFire(event);\n      }\n    });\n  }\n\n  notifyOnCut(event: ClipboardEvent) {\n    this.delegates.forEach((delegate) => {\n      if (delegate.cutDidFire) {\n        delegate.cutDidFire(event);\n      }\n    });\n  }\n\n  notifyOnPaste(event: ClipboardEvent) {\n    this.delegates.forEach((delegate) => {\n      if (delegate.pasteDidFire) {\n        delegate.pasteDidFire(event);\n      }\n    });\n  }\n}\n","import BaseObserver from './baseObserver'\n\ninterface MouseClickObserverDelegate {\n  mouseDidDownClick: (mode: MouseEvent) => void;\n  mouseDidUpClick: (mode: MouseEvent) => void;\n}\n\n\nexport default class MouseClickObserver extends BaseObserver<MouseClickObserverDelegate> {\n  startEventListeners() {\n    document.addEventListener(\"mousedown\", this.notifyOnMouseDownClick.bind(this), true);\n    document.addEventListener(\"mouseup\", this.notifyOnMouseUpClick.bind(this), true);\n  }\n\n  stopEventListeners() {\n    document.removeEventListener(\"mousedown\", this.notifyOnMouseDownClick.bind(this), true);\n    document.removeEventListener(\"mouseup\", this.notifyOnMouseUpClick.bind(this), true);\n  }\n\n  notifyOnMouseDownClick(event: MouseEvent) {\n    this.delegates.forEach(delegate => delegate.mouseDidDownClick(event));\n  }\n\n  notifyOnMouseUpClick(event: MouseEvent) {\n    this.delegates.forEach(delegate => delegate.mouseDidUpClick(event));\n  }\n}\n","import BaseObserver from './baseObserver'\n\nimport { full_url } from \"../../url\";\n\nconst OFFLINE_TIME_TO_CHECK_FOR_UPDATES = 1000\nconst ONLINE_TIME_TO_CHECK_FOR_UPDATES = 30000\n\ninterface OfflineObserverDelegate {\n  didGoOnline: () => void;\n  didGoOffline: () => void;\n}\n\nexport default class OfflineObserver extends BaseObserver<OfflineObserverDelegate> {\n  testIfOnlineTimer?: NodeJS.Timeout;\n\n  startEventListeners() {\n    window.addEventListener(\"offline\", this.notifyOffline.bind(this), true);\n    window.addEventListener(\"online\", this.notifyOnline.bind(this), true);\n    this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), ONLINE_TIME_TO_CHECK_FOR_UPDATES);\n  }\n\n  stopEventListeners() {\n    window.removeEventListener(\"offline\", this.notifyOffline.bind(this), true);\n    window.removeEventListener(\"online\", this.notifyOnline.bind(this), true);\n    if ( this.testIfOnlineTimer ) { clearTimeout(this.testIfOnlineTimer); }\n  }\n\n  afterRegistrationInitializer(delegate: OfflineObserverDelegate) {\n    navigator.onLine ? delegate.didGoOnline() : delegate.didGoOffline();\n  }\n\n  notifyOffline() {\n    this.delegates.forEach(delegate => delegate.didGoOffline());\n  }\n\n  notifyOnline() {\n    this.delegates.forEach(delegate => delegate.didGoOnline());\n  }\n\n  testIfOnline() {\n    const xhr = new XMLHttpRequest();\n\n    const noResponseTimer = setTimeout(() => {\n      xhr.abort();\n      this.notifyOffline();\n      this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), OFFLINE_TIME_TO_CHECK_FOR_UPDATES);\n    }, 5000);\n\n    xhr.onreadystatechange = (e) => {\n      if (xhr.readyState !== 4) {\n        return;\n      }\n\n      clearTimeout(noResponseTimer);\n      if (xhr.status === 200) {\n        this.notifyOnline();\n        this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), ONLINE_TIME_TO_CHECK_FOR_UPDATES);\n      } else {\n        this.notifyOffline();\n        this.testIfOnlineTimer = setTimeout(this.testIfOnline.bind(this), OFFLINE_TIME_TO_CHECK_FOR_UPDATES);\n      }\n    };\n    xhr.open(\"HEAD\", full_url(\"/check/online\"), true);\n    xhr.send();\n  }\n}\n","import BaseObserver from './baseObserver'\n\ninterface SelectionObserverDelegate {\n  selectionDidChange: (mode: Event) => void;\n}\n\nexport default class SelectionObserver extends BaseObserver<SelectionObserverDelegate> {\n  startEventListeners() {\n    document.addEventListener(\"selectionchange\", this.notifySelectionChange.bind(this), true);\n  }\n\n  stopEventListeners() {\n    document.removeEventListener(\"selectionchange\", this.notifySelectionChange.bind(this), true);\n  }\n\n  notifySelectionChange(event: Event) {\n    this.delegates.forEach(delegate => delegate.selectionDidChange(event));\n  }\n}\n","import {\n  compact,\n  difference,\n  last,\n  partition,\n  uniq,\n  zip,\n} from \"lodash\";\n\nimport generateUUID from \"../../generateUUID\";\n\nimport { convertAllInlineNodesToRangeJSON } from \"../Convert/RangeInlineJSON\";\n\nimport * as DocConvertPlainText from \"../Convert/PlainText\";\n\nexport function reflow(json: DocSectionType<InlineHtmlNode>, documentId: number) {\n  const root_section = json;\n\n  let end_of_case_text = root_section.content.find((node) => node.uid === \"end_of_case_text\");\n  if (!end_of_case_text) {\n    end_of_case_text = endOfCaseText(root_section.title);\n  }\n\n  let cards = root_section.content.filter((node) => node.type === \"section\");\n  cards.forEach((section) => {\n    section.classes = uniq((section.classes || []).concat([\"card\"]));\n  });\n\n  let feedback_cards, remaining_cards, finish_case_cards, finish_case_card;\n  let release_notes_cards, learning_objectives_cards, case_synopsis_cards;\n  let references_cards, saq_cards, regular_cards;\n\n  remaining_cards = cards;\n  [feedback_cards, remaining_cards] = partitionByClass(remaining_cards, \"feedback_card\");\n  [finish_case_cards, remaining_cards] = partitionByClass(remaining_cards, \"finish_case_card\");\n  finish_case_card = finish_case_cards[0];\n  [release_notes_cards, remaining_cards] = partitionByClass(remaining_cards, \"release_notes_card\");\n  [learning_objectives_cards, remaining_cards] = partition(remaining_cards, (node) => (/Learning Objectives/i).test(node.title.text));\n  [case_synopsis_cards, remaining_cards] = partitionByClass(remaining_cards, \"case_synopsis_card\");\n  [references_cards, remaining_cards] = partition(remaining_cards, (node) => node.classes && node.classes.includes(\"references_card\") && (/References/).test(node.title.text));\n  [saq_cards, remaining_cards] = partitionByClass(remaining_cards, \"saq_card\");\n  regular_cards = remaining_cards;\n\n  finish_case_card = finish_case_card || finishCaseCard();\n  if (feedback_cards.length === 0) { feedback_cards = [feedbackCard()]; }\n  if (release_notes_cards.length === 0) { release_notes_cards = releaseNotesCards(); }\n  if (learning_objectives_cards.length === 0) { learning_objectives_cards = learningObjectivesCards(); }\n  if (case_synopsis_cards.length === 0) { case_synopsis_cards = caseSynopsisCards(); }\n\n  const hidden_cards = case_synopsis_cards.concat(references_cards);\n  hidden_cards.forEach((section) => {\n    section.invisible = true;\n  });\n\n  let finish_case_button = null;\n  let finish_case_text = null;\n  let case_summary_button = null;\n  let finish_case_saq_text = null;\n\n  cards.forEach((section) => {\n    section.content = section.content.filter((node) => {\n      if (node.classes && node.classes.includes(\"finish_case_button\")) {\n        finish_case_button = node;\n        return false;\n      } else if ( node.type === \"paragraph\" && (\n          (/Well done! You have completed/i).test(node.content.text)\n          || (node.classes && node.classes.includes(\"finish_case_text\"))\n      )) {\n        finish_case_text = node;\n        return false;\n      } else if (node.classes && node.classes.includes(\"case_summary_button\")) {\n        case_summary_button = node;\n        return false;\n      } else if ( node.type === \"paragraph\" && (\n        node.content.text === \"You may now continue to the optional self-assessment questions for you to assess what you have learned in this case.\"\n        || node.content.text === \"You may now continue to the  self-assessment questions for you to assess what you have learned in this case.\"\n        || (node.classes && node.classes.includes(\"finish_case_saq_text\"))\n      )) {\n        finish_case_saq_text = node;\n        return false;\n      } else if (node.uid === \"feedback_introduction_text\") {\n        return false;\n      } else {\n        return true;\n      }\n    });\n  });\n\n  const not_continue_cards = difference(cards, regular_cards);\n  not_continue_cards.forEach((section: any) => { // TODO: Remove any\n    section.content = section.content.filter((node) => !(node.classes && node.classes.includes(\"continue_button\")));\n  });\n\n  const not_feedback_cards = difference(cards, feedback_cards);\n  not_feedback_cards.forEach((section: any) => { // TODO: Remove any\n    section.content = section.content.filter((node) => !(node.classes && node.classes.includes(\"feedback_button\")));\n  });\n\n  const regular_cards_uids = regular_cards.map((card) => card.uid);\n  const zipped_regular_cards = zip(regular_cards, regular_cards_uids.slice(1).concat([feedback_cards[0].uid]));\n\n  zipped_regular_cards.forEach(([card, next_uid]: [any, any]) => { // TODO: Remove any\n    const question_sections = card.content.filter((node) => node.type === \"section\" && node.classes && node.classes.includes(\"question\"));\n    const submit_buttons = compact(question_sections.map((question_section) => question_section.content.find((node) => node.type === \"button\" && node.title.text === \"Submit\")));\n    const old_submit_buttons_actions = submit_buttons.flatMap((submit_button: any) => submit_button.onClick); // TODO: Remove any\n\n    question_sections.forEach((question_section) => {\n      addSubmitButtonActionsToQuestionSection(question_section);\n    });\n\n    let continue_button = card.content.filter((node) => node.classes && node.classes.includes(\"continue_button\"))[0];\n    if (!continue_button) {\n      continue_button = continueButton(`continue_button_${card.uid}`);\n      card.content = card.content.concat(continue_button);\n    }\n\n    continue_button.onClick = findActionOrNew(continue_button.onClick, [\n      generateSetNodeKVPairAction(next_uid, \"invisible\", false),\n      generateSetNodeKVPairAction(next_uid, \"collapsed\", false),\n      generateSetNodeKVPairAction(card.uid, \"collapsed\", true),\n      generateSetNodeKVPairAction(continue_button.uid, \"invisible\", true),\n    ]);\n\n    if (submit_buttons.length > 0) {\n      const submit_button: any = submit_buttons[0]; // TODO: Remove any\n\n      submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_buttons_actions, generateSetNodeKVPairAction(continue_button.uid, \"inactive\", 1)));\n\n      continue_button.inactive = 2;\n    } else {\n      delete continue_button.inactive;\n    }\n  });\n\n  if (regular_cards.length > 0) {\n    const feedback_introduction_text = feedbackIntroductionText();\n\n    const last_regular_card: any = last(regular_cards);\n    last_regular_card.content.splice(-1, 0, feedback_introduction_text);\n  }\n\n  const feedback_cards_uids = feedback_cards.map((card) => card.uid);\n  const zipped_feedback_cards = zip(feedback_cards, feedback_cards_uids.slice(1).concat([finish_case_card.uid]));\n\n  zipped_feedback_cards.forEach(([card, next_uid]: [any, any], index) => { // TODO: Remove any\n    let feedback_button = card.content.find((node) => node.classes && node.classes.includes(\"feedback_button\"));\n    if (!feedback_button) {\n      feedback_button = feedbackSubmitButton(`feedback_card_${index+1}_button`);\n      card.content.push(feedback_button);\n    }\n\n    feedback_button.onClick = findActionOrNew(feedback_button.onClick, [\n      generateSetNodeKVPairAction(next_uid, \"invisible\", false),\n      generateSetNodeKVPairAction(next_uid, \"collapsed\", false),\n      generateSetNodeKVPairAction(card.uid, \"invisible\", true),\n      generateSetNodeKVPairAction(card.uid, \"collapsed\", true),\n    ]);\n\n    let rating_bar_1 = card.content.find((node) => node.uid === \"feedback_card_1_rating_bar\");\n    let rating_bar_2 = card.content.find((node) => node.uid === \"feedback_card_2_rating_bar\");\n\n    if (rating_bar_1 && rating_bar_2) {\n      feedback_button.inactive = 2\n      rating_bar_2.inactive = 2\n\n      rating_bar_1.onClick = findActionOrNew(rating_bar_1.onClick, [\n        generateSetNodeKVPairAction(rating_bar_2.uid, \"inactive\", 1),\n      ]);\n\n      rating_bar_2.onClick = findActionOrNew(rating_bar_2.onClick, [\n        generateSetNodeKVPairAction(feedback_button.uid, \"inactive\", 1),\n      ]);\n    }\n  });\n\n  if (!finish_case_button) {\n    finish_case_button = finishCaseButton();\n  }\n  finish_case_card.content.push(finish_case_button);\n  const old_finish_case_button_actions = finish_case_button[\"onClick\"];\n\n  finish_case_button.onClick = findActionOrNew(finish_case_button.onClick,\n    generateSetNodeKVPairAction(finish_case_button.uid, \"invisible\", true),\n  );\n\n  if (!finish_case_text) {\n    finish_case_text = finishCaseText();\n  }\n  finish_case_text.classes = uniq((finish_case_text.classes || []).concat([\"finish_case_text\"]));\n  finish_case_card.content.push(finish_case_text);\n\n  finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n    generateSetNodeKVPairAction(finish_case_text.uid, \"invisible\", false),\n  ));\n\n  if (!case_summary_button) {\n    case_summary_button = caseSummaryButton(documentId);\n  }\n  finish_case_card.content.push(case_summary_button);\n\n  finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n    generateSetNodeKVPairAction(case_summary_button.uid, \"invisible\", false),\n  ));\n\n  release_notes_cards.forEach((card) => {\n    if (card[\"content\"].length > 0) {\n      finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n        generateSetNodeKVPairAction(card.uid, \"invisible\", false),\n      ));\n    }\n  });\n\n  learning_objectives_cards.forEach((card) => {\n    finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n      generateSetNodeKVPairAction(card.uid, \"invisible\", false),\n    ));\n  });\n\n  if (saq_cards.length > 0) {\n    if (!finish_case_saq_text) {\n      finish_case_saq_text = finishCaseSAQText();\n    }\n    finish_case_saq_text.classes = uniq((finish_case_saq_text.classes || []).concat([\"finish_case_saq_text\"]));\n    finish_case_card[\"content\"] << finish_case_saq_text;\n\n    finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n      generateSetNodeKVPairAction(finish_case_saq_text.uid, \"invisible\", false),\n    ));\n\n    saq_cards.forEach((saq_card) => {\n      finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n        generateSetNodeKVPairAction(saq_card.uid, \"invisible\", false),\n      ));\n    });\n  }\n\n  finish_case_button.onClick = finish_case_button.onClick.concat(findActionOrNew(old_finish_case_button_actions,\n    generateSetNodeKVPairAction(end_of_case_text.uid, \"invisible\", false),\n  ));\n\n  saq_cards.forEach((saq_card) => {\n    const question_sections = saq_card.content.filter((node) => node.type === \"section\" && node.classes && node.classes.includes(\"question\"));\n    question_sections.forEach((question_section) => {\n      addSubmitButtonActionsToQuestionSection(question_section);\n    });\n  });\n\n  cards = regular_cards.concat(\n    feedback_cards,\n    [finish_case_card],\n    release_notes_cards,\n    learning_objectives_cards,\n    saq_cards,\n    case_synopsis_cards,\n    references_cards,\n  );\n\n  cards.forEach((card) => {\n    card.invisible = true;\n    card.collapsible = true;\n    card.collapsed = true;\n    card.nested = true;\n  });\n\n  regular_cards[0].collapsed = false;\n  regular_cards[0].invisible = false;\n\n  root_section.content = root_section.content.filter((node) => node.type !== \"section\");\n  root_section.content = root_section.content.concat(cards);\n\n  root_section.content = root_section.content.filter((node) => node.uid !== \"end_of_case_text\");\n  root_section.content = root_section.content.concat([end_of_case_text]);\n\n  return root_section;\n}\n\nfunction partitionByClass(nodes: DocBlockNode<InlineHtmlNode>[], partitionClass: string) {\n  return partition(nodes, (node) => node.classes && node.classes.includes(partitionClass));\n}\n\nfunction endOfCaseText(title: string) {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"paragraph\",\n    uid: \"end_of_case_text\",\n    content: `Thank you for completing ${DocConvertPlainText.fromAnyType(title)}.`,\n    invisible: true,\n  });\n}\n\nfunction finishCaseCard() {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"section\",\n    uid: \"finish_case_card\",\n    classes: [\"card\", \"finish_case_card\"],\n    title: \"Case Summary Download\",\n    content: [],\n    level: 1,\n  });\n}\n\nfunction feedbackCard() {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"section\",\n    uid: `feedback_card_1`,\n    classes: [\"card\", \"feedback_card\"],\n    title: `Feedback`,\n    content: [\n      {\n        type: \"paragraph\",\n        uid: `feedback_paragraph_1`,\n        content: \"This case was a valuable use of my time.\",\n      },\n      {\n        type: \"ratingBar\",\n        uid: `feedback_card_1_rating_bar`,\n        maxValue: 5,\n      },\n      {\n        type: \"paragraph\",\n        uid: `feedback_paragraph_2`,\n        content: \"I will apply what I learned to patient care.\",\n      },\n      {\n        type: \"ratingBar\",\n        uid: `feedback_card_2_rating_bar`,\n        maxValue: 5,\n      },\n      {\n        type: \"section\",\n        uid: `feedback_card_1_text_input_section`,\n        nested: true,\n        level: 2,\n        title: \"Please note any comments, suggestions, or questions related to the case (optional):\",\n        content: [\n          {\n            type: \"textInput\",\n            uid: `feedback_card_1_text_input`,\n            boxLines: 5,\n            characterLimit: 1000,\n          },\n        ],\n      },\n      {\n        type: \"button\",\n        uid: `feedback_card_1_button`,\n        classes: [\"feedback_button\"],\n        title: \"Submit & Finish Case\",\n      },\n    ],\n    level: 1,\n  });\n}\n\nfunction releaseNotesCards() {\n  return [\n    convertAllInlineNodesToRangeJSON({\n      type: \"section\",\n      uid: \"release_notes_card\",\n      classes: [\"card\", \"release_notes_card\"],\n      title: \"Release Notes\",\n      content: [],\n      level: 1,\n    }),\n  ];\n}\n\nfunction learningObjectivesCards() {\n  return [\n    convertAllInlineNodesToRangeJSON({\n      type: \"section\",\n      uid: \"learning_objectives_card\",\n      classes: [\"card\", \"learning_objectives_card\"],\n      title: \"Learning Objectives\",\n      content: [],\n      level: 1,\n    }),\n  ];\n}\n\nfunction caseSynopsisCards() {\n  return [\n    convertAllInlineNodesToRangeJSON({\n      type: \"section\",\n      uid: \"case_synopsis_card\",\n      classes: [\"card\", \"case_synopsis_card\"],\n      title: \"Case Synopsis\",\n      content: [],\n      level: 1,\n    }),\n  ];\n}\n\nfunction feedbackIntroductionText() {\n  return convertAllInlineNodesToRangeJSON({\n    uid: \"feedback_introduction_text\",\n    type: \"paragraph\",\n    classes: [\n      \"feedback_introduction_text\",\n    ],\n    content: \"This is the final page of the case. We value your perspective on the learning experience. After completing three required feedback ratings you can finish the case and access the case summary.\",\n  });\n}\n\nfunction feedbackSubmitButton(uid: string) {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"button\",\n    uid: uid,\n    title: \"Submit\",\n    classes: [\"feedback_button\"],\n  });\n}\n\nfunction finishCaseButton() {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"button\",\n    uid: \"finish_case_button\",\n    title: \"Finish Case\",\n    classes: [\"finish_case_button\"],\n  });\n}\n\nfunction finishCaseText() {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"paragraph\",\n    uid: \"finish_case_text\",\n    classes: [\"finish_case_text\"],\n    content: \"Well done! You have completed the case. Click to download the case summary.\",\n    invisible: true,\n  });\n}\n\nfunction caseSummaryButton(document_id: number) {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"button\",\n    uid: \"case_summary_button\",\n    title: \"Download Case Summary\",\n    classes: [\"case_summary_button\"],\n    invisible: true,\n    onClick: [\n      {\n        type: \"action\",\n        action: \"openExternalLink\",\n        arguments: {\n          url: `https://medu2.meduapp.com/documents/${document_id}/case_summary.pdf`,\n          key: \"invisible\",\n          value: true,\n        },\n        uid: generateUUID(),\n      },\n    ],\n  });\n}\n\nfunction finishCaseSAQText() {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"paragraph\",\n    uid: \"finish_case_saq_text\",\n    classes: [\"finish_case_saq_text\"],\n    content: \"You may now continue to the optional self-assessment questions for you to assess what you have learned in this case.\",\n    invisible: true,\n  });\n}\n\nfunction addSubmitButtonActionsToQuestionSection(question_section: DocSectionType<InlineHtmlNode>) {\n  const submit_button = question_section.content.find((node) => node.type === \"button\" && node.title.text === \"Submit\");\n\n  if (submit_button) {\n    const old_submit_button_actions = submit_button.onClick;\n    submit_button.onClick = [];\n\n    const question = question_section.content.find((node) => [\"categoryMatcher\", \"multipleChoice\", \"textInput\", \"cdqQuestion\"].includes(node.type));\n    if (question) {\n      submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_button_actions, [\n        generateSetNodeKVPairAction(question.uid, \"graded\", true),\n        generateSetNodeKVPairAction(question.uid, \"inactive\", 2),\n      ]));\n    }\n\n    const answer_comment = question_section.content.find((node) => node.type === \"section\" && node.classes && node.classes.includes(\"answer_comment\"));\n    if (answer_comment) {\n      submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_button_actions, generateSetNodeKVPairAction(answer_comment.uid, \"invisible\", false)));\n      answer_comment.invisible = true;\n    }\n\n    submit_button.onClick = submit_button.onClick.concat(findActionOrNew(old_submit_button_actions, generateSetNodeKVPairAction(submit_button.uid, \"inactive\", 2)));\n  }\n}\n\nfunction findActionOrNew(action_array: Array<DocAction>, new_actions: DocAction | Array<DocAction>) {\n  action_array = action_array || [];\n  if (!Array.isArray(new_actions)) {\n    new_actions = [new_actions];\n  }\n\n  return new_actions.map((new_action) => action_array.find((old_action) => (old_action.action === new_action.action) && ((\"arguments\" in old_action && old_action.arguments) === (\"arguments\" in new_action && new_action.arguments))) || new_action);\n}\n\nfunction generateAction(action: ActionName, actionArguments) {\n  return {\n    type: \"action\",\n    action: action,\n    arguments: actionArguments,\n    uid: generateUUID(),\n  };\n}\n\nfunction generateSetNodeKVPairAction(uid: string, key: string, value) {\n  return generateAction(\"setNodeKVPair\", {\n    uid: uid,\n    key: key,\n    value: value,\n  }) as DocActionSetNodeKVPair;\n}\n\nfunction continueButton(uid: string) {\n  return convertAllInlineNodesToRangeJSON({\n    type: \"button\",\n    uid: uid,\n    title: \"Continue\",\n    classes: [\"continue_button\"],\n  });\n}\n","import { cloneDeep } from \"lodash\";\n\nimport memoize from \"memoize-weak\";\n\nimport { reflow as reflowSignatureCase } from \"./Kind/SignatureCase\";\n\nexport const weakMemoizedReflow = memoize(reflow);\nexport function reflow(json, documentKind: DocumentKind, documentId: number) {\n  const clonedJson = cloneDeep(json);\n\n  switch (documentKind) {\n    case \"signature_case\":\n    case \"signature_case_cme\":\n      return reflowSignatureCase(clonedJson, documentId);\n    default:\n      return clonedJson;\n  }\n}\n","export function undo<UndoRedoBody>(undoRedoState: UndoRedoState<UndoRedoBody>, currentData: UndoRedoBody): [UndoRedoBody, UndoRedoState<UndoRedoBody>] {\n  undoRedoState = undoRedoState || resetState();\n\n  if (undoRedoState.undoStack.length !== 0) {\n    let newRedoStack = undoRedoState.redoStack;\n    const newData = undoRedoState.undoStack[0];\n    const newUndoStack = undoRedoState.undoStack.slice(1);\n\n    if (currentData) {\n      newRedoStack = [currentData].concat(newRedoStack as NonNullable<UndoRedoBody>[]); // TODO: Remove as\n    }\n\n    newRedoStack = newRedoStack.slice(0, 50);\n\n    return [\n      newData,\n      {\n        redoStack: newRedoStack,\n        undoStack: newUndoStack,\n        undoCompressCount: 0,\n      },\n    ];\n  } else {\n    alert(\"No undo action\");\n    return [currentData, undoRedoState];\n  }\n}\n\nexport function redo<UndoRedoBody>(undoRedoState: UndoRedoState<UndoRedoBody>, currentData: UndoRedoBody): [UndoRedoBody, UndoRedoState<UndoRedoBody>] {\n  undoRedoState = undoRedoState || resetState();\n\n  if (undoRedoState.redoStack.length !== 0) {\n    const newRedoStack = undoRedoState.redoStack.slice(1);\n    const newData = undoRedoState.redoStack[0];\n    let newUndoStack = undoRedoState.undoStack;\n\n    if (currentData) {\n      newUndoStack = [currentData].concat(newUndoStack as NonNullable<UndoRedoBody>[]); //TODO: Remove as\n    }\n\n    newUndoStack = newUndoStack.slice(0, 50);\n\n    return [\n      newData,\n      {\n        redoStack: newRedoStack,\n        undoStack: newUndoStack,\n        undoCompressCount: 0,\n      },\n    ];\n  } else {\n    alert(\"No redo action\");\n    return [currentData, undoRedoState];\n  }\n}\n\nconst UNDO_REDO_DROP_LAST_STEP_SIZE = 10;\nexport function addToUndoStack<UndoRedoBody>(undoRedoState: UndoRedoState<UndoRedoBody>, currentData: UndoRedoBody, shouldMaybeDropLast: boolean) {\n  undoRedoState = undoRedoState || resetState();\n\n  if (shouldMaybeDropLast && undoRedoState.undoCompressCount < UNDO_REDO_DROP_LAST_STEP_SIZE) {\n    return {\n      ...undoRedoState,\n      redoStack: [],\n      undoCompressCount: undoRedoState.undoCompressCount + 1,\n    };\n  } else {\n    return {\n      redoStack: [],\n      undoStack: [currentData].concat(undoRedoState.undoStack).slice(0, 25),\n      undoCompressCount: 0,\n    };\n  }\n}\n\nexport function resetState() {\n  return {\n    redoStack: [],\n    undoStack: [],\n    undoCompressCount: 0,\n  };\n}\n\nexport function canUndo(undoRedoState: UndoRedoState<unknown>) {\n  return (undoRedoState?.undoStack?.length || 0) > 0;\n}\n\nexport function canRedo(undoRedoState: UndoRedoState<unknown>) {\n  return (undoRedoState?.redoStack?.length || 0) > 0;\n}\n","import * as R from \"ramda\";\n\nimport { batch } from \"react-redux\";\n\nimport {\n  newChangeTextAndNodesChange\n} from \"../changes\";\n\nimport {\n  findNodePathByUid,\n  findNodeAtPath,\n  findNodeParentByUid,\n  findNodeSiblingBeforeByPath,\n} from \"../Functions/base\";\n\nimport {\n  rangesSortByEnd,\n  isInOrEndRange,\n} from \"../Functions/Range\";\n\nimport * as selection from \"../selection\";\n\nfunction backIndexUntillNotInDeletionRange(node: DocBlockNode<InlineRangeNode>, index: number) {\n  if (node.type === \"paragraph\") {\n    const deleteRanges = node.content.inlineChangeHighlights.filter((value) => value.type === \"DELETE_CONTENT\").map((highlight) => highlight.range);\n    const irrelevantRanges = node.content.inlineIrrlevantRanges.map((irrelevantRagne) => irrelevantRagne.range);\n    const sortedRanges = rangesSortByEnd(deleteRanges.concat(irrelevantRanges)).reverse();\n\n    return sortedRanges.reduce((tempIndex, range) => isInOrEndRange(range, tempIndex) ? range.start : tempIndex, index);\n  } else {\n    return index;\n  }\n}\n\nexport default function deleteAtSelection({\n  data,\n  variantDataById,\n  currentMenu,\n  addChanges,\n  setCurrentDocSelection,\n  nodeDefinitions,\n}: EditActionContext) {\n  const currentDocSelection = selection.getDocSelection();\n\n  if (!currentDocSelection || currentMenu) { return false; }\n\n  const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n  const {\n    uid: startUID,\n    contentKey: startKey,\n    index: startIndex,\n  } = currentDocSelection.start;\n\n  let deletionSelection = currentDocSelection;\n  let newSelection = selection.collapseDocSelectionToStart(currentDocSelection);\n\n  if (selection.isCollapsed(currentDocSelection)) {\n    const startNodePath = findNodePathByUid(dataToUse, startUID);\n    const startNodeIndex: any = R.last(startNodePath); // TODO: Remove any\n    const startNode = findNodeAtPath(dataToUse, startNodePath);\n\n    const adjustedIndex = backIndexUntillNotInDeletionRange(startNode, deletionSelection.start.index)\n    deletionSelection = selection.newCollapsedDocSelection(deletionSelection.start.uid, deletionSelection.start.contentKey, adjustedIndex)\n    newSelection = selection.collapseDocSelectionToStart(deletionSelection);\n\n    deletionSelection = selection.shiftDocSelectionStartBy(deletionSelection, -1);\n\n    if (startNode.type === \"paragraph\") {\n      if (deletionSelection.start.index < 0) {\n        const parentNode = findNodeParentByUid(dataToUse, startUID);\n        const previousSibling = findNodeSiblingBeforeByPath(dataToUse, startNodePath);\n\n        if (startNodeIndex === 0 && parentNode.type === \"listItem\") {\n          if (parentNode.blockChangeHighlight?.type !== \"DELETE_CONTENT\") {\n            // DELETE LIST ITEM INSTEAD OF THE PARAGRAPH\n            deletionSelection = selection.shiftDocSelectionBy(deletionSelection, -1);\n          }\n        } else if (previousSibling?.type === \"paragraph\") {\n          const effectiveLength = previousSibling.content.text.replace(/\\#$/, '').length\n          newSelection = selection.newCollapsedDocSelection(previousSibling.uid, \"content\", effectiveLength);\n        } else {\n          // COULD MOVE SELECITON TO LINE BEFORE?\n          return true;\n        }\n      } else {\n        newSelection = selection.shiftDocSelectionBy(newSelection, -1)\n      }\n    } else {\n      if (startIndex === 0) {\n        // COULD MOVE SELECTION TO LINE BEFORE?\n        return true;\n      } else {\n        newSelection = selection.shiftDocSelectionBy(newSelection, -1)\n      }\n    }\n  }\n\n  batch(() => {\n    addChanges([newChangeTextAndNodesChange(deletionSelection, null)], currentDocSelection.variantId); // TODO: Convert null to styledText\n    setCurrentDocSelection(newSelection);\n  });\n\n  return true;\n}\n","import * as R from \"ramda\";\n\nimport * as rangeInlineJSON from \"../Functions/RangeInlineJSON\";\n\nimport {\n  findNodePathByUid,\n  findNodeSiblingAfterByPath,\n  findNodeSiblingBeforeByPath,\n  findNodeParentByUid,\n  findNodeByUid,\n} from \"../Functions/base\";\n\nexport function isDeletableNode(node: DocBlockNode<unknown>, contentKey: ContentKey) {\n  switch (node.type) {\n    case \"paragraph\":\n    case \"listItem\":\n    case \"multipleChoiceAnswer\":\n      return true;\n    default:\n      return !contentKey;\n  }\n}\n\nexport function blockNodeFlowContentKey(node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"paragraph\":\n    case \"listItem\":\n    case \"multipleChoiceAnswer\":\n    case \"matchItem\":\n      return \"content\";\n    default:\n      return null;\n  }\n}\n\nexport function afterReturnNodeFor(nodeDefinitions: NodeDefinitions, node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"paragraph\":\n    case \"listItem\":\n    case \"multipleChoiceAnswer\":\n    case \"matchItem\":\n      const newNode = nodeDefinitions[node.type].generate(nodeDefinitions, {});\n\n      return newNode;\n    default:\n      return null;\n  }\n}\n\nexport function isFlowNode(node: DocBlockNode<unknown>) {\n  return !!blockNodeFlowContentKey(node);\n}\n\nexport function addTextToBlockNodeFlow(node, text: string) {\n  const nodeFlowKey = blockNodeFlowContentKey(node);\n  if (nodeFlowKey) {\n    node = R.assoc(nodeFlowKey, rangeInlineJSON.rangeInlineJSONWithText(text), node);\n  }\n\n  return node;\n}\n\nexport function genrateNodesForAfterReturnNodeWithTextLines(nodeDefinitions: NodeDefinitions, node: DocBlockNode<unknown>, lines: string[]) {\n  return lines.map((line) => {\n    const newNode = afterReturnNodeFor(nodeDefinitions, node);\n    return addTextToBlockNodeFlow(newNode, line);\n  });\n}\n\nexport function findPreviousFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n  const nodePath = findNodePathByUid(data, uid);\n  const beforeNode = findNodeSiblingBeforeByPath(data, nodePath);\n\n  if (beforeNode) {\n    const lastDecendentFlowNodeByTest = findLastDecendentFlowNodeByTest(data, beforeNode.uid, tester);\n\n    if (lastDecendentFlowNodeByTest) {\n      return lastDecendentFlowNodeByTest\n    } else {\n      return findPreviousFlowNodeByTest(data, beforeNode.uid, tester);\n    }\n  }\n\n  const parentNode = findNodeParentByUid(data, uid);\n\n  if (!isFlowContainer(parentNode)) {\n    return findPreviousFlowNodeByTest(data, parentNode.uid, tester);\n  } else if (tester(parentNode)) {\n    return parentNode;\n  } else {\n    return undefined;\n  }\n}\n\nexport function findNextFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n  const nodePath = findNodePathByUid(data, uid);\n  const afterNode = findNodeSiblingAfterByPath(data, nodePath);\n\n  if (afterNode) {\n    const firstDecendentFlowNodeByTest = findFirstDecendentFlowNodeByTest(data, afterNode.uid, tester);\n\n    if (firstDecendentFlowNodeByTest) {\n      return firstDecendentFlowNodeByTest\n    } else {\n      return findNextFlowNodeByTest(data, afterNode.uid, tester);\n    }\n  }\n\n  const parentNode = findNodeParentByUid(data, uid);\n\n  if (!isFlowContainer(parentNode)) {\n    return findNextFlowNodeByTest(data, parentNode.uid, tester);\n  } else if (tester(parentNode)) {\n    return parentNode;\n  } else {\n    return undefined;\n  }\n}\n\nexport function findLastDecendentFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n  const node = findNodeByUid(data, uid);\n\n  if (tester(node)) {\n    return node;\n  }\n\n  const blockKeys = flowBlockKeys(node);\n  return blockKeys.reduceRight((flowNodeA, blockKey) => {\n    return flowNodeA || node[blockKey].reduceRight((flowNodeB, childNode) => flowNodeB || findLastDecendentFlowNodeByTest(data, childNode.uid, tester))\n  }, undefined)\n}\n\nexport function findFirstDecendentFlowNodeByTest<T>(data: DocBlockNode<T>, uid: string, tester: (node: DocBlockNode<T>) => boolean) {\n  const node = findNodeByUid(data, uid);\n\n  if (tester(node)) {\n    return node;\n  }\n\n  const blockKeys = flowBlockKeys(node);\n  return blockKeys.reduce((flowNodeA, blockKey) => {\n    return flowNodeA || node[blockKey].reduce((flowNodeB, childNode) => flowNodeB || findLastDecendentFlowNodeByTest(data, childNode.uid, tester))\n  }, undefined)\n}\n\nexport function findPreviousInlineFlowNode<T>(data: DocBlockNode<T>, uid: string) {\n  return findPreviousFlowNodeByTest(data, uid, node => isFlowInline(node));\n}\n\nexport function findNextInlineFlowNode<T>(data: DocBlockNode<T>, uid: string) {\n  return findNextFlowNodeByTest(data, uid, node => isFlowInline(node));\n}\n\nexport function blockContentKeys(node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"cdqQuestion\":\n    case \"listItem\":\n    case \"multipleChoice\":\n    case \"numberedList\":\n    case \"regularList\":\n    case \"section\":\n    case \"tableCell\":\n      return [\"content\"];\n    case \"categoryMatcher\":\n      return [\"contentItems\"];\n      // return [\"contentItems\", \"contentCategories\"];\n    case \"imageGallery\":\n      return [\"images\"];\n    case \"table\":\n      return [\"rows\"];\n    case \"tableRow\":\n      return [\"cells\"];\n    case \"audio\":\n    case \"button\":\n    case \"cdqFeature\":\n    case \"cdqQuestionAnswer\":\n    case \"checkbox\":\n    case \"horizontalRule\":\n    case \"image\":\n    case \"matchItem\":\n    case \"multipleChoiceAnswer\":\n    case \"paragraph\":\n    case \"ratingBar\":\n    case \"textInput\":\n    case \"video\":\n    default:\n      return [];\n  }\n}\n\nexport function inlineContentKeys(node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"audio\":\n    case \"button\":\n    case \"image\":\n    case \"section\":\n    case \"video\":\n      return [\"title\"];\n    case \"cdqFeature\":\n    case \"cdqQuestionAnswer\":\n    case \"checkbox\":\n    case \"matchItem\":\n    case \"multipleChoiceAnswer\":\n    case \"paragraph\":\n      return [\"content\"];\n    case \"categoryMatcher\":\n    case \"cdqQuestion\":\n    case \"horizontalRule\":\n    case \"imageGallery\":\n    case \"listItem\":\n    case \"multipleChoice\":\n    case \"numberedList\":\n    case \"ratingBar\":\n    case \"regularList\":\n    case \"table\":\n    case \"tableCell\":\n    case \"tableRow\":\n    case \"textInput\":\n    default:\n      return [];\n  }\n}\n\nexport function flowContainerContentKeys(node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"section\":\n    case \"tableCell\":\n      return [\"content\"];\n    case \"categoryMatcher\":\n    case \"cdqQuestion\":\n    case \"multipleChoice\":\n      // COULD BE\n    case \"audio\":\n    case \"button\":\n    case \"cdqFeature\":\n    case \"cdqQuestionAnswer\":\n    case \"checkbox\":\n    case \"horizontalRule\":\n    case \"image\":\n    case \"imageGallery\":\n    case \"listItem\":\n    case \"matchItem\":\n    case \"multipleChoiceAnswer\":\n    case \"numberedList\":\n    case \"paragraph\":\n    case \"ratingBar\":\n    case \"regularList\":\n    case \"table\":\n    case \"tableRow\":\n    case \"textInput\":\n    case \"video\":\n    default:\n      return [];\n  }\n}\n\nexport function flowBlockKeys(node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"listItem\":\n    case \"numberedList\":\n    case \"regularList\":\n    case \"section\":\n    case \"tableCell\":\n      return [\"content\"];\n    case \"multipleChoice\":\n    case \"cdqQuestion\":\n    case \"categoryMatcher\":\n      // Should these be flow or not\n    case \"audio\":\n    case \"button\":\n    case \"cdqFeature\":\n    case \"cdqQuestionAnswer\":\n    case \"checkbox\":\n    case \"horizontalRule\":\n    case \"image\":\n    case \"imageGallery\":\n    case \"matchItem\":\n    case \"multipleChoiceAnswer\":\n    case \"paragraph\":\n    case \"ratingBar\":\n    case \"table\":\n    case \"tableRow\":\n    case \"textInput\":\n    case \"video\":\n    default:\n      return [];\n  }\n}\n\nexport function flowInlineKeys(node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"checkbox\":\n    case \"paragraph\":\n    case \"cdqFeature\":\n    case \"cdqQuestionAnswer\":\n    case \"matchItem\":\n    case \"multipleChoiceAnswer\":\n      return [\"content\"];\n    case \"audio\":\n    case \"button\":\n    case \"categoryMatcher\":\n    case \"cdqQuestion\":\n    case \"horizontalRule\":\n    case \"image\":\n    case \"imageGallery\":\n    case \"listItem\":\n    case \"multipleChoice\":\n    case \"numberedList\":\n    case \"ratingBar\":\n    case \"regularList\":\n    case \"section\":\n    case \"table\":\n    case \"tableCell\":\n    case \"tableRow\":\n    case \"textInput\":\n    case \"video\":\n    default:\n      return [];\n  }\n}\n\nexport function isolatedInlineKeys(node: DocBlockNode<unknown>) {\n  switch (node.type) {\n    case \"section\":\n    case \"image\":\n    case \"video\":\n    case \"audio\":\n    case \"button\":\n      return [\"title\"];\n    case \"cdqFeature\":\n    case \"cdqQuestionAnswer\":\n    case \"matchItem\":\n    case \"multipleChoiceAnswer\":\n    case \"categoryMatcher\":\n    case \"cdqQuestion\":\n    case \"checkbox\":\n    case \"horizontalRule\":\n    case \"imageGallery\":\n    case \"listItem\":\n    case \"multipleChoice\":\n    case \"numberedList\":\n    case \"paragraph\":\n    case \"ratingBar\":\n    case \"regularList\":\n    case \"table\":\n    case \"tableCell\":\n    case \"tableRow\":\n    case \"textInput\":\n    default:\n      return [];\n  }\n}\n\nexport function isFlowContainer(node: DocBlockNode<unknown>) {\n  return flowContainerContentKeys(node).length > 0;\n}\n\nexport function isFlowBlock(node: DocBlockNode<unknown>) {\n  return flowBlockKeys(node).length > 0;\n}\n\nexport function isFlowInline(node: DocBlockNode<unknown>) {\n  return flowInlineKeys(node).length > 0;\n}\n\nexport function isIsolatedInline(node: DocBlockNode<unknown>) {\n  return isolatedInlineKeys(node).length > 0;\n}\n","import { batch } from \"react-redux\";\n\nimport {\n  newChangeTextAndNodesChange\n} from \"../changes\";\n\nimport * as selection from \"../selection\";\n\nimport * as R from \"ramda\";\n\nimport {\n  findNodePathByUid,\n  findNodeAtPath,\n} from \"../Functions/base\";\n\nimport {\n  genrateNodesForAfterReturnNodeWithTextLines,\n} from \"./shared\";\n\nexport default function pasteAtSelection(dataTransfer, {\n  data,\n  variantDataById,\n  currentMenu,\n  addChanges,\n  setCurrentDocSelection,\n  nodeDefinitions,\n}: EditActionContext) {\n  const currentDocSelection = selection.getDocSelection();\n\n  if (!currentDocSelection || currentMenu) { return false; }\n\n  const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n  const {\n    uid: startUID,\n    contentKey: startKey,\n    index: startIndex,\n  } = currentDocSelection.start;\n\n  let newStyledText = {\n    text: \"\",\n    styleRanges: [],\n  }\n  let newNodes = [];\n\n  let newSelectionOffset = 0;\n  const dataTypes = dataTransfer.types;\n  if (dataTypes.includes(\"text/plain\")) {\n    const pasteText = dataTransfer.getData(\"text/plain\");\n\n    const pasteTextLines = clipboardPlainTextToTextLines(pasteText);\n\n    const pasteStartText = pasteTextLines[0];\n    newStyledText = {\n      text: pasteStartText,\n      styleRanges: []\n    }\n\n    newSelectionOffset = pasteStartText.length;\n\n    let pasteRestLines = R.tail(pasteTextLines);\n\n    if (pasteRestLines.length > 0) {\n      const startNodePath = findNodePathByUid(dataToUse, startUID);\n      const startNode = findNodeAtPath(dataToUse, startNodePath);\n\n      newNodes = genrateNodesForAfterReturnNodeWithTextLines(nodeDefinitions, startNode, pasteRestLines);\n    }\n  } else {\n    return false\n  }\n\n  if (newStyledText.text.length === 0 && newNodes.length === 0) { return false; }\n\n  if (!selection.isInlineBoundry(currentDocSelection.start)) { return true; }\n\n  batch(() => {\n    addChanges([newChangeTextAndNodesChange(currentDocSelection, newStyledText, newNodes)], currentDocSelection.variantId);\n    setCurrentDocSelection(selection.shiftDocSelectionBy(selection.collapseDocSelectionToStart(currentDocSelection), newSelectionOffset));\n  });\n\n  return true;\n}\n\nfunction clipboardHtmlToTextLines(htmlDataString: string) {\n  const parser = new DOMParser();\n  const htmlDoc = parser.parseFromString(htmlDataString, 'text/html');\n}\n\nfunction clipboardPlainTextToTextLines(plainText: string) {\n  let lines = plainText.split(/\\r?\\n/);\n  lines = lines.map((line) => R.trim(line.replace(/[\\n\\r\\s]+/gm, \" \")));\n  return lines.filter((line) => line !== \"\" && line != \" \");\n}\n","import { batch } from \"react-redux\";\n\nimport {\n  newAddNodeChange,\n  newChangeTextAndNodesChange,\n} from \"../changes\";\n\nimport { getSubType } from \"../Define/base\";\n\nimport * as selection from \"../selection\";\n\nimport * as R from \"ramda\";\n\nimport {\n  findNodePathByUid,\n  findNodeAtPath,\n  nodeInlineNotFlowContentKeys,\n  nodeParentPathFromPath,\n} from \"../Functions/base\";\n\nimport {\n  blockNodeFlowContentKey,\n  flowInlineKeys,\n  flowBlockKeys,\n} from \"./shared\";\n\nimport { convertAllInlineNodesToRangeJSON } from '../Convert/RangeInlineJSON'\n\nimport * as rangeInlineJSON from \"../Functions/RangeInlineJSON\";\n\nexport default function returnAtSelection({\n  data,\n  variantDataById,\n  currentMenu,\n  addChanges,\n  setCurrentDocSelection,\n  nodeDefinitions,\n}: EditActionContext) {\n  let currentDocSelection = selection.getDocSelection();\n\n  if (!currentDocSelection || currentMenu) { return false; }\n\n  const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n  const {\n    uid: startUID,\n    contentKey: startKey,\n    index: startIndex,\n  } = currentDocSelection.start;\n\n  const startNodePath = findNodePathByUid(dataToUse, startUID);\n  const startNode = findNodeAtPath(dataToUse, startNodePath);\n\n  const startParentNodePath = nodeParentPathFromPath(dataToUse, startNodePath);\n  const startParentNode = findNodeAtPath(dataToUse, startParentNodePath);\n\n  const newNodes = [convertAllInlineNodesToRangeJSON(newNodeOnReturn(startNode, startParentNode, nodeDefinitions))]\n\n  const selectionNode = findFirstInlineFlowNode(R.last(newNodes));\n  const newSelection = selectionNode ? selection.newCollapsedDocSelection(selectionNode.uid, blockNodeFlowContentKey(selectionNode), 0) : undefined\n\n  if (nodeInlineNotFlowContentKeys(startNode).includes(startKey)) {\n    const newKey = R.nth(-2, startNodePath);\n    const oldIndex: number = R.nth(-1, startNodePath);\n    const newIndex = oldIndex + 1;\n\n    batch(() => {\n      addChanges([newAddNodeChange(R.last(newNodes), startParentNode.uid, newKey, newIndex)], currentDocSelection.variantId);\n      setCurrentDocSelection(newSelection);\n    });\n  } else {\n    // EXCEPTION TO ALLOW LIST ITEMS TO KEEP UID WHEN RETURN AT START\n    if (\n      selection.isCollapsed(currentDocSelection) &&\n      startIndex === 0 &&\n      startParentNode?.type === \"listItem\" &&\n      newNodes.length === 1 &&\n      newNodes[0]?.type === \"listItem\"\n    ) {\n      currentDocSelection = selection.shiftDocSelectionBy(currentDocSelection, -2)\n    }\n\n    batch(() => {\n      addChanges([newChangeTextAndNodesChange(currentDocSelection, undefined, newNodes)], currentDocSelection.variantId);\n      setCurrentDocSelection(newSelection);\n    });\n  }\n\n  return true;\n}\n\nfunction newNodeOnReturn(node: DocBlockNode<unknown>, parent, nodeDefinitions: NodeDefinitions) {\n  let newNodeType;\n  if (parent?.type === \"listItem\") {\n    newNodeType = \"listItem\"\n  } else if(node?.type === \"button\") {\n    newNodeType = \"paragraph\"\n  } else {\n    newNodeType = getSubType(node);\n  }\n\n  const newNode = nodeDefinitions[newNodeType].generate(nodeDefinitions, {});\n\n  if (newNode.type === \"listItem\") {\n    newNode.listUid = parent.listUid;\n    newNode.listIndentation = parent.listIndentation;\n  }\n\n  return newNode;\n}\n\nfunction findFirstInlineFlowNode(node: DocBlockNode<InlineNode>) {\n  const inlineKeys = flowInlineKeys(node);\n\n  if (inlineKeys.length > 0) {\n    return node;\n  }\n\n  const blockKeys = flowBlockKeys(node);\n\n  if (blockKeys.length > 0) {\n    const childNode = node[blockKeys[0]][0]\n\n    if (childNode) {\n      return findFirstInlineFlowNode(childNode)\n    }\n  }\n\n  return null\n}\n","import * as React from \"react\";\nimport { bindActionCreators, Dispatch } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { HotKeys } from \"react-hotkeys\";\nimport 'react-confirm-alert/src/react-confirm-alert.css'\nimport { Beforeunload } from 'react-beforeunload';\n\nimport { xor, mapKeys, upperFirst } from \"lodash\";\nimport * as R from \"ramda\";\nimport axios from \"axios\";\nimport memoize from \"memoize-weak\";\n\nimport * as Bowser from \"bowser\";\n\nimport ActiveUserObserver from \"../../helpers/Doc/Observers/activeUserObserver\";\nimport BeforeInputObserver from \"../../helpers/Doc/Observers/beforeInputObserver\";\nimport CopyObserver from \"../../helpers/Doc/Observers/copyObserver\";\nimport MouseClickObserver from \"../../helpers/Doc/Observers/mouseClickObserver\";\nimport OfflineObserver from \"../../helpers/Doc/Observers/offlineObserver\";\nimport SelectionObserver from \"../../helpers/Doc/Observers/selectionObserver\";\n\nimport generateUUID from \"../../helpers/generateUUID\";\nimport { full_url } from \"../../helpers/url\";\n\nimport { weakMemoizedReflow } from \"../../helpers/Doc/Reflow\";\n\nimport * as selection from \"../../helpers/Doc/selection\";\n\nimport { organizeMediaAssets } from \"../../helpers/media_manager\";\n\nimport {\n  weakMemoizedApplyAllChanges,\n  weakMemoizedSetBlockNodesContainsSelection,\n  weakMemoizedAttachCurrentMenuToNode,\n  changesDisplayModes,\n  newPublishChange,\n  newSetKeyValueChange,\n  clotheChange,\n  addChangeToDoc,\n  computeSpacedChangeSummaries,\n  findFlatFlowNodesWithFlowRange,\n  translateSelectionToFlowRange,\n  flatFlowToTreeFlow,\n  weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON,\n  stripExtraChangeDataFields,\n} from \"../../helpers/Doc/changes\";\n\nimport {\n  publishVersionId,\n  ongoingMaintenaceVersionId,\n  determineVersionType,\n  determineVariantTypeFromVersionType,\n  variantKeyFromVariantVersion,\n} from \"../../helpers/Doc/version_types\";\n\nimport * as undoRedo from \"../../helpers/Doc/undoRedoState\";\n\nimport {\n  findNodeLineageByUid,\n  findNodeByUid,\n  editNodeWithUIDKeyValue,\n  findNodePathByUid,\n  setAtPath,\n  findAtPath,\n  findNodes,\n  findNodesPaths,\n  adjustSelectionStartToIncludeListItemIfNeeded,\n} from \"../../helpers/Doc/Functions/base\";\n\nimport { postDocumentUserLog } from \"../../helpers/DocumentUserLog\";\n\nimport * as RangeInlineJSON from \"../../helpers/Doc/Functions/RangeInlineJSON\";\n\nimport {\n  nodeDefinitions,\n} from \"../../helpers/Doc/Define/base\";\n\nimport * as DocConvertHTML from \"../../helpers/Doc/Convert/HTML\";\n\nimport {generateDocumentActions} from \"../../reducers/documents\";\nimport {generateDocumentUserStateActions} from \"../../reducers/documentUserStates\";\nimport {\n  generateLearningObjectiveActions,\n  learningObjectiveFromStatePlus,\n} from \"../../reducers/learningObjectives\";\nimport {generateReusableObjectActions} from \"../../reducers/reusableObjects\";\nimport {\n  generateVariantActions,\n  variantFromStatePlus,\n} from \"../../reducers/variants\";\nimport {generateVersionActions} from \"../../reducers/versions\";\nimport {reasoningToolActionCreators} from \"../../reducers/ui/reasoningTool\";\n\nimport { addDocumentUserState } from \"../../helpers/Doc/documentUserState\";\n\nimport {\n  weakMemoizedGenerateCurrentDocument,\n  weakMemoizedGenerateCurrentUser,\n  weakMemoizedGenerateCurrentVersion,\n  weakMemoizedGenerateDisplayContext,\n  weakMemoizedGenerateEditingContext,\n  weakMemoizedGenerateEditingContextAllFalse,\n  weakMemoizedGenerateIntegrationInfo,\n} from \"../../helpers/Doc/context\";\n\nimport { scrollToElementWithUid } from \"../../helpers/Doc/scrollTo\";\n\nimport {\n  NEW_SUMMARY_OF_EDITS,\n  NEW_COMMENT_THREAD,\n  EDIT_COMMENT,\n  FIND_AND_REPLACE,\n  EDIT_LINK,\n  ADD_NODE,\n  TEXT_COLOR_PICKER,\n} from \"../../helpers/Doc/menu\"\n\nimport deleteAtSelection from \"../../helpers/Doc/EditActions/delete\";\nimport insertAtSelection from \"../../helpers/Doc/EditActions/insert\";\nimport pasteAtSelection from \"../../helpers/Doc/EditActions/paste\";\nimport returnAtSelection from \"../../helpers/Doc/EditActions/return\";\nimport shiftTabAtSelection from \"../../helpers/Doc/EditActions/shiftTab\";\nimport tabAtSelection from \"../../helpers/Doc/EditActions/tab\";\nimport toggleStyleAtSelection from \"../../helpers/Doc/EditActions/toggleStyle\";\n\nimport { displayModes } from \"../../helpers/Doc/displayMode\";\nimport { trackChangesEditModes } from \"../../helpers/Doc/trackChangesEditMode\";\n\nimport { POSSIBLE_RO_CLASSES } from \"../../helpers/RO/content_type\";\n\nimport NewEditDoc from \"./Component\";\n\nimport GenLoadingSpinner from \"../Gen/LoadingSpinner/component\";\n\nfunction replaceInObjectKeys(object, toReplace: string, replacement: string) {\n  return mapKeys(object, (val, key) => key.replace(toReplace, replacement).replace(upperFirst(toReplace), upperFirst(replacement)));\n}\n\nfunction computedGenerateDocumentActionCreators(docType?: DocType) { // TODO: Change to \"ReusableObject\" | \"Document\"\n  if (docType === \"ReusableObject\") {\n    return ((id) => replaceInObjectKeys(generateReusableObjectActions(id), \"reusableObject\", \"document\")) as typeof generateDocumentActions;\n  } else {\n    return generateDocumentActions;\n  }\n}\n\nfunction computedGenerateVersionActionCreators(docType?: DocType) { // TODO: Change to \"ReusableObject\" | \"Document\"\n  if (docType === \"ReusableObject\") {\n    return ((id) => replaceInObjectKeys(generateVariantActions(id), \"variant\", \"version\")) as typeof generateVersionActions;\n  } else {\n    return generateVersionActions;\n  }\n}\n\ninterface OwnProps {\n  currentUser: User;\n  documentId: number;\n  isAdmin: boolean;\n  permissions: AqPermissions;\n  versionId: number;\n\n  activeMemberId?: number;\n  activeMemberName?: string;\n  activeUserId?: number;\n  assessmentQuestion?: AssessmentQuestion;\n  assessmentQuestionEditingData?: AssessmentQuestionEditingData;\n  assessmentQuestionSignatureVersion?: Version;\n  assessmentQuestionSignatureVersionId?: number;\n  assessmentQuestionStatistics?: Array<AssessmentStatistic>;\n  assessmentStatus?: string;\n  cableApp?: {cable: ActionCable.Consumer};\n  cciStatusOptions?: Array<CciStatusOptions>;\n  checklistContents?: Array<ChecklistContent>;\n  currentAssignmentId?: number;\n  currentGroupRoleDefinition?: GroupRoleDefinition;\n  defaultChangesDisplayMode?: ChangesDisplayMode;\n  displayUid?: string;\n  docType?: DocType;\n  documentSetId?: number;\n  editors?: Array<EditorSpecialType>;\n  enableAiSummaryStatementFeedback?: boolean;\n  featureFlag?: FeatureFlag;\n  isEditor?: boolean;\n  isEmbeded?: boolean;\n  isNotGated?: boolean;\n  mappingData?: MappingContext;\n  nextVersionId?: number;\n  possiblePrerequisiteDocuments?: Array<Document>;\n  projectProductionAssociate?: string;\n  scrollable_uids?: Array<string>;\n  sessionId?: number;\n  styleGuideId?: number;\n  shouldShowEditor?: boolean;\n  usedAvailableForm?: boolean;\n  allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n}\n\nfunction findVariantPlaceholderNodePaths<T>(data: DocSectionType<T>) {\n  return findNodesPaths(data, (node) => node.type == \"variantPlaceholder\")\n}\n\nfunction generateChangeData(variant: Variant | Version) {\n  if (!variant.changeData || R.isEmpty(variant.changeData)) {\n    return weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON(variant.data);\n  } else {\n    return variant.changeData\n  }\n}\n\nfunction applyChangesToVariant(variant: Variant | Version, publishVariantId: number, changesDisplayMode: ChangesDisplayMode, useChangeData: boolean) {\n  if (variant?.data) {\n    if (useChangeData && variant.id !== publishVariantId) {\n      return weakMemoizedApplyAllChanges(generateChangeData(variant), changesDisplayMode);\n    } else {\n      return variant.data;\n    }\n  }\n}\n\nconst mapStateToProps = (state: ReducerState, ownProps: OwnProps) => {\n  const {\n    docType,\n    currentUser,\n    documentId,\n    versionId,\n    assessmentQuestionSignatureVersionId,\n  } = ownProps;\n\n  const generateUsableDocumentActions = computedGenerateDocumentActionCreators(docType);\n  const usableDocumentActionCreators = generateUsableDocumentActions(documentId);\n\n  const documentProps = {\n    document: usableDocumentActionCreators.documentSyncDataFromState(state),\n    documentSyncMeta: usableDocumentActionCreators.documentSyncMetaFromState(state),\n    documentExtraData: usableDocumentActionCreators.documentExtraDataFromState(state),\n  };\n\n  const selectedVersionId = documentProps.documentExtraData?.versionId || versionId;\n\n  const generateUsableVersionActions = computedGenerateVersionActionCreators(docType);\n  const usableVersionActionCreators = generateUsableVersionActions(selectedVersionId);\n\n  const versionProps = {\n    version: usableVersionActionCreators.versionMergedDataFromState(state),\n    versionSyncMeta: usableVersionActionCreators.versionSyncMetaFromState(state),\n    versionEditData: usableVersionActionCreators.versionEditDataFromState(state),\n    versionExtraData: usableVersionActionCreators.versionExtraDataFromState(state),\n  };\n\n  let changesDisplayMode: ChangesDisplayMode;\n  if (versionProps.version?.data) {\n    if (ownProps.shouldShowEditor || ownProps.defaultChangesDisplayMode) {\n      if (versionProps.version.id === documentProps?.document?.publishVersionId) {\n        changesDisplayMode = changesDisplayModes.ONLY_PUBLISHED;\n      } else {\n        changesDisplayMode = versionProps.versionExtraData?.changesDisplayMode || ownProps.defaultChangesDisplayMode || changesDisplayModes.HIGHLIGHT_SUGGESTIONS;\n      }\n    } else {\n      changesDisplayMode = null // TODO: Remove null\n    }\n  }\n\n  const useChangeData = ownProps.shouldShowEditor || !!ownProps.defaultChangesDisplayMode\n  let mergedData = applyChangesToVariant(versionProps.version, documentProps?.document?.publishVersionId, changesDisplayMode, useChangeData)\n\n  const variantPlaceholderPaths = mergedData ? findVariantPlaceholderNodePaths(mergedData) : []\n  const learningObjectivePlaceholderPaths = variantPlaceholderPaths.filter((vpPath) => findAtPath(mergedData, vpPath).variantableType === \"LearningObjective\").filter((path) => !path.includes(\"addDeleteChanges\"))\n  const learningObjectiveNodePathsById = Object.fromEntries(learningObjectivePlaceholderPaths.map((loPlaceholderPath) => [findAtPath(mergedData, loPlaceholderPath).variantableId, loPlaceholderPath]))\n  const learningObjectiveIds = Object.keys(learningObjectiveNodePathsById)\n  const localLearningObjectives: Array<ReducerItemWithMerged<LearningObjective, LearningObjectiveExtraData>> = learningObjectiveIds.map((learningObjectiveId) => learningObjectiveFromStatePlus(learningObjectiveId, state))\n  const learningObjectives = localLearningObjectives;\n\n  let localLearningObjectiveVariants: Array<ReducerItemWithMerged<Variant, VariantExtraData>> = []\n  let variants: Array<ReducerItemWithMerged<Variant, VariantExtraData>> = []\n  const variantMergedDataById: Record<number, MergedData> = {}\n  if (documentProps.document) {\n    const versionType = determineVersionType(documentProps.document as any, selectedVersionId); // TODO: Remove any\n    const variantType = determineVariantTypeFromVersionType(versionType);\n    const variantKey = variantKeyFromVariantVersion(variantType);\n\n    localLearningObjectiveVariants = localLearningObjectives\n      .filter((learningObjective) => learningObjective?.mergedData?.[variantKey])\n      .map((learningObjective) => variantFromStatePlus(learningObjective?.mergedData?.[variantKey], state))\n\n    localLearningObjectiveVariants.forEach((learningObjectiveVariant) => {\n      if (learningObjectiveVariant?.mergedData) {\n        const parentLearningObjective = localLearningObjectives.find((lo) => lo?.mergedData?.[variantKey] === learningObjectiveVariant.id)\n        const learningObjectiveNodePath = learningObjectiveNodePathsById[parentLearningObjective.id]\n        const appliedData = applyChangesToVariant(learningObjectiveVariant.mergedData, parentLearningObjective?.mergedData?.publishVariantId, changesDisplayMode, useChangeData)\n        const varaintPlaceholder = findAtPath(mergedData, learningObjectiveNodePath)\n\n        variantMergedDataById[learningObjectiveVariant.id] = appliedData\n\n        mergedData = setAtPath(mergedData, learningObjectiveNodePath, appliedData)\n        mergedData = setAtPath(mergedData, learningObjectiveNodePath.concat(['variantId']), learningObjectiveVariant.id)\n        mergedData = setAtPath(mergedData, learningObjectiveNodePath.concat(['variantUid']), varaintPlaceholder.uid)\n      }\n    })\n\n    variants = localLearningObjectiveVariants;\n  }\n\n  const unsavedChanges =  !!versionProps.versionEditData?.changeData || !!versionProps.versionEditData?.coverImage || variants.some((variant) => variant.editData?.changeData)\n\n  const dusId = docType === \"ReusableObject\" || !currentUser ? \"TEMP_ID\" : `${documentId}/${currentUser.id}` // TODO TEMP_ID\n  const documentUserStateActions = generateDocumentUserStateActions(dusId)\n  const currentUserProps = {\n    documentUserState: documentUserStateActions.documentUserStateMergedDataFromState(state),\n  };\n\n  const extraProps = docType !== \"ReusableObject\" ? { assessmentQuestionSignatureVersion: generateVersionActions(assessmentQuestionSignatureVersionId).versionSyncDataFromState(state) } : {}\n\n  return {\n    changesDisplayMode,\n    mergedData,\n    variantMergedDataById,\n    variants,\n    learningObjectives,\n    selectedVersionId,\n    unsavedChanges,\n    ...documentProps,\n    ...versionProps,\n    ...currentUserProps,\n    localLearningObjectives,\n    localLearningObjectiveVariants,\n    reasoningToolUi: state.ui.reasoningTool,\n    getUploadCountByMediaType: (type:  MediaType) => versionProps.versionExtraData[`${type}UploadCount`] || 0,\n    ...extraProps,\n  };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch, ownProps: OwnProps) => {\n  const {\n    docType,\n  } = ownProps;\n\n  return {\n    documentActions: (id: number) => bindActionCreators(computedGenerateDocumentActionCreators(docType)(id), dispatch),\n    versionActions: (id: number) => bindActionCreators(computedGenerateVersionActionCreators(docType)(id), dispatch),\n    documentUserStateActions: (id: number | string) => bindActionCreators(generateDocumentUserStateActions(id), dispatch),\n    learningObjectiveActions: (id: number) => bindActionCreators(generateLearningObjectiveActions(id), dispatch),\n    variantActionsGenerator: (id: number) => bindActionCreators(generateVariantActions(id), dispatch),\n    reusableObjectActions: (id: number) => bindActionCreators(generateReusableObjectActions(id), dispatch),\n    reasoningToolActions: bindActionCreators(reasoningToolActionCreators, dispatch),\n    dispatch: dispatch,\n  };\n};\n\nfunction sharedDocFunctions(dispatchProps: ReturnType<typeof mapDispatchToProps>, documentId: number, versionId: number, documentUserStateId: number | string, currentUser: User) {\n  const basicFuncs = {\n    variantActionsGenerator: dispatchProps.variantActionsGenerator,\n    learningObjectiveActionsGenerator: dispatchProps.learningObjectiveActions,\n    ...dispatchProps.documentActions(documentId),\n    ...dispatchProps.versionActions(versionId),\n    ...dispatchProps.documentUserStateActions(documentUserStateId),\n    ...dispatchProps.reasoningToolActions,\n  };\n\n  return {\n    ...basicFuncs,\n    setDisplayMode: (mode: DisplayMode) => basicFuncs.setExtraDataVersion({displayMode: mode}),\n    setCurrentDocSelection: (data: DocSelection) => {\n      window.forceDocSelection = data;\n      basicFuncs.setExtraDataVersion({\n        currentDocSelection: data,\n        newActiveStyles: [],\n        newInactiveStyles: [],\n      });\n      selection.setDocSelection(data);\n    },\n    clearCurrentDocSelection: () => {\n      selection.setDocSelection(undefined);\n      basicFuncs.setExtraDataVersion({\n        currentDocSelection: undefined,\n        newActiveStyles: [],\n        newInactiveStyles: [],\n      });\n    },\n    setCurrentMenu: (menu, data = {}) => basicFuncs.setExtraDataVersion({currentMenu: {menu, ...data}}),\n    closeCurrentMenu: () => basicFuncs.setExtraDataVersion({currentMenu: undefined}),\n    setLocalClipboard: (data?: LocalClipboardData) => basicFuncs.setExtraDataVersion({localClipboard: data}),\n    setIsMouseDown: (data?: boolean) => basicFuncs.setExtraDataVersion({isMouseDown: data}),\n    setFindText: (data?: string) => basicFuncs.setExtraDataVersion({findText: data}),\n    setNewActiveStyles: (data?: Array<StyleName>) => basicFuncs.setExtraDataVersion({newActiveStyles: data}),\n    setNewInactiveStyles: (data?: Array<StyleName>) => basicFuncs.setExtraDataVersion({newInactiveStyles: data}),\n    setReplaceText: (data?: string) => basicFuncs.setExtraDataVersion({replaceText: data}),\n    setVersionId: (versionId: number) => basicFuncs.setExtraDataDocument({versionId}),\n    setTrackChangesEditMode: (mode: TrackChangesEditMode) => basicFuncs.setExtraDataVersion({trackChangesEditMode: mode}),\n    setChangesDisplayMode: (mode: ChangesDisplayMode) => basicFuncs.setExtraDataVersion({changesDisplayMode: mode}),\n    setFocusedBookmarkUid: (uid: string) => basicFuncs.setExtraDataVersion({focusedBookmarkUid: uid}),\n    setChangeSummaries: (changeSummaries: Array<OffsetChangeSummary>) => basicFuncs.setExtraDataVersion({changeSummaries: changeSummaries}),\n    setAllowLearningObjectivesEdit: (allowLearningObjectivesEdit?: string) => basicFuncs.setExtraDataVersion({allowLearningObjectivesEdit}),\n    changeUploadCountForMediaTypeByValue: (type: MediaType, uploadCountChange: number) => basicFuncs.setExtraDataWithFunctionVersion((extraData) => {\n      const oldUploadCount = extraData[`${type}UploadCount`] || 0;\n      return {...extraData,\n        [`${type}UploadCount`]: oldUploadCount + uploadCountChange,\n      };\n    }),\n    addChanges: (newChanges: Array<Change>, variantId?: number) => {\n      const addChangesDispatch: any = (dispatch, getState) => { // TODO: REMOVE ANY\n        const state = getState();\n\n        const trackChangesEditMode = state.versions[versionId].extraData.trackChangesEditMode;\n\n        const setAllDataWithFunction = variantId ?\n        basicFuncs.variantActionsGenerator(variantId).setAllDataWithFunctionVariant :\n        basicFuncs.setAllDataWithFunctionVersion\n\n        setAllDataWithFunction((syncData, editData: Variant | Version, extraData: VariantExtraData | VersionExtraData) => {\n          let oldChangeData = editData.changeData || syncData.changeData;\n\n          if (!oldChangeData || R.isEmpty(oldChangeData)) {\n            oldChangeData = weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON(syncData.data);\n          }\n\n          // TODO didCompressAll\n          const didCompressAll = false;\n\n          const currentDocSelection = extraData.currentDocSelection;\n          const newUndoRedoState = undoRedo.addToUndoStack(extraData.undoRedoState, {changeData: oldChangeData, currentDocSelection: currentDocSelection}, didCompressAll);\n\n          const isSuggestingMode = trackChangesEditMode === trackChangesEditModes.SUGGESTING_MODE;\n\n          const changeSetId = generateUUID();\n          newChanges = newChanges.map((change) => ({...change, change_set_id: changeSetId}));\n          const clothedChanges = newChanges.map((newChange) => clotheChange(newChange, currentUser, isSuggestingMode));\n          const newChangeData = clothedChanges.reduce((doc, change) => addChangeToDoc(doc, change), oldChangeData);\n\n          return {\n            syncData,\n            editData: {\n              ...editData,\n              changeData: newChangeData,\n            },\n            extraData: {\n              ...extraData,\n              undoRedoState: newUndoRedoState,\n            },\n          };\n        });\n      }\n\n      dispatchProps.dispatch(addChangesDispatch)\n    },\n    undo: () => {\n      basicFuncs.setAllDataWithFunctionVersion((syncData, editData, extraData) => {\n        const changeData = editData.changeData || syncData.changeData;\n        const undoRedoState = extraData.undoRedoState;\n        const currentDocSelection = extraData.currentDocSelection;\n\n        const [returnedState, newUndoRedoState] = undoRedo.undo(\n          undoRedoState,\n          {\n            changeData: changeData,\n            currentDocSelection: currentDocSelection,\n          },\n        );\n\n        selection.setDocSelection(returnedState.currentDocSelection);\n\n        return {\n          syncData,\n          editData: {\n            ...editData,\n            changeData: returnedState.changeData,\n          },\n          extraData: {\n            ...extraData,\n            undoRedoState: newUndoRedoState,\n            currentDocSelection: returnedState.currentDocSelection,\n            newActiveStyles: [],\n            newInactiveStyles: [],\n          },\n        };\n      });\n    },\n    redo: () => {\n      basicFuncs.setAllDataWithFunctionVersion((syncData, editData, extraData) => {\n        const changeData = editData.changeData || syncData.changeData;\n        const undoRedoState = extraData.undoRedoState;\n        const currentDocSelection = extraData.currentDocSelection;\n\n        const [returnedState, newUndoRedoState] = undoRedo.redo(\n          undoRedoState,\n          {\n            changeData: changeData,\n            currentDocSelection: currentDocSelection,\n          },\n        );\n\n        selection.setDocSelection(returnedState.currentDocSelection);\n\n        return {\n          syncData,\n          editData: {\n            ...editData,\n            changeData: returnedState.changeData,\n          },\n          extraData: {\n            ...extraData,\n            undoRedoState: newUndoRedoState,\n            currentDocSelection: returnedState.currentDocSelection,\n            newActiveStyles: [],\n            newInactiveStyles: [],\n          },\n        };\n      });\n    },\n  };\n}\n\nconst weakMemoizedGenerateDocumentFunctions = memoize(generateDocumentFunctions);\nfunction generateDocumentFunctions(dispatchProps: ReturnType<typeof mapDispatchToProps>, currentUser: User, documentId: number, versionId: number, assessmentQuestionSignatureVersionId: number) {\n  const documentUserStateId = `${documentId}/${currentUser ? currentUser.id : \"\"}`;\n\n  const basicFuncs = sharedDocFunctions(dispatchProps, documentId, versionId, documentUserStateId, currentUser);\n\n  return {\n    ...basicFuncs,\n    loadAssessmentQuestionSignatureVersionPublishVersion: () => dispatchProps.versionActions(assessmentQuestionSignatureVersionId).loadVersion(),\n    logEvent: (logType, args = {}) => { if (currentUser) { postDocumentUserLog(documentId, logType, args); } },\n    setVersionCoverImage: (newVersionCoverImage: string) => basicFuncs.setEditDataVersion({coverImage: newVersionCoverImage}),\n    deleteMedia: (mediaType, mediaName) => {\n      basicFuncs.setEditDataWithFunctionDocument((editData, syncData, extraData) => {\n        const oldMediaList = ((syncData || {})[mediaType]) || ((editData || {})[mediaType]);\n        const newMediaList = oldMediaList.filter((name) => name !== mediaName);\n\n        return {...editData,\n          [mediaType]: newMediaList,\n        };\n      });\n      basicFuncs.updateDocument();\n    },\n    submitExam: (successNotice: string) => {\n      fetch(full_url(`/documents/${documentId}/end_exam`), {\n        method: 'PUT',\n        headers: ReactOnRails.authenticityHeaders({\n          'Accept': \"application/json\",\n          'Content-Type': 'application/json',\n        }),\n        body: JSON.stringify({})\n      })\n      .then(response => {\n        if (response.ok) {\n          alert(successNotice);\n          window.location.replace(full_url(\"/\"));\n        } else {\n          console.log(response.statusText);\n          console.log(response.status);\n        }\n      })\n      .catch(error => {\n        console.log(error);\n      });\n    },\n    pauseExam: () => {\n      alert(\"Your exam has been paused. If you are ready to re-start your exam, please contact your proctor.\");\n      window.location.replace(full_url(\"/\"));\n    },\n  };\n}\n\nconst weakMemoizedGenerateReusableObjectFunctions = memoize(generateReusableObjectFunctions);\nfunction generateReusableObjectFunctions(dispatchProps: ReturnType<typeof mapDispatchToProps>, currentUser: User, documentId: number, versionId: number) {\n  const documentUserStateId = `TEMP_ID`; // TODO\n\n  const basicFuncs = sharedDocFunctions(dispatchProps, documentId, versionId, documentUserStateId, currentUser);\n\n  return {\n    ...basicFuncs,\n    logEvent: (logType, args = {}) => { console.log(\"No logging for Reusable Content\") },\n    deleteMedia: (mediaType, mediaName: string) => {\n      console.log(\"Media can not be deleted from Reusable Content\");\n    },\n    updateRoName: (newName: string) => {\n      basicFuncs.setEditDataDocument({name: newName});\n      basicFuncs.updateDocument();\n    },\n  };\n}\n\nconst mergeProps = (stateProps: ReturnType<typeof mapStateToProps>, dispatchProps: ReturnType<typeof mapDispatchToProps>, ownProps: OwnProps) => {\n  const {\n    docType,\n    currentUser,\n    documentId,\n    assessmentQuestionSignatureVersionId,\n  } = ownProps;\n\n  const {\n    selectedVersionId,\n  } = stateProps;\n\n  let objectFunctions =\n    docType === \"ReusableObject\" ?\n      weakMemoizedGenerateReusableObjectFunctions(dispatchProps, currentUser, documentId, selectedVersionId) :\n      weakMemoizedGenerateDocumentFunctions(dispatchProps, currentUser, documentId, selectedVersionId, assessmentQuestionSignatureVersionId)\n\n  let compiledProps: NewEditDocContainerProps = {\n    ...ownProps,\n    ...stateProps,\n    ...objectFunctions,\n    save: () => {\n      if (stateProps.versionEditData?.changeData || stateProps.versionEditData?.coverImage) {\n        let newData = weakMemoizedApplyAllChanges(stateProps.version.changeData, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n\n        newData = R.clone(newData);\n        newData = DocConvertHTML.convertAllInlineNodesToHTML(newData, false);\n        newData = stripExtraChangeDataFields(newData);\n\n        objectFunctions.setEditDataVersion({data: newData});\n        objectFunctions.updateVersion();\n      }\n\n      stateProps.variants.forEach((variant) => {\n        if (variant.editData?.changeData) {\n          let newData = weakMemoizedApplyAllChanges(variant.editData.changeData, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n\n          newData = R.clone(newData);\n          newData = DocConvertHTML.convertAllInlineNodesToHTML(newData, false);\n          newData = stripExtraChangeDataFields(newData);\n\n          const variantActions = dispatchProps.variantActionsGenerator(variant.id as number) // TODO: Remove as\n\n          variantActions.setEditDataVariant({data: newData});\n          variantActions.updateVariant();\n        }\n      })\n    },\n  }\n\n  if (compiledProps.version?.data) {\n    if (compiledProps.shouldShowEditor || compiledProps.defaultChangesDisplayMode) {\n      const editActionContext = {\n        data: stateProps.mergedData,\n        variantDataById: stateProps.variantMergedDataById,\n        currentMenu: compiledProps.versionExtraData?.currentMenu,\n        newActiveStyles: compiledProps.versionExtraData?.newActiveStyles || [],\n        newInactiveStyles: compiledProps.versionExtraData?.newInactiveStyles || [],\n        setNewActiveStyles: compiledProps.setNewActiveStyles,\n        setNewInactiveStyles: compiledProps.setNewInactiveStyles,\n        addChanges: compiledProps.addChanges,\n        setCurrentDocSelection: compiledProps.setCurrentDocSelection,\n        nodeDefinitions: nodeDefinitions,\n      };\n\n      compiledProps = {\n        ...compiledProps,\n        insertAtSelection: (text, options={}) => insertAtSelection(text, editActionContext),\n        pasteAtSelection: (dataTransfer, options={}) => pasteAtSelection(dataTransfer, editActionContext),\n        returnAtSelection: (options={}) => returnAtSelection(editActionContext),\n        deleteAtSelection: (options={}) => deleteAtSelection(editActionContext),\n        tabAtSelection: (options={}) => tabAtSelection(editActionContext),\n        shiftTabAtSelection: (options={}) => shiftTabAtSelection(editActionContext),\n        toggleStyleAtSelection: (style: StyleName) => toggleStyleAtSelection(style, editActionContext),\n      }\n    }\n  }\n\n  return compiledProps;\n};\n\nconst keyMap = {\n  undo: \"mod+z\",\n  redo: \"mod+y\",\n  save: \"mod+s\",\n  modReturn: \"mod+enter\",\n  return: \"enter\",\n  delete: [\"del\", \"backspace\"],\n  tab: \"tab\",\n  shiftTab: \"shift+tab\",\n  bold: \"mod+b\",\n  italic: \"mod+i\",\n  underline: \"mod+u\",\n  superscript: \"mod+shift+=\",\n  subscript: \"mod+=\",\n  find: \"mod+f\",\n};\n\ninterface NewEditDocContainerProps extends OwnProps {\n  addChanges: (change: Array<Change>) => void;\n  addStateDocumentUserState: (state: UserStateStripped, callback?: () => void) => void;\n  assessmentQuestion?: AssessmentQuestion;\n  assessmentQuestionEditingData?: AssessmentQuestionEditingData;\n  assessmentQuestionSignatureVersion?: Version;\n  assessmentQuestionSignatureVersionId?: number;\n  assessmentQuestionStatistics?: Array<AssessmentStatistic>;\n  assessmentStatus?: string;\n  assessmentQuestionClinicalLocationOptions?: Array<string>;\n  assessmentQuestionFinalDiagnosisOptions?: Array<string>;\n  assessmentQuestionPatientAgeOptions?: Array<string>;\n  assessmentQuestionClinicalDisciplineOptions?: Array<string>;\n  assessmentQuestionClinicalExcellenceOptions?: Array<string>;\n  assessmentQuestionSystemOptions?: Array<string>;\n  assessmentQuestionClinicalFocusOptions?: Array<string>;\n  assessmentQuestionQuestionUseOptions?: Array<string>;\n  cciStatusOptions?: Array<CciStatusOptions>;\n  cancelEditVersion: () => void;\n  changesDisplayMode?: ChangesDisplayMode;\n  changeUploadCountForMediaTypeByValue: (type: string, uploadCountChange: number) => void;\n  clearCurrentDocSelection: () => void;\n  closeCurrentMenu: () => void;\n  deleteAtSelection?: () => void;\n  deleteMedia: (mediaType: string, mediaName: string) => void;\n  destroyDocumentUserState: () => void;\n  document: Document;\n  documentSyncMeta: ItemSyncMeta;\n  documentUserState: DocumentUserState;\n  getUploadCountByMediaType: (type: string) => number;\n  insertAtSelection?: (data: string) => void;\n  loadAssessmentQuestionSignatureVersionPublishVersion?: () => void;\n  loadDocument: () => void;\n  loadDocumentUserState: () => void;\n  loadIfNeededDocumentUserState: () => void;\n  loadVersion: () => void;\n  logEvent: (logType: string, args?: Record<string, any>) => void;\n  mergedData?: MergedData;\n  panelNodeEditEnd: (uid: string) => void;\n  panelNodeEditStart: (uid: string) => void;\n  pasteAtSelection?: (dataTransfer: DataTransfer) => void;\n  pauseExam?: () => void;\n  reasoningToolUi: ReasoningToolUi;\n  redo: () => void;\n  returnAtSelection?: () => void;\n  save: () => void;\n  setChangesDisplayMode: (mode: ChangesDisplayMode) => void;\n  setChangeSummaries: (changeSummaries: Array<OffsetChangeSummary>) => void;\n  setCurrentDocSelection: (selection: DocSelection) => void;\n  setCurrentMenu: (menu: DocMenuName, data?: Record<string, any>) => void;\n  setDisplayMode: (displayMode: DisplayMode) => void;\n  setEditDataDocumentUserState: (documentUserState: Partial<DocumentUserState>) => void;\n  setExtraDataVersion: (extraData: VersionExtraData) => void;\n  setFindText: (findText: string) => void;\n  setFocusedBookmarkUid: (uid?: string | null) => void;\n  setIsMouseDown: (isMouseDown: boolean) => void;\n  setLocalClipboard: (data: LocalClipboardData) => void;\n  setNewActiveStyles: (newActiveStyles: Array<StyleName>) => void;\n  setNewInactiveStyles: (newInactiveStyles: Array<StyleName>) => void;\n  setReplaceText: (replaceText: string) => void;\n  setTrackChangesEditMode: (trackChangesEditMode: TrackChangesEditMode) => void;\n  setVersionCoverImage?: (coverImage: string) => void;\n  setVersionId: (versionId: number) => void;\n  shiftTabAtSelection?: () => boolean;\n  startEditDocument: () => void;\n  startEditVersion: () => void;\n  startNewDocumentUserState: () => void;\n  submitExam?: (successNotice: string) => void;\n  tabAtSelection?: () => boolean;\n  togglePanel: (panel: PanelType) => void;\n  togglePanelDeleting: () => void;\n  toggleStyleAtSelection?: (style: StyleName) => boolean;\n  undo: () => void;\n  unsavedChanges: boolean;\n  updateRoName?: (newName: string) => void;\n  version: Version;\n  versionEditData: VersionEditData;\n  versionExtraData: VersionExtraData;\n  versionSyncMeta: ItemSyncMeta;\n  selectedVersionId: number;\n  localLearningObjectives: Array<ReducerItemWithMerged<LearningObjective, LearningObjectiveExtraData>>;\n  localLearningObjectiveVariants: Array<ReducerItemWithMerged<Variant, VariantExtraData>>;\n  learningObjectiveActionsGenerator: typeof generateLearningObjectiveActions;\n  variantActionsGenerator: typeof generateVariantActions;\n  variants: Array<ReducerItemWithMerged<Variant, VariantExtraData>>;\n  learningObjectives: Array<ReducerItemWithMerged<LearningObjective, LearningObjectiveExtraData>>;\n  setAllowLearningObjectivesEdit: (allowLearningObjectivesEdit: string) => void;\n  allLearningObjectiveOptions?: Array<{id: number, name: string, documents: Array<{id: number, title: string}>}>;\n};\n\ninterface NewEditDocContainerState {\n  alreadyScrolled: boolean;\n  isOnline: boolean;\n  autoSaveInterval?: ReturnType<typeof setTimeout>;\n  defaultCurrectRLO?: DocSectionType<InlineNode>;\n\n  lockState?: LockState;\n  activeEditors: Array<PressenceEditor>;\n  versionChannelSubscription?: ActionCable.Subscription & { lockIfFree: () => void; unlockIfOwned: () => void; requestLock: () => void; forceLock: () => void; }\n};\n\nclass NewEditDocContainer extends React.Component<NewEditDocContainerProps, NewEditDocContainerState> {\n  browserName: string;\n  beforeInputObserver?: BeforeInputObserver;\n  activeUserObserver?: ActiveUserObserver;\n  copyObserver?: CopyObserver;\n  mouseClickObserver?: MouseClickObserver;\n  offlineObserver?: OfflineObserver;\n  selectionObserver?: SelectionObserver;\n  lastActiveAt?: number;\n  loadIfNeededDocumentUserStateTimer?: ReturnType<typeof setTimeout>;\n  versionChannelCheckInTimer?: ReturnType<typeof setInterval>;\n\n  constructor(props: NewEditDocContainerProps) {\n    super(props);\n\n    const browser = Bowser.getParser(window.navigator.userAgent);\n    this.browserName = browser.getBrowserName();\n\n    this.state = {\n      alreadyScrolled: false,\n      isOnline: navigator.onLine,\n      activeEditors: [],\n    };\n  }\n\n  loadResourcesIfNeeded() {\n    if (!this.props.versionSyncMeta) {\n      this.props.loadVersion();\n\n      if (this.props.shouldShowEditor) {\n        this.props.startEditVersion();\n      }\n    }\n\n    if (!this.props.documentSyncMeta) {\n      this.props.loadDocument();\n\n      if (this.props.shouldShowEditor) {\n        this.props.startEditDocument();\n      }\n    }\n\n    if (this.props.learningObjectives) {\n      this.props.learningObjectives.forEach((learningObjective) => {\n        if (!learningObjective.syncMeta) {\n          const learningObjectiveActions = this.props.learningObjectiveActionsGenerator(learningObjective.id)\n          learningObjectiveActions.loadLearningObjective();\n        }\n      })\n    }\n\n    if (this.props.variants) {\n      this.props.variants.forEach((variant) => {\n        if (!variant.syncMeta) {\n          const variantActions = this.props.variantActionsGenerator(variant.id)\n          variantActions.loadVariant();\n\n          if (this.props.shouldShowEditor) {\n            variantActions.startEditVariant();\n          }\n        }\n      })\n    }\n  }\n\n  componentDidMount() {\n    this.beforeInputObserver = new BeforeInputObserver();\n    this.beforeInputObserver.registerDelegate(this);\n\n    this.copyObserver = new CopyObserver();\n    this.copyObserver.registerDelegate(this);\n\n    this.offlineObserver = new OfflineObserver();\n    this.offlineObserver.registerDelegate(this);\n\n    if (this.props.shouldShowEditor) {\n      this.toggleAutoSave();\n\n      this.createVersionChannelSubscription();\n\n      this.selectionObserver = new SelectionObserver();\n      this.selectionObserver.registerDelegate(this);\n\n      this.mouseClickObserver = new MouseClickObserver();\n      this.mouseClickObserver.registerDelegate(this);\n\n      this.activeUserObserver = new ActiveUserObserver();\n      this.activeUserObserver.registerDelegate(this);\n      this.lastActiveAt = Date.now();\n    }\n\n    this.loadResourcesIfNeeded();\n\n    if (this.props.currentUser) {\n      if (this.props.docType === \"ReusableObject\") {\n        this.props.startNewDocumentUserState();\n        this.props.setEditDataDocumentUserState({id: \"TEMP_ID\" as any, state: {}}); // TODO: REMOVE ANY\n      } else {\n        this.props.loadDocumentUserState();\n        this.loadIfNeededDocumentUserStateTimer = setInterval(this.props.loadIfNeededDocumentUserState, 5000);\n      }\n    }\n\n    if (this.props.assessmentQuestionSignatureVersionId) {\n      this.props.loadAssessmentQuestionSignatureVersionPublishVersion();\n    }\n\n    if (Array.isArray(this.props.scrollable_uids) && this.props.scrollable_uids[0]) {\n      this.props.setExtraDataVersion({\n        displayMode: displayModes.FULL,\n      });\n    }\n  }\n\n  createVersionChannelSubscription() {\n    const {\n      selectedVersionId,\n      currentUser,\n      sessionId,\n      cableApp,\n    } = this.props\n\n    const consumer = cableApp?.cable\n\n    if (consumer) {\n      const container = this\n      const versionChannelSubscription = consumer.subscriptions.create({\n        channel: \"VersionChannel\",\n        version_id: selectedVersionId,\n        session_id: sessionId,\n      }, {\n        connected() {\n          console.log(\"Connected from VersionChannel\");\n\n          if (!container.versionChannelCheckInTimer) {\n            this.checkIn()\n\n            container.versionChannelCheckInTimer = setInterval(this.checkIn.bind(this), 10000);\n          }\n        },\n        disconnected() {\n          console.log(\"Disconnected from VersionChannel\");\n        },\n        received(data) {\n          const {\n            activeEditors,\n            lockSessionId,\n            lockUserId,\n            lockUserSessionId,\n            lockRequestSessionId,\n            lockRequestUserId,\n            lockRequestUserSessionId,\n          } = data;\n\n          const {\n            lockState,\n          } = container.state;\n\n          const hadLock = currentUser.id === lockState?.lockUserId && sessionId === lockState?.lockSessionId;\n          const hasLock = currentUser.id === data.lockUserId && sessionId === data.lockSessionId;\n\n          container.setState({\n            activeEditors,\n            lockState: {\n              hasLock,\n              lockSessionId,\n              lockUserId,\n              lockUserSessionId,\n              lockRequestSessionId,\n              lockRequestUserId,\n              lockRequestUserSessionId,\n            },\n          })\n\n          if (hadLock !== hasLock) {\n            if (hasLock) {\n              container.props.loadVersion();\n              container.props.startEditVersion();\n            } else {\n              container.props.cancelEditVersion();\n            }\n          }\n        },\n        checkIn() {\n          versionChannelSubscription.perform('check_in', {last_active: Math.round(container.lastActiveAt/1000)});\n        },\n        lockIfFree() {\n          versionChannelSubscription.perform('lock_if_free');\n        },\n        unlockIfOwned() {\n          versionChannelSubscription.perform('unlock_if_owned');\n        },\n        requestLock() {\n          versionChannelSubscription.perform('request_lock');\n        },\n        forceLock() {\n          versionChannelSubscription.perform('force_lock');\n        },\n      })\n\n      this.setState({versionChannelSubscription: versionChannelSubscription});\n\n    }\n  }\n\n  unsubscribeVersionChannelSubscription() {\n    const {\n      versionChannelSubscription,\n    } = this.state;\n\n    if (versionChannelSubscription) {\n      versionChannelSubscription.unsubscribe();\n      this.setState({versionChannelSubscription: null});\n    }\n\n    if (this.versionChannelCheckInTimer) {\n      clearTimeout(this.versionChannelCheckInTimer);\n    }\n  }\n\n  lockIfFree() {\n    const {\n      versionChannelSubscription,\n    } = this.state;\n\n    versionChannelSubscription.lockIfFree();\n  }\n\n  unlockIfOwned() {\n    const {\n      versionChannelSubscription,\n    } = this.state;\n\n    const shouldUnlock = confirm(\"Are you sure you would like to release the editing lock? Any unsaved changes may be lost.\");\n    if (shouldUnlock) {\n      versionChannelSubscription?.unlockIfOwned();\n    }\n  }\n\n  forceLock() {\n    const {\n      versionChannelSubscription,\n    } = this.state;\n\n    const shouldForceLock = confirm(\"Are you sure you would like to take the editing lock? Any unsaved changes by the current lock holder may be lost.\");\n    if (shouldForceLock) {\n      versionChannelSubscription?.forceLock();\n    }\n  }\n\n  getSnapshotBeforeUpdate(prevProps: NewEditDocContainerProps, prevState: NewEditDocContainerState) {\n    return {\n      beforeUpdateDocSelection: selection.getDocSelection()\n    }\n  }\n\n  componentDidUpdate(prevProps: NewEditDocContainerProps, prevState: NewEditDocContainerState, snapshot: {beforeUpdateDocSelection: DocSelection}) {\n    this.syncDOMSelection(snapshot.beforeUpdateDocSelection);\n\n    if (!prevState.alreadyScrolled && Array.isArray(prevProps.scrollable_uids)) {\n      const element = scrollToElementWithUid(prevProps.scrollable_uids);\n      if (element) {\n        this.props.setFocusedBookmarkUid(prevProps.scrollable_uids[0])\n        this.setState({alreadyScrolled: true});\n      }\n    }\n\n    this.loadResourcesIfNeeded();\n\n    if (this.props.shouldShowEditor && prevProps.selectedVersionId !== this.props.selectedVersionId) {\n      this.unsubscribeVersionChannelSubscription();\n      this.createVersionChannelSubscription();\n    }\n\n    if (this.state.isOnline && !prevState.isOnline && !this.props.isEmbeded) {\n      alert(\"Your connection has been restored. Click OK to dismiss this alert and continue your work.\");\n    }\n\n    const {\n      mergedData,\n      versionExtraData,\n    } = this.props;\n\n    if (this.props.shouldShowEditor && mergedData) {\n      const prioritizedOffsetChangeSummary = versionExtraData.changeSummaries?.find((changeSummary) => changeSummary.prioritizeOffset)\n      const changeSummaries = computeSpacedChangeSummaries(mergedData, versionExtraData.currentMenu, versionExtraData.currentDocSelection, prioritizedOffsetChangeSummary);\n\n      if (!R.equals(changeSummaries, versionExtraData.changeSummaries)) {\n        this.props.setChangeSummaries(changeSummaries);\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    this.beforeInputObserver?.unregisterDelegate(this);\n    this.copyObserver?.unregisterDelegate(this);\n\n    this.offlineObserver?.unregisterDelegate(this);\n\n    if ( this.loadIfNeededDocumentUserStateTimer ) { clearInterval(this.loadIfNeededDocumentUserStateTimer); }\n\n    if ( this.state.autoSaveInterval ) { clearInterval(this.state.autoSaveInterval); }\n\n    this.selectionObserver?.unregisterDelegate(this);\n    this.mouseClickObserver?.unregisterDelegate(this);\n    this.activeUserObserver?.unregisterDelegate(this);\n  }\n\n  checkMappedContentEditMode(currentDocSelection: DocSelection) {\n    const currentlyEditingNodeLineage = findNodeLineageByUid(this.props.mergedData, currentDocSelection.start.uid);\n\n    let activeLearningObjective = null\n    if (currentlyEditingNodeLineage) {\n      let activeLoId = currentlyEditingNodeLineage.find( node => node.type === \"learningObjective\")?.uid\n      activeLearningObjective = this.props.mappingData.learningObjectives.find( lo => lo.id === activeLoId)\n    }\n\n    let reusableObjectIds = this.props.mappingData.learningObjectiveReusableObjects.map(loro => loro.reusable_object_id)\n    let proposedReusableObjectIds = this.props.mergedData.proposedLearningObjectiveReusableObjects ? this.props.mergedData.proposedLearningObjectiveReusableObjects.map(loro => loro.reusable_object_id) : []\n    let totalReusableObjectIds=Array.from(new Set(reusableObjectIds.concat(proposedReusableObjectIds)))\n    let reusableObjectUids = this.props.mergedData.proposedLearningObjectiveReusableObjects ? totalReusableObjectIds.map(id => this.props.mappingData.reusableObjects.find(ro => ro.id === id)?.uid) : []\n\n    let currentlyEditingNodeLineageUids = currentlyEditingNodeLineage.map(obj => obj.uid)\n    let checkEditingContentIsMappedLO = activeLearningObjective && this.props.mappingData.learningObjectiveReusableObjects.find(loro => loro.learning_objective_id === activeLearningObjective.id) !== undefined\n    let checkEditingContentIsProposeddLO = activeLearningObjective && this.props.mergedData.proposedLearningObjectiveReusableObjects && this.props.mergedData.proposedLearningObjectiveReusableObjects.find(loro => loro.learning_objective_id === activeLearningObjective.id) !== undefined\n    let checkEditingContentIsMappedTP = reusableObjectUids && currentlyEditingNodeLineageUids.filter(element => reusableObjectUids.indexOf(element) !== -1).length!==0\n\n    let isMultiUseRO = false\n    if (currentlyEditingNodeLineage) {\n      const roDocumentCount = currentlyEditingNodeLineage.find(node => node.roDocumentCount)\n      isMultiUseRO = roDocumentCount && roDocumentCount.roDocumentCount > 1\n    }\n\n    if(checkEditingContentIsMappedLO || checkEditingContentIsProposeddLO || checkEditingContentIsMappedTP) {\n      alert(\"Editing of mapped content is permitted in Suggesting mode only.\");\n      this.props.setTrackChangesEditMode(\"SUGGESTING_MODE\")\n    } else if(isMultiUseRO) {\n      alert(\"Editing of multi-use Reusable Content is permitted in Suggesting mode only.\");\n      this.props.setTrackChangesEditMode(\"SUGGESTING_MODE\")\n    }\n  }\n\n  beforeInputDidFire(event: InputEvent) {\n    const currentDocSelection = selection.getDocSelection();\n\n    if (!currentDocSelection) { return false; }\n\n    event.preventDefault();\n\n    let allowedMode = this.props.versionExtraData.trackChangesEditMode || (this.props.permissions.allowedEditMode && `${this.props.permissions.allowedEditMode.toUpperCase()}_MODE`) || trackChangesEditModes.EDITING_MODE\n    if (allowedMode === trackChangesEditModes.EDITING_MODE) {\n      if (!this.props.isAdmin && this.props.docType !== \"ReusableObject\") {\n        this.checkMappedContentEditMode(currentDocSelection);\n      }\n    }\n\n    switch (event.inputType) {\n      case \"insertText\":\n        return this.props.insertAtSelection(event.data);\n      case \"insertFromPaste\":\n      case \"insertFromYank\":\n      case \"insertFromDrop\":\n        return this.props.pasteAtSelection(event.dataTransfer);\n      case \"insertLineBreak\":\n      case \"insertParagraph\":\n        return this.props.returnAtSelection();\n      case \"deleteByCut\":\n        this.addSelectionToCacheIfValid();\n      case \"deleteByDrag\":\n      case \"deleteContent\":\n      case \"deleteContentBackward\":\n      case \"deleteEntireSoftLine\":\n      case \"deleteHardLineBackward\":\n      case \"deleteSoftLineBackward\":\n      case \"deleteWordBackward\":\n        return this.props.deleteAtSelection();\n      case \"historyUndo\":\n        return this.props.undo();\n      case \"historyRedo\":\n        return this.props.redo();\n      case \"insertCompositionText\":\n      case \"insertFromComposition\":\n      case \"insertReplacementText\":\n      case \"insertOrderedList\":\n      case \"insertUnorderedList\":\n      case \"insertHorizontalRule\":\n      case \"insertFromPasteAsQuotation\":\n      case \"insertTranspose\":\n      case \"insertLink\":\n      case \"deleteByComposition\":\n      case \"deleteCompositionText\":\n      case \"deleteWordForward\":\n      case \"deleteSoftLineForward\":\n      case \"deleteHardLineForward\":\n      case \"deleteContentForward\":\n      case \"formatBold\":\n      case \"formatItalic\":\n      case \"formatUnderline\":\n      case \"formatStrikeThrough\":\n      case \"formatSuperscript\":\n      case \"formatSubscript\":\n      case \"formatJustifyFull\":\n      case \"formatJustifyCenter\":\n      case \"formatJustifyRight\":\n      case \"formatJustifyLeft\":\n      case \"formatIndent\":\n      case \"formatOutdent\":\n      case \"formatRemove\":\n      case \"formatSetBlockTextDirection\":\n      case \"formatSetInlineTextDirection\":\n      case \"formatBackColor\":\n      case \"formatFontColor\":\n      case \"formatFontName\":\n      default:\n        console.log(\"Uncaught InputEvent\");\n    }\n  }\n\n  copyDidFire(event: ClipboardEvent) {\n    this.addSelectionToCacheIfValid();\n  }\n\n  activeUserDidFire(event: MouseEvent | KeyboardEvent) {\n    this.lastActiveAt = Date.now();\n  }\n\n  addSelectionToCacheIfValid() {\n    const {\n      version,\n      versionExtraData,\n    } = this.props;\n\n    const currentMenu = versionExtraData?.currentMenu;\n    let currentDocSelection = selection.getDocSelection();\n\n    if (!currentDocSelection || currentMenu) { return false; }\n\n    let changeData = version.changeData;\n    if (!changeData || R.isEmpty(changeData)) {\n      changeData = weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON(version.data);\n    }\n\n    currentDocSelection = adjustSelectionStartToIncludeListItemIfNeeded(changeData, currentDocSelection)\n\n    const translatedSelection = translateSelectionToFlowRange(changeData, currentDocSelection);\n\n    if (!translatedSelection) { return false; }\n\n    const foundFlatFlowNodes = findFlatFlowNodesWithFlowRange(changeData, translatedSelection);\n\n    if (!foundFlatFlowNodes || foundFlatFlowNodes.nodes.length === 0) { return false; }\n\n    const newClipboardNodes = flatFlowToTreeFlow(foundFlatFlowNodes.nodes, foundFlatFlowNodes.listNodes, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n\n    this.props.setLocalClipboard(newClipboardNodes);\n  }\n\n  didGoOffline() { if(this.state.isOnline) { this.setState({isOnline: false}); }; }\n  didGoOnline() { if(!this.state.isOnline) { this.setState({isOnline: true}); }; }\n\n  mouseDidDownClick(event: MouseEvent) { this.props.setIsMouseDown(true); }\n  mouseDidUpClick(event: MouseEvent) { this.props.setIsMouseDown(false); }\n\n  selectionDidChange(event: Event) { this.syncCurrentDocSelection(); }\n\n  syncCurrentDocSelection() {\n    const {\n      closeCurrentMenu,\n      setExtraDataVersion,\n      versionExtraData,\n    } = this.props;\n\n    const currentDocSelection = versionExtraData.currentDocSelection;\n    const newDocSelection = selection.getDocSelection();\n\n    const currentMenu = versionExtraData.currentMenu;\n\n    if (newDocSelection) {\n      if (!selection.areDocSelectionsEqual(currentDocSelection, newDocSelection)) {\n        if ([NEW_SUMMARY_OF_EDITS, NEW_COMMENT_THREAD, EDIT_COMMENT, EDIT_LINK, TEXT_COLOR_PICKER, ADD_NODE].includes(currentMenu?.menu)) {\n          closeCurrentMenu();\n        }\n\n        // console.log(\"syncCurrentDocSelection:\", newDocSelection);\n        setExtraDataVersion({\n          currentDocSelection: newDocSelection,\n          newActiveStyles: [],\n          newInactiveStyles: [],\n        });\n      }\n    }\n  }\n\n  syncDOMSelection(beforeUpdateDocSelection: DocSelection) {\n    const {\n      versionExtraData,\n    } = this.props;\n\n    let newDocumentSelection = beforeUpdateDocSelection;\n\n    if (window.forceDocSelection) {\n      newDocumentSelection = window.forceDocSelection\n      window.forceDocSelection = undefined;\n    }\n\n    const showingDOMRange = selection.getDOMRange();\n    const newDOMRange = selection.docSelectionToDOMRange(newDocumentSelection);\n\n    if (!selection.areDOMRangesEqual(showingDOMRange, newDOMRange)) {\n      const currentMenu = versionExtraData?.currentMenu;\n      if (![NEW_SUMMARY_OF_EDITS, NEW_COMMENT_THREAD, EDIT_COMMENT, EDIT_LINK, TEXT_COLOR_PICKER].includes(currentMenu?.menu)) {\n        // console.log(\"syncDOMSelection\", newDocumentSelection);\n        selection.setDocSelection(newDocumentSelection);\n      }\n    }\n  }\n\n  toggleAutoSave() {\n    if (this.state.autoSaveInterval) {\n      clearInterval(this.state.autoSaveInterval);\n      this.setState({\n        autoSaveInterval: undefined,\n      });\n    } else {\n      this.setState({\n        autoSaveInterval: setInterval(this.autoSave.bind(this), 30000),\n      });\n    }\n  }\n\n  autoSave() {\n    if (this.props.unsavedChanges) {\n      this.props.save();\n    }\n  }\n\n  changesToMappedContent(mergedData) {\n    let learningObjectiveIds = this.props.mappingData.learningObjectiveReusableObjects.map( loro => loro.learning_objective_id)\n\n    let learningObjectiveUids = learningObjectiveIds.map(id => this.props.mappingData.learningObjectives.find(lo => lo.id === id)?.uid)\n    let loNodes = learningObjectiveUids.map(uid => findNodeByUid(mergedData, uid))\n    let validLoNodes = loNodes.filter(n => n)\n    let allLoChanges = validLoNodes.map(node => node.content[0].content?.addDeleteChanges?.concat(node.uid))\n\n    let reusableObjectIds = this.props.mappingData.learningObjectiveReusableObjects.map( loro => loro.reusable_object_id)\n    let reusableObjectUids = reusableObjectIds.map(id => this.props.mappingData.reusableObjects.find(ro => ro.id === id)?.uid)\n    let roNodes = reusableObjectUids.map(uid => findNodeByUid(mergedData, uid))\n    let validRoNodes = roNodes.filter(n => n)\n    let roTitleChanges = validRoNodes.map(node => node.title?.addDeleteChanges).filter(change => change)\n    let roContentChanges = validRoNodes.map(node => node.content[0].content?.addDeleteChanges).filter(change => change)\n    let unpublishedLoChanges = allLoChanges.filter(change => change).filter(change => change[change?.length - 2]?.published_at > ((new Date()).getTime() - 500))\n    let unpublishedRoTitleChanges = roTitleChanges.filter(change => change[change?.length - 1]?.published_at > ((new Date()).getTime() - 500 ))\n    let unpublishedRoContentChanges = roContentChanges.filter(change => change[change?.length - 1]?.published_at > ((new Date()).getTime() - 500))\n    let allUnpublishedChanges = unpublishedLoChanges.concat(unpublishedRoTitleChanges).concat(unpublishedRoContentChanges)\n\n    return allUnpublishedChanges\n  }\n\n  publishMergedData() {\n    const {\n      currentUser,\n      document,\n      version,\n      variants,\n      localLearningObjectives,\n      docType,\n    } = this.props;\n\n    const oldChangeData = generateChangeData(version);\n\n    const publishChange = clotheChange(newPublishChange(), currentUser, false);\n    let mergedData = addChangeToDoc(oldChangeData, publishChange);\n\n    mergedData = weakMemoizedApplyAllChanges(mergedData, changesDisplayModes.HIDE_SUGGESTIONS);\n\n    const variantPlaceholderPaths = mergedData ? findVariantPlaceholderNodePaths(mergedData) : []\n    const learningObjectivePlaceholderPaths = variantPlaceholderPaths.filter((vpPath) => findAtPath(mergedData, vpPath).variantableType === \"LearningObjective\").filter((path) => !path.includes(\"addDeleteChanges\"))\n    const learningObjectiveNodePathsById = Object.fromEntries(learningObjectivePlaceholderPaths.map((loPlaceholderPath) => [findAtPath(mergedData, loPlaceholderPath).variantableId, loPlaceholderPath]))\n\n    if (document) {\n      const versionType = determineVersionType(document as any, version.id); // TODO: Remove any\n      const variantType = determineVariantTypeFromVersionType(versionType);\n      const variantKey = variantKeyFromVariantVersion(variantType);\n\n      variants.forEach((learningObjectiveVariant) => {\n        if (learningObjectiveVariant?.mergedData) {\n          const parentLearningObjective = localLearningObjectives.find((lo) => lo?.mergedData?.[variantKey] === learningObjectiveVariant.id)\n          const learningObjectiveNodePath = learningObjectiveNodePathsById[parentLearningObjective.id]\n\n          if (learningObjectiveNodePath) {\n            const appliedData = applyChangesToVariant(learningObjectiveVariant.mergedData, parentLearningObjective?.mergedData?.publishVariantId, changesDisplayModes.HIDE_SUGGESTIONS, true)\n\n            mergedData = setAtPath(mergedData, learningObjectiveNodePath, appliedData)\n            mergedData = setAtPath(mergedData, learningObjectiveNodePath.concat(['variantId']), learningObjectiveVariant.id)\n          }\n        }\n      })\n    }\n\n    if (docType !== \"ReusableObject\") {\n      mergedData = weakMemoizedReflow(mergedData, document.kind, document.id);\n    }\n\n    return R.clone(mergedData);\n  }\n\n  publishWithoutWarning(shouldUpdateBanner: boolean){\n    const {\n      document,\n      version,\n      addChanges,\n      save,\n      undo,\n      docType,\n    } = this.props;\n\n    const mergedData = this.publishMergedData();\n\n    let allHTMLData = DocConvertHTML.convertAllInlineNodesToHTML(mergedData) as DocBlockNode<InlineHtmlNode>; // TODO: Remove as\n    allHTMLData = stripExtraChangeDataFields(allHTMLData) as DocBlockNode<InlineHtmlNode>; // TODO: Remove as\n\n    let changedMappedContent = [];\n    if(document?.kind !== \"assessment_question_mcq\" && docType !== \"ReusableObject\") {\n      changedMappedContent = this.changesToMappedContent(mergedData)\n    }\n\n    if(changedMappedContent.length > 0 && !confirm(\"There are changes to mapped content! Click OK to continue publishing or Cancel to review changes.\")) {\n      return;\n    }\n\n    let publishUrl, publishData\n    if (docType === \"ReusableObject\") {\n      publishUrl = full_url(`/variants/${version.id}/publish`);\n      publishData = {\n        variant: {}\n      }\n    } else {\n      publishUrl = full_url(`/documents/${document.id}/publish`);\n      publishData = {\n        document: {\n          should_update_banner: shouldUpdateBanner,\n          data: allHTMLData,\n          cover_image: version.coverImage,\n          mod_map_image_filename: version.modMapImageFilename,\n        },\n      }\n    }\n\n    axios({\n      method: \"post\",\n      withCredentials: true,\n      url: publishUrl,\n      headers: ReactOnRails.authenticityHeaders({Accept: \"application/json\"}),\n      data: publishData,\n    })\n    .then((response) => {\n      window.customAlertBox({title: \"Publishing!\", message: \"This version is being published\"});\n      addChanges([newPublishChange()]);\n      save();\n      setTimeout(function () {\n        window.location.reload();\n      }, 2000);\n    })\n    .catch((error) => {\n      window.customAlertBox({title: \"Publishing Error!\", message: \"There was an error publishing.\"});\n      undo();\n      throw (error);\n    });\n  }\n\n  publish() {\n    const {\n      document,\n      docType,\n    } = this.props;\n\n    const mergedData = this.publishMergedData();\n\n    if(document?.kind === \"assessment_question_mcq\" && (!mergedData.proposedLearningObjectiveReusableObjectId)) {\n      window.customAlertBox({title: \"Publishing Error!\", message: \"The document can not be published because there are incomplete mappings\"});\n      return\n    }\n\n    window.customConfirmBox({\n      title: \"Please Confirm!\",\n      message: \"Are you sure you want to publish this case? Remember to update the SR Version with these edits!'\",\n      okLabel: \"Publish\",\n      callback: () => {\n        if (docType === \"ReusableObject\" || document?.kind === \"assessment_question_mcq\") {\n          this.publishWithoutWarning(false);\n        } else {\n          window.customConfirmBox({\n            title: \"Update Banner\",\n            message: \"Would you like to show the 'Update Banner?'\",\n            callback: () => this.publishWithoutWarning(true),\n            cancel: () => this.publishWithoutWarning(false),\n          })\n        }\n      },\n    });\n  }\n\n  render() {\n    const {\n      docType,\n      documentSetId,\n      document,\n      version,\n      assessmentQuestion,\n      assessmentQuestionEditingData,\n      assessmentQuestionStatistics,\n      assessmentQuestionSignatureVersion,\n      assessmentQuestionSignatureVersionId,\n      assessmentQuestionClinicalLocationOptions,\n      assessmentQuestionFinalDiagnosisOptions,\n      assessmentQuestionPatientAgeOptions,\n      assessmentQuestionClinicalDisciplineOptions,\n      assessmentQuestionClinicalExcellenceOptions,\n      assessmentQuestionSystemOptions,\n      assessmentQuestionClinicalFocusOptions,\n      assessmentQuestionQuestionUseOptions,\n      versionSyncMeta,\n      versionEditData,\n      versionExtraData,\n      currentUser,\n      currentGroupRoleDefinition,\n      documentUserState,\n      isAdmin,\n      cciStatusOptions,\n      assessmentStatus,\n      reasoningToolUi,\n      displayUid,\n      changesDisplayMode,\n      mappingData,\n      isEmbeded,\n      featureFlag,\n      sessionId,\n      localLearningObjectives,\n      localLearningObjectiveVariants,\n      allLearningObjectiveOptions,\n    } = this.props;\n\n    let {\n      mergedData,\n    } = this.props;\n\n    const {\n      isOnline,\n      activeEditors,\n      lockState,\n    } = this.state;\n\n    if (document?.id && version?.id && documentUserState?.id) {\n      ///////////////////\n      // User Context //\n      /////////////////\n      const userContext = weakMemoizedGenerateCurrentUser(\n        currentUser || {} as User, // currentUser\n        currentGroupRoleDefinition, // currentGroupRoleDefinition\n        isAdmin, // isAdmin\n        sessionId, // sessionId\n        this.props.permissions,\n        this.props.loadDocumentUserState, // loadDocumentUserState\n        this.props.addStateDocumentUserState, // addStateDocumentUserState\n        this.props.destroyDocumentUserState, // destroyDocumentUserState\n        this.props.submitExam, // submitExam\n        this.props.pauseExam, // pauseExam\n        this.props.logEvent, //logEvent\n        version.data.uid, // rootUID\n      );\n\n      //////////////////////\n      // DISPLAY CONTEXT //\n      ////////////////////\n      const displayMode = versionExtraData.displayMode || (this.props.shouldShowEditor ? displayModes.FULL : (this.props.isNotGated ? displayModes.UNGATED : displayModes.STUDENT));\n      const displayContext = weakMemoizedGenerateDisplayContext(\n        displayMode, // displayMode\n        this.props.setDisplayMode, // setDisplayMode\n        isOnline, // isOnline\n        versionExtraData.focusedBookmarkUid, // focusedBookmarkUid\n        this.props.setFocusedBookmarkUid, // setFocusedBookmarkUid\n        this.props.togglePanel, // togglePanel\n        this.props.panelNodeEditStart, // panelNodeEditStart\n        this.props.isEmbeded, // isEmbeded\n        this.props.enableAiSummaryStatementFeedback, // enableAiSummaryStatementFeedback\n        !lockState?.hasLock, // isLockedByOtherUser\n        this.props.styleGuideId\n      );\n\n      ///////////////////////\n      // DOCUMENT CONTEXT //\n      /////////////////////\n      const documentContext = weakMemoizedGenerateCurrentDocument(\n        document,\n        docType,\n        this.props.loadDocument, // reload\n      );\n\n      ///////////////////////\n      // MEDIA CONTEXT //\n      /////////////////////\n      const mediaContext = organizeMediaAssets(document);\n\n      ////////////////////////////\n      // VERSION WITHOUT STATE //\n      //////////////////////////\n      if (this.props.shouldShowEditor && version.id !== publishVersionId(documentContext)) {\n        // Required because nested contentEditables in Safari allow selection from parent into child\n        if (this.browserName === \"Safari\" && versionExtraData.currentDocSelection && versionExtraData.isMouseDown) {\n          mergedData = weakMemoizedSetBlockNodesContainsSelection(mergedData, versionExtraData.currentDocSelection);\n        }\n\n        if (versionExtraData.currentMenu) {\n          mergedData = weakMemoizedAttachCurrentMenuToNode(mergedData, versionExtraData.currentMenu, versionExtraData.localClipboard);\n\n          let currentDocSelection = versionExtraData.currentDocSelection\n\n          if (\n            [NEW_SUMMARY_OF_EDITS, NEW_COMMENT_THREAD, EDIT_COMMENT, EDIT_LINK, TEXT_COLOR_PICKER].includes(versionExtraData.currentMenu?.menu) &&\n            currentDocSelection &&\n            selection.isInOneInline(currentDocSelection) &&\n            currentDocSelection.start.contentKey\n          ) {\n            const nodePath = findNodePathByUid(mergedData, currentDocSelection.start.uid)\n\n            mergedData = R.set(\n              R.lensPath([...nodePath, currentDocSelection.start.contentKey, \"selectionMimics\"]),\n              [{range: {start: currentDocSelection.start.index, end: currentDocSelection.end.index}}],\n              mergedData,\n            )\n          }\n        }\n\n        const shouldReflow = displayContext.displayMode === displayModes.STUDENT;\n        if (shouldReflow) {\n          mergedData = weakMemoizedReflow(mergedData, document.kind, document.id);\n        }\n      }\n\n      ////////////////////////////////\n      // APPLY DOCUMENT USER STATE //\n      //////////////////////////////\n      if (displayContext.displayMode !== displayModes.FULL || !this.props.shouldShowEditor) {\n        mergedData = addDocumentUserState(mergedData, documentUserState.state);\n\n        const notes = (mergedData.notes || []);\n        notes.filter((note) => note.notedNodeUid).forEach((note) => {\n          mergedData = editNodeWithUIDKeyValue(mergedData, note.notedNodeUid, \"noteUid\", note.uid);\n        });\n      }\n\n      if (displayContext.focusedBookmarkUid) {\n        const nodePath = findNodePathByUid(mergedData, displayContext.focusedBookmarkUid);\n        if (nodePath) {\n          mergedData = setAtPath(mergedData, [...nodePath, \"isFocusedBookmark\"], true)\n        }\n      }\n\n      const setCurrentRO = (rlo: DocSectionType<InlineNode>) => {\n        this.setState({defaultCurrectRLO: rlo})\n      }\n      let currentRO = this.state.defaultCurrectRLO;\n      const currentActiveDocSelection = selection.getDocSelection();\n\n      if(currentActiveDocSelection){\n        const {\n          uid: startUID,\n        } = currentActiveDocSelection.start;\n        const lineage = findNodeLineageByUid(mergedData, startUID);\n        if (lineage) {\n          currentRO = R.findLast((node): node is DocSectionType<InlineNode> => node[\"type\"] === \"section\" && node[\"classes\"] && R.intersection(node[\"classes\"], POSSIBLE_RO_CLASSES).length > 0, lineage)\n        }\n      }\n\n      // THIS SHOULD NOT BE IN RENDER MOVE WHEN SAFE TO DO SO\n      const urlParams = new URLSearchParams(window.location.search)\n      if (urlParams.has('uid')) {\n        const uid = urlParams.get('uid');\n        mergedData = editNodeWithUIDKeyValue(mergedData, uid, \"isFocusedBookmark\", true);\n        let topHeight = 0;\n        const element = document.getElementById(uid);\n        if (element !== null) {\n          topHeight = element.offsetTop;\n        }\n        window.scrollTo({\n          top: Math.round(topHeight),\n          behavior: 'smooth'\n        });\n      }\n\n      if(currentRO && documentContext.docType !== \"ReusableObject\" && userContext.permissions.createExistingContentRlo){\n        mergedData = editNodeWithUIDKeyValue(mergedData, currentRO.uid, \"isFocusedBookmark\", true);\n      }\n      //////////////////////\n      // CURRENT VERSION //\n      ////////////////////\n      const currentVersion = weakMemoizedGenerateCurrentVersion(\n        version.id, // id\n        version.published, // published\n        version.awsFolderUrl, // awsFolderUrl\n        version.coverImage, // coverImage\n        mergedData.onlyOneUncollapsedSection, // onlyOneUncollapsedSection\n        mergedData.disableBookmarks, // disableBookmarks\n        this.props.loadVersion, // reload\n      );\n\n      ///////////////////\n      // EDIT CONTEXT //\n      /////////////////\n      let editingContext;\n      let editingContextExtra: EditingContextExtra;\n      if (this.props.shouldShowEditor) {\n        editingContext = weakMemoizedGenerateEditingContext(\n          this.props.shouldShowEditor, // shouldShowEditor,\n          displayContext.canBeEditing, // canBeEditing\n          !!versionEditData, // isVersionEditActivated,\n          changesDisplayMode, // changesDisplayMode,\n          currentVersion.id === publishVersionId(documentContext), // isPublishedVersion\n          currentVersion.id === ongoingMaintenaceVersionId(documentContext), // isMaintenanceVersion\n          userContext.permissions.accessOmVersion || userContext.permissions.accessRloMaintenance, // canEditOM\n          nodeDefinitions, // nodeDefinitions,\n          userContext.id,\n          version.changeAuthorIds,\n          this.props.addChanges, // addChanges\n          this.props.setCurrentDocSelection,\n          this.props.clearCurrentDocSelection,\n          this.props.setCurrentMenu,\n          this.props.closeCurrentMenu,\n          this.props.setLocalClipboard,\n          this.props.editors,\n          versionExtraData.allowLearningObjectivesEdit\n        );\n\n        const currentDocSelectionDetail: Pick<EditingContextExtra, \"currentDocSelection\" | \"activeStylesFromChanges\" | \"activeStyles\" | \"soloSelectedNodeUid\" | \"currentlyEditingNodeLineage\"> = {currentDocSelection: versionExtraData.currentDocSelection};\n\n        const newActiveStyles = versionExtraData.newActiveStyles || [];\n        const newInactiveStyles = versionExtraData.newInactiveStyles || [];\n\n        if (currentDocSelectionDetail.currentDocSelection) {\n          // console.log(currentDocSelectionDetail.currentDocSelection);\n\n          currentDocSelectionDetail.activeStylesFromChanges = RangeInlineJSON.stylesCoveringDocSelection(mergedData, currentDocSelectionDetail.currentDocSelection) as Record<StyleName, StyleRange>;\n          currentDocSelectionDetail.activeStyles = xor(R.keys(currentDocSelectionDetail.activeStylesFromChanges).concat(newActiveStyles), newInactiveStyles);\n\n          if (currentDocSelectionDetail.currentDocSelection.start.uid === currentDocSelectionDetail.currentDocSelection.end.uid) {\n            currentDocSelectionDetail.soloSelectedNodeUid = currentDocSelectionDetail.currentDocSelection.start.uid;\n            currentDocSelectionDetail.currentlyEditingNodeLineage = findNodeLineageByUid(mergedData, currentDocSelectionDetail.soloSelectedNodeUid);\n          }\n        }\n\n        const currentMenuDetail: Pick<EditingContextExtra, \"currentMenu\" | \"currentMenuNode\"> = {currentMenu: versionExtraData.currentMenu}\n        if (currentMenuDetail.currentMenu && 'uid' in currentMenuDetail.currentMenu) {\n          currentMenuDetail.currentMenuNode = findNodeByUid(mergedData, currentMenuDetail.currentMenu.uid);\n        }\n\n        const allowedMode = userContext.permissions.allowedEditMode && trackChangesEditModes[`${userContext.permissions.allowedEditMode.toUpperCase()}_MODE`]\n\n        editingContextExtra = {\n          rootUid: mergedData.uid,\n          changesDisplayMode: changesDisplayMode,\n          isActiveEditData: editingContext.isVersionEditActivated && this.props.unsavedChanges,\n          isSyncing: !!versionSyncMeta.isSyncing,\n          savingErrors: versionSyncMeta.errors || [],\n          setVersionId: this.props.setVersionId,\n          trackChangesEditMode: versionExtraData.trackChangesEditMode || allowedMode || trackChangesEditModes.EDITING_MODE,\n          setTrackChangesEditMode: this.props.setTrackChangesEditMode,\n          setChangesDisplayMode: this.props.setChangesDisplayMode,\n          save: this.props.save,\n          isAutoSaveOn: !!this.state.autoSaveInterval,\n          toggleAutoSave: this.toggleAutoSave.bind(this),\n          publish: this.publish.bind(this),\n          currentRO: currentRO,\n          undo: this.props.undo,\n          redo: this.props.redo,\n          setCurrentRO: setCurrentRO,\n          canUndo: undoRedo.canUndo(this.props.versionExtraData.undoRedoState),\n          canRedo: undoRedo.canRedo(this.props.versionExtraData.undoRedoState),\n          deleteMedia: this.props.deleteMedia,\n          updateRoName: this.props.updateRoName,\n          getUploadCountByMediaType: this.props.getUploadCountByMediaType,\n          changeUploadCountForMediaTypeByValue: this.props.changeUploadCountForMediaTypeByValue,\n          findText: versionExtraData.findText,\n          replaceText: versionExtraData.replaceText,\n          setFindText: this.props.setFindText,\n          setReplaceText: this.props.setReplaceText,\n          setVersionCoverImage: this.props.setVersionCoverImage,\n          toggleStyle: this.props.toggleStyleAtSelection,\n          newActiveStyles: newActiveStyles,\n          newInactiveStyles: newInactiveStyles,\n          setNewActiveStyles: this.props.setNewActiveStyles,\n          setNewInactiveStyles: this.props.setNewInactiveStyles,\n          currentMenu: versionExtraData.currentMenu,\n          cci_status: mergedData.cci_status,\n          cciStatusOptions: cciStatusOptions,\n          assessmentStatus: assessmentStatus,\n          assessmentQuestion: mergedData.assessment_question || assessmentQuestion,\n          assessmentQuestionEditingData: assessmentQuestionEditingData,\n          assessmentQuestionStatistics: assessmentQuestionStatistics,\n          assessmentQuestionSignatureVersion: assessmentQuestionSignatureVersion,\n          assessmentQuestionSignatureVersionId: assessmentQuestionSignatureVersionId,\n          assessmentQuestionClinicalLocationOptions: assessmentQuestionClinicalLocationOptions,\n          assessmentQuestionFinalDiagnosisOptions: assessmentQuestionFinalDiagnosisOptions,\n          assessmentQuestionPatientAgeOptions: assessmentQuestionPatientAgeOptions,\n          assessmentQuestionClinicalDisciplineOptions: assessmentQuestionClinicalDisciplineOptions,\n          assessmentQuestionClinicalExcellenceOptions: assessmentQuestionClinicalExcellenceOptions,\n          assessmentQuestionSystemOptions: assessmentQuestionSystemOptions,\n          assessmentQuestionClinicalFocusOptions: assessmentQuestionClinicalFocusOptions,\n          assessmentQuestionQuestionUseOptions: assessmentQuestionQuestionUseOptions,\n          usedAvailableForm: this.props.usedAvailableForm,\n          currentAssessmentQuestionEditingData: currentDocSelectionDetail.soloSelectedNodeUid && currentDocSelectionDetail.soloSelectedNodeUid === assessmentQuestionEditingData?.learning_objective_uid ? assessmentQuestionEditingData : null,\n          possiblePrerequisiteDocuments: this.props.possiblePrerequisiteDocuments,\n          activeEditors: activeEditors,\n          lockState: lockState,\n          lockIfFree: this.lockIfFree.bind(this),\n          unlockIfOwned: this.unlockIfOwned.bind(this),\n          forceLock: this.forceLock.bind(this),\n          setAssessmentQuestionData: (values) => editingContext.addChange(newSetKeyValueChange(rootUid, \"assessment_question\", values)),\n          setAllowLearningObjectivesEdit: this.props.setAllowLearningObjectivesEdit,\n          ...currentMenuDetail,\n          ...currentDocSelectionDetail,\n        };\n      } else {\n        editingContext = weakMemoizedGenerateEditingContextAllFalse(\n          userContext.id,\n          version.changeAuthorIds,\n        );\n        editingContextExtra = {} as EditingContextExtra; // TODO: Remove as\n      }\n\n      /////////////////////\n      // Mapping Context //\n      /////////////////////\n      const rootUid = mergedData.uid;\n      let mappingContext;\n      if (editingContext.shouldShowEditor) {\n        const isAssessmentQuestion = documentContext.kind === \"assessment_question_mcq\";\n        if (isAssessmentQuestion) {\n          mappingContext = {\n            ...mappingData,\n            proposedLearningObjectiveReusableObjectId: mergedData.proposedLearningObjectiveReusableObjectId,\n            setLearningObjectiveReusableObjectId: (loRoId: number) => editingContext.addChange(newSetKeyValueChange(rootUid, \"proposedLearningObjectiveReusableObjectId\", loRoId)),\n            proposedSystem: mergedData.system,\n            setSystem: (loros: string) => editingContext.addChange(newSetKeyValueChange(rootUid, \"system\", loros)),\n            proposedClinicalFocus: mergedData.clinical_focus || \"\",\n            setClinicalFocus: (loros: string) => editingContext.addChange(newSetKeyValueChange(rootUid, \"clinical_focus\", loros)),\n          }\n        } else {\n          mappingContext = {\n            ...mappingData,\n            learningObjectives: localLearningObjectives.map((lo) => lo.mergedData),\n            proposedLearningObjectiveReusableObjects: mergedData.proposedLearningObjectiveReusableObjects,\n            setProposedLearningObjectiveReusableObjects: (loros) => editingContext.addChange(newSetKeyValueChange(rootUid, \"proposedLearningObjectiveReusableObjects\", loros)),\n          }\n        }\n      }\n\n      /////////////////////\n      // PROJECT CONTEXT //\n      /////////////////////\n      const projectContext = {\n        currentAssignmentId: this.props.currentAssignmentId,\n        nextVersionId: this.props.nextVersionId,\n        activeMemberId: this.props.activeMemberId,\n        activeMemberName: this.props.activeMemberName,\n        projectProductionAssociate: this.props.projectProductionAssociate,\n        activeUserId: this.props.activeUserId,\n        checklistContents: this.props.checklistContents,\n      }\n\n      ////////////////////////////\n      // ReasoningTool Context //\n      //////////////////////////\n      const reasoningToolContext = {\n        ...this.props.reasoningToolUi,\n        togglePanel: this.props.togglePanel,\n        togglePanelDeleting: this.props.togglePanelDeleting,\n        panelNodeEditStart: this.props.panelNodeEditStart,\n        panelNodeEditEnd: this.props.panelNodeEditEnd,\n      };\n\n      //////////////////////\n      // HotKey Handlers //\n      ////////////////////\n      let keyHandlers;\n      if (editingContext.shouldShowEditor) {\n        keyHandlers = {\n          undo: (event?: KeyboardEvent) => {this.props.undo(); return false;},\n          redo: (event?: KeyboardEvent) => {this.props.redo(); return false;},\n          save: (event?: KeyboardEvent) => {this.props.save(); return false;},\n          modReturn: (event?: KeyboardEvent) => {\n            if (window.document.activeElement && window.document.activeElement instanceof HTMLElement) {window.document.activeElement.blur();}\n            this.props.clearCurrentDocSelection();\n            return false;\n          },\n          tab: (event?: KeyboardEvent) => !this.props.tabAtSelection(),\n          shiftTab: (event?: KeyboardEvent) => !this.props.shiftTabAtSelection(),\n          bold: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"bold\"),\n          italic: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"italic\"),\n          underline: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"underline\"),\n          superscript: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"superscript\"),\n          subscript: (event?: KeyboardEvent) => !this.props.toggleStyleAtSelection(\"subscript\"),\n          find: (event?: KeyboardEvent) => () => {editingContext.setCurrentMenu(FIND_AND_REPLACE); return false;},\n        }\n      }\n\n      //////////////////////\n      // Integration Info //\n      //////////////////////\n      const integrationInfo = weakMemoizedGenerateIntegrationInfo(\n        mergedData.final_diagnoses,\n        mergedData.clinical_excellence,\n        mergedData.basic_science_disciplines,\n      )\n\n      const HotKeysAnyType = HotKeys;\n      return (\n        <HotKeysAnyType keyMap={keyMap} handlers={keyHandlers}>\n          <NewEditDoc\n            key=\"doc\"\n            documentContext={documentContext}\n            currentVersion={currentVersion}\n            userContext={userContext}\n            displayContext={displayContext}\n            editingContext={editingContext}\n            editingContextExtra={editingContextExtra}\n            mappingContext={mappingContext}\n            mediaContext={mediaContext}\n            reasoningToolContext={reasoningToolContext}\n            integrationInfo={integrationInfo}\n            projectContext={projectContext}\n            mergedData={mergedData}\n            changeData={version.changeData}\n            displayUid={displayUid}\n            documentSetId={documentSetId}\n            changeSummaries={versionExtraData.changeSummaries}\n            userState={documentUserState?.state}\n            featureFlag={featureFlag}\n            isEditor={this.props.isEditor}\n            allLearningObjectiveOptions={allLearningObjectiveOptions}\n            learningObjectiveActionsGenerator={this.props.learningObjectiveActionsGenerator}\n          />\n          {editingContext.isEditing && editingContextExtra.isActiveEditData && <Beforeunload onBeforeunload={() => 'You’ll lose your data!'} />}\n        </HotKeysAnyType>\n      );\n    } else {\n      return <GenLoadingSpinner />;\n    }\n  }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps, mergeProps)(NewEditDocContainer);\n","import { batch } from \"react-redux\";\n\nimport {\n  newChangeTextAndNodesChange\n} from \"../changes\";\n\nimport * as selection from \"../selection\";\n\nimport {\n} from \"../Functions/base\";\n\nexport default function insertAtSelection(newText, {\n  data,\n  variantDataById,\n  currentMenu,\n  addChanges,\n  setCurrentDocSelection,\n  newActiveStyles = [],\n  newInactiveStyles = [],\n}: EditActionContext) {\n  const currentDocSelection = selection.getDocSelection();\n\n  if (!currentDocSelection || currentMenu || newText.length === 0) { return false; }\n\n  // ADD STYLE RANGES\n  // FIND NODE AND OFFSET\n  // GET CURRENT STYLES\n  // ADD CHANGED STYLES\n\n  const initalStyles = newActiveStyles.map(style => ({\n    type: style,\n    range: {\n      start: 0,\n      end: newText.length,\n    }\n  }))\n\n  const newStyledText = {\n    text: newText,\n    styleRanges: initalStyles\n  }\n\n  batch(() => {\n    addChanges([newChangeTextAndNodesChange(currentDocSelection, newStyledText)], currentDocSelection.variantId);\n    setCurrentDocSelection(selection.shiftDocSelectionBy(selection.collapseDocSelectionToStart(currentDocSelection), newText.length));\n  });\n\n  return true;\n}\n","import * as R from \"ramda\";\n\nimport * as selection from \"../selection\";\n\nimport { batch } from \"react-redux\";\n\nimport {\n  newSetKeyValueChange,\n} from \"../changes\";\n\nimport {\n  findNodeLineageByUid,\n} from \"../Functions/base\";\n\nexport default function tabAtSelection({\n  data,\n  variantDataById,\n  currentMenu,\n  addChanges,\n  setCurrentDocSelection,\n  nodeDefinitions,\n}: EditActionContext) {\n  const currentDocSelection = selection.getDocSelection();\n\n  if (!currentDocSelection || currentMenu) { return false; }\n\n  const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n  const {\n    uid: startUID,\n    contentKey: startKey,\n    index: startIndex,\n  } = currentDocSelection.start;\n\n  const {\n    uid: endUID,\n    contentKey: endKey,\n    index: endIndex,\n  } = currentDocSelection.end;\n\n  if (selection.isInOneInline(currentDocSelection)) {\n    const nodeLineage = findNodeLineageByUid(dataToUse, startUID);\n    const nodeLineageToListItem = R.dropLastWhile((node: any) => node.type !== \"listItem\", nodeLineage); // TODO: remove any\n    const listItem = R.last(nodeLineageToListItem);\n\n    if (listItem) {\n      batch(() => {\n        addChanges([newSetKeyValueChange(listItem.uid, \"listIndentation\", ((listItem.listIndentation || 0) + 1))], currentDocSelection.variantId);\n      });\n    }\n  }\n\n  return true;\n}\n","import * as R from \"ramda\";\n\nimport * as selection from \"../selection\";\n\nimport { batch } from \"react-redux\";\n\nimport {\n  newSetKeyValueChange,\n} from \"../changes\";\n\nimport {\n  findNodeLineageByUid,\n} from \"../Functions/base\";\n\nexport default function shiftTabAtSelection({\n  data,\n  variantDataById,\n  currentMenu,\n  addChanges,\n  setCurrentDocSelection,\n  nodeDefinitions,\n}: EditActionContext) {\n  const currentDocSelection = selection.getDocSelection();\n\n  if (!currentDocSelection || currentMenu) { return false; }\n\n  const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n  const {\n    uid: startUID,\n    contentKey: startKey,\n    index: startIndex,\n  } = currentDocSelection.start;\n\n  const {\n    uid: endUID,\n    contentKey: endKey,\n    index: endIndex,\n  } = currentDocSelection.end;\n\n  if (selection.isInOneInline(currentDocSelection)) {\n    const nodeLineage = findNodeLineageByUid(dataToUse, startUID);\n    const nodeLineageToListItem = R.dropLastWhile((node: any) => node.type !== \"listItem\", nodeLineage); // TODO: Remove any\n    const listItem = R.last(nodeLineageToListItem);\n\n    if (listItem) {\n      batch(() => {\n        addChanges([newSetKeyValueChange(listItem.uid, \"listIndentation\", Math.max((listItem.listIndentation || 0) - 1, 0))], currentDocSelection.variantId);\n      });\n    }\n  }\n\n  return true;\n}\n","import {\n  newAddStyleChange,\n  newDeleteStyleChange,\n} from \"../changes\";\n\nimport {} from \"../Functions/base\";\n\nimport * as selection from \"../selection\";\n\nimport * as R from \"ramda\";\n\nimport * as RangeInlineJSON from \"../Functions/RangeInlineJSON\";\n\nimport {\n  xor,\n} from \"lodash\";\n\nexport default function toggleStyleAtSelection(style: StyleName, editActionContext: EditActionContext) {\n  const {\n    data,\n    variantDataById,\n    currentMenu,\n    addChanges,\n    setCurrentDocSelection,\n    nodeDefinitions,\n    newActiveStyles = [],\n    newInactiveStyles = [],\n    setNewActiveStyles,\n    setNewInactiveStyles,\n  } = editActionContext;\n\n  const currentDocSelection = selection.getDocSelection();\n\n  if (!currentDocSelection || currentMenu) { return false; }\n\n  const dataToUse = currentDocSelection.variantId ? variantDataById[currentDocSelection.variantId] : data;\n\n  const activeStylesFromChanges = RangeInlineJSON.stylesCoveringDocSelection(dataToUse, currentDocSelection);\n  const activeStyles = xor(R.keys(activeStylesFromChanges).concat(newActiveStyles), newInactiveStyles);\n\n  if (selection.isCollapsed(currentDocSelection)) {\n    if (!R.keys(activeStylesFromChanges).includes(style)) {\n      setNewActiveStyles(xor(newActiveStyles, [style]));\n    } else {\n      setNewInactiveStyles(xor(newInactiveStyles, [style]));\n    }\n  } else {\n    const {\n      uid: startUID,\n      contentKey: startKey,\n      index: startIndex,\n    } = currentDocSelection.start;\n\n    const {\n      uid: endUID,\n      contentKey: endKey,\n      index: endIndex,\n    } = currentDocSelection.end;\n\n    const newStyleChange = activeStyles.includes(style) ? newDeleteStyleChange : newAddStyleChange;\n\n    addChanges([newStyleChange(currentDocSelection, style)], currentDocSelection.variantId);\n  }\n\n  return true;\n}\n","import * as React from \"react\";\n\nimport { UnwrappedNewEditDocApp } from \"../../../startup/NewEditDocApp\";\nimport NewEditDocContainer from \"../Container\";\nimport analytics from \"../../../../application/analytics\";\n\ninterface TeachingPointModalProps {\n  currentUser: User;\n  defaultChangesDisplayMode: ChangesDisplayMode;\n  displayUid: string;\n  document_id: number;\n  documentId: number;\n  isAdmin: boolean;\n  permissions: AqPermissions;\n  publish_version_id: number;\n  skipProvider: boolean;\n  teaching_point_uid: string;\n  title: string;\n  versionId: number;\n  itemResponseId: number;\n};\n\ninterface TeachingPointModalState {\n  isOpen: boolean;\n};\n\nexport default class TeachingPointModal extends React.Component<TeachingPointModalProps, TeachingPointModalState> {\n  constructor(props: TeachingPointModalProps) {\n    super(props);\n\n    this.state = {isOpen: false};\n  }\n\n  onClick(e: React.MouseEvent<HTMLAnchorElement>) {\n    e.preventDefault();\n    if(!this.state.isOpen) {\n      analytics.track(\"click_teaching_point_link\", { page: window.location.href, source: 'Calibrate Reports', item_response_id: this.props.itemResponseId })\n    }\n    this.setState({isOpen: !this.state.isOpen});\n  }\n\n  getEmbeded() {\n    if (this.props.skipProvider) {\n      return <NewEditDocContainer\n        docType=\"ReusableObject\"\n        documentId={this.props.documentId || this.props.document_id}\n        versionId={this.props.versionId || this.props.publish_version_id}\n        currentUser={this.props.currentUser}\n        isAdmin={this.props.isAdmin}\n        permissions={this.props.permissions}\n        defaultChangesDisplayMode={this.props.defaultChangesDisplayMode}\n        displayUid={this.props.displayUid || this.props.teaching_point_uid}\n      />\n    } else {\n      return <UnwrappedNewEditDocApp\n        docType=\"ReusableObject\"\n        documentId={this.props.documentId || this.props.document_id}\n        versionId={this.props.versionId || this.props.publish_version_id}\n        currentUser={this.props.currentUser}\n        isAdmin={this.props.isAdmin}\n        permissions={this.props.permissions}\n        defaultChangesDisplayMode={this.props.defaultChangesDisplayMode}\n        displayUid={this.props.displayUid || this.props.teaching_point_uid}\n        isEmbeded\n      />\n    }\n  }\n\n  render() {\n    return (\n      <span>\n        <a className=\"teaching-point-link\" href=\"#\" onClick={this.onClick.bind(this)}>{this.props.title}</a>\n        {this.state.isOpen && <div className=\"gen-modal teaching-point-modal\">\n          <div className=\"gen-modal-panel\">\n            <div className=\"teaching-point-modal-header\">\n              <span className=\"close-x\" onClick={this.onClick.bind(this)}>X</span>\n            </div>\n            {this.getEmbeded()}\n            <button className=\"actionBtn\" onClick={this.onClick.bind(this)}>Close</button>\n          </div>\n        </div>}\n      </span>\n    );\n  }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Pagify from 'react-pagify';\nimport segmentize from 'segmentize';\n\nconst Paginator = ({ pagination, pages, onSelect }) => (\n  <div className=\"pagination\">\n    <Pagify.Context\n      className=\"pagify-pagination\"\n      segments={segmentize({\n        page: pagination.page,\n        pages,\n        beginPages: 3,\n        endPages: 3,\n        sidePages: 2\n      })}\n      onSelect={onSelect}\n    >\n      <Pagify.Button page={pagination.page - 1}>Previous</Pagify.Button>\n\n      <Pagify.Segment field=\"beginPages\" />\n\n      <Pagify.Ellipsis\n        className=\"ellipsis\"\n        previousField=\"beginPages\"\n        nextField=\"previousPages\"\n      />\n\n      <Pagify.Segment field=\"previousPages\" />\n      <Pagify.Segment field=\"centerPage\" className=\"selected\" />\n      <Pagify.Segment field=\"nextPages\" />\n\n      <Pagify.Ellipsis\n        className=\"ellipsis\"\n        previousField=\"nextPages\"\n        nextField=\"endPages\"\n      />\n\n      <Pagify.Segment field=\"endPages\" />\n\n      <Pagify.Button page={pagination.page + 1}>Next</Pagify.Button>\n    </Pagify.Context>\n  </div>\n);\nPaginator.propTypes = {\n  pagination: PropTypes.object,\n  pages: PropTypes.number,\n  onSelect: PropTypes.func\n};\n\nexport default Paginator;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst PerPage = ({ value, onChange }) => (\n  <div>\n    <span>Per page:</span>\n    <input\n      type=\"text\"\n      defaultValue={value}\n      onChange={e => onChange(e.target.value)}\n    />\n  </div>\n);\nPerPage.propTypes = {\n  value: PropTypes.number,\n  onChange: PropTypes.func\n};\n\nexport default PerPage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport * as search from 'searchtabular';\nimport PerPage from './PerPage';\n\nconst PrimaryControls = ({\n  perPage, columns, rows, column, query,\n  onPerPage, onSearch, onColumnChange,\n  show_pagination,\n  ...props\n}) => (\n  <div {...props}>\n    {show_pagination &&\n      <div className=\"per-page-container\">\n        <PerPage value={perPage} onChange={onPerPage}/>\n      </div>\n    }\n    <div className=\"search-container\">\n      <span>Search</span>\n      <search.Field\n        column={column}\n        query={query}\n        columns={columns}\n        rows={rows}\n        onChange={onSearch}\n        onColumnChange={onColumnChange}\n      />\n    </div>\n  </div>\n);\nPrimaryControls.propTypes = {\n  perPage: PropTypes.number,\n  columns: PropTypes.array,\n  rows: PropTypes.array,\n  column: PropTypes.string,\n  query: PropTypes.object,\n  onPerPage: PropTypes.func,\n  onSearch: PropTypes.func,\n  onColumnChange: PropTypes.func\n};\n\nexport default PrimaryControls;\n","import React from 'react';\nimport * as edit from 'react-edit';\nimport * as sort from 'sortabular';\nimport {\n  cloneDeep, findIndex\n} from 'lodash';\n\nfunction sortHeader(sortable, getSortingColumns) {\n  return (value, { columnIndex }) => {\n    const sortingColumns = getSortingColumns() || [];\n\n    const tooltipText = sortingColumns[columnIndex] && sortingColumns[columnIndex].tooltipText;\n    return (\n      <div style={{ display: 'inline' }}>\n        <span className=\"value\">{value}</span>\n        {tooltipText &&\n          <span className=\"tooltip2 question-tooltip\"><span className=\"tooltiptext\">{tooltipText}</span></span>\n        }\n        {React.createElement(\n          'span',\n          sortable(\n            value,\n            {\n              columnIndex\n            },\n            {\n              style: { float: 'right' }\n            }\n          )\n        )}\n        {sortingColumns[columnIndex] &&\n        <span className=\"sort-order\" style={{ marginLeft: '0.5em', float: 'right' }}>\n            {sortingColumns[columnIndex].position + 1}\n          </span>\n        }\n      </div>\n    );\n  };\n}\n\nexport function sortingHeader() {\n  const sortable = sort.sort({\n    getSortingColumns: () => this.state.sortingColumns || [],\n    onSort: selectedColumn => {\n      this.setState({\n        sortingColumns: sort.byColumn({ // sort.byColumns would work too\n          sortingColumns: this.state.sortingColumns,\n          selectedColumn\n        })\n      });\n    }\n  });\n  return sortHeader(sortable, () => this.state.sortingColumns);\n}\n\nexport function editingCell(controlling_attribute) {\n  return edit.edit({\n    isEditing: ({ columnIndex, rowData }) => columnIndex === rowData.editing,\n    onActivate: ({ columnIndex, rowData }) => {\n      const index = findIndex(this.state.rows, { id: rowData.id });\n      const rows = cloneDeep(this.state.rows);\n\n      if (!controlling_attribute || rows[index][controlling_attribute]) {\n        rows[index].editing = columnIndex;\n      }\n\n      this.setState({ rows });\n    },\n    onValue: ({ value, rowData, property }) => {\n      const index = findIndex(this.state.rows, { id: rowData.id });\n      const rows = cloneDeep(this.state.rows);\n\n      rows[index][property] = value;\n      rows[index].editing = false;\n\n      this.setState({ rows });\n    }\n  });\n}\n\nexport function Checkbox(ref) {\n  var value = ref.value,\n    onValue = ref.onValue;\n\n  onValue(!value);\n\n  return null;\n};\n\nexport function AddNameAttribute(property, params, prefix, other) {\n  return <div>\n    <input\n      type=\"hidden\"\n      name={`${prefix}[][${property}]`}\n      value={params.rowData[property]}\n    ></input>\n    {other}\n  </div>\n};\n\nexport function ActionLink(toBeWrapped, extra, action, switch_key) {\n  if (extra.rowData[switch_key]) {\n    return <a href=\"javascript: void(0)\" data-action={action}>{toBeWrapped}</a>\n  } else {\n    return toBeWrapped\n  }\n};\n\nexport function Button(type, innards, action, target, className, disabled) {\n  return <button className={className} type={type} data-target={target} data-action={action} disabled={disabled}>{innards}</button>\n};\n","import React from 'react';\nimport AsyncSelect from 'react-select/async';\nimport * as edit from 'react-edit';\nimport * as search from 'searchtabular';\nimport {\n  editingCell,\n  sortingHeader,\n  ActionLink,\n  AddNameAttribute,\n  Button,\n  Checkbox\n} from './helpers/table_def_funcs';\nimport TeachingPointModal from 'NewEditDoc/TeachingPointModal/component'\nimport DragDrop from 'app/assets/images/drag_and_drop.svg'\n\nconst ROSTERING_TIMING_OPTIONS = [\n  {name: 'Standard', value: 1.0},\n  {name: '1.5x'    , value: 1.5},\n  {name: '2.0x'    , value: 2.0}\n];\n\nconst CASE_REPORT_OPTIONS = [\n  {name: 'Select Report', value: 'select_report'},\n  {name: 'Project Status Report', value: 'project_status_report'},\n  {name: 'Project Workflow Report', value: 'project_workflow_report'},\n  {name: 'Summary of Edits Report', value: 'summary_of_edits_report'},\n  {name: 'Cases Content Report', value: 'cases_content_report'},\n  {name: 'Project Editors Report', value: 'project_editors_report'},\n  {name: 'Comments Report', value: 'comments_report'}\n];\n\nconst ASSESSMENT_REPORT_OPTIONS = [\n  {name: 'Select Report', value: 'select_report'},\n  {name: 'Project Status Report', value: 'project_status_report'},\n  {name: 'Project Workflow Report', value: 'project_workflow_report'},\n  {name: 'Summary of Edits Report', value: 'summary_of_edits_report'},\n  {name: 'Project Editors Report', value: 'project_editors_report'}\n];\n\nconst CCI_PROJECT_ROLE_OPTIONS = [\n  {name: 'Reviewer', value: 'reviewer'},\n  {name: 'Case Editor', value: 'case_editor'},\n  {name: 'Production Associate', value: 'production_associate'},\n  {name: 'Associate Editor', value: 'associate_editor'},\n  {name: 'Assessment Lead', value: 'assessment_lead'},\n  {name: 'Editor-in-Chief', value: 'editor_in_chief'}\n];\n\nconst FLAGGED_ASSESSMENT_PROJECT_ROLE_OPTIONS = [\n  {name: 'Primary Editor', value: 'primary_editor'},\n  {name: 'Production Associate', value: 'production_associate'},\n  {name: 'Dyad Reviewer', value: 'dyad_reviewer'},\n  {name: 'Group Reviewer', value: 'group_reviewer'},\n  {name: 'Assessment Lead', value: 'assessment_lead'},\n  {name: 'Editor-in-Chief', value: 'editor_in_chief'},\n  {name: 'Copy Editor', value: 'copy_editor'}\n];\n\nconst NEW_ASSESSMENT_PROJECT_ROLE_OPTIONS = [\n  {name: 'Author', value: 'author'},\n  {name: 'Production Associate', value: 'production_associate'},\n  {name: 'Dyad Reviewer', value: 'dyad_reviewer'},\n  {name: 'Group Reviewer', value: 'group_reviewer'},\n  {name: 'Assessment Lead', value: 'assessment_lead'},\n  {name: 'Editor-in-Chief', value: 'editor_in_chief'},\n  {name: 'Copy Editor', value: 'copy_editor'}\n];\n\nexport const TABLE_DEFS = {\n  project_editors_report_table: function() {\n    const editable = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'first_name',\n        header: {\n          label: 'First Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'last_name',\n        header: {\n          label: 'Last Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'email',\n        header: {\n          label: 'Email',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'project_role',\n        header: {\n          label: 'Project Role',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'course',\n        header: {\n          label: 'Course',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'project_name',\n        header: {\n          label: 'Project Status Report',\n        },\n        cell: {\n          formatters: [\n            (project_name, extraParameters) => {\n              if (extraParameters.rowData.project_status_report_url === \"n/a\") {\n                return \"n/a\"\n              } else {\n                return <a href={extraParameters.rowData.project_status_report_url} target='_blank'>{project_name}</a>\n              }\n            }\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: true\n      },\n    ];},\n\n  new_item_authors_report_table: function(){\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'author_name',\n        header: {\n          label: 'Author\\'s Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'course',\n        header: {\n          label: 'Course',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'case',\n        header: {\n          label: 'Case #',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'project_name',\n        header: {\n          label: 'Project Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'item_label',\n        header: {\n          label: 'Item Label',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'author_start_date',\n        header: {\n          label: 'Author\\'s Start Date',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'author_completion_date',\n        header: {\n          label: 'Author\\'s Completion Date',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'days_author_start_to_complete',\n        header: {\n          label: '# Days Author Start to Complete',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n    ];},\n\n  student_performance_report: function() {\n    const editable = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'teaching_point_title',\n        header: {\n          label: 'Teaching Point',\n          formatters: [sortableHeader],\n        },\n        cell: {\n          formatters: [\n            (teaching_point_title, extraParameters) => {\n              return (\n                <TeachingPointModal\n                  title={teaching_point_title}\n                  document_id={extraParameters.rowData.document_id}\n                  publish_version_id={extraParameters.rowData.publish_version_id}\n                  teaching_point_uid={extraParameters.rowData.teaching_point_uid}\n                />\n              )\n            }\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'system',\n        header: {\n          label: 'System',\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [search.highlightCell],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'learning_objective',\n        header: {\n          label: 'Learning Objective',\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [search.highlightCell]\n        },\n        visible: true\n      },\n      {\n        property: 'accuracy',\n        header: {\n          label: 'Accuracy',\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [search.highlightCell],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'certainty',\n        header: {\n          label: 'Certainty',\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [search.highlightCell],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'clinical_learning_calibration',\n        header: {\n          label: 'Clinical Learning Calibration',\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [search.highlightCell],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'case_completed',\n        header: {\n          label: 'Case Completed',\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [search.highlightCell],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'case_name',\n        header: {\n          label: 'Case',\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [\n              (case_name, extraParameters) => <a href={extraParameters.rowData.case_path} target='_blank'>{case_name}</a>\n            ]\n        },\n        visible: true\n      }\n    ];},\n\n  case_content_report_table: function() {\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'course_name',\n        header: {\n          label: 'Course',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 300\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'case_number',\n        header: {\n          label: 'Case #',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 100\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'case_title',\n        header: {\n          label: 'Case Title',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 200\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'word_count_published_version',\n        header: {\n          label: 'Word count (published)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'word_count_SR_version',\n        header: {\n          label: 'Word count (SR)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_pages_published_version',\n        header: {\n          label: '# Pages (published)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_pages_SR_version',\n        header: {\n          label: '# Pages (SR)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_teaching_points_published_version',\n        header: {\n          label: '# Teaching Points (published)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 200\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_teaching_points_SR_version',\n        header: {\n          label: '# Teaching Points (SR)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 200\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_deep_dives_published_version',\n        header: {\n          label: '# Deep Dives (published)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_deep_dives_SR_version',\n        header: {\n          label: '# Deep Dives (SR)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_engagement_questions_published_version',\n        header: {\n          label: '# Engagement Questions (published)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_engagement_questions_SR_version',\n        header: {\n          label: '# Engagement Questions (SR)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_SAQs_published_version',\n        header: {\n          label: '# SAQs (published)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'number_of_SAQs_SR_version',\n        header: {\n          label: '# SAQs (SR)',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n              width: 150\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n    ];},\n\n  project_team_table: function() {\n    const editable = editingCell.call(this);\n    const deleteAction = this.props.delete_action\n    const showEditColumns = this.props.show_edit_columns\n    const loadOptions = (inputValue, callback) => {\n      let url = new URL(this.props.editors_url)\n      url.searchParams.set('q', inputValue)\n\n      fetch(url)\n        .then(response => response.json())\n        .then(editorData => {\n          editorData = [{label: '<none>', value: null}, ...editorData]\n          callback(editorData)\n        })\n    };\n\n    this.handleInputChange = (newValue) => {\n      const inputValue = newValue.replace(/\\W/g, '');\n      this.setState({ inputValue });\n      return inputValue;\n    };\n\n    this.handleEditors = (newValue, url) => {\n      $.ajax({\n        url: url,\n        type: 'PATCH',\n        data: { user_id: newValue.value },\n        async: false,\n        dataType: 'json',\n        success: function (response) {\n        },\n        error: function(message) {\n          alert(message.responseText);\n        }\n      });\n    }\n\n    let projectRoleOptions = []\n    if(this.props.project_type == \"Projects::CaseProject\"){\n      projectRoleOptions = CCI_PROJECT_ROLE_OPTIONS\n    }else if(this.props.project_type == \"Projects::FlaggedAssessmentProject\"){\n      projectRoleOptions = FLAGGED_ASSESSMENT_PROJECT_ROLE_OPTIONS\n    }else{\n      projectRoleOptions = NEW_ASSESSMENT_PROJECT_ROLE_OPTIONS\n    }\n\n    return [\n      {\n        header: {},\n        cell: {\n          formatters: [\n            (_, extra) => {\n              return <img src={DragDrop} alt=\"Drag and Drop Button\"/>\n            }\n          ]\n        },\n        props: {\n          style: {\n            width: 50,\n            backgroundColor: '#EFEFEF'\n          },\n          className: \"button-column drag-me-only\"\n        },\n        visible: true\n      },\n      {\n        property: 'status',\n        header: {\n          label: 'Status',\n          formatters: []\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (name, extraParameters) => <span style= {{backgroundColor: extraParameters.rowData.status == 'completed' ? '#FDFD96' : extraParameters.rowData.status == 'active' ? '#C1E1C1' : null  }}> {extraParameters.rowData.status }</span>\n          ],\n          props: {}\n        },\n        props: {\n          style: {\n            width: 130\n          },\n        },\n        visible: true\n      },\n      {\n        property: 'role',\n        header: {\n          label: 'Project Role',\n          formatters: [],\n          props: {}\n        },\n        cell: {\n          transforms: [\n            editable(\n              edit.dropdown({\n                options: projectRoleOptions,\n              }))],\n          formatters: [\n            (role, extraParameters) => AddNameAttribute(\n              'role',\n              extraParameters,\n              this.props.name_prefix,\n              <span className=\"dropdown-cell\">{projectRoleOptions.find(elem => elem.value == extraParameters.rowData.role).name}</span>\n            )\n          ]\n        },\n        props: {\n          style: {\n            width: 280\n          },\n        },\n        visible: true\n      },\n      {\n        property: 'user_label',\n        header: {\n          label: 'User',\n          formatters: [],\n          props: {\n            style: {\n              width: '60%'\n            },\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (val, extra) => {\n              return <AsyncSelect\n                cacheOptions\n                loadOptions={loadOptions}\n                defaultOptions\n                name={this.props.team_member_user_id_field_name}\n                defaultValue={{label: extra.rowData['user_label'], value: extra.rowData['user_id']}}\n                // onInputChange={this.handleInputChange}\n                // onChange={(value) => this.handleEditors(value, extra.rowData.update_member_path)}\n              />\n            }\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'member_id',\n        header: {\n          label: '',\n          formatters: [],\n          props: {style: {\n            display: 'none'\n            },\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (val, extra) => {\n              return <AsyncSelect\n                name={this.props.member_id_field_name}\n                defaultValue={{label: extra.rowData['member_id'], value: extra.rowData['member_id']}}\n                style=\"display:none;\"\n              />\n            }\n          ],\n          props: {style: {\n            display: 'none'\n            },\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        header: {\n          label: 'Editor`s Checklist',\n        },\n        cell: {\n          formatters: [\n            (name, extraParameters) => <a href={extraParameters.rowData.editor_checklist_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            width: 85,\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: showEditColumns\n      },\n      {\n        header: {\n          label: 'Edit assignments',\n        },\n        cell: {\n          formatters: [\n            //todo create modal for edit assignments\n            (name, extraParameters) => <a href={extraParameters.rowData.edit_assignments_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            width: 110,\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: showEditColumns\n      },\n      {\n        header: {},\n        cell: {\n          formatters: [\n            (_, extra) => {\n              return <a data-action={deleteAction} style={{color: 'red'}}>X Delete</a>\n            }\n          ]\n        },\n        props: {\n          style: {\n            width: 85\n          },\n          className: \"button-column\"\n        },\n        visible: true\n      }\n    ];},\n\n  project_question_set_table: function() {\n    const editable = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n    return [\n      {\n        property: 'selected',\n        header: {\n          label: 'Select One',\n          formatters: [],\n          props: {\n            style: {\n              width: 145,\n              textAlign: 'center'\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (selected, extraParameters) =>\n              <input\n                className=\"selector-radio\"\n                type=\"radio\"\n                name={`${this.props.name_prefix}[${'id'}]`}\n                value={extraParameters.rowData['id']}\n                defaultChecked={extraParameters.rowData['checked']}\n                onChange={() => null}\n              />\n          ],\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        property: 'id',\n        header: {\n          label: 'ID',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {}\n        },\n        visible: false\n      },\n      {\n        property: 'title',\n        header: {\n          label: 'Question Set Label',\n          formatters: [\n            sortableHeader,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n            (title, extraParameters) => <a href={extraParameters.rowData.show_question_set_path} target='_blank'>{title}</a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'created_at',\n        header: {\n          label: 'Date Created',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n    ];},\n\n  project_statuses_table: function() {\n    const sortableHeader = sortingHeader.call(this);\n    const editable = editingCell.call(this);\n    const showCciProjectColumn = this.props.show_cci_project_column\n    const showAssessmentProjectColumn = this.props.show_assessment_project_column\n    // const projectDetailsAction = this.props.project_details_action;\n\n    return [\n      {\n        property: 'course_name',\n        header: {\n          label: 'Course',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n          ],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'case_number_and_title',\n        header: {\n          label: 'Case Number And Title',\n          formatters: [\n            sortableHeader,\n          ],\n          props: {\n            style: {\n              width: 350,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              width: 350,\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: showCciProjectColumn\n      },\n      {\n        property: 'case_number_and_title',\n        header: {\n          label: 'Question Set Item',\n          formatters: [\n            sortableHeader,\n          ],\n          props: {\n            style: {\n              width: 350,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              width: 350,\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: showAssessmentProjectColumn\n      },\n      {\n        property: 'review_status',\n        header: {\n          label: 'Review Status',\n          transforms: [],\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'date_last_updated',\n        header: {\n          label: 'Date Last Updated',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'project_team',\n        header: {\n          label: 'Project Team',\n        },\n        cell: {\n          formatters: [],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            width: 300,\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: true\n      },\n      {\n        property: 'project_name',\n        header: {\n          label: 'Project Workflow Report',\n        },\n        cell: {\n          formatters: [\n            (project_name, extraParameters) => {\n              return <a href={extraParameters.rowData.workflow_report_link} target='_blank'>{project_name}</a>\n            }\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: true\n      },\n    ];},\n\n  project_dashboard_table: function() {\n    const sortableHeader = sortingHeader.call(this);\n    const projectDetailsAction = this.props.project_details_action;\n    const showAquiferAdminColumns = this.props.show_aquifer_admin_columns\n    const showCciProjectColumn = this.props.show_cci_project_column\n    const showAssessmentProjectColumn = this.props.show_assessment_project_column\n    const editable = editingCell.call(this);\n    const reportAction = this.props.report_action;\n\n    return [\n      {\n        property: 'name',\n        header: {\n          label: 'Project Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n            (name, extraParameters) => {\n              if(showAquiferAdminColumns) {\n                return <a href={extraParameters.rowData.edit_path} target='_blank'>{name}</a>\n              }else{\n                return <>{name}</>\n              }\n            }\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'reviewable',\n        header: {\n          label: 'Reviewable',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n            (reviewable, extraParameters) => <a href={extraParameters.rowData.aet_path} target='_blank'>{reviewable}</a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'priority',\n        header: {\n          label: 'Priority',\n          formatters: [\n            sortableHeader,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'start_date',\n        header: {\n          label: 'Start Date',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'status',\n        header: {\n          label: 'Status',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'workflow_status',\n        header: {\n          label: 'Workflow Status',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: showCciProjectColumn\n      },\n      {\n        header: {\n          label: 'Workflow Status',\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n            (name, extraParameters) => <a href={extraParameters.rowData.workflow_status_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: showAssessmentProjectColumn\n      },\n      {\n        header: {\n          label: 'Details',\n        },\n        cell: {\n          formatters: [\n            (_, extra) => {\n              return <a data-action={projectDetailsAction} data-url={extra.rowData.details_url}><i className=\"fas fa-external-link-alt\"></i></a>\n            }\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        filterable: false,\n        props: {\n          style: {\n            width: 85,\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: true\n      },\n      {\n        property: 'report_option',\n        header: {\n          label: 'Reports',\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n            (name, extraParameters) => <a href={extraParameters.rowData.report_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            width: 240,\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: showCciProjectColumn\n      },\n      {\n        property: 'report_option',\n        header: {\n          label: 'Reports',\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n            (name, extraParameters) => <a href={extraParameters.rowData.report_path} style= {{color: 'black'}} target='_blank'><i className=\"fas fa-external-link-alt\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        props: {\n          style: {\n            width: 240,\n            textAlign: 'center',\n          },\n          className: \"button-column\"\n        },\n        visible: showAssessmentProjectColumn\n      },\n    ];},\n\n\n  user_report_table: function() {\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'first_name',\n        header: {\n          label: 'First Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'last_name',\n        header: {\n          label: 'Last Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'email',\n        header: {\n          label: 'Email',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'role_definition',\n        header: {\n          label: 'Role Definition',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'discipline',\n        header: {\n          label: 'Discipline',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'status',\n        header: {\n          label: 'Status',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'created_at',\n        header: {\n          label: 'Created at',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'subscription_end',\n        header: {\n          label: 'Subscription end',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n              textAlign: 'center',\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n    ];},\n\n  dashboard_question_set_index: function() {\n    const editable = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'exam_course',\n        header: {\n          label: 'Course',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            width: 300\n          }\n        },\n        cell: {\n          formatters: [search.highlightCell]\n        },\n        visible: true\n      },\n      {\n        property: 'title',\n        header: {\n          label: 'Question Set',\n          formatters: [sortableHeader]\n        },\n        cell: {formatters: [search.highlightCell]},\n        visible: true\n      },\n      {\n        property: 'created_at',\n        header: {\n          label: 'Date Created',\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          },\n          formatters: [sortableHeader]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell,\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'questions_count',\n        header: {\n          label: 'Number of Questions',\n          props: {\n            style: {\n              textAlign: 'right',\n            }\n          },\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [search.highlightCell],\n          props: {\n            style: {\n              textAlign: 'right',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'in_use',\n        header: {\n          label: 'In use',\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          },\n          formatters: [sortableHeader]\n        },\n        cell: {\n          formatters: [],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'new_exam_variation_url',\n        header: {\n          label: `Create ${this.props.exam_variation_label}`,\n          props: {\n            style: {\n              width: 170,\n              textAlign: 'center'\n            }\n          },\n          formatters: []\n        },\n        cell: {\n          formatters: [\n            (url) => <a href={url}><i className=\"fa fa-edit\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        property: 'question_set_url',\n        header: {\n          label: 'Manage',\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          },\n          formatters: []\n        },\n        cell: {\n          formatters: [\n            (url) => <a href={url} target='_blank'><i className=\"fa fa-edit\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      }\n    ];},\n\n  dashboard_exam_variations_index: function() {\n    const editable       = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n    const statusOptions  = this.props.status_options\n    const statusAction   = this.props.status_action\n    const statusTarget   = this.props.status_target\n\n    return [\n      {\n        property: 'exam_name',\n        header: {\n          label: this.props.exam_label,\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 300\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'form_name',\n        header: {\n          label: 'Form',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'version',\n        header: {\n          label: 'Version',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textTransform: 'capitalize'\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'status',\n        header: {\n          label: 'Status',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [\n            (_, extraParameters) => {\n              return {\n                'data-exam-variation-url': extraParameters.rowData.exam_variation_url\n              }\n            },\n            editable(\n              edit.dropdown({\n                props: {\n                  'data-action' : statusAction\n                },\n                options: statusOptions\n              })\n            )\n          ],\n          formatters: [\n            (status, extraParameters) => {\n              return <span className=\"dropdown-cell\">{extraParameters.rowData.status}</span>\n            }\n          ],\n          props: {\n            style: {\n              textTransform: 'capitalize'\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'date_created',\n        header: {\n          label: 'Date Created',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'deliveries_count',\n        header: {\n          label: 'Num Deliveries',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            (deliveriesCount, extraParameters) => {\n              let url = extraParameters.rowData.delivered_to_path\n\n              if (deliveriesCount === 0) {\n                return deliveriesCount\n              } else {\n                return <a href={url} target='_blank'>{deliveriesCount}</a>\n              }\n            }\n          ],\n          props: {\n            style: {\n              textAlign: 'right',\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'edit_path',\n        header: {\n          label: 'Manage',\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          }\n        },\n        cell: {\n          formatters: [\n            (url) => <a href={url}><i className=\"fa fa-edit\"></i></a>\n          ],\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      }\n    ];},\n\n  dashboard_deliveries_index: function() {\n    const editable = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n    const showAquiferAdminColumns = this.props.show_aquifer_admin_columns\n\n    return [\n      {\n        property: 'status',\n        header: {\n          label: 'Status',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            (status, extraParameters) => <a href={extraParameters.rowData.edit_path} target='_blank'>{status}</a>\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'group_name',\n        header: {\n          label: 'Program',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: showAquiferAdminColumns\n      },\n      {\n        property: 'exam_title',\n        header: {\n          label: this.props.exam_label,\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'nickname',\n        header: {\n          label: 'Nickname',\n          formatters: []\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'availability_range',\n        header: {\n          label: 'Availability Dates',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        props: {\n          style: {\n            width: 300\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'purpose',\n        header: {\n          label: 'Purpose',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'default_form',\n        header: {\n          label: 'Default Form',\n          formatters: []\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        filterable: false,\n        visible: showAquiferAdminColumns\n      },\n      {\n        property: 'versions',\n        header: {\n          label: 'Versions',\n          formatters: []\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        filterable: false,\n        visible: showAquiferAdminColumns\n      },\n      {\n        property: 'type_of_student',\n        header: {\n          label: 'Type of Student',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'created_at',\n        header: {\n          label: 'Date Added',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'student_registered_count',\n        header: {\n          label: '# of Students Registered',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'student_completed_count',\n        header: {\n          label: '# of Students Completed',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      }\n    ];},\n\n  exam_items: function() {\n    const editable = editingCell.call(this);\n    const conditionally_editable  = editingCell.call(this, 'scorable');\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'selected',\n        header: {\n          label: 'Selected',\n          formatters: [\n            (selected, extraParameters) => {\n              let visibleRows = this.gatherRows().rows;\n              let allVisibleAreSelected = visibleRows.every(row => row['selected']);\n\n              return <div style={{display: 'inline'}}>\n                <input\n                  type=\"checkbox\"\n                  checked={allVisibleAreSelected}\n                  onClick={() => this.toggleSelect(visibleRows, !allVisibleAreSelected)}\n                  onChange={() => null}\n                  style={{width: '20px'}}\n                />\n                {sortableHeader(selected, extraParameters)}\n              </div>\n            }\n          ],\n          props: {\n            style: {\n              width: 150,\n              textAlign: 'center',\n              zIndex: 20\n            }\n          }\n        },\n        cell: {\n          transforms: [editable(Checkbox)],\n          formatters: [\n            (selected, extraParameters) => AddNameAttribute(\n              'selected',\n              extraParameters,\n              this.props.name_prefix,\n              (() => {\n                return <input\n                  className=\"selector-checkbox\"\n                  type=\"checkbox\"\n                  checked={selected}\n                  onChange={() => null}\n                />\n              }).call()\n            )\n          ],\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        property: 'scored',\n        header: {\n          label: 'Scored',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 105\n            }\n          }\n        },\n        cell: {\n          transforms: [conditionally_editable(Checkbox)],\n          formatters: [\n            (scored, extraParameters) => {\n              if (extraParameters.rowData.scorable) {\n                return AddNameAttribute(\n                  'scored',\n                  extraParameters,\n                  this.props.name_prefix,\n                  (() => {\n                    return <input\n                      className=\"selector-checkbox\"\n                      type=\"checkbox\"\n                      checked={scored}\n                      onChange={() => null}\n                    />;\n                  }).call());\n              } else {\n                return <span style={{ color: 'Blue' }}\n                             title=\"This question cannot be scored because it has no historical efficiency data\">\n                         N/A\n                       </span>;\n              }\n            }\n          ],\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        property: 'position',\n        header: {\n          label: 'Position',\n          formatters: [],\n          props: {\n            style: {\n              width: 90\n            }\n          }\n        },\n        cell: {\n          transforms: [\n            (_, extraParameters) => {\n              return {\n                'className': extraParameters.rowData.selected ? '' : 'invisible'\n              }\n            },\n            editable(edit.input({\n              props: {\n                // Prevent the Enter key from submitting the form.\n                'onKeyDown':   (ev) => {\n                  if (ev.which == 13) {\n                    ev.preventDefault()\n                  }\n                }\n              }\n            }))\n          ],\n          formatters: [\n            (val, extra) => AddNameAttribute(\n              'position',\n              extra,\n              this.props.name_prefix,\n              <span className=\"number-cell\">{val}</span>)\n          ],\n          props: {\n            style: {\n              textAlign: 'right'\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        property: 'question_id',\n        header: {\n          label: 'ID',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 110\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (val, extra) => AddNameAttribute(\n              'question_id',\n              extra,\n              this.props.name_prefix,\n              search.highlightCell(val, extra))\n          ],\n          props: {\n            style: {\n              width: 80,\n              textAlign: 'right'\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'item_label',\n        header: {\n          label: 'Item Label',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 200,\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'vignette',\n        header: {\n          label: 'Vignette',\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (val, extra) => AddNameAttribute(\n              'exam_item_id',\n              extra,\n              this.props.name_prefix,\n              search.highlightCell(val, extra))\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'item_difficulty',\n        header: {\n          label: 'Item Difficulty',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 120\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textAlign: 'right'\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'discrimination',\n        header: {\n          label: 'Disc.',\n          formatters: [\n            sortableHeader\n          ],\n          props: {\n            style: {\n              width: 90\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              width: 80,\n              textAlign: 'right'\n            }\n          }\n        },\n        visible: true\n      }\n    ];},\n\n  exam_variation_deliveries_index: function() {\n    const editable       = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'program_name',\n        header: {\n          label: 'Program name',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (program_name, extraParameters) => <a href={extraParameters.rowData.edit_delivery_path} target='_blank'>{program_name}</a>\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'purpose',\n        header: {\n          label: 'Purpose',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {\n            style: {\n              textTransform: 'capitalize'\n            }\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'program_type',\n        header: {\n          label: 'Type of student',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'date_assigned',\n        header: {\n          label: 'Date assigned',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'date_delivered',\n        header: {\n          label: 'Date delivered',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'rosterings_count',\n        header: {\n          label: '# Administrations',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n        },\n        visible: true\n      },\n    ];},\n\n  rosterings_new: function() {\n    const editable = editingCell.call(this);\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'selected',\n        header: {\n          label: 'Assigned',\n          formatters: [\n            (selected, extraParameters) => {\n              let visibleRows = this.gatherRows().rows;\n              let allVisibleAreSelected = visibleRows.every(row => row['selected']);\n\n              return <div style={{display: 'inline'}}>\n                <input\n                  type=\"checkbox\"\n                  checked={allVisibleAreSelected}\n                  onClick={() => this.toggleSelect(visibleRows, !allVisibleAreSelected)}\n                  onChange={() => null}\n                  style={{width: '20px'}}\n                />\n                {sortableHeader(selected, extraParameters)}\n              </div>\n            }\n          ],\n          props: {\n            style: {\n              width: 145,\n              textAlign: 'center'\n            }\n          }\n        },\n        cell: {\n          transforms: [editable(Checkbox)],\n          formatters: [\n            (selected, extraParameters) => AddNameAttribute(\n              'selected',\n              extraParameters,\n              this.props.name_prefix,\n              (() => {\n                return <input\n                  className=\"selector-checkbox\"\n                  type=\"checkbox\"\n                  checked={selected}\n                  onChange={() => null}\n                />\n              }).call()\n            )\n          ],\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        property: 'grdu_id',\n        header: {\n          label: 'GRDU ID',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {}\n        },\n        visible: false\n      },\n      {\n        property: 'email',\n        header: {\n          label: 'Email',\n          formatters: [\n            (selected, extraParameters) => {\n              return <div style={{display: 'inline'}}>\n                {sortableHeader(selected, extraParameters)}\n                {this.props.legacy_form &&\n                  Button('button', 'Register Batch Emails', 'click->batch-add#openAdd', null, 'delivery-batch-add-btn', false)}\n              </div>\n            }\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (val, extra) => AddNameAttribute(\n              'grdu_id',\n              extra,\n              this.props.name_prefix,\n              search.highlightCell(val, extra))\n          ],\n          props: {}\n        },\n        visible: true\n      },\n      {\n        property: 'last_name',\n        header: {\n          label: 'Last Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'first_name',\n        header: {\n          label: 'First Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'timing',\n        header: {\n          label: `${this.props.rostering_label} Timing`,\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [\n            editable(\n              edit.dropdown({\n                options: ROSTERING_TIMING_OPTIONS\n              }))],\n          formatters: [\n            (timing, extraParameters) => AddNameAttribute(\n              'timing',\n              extraParameters,\n              this.props.name_prefix,\n              <span className=\"dropdown-cell\">{ROSTERING_TIMING_OPTIONS.find(elem => elem.value == extraParameters.rowData.timing).name}</span>\n            )\n          ]\n        },\n        visible: true\n      }\n    ];},\n\n  rosterings_edit: function() {\n    const editable                = editingCell.call(this);\n    const form_editable           = editingCell.call(this, 'can_change_form');\n    const timing_editable         = editingCell.call(this, 'is_rostered');\n    const sortableHeader          = sortingHeader.call(this);\n    const examFormOptions         = this.props.exam_form_options || [{name: 'Form A', value: 'form_a'}]\n    const examFormAction          = this.props.exam_form_action;\n    const restartAction           = this.props.restart_action;\n    const showAquiferAdminColumns = this.props.show_aquifer_admin_columns;\n    const status                  = this.props.status == 'completed';\n    const featureFlagOn           = this.props.feature_flag\n\n    return [\n      {\n        property: 'selected',\n        header: {\n          label: 'Assigned',\n          formatters: [\n            (selected, extraParameters) => {\n              let visibleSelectableRows = this.gatherRows().rows.filter(row => !row['freeze_selection']);\n              let allVisibleAreSelected = visibleSelectableRows.every(row => row['selected']);\n\n              return <div style={{display: 'inline'}}>\n                <input\n                  type=\"checkbox\"\n                  checked={allVisibleAreSelected}\n                  onClick={() => this.toggleSelect(visibleSelectableRows, !allVisibleAreSelected)}\n                  onChange={() => null}\n                  style={{width: '20px'}}\n                />\n                {sortableHeader(selected, extraParameters)}\n              </div>\n            }\n          ],\n          props: {\n            style: {\n              width: 160,\n              textAlign: 'center',\n              zIndex: 20\n            }\n          }\n        },\n        cell: {\n          transforms: [editable(Checkbox)],\n          formatters: [\n            (selected, extraParameters) => AddNameAttribute(\n              'selected',\n              extraParameters,\n              this.props.name_prefix,\n              (() => {\n                return <input\n                  className={`selector-checkbox ${extraParameters.rowData.freeze_selection ? 'disable-change' : ''}`}\n                  type=\"checkbox\"\n                  checked={selected}\n                  disabled={extraParameters.rowData.freeze_selection}\n                  title={extraParameters.rowData.freeze_selection ? extraParameters.rowData.frozen_selection_tooltip : null}\n                  onChange={() => null}\n                />\n              }).call()\n            )\n          ],\n          props: {\n            style: {\n              textAlign: 'center'\n            }\n          }\n        },\n        filterable: false,\n        visible: true\n      },\n      {\n        property: 'grdu_id',\n        header: {\n          label: 'GRDU ID',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ],\n          props: {}\n        },\n        visible: false\n      },\n      {\n        property: 'email',\n        header: {\n          label: 'Email',\n          formatters: [\n            (selected, extraParameters) => {\n              return <div style={{display: 'inline'}}>\n                {sortableHeader(selected, extraParameters)}\n                {this.props.legacy_form &&\n                  Button('button', 'Register Batch Emails', 'click->batch-add#openAdd', null, 'delivery-batch-add-btn', status)}\n              </div>\n            }\n          ],\n          props: {\n            style: {\n              width: 300\n            }\n          }\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (val, extra) => AddNameAttribute(\n              'grdu_id',\n              extra,\n              this.props.name_prefix,\n              search.highlightCell(val, extra))\n          ],\n          props: {\n            className: 'grdu_id_cell'\n          }\n        },\n        visible: true\n      },\n      {\n        property: 'last_name',\n        header: {\n          label: 'Last Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'first_name',\n        header: {\n          label: 'First Name',\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            search.highlightCell\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'status',\n        header: {\n          label: 'Status',\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [],\n          formatters: [\n            (v, extra) => ActionLink(\n              search.highlightCell(v, extra),\n              extra,\n              this.props.explain_status_action,\n              this.props.explain_status_switch\n            )\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'exam_form',\n        header: {\n          label: this.props.exam_variation_label,\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [\n            form_editable(\n              edit.dropdown({\n                props: {'data-action' : examFormAction},\n                options: examFormOptions\n              }))],\n          formatters: [\n            (_, extraParameters) => {\n              if (!extraParameters.rowData.is_rostered) return;\n              const cssClass = extraParameters.rowData.can_change_form ? \"dropdown-cell\" : null;\n\n              const formValue            = extraParameters.rowData.exam_form;\n              const defaultFormName      = extraParameters.rowData.default_form_name;\n\n              const optionPair = examFormOptions.find(elem => elem.value == formValue);\n              let formName = optionPair ? optionPair.name : 'Default';\n              if (formValue == 'default' && defaultFormName) {\n                formName = `${formName} (${defaultFormName})`\n              }\n\n              return AddNameAttribute(\n                'exam_form',\n                extraParameters,\n                this.props.name_prefix,\n                <span className={cssClass}>{formName}</span>\n              )\n            }\n          ]\n        },\n        props: {\n          style: {\n            width: 175\n          }\n        },\n        visible: showAquiferAdminColumns\n      },\n      {\n        property: 'assessment_version',\n        header: {\n          label: 'Assessment Version',\n          formatters: [\n            sortableHeader\n          ]\n        },\n        cell: {\n          props: {\n            style: {\n              textAlign: 'center',\n            }\n          }\n        },\n        visible: showAquiferAdminColumns\n      },\n      {\n        property: 'timing',\n        header: {\n          label: `${this.props.rostering_label} Timing`,\n          formatters: [\n            sortableHeader\n          ],\n          props: {}\n        },\n        cell: {\n          transforms: [\n            timing_editable(\n              edit.dropdown({\n                options: ROSTERING_TIMING_OPTIONS\n              }))],\n          formatters: [\n            (_, extraParameters) => {\n              if (!extraParameters.rowData.is_rostered) return;\n              return AddNameAttribute(\n                'timing',\n                extraParameters,\n                this.props.name_prefix,\n                <span className=\"dropdown-cell\">{ROSTERING_TIMING_OPTIONS.find(elem => elem.value == extraParameters.rowData.timing).name}</span>\n              )\n            }\n          ]\n        },\n        visible: true\n      },\n      {\n        header: {\n          label: 'Restart'\n        },\n        cell: {\n          formatters: [\n            (_, extra) => {\n              if (extra.rowData.can_restart) {\n                return <button\n                  type=\"button\"\n                  className=\"restart-btn btn btn-outline-primary btn-sm\"\n                  data-action={restartAction}\n                  data-url={extra.rowData.restart_url}\n                  title={`Click to restart the timed-out ${this.props.rostering_label.toLowerCase()}.`}\n                >\n                </button>\n              }\n            }\n          ]\n        },\n        props: {\n          style: {\n            width: 85\n          },\n          className: \"button-column\"\n        },\n        visible: featureFlagOn ? true : showAquiferAdminColumns\n      }\n    ];},\n\n  document_questions: function() {\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'title',\n        header: {\n          label: 'Title',\n          formatters: [ sortableHeader ],\n          props: { width: 150 }\n        },\n        cell: { formatters: [\n            search.highlightCell,\n            (title, extraParameters) => {\n              let url = extraParameters.rowData.question_edit_url\n\n              return <a href={url} target='_blank'>{title}</a>\n            }\n          ]},\n        visible: true\n      },\n      {\n        property: 'question_type',\n        header: {\n          label: 'Question Type',\n          formatters: [ sortableHeader ],\n          props: { width: 150 }\n        },\n        cell: { formatters: [search.highlightCell] },\n        visible: true\n      },\n      {\n        property: 'vignette',\n        header: {\n          label: 'Vignette',\n          formatters: [ sortableHeader ],\n          props: { width: 400 }\n        },\n        cell: { formatters: [search.highlightCell] },\n        visible: true\n      },\n      {\n        property: 'images',\n        header: {\n          label: 'Images',\n          formatters: [sortableHeader],\n          props: { width: 150 }\n        },\n        cell: { \n          formatters: [\n            search.highlightCell,\n            (images, extraParameters) => {\n              // Check if images is an array and log to see what it contains\n              const list = extraParameters.rowData.images\n              \n              // Safeguard against non-array values, or if images is null/undefined\n              return (Array.isArray(list) ? list : []).map((url, index) => {\n                return (\n                  <a \n                    key={index} \n                    href={url} \n                    target=\"_blank\" \n                    style={{ '--background': `url(${url})` }} \n                    className=\"qb-thumbnail\"\n                    rel=\"noopener noreferrer\"\n                  >\n                    Image {index + 1}\n                  </a>\n                );\n              });\n            }\n          ]\n        },\n        visible: true\n      },\n      {\n        property: 'stem',\n        header: {\n          label: 'Stem',\n          formatters: [ sortableHeader ],\n          props: { width: 150 }\n        },\n        cell: { formatters: [search.highlightCell] },\n        visible: true\n      },\n      {\n        property: 'cci_status',\n        header: {\n          label: 'CCI Status',\n          formatters: [ sortableHeader ],\n          props: { width: 150 }\n        },\n        cell: { formatters: [search.highlightCell] },\n        visible: true\n      },\n    ]\n  },\n\n  case_map: function() {\n    const sortableHeader = sortingHeader.call(this);\n\n    return [\n      {\n        property: 'learning_objective',\n        header: {\n          label: 'Learning Objective',\n          formatters: [ sortableHeader ]\n        },\n        cell: { formatters: [search.highlightCell] },\n        visible: true\n      },\n      {\n        property: 'teaching_point',\n        header: {\n          label: 'Teaching Point',\n          formatters: [ sortableHeader ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n            (teaching_point, extraParameters) => {\n              const styleLink = extraParameters.rowData.teaching_point_edited ? {color: 'red'} : {}\n              return <a href={\"\"} style={styleLink} onClick={() => extraParameters.rowData.openTeachingPointModal(extraParameters.rowData.teachingPointObject)}>{teaching_point}</a>\n            }\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'assessment_question',\n        header: {\n          label: 'Assessment Question',\n          formatters: [ sortableHeader ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n            (assessment_question, extraParameters) => {\n              if(assessment_question!=\"\") {\n                let usedAvailableFormIcon\n                if(extraParameters.rowData.isAssessmentQuestionUsedAvailableForm){\n                  usedAvailableFormIcon = <i className=\"fas fa-file-alt\"></i>\n                }\n                const styleLink = extraParameters.rowData.isAssessmentQuestionEdited ? {color: 'red'} : {}\n                return <><a href={\"\"} style={styleLink}\n                            onClick={() => extraParameters.rowData.openAssessmentQuestionModal(extraParameters.rowData.assessmentQuestionObject)}>{assessment_question}</a>\n                          {usedAvailableFormIcon}</>\n              }else{\n                return \"\"\n              }\n            }\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'current_use',\n        header: {\n          label: 'Question Type',\n          formatters: [ sortableHeader ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n            (current_use, extraParameters) => {\n              return <>{current_use}</>\n            }\n          ],\n        },\n        visible: true\n      },\n      {\n        property: 'body_system',\n        header: {\n          label: 'Body System',\n          formatters: [ sortableHeader ]\n        },\n        cell: {\n          formatters: [\n            search.highlightCell,\n            (body_system, extraParameters) => {\n              if(extraParameters.rowData.isMappedSystemEdited){\n                return <label style={{color: 'red'}}>{body_system}</label>\n              }else{\n                return <>{body_system}</>\n              }\n            }\n          ],\n        },\n        visible: true\n      },\n    ]\n  }\n}\n","// Based on https://reactabular.js.org/\n\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { compose } from 'redux';\nimport {\n  cloneDeep, findIndex, orderBy, keys, values, transform\n} from 'lodash';\nimport * as Table from 'reactabular-table';\nimport * as search from 'searchtabular';\nimport * as sort from 'sortabular';\nimport * as resolve from 'table-resolver';\nimport VisibilityToggles from 'react-visibility-toggles';\n\nimport {\n  Paginator, PrimaryControls, paginate\n} from './helpers';\nimport { TABLE_DEFS } from './table_defs';\n\nexport default class AqueductTable extends React.Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      rows: props.rows,\n      searchColumn: 'all',\n      query: {}, // search query\n      sortingColumns: props.first_column_sort && {0: {direction: props.first_column_sort, position: 0, tooltipText: props.selection_tooltip}}, // reference to the sorting columns\n      columns: this.getColumns(), // initial columns\n      pagination: { // initial pagination settings\n        page: 1,\n        perPage: 999999999\n      }\n    };\n\n    this.onRow = this.onRow.bind(this);\n    this.onRowSelected = this.onRowSelected.bind(this);\n    this.onColumnChange = this.onColumnChange.bind(this);\n    this.onSearch = this.onSearch.bind(this);\n    this.onSelect = this.onSelect.bind(this);\n    this.onPerPage = this.onPerPage.bind(this);\n    this.onRemove = this.onRemove.bind(this);\n    this.onToggleColumn = this.onToggleColumn.bind(this);\n  }\n\n  componentDidMount() {\n    // Some table cells (<td> elements) have children elements\n    // that receive the <td> element's click events\n    // when we would not like them to.\n    // The only way to prevent those click events from reaching\n    // the children is to stop propagation at the <td> level.\n    // We identify such <td> elements by adding the \"disable-change\"\n    // class to one of the <td> element's descendants.\n    for (const el of ReactDOM.findDOMNode(this).getElementsByClassName('disable-change')) {\n      el.closest('td').addEventListener('click', (event) => {\n        event.stopPropagation();\n      })\n    }\n  }\n\n  getColumns() {\n    return TABLE_DEFS[this.props.table_def].call(this);\n  }\n\n  toggleSelect(rowsToToggle, doSelect) {\n    let rowIdsToToggle = rowsToToggle.map(row => row.id);\n    let rows = cloneDeep(this.state.rows).map(row => {\n      if (rowIdsToToggle.includes(row.id)) {\n        row.selected = doSelect\n      }\n      return row;\n    });\n\n    this.setState({ rows });\n  }\n\n  gatherRows() {\n    const {\n      columns, rows, pagination, sortingColumns, searchColumn, query\n    } = this.state;\n    const cols = columns.filter(column => column.visible);\n    return compose(\n      paginate(pagination),\n      sort.sorter({ columns: cols, sortingColumns, sort: orderBy }),\n      search.highlighter({ columns: cols, matches: search.matches, query }),\n      search.multipleColumns({ columns: cols, query }),\n      resolve.resolve({\n        columns: cols,\n        method: (extra) => compose(\n          resolve.byFunction('cell.resolve')(extra),\n          resolve.nested(extra)\n        )\n      })\n    )(rows);\n  }\n\n  render() {\n    const {\n      columns, rows, pagination, sortingColumns, searchColumn, query\n    } = this.state;\n    const cols = columns.\n      filter(column => column.visible).\n      map(column => {\n        if (column && column.property && (!('filterable' in column) || column.filterable)) {\n          column.filterPlaceholder = 'type to filter';\n        }\n        return column;\n      });\n    const paginated = this.gatherRows();\n    const windowTableName = this.props.window_table_name || 'AqueductTable';\n    const tableHeight = this.props.table_height || 'fixed-height-table';\n\n    return (\n      <div ref={() => { window[windowTableName] = this }}>\n        {this.props.selectable_columns &&\n          <VisibilityToggles\n            columns={columns}\n            onToggleColumn={this.onToggleColumn}\n          />\n        }\n        <PrimaryControls\n          className=\"controls\"\n          perPage={pagination.perPage}\n          column={searchColumn}\n          query={query}\n          columns={cols}\n          rows={rows}\n          onPerPage={this.onPerPage}\n          onColumnChange={this.onColumnChange}\n          onSearch={this.onSearch}\n          show_pagination={this.props.show_pagination}\n        />\n\n        <div className={tableHeight}>\n        <Table.Provider\n          className=\"pure-table pure-table-striped\"\n          columns={cols}\n          style={{ overflowX: 'auto' }}\n        >\n          <Table.Header\n            id={windowTableName}\n          >\n            <search.Columns query={query} columns={cols} onChange={this.onSearch} />\n          </Table.Header>\n\n          <Table.Body\n            onRow={this.onRow}\n            rows={paginated.rows}\n            rowKey=\"id\"\n          />\n\n          <CustomFooter columns={cols} rows={paginated.rows} />\n        </Table.Provider>\n        </div>\n\n        <div className=\"controls\">\n          {this.props.show_pagination &&\n            <Paginator\n              pagination={pagination}\n              pages={paginated.amount}\n              onSelect={this.onSelect}\n            />\n          }\n        </div>\n      </div>\n    );\n  }\n  onRow(row, { rowIndex }) {\n    return {\n      className: row.row_class,\n      'data-target' : this.props.row_target,\n      onClick: () => this.onRowSelected(row)\n    };\n  }\n  onRowSelected(row) {\n    // console.log('clicked row', row);\n  }\n  onColumnChange(searchColumn) {\n    this.setState({\n      searchColumn\n    });\n  }\n  onSearch(query) {\n    this.setState({\n      query\n    });\n  }\n  onSelect(page) {\n    const pages = Math.ceil(\n      this.state.rows.length / this.state.pagination.perPage\n    );\n\n    this.setState({\n      pagination: {\n        ...this.state.pagination,\n        page: Math.min(Math.max(page, 1), pages)\n      }\n    });\n  }\n  onPerPage(value) {\n    this.setState({\n      pagination: {\n        ...this.state.pagination,\n        perPage: parseInt(value, 10)\n      }\n    });\n  }\n  onRemove(id) {\n    const rows = cloneDeep(this.state.rows);\n    const idx = findIndex(rows, { id });\n\n    // this could go through flux etc.\n    rows.splice(idx, 1);\n\n    this.setState({ rows });\n  }\n  onToggleColumn({ columnIndex }) {\n    const columns = cloneDeep(this.state.columns);\n    const column = columns[columnIndex];\n\n    column.visible = !column.visible;\n\n    const query = cloneDeep(this.state.query);\n    delete query[column.property];\n\n    this.setState({ columns, query });\n  }\n}\n\nconst CustomFooter = ({ columns, rows }) => {\n  return (\n    <tfoot>\n    <tr>\n      {columns.map((column, i) =>\n        <td key={`footer-${i}`}>{column.footer ? column.footer(rows) : null}</td>\n      )}\n    </tr>\n    </tfoot>\n  );\n}\n","export default function paginate({ page, perPage }) {\n  return (rows = []) => {\n    // adapt to zero indexed logic\n    const p = page - 1 || 0;\n\n    const amountOfPages = Math.ceil(rows.length / perPage);\n    const startPage = p < amountOfPages ? p : 0;\n\n    return {\n      amount: amountOfPages,\n      rows: rows.slice(startPage * perPage, (startPage * perPage) + perPage),\n      page: startPage\n    };\n  };\n}\n","import React from 'react'\nimport {startCase} from 'lodash'\n\nimport * as classNames from 'classnames'\n\nimport MultiUseImage from \"images/multi-use.jpg\";\nimport SingleUseImage from \"images/single-use.jpg\";\n\nconst ReusableObjectDetail = ({\n  rlo,\n  onClick,\n  children,\n  context,\n  permissions,\n  setAddModalOpen,\n}) => {\n  return (\n    <tr className = { classNames('gen-select-item', 'document-summary-row') } onClick = { onClick } >\n      <td className = \"checkbox col_xsm\" style={{cursor: 'default'}} >\n        {context == 'editor'\n          ? permissions?.insertRloToDocuments && <a onClick={() => setAddModalOpen(rlo)} className = \"button small\" style={{cursor: 'pointer'}} >Add</a>\n          : permissions?.openRloInReadOnlyMode && <a href={`/reusable_objects/${rlo.id}`} className = \"button small\" >Open</a>\n        }\n      </td>\n      <td style={{cursor: 'default'}}>\n        { rlo.documents.length > 0 &&\n          <img src={rlo.documents.length > 1 ? MultiUseImage : SingleUseImage} height=\"50\" width=\"50\"/>\n        }\n      </td>\n      <td className = \"title\" style={{cursor: 'default', whiteSpace: 'break-spaces'}} >\n        <p><b>{startCase(rlo.kind)}</b>: {rlo.name}</p>\n      </td>\n      <td className = \"docs\" > { children } </td>\n    </tr>\n  )\n}\n\nexport default ReusableObjectDetail\n","import React, { useState } from 'react'\nimport * as R from \"ramda\";\nimport {startCase} from \"lodash\";\n\nimport GenModal from 'Gen/Modal/component'\nimport ReusableObjectDetail from 'Detail/component'\nimport GenButton from 'Gen/Button/component'\n\nconst DescriptionModal = ({ rlo, closeDescModal }) =>\n  <CommonModal\n    title='Reusable Content Description'\n    rlo={rlo}\n    handleClose={closeDescModal}\n  >\n    <p><b>Description</b></p>\n    <p>{rlo.description}</p>\n  </CommonModal>\n\nconst MultipleUsedDesc = ({rlo}) => {\n  if (rlo.documents.length === 0) {\n    return(<p>This Reusable Content is not used in any locations</p>);\n  } else if (rlo.documents.length === 1) {\n    return(<p>This Reusable Content is used in the single location shown above</p>);\n  } else {\n    const documentRows = rlo.documents.map((document) => {\n      const learningObjectives = rlo.learning_objective_reusable_objects.map(loro => document.learning_objectives.find(lo => lo.id === loro.learning_objective_id)).filter(n => n);\n      return (\n        <tr key={document.id}>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>\n            <a href={`/versions/${document.scheduled_review_version_id}/edit?tn=${rlo.uid}`} onClick={(e) => { e.stopPropagation(); return true } }>\n              <b dangerouslySetInnerHTML={{__html: document.title}} />\n            </a>\n          </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal', fontWeight: 'bold'}}>\n            <ul>\n              { learningObjectives.map((lo) => ( <li key={lo.id}> {lo.name} </li> )) }\n            </ul>\n          </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.age_groups} </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.clinical_locations} </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.clinical_disciplines} </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.systems} </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.presenting_problems} </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.final_diagnoses} </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.additional_diagnoses} </td>\n          <td style={{border: '1px solid #ccc', whiteSpace: 'normal'}}> {document.clinical_focuses} </td>\n        </tr>\n      )\n    })\n\n    return (\n      <table>\n        <tbody>\n          <tr style={{border: '1px solid #ccc'}}>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Where Used </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal', width: '35%'}}>Learning Objective </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Age </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Clinical Locations </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Clinical Discipline </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>System </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Presenting Problem </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Final Diagnosis </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Additoinal Diagnosis </th>\n            <th style={{border: '1px solid #ccc', whiteSpace: 'normal'}}>Clinical Focus </th>\n          </tr>\n          {documentRows}\n        </tbody>\n      </table>\n    )\n  }\n}\n\nconst CommonModal = ({title, rlo, handleClose, children}) => {\n  const allDocumentsLearningObjectives = R.uniqBy(lo => lo.id, rlo.documents.flatMap(document => document.learning_objectives));\n  const loroLearningObjectives = rlo.learning_objective_reusable_objects.map(loro => allDocumentsLearningObjectives.find(lo => lo.id === loro.learning_objective_id)).filter(n => n);\n\n  return (\n    <GenModal open>\n      <div className=\"gen-modal-panel gen-modal-panel-large\" >\n        <div style={{overflow: \"auto\", paddingBottom: \"5px\"}}>\n          <button style={{float: \"right\"}} onClick={handleClose}>X</button>\n        </div>\n        <div style={{backgroundColor: '#0095c9', display: \"flex\"}}>\n          <h1 style={{color: \"#FFF\", textAlign: 'center', flexGrow: \"1\"}}>{title}</h1>\n          <div style={{margin: '10px'}}>\n            <GenButton\n              name={\"Export\"}\n              href={`/reusable_objects/${rlo.id}/usage_report.pdf`}\n              className={\"grey-button\"}\n            />\n          </div>\n        </div>\n        <div style={{color: \"#333\", backgroundColor: '#ddd', textAlign: 'left', padding: \"5px\"}}>\n          <h3>{startCase(rlo.kind)}: {rlo.name}</h3>\n        </div>\n        <div style={{padding: \"5px\"}}>\n          <p><strong>Source Course:</strong> {rlo.document_sets?.name} </p>\n          <p><strong>Source Case:</strong> {rlo.documents[0]?.title} </p>\n          <p><strong>Source Learning Objective:</strong></p>\n          <ul>\n            { loroLearningObjectives.map((lo) => ( <li key={lo.id}><b style={{whiteSpace: 'normal'}}>{lo.name}</b></li> )) }\n          </ul>\n        </div>\n          {children}\n        <div style={{textAlign: \"center\"}}>\n          <button onClick={handleClose}>Close</button>\n        </div>\n      </div>\n    </GenModal>\n  )\n}\n\nconst WhereUsedModal = ({ rlo, closeWhereUsedModal }) =>\n  <CommonModal\n    title='Reusable Content Description and Where it is used'\n    rlo={rlo}\n    handleClose={closeWhereUsedModal}\n  >\n    <MultipleUsedDesc rlo={rlo} />\n  </CommonModal>\n\nconst ReusableObjectSummary = ({\n  rlo,\n  context,\n  permissions,\n  ...props\n}) => {\n  const [descModalOpen, setDescModalOpen] = useState(false)\n  const closeDescModal = () => setDescModalOpen(false)\n\n  const [whereUsedModalOpen, setWhereUsedModalOpen] = useState(false)\n  const closeWhereUsedModal = () => setWhereUsedModalOpen(false)\n\n  return (\n    <ReusableObjectDetail {...props} {...{rlo, context, permissions}}>\n      <ul>\n        <li>\n          <a onClick={() => setDescModalOpen(true)}>\n            Description\n          </a>\n        </li>\n        <li>\n          <a onClick={() => setWhereUsedModalOpen(true)}>\n            Uses\n          </a>\n        </li>\n      </ul>\n      {descModalOpen && <DescriptionModal {...{rlo, closeDescModal}}/>}\n      {whereUsedModalOpen && <WhereUsedModal {...{rlo, closeWhereUsedModal}}/>}\n    </ReusableObjectDetail>\n  )\n}\n\nexport default ReusableObjectSummary\n","import React from 'react'\n\nimport ReusableObjectSummary from 'Summary/component'\n\nexport const reusableObjectListDefaults = {\n  itemsURL:\"/reusable_objects\",\n  itemView: () => <ReusableObjectSummary rlo={rlo} key={rlo.id}/>,\n  isInfiniteScroll: true,\n  search:true,\n  searchByLO: true,\n};\n","import React from 'react'\n\nimport GenList from 'Gen/List/component'\nimport ReusableObjectSummary from 'Summary/component'\nimport { reusableObjectListDefaults } from './defaults'\n\nconst TableHeader = () => (\n  <tr className = \"document-list-table-header\" style = {{height: '100%', padding: \"0px\"}}>\n    <th style = {{width: '90px', padding: \"0px\"}}/>\n    <th style = {{width: '100px', padding: \"0px\"}}/>\n    <th style = {{width: '100%', padding: \"0px\"}}/>\n    <th style = {{width: '250px', padding: \"0px\"}}/>\n  </tr>\n)\n\nconst ReusableObjectList = ({\n  context,\n  itemsURL,\n  documentLookupTable,\n  setAddModalOpen,\n  permissions\n}) => {\n  return (\n    <div className = \"document-list\">\n      <GenList\n        context=\"RC\"\n        isMultiSelect\n        historyPersistance\n        { ...reusableObjectListDefaults }\n        { ...{ documentLookupTable, itemsURL } }\n        tableHeader = { TableHeader() }\n        itemView = {(rlo) => <ReusableObjectSummary { ...{ rlo, context, setAddModalOpen, permissions} } key = { `doc-${rlo.id}` } />}\n      />\n    </div>\n  )\n}\n\nexport default ReusableObjectList;\n","import generateUUID from \"../../generateUUID\";\n\nimport * as R from 'ramda';\n\nimport * as DocConvertPlainText from \"./PlainText\";\nimport * as DocConvertRangeInlineJSON from \"./RangeInlineJSON\";\n\nimport {docMapBlockNodes, nodeInlineContentKeys} from \"../Functions/base\";\n\nimport {isRangeInlineJSON} from \"../Functions/RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"../Functions/TreeInlineJSON\";\n\nconst TAG_PAIRS = [\n  [\"italic\", \"em\"],\n  [\"bold\", \"strong\"],\n  [\"underline\", \"u\"],\n  [\"superscript\", \"sup\"],\n  [\"subscript\", \"sub\"],\n  [\"span\", \"span\"],\n  [\"deleted_text\", \"del\"],\n];\n\nexport function fromInlineJson(styledTreeNodes: Array<InlineTreeNodeExpanded>, includeEditStyles: boolean = true): string{\n  return styledTreeNodes.map((node) => {\n    switch (node.type) {\n      case \"link\":\n        return `<a href=\"${node.url}\" target=\"_blank\">${fromInlineJson(node.title, includeEditStyles)}</a>`;\n      case \"color\":\n        return `<span style=\"color:${node.hexCode};\">${fromInlineJson(node.content, includeEditStyles)}</span>`;\n      case \"text\":\n        return addHTMLAmprersandCharacters(node.content);\n      case \"SELECTION_MIMIC\":\n        return includeEditStyles ? `<span class=\"added_text\" style=\"background-color:rgba(${node.color}, 0.25);\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n      case \"ADD_COMMENT_THREAD\":\n        return includeEditStyles ? `<span class=\"added_text\" style=\"background-color:rgba(${node.color}, 0.25);\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n      case \"ADD_CONTENT\":\n      case \"ADDED_TEXT\":\n      case \"CHANGED_TEXT\":\n        return includeEditStyles ? `<span class=\"added_text\" style=\"text-decoration:underline; text-decoration-color:rgb(${node.color});\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n      case \"DELETE_CONTENT\":\n      case \"DELETED_TEXT\":\n        return includeEditStyles ? `<del style=\"text-decoration-color:rgb(${node.color});\" contenteditable=\"false\">${fromInlineJson(node.content)}</del>` : \"\";\n      case \"ADDED_STYLE\":\n      case \"DELETED_STYLE\":\n        return includeEditStyles ? `<span class=\"added_style\" style=\"color:rgb(${node.color});\">${fromInlineJson(node.content)}</span>` : fromInlineJson(node.content, includeEditStyles);\n      case \"HIDE_TEXT\":\n        return includeEditStyles ? `<span class=\"hide_text\" style=\"display:none;\">${DocConvertPlainText.fromInlineJson(node.content, true)}</span>` : \"\";\n      default:\n        const tagData = TAG_PAIRS.find((tagData) => {\n          return tagData[0] === node.type;\n        });\n\n        if (tagData) {\n          const [type, htmlStyle] = tagData;\n          return `<${htmlStyle}>${fromInlineJson(node.content, includeEditStyles)}</${htmlStyle}>`;\n        } else {\n          return \"\";\n        }\n    }\n  }).join(\"\");\n}\n\nconst NODE_NAME_MAP = {\n  \"EM\": \"italic\" as const,\n  \"STRONG\": \"bold\" as const,\n  \"U\": \"underline\" as const,\n  \"SUP\": \"superscript\" as const,\n  \"SUB\": \"subscript\" as const,\n}\n\nfunction nodeNameToStyleName(nodeName: string) {\n  switch (nodeName) {\n    case \"EM\":\n      return \"italic\" as const\n    case \"STRONG\":\n      return \"bold\" as const\n    case \"U\":\n      return \"underline\" as const\n    case \"SUP\":\n      return \"superscript\" as const\n    case \"SUB\":\n      return \"subscript\" as const\n  }\n\n}\n\nexport function toInlineJson(htmlString: InlineHtmlNode) {\n  const parser = new DOMParser();\n  const htmlDoc = parser.parseFromString(htmlString, 'text/html');\n\n  return toInlineJsonFromNodeList(htmlDoc.body.childNodes)\n}\n\nfunction toInlineJsonFromNodeList(nodeList: NodeListOf<Node>) : Array<InlineTreeNode> {\n  const inlineJson = [...nodeList].flatMap((node)  => {\n    switch (node.nodeType) {\n      case Node.TEXT_NODE:\n        return ({\n          type: \"text\" as const,\n          uid: generateUUID(),\n          content: node.textContent || \"\",\n        });\n        break;\n      case Node.ELEMENT_NODE:\n        // TODO: REFACTOR FuLL SWITCH TO IF STATEMENT WHEN TYPE\n        if (!isElement(node)) {return null;}\n\n        const mappedType = nodeNameToStyleName(node.nodeName)\n        if (mappedType) {\n          return ({\n            type: mappedType,\n            uid: generateUUID(),\n            content: toInlineJsonFromNodeList(node.childNodes),\n          });\n        }\n\n        if (node.nodeName === \"A\") {\n          return ({\n            type: \"link\" as const,\n            uid: generateUUID(),\n            title: toInlineJsonFromNodeList(node.childNodes),\n            url: node.getAttribute(\"href\") || \"\", // TODO: HANDLE MISSING CASE BETTER\n          })\n        }\n\n        if (node.nodeName === \"SPAN\" && node instanceof HTMLElement && rgb2hex(node.style.color) && node.className === \"\") {\n          return ({\n            type: \"color\" as const,\n            uid: generateUUID(),\n            content: toInlineJsonFromNodeList(node.childNodes),\n            hexCode: rgb2hex(node.style.color) || \"\", // TODO: HANDLE MISSING CASE BETTER\n          })\n        }\n\n        return toInlineJsonFromNodeList(node.childNodes);\n      default:\n        return null;\n    }\n  }).filter(notEmpty)\n\n  return inlineJson;\n}\n\nfunction rgb2hex(rgb: string) {\n  const match = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/)\n\n  if (match) {\n    return `#${match.slice(1).map(n => parseInt(n, 10).toString(16).padStart(2, '0')).join('')}`;\n  } else {\n    return null;\n  }\n}\n\nexport function toPlainText(htmlString: InlineHtmlNode) {\n  return DocConvertPlainText.fromInlineJson(toInlineJson(htmlString));\n}\n\nexport function toRangeInlineJson(htmlString: InlineHtmlNode) {\n  return DocConvertRangeInlineJSON.fromInlineJson(toInlineJson(htmlString));\n}\n\nexport function fromAnyType(inlineNode: InlineNode) {\n  if (isRangeInlineJSON(inlineNode)) {\n    return DocConvertRangeInlineJSON.toHTML(inlineNode);\n  } else if (isTreeInlineJSON(inlineNode)) {\n    return fromInlineJson(inlineNode);\n  } else if (typeof inlineNode === \"string\") {\n    return inlineNode\n  }\n}\n\nfunction removeHTMLAmprersandCharacters(string: InlineHtmlNode) {\n  return string && string\n    .replace(/&amp;/g, \"&\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&lt;/g, \"<\")\n    .replace(/&quot;/g, \"\\\"\")\n    .replace(/&apos;/g, \"'\")\n    .replace(/&#39;/g, \"'\");\n}\n\nfunction addHTMLAmprersandCharacters(string: string) {\n  return string && string\n    .replace(/&/g, \"&amp;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/</g, \"&lt;\");\n}\n\nexport function convertAllInlineNodesToHTML(node: DocBlockNode<InlineRangeNode>, includeEditStyles = true) {\n  return docMapBlockNodes(node, (blockNode) => {\n    const inlineContentKeys = nodeInlineContentKeys(blockNode);\n\n    inlineContentKeys.forEach((contentKey) => {\n      let newInlineNode = blockNode[contentKey];\n\n      if (isRangeInlineJSON(newInlineNode)) {\n        newInlineNode = DocConvertRangeInlineJSON.toInlineJson(newInlineNode);\n      }\n\n      if (newInlineNode && isTreeInlineJSON(newInlineNode)) {\n        // EXCEPTION UNTILL ALL LISTS ARE NODE TYPES\n        if (blockNode.type !== \"listItem\" || isTreeInlineJSON(newInlineNode)) {\n          blockNode[contentKey] = fromInlineJson(newInlineNode, false);\n        } else {\n          blockNode[contentKey] = blockNode[contentKey].map((listItemChildNode) => convertAllInlineNodesToHTML(listItemChildNode, includeEditStyles));\n        }\n      }\n    });\n\n    return blockNode;\n  });\n}\n\nexport function standardizeSpaces(string: string) {\n  return string && string.replace(/&nbsp;|\\u202F|\\u00A0/g, \" \");\n}\n\nexport function isElement(node: Node): node is Element { return node.nodeType === 1; }\n\nfunction notEmpty<TValue>(value: TValue | null | undefined): value is TValue {\n  return value !== null && value !== undefined;\n}\n","import * as DocConvertHTML from \"./HTML\";\nimport * as DocConvertRangeInlineJSON from \"./RangeInlineJSON\";\n\nimport {isRangeInlineJSON} from \"../Functions/RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"../Functions/TreeInlineJSON\";\n\nexport function fromInlineJson(styledTreeNodes, showHideText=false) {\n  return styledTreeNodes.map((node) => {\n    switch (node.type) {\n      case \"link\":\n        return fromInlineJson(node.title, showHideText);\n      case \"text\":\n        return node.content;\n      case \"HIDE_TEXT\":\n        return showHideText ? fromInlineJson(node.content, showHideText) : \"\";\n      default:\n        return fromInlineJson(node.content, showHideText);\n    }\n  }).join(\"\");\n}\n\nexport function fromHTML(html: InlineHtmlNode) {\n  const tempDiv = document.createElement(\"div\");\n  tempDiv.innerHTML = html;\n  return tempDiv.textContent || tempDiv.innerText || \"\";\n}\n\n// export function toHTML(plainTextString: InlinePlainTextNode) {\n//   return DocConvertHTML.fromInlineJson(toInlineJson(plainTextString));\n// }\n\n// export function toRangeInlineJson(plainTextString: InlinePlainTextNode) {\n//   return DocConvertRangeInlineJSON.fromInlineJson(toInlineJson(plainTextString));\n// }\n\nexport function fromAnyType(inlineNode) {\n  if (isRangeInlineJSON(inlineNode)) {\n    return DocConvertRangeInlineJSON.toPlainText(inlineNode);\n  } else if (isTreeInlineJSON(inlineNode)) {\n    return fromInlineJson(inlineNode);\n  } else if (typeof inlineNode === \"string\") {\n    return fromHTML(inlineNode);\n  } else {\n    return \"\"\n  }\n}\n","import {\n  filter,\n  findIndex,\n  isString,\n  keys,\n  minBy,\n  omit,\n} from \"lodash\";\n\nimport {docMapBlockNodes, nodeInlineContentKeys} from \"../Functions/base\";\nimport * as TreeInlineJSON from \"../Functions/TreeInlineJSON\";\n\nimport * as DocConvertHTML from \"./HTML\";\nimport * as DocConvertPlainText from \"./PlainText\";\n\nimport {sortItemsWithRangesByStart} from \"../Functions/Range\";\nimport {compressStyleRanges} from \"../Functions/RangeInlineJSON\";\nimport {isTreeInlineJSON} from \"../Functions/TreeInlineJSON\";\n\nexport function fromInlineJson(treeInlineNodes: Array<InlineTreeNode>){\n  const th =  omit(innerFromInlineJson(treeInlineNodes), \"length\")\n  return compressStyleRanges(omit(innerFromInlineJson(treeInlineNodes), \"length\") as any); // TODO: Remove any\n}\n\nfunction innerFromInlineJson(treeInlineNodes: Array<InlineTreeNode>){\n  return treeInlineNodes.reduce((currentState, node) => {\n    const newCurrentState = {...currentState};\n    switch (node.type) {\n      case \"text\":\n        newCurrentState.text += node.content;\n        newCurrentState.length += node.content.length;\n        break;\n      default:\n        const childRange = innerFromInlineJson(node.type === \"link\" ? node.title : node.content);\n\n        const newStyle = {\n          type: node.type,\n          range: {\n            start: 0,\n            end: childRange.length,\n          },\n        } as any; // TODO: Remove any\n\n        const args = omit(node, [\"type\", \"content\", \"title\", \"uid\"]);\n        if (keys(args).length > 0) {\n          newStyle.args = args;\n        }\n\n        const newStates = [newStyle].concat(childRange.styleRanges).map((childStyle) => {\n          const newChildStyle = {...childStyle};\n\n          newChildStyle.range.start += currentState.length;\n          newChildStyle.range.end += currentState.length;\n\n          return newChildStyle;\n        });\n\n        newCurrentState.text += childRange.text;\n        newCurrentState.length += childRange.length;\n        newCurrentState.styleRanges = newCurrentState.styleRanges.concat(newStates);\n    }\n\n    return newCurrentState;\n  }, {text: \"\", styleRanges: [], length: 0});\n}\n\nexport function toInlineJson(rangedStyle, colorLookup = {}){\n  const {\n    text,\n    inlineIrrlevantRanges = [],\n    inlineChangeHighlights = [],\n  } = rangedStyle;\n\n  let newStyleRanges = rangedStyle.styleRanges as Array<StyleRange>; // TODO: Remove as\n\n  if (inlineIrrlevantRanges.length > 0) {\n    newStyleRanges = newStyleRanges.concat(inlineIrrlevantRanges);\n  }\n\n  if (inlineChangeHighlights.length > 0) {\n    const inlineChangeHighlightsWithColor = inlineChangeHighlights.map((inlineChangeHighlight) => {\n      const color = colorLookup[inlineChangeHighlight.author_id] || [255,0,0];\n\n      return {\n        ...inlineChangeHighlight,\n        args: {\n          ...inlineChangeHighlight.args,\n          color,\n        },\n      }\n    })\n    newStyleRanges = newStyleRanges.concat(inlineChangeHighlightsWithColor);\n  }\n\n  if (rangedStyle.selectionMimics) {\n    const selectionMimicsAsStyles = rangedStyle.selectionMimics.map((selectionMimic) => {\n      return {\n        type: \"SELECTION_MIMIC\",\n        range: selectionMimic.range,\n        args: {\n          color: [0,0,255],\n        },\n      };\n    });\n    newStyleRanges = newStyleRanges.concat(selectionMimicsAsStyles);\n  }\n\n  const sortedStyles = sortItemsWithRangesByStart(newStyleRanges);\n\n  const reduceReturn = sortedStyles.reduce((currentState, newStyleRange, newStyleRangeIndex) => {\n    const addNewStyleTo = TreeInlineJSON.contentRightNDeep(currentState.returnValue, currentState.styleRangeStack.length);\n\n    if (currentState.textLeftIndex < newStyleRange.range.start) {\n      addNewStyleTo.push({\n        type: \"text\",\n        content: text.slice(currentState.textLeftIndex, newStyleRange.range.start),\n      });\n      currentState.textLeftIndex = newStyleRange.range.start;\n    }\n\n    addNewStyleTo.push(rangeInlineToEmptyTreeInline(newStyleRange));\n    currentState.styleRangeStack.push(newStyleRange);\n\n    const letNextItem = sortedStyles[newStyleRangeIndex + 1];\n    let minEnd = minBy(currentState.styleRangeStack, (styleRange: any) => styleRange.range.end); // TODO: Remove any\n    while (minEnd && (!letNextItem || minEnd.range.end <= letNextItem.range.start)) {\n      if (currentState.textLeftIndex < minEnd.range.end) {\n        const currentLastNode = TreeInlineJSON.nodeRightNDeep(currentState.returnValue, currentState.styleRangeStack.length - 1);\n        TreeInlineJSON.appendTextToNode(currentLastNode, text.slice(currentState.textLeftIndex, minEnd.range.end));\n        currentState.textLeftIndex = minEnd.range.end;\n      }\n\n      const indexOfFirstMin = findIndex(currentState.styleRangeStack, (styleRange: any) => (styleRange.range.end <= minEnd.range.end)); // TODO: Remove any\n      const styleRangeStackWithMinsRemoved = filter(currentState.styleRangeStack, (styleRange) => (styleRange.range.end > minEnd.range.end));\n\n      const remainingStylesWhole = styleRangeStackWithMinsRemoved.slice(0, indexOfFirstMin);\n      const remainingStylesSplit = styleRangeStackWithMinsRemoved.slice(indexOfFirstMin);\n\n      if (remainingStylesSplit.length > 0) {\n        const addSplitStylesTo = TreeInlineJSON.contentRightNDeep(currentState.returnValue, indexOfFirstMin);\n\n        addSplitStylesTo.push(styleRangeStackToStyleTree(remainingStylesSplit));\n      }\n\n      currentState.styleRangeStack = styleRangeStackWithMinsRemoved;\n\n      minEnd = minBy(currentState.styleRangeStack, (styleRange) => styleRange.range.end);\n    }\n\n    return currentState;\n  }, {\n    returnValue: [],\n    textLeftIndex: 0,\n    styleRangeStack: [],\n  });\n\n  if (reduceReturn.textLeftIndex < text.length) {\n    reduceReturn.returnValue.push({\n      type: \"text\",\n      content: text.slice(reduceReturn.textLeftIndex),\n    });\n  }\n\n  return reduceReturn.returnValue;\n}\n\nexport function toHTML(rangedStyle, colorLookup = {}) {\n  return DocConvertHTML.fromInlineJson(toInlineJson(rangedStyle, colorLookup));\n}\n\nexport function toPlainText(rangedStyle, colorLookup = {}) {\n  return DocConvertPlainText.fromInlineJson(toInlineJson(rangedStyle, colorLookup));\n}\n\nfunction styleRangeStackToStyleTree(styleRangeStack) {\n  if (styleRangeStack.length > 0) {\n    const rangeInline = rangeInlineToEmptyTreeInline(styleRangeStack[0]);\n\n    if (styleRangeStack.length > 1) {\n      const content = styleRangeStackToStyleTree(styleRangeStack.slice(1));\n\n      switch (rangeInline.type) {\n        case \"link\":\n          rangeInline.title = [content];\n          break;\n        default:\n          rangeInline.content = [content];\n      }\n    }\n\n    return rangeInline;\n  } else {\n    return null;\n  }\n}\n\nfunction rangeInlineToEmptyTreeInline(rangeInline) {\n  const returnValue = {\n    type: rangeInline.type,\n    ...rangeInline.args,\n  };\n\n  switch (rangeInline.type) {\n    case \"link\":\n      returnValue.title = [];\n      break;\n    default:\n      returnValue.content = [];\n  }\n\n  return returnValue;\n}\n\nexport function convertAllInlineNodesToRangeJSON(node) {\n  return docMapBlockNodes(node, (blockNode) => {\n    const inlineContentKeys = nodeInlineContentKeys(blockNode);\n\n    inlineContentKeys.forEach((contentKey) => {\n      let newInlineNode = blockNode[contentKey];\n\n      if (isString(newInlineNode)) {\n        newInlineNode = DocConvertHTML.toInlineJson(newInlineNode);\n      }\n\n      if (newInlineNode && !isString(newInlineNode[\"text\"])) {\n        // EXCEPTION UNTILL ALL LISTS ARE NODE TYPES\n        if (blockNode.type !== \"listItem\" || isTreeInlineJSON(newInlineNode)) {\n          blockNode[contentKey] = fromInlineJson(newInlineNode);\n        } else {\n          blockNode[contentKey] = blockNode[contentKey].map((listItemChildNode) => convertAllInlineNodesToRangeJSON(listItemChildNode));\n        }\n      }\n    });\n\n    return blockNode;\n  });\n}\n","import {\n  clone,\n  compact,\n  create,\n  find,\n  forEach,\n  isFunction,\n  map,\n} from 'lodash';\nimport generateUUID from '../../generateUUID';\n\nimport additional_diagnoses_text from \"../../../../../../../lib/case_metadata/additional_diagnoses.txt\";\nimport clinical_principles_text from \"../../../../../../../lib/case_metadata/clinical_principles.txt\";\nimport differential_diagnosis_text from \"../../../../../../../lib/case_metadata/differential_diagnosis.txt\";\nimport final_diagnoses_text from \"../../../../../../../lib/case_metadata/final_diagnoses.txt\";\nimport presenting_problems_text from \"../../../../../../../lib/case_metadata/presenting_problems.txt\";\nimport sciences_core_concepts_text from \"../../../../../../../lib/case_metadata/sciences_core_concepts.txt\";\n\nconst ADDITIONAL_DIAGNOSES = additional_diagnoses_text.split(\"\\n\");\nconst CLINICAL_PRINCIPLES = clinical_principles_text.split(\"\\n\");\nconst DIFFERENTIAL_DIAGNOSIS = differential_diagnosis_text.split(\"\\n\");\nconst FINAL_DIAGNOSES = final_diagnoses_text.split(\"\\n\");\nconst PRESENTING_PROBLEMS = presenting_problems_text.split(\"\\n\");\nconst SCIENCES_CORE_CONCEPTS = sciences_core_concepts_text.split(\"\\n\");\n\nfunction DocType() {\n  this.isRequired = false;\n  this.isSyncable = false;\n  this.shouldInit = false;\n  this.shouldInitWith = false;\n}\n\nObject.defineProperties(DocType.prototype, {\n  \"required\": { \"get\": function() { this.isRequired = true; return this; }},\n  \"notRequired\": { \"get\": function() { this.isRequired = false; return this; }},\n  \"syncable\": { \"get\": function() { this.isSyncable = true; return this; }},\n  \"notSyncable\": { \"get\": function() { this.isSyncable = false; return this; }},\n  \"init\": { \"get\": function() { this.shouldInit = true; return this; }},\n  \"notInit\": { \"get\": function() { this.shouldInit = true; this.shouldInitWith = false; return this; }}\n});\n\nDocType.prototype.initWith = function(arg) {\n  this.shouldInit = true;\n  this.shouldInitWith = true;\n  this.initWithArg = arg;\n  return this;\n};\n\nDocType.prototype.withDefault = function(defaultValue) {\n  this.defaultValue = defaultValue;\n  return this;\n};\n\nDocType.prototype.editWith = function(arg) {\n  this.shouldEditWith = arg;\n  return this;\n};\n\nDocType.prototype.shouldEditWithArgs = function () {\n  return {\n    default: this.defaultValue\n  };\n};\n\nDocType.prototype.generate = function(nodeDefinitions, context) {\n  let initData;\n  if (this.shouldInitWith) {\n    initData = this.initWithArg;\n  } else {\n    initData = this.initDefault;\n  }\n\n  return this.generateWith(initData, nodeDefinitions, context);\n};\n\nDocType.prototype.generateWith = function(initData, nodeDefinitions, context) {\n  if (isFunction(initData)) {\n    return initData(nodeDefinitions, context);\n  } else {\n    return initData;\n  }\n};\n\nDocType.prototype.generateChild = function(childData, nodeDefinitions, context) {\n  if (isFunction(childData)) {\n    return childData(nodeDefinitions, context);\n  } else if (childData instanceof DocTypeRef) {\n    // @ts-ignore TODO: Remove once converted to classes\n    return childData.generate(nodeDefinitions, context);\n  } else {\n    return childData;\n  }\n};\n\nDocType.prototype.dup = function() {\n  return clone(this);\n};\n\nDocType.prototype.deref = function(nodeDefinitions) {\n  return this;\n};\n\nDocType.prototype.withDisplayName = function(displayName) {\n  this.displayNameString = displayName;\n  return this;\n};\nDocType.prototype.displayName = function() {\n  return this.displayNameString;\n};\n\n\nfunction DocTypeMore() {\n}\n\nDocTypeMore.prototype = create(DocType.prototype, {\n  'constructor': DocTypeMore\n});\n\nexport function DTMore() {\n  return new DocTypeMore();\n}\n\nDocTypeMore.prototype.merge = function(typeDefinition) {\n  const returnTypeDefinition = clone(typeDefinition);\n\n  const transferFields = [\n    \"isRequired\",\n    \"isSyncable\",\n    \"shouldInit\",\n    \"shouldInitWith\",\n    \"initWithArg\",\n    \"displayNameString\"\n  ];\n\n  transferFields.forEach((instanceVariable) => {\n    if (this[instanceVariable] !== undefined) {\n      returnTypeDefinition[instanceVariable] = this[instanceVariable];\n    }\n  });\n\n  return returnTypeDefinition;\n};\n\nfunction DocTypeRef(refName) {\n  this.refName = refName;\n}\nDocTypeRef.prototype = create(DocType.prototype, {\n  'constructor': DocTypeRef\n});\nexport function DTRef(refName) {\n  return new DocTypeRef(refName);\n}\nDocTypeRef.prototype.deref = function(nodeDefinitions) {\n  const nodeDefinition = clone(nodeDefinitions[this.refName]);\n\n  const transferFields = [\n    \"isRequired\",\n    \"isSyncable\",\n    \"shouldInit\",\n    \"shouldInitWith\",\n    \"initWithArg\",\n    \"displayNameString\"\n  ];\n\n  transferFields.forEach((instanceVariable) => {\n    if (this[instanceVariable] !== undefined) {\n      nodeDefinition[instanceVariable] = this[instanceVariable];\n    }\n  });\n\n  return nodeDefinition.deref(nodeDefinitions);\n};\nDocTypeRef.prototype.generate = function(nodeDefinitions, context) {\n  return this.deref(nodeDefinitions).generate(nodeDefinitions, context);\n};\nDocTypeRef.prototype.generateOptions = function(nodeDefinitions) {\n  return this.deref(nodeDefinitions).generateOptions(nodeDefinitions);\n};\nDocTypeRef.prototype.description = function(nodeDefinitions) {\n  return this.deref(nodeDefinitions).description(nodeDefinitions);\n};\nDocTypeRef.prototype.displayName = function(nodeDefinitions) {\n  return this.deref(nodeDefinitions).displayName(nodeDefinitions);\n};\n\n\nfunction DocTypeSubObject(refName, objectModel) {\n  DocTypeRef.call(this, refName);\n  this.objectModel = objectModel;\n}\nDocTypeSubObject.prototype = create(DocTypeRef.prototype, {\n  'constructor': DocTypeSubObject\n});\nexport function DTSubObject(refName, objectModel) {\n  return new DocTypeSubObject(refName, objectModel);\n}\nDocTypeSubObject.prototype.deref = function(nodeDefinitions) {\n  const newObject = DocTypeRef.prototype.deref.call(this, nodeDefinitions);\n\n  newObject.objectModel = clone(newObject.objectModel);\n\n  forEach(this.objectModel, (definitionOrReference, key) => {\n    if (definitionOrReference instanceof DocTypeMore) {\n          // @ts-ignore TODO: Remove once converted to classes\n      newObject.objectModel[key] = definitionOrReference.merge(newObject.objectModel[key]);\n    } else {\n      newObject.objectModel[key] = definitionOrReference;\n    }\n  });\n\n  return newObject;\n};\n\n\nfunction DocTypeString() {\n  DocType.call(this);\n  this.initDefault = \"\";\n}\nDocTypeString.prototype = create(DocType.prototype, {\n  'constructor': DocTypeString\n});\nfunction DTString() {\n  return new DocTypeString();\n}\n\n\n\nfunction DocTypeBoolean() {\n  DocType.call(this);\n  this.initDefault = false;\n}\nDocTypeBoolean.prototype = create(DocType.prototype, {\n  'constructor': DocTypeBoolean\n});\nfunction DTBoolean() {\n  return new DocTypeBoolean();\n}\n\n\n\nfunction DocTypeInteger() {\n  DocType.call(this);\n  this.initDefault = 0;\n}\nDocTypeInteger.prototype = create(DocType.prototype, {\n  'constructor': DocTypeInteger\n});\nfunction DTInteger() {\n  return new DocTypeInteger();\n}\n\n\n\nfunction DocTypeFloat() {\n  DocType.call(this);\n  this.initDefault = 0.0;\n}\nDocTypeFloat.prototype = create(DocType.prototype, {\n  'constructor': DocTypeFloat\n});\nfunction DTFloat() {\n  return new DocTypeFloat();\n}\n\n\n\nfunction DocTypeArray(docType) {\n  DocType.call(this);\n  this.docType = docType;\n  this.initDefault = [];\n}\nDocTypeArray.prototype = create(DocType.prototype, {\n  'constructor': DocTypeArray\n});\nDocTypeArray.prototype.generateWith = function(initData, nodeDefinitions, context) {\n  if (isFunction(initData)) {\n    return initData(nodeDefinitions, context);\n  } else {\n    return initData.map((childData) => {\n      return this.init.generateChild(childData, nodeDefinitions, context);\n    });\n  }\n};\nDocTypeArray.prototype.generateOptions = function(nodeDefinitions) {\n  return this.docType.generateOptions(nodeDefinitions);\n};\nDocTypeArray.prototype.shouldEditWithArgs = function () {\n  return {\n    ...this.docType.shouldEditWithArgs(),\n    default: this.defaultValue\n  };\n};\nexport function DTArray(docType) {\n  return new DocTypeArray(docType);\n}\n\n\n\nfunction DocTypeMap() {\n  DocType.call(this);\n  this.initDefault = {};\n}\nDocTypeMap.prototype = create(DocType.prototype, {\n  'constructor': DocTypeMap\n});\nfunction DTMap() {\n  return new DocTypeMap();\n}\n\n\n\nfunction DocTypeObject(objectModel) {\n  DocType.call(this);\n  this.initDefault = {};\n  this.objectModel = objectModel;\n}\nObject.defineProperties(DocTypeObject.prototype, {\n  \"objectModel\": { \"set\": function(objectModel) { this.objectModel = objectModel;}}\n});\nDocTypeObject.prototype = create(DocType.prototype, {\n  'constructor': DocTypeObject\n});\nDocTypeObject.prototype.generateWith = function(initData, nodeDefinitions, context) {\n  if (isFunction(initData)) {\n    return initData(nodeDefinitions, context);\n  } else {\n    const generatedObject = {};\n    forEach(this.objectModel, (definitionOrReference, key) => {\n      if (key in initData) {\n        generatedObject[key] = this.generateChild(initData[key], nodeDefinitions, context);\n      } else {\n        if (definitionOrReference instanceof DocType) {\n          // @ts-ignore TODO: Remove once converted to classes\n          if (definitionOrReference.shouldInit) {\n            // @ts-ignore TODO: Remove once converted to classes\n            generatedObject[key] = definitionOrReference.generate(nodeDefinitions, context);\n          }\n        } else {\n          generatedObject[key] = definitionOrReference;\n        }\n      }\n    });\n    return generatedObject;\n  }\n};\n\nDocTypeObject.prototype.generateEditWithList = function() {\n  return compact(map(this.objectModel, (definitionOrReference, key) => {\n    if (!(definitionOrReference instanceof DocType)) return null;\n\n    // @ts-ignore TODO: Remove once converted to classes\n    const editWith = definitionOrReference.shouldEditWith;\n    if (!editWith) return null;\n\n    // @ts-ignore TODO: Remove once converted to classes\n    const displayName = definitionOrReference.displayName()\n\n    // @ts-ignore TODO: Remove once converted to classes\n    return [key, editWith, definitionOrReference.shouldEditWithArgs(), displayName];\n  }));\n};\n\n\nDocTypeObject.prototype.description = function(nodeDefinitions) {\n  return this.objectModel[\"subtype\"] || this.objectModel[\"type\"];\n};\nDocTypeObject.prototype.displayName = function(nodeDefinitions) {\n  return this.displayNameString || this.objectModel[\"subtype\"] || this.objectModel[\"type\"];\n};\nDocTypeObject.prototype.deref = function(nodeDefinitions) {\n  return this;\n};\nfunction DTObject(objectModel) {\n  return new DocTypeObject(objectModel);\n}\n\nfunction DocTypeOr() {\n  DocType.call(this);\n  this.orTypes = Array.prototype.slice.call(arguments);\n}\nDocTypeOr.prototype = create(DocType.prototype, {\n  'constructor': DocTypeOr\n});\nDocTypeOr.prototype.generateOptions = function(nodeDefinitions) {\n  return this.orTypes;\n};\nfunction DTOr(...args) {\n  // @ts-ignore TODO: Remove once converted to classes\n  return new DocTypeOr(...Array.prototype.slice.call(args));\n}\n\nfunction DocTypeEnum() {\n  DocType.call(this);\n  this.enumOptions = Array.prototype.slice.call(arguments);\n}\nDocTypeEnum.prototype = create(DocType.prototype, {\n  'constructor': DocTypeEnum\n});\nDocTypeEnum.prototype.generateOptions = function(nodeDefinitions) {\n  return this.enumOptions;\n};\nDocTypeEnum.prototype.shouldEditWithArgs = function() {\n  return {\n    options: this.enumOptions,\n    default: this.defaultValue\n  };\n};\nfunction DTEnum(...args) {\n  // @ts-ignore TODO: Remove once converted to classes\n  return new DocTypeEnum(...Array.prototype.slice.call(args));\n}\n\nfunction newStartWithInlineContent(contentKey) {\n  return {\n    contentKey: contentKey,\n    range: {\n      start: 0,\n      end: 0\n    }\n  };\n}\n\nexport const nodeDefinitions = {\n  uid: DTString().initWith(generateUUID),\n  sectionContent: DTArray(DTOr(\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"table\"),\n    DTRef(\"tp_clinical_reasoning\"),\n    DTRef(\"tp_clinical_skills\"),\n    DTRef(\"tp_knowledge\"),\n    DTRef(\"tp_management\"),\n    DTRef(\"tp_principles\"),\n    DTRef(\"tp_studies\"),\n    DTRef(\"video\"),\n  )),\n  answerCommentContent: DTArray(DTOr(\n    DTRef(\"alert\"),\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"RLOModal\"),\n    DTRef(\"tp_clinical_reasoning\"),\n    DTRef(\"tp_clinical_skills\"),\n    DTRef(\"tp_knowledge\"),\n    DTRef(\"tp_management\"),\n    DTRef(\"tp_principles\"),\n    DTRef(\"tp_studies\"),\n    DTRef(\"video\"),\n  )),\n  alertContent: DTArray(DTOr(\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  categoryMatcherContent: DTArray(DTOr(\n    DTRef(\"alert\"),\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  dialogBoxContent: DTArray(DTOr(\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"video\"),\n  )),\n  neutralTextContent: DTArray(DTOr(\n    DTRef(\"alert\"),\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  harmStatementContent: DTArray(DTOr(\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  modMapCardContent: DTArray(DTOr(\n    DTRef(\"underlying_core_concepts\"),\n    DTRef(\"mod_map_image\"),\n  )),\n  coreConceptContent: DTArray(DTOr(\n    DTRef(\"core_concept_header\"),\n    DTRef(\"RLOModal\"),\n  )),\n  deepDiveContent: DTArray(DTOr(\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"RLOModal\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  referencesContent: DTArray(DTOr(\n    DTRef(\"horizontalRule\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n  )),\n  freeTextContent: DTArray(DTOr(\n    DTRef(\"alert\"),\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  questionContent: DTArray(DTOr(\n    DTRef(\"alert\"),\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  summaryStatementContent: DTArray(DTOr(\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  listItemContent: DTArray(DTOr(\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"table\"),\n    DTRef(\"image\")\n  )),\n  tableCellContent: DTArray(DTOr(\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n  )),\n  tpContent: DTArray(DTOr(\n    DTRef(\"alert\"),\n    DTRef(\"audio\"),\n    DTRef(\"horizontalRule\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"RLOModal\"),\n    DTRef(\"section\"),\n    DTRef(\"table\"),\n    DTRef(\"video\"),\n  )),\n  styledChildren: DTOr(\n    DTString(),\n    DTArray(DTOr(\n      DTRef(\"text\"),\n      DTRef(\"bold\"),\n      DTRef(\"italic\"),\n      DTRef(\"underline\"),\n      DTRef(\"superscript\"),\n      DTRef(\"subscript\"),\n      DTRef(\"link\"),\n      DTRef(\"color\"),\n      DTRef(\"modalMedia\")\n    ))\n  ).initWith(\"\"),\n  section: DTObject({\n    type: \"section\",\n    uid: DTRef(\"uid\").init,\n    level: DTInteger(),\n    title: DTRef(\"styledChildren\").init,\n    content: DTRef(\"sectionContent\").init,\n    nested: DTBoolean().withDefault(false).initWith(true),\n    collapsible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    collapsed: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    bookmarked: DTBoolean().withDefault(false),\n    _newStartWith: \"title\",\n  }).withDisplayName(\"Section Header\"),\n  listItem: DTObject({\n    type: \"listItem\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"listItemContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n  }),\n  openListItem: DTSubObject(\"listItem\", {\n    content: DTMore().initWith([DTRef(\"paragraph\").init]),\n  }),\n  table: DTObject({\n    type: \"table\",\n    uid: DTRef(\"uid\").init,\n    rows: DTArray(DTRef(\"tableRow\")).initWith([DTRef(\"tableRow\").init]),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }).withDisplayName(\"Table\"),\n  tableRow: DTObject({\n    type: \"tableRow\",\n    uid: DTRef(\"uid\").init,\n    cells: DTArray(DTRef(\"tableCell\")).initWith([DTRef(\"tableCell\").init,DTRef(\"tableCell\").init]),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n  }),\n  tableCell: DTObject({\n    type: \"tableCell\",\n    uid: DTRef(\"uid\").init,\n    content: DTArray(DTRef(\"tableCellContent\")).initWith([DTRef(\"paragraph\")]).init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n  }),\n  textInput: DTObject({\n    type: \"textInput\",\n    uid: DTRef(\"uid\").init,\n    value: DTString(),\n    characterLimit: DTInteger().initWith(1000).editWith(\"integerTextInput\"),\n    boxLines: DTInteger().initWith(5).editWith(\"integerTextInput\"),\n    graded: DTBoolean().withDefault(false),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }),\n  multipleChoice: DTObject({\n    type: \"multipleChoice\",\n    uid: DTRef(\"uid\").init,\n    multipleSelect: DTBoolean().initWith(true).editWith(\"booleanInput\"),\n    content: DTArray(DTRef(\"multipleChoiceAnswer\")).initWith([DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init, DTRef(\"multipleChoiceAnswer\").init]),\n    graded: DTBoolean().withDefault(false),\n    classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }),\n  multipleChoiceAnswer: DTObject({\n    type: \"multipleChoiceAnswer\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledChildren\").init,\n    value: DTBoolean(),\n    answer: DTBoolean(),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    _newStartWith: \"content\"\n  }),\n  cdq_case_content: DTArray(DTOr(\n    DTRef(\"paragraph\"),\n    DTRef(\"regularList\"),\n    DTRef(\"numberedList\"),\n    DTRef(\"table\"),\n    DTRef(\"image\"),\n    DTRef(\"imageGallery\"),\n    DTRef(\"video\"),\n    DTRef(\"audio\"),\n    DTRef(\"cdq_question\"),\n  )),\n  cdq_case: DTSubObject(\"generic_page\", {\n    subtype: 'cdq_case',\n    classes: DTMore().initWith(['card', 'cdq_case']),\n    title: DTString().initWith(\"Mr. Smith\"),\n    content: DTRef(\"cdq_case_content\").initWith([\n      DTRef(\"paragraph\"),\n      DTRef(\"cdq_question\")\n    ]),\n    cdqFeatures: DTArray(DTRef(\"cdqFeature\")).initWith([DTRef(\"cdqFeature\").init, DTRef(\"cdqFeature\").init, DTRef(\"cdqFeature\").init]),\n  }),\n  cdqFeature: DTObject({\n    type: \"cdqFeature\",\n    uid: DTRef(\"uid\").init,\n    content: DTString().initWith(\"Feature\"),\n    _newStartWith: \"content\",\n  }),\n  cdqQuestion: DTObject({\n    type: \"cdqQuestion\",\n    uid: DTRef(\"uid\").init,\n    limit: DTOr(DTInteger(), DTBoolean()).withDefault(false).initWith(false).editWith(\"falseOrNumberInput\"),\n    isExplicitLimit: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    content: DTArray(DTRef(\"cdqQuestionAnswer\")).initWith([DTRef(\"cdqQuestionAnswer\").init, DTRef(\"cdqQuestionAnswer\").init, DTRef(\"cdqQuestionAnswer\").init]),\n    gradingRules: DTEnum('strict', 'loose').withDefault('strict').editWith(\"selectInput\"),\n    shouldShowGrade: DTBoolean().withDefault(false),\n    graded: DTBoolean().withDefault(false),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }),\n  cdqQuestionAnswer: DTObject({\n    type: \"cdqQuestionAnswer\",\n    uid: DTRef(\"uid\").init,\n    feature: DTString(),\n    content: DTRef(\"styledChildren\").init,\n    value: DTBoolean(),\n    answer: DTEnum(true, false, \"poison\"),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    _newStartWith: \"content\",\n  }),\n  categoryMatcher: DTObject({\n    type: \"categoryMatcher\",\n    uid: DTRef(\"uid\").init,\n    contentCategories: DTArray(DTRef(\"matchItem\")).initWith([DTRef(\"matchItem\").init]),\n    contentItems: DTArray(DTRef(\"matchItem\")).initWith([DTRef(\"matchItem\").init]),\n    value: DTMap(),\n    answer: DTMap(),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }),\n  matchItem: DTObject({\n    type: \"matchItem\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledChildren\").init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n    _newStartWith: \"content\",\n  }),\n  button: DTObject({\n    type: \"button\",\n    title: DTRef(\"styledChildren\").init,\n    onClick: DTArray(DTRef(\"action\")).init,\n    uid: DTRef(\"uid\").init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n    _newStartWith: \"title\",\n  }),\n  ratingBar: DTObject({\n    type: \"ratingBar\",\n    uid: DTRef(\"uid\").init,\n    maxValue: DTInteger().initWith(5).editWith(\"integerTextInput\"),\n    _newStartWith: {contentKey: \"maxValue\"}\n  }),\n  action: DTObject({\n    type: \"action\",\n    uid: DTRef(\"uid\").init,\n    arguments: DTMap()\n  }),\n  text: DTObject({\n    type: \"text\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  bold: DTObject({\n    type: \"bold\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  underline: DTObject({\n    type: \"underline\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  italic: DTObject({\n    type: \"italic\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  superscript: DTObject({\n    type: \"superscript\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  subscript: DTObject({\n    type: \"subscript\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  modalMedia: DTObject({\n    type: \"modalMedia\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  link: DTObject({\n    type: \"link\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  color: DTObject({\n    type: \"color\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledContent\")\n  }),\n  root: DTSubObject(\"section\", {\n    subtype: 'root',\n    content: DTArray(DTOr(\n      DTRef(\"author\"),\n      DTRef(\"care_discussion_page\"),\n      DTRef(\"case_synopsis_page\"),\n      DTRef(\"clinical_reasoning_page\"),\n      DTRef(\"excellence_in_action_page\"),\n      DTRef(\"generic_page\"),\n      DTRef(\"history_page\"),\n      DTRef(\"learning_objectives_page\"),\n      DTRef(\"management_page\"),\n      DTRef(\"physical_exam_page\"),\n      DTRef(\"saq_page\"),\n      DTRef(\"teaching_page\"),\n      DTRef(\"testing_page\"),\n      DTRef(\"therapeutics_page\"),\n      DTRef(\"overview_page\"),\n      DTRef(\"clinical_feature_page\"),\n      DTRef(\"epidemiology_page\"),\n      DTRef(\"implications_for_management_page\"),\n      DTRef(\"implications_for_further_workup_page\"),\n      DTRef(\"mod_map_page\"),\n    )),\n    nested: DTMore().initWith(false),\n    classes: DTMore().initWith([\"root\"]),\n    sex: DTEnum('unspecified', 'female', 'male', 'other').withDefault('unspecified').initWith('unspecified').editWith(\"selectInput\").withDisplayName(\"Sex\"),\n    race: DTEnum('unknown', 'white', 'black', 'native_american_or_islander', 'asian', 'hispanic').withDefault('unknown').initWith('unknown').editWith(\"selectInput\").withDisplayName(\"Race\"),\n    clinical_locations: DTArray(DTEnum(\n      \"Emergency department\",\n      \"Home visit\",\n      \"Inpatient/hospital\",\n      \"Intensive care\",\n      \"Outpatient clinic/urgent care\",\n      \"Skilled nursing facility\",\n      \"Other\"\n    )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Locations\"),\n    clinical_disciplines: DTArray(DTEnum(\n      \"Critical Care\",\n      \"Emergency Medicine\",\n      \"Family Medicine\",\n      \"Geriatrics\",\n      \"Internal Medicine\",\n      \"Neurology\",\n      \"Obstetrics & Gynecology\",\n      \"Palliative Care\",\n      \"Pediatrics\",\n      \"Psychiatry\",\n      \"Radiology\",\n      \"Surgery\"\n    )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Disciplines\"),\n    systems: DTArray(DTEnum(\n      \"Allergy/Immune/Infection\",\n      \"Cardiovascular\",\n      \"Endocrine\",\n      \"Female Reproductive & Breast\",\n      \"Gastrointestinal\",\n      \"Growth & Development\",\n      \"Head & Neck\",\n      \"Health & Wellness\",\n      \"Hematopoietic\",\n      \"Male Reproductive\",\n      \"Metabolic & Nutrition\",\n      \"Mind & Behavioral\",\n      \"Musculoskeletal\",\n      \"Nervous\",\n      \"Renal & Urinary\",\n      \"Respiratory\",\n      \"Skin & Connective Tissue\"\n    )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Systems\"),\n    clinical_focuses: DTArray(DTEnum(\n      \"Diagnosis\",\n      \"Course of Illness\",\n      \"Further Work Up\",\n      \"Management\",\n      \"Prevention\"\n    )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Focuses\"),\n    age_groups: DTArray(DTEnum(\n      \"Newborn/Infant (0-1 year)\",\n      \"Child (1-12 years)\",\n      \"Adolescent (13-18 years)\",\n      \"Adult (19-64 years)\",\n      \"Older Adult / Elderly (65+ years)\",\n      \"N/A\"\n    )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Age Groups\"),\n    clinical_excellence: DTArray(DTEnum(\n      \"Diagnostic Excellence\",\n      \"High Value Care\",\n      \"Palliative Care\",\n      \"Social Determinants of Health\",\n      \"Telemedicine\",\n      \"Trauma-Informed Care\"\n    )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Excellence Integration\"),\n    clinical_principles: DTArray(DTEnum(...CLINICAL_PRINCIPLES)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Clinical Principles\"),\n    basic_science_disciplines: DTArray(DTEnum(\n      \"Anatomy\",\n      \"Biochemistry\",\n      \"Embryology\",\n      \"Genetics and Genomics\",\n      \"Immunology / Inflammation\",\n      \"Microbiology\",\n      \"Molecular Biology\",\n      \"Neuroscience\",\n      \"Pathology\",\n      \"Pharmacology\",\n      \"Physiology\"\n    )).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Sciences Integration\"),\n    sciences_core_concepts: DTArray(DTEnum(...SCIENCES_CORE_CONCEPTS)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Sciences Core Concepts\"),\n    presenting_problems: DTArray(DTEnum(...PRESENTING_PROBLEMS)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Presenting Problem\"),\n    final_diagnoses: DTArray(DTEnum(...FINAL_DIAGNOSES)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Final Diagnosis\"),\n    differential_diagnosis: DTArray(DTEnum(...DIFFERENTIAL_DIAGNOSIS)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Differential Diagnosis\"),\n    additional_diagnoses: DTArray(DTEnum(...ADDITIONAL_DIAGNOSES)).withDefault([]).initWith([]).editWith(\"multiSelectInput\").withDisplayName(\"Additional Conditions\"),\n    collapsible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    disableDiagnoses: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    disableNotes: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    disableFindings: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    disableBookmarks: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    disableLabValues: DTBoolean().withDefault(true).editWith(\"booleanInput\"),\n    onlyOneUncollapsedSection: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n  }),\n\n  generic_page: DTSubObject(\"section\", {\n    subtype: 'generic_page',\n    content: DTArray(DTOr(\n      DTRef(\"alert\"),\n      DTRef(\"audio\"),\n      DTRef(\"category_matcher_question\"),\n      DTRef(\"core_concept_header\"),\n      DTRef(\"causal_explanation\"),\n      DTRef(\"deep_dive\"),\n      DTRef(\"dialog_box\"),\n      DTRef(\"free_text_question\"),\n      DTRef(\"harm_statement\"),\n      DTRef(\"horizontalRule\"),\n      DTRef(\"image\"),\n      DTRef(\"imageGallery\"),\n      DTRef(\"mcq_diff_diagnosis\"),\n      DTRef(\"mcq_feq\"),\n      DTRef(\"mcq_multiple\"),\n      DTRef(\"mcq_no_best\"),\n      DTRef(\"mcq_single\"),\n      DTRef(\"neutral_text\"),\n      DTRef(\"numberedList\"),\n      DTRef(\"paragraph\"),\n      DTRef(\"references\"),\n      DTRef(\"regularList\"),\n      DTRef(\"RLOModal\"),\n      DTRef(\"section\"),\n      DTRef(\"summary_statement\"),\n      DTRef(\"table\"),\n      DTRef(\"tp_clinical_reasoning\"),\n      DTRef(\"tp_clinical_skills\"),\n      DTRef(\"tp_knowledge\"),\n      DTRef(\"tp_management\"),\n      DTRef(\"tp_principles\"),\n      DTRef(\"tp_studies\"),\n      DTRef(\"video\"),\n    )).init,\n    classes: DTMore().initWith([\"card\"]),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(true),\n  }).withDisplayName(\"Page - Generic\"),\n  care_discussion_page: DTSubObject(\"generic_page\", {\n    subtype: \"care_discussion_page\",\n    classes: DTMore().initWith([\"card\", \"care_discussion_card\"])\n  }).withDisplayName(\"Page - Care Discussion\"),\n  case_synopsis_page: DTSubObject(\"section\", {\n    subtype: 'case_synopsis_page',\n    content: DTArray(DTOr(\n      DTRef(\"horizontalRule\"),\n      DTRef(\"image\"),\n      DTRef(\"numberedList\"),\n      DTRef(\"paragraph\"),\n      DTRef(\"regularList\"),\n      DTRef(\"section\"),\n      DTRef(\"table\"),\n    )).init,\n    uid: DTMore().initWith('case_synopsis_card'),\n    classes: DTMore().initWith(['card', 'case_synopsis_card']),\n    title: DTString().initWith(\"Case Synopsis\")\n  }).withDisplayName(\"Page - Synopsis\"),\n  category_page: DTSubObject(\"generic_page\", {\n    subtype: \"category_page\",\n    classes: DTMore().initWith([\"card\", \"category_card\"])\n  }).withDisplayName(\"Page - Category\"),\n  clinical_reasoning_page: DTSubObject(\"generic_page\", {\n    subtype: \"clinical_reasoning_page\",\n    classes: DTMore().initWith([\"card\", \"clinical_reasoning_card\"])\n  }).withDisplayName(\"Page - Clinical Reasoning\"),\n  excellence_in_action_page: DTSubObject(\"generic_page\", {\n    subtype: \"excellence_in_action_page\",\n    classes: DTMore().initWith([\"card\", \"excellence_in_action_card\"]),\n    title: DTString().initWith(\"Excellence In Action\"),\n  }).withDisplayName(\"Page - Excellence In Action\"),\n  history_page: DTSubObject(\"generic_page\", {\n    subtype: \"history_page\",\n    classes: DTMore().initWith([\"card\", \"history_card\"])\n  }).withDisplayName(\"Page - History\"),\n  learning_objectives_page: DTSubObject(\"generic_page\", {\n    subtype: \"learning_objectives_page\",\n    content: DTArray(DTOr(\n      DTRef(\"learningObjectivesList\")\n    )).initWith([\n      DTRef(\"learningObjectivesList\").init\n    ]),\n    classes: DTMore().initWith([\"card\", \"learning_objectives_card\"]),\n  }).withDisplayName(\"Page - Learning Objectives\"),\n  management_page: DTSubObject(\"generic_page\", {\n    subtype: \"management_page\",\n    classes: DTMore().initWith([\"card\", \"management_card\"])\n  }).withDisplayName(\"Page - Management\"),\n  physical_exam_page: DTSubObject(\"generic_page\", {\n    subtype: \"physical_exam_page\",\n    classes: DTMore().initWith([\"card\", \"physical_exam_card\"])\n  }).withDisplayName(\"Page - Physical Exam\"),\n  references_page: DTSubObject(\"generic_page\", {\n    subtype: \"references_page\",\n    classes: DTMore().initWith([\"card\", \"references_card\"])\n  }).withDisplayName(\"Page - References\"),\n  saq_page: DTSubObject(\"section\", {\n    subtype: 'saq_page',\n    content: DTArray(DTOr(\n      DTRef(\"category_matcher_question\"),\n      DTRef(\"free_text_question\"),\n      DTRef(\"mcq_diff_diagnosis\"),\n      DTRef(\"mcq_feq\"),\n      DTRef(\"mcq_multiple\"),\n      DTRef(\"mcq_no_best\"),\n      DTRef(\"mcq_single\"),\n    )).init,\n    classes: DTMore().initWith(['card', 'saq_card']),\n    title: DTString().initWith(\"Assessment Question\"),\n  }).withDisplayName(\"Page - SAQ\"),\n  teaching_page: DTSubObject(\"generic_page\", {\n    subtype: \"teaching_page\",\n    classes: DTMore().initWith([\"card\", \"teaching_card\"])\n  }).withDisplayName(\"Page - Teaching\"),\n  testing_page: DTSubObject(\"generic_page\", {\n    subtype: \"testing_page\",\n    classes: DTMore().initWith([\"card\", \"testing_card\"])\n  }).withDisplayName(\"Page - Testing\"),\n  therapeutics_page: DTSubObject(\"generic_page\", {\n    subtype: \"therapeutics_page\",\n    classes: DTMore().initWith([\"card\", \"therapeutics_card\"])\n  }).withDisplayName(\"Page - Therapeutics\"),\n  overview_page: DTSubObject(\"overview_card\", {\n    subtype: \"overview_page\",\n    classes: DTMore().initWith([\"card\", \"overview_card\"]),\n    title: DTString().initWith(\"Overview\")\n  }).withDisplayName(\"Page - Overview\"),\n  clinical_feature_page: DTSubObject(\"clinical_feature_card\", {\n    subtype: \"clinical_feature_page\",\n    classes: DTMore().initWith([\"card\", \"clinical_feature_card\"]),\n    title: DTString().initWith(\"Clinical Feature\")\n  }).withDisplayName(\"Page - Clinical Feature\"),\n  epidemiology_page: DTSubObject(\"epidemiology_card\", {\n    subtype: \"epidemiology_page\",\n    classes: DTMore().initWith([\"card\", \"epidemiology_card\"]),\n    title: DTString().initWith(\"Epidemiology\")\n  }).withDisplayName(\"Page - Epidemiology\"),\n  implications_for_management_page: DTSubObject(\"implications_for_management_card\", {\n    subtype: \"implications_for_management_page\",\n    classes: DTMore().initWith([\"card\", \"implications_for_management_card\"]),\n    title: DTString().initWith(\"Implications for Further Management\")\n  }).withDisplayName(\"Page - Implications for Further Management\"),\n  implications_for_further_workup_page: DTSubObject(\"implications_for_further_workup_card\", {\n    subtype: \"implications_for_further_workup_page\",\n    classes: DTMore().initWith([\"card\", \"implications_for_further_workup_card\"]),\n    title: DTString().initWith(\"Implications for Further Workup\")\n  }).withDisplayName(\"Page - Implications for Further Workup\"),\n  mod_map_page: DTSubObject(\"mod_map_card\", {\n    subtype: \"mod_map_page\",\n    classes: DTMore().initWith([\"card\", \"mod_map_card\"]),\n    title: DTString().initWith(\"MOD Map (Mechanism of Disease & Underlying Concepts)\")\n  }).withDisplayName(\"Page - MOD Map (Mechanism of Disease & Underlying Concepts)\"),\n  alert: DTSubObject(\"section\", {\n    subtype: 'alert',\n    content: DTRef(\"alertContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"alert\"]),\n  }).withDisplayName(\"Alert\"),\n  audio: DTObject({\n    type: \"audio\",\n    uid: DTRef(\"uid\").init,\n    title: DTRef(\"styledChildren\").init,\n    source: DTEnum(\"local\").initWith(\"local\"),\n    url: DTString().init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n    _newStartWith: {menu: 'mediaPicker'}\n  }).withDisplayName(\"Audio\"),\n  category_matcher_question: DTSubObject(\"question\", {\n    subtype: 'category_matcher_question',\n    content: DTRef(\"categoryMatcherContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"categoryMatcher\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Question Item - Matching\"),\n  causal_explanation: DTSubObject(\"section\", {\n    subtype: 'causal_explanation',\n    title: DTString().initWith(\"Causal Explanation (Why?)\"),\n    content: DTRef(\"deepDiveContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"causal_explanation\"]),\n  }).withDisplayName(\"Causal Explanation\"),\n  deep_dive: DTSubObject(\"section\", {\n    subtype: 'deep_dive',\n    title: DTString().initWith(\"\"),\n    content: DTRef(\"deepDiveContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"expert_comment\"]),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(true),\n  }).withDisplayName(\"Deep Dive\"),\n  dialog_box: DTSubObject(\"section\", {\n    subtype: 'dialog_box',\n    content: DTRef(\"dialogBoxContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"dialog_box\"]),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(true),\n  }).withDisplayName(\"Dialog Box\"),\n  free_text_question: DTSubObject(\"question\", {\n    classes: DTMore().initWith([\"question\", \"free_text_question\"]),\n    subtype: 'free_text_question',\n    content: DTRef(\"freeTextContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"textInput\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Question Item - Free Text \"),\n  harm_statement: DTSubObject(\"section\", {\n    subtype: 'harm_statement',\n    content: DTRef(\"harmStatementContent\").initWith([DTRef(\"paragraph\").init]),\n    title: DTString().initWith(\"Harm Statement\"),\n    classes: DTMore().initWith([\"harm_statement\"]),\n  }).withDisplayName(\"Harm Statement\"),\n  horizontalRule: DTObject({\n    type: \"horizontalRule\",\n    uid: DTRef(\"uid\").init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n  }).withDisplayName(\"Horizontal Rule\"),\n  image: DTObject({\n    type: \"image\",\n    uid: DTRef(\"uid\").init,\n    title: DTRef(\"styledChildren\").init,\n    source: DTEnum(\"local\").initWith(\"local\"),\n    url: DTString().init,\n    classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n    alignment: DTEnum(\"left\", \"right\", \"none\").withDefault(\"none\").editWith(\"selectInput\"),\n    _newStartWith: {menu: 'mediaPicker'}\n  }).withDisplayName(\"Image\"),\n  imageGallery: DTObject({\n    type: \"imageGallery\",\n    uid: DTRef(\"uid\").init,\n    images: DTArray(DTRef(\"image\")).initWith([DTRef(\"image\").init]),\n    classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }).withDisplayName(\"Image Gallery\"),\n  learningObjective: DTObject({\n    type: \"learningObjective\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledChildren\").init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n  }).withDisplayName(\"Learning Objective\"),\n  learningObjectivesList: DTObject({\n    type: \"learningObjectivesList\",\n    uid: DTRef(\"uid\").init,\n    content: DTArray(DTRef(\"learningObjective\")).initWith([]),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n  }).withDisplayName(\"Learning Objective List\"),\n  mcq_diff_diagnosis: DTSubObject(\"question\", {\n    subtype: 'mcq_diff_diagnosis',\n    content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Question Item - MCQ Differential Diagnosis\"),\n  mcq_feq: DTSubObject(\"question\", {\n    subtype: 'mcq_feq',\n    content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Question Item - MCQ FEQ\"),\n  mcq_multiple: DTSubObject(\"question\", {\n    subtype: 'mcq_multiple',\n    content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"paragraph\").initWith({content: \"<strong>Select all that apply.</strong>\"}), DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Question Item - MCQ Multiple Response\"),\n  mcq_no_best: DTSubObject(\"question\", {\n    subtype: 'mcq_no_best',\n    content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"paragraph\").initWith({content: \"<strong>Select all that apply.</strong>\"}), DTRef(\"multipleChoice\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Question Item - No Single Best Answer\"),\n  mcq_single: DTSubObject(\"question\", {\n    subtype: 'mcq_single',\n    content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"paragraph\").initWith({content: \"<strong>Choose the single best answer.</strong>\"}), DTRef(\"multipleChoice\").initWith({multipleSelect: false}), DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Question Item - MCQ Single Answer\"),\n  neutral_text: DTSubObject(\"section\", {\n    subtype: 'neutral_text',\n    content: DTRef(\"neutralTextContent\").initWith([DTRef(\"paragraph\").init]),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(true),\n    classes: DTMore().initWith([\"neutral_text\"]),\n  }).withDisplayName(\"Neutral Text Expand\"),\n  numberedList: DTObject({\n    type: \"numberedList\",\n    uid: DTRef(\"uid\").init,\n    content: DTArray(DTRef(\"listItem\")).initWith([DTRef(\"listItem\").init]),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }).withDisplayName(\"List - Numbered\"),\n  paragraph: DTObject({\n    type: \"paragraph\",\n    uid: DTRef(\"uid\").init,\n    content: DTRef(\"styledChildren\").init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    bookmarked: DTBoolean().withDefault(false),\n    _newStartWith: \"content\",\n  }).withDisplayName(\"Paragraph\"),\n  references: DTSubObject(\"section\", {\n    subtype: 'references',\n    title: DTString().initWith(\"References\"),\n    content: DTRef(\"referencesContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"references\"]),\n    _newStartWith: undefined,\n  }).withDisplayName(\"References\"),\n  regularList: DTObject({\n    type: \"regularList\",\n    uid: DTRef(\"uid\").init,\n    content: DTArray(DTRef(\"listItem\")).initWith([DTRef(\"listItem\").init]),\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n  }).withDisplayName(\"List - Bulleted\"),\n  RLOModal: DTObject({\n    type: \"RLOModal\",\n    uid: DTRef(\"uid\").init,\n    title: DTRef(\"styledChildren\").init,\n    content: DTRef(\"alertContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTArray(DTString()).withDefault([]).editWith(\"tagsInput\"),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    bookmarked: DTBoolean().withDefault(false),\n    nested: DTBoolean().withDefault(false).initWith(true),\n    collapsible: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n    collapsed: DTBoolean().withDefault(false).editWith(\"booleanInput\"),\n  }).withDisplayName(\"Reusable Content\"),\n  summary_statement: DTSubObject(\"question\", {\n    subtype: 'summary_statement',\n    classes: DTMore().initWith([\"question\", \"summary_statement_question\"]),\n    title: DTString().initWith(\"Summary Statement Question\"),\n    content: DTRef(\"summaryStatementContent\").initWith([DTRef(\"paragraph\").init, DTRef(\"textInput\").init, DTRef(\"submit_button\").init, DTRef(\"answer_comment\").init]),\n  }).withDisplayName(\"Summary Statement\"),\n  tp_clinical_reasoning: DTSubObject(\"section\", {\n    subtype: 'tp_clinical_reasoning',\n    content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"clinical_reasoning\"]),\n  }).withDisplayName(\"TP - Clinical Reasoning\"),\n  tp_clinical_skills: DTSubObject(\"section\", {\n    subtype: 'tp_clinical_skills',\n    content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"clinical_skills\"]),\n  }).withDisplayName(\"TP - Clinical Skills\"),\n  tp_knowledge: DTSubObject(\"section\", {\n    subtype: 'tp_knowledge',\n    content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"knowledge\"]),\n  }).withDisplayName(\"TP - Knowledge\"),\n  tp_management: DTSubObject(\"section\", {\n    subtype: 'tp_management',\n    content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"management\"]),\n  }).withDisplayName(\"TP - Management\"),\n  tp_principles: DTSubObject(\"section\", {\n    subtype: 'tp_principles',\n    content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"principles\"]),\n  }).withDisplayName(\"TP - Principles\"),\n  tp_studies: DTSubObject(\"section\", {\n    subtype: 'tp_studies',\n    content: DTRef(\"tpContent\").initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"studies\"]),\n  }).withDisplayName(\"TP - Studies\"),\n  video: DTObject({\n    type: \"video\",\n    uid: DTRef(\"uid\").init,\n    title: DTRef(\"styledChildren\").init,\n    source: DTEnum(\"local\", \"youtube\", \"vimeo\").initWith(\"local\"),\n    url: DTString().init,\n    classes: DTArray(DTString()).withDefault([]),\n    inactive: DTBoolean().withDefault(0),\n    invisible: DTBoolean().withDefault(false),\n    bookmarked: DTBoolean().withDefault(false),\n    _newStartWith: {menu: 'mediaPicker'}\n  }).withDisplayName(\"Video\"),\n  answer_comment: DTSubObject(\"section\", {\n    subtype: 'answer_comment',\n    content: DTRef(\"answerCommentContent\").initWith([DTRef(\"paragraph\").init]),\n    title: DTString().initWith(\"Answer Comment\"),\n    classes: DTMore().initWith([\"answer_comment\"]),\n    invisible: DTMore().initWith(true)\n  }),\n  submit_button: DTSubObject(\"button\", {\n    subtype: 'submit_button',\n    title: DTString().initWith(\"Submit\")\n  }),\n  save_button: DTSubObject(\"button\", {\n    subtype: 'submit_button',\n    title: DTString().initWith(\"Save\")\n  }),\n  question: DTSubObject(\"section\", {\n    subtype: 'question',\n    content: DTRef(\"questionContent\").initWith([DTRef(\"paragraph\").init]),\n    title: DTString().initWith(\"Question\"),\n    classes: DTMore().initWith([\"question\"]),\n    _newStartWith: undefined,\n  }).withDisplayName(\"Question\"),\n  cdq_question: DTSubObject(\"question\", {\n    classes: DTMore().initWith([\"question\"]),\n    subtype: 'cdq_question',\n    content: DTMore().initWith([DTRef(\"paragraph\").init, DTRef(\"cdqQuestion\").init, DTRef(\"submit_button\").init]),\n  }),\n  finish_case_page: DTSubObject(\"generic_page\", {\n    subtype: 'finish_case_page',\n    uid: DTMore().initWith('finish_case_card'),\n    classes: DTMore().initWith(['card', 'finish_case_card']),\n    title: DTString().initWith(\"Case Summary Download\")\n  }),\n  release_notes_page: DTSubObject(\"generic_page\", {\n    subtype: 'release_notes_page',\n    uid: DTMore().initWith('release_notes_card'),\n    classes: DTMore().initWith(['card', 'release_notes_card']),\n    title: DTString().initWith(\"Release Notes\"),\n    content: DTArray(DTOr(\n      DTRef(\"release_notes_section\")\n    )).init\n  }).withDisplayName(\"Release Notes\"),\n  release_notes_section: DTSubObject(\"section\", {\n    subtype: 'release_notes_section',\n    classes: DTMore().initWith(['release_notes_section']),\n    title: DTString().initWith(\"M_NAME DD, YYYY\"),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(true),\n    content: DTArray(DTOr(\n      DTRef(\"regularList\"),\n      DTRef(\"section\")\n    )).init\n  }).withDisplayName(\"Release Notes Section\"),\n  content_updates: DTSubObject(\"section\", {\n    subtype: 'content_updates',\n    classes: DTMore().initWith(['release_notes_updates_section']),\n    title: DTString().initWith(\"Content Updates:\"),\n    content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n  }),\n  engagement_questions_updates: DTSubObject(\"section\", {\n    subtype: 'engagement_questions_updates',\n    classes: DTMore().initWith(['release_notes_updates_section']),\n    title: DTString().initWith(\"Engagement Questions:\"),\n    content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n  }),\n  self_assesment_questions_updates: DTSubObject(\"section\", {\n    subtype: 'self_assesment_questions_updates',\n    classes: DTMore().initWith(['release_notes_updates_section']),\n    title: DTString().initWith(\"Self-Assessment Questions:\"),\n    content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n  }),\n  references_updates: DTSubObject(\"section\", {\n    subtype: 'references_updates',\n    classes: DTMore().initWith(['release_notes_updates_section']),\n    title: DTString().initWith(\"References:\"),\n    content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n  }),\n  custom_updates: DTSubObject(\"section\", {\n    subtype: 'custom_updates',\n    classes: DTMore().initWith(['release_notes_updates_section']),\n    title: DTString().initWith(\"\"),\n    content: DTArray(DTOr(DTRef(\"regularList\"))).initWith([DTRef(\"regularList\").init]),\n  }),\n  signature_case_template: DTSubObject(\"root\", {\n    content: DTMore().initWith([\n      DTRef(\"author\"),\n      DTRef(\"generic_page\"),\n      DTRef(\"finish_case_page\"),\n      DTRef(\"release_notes_page\"),\n      DTRef(\"learning_objectives_page\").initWith({\n        uid: 'learning_objectives_card',\n        title: 'Learning Objectives',\n      }),\n      DTRef(\"case_synopsis_page\")\n    ])\n  }),\n  cdq_case_template: DTSubObject(\"root\", {\n    content: DTArray(DTOr(\n      DTRef(\"cdq_case\"),\n    )).initWith([\n      DTRef(\"cdq_case\"),\n    ]),\n  }),\n  test_case_template: DTSubObject(\"root\", {\n    content: DTMore().initWith([\n      DTRef(\"learning_objectives_card\"),\n    ]),\n  }),\n  illness_script_template: DTSubObject(\"root\", {\n    content: DTArray(DTOr(\n      DTRef(\"overview_card\"),\n      DTRef(\"epidemiology_card\"),\n      DTRef(\"clinical_feature_card\"),\n      DTRef(\"implications_for_further_workup_card\"),\n      DTRef(\"implications_for_management_card\"),\n      DTRef(\"mod_map_card\"),\n    )).initWith([\n      DTRef(\"lead_editors\"),\n      DTRef(\"contributing_authors\"),\n      DTRef(\"overview_card\"),\n      DTRef(\"epidemiology_card\"),\n      DTRef(\"clinical_feature_card\"),\n      DTRef(\"clinical_feature_card\"),\n      DTRef(\"clinical_feature_card\"),\n      DTRef(\"clinical_feature_card\"),\n      DTRef(\"clinical_feature_card\"),\n      DTRef(\"clinical_feature_card\"),\n      DTRef(\"implications_for_further_workup_card\"),\n      DTRef(\"implications_for_management_card\"),\n      DTRef(\"mod_map_card\"),\n      DTRef(\"release_notes_page\"),\n      DTRef(\"synopsis_page\"),\n    ]),\n    disableNotes: false,\n    disableFeedback: false,\n    disableFindings: true,\n    disableBookmarks: false,\n    disableDiagnoses: true,\n    disableLabValues: false,\n  }),\n  question_vignette: DTSubObject(\"section\", {\n    subtype: 'question_vignette',\n    title: DTString().initWith(\"Vignette\"),\n    content: DTArray(DTOr(\n      DTRef(\"image\"),\n      DTRef(\"imageGallery\"),\n      DTRef(\"numberedList\"),\n      DTRef(\"paragraph\"),\n      DTRef(\"regularList\"),\n    )).initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"question_vignette\"]),\n  }),\n  question_stem: DTSubObject(\"section\", {\n    subtype: 'question_stem',\n    title: DTString().initWith(\"Stem\"),\n    content: DTArray(DTOr(\n      DTRef(\"paragraph\"),\n    )).initWith([DTRef(\"paragraph\").init]),\n    classes: DTMore().initWith([\"question_stem\"]),\n  }),\n  assessment_question_mcq: DTSubObject(\"generic_page\", {\n    subtype: 'assessment_question_mcq',\n    title: DTString().initWith(\"Question\"),\n    content: DTArray(DTOr(\n      DTRef(\"question_vignette\"),\n      DTRef(\"question_stem\"),\n      DTRef(\"multipleChoice\"),\n    )).initWith([\n      DTRef(\"question_vignette\").init,\n      DTRef(\"question_stem\").init,\n      DTRef(\"multipleChoice\").initWith({multipleSelect: false})\n    ]),\n    classes: DTMore().initWith([\"card\", \"assessment_question_mcq\"]),\n    collapsed: DTMore().initWith(false)\n  }),\n  assessment_question_mcq_template: DTSubObject(\"root\", {\n    content: DTArray(DTOr(\n      DTRef(\"assessment_question_mcq\")\n    )).initWith([DTRef(\"assessment_question_mcq\").init]),\n  }),\n  author: DTSubObject(\"paragraph\", {\n    content: DTString().initWith(\"<strong>Author(s):</strong>\"),\n    classes: DTMore().initWith([\"authors\"])\n  }).withDisplayName(\"Authors\"),\n  lead_editors: DTSubObject(\"paragraph\", {\n    content: DTString().initWith(\"<strong>Lead Editors:</strong>\"),\n    classes: DTMore().initWith([\"lead_editors\"])\n  }),\n  contributing_authors: DTSubObject(\"paragraph\", {\n    content: DTString().initWith(\"<strong>Contributing Authors:</strong>\"),\n    classes: DTMore().initWith([\"contributing_authors\"])\n  }),\n  overview_card: DTSubObject(\"generic_page\", {\n    title: DTString().initWith(\"Overview\"),\n    classes: DTMore().initWith([\"card\", \"overview_card\"]),\n    collapsed: DTMore().initWith(false),\n    content: DTMore().initWith([\n      DTRef(\"paragraph\"),\n    ])\n  }).withDisplayName(\"Overview\"),\n  epidemiology_card: DTSubObject(\"generic_page\", {\n    title: DTString().initWith(\"Epidemiology\"),\n    classes: DTMore().initWith([\"card\", \"epidemiology_card\"]),\n    content: DTMore().initWith([\n      DTRef(\"paragraph\"),\n    ])\n  }).withDisplayName(\"Epidemiology\"),\n  clinical_feature_card: DTSubObject(\"generic_page\", {\n    title: DTString().initWith(\"Clinical Feature\"),\n    classes: DTMore().initWith([\"card\", \"clinical_feature_card\"]),\n    content: DTMore().initWith([\n      DTRef(\"paragraph\"),\n      DTRef(\"section\"),\n    ])\n  }),\n  mod_map_card: DTSubObject(\"generic_page\", {\n    title: DTString().initWith(\"Mechanism of Disease & Underlying Concepts\"),\n    classes: DTMore().initWith([\"card\", \"mod_map_card\"]),\n    content: DTRef(\"modMapCardContent\").initWith([\n      DTRef(\"mod_map_image\"),\n      DTRef(\"underlying_core_concepts\"),\n    ])\n  }),\n  mod_map_image: DTSubObject(\"image\", {\n    alignment: DTMore().initWith(\"left\"),\n    classes: DTMore().initWith([\"mod-map-image\"])\n  }).withDisplayName(\"MOD Map Image\"),\n  synopsis_page: DTSubObject(\"section\", {\n    subtype: 'synopsis_page',\n    content: DTArray(DTOr(\n      DTRef(\"horizontalRule\"),\n      DTRef(\"image\"),\n      DTRef(\"numberedList\"),\n      DTRef(\"paragraph\"),\n      DTRef(\"regularList\"),\n      DTRef(\"section\"),\n      DTRef(\"table\"),\n    )).initWith([\n      DTSubObject(\"paragraph\", {\n        content: DTString().initWith(\"Building on the traditional illness script format, Integrated Illness Scripts embed basic science core concepts as causal and explanatory mechanisms associated with clinical features. Integrated Illness Scripts are designed specifically to promote cognitive integration and provide a framework for learners to link basic science and clinical knowledge.\")\n      }),\n    ]),\n    uid: DTMore().initWith('synopsis_card'),\n    classes: DTMore().initWith(['card', 'synopsis_card']),\n    title: DTString().initWith(\"Synopsis\"),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(true),\n    invisible: DTMore().initWith(true)\n  }).withDisplayName(\"Page - Synopsis\"),\n  underlying_core_concepts: DTSubObject(\"section\", {\n    subtype: 'underlying_core_concepts',\n    title: DTString().initWith(\"Underlying Core Concepts\"),\n    content: DTRef(\"coreConceptContent\").initWith([DTRef(\"core_concept_header\").init]),\n    classes: DTMore().initWith([\"underlying_core_concepts\"])\n  }).withDisplayName(\"Underlying Core Concepts\"),\n  core_concept_header: DTSubObject(\"section\", {\n    subtype: 'core_concept_header',\n    content: DTMore().initWith([DTRef(\"paragraph\")]),\n    classes: DTMore().initWith([\"core_concept_header\"]),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(false)\n  }).withDisplayName(\"Core Concept Header\"),\n  implications_for_further_workup_card: DTSubObject(\"generic_page\", {\n    title: DTString().initWith(\"Implications for Further Work Up\"),\n    classes: DTMore().initWith([\"card\", \"implications_for_further_workup_card\"]),\n    content: DTMore().initWith([\n      DTSubObject(\"paragraph\", {\n        content: DTString().initWith(\"Using what you now understand about the integrated illness script, enter your thoughts below about the implications for further workup for this condition.\")\n      }),\n      DTSubObject(\"paragraph\", {\n        content: DTString().initWith(\"Your responses will be recorded in your Student Report and may also be viewed by faculty.\")\n      }),\n      DTRef(\"implications_for_further_workup_notes\")\n    ])\n  }),\n  implications_for_further_workup_notes: DTSubObject(\"section\", {\n    title: DTString().initWith(\"Implications for Further Workup:\"),\n    content: DTMore().initWith([DTRef(\"implications_for_further_workup_response\").init, DTRef(\"save_button\").init]),\n    classes: DTMore().initWith([\"implications_for_further_workup_notes\"]),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(false),\n  }),\n  implications_for_further_workup_response: DTSubObject(\"textInput\", {\n    uid: DTMore().initWith(\"implications_for_further_workup_response\"),\n  }),\n  implications_for_management_card: DTSubObject(\"generic_page\", {\n    title: DTString().initWith(\"Implications for Management\"),\n    classes: DTMore().initWith([\"card\", \"implications_for_management_card\"]),\n    content: DTMore().initWith([\n      DTSubObject(\"paragraph\", {\n        content: DTString().initWith(\"Using what you now understand about the integrated illness script, enter your thoughts below about the implications for management for this condition.\")\n      }),\n      DTSubObject(\"paragraph\", {\n        content: DTString().initWith(\"Your responses will be recorded in your Student Report and may also be viewed by faculty.\")\n      }),\n      DTRef(\"implications_for_management_notes\")\n    ])\n  }),\n  implications_for_management_notes: DTSubObject(\"section\", {\n    title: DTString().initWith(\"Implications for Management:\"),\n    content: DTMore().initWith([DTRef(\"implications_for_management_response\").init, DTRef(\"save_button\").init]),\n    classes: DTMore().initWith([\"implications_for_management_notes\"]),\n    collapsible: DTMore().initWith(true),\n    collapsed: DTMore().initWith(false),\n  }),\n  implications_for_management_response: DTSubObject(\"textInput\", {\n    uid: DTMore().initWith(\"implications_for_management_response\"),\n  }),\n  unassigned_case_template: DTSubObject(\"root\", {\n    content: DTMore().initWith([\n      DTRef(\"generic_page\"),\n    ])\n  })\n};\n\nexport const subtypeClassifiers = {\n  section: [\n    [\"alert\", (n) => n.classes?.includes(\"alert\")],\n    [\"answer_comment\", (n) => n.classes?.includes(\"answer_comment\")],\n    [\"category_page\", (n) => n.classes?.includes(\"category_card\")],\n    [\"care_discussion_page\", (n) => n.classes?.includes(\"care_discussion_card\")],\n    [\"causal_explanation\", (n) => n.classes?.includes(\"causal_explanation\")],\n    [\"clinical_reasoning_page\", (n) => n.classes?.includes(\"clinical_reasoning_card\")],\n    [\"cdq_case\", (n) => n.classes?.includes(\"cdq_case\")],\n    [\"custom_updates\", (n) => n.classes?.includes(\"release_notes_updates_section\")],\n    [\"underlying_core_concepts\", (n) => n.classes?.includes(\"underlying_core_concepts\")],\n    [\"dialog_box\", (n) => n.classes?.includes(\"dialog_box\")],\n    [\"deep_dive\", (n) => n.classes?.includes(\"expert_comment\")],\n    [\"excellence_in_action_page\", (n) => n.classes?.includes(\"excellence_in_action_card\")],\n    [\"harm_statement\", (n) => n.classes?.includes(\"harm_statement\")],\n    [\"finish_case_page\", (n) => n.classes?.includes(\"finish_case_card\")],\n    [\"history_page\", (n) => n.classes?.includes(\"history_card\")],\n    [\"neutral_text\", (n) => n.classes?.includes(\"neutral_text\")],\n    [\"core_concept_header\", (n) => n.classes?.includes(\"core_concept_header\")],\n    [\"release_notes_section\", (n) => n.classes?.includes(\"release_notes_section\")],\n    [\"learning_objectives_page\", (n) => n.classes?.includes(\"learning_objectives_card\")],\n    [\"management_page\", (n) => n.classes?.includes(\"management_card\")],\n    [\"physical_exam_page\", (n) => n.classes?.includes(\"physical_exam_card\")],\n    [\"category_matcher_question\", (n) => n.classes?.includes(\"question\") && n.content.some((child) => child.type === \"categoryMatcher\")],\n    [\"free_text_question\", (n) => n.classes?.includes(\"free_text_question\")],\n    [\"summary_statement\", (n) => n.classes?.includes(\"summary_statement_question\")],\n    [\"question\", (n) => n.classes?.includes(\"question\")],\n    [\"references\", (n) => n.classes?.includes(\"references\")],\n    [\"references_page\", (n) => n.classes?.includes(\"references_card\")],\n    [\"release_notes_page\", (n) => n.classes?.includes(\"release_notes_card\")],\n    [\"saq_page\", (n) => n.classes?.includes(\"saq_card\")],\n    [\"testing_page\", (n) => n.classes?.includes(\"testing_card\")],\n    [\"teaching_page\", (n) => n.classes?.includes(\"teaching_card\")],\n    [\"therapeutics_page\", (n) => n.classes?.includes(\"therapeutics_card\")],\n    [\"mod_map_page\", (n) => n.classes?.includes(\"mod_map_card\")],\n    [\"implications_for_further_workup_page\", (n) => n.classes?.includes(\"implications_for_further_workup_card\")],\n    [\"implications_for_management_page\", (n) => n.classes?.includes(\"implications_for_management_card\")],\n    [\"overview_page\", (n) => n.classes?.includes(\"overview_card\")],\n    [\"overview_page\", (n) => n.classes?.includes(\"synopsis_card\")],\n    ['epidemiology_page', (n) => n.classes?.includes(\"epidemiology_card\")],\n    ['clinical_feature_page', (n) => n.classes?.includes(\"clinical_feature_card\")],\n    [\"case_synopsis_page\", (n) => n.classes?.includes(\"case_synopsis_card\")],\n    [\"generic_page\", (n) => n.classes?.includes(\"card\")],\n    [\"tp_clinical_reasoning\", (n) => n.classes?.includes(\"clinical_reasoning\")],\n    [\"tp_clinical_skills\", (n) => n.classes?.includes(\"clinical_skills\")],\n    [\"tp_knowledge\", (n) => n.classes?.includes(\"knowledge\")],\n    [\"tp_management\", (n) => n.classes?.includes(\"management\")],\n    [\"tp_principles\", (n) => n.classes?.includes(\"principles\")],\n    [\"tp_studies\", (n) => n.classes?.includes(\"studies\")],\n    [\"assessment_question_mcq\", (n) => n.classes?.includes(\"assessment_question_mcq\")],\n    [\"question_stem\", (n) => n.classes?.includes(\"question_stem\")],\n    [\"question_vignette\", (n) => n.classes?.includes(\"question_vignette\")],\n    [\"root\", (n) => n.classes?.includes(\"root\") || n.level === 0]\n  ],\n} as Record<\"section\", Array<[string, (n: DocSectionType<unknown>) => boolean]>>;\n\nexport function getSubType(node: DocBlockNode<unknown>) {\n  const nodeClassifiers = subtypeClassifiers[node.type];\n  if (nodeClassifiers) {\n    const returnedClassifier =  find(nodeClassifiers, (classifier) => classifier[1](node));\n    if (returnedClassifier) {\n      return returnedClassifier[0];\n    }\n  }\n\n  return node.subtype || node.type;\n}\n","export default \"Asthma\\nBronchiolitis\\nImmunization\\nGrowth disorders\\nNeuropathy\\nArrhythmia - ventricular\\nAnxiety\\nSubstance use disorder\\nPain - chest / angina\\nOsteopenia / osteoporosis\\nGastroesophageal reflux disease\\nSinusitis\\nInfection - Mycobacterial\\nMyocardial infarction\\nMeningitis / encephalitis\\nPain - chronic\\nPalliative care\\nCardiomegaly\\nHeart failure\\nConstipation\\nChronic disease\\nJaundice\\nPneumonia\\nPharyngitis\\nWheezing\\nSubstance withdrawl\\nFetal alcohol syndrome\\nSexually transmitted infection\\nObesity\\nEndometriosis\\nPelvic inflammatory disease\\nDermatitis\\nInfection - HIV\\nAutism\\nChromosomal abnormality\\nContraception\\nInfection - Influenza\\nBronchitis\\nGastroenteritis\\nCeliac disease\\nIncreased intracranial pressure\\nAcute Respiratory Distress Syndrome\\nEmpyema\\nInflammatory bowel disease\\nBowel obstruction\\nTorsion - testicular\\nAppendicitis\\nCholelithiasis\\nCholangitis\\nPain - back\\nPregnancy - ectopic\\nHealth promotion / disease prevention / screening\\nDental caries and abscess\\nMedication issue\\nCognitive impairment\\nSpondyloarthropathies\\nArthritis - degenerative\\nFracture\\nAltered mental status / confusion\\nHypotension\\nMenses\\nBacteremia\\nDiabetes mellitus - adult\\nDrug interaction\\nCancer\\nHypertension\\nMuscle injury / strain\\nColic\\nDepression\\nObstructive sleep apnea\\nElectrolyte disturbances - potassium\\nNutritional deficiencies\\nSkin lesion\\nPulmonary embolus\\nEpididymitis\\nHernia\\nCerebrovascular disease / stroke\\nParkinson disease\\nThyroid disease - hypothyroidism\\nTransfusion reaction\\nAnemia\\nTrauma\\nArthritis - infectious\\nCancer - leukemia\\nUpper respiratory infection\\nUrinary tract infection - including pyelonophritis / cystitis\\nCellulitis / impetigo\\nThrombophlebitis\\nCancer - lymphoma\\nIrritable bowel syndrome\\nAbnormal cervical cytology\\nGlucose disturbance - hypoglycemia\\nDevelopmental dysplasia of hip\\nFetal growth abnormalities\\nBehavioral disorder\\nHypoxia / hypoxemia\\nRaynaud syndrome or phenomenon\\nFalls in the elderly\\nArthritis - inflammatory\\nTorsion - ovarian\\nPancreatitis\\nDelirium\\nCancer - lung\\nNephritis\\nConjunctivitis\\nAllergic disease\\nAcne\\nInfection - Scabies / lice\\nMass / cyst - breast\\nPregnancy - normal uterine\\nPulmonary hypertension\\nFailure to thrive\\nSepsis\\nAcid-base disturbance\\nRenal disease and failure - acute\\nMultifactorial condition\\nAtaxia\\nCancer - pancreatic\\nCholecystitis\\nArthritis\\nHealth care systems / communication issue\\nFetal distress\\nPneumothorax\\nHospital admission / discharge planning\\nUrinary retention\\nIntussusception\\nCoronary artery disease\\nAnemia - hemolytic\\nCancer - metastatic\\nDisc herniation\\nFeeding disorder\\nNeglect & abuse\\nDiabetes mellitus - DKA\\nShock\\nShock - hypovolemic\\nDehydration\\nColitis - infectious\\nDeep vein thrombosis\\nPeritonitis\\nEating disorder\\nDiabetes mellitus - juvenile\\nTrauma - thoracic\\nHeadache\\nDementia\\nIatrogenic pathology\\nThromboembolism\\nPulmonary Embolism\\nShock - septic\\nShock - cardiac\\nHemorrhage - intracranial\\nTransient ischemic attack\\nPyloric stenosis\\nArthritis - rheumatologic\\nOsteomylitis\\nFracture - occult\\nCancer - renal\\nElectrolyte disturbances - sodium\\nCritical respiratory failure\";","export default \"Diagnostic Excellence: Metacognition, knowledge, and decision-making\\nDiagnostic Excellence: Cognitive biases and diagnostic error\\nDiagnostic Excellence: Elements that affect diagnostic error\\nDiagnostic Excellence: Effects of diagnostic error\\nDiagnostic Excellence: Deliberate practice and diagnostic excellence\\nDiagnostic Excellence: Uncertainty and diagnosis excellence\\nHigh Value Care: Benefits and harms in decision-making\\nHigh Value Care: Evidence-based practice\\nHigh Value Care: Patient goals and values in decision-making\\nHigh Value Care: Insurance, payment models, and patient resources\\nHigh Value Care: Test results and patient outcomes\\nHigh Value Care: Value versus costs\\nHigh Value Care: Stewardship of resources\\nPalliative Care: Needs assessment and care alignment\\nPalliative Care: Interprofessional collaboration and coordination\\nPalliative Care: Evidence-based and holistic care\\nPalliative Care: Culturally responsive palliative care\\nPalliative Care: Palliative care education and promotion\\nSocial Determinants: Advocacy for equitable care\\nSocial Determinants: Culture and health care\\nSocial Determinants: Inequity in care and health outcomes\\nSocial Determinants: Nonmedical factors that shape health outcomes\\nTelemedicine: Technology and telehealth\\nTelemedicine: Televisit best practices\\nTelemedicine: Patient access and response to telehealth\\nTrauma-Informed Care: Safety\\nTrauma-Informed Care: Trustworthiness amd transparency\\nTrauma-Informed Care: Peer support\\nTrauma-Informed Care: Collaboration and mutuality\\nTrauma-Informed Care: Empowerment, voice, and choice\\nTrauma-Informed Care: Cultural, historical, and gender issues\";","export default \"Asthma\\nBronchiolitis\\nForeign body\\nHealth promotion / disease prevention / screening\\nDyslipidemia\\nImmunization\\nGrowth disorders\\nCancer - neuroblastoma\\nNeuropathy\\nArthritis - degenerative\\nPain - chronic\\nDeep vein thrombosis\\nHeart failure\\nArrhythmia - ventricular\\nAnxiety\\nSubstance use disorder\\nThyroid disease - hyperthyroidism\\nThyroid disease - hypothyroidism\\nHypertension\\nObesity\\nPain - chest / angina\\nKawasaki disease\\nAdenitis\\nOsteopenia / osteoporosis\\nMenopause\\nGastroesophageal reflux disease\\nSinusitis\\nInfection - Mycobacterial\\nRhinitis\\nAllergic disease\\nMyocardial infarction\\nMeningitis / encephalitis\\nHeadache\\nColic\\nInfection - HIV\\nInfection - opportunistic\\nPalliative care\\nCancer - lung\\nNeutropenia\\nElectrolyte disturbances - calcium\\nCardiomegaly\\nAneurysm - aortic\\nConstipation\\nPneumonia\\nDelirium\\nChronic disease\\nJaundice\\nAltered mental status / confusion\\nFeeding disorder\\nPharyngitis\\nInfection - Influenza\\nBronchitis\\nWheezing\\nPancreatitis\\nSubstance withdrawl\\nLiver disease\\nInfection - hepatitis\\nChronic obstructive pulmonary disease\\nFetal alcohol syndrome\\nSexually transmitted infection\\nFetal growth abnormalities\\nDiabetes mellitus - adult\\nEndometriosis\\nPelvic inflammatory disease\\nDysmenorrhea\\nLeiomyoma / fibroids\\nDermatitis\\nDrug reaction\\nCancer - skin\\nCellulitis / impetigo\\nAutism\\nChromosomal abnormality\\nCerebral palsy\\nSpeech disorders\\nContraception\\nUrinary tract infection - including pyelonophritis / cystitis\\nSeizure - febrile\\nViral syndrome\\nDiabetes mellitus - DKA\\nDehydration\\nColitis - infectious\\nFracture\\nAnemia\\nMedication issue\\nPregnancy - normal uterine\\nInfection - Epstein-Barr virus / Mono\\nGastroenteritis\\nCeliac disease\\nInflammatory bowel disease\\nPain - abdominal\\nIncreased intracranial pressure\\nTrauma - head\\nAcute Respiratory Distress Syndrome\\nEmpyema\\nPleural effusion\\nBowel obstruction\\nCancer - colon\\nHealth care systems / communication issue\\nPulmonary embolus\\nPulmonary edema\\nTorsion - testicular\\nAppendicitis\\nIntussusception\\nEpiglottitis / tracheitis\\nCholelithiasis\\nCholangitis\\nCholecystitis\\nPeritonitis\\nPain - back\\nPregnancy - ectopic\\nAbortion - spontaneous\\nDental caries and abscess\\nDementia\\nBehavioral disorder\\nCognitive impairment\\nNeglect & abuse\\nSpondyloarthropathies\\nMuscle injury / strain\\nCancer - prostate\\nFracture - occult\\nHypotension\\nMultifactorial condition\\nFalls in the elderly\\nIatrogenic pathology\\nUlcer\\nMenses\\nAnemia - iron & vitamin deficiency\\nBacteremia\\nDrug interaction\\nGlucose disturbance - hypoglycemia\\nDepression\\nCancer\\nDisc herniation\\nObstructive sleep apnea\\nElectrolyte disturbances - potassium\\nRenal disease and failure - chronic\\nNutritional deficiencies\\nSkin lesion\\nAttention deficit hyperactivity disorder\\nInfection - streptococcal\\nCoronary artery disease\\nEpididymitis\\nHernia\\nPain - acute\\nCerebrovascular disease / stroke\\nValvular heart disease\\nArrhythmia - atrial\\nParkinson disease\\nInsomnia\\nTransfusion reaction\\nGastrointestinal hemorrhage\\nGastritis\\nTrauma\\nArthritis - infectious\\nCancer - leukemia\\nArthritis - inflammatory\\nLimp / abnormal gait\\nUpper respiratory infection\\nOtitis media - acute / recurrent / effusion\\nHearing impairment\\nInfection - C. difficile\\nProstate disease\\nArthritis - rheumatologic\\nCongenital heart disease\\nMetabolic syndrome\\nThrombophlebitis\\nCancer - lymphoma\\nIrritable bowel syndrome\\nAbnormal cervical cytology\\nDomestic violence\\nVulvovaginitis\\nDevelopmental dysplasia of hip\\nTransient tachypnea of the newborn\\nHypoxia / hypoxemia\\nRaynaud syndrome or phenomenon\\nSystemic lupus erythematosus\\nSyncope\\nSyndrome of inappropriate diuretic hormone\\nElectrolyte disturbances - sodium\\nUrethritis\\nInfection - gonococcal\\nTorsion - ovarian\\nCor pulmonale\\nNephritis\\nConjunctivitis\\nNephrotic syndrome\\nAcne\\nInfection - Scabies / lice\\nUrticaria\\nAbscess\\nMass / cyst - breast\\nCancer - breast\\nMultifactorial gene disorder\\nInfertility\\nPulmonary hypertension\\nFailure to thrive\\nSepsis\\nRespiratory distress and failure\\nHemoglobinopathies\\nAcid-base disturbance\\nPyloric stenosis\\nRenal disease and failure - acute\\nTrauma - abdominal\\nTrauma - thoracic\\nAtaxia\\nCancer - brain\\nCancer - pancreatic\\nSomatoform / functional disorder\\nArthritis\\nJoint pain and injury - foot & ankle\\nUrinary incontinence / frequency\\nFetal distress\\nLabor - including preterm\\nNewborn transition\\nPneumothorax\\nJoint pain and injury - shoulder\\nHospital admission / discharge planning\\nSexual dysfuntion - male\\nUrinary retention\\nToxic ingestion / poisoning\\nCancer - metastatic\\nCancer - bone\\nPetechiae / purpura\\nCystic fibrosis\\nMalrotation / volvulus\\nTransient ischemic attack\\nAdjustment disorder\\nAnemia - hemolytic\\nPneumonia - aspiration\\nSeizure\\nJoint pain and injury - knee\\nJoint pain and injury - hip\\nInfection - respiratory syncytial virus\\nJoint effusion\\nShock\\nGlucose disturbance - hyperglycemia\\nShock - hypovolemic\\nAtelectasis\\nDiverticular disease\\nShock - septic\\nEating disorder\\nCoagulopathy / disseminated intravascular coagulation\\nDiabetes mellitus - juvenile\\nVertigo\\nAneurysm - cerebral\\nThromboembolism\\nPulmonary Embolism\\nShock - cardiac\\nHemorrhage - intracranial\\nOsteomylitis\\nCancer - renal\\nRenal and ureteric calculi\\nTransverse myelitis\\nEpidural hematoma\\nPeripheral nerve and root\\nGuillain - Barre syndrome\\nChronic immune demyelinating polyradiculoneuropathy (CIDP)\\nPolyradiculopathy\\nMyasthenia gravis\\nBotulism\\nToxic - metabolic encephalopathy (AKI, fentanyl overdose)\\nIschemic stroke\\nPosterior - reversible leukoencephalopathy syndrome\\nHypoxic - ischemic injury\\nNon - convulsive status epilepticus\\nIntoxication \\nNon - epileptic seizures\\nSubclavian steal syndrome\\nMultisystem organ dysfunctions that include neurologic dysfunction\\nLower motor neuron diseases (anterior horn cell disorders)\\nPolyneuropathies \\nDisorder of neuromuscular transmission\\nMuscle dysfunction\\nMultiple sclerosis (MS)\\nLyme neuroborreliosis\\nSarcoidosis\\nMyopathy\\nNeuromuscular junction disorder\\nDrug - induced tremor\\nEnhanced physiologic tremor\\nEssential tremor\\nPsychogenic tremor\\nDiabetic polyneuropathy\\nToxin - mediated nerve injury\\nAutoimmune neuropathy\\nParaneoplastic polyneuropathy\\nIdiopathic polyneuropathy\\nAlzheimer dementia\\nVascular disease/dementia \\nDementia with Lewy bodies\\nFrontotemporal lobar degeneration\\nMigraine\\nTension headache\\nBasilar migraine\\nBrain tumor\\nMedication overuse headache\\nTemporal arteritis\\nHypokalemic periodic paralysis\\nHemiplegic migraine\\nVestibular migraine\\nBenign paroxysmal positional vertigo (BPPV)\\nCardiac arrhythmia \\nCerebellar infarct \\nMeniere disease, acute labyrinthitis\";","export default \"Foreign body\\nHealth promotion / disease prevention / screening\\nDyslipidemia\\nCancer - neuroblastoma\\nArthritis - degenerative\\nPain - chronic\\nDeep vein thrombosis\\nHeart failure\\nThyroid disease - hyperthyroidism\\nThyroid disease - hypothyroidism\\nHypertension\\nObesity\\nAnxiety\\nKawasaki disease\\nAdenitis\\nMenopause\\nAsthma\\nRhinitis\\nAllergic disease\\nMyocardial infarction\\nHeadache\\nColic\\nInfection - HIV\\nInfection - opportunistic\\nCancer - lung\\nNeutropenia\\nElectrolyte disturbances - calcium\\nAneurysm - aortic\\nPneumonia\\nDelirium\\nChronic disease\\nAltered mental status / confusion\\nFeeding disorder\\nInfection - Influenza\\nBronchitis\\nSinusitis\\nPancreatitis\\nSubstance withdrawl\\nLiver disease\\nInfection - hepatitis\\nChronic obstructive pulmonary disease\\nFetal growth abnormalities\\nMeningitis / encephalitis\\nDiabetes mellitus - adult\\nDysmenorrhea\\nLeiomyoma / fibroids\\nDrug reaction\\nCancer - skin\\nCellulitis / impetigo\\nCerebral palsy\\nSpeech disorders\\nUrinary tract infection - including pyelonophritis / cystitis\\nSexually transmitted infection\\nPharyngitis\\nSubstance use disorder\\nSeizure - febrile\\nViral syndrome\\nDiabetes mellitus - DKA\\nDehydration\\nColitis - infectious\\nFracture\\nAnemia\\nMedication issue\\nPregnancy - normal uterine\\nInfection - Epstein-Barr virus / Mono\\nInflammatory bowel disease\\nPain - abdominal\\nTrauma - head\\nPleural effusion\\nCancer - colon\\nImmunization\\nHealth care systems / communication issue\\nPulmonary embolus\\nPulmonary edema\\nIntussusception\\nBronchiolitis\\nEpiglottitis / tracheitis\\nCholecystitis\\nPeritonitis\\nAbortion - spontaneous\\nNeuropathy\\nDementia\\nBehavioral disorder\\nNeglect & abuse\\nCognitive impairment\\nMuscle injury / strain\\nCancer - prostate\\nFracture - occult\\nMultifactorial condition\\nFalls in the elderly\\nIatrogenic pathology\\nUlcer\\nAnemia - iron & vitamin deficiency\\nGlucose disturbance - hypoglycemia\\nDepression\\nMenses\\nDisc herniation\\nPain - back\\nRenal disease and failure - chronic\\nSkin lesion\\nAttention deficit hyperactivity disorder\\nInfection - streptococcal\\nCoronary artery disease\\nTorsion - testicular\\nPain - acute\\nValvular heart disease\\nArrhythmia - atrial\\nInsomnia\\nGastrointestinal hemorrhage\\nGastritis\\nArthritis - inflammatory\\nLimp / abnormal gait\\nOtitis media - acute / recurrent / effusion\\nHearing impairment\\nInfection - C. difficile\\nProstate disease\\nArthritis - rheumatologic\\nCongenital heart disease\\nMetabolic syndrome\\nInfection - Mycobacterial\\nDomestic violence\\nVulvovaginitis\\nTransient tachypnea of the newborn\\nJaundice\\nNutritional deficiencies\\nSystemic lupus erythematosus\\nSyncope\\nSyndrome of inappropriate diuretic hormone\\nElectrolyte disturbances - sodium\\nUrethritis\\nInfection - gonococcal\\nPelvic inflammatory disease\\nCor pulmonale\\nNephrotic syndrome\\nUrticaria\\nDermatitis\\nAbscess\\nContraception\\nCancer - breast\\nMultifactorial gene disorder\\nInfertility\\nPregnancy - ectopic\\nRespiratory distress and failure\\nHemoglobinopathies\\nGastroenteritis\\nPyloric stenosis\\nTrauma - abdominal\\nTrauma - thoracic\\nCancer - brain\\nCholelithiasis\\nAppendicitis\\nTorsion - ovarian\\nSomatoform / functional disorder\\nJoint pain and injury - foot & ankle\\nUrinary incontinence / frequency\\nLabor - including preterm\\nNewborn transition\\nPneumothorax\\nCerebrovascular disease / stroke\\nJoint pain and injury - shoulder\\nHypotension\\nSexual dysfuntion - male\\nBowel obstruction\\nToxic ingestion / poisoning\\nArrhythmia - ventricular\\nCancer - metastatic\\nCancer - bone\\nPetechiae / purpura\\nCystic fibrosis\\nMalrotation / volvulus\\nTransient ischemic attack\\nAdjustment disorder\\nAnemia - hemolytic\\nPneumonia - aspiration\\nHospital admission / discharge planning\\nSeizure\\nSepsis\\nChromosomal abnormality\\nCancer - leukemia\\nJoint pain and injury - knee\\nJoint pain and injury - hip\\nInfection - respiratory syncytial virus\\nJoint effusion\\nConstipation\\nGlucose disturbance - hyperglycemia\\nShock - hypovolemic\\nAtelectasis\\nEmpyema\\nDiverticular disease\\nShock - septic\\nRenal disease and failure - acute\\nCoagulopathy / disseminated intravascular coagulation\\nUpper respiratory infection\\nVertigo\\nAneurysm - cerebral\\nThromboembolism\\nPulmonary Embolism\\nDiabetes mellitus - juvenile\\nGastroesophageal reflux disease\\nShock - cardiac\\nHemorrhage - intracranial\\nOsteopenia / osteoporosis\\nRenal and ureteric calculi\\nAcid-base disturbance\\nElectrolyte disturbances - potassium\\nGuillain - Barre Syndrome\\nHypoxic - ischemic brain injury\\nFocal epilepsy\\nSpinal muscular atrophy (SMA) type 1\\nMultiple sclerosis (MS)\\nMyasthenia gravis\\nParkinson disease (PD)\\nDiabetic polyneuropathy\\nAlzheimer dementia\\nCerebellar astrocytoma\\nMigraine headache\\nAtrial fibrillation\\nVertebral dissection\";","export default \"Cough\\nWheezing\\nHealth promotion / disease prevention / screening\\nPain - abdominal\\nMass / cyst - abdominal\\nJoint pain and injury - knee\\nJoint pain and injury - hand & arm\\nDeep vein thrombosis\\nDyspnea\\nEdema and third spacing\\nWeight loss\\nAmenorrhea\\nPalpitations\\nFever\\nSkin lesion\\nVaginal bleeding - abnormal\\nRhinitis\\nDermatitis\\nPain - chest / angina\\nHeadache\\nPain - acute\\nColic\\nFever - immunocompromised host\\nConstipation\\nAltered mental status / confusion\\nDelirium\\nWeakness\\nCongenital anomalies\\nChronic disease\\nFeeding disorder\\nVomiting / emesis\\nLiver disease\\nFetal growth abnormalities\\nSeizure\\nDiabetes mellitus - adult\\nDysmenorrhea\\nDiarrhea\\nCellulitis / impetigo\\nCognitive impairment\\nGait abnormality\\nSpeech disorders\\nDysuria\\nSubstance use disorder\\nUpper respiratory infection\\nDehydration\\nAcid-base disturbance\\nColitis - infectious\\nFracture\\nAnemia\\nHeart failure\\nFatigue\\nMurmur\\nPregnancy - normal uterine\\nPharyngitis\\nHematochezia\\nTrauma - head\\nCerebral herniation\\nTrauma - thoracic\\nImmunization\\nHealth care systems / communication issue\\nAneurysm - aortic\\nPulmonary embolus\\nRenal disease and failure - acute\\nHip click\\nHydrocephalus\\nPain - back\\nAbortion - spontaneous\\nNeuropathy\\nUrinary incontinence / frequency\\nAgitation\\nNeglect & abuse\\nFalls in the elderly\\nIatrogenic pathology\\nGastrointestinal hemorrhage\\nGlucose disturbance - hypoglycemia\\nAdjustment disorder\\nArthritis\\nNutritional deficiencies\\nMenopause\\nUlcer\\nHypertension\\nAttention deficit hyperactivity disorder\\nTorsion - testicular\\nPain - groin\\nSyncope\\nInsomnia\\nDepression\\nDizziness\\nLimp / abnormal gait\\nDementia\\nFever - undetermined origin\\nSexually transmitted infection\\nVulvovaginitis\\nDomestic violence\\nRespiratory distress and failure\\nPrematurity\\nHypoxia / hypoxemia\\nJaundice\\nArthritis - rheumatologic\\nGastroesophageal reflux disease\\nApnea\\nUrticaria\\nContraception\\nAsthma\\nHypoxia / Hypoxemia\\nCancer - breast\\nMultifactorial gene disorder\\nLeiomyoma / fibroids\\nInfertility\\nPregnancy - ectopic\\nHemoglobinopathies\\nTrauma - abdominal\\nAnxiety\\nNausea\\nPain - pelvic\\nJoint pain and injury - foot & ankle\\nLabor - including preterm\\nPneumothorax\\nJoint pain and injury - shoulder\\nFunctional decline\\nSexual dysfuntion - male\\nHypotension\\nUrinary retention\\nSepsis\\nBruising\\nFailure to thrive\\nMalabsorption\\nBowel obstruction\\nMass / cyst - rectal\\nAnemia - hemolytic\\nHepatomegaly\\nSplenomegaly\\nElectrolyte disturbance - sodium\\nGlucose disturbance - hyperglycemia\\nVision impairment\\nOliguria\\nShock - hypovolemic\\nHospital admission / discharge planning\\nCongenital heart disease\\nPetechiae / purpura\\nAnorexia / appetite disorders\\nObesity\\nJoint pain and injury - neck\\nProstate disease\\nUrinary tract infection - including pyelonophritis / cystitis\\nPain - chronic\\nAcute respiratory distress syndrome\\nShock - septic\\nDiabetes mellitus - juvenile\\nPneumonia\\nElectrolyte disturbances - potassium\\ncough\\nMyocardial infarction\\nShock - cardiac\\nAbscess\\nInfection - Influenza\\nSpeech disorder\\nCerebrovascular disease / stroke\\nHemorrhage - intracranial\\nIncreased intracranial pressure\\nTransient ischemic attack\\nDiaphoresis\\nDyslipidemia\\nJoint pain and injury - hip\\nJoint effusion\\nOsteopenia / osteoporosis\\nHematuria\\nRenal disease and failure - chronic\\nShortness of breath\\nComa\\nCardiac arrest\\nHypotonia\\nNumbness\\nTingling\\nFatigability\\nTremor\\nPtosis\\nMemory loss\";","export default \"3D relationships\\nAbsorption and distribution\\nAcid/base balance\\nAdverse effects and toxicity\\nAirway/GI access\\nAllelic variation and personalized medicine\\nAnatomical structure\\nAnatomical support\\nApoptosis\\nAssessing drug therapy\\nAutoimmunity\\nBiomolecular structure and function\\nBlood flow\\nBlood-brain barrier\\nCancer genetics\\nCell injury\\nCell populations\\nCell potential\\nCell to cell communication\\nCell/tissue metabolic specialization\\nCellular aging\\nCellular proliferation during development\\nCerebral and spinal vasculature\\nChromosomal abnormalities\\nChronic inflammation\\nCognitive function\\nCommunicating genetic information\\nComplications of premature birth\\nConsciousness\\nDNA replication and telomeres\\nDrug interactions\\nEffects of teratogens\\nEpigenetic gene regulation\\nExtracellular matrix interactions: wound healing, hemodynamics, thrombosis\\nFlow gradients\\nFusion of tissues\\nGenetic factors influencing development\\nGenetic screening and diagnostic testing\\nGenetic testing\\nGenetic variation\\nGenetics of common disorders\\nGlucose homeostasis\\nImmunodeficiency\\nImmunodiagnostics\\nImmunologically mediated disorders\\nImmunosuppression/immunocompromised patient\\nImplications of genetic testing\\nInductive tissue interactions\\nInfection is different than disease\\nInflammation and tissue damage\\nInheritance patterns\\nLate genetic presentations\\nLymphatic drainage\\nMechanisms of action\\nMetabolic regulation - intercellular communication\\nMetabolism and excretion\\nMicrobial epidemiology\\nMicrobial genetics\\nMicrobial homeostasis: normal microbiome\\nMicrobial immunology\\nMicrobial laboratory diagnosis\\nMicrobial pathogenesis\\nMicrobial structure informs function\\nMicrobial transmission\\nMicronutrients\\nMigration of cells and organs\\nMolecular biology techniques in diagnosis\\nMolecular cloning and recombinant therapies\\nMovement disorders\\nMusculoskeletal anatomy\\nMutagenesis and repair\\nMutation and neoplasia\\nNecrosis and cell death\\nNeurodevelopment\\nNitrogen balance\\nNutritional immunology\\nPain\\nPeripheral innervation\\nPopulation genetics\\nProgrammed cell death\\nReferred pain\\nRegulation of blood glucose\\nRegulation of electrolytes (potassium (K) and calcium ion (Ca2+))\\nRegulation of gene expression\\nRegulation of hydrogen ion concentration (pH)\\nRegulation of intracranial pressure\\nRegulation of mean arterial pressure (MAP)\\nRegulation of neuronal activity\\nRegulation of osmolarity\\nRegulation of oxygen and carbon dioxide\\nRegulation of reproduction\\nRegulatory RNAs\\nSecondary effects of developmental disturbances\\nSteady state determination of metabolites and markers\\nStructure/function organization of the CNS/PNS\\nSurface landmarks\\nSystemic inflammation\\nTherapeutic uses\\nTransitory structures\\nTransplantation\\nTransport mechanisms\\nUnique features of prokaryotes and implications for therapy\\nVaccines and immunotherapies\\nViral structure and replication\\nWaste and toxin disposal\\nWhole body energy balance\";","import { range } from \"lodash\";\n\nexport function stringReplaceByRange(string: string, range: DocRange, newString: string) {\n  return string.substr(0,range.start) + newString + string.substr(range.end);\n}\n\nexport function isEqualRanges(range1: DocRange, range2: DocRange) {\n  return (range1.start === range2.start) && (range1.end === range2.end);\n}\n\n//TODO isRangeCollapsed vs isRangeEmpty\nexport function isRangeCollapsed(range: DocRange) {\n  return range.start === range.end;\n}\n\nexport function isRangeEmpty(range: DocRange) {\n  return range.start >= range.end;\n}\n\nexport function rangeLength(range: DocRange) {\n  return range.end - range.start;\n}\n\nexport function rangesDoTouch(range1: DocRange, range2: DocRange) {\n  return range1.end >= range2.start && range1.start <= range2.end;\n}\n\nexport function rangesDoOverlap(range1: DocRange, range2: DocRange) {\n  return range1.end > range2.start && range1.start < range2.end;\n}\n\nexport function rangesIntersection(range1: DocRange, range2: DocRange) {\n  return rangesDoTouch(range1, range2) ? {start: Math.max(range1.start, range2.start), end: Math.min(range1.end, range2.end)} : null;\n}\n\nexport function rangesUnion(range1: DocRange, range2: DocRange) {\n  return rangesDoTouch(range1, range2) ? {start: Math.min(range1.start, range2.start), end: Math.max(range1.end, range2.end)} : null;\n}\n\nexport function rangesExcept(range1: DocRange, range2: DocRange) {\n  if (rangesDoTouch(range1, range2)) {\n    let newRanges: Array<DocRange> = [];\n\n    if (range1.start < range2.start) {\n      newRanges.push({\n        start: range1.start,\n        end: range2.start,\n      })\n    }\n\n    if (range1.end > range2.end) {\n      newRanges.push({\n        start: range2.end,\n        end: range1.end,\n      })\n    }\n\n    return newRanges;\n  } else {\n    return [range1];\n  }\n}\n\nexport function extendRangeAtIndexByValue(range: DocRange, index: number, value: number) {\n  return {\n    start: range.start > index ? range.start + value : range.start,\n    end: range.end >= index ? range.end + value: range.end,\n  }\n}\n\nexport function splitAndShiftRangeAtIndexByValue(range: DocRange, index: number, value: number) {\n  if (range.end <= index) {\n    return [range];\n  } else if(range.start >= index) {\n    return [shiftRange(range, value)];\n  } else {\n    return [\n      {\n        start: range.start,\n        end: index,\n      },\n      {\n        start: index + value,\n        end: range.end + value\n      }\n    ]\n  }\n}\n\nexport function deleteRangeAtIndexByValue(range: DocRange, index: number, value: number) {\n  const newStart = range.start > index ? Math.max(range.start - value, index) : range.start;\n  const newEnd = range.end > index ? Math.max(range.end - value, index) : range.end;\n\n  if (newStart !== newEnd) {\n    return {\n      start: newStart,\n      end: newEnd\n    }\n  } else {\n    return null;\n  }\n}\n\nexport function isInOrEndRange(range: DocRange, index: number) {\n  return index > range.start && index <= range.end;\n}\n\nexport function collapsedRangeAtIndex(index: number) {\n  return {\n    start: index,\n    end: index,\n  };\n}\n\nexport function collapseRangeToStart(range: DocRange) {\n  return {\n    start: range.start,\n    end: range.start,\n  }\n}\n\nexport function collapseRangeToEnd(range: DocRange) {\n  return {\n    start: range.end,\n    end: range.end,\n  }\n}\n\nexport function shiftRange(range: DocRange, value: number) {\n  return {\n    start: range.start + value,\n    end: range.end + value,\n  }\n}\n\nexport function offsetOfTouchStart(range1: DocRange, range2: DocRange) {\n  if (rangesDoTouch(range1, range2)) {\n    if (range1.start < range2.start ) {\n      return range2.start - range1.start;\n    } else {\n      return 0;\n    }\n  } else {\n    return null;\n  }\n}\n\nexport function offsetOfTouchEnd(range1: DocRange, range2: DocRange) {\n  if (rangesDoTouch(range1, range2)) {\n    if (range1.end > range2.end ) {\n      return range2.end - range1.start;\n    } else {\n      return rangeLength(range1);\n    }\n  } else {\n    return null;\n  }\n}\n\nexport function offsetRangeOfTouch(range1: DocRange, range2: DocRange) {\n  if (rangesDoTouch(range1, range2)) {\n    return {\n      start: offsetOfTouchStart(range1, range2),\n      end: offsetOfTouchEnd(range1, range2),\n    };\n  } else {\n    return null;\n  }\n}\n\nexport function rangesSortByStart(ranges: Array<DocRange>) {\n  return ranges.sort((range1, range2) => {return range1.start - range2.start;});\n}\n\nexport function rangesSortByEnd(ranges: Array<DocRange>) {\n  return ranges.sort((range1, range2) => {return range1.end - range2.end;});\n}\n\nexport function compressRanges(ranges: Array<DocRange>) {\n  return rangesSortByStart(ranges).reduce((compressedRanges, range) => {\n    const prevRange = compressedRanges.pop();\n    if (!prevRange) {\n      return [range];\n    } else {\n      const unionOfRanges = rangesUnion(prevRange, range);\n\n      if (unionOfRanges) {\n        compressedRanges.push(unionOfRanges);\n      } else {\n        compressedRanges.push(prevRange, range);\n      }\n\n      return compressedRanges;\n    }\n  }, [] as Array<DocRange>);\n}\n\nexport function isRangeCoveredByRanges(range: DocRange, coverRanges: Array<DocRange>) {\n  const compressedCoverRanges = compressRanges(coverRanges);\n  const relevantCoverRange = compressedCoverRanges.find((coverRange) => coverRange.end > range.start);\n\n  return (\n    !!relevantCoverRange\n    && relevantCoverRange.start <= range.start\n    && relevantCoverRange.end >= range.end\n  );\n}\n\n// withRange functions\n\nexport function rejectItemsWithEmptyRanges<T extends WithDocRange>(withRanges: Array<T>) {\n  return withRanges.filter((withRange) => !isRangeEmpty(withRange.range));\n}\n\nexport function sortItemsWithRangesByStart<T extends WithDocRange>(withRanges: Array<T>) {\n  return withRanges.sort((withRange1, withRange2) => {return withRange1.range.start - withRange2.range.start;});\n}\n","import {\n  compact,\n  findLast,\n  flatten,\n  groupBy,\n  isPlainObject,\n  values,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport {\n  rangesUnion,\n  rejectItemsWithEmptyRanges,\n  sortItemsWithRangesByStart,\n  isInOrEndRange,\n  compressRanges,\n  isRangeCoveredByRanges,\n} from \"./Range\";\n\nimport {\n  findNodePathByUid,\n  findNodeAtPath,\n} from \"./base\";\n\nimport * as selection from \"../selection\";\n\nfunction styleRangeCompressKey(styleRange: StyleRange) {\n  switch (styleRange.type) {\n    case \"link\":\n      return [styleRange.type, styleRange.args.url];\n      break;\n    case \"color\":\n      return [styleRange.type, styleRange.args.hexCode];\n      break;\n    default:\n      return styleRange.type;\n  }\n}\n\n// Convert To Use compressRanges function\nexport function compressStyleRanges(rangeInlineJSON: InlineRangeNode) {\n  const styleRanges = rangeInlineJSON.styleRanges;\n  const preppedStyleRanges = rejectItemsWithEmptyRanges(styleRanges);\n\n  const styleRangesGroups = groupBy(preppedStyleRanges, (styleRange) => styleRangeCompressKey(styleRange));\n\n  const allCompressedStyleRanges = sortItemsWithRangesByStart(flatten(values(styleRangesGroups).map((styleRangesGroup) => {\n    return sortItemsWithRangesByStart(styleRangesGroup).reduce((compressedStyleRanges, styleRange) => {\n      if (compressedStyleRanges.length === 0) {\n        return [styleRange];\n      } else {\n        const prevStyleRange = compressedStyleRanges.pop();\n        const unionOfStyleRanges = rangesUnion(prevStyleRange.range, styleRange.range);\n\n        if (unionOfStyleRanges) {\n          const newStyleRange = {...prevStyleRange};\n          newStyleRange.range = unionOfStyleRanges;\n          compressedStyleRanges.push(newStyleRange);\n        } else {\n          compressedStyleRanges.push(prevStyleRange, styleRange);\n        }\n\n        return compressedStyleRanges;\n      }\n    }, []);\n  })));\n\n  rangeInlineJSON.styleRanges = allCompressedStyleRanges;\n  return rangeInlineJSON;\n}\n\nexport function visibleIndexLessEqualGivenIndex(rangeInlineJSON, endIndex: number) {\n  const hideRanges = rangeInlineJSON.styleRanges.filter((styleRange) => styleRange.style === \"HIDE_TEXT\").map((styleRange) => styleRange.range);\n  const compressedRanges = compressRanges(hideRanges);\n\n  const lastRelevanteHideRange = findLast(compressedRanges, (range) => range.end < endIndex);\n\n  if (lastRelevanteHideRange && lastRelevanteHideRange.end < endIndex) {\n    return lastRelevanteHideRange.start;\n  } else {\n    return endIndex;\n  }\n}\n\nexport function stylesAtIndex(rangeInlineJSON: InlineRangeNode, index: number) {\n  const styleRangesAtIndex = rangeInlineJSON.styleRanges.filter((styleRange) => isInOrEndRange(styleRange.range, index));\n  return styleRangesAtIndex.map((styleRange) => styleRange.type);\n}\n\nexport function stylesCoveringRangeWithHideText(rangeInlineJSON: InlineRangeNode, range) { // TODO: REVISE WHEN InlineRangeNode Split in two\n  const styleRanges = rangeInlineJSON.styleRanges || [];\n  const preppedStyleRanges = rejectItemsWithEmptyRanges(styleRanges);\n\n  const styleRangesGroups = groupBy(preppedStyleRanges, (styleRange) => styleRangeCompressKey(styleRange));\n\n  let hideTextRanges = [];\n  if (styleRangesGroups[\"HIDE_TEXT\"]) {\n    hideTextRanges = styleRangesGroups[\"HIDE_TEXT\"].map((hideTextStyleRange) => hideTextStyleRange.range);\n    delete styleRangesGroups[\"HIDE_TEXT\"];\n  }\n\n  return R.fromPairs(compact(values(styleRangesGroups).map((styleRangeGroup) => {\n    const styleRanges = styleRangeGroup.map((hideTextStyleRange) => hideTextStyleRange.range);\n    return isRangeCoveredByRanges(range, styleRanges.concat(hideTextRanges)) ? [styleRangeGroup[0].type, styleRangeGroup[0]] : null;\n  })));\n}\n\nexport function stylesCoveringDocSelection(data: DocBlockNode<InlineRangeNode>, docSelection: DocSelection) {\n  const {\n    uid: startUID,\n    contentKey: startKey,\n    index: startIndex,\n  } = docSelection.start;\n\n  const {\n    uid: endUID,\n    contentKey: endKey,\n    index: endIndex,\n  } = docSelection.end;\n\n  const startNodePath = findNodePathByUid(data, startUID);\n\n  if (!startNodePath) { return {} }\n\n  const startNode = findNodeAtPath(data, startNodePath);\n\n  if (selection.isInOneInline(docSelection)) {\n    return startNode[startKey] ? stylesCoveringRangeWithHideText(startNode[startKey], {start: startIndex, end: endIndex}) : {};\n  } else {\n    const endNodePath = findNodePathByUid(data, endUID);\n    const endNode = findNodeAtPath(data, endNodePath);\n\n    const startStyles = startKey ? stylesCoveringRangeWithHideText(startNode[startKey], {start: startIndex, end: startNode[startKey].text.length}) : {};\n    const endStyles = endKey ? stylesCoveringRangeWithHideText(endNode[endKey], {start: 0, end: endIndex}) : {};\n\n    // TODO EXPAND TO COVER MIDDLE NODES\n\n    return R.pick(R.keys(endStyles), startStyles);\n  }\n}\n\n\nexport function isRangeInlineJSON(possibleRangeInlineJSON: InlineNode): possibleRangeInlineJSON is InlineRangeNode {\n  return typeof possibleRangeInlineJSON !== \"string\" && (\"text\" in possibleRangeInlineJSON) && (typeof possibleRangeInlineJSON.text === \"string\");\n}\n\nexport function rangeInlineJSONWithText(text = \"\") {\n  return {\n    text: text,\n    styleRanges: [],\n  };\n}\n","export function lastLeaf(treeInlineNodes: Array<InlineTreeNodeSimple>) : InlineTreeNodeSimple | null {\n  const rightNode = treeInlineNodes.slice(-1)[0];\n  if (rightNode) {\n    if (rightNode.type === \"text\") {\n      return rightNode;\n    } else if (rightNode.type === \"link\") {\n      return lastLeaf(rightNode.title) || rightNode;\n    } else {\n      return lastLeaf(rightNode.content) || rightNode;\n    }\n  } else {\n    return null;\n  }\n}\n\nexport function contentRightNDeep(treeInlineNodes: Array<InlineTreeNodeSimple>, n: number) {\n  if (n <= 0) {\n    return treeInlineNodes;\n  } else {\n    const rightNode = treeInlineNodes.slice(-1)[0];\n    if (rightNode) {\n      switch (rightNode.type) {\n        case \"text\":\n          return null;\n          break;\n        case \"link\":\n          return contentRightNDeep(rightNode.title, n - 1);\n          break;\n        default:\n          return contentRightNDeep(rightNode.content, n - 1);\n      }\n    } else {\n      return null;\n    }\n  }\n}\n\nexport function nodeRightNDeep(treeInlineNodes: Array<InlineTreeNodeSimple>, n: number) {\n  const content = contentRightNDeep(treeInlineNodes, n);\n  return content && content.slice(-1)[0];\n}\n\nexport function appendTextToNode(treeInlineNode: InlineTreeNodeSimple, text: string) {\n  switch (treeInlineNode.type) {\n    case \"text\":\n      treeInlineNode.content += text;\n      break;\n    case \"link\":\n      treeInlineNode.title.push({\n        type: \"text\",\n        content: text,\n      });\n      break;\n    default:\n      treeInlineNode.content.push({\n        type: \"text\",\n        content: text,\n      });\n  }\n  return treeInlineNode;\n}\n\nexport function isTreeInlineJSON(possibleTreeInlineJSON: InlineNodeAll): possibleTreeInlineJSON is Array<InlineTreeNode> {\n  return (\n    Array.isArray(possibleTreeInlineJSON) &&\n    (\n      possibleTreeInlineJSON.length === 0 ||\n      [\n        \"text\",\n        \"bold\",\n        \"italic\",\n        \"underline\",\n        \"subscript\",\n        \"superscript\",\n        \"link\",\n        \"color\",\n        \"HIDE_TEXT\",\n        \"SELECTION_MIMIC\",\n        \"ADD_COMMENT_THREAD\",\n        \"ADD_CONTENT\",\n        \"ADDED_TEXT\",\n        \"CHANGED_TEXT\",\n        \"DELETE_CONTENT\",\n        \"DELETED_TEXT\",\n        \"ADDED_STYLE\",\n        \"DELETED_STYLE\",\n      ].includes(possibleTreeInlineJSON[0].type)\n    )\n  );\n}\n","import {\n  assign,\n  flatten,\n  isObject,\n  isPlainObject,\n  reduce,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport generateUUID from \"../../generateUUID\";\nimport { isRangeInlineJSON } from \"./RangeInlineJSON\";\n\ntype ObjTester = (data: any) => boolean; // TODO: Remove any\ntype NodeTester = (node: DocBlockNode<unknown>) => boolean;\n\nexport function deepFind(data, tester: ObjTester) {\n  let result = null;\n  if (data instanceof Array) {\n    for (let i = 0; i < data.length; i += 1) {\n      result = deepFind(data[i], tester);\n      if (result) {\n        return result;\n      }\n    }\n  } else if (data instanceof Object) {\n    if (tester(data)) {\n      return data;\n    }\n\n    for (const prop in data) {\n      if (data[prop] instanceof Object || data[prop] instanceof Array) {\n        result = deepFind(data[prop], tester);\n        if (result) {\n          return result;\n        }\n      }\n    }\n  }\n  return result;\n}\n\nexport function deepFindObjectPath(data, tester: ObjTester) {\n  if (data instanceof Array) {\n    for (let i = 0; i < data.length; i += 1) {\n      const result = deepFindObjectPath(data[i], tester);\n      if (result) {\n        return result;\n      }\n    }\n  } else {\n    if (tester(data)) {\n      return [data];\n    }\n\n    for (const prop in data) {\n      if ((data[prop] instanceof Object || data[prop] instanceof Array) && prop !== \"contentListNodes\") {\n        const result = deepFindObjectPath(data[prop], tester);\n        if (result) {\n          return ([data].concat(result));\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport function deepFindAllObjectPaths(data, tester: ObjTester) {\n  if (data instanceof Array) {\n    return data.flatMap((datum) => deepFindAllObjectPaths(datum, tester));\n  } else {\n    let objectPaths = Object.entries(data)\n      .filter(([key, datum]) => (datum instanceof Object || datum instanceof Array) && key !== \"contentListNodes\")\n      .flatMap(([key, datum]) => deepFindAllObjectPaths(datum, tester))\n      .map((path) => [data].concat(path));\n\n    if (tester(data)) {\n      objectPaths = [[data]].concat(objectPaths);\n    }\n\n    return objectPaths;\n  }\n}\n\nexport function deepFindPath(data, tester: ObjTester) {\n  if (data instanceof Array) {\n    for (let i = 0; i < data.length; i += 1) {\n      const result = deepFindPath(data[i], tester);\n      if (result) {\n        return [i].concat(result);\n      }\n    }\n  } else {\n    if (tester(data)) {\n      return [];\n    }\n\n    for (const prop in data) {\n      if (data[prop] instanceof Object || data[prop] instanceof Array) {\n        const result = deepFindPath(data[prop], tester);\n        if (result) {\n          return ([prop].concat(result));\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport function deepFindAllPaths(data, tester: ObjTester) {\n  if (data instanceof Array) {\n    return data.flatMap((datum, index) => deepFindAllPaths(datum, tester).map((indexPaths) => [index].concat(indexPaths)));\n  } else {\n    let indexPaths = Object.entries(data)\n      .filter(([key, datum]) => (datum instanceof Object || datum instanceof Array))\n      .flatMap(([key, datum], index) => deepFindAllPaths(datum, tester).map((indexPaths) => [key].concat(indexPaths)));\n\n    if (tester(data)) {\n      indexPaths = ([[]]).concat(indexPaths);\n    }\n\n    return indexPaths;\n  }\n  return [];\n}\n\n\nexport function deepFindAll(data, tester: ObjTester) {\n  let result = [];\n  if (data instanceof Array) {\n    return data.reduce((acc, curData) => acc.concat(deepFindAll(curData, tester)), []);\n  } else if (data instanceof Object) {\n    if (tester(data)) {\n      result.push(data);\n    }\n\n    for (const prop in data) {\n      if (data[prop] instanceof Object || data[prop] instanceof Array) {\n        const innerResult = deepFindAll(data[prop], tester);\n        if (innerResult) {\n          result = result.concat(innerResult);\n        }\n      }\n    }\n  }\n  return result;\n}\n\nexport function findAtPath(data, indexPath) {\n  return R.view(R.lensPath(indexPath), data);\n}\n\nexport function filterPathsByFunction(data, paths, func) {\n  return paths.filter((path) => func(R.view(R.lensPath(path), data)));\n}\n\nexport function findCommonAncestorPath(pathA, pathB) {\n  return R.takeWhile(([a, b]: any) => R.equals(a,b), R.zip(pathA, pathB)).flatMap(R.init); // TODO: Remove any\n}\n\nexport function isPathChildOfPath(path, possibleAncestorPath) {\n  return path.length > possibleAncestorPath.length && R.equals(R.take(possibleAncestorPath.length, path), possibleAncestorPath);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function normalizeDocNode(node) {\n  const toNormalizeKeys = nodeBlockContentKeys(node);\n\n  const toNormalizeChildren = flatten(toNormalizeKeys.map((key) => {\n    return node[key] || [];\n  }));\n\n  const newNode = {...node};\n  toNormalizeKeys.forEach((key) => {\n    if (newNode[key]) {\n      newNode[key] = newNode[key].map((childNode) => childNode.uid);\n    }\n  });\n\n  return assign({[node.uid]: newNode}, ...(toNormalizeChildren.map((childNode) => {\n    return normalizeDocNode(childNode);\n  })));\n}\n\n// export function normalizeDocNodeWithAncestorUids(node, ancestorUids = []) {\n//   const toNormalizeKeys = nodeBlockContentKeys(node);\n\n//   const toNormalizeChildren = flatten(toNormalizeKeys.map((key) => {\n//     return node[key] || [];\n//   }));\n\n//   const newNode = {...node,\n//     ancestorUids,\n//   };\n//   toNormalizeKeys.forEach((key) => {\n//     if (newNode[key]) {\n//       newNode[key] = newNode[key].map((childNode) => childNode.uid);\n//     }\n//   });\n\n//   return assign({[node.uid]: newNode}, ...(toNormalizeChildren.map((childNode) => {\n//     return normalizeDocNodeWithAncestorUids(childNode, concat(ancestorUids, node.uid));\n//   })));\n// }\n\nexport function denormalizeDocNode(nodesObject, rootNodeUid, ancestorUids = []) {\n  if (ancestorUids.includes(rootNodeUid)) {\n    console.log(`Error: circular node nesting of node with UID: ${rootNodeUid}`);\n    return null;\n  }\n\n  const newNode = nodesObject[rootNodeUid] && {...nodesObject[rootNodeUid]};\n\n  if (!newNode) {\n    console.log(`Error: no node with UID: ${rootNodeUid}`);\n    return null;\n  }\n\n  const toDenormalizeKeys = nodeBlockContentKeys(newNode);\n\n  toDenormalizeKeys.forEach((key) => {\n    if (newNode[key]) {\n      newNode[key] = newNode[key].map((childNodeUid) => {\n        return denormalizeDocNode(nodesObject, childNodeUid, [...ancestorUids, rootNodeUid]);\n      });\n    }\n  });\n\n  return newNode;\n}\n\n\nexport function nodeBlockContentKeys<T>(node: DocBlockNode<T>) {\n  switch (node.type) {\n    case \"section\":\n      return [\"content\", \"diagnoses\", \"findings\", \"notes\", \"feedback\", \"cdqFeatures\"];\n    case \"regularList\":\n    case \"numberedList\":\n    case \"multipleChoice\":\n    case \"cdqQuestion\":\n    case \"tableCell\":\n    case \"learningObjectivesList\":\n      return [\"content\"];\n    case \"table\":\n      return [\"content\", \"rows\"];\n    case \"tableRow\":\n      return [\"content\", \"cells\"];\n    case \"imageGallery\":\n      return [\"images\"];\n    case \"categoryMatcher\":\n      return [\"contentCategories\", \"contentItems\"];\n    case \"listItem\":\n      return !isObject(node.content) || isRangeInlineJSON(node.content as any) ? [] : [\"content\"]; // TODO: Remove any\n    default:\n      return [];\n  }\n}\n\nexport function nodeInlineContentKeys<T>(node: DocBlockNode<T>) {\n  switch (node.type) {\n    case \"section\":\n    case \"image\":\n    case \"video\":\n    case \"audio\":\n    case \"button\":\n      return [\"title\"];\n    case \"paragraph\":\n    case \"multipleChoiceAnswer\":\n    case \"checkbox\":\n    case \"matchItem\":\n    case \"cdqQuestionAnswer\":\n    case \"cdqFeature\":\n    case \"learningObjective\":\n      return [\"content\"];\n    case \"listItem\":\n      return !isObject(node.content) || isRangeInlineJSON(node.content as any) ? [\"content\"] : []; // TODO: Remove any\n    default:\n      return [];\n  }\n}\n\nexport function nodeInlineInFlowContentKeys<T>(node: DocBlockNode<T>) {\n  switch (node.type) {\n    case \"paragraph\":\n      return [\"content\"];\n    case \"listItem\":\n      return !isObject(node.content) || isRangeInlineJSON(node.content as any) ? [\"content\"] : []; // TODO: Remove any\n    case \"section\":\n    case \"image\":\n    case \"video\":\n    case \"audio\":\n    case \"button\":\n    case \"multipleChoiceAnswer\":\n    case \"checkbox\":\n    case \"matchItem\":\n    case \"cdqQuestionAnswer\":\n    default:\n      return [];\n  }\n}\n\nexport function nodeInlineNotFlowContentKeys<T>(node: DocBlockNode<T>) {\n  switch (node.type) {\n    case \"section\":\n    case \"image\":\n    case \"video\":\n    case \"audio\":\n    case \"button\":\n      return [\"title\"];\n    case \"multipleChoiceAnswer\":\n    case \"checkbox\":\n    case \"matchItem\":\n    case \"cdqQuestionAnswer\":\n    case \"cdqFeature\":\n    case \"learningObjective\":\n      return [\"content\"];\n    case \"paragraph\":\n    case \"listItem\":\n    default:\n      return [];\n  }\n}\n\nexport function nodeAllContentKeys<T>(node: DocBlockNode<T>) {\n  return nodeInlineContentKeys(node).concat(nodeBlockContentKeys(node));\n}\n\nexport function isNode<T>(node: any): node is DocBlockNode<T> {\n  return isPlainObject(node) && node[\"type\"] && node[\"uid\"] && !node[\"change_id\"] && !node.is_change_summary;\n}\n\nexport function isNodeAtPath(doc: DocBlockNode<unknown>, nodePath: NodePath) {\n  return isNode(findNodeAtPath(doc, nodePath));\n}\n\nexport function findDeepestLineagePathFromPath<T>(rootNode: DocBlockNode<T>, path, nodeTester: NodeTester) {\n  const node = findAtPath(rootNode, path);\n  if (isNode(node) && nodeTester(node)) {\n    return path;\n  } else if (path.length > 0) {\n    return findDeepestLineagePathFromPath(rootNode, R.init(path), nodeTester);\n  } else {\n    return null;\n  }\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\n// findNode : NODE -> (NODE -> Bool) -> NODE\nexport function findNode<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  return deepFind(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\n// findNodeByUid : NODE -> UID -> NODE\nexport function findNodeByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n  return findNode(rootNode, (node) => node[\"uid\"] === uid);\n}\n\n//findNodes : NODE -> (NODE -> Bool) -> [NODE]\nexport function findNodes<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  return deepFindAll(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\n// findNodesByUids : NODE -> [UID] -> [NODE]\nexport function findNodesByUids<T>(rootNode: DocBlockNode<T>, uids: UID[]) {\n  return findNodes(rootNode, (node) => uids.includes(node[\"uid\"]));\n}\n\nexport function findNodeLineage<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  return deepFindObjectPath(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodeLineageByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n  return findNodeLineage(rootNode, (node) => node[\"uid\"] === uid);\n}\n\nexport function findNodesLineages<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  return deepFindAllObjectPaths(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodeAncestors<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  return findNodeLineage(rootNode, nodeTester).slice(0,-1);\n}\n\nexport function findNodeAncestorsByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n  return findNodeAncestors(rootNode, (node) => node[\"uid\"] === uid);\n}\n\nexport function findNodeParent<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  const ancestors = findNodeAncestors(rootNode, nodeTester);\n  return (ancestors && ancestors[ancestors.length - 1]);\n}\n\nexport function findNodeParentByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n  const ancestors = findNodeAncestorsByUid(rootNode, uid);\n  return (ancestors && ancestors[ancestors.length - 1]);\n}\n\nexport function findNodeSiblingBeforeByPath<T>(rootNode: DocBlockNode<T>, nodePath: Array<any>) { // TODO: Remove any\n  if (typeof R.last(nodePath) === \"number\" && R.last(nodePath) > 0) {\n    const siblingPath = R.adjust(-1, R.dec, nodePath);\n    return findNodeAtPath(rootNode, siblingPath);\n  } else {\n    return undefined;\n  }\n}\n\nexport function findNodeSiblingBefore<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  const nodePath = findNodePath(rootNode, nodeTester);\n  return findNodeSiblingBeforeByPath(rootNode, nodePath);\n}\n\nexport function findNodeSiblingAfterPathByPath<T>(rootNode: DocBlockNode<T>, nodePath) {\n  if (typeof R.last(nodePath) === \"number\") {\n    return R.adjust(-1, R.inc, nodePath);\n  } else {\n    return undefined;\n  }\n}\n\nexport function findNodeSiblingAfterByPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n  const siblingPath = findNodeSiblingAfterPathByPath(rootNode, path);\n  return siblingPath && findNodeAtPath(rootNode, siblingPath);\n}\n\nexport function findNodeSiblingAfter<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  const nodePath = findNodePath(rootNode, nodeTester);\n  return findNodeSiblingAfterByPath(rootNode, nodePath);\n}\n\nexport function findNodePath<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  return deepFindPath(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodePathByUid<T>(rootNode: DocBlockNode<T>, uid: UID) {\n  return findNodePath(rootNode, (node) => node[\"uid\"] === uid);\n}\n\nexport function findNodesPaths<T>(rootNode: DocBlockNode<T>, nodeTester: NodeTester) {\n  return deepFindAllPaths(rootNode, (node) => isNode(node) && nodeTester(node));\n}\n\nexport function findNodeAtPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n  return R.view(R.lensPath(path), rootNode);\n}\n\nfunction youngestNodePathFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) : NodePath | undefined {\n  if (isNodeAtPath(rootNode, path)) {\n    return path;\n  } else {\n    return path.length > 0 ? youngestNodePathFromPath(rootNode, R.init(path)) : undefined;\n  }\n}\n\nexport function nodeParentPathFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n  return youngestNodePathFromPath(rootNode, R.init(path))\n}\n\nexport function nodeIndexFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n  const parentPath = nodeParentPathFromPath(rootNode, path);\n\n  const possibleIndex = R.nth(-1, path);\n  if (parentPath && parentPath.length + 2 === path.length && (typeof possibleIndex) === \"number\") {\n    return possibleIndex;\n  }\n\n  return undefined;\n}\n\nexport function nodeContentKeyFromPath<T>(rootNode: DocBlockNode<T>, path: NodePath) {\n  const parentPath = nodeParentPathFromPath(rootNode, path);\n\n  if (parentPath) {\n    if (parentPath.length + 2 === path.length && typeof R.nth(-2, path) === \"string\") {\n      return R.nth(-2, path);\n    } else if(parentPath.length + 1 === path.length && typeof R.nth(-1, path) === \"string\") {\n      return R.nth(-1, path);\n    }\n  }\n\n  return undefined;\n}\n\nexport function nodePathToUnfilteredLineagePaths<T>(doc: DocBlockNode<T>, nodePath: NodePath) {\n  return R.repeat(nodePath, nodePath.length + 1).map((nodePath, index) => R.take(index, nodePath));\n}\n\nexport function nodePathToLineagePaths<T>(doc: DocBlockNode<T>, nodePath: NodePath) {\n  const unfilteredLineagePaths = nodePathToUnfilteredLineagePaths(doc, nodePath);\n  return unfilteredLineagePaths.filter((path) => isNodeAtPath(doc, path));\n}\n\nexport function nodePathToAncestorPaths<T>(doc: DocBlockNode<T>, nodePath: NodePath) {\n  return R.init(nodePathToLineagePaths(doc, nodePath));\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function insertAtPath<T>(rootNode: DocBlockNode<T>, newNode: DocBlockNode<T>, indexPath: NodePath) {\n  return insertAllAtPath(rootNode, [newNode], indexPath);\n}\n\nexport function insertAllAtPath<T>(rootNode: DocBlockNode<T>, newNodes: DocBlockNode<T>[], indexPath: NodePath) {\n  const arrayPath = R.init(indexPath);\n  const index: any = R.last(indexPath); // TODO: Remove any\n\n  const arrayLens = R.lensPath(arrayPath);\n\n  return R.over(arrayLens, R.insertAll(index, newNodes), rootNode);\n}\n\nexport function deleteAtPath<T>(rootNode: DocBlockNode<T>, nodePath: NodePath) {\n  const arrayPath = R.init(nodePath);\n  const index: any = R.last(nodePath); // TODO: Remove any\n\n  const arrayLens = R.lensPath(arrayPath);\n\n  return R.over(arrayLens, R.remove(index, 1), rootNode);\n}\n\nexport function replaceAtPath<T>(rootNode: DocBlockNode<T>, newNode: DocBlockNode<T>, nodePath: NodePath) {\n  const arrayPath = R.init(nodePath);\n  const index: any = R.last(nodePath); // TODO: Remove any\n\n  const arrayLens = R.lensPath(arrayPath);\n\n  return R.over(arrayLens, R.adjust(index, R.always(newNode)), rootNode);\n}\n\nexport function moveAtPathToPath<T>(rootNode: DocBlockNode<T>, oldPath: NodePath, newPath: NodePath) {\n  const node = findAtPath(rootNode, oldPath);\n\n  return R.pipe(\n    R.curry(deleteAtPath(R.__ as any, oldPath)), // TODO: Remove any\n    R.curry(insertAtPath(R.__ as any, node, newPath)), // TODO: Remove any\n  )(rootNode);\n}\n\nexport function setAtPath<T>(rootNode: DocBlockNode<T>, nodePath: NodePath, value) {\n  return overAtPath(rootNode, nodePath, R.always(value));\n}\n\nexport function overAtPath<T>(rootNode: DocBlockNode<T>, nodePath: NodePath, func) {\n  return R.over(R.lensPath(nodePath), func, rootNode);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\n// export function addNodesAtUidKeyIndex(rootNode, newNodes, uid, contentKey, index) {\n//   const parentPath = findNodePathByUid(rootNode, uid);\n\n//   return insertAllAtPath(rootNode, newNodes, [...parentPath, contentKey, index]);\n// }\n\n// export function addNodeAtUidKeyIndex(rootNode, newNode, uid, contentKey, index) {\n//   return addNodesAtUidKeyIndex(rootNode, [newNode], uid, contentKey, index);\n// }\n\n// export function addNodesAfterUid(rootNode, newNodes, uid) {\n//   const siblingPath = findNodePathByUid(rootNode, uid);\n//   const afterSiblingPath = R.adjust(-1, R.inc, siblingPath);\n\n//   return insertAllAtPath(rootNode, newNodes, afterSiblingPath);\n// }\n\n// export function addNodeAfterUid(rootNode, newNode, uid) {\n//   return addNodesAfterUid(rootNode, [newNode], uid);\n// }\n\n// export function addNodesBeforeUid(rootNode, newNodes, uid) {\n//   const siblingPath = findNodePathByUid(rootNode, uid);\n\n//   return insertAllAtPath(rootNode, newNodes, siblingPath);\n// }\n\n// export function addNodeBeforeUid(rootNode, newNode, uid) {\n//   return addNodesBeforeUid(rootNode, [newNode], uid);\n// }\n\n// export function deleteNodeWithUID(rootNode, uid) {\n//   return deleteAtPath(rootNode, findNodePathByUid(rootNode, uid));\n// }\n\n// export function replaceNodeWithUID(rootNode, newNode, uid) {\n//   return replaceAtPath(rootNode, newNode, findNodePathByUid(rootNode, uid));\n// }\n\n// export function replaceNodeWithUIDChildren(rootNode, nodes, uid, contentKey) {\n//   const parentPath = findNodePathByUid(rootNode, uid);\n\n//   const arrayPath = [...parentPath, contentKey];\n//   const arrayLens = R.lensPath(arrayPath);\n\n//   return R.set(arrayLens, nodes, rootNode);\n// }\n\n// export function moveNodeWithUIDToIndex(rootNode, moveUid, newParentUid, contentKey, index) {\n//   const oldPath = findNodePathByUid(rootNode, moveUid);\n//   const newParentPath = findNodePathByUid(rootNode, newParentUid);\n//   const newPath = [...newParentPath, contentKey, index];\n\n//   return moveAtPathToPath(rootNode, oldPath, newPath);\n// }\n\nexport function editNodeWithUIDKeyValueWithFunction<T>(rootNode: DocBlockNode<T>, uid: UID, key: ContentKey, func) {\n  const nodePath = findNodePathByUid(rootNode, uid);\n\n  return nodePath ? R.over(R.lensPath([...nodePath, key]), func, rootNode) : rootNode;\n}\n\nexport function editNodeWithUIDKeyValue<T>(rootNode: DocBlockNode<T>, uid: UID, key: ContentKey, value) {\n  return editNodeWithUIDKeyValueWithFunction(rootNode, uid, key, R.always(value));\n}\n\nexport function editNodeWithUIDKeysValues<T>(rootNode: DocBlockNode<T>, uid: UID, updates: {}) { // TODO: Remove {}\n  const nodePath = findNodePathByUid(rootNode, uid);\n  const nodeLens = R.lensPath(nodePath);\n\n  return R.over(nodeLens, R.mergeLeft(updates), rootNode);\n}\n\nexport function arePathsSameLineage(pathA: NodePath, pathB: NodePath) {\n  return R.zip(pathA, pathB).every(([a, b]) => a === b);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nfunction docReduceWithCallbackForKey<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc, keyCallback: (n: DocBlockNode<T>) => string[]) {\n  const newAccum = callback(accum, node);\n\n  const toReduceKeys = keyCallback(node);\n\n  const toReduceChildren = flatten(toReduceKeys.map((key) => {\n    return node[key] || [];\n  }));\n\n  return reduce(toReduceChildren, (childAccum, childNode) => docReduceWithCallbackForKey(childNode, callback, childAccum, keyCallback), newAccum);\n}\n\nexport function docReduceAllNodes<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc) {\n  return docReduceWithCallbackForKey(node, callback, accum, nodeAllContentKeys);\n}\n\nexport function docReduceBlockNodes<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc) {\n  return docReduceWithCallbackForKey(node, callback, accum, nodeBlockContentKeys);\n}\n\nexport function docReduceInlineNodes<T, Acc>(node: DocBlockNode<T>, callback: (a: Acc, n: DocBlockNode<T>) => Acc, accum: Acc) {\n  return docReduceWithCallbackForKey(node, callback, accum, nodeInlineContentKeys);\n}\n\nexport function docMapAllNodes<T>(node: DocBlockNode<T>, callback: (n: DocBlockNode<T>) => DocBlockNode<T>) {\n  const newNode = callback(node);\n\n  const contentKeys = nodeAllContentKeys(newNode);\n\n  contentKeys.forEach((contentKey) => {\n    if (newNode[contentKey]) {\n      if (Array.isArray(newNode[contentKey])) {\n        newNode[contentKey] = newNode[contentKey].map((childNode) => docMapAllNodes(childNode, callback));\n      } else if (newNode[contentKey] instanceof Object) {\n        newNode[contentKey] = callback(newNode[contentKey]);\n      }\n    }\n  });\n\n  return newNode;\n}\n\nexport function docMapInlineNodes<T extends DocBlockNode<U>, U>(node: T, callback) {\n  const newNode = {...node};\n\n  const blockContentKeys = nodeBlockContentKeys(newNode);\n\n  blockContentKeys.forEach((contentKey) => {\n    if (newNode[contentKey]) {\n      newNode[contentKey] = newNode[contentKey].map((childNode) => docMapInlineNodes(childNode, callback));\n    }\n  });\n\n  const inlineContentKeys = nodeInlineContentKeys(newNode);\n\n  inlineContentKeys.forEach((contentKey) => {\n    if (newNode[contentKey]) {\n      if (Array.isArray(newNode[contentKey])) {\n        newNode[contentKey] = newNode[contentKey].map((childNode) => docMapAllNodes(childNode, callback));\n      } else {\n        newNode[contentKey] = callback(newNode[contentKey]);\n      }\n    }\n  });\n\n  return newNode;\n}\n\nexport function docMapBlockNodes<T extends DocBlockNode<U>, U>(node: T, callback: (oldNode: T) => T) {\n  const newNode = callback(node);\n\n  const contentKeys = nodeBlockContentKeys(newNode);\n\n  contentKeys.forEach((contentKey) => {\n    if (newNode[contentKey]) {\n      newNode[contentKey] = newNode[contentKey].map((childNode) => docMapBlockNodes(childNode, callback));\n    }\n  });\n\n  return newNode;\n}\n\nexport function addMissingUids(node) {\n  let newNode = node;\n  const toAddUidsTo = node.content || node.rows || node.cells;\n  if (Array.isArray(toAddUidsTo)) {\n    const newChildren = toAddUidsTo.map((childNode) => {\n      return (addMissingUids(childNode));\n    });\n\n    if (newChildren.length > 0) {\n      switch (node.type) {\n        case \"table\":\n          newNode = Object.assign({}, node, {rows: newChildren});\n          break;\n        case \"tableRow\":\n          newNode = Object.assign({}, node, {cells: newChildren});\n          break;\n        case \"listItem\":\n        default:\n          newNode = Object.assign({}, node, {content: newChildren});\n          break;\n      }\n    }\n  }\n\n  if (newNode.uid === undefined) {\n    newNode = Object.assign({}, newNode, {uid: generateUUID()});\n  }\n\n  return (newNode);\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function replaceAllUIDs<T>(node: DocBlockNode<T>) {\n  const clonedNode = R.clone(node);\n\n  findNodes(clonedNode, node => !!node.uid).forEach((nodeToChange) => {\n    nodeToChange.uid = generateUUID();\n    nodeToChange.changes = [];\n    nodeToChange.changeSummaries = [];\n  });\n\n  return clonedNode;\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\nexport function adjustSelectionStartToIncludeListItemIfNeeded<T>(doc: DocBlockNode<T>, selection: DocSelection) {\n  if (selection.start.contentKey !== \"content\" || selection.start.index !== 0) {\n    return selection;\n  }\n\n  const startPath = findNodePathByUid(doc, selection.start.uid);\n  if (!startPath) {\n    return selection;\n  }\n\n  const beforeSibling = findNodeSiblingBeforeByPath(doc, startPath);\n  if (!beforeSibling || beforeSibling.type !== \"listItem\") {\n    return selection;\n  }\n\n  return (\n    {\n      ...selection,\n      start: {\n        uid: beforeSibling.uid,\n        contentKey: \"content\",\n        index: 0,\n      }\n    }\n  )\n}\n\n////////////////////////////////////////\n////////////////////////////////////////\n\n// function forEachBlockNode<T extends DocBlockNode>(node: T, fn: ) {\n//   return node\n// }\n// function mapBlockNode(node, fn) {}\n// function reduceBlockNode(node, fn) {}\n// function forEachDeepBlockNode(node, fn) {}\n// function mapDeepBlockNode(node, fn) {}\n// function reduceDeepBlockNode(node, fn) {}\n\n// function forEachInlineNode(node, fn) {}\n// function mapInlineNode(node, fn) {}\n// function reduceInlineNode(node, fn) {}\n// function forEachDeepInlineNode(node, fn) {}\n// function mapDeepInlineNode(node, fn) {}\n// function reduceDeepInlineNode(node, fn) {}\n","import {\n  cloneDeep,\n  times,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport { DTRef } from \"../Define/base\";\n\nimport {\n  nodeDefinitions,\n} from \"../Define/base\";\n\nexport function generateTableRowWithNTableCells(cellCount: number) {\n  const rowDefinition = cloneDeep(nodeDefinitions[\"tableRow\"]);\n  rowDefinition.objectModel.cells.initWith(times(cellCount, () => DTRef(\"tableCell\").init));\n  return rowDefinition.generate(nodeDefinitions, {});\n}\n\nexport function generateNTableCells(cellCount: number) {\n  const cellDefinition = cloneDeep(nodeDefinitions[\"tableCell\"]);\n  return times(cellCount, () => cellDefinition.generate(nodeDefinitions, {}));\n}\n\nexport function generateTableCell() {\n  const cellDefinition = cloneDeep(nodeDefinitions[\"tableCell\"]);\n  return cellDefinition.generate(nodeDefinitions, {})\n}\n\nfunction anyRowOrColumnMultiSpan(table: DocTableType<unknown>) {\n  return table.rows.some(row =>\n    row.cells.some(cell =>\n      (cell.columnSpan && cell.columnSpan !== 1) || (cell.rowSpan && cell.rowSpan !== 1)\n    )\n  )\n}\n\nfunction allRowsHaveSameNumberOfCells(table: DocTableType<unknown>) {\n  return R.uniq(table.rows.map(row => row.cells.length)).length === 1\n}\n\nfunction getColumnCount(table: DocTableType<unknown>) {\n  return R.sum(table.rows[0].cells.map(cell => cell.columnSpan || 1))\n}\n\nfunction getRowCount(table: DocTableType<unknown>) {\n  const firstOfEachColumn = table.rows.map(row => row.cells[0])\n  const reduceResult = firstOfEachColumn.reduce(\n    (prev, cell) => {\n      if (prev.cellsToSkip > 0) {\n        return {\n          rowCount: prev.rowCount,\n          cellsToSkip: prev.cellsToSkip - 1,\n        }\n      } else {\n        const rowCount = cell.rowSpan || 1\n\n        return {\n          rowCount: prev.rowCount + rowCount,\n          cellsToSkip: rowCount - 1,\n        }\n      }\n\n    },\n    {cellsToSkip: 0, rowCount: 0}\n  )\n\n  return reduceResult.rowCount\n}\n\nfunction inASpan(columnIndex: number, rowIndex: number, span: DocTableSpan) {\n  return (\n    ((columnIndex >= span.columnIndex) && (columnIndex < span.columnIndex + span.columnSpan)) &&\n    ((rowIndex >= span.rowIndex) && (rowIndex < span.rowIndex + span.rowSpan))\n  )\n}\n\nexport function addMissingCellsToTable<T>(table: DocTableType<T>) {\n  if(anyRowOrColumnMultiSpan(table)) {\n    if (!allRowsHaveSameNumberOfCells(table)) {\n      const rowCount = getRowCount(table)\n      const columnCount = getColumnCount(table)\n\n      const spansToSearch: Array<DocTableSpan> = []\n\n      R.range(0, rowCount).forEach(rowIndex => {\n        if (!table.rows[rowIndex]) {\n          const newRow = generateTableRowWithNTableCells(0)\n          table = R.over(R.lensPath([\"rows\"]), R.insert(rowIndex, newRow), table)\n        }\n\n        R.range(0, columnCount).forEach(columnIndex => {\n          if (spansToSearch.some(span => inASpan(columnIndex, rowIndex, span))) {\n            const newCell = generateTableCell()\n            table = R.over(R.lensPath([\"rows\", rowIndex, \"cells\"]), R.insert(columnIndex, newCell), table)\n          } else {\n            const cell = table.rows[rowIndex].cells[columnIndex]\n\n            const columnSpan = cell.columnSpan || 1\n            const rowSpan = cell.rowSpan || 1\n\n            if (columnSpan !== 1 || rowSpan !== 1) {\n              spansToSearch.push({\n                rowIndex: rowIndex,\n                rowSpan: rowSpan,\n                columnIndex: columnIndex,\n                columnSpan: columnSpan,\n              })\n            }\n          }\n        })\n      })\n    }\n  }\n\n  return table;\n}\n","import * as _ from \"lodash\";\nimport * as R from \"ramda\";\nimport memoize from \"memoize-weak\";\n\nimport generateUUID from \"../../helpers/generateUUID\";\n\nimport {\n  deepFindAllPaths,\n  deepFindAll,\n  deepFindPath,\n  findAtPath,\n  setAtPath,\n  overAtPath,\n  deleteAtPath,\n  insertAtPath,\n  normalizeDocNode,\n  nodeBlockContentKeys,\n  nodeInlineContentKeys,\n  findNodePathByUid,\n  findNodeAtPath,\n  editNodeWithUIDKeyValueWithFunction,\n  filterPathsByFunction,\n  moveAtPathToPath,\n  findDeepestLineagePathFromPath,\n  arePathsSameLineage,\n  findNodeByUid,\n  isNode,\n  nodeInlineNotFlowContentKeys,\n  findNodeParentByUid,\n  nodeContentKeyFromPath,\n  nodeIndexFromPath,\n  nodeParentPathFromPath,\n  docMapAllNodes,\n} from \"./Functions/base\";\n\nimport {\n  generateTableRowWithNTableCells,\n  generateTableCell,\n  addMissingCellsToTable,\n} from \"./Functions/table\";\n\nimport {\n  rangesDoTouch,\n  rangeLength,\n  rangesUnion,\n  rangesExcept,\n  rangesIntersection,\n  shiftRange,\n  isRangeCollapsed,\n  splitAndShiftRangeAtIndexByValue,\n  extendRangeAtIndexByValue,\n  deleteRangeAtIndexByValue,\n} from \"./Functions/Range\";\n\nimport { convertAllInlineNodesToRangeJSON } from \"./Convert/RangeInlineJSON\";\n\nimport {\n  NEW_COMMENT_THREAD,\n  EDIT_COMMENT,\n} from \"./menu\"\n\nimport * as MenuTypes from \"./menu\"\n\nexport const changesDisplayModes = {\n  ONLY_PUBLISHED: \"ONLY_PUBLISHED\",\n  HIDE_SUGGESTIONS: \"HIDE_SUGGESTIONS\",\n  HIGHLIGHT_SUGGESTIONS: \"HIGHLIGHT_SUGGESTIONS\",\n  HIGHLIGHT_ALL_CHANGES: \"HIGHLIGHT_ALL_CHANGES\",\n} as const;\n\nexport function isChangesDisplayMode(str: string): str is ChangesDisplayMode {\n  return !!Object.values(changesDisplayModes).find((displayMode) => str === displayMode)\n}\n\nexport const decisionTypes = {\n  ACCEPTED: \"ACCEPTED\",\n  REJECTED: \"REJECTED\",\n};\n\n// Change Types\nexport const CHANGE_TEXT_AND_NODES = \"CHANGE_TEXT_AND_NODES\";\nexport const MOVE_NODE = \"MOVE_NODE\";\nexport const SET_KEYS_VALUES = \"SET_KEYS_VALUES\";\nexport const ADD_STYLE = \"ADD_STYLE\";\nexport const DELETE_STYLE = \"DELETE_STYLE\";\nexport const ADD_TABLE_ROW = \"ADD_TABLE_ROW\";\nexport const DELETE_TABLE_ROW = \"DELETE_TABLE_ROW\";\nexport const ADD_TABLE_COLUMN = \"ADD_TABLE_COLUMN\";\nexport const DELETE_TABLE_COLUMN = \"DELETE_TABLE_COLUMN\";\nexport const MERGE_TABLE_CELLS = \"MERGE_TABLE_CELLS\";\nexport const UNMERGE_TABLE_CELLS = \"UNMERGE_TABLE_CELLS\";\nexport const ACCEPT_CHANGES = \"ACCEPT_CHANGES\";\nexport const REJECT_CHANGES = \"REJECT_CHANGES\";\nexport const PUBLISH = \"PUBLISH\";\nexport const ADD_COMMENT_THREAD = \"ADD_COMMENT_THREAD\";\nexport const CLOSE_COMMENT_THREAD = \"CLOSE_COMMENT_THREAD\";\nexport const ADD_CHANGE_COMMENT = \"ADD_CHANGE_COMMENT\";\nexport const DELETE_CHANGE_COMMENT = \"DELETE_CHANGE_COMMENT\";\nexport const ADD_SUMMARY_OF_EDIT = \"ADD_SUMMARY_OF_EDIT\";\nexport const DELETE_SUMMARY_OF_EDIT = \"DELETE_SUMMARY_OF_EDIT\";\nexport const ADD_STUDENT_FEEDBACK = \"ADD_STUDENT_FEEDBACK\";\nexport const DELETE_STUDENT_FEEDBACK = \"DELETE_STUDENT_FEEDBACK\";\n\n// FAKE CHANGES\nexport const ADD_NODE = \"ADD_NODE\";\nexport const ADD_TEXT_AND_NODES_BEFORE_NODE = \"ADD_TEXT_AND_NODES_BEFORE_NODE\";\nexport const ADD_TEXT_AND_NODES_TO_NODE = \"ADD_TEXT_AND_NODES_TO_NODE\";\nexport const DELETE_NODE = \"DELETE_NODE\";\nexport const MOVE_NODE_UP = \"MOVE_NODE_UP\";\nexport const MOVE_NODE_DOWN = \"MOVE_NODE_DOWN\";\n\nexport const ADD_CONTENT = \"ADD_CONTENT\";\nexport const DELETE_CONTENT = \"DELETE_CONTENT\";\n\n// Change Summary Types\nexport const ADDED_NODE = \"ADDED_NODE\";\nexport const DELETED_NODE = \"DELETED_NODE\";\nexport const CHANGED_TEXT_AND_NODES = \"CHANGED_TEXT_AND_NODES\";\nexport const MOVED_NODE = \"MOVED_NODE\";\nexport const CHANGED_KEYS_VALUES = \"CHANGED_KEYS_VALUES\";\nexport const CHANGED_UID = \"CHANGED_UID\";\nexport const CHANGED_TEXT = \"CHANGED_TEXT\";\nexport const ADDED_TEXT = \"ADDED_TEXT\";\nexport const DELETED_TEXT = \"DELETED_TEXT\";\nexport const ADDED_STYLE = \"ADDED_STYLE\";\nexport const DELETED_STYLE = \"DELETED_STYLE\";\nexport const ADDED_TABLE_ROW = \"ADDED_TABLE_ROW\";\nexport const DELETED_TABLE_ROW = \"DELETED_TABLE_ROW\";\nexport const ADDED_TABLE_COLUMN = \"ADDED_TABLE_COLUMN\";\nexport const DELETED_TABLE_COLUMN = \"DELETED_TABLE_COLUMN\";\nexport const MERGED_TABLE_CELLS = \"MERGED_TABLE_CELLS\";\nexport const UNMERGED_TABLE_CELLS = \"UNMERGED_TABLE_CELLS\";\nexport const OPENED_INLINE_COMMENT_THREAD = \"OPENED_INLINE_COMMENT_THREAD\";\nexport const OPENED_NODE_COMMENT_THREAD = \"OPENED_NODE_COMMENT_THREAD\";\n\nexport const HIDE_TEXT = \"HIDE_TEXT\";\n\nexport function addChangeToDoc(doc, change) {\n  // console.log(\"CHANGE\", change);\n\n  if (change.selection) {\n    const translatedRange = translateSelectionToFlowRange(doc, change.selection);\n\n    if (translatedRange) {\n      // console.log(\"translatedRange\", translatedRange)\n      change = R.dissoc('selection', change)\n      change.uid = translatedRange.uid;\n      change.key = translatedRange.contentKey;\n      change.range = translatedRange.range;\n    } else {\n      console.log(\"ERROR: COULD NOT TRANSLATE SELECTION TO FLOW RANGE\")\n      return doc;\n    }\n  }\n\n  switch (change.type) {\n    case CHANGE_TEXT_AND_NODES:\n      return addChangeTextAndNodesChange(doc, change);\n    case ADD_NODE:\n      return addAddNodeChange(doc, change);\n    case ADD_TEXT_AND_NODES_BEFORE_NODE:\n      return addAddTextAndNodesBeforeNodeChange(doc, change);\n    case ADD_TEXT_AND_NODES_TO_NODE:\n      return addAddTextAndNodesToNodeChange(doc, change);\n    case DELETE_NODE:\n      return addDeleteNodeChange(doc, change);\n    case MOVE_NODE:\n      return addMoveNodeChange(doc, change);\n    case MOVE_NODE_UP:\n      return addMoveNodeUpChange(doc, change);\n    case MOVE_NODE_DOWN:\n      return addMoveNodeDownChange(doc, change);\n    case SET_KEYS_VALUES:\n      return addSetKeyValuesChange(doc, change);\n    case ADD_STYLE:\n    case DELETE_STYLE:\n      return addStyleChange(doc, change);\n    case ADD_TABLE_ROW:\n      return addAddTableRowChangeToNodeWithUID(doc, change);\n    case DELETE_TABLE_ROW:\n      return addDeleteTableRowChangeToNodeWithUID(doc, change);\n    case ADD_TABLE_COLUMN:\n      return addAddTableColumnChange(doc, change);\n    case DELETE_TABLE_COLUMN:\n      return addDeleteTableColumnChange(doc, change);\n    case MERGE_TABLE_CELLS:\n    case UNMERGE_TABLE_CELLS:\n      return addTableCellSpanChangeToNodeWithUID(doc, change);\n    case ACCEPT_CHANGES:\n      const acceptChangePaths = findAllChangePathsByChangeId(doc, change.accept_change_id);\n      doc = acceptChangePaths.reduce((reduceDoc, changePath) => markChangeAtPathAccepted(reduceDoc, changePath, change), doc);\n\n      // For any move/delete\n      // Remove old moveSummary?\n\n      return doc;\n    case REJECT_CHANGES:\n      const rejectChangePaths = findAllChangePathsByChangeId(doc, change.reject_change_id);\n      doc = rejectChangePaths.reduce((reduceDoc, changePath) => markChangeAtPathRejected(reduceDoc, changePath, change), doc);\n\n      // For any move/delete\n      // Remove old moveSummary?\n\n      return doc;\n    case PUBLISH:\n      const changePaths = findAllPublishableChangePaths(doc);\n      doc = changePaths.reduce((reduceDoc, changePath) => markChangeAtPathPublished(reduceDoc, changePath, change), doc);\n\n      // Clean out all old published changes and stuff\n\n      return doc;\n    case ADD_COMMENT_THREAD:\n      return addAddCommentThread(doc, change);\n    case CLOSE_COMMENT_THREAD:\n      return deleteChangeWithID(doc, change);\n    case ADD_CHANGE_COMMENT:\n      return addCommentToChangeWithID(doc, change.parent_change_id, change);\n    case DELETE_CHANGE_COMMENT:\n      return deleteCommentWithID(doc, change.comment_id, change);\n    case ADD_SUMMARY_OF_EDIT:\n      return addSummaryOfEditChange(doc, change);\n    case DELETE_SUMMARY_OF_EDIT:\n      return deleteSummaryOfEditChange(doc, change);\n    case ADD_STUDENT_FEEDBACK:\n      return addStudentFeedbackChange(doc, change);\n    case DELETE_STUDENT_FEEDBACK:\n      return deleteStudentFeedbackChange(doc, change);\n  }\n}\n\n\n///////////////////////////////////////\n///////////////////////////////////////\n///////////////////////////////////////\n\nexport const weakMemoizedApplyAllChanges = memoize(applyAllChanges);\nexport function applyAllChanges(node, changesDisplayMode, editIndex = 0) {\n  if (isMoveSummary(node) || !isRelevantNode(node, changesDisplayMode)) { return null; }\n\n  node = applyEditIndexToNode(node, editIndex);\n  node = applyInlineChangesToNode(node, changesDisplayMode);\n  node = applyKeyValueChangesToNode(node, changesDisplayMode);\n  node = applyTableChangesToNode(node, changesDisplayMode);\n  node = applyBlockChangeHighlightsToNode(node, changesDisplayMode);\n\n  // TODO MOVE NODES TO CORRECT PLACE\n  if ([\"section\", \"tableCell\"].includes(node.type)) {\n    // TODO ADD CORRECT EDIT INDEX\n    node = applyListIndentKeyValueChangesToChildren(node, changesDisplayMode);\n\n    node = {\n      ...node,\n      content: flatFlowToTreeFlow(node.content, node.contentListNodes, changesDisplayMode)\n    }\n  }\n\n  node = applyAllChangesToChildren(node, changesDisplayMode);\n\n  return node;\n}\n\n// Create a new Map({})\nfunction mergeChangeMaps(map1, map2) {\n  for (const [key, value] of map2) {\n    if (map1.get(key)) {\n      map1.set(key, map1.get(key).concat(value));\n    } else {\n      map1.set(key, value);\n    }\n  }\n\n  return map1;\n}\n\nfunction addChangeToChangeMap(changeMap, change) {\n  if (changeMap.get(change.change_id)) {\n    changeMap.get(change.change_id).push(change);\n  } else {\n    changeMap.set(change.change_id, [change]);\n  }\n}\n\nexport const weakMemoizedCollectAllSuggestionChanges = memoize(collectAllSuggestionChanges);\nfunction collectAllSuggestionChanges(node, variantId=undefined) {\n  const newChangeMap = new Map();\n\n  const newVariantId = node.variantId || variantId\n\n  mergeChangeMaps(newChangeMap, collectSuggestionAddDeleteChanges(node, newVariantId));\n  mergeChangeMaps(newChangeMap, collectSuggestionKeyValueChanges(node, newVariantId));\n  mergeChangeMaps(newChangeMap, collectSuggestionInlineChanges(node, newVariantId));\n  mergeChangeMaps(newChangeMap, collectSuggestionTableChanges(node, newVariantId));\n  mergeChangeMaps(newChangeMap, collectSuggestionBlockChanges(node, newVariantId));\n\n  return newChangeMap;\n}\n\nfunction collectSuggestionBlockChanges(node, variantId=undefined) {\n  const newChangeMap = new Map();\n\n  nodeBlockContentKeys(node).forEach((nodeKey) => {\n    if (node[nodeKey]) {\n      node[nodeKey].forEach(blockNode => {\n        mergeChangeMaps(newChangeMap, weakMemoizedCollectAllSuggestionChanges(blockNode, variantId));\n      })\n    }\n  })\n\n  return newChangeMap;\n}\n\nfunction collectSuggestionAddDeleteChanges(node, variantId=undefined) {\n  const newChangeMap = new Map();\n\n  const allChanges = node.addDeleteChanges || [];\n  let suggestionChanges = allChanges.filter((change) => isOpenSuggestionChange(change));\n\n  if (suggestionChanges[0] && suggestionChanges[0].uid !== node.uid) {\n    suggestionChanges = suggestionChanges.map(change => {\n      return {\n        ...change,\n        uid: node.uid,\n        changeNodeType: node.type\n      }\n    })\n  }\n\n  if (variantId) {\n    suggestionChanges = suggestionChanges.map(change => {\n      return {\n        ...change,\n        variantId: variantId,\n      }\n    })\n  }\n\n  suggestionChanges.forEach(change => {\n    addChangeToChangeMap(newChangeMap, change);\n  })\n\n  return newChangeMap;\n}\n\nfunction collectSuggestionKeyValueChanges(node, variantId=undefined) {\n  const newChangeMap = new Map();\n\n  const allChanges = node.key_value_changes || [];\n  let suggestionChanges = allChanges.filter((change) => isOpenSuggestionChange(change));\n\n  if (variantId) {\n    suggestionChanges = suggestionChanges.map(change => {\n      return {\n        ...change,\n        variantId: variantId,\n      }\n    })\n  }\n\n  suggestionChanges.forEach(change => {\n    addChangeToChangeMap(newChangeMap, change);\n  });\n\n  return newChangeMap;\n}\n\nfunction collectSuggestionInlineChanges(node, variantId=undefined) {\n  const newChangeMap = new Map();\n\n  nodeInlineContentKeys(node).forEach((nodeKey) => {\n    if (node[nodeKey]) {\n      const allChanges = [\n        ...node[nodeKey].addDeleteChanges || [],\n        ...node[nodeKey].styleChanges || [],\n        ...node[nodeKey].commentThreadChanges || [],\n      ]\n\n      let suggestionChanges = allChanges.filter((change) => isOpenSuggestionChange(change));\n\n      if (suggestionChanges[0]) {\n        suggestionChanges = suggestionChanges.map(change => {\n          return {\n            text: node[nodeKey].text.slice(change.range.start, change.range.end),\n            ...change,\n            uid: node.uid,\n            key: nodeKey,\n          }\n        })\n      }\n\n      if (variantId) {\n        suggestionChanges = suggestionChanges.map(change => {\n          return {\n            ...change,\n            variantId: variantId,\n          }\n        })\n      }\n\n      suggestionChanges.forEach(change => {\n        addChangeToChangeMap(newChangeMap, change);\n      })\n    }\n  })\n\n  return newChangeMap;\n}\n\nfunction collectSuggestionTableChanges(node, variantId=undefined) {\n  const {\n    rowChanges = [],\n    columnChanges = [],\n    cellSpanChanges = [],\n  } = node\n\n  const newChangeMap = new Map();\n\n  const allTableChanges = [\n    ...R.flatten(rowChanges),\n    ...R.flatten(columnChanges),\n    ...cellSpanChanges\n  ]\n\n  allTableChanges.forEach(change => {\n    if (isOpenSuggestionChange(change)) {\n      change = {\n        ...change,\n        uid: change.table_uid\n      };\n\n      if (variantId) {\n        change = {\n          ...change,\n          variantId: variantId,\n        }\n      }\n\n      addChangeToChangeMap(newChangeMap, change);\n    }\n  });\n\n  return newChangeMap;\n}\n\nfunction applyEditIndexToNode(node, editIndex) {\n  return R.assoc(\"editIndex\", editIndex, node);\n}\n\nfunction applyInlineChangesToNode(node, changesDisplayMode) {\n  return nodeInlineContentKeys(node).reduce((node, nodeKey) => {\n    return R.when(\n      R.has(nodeKey),\n      R.over(R.lensProp(nodeKey), (rangeInlineJSON) => applyInlineChangesToRangeInlineJson(rangeInlineJSON, changesDisplayMode)),\n      node,\n    );\n  }, node);\n}\n\nfunction applyKeyValueChangesToNode(node, changesDisplayMode) {\n  return filterRelevantChanges(node.key_value_changes || [], changesDisplayMode).reduce((node, kvChange) => {\n    return {...node, ...kvChange.keys_and_values};\n  }, node);\n}\n\nfunction applyListIndentKeyValueChangesToChildren(node, changesDisplayMode) {\n  return nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n    return R.when(\n      R.has(nodeKey),\n      R.over(\n        R.lensProp(nodeKey), R.pipe(\n        R.map((blockNode: any) => {\n          if (blockNode.type === \"listItem\") {\n            return weakMemoizedApplyListIndentKeyValueChangesToNode(blockNode, changesDisplayMode);\n          } else {\n            return blockNode;\n          }\n        }),\n      )),\n      node,\n    );\n  }, node);\n}\n\n\nexport const weakMemoizedApplyListIndentKeyValueChangesToNode = memoize(applyListIndentKeyValueChangesToNode);\nfunction applyListIndentKeyValueChangesToNode(node, changesDisplayMode) {\n  return applyKeyValueChangesToNode(node, changesDisplayMode);\n}\n\nfunction applyAllChangesToChildren(node, changesDisplayMode) {\n  return nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n    return R.when(\n      R.has(nodeKey),\n      R.over(R.lensProp(nodeKey), R.pipe(\n        R.addIndex(R.map)((blockNode, index) => weakMemoizedApplyAllChanges(blockNode, changesDisplayMode, index)),\n        R.reject(R.isNil),\n      )),\n      node,\n    );\n  }, node);\n}\n\nexport const weakMemoizedSetBlockNodesContainsSelection = memoize(setBlockNodesContainsSelection);\nfunction setBlockNodesContainsSelection(doc, docSelection) {\n  const uidToLockAround = docSelection.start.uid;\n  const nodePath = findNodePathByUid(doc, uidToLockAround);\n\n  if (!nodePath) { return doc; }\n\n  const node = findNodeAtPath(doc, nodePath);\n\n  // REVISE TEST\n  if (![\"paragraph\", \"listItem\"].includes(node.type) && docSelection.start.contentKey) { return doc; }\n\n  let pathToLockFrom = nodePath\n  if (!docSelection.start.contentKey) {\n    pathToLockFrom = nodeParentPathFromPath(doc, nodePath);\n  }\n\n  const toLockAncestorPath = findDeepestLineagePathFromPath(doc, pathToLockFrom, (node) => [\"section\", \"tableCell\"].includes(node.type));\n\n  if (!toLockAncestorPath) { return doc; }\n\n  return setAtPath(doc, [...toLockAncestorPath, \"blockNodesContainsSelection\"], true);\n}\n\nexport const weakMemoizedAttachCurrentMenuToNode = memoize(attachCurrentMenuToNode);\nfunction attachCurrentMenuToNode(doc, currentMenu, localClipboard) {\n  if (currentMenu.uid) {\n    const nodePath = findNodePathByUid(doc, currentMenu.uid);\n    if (nodePath) {\n      doc = setAtPath(doc, [...nodePath, \"currentMenu\"], currentMenu);\n\n      if (currentMenu.menu === MenuTypes.ADD_NODE) {\n        doc = setAtPath(doc, [...nodePath, \"localClipboard\"], localClipboard);\n      }\n    }\n  }\n\n  return doc;\n}\n\n///////////////////////////////////////\n//////////// REORGANIZE ///////////////\n///////////////////////////////////////\n\nexport const weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON = memoize(convertAllToFlatFlowAndInlineRangeJSON);\nexport function convertAllToFlatFlowAndInlineRangeJSON(node) {\n  node = convertAllTablesToFullCells(node);\n  node = convertAllInlineNodesToRangeJSON(node);\n  node = convertAllTreeFlowToFlatFlow(node);\n\n  return node;\n}\n\nexport function convertAllTablesToFullCells(node) {\n  if (node.type === \"table\") {\n    node = addMissingCellsToTable(node);\n  }\n\n  node = nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n    return R.when(\n      R.has(nodeKey),\n      R.over(R.lensProp(nodeKey), (childNodes) => childNodes.map(childNode => convertAllTablesToFullCells(childNode))),\n      node\n    );\n  }, node);\n\n  return node;\n}\n\nexport function convertAllTreeFlowToFlatFlow(node) {\n  switch (node.type) {\n    case \"paragraph\":\n    case \"listItem\":\n      return node;\n    case \"section\":\n    case \"tableCell\":\n      if (!node.contentListNodes) {\n        const {\n          nodes,\n          listNodes,\n        } = treeFlowToFlatFlow(node.content);\n\n        node = {\n          ...node,\n          content: nodes,\n          contentListNodes: listNodes,\n        }\n      }\n    default:\n  }\n\n  node = nodeBlockContentKeys(node).reduce((node, nodeKey) => {\n    return R.when(\n      R.has(nodeKey),\n      R.over(R.lensProp(nodeKey), (childNodes) => childNodes.map(childNode => convertAllTreeFlowToFlatFlow(childNode))),\n      node\n    );\n  }, node);\n\n  return node;\n}\n\nfunction treeFlowToFlatFlow(treeFlowNodes, listUid=null, listIndentation = -1) {\n  treeFlowNodes = Array.isArray(treeFlowNodes) ? treeFlowNodes : [treeFlowNodes];\n  return treeFlowNodes.reduce((flatFlowData, treeFlowNode) => {\n    let localListUid = listUid || treeFlowNode.listUid;\n    let localListIndentation = typeof treeFlowNode.listIndentation === \"number\" ? treeFlowNode.listIndentation : listIndentation;\n    localListIndentation = Math.max(localListIndentation, 0);\n\n    if (localListUid) {\n      treeFlowNode = {\n        ...treeFlowNode,\n        listUid: localListUid,\n        listIndentation: localListIndentation,\n      }\n    }\n\n    switch (treeFlowNode.type) {\n      case \"regularList\":\n      case \"numberedList\":\n        const returnedListData = treeFlowToFlatFlow(treeFlowNode[\"content\"], localListUid || treeFlowNode.uid, listIndentation + 1);\n        const cleanedListNode = R.dissoc(\"content\", treeFlowNode);\n\n        return {\n          nodes: R.concat(flatFlowData.nodes, returnedListData.nodes),\n          listNodes: R.assoc(treeFlowNode.uid, cleanedListNode, flatFlowData.listNodes),\n        }\n      case \"listItem\":\n        const returnedListItemData = treeFlowToFlatFlow(treeFlowNode[\"content\"], localListUid, localListIndentation);\n        const cleanedListItemNode = R.assoc(\"content\", [], treeFlowNode);\n\n        return {\n          ...flatFlowData,\n          nodes: [...flatFlowData.nodes, cleanedListItemNode, ...returnedListItemData.nodes],\n        }\n      case \"paragraph\":\n      default:\n        return {\n          ...flatFlowData,\n          nodes: [...flatFlowData.nodes, treeFlowNode],\n        }\n    }\n  }, {nodes: [], listNodes: {}});\n}\n\nexport function flatFlowToTreeFlow(flatFlowNodes, listNodes, changesDisplayMode) {\n  return flatFlowNodes.reduce((treeFlowNodes, flatFlowNode) => {\n    const prevTreeFlowNode = R.last(treeFlowNodes as any[]);\n    if (!prevTreeFlowNode) {\n      if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n        flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n        return R.append(flatFlowNode, treeFlowNodes)\n      } else {\n        return treeFlowNodes\n      }\n    } else {\n      switch (prevTreeFlowNode.type) {\n        case \"paragraph\":\n          if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n            flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n            return R.append(flatFlowNode, treeFlowNodes);\n          } else {\n            const newLastNode = weakMemoizedAppendNodeToParagraph(prevTreeFlowNode, flatFlowNode);\n            return R.update(-1, newLastNode, treeFlowNodes);\n          }\n        case \"regularList\":\n        case \"numberedList\":\n          if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n            if ([\"paragraph\", \"listItem\"].includes(flatFlowNode.type) && flatFlowNode.listUid === prevTreeFlowNode.uid){\n              const newLastNode = weakMemoizedAppendNodeToList(prevTreeFlowNode, flatFlowNode);\n              return R.update(-1, newLastNode, treeFlowNodes);\n            } else {\n              flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n              return R.append(flatFlowNode, treeFlowNodes);\n            }\n          } else {\n            const newLastNode = weakMemoizedAppendNodeToLastParagraphInList(prevTreeFlowNode, flatFlowNode);\n            return R.update(-1, newLastNode, treeFlowNodes);\n          }\n        default:\n          if (isRelevantNode(flatFlowNode, changesDisplayMode)) {\n            flatFlowNode = weakMemoizedNewListIfNeeded(flatFlowNode, listNodes);\n            return R.append(flatFlowNode, treeFlowNodes);\n          } else {\n            return treeFlowNodes;\n          }\n      }\n    }\n  }, [])\n}\n\nexport function findFlatFlowNodesWithFlowRange(doc, flowRange) {\n  const parentNode = findNodeByUid(doc, flowRange.uid);\n  const contentNodes = parentNode[flowRange.contentKey];\n  const contentListNodes = parentNode[`${flowRange.contentKey}ListNodes`];\n\n  if (!isBlock(contentNodes) && !isBlockChangeSet(contentNodes)) { return null; }\n\n  const startNodeOffset = findNodeOffsetFromFlattenedNodes(contentNodes, flowRange.range.start);\n  const endNodeOffset = findNodeOffsetFromFlattenedNodes(contentNodes, flowRange.range.end);\n\n  let inRangeFlatFlowNodes = [];\n\n  let startNode = contentNodes[startNodeOffset.nodeIndex];\n  if (startNodeOffset.innerIndex < flattenedNodeLength(startNode)) {\n    if (startNode.type === \"paragraph\") {\n      let newContent = startNode.content;\n\n      if (startNodeOffset.nodeIndex === endNodeOffset.nodeIndex) {\n        newContent = beforeRangeInlineJSONAt(newContent, endNodeOffset.innerIndex - 1);\n      }\n\n      newContent = afterRangeInlineJSONAt(newContent, startNodeOffset.innerIndex - 1)\n\n      startNode = {\n        ...startNode,\n        content: newContent,\n      }\n    }\n\n    inRangeFlatFlowNodes.push(startNode);\n  }\n\n  if (startNodeOffset.nodeIndex + 1 < endNodeOffset.nodeIndex) {\n    inRangeFlatFlowNodes = inRangeFlatFlowNodes.concat(contentNodes.slice(startNodeOffset.nodeIndex + 1, endNodeOffset.nodeIndex));\n  }\n\n  if (startNodeOffset.nodeIndex != endNodeOffset.nodeIndex && endNodeOffset.innerIndex > 0) {\n    let endNode = contentNodes[endNodeOffset.nodeIndex];\n\n    if (endNode.type === \"paragraph\") {\n      endNode = {\n        ...endNode,\n        content: beforeRangeInlineJSONAt(endNode.content, endNodeOffset.innerIndex - 1),\n      }\n    }\n\n    inRangeFlatFlowNodes.push(endNode);\n  }\n\n  return {\n    nodes: inRangeFlatFlowNodes,\n    listNodes: contentListNodes,\n  }\n}\n\nconst weakMemoizedNewListIfNeeded = memoize(newListIfNeeded);\nfunction newListIfNeeded(flatFlowNode, listNodes={}) {\n  if (flatFlowNode.type === \"listItem\") {\n    const list = listNodes[flatFlowNode.listUid]\n    return weakMemoizedCombineListAndListItem(list, flatFlowNode);\n  } else {\n    return flatFlowNode;\n  }\n}\n\nconst weakMemoizedCombineListAndListItem = memoize(combineListAndListItem);\nfunction combineListAndListItem(list, listItem) {\n  return {\n    ...list,\n    content: safeAppend(list.content, listItem),\n  }\n}\n\nconst weakMemoizedAppendNodeToParagraph = memoize(appendNodeToParagraph);\nfunction appendNodeToParagraph(paragraphNode, otherNode) {\n  let newContent = concatRangeInlineJSON(\n    paragraphNode.content,\n    {\n      text: \"#\",\n      addDeleteChanges: [\n        {\n          type: \"DELETE_CONTENT\",\n          range: {\n            start: 0,\n            end: 1,\n          }\n        }\n      ]\n    }\n  )\n\n  if (otherNode.type === \"paragraph\") {\n    newContent = concatRangeInlineJSON(newContent, otherNode.content)\n  }\n\n  return {\n    ...paragraphNode,\n    content: newContent,\n  }\n}\n\nconst weakMemoizedAppendNodeToList = memoize(appendNodeToList);\nfunction appendNodeToList(listNode, otherNode) {\n  switch (otherNode.type) {\n    case \"listItem\":\n      if (typeof otherNode.listIndentation === \"number\") {\n        const indentedListPath = findLastListOfIndentPath(listNode, otherNode.listIndentation)\n\n        if (indentedListPath) {\n          return R.over(R.lensPath([...indentedListPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n        } else {\n          const lastListItemPath = findLastListItemPath(listNode);\n          if (lastListItemPath) {\n            const newListNode = {\n              type: listNode.type,\n              uid: `list-${otherNode.uid}`,\n              content: [otherNode],\n            }\n\n            return R.over(R.lensPath([...lastListItemPath, \"content\"]), (content) => safeAppend(content, newListNode), listNode);\n          } else {\n            const lastListPath = findLastListPath(listNode);\n            return R.over(R.lensPath([...lastListPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n          }\n        }\n      } else {\n        const lastListPath = findLastListPath(listNode)\n        return R.over(R.lensPath([...lastListPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n      }\n    case \"paragraph\":\n    default:\n      const lastListItemPath = findLastListItemPath(listNode);\n      return R.over(R.lensPath([...lastListItemPath, \"content\"]), (content) => safeAppend(content, otherNode), listNode);\n  }\n}\n\n\nconst weakMemoizedAppendNodeToLastParagraphInList = memoize(appendNodeToLastParagraphInList);\nfunction appendNodeToLastParagraphInList(listNode, otherNode) {\n  const lastListItemPath = findLastListItemPath(listNode);\n\n  if (!lastListItemPath) {\n    return listNode;\n  }\n\n  const lastListItem = R.view(R.lensPath(lastListItemPath), listNode);\n  const lastListItemIndex = lastListItem.content.length - 1\n\n  if (lastListItemIndex === -1) {\n    return listNode;\n  }\n\n  const lastNode = lastListItem.content[lastListItemIndex]\n\n  if (lastNode.type !== \"paragraph\") {\n    return listNode;\n  }\n\n  return R.over(R.lensPath([...lastListItemPath, \"content\", lastListItemIndex]), (paragraphNode) => weakMemoizedAppendNodeToParagraph(paragraphNode, otherNode), listNode);\n}\n\n\nfunction findLastListOfIndentPath(node, indent) {\n  switch (node.type) {\n    case \"regularList\":\n    case \"numberedList\":\n      if (indent === 0) {\n        return [];\n      }\n\n      const lastListIndex = node.content.length - 1;\n      if (lastListIndex === -1) {\n        return null;\n      }\n\n      const remainingListPath = findLastListOfIndentPath(node.content[lastListIndex], indent - 1);\n      if (!remainingListPath) {\n        return null;\n      }\n\n      return [\"content\", lastListIndex, ...remainingListPath];\n    case \"listItem\":\n      const lastListItemIndex = node.content.length - 1;\n      if (lastListItemIndex === -1) {\n        return null;\n      }\n\n      const remainingListItemPath = findLastListOfIndentPath(node.content[lastListItemIndex], indent);\n      if (!remainingListItemPath) {\n        return null;\n      }\n\n      return [\"content\", lastListItemIndex, ...remainingListItemPath];\n    default:\n      return null;\n  }\n}\n\nfunction findLastListPath(node) {\n  switch (node.type) {\n    case \"regularList\":\n    case \"numberedList\":\n      const lastListIndex = node.content.length - 1;\n      if (lastListIndex === -1) {\n        return [];\n      }\n\n      const remainingListPath = findLastListPath(node.content[lastListIndex]);\n      if (!remainingListPath) {\n        return [];\n      }\n\n      return [\"content\", lastListIndex, ...remainingListPath];\n    case \"listItem\":\n      const lastListItemIndex = node.content.length - 1;\n      if (lastListItemIndex === -1) {\n        return null;\n      }\n\n      const remainingListItemPath = findLastListPath(node.content[lastListItemIndex]);\n      if (!remainingListItemPath) {\n        return null;\n      }\n\n      return [\"content\", lastListItemIndex, ...remainingListItemPath];\n    default:\n      return null;\n  }\n}\n\nfunction findLastListItemOfIndentPath(node, indent) {\n  const lastListPath = findLastListOfIndentPath(node, indent);\n\n  if (!lastListPath) {\n    return null;\n  }\n\n  const lastList = R.view(R.lensPath(lastListPath), node);\n\n  const lastListLastIndex = lastList.content.length - 1;\n\n  if (lastListLastIndex === -1) {\n    return null;\n  }\n\n  if (lastList.content[lastListLastIndex].type === \"listItem\") {\n    return [...lastListPath, \"content\", lastListLastIndex];\n  } else {\n    return null;\n  }\n}\n\nfunction findLastListItemPath(node) {\n  const lastListPath = findLastListPath(node);\n\n  if (!lastListPath) {\n    return null;\n  }\n\n  const lastList = R.view(R.lensPath(lastListPath), node);\n\n  const lastListLastIndex = lastList.content.length - 1;\n\n  if (lastListLastIndex === -1) {\n    return null;\n  }\n\n  if (lastList.content[lastListLastIndex].type === \"listItem\") {\n    return [...lastListPath, \"content\", lastListLastIndex];\n  } else {\n    return null;\n  }\n}\n\nfunction safeAppend(array=[], element) {\n  return R.append(element, array);\n}\n\nfunction safeConcat(array1=[], array2=[]) {\n  return array2.length > 0 ? R.concat(array1, array2) : array1;\n}\n\nfunction safeMerge(obj1={}, obj2={}) {\n  return R.keys(obj2).length > 0 ? R.mergeRight(obj1, obj2) : obj1;\n}\n\nfunction shiftChildRange(rangeParent, value) {\n  return {\n    ...rangeParent,\n    range: shiftRange(rangeParent.range, value),\n  }\n}\n\nfunction flattenedNodeLength(node) {\n  if (node.type === \"paragraph\") {\n    return 1 + node.content.text.length;\n  } else {\n    return 1;\n  }\n}\n\nexport function translateSelectionToFlowRange(doc, docSelection) {\n  const startPath = findNodePathByUid(doc, docSelection.start.uid);\n  const endPath = findNodePathByUid(doc, docSelection.end.uid);\n\n  if (!startPath || !endPath) { return null; }\n\n  const fullStartPath = docSelection.start.contentKey ? [...startPath, docSelection.start.contentKey] : startPath;\n  const fullEndPath = docSelection.end.contentKey ? [...endPath, docSelection.end.contentKey] : endPath;\n\n  const startFlowRootPath = flowRootPathFromPath(doc, fullStartPath);\n  const endFlowRootPath = flowRootPathFromPath(doc, fullEndPath);\n\n  if (!startFlowRootPath || !R.equals(startFlowRootPath, endFlowRootPath)) { return null; }\n\n  let baseContent = findAtPath(doc, startFlowRootPath);\n  const baseNode = findAtPath(doc, R.init(startFlowRootPath));\n\n  if (\n    isBlock(baseContent) ||\n    isBlockChangeSet(baseContent)\n  ) {\n    const startNodeIndex = baseContent.findIndex(node => node.uid === docSelection.start.uid);\n    const startNode = baseContent[startNodeIndex];\n    const beforeStartLength = R.sum(R.slice(0, startNodeIndex, baseContent as any[]).map(node => flattenedNodeLength(node)));\n    const startIndex = startNode.type === \"paragraph\" ? beforeStartLength + docSelection.start.index + 1 : beforeStartLength + docSelection.start.index;\n\n    const endNodeIndex = baseContent.findIndex(node => node.uid === docSelection.end.uid);\n    const endNode = baseContent[endNodeIndex];\n    const beforeEndLength = R.sum(R.slice(0, endNodeIndex, baseContent as any[]).map(node => flattenedNodeLength(node)));\n    const endIndex = endNode.type === \"paragraph\" ? beforeEndLength + docSelection.end.index + 1 : beforeEndLength + docSelection.end.index;\n\n    return {\n      uid: baseNode.uid,\n      contentKey: R.last(startFlowRootPath),\n      range: {\n        start: startIndex,\n        end: endIndex,\n      }\n    }\n  } else if (\n    isInline(baseContent) ||\n    isInlineChangeSet(baseContent)\n  ) {\n    return {\n      uid: baseNode.uid,\n      contentKey: R.last(startFlowRootPath),\n      range: {\n        start: docSelection.start.index,\n        end: docSelection.end.index,\n      }\n    }\n  } else {\n    // ERROR\n  }\n}\n\nexport function isBlock(content) {\n  return Array.isArray(content) && (content.length === 0 || isBlockNode(content[0]));\n}\n\nfunction isBlockNode(content) {\n  return typeof content === 'object' && !!content.uid && !!content.type;\n}\n\nexport function isBlockChangeSet(content) {\n  return typeof content === 'object' && !!content.nodes;\n}\n\nfunction isInline(content) {\n  return typeof content === 'string';\n}\n\nfunction isInlineChangeSet(content) {\n  return typeof content === 'object' && typeof content.text === 'string';\n}\n\nexport function flowRootPathFromPath(doc, path) {\n  const possibleKey = R.last(path);\n  const possibleNodePath = R.init(path);\n\n  if (R.isNil(possibleKey)) { return null };\n\n  if (typeof possibleKey !== \"string\") { return flowRootPathFromPath(doc, possibleNodePath); }\n\n  const possibleNode = findAtPath(doc, possibleNodePath)\n\n  if (!isNode(possibleNode)) { return flowRootPathFromPath(doc, possibleNodePath); }\n\n  if (\n    ![\"paragraph\", \"listItem\", \"regularList\", \"numberedList\"].includes(possibleNode.type)\n  ) {\n    return [...possibleNodePath, possibleKey];\n  } else {\n    return flowRootPathFromPath(doc, possibleNodePath);\n  }\n}\n\nfunction findNodeOffsetFromFlattenedNodes(nodes, index: number) {\n  if (index <= 0) {\n    return {\n      nodeIndex: 0,\n      innerIndex: 0,\n    }\n  }\n\n  let nodeOffset = nodes.reduce((agg, node) => {\n    if (!agg.innerIndex) {\n      const restOfIndex = agg.remainingIndex - flattenedNodeLength(node)\n      if (restOfIndex <= 0) {\n        return {\n          nodeIndex: agg.nodeIndex,\n          innerIndex: agg.remainingIndex,\n        }\n      } else {\n        return {\n          remainingIndex: restOfIndex,\n          nodeIndex: agg.nodeIndex + 1,\n        }\n      }\n    } else {\n      return agg;\n    }\n  }, {remainingIndex: index, nodeIndex: 0})\n\n  return nodeOffset.innerIndex ? nodeOffset : null\n}\n\n// RENAME TO RANGED CHANGE\nfunction appendRangedItemToFlattenedNodes(nodes, rangedItemsName, rangedItem) {\n  return nodes.reduce((agg, node) => {\n    const nodeLength = flattenedNodeLength(node);\n\n    return {\n      offsetRangedItem: {\n        ...agg.offsetRangedItem,\n        range: shiftRange(agg.offsetRangedItem.range, -1 * nodeLength)\n      },\n      newNodes: [\n        ...agg.newNodes,\n        appendRangedItemToFlatNode(node, rangedItemsName, agg.offsetRangedItem)\n      ],\n    }\n\n  }, {offsetRangedItem: rangedItem, newNodes: []}).newNodes;\n}\n\nfunction appendRangedItemToFlatNode(node, rangedItemsName, rangedItem) {\n  if (rangedItem.range.start < 1 && rangedItem.range.end > 0) {\n    const newRangedItem = {\n      ...rangedItem,\n      range: {\n        start: 0,\n        end: 1,\n      }\n    }\n\n    let newRangedItems = node[rangedItemsName] || [];\n    let toCombineRangeIndex = R.findLastIndex((rangedItemB: any) => {\n      return (\n        rangedItemB.type === newRangedItem.type &&\n        rangedItemB.change_id === newRangedItem.change_id &&\n        rangesDoTouch(rangedItemB.range, newRangedItem.range)\n      );\n    }, newRangedItems);\n    if (toCombineRangeIndex >= 0) {\n      newRangedItems = R.adjust(toCombineRangeIndex, (rangedItemB: any) => {\n        return {\n          ...newRangedItem,\n          range: rangesUnion(rangedItemB.range, newRangedItem.range)\n        };\n      }, newRangedItems);\n    } else {\n      newRangedItems = R.append(newRangedItem, newRangedItems);\n    }\n\n    node = R.assoc(rangedItemsName, newRangedItems, node)\n  }\n\n  if (node[\"type\"] === \"paragraph\") {\n    if (rangedItem.range.start < node.content.text.length + 1 && rangedItem.range.end > 1) {\n      const newRangedItem = {\n        ...rangedItem,\n        range: {\n          start: R.max(0, rangedItem.range.start - 1),\n          end: R.min(node.content.text.length, rangedItem.range.end - 1),\n        }\n      }\n\n      node = R.over(R.lensPath([\"content\"]), (rangeInlineJSON) => {\n        return appendRangedItemToRangeInlineJSON(rangeInlineJSON, rangedItemsName, newRangedItem);\n      }, node)\n    }\n  }\n\n  return node;\n}\n\nfunction appendRangedItemToRangeInlineJSON(rangeInlineJSON, rangedItemsName, rangedItem) {\n  let rangesToRemove = [];\n  if (rangedItemsName === \"addDeleteChanges\" && rangedItem.type === DELETE_CONTENT && rangeInlineJSON[rangedItemsName]) {\n    const addRangeItemsToCheck = rangeInlineJSON[rangedItemsName].filter(rangedItemB => {\n      return (\n        canCompressChanges(rangedItem, rangedItemB) &&\n        rangesDoTouch(rangedItem.range, rangedItemB.range) &&\n        rangedItemB.type === ADD_CONTENT\n      );\n    })\n\n    rangesToRemove = addRangeItemsToCheck.map(addRangeItem => rangesIntersection(addRangeItem.range, rangedItem.range));\n  }\n\n  rangeInlineJSON = R.over(R.lensPath([rangedItemsName]), (rangedItems) => {\n    let newRangedItems = rangedItems || [];\n    let toCombineRangeIndex = R.findLastIndex((rangedItemB: any) => {\n      return (\n        rangedItemB.type === rangedItem.type &&\n        rangedItemB.change_id === rangedItem.change_id &&\n        rangesDoTouch(rangedItemB.range, rangedItem.range)\n      );\n    }, newRangedItems);\n\n    if (toCombineRangeIndex >= 0) {\n      newRangedItems = R.adjust(toCombineRangeIndex, (rangedItemB: any) => {\n        return {\n          ...rangedItem,\n          range: rangesUnion(rangedItemB.range, rangedItem.range)\n        };\n      }, newRangedItems);\n    } else {\n      newRangedItems = R.append(rangedItem, newRangedItems);\n    }\n\n    return newRangedItems;\n  }, rangeInlineJSON);\n\n  R.reverse(rangesToRemove).forEach(rangeToRemove => {\n    rangeInlineJSON = removeRangeFromRangeInlineJSON(rangeInlineJSON, rangeToRemove)\n  })\n\n  return rangeInlineJSON;\n}\n\nfunction isFlowTypeAndKey(type, key) {\n  return (\n    (type === \"section\" && key === \"content\") ||\n    (type === \"tableCell\" && key === \"content\")\n  )\n}\n\nfunction isSecondaryTypeAndKey(type, key) {\n  return (\n    (type === \"section\" && key === \"title\") ||\n    (type === \"image\" && key === \"title\") ||\n    (type === \"audio\" && key === \"title\") ||\n    (type === \"video\" && key === \"title\")\n    // TODO FILL IN WITH REST OF ITEMS\n  )\n}\n\nfunction appendChangeToChanges(changes, change) {\n  if (!changes) {changes = [];}\n\n  const previousChange = R.last(changes);\n  if (previousChange) {\n    const compressedChange = compressTwoChangesIfPossible(previousChange, change);\n\n    if (compressedChange) {\n      return R.update(-1, compressedChange, changes);\n    }\n  }\n\n  return R.append(change, changes);\n}\n\nconst possibleRangeKeys = [\n  \"styleRanges\",\n  \"styleChanges\",\n  \"addDeleteChanges\",\n  \"commentThreadChanges\",\n  // ADD MORE POSSIBLE RANGES\n]\n\nfunction concatRangeInlineJSON(rangeInline1, rangeInline2) {\n  let newRangeInlineJSON = {\n    ...rangeInline1,\n    text: `${rangeInline1.text}${rangeInline2.text}`,\n  }\n\n  possibleRangeKeys.forEach(possibleRangeKey => {\n    if (rangeInline2[possibleRangeKey]) {\n      const shiftedRanges = rangeInline2[possibleRangeKey].map(possibleRange => shiftChildRange(possibleRange, rangeInline1.text.length));\n      newRangeInlineJSON[possibleRangeKey] = safeConcat(newRangeInlineJSON[possibleRangeKey], shiftedRanges)\n    }\n  })\n\n  return newRangeInlineJSON;\n}\n\nfunction insertRangeInlineJSONAtIndex(rangeInline1, rangeInline2, index: number) {\n  const beforeText = rangeInline1.text.slice(0, index);\n  const afterText = rangeInline1.text.slice(index);\n\n  let newRangeInlineJSON = {\n    ...rangeInline1,\n    text: `${beforeText}${rangeInline2.text}${afterText}`,\n  }\n\n  const insertLength = rangeInline2.text.length;\n\n  possibleRangeKeys.forEach(possibleRangeKey => {\n    if (newRangeInlineJSON[possibleRangeKey]) {\n      if (possibleRangeKey.includes(\"addDeleteChanges\")) {\n        newRangeInlineJSON[possibleRangeKey] = newRangeInlineJSON[possibleRangeKey].flatMap((rangedItem) =>\n          splitAndShiftRangeAtIndexByValue(rangedItem.range, index, insertLength).map((newRanges) => (\n            {\n              ...rangedItem,\n              range: newRanges,\n            }\n          ))\n        );\n      } else {\n        newRangeInlineJSON[possibleRangeKey] = newRangeInlineJSON[possibleRangeKey].map((rangedItem) => ({\n          ...rangedItem,\n          range: extendRangeAtIndexByValue(rangedItem.range, index, insertLength),\n        }));\n      }\n    }\n\n    if (rangeInline2[possibleRangeKey]) {\n      const shiftedRanges = rangeInline2[possibleRangeKey].map(possibleRange => shiftChildRange(possibleRange, rangeInline1.text.length));\n      newRangeInlineJSON[possibleRangeKey] = safeConcat(newRangeInlineJSON[possibleRangeKey], shiftedRanges)\n    }\n  })\n\n  return newRangeInlineJSON;\n}\n\nfunction removeRangeFromRangeInlineJSON(rangeInline, range) {\n  const beforeText = rangeInline.text.slice(0, range.start);\n  const afterText = rangeInline.text.slice(range.end);\n\n  let newRangeInlineJSON = {\n    ...rangeInline,\n    text: `${beforeText}${afterText}`,\n  }\n\n  possibleRangeKeys.forEach(possibleRangeKey => {\n    if (newRangeInlineJSON[possibleRangeKey]) {\n      newRangeInlineJSON[possibleRangeKey] = newRangeInlineJSON[possibleRangeKey].map((rangedItem) => {\n        const newRange = deleteRangeAtIndexByValue(rangedItem.range, range.start, rangeLength(range));\n        if (newRange) {\n          return {\n            ...rangedItem,\n            range: newRange\n          }\n        } else {\n          return null;\n        }\n      }).filter(x => x);\n    }\n  })\n\n  return newRangeInlineJSON;\n}\n\nfunction beforeRangeInlineJSONAt(rangeInline, index: number) {\n  let newBeforeRangeInlineJSON = {\n    ...rangeInline,\n    text: rangeInline.text.slice(0, index),\n  }\n\n  possibleRangeKeys.forEach(possibleRangeKey => {\n    if (newBeforeRangeInlineJSON[possibleRangeKey]) {\n      newBeforeRangeInlineJSON[possibleRangeKey] = newBeforeRangeInlineJSON[possibleRangeKey]\n        .filter(rangeParent => rangeParent.range.start < index)\n        .map(rangeParent => (\n          {\n            ...rangeParent,\n            range: {\n              start: rangeParent.range.start,\n              end: R.min(rangeParent.range.end, index)\n            }\n          }\n        ))\n    }\n  })\n\n  return newBeforeRangeInlineJSON;\n}\n\nfunction afterRangeInlineJSONAt(rangeInline, index: number) {\n  let newAfterRangeInlineJSON = {\n    ...rangeInline,\n    text: rangeInline.text.slice(index),\n  }\n\n  possibleRangeKeys.forEach(possibleRangeKey => {\n    if (newAfterRangeInlineJSON[possibleRangeKey]) {\n      newAfterRangeInlineJSON[possibleRangeKey] = newAfterRangeInlineJSON[possibleRangeKey]\n        .filter(rangeParent => rangeParent.range.end > index)\n        .map(rangeParent => (\n          {\n            ...rangeParent,\n            range: {\n              start: R.max(rangeParent.range.start - index, 0),\n              end: rangeParent.range.end - index\n            }\n          }\n        ))\n    }\n  })\n\n  return newAfterRangeInlineJSON;\n}\n\nfunction splitRangeInlineJSONAt(rangeInline, index: number) {\n  return [\n    beforeRangeInlineJSONAt(rangeInline, index),\n    afterRangeInlineJSONAt(rangeInline, index),\n  ]\n}\n\nfunction addChangeTextAndNodesChange(doc, change) {\n  const node = findNodeByUid(doc, change.uid);\n\n  if (!nodeInlineNotFlowContentKeys(node).includes(change.key)) {\n    return addChangeTextAndNodesChangeToFlow(doc, change);\n  } else {\n    return addChangeTextAndNodesChangeToSecondary(doc, change);\n  }\n}\n\nfunction reduceFlatNodesWithOffset(flowNodes, reduceFunc, initialValue) {\n  const finalResultContainer = flowNodes.reduce((resultContainer, node) => {\n    const newResult = reduceFunc(\n      resultContainer.result,\n      node,\n      resultContainer.offset\n    );\n\n    const newOffset = resultContainer.offset + flattenedNodeLength(node);\n\n    return {\n      result: newResult,\n      offset: newOffset\n    }\n  }, {result: initialValue, offset: 0})\n\n  return finalResultContainer.result;\n}\n\nfunction addChangeTextAndNodesChangeToFlow(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.uid)\n  const flowPath = [...nodePath, change.key]\n  const flowListNodesPath = [...nodePath, `${change.key}ListNodes`]\n\n  let listNodesToAdd = {}\n\n  doc = overAtPath(doc, flowPath, (flowNodes) => {\n    let nodes = flowNodes || [];\n\n    const compressableChange = reduceFlatNodesWithOffset(nodes, (result, node, offset) => {\n      if ( result ) { return result };\n\n      if (node.addDeleteChanges) {\n        const adjustedRange = shiftRange(change.range, -1 * offset);\n\n        const compressableNodeAddDropChange = node.addDeleteChanges.find(addDropChange => {\n          canCompressChanges(change, addDropChange) &&\n          rangesDoTouch(adjustedRange, addDropChange.range)\n        })\n\n        if (compressableNodeAddDropChange) { return compressableNodeAddDropChange }\n      }\n\n      if (node.type === \"paragraph\" && node.content.addDeleteChanges) {\n        const adjustedRange = shiftRange(change.range, -1 * offset - 1);\n        const compressableContentAddDropChange = node.content.addDeleteChanges.find(addDropChange => {\n          return (\n            canCompressChanges(change, addDropChange) &&\n            rangesDoTouch(adjustedRange, addDropChange.range)\n          )\n        })\n\n        if (compressableContentAddDropChange) { return compressableContentAddDropChange }\n      }\n    }, null);\n\n    if (compressableChange) {\n      change = {\n        ...change,\n        ...changeMetadata(compressableChange),\n        change_id: compressableChange.change_id,\n      }\n    }\n\n    let nodesToAdd = change.nodes || [];\n    const nodesToAddData = treeFlowToFlatFlow(nodesToAdd);\n\n    nodesToAdd = nodesToAddData.nodes;\n    listNodesToAdd = nodesToAddData.listNodes;\n\n    let styledTextToAdd = change.styledText;\n\n    const startNodeOffset = findNodeOffsetFromFlattenedNodes(nodes, change.range.start);\n    const startNode = startNodeOffset && nodes[startNodeOffset.nodeIndex];\n\n    if (styledTextToAdd) {\n      if (\n        !startNode ||\n        startNode.type !== \"paragraph\" ||\n        startNodeOffset.innerIndex === 0\n      ) {\n        const newParagraph = {\n          type: \"paragraph\",\n          uid: generateUUID(),\n          content: styledTextToAdd,\n        }\n\n        styledTextToAdd = null;\n        nodesToAdd = R.append(newParagraph, nodesToAdd);\n      }\n    }\n\n    let newLength = R.sum(nodesToAdd.map(node => flattenedNodeLength(node)))\n    if (styledTextToAdd) {\n      newLength = newLength + styledTextToAdd.text.length;\n    }\n\n    if (nodesToAdd.length > 0) {\n      if (\n        startNode &&\n        startNode.type === \"paragraph\" &&\n        startNodeOffset.innerIndex > 0 &&\n        startNode.content.text.length + 1 > startNodeOffset.innerIndex\n      ) {\n        const [\n          beforeInline,\n          afterInline\n        ] = splitRangeInlineJSONAt(startNode.content, startNodeOffset.innerIndex - 1);\n\n        nodes = R.set(R.lensPath([startNodeOffset.nodeIndex, \"content\"]), beforeInline, nodes);\n\n        if (R.last(nodesToAdd as any[]).type === \"paragraph\") {\n          nodesToAdd = R.over(R.lensPath([nodesToAdd.length - 1, \"content\"]), content => concatRangeInlineJSON(content, afterInline), nodesToAdd)\n        } else {\n          const newParagraph = {\n            type: \"paragraph\",\n            uid: generateUUID(),\n            content: afterInline,\n          }\n\n          newLength = newLength + 1;\n          nodesToAdd = R.append(newParagraph, nodesToAdd);\n        }\n      }\n    }\n\n    if (styledTextToAdd) {\n      nodes = R.over(R.lensPath([startNodeOffset.nodeIndex, \"content\"]), (oldContent) => {\n        return insertRangeInlineJSONAtIndex(oldContent, styledTextToAdd, startNodeOffset.innerIndex - 1);\n      }, nodes)\n    }\n\n    if (nodesToAdd.length > 0) {\n      let insertIndex = 0;\n\n      if (startNodeOffset) {\n        if (startNodeOffset.innerIndex === 0) {\n          insertIndex = startNodeOffset.nodeIndex;\n        } else {\n          insertIndex = startNodeOffset.nodeIndex + 1;\n        }\n      }\n\n      nodes = R.insertAll(insertIndex, nodesToAdd, nodes)\n    }\n\n    const cleanedChange = R.omit([\"nodes\", \"styledText\"], change)\n\n    if (!isRangeCollapsed(change.range)) {\n      const deleteChange = {\n        ...cleanedChange,\n        type: DELETE_CONTENT,\n        range: shiftRange(change.range, newLength),\n      };\n\n      nodes = appendRangedItemToFlattenedNodes(nodes, \"addDeleteChanges\", deleteChange);\n    }\n\n    // ADD ADD CHANGES TO NEW NODES\n    if (newLength > 0) {\n      const addRange = {\n        ...cleanedChange,\n        type: ADD_CONTENT,\n        range: {\n          start: change.range.start,\n          end: change.range.start + newLength,\n        }\n      }\n\n      nodes = appendRangedItemToFlattenedNodes(nodes, \"addDeleteChanges\", addRange);\n    }\n\n    return nodes;\n  })\n\n  doc = overAtPath(doc, flowListNodesPath, (listNodes) => safeMerge(listNodes, listNodesToAdd));\n\n  return doc;\n}\n\nfunction addChangeTextAndNodesChangeToSecondary(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.uid)\n  const secondaryTextPath = [...nodePath, change.key]\n\n  doc = overAtPath(doc, secondaryTextPath, (rangeInlineJSON) => {\n    const compressableChange = rangeInlineJSON.addDeleteChanges?.find(addDropChange => {\n      return (\n        canCompressChanges(change, addDropChange) &&\n        rangesDoTouch(change.range, addDropChange.range)\n      )\n    })\n\n    if (compressableChange) {\n      change = {\n        ...change,\n        ...changeMetadata(compressableChange),\n        change_id: compressableChange.change_id,\n      }\n    }\n\n    const styledText = change.styledText || {text: \"\", styleRanges: []}\n\n    rangeInlineJSON = insertRangeInlineJSONAtIndex(rangeInlineJSON, styledText, change.range.start);\n\n    const cleanedChange = R.omit([\"nodes\", \"styledText\"], change)\n\n    if (!isRangeCollapsed(change.range)) {\n      const deleteChange = {\n        ...cleanedChange,\n        type: DELETE_CONTENT,\n        range: shiftRange(change.range, styledText.text.length),\n      };\n\n      rangeInlineJSON = appendRangedItemToRangeInlineJSON(rangeInlineJSON, \"addDeleteChanges\", deleteChange);\n    }\n\n    if (styledText.text.length > 0) {\n      const addChange = {\n        ...cleanedChange,\n        type: ADD_CONTENT,\n        range: {\n          start: change.range.start,\n          end: change.range.start + styledText.text.length,\n        }\n      }\n\n      rangeInlineJSON = appendRangedItemToRangeInlineJSON(rangeInlineJSON, \"addDeleteChanges\", addChange);\n    }\n\n    return rangeInlineJSON;\n  })\n\n  return doc;\n}\n\nfunction addAddNodeChange(doc, change) {\n  const parentPath = findNodePathByUid(doc, change.parent_uid);\n  const content = findAtPath(doc, [...parentPath, change.parent_key]);\n  const beforeContent = content.slice(0, change.parent_index);\n\n  const beforeLength = R.sum(beforeContent.map(node => flattenedNodeLength(node)));\n\n  const modifiedChange = {\n    ...change,\n    type: CHANGE_TEXT_AND_NODES,\n    uid: change.parent_uid,\n    key: change.parent_key,\n    range: {\n      start: beforeLength,\n      end: beforeLength\n    },\n    nodes: [convertAllInlineNodesToRangeJSON(change.node)],\n  }\n\n  return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addAddTextAndNodesBeforeNodeChange(doc, change) {\n  const {\n    nodes,\n    styledText,\n    sibling_uid,\n  } = change\n\n  const siblingPath = findNodePathByUid(doc, sibling_uid);\n  const sibling = findNodeAtPath(doc, siblingPath);\n\n  let parent, parentKey, parentIndex;\n  if ([\"regularList\", \"numberedList\"].includes(sibling.type)) {\n    // Truncate path to find parent\n    let parentPath = R.takeWhile(n => n !== \"contentListNodes\", siblingPath) as NodePath; // TODO: Remove as when can\n    parent = findNodeAtPath(doc, parentPath);\n\n    const listIndex = parent.content.findIndex(node => node.listUid === sibling.uid);\n    // FIND FIRST NON DELETED ITEM\n    if (listIndex < 0) { return doc; }\n\n    parentKey = \"content\";\n    parentIndex = listIndex;\n  } else {\n    parent = findNodeParentByUid(doc, sibling_uid);\n    parentKey = nodeContentKeyFromPath(doc, siblingPath);\n    parentIndex = nodeIndexFromPath(doc, siblingPath);\n  }\n\n  const beforeContent = parent.content.slice(0, parentIndex);\n  const beforeLength = R.sum(beforeContent.map(node => flattenedNodeLength(node)));\n\n  const modifiedChange = {\n    ...change,\n    type: CHANGE_TEXT_AND_NODES,\n    uid: parent.uid,\n    key: parentKey,\n    range: {\n      start: beforeLength,\n      end: beforeLength,\n    },\n    styledText: styledText,\n    nodes: nodes,\n  }\n\n  return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addAddTextAndNodesToNodeChange(doc, change) {\n  const {\n    nodes,\n    styledText,\n    parent_uid,\n    parent_key,\n  } = change;\n\n  const parent = findNodeByUid(doc, parent_uid);\n  const parentLength =   R.sum(parent[parent_key].map(node => flattenedNodeLength(node)));\n\n  const modifiedChange = {\n    ...change,\n    type: CHANGE_TEXT_AND_NODES,\n    uid: parent_uid,\n    key: parent_key,\n    range: {\n      start: parentLength,\n      end: parentLength,\n    },\n    styledText: styledText,\n    nodes: nodes,\n  }\n\n  return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addDeleteNodeChange(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.uid);\n  const node = findAtPath(doc, nodePath);\n\n  let parent, parentKey, parentStartIndex, parentEndIndex;\n  if ([\"regularList\", \"numberedList\"].includes(node.type)) {\n    // Truncate path to find parent\n    let parentPath = R.takeWhile(n => n !== \"contentListNodes\", nodePath) as NodePath; // TODO: Remove when ready\n    parent = findNodeAtPath(doc, parentPath);\n\n    parentKey = \"content\";\n\n    parentStartIndex = parent.content.findIndex(n => n.listUid === node.uid);\n    // FIND FIRST NON DELETED ITEM\n    if (parentStartIndex < 0) { return doc; }\n\n    parentEndIndex = parent.content.findLastIndex(n => n.listUid === node.uid);\n    // FIND FIRST NON DELETED ITEM\n    if (parentEndIndex < 0) { return doc; }\n\n    parentEndIndex = parentEndIndex+1;\n  } else {\n    parent = findNodeParentByUid(doc, node.uid);\n    parentKey = nodeContentKeyFromPath(doc, nodePath);\n    parentStartIndex = nodeIndexFromPath(doc, nodePath);\n\n    if ([\"listItem\"].includes(node.type)) {\n      parentEndIndex = parentStartIndex + 2;\n    } else {\n      parentEndIndex = parentStartIndex + 1;\n    }\n  }\n\n  const content = parent[parentKey];\n\n  const beforeContent = content.slice(0, parentStartIndex);\n  const beforeLength = R.sum(beforeContent.map(node => flattenedNodeLength(node)));\n\n  const nodeLength = R.sum(content.slice(parentStartIndex, parentEndIndex).map(node => flattenedNodeLength(node)));\n\n  const modifiedChange = {\n    ...change,\n    type: CHANGE_TEXT_AND_NODES,\n    uid: parent.uid,\n    key: parentKey,\n    range: {\n      start: beforeLength,\n      end: beforeLength + nodeLength,\n    },\n  }\n\n  return addChangeToDoc(doc, modifiedChange);\n}\n\nfunction addMoveNodeChange(doc, change) {\n  return doc;\n\n  // const oldPath = findNodePathByUid(doc, change.uid);\n  // const newPath = [...findNodePathByUid(doc, change.parent_uid), change.parent_key, change.parent_index];\n\n  // const node = findAtPath(doc, oldPath);\n\n  // const oldEditStage = blockEditStageFromNode(node);\n  // const newEditStage = editStageFromChange(change);\n\n  // doc = addBlockChangeToNodeAtPath(doc, oldPath, change);\n  // doc = moveAtPathToPath(doc, oldPath, newPath);\n\n  // switch (editStageComparison(oldEditStage, newEditStage)) {\n  //   case EditStage.MORE_FINAL:\n  //     let summaryPath = oldPath;\n\n  //     if (newPath.length <= summaryPath.length && arePathsSameLineage(R.init(newPath), summaryPath) && R.last(newPath) <= summaryPath[newPath.length - 1]) {\n  //       summaryPath = R.adjust(newPath.length - 1, R.inc, summaryPath);\n  //     }\n\n  //     doc = insertAtPath(doc, newMoveSummary(node.uid, oldEditStage), summaryPath);\n  //     break;\n  //   case EditStage.LESS_FINAL:\n  //     doc = removeMoveSummary(doc, node.uid, newEditStage);\n  //     break;\n  // }\n}\n\nfunction addMoveNodeUpChange(doc, change) {\n  return addMoveNodeUpOrDownChange(doc, change, true);\n}\n\nfunction addMoveNodeDownChange(doc, change) {\n  return addMoveNodeUpOrDownChange(doc, change, false);\n}\n\nfunction addMoveNodeUpOrDownChange(doc, change, isUp) {\n  const nodePath = findNodePathByUid(doc, change.uid);\n  let unadjustedNode = findNodeAtPath(doc, nodePath);\n\n  let parent = findNodeParentByUid(doc, change.uid);\n  let parentPath = findNodePathByUid(doc, parent.uid);\n\n  let parentKey, parentIndex;\n\n  let node;\n  if ([\"regularList\", \"numberedList\"].includes(unadjustedNode.type)) {\n    parentPath = nodePath.slice(0, -2);\n    parent = findNodeAtPath(doc, parentPath);\n\n    const listIndex = parent.content.findIndex(nodeB => nodeB.listUid === unadjustedNode.uid);\n    // FIND FIRST NON DELETED ITEM\n    if (listIndex < 0) { return doc; }\n\n    parentKey = \"content\";\n    parentIndex = listIndex;\n    node = parent.content[parentIndex];\n  } else {\n    parentKey = nodeContentKeyFromPath(doc, nodePath);\n    parentIndex = nodeIndexFromPath(doc, nodePath);\n    node = unadjustedNode;\n  }\n\n  const parentContent = parent[parentKey];\n\n  const afterSiblings = parentContent.slice(parentIndex + 1);\n\n  const moveAfterSiblings = R.takeWhile((nodeB:any) => {\n    switch (unadjustedNode.type) {\n      case \"paragraph\":\n        return (\n          isMoveSummary(nodeB) ||\n          isDeletedOrProposedDeletedNode(nodeB)\n        );\n      case \"listItem\":\n        return (\n          isMoveSummary(nodeB) ||\n          isDeletedOrProposedDeletedNode(nodeB) ||\n          (\n            node.listUid === nodeB.listUid &&\n            (node.listIndentation || 0) <= (nodeB.listIndentation || 0) &&\n            nodeB.type !== \"listItem\"\n          )\n        )\n      case \"regularList\":\n      case \"numberedList\":\n        return (\n          isMoveSummary(nodeB) ||\n          isDeletedOrProposedDeletedNode(nodeB) ||\n          unadjustedNode.uid === nodeB.listUid\n        )\n      default:\n        return false;\n    }\n  }, afterSiblings);\n\n  const nodesToMove = [node, ...moveAfterSiblings];\n\n  let newIndex;\n  if (isUp) {\n    const beforeSiblings = parentContent.slice(0, parentIndex);\n\n    const endOfValidSiblingIndex = R.findLastIndex((nodeB:any) => (\n      !isMoveSummary(nodeB) &&\n      !isDeletedOrProposedDeletedNode(nodeB) &&\n      (!unadjustedNode.listUid || (listLevel(unadjustedNode) <= listLevel(nodeB) && unadjustedNode.listUid === nodeB.listUid))\n    ), beforeSiblings);\n\n    if (endOfValidSiblingIndex === -1) { return doc; }\n\n    const endOfValidSibling = parentContent[endOfValidSiblingIndex];\n    const toEndOfValidSiblingSiblings = parentContent.slice(0, endOfValidSiblingIndex + 1);\n\n    let validSiblingIndex\n    if (unadjustedNode.listUid) {\n      validSiblingIndex = R.findLastIndex((nodeB:any) => (\n        unadjustedNode.listUid === nodeB.listUid && listLevel(unadjustedNode) >= listLevel(nodeB)\n      ), toEndOfValidSiblingSiblings);\n\n      if (validSiblingIndex === -1) { return doc; }\n    } else {\n      if (endOfValidSibling.listUid) {\n        const beforeValidSiblingIndex = R.findLastIndex((nodeB:any) => (\n          endOfValidSibling.listUid !== nodeB.listUid\n        ), toEndOfValidSiblingSiblings);\n\n        validSiblingIndex = beforeValidSiblingIndex + 1;\n      } else {\n        validSiblingIndex = endOfValidSiblingIndex;\n      }\n    }\n\n    newIndex = validSiblingIndex === -1 ? 0 : validSiblingIndex;\n  } else {\n    const afterSiblingsIndex = parentIndex + nodesToMove.length;\n    const afterSiblings = parentContent.slice(afterSiblingsIndex);\n\n    const validSiblingOffset = R.findIndex((nodeB:any) => (\n      !isMoveSummary(nodeB) &&\n      !isDeletedOrProposedDeletedNode(nodeB) &&\n      (\n        unadjustedNode.listUid ?\n          listLevel(unadjustedNode) === listLevel(nodeB) && unadjustedNode.listUid === nodeB.listUid :\n          listLevel(nodeB) <= 0 // Future can just be true\n      )\n    ), afterSiblings);\n\n    if (validSiblingOffset === -1) { return doc; }\n\n    const validSiblingIndex = afterSiblingsIndex + validSiblingOffset;\n\n    const validSibling = parentContent[validSiblingIndex];\n    const afterValidSiblingSiblings = parentContent.slice(validSiblingIndex + 1);\n\n\n    let endOfValidSiblingOffset = R.findIndex((nodeB:any) => (\n      !validSibling.listUid ||\n        (\n          unadjustedNode.listUid ?\n            listLevel(validSibling) >= listLevel(nodeB) || validSibling.listUid !== nodeB.listUid :\n            listLevel(nodeB) === -1 || validSibling.listUid !== nodeB.listUid\n        )\n    ), afterValidSiblingSiblings);\n\n    newIndex = endOfValidSiblingOffset === -1 ? parentContent.length : validSiblingIndex + 1 + endOfValidSiblingOffset;\n  }\n\n  if (newIndex > parentIndex) {\n    newIndex = Math.max(parentIndex, newIndex - nodesToMove.length);\n  }\n\n  let newParentContent = parentContent;\n  newParentContent = R.remove(parentIndex, nodesToMove.length, newParentContent);\n  newParentContent = R.insertAll(newIndex, nodesToMove, newParentContent);\n\n  return setAtPath(doc, [...parentPath, parentKey], newParentContent);\n}\n\nfunction listLevel(node) {\n  if (node.listUid) {\n    const unadjustedListLevel = node.listIndentation || 0;\n\n    if (node.type === \"listItem\") {\n      return unadjustedListLevel\n    } else {\n      return unadjustedListLevel + 1;\n    }\n  } else {\n    return -1;\n  }\n}\n\nfunction isDeletedOrProposedDeletedNode(node) {\n  return !isRelevantNode(node, changesDisplayModes.HIGHLIGHT_SUGGESTIONS);\n}\n\nfunction addStyleChange(doc, change) {\n  const node = findNodeByUid(doc, change.uid);\n\n  if (isFlowTypeAndKey(node.type, change.key)) {\n    return addStyleChangeToFlow(doc, change);\n  } else {\n    return addStyleChangeToSecondary(doc, change);\n  }\n}\n\n\nfunction addStyleChangeToFlow(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.uid)\n  const flowPath = [...nodePath, change.key]\n\n  doc = overAtPath(doc, flowPath, (flowNodes) => appendRangedItemToFlattenedNodes(flowNodes, \"styleChanges\", change)); // SHOULD NARROW CHANGE?\n\n  return doc;\n}\n\nfunction addStyleChangeToSecondary(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.uid)\n  const secondaryTextPath = [...nodePath, change.key]\n\n  doc = overAtPath(doc, secondaryTextPath, (rangeInlineJSON) => {\n    return {\n      ...rangeInlineJSON,\n      styleChanges: safeAppend(rangeInlineJSON.styleChanges, change), // SHOULD NARROW CHANGE?\n    }\n  })\n\n  return doc;\n}\n\nfunction addAddCommentThread(doc, change) {\n  const node = findNodeByUid(doc, change.uid);\n\n  if (isFlowTypeAndKey(node.type, change.key)) {\n    return addAddCommentThreadChangeToFlow(doc, change);\n  } else {\n    return addAddCommentThreadChangeToSecondary(doc, change);\n  }\n}\n\nfunction addAddCommentThreadChangeToFlow(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.uid)\n  const flowPath = [...nodePath, change.key]\n\n  doc = overAtPath(doc, flowPath, (flowNodes) => appendRangedItemToFlattenedNodes(flowNodes, \"commentThreadChanges\", change)); // SHOULD NARROW CHANGE?\n\n  return doc;\n}\n\nfunction addAddCommentThreadChangeToSecondary(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.uid);\n  const secondaryTextPath = [...nodePath, change.key];\n\n  doc = overAtPath(doc, secondaryTextPath, (rangeInlineJSON) => {\n    return {\n      ...rangeInlineJSON,\n      commentThreadChanges: appendChangeToChanges(rangeInlineJSON.commentThreadChanges, change),\n    }\n  })\n\n  return doc;\n}\n\nfunction addBlockChangeToNodeAtPath(doc, path, change) {\n  return overAtPath(doc, [path, \"changes\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction addSetKeyValuesChange(doc, change) {\n  return editNodeWithUIDKeyValueWithFunction(doc, change.uid, \"key_value_changes\", (changes) => appendChangeToChanges(changes, change));\n}\n\n// function addInlineTextChangeToNodeWithUID(doc, uid, key, change) {\n//   const nodePath = findNodePathByUid(doc, uid);\n//   return overAtPath(doc, [...nodePath, key, \"changes\"], (changes) => appendChangeToChanges(changes, change));\n// }\n\nfunction addAddTableRowChangeToNodeWithUID(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.table_uid);\n\n  doc = addInEmptyRowChanges(doc, nodePath);\n  doc = overAtPath(doc, [...nodePath, \"rowChanges\"], R.insert(change.index, []))\n  doc = overAtPath(doc, [...nodePath, \"rowChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n\n  const firstRow = findNodeAtPath(doc, [...nodePath, \"rows\", 0]);\n  const columnCount = firstRow.cells.length;\n  const newRow = convertAllInlineNodesToRangeJSON(generateTableRowWithNTableCells(columnCount))\n\n  doc = overAtPath(doc, [...nodePath, \"rows\"], R.insert(change.index, newRow))\n\n  return doc;\n}\n\nfunction addDeleteTableRowChangeToNodeWithUID(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.table_uid);\n\n  doc = addInEmptyRowChanges(doc, nodePath);\n  doc = overAtPath(doc, [...nodePath, \"rowChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n  return doc;\n}\n\nfunction addInEmptyRowChanges(doc, nodePath) {\n  const rows = findNodeAtPath(doc, [...nodePath, \"rows\"]);\n  const rowCount = rows.length;\n\n  return overAtPath(doc, [...nodePath, \"rowChanges\"], R.defaultTo(R.repeat([], rowCount)))\n}\n\nfunction addAddTableColumnChange(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.table_uid);\n\n  doc = addInEmptyColumnChanges(doc, nodePath);\n  doc = overAtPath(doc, [...nodePath, \"columnChanges\"], R.insert(change.index, []));\n  doc = overAtPath(doc, [...nodePath, \"columnChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n\n  doc = overAtPath(doc, [...nodePath, \"rows\"], R.map((row: any) => { // TODO: Remove any when done\n    const newCell = convertAllInlineNodesToRangeJSON(generateTableCell());\n    return overAtPath(row, [\"cells\"], R.insert(change.index, newCell))\n  }))\n\n  return doc;\n}\n\nfunction addDeleteTableColumnChange(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.table_uid);\n\n  doc = addInEmptyColumnChanges(doc, nodePath);\n  doc = overAtPath(doc, [...nodePath, \"columnChanges\", change.index], (changes) => appendChangeToChanges(changes, change));\n  return doc;\n}\n\nfunction addInEmptyColumnChanges(doc, nodePath) {\n  const firstRow = findNodeAtPath(doc, [...nodePath, \"rows\", 0]);\n  const columnCount = firstRow.cells.length;\n\n  return overAtPath(doc, [...nodePath, \"columnChanges\"], R.defaultTo(R.repeat([], columnCount)))\n}\n\nfunction addTableCellSpanChangeToNodeWithUID(doc, change) {\n  const nodePath = findNodePathByUid(doc, change.table_uid);\n  return overAtPath(doc, [...nodePath, \"cellSpanChanges\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteChangeWithID(doc, change) {\n  const nodePath = deepFindPath(doc, (node) => node.change_id === change.comment_thread_change_id);\n  return deleteAtPath(doc, nodePath);\n}\n\nfunction addCommentToChangeWithID(doc, parent_change_id, change) {\n  const nodePath = deepFindPath(doc, (node) => node.change_id === parent_change_id);\n  return overAtPath(doc, [...nodePath, \"comments\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteCommentWithID(doc, comment_id, change) {\n  const nodePath = deepFindPath(doc, (node) => node.comment_id === comment_id);\n  return deleteAtPath(doc, nodePath);\n}\n\nfunction addSummaryOfEditChange(doc, change) {\n  return overAtPath(doc, [\"summary_of_edits\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteSummaryOfEditChange(doc, change) {\n  return overAtPath(doc, [\"summary_of_edits\"], (changes) => changes.filter((changeN) => changeN.summary_of_edit_id !== change.summary_of_edit_id));\n}\n\nfunction addStudentFeedbackChange(doc, change) {\n  return overAtPath(doc, [\"student_feedbacks\"], (changes) => appendChangeToChanges(changes, change));\n}\n\nfunction deleteStudentFeedbackChange(doc, change) {\n  return overAtPath(doc, [\"student_feedbacks\"], (changes) => changes.filter((changeN) => changeN.student_feedback_id !== change.student_feedback_id));\n}\n\nfunction findAllChangePathsByChangeId(doc, change_id) {\n  return deepFindAllPaths(doc, (obj) => obj.change_id === change_id);\n}\n\nfunction findAllPublishableChangePaths(doc) {\n  return deepFindAllPaths(doc, (obj) => obj.change_id && isPublishableChange(obj));\n}\n\nfunction markChangeAtPathAccepted(doc, path, change) {\n  return R.over(R.lensPath(path), R.merge({decision: decisionTypes.ACCEPTED, decision_at: change.created_at, decision_by: change.author_id}), doc);\n}\n\nfunction markChangeAtPathRejected(doc, path, change) {\n  return R.over(R.lensPath(path), R.merge({decision: decisionTypes.REJECTED, decision_at: change.created_at, decision_by: change.author_id}), doc);\n}\n\nfunction markChangeAtPathPublished(doc, path, change) {\n  return R.over(R.lensPath(path), R.merge({published_at: change.created_at, published_by: change.author_id}), doc);\n}\n\nfunction isMoveSummary(node) {\n  return node.type === \"move_summary\";\n}\n\nfunction newMoveSummary(uid, editStage) {\n  return {\n    type: \"move_summary\",\n    move_uid: uid,\n    edit_stage: editStage,\n  };\n}\n\nfunction findMoveSummariesPaths(doc) {\n  return deepFindAllPaths(doc, isMoveSummary);\n}\n\nfunction removeMoveSummary(doc, uid, editStage) {\n  const moveSummaryPaths = findMoveSummariesPaths(doc);\n  const toRemovePaths = filterPathsByFunction(doc, moveSummaryPaths, (node) => node.moved_uid === uid && node.edit_stage === editStage);\n\n  return toRemovePaths.reduce((redDoc, path) => deleteAtPath(redDoc, path), doc);\n}\n\n\nconst EditStage = {\n  PUBLISHED: \"EditStage/PUBLISHED\",\n  ACCEPTED: \"EditStage/ACCEPTED\",\n  PROPOSED: \"EditStage/PROPOSED\",\n  REJECTED: \"EditStage/REJECTED\",\n\n  MORE_FINAL: \"EditStage/MORE_FINAL\",\n  AS_FINAL: \"EditStage/AS_FINAL\",\n  LESS_FINAL: \"EditStage/LESS_FINAL\",\n};\n\n\nfunction blockEditStageFromNode(node) {\n  const lastBlockChange = R.last(node.changes || []);\n  return lastBlockChange ? editStageFromChange(lastBlockChange) : EditStage.PUBLISHED;\n}\n\n\nfunction editStageFromChange(change) {\n  if (change.published_at) {\n    return EditStage.PUBLISHED;\n  } else if (!change.is_suggestion) {\n    return EditStage.ACCEPTED;\n  } else if (change.decision) {\n    return change.decision;\n  } else {\n    return EditStage.PROPOSED;\n  }\n}\n\nconst EDIT_STAGE_VALUE_MAP = {\n  [EditStage.REJECTED]: 0,\n  [EditStage.PROPOSED]: 1,\n  [EditStage.ACCEPTED]: 2,\n  [EditStage.PUBLISHED]: 3,\n};\n\nfunction editStageComparison(editStage1, editStage2) {\n  const value1 = EDIT_STAGE_VALUE_MAP[editStage1];\n  const value2 = EDIT_STAGE_VALUE_MAP[editStage2];\n\n  if (value1 > value2) {\n    return EditStage.MORE_FINAL;\n  } else if (value1 === value2) {\n    return EditStage.AS_FINAL;\n  } else {\n    return EditStage.LESS_FINAL;\n  }\n}\n\n\n////////////////////////////////////////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const weakMemoizedCloneAndNormalizeDoc = memoize(cloneAndNormalizeDoc);\nfunction cloneAndNormalizeDoc(doc) {\n  return normalizeDocNode(_.cloneDeep(doc));\n}\n\n// const weakMemoizedCacheTableInfo = memoize(cacheTableInfo);\n// function cacheTableInfo(node, changesDisplayMode) {\nfunction applyTableChangesToNode(node, changesDisplayMode) {\n  if (node.type !== \"table\") { return node; }\n\n  const allRowCount = node.rows.length;\n  const allColumnCount = node.rows[0]?.cells?.length || 0;\n\n  const originalCellSpans = getOriginalCellSpans(node);\n\n  const rowChangesByIndex = node.rowChanges || _.times(allRowCount, () => []);\n  const columnChangesByIndex = node.columnChanges || _.times(allColumnCount, () => []);\n  const cellSpanChanges = node.cellSpanChanges || [];\n\n  const isRowRelevantByIndex = rowChangesByIndex.map(rowChanges => isRelevantRow(rowChanges, changesDisplayMode));\n  const isColumnRelevantByIndex = columnChangesByIndex.map(columnChanges => isRelevantColumn(columnChanges, changesDisplayMode));\n\n  const relevantCellSpanChanges = filterRelevantChanges(cellSpanChanges, changesDisplayMode);\n  let collapsedCellSpans = convertCellSpanChangesToCellSpans(relevantCellSpanChanges, originalCellSpans);\n\n  const markedRows = node.rows.map((row, rowIndex) => {\n    const isRelevantRow = isRowRelevantByIndex[rowIndex];\n\n    const markedCells = row.cells.map((cell, columnIndex) => {\n      const isRelevantColumn = isColumnRelevantByIndex[columnIndex]\n\n      let isRelevantCell;\n      let rowSpan = cell.rowSpan || 1;\n      let columnSpan = cell.columnSpan || 1;\n      if (isRelevantRow && isRelevantColumn) {\n        const overlappingCellSpan = isPointInSpan(rowIndex, columnIndex, collapsedCellSpans);\n\n        if (overlappingCellSpan) {\n          if (!overlappingCellSpan.claimed) {\n            overlappingCellSpan.claimed = true;\n            rowSpan = isRowRelevantByIndex.slice(rowIndex, overlappingCellSpan.rowRange.end + 1).filter(x => x === true).length\n            columnSpan = isColumnRelevantByIndex.slice(columnIndex, overlappingCellSpan.columnRange.end + 1).filter(x => x === true).length\n            isRelevantCell = true;\n          } else {\n            isRelevantCell = false;\n          }\n        } else {\n          isRelevantCell = true;\n        }\n      } else {\n        isRelevantCell = false;\n      }\n\n      return {\n        ...cell,\n        isRelevant: isRelevantCell,\n        rowIndex,\n        columnIndex,\n        rowSpan,\n        columnSpan,\n      }\n    })\n\n    const filteredCells = markedCells.filter(markedCell => markedCell.isRelevant);\n\n    return {\n      ...row,\n      index: rowIndex,\n      cells: filteredCells,\n      isRelevant: isRelevantRow,\n    }\n  })\n\n  const filteredRows = markedRows.filter(markedRow => markedRow.isRelevant);\n\n  const relevantRowIndices = isRowRelevantByIndex.map((item, index) => item && index).filter((item) => _.isNumber(item));\n  const relevantColumnIndices = isColumnRelevantByIndex.map((item, index) => item && index).filter((item) => _.isNumber(item));\n\n  return {\n    ...node,\n    rows: filteredRows,\n    relevantColumnIndices,\n    // changeSummaries: R.concat(columnChangeSummaries, cellSpanChangeSummaries),\n  };\n}\n\nfunction applyBlockChangeHighlightsToNode(node, changesDisplayMode) {\n  const {\n    addDeleteChanges = [],\n  } = node;\n\n  const releventAddDeleteChanges = addDeleteChanges.filter((change) => isRelevantChange(change, changesDisplayMode))\n  const acceptedDeleteChange = releventAddDeleteChanges.find((change) => isAcceptedChange(change) && change.type === DELETE_CONTENT);\n\n  if (acceptedDeleteChange && changesDisplayMode !== changesDisplayModes.HIGHLIGHT_ALL_CHANGES) {\n    return node\n  }\n\n  const highlightDeleteChange = releventAddDeleteChanges.find((change) => change.type === DELETE_CONTENT && isHighlightChange(change, changesDisplayMode));\n\n  if (highlightDeleteChange) {\n    return {\n      ...node,\n      blockChangeHighlight: highlightDeleteChange,\n    }\n  }\n\n  const highlightAddChange = releventAddDeleteChanges.find((change) => change.type === ADD_CONTENT && isHighlightChange(change, changesDisplayMode));\n\n  if (highlightAddChange) {\n    return {\n      ...node,\n      blockChangeHighlight: highlightAddChange,\n    }\n  }\n\n  return node;\n}\n\nfunction getOriginalCellSpans(table) {\n  return (\n    table.rows.flatMap((row, rowIndex) =>\n      row.cells.flatMap((cell, columnIndex) => {\n        const rowSpan = cell.rowSpan || 1\n        const columnSpan = cell.columnSpan || 1\n        if (rowSpan > 1 || columnSpan > 1) {\n          return [\n            {\n              rowRange: {\n                start: rowIndex,\n                end: rowIndex + rowSpan - 1,\n              },\n              columnRange: {\n                start: columnIndex,\n                end: columnIndex + columnSpan - 1,\n              },\n            }\n          ]\n        } else {\n          return [];\n        }\n      })\n    )\n  )\n}\n\nfunction convertCellSpanChangesToCellSpans(cellSpanChanges, originalSpans=[]) {\n  return cellSpanChanges.reduce((cellSpans, cellSpanChange) => {\n    const newSpan = {\n      rowRange: cellSpanChange.rowRange,\n      columnRange: cellSpanChange.columnRange,\n    }\n\n    let [overlappingSpans, restSpans] = R.partition((cellSpan) => doSpansOverlap(newSpan, cellSpan), cellSpans);\n\n    switch (cellSpanChange.type) {\n      case MERGE_TABLE_CELLS:\n        const combinedSpan = [newSpan, ...overlappingSpans].reduce((spanA, spanB) => unionSpans(spanA, spanB));\n        return [...restSpans, combinedSpan];\n      case UNMERGE_TABLE_CELLS:\n        return restSpans;\n      default:\n        return cellSpans;\n    }\n  }, originalSpans)\n}\n\n// TODO MOVE\nfunction isPointInSpan(rowIndex, columnIndex, collapsedCellSpans) {\n  return collapsedCellSpans.find(cellSpan =>\n    cellSpan.rowRange.start <= rowIndex\n    && cellSpan.rowRange.end >= rowIndex\n    && cellSpan.columnRange.start <= columnIndex\n    && cellSpan.columnRange.end >= columnIndex\n  )\n}\n\n// TODO MOVE\nfunction doSpansOverlap(spanA, spanB) {\n  return rangesDoTouch(spanA.rowRange, spanB.rowRange) && rangesDoTouch(spanA.columnRange, spanB.columnRange)\n}\n\nfunction unionSpans(spanA, spanB) {\n  return {\n    rowRange: rangesUnion(spanA.rowRange, spanB.rowRange),\n    columnRange: rangesUnion(spanA.columnRange, spanB.columnRange)\n  }\n}\n\nfunction normalizedDocAllBlockChanges(normalizedDoc) {\n  const allNodes = _.values(normalizedDoc);\n  return _.compact(allNodes.map((nodeToAccept) => {\n    return normalizedNodeBlockChanges(nodeToAccept);\n  }).flat());\n}\n\nfunction normalizedNodeBlockChanges(node) {\n  return _.compact(nodeBlockContentKeys(node).map((blockNodeKey) => node[blockNodeKey] ).flat()).filter((uidOrChange) => (typeof uidOrChange) === \"object\");\n}\n\nconst weakMemoizedAddSelectionMimic = memoize(addSelectionMimic);\nfunction addSelectionMimic(normalizedDoc, selectionMimic) {\n  if (selectionMimic) {\n    return R.set(\n      R.lensPath([selectionMimic.uid, selectionMimic.contentKey, \"selectionMimics\"]),\n      [selectionMimic],\n      normalizedDoc,\n    );\n  } else {\n    return normalizedDoc;\n  }\n}\n\nconst weakMemoizedMoveNodeChangesGroupedByUid = memoize(moveNodeChangesGroupedByUid);\nfunction moveNodeChangesGroupedByUid(normalizedDoc) {\n  const allMoveNodeChanges = normalizedDocAllBlockChanges(normalizedDoc).filter((change) => change.type === MOVE_NODE);\n  return _.groupBy(allMoveNodeChanges, (change) => change.uid);\n}\n\nexport function isRelevantNode(node, changesDisplayMode) {\n  return isRelevantFunctionGenerator(ADD_CONTENT, DELETE_CONTENT)(node.addDeleteChanges || [], changesDisplayMode);\n}\n\nexport const isRelevantRow = isRelevantFunctionGenerator(ADD_TABLE_ROW, DELETE_TABLE_ROW);\n\nexport const isRelevantColumn = isRelevantFunctionGenerator(ADD_TABLE_COLUMN, DELETE_TABLE_COLUMN);\n\nexport function isRelevantFunctionGenerator(addChangeType, deleteChangeType) {\n  return (changes, changesDisplayMode) => {\n    const allAddChanges = changes.filter((change) => change.type === addChangeType);\n    const relevantChanges = changes.filter((change) => isRelevantChange(change, changesDisplayMode));\n    const relevantAddChanges = relevantChanges.filter((change) => change.type === addChangeType);\n    const relevantDeleteChanges = relevantChanges.filter((change) => change.type === deleteChangeType);\n\n    return (\n      (allAddChanges.length === 0 || relevantAddChanges.length > 0)\n      && (relevantDeleteChanges.length === 0 || relevantDeleteChanges.every((change) => isHighlightChange(change, changesDisplayMode)))\n    );\n  };\n}\n\nfunction filterRelevantChanges(changes, changesDisplayMode) {\n  return changes.filter((change) => isRelevantChange(change, changesDisplayMode));\n}\n\nexport function isOpenSuggestionChange(change) {\n  return change.is_suggestion && !change.decision;\n}\n\nexport function isAcceptedChange(change) {\n  return !change.is_suggestion || change.decision === decisionTypes.ACCEPTED;\n}\n\nexport function isRejectedChange(change) {\n  return change.decision === decisionTypes.REJECTED;\n}\n\nexport function isPublishedChange(change) {\n  return change.published_at;\n}\n\nfunction isPublishableChange(change) {\n  return isAcceptedChange(change) && !isPublishedChange(change);\n}\n\nexport function isRelevantChange(change, changesDisplayMode) {\n  switch (changesDisplayMode) {\n    case changesDisplayModes.ONLY_PUBLISHED:\n      return isPublishedChange(change);\n    case changesDisplayModes.HIDE_SUGGESTIONS:\n      return isAcceptedChange(change);\n    case changesDisplayModes.HIGHLIGHT_SUGGESTIONS:\n    case changesDisplayModes.HIGHLIGHT_ALL_CHANGES:\n      return !isRejectedChange(change);\n    default:\n      // TODO ADD ERROR WARNING\n  }\n}\n\nexport function isHighlightChange(change, changesDisplayMode) {\n  switch (changesDisplayMode) {\n    case changesDisplayModes.ONLY_PUBLISHED:\n    case changesDisplayModes.HIDE_SUGGESTIONS:\n      return false;\n    case changesDisplayModes.HIGHLIGHT_SUGGESTIONS:\n      return isOpenSuggestionChange(change);\n    case changesDisplayModes.HIGHLIGHT_ALL_CHANGES:\n      return !isRejectedChange(change) && !isPublishedChange(change);\n    default:\n      // TODO ADD ERROR WARNING\n  }\n}\n\nexport function isRelevantHighlightChange(change, changesDisplayMode) {\n  return isRelevantChange(change, changesDisplayMode)\n         && isHighlightChange(change, changesDisplayMode);\n}\n\nexport function backgroundStyleFromNode(props) {\n  const blockChangeHighlight = props.blockChangeHighlight;\n  const colorLookup = props.editingContext.colorLookup;\n\n  switch (props.type) {\n    case \"paragraph\":\n      switch (blockChangeHighlight?.type) {\n        case \"DELETE_CONTENT\":\n        case \"MOVE_CONTENT\":\n        case \"ADD_CONTENT\":\n        default:\n          return {};\n      }\n\n      break;\n    case \"listItem\":\n      switch (blockChangeHighlight?.type) {\n        case \"DELETE_CONTENT\":\n        case \"MOVE_CONTENT\":\n        case \"ADD_CONTENT\":\n        default:\n          return {};\n      }\n\n      break;\n    default:\n      switch (blockChangeHighlight?.type) {\n        case \"DELETE_CONTENT\":\n          // STRIKE THROUGH PARAGRAPH SYMBOL\n          return {\n            backgroundImage: `url(\"data:image/svg+xml,%3Csvg width='52' height='26' viewBox='0 0 52 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='rgb(${colorLookup[blockChangeHighlight.author_id]})' fill-opacity='0.4'%3E%3Cpath d='M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4v2c-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`\n          };\n        case \"MOVE_CONTENT\":\n          return {};\n        case \"ADD_CONTENT\":\n          // PARAGRAPH SYMBOL\n          return {\n            backgroundColor: `rgba(${colorLookup[blockChangeHighlight.author_id]},0.25)`\n          };\n        default:\n          return {};\n      }\n\n      break;\n  }\n\n  // return backgroundStyleFromChangeSummaries(\n  //   props.changeSummaries || [],\n  //   props.editingContext.changesDisplayMode,\n  //   props.editingContext.colorLookup,\n  //   props.userContext.id,\n  //   [NEW_COMMENT_THREAD, EDIT_COMMENT].includes(props.currentMenu?.menu) && props.type !== \"paragraph\",\n  // );\n}\n\nfunction backgroundStyleFromChangeSummaries(changes, changesDisplayMode, colorLookup, currentAuthorId, isCurrentlyEditingNodeComment) {\n  const highlightChangeSummaries = changes.filter((change) => {\n    return isRelevantHighlightChange(change, changesDisplayMode);\n  });\n\n  const backgroundStyles: any = {};\n\n  const isNewNode = highlightChangeSummaries.find((change) => change.type === ADDED_NODE);\n  if (isNewNode) {\n    // `url(\\\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%239C92AC' fill-opacity='0.4'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`\n    backgroundStyles.backgroundColor = `rgba(${colorLookup[isNewNode.author_id]},0.25)`;\n  }\n\n  const isMovedNode = highlightChangeSummaries.find((change) => change.type === MOVED_NODE);\n  if (isMovedNode) {\n    backgroundStyles.borderLeft = `5px solid rgba(${colorLookup[isMovedNode.author_id]},0.5)`;\n  }\n\n  const isDeletedNode = highlightChangeSummaries.find((change) => change.type === DELETED_NODE);\n  if (isDeletedNode) {\n    backgroundStyles.backgroundImage = `url(\"data:image/svg+xml,%3Csvg width='52' height='26' viewBox='0 0 52 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='rgb(${colorLookup[isDeletedNode.author_id]})' fill-opacity='0.4'%3E%3Cpath d='M10 10c0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6h2c0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4 3.314 0 6 2.686 6 6 0 2.21 1.79 4 4 4v2c-3.314 0-6-2.686-6-6 0-2.21-1.79-4-4-4-3.314 0-6-2.686-6-6zm25.464-1.95l8.486 8.486-1.414 1.414-8.486-8.486 1.414-1.414z' /%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`;\n  }\n\n  const isCommentedNode = highlightChangeSummaries.find((change) => change.type === OPENED_NODE_COMMENT_THREAD);\n  if (isCommentedNode) { // Existing comment\n    backgroundStyles.border = `5px solid rgba(\n      ${colorLookup[isCommentedNode.author_id]},\n      ${isCurrentlyEditingNodeComment ? \"0.5\" : \"0.25\"})`;\n  } else if (isCurrentlyEditingNodeComment) { // New Comment\n    backgroundStyles.border = `5px solid rgba(${colorLookup[currentAuthorId]},0.5)`;\n  }\n\n  return backgroundStyles;\n}\n\nexport function clotheChange(nakedChange, author, is_tracking) {\n  return {\n    author_id: author.id,\n    author_full_name: `${author.first_name} ${author.last_name}`,\n    is_suggestion: is_tracking,\n    created_at: (new Date()).getTime(),\n    ...nakedChange,\n  };\n}\n\nexport function newChange(type, detail) {\n  return {\n    change_id: generateUUID(),\n    type: type,\n    ...detail,\n  };\n}\n\nexport function newAddNodeChange(node, parent_uid, parent_key, parent_index) {\n  return newChange(ADD_NODE, {\n    uid: node.uid,\n    node: convertAllInlineNodesToRangeJSON(node),\n    parent_uid: parent_uid,\n    parent_key: parent_key,\n    parent_index: parent_index,\n  });\n}\n\nexport function newAddTextNodesBeforeNodeChange(sibling_uid, styledText, nodes=[]) {\n  return newChange(ADD_TEXT_AND_NODES_BEFORE_NODE, {\n    sibling_uid: sibling_uid,\n    styledText: styledText,\n    nodes: nodes.map(node => convertAllInlineNodesToRangeJSON(node)),\n  });\n}\n\nexport function newAddTextAndNodesToNodeChange(parent_uid, parent_key, styledText, nodes=[]) {\n  return newChange(ADD_TEXT_AND_NODES_TO_NODE, {\n    parent_uid: parent_uid,\n    parent_key: parent_key,\n    styledText: styledText,\n    nodes: nodes.map(node => convertAllInlineNodesToRangeJSON(node)),\n  });\n}\n\nexport function newDeleteNodeChange(uid) {\n  return newChange(DELETE_NODE, {\n    uid: uid,\n  });\n}\n\nexport function newChangeTextAndNodesChange(selection, styledText, nodes=[]) {\n  return newChange(CHANGE_TEXT_AND_NODES, {\n    selection: selection,\n    styledText: styledText,\n    nodes: nodes.map(node => convertAllInlineNodesToRangeJSON(node)),\n  })\n}\n\nexport function newMoveNodeChange(uid, parent_uid, parent_key, parent_index) {\n  return newChange(MOVE_NODE, {\n    uid: uid,\n    parent_uid: parent_uid,\n    parent_key: parent_key,\n    parent_index: parent_index,\n  });\n}\n\nexport function newMoveNodeUpChange(uid) {\n  return newChange(MOVE_NODE_UP, {\n    uid: uid,\n  });\n}\n\nexport function newMoveNodeDownChange(uid) {\n  return newChange(MOVE_NODE_DOWN, {\n    uid: uid,\n  });\n}\n\nexport function newSetKeysValuesChange(uid, keys_and_values) {\n  return newChange(SET_KEYS_VALUES, {\n    uid: uid,\n    keys_and_values: keys_and_values,\n  });\n}\n\nexport function newSetKeyValueChange(uid, key, value) {\n  return newSetKeysValuesChange(uid, {[key]: value});\n}\n\nexport function newAddStyleChange(selection, style, args = null) {\n  const detail: any = {\n    selection: selection,\n    style: style,\n  };\n\n  if (args) {\n    detail.args = args;\n  }\n\n  return newChange(ADD_STYLE, detail);\n}\n\nexport function newDeleteStyleChange(selection, style) {\n  return newChange(DELETE_STYLE, {\n    selection: selection,\n    style: style,\n  });\n}\n\nexport function newAddTableRowChange(table_uid, index: number) {\n  return newChange(ADD_TABLE_ROW, {\n    table_uid: table_uid,\n    index: index,\n  });\n}\n\nexport function newDeleteTableRowChange(table_uid, index: number) {\n  return newChange(DELETE_TABLE_ROW, {\n    table_uid: table_uid,\n    index: index,\n  });\n}\n\nexport function newAddTableColumnChange(table_uid, index: number) {\n  return newChange(ADD_TABLE_COLUMN, {\n    table_uid: table_uid,\n    index: index,\n  });\n}\n\nexport function newDeleteTableColumnChange(table_uid, index: number) {\n  return newChange(DELETE_TABLE_COLUMN, {\n    table_uid: table_uid,\n    index: index,\n  });\n}\n\nexport function newMergeTableCells(table_uid, rowRange, columnRange) {\n  return newChange(MERGE_TABLE_CELLS, {\n    table_uid: table_uid,\n    rowRange: rowRange,\n    columnRange: columnRange,\n  });\n}\n\nexport function newUnmergeTableCells(table_uid, rowRange, columnRange) {\n  return newChange(UNMERGE_TABLE_CELLS, {\n    table_uid: table_uid,\n    rowRange: rowRange,\n    columnRange: columnRange,\n  });\n}\n\nexport function newAcceptChangesChange(change_id) {\n  return newChange(ACCEPT_CHANGES, {\n    accept_change_id: change_id,\n  });\n}\n\nexport function newRejectChangesChange(change_id) {\n  return newChange(REJECT_CHANGES, {\n    reject_change_id: change_id,\n  });\n}\n\nexport function newPublishChange() {\n  return newChange(PUBLISH, {});\n}\n\nexport function newAddCommentThreadChange(selection, text) {\n  return newChange(ADD_COMMENT_THREAD, {\n    selection: selection,\n    text: text,\n    comment_thread_id: generateUUID(), // GET RID OF?\n    is_suggestion: true,\n  });\n}\n\nexport function newCloseCommentThreadChange(comment_thread_change_id) {\n  return newChange(CLOSE_COMMENT_THREAD, {\n    comment_thread_change_id: comment_thread_change_id,\n  });\n}\n\nexport function newAddChangeCommentChange(parent_change_id, text) {\n  return newChange(ADD_CHANGE_COMMENT, {\n    parent_change_id: parent_change_id,\n    comment_id: generateUUID(),\n    text: text,\n  });\n}\n\nexport function newDeleteChangeCommentChange(comment_id) {\n  return newChange(DELETE_CHANGE_COMMENT, {\n    comment_id: comment_id,\n  });\n}\n\nexport function newAddSummaryOfEditChange(uid, key, index, text) {\n  return newChange(ADD_SUMMARY_OF_EDIT, {\n    uid: uid,\n    key: key,\n    index: index,\n    summary_of_edit_id: generateUUID(),\n    text: text,\n  });\n}\n\nexport function newDeleteSummaryOfEditChange(summary_of_edit_id) {\n  return newChange(DELETE_SUMMARY_OF_EDIT, {\n    summary_of_edit_id: summary_of_edit_id,\n  });\n}\n\nexport function newAddStudentFeedbackChange(text) {\n  return newChange(ADD_STUDENT_FEEDBACK, {\n    student_feedback_id: generateUUID(),\n    text: text,\n  });\n}\n\nexport function newDeleteStudentFeedbackChange(student_feedback_id) {\n  return newChange(DELETE_STUDENT_FEEDBACK, {\n    student_feedback_id: student_feedback_id,\n  });\n}\n\nexport function canCompressChanges(change1, change2) {\n  return (\n    change1.user_id === change2.user_id &&\n    change1.is_suggestion === change2.is_suggestion &&\n    change1.decision === change2.decision &&\n    change1.published_at === change2.published_at\n  )\n}\n\nconst changeMetadataFields = [\n  \"created_at\",\n  \"author_id\",\n  \"author_full_name\",\n  \"is_suggestion\",\n  \"comments\",\n  \"decision\",\n  \"decision_at\",\n  \"decision_by\",\n  \"published_at\",\n  \"published_by\",\n]\n\nfunction changeMetadata(change) {\n  return R.pick(changeMetadataFields, change);\n}\n\n//Given two Changes returns a compressed Change if possible, otherwise null\nexport function compressTwoChangesIfPossible(change1, change2) {\n  if (change1.user_id !== change2.user_id || change1.is_suggestion !== change2.is_suggestion ) {\n    return null;\n  }\n\n  switch (change1.type) {\n    case ADD_STYLE:\n    case DELETE_STYLE:\n      switch (change2.type) {\n        case ADD_STYLE:\n        case DELETE_STYLE:\n          if (\n            change1.type === change2.type\n            && change1.uid === change2.uid\n            && change1.key === change2.key\n            && change1.style === change2.style\n            && _.isEqual(change1.args, change1.args)\n            && rangesDoTouch(change1.range, change2.range)\n          ) {\n            return {\n              ...change1,\n              range: {\n                start: Math.min(change1.range.start, change2.range.start),\n                end: Math.max(change1.range.end, change2.range.end),\n              },\n            };\n          } else {\n            return null;\n          }\n          break;\n        default:\n          return null;\n      }\n      break;\n    case MOVE_NODE:\n      switch (change2.type) {\n        case MOVE_NODE:\n          if (\n            change1.uid === change2.uid\n          ) {\n            if (\n              change1.parent_uid === change2.parent_uid\n              && change1.parent_key === change2.parent_key\n              && change1.parent_index < change2.parent_index\n            ) {\n              return {\n                ...change2,\n                parent_index: change2.parent_index - 1,\n              };\n            } else {\n              return change2;\n            }\n          }\n          break;\n        default:\n          return null;\n      }\n    default:\n      return null;\n  }\n}\n\nfunction changeTextAfterRange(change) {\n  return {\n    start: change.range.start,\n    end: change.range.start + change.text.length,\n  };\n}\n\nexport function changeSummaryDescription(changeSummary, node) {\n  switch (changeSummary.type) {\n    case ADD_CONTENT:\n    case DELETE_CONTENT:\n      const firstAddTextChanges = changeSummary.allChanges.find(change => change.type === ADD_CONTENT && change.text);\n      const firstDeleteTextChanges = changeSummary.allChanges.find(change => change.type === DELETE_CONTENT && change.text);\n      const firstAddNodeChanges = changeSummary.allChanges.find(change => change.type === ADD_CONTENT && change.changeNodeType);\n      const firstDeleteNodeChanges = changeSummary.allChanges.find(change => change.type === DELETE_CONTENT && change.changeNodeType);\n\n      if (firstAddTextChanges) {\n        if (firstDeleteTextChanges) {\n          return `Changed Text: ${firstAddTextChanges.text}`;\n        } else {\n          return `Added: ${firstAddTextChanges.text}`;\n        }\n      } else if (firstDeleteTextChanges) {\n        return `Deleted: ${firstDeleteTextChanges.text}`;\n      } else if (firstAddNodeChanges) {\n        return `Added Node: ${firstAddNodeChanges.changeNodeType}`;\n      } else if (firstDeleteNodeChanges) {\n        return `Deleted Node: ${firstDeleteNodeChanges.changeNodeType}`;\n      }\n    case ADDED_NODE:\n      return `Added Node`;\n    case DELETED_NODE:\n      return `Deleted Node`;\n    case CHANGED_TEXT:\n      return `Changed Text: ${changeSummary.text}`;\n    case ADDED_TEXT:\n      return `Added: ${changeSummary.text}`;\n    case DELETED_TEXT:\n      return `Deleted: ${changeSummary.text}`;\n    case MOVE_NODE:\n      return `Moved Node`;\n    case SET_KEYS_VALUES:\n      return `Changed Metadata: ${Object.keys(changeSummary.keys_and_values).join(\", \")}`;\n    case ADD_STYLE:\n      return `Added ${changeSummary.style}: ${changeSummary.text}`;\n    case DELETE_STYLE:\n      return `Removed ${changeSummary.style}: ${changeSummary.text}`;\n    case ADD_TABLE_ROW:\n      return \"Added Row\";\n    case DELETE_TABLE_ROW:\n      return \"Deleted Row\";\n    case ADD_TABLE_COLUMN:\n      return \"Added Column\";\n    case DELETE_TABLE_COLUMN:\n      return \"Deleted Column\";\n    case MERGE_TABLE_CELLS:\n      return \"Merged Cells\";\n    case UNMERGE_TABLE_CELLS:\n      return \"Unmerged Cells\";\n    default:\n      return \"Change\";\n  }\n}\n\nexport function applyInlineChangesToRangeInlineJson(rangeInlineJSON, changesDisplayMode: ChangesDisplayMode) {\n  const {\n    addDeleteChanges = [],\n    styleChanges = [],\n    commentThreadChanges = [],\n  } = rangeInlineJSON;\n\n  let {\n    styleRanges = [],\n    inlineIrrlevantRanges = [],\n    inlineChangeHighlights = [],\n  } = rangeInlineJSON;\n\n  addDeleteChanges.forEach((change) => {\n    if (isRelevantChange(change, changesDisplayMode)) {\n      if (isHighlightChange(change, changesDisplayMode)) {\n        inlineChangeHighlights.push(\n          {\n            type: change.type,\n            change_id: change.change_id,\n            range: change.range,\n            author_id: change.author_id,\n          }\n        );\n      } else {\n        if (change.type === DELETE_CONTENT) {\n          inlineIrrlevantRanges.push(\n            {\n              type: HIDE_TEXT,\n              change_id: change.change_id,\n              range: change.range,\n            }\n          );\n        } else {\n          return null;\n        }\n      }\n    } else {\n      if (change.type === ADD_CONTENT) {\n        inlineIrrlevantRanges.push(\n          {\n            type: HIDE_TEXT,\n            change_id: change.change_id,\n            range: change.range,\n          }\n        );\n      } else {\n        return null;\n      }\n    }\n  });\n\n  styleChanges.forEach((change) => {\n    if (isRelevantChange(change, changesDisplayMode)) {\n      switch (change.type) {\n        case ADD_STYLE:\n          const newStyleRange: any = {\n            type: change.style,\n            range: {...change.range},\n          };\n\n          if (change.args) {\n            newStyleRange.args = {...change.args};\n          }\n\n          styleRanges = styleRanges.flatMap((oldStyle) => {\n            if (oldStyle.type === newStyleRange.type && rangesDoTouch(oldStyle.range, newStyleRange.range)) {\n              const newRanges = rangesExcept(oldStyle.range, newStyleRange.range);\n              return newRanges.map(newRange => ({...oldStyle, range: newRange}));\n            } else {\n              return [oldStyle];\n            }\n          })\n\n          styleRanges = styleRanges.concat([newStyleRange]);\n\n          if (isHighlightChange(change, changesDisplayMode) && change.style !== \"color\") {\n            inlineChangeHighlights.push(\n              {\n                type: ADDED_STYLE,\n                change_id: change.change_id,\n                range: change.range,\n                style: change.style,\n                author_id: change.author_id,\n              }\n            )\n          }\n\n          break;\n        case DELETE_STYLE:\n          styleRanges = _.compact(_.flatten(styleRanges.map((styleRange) => {\n            if (styleRange.type === change.style) {\n              if (styleRange.range.start < change.range.start) {\n                if (styleRange.range.end > change.range.end) {\n                  return [\n                    {\n                      ...styleRange,\n                      range: {\n                        start: styleRange.range.start,\n                        end: change.range.start,\n                      },\n                    },\n                    {\n                      ...styleRange,\n                      range: {\n                        start: change.range.end,\n                        end: styleRange.range.end,\n                      },\n                    },\n                  ];\n\n                } else if (styleRange.range.end > change.range.start) {\n                  // styleRange.range.end = change.range.start\n                  return R.assocPath([\"range\", \"end\"], change.range.start, styleRange);\n                }\n              } else {\n                if (styleRange.range.end <= change.range.end) {\n                  return null;\n                } else if (styleRange.range.start < change.range.end) {\n                  // styleRange.range.start = change.range.end\n                  return R.assocPath([\"range\", \"start\"], change.range.end, styleRange);\n                }\n              }\n            }\n\n            return styleRange;\n          })));\n\n          if (isHighlightChange(change, changesDisplayMode)) {\n            inlineChangeHighlights.push(\n              {\n                type: DELETED_STYLE,\n                change_id: change.change_id,\n                range: change.range,\n                style: change.style,\n                author_id: change.author_id,\n              }\n            )\n          }\n\n          break;\n        default:\n          // ADD ERROR\n          break;\n      }\n    }\n  });\n\n  commentThreadChanges.forEach((change) => {\n    if (isRelevantChange(change, changesDisplayMode) && isHighlightChange(change, changesDisplayMode)) {\n      inlineChangeHighlights.push(\n        {\n          type: change.type,\n          change_id: change.change_id,\n          range: change.range,\n          author_id: change.author_id,\n        }\n      );\n    }\n  });\n\n  return {\n    ...rangeInlineJSON,\n    styleRanges,\n    inlineIrrlevantRanges,\n    inlineChangeHighlights,\n  }\n}\n\n//////////////////////////////////\n\nexport function computeSpacedChangeSummaries(doc, currentMenu, currentDocSelection: DocSelection, currentPrioritizedOffsetChangeSummary) {\n  let changeSummaries: (ChangeSummary | NewCommentThreadChangeSummary)[] = Array.from(weakMemoizedCollectAllSuggestionChanges(doc).values()).map((arr) => ({...arr[0], allChanges: arr}));\n\n  if (currentMenu?.menu === NEW_COMMENT_THREAD) {\n    const newCommentThread = {\n      type: \"NEW_COMMENT_THREAD\" as const,\n      change_set_id: \"newCommentThread\" as const,\n      selection: currentDocSelection,\n      uid: currentDocSelection.start.uid,\n      contentKey: currentDocSelection.start.contentKey,\n      range: {\n        start: currentDocSelection.start.index,\n        end: currentDocSelection.end.index,\n      },\n      variantId: currentDocSelection.variantId,\n    }\n\n    changeSummaries = changeSummaries.concat([newCommentThread]);\n  }\n\n  const htmlDocument = window.document;\n  const bodyElement = htmlDocument.getElementById(\"doc-body-wrapper\")\n  const bodyOffset = bodyElement ? bodyElement.getBoundingClientRect().top : 70;\n\n  let desiredOffestChangeSummaries = changeSummaries.map((changeSummary) => {\n    const nodeElement = htmlDocument.getElementById(changeSummary.uid);\n    const changeSummaryElement = htmlDocument.getElementById(`changeSummary--${changeSummary.change_set_id}`);\n\n    return {\n      changeSummary: changeSummary,\n      desiredOffset: nodeElement ? nodeElement.getBoundingClientRect().top - bodyOffset : -1000000,\n      height: changeSummaryElement?.clientHeight,\n      prioritizeOffset: false,\n    };\n  });\n\n  desiredOffestChangeSummaries = desiredOffestChangeSummaries.sort((a, b) => {\n    const offsetDiff = a.desiredOffset - b.desiredOffset;\n\n    if (offsetDiff !== 0) {\n      return offsetDiff;\n    } else {\n      return (a.changeSummary.range?.start || 0) - (b.changeSummary.range?.start || 0);\n    }\n  });\n\n  let prioritizeOffsetIndex = -1;\n  if (currentMenu?.menu === NEW_COMMENT_THREAD) {\n    prioritizeOffsetIndex = desiredOffestChangeSummaries.findIndex((offsetChangeSummary) => offsetChangeSummary.changeSummary.type === \"NEW_COMMENT_THREAD\")\n  } else if (currentMenu?.menu === EDIT_COMMENT) {\n    prioritizeOffsetIndex = R.findIndex((offsetChangeSummary) => (\n      offsetChangeSummary.changeSummary.change_set_id === currentMenu.change_set_id\n    ), desiredOffestChangeSummaries);\n    console.log(prioritizeOffsetIndex)\n  } else if (currentDocSelection) {\n    prioritizeOffsetIndex = R.findLastIndex((offsetChangeSummary) => (\n      offsetChangeSummary.changeSummary.uid === currentDocSelection.start?.uid\n      && offsetChangeSummary.changeSummary.range?.start <= currentDocSelection.start?.index\n    ), desiredOffestChangeSummaries);\n  } else if(currentPrioritizedOffsetChangeSummary) {\n    prioritizeOffsetIndex = R.findIndex((offsetChangeSummary) => (\n      offsetChangeSummary.changeSummary.change_set_id === currentPrioritizedOffsetChangeSummary.change_set_id\n    ), desiredOffestChangeSummaries);\n  }\n\n  if (prioritizeOffsetIndex >= 0) {\n    desiredOffestChangeSummaries[prioritizeOffsetIndex].prioritizeOffset = true;\n  }\n\n  const MARGIN = 10;\n  const DEFAULT_HEIGHT = 120;\n\n  // ADJUST TO NOT CONFILT\n  let offsetChangeSummaries = desiredOffestChangeSummaries.reduce(({minOffset, returnChangeSummaries}, offsetChangeSummary) => {\n    let offset = 0;\n    let newMinOffset = minOffset;\n    if (offsetChangeSummary.desiredOffset < 0) {\n      offset = offsetChangeSummary.desiredOffset;\n    } else if (offsetChangeSummary.prioritizeOffset) {\n      offset = offsetChangeSummary.desiredOffset;\n      newMinOffset = offset + MARGIN + (offsetChangeSummary.height || DEFAULT_HEIGHT);\n    } else {\n      offset = Math.max(minOffset, offsetChangeSummary.desiredOffset);\n      newMinOffset = offset + MARGIN + (offsetChangeSummary.height || DEFAULT_HEIGHT);\n    }\n\n    return {minOffset: newMinOffset, returnChangeSummaries: [...returnChangeSummaries, {...offsetChangeSummary, offset: offset}]};\n  }, {minOffset: 0, returnChangeSummaries: [] as OffsetChangeSummary[]}).returnChangeSummaries;\n\n  // ADJUST AROUND PRIORITY\n  offsetChangeSummaries = offsetChangeSummaries.reduceRight(({maxOffset, returnChangeSummaries}, offsetChangeSummary) => {\n    let offset = 0;\n    let newMaxOffset = maxOffset;\n    if (offsetChangeSummary.desiredOffset < 0) {\n      offset = offsetChangeSummary.desiredOffset;\n    } else if (offsetChangeSummary.prioritizeOffset) {\n      offset = offsetChangeSummary.desiredOffset;\n      newMaxOffset = offset - MARGIN;\n    } else {\n      const offsetChangeSummaryHeight = (offsetChangeSummary.height || DEFAULT_HEIGHT);\n      const possibleMaxHeight = maxOffset - offsetChangeSummaryHeight;\n\n      offset = Math.min(possibleMaxHeight, offsetChangeSummary.offset);\n      newMaxOffset = offset - MARGIN;\n    }\n\n    return {maxOffset: newMaxOffset, returnChangeSummaries: [...returnChangeSummaries, {...offsetChangeSummary, offset: offset}]};\n  }, {maxOffset: Number.MAX_SAFE_INTEGER, returnChangeSummaries: []}).returnChangeSummaries;\n\n  return offsetChangeSummaries;\n}\n\n/////////////////////////\n/////////////////////////\n\nexport function stripExtraChangeDataFields(doc) {\n  return docMapAllNodes(doc, (node) => (\n    R.omit([\n      \"_newStartWith\",\n      \"editIndex\",\n      \"listIndentation\",\n      \"listUid\",\n      \"blockChangeHighlight\",\n      \"addDeleteChanges\",\n      \"key_value_changes\",\n      \"styleChanges\",\n      \"rowChanges\",\n      \"columnChanges\",\n      \"cellSpanChanges\",\n      \"contentListNodes\",\n      \"contentItemsListNodes\",\n      \"contentCategoriesListNodes\",\n      \"imagesListNodes\",\n      \"cdqFeaturesListNodes\",\n    ], node as any) as any // TODO: Remove any\n  ))\n}\n","import * as R from \"ramda\";\n\nconst colors: Array<[number, number, number]> = [\n  [255,0,0], // Red\n  [0,0,255], // Blue\n  [0,128,0], // Green\n  [255,255,0], // Yellow\n  [128,0,128], // Purple\n  [255,165,0], // Orange\n  [0,255,255], // Aqua\n  [255,0,255], // Fuchsia\n  [0,255,0], // Lime\n  [128,0,0], // Maroon\n  [0,128,128], // Teal\n  [0,0,128], //Navy\n];\n\nexport function generateColorLookup(keys: Array<number>) {\n  const repeatCount = Math.ceil(keys.length / colors.length);\n  const longEnoughColorList = R.unnest(R.repeat(colors, repeatCount));\n\n  return R.zipObj(keys, longEnoughColorList);\n}\n","import * as pluralize from 'pluralize'\n\nfunction generateReasoningToolStateFunctions(type: string, addState: AddStateFunction, rootUID: string) {\n  const pluralType = pluralize.plural(type)\n\n  return {\n    add: (uid: string, data={}) => {\n      addState({\n        [uid]: {type, uid, ...data},\n        [rootUID]: {[pluralType]: (nodeUIDs=[]) => [...nodeUIDs, uid]}\n      })\n    },\n    delete: (uid: string) => {\n      addState({\n        [rootUID]: {[pluralType]: (nodeUIDs=[]) => nodeUIDs.filter(nodeUID => nodeUID !== uid)}\n      })\n    },\n    update: (uid: string, data={}) => {\n      addState({\n        [uid]: data\n      })\n    }\n  }\n}\n\nexport function generateNotesStateFunctions(addState: AddStateFunction, rootUID: string) {\n  const noteFunctions = generateReasoningToolStateFunctions(\"note\", addState, rootUID)\n\n  return {\n    addNote: noteFunctions.add,\n    deleteNote: noteFunctions.delete,\n    updateNote: noteFunctions.update,\n  }\n}\n\nexport function generateFindingsStateFunctions(addState: AddStateFunction, rootUID: string) {\n  const findingFunctions = generateReasoningToolStateFunctions(\"finding\", addState, rootUID)\n\n  return {\n    addFinding: findingFunctions.add,\n    deleteFinding: findingFunctions.delete,\n    updateFinding: findingFunctions.update,\n  }\n}\n\nexport function generateDiagnosesStateFunctions(addState: AddStateFunction, rootUID: string) {\n  const diagnosisFunctions = generateReasoningToolStateFunctions(\"diagnosis\", addState, rootUID)\n\n  return {\n    addDiagnosis: diagnosisFunctions.add,\n    deleteDiagnosis: diagnosisFunctions.delete,\n    updateDiagnosis: diagnosisFunctions.update,\n    setIsDangerousDiagnosis: (uid: string, value: boolean) => {\n      addState({\n        [uid]: {isDangerousDiagnosis: value}\n      })\n    },\n    setIsLeadingDiagnosis: (uid: string) => {\n      addState({\n        [rootUID]: {leadingDiagnosis: uid}\n      })\n    }\n  }\n}\n","import memoize from \"memoize-weak\";\n\nimport { uniq } from \"lodash\";\n\nimport { displayModes } from \"./displayMode\";\nimport { generateColorLookup } from \"./colors\";\n\nimport { changesDisplayModes } from \"./changes\";\n\nimport {\n  generateNotesStateFunctions,\n  generateFindingsStateFunctions,\n  generateDiagnosesStateFunctions,\n} from \"./generateReasoningToolStateFunctions\";\n\nexport const weakMemoizedGenerateCurrentDocument = memoize(generateCurrentDocument);\nexport function generateCurrentDocument(\n  document: Document,\n  docType: DocType | undefined, // TODO: Narrow down\n  reload: () => void,\n) {\n  return {\n    ...document,\n    docType,\n    reload,\n  };\n}\n\nexport const weakMemoizedGenerateCurrentVersion = memoize(generateCurrentVersion);\nexport function generateCurrentVersion(\n  id: number,\n  published: boolean,\n  awsFolderUrl: string,\n  coverImage: string,\n  onlyOneUncollapsedSection: boolean,\n  disableBookmarks: boolean,\n  reload: () => void,\n) {\n  return {\n    id,\n    published,\n    awsFolderUrl,\n    localImageURL: (name: string) => `${awsFolderUrl}/compressed/images/${name}`,\n    localAudioURL: (name: string) => `${awsFolderUrl}/original/audios/${name}`,\n    localVideoURL: (name: string) => `${awsFolderUrl}/original/videos/${name}`,\n    localCaptionURL: (name: string) => `${awsFolderUrl}/original/captions/${name}`,\n    coverImage,\n    onlyOneUncollapsedSection,\n    disableBookmarks,\n    reload,\n  };\n}\n\nexport const weakMemoizedGenerateCurrentUser = memoize(generateCurrentUser);\nexport function generateCurrentUser(\n  currentUser: User,\n  currentGroupRoleDefinition: GroupRoleDefinition | undefined,\n  isAdmin: boolean,\n  sessionId: number | undefined, // TODO: Remove undefined\n  permissions: AqPermissions,\n  loadDocumentUserState: () => void,\n  addStateDocumentUserState: (state: UserStateStripped, callback?: () => void) => void,\n  destroyDocumentUserState: () => void,\n  submitExam: ((successNotice: string) => void) | undefined, // TODO: Remove undefined\n  pauseExam: (() => void) | undefined, // TODO: Remove undefined\n  logEvent: (logType: string, args?: Record<string, any>) => void,\n  rootUID: string,\n) {\n  return {\n    id: currentUser.id,\n    firstName: currentUser.first_name,\n    lastName: currentUser.last_name,\n    email: currentUser.email,\n    groupRoleDefinition: currentGroupRoleDefinition,\n    isAdmin: isAdmin,\n    sessionId: sessionId,\n    permissions: permissions,\n    addState: addStateDocumentUserState,\n    resetState: () => {\n      destroyDocumentUserState(),\n      loadDocumentUserState();\n    },\n    submitExam: submitExam,\n    pauseExam: pauseExam,\n    logEvent: logEvent,\n    ...generateNotesStateFunctions(addStateDocumentUserState, rootUID),\n    ...generateFindingsStateFunctions(addStateDocumentUserState, rootUID),\n    ...generateDiagnosesStateFunctions(addStateDocumentUserState, rootUID),\n  };\n}\n\nexport const weakMemoizedGenerateDisplayContext = memoize(generateDisplayContext);\nexport function generateDisplayContext(\n  displayMode: DisplayMode,\n  setDisplayMode: (displayMode: DisplayMode) => void,\n  isOnline: boolean,\n  focusedBookmarkUid: UID | undefined,\n  setFocusedBookmarkUid: (uid: UID) => void,\n  togglePanel: (panel: PanelType) => void,\n  panelNodeEditStart: (uid: UID) => void,\n  isEmbeded: boolean | undefined, // TODO: Narrow down\n  enableAiSummaryStatementFeedback: boolean | undefined, // TODO: Narrow down\n  isLockedByOtherUser: boolean | undefined, // TODO: Narrow down\n  styleGuideId: number | undefined\n) {\n  let isDisplayFull = false;\n  let isUngated = false;\n  let onlyDisplaySectionTitles = false;\n  let canBeEditing = false;\n\n  switch (displayMode) {\n    case displayModes.STUDENT:\n      isDisplayFull = false;\n      isUngated = false;\n      onlyDisplaySectionTitles = false;\n      canBeEditing = false;\n      break;\n    case displayModes.UNGATED:\n      isDisplayFull = false;\n      isUngated = true;\n      onlyDisplaySectionTitles = false;\n      canBeEditing = !isLockedByOtherUser;\n      break;\n    case displayModes.FULL:\n      isDisplayFull = true;\n      isUngated = true;\n      onlyDisplaySectionTitles = false;\n      canBeEditing = !isLockedByOtherUser;\n      break;\n    case displayModes.OUTLINE:\n      isDisplayFull = true;\n      isUngated = true;\n      onlyDisplaySectionTitles = true;\n      canBeEditing = false;\n      break;\n    default:\n      isDisplayFull = false;\n      isUngated = false;\n      onlyDisplaySectionTitles = false;\n      canBeEditing = false;\n  }\n\n  return {\n    displayMode: displayMode,\n    setDisplayMode: setDisplayMode,\n    isDisplayFull: isDisplayFull,\n    isUngated: isUngated,\n    onlyDisplaySectionTitles: onlyDisplaySectionTitles,\n    isOnline: isOnline,\n    canBeEditing: canBeEditing,\n    focusedBookmarkUid: focusedBookmarkUid,\n    setFocusedBookmarkUid: setFocusedBookmarkUid,\n    togglePanel: togglePanel,\n    panelNodeEditStart: panelNodeEditStart,\n    isEmbeded: isEmbeded,\n    enableAiSummaryStatementFeedback: enableAiSummaryStatementFeedback,\n    styleGuideId: styleGuideId\n  };\n}\n\nexport const weakMemoizedGenerateEditingContext = memoize(generateEditingContext);\nexport function generateEditingContext(\n  shouldShowEditor: true,\n  canBeEditing: boolean, // displayContext.canBeEditing\n  isVersionEditActivated: boolean,\n  changesDisplayMode: ChangesDisplayMode | undefined, // TODO: Narrow down\n  isPublishedVersion: boolean,\n  isMaintenanceVersion: boolean,\n  canEditOM: boolean,\n  nodeDefinitions: NodeDefinitions,\n  currentUserId: number,\n  changeAuthorIds: number[],\n  addChanges: (change: Change[], variantId?: number) => void,\n  setCurrentDocSelection: (selection: DocSelection) => void,\n  clearCurrentDocSelection: () => void,\n  setCurrentMenu: (menu: DocMenuName, data?: Record<string, any>) => void,\n  closeCurrentMenu: () => void,\n  setLocalClipboard: (data: LocalClipboardData) => void,\n  editors: EditorSpecialType[] | undefined,\n  allowLearningObjectivesEdit: string,\n) {\n  const isEditing = canBeEditing && isVersionEditActivated\n    && !(isPublishedVersion || ([changesDisplayModes.HIDE_SUGGESTIONS, changesDisplayModes.ONLY_PUBLISHED] as ChangesDisplayMode[]).includes(changesDisplayMode))\n    && !(isMaintenanceVersion && !canEditOM);\n\n  return {\n    shouldShowEditor,\n    isVersionEditActivated,\n    isEditing,\n    changesDisplayMode,\n    nodeDefinitions,\n    colorLookup: generateColorLookup(uniq([currentUserId].concat(changeAuthorIds))),\n    addChange: (change: Change, variantId?: number) => addChanges([change], variantId),\n    addChanges: addChanges,\n    setCurrentDocSelection,\n    clearCurrentDocSelection,\n    setCurrentMenu,\n    closeCurrentMenu,\n    setLocalClipboard,\n    editors,\n    allowLearningObjectivesEdit,\n  };\n}\n\nexport const weakMemoizedGenerateEditingContextAllFalse = memoize(generateEditingContextAllFalse);\nexport function generateEditingContextAllFalse(\n  currentUserId: number = 1,\n  changeAuthorIds: Array<number> = [],\n): EditingContextAllFalse {\n  return {\n    shouldShowEditor: false,\n    isVersionEditActivated: false,\n    isEditing: false,\n    colorLookup: generateColorLookup(uniq([currentUserId].concat(changeAuthorIds))),\n  };\n}\n\nexport const weakMemoizedGenerateIntegrationInfo = memoize(generateIntegrationInfo);\nexport function generateIntegrationInfo (\n  final_diagnoses,\n  clinical_excellence,\n  basic_science_disciplines,\n) {\n  return {\n    final_diagnoses,\n    clinical_excellence,\n    basic_science_disciplines,\n  }\n}\n","export const displayModes = {\n  STUDENT: \"student\",\n  UNGATED: \"ungated\",\n  FULL: \"full\",\n  OUTLINE: \"outline\",\n} as const;\n\nexport function isDisplayMode(str: string): str is DisplayMode {\n  return !!Object.values(displayModes).find((displayMode) => str === displayMode)\n}\n","import {\n  assign,\n  assignWith,\n  mapValues,\n} from \"lodash\";\n\nimport * as R from \"ramda\";\n\nimport {\n  weakMemoizedCloneAndNormalizeDoc,\n} from \"./changes\";\n\nimport {\n  denormalizeDocNode,\n} from \"./Functions/base\";\n\nexport function mergeStates<T extends UserState | UserStateStripped>(stateA: T, stateB: T) {\n  return assignWith({}, stateA, stateB, (nodeDataA, nodeDataB, uid) => {\n    if (nodeDataA && nodeDataB) {\n      return assignWith({}, nodeDataA, nodeDataB, (keyDataA, keyDataB, key) => {\n        if (keyDataA && keyDataB) {\n          if (keyDataA[\"updatedAt\"] > keyDataB[\"updatedAt\"]) {\n            return keyDataA;\n          } else {\n            return keyDataB;\n          }\n        } else {\n          return keyDataA || keyDataB;\n        }\n      });\n    } else {\n      return nodeDataA || nodeDataB;\n    }\n  });\n}\n\n// TODO CONPOSE WITH BELOW FUNCTIONS\nexport function stripState(state: UserState) {\n  return mapValues(state, (nodeData) => {\n    return mapValues(nodeData, (valueObject) => {\n      return valueObject.value;\n    });\n  });\n}\n\nexport function mergeStrippedStates(stateA: UserStateStripped, stateB: UserStateStripped) {\n  return assignWith({}, stateA, stateB, (nodeDataA, nodeDataB, uid) => {\n    if (nodeDataA && nodeDataB) {\n      return assign({}, nodeDataA, nodeDataB);\n    } else {\n      return nodeDataA || nodeDataB;\n    }\n  });\n}\n\n// TODO: Remove function if not used\nexport function stripStateSingleNode(nodeState) {\n  return mapValues(nodeState, (valueObject) => valueObject.value);\n}\n\n// TODO: Remove function if not used\nexport function mergeStrippedSingleNode(nodeStateA, nodeStateB) {\n  if (nodeStateA && nodeStateB) {\n    return assign({}, nodeStateA, nodeStateB);\n  } else {\n    return nodeStateA || nodeStateB;\n  }\n}\n\nexport function addDocumentUserState(doc, state: UserState) {\n  const rootNodeUid = doc.uid;\n  const normalizedDoc = weakMemoizedCloneAndNormalizeDoc(doc);\n\n  const strippedState = stripState(state);\n  const mergedNormalizedVersion = mergeStrippedStates(normalizedDoc, strippedState);\n\n  return denormalizeDocNode(mergedNormalizedVersion, rootNodeUid);\n}\n\nexport function wrapStateAsSetNodeKVPairActions(state: UserStateStripped): Array<DocActionSetNodeKVPair> {\n  return R.toPairs(state).map(([uid, valueMap]) => (\n    R.toPairs(valueMap).map(([key, value]) => {\n      const returnAction: DocActionSetNodeKVPair = {\n        type: \"action\",\n        action: \"setNodeKVPair\",\n        arguments: {\n          uid,\n          key,\n          value,\n        },\n      }\n\n      return returnAction;\n    })\n  )).flat();\n}\n\n// const DENORMALIZE_KEYS = [\"diagnoses\", \"findings\", \"notes\"]\n// export function denormalizeDocumentUserState(strippedState) {\n//   mapValues(strippedState, valuesHash => {\n//     return DENORMALIZE_KEYS.forEach(denormalizeKey => {\n//       if(valuesHash[denormalizeKey]) {\n//         valuesHash = {\n//           ...valuesHash,\n//           [valuesHash[denormalizeKey]]: valuesHash[denormalizeKey].map(uid => strippedState[uid])\n//         }\n//       }\n//     })\n//   })\n// }\n//\n// export function applyDocumentUserState(docNode, documentUserState) {\n//   let returnNode = docNode\n//\n//   if (documentUserState[returnNode.uid]) {\n//     returnNode = {\n//       ...returnNode,\n//       documentUserState[returnNode.uid]\n//     }\n//   }\n// }\n","export const ADD_NODE = \"ADD_NODE\"\nexport const EDIT_COMMENT = \"EDIT_COMMENT\"\nexport const EDIT_LINK = \"EDIT_LINK\"\nexport const FIND_AND_REPLACE = \"FIND_AND_REPLACE\"\nexport const LIST_RLO_MODAL = \"LIST_RLO_MODAL\"\nexport const MEDIA_MANAGER = \"MEDIA_MANAGER\"\nexport const MEDIA_PICKER = \"MEDIA_PICKER\"\nexport const NEW_COMMENT_THREAD = \"NEW_COMMENT_THREAD\"\nexport const NEW_STUDENT_FEEDBACK = \"NEW_STUDENT_FEEDBACK\"\nexport const NEW_SUMMARY_OF_EDITS = \"NEW_SUMMARY_OF_EDITS\"\nexport const RLO_MODAL = \"RLO_MODAL\"\nexport const TEXT_COLOR_PICKER = \"TEXT_COLOR_PICKER\"\nexport const EDIT_RO_NAME_MODAL = \"EDIT_RO_NAME_MODAL\"\nexport const LEARNING_OBJECTIVES_CONFIRM_EDIT = \"LEARNING_OBJECTIVES_CONFIRM_EDIT\";\nexport const LEARNING_OBJECTIVES_ADD_NEW = \"LEARNING_OBJECTIVES_ADD_NEW\";\n","import {\n  last,\n  tail,\n} from \"lodash\";\n\nexport function scrollToLineage(lineage: Array<any>, addStateCallback: AddStateFunction) {\n  const ancestorSections = lineage.filter((ancestor) => ancestor.type === \"section\");\n  const ancestorSectionsUids = ancestorSections.map((ancestor) => ancestor.uid);\n\n  const openSectionsState = tail(ancestorSectionsUids).reduce((acc, ancestorUid) => ({\n    ...acc,\n    [ancestorUid]: {collapsed: false},\n  }), {})\n\n  addStateCallback(openSectionsState);\n\n  setTimeout(() => {\n    const el = document.getElementById(`bookmark${last(lineage).uid}`) || document.getElementsByClassName(last(lineage).uid)[0];\n    if (el) {\n      window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 240);\n    }\n  }, 300);\n}\n\nexport function scrollToUidAndContentKey(uid: string, contentKey: string) {\n  setTimeout(() => {\n    const el = document.getElementById(`${uid}//${contentKey}`);\n    if (el) {\n      window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 240);\n    }\n  }, 300);\n}\n\nexport function scrollToUid(uid: string) {\n  setTimeout(() => {\n    const el = document.querySelector(`[data-uid=\"${uid}\"]`);\n    if (el) {\n      window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 240);\n    }\n  }, 300);\n}\n\nexport function scrollToElementWithUid(uid_candidates: Array<string>) {\n  const matching_elements = uid_candidates\n    .map((uid) => document.getElementsByClassName(uid)[0])\n    .filter((x) => !!x);\n  const el = matching_elements[0];\n\n  if (el) {\n    window.scrollTo(0, window.scrollY + el.getBoundingClientRect().top - 300);\n\n    // We can't only click on the given element.\n    // We must also click on the nested elements, and experimentation shows that we only want to\n    // click on nested elements that have text content.\n    const recursiveClick = (elem: Element) => {\n      if (elem instanceof HTMLElement && !!elem.textContent) {\n        elem.click();\n      }\n      [...elem.children].forEach((child) => {\n        recursiveClick(child);\n      });\n    };\n    recursiveClick(el);\n  }\n  return el;\n}\n","import * as R from \"ramda\";\n\n///////////////////\n// DOM SELECTION //\n///////////////////\n\nfunction getDOMSelection() {\n  const domSelection = window.getSelection();\n  return domSelection && domSelection.rangeCount > 0 ? domSelection : null;\n}\n\nexport function getDOMRange() {\n  const domSelection = getDOMSelection();\n  if (domSelection) {\n    return domSelection.getRangeAt(0);\n  } else {\n    return null;\n  }\n}\n\nfunction setDOMRange(domRange: Range) {\n  const domSelection = window.getSelection();\n  domSelection?.removeAllRanges();\n  domSelection?.addRange(domRange);\n}\n\nfunction clearAllDOMRanges() {\n  const domSelection = window.getSelection();\n  domSelection?.removeAllRanges();\n}\n\nexport function areDOMRangesEqual(domRange1?: Range, domRange2?: Range) {\n  const toCompareKeys = [\n    \"commonAncestorContainer\",\n    \"endContainer\",\n    \"endOffset\",\n    \"startContainer\",\n    \"startOffset\",\n  ];\n\n  return domRange1 && domRange2 && R.equals(R.pickAll(toCompareKeys, domRange1), R.pickAll(toCompareKeys, domRange2));\n}\n\n///////////////////\n// Doc Selection //\n///////////////////\n\n// DOC_SELECTION\n// {\n//   start: SELECTION_BOUNDRY\n//   end: SELECTION_BOUNDRY\n//   variantId?: Number\n// }\n//\n// DOC_SELECTION_BOUNDRY\n// {\n//   uid: UID\n//   index: INDEX\n//   contentKey: CONTENT_KEY // OPTIONAL\n// }\n//\n// INLINE vs BLOCK SELECTION\n\nexport function getDocSelection() {\n  return domRangeToDocSelection(getDOMRange());\n}\n\nexport function clearDocSelection() {\n  if (getDocSelection()) {\n    clearAllDOMRanges();\n  }\n}\n\nfunction domRangeToDocSelection(domRange?: Range | null) {\n  if (!domRange) { return null; }\n\n  const commonIndependentlyEditableAncestor = getIndependentlyEditableAncestor(domRange.commonAncestorContainer);\n\n  if (!commonIndependentlyEditableAncestor) { return null; }\n\n  const startBoundry = domRangeBoundryToDocSelectionBoundry(domRange.startContainer, domRange.startOffset, commonIndependentlyEditableAncestor);\n  const endBoundry = domRangeBoundryToDocSelectionBoundry(domRange.endContainer, domRange.endOffset, commonIndependentlyEditableAncestor);\n\n  if (startBoundry === null || endBoundry === null ) {\n    if (startBoundry || endBoundry) {\n      //TODO ADD ERROR FOR ONE SIDED SELECTION\n    }\n    return null;\n  }\n\n  const returnSelection: DocSelection = {\n    start: startBoundry,\n    end: endBoundry,\n  }\n\n  const variantId = domRangeBoundryToVariantId(domRange.startContainer, commonIndependentlyEditableAncestor)\n  if (typeof variantId === 'number') {\n    returnSelection.variantId = variantId\n  }\n\n  return returnSelection;\n}\n\nfunction domRangeBoundryToVariantId(node: Node, commonIndependentlyEditableAncestor: Node) {\n  if (isInNoDocumentSelection(node)) { return; }\n\n  const thisIndependentlyEditableAncestor = getIndependentlyEditableAncestor(node);\n  const directlyInCommonIndependentlyEditableAncestor = thisIndependentlyEditableAncestor === commonIndependentlyEditableAncestor;\n\n  if (directlyInCommonIndependentlyEditableAncestor) {\n    const ancestorStyledTextNode = getAncestorStyledTextNodeFromChildNode(node);\n    if (ancestorStyledTextNode instanceof HTMLElement) {\n      const variantId = ancestorStyledTextNode.dataset.variantid;\n      return variantId && parseInt(variantId);\n    }\n  }\n\n  return;\n}\n\nfunction domRangeBoundryToDocSelectionBoundry(node: Node, offset: number, commonIndependentlyEditableAncestor: Node) {\n  if (isInNoDocumentSelection(node)) { return null; }\n\n  const thisIndependentlyEditableAncestor = getIndependentlyEditableAncestor(node);\n  const directlyInCommonIndependentlyEditableAncestor = thisIndependentlyEditableAncestor === commonIndependentlyEditableAncestor;\n\n  if (directlyInCommonIndependentlyEditableAncestor) {\n    const ancestorStyledTextNode = getAncestorStyledTextNodeFromChildNode(node);\n    if (ancestorStyledTextNode instanceof HTMLElement && ancestorStyledTextNode.dataset.uid) {\n      const index = 0;\n      const nodeOffset = ancestorStyledTextNode.dataset.isEmpty !== \"true\"\n        ? findTextOffsetNodeInNode(ancestorStyledTextNode, node) : 0;\n\n      if (nodeOffset === null) { return null; }\n\n      return {\n        uid: ancestorStyledTextNode.dataset.uid,\n        contentKey: ancestorStyledTextNode.dataset.contentkey,\n        index: ancestorStyledTextNode.dataset.isEmpty !== \"true\" ? nodeOffset + offset : 0,\n      };\n    }\n\n    const ancestorDocNode = getAncestorDocNodeFromChildNode(node);\n    if (ancestorDocNode instanceof HTMLElement && ancestorDocNode.dataset.uid) {\n      return {\n        uid: ancestorDocNode.dataset.uid,\n        index: offset > 0 ? 1 : 0,\n      };\n    }\n\n    const nextDocNodeSibling = findNextDocNodeSibling(node);\n    if (nextDocNodeSibling instanceof HTMLElement && nextDocNodeSibling.dataset.uid) {\n      return {\n        uid: nextDocNodeSibling.dataset.uid,\n        index: 0,\n      };\n    }\n\n    const previousDocNodeSibling = findPreviousDocNodeSibling(node);\n    if (previousDocNodeSibling instanceof HTMLElement && previousDocNodeSibling.dataset.uid) {\n      return {\n        uid: previousDocNodeSibling.dataset.uid,\n        index: 1,\n      };\n    }\n  } else {\n    const ancestorDocNode = findDeepestDocNodeDirectlyInIndependentlyEditableNode(commonIndependentlyEditableAncestor, node);\n    if (ancestorDocNode instanceof HTMLElement && ancestorDocNode.dataset.uid) {\n      return {\n        uid: ancestorDocNode.dataset.uid,\n        index: offset > 0 || ancestorDocNode !== node ? 1 : 0,\n      };\n    }\n  }\n\n  return null;\n}\n\nexport function areDocSelectionsEqual(selection1: DocSelection, selection2: DocSelection) {\n  return selection1 && selection2 && R.equals(selection1, selection2);\n}\n\nexport function isCollapsed(selection: DocSelection) {\n  return selection && R.equals(selection.start, selection.end);\n}\n\nexport function isInOneInline(selection: DocSelection) {\n  return R.equals(selection.start.uid, selection.end.uid) && !!selection.start.contentKey && R.equals(selection.start.contentKey, selection.end.contentKey);\n}\n\nexport function areBothInlineBoundries(selection: DocSelection) {\n  return !!(selection.start.contentKey && selection.end.contentKey);\n}\n\nexport function isInOneNode(selection: DocSelection) {\n  return R.equals(selection.start.uid, selection.end.uid);\n}\n\nexport function isInlineBoundry(boundry: DocSelectionBoundry) {\n  return !!boundry.contentKey;\n}\n\nexport function isBlockBoundry(boundry: DocSelectionBoundry) {\n  return !boundry.contentKey;\n}\n\nexport function toRange(selection: DocSelection) {\n  return {\n    start: selection.start.index,\n    end: selection.end.index,\n  };\n}\n\nexport function isDocSelectionWithinStyledText(docSelection: DocSelection) {\n  return docSelection && docSelection\n    && docSelection.start.uid === docSelection.end.uid\n    && docSelection.start.contentKey === docSelection.end.contentKey;\n}\n\nexport function newCollapsedDocSelection(uid: string, contentKey: string, index: number) {\n  return {\n    start: newDocSelectionBoundry(uid, contentKey, index),\n    end: newDocSelectionBoundry(uid, contentKey, index),\n  };\n}\n\nexport function newDocSelectionBoundry(uid: string, contentKey: string, index: number) {\n  return {\n    uid,\n    contentKey,\n    index,\n  };\n}\n\nexport function collapseDocSelectionToStart(docSelection: DocSelection) {\n  return {\n    start: docSelection.start,\n    end: docSelection.start,\n  };\n}\n\nexport function shiftDocSelectionBy(docSelection: DocSelection, shiftCount: number) {\n  return {\n    start: shiftDocSelectionBoundryBy(docSelection.start, shiftCount),\n    end: shiftDocSelectionBoundryBy(docSelection.end, shiftCount),\n  };\n}\n\nexport function shiftDocSelectionStartBy(docSelection: DocSelection, shiftCount: number): DocSelection {\n  return {\n    start: shiftDocSelectionBoundryBy(docSelection.start, shiftCount),\n    end: docSelection.end,\n  };\n}\n\nexport function shiftDocSelectionEndBy(docSelection: DocSelection, shiftCount: number) {\n  return {\n    start: docSelection.start,\n    end: shiftDocSelectionBoundryBy(docSelection.end, shiftCount),\n  };\n}\n\nexport function shiftDocSelectionBoundryBy(docSelectionBoundry: DocSelectionBoundry, shiftCount: number) {\n  return {\n    ...docSelectionBoundry,\n    index: docSelectionBoundry.index + shiftCount,\n  };\n}\n\nexport function setDocSelection(docSelection?: DocSelection) {\n  const domRange = docSelectionToDOMRange(docSelection);\n\n  if (domRange) { setDOMRange(domRange); }\n}\n\nexport function docSelectionToDOMRange(docSelection?: DocSelection) {\n  if (!docSelection) { return null; }\n\n  const startBoundry = getDOMBoundryFromDocSelectionBoundry(docSelection.start);\n  const endBoundry = getDOMBoundryFromDocSelectionBoundry(docSelection.end);\n\n  if (!startBoundry || !endBoundry) { return null; }\n\n  const domRange = document.createRange();\n  domRange.setStart(...startBoundry);\n  domRange.setEnd(...endBoundry);\n  return domRange;\n}\n\nfunction getDOMBoundryFromDocSelectionBoundry(docBoundry: DocSelectionBoundry) {\n  const parentNode = getAncestorStyledTextNodeFromUIDAndContentKey(docBoundry.uid, docBoundry.contentKey);\n\n  if (!parentNode) { return null; }\n\n  return findNodeAndOffsetFromTextOffset(parentNode, docBoundry.index);\n}\n\n\n////////////////////////////////////////////////////////\n// Doc Selection and Range Selection Shared Functions //\n////////////////////////////////////////////////////////\n\nfunction nodeTextLength(node: Node) {\n  if (node.nodeType === Node.TEXT_NODE && node.textContent) {\n    return node.textContent.length;\n  } else {\n    return 0;\n  }\n}\n\nfunction findTextOffsetNodeInNode(parentNode: Node, childNode: Node) {\n  if (parentNode === childNode) {return 0;}\n\n  const newWalker = document.createTreeWalker(parentNode, NodeFilter.SHOW_ALL);\n\n  let offset = 0;\n  while (newWalker.nextNode()) {\n    const currentNode = newWalker.currentNode;\n\n    if (currentNode === childNode) {\n      return offset;\n    } else {\n      offset = offset + nodeTextLength(currentNode);\n    }\n  }\n\n  return null;\n}\n\nfunction isNodeDocNode(node: Node) {\n  return node instanceof HTMLElement && !!node.dataset?.isNode;\n}\n\nfunction isNodeBlockNodes(node: Node) {\n  return node instanceof HTMLElement && !!node.dataset?.isBlockNodes;\n}\n\nfunction isNodeStyledText(node: Node) {\n  return node instanceof HTMLElement && !!node.dataset?.isStyledText;\n}\n\nfunction isNodeIndpendentlyEditable(node: Node) {\n  return node instanceof HTMLElement && !!node.dataset?.isIndependentlyEditable;\n}\n\nfunction getIndependentlyEditableAncestor(node: Node | null) : Node | null {\n  if (!node) { return null; }\n\n  return isNodeIndpendentlyEditable(node) ? node : getIndependentlyEditableAncestor(node.parentNode);\n}\n\nfunction getAncestorStyledTextNodeFromChildNode(node: Node | null) : Node | null {\n  if (!node) { return null; }\n\n  return isNodeStyledText(node) ? node : getAncestorStyledTextNodeFromChildNode(node.parentNode);\n}\n\nfunction isInNoDocumentSelection(node: Node | null) : boolean {\n  if (!node) { return false; }\n\n  return isNoDocumentSelection(node) || isInNoDocumentSelection(node.parentNode);\n}\n\nfunction isNoDocumentSelection(node: Node) {\n  return node instanceof HTMLElement && node.classList?.contains(\"no-document-selection\")\n}\n\nfunction getAncestorDocNodeFromChildNode(node: Node | null) : Node | null {\n  if (!node || isNodeBlockNodes(node)) { return null; }\n\n  return isNodeDocNode(node) ? node : getAncestorDocNodeFromChildNode(node.parentNode);\n}\n\nfunction findDeepestDocNodeDirectlyInIndependentlyEditableNode(independentlyEditableNode: Node, startNode: Node | null, currentDeepest: Node | null = null) {\n  if (!startNode) { return null; }\n\n  if (!currentDeepest && isNodeDocNode(startNode)) {\n    currentDeepest = startNode;\n  }\n\n  if (independentlyEditableNode === startNode) { return currentDeepest; }\n\n  return findDeepestDocNodeDirectlyInIndependentlyEditableNode(independentlyEditableNode, startNode.parentNode, isNodeIndpendentlyEditable(startNode) ? null : currentDeepest);\n}\n\nfunction findNextDocNodeSibling(node: Node | null) {\n  if (!node || isNodeIndpendentlyEditable(node)) { return null; }\n  if (isNodeDocNode(node)) { return node; }\n\n  return findNextDocNodeSibling(node.nextSibling ? node.nextSibling : node.parentNode);\n}\n\nfunction findPreviousDocNodeSibling(node: Node | null) {\n  if (!node || isNodeIndpendentlyEditable(node)) { return null; }\n  if (isNodeDocNode(node)) { return node; }\n\n  return findPreviousDocNodeSibling(node.previousSibling ? node.previousSibling : node.parentNode);\n}\n\nfunction getAncestorStyledTextNodeFromUIDAndContentKey(uid, contentKey: string) {\n  return document.querySelector(`[data-uid=\"${uid.replaceAll(\"\\\"\", \"\\\\\\\"\")}\"][data-contentkey=\"${contentKey}\"].doc-styled-text`);\n}\n\nfunction findNodeAndOffsetFromTextOffset(parentNode: Node, textOffset: number): [Node, any] | null { // TODO: Remove any\n  if (textOffset === 0) {\n    return [parentNode, 0];\n  }\n\n  const newWalker = document.createTreeWalker(parentNode, NodeFilter.SHOW_ALL);\n\n  let currentOffset = 0;\n  while (newWalker.nextNode()) {\n    const currentNode = newWalker.currentNode;\n\n    const textLength = nodeTextLength(currentNode);\n\n    const newOffset = currentOffset + textLength;\n    if (newOffset >= textOffset) {\n      return [currentNode, textOffset - currentOffset];\n    } else {\n      currentOffset = newOffset;\n    }\n  }\n\n  return null;\n}\n","export const trackChangesEditModes = {\n  EDITING_MODE: \"EDITING_MODE\",\n  SUGGESTING_MODE: \"SUGGESTING_MODE\",\n} as const;\n\nexport function isTrackChangesEditMode(str: string): str is TrackChangesEditMode {\n  return !!Object.values(trackChangesEditModes).find((displayMode) => str === displayMode)\n}\n","export const versionTypes = Object.freeze({\n  PUBLISHED: \"PUBLISHED\",\n  ONGOING_MAINTENANCE: \"ONGOING_MAINTENANCE\",\n  SCHEDULED_REVIEW: \"SCHEDULED_REVIEW\",\n  OTHER: \"OTHER\",\n});\n\nexport const variantTypes = Object.freeze({\n  PUBLISHED: \"PUBLISHED\",\n  MAINTENANCE: \"MAINTENANCE\",\n  REVIEW: \"REVIEW\",\n  OTHER: \"OTHER\",\n});\n\nexport function versionTypeShortName(versionType: VersionType) {\n  switch (versionType) {\n    case versionTypes.PUBLISHED:\n      return \"PUB\";\n    case versionTypes.ONGOING_MAINTENANCE:\n      return \"OM\";\n    case versionTypes.SCHEDULED_REVIEW:\n      return \"SR\";\n    default:\n      // TODO ADD ERROR\n  }\n}\n\nexport function versionTypeFullName(versionType: VersionType) {\n  switch (versionType) {\n    case versionTypes.PUBLISHED:\n      return \"Published\";\n    case versionTypes.ONGOING_MAINTENANCE:\n      return \"Ongoing Maintenance\";\n    case versionTypes.SCHEDULED_REVIEW:\n      return \"Scheduled Review\";\n    default:\n      // TODO ADD ERROR\n  }\n}\n\nexport function versionTypeCssClassPrefix(versionType: VersionType) {\n  switch (versionType) {\n    case versionTypes.PUBLISHED:\n      return \"published\";\n    case versionTypes.ONGOING_MAINTENANCE:\n      return \"ongoing-maintenance\";\n    case versionTypes.SCHEDULED_REVIEW:\n      return \"scheduled-review\";\n    default:\n      // TODO ADD ERROR\n  }\n}\n\nexport function versionPushButtonData(versionType: VersionType) {\n  switch (versionType) {\n    case versionTypes.SCHEDULED_REVIEW:\n      return {\n        pushButtonName: \"Push To OM\",\n        pushButtonConfirmationText: \"Are you sure you want to replace the current Ongoing Maintenance Version with the Scheduled Review Version?\",\n        pushButtonPath: \"replace_edit\",\n        pushButtonReplaceableVariant: \"maintenance_variant\",\n      }\n    case versionTypes.ONGOING_MAINTENANCE:\n      return {\n        pushButtonName: \"Push To SR\" ,\n        pushButtonConfirmationText: \"Are you sure you want to replace the current Scheduled Review Version with the Ongoing Maintenance Version?\",\n        pushButtonPath: \"replace_scheduled_review\",\n        pushButtonReplaceableVariant: \"review_variant\",\n      }\n    default:\n      return {}\n  }\n}\n\nexport function determineVersionType(documentContext: DocumentContext, versionID: number) {\n  switch (versionID) {\n    case publishVersionId(documentContext):\n      return versionTypes.PUBLISHED;\n    case ongoingMaintenaceVersionId(documentContext):\n      return versionTypes.ONGOING_MAINTENANCE;\n    case scheduledReviewVersionId(documentContext):\n      return versionTypes.SCHEDULED_REVIEW;\n    default:\n      return versionTypes.OTHER;\n  }\n}\n\nexport function publishVersionId(documentContext: DocumentContext) {\n  return documentContext.docType == \"ReusableObject\" ? documentContext.publishVariantId : documentContext.publishVersionId;\n}\n\nexport function ongoingMaintenaceVersionId(documentContext: DocumentContext) {\n  return documentContext.docType == \"ReusableObject\" ? documentContext.maintenanceVariantId : documentContext.editVersionId;\n}\n\nexport function scheduledReviewVersionId(documentContext: DocumentContext) {\n  return documentContext.docType == \"ReusableObject\" ? documentContext.reviewVariantId : documentContext.scheduledReviewVersionId;\n}\n\nexport function determineVariantTypeFromVersionType(versionType: VersionType) {\n  switch (versionType) {\n    case versionTypes.PUBLISHED:\n      return variantTypes.PUBLISHED;\n    case versionTypes.ONGOING_MAINTENANCE:\n      return variantTypes.MAINTENANCE;\n    case versionTypes.SCHEDULED_REVIEW:\n      return variantTypes.REVIEW;\n    default:\n      return variantTypes.OTHER;\n  }\n}\n\nexport function variantKeyFromVariantVersion(variantType: VariantType) {\n  switch (variantType) {\n    case variantTypes.PUBLISHED:\n      return 'publishVariantId';\n    case variantTypes.MAINTENANCE:\n      return 'maintenanceVariantId';\n    case variantTypes.REVIEW:\n      return 'reviewVariantId';\n    default:\n      return 'publishVariantId';\n  }\n}\n","import {full_url} from 'helpers/url'\nimport { updateProgress } from '../helpers/progressHelper';\n\nexport const EXPANDED_MOD_MAP_LOG = \"ExpandedModMapLog\"\nexport const OPENED_DOCUMENT_LOG = \"OpenedDocumentLog\"\nexport const OPENED_LAB_VALUES_LOG = \"OpenedLabValuesLog\"\nexport const OPENED_MOD_MAP_LOG = \"OpenedModMapLog\"\nexport const OPENED_SECTION_LOG = \"OpenedSectionLog\"\n\nexport function postDocumentUserLog(document_id, log_type, args={}) {\n  fetch(full_url(`/documents/${document_id}/document_user_logs`), {\n    method: 'POST',\n    headers: ReactOnRails.authenticityHeaders({\n      'Accept': \"application/json\",\n      'Content-Type': 'application/json',\n    }),\n    body: JSON.stringify({\n      document_user_log: {\n        type: log_type,\n        created_at: Math.floor(Date.now() / 1000),\n        ...args\n      }\n    })\n  })\n  .then(response => {\n    if (!response.ok) {\n      throw new Error('Network response was not ok');\n    }\n    return response.json();\n  })\n  .then(data => {\n    updateProgress(data);\n  })\n  .catch(error => {\n    console.error(error);\n    Rollbar.warning(\"Logging Data Failed\");\n  });\n}\n","export const CAUSAL_EXPLANATION_CLASSES = [\n  \"causal_explanation\",\n]\n\nexport const CORE_CONCEPT_CLASSES = [\n  \"core_concept_header\",\n]\n\nexport const DEEP_DIVE_CLASSES = [\n  \"expert_comment\",\n]\n\nexport const TEACHING_POINT_CLASSES = [\n  \"clinical_reasoning\",\n  \"clinical_skills\",\n  \"clinical\",\n  \"knowledge\",\n  \"management\",\n  \"studies\",\n  \"teaching\", // TODO: HAS THIS BEEN ADDED?\n]\n\nexport const POSSIBLE_RO_CLASSES = [\n  ...CAUSAL_EXPLANATION_CLASSES,\n  ...CORE_CONCEPT_CLASSES,\n  ...DEEP_DIVE_CLASSES,\n  ...TEACHING_POINT_CLASSES,\n]","import { formatDate } from './dates'\nimport { truncateWithTooltip, formatLabel } from './utils'\n\nexport const answerChoices = [\"A\", \"B\", \"C\", \"D\", \"E\"];\n\nexport const formatCellValue = (value, truncate) => {\n  if (Array.isArray(value)) {\n    return value.length > 0 ? value.join(\", \") : \"-\";\n  }\n  if (value == null || value === \"\") return \"-\";\n\n  const stringValue = String(value);\n  return truncate && stringValue.length > 200 ? truncateWithTooltip(stringValue) : stringValue;\n};\n\nexport const resolveNestedValue = (obj, key) =>\n  key.split(\".\").reduce((acc, field) => (acc && acc[field] ? acc[field] : null), obj);\n\nexport const getSpecialCellValue = (question, key) => {\n  if (key === \"select\") return null;\n  if (key === \"efficiency_breakpoints_seconds\") return (Array.isArray(question[key]) && question[key].length > 0) ? 'Yes' : 'No';\n  if (key === \"updated_at\" || key === \"created_at\") return formatDate(question[key]);\n  if (key === \"status\") return formatLabel(question[key]);\n  if (key === \"course_name\") return question[\"case_summary_identifier\"].replace(/\\d{2}-\\d{2}$/, \"\");\n\n  if (key === \"content.images\") {\n    const images = question.content?.images || [];\n    return !Array.isArray(images) || images.length === 0\n      ? \"-\"\n      : images\n          .map(\n            (img, index) =>\n              `<a href=\"${img}\" target=\"_blank\" style=\"--background: url(${img})\" class=\"qb-thumbnail\">image ${index + 1}</a>`\n          )\n          .join(\"<br />\");\n  }\n\n  if (key === \"content.correct_answer_index\") {\n    return answerChoices[question.content?.correct_answer_index];\n  }\n\n  if (key.startsWith(\"choice_\")) {\n    const index = answerChoices.indexOf(key.split(\"_\")[1].toUpperCase());\n    return question.content?.choices?.[index] || \"-\";\n  }\n\n  return null;\n};\n\n// Main function for getting cell value\nexport const getCellValue = (question, key, truncate = true) => {\n  const specialValue = getSpecialCellValue(question, key);\n  if (specialValue !== null) return specialValue;\n\n  const value = resolveNestedValue(question, key);\n  return formatCellValue(value, truncate);\n};\n","export const formatDate = (\n  date: Date | string | number, \n  format: string = \"MM-DD-YYYY\"\n): string => {\n  let parsedDate: Date;\n\n  if (date instanceof Date) {\n    parsedDate = date;\n  } else {\n    parsedDate = new Date(date);\n    if (isNaN(parsedDate.getTime())) {\n      throw new Error(\"Invalid date\");\n    }\n  }\n\n  const map: Record<string, string> = {\n    YYYY: parsedDate.getFullYear().toString(),\n    MM: String(parsedDate.getMonth() + 1).padStart(2, \"0\"),\n    DD: String(parsedDate.getDate()).padStart(2, \"0\"),\n    HH: String(parsedDate.getHours()).padStart(2, \"0\"),\n    mm: String(parsedDate.getMinutes()).padStart(2, \"0\"),\n    ss: String(parsedDate.getSeconds()).padStart(2, \"0\"),\n  };\n\n  return format.replace(/YYYY|MM|DD|HH|mm|ss/g, (match) => map[match]);\n}","export default function generateUUID() { // Public Domain/MIT\n  var d = new Date().getTime()\n  if (typeof performance !== 'undefined' && typeof performance.now === 'function'){\n    d += performance.now() //use high-precision timer if available\n  }\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = (d + Math.random() * 16) % 16 | 0\n    d = Math.floor(d / 16)\n    return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16)\n  })\n}\n","import axios from 'axios'\nimport { full_url } from 'helpers/url'\nimport { defaultInTransformer } from 'reducers/itemReducer'\n\nconst BASE_ASSET_ENDPOINT = full_url(\"/api/v2/digital_assets/\")\n\nconst ASSET_TYPES = {\n  image:\"image\",\n  video:\"video\",\n  audio:\"audio\",\n  pdf:\"pdf\",\n  caption:\"caption\"\n}\n\nexport function getAssetAssociations({externalId, responseHandler = defaultHandler} = {}) {\n  return apiRequest({\n    path: \"asset_associations\",\n    method: \"GET\",\n    params: {\n      external_id: externalId\n    },\n    responseHandler: responseHandler\n  })\n}\n\nexport function deleteAssetAssociation({modelId = \"\", modelType = \"\", externalId = \"\", responseHandler = defaultHandler} = {}) {\n  apiRequest({\n    path: \"delete_asset_association\",\n    method: \"POST\",\n    params: {\n      model_id: modelId,\n      model_type: modelType,\n      external_id: externalId\n    },\n    responseHandler: responseHandler\n  })\n}\n\nexport function initializeMedia({isEmbeded = false, modelId = \"\", modelType = \"\", responseHandler = defaultHandler} = {}) {\n  if (isEmbeded) {\n    return responseHandler({\n      \"images\":   [],\n      \"audios\":   [],\n      \"videos\":   [],\n      \"pdfs\":     [],\n      \"captions\": []\n    })\n  }\n  return syncAssets({\n    modelId,\n    modelType,\n    responseHandler: organizeMediaAssets\n  }).then((assets) => {\n    return responseHandler(assets)\n  })\n}\n\nexport function mediaKeyHelper(asset) {\n  let key = asset.media_type\n  if (key == 'document') {\n    key = asset.file_ext\n  }\n  return {\n    image: 'images',\n    audio: 'audios',\n    video: 'videos',\n    pdf: 'pdfs',\n    vtt: 'captions',\n    srt: 'captions'\n  }[key]\n}\n\nexport function organizeMediaAssets(model) {\n  const transformedModel = defaultInTransformer(model)\n  const checkAndFilterAssets = (doc, type) => {\n    if (!doc || !doc.digitalAssets || !doc.digitalAssets.length) {\n      return false;\n    }\n    switch (type) {\n      case ASSET_TYPES['image']:\n        return doc.digitalAssets.filter(da => da.media_type == \"image\")\n      case ASSET_TYPES['audio']:\n        return doc.digitalAssets.filter(da => da.media_type == \"audio\")\n      case ASSET_TYPES['video']:\n        return doc.digitalAssets.filter(da => da.media_type == \"video\")\n      case ASSET_TYPES['pdf']:\n        return doc.digitalAssets.filter(da => da.media_type == \"document\" && da.file_ext == \"pdf\")\n      case ASSET_TYPES['caption']:\n        return doc.digitalAssets.filter(da => da.media_type == \"document\" && (da.file_ext == \"vtt\" || da.file_ext == \"srt\"))\n      default:\n        return false\n    }\n  }\n\n  return {\n    \"images\": checkAndFilterAssets(transformedModel, ASSET_TYPES['image']) || [],\n    \"audios\": checkAndFilterAssets(transformedModel, ASSET_TYPES['audio']) || [],\n    \"videos\": checkAndFilterAssets(transformedModel, ASSET_TYPES['video']) || [],\n    \"pdfs\":   checkAndFilterAssets(transformedModel, ASSET_TYPES['pdf'])   || [],\n    \"captions\": checkAndFilterAssets(transformedModel, ASSET_TYPES['caption']) || [],\n  }\n}\n\nfunction syncAssets({modelId = \"\", modelType = \"\", responseHandler = defaultHandler} = {}) {\n  return apiRequest({\n    path: \"sync_assets\",\n    method: \"POST\",\n    params: {\n      model_id: modelId,\n      model_type: modelType\n    },\n    responseHandler: responseHandler\n  })\n}\n\nfunction apiRequest({path, method = \"GET\", params = {}, responseHandler = defaultHandler} = {}) {\n  const url = BASE_ASSET_ENDPOINT + path\n  return axios({\n    url,\n    method,\n    params,\n    withCredentials: true,\n    headers: ReactOnRails.authenticityHeaders({\n      'Accept': 'application/json'\n    }),\n  })\n  .then((response) => {\n    return responseHandler(response.data)\n  })\n  .catch((error) => {\n    return responseHandler(error)\n  })\n}\n\nfunction formatResource(resource) {\n  return {\n    external_identifier: resource[\"ref\"],\n    media_type: resource[\"resource_type\"],\n    file_ext: resource[\"file_extension\"],\n    title: resource[\"field8\"]\n  }\n}\n\nfunction defaultHandler(x) {\n  return x\n}\n","export function updateProgress(data: any): void {\n  if (data.progress !== undefined && data.progress !== 0) {\n    const progressBar = document.querySelector('.progress-text');\n    const progress = data.progress + '%';\n\n    if (progressBar && progress === '100%') {\n      document.querySelector('.progress-text')?.classList.add('hide');\n      document.querySelector('.progress-box')?.classList.add('hide');\n      document.querySelector('.complete-progress-icon')?.classList.remove('hide');\n      document.querySelector('.my-time')?.classList.remove('hide');\n      document.querySelector('.my-time-content')!.innerHTML =\"My time: <br/> &nbsp;&nbsp;&nbsp; \" + Math.round(data.time_on_case / 1000 / 60).toString() + \" min\";\n      document.getElementById('resetQuestionButton')?.classList.remove('hide');\n    } else if (progressBar) {\n      document.querySelector('.progress-box')?.classList.remove('hide');\n      document.querySelector('.progress-text')!.textContent = progress + \" Complete\";\n      document.querySelector<HTMLElement>('.progress-bar-length')!.style.width =progress;\n    }\n  }\n}","import _ from 'lodash';\n\nexport function currentTimeInSeconds(){\n  return Math.floor(new Date().getTime() / 1000)\n}\n\nexport function intToDateString(intTime){\n  return intTime && (new Date(intTime)).toISOString().split(\"T\")[0]\n}\n\nexport function intToDateTimeString(intTime){\n  let h = (new Date(intTime)).toString().split(' ')[4].split(':')[0]\n  let m = (new Date(intTime)).toString().split(' ')[4].split(':')[1]\n  let month = (new Date(intTime)).toString().split(' ')[1]\n  let day = (new Date(intTime)).toString().split(' ')[2]\n  let year = (new Date(intTime)).toString().split(' ')[3]\n  let dd = 'AM'\n  if (h >= 12) {\n    h = h - 12\n    dd = 'PM'\n  }\n  if (h === 0) {\n    h = 12\n  }\n  return intTime && month + ' ' + day + ' ' + year + ' ' + h + ':' + m + ' ' + dd + ' '\n}\n\nexport function intTimeToHHMMSS(intTime){\n  let secondsDiff = Math.floor(intTime / 1000)\n\n  let hours = Math.floor(secondsDiff / 3600)\n  secondsDiff -= (hours * 3600)\n\n  let minutes = Math.floor(secondsDiff / 60)\n  secondsDiff -= minutes * 60\n\n  let seconds = secondsDiff\n\n  return hours + \":\" + _.padStart(minutes, 2, \"0\") + \":\" + _.padStart(seconds, 2, \"0\")\n}\n\nexport function intTimeToHHMMSSOrHours(intTime, hours) {\n  if (hours * 60 * 60 * 1000 < intTime) {\n    return \"Greater than \" + hours + \" hours\"\n  } else {\n    return intTimeToHHMMSS(intTime)\n  }\n}\n","const already_url = /^https?:\\/\\//\n\nexport function full_url(path, options={}){\n  if (!path) throw \"no path specified\"\n\n  if (path.match(already_url)) {\n    return path\n  }\n\n  let hostname = window.location.hostname\n\n  if (options.subdomain) {\n    let splitHostname = hostname.split(\".\")\n    if (splitHostname.length >= 3) {\n      splitHostname[0] = options.subdomain\n      hostname = splitHostname.join('.')\n    }\n  }\n\n  // CAN NOT USE window.location.origin BECAUSE OF INTERNET EXPLORER\n  return window.location.protocol + \"//\" + hostname + (window.location.port ? ':' + window.location.port: '') + path\n}\n\nexport function getUrlParameter(sParam){\n    var sPageURL = window.location.search.substring(1)\n    var sURLVariables = sPageURL.split('&')\n    for (var i = 0; i < sURLVariables.length; i++)\n    {\n        var sParameterName = sURLVariables[i].split('=')\n        if (sParameterName[0] === sParam)\n        {\n            return sParameterName[1]\n        }\n    }\n}\n","// Utility functions\nexport const escapeHtml = (unsafe) =>\n  unsafe\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#039;\");\n\nexport const truncateWithTooltip = (value, maxLength = 200) => {\n  if (value.length <= maxLength) return value;\n\n  const truncated = value.substring(0, maxLength) + \"...\";\n  return `<div data-hover-text=\"${escapeHtml(value)}\">${escapeHtml(truncated)}</div>`;\n};\n\nexport const formatLabel = (key: string) => {\n  return key\n    .replace(/_/g, ' ')\n    .replace(/\\b\\w/g, char => char.toUpperCase())\n}","import * as R from 'ramda'\n\nimport {\n  assignWith,\n  isFunction,\n} from 'lodash'\n\nimport { Dispatch } from \"redux\";\n\nimport { generateReducer, generateActions } from './itemReducer'\n\nimport { mergeStates } from '../helpers/Doc/documentUserState'\n\nconst itemKey = 'documentUserState'\nconst endpoint = 'api/v2/document_user_states/'\n\nexport function generateDocumentUserStateActions(id: ItemId) {\n  const documentUserStateActions = generateActions<DocumentUserState, DocumentUserStateExtraData>(itemKey, id, endpoint, {}, {editDataMergeFunction: editDataMergeFunction})\n\n  return {\n    startNewDocumentUserState: documentUserStateActions.startNewItem,\n    cancelNewDocumentUserState: documentUserStateActions.cancelNewItem,\n    startEditDocumentUserState: documentUserStateActions.startEditItem,\n    cancelEditDocumentUserState: documentUserStateActions.cancelEditItem,\n    setAllDataWithFunctionDocumentUserState: documentUserStateActions.setAllDataWithFunctionItem,\n    setSyncDataDocumentUserState: documentUserStateActions.setSyncDataItem,\n    setSyncDataWithFunctionDocumentUserState: documentUserStateActions.setSyncDataWithFunctionItem,\n    setEditDataDocumentUserState: documentUserStateActions.setEditDataItem,\n    setEditDataWithFunctionDocumentUserState: documentUserStateActions.setEditDataWithFunctionItem,\n    resetEditDataDocumentUserState: documentUserStateActions.resetEditDataItem,\n    setExtraDataDocumentUserState: documentUserStateActions.setExtraDataItem,\n    setExtraDataWithFunctionDocumentUserState: documentUserStateActions.setExtraDataWithFunctionItem,\n    resetExtraDataDocumentUserState: documentUserStateActions.resetExtraDataItem,\n    loadDocumentUserState: documentUserStateActions.loadItem,\n    createDocumentUserState: documentUserStateActions.createItem,\n    updateDocumentUserState: documentUserStateActions.updateItem,\n    destroyDocumentUserState: documentUserStateActions.destroyItem,\n    loadIfNeededDocumentUserState: documentUserStateActions.loadIfNeededItem,\n    documentUserStateFromState: documentUserStateActions.itemFromState,\n    documentUserStateSyncDataFromState: documentUserStateActions.itemSyncDataFromState,\n    documentUserStateSyncMetaFromState: documentUserStateActions.itemSyncMetaFromState,\n    documentUserStateEditDataFromState: documentUserStateActions.itemEditDataFromState,\n    documentUserStateMergedDataFromState: documentUserStateActions.itemMergedDataFromState,\n    documentUserStateExtraDataFromState: documentUserStateActions.itemExtraDataFromState,\n    addStateDocumentUserState: (state: UserStateStripped, callback?: () => void) => addStateDocumentUserState(id, state, callback)\n  }\n}\n\nexport const documentUserStateCollectionReducer = generateReducer<DocumentUserState, DocumentUserStateExtraData>(itemKey);\n\nfunction editDataMergeFunction(dusOld: DocumentUserState, dusNew: Partial<DocumentUserState>) {\n  return assignWith({}, dusOld, dusNew, (valueDataOld, valueDataNew, key) => {\n    if (key === 'state') {\n      return mergeStates(valueDataOld, valueDataNew)\n    } else {\n      return valueDataNew || valueDataOld\n    }\n  })\n}\n\nexport function addStateDocumentUserState(id: ItemId, state: UserStateStripped, callback?: () => void) {\n  return (dispatch: Dispatch, getState: () => ReducerState) => {\n    const documentUserStateActions = generateDocumentUserStateActions(id)\n\n    let mergedDocumentUserState = documentUserStateActions.documentUserStateMergedDataFromState(getState())\n    let editDocumentUserState = documentUserStateActions.documentUserStateEditDataFromState(getState()) || {}\n\n    let mergedState = mergedDocumentUserState.state || {}\n    let editState = editDocumentUserState.state || {}\n\n    let newState = R.mapObjIndexed((nodeData, uid, obj1) => {\n      return R.mapObjIndexed((value, key, obj2) => {\n        let newValue = isFunction(value) ? value(R.path([uid, key, 'value'], mergedState)) : value\n        return {value: newValue, updatedAt: (new Date).getTime()}\n      }, nodeData)\n    }, state)\n\n    dispatch(documentUserStateActions.setEditDataDocumentUserState({state: mergeStates(editState, newState)}))\n    dispatch(documentUserStateActions.updateDocumentUserState() as any)\n\n    if (callback) {\n      callback()\n    }\n  }\n}\n","import { generateReducer, generateActions } from './itemReducer'\n\nconst itemKey = 'document'\nconst endpoint = 'api/v2/documents/'\n\nexport function generateDocumentActions(id: ItemId) {\n  const documentActions = generateActions<Document, DocumentExtraData>(itemKey, id, endpoint)\n\n  return {\n    startNewDocument: documentActions.startNewItem,\n    cancelNewDocument: documentActions.cancelNewItem,\n    startEditDocument: documentActions.startEditItem,\n    cancelEditDocument: documentActions.cancelEditItem,\n    setAllDataWithFunctionDocument: documentActions.setAllDataWithFunctionItem,\n    setSyncDataDocument: documentActions.setSyncDataItem,\n    setSyncDataWithFunctionDocument: documentActions.setSyncDataWithFunctionItem,\n    setEditDataDocument: documentActions.setEditDataItem,\n    setEditDataWithFunctionDocument: documentActions.setEditDataWithFunctionItem,\n    resetEditDataDocument: documentActions.resetEditDataItem,\n    setExtraDataDocument: documentActions.setExtraDataItem,\n    setExtraDataWithFunctionDocument: documentActions.setExtraDataWithFunctionItem,\n    resetExtraDataDocument: documentActions.resetExtraDataItem,\n    loadDocument: documentActions.loadItem,\n    createDocument: documentActions.createItem,\n    updateDocument: documentActions.updateItem,\n    destroyDocument: documentActions.destroyItem,\n    loadIfNeededDocument: documentActions.loadIfNeededItem,\n    documentFromState: documentActions.itemFromState,\n    documentSyncDataFromState: documentActions.itemSyncDataFromState,\n    documentSyncMetaFromState: documentActions.itemSyncMetaFromState,\n    documentEditDataFromState: documentActions.itemEditDataFromState,\n    documentMergedDataFromState: documentActions.itemMergedDataFromState,\n    documentExtraDataFromState: documentActions.itemExtraDataFromState,\n\n  }\n}\n\nexport const documentCollectionReducer = generateReducer<Document, DocumentExtraData>(itemKey);\n","import {\n  assign,\n  camelCase,\n  mapKeys,\n  omit,\n  snakeCase,\n  upperFirst,\n  pick,\n} from 'lodash'\n\nimport axios from 'axios'\n\nimport * as pluralize from 'pluralize';\n\nimport { Dispatch, AnyAction } from \"redux\";\nimport { ThunkAction } from 'redux-thunk'\n\nimport {full_url} from '../helpers/url'\n\nimport { updateProgress } from '../helpers/progressHelper';\n\nexport const LIST_LOAD = 'LIST_LOAD'\n\nexport const SEED = 'relier-frontend/item/SEED'\nexport const LOAD = 'relier-frontend/item/LOAD'\nexport const CREATE = 'relier-frontend/item/CREATE'\nexport const UPDATE = 'relier-frontend/item/UPDATE'\nexport const DESTROY = 'relier-frontend/item/DESTROY'\n\nexport const NEW_START = 'relier-frontend/item/NEW_START'\nexport const NEW_CANCEL = 'relier-frontend/item/NEW_CANCEL'\nexport const EDIT_START = 'relier-frontend/item/EDIT_START'\nexport const EDIT_CANCEL = 'relier-frontend/item/EDIT_CANCEL'\n\nexport const SET_ALL_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_ALL_DATA_WITH_FUNCTION'\n\nexport const SET_SYNC_DATA_FIELDS = 'relier-frontend/item/SET_SYNC_DATA_FIELDS'\nexport const SET_SYNC_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_SYNC_DATA_WITH_FUNCTION'\n\nexport const SET_EDIT_DATA_FIELDS = 'relier-frontend/item/SET_EDIT_DATA_FIELDS'\nexport const SET_EDIT_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_EDIT_DATA_WITH_FUNCTION'\nexport const RESET_EDIT_DATA = 'relier-frontend/item/RESET_EDIT_DATA'\n\nexport const SET_EXTRA_DATA_FIELDS = 'relier-frontend/item/SET_EXTRA_DATA_FIELDS'\nexport const SET_EXTRA_DATA_WITH_FUNCTION = 'relier-frontend/item/SET_EXTRA_DATA_WITH_FUNCTION'\nexport const RESET_EXTRA_DATA = 'relier-frontend/item/RESET_EXTRA_DATA'\n\nexport function defaultInTransformer<Item>(data: object): Item {\n  return mapKeys(data, (value, key) => camelCase(key)) as Item // TODO: Forced narrowing to Item\n}\n\nconst initialCollectionState = {}\n\nfunction collectionReducer<Item extends {id: number}, ItemExtraData>(state: ItemCollectionState<Item, ItemExtraData> = initialCollectionState, action: Partial<ItemReducerAction<Item>> = {}, options: ReducerOptions<Item> ={}) { // TODO: REMOVE Partial from Partial<ItemReducerAction<Item>>\n  const {\n    inTransformer=defaultInTransformer,\n    itemType=\"noItem\",\n    keepKeysOnUpdateFulfilled,\n  } = options\n\n  if (!action.meta || !action.meta.itemType || action.meta.itemType !== itemType) {\n    return state\n  }\n\n  switch (action.type) {\n    case SEED:\n    case NEW_START:\n    case LOAD + '_PENDING':\n      return {...state,\n        [action.meta.id]: itemReducer(state[action.meta.id], action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n      }\n    case LIST_LOAD + '_FULFILLED':\n      let newState: ItemCollectionState<Item, ItemExtraData> = {}\n\n      action.payload.data.forEach((item: Item) => {\n        newState[item.id] = {\n          syncData: inTransformer({...item}),\n          syncMeta: {\n            isSyncing: false,\n            lastSyncedAt: Date.now(),\n            errors: [],\n          },\n          extraData: {},\n        }\n      })\n\n      return {...state,\n        ...newState\n      }\n    case CREATE + '_FULFILLED':\n      return {...(omit(state, [action.meta.id])),\n        [action.payload.id]: itemReducer(state[action.meta.id], action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n      }\n    case NEW_CANCEL:\n    case DESTROY + '_FULFILLED':\n      return omit(state, [action.meta.id])\n    case EDIT_START:\n    case EDIT_CANCEL:\n    case LOAD + '_FULFILLED':\n    case LOAD + '_REJECTED':\n    case CREATE + '_PENDING':\n    case CREATE + '_REJECTED':\n    case UPDATE + '_PENDING':\n    case UPDATE + '_FULFILLED':\n    case UPDATE + '_REJECTED':\n    case DESTROY + '_PENDING':\n    case DESTROY + '_REJECTED':\n    case SET_ALL_DATA_WITH_FUNCTION:\n    case SET_SYNC_DATA_FIELDS:\n    case SET_SYNC_DATA_WITH_FUNCTION:\n    case SET_EDIT_DATA_FIELDS:\n    case SET_EDIT_DATA_WITH_FUNCTION:\n    case RESET_EDIT_DATA:\n    case SET_EXTRA_DATA_FIELDS:\n    case SET_EXTRA_DATA_WITH_FUNCTION:\n    case RESET_EXTRA_DATA:\n    default:\n      if (state[action.meta.id]) {\n        return {...state,\n          [action.meta.id]: itemReducer(state[action.meta.id], action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n        }\n      } else {\n        return state\n      }\n  }\n}\n\nconst initialItemState = {extraData: {}}\n\nfunction itemReducer<Item, ItemExtraData>(state: ReducerItem<Item, ItemExtraData> = initialItemState, action: Partial<ItemReducerAction<Item>> = {}, options: ReducerOptions<Item> = {}): ReducerItem<Item, ItemExtraData> { // TODO: REMOVE Partial from Partial<ItemReducerAction<Item>>\n  const {\n    inTransformer=defaultInTransformer,\n    itemType,\n    keepKeysOnUpdateFulfilled,\n  } = options\n\n  if (!action.meta || !action.meta.itemType || action.meta.itemType !== itemType) {\n    return state\n  }\n\n  switch (action.type) {\n    case EDIT_START:\n      return {...state,\n        editData: {}\n      }\n    case EDIT_CANCEL:\n      return omit(state, ['editData'])\n    case LOAD + '_PENDING':\n    case CREATE + '_PENDING':\n    case UPDATE + '_PENDING':\n    case DESTROY + '_PENDING':\n      return {...state,\n        syncMeta: {\n          ...state.syncMeta,\n          isSyncing: true,\n          editSinceStartOfLastSync: false,\n        },\n      }\n    case SEED:\n    case LOAD + '_FULFILLED':\n      return {...state,\n        syncData: inTransformer({...action.payload.data}),\n        syncMeta: {\n          isSyncing: false,\n          lastSyncedAt: Date.now(),\n          errors: [],\n        },\n      }\n    case CREATE + '_FULFILLED':\n    case UPDATE + '_FULFILLED':\n      // THIS SHOULD NOT BE IN THE REDUCER\n      // REMOVE WHEN PROGRESS BAR GETS REDESIGNED\n      updateProgress(action.payload.data);\n      return {...state,\n        syncData: inTransformer({...action.payload.data}),\n        syncMeta: {\n          isSyncing: false,\n          lastSyncedAt: Date.now(),\n          errors: [],\n        },\n        editData: keepKeysOnUpdateFulfilled && state.editData && state.syncMeta?.editSinceStartOfLastSync ? pick(state.editData, keepKeysOnUpdateFulfilled) : {},\n      }\n    case LOAD + '_REJECTED':\n    case CREATE + '_REJECTED':\n    case UPDATE + '_REJECTED':\n    case DESTROY + '_REJECTED':\n      return {...state,\n        syncMeta: {\n          ...state.syncMeta,\n          isSyncing: false,\n          errors: [action.payload.message]\n        }\n      }\n    case SET_ALL_DATA_WITH_FUNCTION:\n      return {...state,\n        ...action.payload.fn(state.syncData, state.editData, state.extraData),\n        syncMeta: {\n          ...state.syncMeta,\n          editSinceStartOfLastSync: true,\n        },\n      }\n    case SET_SYNC_DATA_FIELDS:\n      return {...state,\n        syncData: {...state.syncData,\n          ...action.payload.fields\n        }\n      }\n    case SET_SYNC_DATA_WITH_FUNCTION:\n      return {...state,\n        syncData: action.payload.fn(state.syncData, state.editData, state.extraData)\n      }\n    case SET_EDIT_DATA_FIELDS:\n      return {...state,\n        editData: {...state.editData,\n          ...action.payload.fields\n        },\n        syncMeta: {\n          ...state.syncMeta,\n          editSinceStartOfLastSync: true,\n        },\n      }\n    case SET_EDIT_DATA_WITH_FUNCTION:\n      return {...state,\n        editData: action.payload.fn(state.editData, state.syncData, state.extraData),\n        syncMeta: {\n          ...state.syncMeta,\n          editSinceStartOfLastSync: true,\n        },\n      }\n    case RESET_EDIT_DATA:\n      return {...state,\n        editData: {},\n      }\n    case SET_EXTRA_DATA_FIELDS:\n      return {...state,\n        extraData: {...state.extraData,\n          ...action.payload.fields\n        }\n      }\n    case SET_EXTRA_DATA_WITH_FUNCTION:\n      return {...state,\n        extraData: action.payload.fn(state.extraData, state.syncData, state.editData)\n      }\n    case RESET_EXTRA_DATA:\n      return {...state,\n        extraData: {},\n      }\n    case NEW_START:\n      return {\n        editData: action.meta.newItemState,\n        extraData: {},\n      }\n    default:\n      return state\n  }\n}\n\n\nexport function defaultOutTransformer<Item extends object>(data: Item): object {\n  return mapKeys(data, (value, key) => snakeCase(key))\n}\n\nexport function startNewItem<Item>(itemType: ItemType, newItemState: Partial<Item>, tempId: ItemTempId) {\n  return {\n    type: NEW_START,\n    meta: {\n      itemType: itemType,\n      newItemState: newItemState,\n      id: tempId\n    },\n  }\n}\n\nexport function cancelNewItem(itemType: ItemType, tempId: ItemId) {\n  return {\n    type: NEW_CANCEL,\n    meta: {\n      itemType: itemType,\n      id: tempId\n    },\n  }\n}\n\nexport function seedItem<Item>(itemType: ItemType, id: ItemId, data: Item) {\n  return {\n    type: SEED,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      data: data\n    }\n  }\n}\n\nexport function startEditItem(itemType: ItemType, id: ItemId) {\n  return {\n    type: EDIT_START,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n  }\n}\n\nexport function cancelEditItem(itemType: ItemType, id: ItemId) {\n  return {\n    type: EDIT_CANCEL,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n  }\n}\n\nexport function setAllDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => ReducerItem<Item, ItemExtraData>) {\n  return {\n    type: SET_ALL_DATA_WITH_FUNCTION,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      fn: fn\n    }\n  }\n}\n\nexport function setSyncDataItem<Item>(itemType: ItemType, id: ItemId, fields: Partial<Item>) {\n  return {\n    type: SET_SYNC_DATA_FIELDS,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      fields: fields\n    }\n  }\n}\n\nexport function setSyncDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => Item) {\n  return {\n    type: SET_SYNC_DATA_WITH_FUNCTION,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      fn: fn\n    }\n  }\n}\n\nexport function setEditDataItem<Item>(itemType: ItemType, id: ItemId, fields: Partial<Item>) {\n  return {\n    type: SET_EDIT_DATA_FIELDS,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      fields: fields\n    }\n  }\n}\n\nexport function setEditDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (editData: Partial<Item>, syncData: Item, extraData: ItemExtraData) => Partial<Item>) {\n  return {\n    type: SET_EDIT_DATA_WITH_FUNCTION,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      fn: fn\n    }\n  }\n}\n\nexport function resetEditDataItem(itemType: ItemType, id: ItemId) {\n  return {\n    type: RESET_EDIT_DATA,\n    meta: {\n      itemType: itemType,\n      id: id\n    }\n  }\n}\n\nexport function setExtraDataItem(itemType: ItemType, id: ItemId, fields: Partial<ExtraData>) {\n  return {\n    type: SET_EXTRA_DATA_FIELDS,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      fields: fields\n    }\n  }\n}\n\nexport function setExtraDataWithFunction<Item, ItemExtraData>(itemType: ItemType, id: ItemId, fn: (extraData: ItemExtraData, syncData: Item, editData: Partial<Item>) => ExtraData) {\n  return {\n    type: SET_EXTRA_DATA_WITH_FUNCTION,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: {\n      fn: fn\n    }\n  }\n}\n\nexport function resetExtraDataItem(itemType: ItemType, id: ItemId) {\n  return {\n    type: RESET_EXTRA_DATA,\n    meta: {\n      itemType: itemType,\n      id: id\n    }\n  }\n}\n\nexport function loadItem(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId) {\n  return {\n    type: LOAD,\n    meta: {\n      itemType,\n      id,\n    },\n    payload: axios({\n      url: full_url('/' + endpoint + (id || '')),\n      method: 'get',\n      withCredentials: true,\n      headers: {'Accept': 'application/json'}\n    }),\n  }\n}\n\nfunction createItemWithData<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, tempId: ItemTempId, data: Partial<Item>, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer) {\n  return {\n    type: CREATE,\n    meta: {\n      itemType,\n      tempId,\n    },\n    payload: axios({\n      url: full_url('/' + endpoint),\n      data: outTransformer(data),\n      method: 'post',\n      withCredentials: true,\n      headers: {'Accept': 'application/json'}\n    })\n  }\n}\n\nexport function createItem<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, tempId: ItemTempId, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer, afterDispatch) {\n  return (dispatch: Dispatch, getState: () => ReducerState) => {\n    let state = getState()\n    let item = itemFromState<Item, unknown>(itemType, tempId, state)\n\n    const response: any = dispatch(createItemWithData(itemType, endpoint, tempId, item.editData || {}, outTransformer))\n\n    if (afterDispatch) {\n      response.then((data) => afterDispatch(data))\n    }\n  }\n}\n\nexport function updateItemWithData<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId, data: Partial<Item>, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer) {\n  return {\n    type: UPDATE,\n    meta: {\n      itemType,\n      id,\n    },\n    payload: axios({\n      url: full_url('/' + endpoint + (id || '')),\n      data: {[snakeCase(itemType)]: outTransformer(data)},\n      method: 'put',\n      withCredentials: true,\n      headers: {'Accept': 'application/json'}\n    })\n  }\n}\n\nexport function updateItem<Item extends object>(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId, outTransformer: (outItem: Partial<Item>) => object=defaultOutTransformer): ThunkAction<void, ReducerState, unknown, AnyAction> {\n  return (dispatch: Dispatch, getState: () => ReducerState) => {\n    let state = getState()\n    let item = itemFromState<Item, unknown>(itemType, id, state)\n\n    dispatch(updateItemWithData(itemType, endpoint, id, item.editData || {}, outTransformer))\n  }\n}\n\nexport function destroyItem(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId) {\n  return {\n    type: DESTROY,\n    meta: {\n      itemType: itemType,\n      id: id\n    },\n    payload: axios({\n      url: full_url('/' + endpoint + (id || '')),\n      method: 'delete',\n      withCredentials: true,\n      headers: {'Accept': 'application/json'}\n    })\n  }\n}\n\nexport function shouldLoadItem<Item, ItemExtraData>(itemType: ItemType, state: ReducerState, id: ItemId) {\n  const item = itemFromState<Item, ItemExtraData>(itemType, id, state)\n  if (!item) {\n    return true\n  } else if (item.syncMeta?.isSyncing) {\n    return false\n  } else if (item.syncMeta?.lastSyncedAt && (Date.now() - item.syncMeta?.lastSyncedAt > 30000)) {\n    return true\n  } else {\n    return false\n  }\n}\n\nexport function loadIfNeededItem(itemType: ItemType, endpoint: ItemEndpoint, id: ItemId) {\n  return (dispatch: Dispatch, getState: () => ReducerState) => {\n    if (shouldLoadItem(itemType, getState(), id)) {\n      return dispatch(loadItem(itemType, endpoint, id))\n    }\n  }\n}\n\nexport function itemFromState<Item, ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState): ReducerItem<Item, ItemExtraData> {\n  return state[pluralize(itemType)] && state[pluralize(itemType)][id]\n}\n\nexport function itemSyncDataFromState<Item>(itemType: ItemType, id: ItemId, state: ReducerState) {\n  let item = itemFromState<Item, unknown>(itemType, id, state)\n  if (item) {\n    return item.syncData\n  }\n}\n\nexport function itemSyncMetaFromState<Item, ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState) {\n  let item = itemFromState<Item, ItemExtraData>(itemType, id, state)\n  if (item) {\n    return item.syncMeta\n  }\n}\n\nexport function itemEditDataFromState<Item>(itemType: ItemType, id: ItemId, state: ReducerState) {\n  let item = itemFromState<Item, unknown>(itemType, id, state)\n  if (item) {\n    return item.editData\n  }\n}\n\nexport function itemExtraDataFromState<ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState) {\n  let item = itemFromState<unknown, ItemExtraData>(itemType, id, state)\n  if (item) {\n    return item.extraData\n  }\n}\n\nexport function itemMergedDataFromState<Item>(itemType: ItemType, id: ItemId, state: ReducerState, mergeFunction=(data?: Item, editData?: Partial<Item>) => assign({}, data, editData)) {\n  let item = itemFromState<Item, unknown>(itemType, id, state)\n  if (item ) {\n    return mergeFunction(item.syncData, item.editData)\n  }\n}\n\nexport function itemFromStatePlus<Item, ItemExtraData>(itemType: ItemType, id: ItemId, state: ReducerState, mergeFunction=(data?: Item, editData?: Partial<Item>) => assign({}, data, editData)) {\n  let item = itemFromState<Item, ItemExtraData>(itemType, id, state)\n  if (item) {\n    return {\n      id,\n      ...item,\n      mergedData: mergeFunction(item.syncData, item.editData)\n    }\n  } else {\n    return {\n      id,\n      extraData: {},\n      mergedData: undefined,\n    }\n  }\n}\n\n\nexport function generateReducer<Item extends {id: number}, ItemExtraData extends object>(\n  itemType: ItemType,\n  options: GenerateReducerOptions<Item> = {},\n) {\n  const {\n    inTransformer = defaultInTransformer,\n    keepKeysOnUpdateFulfilled,\n  } = options\n\n  return (state: ItemCollectionState<Item, ItemExtraData>, action: ItemReducerAction<Item>) => collectionReducer(state, action, {inTransformer, itemType, keepKeysOnUpdateFulfilled})\n}\n\nexport function generateActions<Item extends object, ItemExtraData extends object>(\n  itemType: ItemType,\n  id: ItemId,\n  endpoint: ItemEndpoint,\n  newItemState: Partial<Item> = {},\n  options: GenerateActionOptions<Item> = {},\n) {\n  const {\n    outTransformer = defaultOutTransformer,\n    editDataMergeFunction,\n  } = options\n\n  return {\n    startNewItem: () => startNewItem(itemType, newItemState, id),\n    cancelNewItem: () => cancelNewItem(itemType, id),\n    startEditItem: () => startEditItem(itemType, id),\n    cancelEditItem: () => cancelEditItem(itemType, id),\n    setAllDataWithFunctionItem: (fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => ReducerItem<Item, ItemExtraData>) => setAllDataWithFunction(itemType, id, fn),\n    setSyncDataItem: (fields: Partial<Item>) => setSyncDataItem(itemType, id, fields),\n    setSyncDataWithFunctionItem: (fn: (syncData: Item, editData: Partial<Item>, extraData: ItemExtraData) => Item) => setSyncDataWithFunction(itemType, id, fn),\n    setEditDataItem: (fields: Partial<Item>) => setEditDataItem(itemType, id, fields),\n    setEditDataWithFunctionItem: (fn: (editData: Partial<Item>, syncData: Item, extraData: ItemExtraData) => Partial<Item>) => setEditDataWithFunction(itemType, id, fn),\n    resetEditDataItem: () => resetEditDataItem(itemType, id),\n    setExtraDataItem: (fields: Partial<ItemExtraData>) => setExtraDataItem(itemType, id, fields),\n    setExtraDataWithFunctionItem: (fn: (extraData: ItemExtraData, syncData: Item, editData: Partial<Item>) => ExtraData) => setExtraDataWithFunction(itemType, id, fn),\n    resetExtraDataItem: () => resetExtraDataItem(itemType, id),\n    loadItem: () => loadItem(itemType, endpoint, id),\n    createItem: (afterDispatch=null) => createItem(itemType, endpoint, id, outTransformer, afterDispatch),\n    updateItem: () => updateItem(itemType, endpoint, id, outTransformer),\n    destroyItem: () => destroyItem(itemType, endpoint, id),\n    loadIfNeededItem: () => loadIfNeededItem(itemType, endpoint, id),\n    itemFromState: (state: ReducerState) => itemFromState(itemType, id, state),\n    itemSyncDataFromState: (state: ReducerState) => itemSyncDataFromState<Item>(itemType, id, state),\n    itemSyncMetaFromState: (state: ReducerState) => itemSyncMetaFromState(itemType, id, state),\n    itemEditDataFromState: (state: ReducerState) => itemEditDataFromState<Item>(itemType, id, state),\n    itemMergedDataFromState: (state: ReducerState) => itemMergedDataFromState<Item>(itemType, id, state, editDataMergeFunction),\n    itemExtraDataFromState: (state: ReducerState) => itemExtraDataFromState<ItemExtraData>(itemType, id, state),\n  }\n}\n\n\n","import { generateReducer, generateActions, itemFromStatePlus } from './itemReducer'\n\nconst itemKey = 'learningObjective'\nconst endpoint = 'learning_objectives/'\n\nexport function generateLearningObjectiveActions(id: ItemId) {\n  const learningObjectiveActions = generateActions<LearningObjective, LearningObjectiveExtraData>(itemKey, id, endpoint)\n\n  return {\n    startNewLearningObjective: learningObjectiveActions.startNewItem,\n    cancelNewLearningObjective: learningObjectiveActions.cancelNewItem,\n    startEditLearningObjective: learningObjectiveActions.startEditItem,\n    cancelEditLearningObjective: learningObjectiveActions.cancelEditItem,\n    setAllDataWithFunctionLearningObjective: learningObjectiveActions.setAllDataWithFunctionItem,\n    setSyncDataLearningObjective: learningObjectiveActions.setSyncDataItem,\n    setSyncDataWithFunctionLearningObjective: learningObjectiveActions.setSyncDataWithFunctionItem,\n    setEditDataLearningObjective: learningObjectiveActions.setEditDataItem,\n    setEditDataWithFunctionLearningObjective: learningObjectiveActions.setEditDataWithFunctionItem,\n    resetEditDataLearningObjective: learningObjectiveActions.resetEditDataItem,\n    setExtraDataLearningObjective: learningObjectiveActions.setExtraDataItem,\n    setExtraDataWithFunctionLearningObjective: learningObjectiveActions.setExtraDataWithFunctionItem,\n    resetExtraDataLearningObjective: learningObjectiveActions.resetExtraDataItem,\n    loadLearningObjective: learningObjectiveActions.loadItem,\n    createLearningObjective: learningObjectiveActions.createItem,\n    updateLearningObjective: learningObjectiveActions.updateItem,\n    destroyLearningObjective: learningObjectiveActions.destroyItem,\n    loadIfNeededLearningObjective: learningObjectiveActions.loadIfNeededItem,\n    learningObjectiveFromState: learningObjectiveActions.itemFromState,\n    learningObjectiveSyncDataFromState: learningObjectiveActions.itemSyncDataFromState,\n    learningObjectiveSyncMetaFromState: learningObjectiveActions.itemSyncMetaFromState,\n    learningObjectiveEditDataFromState: learningObjectiveActions.itemEditDataFromState,\n    learningObjectiveMergedDataFromState: learningObjectiveActions.itemMergedDataFromState,\n    learningObjectiveExtraDataFromState: learningObjectiveActions.itemExtraDataFromState,\n  }\n}\n\nexport function learningObjectiveFromStatePlus(id: ItemId, state: ReducerState) {\n  return itemFromStatePlus<LearningObjective, LearningObjectiveExtraData>(itemKey, id, state)\n}\n\nexport const learningObjectiveCollectionReducer = generateReducer<LearningObjective, LearningObjectiveExtraData>(itemKey);\n","import { generateReducer, generateActions } from './itemReducer'\n\nconst itemKey = 'reusableObject'\nconst endpoint = 'reusable_objects/'\n\nexport function generateReusableObjectActions(id: ItemId) {\n  const reusableObjectActions = generateActions<ReusableObject, ReusableObjectExtraData>(itemKey, id, endpoint)\n\n  return {\n    startNewReusableObject: reusableObjectActions.startNewItem,\n    cancelNewReusableObject: reusableObjectActions.cancelNewItem,\n    startEditReusableObject: reusableObjectActions.startEditItem,\n    cancelEditReusableObject: reusableObjectActions.cancelEditItem,\n    setAllDataWithFunctionReusableObject: reusableObjectActions.setAllDataWithFunctionItem,\n    setSyncDataReusableObject: reusableObjectActions.setSyncDataItem,\n    setSyncDataWithFunctionReusableObject: reusableObjectActions.setSyncDataWithFunctionItem,\n    setEditDataReusableObject: reusableObjectActions.setEditDataItem,\n    setEditDataWithFunctionReusableObject: reusableObjectActions.setEditDataWithFunctionItem,\n    resetEditDataReusableObject: reusableObjectActions.resetEditDataItem,\n    setExtraDataReusableObject: reusableObjectActions.setExtraDataItem,\n    setExtraDataWithFunctionReusableObject: reusableObjectActions.setExtraDataWithFunctionItem,\n    resetExtraDataReusableObject: reusableObjectActions.resetExtraDataItem,\n    loadReusableObject: reusableObjectActions.loadItem,\n    createReusableObject: reusableObjectActions.createItem,\n    updateReusableObject: reusableObjectActions.updateItem,\n    destroyReusableObject: reusableObjectActions.destroyItem,\n    loadIfNeededReusableObject: reusableObjectActions.loadIfNeededItem,\n    reusableObjectFromState: reusableObjectActions.itemFromState,\n    reusableObjectSyncDataFromState: reusableObjectActions.itemSyncDataFromState,\n    reusableObjectSyncMetaFromState: reusableObjectActions.itemSyncMetaFromState,\n    reusableObjectEditDataFromState: reusableObjectActions.itemEditDataFromState,\n    reusableObjectMergedDataFromState: reusableObjectActions.itemMergedDataFromState,\n    reusableObjectExtraDataFromState: reusableObjectActions.itemExtraDataFromState,\n\n  }\n}\n\nexport const reusableObjectCollectionReducer = generateReducer<ReusableObject, ReusableObjectExtraData>(itemKey);\n","// EDITOR PANELS\nexport const AET_ADMIN_TOOLS  = 'relier-frontend/ui/reasoningTool/AET_ADMIN_TOOLS'\nexport const ASSESSMENT_QUESTION_DATA  = 'relier-frontend/ui/reasoningTool/ASSESSMENT_QUESTION_DATA'\nexport const QUESTION_DETAILS = 'relier-frontend/ui/reasoningTool/QUESTION_DETAILS'\nexport const CASE_LEARNING_OBJECTIVES  = 'relier-frontend/ui/reasoningTool/CASE_LEARNING_OBJECTIVES'\nexport const CASE_TEACHING_POINTS  = 'relier-frontend/ui/reasoningTool/CASE_TEACHING_POINTS'\nexport const CASE_MAP  = 'relier-frontend/ui/reasoningTool/CASE_MAP'\nexport const CASE_METADATA  = 'relier-frontend/ui/reasoningTool/CASE_METADATA'\nexport const EDITORS_CHECKLIST  = 'relier-frontend/ui/reasoningTool/EDITORS_CHECKLIST'\nexport const SUMMARY_OF_EDITS  = 'relier-frontend/ui/reasoningTool/SUMMARY_OF_EDITS'\nexport const STUDENT_FEEDBACK  = 'relier-frontend/ui/reasoningTool/STUDENT_FEEDBACK'\n\n// STUDENT PANELS\nexport const BOOKMARKS = 'relier-frontend/ui/reasoningTool/BOOKMARKS'\nexport const DIAGNOSES = 'relier-frontend/ui/reasoningTool/DIAGNOSES'\nexport const FEEDBACK = 'relier-frontend/ui/reasoningTool/FEEDBACK'\nexport const FINDINGS = 'relier-frontend/ui/reasoningTool/FINDINGS'\nexport const LABVALUES = 'relier-frontend/ui/reasoningTool/LABVALUES'\nexport const NOTES = 'relier-frontend/ui/reasoningTool/NOTES'\n\n//Action Type Definitions\nexport const TOGGLE_PANEL = 'relier-frontend/ui/reasoningTool/TOGGLE_PANEL'\nexport const OPEN_PANEL = 'relier-frontend/ui/reasoningTool/OPEN_PANEL'\nexport const TOGGLE_PANEL_DELETING = 'relier-frontend/ui/reasoningTool/TOGGLE_PANEL_DELETING'\nexport const PANEL_NODE_EDIT_START = 'relier-frontend/ui/reasoningTool/PANEL_NODE_EDIT_START'\nexport const PANEL_NODE_EDIT_END = 'relier-frontend/ui/reasoningTool/PANEL_NODE_EDIT_END'\nexport const RESET = 'relier-frontend/ui/reasoningTool/RESET'\n\n//Intial State\nconst initialState = {\n}\n\n//Reducer\nexport default function reducer(state:any = initialState, action:any = {}) { // TODO: Remove any\n  switch (action.type) {\n    case TOGGLE_PANEL:\n      if (state.activePanel === action.payload.panelType) {\n        return {...state, activePanel: undefined, isPanelDeleting: false, activeEditNodeUid: null}\n      } else {\n        return {...state, activePanel: action.payload.panelType, isPanelDeleting: false, activeEditNodeUid: null}\n      }\n    case OPEN_PANEL:\n      return {...state, activePanel: action.payload.panelType, isPanelDeleting: false, activeEditNodeUid: null}\n    case TOGGLE_PANEL_DELETING:\n      return {...state, isPanelDeleting: !state.isPanelDeleting}\n    case PANEL_NODE_EDIT_START:\n      return {...state, activeEditNodeUid: action.payload.nodeUid}\n    case PANEL_NODE_EDIT_END:\n      if (state.activeEditNodeUid === action.payload.nodeUid) {\n        return {...state, activeEditNodeUid: null}\n      } else {\n        return state\n      }\n    case RESET:\n      return {...initialState}\n    default:\n      return state\n  }\n}\n\n//Actions\nexport function togglePanel(panelType) {\n  return {\n    type: TOGGLE_PANEL,\n    payload: {panelType}\n  }\n}\n\nexport function openPanel(panelType) {\n  return {\n    type: OPEN_PANEL,\n    payload: {panelType}\n  }\n}\n\nexport function togglePanelDeleting() {\n  return {\n    type: TOGGLE_PANEL_DELETING,\n  }\n}\n\nexport function panelNodeEditStart(nodeUid: UID) {\n  return {\n    type: PANEL_NODE_EDIT_START,\n    payload: {nodeUid}\n  }\n}\n\nexport function panelNodeEditEnd(nodeUid: UID) {\n  return {\n    type: PANEL_NODE_EDIT_END,\n    payload: {nodeUid}\n  }\n}\n\nexport function reset() {\n  return {\n    type: RESET,\n  }\n}\n\nexport const reasoningToolActionCreators = {\n  togglePanel: togglePanel,\n  openPanel: openPanel,\n  togglePanelDeleting: togglePanelDeleting,\n  panelNodeEditStart: panelNodeEditStart,\n  panelNodeEditEnd: panelNodeEditEnd,\n  reset: reset,\n}\n","import {\n  camelCase,\n  mapKeys,\n} from 'lodash'\n\nimport { addMissingUids } from '../helpers/Doc/Functions/base'\n\nimport { generateReducer, generateActions, itemFromStatePlus } from './itemReducer'\n\nconst itemKey = 'variant'\nconst endpoint = 'variants/'\n\nfunction inTransformer(data) {\n  let transformedData = mapKeys(data, (value, key) => camelCase(key)) as Variant;\n  if (typeof transformedData.data !== \"string\") {\n    transformedData.data = addMissingUids(transformedData.data);\n  }\n\n  return transformedData\n}\n\nexport function generateVariantActions(id: ItemId) {\n  const variantActions = generateActions<Variant, VariantExtraData>(itemKey, id, endpoint)\n\n  return {\n    startNewVariant: variantActions.startNewItem,\n    cancelNewVariant: variantActions.cancelNewItem,\n    startEditVariant: variantActions.startEditItem,\n    cancelEditVariant: variantActions.cancelEditItem,\n    setAllDataWithFunctionVariant: variantActions.setAllDataWithFunctionItem,\n    setSyncDataVariant: variantActions.setSyncDataItem,\n    setSyncDataWithFunctionVariant: variantActions.setSyncDataWithFunctionItem,\n    setEditDataVariant: variantActions.setEditDataItem,\n    setEditDataWithFunctionVariant: variantActions.setEditDataWithFunctionItem,\n    resetEditDataVariant: variantActions.resetEditDataItem,\n    setExtraDataVariant: variantActions.setExtraDataItem,\n    setExtraDataWithFunctionVariant: variantActions.setExtraDataWithFunctionItem,\n    resetExtraDataVariant: variantActions.resetExtraDataItem,\n    loadVariant: variantActions.loadItem,\n    createVariant: variantActions.createItem,\n    updateVariant: variantActions.updateItem,\n    destroyVariant: variantActions.destroyItem,\n    loadIfNeededVariant: variantActions.loadIfNeededItem,\n    variantFromState: variantActions.itemFromState,\n    variantSyncDataFromState: variantActions.itemSyncDataFromState,\n    variantSyncMetaFromState: variantActions.itemSyncMetaFromState,\n    variantEditDataFromState: variantActions.itemEditDataFromState,\n    variantMergedDataFromState: variantActions.itemMergedDataFromState,\n    variantExtraDataFromState: variantActions.itemExtraDataFromState,\n  }\n}\n\nexport function variantFromStatePlus(id: ItemId, state: ReducerState) {\n  return itemFromStatePlus<Variant, VariantExtraData>(itemKey, id, state)\n}\n\nexport const variantCollectionReducer = generateReducer<Variant, VariantExtraData>(itemKey, {inTransformer: inTransformer, keepKeysOnUpdateFulfilled: [\"changeData\"]});;\n","import {\n  camelCase,\n  mapKeys,\n} from 'lodash'\n\nimport { addMissingUids } from '../helpers/Doc/Functions/base'\n\nimport { generateReducer, generateActions } from './itemReducer'\n\nconst itemKey = 'version'\nconst endpoint = 'api/v2/versions/'\n\nfunction inTransformer(data) {\n  let transformedData = mapKeys(data, (value, key) => camelCase(key)) as Version;\n  transformedData.data = addMissingUids(transformedData.data);\n\n  transformedData.changeAuthorIds = [] // TODO ADD BACK IN IDS\n\n  return transformedData\n}\n\nexport function generateVersionActions(id: ItemId) {\n  const versionActions = generateActions<Version, VersionExtraData>(itemKey, id, endpoint)\n\n  return {\n    startNewVersion: versionActions.startNewItem,\n    cancelNewVersion: versionActions.cancelNewItem,\n    startEditVersion: versionActions.startEditItem,\n    cancelEditVersion: versionActions.cancelEditItem,\n    setAllDataWithFunctionVersion: versionActions.setAllDataWithFunctionItem,\n    setSyncDataVersion: versionActions.setSyncDataItem,\n    setSyncDataWithFunctionVersion: versionActions.setSyncDataWithFunctionItem,\n    setEditDataVersion: versionActions.setEditDataItem,\n    setEditDataWithFunctionVersion: versionActions.setEditDataWithFunctionItem,\n    resetEditDataVersion: versionActions.resetEditDataItem,\n    setExtraDataVersion: versionActions.setExtraDataItem,\n    setExtraDataWithFunctionVersion: versionActions.setExtraDataWithFunctionItem,\n    resetExtraDataVersion: versionActions.resetExtraDataItem,\n    loadVersion: versionActions.loadItem,\n    createVersion: versionActions.createItem,\n    updateVersion: versionActions.updateItem,\n    destroyVersion: versionActions.destroyItem,\n    loadIfNeededVersion: versionActions.loadIfNeededItem,\n    versionFromState: versionActions.itemFromState,\n    versionSyncDataFromState: versionActions.itemSyncDataFromState,\n    versionSyncMetaFromState: versionActions.itemSyncMetaFromState,\n    versionEditDataFromState: versionActions.itemEditDataFromState,\n    versionMergedDataFromState: versionActions.itemMergedDataFromState,\n    versionExtraDataFromState: versionActions.itemExtraDataFromState,\n  }\n}\n\nexport const versionCollectionReducer = generateReducer<Version, VersionExtraData>(itemKey, {inTransformer: inTransformer, keepKeysOnUpdateFulfilled: [\"changeData\"]});\n","// EDITOR PANELS\nexport const SET_KEYS  = 'relier-frontend/docSetting/SET_KEY'\n\n//Intial State\nconst initialState = {\n}\n\n//Reducer\nexport default function reducer(state:any = initialState, action:any = {}) { // TODO: Remove any\n  switch (action.type) {\n    case SET_KEYS:\n      return {...state, ...action.payload.fields}\n    default:\n      return state\n  }\n}\n\n//Actions\nexport function setSettings(fields={}) {\n  return {\n    type: SET_KEYS,\n    payload: {fields}\n  }\n}\n\nexport function settingFromState(key: string, state: ReducerState) {\n  return state.docSettings[key]\n}\n","import { combineReducers } from 'redux'\n\nimport { documentCollectionReducer as documents } from './documents'\nimport { documentUserStateCollectionReducer as documentUserStates } from './documentUserStates'\nimport { learningObjectiveCollectionReducer as learningObjectives } from './learningObjectives'\nimport { reusableObjectCollectionReducer as reusableObjects } from './reusableObjects'\nimport { variantCollectionReducer as variants } from './variants'\nimport { versionCollectionReducer as versions } from './versions'\n\nimport docSettings from './docSettings';\nimport reasoningTool from './ui/reasoningTool'\n\nconst ui = combineReducers({\n  reasoningTool,\n})\n\nexport default combineReducers({\n  ui,\n\n  documents,\n  documentUserStates,\n  learningObjectives,\n  reusableObjects,\n  variants,\n  versions,\n  docSettings,\n})\n","import { applyMiddleware, createStore, compose } from 'redux'\nimport { thunk } from 'redux-thunk'\nimport promise from 'redux-promise-middleware'\n// import { createLogger } from 'redux-logger'\n\n\nimport reducer from 'reducers/indexNewDocEdit'\n\nconst middleware = applyMiddleware(\n  thunk,\n  promise,\n  // createLogger({}),\n)\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose\n\nexport default () => {\n  const store = createStore(reducer, composeEnhancers(middleware))\n  return store\n}\n","import * as React from 'react'\nimport { Provider } from 'react-redux'\nimport * as ActionCable from '@rails/actioncable'\n\nimport store from '../store/storeNewDocEdit'\nimport NewEditDocContainer from '../components/NewEditDoc/Container'\nconst CableApp = {\n  cable: ActionCable.createConsumer()\n}\n\nconst sessionId = Math.floor((Math.random() * 10000000000));\n\nconst NewEditDocApp = (props, _railsContext) => (\n  () => (\n    <Provider store={store()}>\n      <NewEditDocContainer cableApp={CableApp} sessionId={sessionId} {...props}/>\n    </Provider>\n  )\n)\n\nexport default NewEditDocApp\n\nexport function UnwrappedNewEditDocApp(props, _railsContext) {\n  return (\n    <Provider store={store()}>\n      <NewEditDocContainer {...props}/>\n    </Provider>\n  )\n}\n","import Swal from 'sweetalert2';\n\nconst MySwal = Swal.mixin({\n  customClass: {\n    confirmButton: 'aq-button-2 medium with-margin',\n    cancelButton: 'aq-button-2 medium with-margin outline black',\n    closeButton: 'aq-button-2 medium with-margin outline black',\n    denyButton: 'aq-button-2 medium with-margin outline black',\n  },\n  buttonsStyling: false,\n});\n\nexport default MySwal;"],"names":["analyticsModule","track","eventName","data","ahoy","window","analytics","authToken","Cookies","get","client","setConfig","baseUrl","headers","Authorization","createClient","createConfig","getAdminAssessmentQuestionSets","options","_objectSpread","url","createAdminAssessmentQuestionSet","post","getAdminAssessmentQuestions","updateBulkAdminAssessmentQuestions","patch","deleteBulkAdminAssessmentQuestions","delete","getAdminAssessmentQuestion","importAdminAssessmentQuestions","formDataBodySerializer","forkAdminAssessmentQuestion","getAdminAssessmentStatistics","getAdminInitData","getAdminLearningObjectives","getAdminReusableObjects","getAdminVersions","getCommonUser","VersionsList","itemId","itemType","itemData","_useState2","_slicedToArray","useState","versions","setVersions","_useState4","filteredVersions","setFilteredVersions","_useState6","comparisonKeys","setComparisonKeys","_useState8","hideCreateEvent","setHideCreateEvent","_useState10","hideUnmodifiedColumns","setHideUnmodifiedColumns","useEffect","async","resp","query","item_id","item_type","per","fetchVersions","res","filter","version","event","generateComparisonKeys","extractKeys","obj","prefix","Object","keys","reduce","key","fullPath","Array","isArray","push","keysSet","Set","forEach","reified_object","add","modifiedKeys","from","i","length","currentValue","getValueByPath","previousObject","previousValue","JSON","stringify","path","split","acc","undefined","React","className","type","checked","onChange","e","target","style","marginLeft","map","colSpan","textAlign","index","prevVersion","id","whodunnit","Date","created_at","toLocaleString","isLost","backgroundColor","AqButton","props","_props$disabled","disabled","_props$outline","outline","children","onClick","classNames","AssessmentDashboardModal","Component","constructor","super","handleKeyDown","this","isOpen","onClose","handleSave","handleCheckboxChange","_event$target","name","setState","_this$state","state","preserveAssessment","preservePurpose","preserveStudents","confirmMessage","confirm","proceedToSave","_this$state2","preserveDates","requestUrl","URLSearchParams","preserve_dates","preserve_assessment","preserve_purpose","preserve_students","toString","location","href","isDateRangeValid","_date_range$split$map2","date_range","date","componentDidMount","document","addEventListener","componentWillUnmount","removeEventListener","render","_this$props","_this$state3","assessmentName","assessment","replace","showAvailabilityDates","fontSize","fontWeight","padding","paddingRight","purpose","student_count","margin","float","textTransform","CohortProgressesDeliveriesTable","sortDeliveries","sortCol","sortDir","filteredData","sortByClc","sort","a","b","fa","toLowerCase","fb","sortImage","TableDownArrowImage","TableUpArrowImage","cohorts","search","cohortFiltered","rows","assessment_date","discipline","system","clinical_focus","cohortFilters","clcFractionNames","dir","applyFilters","item","matchesSystem","some","sys","includes","matchesClinicalFocus","cf","matchesSearch","learning_objective","teaching_point_url_name","case","handleFilterChange","filterName","values","setFilters","getFilteredDetails","ids","params","fetch","filter_url","json","filtersRow","multiple_cohorts","CustomMultiSelect","assessment_date_options","selectedOptions","placeholder","discipline_options","option","purpose_options","system_options","clinical_focus_options","selectedAssessmentDate","updatedssessmentDates","ad","selectedDiscipline","updatedDisciplines","d","selectedSystem","updatedSystems","s","selectedPurpose","updatedPurpose","selectedClinicalFocus","updatedClinicalFocus","getCorrectResponses","row","accuracy_fraction","accuracy_percentage","getClcStyle","percentage","display","width","currentFilterCol","value","filters","cohort","dateMatch","courseNameMatch","course_name","trim","purposeMatch","p","c","delivery_id","then","details","indexOf","getTeachingPointModal","TeachingPointModal","title","docType","documentId","teaching_point","versionId","teaching_point_publish_variant_id","currentUser","user","isAdmin","admin","currentRoleName","permissions","displayUid","uid","students_count","src","alt","wordBreak","overflowWrap","excel_fraction","Math","round","competent_fraction","unsure_fraction","novice_fraction","warning_fraction","color","document_set_document_relation_path","textDecoration","case_completed_fraction","ClcBar","cognitive_competence_score_excel","cognitive_competence_score_competent","cognitive_competence_score_unsure","cognitive_competence_score_novice","cognitive_competence_score_warning","CurricularSummaryDiscipline","updateCollapsedState","isSmallScreen","innerWidth","collapsed","handleSort","isClc","SortingCurricularSummary","isDefaultCollapse","questions_count_by_clinical_disciplines","tabIndex","onKeyPress","newSortDir","Ibubble","completed_questions","ccc_hash","students_assessed","CurricularSummaryFocus","questions_count_by_clinical_focuses","CurricularSummarySystem","questions_count_by_systems","categories","description","comparison","currentSortCol","onSort","handleSortAsc","handleSortDesc","onTouchStart","handleClickOutside","dropdownRef","current","contains","toggleDropdown","prevState","handleOptionChange","optionValue","updatedOptions","dropdownArrow","ref","position","cursor","StudentLearningProgressTable","sortProgresses","order","aIndex","concat","early_assessment_date","late_assessment_date","assessment_type","matchesEarlyAssessmentDate","date_range_for_early_assessment","matchesLateAssessmentDate","date_range_for_late_assessment","matchesAssessmentType","student_name","status","report_type","status_for_early_assessment","status_for_late_assessment","early_assessment_date_options","late_assessment_date_options","justifyContent","marginBottom","selectedAssessmentType","updatedAssessmentType","at","selectedEarlyAssessmentDate","updatedEarlyAssessmentDate","adt","selectedLateAssessmentDate","updatedLateAssessmentDate","rowSpan","height","sortColName","marginTop","student_case_log_path","progress_indicator_color_early","progress_indicator_text_early","early_rostering_progress_url","ind_result_faculty_feature","page","source","student_full_name","student_email","email","assessment_name","lpi","progress_indicator_color_late","progress_indicator_text_late","late_rostering_progress_url","case_completion_fraction","FileUploader","onSubmit","preventDefault","files","changeLoadingCountByValue","formData","FormData","append","entries","extraData","val","firstFileName","axios","fileUploadPath","ReactOnRails","response","onSuccess","alert","catch","error","console","loadingCount","label","bind","onClickWrapper","confirmTitle","confirmOKText","stopPropagation","action","customConfirmBox","message","callback","okLabel","_props$className","_props$highlighted","highlighted","_props$small","small","_props$loading","loading","loadingName","ariaLabel","GenLoadingSpinner","CollapsibleListItem","header","content","setCollapsed","handleClick","flat","GenDirectionalButtons","selectedValue","selectedDirection","onUpdate","buttons","onButtonClick","direction","FILTERS_SETTINGS","forKey","optionsKey","filterGroup","shouldHide","context","subtitle","optionsCount","GenList","createFilterOptions","filterType","documentLookupTable","arrayOptions","uniqueCount","k","getHistoryState","history","pick","setHistoryState","currentState","newPartial","newState","assign","replaceState","handleSearchChange","searchValue","currentItems","gettingNewPage","pageNumber","searchTimer","clearTimeout","setTimeout","updateSearchWithTimer","handleLOSearchChange","loSearchValue","loSearchTimer","handleSearchKeyPress","getUpdatedList","timer","updateSort","newSortValue","newSortDirection","sortValue","sortDirection","that","newKey","newSelect","newValue","currentActiveFilters","activeFilters","newActiveFilters","attr","computeStateFilterOptions","selectedDocuments","otherOptions","collectDocuments","newActiveDynamicFilters","scopeHash","fromPairs","filterSetting","documentArray","documentCountHash","elem","calculateDynamicOptions","currentFilters","selectedValueLabel","filterOptions","find","z","parseInt","substring","lastIndexOf","newFilterOptions","currentFilterDocuments","allDocumentsKeys","newClonedFilter","handleDynamicFilterChange","currentActiveDynamicFilters","activeDynamicFilters","selectedFilters","every","v","nv","handleGenericFilterChange","currentActiveGenericFilters","activeGenericFilters","newActiveGenericFilters","moreClick","getAdditionalPage","checkVisibilityForMore","getElementById","moreScrollId","elm","rect","getBoundingClientRect","viewHeight","max","documentElement","clientHeight","innerHeight","bottom","top","checkVisible","dataForQuery","notIds","not_ids","lo_search","sort_order","sort_by","itemsPerPage","per_page","filterValues","dynamic_filters","permanentFilters","where","genericFilterValues","selectedOption","activeGenericFilter","genericFilterOptions","genericFilter","genericFilterWhere","generic_filters","getPageCount","successCallback","itemCountURL","$","ajax","full_url","dataType","contentType","success","xhr","log","responseText","mergeDocumentItems","newItems","itemsMap","reducedItem","stripSearchSpans","prerequisite_document","prerequisiteDocuments","newItem","x","getPage","result","historyPersistance","uniqBy","itemsLastRecieved","isInfiniteScroll","currentItemCountMsg","moreItems","MoreItemsContainer","tableHeader","InfiniteScrollContainer","handleToggleSelectionBasketModalOpen","selectionBasketModalOpen","selectionBasketItem","docItem","paddingBottom","paddingTop","hasAnySelectedSubservientDocuments","removeIdFromSelectionBasket","removeDocumentId","selectedDocumentId","deselectAll","selected","defaults","defaultItemsPerPage","floor","random","merged","ongoingFetchController","abort","controller","AbortController","queryParams","itemsURL","signal","html","htmlAfterOneStrip","viewSelectionBasket","itemCountBox","searchBox","searchBoxForLO","sortOptions","controlPanel","modalHeader","showPrerequisiteWarning","removeAllButton","selectionBasketModal","GenModal","open","borderBottom","useSelectionBasket","filterRole","searchByLO","coursePageUpgrade","marginRight","role","defaultSortValue","defaultSortDirection","boxShadow","border","filterPanel","defaultValue","dynamicFilters","isMultiSelect","groupBy","filterSettings","Select","isMulti","listItems","pinnedItems","itemView","tableStyle","stripSearch","canRemove","otherPages","selectPanel","coursepage","displayDiv","defaultProps","variant","GenPostButton","handleSubmit","isLoading","submit","classes","method","openInNewTab","StickyTable","setStickyHeader","querySelectorAll","stickyTable","stickyRowHeights","stickyRow","stickyCell","offsetHeight","onresize","GenSortTable","dataURL","rowData","rowDataGenerator","defaultSort","table","searchWidth","exportWidth","searchKeys","exportButtonURL","infoText","extraButtons","dangerouslySetInnerHTML","__html","searchPlaceholder","exportButton","columnGroup","columnWidths","calculatedWidths","headerView","words","word","rowDatum","searchKey","compare","percent_complete","prev","next","localeCompare","rowView","noRowsMessage","GenToggleBar","toggleButtons","button","GenButton","GenToggleView","views","viewObj","activeKey","toggleControls","activeViewIndex","view","IntegrationsTags","finalDiagnosesInfo","final_diagnoses","final_diagnosis","clinicalExcellenceInfo","clinical_excellence","basicScienceDisciplineInfo","basic_science_disciplines","DocEditBarFindAndReplaceControls","userContext","editingContext","editingContextExtra","mergedData","currentMenu","menu","findScope","findText","replaceText","isFindButtonDisabled","findMatches","isReplaceButtonDisabled","closeCurrentMenu","setCurrentMenu","FIND_AND_REPLACE","batch","setFindText","handleFind","encodeURIComponent","ok","text","Error","globalSearchResultCount","match","csvFile","Blob","downloadLink","createElement","download","URL","createObjectURL","body","appendChild","click","resultCount","newFindMatches","slice","baseNode","RegExp","escapeRegExp","docReduceBlockNodes","accum","node","nodeInlineContentKeys","inlineContentKey","findRegExp","regResult","exec","start","contentKey","end","findAllSelectionsByText","firstMatch","setCurrentDocSelection","lineage","findNodeLineageByUid","scrollToLineage","addState","setReplaceText","toReplaceSelection","replaceStyledText","styleRanges","addChange","newChangeTextAndNodesChange","allMatches","addChanges","DocEditHeaderColorPicker","currentDocSelection","isColorPickerOpen","TEXT_COLOR_PICKER","currentColor","activeStylesFromChanges","args","hexCode","_React$useState2","newColor","setNewColor","selectedColor","handleChange","hex","newAddStyleChange","variantId","handleCancel","colorPicker","ChromePicker","DocEditHeaderLinkInput","link","autoFocus","newDeleteStyleChange","DocEditHeaderBooleanInput","default","htmlFor","disableMetadataEdit","newSetKeyValueChange","DocEnumTagsInput","editWindowOpen","toggleEditWindow","tags","editWindow","optionName","isChecked","join","DocEditHeaderFalseOrNumberInput","newNumber","isNaN","DocEditHeaderSelectInput","DocEditHeaderTextInput","handleBlur","inputValue","beforeSaveFunction","onBlur","DocEditHeaderTagsInput","inputTag","setTags","newTags","onMinusClick","toDeleteTag","tag","onPlusClick","uniq","keyHandlers","return","HotKeysAnyType","HotKeys","handlers","DocEditHeaderMultiSelectInput","isDisabled","onChangeValue","DocEditHeaderMetadataInputs","onlyKeys","nodeType","getSubType","nodeDefinition","nodeDefinitions","deref","editWithInputs","editWithList","generateEditWithList","editWithData","editNodeInvisible","editKey","editWithName","editWithArgs","displayName","inAllEditHeaderInputs","toInteger","DocEditHeaderEnumTagsInput","DocEditHeader","isEditing","currentlyEditingNodeLineage","editContentNodes","nodeLineage","prevNode","nodesSinceLastSection","takeRightWhile","lastElementIndex","indexOfToEditNodes","allNodesEditHeaders","indexOfToEditNode","level","editPages","nonRootActionButtons","parent","pathFromParent","findNodePathByUid","parentContentKey","displaySiblingIndex","displaySiblingCount","displaySiblingBeforeIndex","editIndex","displaySiblingAfterIndex","newMoveNodeUpChange","variantUid","newMoveNodeDownChange","deleteContentNodes","deletePages","clearCurrentDocSelection","newDeleteNodeChange","divider","editHeader","ConvertToRLOModal","rlo","mappingContext","disableFields","setName","_React$useState4","setDescription","_React$useState6","learningObjectiveId","setLearningObjectiveId","_React$useState8","nameError","setNameError","_React$useState10","currentRO","setCurrentRO","_React$useState12","errorModalOpen","setErrorModalOpen","_React$useState14","confirmationModalOpen","setConfirmationModalOpen","learningObjectiveReusableObjects","loro","reusable_object","rloClasses","shouldMapToLearningObjectives","R","CAUSAL_EXPLANATION_CLASSES","CORE_CONCEPT_CLASSES","whiteSpace","document_sets","documents","learningObjectives","lo","closeErrorModal","roData","learning_objective_id","loroToBeSaved","reusable_object_id","roId","newProposedLoros","proposedLearningObjectiveReusableObjects","setProposedLearningObjectiveReusableObjects","randRGBLvl","ActiveEditor","editor","hasLock","hasLockInSession","lockIfFree","unlockIfOwned","forceLock","isHovering","setIsHovering","extraMessage","onClickAction","onMouseOver","onMouseLeave","ActiveEditors","activeEditors","lockState","lockIsLocked","lockUserId","sessionId","lockSessionId","rloModalOpen","setRloModalOpen","setRlo","addModalOpen","setAddModalOpen","showRLOResponse","setShowRLOResponse","closeRloModal","ReusableObjectList","item_url","document_lookup_table","addModalContinue","LIST_RLO_MODAL","review_variant","change_data","roDocumentCount","siblingUid","newAddTextNodesBeforeNodeChange","newAddTextAndNodesToNodeChange","RLO_MODAL","closeAddModal","DocEditBarNodeGeneralControls","documentContext","projectContext","activeEditorsDisplay","shouldShowEditor","controls","isActiveStyle","isLinkStyle","EDIT_LINK","selection","toggleStyle","tempForType","createComments","NEW_COMMENT_THREAD","createExistingContentRlo","activeMemberName","projectProductionAssociate","ListRLOModal","featureFlag","new_landing_pages","DocEditBarTopControls","currentVersion","displayContext","versionType","determineVersionType","_versionPushButtonDat","versionPushButtonData","pushButtonName","pushButtonConfirmationText","pushButtonPath","pushButtonReplaceableVariant","pushButtonURL","displayModeSelector","displayMode","isDisplayMode","setDisplayMode","displayModes","STUDENT","UNGATED","FULL","OUTLINE","publishPermission","publishMultiUseRlo","publish","versionTypeCssClassPrefix","versionTypeShortName","setVersionId","Number","publishVersionId","ongoingMaintenaceVersionId","scheduledReviewVersionId","canUndo","undo","canRedo","redo","isActiveEditData","save","isSyncing","isAutoSaveOn","toggleAutoSave","resetState","viewMediaAssets","MEDIA_MANAGER","mediaType","trackChangesEditMode","isTrackChangesEditMode","setTrackChangesEditMode","allowedEditMode","trackChangesEditModes","EDITING_MODE","SUGGESTING_MODE","changesDisplayMode","isChangesDisplayMode","setChangesDisplayMode","versionTypes","PUBLISHED","changesDisplayModes","startCase","lowerCase","viewLinksReport","DocEditBarMediaManager","mediaContext","createHandler","deleteHandler","replaceHandler","handleNewResourcesResponse","digital_assets","asset","handleResourceReplacement","assets","old_asset","deleteWithConfirmFunction","dataset","externalId","media_type","getAssetAssociations","responseHandler","associations","deleteAssetAssociation","modelId","modelType","makeCover","setVersionCoverImage","deleteButton","deleteMediaAssets","external_identifier","mediaItems","images","distribution_url","coverImage","editMediaAssets","makeCoverButton","audios","preload","videos","captionsTrack","captionItem","captions","pop","kind","srcLang","crossOrigin","captionsUploadButton","replacing","getUploadCountByMediaType","countChange","changeUploadCountForMediaTypeByValue","pdfs","uploadingParagraph","uploadButton","createMediaAssets","GenUpdateOnBlurTextField","updateOnBlur","EditBarMediaPicker","MEDIA_PICKER","innerContent","imageAsset","makeImage","currentMenuNode","audioAsset","possibleVideos","videoAsset","caption","capn_1","capn","uri","DocEditBar","editBarSideNavChanges","savingErrors","DocEditMediaPicker","DocStyledTextEditor","_props$content","disableStyleTextEditing","independentlyEditable","_props$placeholder","isAllEmpty","inlineIrrlevantRanges","firstRange","compressRanges","range","htmlContent","DocConvertRangeInlineJSON","colorLookup","editableData","contentEditable","sharedProps","autoComplete","autoCorrect","autoCapitalize","spellCheck","draggable","suppressContentEditableWarning","DocStyledText","readOnly","_Array$from2","courseNode","caseTitle","String","startsWith","textContent","renderContent","isRangeInlineJSON","DocConvertHTML","DocCDQFeatures","cdqFeatures","cdqFeatureRows","cdqFeature","includeInAllNodes","backgroundStyleFromNode","returnPlainText","DocSectionHeader","collapsible","inactiveBool","openSiblingSectionUIDs","_props$roDocumentCoun","onHeaderClick","setFocusedBookmarkUid","logEvent","OPENED_SECTION_LOG","node_uid","onlyOneUncollapsedSection","canBeEditing","collapsedIndicator","addLOButton","isEmpty","intersection","IconCircleExpandImage","IconCircleCollapseImage","startCoverEditAction","saq_phase_1","rightHeader","cardClass","cl","cardC","cardText","upperCase","cardIcon","kebabCase","topper","TEACHING_POINT_CLASSES","icon","topperTitle","faIcon","topperCollapsedIndicator","sectionTitle","MultiUseImage","SingleUseImage","QUESTION_NODE_TYPES","DocAddNode","parentNode","localClipboard","shouldHaveSpace","createContentNodes","createPages","isNumber","addNodeMenu","ADD_NODE","currentlyEditing","possibleCurrentlyEditing","parentType","addText","objectModel","generateOptions","optionsMap","keyBy","selectOptionSummaries","insertRloToDocuments","optionTitle","optionKey","selectOptions","unshift","handleSelectChange","selectNode","typesToAdd","allowableTypes","refName","cleanedLocalClipboard","docMapAllNodes","nodeP","generateUUID","newNode","generate","onMouseDown","DocBookmark","bookmarked","disableBookmarks","isEmbeded","newBookmarkState","DocNote","noteUid","noted","deleteNote","newUid","addNote","notedNodeUid","togglePanel","NOTES","panelNodeEditStart","DocAudio","isFocusedBookmark","simple","Rollbar","warning","STATE_ACTIONS","CALLBACK_ACTIONS","handleActions","actions","newStates","mergeStates","arguments","inactive","invisible","currentTimeSegmentStart","getTime","callbacks","el","getElementsByClassName","scrollTo","scrollY","submitExam","DocButton","caseName","DocGradedFeedbackBanner","addItemToCategory","mapping","categoryUID","itemUID","newMapping","mapValues","categoryArray","itemUid","DocCategoryMatcher","answer","contentCategories","contentItems","graded","contentItemsExpanded","contentItem","categoryItemValue","pickBy","contentItemArray","categoryItemAnswer","isCorrect","contentCategory","DocConvertPlainText","newAnswer","correct","incorrect","categoryRows","gradedFeedbackBanner","isEachCorrect","DocCDQQuestion","answersSelectedCount","answers","letter","fromCharCode","answerSummary","answerEditor","answerLetter","featureIndex","feature","cdqFeatureSelections","newSetKeysValuesChange","uscs","limit","isExplicitLimit","limitExplinationText","limitExplinationTextExtra","limitExplinationDiv","selectedVsLimitView","scorePreview","score","features","compact","featureScores","questionScore","cdqFeatureName","featureAnswers","correctFeatureAnswers","correctCorrectFeatureAnswers","DocCheckbox","DocHorizontalRule","onExpandCollapseClick","toggleImageModal","DocImage","imageModalOn","openPicker","EXPANDED_MOD_MAP_LOG","onImageExternalLinkClick","OPENED_MOD_MAP_LOG","renderModalContent","imageURL","imageExternalLink","external_id","asset_path","localImageURL","PlaceholderImage","image","ReactDOM","inGallery","alignment","DocImageGallery","renderedImages","EmptyImageGalleryImage","addImageButtons","imageIndex","newAddNodeChange","flatten","zip","Carousel","cols","showDots","loop","DocLearningObjective","editButton","allowLearningObjectivesEdit","learningObjectiveUid","editGradientSmall","DocLearningObjectivesList","DocBlockNodes","shouldHaveAddNodes","DocListItem","possibleInlineContent","isTreeInlineJSON","ChangeHighlightListItemMark","blockChangeHighlight","textDecorationColor","author_id","DocList","listItem","DocMultipleChoice","gradedInfo","answerOnClick","multipleSelect","newUscs","ans","defaultChecked","gradedFeedback","isAllNo","isSingleCorrect","DocParagraph","ChangeHighlightParagraphMark","textColor","hasOwnProperty","DocRatingBar","clickValue","allActions","maxValue","stars","DocTableCell","_props$rowSpan","_props$columnSpan","columnSpan","rowRange","rowIndex","columnRange","columnIndex","newUnmergeTableCells","parentTableUID","firstColumn","newMergeTableCells","firstRow","DocTableRow","cells","cell","newAddTableRowChange","newDeleteTableRowChange","DocTable","editCells","relevantColumnIndices","editColumnIndex","addColumnAfterButton","newAddTableColumnChange","newDeleteTableColumnChange","AqInfoBubble","onMouseEnter","AqSwitch","smileImageSrcs","AqSmileRating","reverse","active","createConsumer","DocTextInput","aiAutomatedSummaryStatementSubscription","aiAutomatedSummaryStatementFeedbackRequested","aiAutomatedSummaryStatementSubscriptionTimer","aiSummaryStatementLoadingFeedback","tempAiSummaryStatementUserRating","tempAiSummaryStatementUserComment","componentWillReceiveProps","newProps","updateUSCWithTimer","updateUSC","loadSummaryStatementFeedback","aiSummaryStatementIdeal","aiSummaryStatementLoadingFeedbackStartedAt","aiSummaryStatementNeedsToAcceptInfo","summaryStatementId","onSummaryStatementFeedback","onConnected","onDisconnected","onRejected","consumer","subscriptions","create","channel","summary_statement_id","received","connected","disconnected","rejected","getFeedback","summaryStatementData","perform","createAutomatedSummaryStatementSubscription","ideal_summary_statement","user_summary_statement","aiSummaryStatementRequestFeedback","aiSummaryStatementResponseError","handleConnectionRejected","document_id","handleConnectionClosed","_this$props2","feedback","_this$props3","aiSubmitButtonActions","aiSummaryStatementResponseRecieved","aiSummaryStatementResponseTime","aiSummaryStatementFeedback","ai_response","aiSummaryStatementModelId","ai_prompt_id","aiSummaryStatementModelUsageTokens","usage_tokens","_this$props4","boxLines","characterLimit","aiAnswerCommentSection","aiSummaryStatementAllowFeedback","_this$props4$aiSummar","aiSummaryStatementUserRating","aiSummaryStatementUserComment","aiSummaryStatementUserRatingSubmitted","studentNotice","textInputArea","maxLength","aiSubmitButton","aiSwitch","renderedInput","userRating","answerCommentSection","summaryStatementModal","newRating","extraActions","wrapStateAsSetNodeKVPairActions","gap","flex","feedbackParagraph","alignItems","groupRoleDefinition","role_definition","DocVariantPlaceholder","variantableId","variantableType","DocVideo","videoPlayer","captionName","localCaptionURL","localVideoURL","PlaceholderVideo","frameBorder","allowFullScreen","allow","blockNodesContainsSelection","integrationInfo","nodeLookup","audio","categoryMatcher","cdqQuestion","checkbox","horizontalRule","imageGallery","learningObjective","learningObjectivesList","multipleChoice","numberedList","paragraph","ratingBar","regularList","section","DocSection","textInput","variantPlaceholder","video","lastNodeType","checkMultipleSelect","multipleSelectElement","contentNodes","newInactiveBool","trueOrEmptyOptions","onlyIfSectionOptions","addNode","NodeTag","onDrop","RatingStars","DocFeedbackModal","onSubmitFinish","rating1","setRating1","rating2","setRating2","comment","setComment","showConfetti","setShowConfetti","modal","Confetti","left","transform","zIndex","fontFamily","GreenCheckImage","feedback_card_1_rating_bar","feedback_card_2_rating_bar","feedback_card_1_text_input_section","handleActionsArgs","sectionRef","oldBoundingClientRect","startingState","showModal","localStorage","getItem","timeLeft","calculateTimeLeft","timeLeftInSeconds","handleShowModal","startTimer","clearInterval","timeLimit","timeUsedBeforeCurrentSegment","setInterval","tick","currentTimeInSeconds","componentWillUpdate","nextProps","nextState","componentDidUpdate","prevProps","newBoundingClientRect","scrollBy","setItem","removeItem","isFeedbackCard","child","submitted","paused","pauseExam","visibleContent","shouldDisplayIntegrationTags","integrations","isDisplayFull","nested","isUngated","onlyDisplaySectionTitles","isSummarySatementSection","test","isSaqCard","isFinishCaseCard","propsClone","enableAiSummaryStatementFeedback","questionSectionIndex","findIndex","questionSection","answerCommentIndex","idealSummaryStatement","summaryStatementTextInput","summaryStatementSubmitButtonIndex","summaryStatementSubmitButton","summaryStatementSubmitButtonActions","quizContent","quizUrl","timeOnCase","todoUrl","todoAction","quizQuestionCount","caseSummaryUrl","modalContent","finalContent","ReasoningToolPanelDeleteCell","deleteNode","ReasoningToolPanel","infoBox","isDeleting","toggleDeleting","headerButton","isAddable","wide","wrappedChildren","pluralize","singular","ReasoningToolAssessmentQuestionDataPanel","clinical_location","assessmentQuestion","patient_age","clinical_disciplines","current_use","questionData","setAssessmentQuestionData","generateSelectOptions","assessmentQuestionStatistics","selectedAssessmentQuestionStatistic","stat","assessmentQuestionEditingData","clinicalLocationOptions","assessmentQuestionClinicalLocationOptions","finalDiagnosisOptions","assessmentQuestionFinalDiagnosisOptions","patientAgeOptions","assessmentQuestionPatientAgeOptions","systemOptions","assessmentQuestionSystemOptions","clinicalFocusOptions","assessmentQuestionClinicalFocusOptions","questionUseOptions","assessmentQuestionQuestionUseOptions","clinicalDisciplineOptions","assessmentQuestionClinicalDisciplineOptions","clinicalExcellenceOptions","assessmentQuestionClinicalExcellenceOptions","isClearable","menuPortalTarget","styles","menuPortal","base","changed","cci_status","rootUid","cciStatusOptions","cciStatus","statistic","administrations_count","difficulty","discrimination","assessmentStatus","delivered","capitalLetter","charCodeAt","lowerLetter","correct_answer_index","skips_count","DetailsTab","columns","renderer","editing_document","scheduled_review_version_id","rel","question_sets","getCellValue","StatisticsTab","questionId","statistics","setStatistics","assessment_question_id","fetchStatistics","choice_a_count","choice_b_count","choice_c_count","choice_d_count","choice_e_count","choice_f_count","average_certainty_rating","updated_at","ReasoningToolBarButton","iconName","isActive","onToggle","openLink","shouldShow","onExpand","ReasoningToolBookmarkSummary","bookmarkedNode","bookmarkedNodeLineage","weakMemoizedGenerateEditingContextAllFalse","displayData","capitalize","ancestorSections","ancestor","firstLevelSectionTitle","DocPrerequisiteMetadata","_props$possible_prere","possible_prerequisite","prerequisite_document_id","updatePrerequisiteSubservient","new_prerequisite_document_id","possiblePrerequisiteDocuments","possiblePrerequisiteDocument","CaseTeachingPointsPanel","closeTeachingPointModal","selectedTeachingPoint","openTeachingPointModal","reusableObject","NewEditDocContainer","review_variant_id","first_name","firstName","last_name","lastName","defaultChangesDisplayMode","HIGHLIGHT_ALL_CHANGES","reusableObjects","styleLink","reusable_object_edited","content_title","CaseMapPanel","closeAssessmentQuestionModal","selectedAssessmentQuestion","openAssessmentQuestionModal","assessmentQuestionModal","teachingPoint","correctAnswer","mapped_learning_objective_edited","mapped_teaching_point_edited","answer_edited","editing_document_id","efficiency_breakpoints_seconds","row_hashes","row_hash","idx","learningObjectiveReusableObject","loro_data","teaching_point_edited","teachingPointObject","questions","assessment_question","body_system","question","case_summary_identifier","mapped_system","assessmentQuestionObject","isMappedSystemEdited","is_mapped_system_edited","isAssessmentQuestionEdited","question_edited","isAssessmentQuestionUsedAvailableForm","used_in_available_form","caseMapTable","AqueductTable","table_def","name_prefix","ReasoningToolFeedbackSummary","PANEL_QUESTIONS","GenGen","_props$canShow","canShow","_props$children","GenSpan","_props$canEdit","canEdit","_props$isEditing","onSpanClick","onEnterKeyPress","_props$shouldAutoFocu","shouldAutoFocus","_props$isControlled","isControlled","which","keyCode","GenParagraph","_props$rows","titles","DIAGNOSES","FINDINGS","infoBoxes","panelComponents","startNodeEdit","endNodeEdit","isLeadingDiagnosis","isDangerousDiagnosis","setIsDangerousDiagnosis","setIsLeadingDiagnosis","noteNodeLineage","noteNode","last","ReasoningToolTextListPanel","reasoningToolContext","leadingDiagnosis","_props$diagnoses","diagnoses","_props$findings","findings","_props$notes","notes","activePanel","togglePanelDeleting","panelNodeEditEnd","isPanelDeleting","activeEditNodeUid","panelData","items","addDiagnosis","updateNode","updateDiagnosis","deleteDiagnosis","addFinding","updateFinding","deleteFinding","updateNote","doc","noteNodesUids","note","noteNodeLineages","findNodesLineages","noteNodeLineagesLookup","fromEntries","attachNodesToNotes","PanelComponent","renderedItems","trackEvent","GenColorDot","dotStyle","colorArray","borderRadius","DocAuthorHeader","flexGrow","authorName","createdAt","intToDateTimeString","ReasoningToolStudentFeedback","studentFeedback","author_full_name","newDeleteStudentFeedbackChange","student_feedback_id","control","minHeight","highlighter","input","suggestions","list","DocCommentInput","textAreaValue","onAdd","onAddClick","modReturn","MentionsInput","mentionsInputStyle","onFocus","Mention","mentionStyle","trigger","users","editors","markup","onCancelClick","ReasoningToolSummaryOfEdit","summaryOfEdit","summaryOfEditLineage","newDeleteSummaryOfEditChange","summary_of_edit_id","ReasoningToolEditorsChecklistTable","authenticityHeaders","projects_checklist_item","statusText","initialState","checklistContents","renderedTable","completeButtonStyle","checklistItems","editingCompleteLink","origin","activeMemberId","project_id","nextVersionId","currentAssignmentId","splice","verticalAlign","ReasoningToolTimer","_this$props$shouldSho","isOnline","hrs","padStart","timeFormat","reasoningToolPanelsMap","AET_ADMIN_TOOLS","ASSESSMENT_QUESTION_DATA","QUESTION_DETAILS","activeTab","setActiveTab","setDetails","fetchDetails","handleTabChange","tabId","MySwal","fire","showCancelButton","confirmButtonText","isConfirmed","fontStyle","lock_status_msg","CASE_METADATA","assessmentQuestionSignatureVersion","CASE_TEACHING_POINTS","ReasoningToolCaseTeachingPointsPanel","CASE_LEARNING_OBJECTIVES","renderedLearningObjectives","editLOsButton","learningObjectiveCard","querySelector","scrollPosition","pageYOffset","behavior","CASE_MAP","ReasoningToolCaseMapPanel","SUMMARY_OF_EDITS","newSummaryOfEdit","NEW_SUMMARY_OF_EDITS","author","newAddSummaryOfEditChange","summaryOfEdits","summary_of_edits","panelChildren","change_id","STUDENT_FEEDBACK","newStudentFeedback","NEW_STUDENT_FEEDBACK","newAddStudentFeedbackChange","studentFeedbackChanges","student_feedbacks","studentFeedbackChange","EDITORS_CHECKLIST","ReasoningToolEditorsChecklist","BOOKMARKS","FEEDBACK","userState","strippedState","stripState","feedbackToAquifer","ratingBars","comments","feedback_submitted","prettyIndex","completedFeedback","size","partiallyCompleteFeedback","noFeedback","showsCancel","LABVALUES","ReasoningTool","changeData","_mergedData$disableDi","disableDiagnoses","_mergedData$disableFi","disableFindings","_mergedData$disableNo","disableNotes","_mergedData$disableBo","_mergedData$disableFe","disableFeedback","_mergedData$disableLa","disableLabValues","_mergedData$timeLimit","_mergedData$currentTi","_mergedData$timeUsedB","reasoningToolSideNavChanges","panelButtons","activeUserId","OPENED_LAB_VALUES_LOG","styleGuideId","panel","openPanel","weakMemoizedApplyAllChanges","findNode","OpenPanel","overflow","PoweredByAqueductImage","DocLearningObjectivesAddNewModal","allLearningObjectiveOptions","setIsLoading","reusableObjectId","setReusableObjectId","newLearningObjectiveText","setNewLearningObjectiveText","activeLearningObjective","learningObjectiveOptions","loOption","reusableObjectOptions","ro","createLO","addInLearningObjective","loId","newVariantablePlaceholder","newIndex","TEMP_ID","learningObjectiveActions","learningObjectiveActionsGenerator","startNewLearningObjective","setEditDataLearningObjective","createLearningObjective","DocLearningObjectivesConfirmEdit","setAllowLearningObjectivesEdit","DocModals","DocContentMappingAssessmentMap","selectedLearningObjectiveId","proposedLearningObjectiveReusableObjectId","element","selectedReusableObjectId","resetValue","handleLearningObjectiveChange","handleReusableObjectChange","clickSaveButton","hasSelectedLearningObjective","hasSelectedReusableObject","setLearningObjectiveReusableObjectId","clickResetButton","clickRestoreButton","currentLearningObjectiveReusableObjectId","currentLearningObjectiveReusableObject","learningObjectColumn","teachingPointColumn","displayResetRestoreButton","displaySaveButton","usedAvailableFormIcon","learningObjectColumnValue","teachingPointColumnValue","learningObjectiveSelect","assessmentMappingToolPermission","teachingPointSelect","proposedLearningObjectColumnValue","proposedTeachingPointColumnValue","usedAvailableForm","assessmentTitle","equalProposedLearningObjectiveReusableObject","DocContentMappingLOTPMap","addingNewLoro","handleDeleteWithAlert","confirmAlert","customUI","handleDeleteLoro","proposedLoro","handleRestoreLoro","handleSaveWithAlert","handleSaveNewLoro","handleCancelNewLoro","currentLearningObjectiveReusableObjects","concatedLoros","activeProposedLoros","editingRow","tableRows","isCurrentLoro","currentLoro","isProposedLoro","deleteCell","rowStyle","textDecorationLine","textDecorationStyle","decodeURI","existingRoIds","DocContentMappingTool","isCollapsed","collapsibleTools","doclotpEditorSideNavChanges","contentMappingChild","assessmentMappingTool","activeLoId","borderStyle","DocChangeSummary","changeSummary","offset","sendNotifications","tagger_id","generateCommentText","isNewCommentThread","change_set_id","right","newAddCommentThreadChange","changeDescription","headerButtons","changeNodeType","scrollToUid","scrollToUidAndContentKey","ADD_COMMENT_THREAD","resolveComments","lineHeight","newCloseCommentThreadChange","changeSummaryDescription","acceptTrackedChanges","newAcceptChangesChange","rejectTrackedChanges","newRejectChangesChange","firstChangeId","renderedComments","comment_id","newDeleteChangeCommentChange","commentResponseInput","respondToComments","EDIT_COMMENT","change_uid","newAddChangeCommentChange","DocChangeSummaryColumn","_props$changeSummarie","changeSummaries","offsetChangeSummary","DocROName","newNameState","setNewNameState","editRoNameModal","EDIT_RO_NAME_MODAL","updateRoName","AssessmentQuestionForm","answerExplanation","setAnswerExplanation","answer_explanation","NewEditDoc","documentSetId","openedDocumentLogArgs","document_set_id","OPENED_DOCUMENT_LOG","handleTurbolinksPageChange","mediaState","setMediaState","initializeMedia","handleMediaCreate","mediaKey","mediaKeyHelper","handleMediaDelete","handleMediaReplace","new","old","offlineModal","mediaModal","outsideClasses","insideClasses","showTopBar","docControlsWrapper","isEditor","docControls","showReasoningTool","showControlsInReadOnly","viewTopBar","renderTopBar","topBarRef","topBarHeight","setTopBarHeight","observer","ResizeObserver","observe","disconnect","BaseObserver","delegates","isRunning","startEventListeners","stop","stopEventListeners","registerDelegate","delegate","afterRegistrationInitializer","unregisterDelegate","arrayDelegate","ActiveUserObserver","notifyOnActiveUser","activeUserDidFire","BeforeInputObserver","notifyOnBeforeInput","beforeInputDidFire","CopyObserver","notifyOnCopy","notifyOnCut","notifyOnPaste","copyDidFire","cutDidFire","pasteDidFire","MouseClickObserver","notifyOnMouseDownClick","notifyOnMouseUpClick","mouseDidDownClick","mouseDidUpClick","OfflineObserver","testIfOnlineTimer","notifyOffline","notifyOnline","testIfOnline","navigator","onLine","didGoOnline","didGoOffline","XMLHttpRequest","noResponseTimer","onreadystatechange","readyState","send","SelectionObserver","notifySelectionChange","selectionDidChange","reflow","root_section","end_of_case_text","convertAllInlineNodesToRangeJSON","feedback_cards","remaining_cards","finish_case_cards","finish_case_card","release_notes_cards","learning_objectives_cards","case_synopsis_cards","references_cards","saq_cards","regular_cards","cards","_partitionByClass2","partitionByClass","_partitionByClass4","_partitionByClass6","_partition2","partition","_partitionByClass8","_partition4","_partitionByClass10","finish_case_button","finish_case_text","case_summary_button","finish_case_saq_text","difference","regular_cards_uids","card","next_uid","question_sections","submit_buttons","question_section","old_submit_buttons_actions","flatMap","submit_button","addSubmitButtonActionsToQuestionSection","continue_button","findActionOrNew","generateSetNodeKVPairAction","feedback_introduction_text","feedback_cards_uids","feedback_button","rating_bar_1","rating_bar_2","old_finish_case_button_actions","saq_card","nodes","partitionClass","old_submit_button_actions","answer_comment","action_array","new_actions","new_action","old_action","weakMemoizedReflow","memoize","documentKind","clonedJson","cloneDeep","reflowSignatureCase","undoRedoState","redoStack","deleteAtSelection","variantDataById","dataToUse","_currentDocSelection$","startUID","startIndex","deletionSelection","newSelection","startNodePath","startNodeIndex","startNode","findNodeAtPath","adjustedIndex","deleteRanges","inlineChangeHighlights","highlight","irrelevantRanges","irrelevantRagne","rangesSortByEnd","tempIndex","isInOrEndRange","backIndexUntillNotInDeletionRange","findNodeParentByUid","previousSibling","findNodeSiblingBeforeByPath","effectiveLength","blockNodeFlowContentKey","genrateNodesForAfterReturnNodeWithTextLines","lines","line","afterReturnNodeFor","nodeFlowKey","rangeInlineJSON","addTextToBlockNodeFlow","flowBlockKeys","flowInlineKeys","pasteAtSelection","dataTransfer","newStyledText","newNodes","newSelectionOffset","types","pasteTextLines","plainText","clipboardPlainTextToTextLines","getData","pasteStartText","pasteRestLines","returnAtSelection","startKey","startParentNodePath","nodeParentPathFromPath","startParentNode","newNodeOnReturn","selectionNode","findFirstInlineFlowNode","nodeInlineNotFlowContentKeys","newNodeType","listUid","listIndentation","blockKeys","childNode","replaceInObjectKeys","object","toReplace","replacement","mapKeys","upperFirst","computedGenerateDocumentActionCreators","generateReusableObjectActions","generateDocumentActions","computedGenerateVersionActionCreators","generateVariantActions","generateVersionActions","findVariantPlaceholderNodePaths","findNodesPaths","generateChangeData","weakMemoizedConvertAllToFlatFlowAndInlineRangeJSON","applyChangesToVariant","publishVariantId","useChangeData","sharedDocFunctions","dispatchProps","documentUserStateId","basicFuncs","variantActionsGenerator","documentActions","versionActions","documentUserStateActions","reasoningToolActions","mode","setExtraDataVersion","forceDocSelection","newActiveStyles","newInactiveStyles","setLocalClipboard","setIsMouseDown","isMouseDown","setNewActiveStyles","setNewInactiveStyles","setExtraDataDocument","focusedBookmarkUid","setChangeSummaries","uploadCountChange","setExtraDataWithFunctionVersion","oldUploadCount","newChanges","dispatch","addChangesDispatch","getState","setAllDataWithFunctionVariant","setAllDataWithFunctionVersion","syncData","editData","oldChangeData","newUndoRedoState","currentData","undoStack","undoCompressCount","isSuggestingMode","changeSetId","newChangeData","change","newChange","clotheChange","addChangeToDoc","_undoRedo$undo","newRedoStack","newData","newUndoStack","undoRedo","_undoRedo$undo2","returnedState","_undoRedo$redo","_undoRedo$redo2","weakMemoizedGenerateDocumentFunctions","assessmentQuestionSignatureVersionId","loadAssessmentQuestionSignatureVersionPublishVersion","loadVersion","logType","postDocumentUserLog","newVersionCoverImage","setEditDataVersion","deleteMedia","mediaName","setEditDataWithFunctionDocument","newMediaList","updateDocument","successNotice","weakMemoizedGenerateReusableObjectFunctions","newName","setEditDataDocument","keyMap","tab","shiftTab","bold","italic","underline","superscript","subscript","browserName","beforeInputObserver","activeUserObserver","copyObserver","mouseClickObserver","offlineObserver","selectionObserver","lastActiveAt","loadIfNeededDocumentUserStateTimer","versionChannelCheckInTimer","browser","Bowser","userAgent","getBrowserName","alreadyScrolled","loadResourcesIfNeeded","versionSyncMeta","startEditVersion","documentSyncMeta","loadDocument","startEditDocument","syncMeta","loadLearningObjective","variants","variantActions","loadVariant","startEditVariant","createVersionChannelSubscription","now","startNewDocumentUserState","setEditDataDocumentUserState","loadDocumentUserState","loadIfNeededDocumentUserState","scrollable_uids","selectedVersionId","cableApp","cable","container","versionChannelSubscription","version_id","session_id","checkIn","lockUserSessionId","lockRequestSessionId","lockRequestUserId","lockRequestUserSessionId","hadLock","cancelEditVersion","last_active","requestLock","unsubscribeVersionChannelSubscription","unsubscribe","getSnapshotBeforeUpdate","beforeUpdateDocSelection","snapshot","syncDOMSelection","scrollToElementWithUid","versionExtraData","prioritizedOffsetChangeSummary","prioritizeOffset","computeSpacedChangeSummaries","autoSaveInterval","checkMappedContentEditMode","mappingData","reusableObjectIds","proposedReusableObjectIds","totalReusableObjectIds","reusableObjectUids","currentlyEditingNodeLineageUids","checkEditingContentIsMappedLO","checkEditingContentIsProposeddLO","checkEditingContentIsMappedTP","isMultiUseRO","toUpperCase","inputType","insertAtSelection","addSelectionToCacheIfValid","adjustSelectionStartToIncludeListItemIfNeeded","translatedSelection","translateSelectionToFlowRange","foundFlatFlowNodes","findFlatFlowNodesWithFlowRange","newClipboardNodes","flatFlowToTreeFlow","listNodes","HIGHLIGHT_SUGGESTIONS","syncCurrentDocSelection","newDocSelection","newDocumentSelection","showingDOMRange","newDOMRange","autoSave","unsavedChanges","changesToMappedContent","allLoChanges","findNodeByUid","n","addDeleteChanges","validRoNodes","roTitleChanges","roContentChanges","unpublishedLoChanges","published_at","unpublishedRoTitleChanges","unpublishedRoContentChanges","publishMergedData","_this$props5","localLearningObjectives","publishChange","newPublishChange","HIDE_SUGGESTIONS","learningObjectivePlaceholderPaths","vpPath","findAtPath","learningObjectiveNodePathsById","loPlaceholderPath","variantType","determineVariantTypeFromVersionType","variantKey","variantKeyFromVariantVersion","learningObjectiveVariant","parentLearningObjective","learningObjectiveNodePath","appliedData","setAtPath","publishWithoutWarning","shouldUpdateBanner","_this$props6","allHTMLData","stripExtraChangeDataFields","publishUrl","publishData","changedMappedContent","should_update_banner","cover_image","mod_map_image_filename","modMapImageFilename","withCredentials","Accept","customAlertBox","reload","_this$props7","cancel","_this$props8","versionEditData","currentGroupRoleDefinition","documentUserState","reasoningToolUi","localLearningObjectiveVariants","weakMemoizedGenerateCurrentUser","addStateDocumentUserState","destroyDocumentUserState","isNotGated","weakMemoizedGenerateDisplayContext","weakMemoizedGenerateCurrentDocument","organizeMediaAssets","weakMemoizedSetBlockNodesContainsSelection","weakMemoizedAttachCurrentMenuToNode","nodePath","addDocumentUserState","editNodeWithUIDKeyValue","defaultCurrectRLO","currentActiveDocSelection","POSSIBLE_RO_CLASSES","urlParams","has","topHeight","offsetTop","weakMemoizedGenerateCurrentVersion","published","awsFolderUrl","weakMemoizedGenerateEditingContext","accessOmVersion","accessRloMaintenance","changeAuthorIds","currentDocSelectionDetail","RangeInlineJSON","activeStyles","xor","soloSelectedNodeUid","currentMenuDetail","allowedMode","isVersionEditActivated","errors","toggleStyleAtSelection","currentAssessmentQuestionEditingData","learning_objective_uid","isAssessmentQuestion","loRoId","proposedSystem","setSystem","loros","proposedClinicalFocus","setClinicalFocus","activeElement","HTMLElement","blur","tabAtSelection","shiftTabAtSelection","weakMemoizedGenerateIntegrationInfo","Beforeunload","onBeforeunload","connect","mapStateToProps","ownProps","usableDocumentActionCreators","generateUsableDocumentActions","documentProps","documentSyncDataFromState","documentSyncMetaFromState","documentExtraData","documentExtraDataFromState","usableVersionActionCreators","generateUsableVersionActions","versionProps","versionMergedDataFromState","versionSyncMetaFromState","versionEditDataFromState","versionExtraDataFromState","ONLY_PUBLISHED","learningObjectiveFromStatePlus","variantMergedDataById","variantFromStatePlus","varaintPlaceholder","dusId","currentUserProps","generateDocumentUserStateActions","documentUserStateMergedDataFromState","extraProps","versionSyncDataFromState","ui","reasoningTool","mapDispatchToProps","bindActionCreators","generateLearningObjectiveActions","reusableObjectActions","reasoningToolActionCreators","mergeProps","stateProps","objectFunctions","compiledProps","updateVersion","setEditDataVariant","updateVariant","editActionContext","newText","initalStyles","_currentDocSelection$2","nodeLineageToListItem","_editActionContext$ne","_editActionContext$ne2","item_response_id","itemResponseId","getEmbeded","skipProvider","publish_version_id","teaching_point_uid","UnwrappedNewEditDocApp","Paginator","pagination","pages","onSelect","Pagify","Context","segments","segmentize","beginPages","endPages","sidePages","Button","Segment","field","Ellipsis","previousField","nextField","PerPage","_ref","perPage","column","onPerPage","onSearch","onColumnChange","show_pagination","_objectWithoutProperties","_excluded","sortingHeader","sortable","getSortingColumns","sortingColumns","tooltipText","sortHeader","selectedColumn","editingCell","controlling_attribute","edit","editing","onActivate","onValue","property","Checkbox","AddNameAttribute","other","innards","ROSTERING_TIMING_OPTIONS","CCI_PROJECT_ROLE_OPTIONS","FLAGGED_ASSESSMENT_PROJECT_ROLE_OPTIONS","NEW_ASSESSMENT_PROJECT_ROLE_OPTIONS","TABLE_DEFS","project_editors_report_table","call","sortableHeader","formatters","visible","project_name","extraParameters","project_status_report_url","new_item_authors_report_table","transforms","student_performance_report","teaching_point_title","case_name","case_path","case_content_report_table","project_team_table","editable","deleteAction","delete_action","showEditColumns","show_edit_columns","loadOptions","editors_url","searchParams","set","editorData","handleInputChange","handleEditors","user_id","projectRoleOptions","project_type","_","extra","DragDrop","AsyncSelect","cacheOptions","defaultOptions","team_member_user_id_field_name","member_id_field_name","filterable","editor_checklist_path","edit_assignments_path","project_question_set_table","show_question_set_path","project_statuses_table","showCciProjectColumn","show_cci_project_column","showAssessmentProjectColumn","show_assessment_project_column","workflow_report_link","project_dashboard_table","projectDetailsAction","project_details_action","showAquiferAdminColumns","show_aquifer_admin_columns","report_action","edit_path","reviewable","aet_path","workflow_status_path","details_url","report_path","user_report_table","dashboard_question_set_index","exam_variation_label","dashboard_exam_variations_index","statusOptions","status_options","statusAction","status_action","status_target","exam_label","exam_variation_url","deliveriesCount","delivered_to_path","dashboard_deliveries_index","exam_items","conditionally_editable","visibleRows","gatherRows","allVisibleAreSelected","toggleSelect","scored","scorable","ev","exam_variation_deliveries_index","program_name","edit_delivery_path","rosterings_new","legacy_form","rostering_label","timing","rosterings_edit","form_editable","timing_editable","examFormOptions","exam_form_options","examFormAction","exam_form_action","restartAction","restart_action","featureFlagOn","feature_flag","visibleSelectableRows","freeze_selection","frozen_selection_tooltip","toBeWrapped","switch_key","ActionLink","explain_status_action","explain_status_switch","is_rostered","cssClass","can_change_form","formValue","exam_form","defaultFormName","default_form_name","optionPair","formName","can_restart","restart_url","document_questions","question_edit_url","case_map","searchColumn","first_column_sort","selection_tooltip","getColumns","onRow","onRowSelected","onRemove","onToggleColumn","closest","rowsToToggle","doSelect","rowIdsToToggle","compose","amountOfPages","ceil","startPage","amount","paginate","orderBy","matches","resolve","filterPlaceholder","paginated","windowTableName","window_table_name","tableHeight","table_height","selectable_columns","VisibilityToggles","PrimaryControls","Table","overflowX","rowKey","CustomFooter","row_class","row_target","min","footer","ReusableObjectDetail","openRloInReadOnlyMode","DescriptionModal","closeDescModal","CommonModal","handleClose","MultipleUsedDesc","documentRows","learning_objective_reusable_objects","learning_objectives","age_groups","clinical_locations","systems","presenting_problems","additional_diagnoses","clinical_focuses","allDocumentsLearningObjectives","loroLearningObjectives","WhereUsedModal","closeWhereUsedModal","descModalOpen","setDescModalOpen","whereUsedModalOpen","setWhereUsedModalOpen","reusableObjectListDefaults","ReusableObjectSummary","TAG_PAIRS","fromInlineJson","styledTreeNodes","includeEditStyles","string","tagData","_tagData","htmlStyle","toInlineJson","htmlString","toInlineJsonFromNodeList","DOMParser","parseFromString","childNodes","nodeList","Node","TEXT_NODE","ELEMENT_NODE","isElement","mappedType","nodeName","nodeNameToStyleName","getAttribute","rgb2hex","notEmpty","rgb","convertAllInlineNodesToHTML","docMapBlockNodes","blockNode","newInlineNode","listItemChildNode","showHideText","fromAnyType","inlineNode","tempDiv","innerHTML","innerText","fromHTML","innerFromInlineJson","treeInlineNodes","newCurrentState","childRange","newStyle","omit","childStyle","newChildStyle","rangedStyle","_rangedStyle$inlineIr","_rangedStyle$inlineCh","newStyleRanges","inlineChangeHighlightsWithColor","inlineChangeHighlight","selectionMimics","selectionMimicsAsStyles","selectionMimic","sortedStyles","sortItemsWithRangesByStart","reduceReturn","newStyleRange","newStyleRangeIndex","addNewStyleTo","TreeInlineJSON","returnValue","styleRangeStack","textLeftIndex","rangeInlineToEmptyTreeInline","letNextItem","minEnd","minBy","styleRange","currentLastNode","indexOfFirstMin","styleRangeStackWithMinsRemoved","remainingStylesSplit","styleRangeStackToStyleTree","toHTML","toPlainText","rangeInline","isString","compressStyleRanges","ADDITIONAL_DIAGNOSES","CLINICAL_PRINCIPLES","DIFFERENTIAL_DIAGNOSIS","FINAL_DIAGNOSES","PRESENTING_PROBLEMS","SCIENCES_CORE_CONCEPTS","DocType","isRequired","isSyncable","shouldInit","shouldInitWith","DocTypeMore","DTMore","DocTypeRef","DTRef","DocTypeSubObject","DTSubObject","DocTypeString","initDefault","DTString","DocTypeBoolean","DTBoolean","DocTypeInteger","DTInteger","DocTypeFloat","DocTypeArray","DTArray","DocTypeMap","DTMap","DocTypeObject","DTObject","DocTypeOr","orTypes","prototype","DTOr","DocTypeEnum","enumOptions","DTEnum","defineProperties","initWith","arg","initWithArg","withDefault","editWith","shouldEditWith","shouldEditWithArgs","initData","generateWith","isFunction","generateChild","childData","dup","clone","withDisplayName","displayNameString","merge","typeDefinition","returnTypeDefinition","instanceVariable","newObject","definitionOrReference","init","generatedObject","sectionContent","answerCommentContent","alertContent","categoryMatcherContent","dialogBoxContent","neutralTextContent","harmStatementContent","modMapCardContent","coreConceptContent","deepDiveContent","referencesContent","freeTextContent","questionContent","summaryStatementContent","listItemContent","tableCellContent","tpContent","styledChildren","_newStartWith","openListItem","tableRow","tableCell","multipleChoiceAnswer","cdq_case_content","cdq_case","subtype","gradingRules","shouldShowGrade","cdqQuestionAnswer","matchItem","modalMedia","root","sex","race","clinical_principles","sciences_core_concepts","differential_diagnosis","generic_page","care_discussion_page","case_synopsis_page","category_page","clinical_reasoning_page","excellence_in_action_page","history_page","learning_objectives_page","management_page","physical_exam_page","references_page","saq_page","teaching_page","testing_page","therapeutics_page","overview_page","clinical_feature_page","epidemiology_page","implications_for_management_page","implications_for_further_workup_page","mod_map_page","category_matcher_question","causal_explanation","deep_dive","dialog_box","free_text_question","harm_statement","mcq_diff_diagnosis","mcq_feq","mcq_multiple","mcq_no_best","mcq_single","neutral_text","references","RLOModal","summary_statement","tp_clinical_reasoning","tp_clinical_skills","tp_knowledge","tp_management","tp_principles","tp_studies","save_button","cdq_question","finish_case_page","release_notes_page","release_notes_section","content_updates","engagement_questions_updates","self_assesment_questions_updates","references_updates","custom_updates","signature_case_template","cdq_case_template","test_case_template","illness_script_template","question_vignette","question_stem","assessment_question_mcq","assessment_question_mcq_template","lead_editors","contributing_authors","overview_card","epidemiology_card","clinical_feature_card","mod_map_card","mod_map_image","synopsis_page","underlying_core_concepts","core_concept_header","implications_for_further_workup_card","implications_for_further_workup_notes","implications_for_further_workup_response","implications_for_management_card","implications_for_management_notes","implications_for_management_response","unassigned_case_template","subtypeClassifiers","nodeClassifiers","returnedClassifier","classifier","isRangeCollapsed","rangeLength","rangesDoTouch","range1","range2","rangesIntersection","rangesUnion","rangesExcept","newRanges","extendRangeAtIndexByValue","splitAndShiftRangeAtIndexByValue","shiftRange","deleteRangeAtIndexByValue","newStart","newEnd","ranges","rangesSortByStart","compressedRanges","prevRange","unionOfRanges","isRangeCoveredByRanges","coverRanges","relevantCoverRange","coverRange","rejectItemsWithEmptyRanges","withRanges","withRange","withRange1","withRange2","styleRangeCompressKey","preppedStyleRanges","styleRangesGroups","allCompressedStyleRanges","styleRangesGroup","compressedStyleRanges","prevStyleRange","unionOfStyleRanges","stylesCoveringRangeWithHideText","hideTextRanges","hideTextStyleRange","styleRangeGroup","stylesCoveringDocSelection","docSelection","_docSelection$start","_docSelection$end","endUID","endKey","endIndex","endNodePath","endNode","startStyles","endStyles","possibleRangeInlineJSON","rangeInlineJSONWithText","contentRightNDeep","rightNode","nodeRightNDeep","appendTextToNode","treeInlineNode","possibleTreeInlineJSON","deepFind","tester","prop","deepFindObjectPath","deepFindAllObjectPaths","datum","objectPaths","deepFindPath","deepFindAllPaths","indexPaths","indexPath","normalizeDocNode","toNormalizeKeys","nodeBlockContentKeys","toNormalizeChildren","denormalizeDocNode","nodesObject","rootNodeUid","ancestorUids","childNodeUid","isObject","nodeAllContentKeys","isNode","isPlainObject","is_change_summary","isNodeAtPath","findDeepestLineagePathFromPath","rootNode","nodeTester","findNodeLineage","findNodeAncestors","ancestors","findNodeAncestorsByUid","findNodePath","youngestNodePathFromPath","nodeIndexFromPath","parentPath","possibleIndex","nodeContentKeyFromPath","deleteAtPath","arrayPath","arrayLens","overAtPath","func","editNodeWithUIDKeyValueWithFunction","docReduceWithCallbackForKey","keyCallback","newAccum","toReduceKeys","toReduceChildren","childAccum","addMissingUids","toAddUidsTo","newChildren","startPath","beforeSibling","generateTableRowWithNTableCells","cellCount","rowDefinition","times","generateTableCell","addMissingCellsToTable","anyRowOrColumnMultiSpan","allRowsHaveSameNumberOfCells","rowCount","cellsToSkip","getRowCount","columnCount","getColumnCount","spansToSearch","newRow","span","inASpan","newCell","str","decisionTypes","ACCEPTED","REJECTED","CHANGE_TEXT_AND_NODES","MOVE_NODE","SET_KEYS_VALUES","ADD_STYLE","DELETE_STYLE","ADD_TABLE_ROW","DELETE_TABLE_ROW","ADD_TABLE_COLUMN","DELETE_TABLE_COLUMN","MERGE_TABLE_CELLS","UNMERGE_TABLE_CELLS","ACCEPT_CHANGES","REJECT_CHANGES","PUBLISH","CLOSE_COMMENT_THREAD","ADD_CHANGE_COMMENT","DELETE_CHANGE_COMMENT","ADD_SUMMARY_OF_EDIT","DELETE_SUMMARY_OF_EDIT","ADD_STUDENT_FEEDBACK","DELETE_STUDENT_FEEDBACK","ADD_TEXT_AND_NODES_BEFORE_NODE","ADD_TEXT_AND_NODES_TO_NODE","DELETE_NODE","MOVE_NODE_UP","MOVE_NODE_DOWN","ADD_CONTENT","DELETE_CONTENT","ADDED_NODE","DELETED_NODE","CHANGED_TEXT","ADDED_TEXT","DELETED_TEXT","ADDED_STYLE","DELETED_STYLE","HIDE_TEXT","translatedRange","secondaryTextPath","compressableChange","addDropChange","canCompressChanges","changeMetadata","styledText","insertRangeInlineJSONAtIndex","cleanedChange","appendRangedItemToRangeInlineJSON","addChangeTextAndNodesChangeToSecondary","flowPath","flowListNodesPath","listNodesToAdd","flowNodes","reduceFunc","initialValue","finalResultContainer","resultContainer","flattenedNodeLength","reduceFlatNodesWithOffset","adjustedRange","compressableNodeAddDropChange","compressableContentAddDropChange","nodesToAdd","nodesToAddData","treeFlowToFlatFlow","styledTextToAdd","startNodeOffset","findNodeOffsetFromFlattenedNodes","nodeIndex","innerIndex","newParagraph","newLength","_splitRangeInlineJSON2","beforeRangeInlineJSONAt","afterRangeInlineJSONAt","beforeInline","afterInline","concatRangeInlineJSON","oldContent","insertIndex","appendRangedItemToFlattenedNodes","obj1","obj2","safeMerge","addChangeTextAndNodesChangeToFlow","addChangeTextAndNodesChange","parent_uid","parent_key","beforeContent","parent_index","beforeLength","modifiedChange","addAddNodeChange","sibling_uid","siblingPath","sibling","parentKey","parentIndex","listIndex","addAddTextAndNodesBeforeNodeChange","parentLength","addAddTextAndNodesToNodeChange","parentStartIndex","parentEndIndex","findLastIndex","nodeLength","addDeleteNodeChange","addMoveNodeChange","addMoveNodeUpOrDownChange","addMoveNodeUpChange","addMoveNodeDownChange","changes","appendChangeToChanges","addSetKeyValuesChange","isFlowTypeAndKey","addStyleChangeToFlow","styleChanges","safeAppend","addStyleChangeToSecondary","addStyleChange","table_uid","addInEmptyRowChanges","addAddTableRowChangeToNodeWithUID","addDeleteTableRowChangeToNodeWithUID","addInEmptyColumnChanges","addAddTableColumnChange","addDeleteTableColumnChange","addTableCellSpanChangeToNodeWithUID","findAllChangePathsByChangeId","accept_change_id","reduceDoc","changePath","decision","decision_at","decision_by","markChangeAtPathAccepted","reject_change_id","markChangeAtPathRejected","changePaths","isAcceptedChange","isPublishedChange","isPublishableChange","findAllPublishableChangePaths","published_by","markChangeAtPathPublished","addAddCommentThreadChangeToFlow","commentThreadChanges","addAddCommentThreadChangeToSecondary","addAddCommentThread","comment_thread_change_id","deleteChangeWithID","parent_change_id","addCommentToChangeWithID","deleteCommentWithID","addSummaryOfEditChange","changeN","deleteSummaryOfEditChange","addStudentFeedbackChange","deleteStudentFeedbackChange","isMoveSummary","isRelevantNode","_node$addDeleteChange","releventAddDeleteChanges","isRelevantChange","highlightDeleteChange","isHighlightChange","highlightAddChange","applyBlockChangeHighlightsToNode","allRowCount","allColumnCount","originalCellSpans","rowChangesByIndex","rowChanges","columnChangesByIndex","columnChanges","cellSpanChanges","isRowRelevantByIndex","isRelevantRow","isColumnRelevantByIndex","isRelevantColumn","collapsedCellSpans","originalSpans","cellSpans","cellSpanChange","newSpan","_R$partition2","cellSpan","doSpansOverlap","spanA","spanB","overlappingSpans","restSpans","combinedSpan","unionSpans","convertCellSpanChangesToCellSpans","filterRelevantChanges","markedRows","markedCells","isRelevantCell","overlappingCellSpan","isPointInSpan","claimed","isRelevant","filteredCells","markedCell","filteredRows","markedRow","applyTableChangesToNode","applyKeyValueChangesToNode","nodeKey","_rangeInlineJSON$addD","_rangeInlineJSON$styl","_rangeInlineJSON$comm","_rangeInlineJSON$styl2","_rangeInlineJSON$inli","_rangeInlineJSON$inli2","oldStyle","newRange","applyInlineChangesToRangeInlineJson","applyInlineChangesToNode","applyEditIndexToNode","weakMemoizedApplyListIndentKeyValueChangesToNode","applyListIndentKeyValueChangesToChildren","contentListNodes","applyAllChangesToChildren","mergeChangeMaps","map1","map2","_ref2","addChangeToChangeMap","changeMap","weakMemoizedCollectAllSuggestionChanges","newChangeMap","Map","newVariantId","suggestionChanges","isOpenSuggestionChange","collectSuggestionAddDeleteChanges","key_value_changes","collectSuggestionKeyValueChanges","collectSuggestionInlineChanges","_node$rowChanges","_node$columnChanges","_node$cellSpanChanges","collectSuggestionTableChanges","collectSuggestionBlockChanges","kvChange","keys_and_values","uidToLockAround","pathToLockFrom","toLockAncestorPath","MenuTypes","convertAllTablesToFullCells","convertAllTreeFlowToFlatFlow","_treeFlowToFlatFlow","treeFlowNodes","flatFlowData","treeFlowNode","localListUid","localListIndentation","returnedListData","cleanedListNode","returnedListItemData","cleanedListItemNode","flatFlowNodes","flatFlowNode","prevTreeFlowNode","weakMemoizedNewListIfNeeded","newLastNode","weakMemoizedAppendNodeToParagraph","weakMemoizedAppendNodeToList","weakMemoizedAppendNodeToLastParagraphInList","flowRange","isBlock","isBlockChangeSet","endNodeOffset","inRangeFlatFlowNodes","newContent","weakMemoizedCombineListAndListItem","paragraphNode","otherNode","listNode","indentedListPath","findLastListOfIndentPath","lastListItemPath","findLastListItemPath","newListNode","lastListPath","findLastListPath","lastListItem","lastListItemIndex","indent","lastListIndex","remainingListPath","remainingListItemPath","lastList","lastListLastIndex","array","safeConcat","array1","array2","shiftChildRange","rangeParent","endPath","fullStartPath","fullEndPath","startFlowRootPath","flowRootPathFromPath","endFlowRootPath","baseContent","beforeStartLength","endNodeIndex","beforeEndLength","isInlineChangeSet","isBlockNode","possibleKey","possibleNodePath","possibleNode","nodeOffset","agg","restOfIndex","remainingIndex","rangedItemsName","rangedItem","offsetRangedItem","appendRangedItemToFlatNode","newRangedItem","newRangedItems","toCombineRangeIndex","rangedItemB","rangesToRemove","addRangeItem","rangedItems","rangeToRemove","beforeText","afterText","newRangeInlineJSON","possibleRangeKeys","possibleRangeKey","removeRangeFromRangeInlineJSON","previousChange","compressedChange","change1","change2","is_suggestion","compressTwoChangesIfPossible","rangeInline1","rangeInline2","shiftedRanges","possibleRange","insertLength","newBeforeRangeInlineJSON","newAfterRangeInlineJSON","isUp","unadjustedNode","nodeB","parentContent","afterSiblings","moveAfterSiblings","isDeletedOrProposedDeletedNode","nodesToMove","beforeSiblings","endOfValidSiblingIndex","listLevel","endOfValidSibling","toEndOfValidSiblingSiblings","validSiblingIndex","afterSiblingsIndex","validSiblingOffset","validSibling","afterValidSiblingSiblings","endOfValidSiblingOffset","newParentContent","unadjustedListLevel","weakMemoizedCloneAndNormalizeDoc","normalizedDocAllBlockChanges","normalizedDoc","allNodes","nodeToAccept","blockNodeKey","uidOrChange","allMoveNodeChanges","isRelevantFunctionGenerator","addChangeType","deleteChangeType","allAddChanges","relevantChanges","relevantAddChanges","relevantDeleteChanges","isRejectedChange","backgroundImage","nakedChange","is_tracking","detail","comment_thread_id","changeMetadataFields","firstAddTextChanges","allChanges","firstDeleteTextChanges","firstAddNodeChanges","firstDeleteNodeChanges","currentPrioritizedOffsetChangeSummary","arr","newCommentThread","htmlDocument","bodyElement","bodyOffset","desiredOffestChangeSummaries","nodeElement","changeSummaryElement","desiredOffset","offsetDiff","prioritizeOffsetIndex","offsetChangeSummaries","minOffset","returnChangeSummaries","newMinOffset","reduceRight","maxOffset","newMaxOffset","possibleMaxHeight","MAX_SAFE_INTEGER","colors","generateColorLookup","repeatCount","longEnoughColorList","generateReasoningToolStateFunctions","rootUID","pluralType","plural","nodeUIDs","nodeUID","update","localAudioURL","noteFunctions","generateNotesStateFunctions","findingFunctions","generateFindingsStateFunctions","diagnosisFunctions","generateDiagnosesStateFunctions","isLockedByOtherUser","isPublishedVersion","isMaintenanceVersion","canEditOM","currentUserId","stateA","stateB","assignWith","nodeDataA","nodeDataB","keyDataA","keyDataB","nodeData","valueObject","mergedNormalizedVersion","valueMap","addStateCallback","ancestorSectionsUids","tail","ancestorUid","uid_candidates","recursiveClick","getDOMRange","domSelection","getSelection","rangeCount","getDOMSelection","getRangeAt","areDOMRangesEqual","domRange1","domRange2","toCompareKeys","getDocSelection","domRange","commonIndependentlyEditableAncestor","getIndependentlyEditableAncestor","commonAncestorContainer","startBoundry","domRangeBoundryToDocSelectionBoundry","startContainer","startOffset","endBoundry","endContainer","endOffset","returnSelection","isInNoDocumentSelection","directlyInCommonIndependentlyEditableAncestor","ancestorStyledTextNode","getAncestorStyledTextNodeFromChildNode","variantid","domRangeBoundryToVariantId","domRangeToDocSelection","newWalker","createTreeWalker","NodeFilter","SHOW_ALL","nextNode","currentNode","nodeTextLength","findTextOffsetNodeInNode","contentkey","ancestorDocNode","getAncestorDocNodeFromChildNode","nextDocNodeSibling","findNextDocNodeSibling","previousDocNodeSibling","findPreviousDocNodeSibling","findDeepestDocNodeDirectlyInIndependentlyEditableNode","areDocSelectionsEqual","selection1","selection2","isInOneInline","isInOneNode","isInlineBoundry","boundry","newCollapsedDocSelection","newDocSelectionBoundry","collapseDocSelectionToStart","shiftDocSelectionBy","shiftCount","shiftDocSelectionBoundryBy","shiftDocSelectionStartBy","docSelectionBoundry","setDocSelection","docSelectionToDOMRange","removeAllRanges","addRange","setDOMRange","getDOMBoundryFromDocSelectionBoundry","createRange","setStart","setEnd","docBoundry","replaceAll","textOffset","currentOffset","newOffset","findNodeAndOffsetFromTextOffset","isNodeDocNode","isNodeIndpendentlyEditable","isIndependentlyEditable","isStyledText","isNodeStyledText","classList","isNoDocumentSelection","isBlockNodes","isNodeBlockNodes","independentlyEditableNode","currentDeepest","nextSibling","freeze","ONGOING_MAINTENANCE","SCHEDULED_REVIEW","OTHER","variantTypes","MAINTENANCE","REVIEW","versionID","maintenanceVariantId","editVersionId","reviewVariantId","log_type","document_user_log","updateProgress","answerChoices","truncate","specialValue","getSpecialCellValue","formatDate","formatLabel","img","choices","resolveNestedValue","formatCellValue","stringValue","truncateWithTooltip","format","parsedDate","YYYY","getFullYear","MM","getMonth","DD","getDate","HH","getHours","mm","getMinutes","ss","getSeconds","performance","r","BASE_ASSET_ENDPOINT","ASSET_TYPES","pdf","defaultHandler","apiRequest","model_id","model_type","syncAssets","file_ext","vtt","srt","model","transformedModel","defaultInTransformer","checkAndFilterAssets","digitalAssets","da","progress","progressBar","remove","time_on_case","intTime","h","m","month","day","year","dd","intTimeToHHMMSS","secondsDiff","hours","minutes","seconds","already_url","hostname","subdomain","splitHostname","protocol","port","escapeHtml","unsafe","truncated","char","itemKey","endpoint","generateActions","editDataMergeFunction","startNewItem","cancelNewDocumentUserState","cancelNewItem","startEditDocumentUserState","startEditItem","cancelEditDocumentUserState","cancelEditItem","setAllDataWithFunctionDocumentUserState","setAllDataWithFunctionItem","setSyncDataDocumentUserState","setSyncDataItem","setSyncDataWithFunctionDocumentUserState","setSyncDataWithFunctionItem","setEditDataItem","setEditDataWithFunctionDocumentUserState","setEditDataWithFunctionItem","resetEditDataDocumentUserState","resetEditDataItem","setExtraDataDocumentUserState","setExtraDataItem","setExtraDataWithFunctionDocumentUserState","setExtraDataWithFunctionItem","resetExtraDataDocumentUserState","resetExtraDataItem","loadItem","createDocumentUserState","createItem","updateDocumentUserState","updateItem","destroyItem","loadIfNeededItem","documentUserStateFromState","itemFromState","documentUserStateSyncDataFromState","itemSyncDataFromState","documentUserStateSyncMetaFromState","itemSyncMetaFromState","documentUserStateEditDataFromState","itemEditDataFromState","itemMergedDataFromState","documentUserStateExtraDataFromState","itemExtraDataFromState","mergedDocumentUserState","editDocumentUserState","mergedState","editState","updatedAt","documentUserStateCollectionReducer","generateReducer","dusOld","dusNew","valueDataOld","valueDataNew","startNewDocument","cancelNewDocument","cancelEditDocument","setAllDataWithFunctionDocument","setSyncDataDocument","setSyncDataWithFunctionDocument","resetEditDataDocument","setExtraDataWithFunctionDocument","resetExtraDataDocument","createDocument","destroyDocument","loadIfNeededDocument","documentFromState","documentEditDataFromState","documentMergedDataFromState","documentCollectionReducer","LIST_LOAD","SEED","LOAD","CREATE","UPDATE","DESTROY","NEW_START","NEW_CANCEL","EDIT_START","EDIT_CANCEL","SET_ALL_DATA_WITH_FUNCTION","SET_SYNC_DATA_FIELDS","SET_SYNC_DATA_WITH_FUNCTION","SET_EDIT_DATA_FIELDS","SET_EDIT_DATA_WITH_FUNCTION","RESET_EDIT_DATA","SET_EXTRA_DATA_FIELDS","SET_EXTRA_DATA_WITH_FUNCTION","RESET_EXTRA_DATA","camelCase","initialCollectionState","initialItemState","itemReducer","_options$inTransforme2","inTransformer","keepKeysOnUpdateFulfilled","meta","editSinceStartOfLastSync","payload","lastSyncedAt","fn","fields","newItemState","defaultOutTransformer","snakeCase","tempId","outTransformer","afterDispatch","createItemWithData","updateItemWithData","shouldLoadItem","itemFromStatePlus","mergeFunction","_options$inTransforme3","_options$inTransforme","_options$itemType","collectionReducer","_options$outTransform","setAllDataWithFunction","setSyncDataWithFunction","setEditDataWithFunction","setExtraDataWithFunction","cancelNewLearningObjective","startEditLearningObjective","cancelEditLearningObjective","setAllDataWithFunctionLearningObjective","setSyncDataLearningObjective","setSyncDataWithFunctionLearningObjective","setEditDataWithFunctionLearningObjective","resetEditDataLearningObjective","setExtraDataLearningObjective","setExtraDataWithFunctionLearningObjective","resetExtraDataLearningObjective","updateLearningObjective","destroyLearningObjective","loadIfNeededLearningObjective","learningObjectiveFromState","learningObjectiveSyncDataFromState","learningObjectiveSyncMetaFromState","learningObjectiveEditDataFromState","learningObjectiveMergedDataFromState","learningObjectiveExtraDataFromState","learningObjectiveCollectionReducer","startNewReusableObject","cancelNewReusableObject","startEditReusableObject","cancelEditReusableObject","setAllDataWithFunctionReusableObject","setSyncDataReusableObject","setSyncDataWithFunctionReusableObject","setEditDataReusableObject","setEditDataWithFunctionReusableObject","resetEditDataReusableObject","setExtraDataReusableObject","setExtraDataWithFunctionReusableObject","resetExtraDataReusableObject","loadReusableObject","createReusableObject","updateReusableObject","destroyReusableObject","loadIfNeededReusableObject","reusableObjectFromState","reusableObjectSyncDataFromState","reusableObjectSyncMetaFromState","reusableObjectEditDataFromState","reusableObjectMergedDataFromState","reusableObjectExtraDataFromState","reusableObjectCollectionReducer","TOGGLE_PANEL","OPEN_PANEL","TOGGLE_PANEL_DELETING","PANEL_NODE_EDIT_START","PANEL_NODE_EDIT_END","RESET","reducer","panelType","nodeUid","reset","startNewVariant","cancelNewVariant","cancelEditVariant","setSyncDataVariant","setSyncDataWithFunctionVariant","setEditDataWithFunctionVariant","resetEditDataVariant","setExtraDataVariant","setExtraDataWithFunctionVariant","resetExtraDataVariant","createVariant","destroyVariant","loadIfNeededVariant","variantFromState","variantSyncDataFromState","variantSyncMetaFromState","variantEditDataFromState","variantMergedDataFromState","variantExtraDataFromState","variantCollectionReducer","transformedData","startNewVersion","cancelNewVersion","setSyncDataVersion","setSyncDataWithFunctionVersion","setEditDataWithFunctionVersion","resetEditDataVersion","resetExtraDataVersion","createVersion","destroyVersion","loadIfNeededVersion","versionFromState","versionCollectionReducer","SET_KEYS","combineReducers","documentUserStates","docSettings","middleware","applyMiddleware","thunk","promise","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","createStore","CableApp","ActionCable","NewEditDocApp","_railsContext","Provider","store","Swal","customClass","confirmButton","cancelButton","closeButton","denyButton","buttonsStyling"],"sourceRoot":""}